cowork-flow 0.0.29 → 0.0.31

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 (155) hide show
  1. package/README.md +116 -278
  2. package/package.json +2 -1
  3. package/src/cli.js +6 -0
  4. package/src/commands/install-zcode-plugin.js +125 -0
  5. package/src/lib/copy-template.js +59 -4
  6. package/src/lib/platforms.js +27 -2
  7. package/template/.claude/agents/cowork-check.md +32 -21
  8. package/template/.claude/agents/cowork-implement.md +32 -170
  9. package/template/.claude/agents/cowork-research.md +18 -14
  10. package/template/.claude/hooks/inject-workflow-state.py +1 -3
  11. package/template/.claude/settings.json +2 -2
  12. package/template/.codex/agents/cowork-check.toml +4 -3
  13. package/template/.codex/agents/cowork-implement.toml +2 -1
  14. package/template/.cowork-flow/.developer +2 -0
  15. package/template/.cowork-flow/.version +1 -1
  16. package/template/.cowork-flow/adapters/claude-code/adapter.yaml +1 -1
  17. package/template/.cowork-flow/run +3 -3
  18. package/template/.cowork-flow/run.cmd +88 -88
  19. package/template/.cowork-flow/scripts/commands/doctor.py +8 -44
  20. package/template/.cowork-flow/scripts/commands/subagent.py +29 -6
  21. package/template/.cowork-flow/scripts/commands/task.py +78 -33
  22. package/template/.cowork-flow/scripts/common/core/config.py +10 -2
  23. package/template/.cowork-flow/scripts/common/core/files.py +17 -4
  24. package/template/.cowork-flow/scripts/common/gates/tdd_evidence.py +3 -1
  25. package/template/.cowork-flow/scripts/common/gates/validate_rules.py +1 -1
  26. package/template/.cowork-flow/scripts/common/task/active_task.py +23 -6
  27. package/template/.cowork-flow/scripts/common/task/state_machine.py +1 -2
  28. package/template/.cowork-flow/spec/backend/encoding-guidelines.md +27 -0
  29. package/template/.cowork-flow/spec/backend/index.md +1 -0
  30. package/template/.cowork-flow/spec/contracts/workflow-state-templates.md +15 -9
  31. package/template/.cowork-flow/spec/game/asset-pipeline.md +53 -0
  32. package/template/.cowork-flow/spec/game/engine-guidelines.md +43 -0
  33. package/template/.cowork-flow/spec/game/index.md +23 -0
  34. package/template/.cowork-flow/spec/game/multiplayer-guidelines.md +44 -0
  35. package/template/.cowork-flow/spec/game/performance-guidelines.md +58 -0
  36. package/template/.cowork-flow/spec/runtime/contract-registry.json +13 -0
  37. package/template/.cowork-flow/spec/runtime/rules.json +17 -17
  38. package/template/.cowork-flow/workflow.md +1 -1
  39. package/template/.opencode/agents/cowork-check.md +1 -1
  40. package/template/.opencode/agents/cowork-implement.md +9 -7
  41. package/template/.zcode/.zcode-plugin/plugin.json +10 -0
  42. package/template/.zcode/hooks/hooks.json +27 -0
  43. package/template/.zcode/hooks/inject-context.js +397 -0
  44. package/template/.zcode/hooks/inject-context.selfcheck.mjs +191 -0
  45. package/template/.zcode/hooks/runtime/run +56 -0
  46. package/template/.zcode/hooks/runtime/run.cmd +37 -0
  47. package/template/.zcode/hooks/runtime/scripts/commands/__init__.py +1 -0
  48. package/template/.zcode/hooks/runtime/scripts/commands/_bootstrap.py +10 -0
  49. package/template/.zcode/hooks/runtime/scripts/commands/add_session.py +452 -0
  50. package/template/.zcode/hooks/runtime/scripts/commands/change.py +412 -0
  51. package/template/.zcode/hooks/runtime/scripts/commands/doctor.py +471 -0
  52. package/template/.zcode/hooks/runtime/scripts/commands/get_context.py +20 -0
  53. package/template/.zcode/hooks/runtime/scripts/commands/get_developer.py +30 -0
  54. package/template/.zcode/hooks/runtime/scripts/commands/init_developer.py +55 -0
  55. package/template/.zcode/hooks/runtime/scripts/commands/party_mode_v2.py +1166 -0
  56. package/template/.zcode/hooks/runtime/scripts/commands/resume.py +62 -0
  57. package/template/.zcode/hooks/runtime/scripts/commands/subagent.py +321 -0
  58. package/template/.zcode/hooks/runtime/scripts/commands/task.py +2040 -0
  59. package/template/.zcode/hooks/runtime/scripts/common/__init__.py +79 -0
  60. package/template/.zcode/hooks/runtime/scripts/common/core/__init__.py +1 -0
  61. package/template/.zcode/hooks/runtime/scripts/common/core/config.py +242 -0
  62. package/template/.zcode/hooks/runtime/scripts/common/core/developer.py +205 -0
  63. package/template/.zcode/hooks/runtime/scripts/common/core/execution_context.py +385 -0
  64. package/template/.zcode/hooks/runtime/scripts/common/core/files.py +37 -0
  65. package/template/.zcode/hooks/runtime/scripts/common/core/paths.py +239 -0
  66. package/template/.zcode/hooks/runtime/scripts/common/gates/__init__.py +1 -0
  67. package/template/.zcode/hooks/runtime/scripts/common/gates/coding_standards.py +210 -0
  68. package/template/.zcode/hooks/runtime/scripts/common/gates/gates.py +66 -0
  69. package/template/.zcode/hooks/runtime/scripts/common/gates/tdd_evidence.py +367 -0
  70. package/template/.zcode/hooks/runtime/scripts/common/gates/test_intent.py +266 -0
  71. package/template/.zcode/hooks/runtime/scripts/common/gates/validate_coding_standards.py +181 -0
  72. package/template/.zcode/hooks/runtime/scripts/common/gates/validate_implementation.py +243 -0
  73. package/template/.zcode/hooks/runtime/scripts/common/gates/validate_rules.py +465 -0
  74. package/template/.zcode/hooks/runtime/scripts/common/git/__init__.py +1 -0
  75. package/template/.zcode/hooks/runtime/scripts/common/git/git_context.py +765 -0
  76. package/template/.zcode/hooks/runtime/scripts/common/git/git_snapshot.py +83 -0
  77. package/template/.zcode/hooks/runtime/scripts/common/task/__init__.py +1 -0
  78. package/template/.zcode/hooks/runtime/scripts/common/task/active_task.py +403 -0
  79. package/template/.zcode/hooks/runtime/scripts/common/task/archive_utils.py +72 -0
  80. package/template/.zcode/hooks/runtime/scripts/common/task/readiness.py +249 -0
  81. package/template/.zcode/hooks/runtime/scripts/common/task/state_machine.py +56 -0
  82. package/template/.zcode/hooks/runtime/scripts/common/task/task_utils.py +187 -0
  83. package/template/.zcode/hooks/runtime/scripts/run.py +138 -0
  84. package/template/.zcode/scaffold/.cowork-flow/.version +1 -0
  85. package/template/.zcode/scaffold/.cowork-flow/config.yaml +65 -0
  86. package/template/.zcode/scaffold/.cowork-flow/spec/backend/database-guidelines.md +23 -0
  87. package/template/.zcode/scaffold/.cowork-flow/spec/backend/directory-structure.md +27 -0
  88. package/template/.zcode/scaffold/.cowork-flow/spec/backend/encoding-guidelines.md +27 -0
  89. package/template/.zcode/scaffold/.cowork-flow/spec/backend/error-handling.md +20 -0
  90. package/template/.zcode/scaffold/.cowork-flow/spec/backend/index.md +40 -0
  91. package/template/.zcode/scaffold/.cowork-flow/spec/backend/logging-guidelines.md +20 -0
  92. package/template/.zcode/scaffold/.cowork-flow/spec/backend/quality-guidelines.md +25 -0
  93. package/template/.zcode/scaffold/.cowork-flow/spec/contracts/capabilities.md +34 -0
  94. package/template/.zcode/scaffold/.cowork-flow/spec/contracts/index.md +11 -0
  95. package/template/.zcode/scaffold/.cowork-flow/spec/contracts/party-mode-v2-board.md +68 -0
  96. package/template/.zcode/scaffold/.cowork-flow/spec/contracts/subagent-dispatch.md +85 -0
  97. package/template/.zcode/scaffold/.cowork-flow/spec/contracts/workflow-state-templates.md +72 -0
  98. package/template/.zcode/scaffold/.cowork-flow/spec/frontend/component-guidelines.md +19 -0
  99. package/template/.zcode/scaffold/.cowork-flow/spec/frontend/directory-structure.md +18 -0
  100. package/template/.zcode/scaffold/.cowork-flow/spec/frontend/hook-guidelines.md +17 -0
  101. package/template/.zcode/scaffold/.cowork-flow/spec/frontend/index.md +39 -0
  102. package/template/.zcode/scaffold/.cowork-flow/spec/frontend/quality-guidelines.md +25 -0
  103. package/template/.zcode/scaffold/.cowork-flow/spec/frontend/state-management.md +18 -0
  104. package/template/.zcode/scaffold/.cowork-flow/spec/frontend/type-safety.md +18 -0
  105. package/template/.zcode/scaffold/.cowork-flow/spec/game/asset-pipeline.md +53 -0
  106. package/template/.zcode/scaffold/.cowork-flow/spec/game/engine-guidelines.md +43 -0
  107. package/template/.zcode/scaffold/.cowork-flow/spec/game/index.md +23 -0
  108. package/template/.zcode/scaffold/.cowork-flow/spec/game/multiplayer-guidelines.md +44 -0
  109. package/template/.zcode/scaffold/.cowork-flow/spec/game/performance-guidelines.md +58 -0
  110. package/template/.zcode/scaffold/.cowork-flow/spec/guides/code-reuse-thinking-guide.md +26 -0
  111. package/template/.zcode/scaffold/.cowork-flow/spec/guides/cross-layer-thinking-guide.md +21 -0
  112. package/template/.zcode/scaffold/.cowork-flow/spec/guides/index.md +31 -0
  113. package/template/.zcode/scaffold/.cowork-flow/spec/guides/pre-implementation-checklist.md +15 -0
  114. package/template/.zcode/scaffold/.cowork-flow/spec/index.md +15 -0
  115. package/template/.zcode/scaffold/.cowork-flow/spec/runtime/contract-registry.json +68 -0
  116. package/template/.zcode/scaffold/.cowork-flow/spec/runtime/index.md +10 -0
  117. package/template/.zcode/scaffold/.cowork-flow/spec/runtime/rules.json +173 -0
  118. package/template/.zcode/scaffold/.cowork-flow/spec/schemas/adapter.schema.json +128 -0
  119. package/template/.zcode/scaffold/.cowork-flow/spec/schemas/index.md +10 -0
  120. package/template/.zcode/scaffold/.cowork-flow/spec/schemas/party-mode-v2-actions.schema.json +90 -0
  121. package/template/.zcode/scaffold/.cowork-flow/spec/schemas/rules.schema.json +80 -0
  122. package/template/.zcode/scaffold/.cowork-flow/workflow.md +247 -0
  123. package/template/.zcode/scaffold/AGENTS.md +126 -0
  124. package/template/.zcode/scaffold/CLAUDE.md +5 -0
  125. package/template/AGENTS.md +82 -60
  126. package/template/skills/before-dev/SKILL.md +145 -0
  127. package/template/{.claude/skills → skills}/check/SKILL.md +10 -5
  128. package/template/skills/game-design/SKILL.md +39 -0
  129. package/template/{.claude/skills → skills}/writing-plans/SKILL.md +23 -1
  130. package/template/.agents/skills/before-dev/SKILL.md +0 -32
  131. package/template/.agents/skills/check/SKILL.md +0 -30
  132. package/template/.agents/skills/writing-plans/SKILL.md +0 -71
  133. package/template/.claude/skills/before-dev/SKILL.md +0 -32
  134. package/template/.claude/skills/brainstorming/SKILL.md +0 -32
  135. package/template/.claude/skills/break-loop/SKILL.md +0 -26
  136. package/template/.claude/skills/continue/SKILL.md +0 -29
  137. package/template/.claude/skills/finish-work/SKILL.md +0 -32
  138. package/template/.claude/skills/meta/SKILL.md +0 -30
  139. package/template/.claude/skills/party-mode/SKILL.md +0 -151
  140. package/template/.claude/skills/party-mode-v2/SKILL.md +0 -75
  141. package/template/.claude/skills/python-design/SKILL.md +0 -27
  142. package/template/.claude/skills/start/SKILL.md +0 -78
  143. package/template/.claude/skills/tdd/SKILL.md +0 -61
  144. package/template/.claude/skills/update-spec/SKILL.md +0 -39
  145. /package/template/{.agents/skills → skills}/brainstorming/SKILL.md +0 -0
  146. /package/template/{.agents/skills → skills}/break-loop/SKILL.md +0 -0
  147. /package/template/{.agents/skills → skills}/continue/SKILL.md +0 -0
  148. /package/template/{.agents/skills → skills}/finish-work/SKILL.md +0 -0
  149. /package/template/{.agents/skills → skills}/meta/SKILL.md +0 -0
  150. /package/template/{.agents/skills → skills}/party-mode/SKILL.md +0 -0
  151. /package/template/{.agents/skills → skills}/party-mode-v2/SKILL.md +0 -0
  152. /package/template/{.agents/skills → skills}/python-design/SKILL.md +0 -0
  153. /package/template/{.agents/skills → skills}/start/SKILL.md +0 -0
  154. /package/template/{.agents/skills → skills}/tdd/SKILL.md +0 -0
  155. /package/template/{.agents/skills → skills}/update-spec/SKILL.md +0 -0
