kenaz 0.3.7 → 0.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/core/.claude/commands/Ansuz.md +7 -1
  2. package/core/.claude/hooks/autonomy-stop.js +20 -0
  3. package/core/.claude/hooks/turn-context.js +7 -2
  4. package/core/.claude/settings.json +10 -0
  5. package/core/.collaboration/core/reconcile.js +3 -1
  6. package/core/.collaboration/core/task-2404-reconcile.test.js +8 -0
  7. package/core/.formation/bifrost/openai/codex-hook-shim.js +12 -1
  8. package/core/.formation/bifrost/openai/codex-hook-shim.test.js +1 -1
  9. package/core/.formation/tools/__tests__/dispatch-model.test.js +58 -0
  10. package/core/.formation/tools/dispatch-model.js +91 -0
  11. package/core/.formation/tools/dispatch.js +8 -6
  12. package/core/.specialist/Ansuz/RULES.md +36 -14
  13. package/core/.specialist/Ansuz/elixir.yaml +7 -5
  14. package/core/.specialist/tools/__tests__/autonomy.test.js +91 -0
  15. package/core/.specialist/tools/__tests__/rea-detect.test.js +71 -0
  16. package/core/.specialist/tools/ansuz-boot-fast.js +1 -0
  17. package/core/.specialist/tools/autonomy.js +88 -0
  18. package/core/.specialist/tools/rea-detect.js +67 -0
  19. package/core/KENAZ_CORE_VERSION +1 -1
  20. package/core/plugins/kenaz/commands/Ansuz.md +7 -1
  21. package/core/plugins/kenaz/hooks/hooks.json +2 -1
  22. package/core/plugins/kenaz/hooks/kenaz-hook.js +1 -0
  23. package/core/plugins/kenaz/scripts/kenaz.test.js +1 -1
  24. package/core/plugins/kenaz/scripts/ygg.js +10 -2
  25. package/core/plugins/kenaz-peer/hooks/register.test.ts +52 -0
  26. package/core/plugins/kenaz-peer/hooks/register.ts +31 -1
  27. package/lib/cli.js +59 -1
  28. package/lib/cli.test.js +26 -0
  29. package/package.json +6 -6
  30. package/core/k-cli/README.md +0 -330
  31. package/core/k-cli/package.json +0 -21
  32. package/core/k-cli/templates/k-cli.md +0 -91
  33. package/core/k-cli/test/TEST_SPEC.md +0 -117
  34. package/core/k-cli/test/run.sh +0 -403
