ccgx-workflow 1.0.0 → 1.0.1

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 (60) hide show
  1. package/README.md +37 -5
  2. package/README.zh-CN.md +35 -5
  3. package/dist/cli.mjs +1 -1
  4. package/dist/index.mjs +2 -2
  5. package/dist/shared/{ccgx-workflow.WgUzkiC3.mjs → ccgx-workflow.SJPbUy5_.mjs} +17 -110
  6. package/package.json +2 -1
  7. package/templates/commands/agents/phase-runner.md +321 -321
  8. package/templates/commands/autonomous.md +792 -792
  9. package/templates/commands/cancel.md +132 -132
  10. package/templates/commands/debug.md +226 -226
  11. package/templates/commands/status.md +206 -206
  12. package/templates/commands/team.md +484 -0
  13. package/templates/hooks/ccg-session-state.cjs +510 -510
  14. package/templates/scripts/ccg-phase-runner-launcher.mjs +467 -467
  15. package/templates/scripts/invoke-model.mjs +64 -0
  16. package/templates/skills/domains/ai/SKILL.md +35 -35
  17. package/templates/skills/domains/ai/agent-dev.md +242 -242
  18. package/templates/skills/domains/ai/llm-security.md +288 -288
  19. package/templates/skills/domains/ai/rag-system.md +542 -542
  20. package/templates/skills/domains/architecture/SKILL.md +43 -43
  21. package/templates/skills/domains/architecture/api-design.md +225 -225
  22. package/templates/skills/domains/architecture/cloud-native.md +285 -285
  23. package/templates/skills/domains/architecture/security-arch.md +297 -297
  24. package/templates/skills/domains/data-engineering/SKILL.md +208 -208
  25. package/templates/skills/domains/development/SKILL.md +47 -47
  26. package/templates/skills/domains/development/cpp.md +246 -246
  27. package/templates/skills/domains/development/go.md +323 -323
  28. package/templates/skills/domains/development/java.md +277 -277
  29. package/templates/skills/domains/development/python.md +288 -288
  30. package/templates/skills/domains/development/rust.md +313 -313
  31. package/templates/skills/domains/development/shell.md +313 -313
  32. package/templates/skills/domains/development/typescript.md +277 -277
  33. package/templates/skills/domains/devops/SKILL.md +40 -40
  34. package/templates/skills/domains/devops/database.md +217 -217
  35. package/templates/skills/domains/devops/devsecops.md +198 -198
  36. package/templates/skills/domains/devops/git-workflow.md +181 -181
  37. package/templates/skills/domains/devops/testing.md +283 -283
  38. package/templates/skills/domains/frontend-design/SKILL.md +244 -244
  39. package/templates/skills/domains/frontend-design/claymorphism/SKILL.md +121 -121
  40. package/templates/skills/domains/frontend-design/component-patterns.md +202 -202
  41. package/templates/skills/domains/frontend-design/glassmorphism/SKILL.md +142 -142
  42. package/templates/skills/domains/frontend-design/liquid-glass/SKILL.md +139 -139
  43. package/templates/skills/domains/frontend-design/neubrutalism/SKILL.md +145 -145
  44. package/templates/skills/domains/frontend-design/state-management.md +680 -680
  45. package/templates/skills/domains/frontend-design/ui-aesthetics.md +110 -110
  46. package/templates/skills/domains/frontend-design/ux-principles.md +156 -156
  47. package/templates/skills/domains/infrastructure/SKILL.md +201 -201
  48. package/templates/skills/domains/mobile/SKILL.md +225 -225
  49. package/templates/skills/domains/orchestration/SKILL.md +30 -30
  50. package/templates/skills/domains/orchestration/multi-agent.md +228 -228
  51. package/templates/skills/domains/security/SKILL.md +73 -73
  52. package/templates/skills/domains/security/blue-team.md +436 -436
  53. package/templates/skills/domains/security/code-audit.md +265 -265
  54. package/templates/skills/domains/security/pentest.md +226 -226
  55. package/templates/skills/domains/security/red-team.md +374 -374
  56. package/templates/skills/domains/security/threat-intel.md +372 -372
  57. package/templates/skills/domains/security/vuln-research.md +369 -369
  58. package/templates/skills/tools/lib/shared.js +98 -98
  59. package/templates/skills/tools/override-refusal/SKILL.md +53 -53
  60. package/templates/skills/tools/override-refusal/scripts/refusal_rewriter.js +226 -226