package/README.md CHANGED
@@ -1,344 +1,182 @@
1
- # cowork-flow
1
+ # cowork-flow
2
2
 
3
- cowork-flow 是一个用于新项目初始化协作流程的模板仓库。它把项目说明、任务流转、规格治理、开发计划和会话记录放在一套可复制的目录结构里,帮助团队在项目早期就建立清晰的工作闭环。
3
+ > 项目协作流程模板 — 把需求、计划、实现、验证串成闭环。
4
4
 
5
- 这个仓库本身不绑定具体技术栈,也不提供业务代码脚手架。它提供的是协作与治理基础设施:你可以把 `template/` 复制到目标项目中,再按目标项目的真实情况补充技术栈、质量门禁、目录规范和提交策略。
5
+ ## 一句话
6
6
 
7
- ## 适用场景
7
+ **cowork-flow 不写代码,它帮你建流程。** 把 `template/` 复制到目标项目,立刻获得任务流、规格治理、开发计划和会话记录骨架。
8
8
 
9
- - 新项目需要建立 `AGENTS.md`、任务流、规格文档和开发记录。
10
- - 已有项目希望补上一套轻量的协作流程,但不想引入完整工程脚手架。
11
- - 团队希望把需求澄清、规格变更、实现计划、验证和会话记录串成闭环。
9
+ ## 适用 / 不适用
12
10
 