@@ -1,330 +0,0 @@
1
- # k-cli
2
-
3
- KenazAI 的獨立 CLI 工具 — 無需 Dashboard,直接操作 Specialist、Task、Dispatch、Project 等核心功能。
4
-
5
- ## 快速開始
6
-
7
- ```bash
8
- cd k-cli && npm install && npm run build
9
-
10
- # 1. 確認 CLI 可用
11
- k-cli ping
12
-
13
- # 2. 查看專案狀態
14
- k-cli project status
15
-
16
- # 3. 若尚未初始化(status 顯示 mode: unknown)→ 初始化(core-path 自動偵測)
17
- k-cli project initialize
18
-
19
- # 4. 查看使用指南(初始化時自動產生)
20
- cat k-cli.md
21
- ```
22
-
23
- **建議流程**:`ping` → `status` → (未初始化則 `initialize`)→ 正常使用
24
-
25
- ## 定位
26
-
27
- | 比較 | Dashboard MCP (Rust) | mcp-server (Node,已於 TASK_2027 移除) | **k-cli** |
28
- |------|---------------------|-------------------|-------------|
29
- | 運行方式 | HTTP server(需 Dashboard) | stdio MCP server | **獨立 CLI** |
30
- | 依賴 | Tauri app 運行中 | MCP client 呼叫 | **無依賴,直接執行** |
31
- | 用途 | Claude Code 透過 `.mcp.json` 使用 | 已移除(TASK_2027) | **人類 + 腳本直接操作** |
32
-
33
- ## 核心價值
34
-
35
- - **零依賴**:不需要 Dashboard 運行,直接呼叫底層工具
36
- - **spawnClaude 架構**:寫入操作透過 `spawnClaude` 直接啟動 Claude CLI
37
- - **dry-run 支援**:所有寫入命令支援 `--dry-run`,驗證但不執行
38
- - **可腳本化**:所有輸出支援 `--json` 格式,方便 pipe 和自動化
39
- - **明確偵測**:不猜測、不 fallback、不向上找目錄,偵測失敗就是失敗
40
-
41
- ## 設計原則
42
-
43
- ```
44
- 讀取操作 → 直接呼叫底層工具(快速、無副作用)
45
- 寫入操作 → spawnClaude 啟動 Claude CLI(Specialist 執行 / Ansuz 決策)
46
- ```
47
-
48
- | 操作類型 | 命令 | 執行方式 |
49
- |---------|------|---------|
50
- | 讀取 | specialist list, task list, task get, project status... | 直接呼叫 |
51
- | 寫入(任務) | task create | → spawnClaude + Ansuz(分析需求 → Amelia 審查 role → 建立) |
52
- | 刪除 | task delete | → 直接 rm 檔案 |
53
- | 執行 | specialist run | → spawnClaude + 指定 Specialist |
54
-
55
- ## 命令一覽
56
-
57
- ```
58
- k-cli <command> [subcommand] [options]
59
- ```
60
-
61
- ### Specialist 命令
62
-
63
- | 命令 | 說明 | 執行方式 |
64
- |------|------|---------|
65
- | `k-cli specialist list` | 列出所有 Specialist(名稱 + prompt) | 直接讀取 |
66
- | `k-cli specialist run` | 啟動 Specialist 執行任務 | spawnClaude |
67
-
68
- ```bash
69
- # 列出所有 Specialist 和 prompt
70
- k-cli specialist list
71
-
72
- # 啟動 Ansuz(positional args 作為 user prompt)
73
- k-cli specialist run --agent Ansuz 幫我檢查 git 狀態
74
-
75
- # 啟動 Amelia 協調多 Agent
76
- k-cli specialist run --agent Amelia 執行 TASK_340
77
-
78
- # dry-run:顯示會做什麼,不實際啟動
79
- k-cli specialist run --agent Ansuz 分析需求 --dry-run
80
- ```
81
-
82
- ### Task 命令
83
-
84
- | 命令 | 說明 | 執行方式 |
85
- |------|------|---------|
86
- | `k-cli task list` | 列出任務 | 直接讀取 |
87
- | `k-cli task get <id>` | 取得任務詳情 | 直接讀取 |
88
- | `k-cli task create <描述>` | 建立新任務(自然語言,人類用) | → spawnClaude + Ansuz + Amelia |
89
- | `k-cli task submit --title ... ` | 建立新任務(結構化欄位,process/script 用,TASK_2147) | 直接呼叫 task-api.js,無 Claude 依賴 |
90
- | `k-cli task delete <id>` | 刪除任務 | → 直接 rm 檔案 |
91
-
92
- ```bash
93
- # 讀取(直接)
94
- k-cli task list --status backlog
95
- k-cli task get TASK_340
96
-
97
- # 建立任務(語意描述 → Ansuz 分析 → Amelia 審查 role → 建立高品質任務)
98
- k-cli task create 幫我創建 hello_world.js 輸出 Hello World
99
- k-cli task create 實作登入 API 支援 OAuth2 --dry-run
100
-
101
- # 刪除(直接 rm 檔案,不限狀態)
102
- k-cli task delete TASK_340
103
- k-cli task delete TASK_340 --dry-run
104
- ```
105
-
106
- #### task submit(TASK_2147:子專案 process 用,無 Claude 依賴)
107
-
108
- `task create` 的輕量版:不分析自然語言、不呼叫 Ansuz/Amelia,直接把旗標轉成
109
- `task-api.js create` 呼叫。給已經知道自己要建什麼卡的 process/script 用(例如子專案裡的
110
- in-app agent 把一個改良提案變成任務)。core 解析沿用 `resolveProject()`(讀
111
- `.kenaz/project.yaml`),呼叫端不需要設定 `KENAZ_SOURCE_DIR`。
112
-
113
- ```bash
114
- k-cli task submit \
115
- --title "標題" --description "描述" --priority P3 --role developer \
116
- --requirements "r1" --requirements "r2" --requirements "r3" \
117
- --acceptance-criteria "a1" --acceptance-criteria "a2" --acceptance-criteria "a3" \
118
- --technical-notes "n1" --technical-notes "n2" \
119
- --origin "my-sub-project-agent" \
120
- --project-path /path/to/subproject --json
121
- ```
122
-
123
- - 任務一律落在 `backlog/`(正常 triage),**不會 auto-dispatch**。
124
- - `--origin`(= `--source`)未指定時,預設為子專案名稱;用來標記任務來源方便追溯。
125
- - 品質門檻(requirements/acceptance_criteria ≥ 3、technical_notes ≥ 2)與 `task create` 相同,不放寬。
126
- - `--json` 會在建立後自動 `task get` 回完整任務 JSON(含 `id`/`source`/`status`),方便腳本直接讀回結果。
127
- - `--dry-run` 顯示會執行的 task-api.js 指令,不實際建立。
128
-
129
- #### task create 流程
130
-
131
- ```
132
- k-cli task create "描述"
133
- │
134
- ├─ k-cli 預先組裝 Ansuz + Amelia prompts(並行)
135
- │
136
- └→ spawnClaude(Ansuz) [allowedTools 含 Agent]
137
- ├─ Step 1: 分析需求(理解目標、搜尋相關代碼)
138
- ├─ Step 2: 整理任務草稿(結構化所有欄位)
139
- ├─ Step 3: Agent tool → Amelia subagent 審查 + 判斷 role
140
- ├─ Step 4: 採納建議 → task-api.js create(含正確 role)
141
- └─ Step 5: 輸出結果摘要
142
- ```
143
-
144
- > Amelia 審查透過 Claude 原生 Agent tool(subagent)執行,避免 nested CLI spawn。
145
-
146
- ### Dispatch 命令
147
-
148
- | 命令 | 說明 | 執行方式 |
149
- |------|------|---------|
150
- | `k-cli dispatch status <taskId>` | 查看 dispatch 狀態 | 直接讀取 |
151
-
152
- ```bash
153
- # 查看狀態(自動搜尋 .kenaz/logs/ 或 .formation/logs/)
154
- k-cli dispatch status TASK_340 --tail 50
155
- ```
156
-
157
- ### Project 命令
158
-
159
- | 命令 | 說明 | 執行方式 |
160
- |------|------|---------|
161
- | `k-cli project status` | 專案總覽 | 直接讀取 |
162
- | `k-cli project initialize` | 初始化子專案 `.kenaz/` 結構 | 直接執行 |
163
- | `k-cli project install <target>` | 安裝/更新模板檔案 | 直接執行 |
164
-
165
- ```bash
166
- # 專案總覽
167
- k-cli project status
168
-
169
- # 初始化新子專案(core-path 自動從 CLI 位置推導)
170
- k-cli project initialize --project-path /path/to/new-project
171
-
172
- # 手動指定 core-path(覆蓋自動偵測)
173
- k-cli project initialize --project-path /path/to/new-project --core-path /other/KenazAI
174
-
175
- # 初始化但不 git init
176
- k-cli project initialize --project-path /path/to/project --no-git
177
-
178
- # dry-run:顯示會建立什麼
179
- k-cli project initialize --project-path /path/to/project --dry-run
180
- ```
181
-
182
- `project status` 輸出內容:
183
-
184
- | 區塊 | 來源 | 資料 |
185
- |------|------|------|
186
- | 專案設定 | `.kenaz/project.yaml` | project_name、schema_version、core_path、tasks dir、logs dir |
187
- | Git 狀態 | `git` | branch、最後 commit、dirty files 數量 |
188
- | 任務統計 | `task-api.js stats` | backlog / active / done / blocked 數量、P0/P1 高亮 |
189
-
190
- `project initialize` 建立內容:
191
-
192
- | 項目 | 說明 |
193
- |------|------|
194
- | `.kenaz/project.yaml` | 專案配置(schema_version、project_name、core_path、路徑正規化為 `/`) |
195
- | `.kenaz/tasks/{backlog,active,done,blocked,cancel}/` | 任務目錄 |
196
- | `.kenaz/logs/{unit,solo,squad,legion,misc,legacy}/` | Formation log 目錄 |
197
- | `.gitignore` | 標準 gitignore(預設啟用,`--no-git` 跳過) |
198
- | `.gitattributes` | 行尾正規化(預設啟用,`--no-git` 跳過) |
199
- | `k-cli.md` | 使用指南(可用 `project install k-cli` 更新) |
200
- | `git init --initial-branch=main` | Git 初始化 + aliases + initial commit |
201
-
202
- ```bash
203
- # 安裝/更新模板到現有專案
204
- k-cli project install k-cli
205
-
206
- # dry-run
207
- k-cli project install k-cli --dry-run
208
- ```
209
-
210
- ### 通用命令
211
-
212
- | 命令 | 說明 |
213
- |------|------|
214
- | `k-cli ping` | 健康檢查(顯示專案名稱、模式、core_path) |
215
-
216
- ## 全域選項
217
-
218
- | Flag | 說明 |
219
- |------|------|
220
- | `--dry-run` | 驗證但不執行(適用所有寫入 / 調度命令) |
221
- | `--json` | 輸出 JSON 格式 |
222
- | `--project-path <path>` | 指定子專案路徑(使用 `.kenaz/project.yaml` 中的 `project_path` 值) |
223
- | `--force` | 跳過品質檢查(僅 `task create`) |
224
- | `--no-git` | 初始化時跳過 Git(僅 `project initialize`) |
225
- | `--core-path <path>` | 覆蓋自動偵測的 core 路徑(僅 `project initialize`) |
226
- | `--help`, `-h` | 顯示幫助 |
227
-
228
- ## 架構
229
-
230
- ```
231
- k-cli/
232
- ├── README.md # 本文件
233
- ├── package.json # 依賴管理(deps: yaml)
234
- ├── tsconfig.json # TypeScript 配置
235
- ├── src/ # TypeScript 原始碼
236
- │ ├── index.ts # 入口 + 命令路由 + flag 解析
237
- │ ├── core/ # 共用基礎設施
238
- │ │ ├── types.ts # ProjectInfo、CliFlags 型別定義
239
- │ │ ├── project.ts # 專案偵測(core / sub-project / unknown)
240
- │ │ ├── process.ts # nodeProcess — 統一 process spawner
241
- │ │ ├── spawn.ts # spawnClaude — Claude CLI 直接啟動器
242
- │ │ └── output.ts # 輸出格式化(table / JSON)
243
- │ ├── specialist/ # Specialist 功能
244
- │ │ ├── list.ts # 列出 Specialist + prompt(直接)
245
- │ │ └── run.ts # 啟動 Specialist(spawnClaude)
246
- │ ├── task/ # 任務管理功能
247
- │ │ ├── list.ts # task list(直接 task-api.js)
248
- │ │ ├── get.ts # task get(直接 task-api.js)
249
- │ │ ├── create.ts # task create(spawnClaude + Ansuz + Amelia)
250
- │ │ ├── submit.ts # task submit(直接 task-api.js,無 Claude 依賴,TASK_2147)
251
- │ │ ├── update.ts # task update(直接 task-api.js)
252
- │ │ └── delete.ts # task delete(直接 task-api.js)
253
- │ ├── dispatch/ # Formation 調度功能
254
- │ │ └── status.ts # dispatch status(直接讀 log)
255
- │ └── project/ # 專案管理功能
256
- │ ├── status.ts # project status(含 project.yaml 詳情)
257
- │ ├── initialize.ts # project initialize(建立 .kenaz/ + Git)
258
- │ └── install.ts # project install(安裝/更新模板)
259
- ├── templates/ # 可安裝的模板檔案
260
- │ └── k-cli.md # k-cli 使用指南
261
- └── dist/ # 編譯輸出(npm run build)
262
- ```
263
-
264
- ### 內部呼叫關係
265
-
266
- ```
267
- k-cli
268
- │
269
- ├─ 直接呼叫(讀取)
270
- │ ├─ specialist/list → fs.readdir(.specialist/) + session.js
271
- │ ├─ task/list, get → .collaboration/core/task-api.js
272
- │ ├─ task/delete → 直接 rm YAML 檔案(不限狀態)
273
- │ ├─ dispatch/status → .kenaz/logs/ 或 .formation/logs/ + log-reader.js
274
- │ └─ project/status → .kenaz/project.yaml + task-api.js stats + git commands
275
- │
276
- ├─ spawnClaude(Ansuz 決策)
277
- │ ├─ task/create → Ansuz 分析需求
278
- │ │ → Agent tool subagent(Amelia 審查 + role)
279
- │ │ → task-api.js create(最終建立)
280
- │
281
- └─ spawnClaude(Specialist 直接執行)
282
- └─ specialist/run → session.js(組裝 prompt)+ spawnClaude
283
- ```
284
-
285
- ### spawnClaude 架構
286
-
287
- `core/spawn.ts` 是 k-cli 的核心,直接啟動 Claude CLI 子進程:
288
-
289
- ```
290
- spawnClaude(opts)
291
- ├─ detectClaudeCmd() → 偵測 claude CLI 路徑(Windows: .cmd / .exe)
292
- ├─ getClaudeEnv() → 清理環境變數(刪除 CLAUDECODE 避免嵌套檢測)
293
- │ └─ detectGitBash() → Windows: 偵測 git-bash 路徑
294
- └─ spawn(claude, args) → stdin pipe prompt, stream-json 輸出
295
- ```
296
-
297
- ## Dry-Run 行為
298
-
299
- `--dry-run` 適用於所有有副作用的命令:
300
-
301
- | 命令 | dry-run 行為 |
302
- |------|-------------|
303
- | `specialist run` | 組裝 prompt → 顯示 agent + prompt 長度 → **不 spawn Claude** |
304
- | `task create` | 組裝 Ansuz prompt → 顯示將建立的任務資訊 → **不啟動 Ansuz** |
305
- | `task update` | 組裝 task-api args → 顯示將更新的內容 → **不呼叫 task-api** |
306
- | `task delete` | 組裝 task-api args → 顯示將刪除的任務 → **不呼叫 task-api** |
307
-
308
- ## 專案偵測邏輯
309
-
310
- `resolveProject` 使用明確偵測,不猜測、不 fallback、不向上搜尋目錄:
311
-
312
- | 偵測條件 | 模式 | core_path |
313
- |---------|------|-----------|
314
- | 有 `.collaboration/tasks/` | `core` | 當前目錄 |
315
- | 有 `.kenaz/project.yaml`(無 `.collaboration/tasks/`) | `sub-project` | yaml 中的 `core_path` 欄位 |
316
- | 以上都沒有 | `unknown` | 當前目錄 |
317
-
318
- ## 安裝 & 執行
319
-
320
- ```bash
321
- # 編譯
322
- cd k-cli && npm install && npm run build
323
-
324
- # 執行
325
- node dist/index.js ping
326
- node dist/index.js project status
327
-
328
- # 建議建立 alias
329
- alias k-cli="node /path/to/KenazAI/k-cli/dist/index.js"
330
- ```
@@ -1,21 +0,0 @@
1
- {
2
- "name": "k-cli",
3
- "version": "0.1.0",
4
- "description": "KenazAI CLI tool — Specialist, Task, Dispatch operations",
5
- "main": "dist/index.js",
6
- "bin": {
7
- "k-cli": "dist/index.js"
8
- },
9
- "scripts": {
10
- "build": "tsc",
11
- "start": "node dist/index.js",
12
- "test": "bash test/run.sh"
13
- },
14
- "dependencies": {
15
- "yaml": "^2.7.0"
16
- },
17
- "devDependencies": {
18
- "@types/node": "^22.0.0",
19
- "typescript": "^5.9.3"
20
- }
21
- }
@@ -1,91 +0,0 @@
1
- # k-cli 使用指南
2
-
3
- 本專案由 KenazAI k-cli 初始化管理。
4
-
5
- ## 常用命令
6
-
7
- ```bash
8
- # 健康檢查
9
- k-cli ping
10
-
11
- # 專案狀態
12
- k-cli project status
13
-
14
- # 任務管理(讀取)
15
- k-cli task list
16
- k-cli task list --status backlog
17
- k-cli task get TASK_XXX
18
-
19
- # 建立任務(Ansuz 分析 → Amelia subagent 審查 role → 建立)
20
- k-cli task create 幫我創建 hello_world.js 輸出 Hello World
21
- k-cli task create 實作登入 API 支援 OAuth2
22
-
23
- # 刪除任務(直接 rm,不限狀態)
24
- k-cli task delete TASK_XXX
25
-
26
- # Specialist(positional args 作為 user prompt)
27
- k-cli specialist list
28
- k-cli specialist run --agent Ansuz 幫我檢查 git 狀態
29
- k-cli specialist run --agent Amelia 執行 TASK_XXX
30
-
31
- # Dispatch — 指定任務(讀 role → 判斷陣型 → headless.js 執行)
32
- k-cli dispatch run TASK_XXX
33
-
34
- # Dispatch — 自動掃描(掃 backlog → 按優先級逐個 dispatch)
35
- k-cli dispatch run --auto
36
-
37
- # 查看 dispatch 狀態
38
- k-cli dispatch status TASK_XXX --tail 50
39
-
40
- # 專案初始化(新子專案)
41
- k-cli project initialize
42
- k-cli project initialize --project-path /path/to/project --no-git
43
-
44
- # 安裝/更新模板
45
- k-cli project install k-cli
46
- ```
47
-
48
- ## Dispatch 流程
49
-
50
- ```
51
- k-cli dispatch run TASK_XXX
52
- └→ Ansuz 讀 role → 判斷陣型 → headless.js
53
- headless.js 自動處理:
54
- ├─ auto-claim(backlog → active)
55
- ├─ 依賴預檢
56
- ├─ agent 執行任務
57
- ├─ task complete
58
- └─ post-complete(archive + git branch + merge to user branch)
59
- ```
60
-
61
- Git merge 到 main 需要用戶手動操作。
62
-
63
- ## Task Create 流程
64
-
65
- ```
66
- k-cli task create "描述"
67
- ├─ k-cli 預先組裝 Ansuz + Amelia prompts
68
- └→ spawnClaude(Ansuz)
69
- ├─ 分析需求 + 整理任務草稿
70
- ├─ Agent tool → Amelia subagent 審查 + 判斷 role
71
- └─ task-api.js create(建立任務)
72
- ```
73
-
74
- Amelia 審查透過 Claude 原生 Agent tool(subagent)執行,無需嵌套 CLI。
75
-
76
- ## 全域選項
77
-
78
- | Flag | 說明 |
79
- |------|------|
80
- | `--json` | JSON 輸出 |
81
- | `--dry-run` | 驗證但不執行 |
82
- | `--auto` | 自動掃描模式(僅 dispatch run) |
83
- | `--force` | 跳過品質檢查(僅 task create) |
84
- | `--project-path <path>` | 指定專案路徑(使用 `.kenaz/project.yaml` 中的 `project_path` 值) |
85
- | `--help` | 顯示幫助 |
86
-
87
- ## 更新此文件
88
-
89
- ```bash
90
- k-cli project install k-cli
91
- ```
@@ -1,117 +0,0 @@
1
- # k-cli Test Specification
2
-
3
- ## 概述
4
-
5
- Build 後在 `test/sandbox/` 建立真實專案環境,跑完所有 k-cli 功能。
6
- 每次 `npm test` 自動:清空 sandbox → 初始化 → 逐項測試 → 報告結果。
7
-
8
- ## 執行方式
9
-
10
- ```bash
11
- cd k-cli
12
- npm run build && npm test
13
- ```
14
-
15
- ## 前置條件
16
-
17
- - Claude CLI 可用(`task create` 會 spawnClaude)
18
- - `npm run build` 必須先執行
19
-
20
- ## 測試環境
21
-
22
- - **Sandbox**: `test/sandbox/`(每次測試前清空重建)
23
- - **Core Path**: KenazAI 本體(`k-cli/../`)
24
- - **路徑參數**: 使用 `.kenaz/project.yaml` 中的 `project_path`(絕對路徑)
25
-
26
- ## 11 個測試
27
-
28
- ### Test 1: project initialize → verify → delete k-cli.md → verify → install
29
- - `k-cli project initialize --project-path test/sandbox/ --no-git`
30
- - 驗證:`.kenaz/project.yaml` 存在、`tasks/` 5 個狀態目錄存在、`logs/` 6 個陣型目錄存在、`k-cli.md` 存在
31
- - 刪除 `test/sandbox/k-cli.md`
32
- - 驗證:`k-cli.md` 不存在
33
- - `k-cli project install k-cli --project-path test/sandbox/`
34
- - 驗證:`k-cli.md` 重新出現、內容含 `k-cli`
35
-
36
- ### Test 2: ping
37
- - `k-cli ping --project-path test/sandbox/`
38
- - 驗證:輸出含 `k-cli` 且含 `sub-project`
39
-
40
- ### Test 3: project status
41
- - `k-cli project status --project-path test/sandbox/ --json`
42
- - 驗證:JSON 解析成功、含 `sub-project`
43
-
44
- ### Test 4: specialist list
45
- - `k-cli specialist list --project-path test/sandbox/`
46
- - 驗證:輸出含 `Ansuz` 且含 `Amelia`
47
-
48
- ### Test 5: task create × 3 → list → get
49
- 建立 3 個簡單任務,驗證 Ansuz + Amelia subagent 流程:
50
-
51
- 1. `k-cli task create "寫一個 Node.js 程式,console.log 輸出 Hello World" --project-path test/sandbox/`
52
- - 驗證:輸出含 TASK_ID(記為 TASK_A)
53
- 2. `k-cli task create "寫一個 Node.js 程式,計算 10+10 並輸出結果" --project-path test/sandbox/`
54
- - 驗證:輸出含 TASK_ID(記為 TASK_B)
55
- 3. `k-cli task create "寫一個 Node.js 程式,讀取當前目錄的檔案列表並印出" --project-path test/sandbox/`
56
- - 驗證:輸出含 TASK_ID(記為 TASK_C)
57
-
58
- 流程驗證(每個 create 都會經過):
59
- - spawnClaude(Ansuz) → 分析需求 → Agent tool subagent(Amelia) 審查 + 判斷 role → task-api.js create
60
-
61
- 建立後驗證:
62
- - `k-cli task list --project-path test/sandbox/`
63
- - 驗證:輸出含 TASK_A、TASK_B、TASK_C,總數 ≥ 3
64
- - `k-cli task get TASK_A --project-path test/sandbox/`
65
- - 驗證:輸出含 TASK_A 詳細資訊
66
-
67
- ### Test 6-8: 已移除
68
- - `dispatch run` 已刪除(Formation headless 調度已退役),`dispatch status` 失去可驗證的前置動作,一併移出測試
69
-
70
- ### Test 9: task delete → verify
71
- - 使用 Test 5 的 TASK_A
72
- - `k-cli task get TASK_A` → 驗證任務存在
73
- - `k-cli task delete TASK_A --project-path test/sandbox/`(直接 rm,不限狀態)
74
- - `k-cli task list --project-path test/sandbox/`
75
- - 驗證:TASK_A 不在列表中
76
-
77
- ### Test 10: specialist run Amelia(簡單任務)
78
- - `k-cli specialist run --agent Amelia 列出 sandbox 專案的任務狀態 --project-path test/sandbox/`
79
- - 驗證:spawnClaude(Amelia) 執行成功,輸出含任務相關資訊
80
-
81
- ### Test 11: --dry-run(全指令驗證)
82
- 不實際執行,僅驗證 dry-run 輸出正確:
83
-
84
- 1. `k-cli project initialize --project-path test/sandbox/ --dry-run`
85
- - 驗證:輸出含 `dry-run`
86
- 2. `k-cli task create "測試 dry-run" --project-path test/sandbox/ --dry-run`
87
- - 驗證:輸出含 `dry-run`,不呼叫 spawnClaude
88
- 3. `k-cli task delete TASK_B --project-path test/sandbox/ --dry-run`
89
- - 驗證:輸出含 `dry-run`,任務仍存在
90
- 4. `k-cli specialist run --agent Amelia 測試 --project-path test/sandbox/ --dry-run`
91
- - 驗證:輸出含 `dry-run`,不呼叫 spawnClaude
92
- 5. `k-cli project install k-cli --project-path test/sandbox/ --dry-run`
93
- - 驗證:輸出含 `dry-run`
94
-
95
- ## 結果格式
96
-
97
- ```
98
- k-cli Test Suite
99
- ════════════════════════════════
100
- [ 1/11] project init+install ✅ PASS
101
- [ 2/11] ping ✅ PASS
102
- [ 3/11] project status ✅ PASS
103
- [ 4/11] specialist list ✅ PASS
104
- [ 5/11] task create × 3 ✅ PASS
105
- [ 9/11] task delete ✅ PASS
106
- [10/11] specialist run Amelia ✅ PASS
107
- [11/11] --dry-run ✅ PASS
108
-
109
- Result: 11/11 passed
110
- ```
111
-
112
- 失敗時顯示:
113
- ```
114
- [ 5/11] task create × 3 ❌ FAIL
115
- Expected output to contain "TASK_"
116
- Got: "Error: ..."
117
- ```