diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f2e8a82 --- /dev/null +++ b/Makefile @@ -0,0 +1,86 @@ +# Flynn Makefile +# Self-hosted personal AI agent + +.PHONY: build dev start stop restart status logs tui tui-fs tui-dev test test-run lint typecheck help daemon-start daemon-stop daemon-restart daemon-status daemon-logs enable disable + +# Default target +.DEFAULT_GOAL := help + +# Build and development +build: ## Compile TypeScript to dist/ + pnpm build + +dev: ## Run daemon with watch mode + pnpm dev + +start: ## Start production build (foreground) + node dist/cli/index.js start + +# Systemd daemon management +daemon-start: ## Start the systemd service + systemctl --user start flynn.service + @echo "Flynn daemon started" + +daemon-stop: ## Stop the systemd service + systemctl --user stop flynn.service + @echo "Flynn daemon stopped" + +daemon-restart: ## Restart the systemd service + systemctl --user restart flynn.service + @echo "Flynn daemon restarted" + +daemon-status: ## Check systemd service status + systemctl --user status flynn.service + +daemon-logs: ## Show systemd service logs + journalctl --user -u flynn.service -f + +enable: ## Enable Flynn to start on boot + systemctl --user enable flynn.service + @echo "Flynn enabled to start on boot" + +disable: ## Disable Flynn from starting on boot + systemctl --user disable flynn.service + @echo "Flynn disabled from starting on boot" + +# Aliases for convenience +stop: daemon-stop ## Alias for daemon-stop +restart: daemon-restart ## Alias for daemon-restart +status: daemon-status ## Alias for daemon-status +logs: daemon-logs ## Alias for daemon-logs + +# TUI commands +tui: ## Run TUI in minimal mode (readline) + pnpm tui + +tui-fs: ## Run TUI in fullscreen mode (React/Ink) + pnpm tui:fs + +tui-dev: ## Run TUI with watch mode + pnpm tui:dev + +# Testing +test: ## Run tests in watch mode + pnpm test + +test-run: ## Run tests once (no watch) + pnpm test:run + +# Quality checks +lint: ## Run ESLint + pnpm lint + +typecheck: ## Run TypeScript compiler (no emit) + pnpm typecheck + +check: lint typecheck test-run ## Run all checks (lint, typecheck, test) + +# Dependencies +install: ## Install dependencies + pnpm install + +# Utilities +help: ## Show this help message + @echo "Flynn - Self-hosted personal AI agent" + @echo "" + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}'