13
- ## 不适用场景
14
-
15
- - 只需要一个语言或框架脚手架,例如 React、Spring Boot、Rust crate 模板。
16
- - 项目已经有成熟且完整的任务、规格和协作系统,并且不希望引入新的目录约定。
17
- - 只想复制某一段提示词,而不需要维护项目级流程文件。
18
-
19
- ## 仓库结构
20
-
21
- ```text
22
- .
23
- ├── README.md
24
- └── template/
25
- ├── AGENTS.md
26
- ├── CLAUDE.md
27
- ├── .codex/
28
- │ └── agents/
29
- ├── .claude/
30
- │ ├── settings.json
31
- │ ├── agents/
32
- │ ├── skills/
33
- │ ├── commands/
34
- │ └── hooks/
35
- ├── .opencode/
36
- │ ├── agents/
37
- │ ├── commands/
38
- │ └── plugins/
39
- ├── .agents/
40
- │ └── skills/
41
- └── .cowork-flow/
42
- ├── config.yaml
43
- ├── workflow.md
44
- ├── scripts/
45
- ├── spec/
46
- │ ├── contracts/
47
- │ ├── runtime/
48
- │ ├── schemas/
49
- │ ├── backend/
50
- │ ├── frontend/
51
- │ └── guides/
52
- ├── changes/
53
- ├── plans/
54
- ├── tasks/
55
- └── workspace/
56
- ```
57
-
58
- ## 模板内容
59
-
60
- `template/AGENTS.md`
61
- 项目级协作入口,包含编码前思考、简单优先、外科手术式改动、验证优先等基础原则。接入项目后,应把项目名称、技术栈、运行命令、测试命令和提交策略补齐。
62
-
63
- `template/.agents/skills/`
64
- 本地技能入口,覆盖 start、before-dev、brainstorming、party-mode、party-mode-v2、writing-plans、check、finish-work、continue、meta、python-design、update-spec 和 break-loop 等协作动作。这里的 skill 应保持通用,不承载某个业务项目的一次性细节。
65
-
66
- `party-mode` 是用户手动调用的 advisory roundtable。它通过当前 Host Adapter 协调真实子代理讨论,而不是模拟人设;默认 `max_agents=3`、`max_rounds=5`,配置优先级为本次调用、task/change、本地配置、skill 默认值。Party Mode 只产出建议、证据、分歧和验收信号,不能推进任务状态,也不能替代 `cowork-implement` 或 `cowork-check`。
67
-
68
- `party-mode-v2` 是 runtime board controlled advisory workflow。Python runtime 管理看板、当前轮视图、schema 校验、轮次上限和最终报告;子代理通过 board API 交流,主持人只监控和纠偏,不转发或综合观点。
69
-
70
- `template/.codex/agents/`
71
- 固定角色 agent 定义,包含 `cowork-research`、`cowork-implement` 和 `cowork-check`,以及对 Codex 默认 `worker`、`default`、`explorer` 的项目级防漂移约束。主会话负责计划与收口,并通过 host adapter 派发固定 agent;正式派发必须先创建 runtime context,再把 `cowork_runtime_context_id` 和 `cowork_host_context_key` 传给子代理。
72
-
73
- `template/.codex/config.toml`、`template/.codex/hooks.json`、`template/.codex/hooks/`
74
- Codex 项目级配置与每轮上下文注入入口。hook 会先解析 runtime context,再读取当前 session task、`.cowork-flow/spec/contracts/workflow-state-templates.md` 中的 `workflow-state` 片段和 `codex.dispatch_mode`,把流程状态注入到当前轮对话。注入的 `codex-dispatch-mode` 只是主会话调度提示,不代表当前线程身份。
75
-
76
- `template/CLAUDE.md`、`template/.claude/settings.json`、`template/.claude/agents/`、`template/.claude/skills/`、`template/.claude/commands/`、`template/.claude/hooks/`
77
- Claude Code 项目级记忆、hook、固定 agent、skills 和 slash command。`CLAUDE.md` 显式导入 `AGENTS.md`。`.claude/settings.json` 注册 `UserPromptSubmit` 和 `SessionStart` hook,注入当前 workflow state 与 contract digest。固定 agent 通过 `.cowork-flow/run subagent init` 生成 runtime context,并在 prompt、env 或 metadata transport 中传递 `cowork_runtime_context_id`;hook 绑定成功后才进入叶子执行,绑定失败则 fail closed,避免被项目 bootstrap 或无任务首屏上下文拉偏。Claude Code 不自动加载 `.agents/skills/`,所以项目技能要放进 `.claude/skills/`。
78
-
79
- `template/.opencode/agents/`、`template/.opencode/commands/`、`template/.opencode/plugins/`
80
- OpenCode 项目级固定 agent、slash command 和系统上下文注入插件。插件会读取 `.cowork-flow/spec/runtime/contract-registry.json`,注入短 contract digest。
81
-
82
- `template/.cowork-flow/`
83
- 工作流目录,包含流程说明、任务状态、开发者工作区、项目规范、行为变更规格、实现计划和辅助脚本。`.cowork-flow/config.yaml` 只承载真实接线的 session/journal, Codex hint, and task lifecycle hook settings。
84
-
85
- `template/.cowork-flow/spec/`
86
- 项目规范目录。`contracts/` 存人读 workflow/host/agent 合同,`runtime/` 存运行时读取的规则和 contract registry,`schemas/` 存 JSON Schema,`backend/`、`frontend/`、`guides/` 存工程规范和思考指引。接入时应按项目事实保留、改写或删除对应规范。
87
-
88
- `template/.cowork-flow/changes/`
89
- 由 `change.py` 管理 proposal、design、behavior specs 和归档,不维护实现 checklist。
90
-
91
- `template/.cowork-flow/plans/`
92
- 保存可执行步骤、验证方式和执行状态。
11
+ | ✅ 适用 | ❌ 不适用 |
12
+ |---|---|
13
+ | 新项目需要 `AGENTS.md` + 任务流 + 规格文档 | 只需要 React / Spring Boot / Rust 脚手架 |
14
+ | 已有项目想补轻量协作流程 | 已有成熟任务/规格/协作系统 |
15
+ | 需要需求澄清 → 计划 → 实现 → 验证闭环 | 只想复制某一段提示词 |
93
16
 