@@ -1,132 +1,132 @@
1
- ---
2
- description: '中止活跃后台任务:先写 cancel.flag(cooperative)→ grace 5s → kill-tree 强制(v4.5 P1b 升级)'
3
- argument-hint: "<job-id> [--force]"
4
- allowed-tools:
5
- - Read
6
- - Write
7
- - Bash
8
- ---
9
-
10
- # Cancel - 中止活跃后台任务(v4.5 升级)
11
-
12
- 写一个**协作式**取消信号到 `.context/jobs/<job-id>/cancel.flag`,并在 grace period(默认 5s)后**强制 kill 进程树**作为兜底。后台子任务(codex:codex-rescue / phase-runner / autonomous loop)每次推进步骤前轮询 cancel.flag,发现存在则清理并退出。卡在 OS-level 不可中断 syscall 的子进程由 kill-tree fallback 兜底。
13
-
14
- > ⚠️ v4.5 之前是**纯协作**取消(不持有 PID),v4.5 P1b 引入 supervisor + cli_pid + process_group_id 后升级为**协作 + 强制兜底**。如果 phase-runner 已通过 `ccg-phase-runner-launcher.mjs` 启动,state.json 会含 `cli_pid`,本命令在 grace period 后调用 kill-tree(POSIX:`kill -TERM -<pgid>` → `kill -KILL`;Windows:`taskkill /T /F /PID`)。
15
-
16
- ## 使用方法
17
-
18
- ```bash
19
- /ccg:cancel <job-id> # 默认:cancel.flag + 5s grace + kill-tree
20
- /ccg:cancel <job-id> --force # 跳过 grace,立即 kill-tree(紧急停机)
21
- ```
22
-
23
- ## 工作流程
24
-
25
- ### Step 1:校验 job 存在 + 状态可取消
26
-
27
- 1. Read `.context/jobs/<job-id>/state.json`
28
- 2. 不存在 → "Job not found: <id>,run /ccg:status to list all jobs",退出
29
- 3. `status` ∈ `{done, failed, canceled}` → "Job <id> already <status>,nothing to cancel",退出(**不报错**)
30
- 4. `status` ∈ `{queued, running}` → 进入 Step 2
31
-
32
- ### Step 2:写 cancel.flag + 更新 state.json
33
-
34
- 1. 写文件 `.context/jobs/<job-id>/cancel.flag`,内容:
35
-
36
- ```
37
- cancel-requested-at: <ISO timestamp>
38
- requested-by: /ccg:cancel
39
- ```
40
-
41
- v4.5+:`src/utils/jobs.ts` 的 `requestCancel` 走 `atomicWriteFileSync`(temp + rename),cancel.flag 永远不会半写。
42
-
43
- 2. 更新 state.json:把 `cancel_requested` 设为 `true`(**status 仍保持 running/queued** —— 真实 status 转 `canceled` 由子任务退出时自己写或由 Step 4 兜底写)
44
-
45
- ### Step 3:grace period(默认 5s,`--force` 跳过)
46
-
47
- 观察子任务是否自己退出:每秒 Read `state.json.status`,如果在 5s 内变成 `canceled` / `failed` / `done` → 跳过 Step 4,输出"协作取消生效"。
48
-
49
- ### Step 4:kill-tree fallback(grace 超时后)
50
-
51
- 读取 state.json 中的 `cli_pid` + `process_group_id`:
52
-
53
- - **没有 cli_pid**(v4.5 之前的 legacy job 或非 launcher 路径):保持原有协作行为,提醒用户"无 PID 记录,请手动 `kill -9` 残留进程"。
54
- - **有 cli_pid**:用 Bash 执行 kill-tree:
55
- - **POSIX**: 优先 `kill -TERM -<pgid>` 走进程组(含 nested plugin 子进程);失败回退 `kill -TERM <cli_pid>`;再 grace 1s 后 `kill -KILL`。
56
- - **Windows**: `taskkill /T /F /PID <cli_pid>` 杀整棵进程树(含 nested plugin)。
57
-
58
- 生成的 Bash(示例):
59
-
60
- ```bash
61
- # POSIX
62
- kill -TERM -42 2>/dev/null || kill -TERM 42 2>/dev/null
63
- sleep 1
64
- kill -0 42 2>/dev/null && (kill -KILL -42 2>/dev/null || kill -KILL 42 2>/dev/null)
65
-
66
- # Windows
67
- taskkill /T /F /PID 1234
68
- ```
69
-
70
- - 写终态 state.json:`status=canceled`,`summary="canceled by /ccg:cancel + kill-tree fallback"`。
71
-
72
- ### Step 5:通知用户
73
-
74
- 输出(协作取消生效):
75
-
76
- ```
77
- ✓ Job <id> canceled cooperatively (status: canceled, no kill-tree needed)
78
- ```
79
-
80
- 输出(kill-tree 兜底):
81
-
82
- ```
83
- ⚠ Cooperative grace period (5s) elapsed without exit.
84
- ✓ Issued kill-tree on cli_pid=<N> (pgid=<M>): step1=SIGTERM, step2=SIGKILL after 1s
85
- Status: canceled (forced via kill-tree)
86
- ```
87
-
88
- ## 严格约束
89
-
90
- - ✅ **协作优先**——总是先写 cancel.flag 给子进程自己退的机会,避免半写文件
91
- - ✅ **强制兜底**(v4.5+ supervised job)——grace 后 kill-tree 防 hang 死循环
92
- - ✅ 幂等——多次调用不报错,不重写 flag
93
- - ✅ 已终态的 job 调用 cancel 也不报错(友好降级)
94
- - ✅ atomic write(v4.5 P1b)——cancel.flag 永远不会半写
95
- - ❌ **不要**直接把 status 改成 `canceled`——会与子任务退出时的写入产生竞态(除非 kill-tree 生效后)
96
- - ❌ **不要**删除 `.context/jobs/<id>/` 目录——历史可观测性必须保留
97
-
98
- ## 子任务侧契约(开发者参考)
99
-
100
- 后台子任务必须周期性检查 cancel.flag 才能让协作路径生效(避免 kill-tree 兜底)。最小契约:
101
-
102
- ```typescript
103
- import { isCancelRequested, writeJobState, getJob } from '~/.claude/.ccg/utils/jobs'
104
-
105
- // 每个推进步骤前
106
- if (isCancelRequested(workdir, jobId)) {
107
- const cur = getJob(workdir, jobId)!
108
- writeJobState(workdir, { ...cur, status: 'canceled', summary: 'canceled by user' })
109
- // optional: write result.md with "STATUS: canceled\nNOTES: aborted at <step>"
110
- process.exit(0)
111
- }
112
- ```
113
-
114
- phase-runner / codex:codex-rescue / autonomous loop 全部接入此契约(v4.0 Phase 7 + v4.5 P1b)。
115
-
116
- ## 与其他命令的协作
117
-
118
- | 时序 | 命令 | 作用 |
119
- |------|------|------|
120
- | t0 | `/ccg:autonomous` | spawn launcher + child;写 state.json (running, cli_pid, pgid) |
121
- | t1 | `/ccg:status` | 用户看到 running 太久 |
122
- | t2 | `/ccg:cancel <id>` | **本命令**——写 cancel.flag |
123
- | t3a | (子任务下次轮询) | isCancelRequested → 自己写 state.json (canceled) |
124
- | t3b | (grace 5s 超时, t3a 未发生) | 本命令 kill-tree → 写 state.json (canceled, forced) |
125
- | t4 | `/ccg:result <id>` | 看到 canceled 摘要 |
126
-
127
- ## 实现锚点
128
-
129
- - `src/utils/jobs.ts` 的 `requestCancel` 是后端真相源(atomic write)
130
- - `src/utils/process-tree.ts` 的 `killProcessTree` 是 kill-tree 真相源(POSIX pgid + Windows taskkill)
131
- - `templates/scripts/ccg-phase-runner-launcher.mjs` 的 launcher 是 cli_pid / pgid 的写入者
132
- - 失败模式:见 `src/utils/__tests__/jobs.test.ts`(atomic write)+ `processTree.test.ts`(kill-tree 13 种 failure mode 覆盖)
1
+ ---
2
+ description: '中止活跃后台任务:先写 cancel.flag(cooperative)→ grace 5s → kill-tree 强制(v4.5 P1b 升级)'
3
+ argument-hint: "<job-id> [--force]"
4
+ allowed-tools:
5
+ - Read
6
+ - Write
7
+ - Bash
8
+ ---
9
+
10
+ # Cancel - 中止活跃后台任务(v4.5 升级)
11
+
12
+ 写一个**协作式**取消信号到 `.context/jobs/<job-id>/cancel.flag`,并在 grace period(默认 5s)后**强制 kill 进程树**作为兜底。后台子任务(codex:codex-rescue / phase-runner / autonomous loop)每次推进步骤前轮询 cancel.flag,发现存在则清理并退出。卡在 OS-level 不可中断 syscall 的子进程由 kill-tree fallback 兜底。
13
+
14
+ > ⚠️ v4.5 之前是**纯协作**取消(不持有 PID),v4.5 P1b 引入 supervisor + cli_pid + process_group_id 后升级为**协作 + 强制兜底**。如果 phase-runner 已通过 `ccg-phase-runner-launcher.mjs` 启动,state.json 会含 `cli_pid`,本命令在 grace period 后调用 kill-tree(POSIX:`kill -TERM -<pgid>` → `kill -KILL`;Windows:`taskkill /T /F /PID`)。
15
+
16
+ ## 使用方法
17
+
18
+ ```bash
19
+ /ccg:cancel <job-id> # 默认:cancel.flag + 5s grace + kill-tree
20
+ /ccg:cancel <job-id> --force # 跳过 grace,立即 kill-tree(紧急停机)
21
+ ```
22
+
23
+ ## 工作流程
24
+
25
+ ### Step 1:校验 job 存在 + 状态可取消
26
+
27
+ 1. Read `.context/jobs/<job-id>/state.json`
28
+ 2. 不存在 → "Job not found: <id>,run /ccg:status to list all jobs",退出
29
+ 3. `status` ∈ `{done, failed, canceled}` → "Job <id> already <status>,nothing to cancel",退出(**不报错**)
30
+ 4. `status` ∈ `{queued, running}` → 进入 Step 2
31
+
32
+ ### Step 2:写 cancel.flag + 更新 state.json
33
+
34
+ 1. 写文件 `.context/jobs/<job-id>/cancel.flag`,内容:
35
+
36
+ ```
37
+ cancel-requested-at: <ISO timestamp>
38
+ requested-by: /ccg:cancel
39
+ ```
40
+
41
+ v4.5+:`src/utils/jobs.ts` 的 `requestCancel` 走 `atomicWriteFileSync`(temp + rename),cancel.flag 永远不会半写。
42
+
43
+ 2. 更新 state.json:把 `cancel_requested` 设为 `true`(**status 仍保持 running/queued** —— 真实 status 转 `canceled` 由子任务退出时自己写或由 Step 4 兜底写)
44
+
45
+ ### Step 3:grace period(默认 5s,`--force` 跳过)
46
+
47
+ 观察子任务是否自己退出:每秒 Read `state.json.status`,如果在 5s 内变成 `canceled` / `failed` / `done` → 跳过 Step 4,输出"协作取消生效"。
48
+
49
+ ### Step 4:kill-tree fallback(grace 超时后)
50
+
51
+ 读取 state.json 中的 `cli_pid` + `process_group_id`:
52
+
53
+ - **没有 cli_pid**(v4.5 之前的 legacy job 或非 launcher 路径):保持原有协作行为,提醒用户"无 PID 记录,请手动 `kill -9` 残留进程"。
54
+ - **有 cli_pid**:用 Bash 执行 kill-tree:
55
+ - **POSIX**: 优先 `kill -TERM -<pgid>` 走进程组(含 nested plugin 子进程);失败回退 `kill -TERM <cli_pid>`;再 grace 1s 后 `kill -KILL`。
56
+ - **Windows**: `taskkill /T /F /PID <cli_pid>` 杀整棵进程树(含 nested plugin)。
57
+
58
+ 生成的 Bash(示例):
59
+
60
+ ```bash
61
+ # POSIX
62
+ kill -TERM -42 2>/dev/null || kill -TERM 42 2>/dev/null
63
+ sleep 1
64
+ kill -0 42 2>/dev/null && (kill -KILL -42 2>/dev/null || kill -KILL 42 2>/dev/null)
65
+
66
+ # Windows
67
+ taskkill /T /F /PID 1234
68
+ ```
69
+
70
+ - 写终态 state.json:`status=canceled`,`summary="canceled by /ccg:cancel + kill-tree fallback"`。
71
+
72
+ ### Step 5:通知用户
73
+
74
+ 输出(协作取消生效):
75
+
76
+ ```
77
+ ✓ Job <id> canceled cooperatively (status: canceled, no kill-tree needed)
78
+ ```
79
+
80
+ 输出(kill-tree 兜底):
81
+
82
+ ```
83
+ ⚠ Cooperative grace period (5s) elapsed without exit.
84
+ ✓ Issued kill-tree on cli_pid=<N> (pgid=<M>): step1=SIGTERM, step2=SIGKILL after 1s
85
+ Status: canceled (forced via kill-tree)
86
+ ```
87
+
88
+ ## 严格约束
89
+
90
+ - ✅ **协作优先**——总是先写 cancel.flag 给子进程自己退的机会,避免半写文件
91
+ - ✅ **强制兜底**(v4.5+ supervised job)——grace 后 kill-tree 防 hang 死循环
92
+ - ✅ 幂等——多次调用不报错,不重写 flag
93
+ - ✅ 已终态的 job 调用 cancel 也不报错(友好降级)
94
+ - ✅ atomic write(v4.5 P1b)——cancel.flag 永远不会半写
95
+ - ❌ **不要**直接把 status 改成 `canceled`——会与子任务退出时的写入产生竞态(除非 kill-tree 生效后)
96
+ - ❌ **不要**删除 `.context/jobs/<id>/` 目录——历史可观测性必须保留
97
+
98
+ ## 子任务侧契约(开发者参考)
99
+
100
+ 后台子任务必须周期性检查 cancel.flag 才能让协作路径生效(避免 kill-tree 兜底)。最小契约:
101
+
102
+ ```typescript
103
+ import { isCancelRequested, writeJobState, getJob } from '~/.claude/.ccg/utils/jobs'
104
+
105
+ // 每个推进步骤前
106
+ if (isCancelRequested(workdir, jobId)) {
107
+ const cur = getJob(workdir, jobId)!
108
+ writeJobState(workdir, { ...cur, status: 'canceled', summary: 'canceled by user' })
109
+ // optional: write result.md with "STATUS: canceled\nNOTES: aborted at <step>"
110
+ process.exit(0)
111
+ }
112
+ ```
113
+
114
+ phase-runner / codex:codex-rescue / autonomous loop 全部接入此契约(v4.0 Phase 7 + v4.5 P1b)。
115
+
116
+ ## 与其他命令的协作
117
+
118
+ | 时序 | 命令 | 作用 |
119
+ |------|------|------|
120
+ | t0 | `/ccg:autonomous` | spawn launcher + child;写 state.json (running, cli_pid, pgid) |
121
+ | t1 | `/ccg:status` | 用户看到 running 太久 |
122
+ | t2 | `/ccg:cancel <id>` | **本命令**——写 cancel.flag |
123
+ | t3a | (子任务下次轮询) | isCancelRequested → 自己写 state.json (canceled) |
124
+ | t3b | (grace 5s 超时, t3a 未发生) | 本命令 kill-tree → 写 state.json (canceled, forced) |
125
+ | t4 | `/ccg:result <id>` | 看到 canceled 摘要 |
126
+
127
+ ## 实现锚点
128
+
129
+ - `src/utils/jobs.ts` 的 `requestCancel` 是后端真相源(atomic write)
130
+ - `src/utils/process-tree.ts` 的 `killProcessTree` 是 kill-tree 真相源(POSIX pgid + Windows taskkill)
131
+ - `templates/scripts/ccg-phase-runner-launcher.mjs` 的 launcher 是 cli_pid / pgid 的写入者
132
+ - 失败模式:见 `src/utils/__tests__/jobs.test.ts`(atomic write)+ `processTree.test.ts`(kill-tree 13 种 failure mode 覆盖)