Why: svc.sh grew into a three-kind service manager with database operations, but its only documentation was a flat --help wall of text; the user asked for a complete usage document and a better help experience. Evidence: - docs/svc.md: 14-section manual (prerequisites, quick start, concepts and directory layout, per-command reference for service/global/db commands, deploy sources, database operations handbook, configuration layering, registry fields and event types, safety boundaries, exit codes, troubleshooting table, recipe index) — every claim cross-checked against the implementation from the previous two rounds. - Help layering: no-args and -h print a one-screen overview; --help renders the header comment reorganized into 7 labeled sections; the new "help [topic]" command deep-dives eight topics (model, deploy, lifecycle, db, dbops, config, examples, safety); usage errors now show the short overview plus a pointer to --help / help / docs/svc.md. All topics verified to render; unknown topic exits 2. - No runtime behavior changed: end-to-end db lifecycle regression (create → start → backup → status → stop → rm --purge) passes after the refactor. - Makefile help and README's documentation section point to docs/svc.md. Impact: Documentation-only plus display-layer changes; command semantics, exit codes and file formats are untouched. Maintenance note: behavior changes must now update both --help and docs/svc.md. Refs: .task/feature-svc-docs-help.md(任务卡=PR 描述)
134 lines
6.2 KiB
Makefile
134 lines
6.2 KiB
Makefile
# Agent-System-Dev 顶层编排
|
||
# 部署约束:非容器化;默认产物为单二进制(modules/backend,内嵌前端与嵌入式存储)。
|
||
|
||
SHELL := /bin/bash
|
||
CORE := modules/core
|
||
BACKEND := modules/backend
|
||
FRONTEND := modules/frontend
|
||
UI := modules/ui
|
||
BIN := bin/agent-system
|
||
EMBED_DIR := $(BACKEND)/web/dist
|
||
PLUGINS := plugins
|
||
# 版本溯源(release-operations:运行制品须可对上固定组合)。无 tag 时 --always 给短 SHA。
|
||
COMBO := core=$(shell git -C $(CORE) rev-parse --short HEAD 2>/dev/null)+backend=$(shell git -C $(BACKEND) rev-parse --short HEAD 2>/dev/null)+frontend=$(shell git -C $(FRONTEND) rev-parse --short HEAD 2>/dev/null)+ui=$(shell git -C $(UI) rev-parse --short HEAD 2>/dev/null)+agentcmd=$(shell git -C deps/agent-command rev-parse --short HEAD 2>/dev/null)+documents=$(shell git -C modules/documents rev-parse --short HEAD 2>/dev/null)
|
||
VERSION := $(shell git describe --tags --always --dirty 2>/dev/null)+$(COMBO)
|
||
|
||
.PHONY: help sync status build frontend svc svc-list svc-commits svc-history test-backend test-frontend test-ui test-core test-agentcmd dev pin clean setup precheck task-start task-sync task-close task-finish version
|
||
|
||
version:
|
||
@echo "agent-system $(VERSION)"
|
||
|
||
TASK := scripts/task.sh
|
||
|
||
setup:
|
||
git config core.hooksPath scripts/hooks
|
||
chmod +x scripts/hooks/pre-commit scripts/hooks/post-merge scripts/task.sh
|
||
@echo "OK: pre-commit/post-merge 钩子已启用(core.hooksPath=scripts/hooks)"
|
||
|
||
precheck:
|
||
@bash $(TASK) precheck
|
||
|
||
task-start:
|
||
@if [ -z "$(NAME)" ]; then echo "usage: make task-start NAME=feature/<slug>"; exit 2; fi
|
||
@bash $(TASK) start "$(NAME)"
|
||
|
||
task-sync:
|
||
@bash $(TASK) sync
|
||
|
||
task-close:
|
||
@bash $(TASK) close $(FOLD)
|
||
|
||
task-finish:
|
||
@bash $(TASK) finish $(ABANDON)
|
||
|
||
help:
|
||
@echo "make sync 物化全部 submodule(递归)"
|
||
@echo "make build 构建单二进制 bin/agent-system(契约同步→前端构建→embed→静态链接)"
|
||
@echo "make test 全量测试(core + backend + frontend)"
|
||
@echo "make svc 服务级操作:make svc ENV=<name> [ACTION=deploy|start|stop|restart|status|logs] [ARGS='--from dev@<sha> --tag ...']"
|
||
@echo "make svc-list 服务总览:make svc-list [ARGS='--tag core'];数据库运维:scripts/svc.sh db create|dsn|backup|backups|restore|clone|copy|ls|set"
|
||
@echo "make svc-commits 列出可部署提交:make svc-commits SRC=dev|release [N=20]"
|
||
@echo "make svc-history 事件历史:make svc-history [ENV] [N=20](完整文档:docs/svc.md)"
|
||
@echo "make dev 开发模式说明(前后端分离热更新)"
|
||
@echo "make pin 推进 submodule 指针到各仓远端 main(提交前须 make test 通过)"
|
||
@echo "make status submodule 状态"
|
||
|
||
sync:
|
||
git submodule update --init --recursive
|
||
|
||
status:
|
||
@git submodule status
|
||
|
||
# 契约同步:Core 的 TS 类型镜像到前端与 UI 组件库(Core 为权威,单一来源)。
|
||
contracts:
|
||
cp $(CORE)/ts/types.ts $(FRONTEND)/src/contracts.ts.tmp
|
||
{ echo "// 从 Agent-System-Core ts/types.ts 同步(make contracts 生成;Core 为权威)。"; cat $(FRONTEND)/src/contracts.ts.tmp; } > $(FRONTEND)/src/contracts.ts
|
||
rm $(FRONTEND)/src/contracts.ts.tmp
|
||
cp $(CORE)/ts/types.ts $(UI)/src/contracts.ts.tmp
|
||
{ echo "// 从 Agent-System-Core ts/types.ts 同步(make contracts 生成;Core 为权威)。"; cat $(UI)/src/contracts.ts.tmp; } > $(UI)/src/contracts.ts
|
||
rm $(UI)/src/contracts.ts.tmp
|
||
|
||
frontend: contracts
|
||
cd $(UI) && npm ci --no-fund --no-audit
|
||
cd $(FRONTEND) && npm ci --no-fund --no-audit && npm run build
|
||
rm -rf $(EMBED_DIR) && mkdir -p $(EMBED_DIR) && cp -r $(FRONTEND)/dist/* $(EMBED_DIR)/ && touch $(EMBED_DIR)/.gitkeep
|
||
|
||
build: frontend
|
||
cd $(BACKEND) && CGO_ENABLED=0 go build -trimpath -ldflags "-s -w -X main.version=$(VERSION)" -o ../../$(BIN) ./cmd/agent-system
|
||
@echo "OK: $(BIN)(版本 $(VERSION);随附插件目录 $(PLUGINS)/)"
|
||
|
||
test-core:
|
||
cd $(CORE) && go test ./...
|
||
|
||
test-backend:
|
||
cd $(BACKEND) && go test ./...
|
||
|
||
test-frontend: contracts
|
||
cd $(FRONTEND) && npm ci --no-fund --no-audit && npx vitest run
|
||
|
||
test-ui: contracts
|
||
cd $(UI) && npm ci --no-fund --no-audit && npx tsc --noEmit && npx vitest run
|
||
|
||
test-agentcmd:
|
||
cd deps/agent-command && go vet ./... && go test -count=1 ./...
|
||
|
||
test: test-core test-backend test-frontend test-ui test-agentcmd
|
||
|
||
# 运行演示(mock 模式):单二进制 + 示例插件 + 嵌入式存储,浏览器 http://127.0.0.1:8787
|
||
# 环境服务管理(scripts/svc.sh):deploy = 停旧 → 构建 → 启动;dev/prod 相互隔离。
|
||
svc:
|
||
@test -n "$(ENV)" || (echo "用法:make svc ENV=<name> [ACTION=deploy|stop|start|restart|status|logs] [ARGS='--port 9000 --tag ...']"; exit 2)
|
||
scripts/svc.sh $(ENV) $(ACTION) $(ARGS)
|
||
|
||
svc-list:
|
||
scripts/svc.sh list $(ARGS)
|
||
|
||
svc-commits:
|
||
@test -n "$(SRC)" || (echo "用法:make svc-commits SRC=dev|release [N=20]"; exit 2)
|
||
scripts/svc.sh commits $(SRC) $(N)
|
||
|
||
svc-history:
|
||
scripts/svc.sh history $(ENV) $(N)
|
||
|
||
demo: build
|
||
$(BIN) serve --addr 127.0.0.1:8787 --data ./data --plugins $(PLUGINS) --mock
|
||
|
||
dev:
|
||
@echo "开发模式(原生,非容器):"
|
||
@echo " 1. make sync && make contracts"
|
||
@echo " 2. 终端 A:cd $(BACKEND) && go run ./cmd/agent-system serve --addr 127.0.0.1:8787 --data ./data --plugins ../$(PLUGINS)"
|
||
@echo " 3. 终端 B:cd $(FRONTEND) && npm ci && npm run dev # Vite 代理到 8787"
|
||
@echo " 4. mock 演示:设置→运行时→演示模式;或终端 A 加 --mock"
|
||
|
||
# 推进指针(多仓纪律:先验证后固定)。
|
||
pin:
|
||
@for m in modules/core modules/backend modules/frontend modules/ui modules/documents deps/agent-native deps/agent-squad deps/agent-intent deps/error-code-system deps/logging-system deps/development-guidelines deps/agent-command; do \
|
||
(git -C $$m fetch -q origin && git -C $$m checkout -q origin/main) || echo "skip $$m"; \
|
||
done
|
||
@cd $(BACKEND)/deps/agent-system-core && git fetch -q origin && git checkout -q origin/main || true
|
||
@cd $(BACKEND)/deps/agent-command && git fetch -q origin && git checkout -q origin/main || true
|
||
@echo "submodule 指针已推进;请 make test 后 git add .gitmodules modules deps && git commit"
|
||
|
||
clean:
|
||
rm -rf $(BIN) $(FRONTEND)/dist $(FRONTEND)/node_modules $(UI)/node_modules data
|