94
17
  ## 快速开始
95
18
 
96
- 使用 CLI 把模板内容安装到目标项目根目录:
97
-
98
- ```bash
99
- npx cowork-flow init ./my-project --platform codex
100
- ```
101
-
102
- `init` 会显式要求平台和开发者身份。平台可选 `codex`、`opencode`、`claude-code`、`all`。交互式终端会提示输入;脚本或 CI 请传入:
103
-
104
19
  ```bash
20
+ # 初始化到新项目
105
21
  npx cowork-flow init ./my-project --platform codex --developer <your-name>
106
- ```
107
22
 
108
- 也可以先全局安装:
23
+ # 安装 ZCode 插件
24
+ cowork-flow install-zcode-plugin
109
25
 
110
- ```bash
111
- npm install -g cowork-flow
112
- cowork-flow init ./my-project --platform codex --developer <your-name>
26
+ # 同步已初始化项目
27
+ cowork-flow sync .
113
28
  ```
114
29
 
115
- 初始化后优先完成这些配置:
30
+ 平台选项:`codex` / `opencode` / `claude-code` / `all`(逗号分隔)
116
31
 
117
- 1. 更新 `AGENTS.md` 中的项目名称、技术栈、命令和提交策略。
118
- 2. 按需调整 `.cowork-flow/config.yaml` 中的 session/journal, Codex hint, and task lifecycle hook settings。
119
- 3. 更新 `.cowork-flow/workflow.md` 中与项目流程不一致的门禁、分级和完成定义。
120
- 4. 按项目实际情况调整 `.cowork-flow/spec/`,删除不存在的 frontend、backend 或行为变更场景。
121
- 5. 按团队实践使用 `.cowork-flow/changes/` 管理规格变更,使用 `.cowork-flow/plans/` 管理实现计划和验证状态。
122
-
123
- ## CLI 使用
124
-
125
- 查看命令:
32
+ ## 仓库结构
126
33
 
127
- ```bash
128
- npx cowork-flow --help
129
34
  ```
130
-
131
- 初始化到新项目:
132
-
133
- ```bash
134
- cowork-flow init ./my-project --platform codex
35
+ template/
36
+ ├── AGENTS.md # 协作入口(编码原则、流程约定)
37
+ ├── CLAUDE.md # Claude Code 入口
38
+ ├── skills/ # ⭐ 唯一源码,init 时按平台分发
39
+ ├── .codex/ # Codex agents / hooks / config
40
+ ├── .claude/ # Claude Code settings / agents / hooks
41
+ ├── .opencode/ # OpenCode agents / commands / plugins
42
+ ├── .zcode/ # ⭐ ZCode 插件(hooks + runtime + scaffold)
43
+ └── .cowork-flow/
44
+ ├── config.yaml # 项目配置
45
+ ├── workflow.md # 主流程定义
46
+ ├── scripts/ # Python 运行时
47
+ ├── spec/ # 规范文档(contracts / schemas / guides)
48
+ ├── changes/ # 行为变更管理
49
+ ├── plans/ # 实现计划
50
+ ├── tasks/ # 任务目录
51
+ └── workspace/ # 开发者工作区
135
52
  ```
136
53
 
137
- `init` 会直接复制模板中的通用 `.cowork-flow/`,并按 `--platform` 只复制对应 host 资产:`codex` 复制 `.codex/`、`.agents/skills/` 与 `.cowork-flow/adapters/codex/`,`opencode` 复制 `.opencode/`、`.agents/skills/` 与 `.cowork-flow/adapters/opencode/`,`claude-code` 复制 `CLAUDE.md`、`.claude/`(含 `.claude/settings.json`、`.claude/hooks/`、`.claude/skills/`)与 `.cowork-flow/adapters/claude-code/`,不复制 `.agents/skills/`。`all` 或 `--platform codex,opencode,claude-code` 同时复制三者和 `.agents/skills/`。它还会初始化 `.cowork-flow/.developer` 与 `.cowork-flow/workspace/<developer>/`。交互式终端会先显示 checkbox 多选界面选择平台,再提示开发者名称;非交互式环境必须传入 `--platform <codex|opencode|claude-code|all>` 与 `--developer <name>`。`init` 不会复制额外技能包。
54
+ ## Skills 分发机制
138
55
 
139
- 初始化到当前项目:
56
+ Skills 维护在 `template/skills/` 唯一源码,`init` 时按平台分发到对应目录:
140
57
 
141
- ```bash
142
- cowork-flow init . --platform opencode
143
- ```
58
+ | 平台 | 目标目录 |
59
+ |---|---|
60
+ | `codex` / `opencode` | `.agents/skills/` |
61
+ | `claude-code` | `.claude/skills/` |
144
62
 
145
- 默认不会覆盖已有文件。需要预览时使用:
63
+ 分发动作:`before-dev`、`brainstorming`、`break-loop`、`check`、`continue`、`finish-work`、`game-design`、`meta`、`party-mode`、`party-mode-v2`、`python-design`、`start`、`tdd`、`update-spec`、`writing-plans`
146
64
 
147
- ```bash
148
- cowork-flow init ./my-project --platform all --dry-run
149
- ```
65
+ ## CLI 命令
150
66
 
151
- 需要明确覆盖已有文件时使用:
67
+ | 命令 | 说明 |
68
+ |---|---|
69
+ | `init <path>` | 初始化项目模板 |
70
+ | `sync <path>` | 同步已初始化项目的模板和技能 |
71
+ | `install-zcode-plugin` | 安装 ZCode 插件到全局缓存 |
72
+ | `update` | 升级 CLI 本身 |
152
73
 
153
- ```bash
154
- cowork-flow init ./my-project --platform codex --force --developer <your-name>
155
- ```
74
+ ### init 选项
156
75
 
157
- `--force` 不会静默覆盖既有 `.cowork-flow/.developer`;如需重设身份,请先显式处理旧身份文件。
76
+ | 选项 | 说明 |
77
+ |---|---|
78
+ | `--platform <p>` | 平台:`codex` / `opencode` / `claude-code` / `all` |
79
+ | `--developer <n>` | 开发者名称 |
80
+ | `--force` | 覆盖已有文件 |
81
+ | `--dry-run` | 预览不写入 |
158
82
 
159
- 升级 CLI 本身:
83
+ ### sync 行为
160
84
 
161
- ```bash
162
- cowork-flow update
163
- ```
85
+ - **自动识别**已安装 host 目录,只同步对应平台资产
86
+ - **Skills** 从 `template/skills/` 按平台分发
87
+ - **保护文件**:`config.yaml`、`workflow.md`、`spec/`(除 `workflow-state-templates.md`)、任务、计划、变更、workspace
88
+ - `--force` 整文件覆盖保护文件
164
89
 
165
- 同步已初始化项目中的模板脚本和本地技能:
90
+ ## ZCode 插件
166
91
 
167
92
  ```bash
168
- cowork-flow sync .
169
- cowork-flow sync . --dry-run
93
+ cowork-flow install-zcode-plugin # 安装
94
+ cowork-flow install-zcode-plugin --force # 覆盖已安装
170
95
  ```
171
96
 
172
- `sync` 会自动识别目标项目已安装的 host 目录:只有 `.codex/` 时只同步 Codex 资产,只有 `.opencode/` 时只同步 OpenCode 资产,两者都有时同步两者;对应 `.cowork-flow/adapters/<host>/` 也按识别出的平台同步。检测到 Codex 或 OpenCode 时会刷新 `.agents/skills/`;Claude Code-only 项目只刷新 `.claude/settings.json`、`.claude/hooks/`、`.claude/skills/`,不会创建 `.agents/skills/`。通用部分默认刷新 `.cowork-flow/scripts/`、`.cowork-flow/spec/contracts/workflow-state-templates.md`,以及 `AGENTS.md` 和 `CLAUDE.md` 中的 `<!-- COWORK-FLOW:START --> ... <!-- COWORK-FLOW:END -->` 托管块,保留托管块之外的项目自定义内容。`.cowork-flow/config.yaml`、`.cowork-flow/workflow.md`、除 `workflow-state-templates.md` 外的 `.cowork-flow/spec/`、任务、计划、变更和 workspace 记录默认受保护。只有明确传入 `--force` 时才整文件覆盖保护文件。
173
-
174
- ## 常用入口
175
-
176
- 模板内置统一入口来运行 Python 工作流脚本:
97
+ 安装到 `~/.zcode/cli/plugins/cache/zcode-plugins-official/cowork-flow/<version>/`
177
98
 
178
- - macOS / Linux / Git Bash / WSL:`./.cowork-flow/run`
179
- - Windows cmd / PowerShell:`.\.cowork-flow\run.cmd`
99
+ **Hook 注入内容:**
100
+ - `workflow-state` — 当前任务状态
101
+ - `contract-digest` — 合同摘要(SHA256 fingerprint)
102
+ - `delegated_subtask` — 子代理运行时上下文
180
103
 
181
- 入口会按 `COWORK_FLOW_PYTHON`、`PYTHON`、`python3`、`python`、`py -3`
182
- 的顺序查找 Python 3.8+ 解释器,避免不同环境中 `python` / `python3`
183
- 命令不一致的问题。
104
+ ## 任务流程
184
105
 
185
- 下面示例使用 macOS / Linux 写法;Windows 原生命令行中把
186
- `./.cowork-flow/run` 替换为 `.\.cowork-flow\run.cmd`。
187
-
188
- 当前主流程以 `.cowork-flow/workflow.md` 为准。默认路径是:
189
-
190
- ```text
191
- changes -> brainstorming -> read spec -> plan -> tasks -> implement -> check -> complete
106
+ ```
107
+ changes → brainstorming → read spec → plan → tasks → implement → check → complete
192
108
  ```
193
109
 
194
- L0 文档、格式、小范围重构或测试补充可简化为
195
- `brainstorming -> read spec -> implement -> check -> complete`;L1/L2 在完成后继续
196
- `archive -> add session`。
110
+ | 阶段 | 命令 | status |
111
+ |---|---|---|
112
+ | 创建/计划 | `task create` | `planning` |
113
+ | 开始执行 | `task start <dir>` | `in_progress` |
114
+ | 进入检查 | `task review [dir]` | `review` |
115
+ | 检查完成 | `task complete [dir]` | `completed` |
116
+ | 归档 | `task archive <name>` | `completed`(归档副本) |
117
+ | 清会话指针 | `task finish` | 不变 |
197
118
 
198
- 初始化或查看开发者身份:
119
+ ## 常用命令
199
120
 
200
121
  ```bash
122
+ # 身份
201
123
  ./.cowork-flow/run get-developer
202
- ./.cowork-flow/run init-developer <developer-name>
203
- ```
204
-
205
- 查看当前上下文:
124
+ ./.cowork-flow/run init-developer <name>
206
125
 
207
- ```bash
126
+ # 上下文
208
127
  ./.cowork-flow/run get-context
209
128
  ./.cowork-flow/run task list
210
129
  ./.cowork-flow/run task next
211
- ```
212
130
 
213
- 创建并验证行为变更:
214
-
215
- ```bash
131
+ # 变更
216
132
  ./.cowork-flow/run change create <slug>
217
133
  ./.cowork-flow/run change validate <slug>
218
- ```
219
-
220
- 创建并启动任务:
221
-
222
- ```bash
223
- ./.cowork-flow/run task create "<title>" --slug <task-name>
224
- ./.cowork-flow/run task next
225
- ./.cowork-flow/run task start <task-dir>
226
- ```
227
134
 
228
- `task next` 只读,不推进状态。它根据当前会话任务和 `task.json.status`
229
- 报告当前任务、阻塞项和下一条安全命令;主会话在启动工作、派发固定代理、
230
- 进入检查、归档或记录 session 前都应先看它。
231
-
232
- L2 任务的 readiness gate 会在 `task start` 前阻塞缺失的 proposal/spec/design、
233
- 计划、任务链接、边界、假设、验收标准或 verification commands;同一 blocker
234
- 会出现在 `task next` 输出中。
235
-
236
- 任务状态流转:
237
-
238
- ```mermaid
239
- stateDiagram-v2
240
- [*] --> NoTask
241
- state "无当前任务" as NoTask
242
- state "planning" as Planning
243
- state "in_progress" as InProgress
244
- state "review" as Review
245
- state "completed" as Completed
246
- state "已归档" as Archived
247
-
248
- NoTask --> Planning: task create
249
- Planning --> InProgress: task start
250
- InProgress --> Review: task review
251
- Review --> Completed: task complete
252
- Completed --> Archived: task archive
253
- Completed --> NoTask: task finish
254
- Archived --> [*]
255
- ```
135
+ # 任务
136
+ ./.cowork-flow/run task create "<title>" --slug <name>
137
+ ./.cowork-flow/run task start <dir>
256
138
 
257
- 任务状态由阶段命令推进,`task next` 只读取状态:
139
+ # 子代理
140
+ ./.cowork-flow/run subagent init --role implement --agent-type cowork-implement --execution-task-dir <dir> --title "<title>"
141
+ ./.cowork-flow/run subagent bind <runtime_context_id> <host_context_key>
258
142
 
259
- | 阶段 | 命令 | `task.json.status` |
260
- | --- | --- | --- |
261
- | 创建/计划 | `task create` | `planning` |
262
- | 开始执行 | `task start <task-dir>` | `in_progress` |
263
- | 进入检查 | `task review [task-dir]` | `review` |
264
- | 检查完成 | `task complete [task-dir]` | `completed` |
265
- | 归档任务 | `task archive <task-name>` | 归档副本保持 `completed` |
266
- | 清会话指针 | `task finish` | 不改变状态 |
267
-
268
- 执行 plan 时使用固定 cowork agents:
269
-
270
- 主会话负责创建/启动任务、维护计划与收口验证;实现和检查默认通过当前 Host Adapter
271
- 派发给固定角色 agent。固定 agent 是叶子执行者,不能再派发其他 agent,也不能替代主会话完成归档、记录 session 或提交。
272
-
273
- ```text
274
- ./.cowork-flow/run subagent init --role implement --agent-type cowork-implement --execution-task-dir <task-dir> --title "<title>"
275
- ```
276
-
277
- 将命令返回的 prompt transport 放入子代理 prompt:
278
-
279
- ```text
280
- cowork_runtime_context_id: <runtime_context_id>
281
- cowork_host_context_key: <host_context_key>
282
- ```
283
-
284
- 子代理首步执行 `./.cowork-flow/run subagent bind <runtime_context_id> <host_context_key>`;主会话验收前必须确认 runtime context 中 `status=bound` 且 `bound_context_key` 匹配。默认角色为 `cowork-research`、`cowork-implement`、`cowork-check`,任务上下文来自已绑定 runtime context,而不是 prompt 形状。
285
-
286
- Host hook/plugin 启用后,每轮会自动注入 workflow state,其中包含入口分类、当前任务、状态来源和下一步流程提示。状态文本来自 `.cowork-flow/spec/contracts/workflow-state-templates.md`;`workflow.md` 只描述流程,不内联状态片段。hook 不替代主会话验收;它只负责把 task 状态和 workflow gate 放进上下文。
287
-
288
- 记录 session:
289
-
290
- ```bash
143
+ # Session
291
144
  ./.cowork-flow/run get-context --mode record
292
- ./.cowork-flow/run add-session \
293
- --title "<session-title>" \
294
- --commit "<commit-or-handoff-ref>" \
295
- --summary "<summary>"
145
+ ./.cowork-flow/run add-session --title "<title>" --commit "<ref>" --summary "<summary>"
296
146
  ```
297
147
 
298
- ## 接入原则
299
-
300
- - 以目标项目事实为准,不把模板内容当成项目事实。
301
- - 保留有价值的流程骨架,删除目标项目不存在的场景。
302
- - 项目差异写入 `AGENTS.md`、`.cowork-flow/workflow.md`、`.cowork-flow/config.yaml` 和 `.cowork-flow/spec/`。
303
- - 不为了替换项目命令或一次性任务而改写通用 skill。
304
- - README 只说明项目定位和使用方式;具体协作规则应沉淀在模板内对应文件中。
305
-
306
- ## 维护建议
148
+ ## Party Mode
307
149
 
308
- 更新模板时,优先确认这几件事:
150
+ | | v1 | v2 |
151
+ |---|---|---|
152
+ | 机制 | 真实子代理 roundtable | Runtime board controlled |
153
+ | 默认 | `max_agents=3`、`max_rounds=5` | 由 runtime 管理 |
154
+ | 交互 | Host Adapter 协调 | Board API |
155
+ | 产出 | 建议、证据、分歧、验收信号 | 同上 |
309
156
 
310
- - `template/` 中的目录结构和 README 描述一致。
311
- - 新增流程规则有明确承载位置,不散落在多个文件里互相冲突。
312
- - 脚本入口和文档中的命令保持一致。
313
- - 通用 skill 保持可复用,项目专用规则不混入 starter 模板。
314
- - 示例命令尽量保持最小可用,避免把模板写成某个具体项目的实现方案。
157
+ party-mode、party-mode-v2 是两种 advisory roundtable 模式。默认 `max_agents=3`、`max_rounds=5`(v1)。`party-mode-v2` 是 runtime board controlled advisory workflow,子代理通过 board API 交流,主持人只监控和纠偏。
315
158
 
316
- ## 发布流程
159
+ > Party Mode 只产出建议,不能推进任务状态,也不能替代 `cowork-implement` / `cowork-check`。
317
160
 
318
- 发布前先确认本地或 CI 具备 npm 发布凭据,例如已执行 `npm login`,或在 CI 中配置了 `NPM_TOKEN`。
319
-
320
- 推荐使用 release 脚本发布:
161
+ ## 发布
321
162
 
322
163
  ```bash
323
- npm run release
164
+ npm run release # patch
165
+ npm run release -- minor # minor
324
166
  ```
325
167
 
326
- 默认会升级 patch 版本,执行顺序是:
327
-
328
- 1. `npm run test:all`
329
- 2. `npm version patch --no-git-tag-version`
330
- 3. 将 `package.json` 中的新版本同步写入 `template/.cowork-flow/.version`
331
- 4. `git add package.json package-lock.json template/.cowork-flow/.version`
332
- 5. `git commit -m "chore(release): <version>"`
333
- 6. `git tag v<version>`
334
- 7. `npm publish`
168
+ **发布流程:**
169
+ 1. `npm run test:all`(Node + Python + pack check)
170
+ 2. `npm version` 升级版本
171
+ 3. 同步版本到 `template/.cowork-flow/.version` 和 `template/.zcode/.zcode-plugin/plugin.json`
172
+ 4. `git commit` + `git tag`
173
+ 5. `npm publish`
335
174
 
336
- 需要发布其他版本类型时,把 npm 支持的版本类型传给脚本:
175
+ CI 需要 `NPM_TOKEN` secret。
337
176
 
338
- ```bash
339
- npm run release -- minor
340
- npm run release -- major
341
- npm run release -- prerelease
342
- ```
177
+ ## 接入原则
343
178
 
344
- 脚本会在任一步骤失败时停止后续发布动作。CI 仍会运行 Node CLI 测试、npm pack 内容检查和现有 Python 模板测试;GitHub Actions 的 `Publish npm Package` workflow 仍需要在仓库 secrets 中配置 `NPM_TOKEN`。
179
+ - 以目标项目事实为准,不把模板内容当成项目事实
180
+ - 保留有价值的流程骨架,删除不存在的场景
181
+ - 项目差异写入 `AGENTS.md`、`workflow.md`、`config.yaml`、`spec/`
182
+ - 不为了替换项目命令而改写通用 skill
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cowork-flow",
3
- "version": "0.0.29",
3
+ "version": "0.0.31",
4
4
  "description": "CLI for installing and maintaining cowork-flow collaboration templates.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -10,6 +10,7 @@
10
10
  "bin",
11
11
  "src",
12
12
  "template",
13
+ "template/.zcode",
13
14
  "README.md",
14
15
  "!template/**/__pycache__/**",
15
16
  "!template/**/*.pyc"
package/src/cli.js CHANGED
@@ -3,6 +3,7 @@ import { emitKeypressEvents } from 'node:readline';
3
3
  import { createInterface } from 'node:readline/promises';
4
4
 
5
5
  import { runInit } from './commands/init.js';
6
+ import { runInstallZCodePlugin } from './commands/install-zcode-plugin.js';
6
7
  import { runSync } from './commands/sync.js';
7
8
  import { runUpdate } from './commands/update.js';
8
9
  import { readPackageInfo } from './lib/package-info.js';
@@ -11,6 +12,7 @@ const HELP = `cowork-flow
11
12
 
12
13
  Usage:
13
14
  cowork-flow init [target] --platform <codex|opencode|claude-code|all> [--developer <name>] [--dry-run] [--force]
15
+ cowork-flow install-zcode-plugin [--force]
14
16
  cowork-flow update
15
17
  cowork-flow sync [target] [--dry-run] [--force]
16
18
  cowork-flow --version
@@ -175,6 +177,10 @@ export async function main(argv = process.argv.slice(2), options = {}) {
175
177
  return await runUpdate(args, { io });
176
178
  }
177
179
 
180
+ if (command === 'install-zcode-plugin') {
181
+ return await runInstallZCodePlugin(args);
182
+ }
183
+
178
184
  io.writeErr(`Unknown command: ${command}\n`);
179
185
  return 1;
180
186
  } catch (error) {
@@ -0,0 +1,125 @@
1
+ import { cp, mkdir, readFile, writeFile, access, rm } from 'node:fs/promises';
2
+ import { join, resolve } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+
5
+ import { readPackageInfo } from '../lib/package-info.js';
6
+ import { templateRoot } from '../lib/paths.js';
7
+
8
+ const ZCODE_MARKETPLACE = 'zcode-plugins-official';
9
+ const PLUGIN_NAME = 'cowork-flow';
10
+
11
+ function parseArgs(args) {
12
+ return {
13
+ dryRun: args.includes('--dry-run'),
14
+ force: args.includes('--force')
15
+ };
16
+ }
17
+
18
+ async function pathExists(target) {
19
+ try {
20
+ await access(target);
21
+ return true;
22
+ } catch {
23
+ return false;
24
+ }
25
+ }
26
+
27
+ async function getZCodeCacheDir() {
28
+ const base = process.env.ZCODE_HOME || join(homedir(), '.zcode');
29
+ return join(base, 'cli', 'plugins', 'cache', ZCODE_MARKETPLACE, PLUGIN_NAME);
30
+ }
31
+
32
+ async function readJsonSafe(path) {
33
+ try {
34
+ return JSON.parse(await readFile(path, 'utf8'));
35
+ } catch {
36
+ return null;
37
+ }
38
+ }
39
+
40
+ async function writeJsonAtomic(path, data) {
41
+ await writeFile(path, JSON.stringify(data, null, 2) + '\n', 'utf8');
42
+ }
43
+
44
+ function dirname(path) {
45
+ const idx = path.replace(/\\/g, '/').lastIndexOf('/');
46
+ return idx >= 0 ? path.slice(0, idx) : path;
47
+ }
48
+
49
+ async function updateMarketplace(cacheRoot, version) {
50
+ const marketPath = resolve(cacheRoot, '..', '..', '..', 'marketplaces', ZCODE_MARKETPLACE, 'marketplace.json');
51
+ const market = (await readJsonSafe(marketPath)) || { name: ZCODE_MARKETPLACE, plugins: [], version: 1 };
52
+
53
+ const entry = {
54
+ cachePath: join(cacheRoot, version).split('\\').join('/'),
55
+ name: PLUGIN_NAME,
56
+ source: 'filesystem',
57
+ version
58
+ };
59
+
60
+ const existingIdx = market.plugins.findIndex((p) => p.name === PLUGIN_NAME);
61
+ if (existingIdx >= 0) {
62
+ market.plugins[existingIdx] = entry;
63
+ } else {
64
+ market.plugins.push(entry);
65
+ }
66
+
67
+ await mkdir(dirname(marketPath), { recursive: true });
68
+ await writeJsonAtomic(marketPath, market);
69
+ }
70
+
71
+ export async function runInstallZCodePlugin(args = []) {
72
+ const { dryRun, force } = parseArgs(args);
73
+ const pluginSrc = join(templateRoot, ".zcode");
74
+ const skillsSrc = join(templateRoot, "skills");
75
+ const { version } = await readPackageInfo();
76
+
77
+ if (!(await pathExists(pluginSrc))) {
78
+ throw new Error(`ZCode plugin source missing at ${pluginSrc}. Reinstall cowork-flow.`);
79
+ }
80
+ if (!(await pathExists(skillsSrc))) {
81
+ throw new Error(`Skills source missing at ${skillsSrc}. Reinstall cowork-flow.`);
82
+ }
83
+
84
+ const cacheRoot = await getZCodeCacheDir();
85
+ const destDir = join(cacheRoot, version);
86
+
87
+ if (!force && (await pathExists(destDir))) {
88
+ console.log(`cowork-flow ZCode plugin already installed at ${destDir}`);
89
+ console.log('Use --force to overwrite.');
90
+ return;
91
+ }
92
+
93
+ if (dryRun) {
94
+ console.log(`[dry-run] Would install ZCode plugin:`);
95
+ console.log(` Plugin: ${pluginSrc} -> ${destDir}`);
96
+ console.log(` Skills: ${skillsSrc} -> ${join(destDir, 'skills')}`);
97
+ return;
98
+ }
99
+
100
+ await mkdir(cacheRoot, { recursive: true });
101
+ if (await pathExists(destDir)) {
102
+ await rm(destDir, { recursive: true, force: true });
103
+ }
104
+
105
+ // Copy plugin runtime (.zcode-plugin/, hooks/, runtime/, scaffold/) from .zcode/
106
+ await cp(pluginSrc, destDir, { recursive: true });
107
+
108
+ // Copy canonical skills into the plugin cache so plugin.json "skills" resolves.
109
+ await cp(skillsSrc, join(destDir, "skills"), { recursive: true, force: true });
110
+
111
+ await updateMarketplace(cacheRoot, version);
112
+
113
+ // Write seed file for install tracking
114
+ await writeJsonAtomic(join(destDir, ".zcode-plugin-seed.json"), {
115
+ hash: "placeholder-replace-on-publish",
116
+ marketplace: ZCODE_MARKETPLACE,
117
+ plugin: PLUGIN_NAME,
118
+ pluginVersion: version,
119
+ source: "cli-install",
120
+ version: 1
121
+ });
122
+
123
+ console.log(`✓ cowork-flow ZCode plugin installed to ${destDir}`);
124
+ console.log(' Restart ZCode to load the plugin.');
125
+ }