cowork-flow 1.6.0 → 1.7.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 (129) hide show
  1. package/CHANGELOG.md +204 -218
  2. package/CONTRIBUTING.md +137 -0
  3. package/LICENSE +1 -1
  4. package/README.md +108 -369
  5. package/docs/architecture.md +122 -0
  6. package/docs/hosts.md +290 -0
  7. package/docs/index.md +32 -0
  8. package/docs/release.md +95 -0
  9. package/package.json +36 -6
  10. package/presets/claude-code/.claude-plugin/plugin.json +28 -0
  11. package/presets/claude-code/skills/cowork-flow-bootstrap/SKILL.md +35 -0
  12. package/presets/codex/.codex-plugin/plugin.json +37 -0
  13. package/presets/codex/assets/logo.svg +4 -0
  14. package/presets/codex/skills/cowork-flow-bootstrap/SKILL.md +35 -0
  15. package/presets/dsh/agent.cordis.yml +35 -12
  16. package/presets/dsh/plugins/workflow-state.js +88 -72
  17. package/presets/dsh/preset.yml +1 -1
  18. package/presets/kimi-code/.kimi-plugin/plugin.json +35 -0
  19. package/presets/kimi-code/hooks/cowork-flow-inject.mjs +14 -2
  20. package/presets/kimi-code/skills/cowork-flow-bootstrap/SKILL.md +35 -0
  21. package/presets/opencode/cowork-flow/plugin-core.js +1077 -0
  22. package/presets/opencode/cowork-flow/skills/cowork-flow-bootstrap/SKILL.md +35 -0
  23. package/presets/opencode/plugins/cowork-flow.js +44 -0
  24. package/presets/plugin-meta.json +52 -0
  25. package/presets/qoder/.qoder-plugin/plugin.json +29 -0
  26. package/presets/qoder/agents/cowork-check.md +29 -0
  27. package/presets/qoder/agents/cowork-implement.md +30 -0
  28. package/presets/qoder/agents/cowork-research.md +23 -0
  29. package/presets/qoder/hooks/hooks.json +50 -0
  30. package/presets/qoder/hooks/inject-context.py +122 -0
  31. package/presets/qoder/skills/cowork-flow-bootstrap/SKILL.md +35 -0
  32. package/{template/.zcode → presets/zcode}/.zcode-plugin/plugin.json +4 -2
  33. package/{template/.zcode → presets/zcode}/agents/cowork-check.md +4 -4
  34. package/{template/.zcode → presets/zcode}/agents/cowork-implement.md +4 -4
  35. package/{template/.zcode → presets/zcode}/agents/cowork-research.md +1 -1
  36. package/{template/.zcode → presets/zcode}/hooks/inject-context.js +36 -19
  37. package/presets/zcode/skills/cowork-flow-bootstrap/SKILL.md +35 -0
  38. package/src/cli.js +130 -130
  39. package/src/commands/host.js +182 -0
  40. package/src/commands/init.js +28 -43
  41. package/src/commands/install-claude-code-plugin.js +129 -0
  42. package/src/commands/install-codex-plugin.js +312 -0
  43. package/src/commands/install-dsh-hook.js +36 -43
  44. package/src/commands/install-dsh-preset.js +228 -49
  45. package/src/commands/install-kimi-code-plugin.js +142 -0
  46. package/src/commands/install-kimi-hook.js +142 -122
  47. package/src/commands/install-opencode-plugin.js +158 -0
  48. package/src/commands/install-qoder-plugin.js +211 -0
  49. package/src/commands/install-zcode-plugin.js +131 -82
  50. package/src/commands/mcp-state.js +7 -6
  51. package/src/commands/registry.js +345 -0
  52. package/src/commands/source-refresh.js +10 -11
  53. package/src/commands/sync.js +10 -13
  54. package/src/commands/update.js +5 -10
  55. package/src/lib/cli-flags.js +102 -0
  56. package/src/lib/copy-template.js +89 -75
  57. package/src/lib/host-assets.js +192 -57
  58. package/src/lib/install-support.js +50 -0
  59. package/src/lib/platforms.js +0 -15
  60. package/src/lib/plugin-metadata.js +187 -0
  61. package/src/lib/plugin-payload.js +70 -0
  62. package/template/.cowork-flow/.version +1 -1
  63. package/template/.cowork-flow/adapters/claude-code/adapter.yaml +0 -1
  64. package/template/.cowork-flow/adapters/dsh/adapter.yaml +0 -1
  65. package/template/.cowork-flow/adapters/kimi-code/adapter.yaml +0 -1
  66. package/template/.cowork-flow/adapters/qoder/adapter.yaml +32 -0
  67. package/template/.cowork-flow/adapters/zcode/adapter.yaml +2 -2
  68. package/template/.cowork-flow/config.yaml +6 -4
  69. package/template/.cowork-flow/scripts/adapters/cli/batch_mode.py +10 -12
  70. package/template/.cowork-flow/scripts/adapters/cli/spec_check.py +67 -35
  71. package/template/.cowork-flow/scripts/adapters/cli/subagent.py +84 -38
  72. package/template/.cowork-flow/scripts/adapters/cli/task.py +42 -0
  73. package/template/.cowork-flow/scripts/adapters/cli/task_create_command.py +1 -9
  74. package/template/.cowork-flow/scripts/adapters/cli/task_lifecycle_commands.py +6 -0
  75. package/template/.cowork-flow/scripts/adapters/cli/task_navigation.py +13 -10
  76. package/template/.cowork-flow/scripts/adapters/cli/task_next_runner.py +2 -1
  77. package/template/.cowork-flow/scripts/adapters/git/git_context.py +14 -82
  78. package/template/.cowork-flow/scripts/adapters/host/claude_code_policy.py +2 -3
  79. package/template/.cowork-flow/scripts/adapters/host/codex_policy.py +2 -5
  80. package/template/.cowork-flow/scripts/adapters/host/host_manifest.py +122 -10
  81. package/template/.cowork-flow/scripts/adapters/host/inject.py +49 -19
  82. package/template/.cowork-flow/scripts/adapters/host/kimi_code_policy.py +1 -1
  83. package/template/.cowork-flow/scripts/adapters/host/policy_base.py +58 -0
  84. package/template/.cowork-flow/scripts/adapters/host/qoder_policy.py +66 -0
  85. package/template/.cowork-flow/scripts/adapters/host/workflow_state_hook.py +136 -132
  86. package/template/.cowork-flow/scripts/adapters/host/zcode_policy.py +23 -24
  87. package/template/.cowork-flow/scripts/adapters/mcp/state_server.py +41 -56
  88. package/template/.cowork-flow/scripts/adapters/review/test_intent.py +2 -2
  89. package/template/.cowork-flow/scripts/infra/config.py +26 -23
  90. package/template/.cowork-flow/scripts/infra/developer_profile.py +4 -41
  91. package/template/.cowork-flow/scripts/infra/files.py +3 -7
  92. package/template/.cowork-flow/scripts/infra/git_snapshot.py +8 -7
  93. package/template/.cowork-flow/scripts/infra/paths.py +9 -69
  94. package/template/.cowork-flow/scripts/infra/process.py +9 -0
  95. package/template/.cowork-flow/scripts/infra/skill_manifest.py +262 -169
  96. package/template/.cowork-flow/scripts/infra/storage/operation_log.py +2 -0
  97. package/template/.cowork-flow/scripts/infra/storage/state_store.py +0 -2
  98. package/template/.cowork-flow/scripts/infra/storage/unit_of_work.py +163 -18
  99. package/template/.cowork-flow/scripts/kernel/workflow_route.py +6 -16
  100. package/template/.cowork-flow/scripts/run.py +14 -4
  101. package/template/.cowork-flow/scripts/runtime/host_identity.py +33 -15
  102. package/template/.cowork-flow/scripts/runtime/session_state.py +83 -26
  103. package/template/.cowork-flow/scripts/services/context_discovery.py +15 -3
  104. package/template/.cowork-flow/scripts/services/context_paths.py +4 -4
  105. package/template/.cowork-flow/scripts/services/fact_view.py +13 -10
  106. package/template/.cowork-flow/scripts/services/lifecycle_checks.py +47 -13
  107. package/template/.cowork-flow/scripts/services/lifecycle_policy.py +5 -2
  108. package/template/.cowork-flow/scripts/services/readiness.py +8 -3
  109. package/template/.cowork-flow/scripts/services/spec_check.py +23 -33
  110. package/template/.cowork-flow/scripts/services/task_archive.py +76 -41
  111. package/template/.cowork-flow/scripts/services/task_creation.py +90 -34
  112. package/template/.cowork-flow/scripts/services/task_lifecycle.py +210 -50
  113. package/template/.cowork-flow/scripts/services/task_routing.py +0 -8
  114. package/template/.cowork-flow/scripts/services/task_tree.py +181 -29
  115. package/template/.cowork-flow/scripts/services/task_utils.py +3 -20
  116. package/template/.cowork-flow/scripts/services/workflow_runtime.py +39 -22
  117. package/template/.cowork-flow/spec/contracts/context-injection.md +27 -2
  118. package/template/.cowork-flow/spec/contracts/fact-layer-access.md +7 -4
  119. package/template/.cowork-flow/spec/contracts/index.md +4 -0
  120. package/template/.cowork-flow/spec/contracts/spec-checks.md +13 -2
  121. package/template/.cowork-flow/spec/runtime/host-assets.json +155 -18
  122. package/template/.cowork-flow/spec/runtime/index.md +1 -1
  123. package/template/.cowork-flow/spec/schemas/host-assets.schema.json +69 -7
  124. package/template/.dsh/README.md +27 -7
  125. package/template/.opencode/cowork-flow/plugin-core.js +1077 -0
  126. package/template/.opencode/plugins/cowork-flow.js +23 -800
  127. package/template/skills/python-runtime-design/SKILL.md +6 -0
  128. package/template/skills/runtime-health/scripts/doctor.py +725 -14
  129. /package/{template/.zcode → presets/zcode}/hooks/hooks.json +0 -0
package/CHANGELOG.md CHANGED
@@ -1,305 +1,291 @@
1
- # Changelog
1
+ # 更新日志
2
2
 
3
- ## 1.6.0 - 2026-09-20
3
+ ## [Unreleased]
4
4
 
5
- ### 门禁诚实化(收集一致 / 平台 skip / CI 同门禁)
5
+ ### Added
6
6
 
7
- - **收集一致**:`tests/test_agents_managed_block.py` 的两条断言原为模块级函数,`python -m unittest`(发布门禁与 `test:template` 用的收集器)收集不到它们(实测 `Ran 0 tests`),只有 pytest 能看到。现移入 `unittest.TestCase`,并进入 `CORE_TEMPLATE_TEST_MODULES`(core 套件 176 → 178)。新增 `tests/test_test_collection.py` 守卫:`tests/` 下再出现对 unittest 不可见的模块级 `def test_*` 即失败。
8
- - **Windows 静默通过**:`test/dsh-home-patch.test.js` 此前在 win32 顶层 `process.exit(0)`,`node --test` 把整个文件记为**通过文件**(不进 skipped、不进 fail)。现改为 7 个用例带 `{ skip: <具体原因> }`,Windows 上如实计入 skipped。
9
- - **恒真断言**:`tests/test_host_adapters.py` 三处「断言自己刚写死的字面量长度」(`assertEqual(2, len(surfaces))` 等)改为非空断言——不再恒真,也不引入需要同步维护的数字。
10
- - **CI 与发布同门禁**:ubuntu job 不再分步跑 fast / integration / core,合并为一步 `npm run release:check`(与 publish.yml 完全相同的命令,`setup-python` 前置到它之前);`test/package.test.js` 新增断言锁定该一致性。此前 `test:node:full` 与 `test:template:full` 两层只在发布时首次执行,PR 侧从不运行。
11
7
 
12
- ### 宿主必需集合单源化
8
+ ## [1.7.1] - 2026-09-30
13
9
 
14
- - 删除 Python `host_manifest.REQUIRED_CAPABILITY_MATRIX_HOSTS` 与 JS 镜像常量:`capabilityMatrix.hosts` 的必需宿主集合改由 manifest 的 `platforms` 派生(`set(platform_ids)` / `new Set([...platformIds])`)。
15
- - 删除 `host-assets.schema.json` 中第三处宿主名枚举——它处于漂移状态(要求 5 家、含 `dsh`、缺 `kimi-code`,而数据是 6 家)。schema 只约束结构,宿主覆盖由运行时按数据校验。
16
- - 新增共享 fixture `tests/fixtures/host-manifest/invalid-missing-matrix-host.json`(平台已声明但矩阵缺条目),Python 与 JS 两侧都拒绝(`capability matrix missing host: codex`),证明常量删除后该规则仍生效。
17
- - `spec/runtime/index.md` 记录派生规则。
10
+ ### Fixed
18
11
 
19
- ### 死代码与文档漂移清理
12
+ - 三个机器级 hook shim(Qoder / ZCode / Kimi Code)改为 **fail-open**:项目侧运行时返回非零、无法启动或超时时,shim 把原因写进宿主运行日志并返回 0,只跳过本次注入——不再把宿主的「hook 失败」升级成「拒绝用户输入」。修前在 Qoder 里,只要工作区项目的运行时早于 qoder 适配(本项目 9 个旧项目都是),每次输入都会被拦:`inject.py: error: argument --host: invalid choice: 'qoder'` → `exit code 2` → `Blocking hook failure(s) … for UserPromptSubmit`。项目级写入的 Edit 期规范门禁(Claude Code / Codex)保留阻止语义,它与所调用的运行时同源、不存在版本错配。升级动作:`cwf host add qoder --force`(或对应宿主)刷新机器级载荷后重启宿主;要让旧项目恢复注入,再对该项目运行 `cwf project sync .`。
20
13
 
21
- - 删除仅测试可达的 skill-path 链:`context_discovery` 的 `detect_installed_platforms`(手写 3 宿主)、`SKILL_REPLICA_DIR_BY_PLATFORM`、`skill_root`、`skill_path`,以及 `adapters/cli/task.py` 的三个未调用别名。该链在生产代码零调用,真实契约由 `infra/skill_manifest` 与 manifest 的 `skillTarget` 承担。
22
- - 删除 `infra/paths.py` 中 `return` 之后的孤儿 try 块(引用未定义的 `file_path`,为 2026-08-05 移除 journal 流程时遗留)。
23
- - 删除 `fact_view.STAGE_CONTRACT_STATES`(文件内零引用;活定义在 `workflow_state_hook`)、`lifecycle_checks` 两个零调用的 `*_blockers` 包装、`adapters/review/test_intent` 的恒空校验器 `validate_test_intent` 与三个未被读取的常量,以及断言其返回空的同义用例。
24
- - 文档对齐:README 保护文件描述与 `syncPolicy` 实际一致(两个 spec 例外文件 + `.developer`);两处 spec-check 文案 3s → 2.5s;`spec/schemas/index.md` 补列 `host-assets.schema.json`;清理指向已 untrack `docs/` 的历史死链。
14
+ ## [1.7.0] - 2026-09-29
25
15
 
26
- ### DSH 注入接线覆盖
16
+ ### Added
27
17
 
28
- - `presets/dsh/plugins/workflow-state.js` 的 `apply(ctx)` 此前零测试。新增用例覆盖:四个刷新事件的接线、section 注册(name/order)、无缓存时返回空文本、非编辑调用下 `tools/post-execute` 原样透传 downstream、非 cowork-flow 根目录静默降级——全部在 Windows 上真实执行。「刷新替换而非累积」用例按既有惯例在 Windows skip(宿主解释器限制)。
18
+ - 新增 `cwf` 命令名,并把命令整理为 `project`、`host`、`self`、`mcp`、`dev` 五组。`cwf --help` 和各层 `--help` 由同一注册表生成。
19
+ - 新增统一的机器级宿主命令:`cwf host add`、`cwf host remove` 和 `cwf host list`。
20
+ - 新增 Claude Code 插件安装器。插件写入用户技能目录,只提供 `cowork-flow-bootstrap` 引导技能,项目 hook 和 agents 仍由 `project init` 交付。
21
+ - 新增 OpenCode 全局插件安装器。插件自行注册引导技能目录,不修改用户的 `opencode.json`。
22
+ - 新增 Qoder 插件适配,提供 hook、三个 fixed subagent 和引导技能;工作区需要受信任,安装后需要重启 Qoder。
23
+ - 新增 Kimi Code 插件载荷。`cwf host add kimi-code` 默认准备插件源并打印 TUI 安装指令;工作流注入仍可显式使用 `--component hook`。
24
+ - 新增 Codex 插件。安装器准备稳定 marketplace 源并委托 Codex 官方 CLI 注册,不直接修改 `config.toml`。
25
+ - 新增 `cowork-flow-bootstrap` 机器级引导技能,用于没有项目运行时的目录。
26
+ - 新增 `presets/plugin-meta.json` 作为插件显示名、简介、作者、仓库、许可证和关键词的单一来源,并修正作者名拼写。
27
+ - Codex 插件支持 `interface.logo` 和 `interface.brandColor`;ZCode marketplace 支持 HTTPS 图标 URL。
28
+ - 新增 `SECURITY.md`、Issue 模板、PR 模板、Dependabot 和编辑器基础配置。
29
+ - Qoder 的 hook 注入新增一条用户可见痕迹:hook 输出补顶层 `systemMessage`,`qodercli` 的终端 TUI 会把它显示成 `<hook 名> says: <文案>`,每次 SessionStart / UserPromptSubmit 注入都会显示 `cowork-flow: 工作流状态已注入 · status=… · task=…`(只给人看,模型上下文不受影响;Edit 期的规范自查不带这条),文案与实际注入的状态走同一条解析路径。**Qoder 桌面版不渲染 hook 输出文本**:1.1.64 的桌面客户端里没有 `systemMessage` / `hook_system_message` 的渲染路径,聊天中的 hook 部件被直接跳过,所以桌面端要核对注入是否发生,看回复操作条上的锚点图标 tooltip(列出 `SessionStart`、`UserPromptSubmit` 及状态),或看 `~/.qoder/logs/runs/<最新一次运行>/qodercli.log` 里的 `hook.finished … success=true exit_code=0`。其它六个宿主的输出逐字节不变。升级动作:`cwf host add qoder --force` 刷新插件缓存,并在项目里运行 `cwf project sync .` 更新项目运行时(文案由项目运行时渲染),然后重启 Qoder。
29
30
 
30
- ### Windows 检出与行尾契约
31
+ ### Changed
31
32
 
32
- - 根因:`presets/kimi-code/hooks/cowork-flow-inject.mjs` 落在 `* text=auto` 下且未被 `.gitattributes` 钉行尾,Windows 全新检出(Git for Windows 默认 `core.autocrlf=true`,与 `windows-latest` 一致)把它写成 CRLF;`install-kimi-hook` 原样拷贝为全局 hook shim,于是 `test/kimi-hook.test.js` 的 `/^#!\/usr\/bin\/env node\n/` 断言失败,`test:fast` → `windows-core` 确定性红。
33
- - 修复:`.gitattributes` 为 `*.js`/`*.mjs` 声明 `text eol=lf`(与已钉的 `.py`/`.md`/`.json` 等一致);`test/package.test.js` 新增行尾契约断言锁定该声明。
34
- - 为什么只在 Windows CI 可见:开发者工作区与 ubuntu 检出都是 LF,只有 Windows 全新检出是 CRLF。断言保持严格——CRLF shebang 的脚本在 POSIX 上无法直接执行,要修的是检出契约而不是判据。
35
- - 证据:全新检出实测踩中同一断言失败(`test:fast`);仅把该文件规范化为 LF → 整条 `npm run test:windows:core` exit 0;Node 20.12.0 / 20.20.2 / 24.14.1 结果一致,与 Node 版本无关。
33
+ - 七个宿主统一通过 `host-assets.json` 声明平台、技能根、载荷和同步策略;机器级组件、doctor 和命令帮助与声明保持一致。
34
+ - 项目技能只由 `template/skills/` 分发,插件不再复制项目技能。Codex、OpenCode、ZCode、Qoder、Kimi Code 和 DSH 统一改用 `.agents/skills/`;Claude Code 使用 `.claude/skills/`。
35
+ - Kimi Code 默认机器级组件改为插件;hook 保留为显式组件。DSH 默认组件仍为预设。
36
+ - `template/.zcode/` 迁到 `presets/zcode/`,机器级载荷与项目级资产分目录维护。
37
+ - `host-assets.json` 增加 `payload` 描述符,插件安装器从声明读取载荷位置和清单,不再各自硬编码。
38
+ - 插件清单统一由元数据投影并在安装时写入版本;项目级和机器级载荷共用同一份引导技能。
39
+ - 文档改为 README 用户指南、`docs/` 详细说明、`CONTRIBUTING.md` 贡献流程和 Keep a Changelog 更新日志,并随 npm 包发布。
40
+ - 发布脚本新增 `--dry-run` 和 `--no-publish`。前者会真实刷新自实例并运行前置检查,但停在版本 bump 之前;后者完成版本、提交和 tag 后交给 CI 发布。
41
+ - CI 明确记录测试跳过项;Windows 缺少 POSIX 前提时不再把跳过记为通过。
42
+ - 核心库做了一轮结构与注释整理(Python 运行时 + Node 核心库),**行为与对外契约零变化,无需升级动作**:`# ====` 横幅 13 处、`del` 占位 7 处、超长函数 14 个(Python 7 + Node 7)、≥60 字符的注释行 626 条(Python 161 + Node 465)、模板化 docstring 18 条全部清零;九个宿主安装器的重复骨架收敛为 `src/lib/install-support.js`;注释与 docstring 改为只写读代码看不出来的约束。按设计保留的例外:1 处 93 行的宿主载荷函数(`presets/dsh` 的 `apply`),以及 6 处属于协议或统一命令签名的参数。
43
+ - **升级动作**:升级 CLI 后运行 `cwf project sync .`。已有机器级组件按需重装:Codex、Claude Code、OpenCode、ZCode、Qoder 使用 `cwf host add <host> --force`;DSH 使用 `cwf host add dsh --component preset --force`;Kimi Code 重新运行 `cwf host add kimi-code` 并在 TUI 中安装插件。DSH 桌面版(0.2.0+)还需在 DSH 内执行一次 `plugin_manager { action: "install_bundle", target: "$DSH_HOME/bundles/cowork-flow" }`,命令输出里会打印完整路径。
36
44
 
37
- ### 净变化
45
+ ### Fixed
38
46
 
39
- - 运行时代码(`template/.cowork-flow/scripts` + `src`):**+4 / −114,净 −110 行**;runtime 模块数 80 不变(行尾修复不涉及运行时代码)。
40
- - 本次门禁工作:`e262196` **+365 / −200**(含 2 个新文件 +162 行)、`7fa3f8b` +3 / −2,行尾修复为小改动(行尾声明 + 契约守卫 + 记账);新增集中在 `tests/` 与 `test/`。**AC-006「净行数 ≤ 0」未达成**——三条口径都是新增大于删除。
41
- - 版本口径参考:自 1.5.0 发版提交 `a4b0bfc` 起,1.6.0 全部提交的净变化由本版本更早的宿主特性主导,不属本次门禁工作。
42
- - 契约指纹:registry 登记的契约文件与 `spec/runtime/host-assets.json` 均未改动,指纹不变。
47
+ - 适配 DeepSeek Harness 0.2.0 桌面版。0.2.0 起预设不再是 `$DSH_HOME/.agent-presets/<id>/` 目录(宿主自带技能原文:"Nothing reads that directory any more"),而是 bundle patch 里 `@deepseek-ai/dsh-agent-preset` 的一条声明行。`cwf host add dsh --component preset` 现在同时写 legacy 目录(0.1.x / CLI 线)与可安装 bundle(`$DSH_HOME/bundles/cowork-flow/`,含生成的 `cordis.patch.yml`、`package.json` 与插件副本),bundle 由宿主自己的插件管理器安装(桌面版是侧边栏 Plugins 页,填 bundle 目录的绝对路径;`plugin_manager` 工具行在桌面宿主组合里被禁用)。两条交付线只差宿主 API 不同的两处,bundle 生成时替换:工作流行(0.1.x `dsh-workflow-worker-thread` ↔ 0.2.0 `dsh-workflow-ptc`)与 persona 行的配置键(0.1.x `text` ↔ 0.2.0 `prefix`)——包解析不到或配置键不被接受,宿主会把**整个**预设判为不可用,因此两边都只写目标线存在的包与 schema 接受的键;workflow-state 插件补订阅 0.2.0 的 `agent/created` 事件(与旧名 `agent/session-start` 并存,两代都能预热)。
48
+ - 修复 `config.yaml` 行内注释剥离把引号内的 `#` 也当作注释起点的问题。`description: "a # b"` 以前被解析成 `a`,以 `#` 开头的引号值(`note: "# keep"`)还会被误判成段落头并吞掉后续缩进行。现在只有引号外、且位于行首或空白之后的 `#` 才开启注释;未加引号的 `v1#beta` 按 YAML 语义保留,列表项与标量使用同一判定。
49
+ - 修复 OpenCode 插件模块导出测试 helper 后导致宿主启动崩溃的问题。插件入口现在只导出可调用的插件工厂,逻辑放在独立模块中。
50
+ - 修复 Kimi Code 插件清单字段和路径不符合宿主 schema 的问题:技能路径改为 `./` 形式,显示信息移入 `interface`,安装器不再输出宿主拒绝的相对源目录。
51
+ - 修复 Qoder 插件清单路径不符合宿主 schema、导致插件被整体丢弃的问题。清单的 `hooks`/`agents`/`skills` 沿用了 zcode 宿主的裸路径写法,而 Qoder 要求路径以 `./` 开头(`hooks` 还要以 `.json` 结尾)、`agents` 只接受 `.md` 文件路径——一处不合法宿主就解析清单失败并丢弃**整个**插件:hook 不注册、agents 与 skills 也不加载,只在 `~/.qoder/logs/qodercli.log` 里留一行 `Failed to load installed plugin`。现在 `hooks`/`skills` 用 `./` 形式,`agents` 交给宿主的目录约定发现。升级动作:`cwf host add qoder --force` 后重启 Qoder。
52
+ - 修复 ZCode 技能根声明与宿主实际扫描路径不一致的问题,旧 `.cowork-flow/skills/` 副本在同步时清理。
53
+ - 修复测试和技能脚本在 `template/`、`presets/` 下写入 `__pycache__` / `*.pyc` 的问题,并增加交付树纯净性门禁。
54
+ - 修复 Windows 全新检出把 JavaScript 和运行器脚本转成 CRLF 的问题;`.gitattributes` 固定相关文件使用 LF。
55
+ - 修复 CLI 未知旗标被静默忽略的问题。`cwf` 统一区分用法错误和操作失败,并拒绝多余位置参数。
56
+ - 修复 `host list` 与注册表中的过时“无机器级组件”分支;所有已声明宿主都必须有对应组件和测试。
57
+ - 七家宿主的项目技能发现通道均完成本机验证,不再登记为未验证假设。
43
58
 
44
- ### 平台差异与远端确认
59
+ ### Removed
45
60
 
46
- - Windows 上 `test:node:full` 的 skipped 明细新增 `dsh-home-patch` 的 7 条;这些用例在 ubuntu 发布门禁中真实执行。
47
- - POSIX-only:`a session refresh replaces the cached block instead of accumulating` 与既有 DSH 内容用例在本机(Windows)skip,未在本机执行。
48
- - 远端确认(提交 `e262196`,CI run 35503939861):ubuntu job 首次执行 `release:check` **通过**——17 条此前只在发布时运行的 `release.test.js` POSIX 用例在 CI 上真实执行并全部通过。
49
- - 同一 run 的 `windows-core` 失败(步骤 `Run Windows core verification`,exit 1)。该 job 在改动前的 `aa0e34e` 上即为同样的失败,不是本版本的功能改动引入;根因是行尾契约缺失,已在本版本修复(见「Windows 检出与行尾契约」),远端日志无需仓库权限即可复现——全新 `git clone` 即可稳定踩中。
61
+ - 任务导航的 `allowedOperations` 不再列出没有实现的操作名(`verify_change`、`apply_review_fix`、`report_result`、`report_needs_context`)。这些 id 既没有状态迁移事实,也没有归属 Skill,永远不会成为下一步动作;路由判定结果不变。
62
+ - 删除插件、预设中的项目技能副本。旧安装由 `PLUGIN-SKILLS-LEGACY` 提示重装清理。
63
+ - 删除 qoder、zcode 和其他宿主的失效适配器路径声明,以及不再使用的技能路径推测和宿主枚举。
64
+ - 删除 `install-kimi-hook` 的无效 `--force` 选项;Kimi hook 始终重写自己的托管区块。
50
65
 
51
- ## 1.5.0 - 2026-09-18
66
+ ## [1.6.0] - 2026-09-20
52
67
 
53
- ### 发版开关 `--no-publish`
68
+ ### Changed
54
69
 
55
- - `scripts/release.sh` 新增 `--no-publish`:刷新、self-instance 镜像、双套测试门禁、版本 bump、changelog 校验、提交、tag 全部照常执行,只跳过最后的 `npm publish`,并提示 tag 仍是本地(后续走 `npm publish` 或 `gh release create v<v>` 触发 CI 通道)。不带该 flag 时行为逐项不变。
56
- - 参数解析改为逐个消费:`--no-publish` 位置无关且可重复;release-type 与 `--version` 仍互斥、最多出现一次,重复被拒。
57
- - 动机是既有的 CI 发布通道——tag 落地后由 `gh release create` 触发 publish.yml,而脚本此前只能一路 publish 到底。
70
+ - PR CI 改为运行与发布相同的 `release:check` 门禁,避免只覆盖部分测试。
71
+ - 宿主必需集合改由 Host Asset Manifest 派生,删除 Python、JavaScript 和 schema 中的重复宿主枚举。
72
+ - README 保护文件说明、spec-check 超时文案和 schema 索引与实际行为对齐。
73
+ - 发布和测试报告保留平台跳过项,不把未执行用例记为通过。
58
74
 
59
- ### 编辑期覆盖扩展(codex / opencode / dsh)
75
+ ### Fixed
60
76
 
61
- - **codex**:`hooks.json` 注册 `PostToolUse`(matcher `apply_patch|Write|Edit`),编辑后违规经既有 `spec_only_post_tool_use` 通道(stderr + exit 2)反馈;运行时无需新增分支。
62
- - **opencode**:插件新增 `tool.execute.after` 钩子——`edit`/`write` 命中时调用 `run spec-check --phase edit --file <path> --throttled`,把非空单行结果追加到工具结果文本;2.5 秒超时,运行时不存在的静默且不阻断编辑。
63
- - **dsh**:预设插件注册 `tools/post-execute` waterfall——`write`/`edit` 命中时调同一 Python 协议(`run_edit_checks`),把单行告警作为 `additionalContexts` 附件送入下一轮请求;2.5 秒超时,无根/无解释器/协议异常一律静默。DSH 的 `tools/result` 只能观察不能回写,故走 post-execute 而非复用刷新监听。
64
- - **路径提取多形态**:PostToolUse 的路径提取兼容 `file_path`/`filePath`/`path` 与 codex `apply_patch` 补丁文本(`*** Update/Add/Delete File:` 行);同一路径去重,避免重复消耗节流窗口。
65
- - **契约诚实化**:`spec-checks.md` 矩阵与 README 从"opencode 降级:无"改为准确表述——五个宿主全部覆盖,其中 zcode 仅主会话、dsh 经预设注入;此前的"降级"是项目未接线,不是宿主能力缺失。
66
- - **实弹验收项(未在本地执行)**:codex 会话编辑后 stderr 反馈可见(需宿主 hook 信任批准);opencode 会话 edit 后工具结果含单行警告;dsh 会话编辑后下一轮上下文含 spec-check 通知。
77
+ - 修复 `spec-check` 文本模式对规范声明解析错误伪绿的问题:解析错误与 `unchecked` 同样返回退出码 2,并在文本输出中列出出错的规范文件;`--allow-unchecked` 不豁免解析错误。
78
+ - 修复 Unit of Work 冲突补偿的两处丢失:回滚会恢复内容为 `{}` 的已删文件,也会把"写入前并不存在"的新文件还原为不存在。
79
+ - 修复任务创建重复使用已有目录、失败后留下半成品的问题:创建拒绝任何已存在的任务目录,中途失败只清理本次写入的文件与空目录,同 slug 可以重试。
80
+ - 修复 OpenCode 插件绑定运行上下文时两次写入不原子导致的半绑定:会话记录与上下文绑定在同一组锁下定稿,第二次写入失败会撤销已落盘的第一次。
81
+ - 修复运行上下文的 `initialize`、`bind`、`close` 在外部回滚后重试被旧记录卡住的问题:每次尝试使用独立操作 id,重试会真正改写文件,正常幂等重放与冲突诊断不变。
82
+ - 修复 Codex 插件卸载在 CLI 解绑失败时删除 marketplace 与缓存的问题:现在保留现场并打印可重试的手工步骤。
83
+ - 修复 Qoder 插件把"只有载荷、没有注册"的安装当成已安装的问题:判定同时要求注册表条目与启用标记,缺失时自动补齐。
84
+ - 修复根目录 `.zcodeignore` 未被忽略而阻塞发布干净工作树门禁和任务复核的问题。
85
+ - 修复状态文件含非法 UTF-8 时读取崩溃的问题:现在返回空结果、保留原文件并输出诊断。
86
+ - 修复 unittest 收集不到模块级测试函数的问题,并增加测试收集守卫。
87
+ - 修复 Windows 专属测试文件在顶层退出时被记为通过的问题;现在明确显示跳过原因。
88
+ - 修复宿主适配测试中的恒真断言。
89
+ - 修复 JavaScript 文件在 Windows 全新检出后使用 CRLF、导致 shebang 断言失败的问题。
90
+ - 补齐 DSH workflow-state 插件的刷新事件、section 注册、降级和工具透传测试。
67
91
 
68
- ### DSH 预设过期检测
92
+ ### Removed
69
93
 
70
- - **版本标记**:`install-dsh-preset` 安装后在预设目录写入 `.cowork-flow-preset.json`(`version` + `installedAt`);已安装且版本不同时,不带 `--force` 的重复执行输出过期提示与更新命令,而不是仅报 "already installed"。
71
- - **doctor 检测**:新增只读 advisory 检查 `check_dsh_preset`——预设缺失时不报告;无标记或标记不可读 → `PRESET-UNKNOWN-VERSION`;与项目 `.cowork-flow/.version` 不一致 → `PRESET-STALE`;两者都附 `install-dsh-preset --force` 提示,且不进入 doctor 的 error 集合(`ok` 不受影响)。
72
- - **背景**:预设不随 `sync`/npm 更新,此前升级路径只存在于 README 散文,用户可能长期停留在旧注入逻辑且没有任何提示;协议失败时该宿主的注入会静默降级为空输出。
94
+ - 删除无调用的技能路径链、孤儿异常处理、恒空校验器和其它只由测试触发的死代码。
73
95
 
74
- ### 下游可发现性与文档权威性(spec-check)
96
+ ## [1.5.0] - 2026-09-18
75
97
 
76
- - **发现路径补齐**:`run` 帮助列出 `spec-check`;`AGENTS.md` 的 managed block(模板与根同块)加指针行;README 新增「规范挂命令」与「MCP 客户端接入」两节,能力表与常用命令同步。
77
- - **契约修正**:`spec/contracts/spec-checks.md` 的「归属与 sync 策略」改为与实际一致——`spec/` 是 sync 保护前缀,已安装项目不会被同步改写;具名例外是 `syncPolicy.safeFiles` 中的契约文件。该文件加入 `safeFiles`(同 `workflow-state-templates.md` 先例),使契约修正能到达已安装下游。
78
- - **fallback 自救路径**:`FALLBACK_BINDING_BLOCKER` 与两处 lifecycle 拒绝文案改为指向 workflow-state 头部的 `session` 属性(`COWORK_FLOW_CONTEXT_ID`),不再给出无任务可传的 `pass <task-dir>` 单一出路。
79
- - **悬空引用清理**:README 与模板脚本/spec 中指向已 untrack 的 `docs/` 的引用全部改写或内联(MCP 客户端配置要点保留在 README)。
80
- - **测试**:新增根/模板 managed block 字节相等与指针断言、fallback blocker 文案可执行性断言。
81
- - **已知合法副作用**:contract fingerprint 由 `d1d0e2536e8fa150` 更新为 `2dc34375d28f8103`(内容派生;`host-assets.json` 的 `safeFiles` 条目变更)。
98
+ ### Added
82
99
 
83
- ## 1.4.0 - 2026-09-14
100
+ - 发布脚本新增 `--no-publish`,可完成版本、提交和 tag 后交给 CI 执行 npm 发布。
101
+ - Codex、OpenCode 和 DSH 增加编辑期规范检查,违规以单行提示返回,不阻断编辑动作。
102
+ - DSH 预设写入版本标记;doctor 可报告 `PRESET-UNKNOWN-VERSION` 和 `PRESET-STALE`。
103
+ - 修复上下文后补齐 MCP 注册、运行帮助和相关文档入口。
84
104
 
85
- ### Hook 会话身份绑定(fix(runtime))
105
+ ### Fixed
86
106
 
87
- 实弹暴露的多窗口交叉读取问题:zcode hook 会话携带对话自身的 session id,而任务激活发生在 Bash CLI 的显式身份下,导致未绑定的 hook 会话回退到 newest-session 时可能**读到另一个窗口的任务**。本版把绑定与回退语义一起收紧:
107
+ - 修复 PostToolUse 对 `file_path`、`filePath`、`path` 和 Codex 补丁文本的路径提取差异。
108
+ - 修复 DSH 预设升级后没有提示的问题。
109
+ - 修复无可信会话身份时 fallback 文案无法指导用户重新绑定的问题。
88
110
 
89
- - **激活即认领**:PostToolUse 在激活类命令(`task start` / `task next <dir> --run` / `resume <dir>`)之后,把 hook 会话自己的 `zcode_<sessionId>` 绑定认领下来(`session_state.claim_active_task`);查询类命令与不可信身份(process-fallback/缺失)永不认领。
90
- - **回退语义收紧**:`fallback_for_unbound` 仅在**恰好存在一个** main-session 绑定时跟随最新的那个;存在多个绑定时,未绑定 hook 会话渲染 no_task + rebind 提示,绝不交叉读取其他窗口。
91
- - **会话身份显式化**:workflow-state 头部新增 `session=<contextKey>` 属性,模型可将其作为 `COWORK_FLOW_CONTEXT_ID` 传给后续 CLI 调用,打通 hook 会话与 CLI 身份。
92
- - **MCP 拒绝隐式冒认**:`task_state` / `task_scope` / `task_list` 在不可信身份下拒绝隐式解析(`identity-untrusted`),不再冒认 process-fallback 任务;CLI `FALLBACK_BINDING_BLOCKER` 语义不变(回归护栏锁定)。
93
- - 契约文档 context-injection.md 同步记录 session 属性与回退语义;新增 pytest 396 行覆盖(active_task_runtime / inject_entry / mcp_state_server / workflow_state_hook)。
111
+ ## [1.4.0] - 2026-09-14
94
112
 
95
- ## 1.3.0 - 2026-09-09
113
+ ### Fixed
96
114
 
97
- ### 跨宿主适配通用化(注入单源化 + MCP 重定位)
115
+ - 修复多窗口下未绑定 hook 会话可能读取其它会话任务的问题。激活命令会认领当前会话;只有一个可信绑定时才允许回退跟随,多个绑定时保持 `no_task` 并提示重新绑定。
116
+ - MCP 任务查询不再用不可信的进程级身份冒认任务。
117
+ - 工作流状态新增 `session` 属性,供 hook 与后续 CLI 调用共享会话身份。
98
118
 
99
- 注入事实逻辑收拢到单一 Python 源,MCP 定位收口为"外部/无 hook 宿主的通用 pull 通道":
119
+ ## [1.3.0] - 2026-09-09
100
120
 
101
- - **宿主中立入口 `inject.py`**:zcode shim、claude-code、codex 全部走同一入口(`--host` 选择信封与形状),wrapper 瘦身为 ≤20 行委托。digest policy 措辞、registry-warning 抑制(zcode)、preamble、信封缩进全部按 host 参数化,仍由 context-injection.md 契约锁定。
102
- - **zcode shim 化**:`inject-context.js` 从 ~1000 行事实镜像降为 ~140 行传输层——事件路由、PostToolUse(Bash) 廉价过滤(非生命周期命令零 spawn)、解释器定位(项目 runtime 优先、插件缓存副本兜底)、stdin/stdout 转发。删除 `inject-context.selfcheck.mjs`。matrix 逐字相等测试中的 zcode 线改为经 shim 驱动单源。
103
- - **每宿主策略模块**:`adapters/host` 拆出 zcode/claude_code/codex policy(digest 措辞、警告静默、rebind 提示、essential-files、PostToolUse 传输、emit 格式化),共享层与入口零 `host ==` 分支;无模块宿主(dsh)走中立默认。字节级契约不变(fingerprint、stage-contract matrix 绿)。
104
- - **JS-only 行为移植进 Python 单源**:`formatRebindHints`(zcode 无任务体补活动任务列表)、`editScopeWarning`(逐文件 scope 白名单警告,与 spec 警告合并进同一载荷)、missing-task 统一文案(原 "stale" 通用回退改为明确指向任务目录不存在 + 建任务指引,全宿主生效)、`checkEssentialFiles` 缺文件警告(zcode)、无会话身份时的 newest-session 显示回退(zcode,仅显示不改写绑定语义)。
105
- - **MCP 重定位**:`task_scope` / `task_specs` 补 CLI 同源事实命令(`task scope` / `task specs`),MCP 不再有独占能力;contract-registry 注册 `FACT_LAYER_ACCESS_V1` 契约(digest 行注入"MCP 优先查询事实,CLI 兜底");doctor 新增 MCP 注册健康项(项目级 .mcp.json 存在性 / 全局+项目双重注册提示 / 缺失提示),只读 advisory 不阻断;README 增加两档注册说明(全局受支持默认 + 项目 opt-in 地图)。
106
- - **修复(1.2.0 遗留,Windows)**:`spec_check._run_command` 三处——含引号命令经 list2cmdline 转义后 cmd.exe 解析失败;`text=True` 未显式 `encoding="utf-8", errors="replace"`,中文 Windows cmd GBK 输出致解码线程崩溃、输出丢失;命令入口缺失在 Windows 被误分类为 violation(现经 `shutil.which` 归 unchecked,契约三态语义恢复一致)。
107
- - **修复**:legacy runtime context 文件(缺 `runtime_context_id` 字段)注入显示回退到检测到的 id。
121
+ ### Changed
108
122
 
109
- **行为变更**:delegated 绑定写语义统一为 Python(zcode 注入时新增 bind 写,原 JS 为只读);zcode missing-task 文案与全宿主统一;digest/fingerprint 因注册 `FACT_LAYER_ACCESS_V1` 而变化(预期内,change guard 允许)。
123
+ - 状态注入逻辑收拢到 Python 单一入口,宿主适配层只负责事件和传输差异。
124
+ - `task_scope`、`task_specs` 增加与 MCP 同源的 CLI 查询命令;MCP 主要作为无 hook 宿主的只读查询通道。
125
+ - ZCode 注入脚本缩减为传输层,编辑期检查使用节流和统一预算。
126
+ - 子代理无法收到宿主编辑期反馈时,改为在报告前显式运行 `spec-check` 自检。
110
127
 
111
- ### 实弹修正与 delegated 自检协议化(fix)
128
+ ### Fixed
112
129
 
113
- 实弹验证(zcode 插件 live proof)暴露四个缺陷并修复:
130
+ - 修复 Windows 下带引号命令、中文输出解码和命令缺失分类不一致的问题。
131
+ - 修复未绑定 ZCode 会话的编辑期 scope/spec 警告完全静默。
132
+ - 修复 scope 使用绝对路径比较导致所有编辑都被误报越界。
133
+ - 修复缺少 git 时任务启动崩溃;无 HEAD 时降级为 working-tree 状态。
114
134
 
115
- - **未绑定会话的编辑期警告可达**:zcode hook 会话携带对话自身 id、从不绑定(激活发生在 Bash CLI 的显式身份下),empty-session 此前跳过 newest-session 回退——主会话的编辑期 spec/scope 警告完全静默。回退现覆盖 empty-session,`spec_edit_warning` 的 zcode 路由经它放行(claude-code/codex 保持严格身份)。
116
- - **scope 路径相对化**:`edit_scope_warning` 此前拿原始绝对路径与仓库相对白名单比对,所有编辑都被误标越界;现与 spec 路径同样归一为仓库相对,警告行显示相对路径。
117
- - **编辑期预算与节流加固**:edit 钳制 3s→2.5s(子进程预算余量);节流只在跑完一次后写入(执行器崩溃不再吞掉节流窗口);`files` 多值列表逐 token 剥引号。
118
- - **delegated 子代理收到 spec 反馈**:编辑期 spec 警告的静默范围此前在 Python/JS 两侧不一致,现统一为 delegated 会话可达(scope 警告保持仅主会话)。
135
+ ## [1.2.0] - 2026-09-08
119
136
 
120
- 配套协议化(文档与 skill):实弹两轮证实宿主 PostToolUse 只覆盖主会话流——Agent 子代理收不到编辑期反馈。按已验证的 CLI 拉取路径固化:子代理报告前跑 `run spec-check` 自检修复(subagent-dispatch.md、agent-dispatch SKILL);父侧验收把 violation 作为验收阻断项(task-review SKILL,delegated 工作最早的可靠检查点);task-planning 的实现 Verify 命令默认含 spec-check 自检;spec-checks.md 记录缺口、四部分补偿与治理方向(向宿主请求;原生的那一环降级为冗余保险)。
137
+ ### Added
121
138
 
122
- **已知合法副作用**:contract fingerprint 更新为 `d1d0e2536e8fa150`(内容派生;Python 与 JS 镜像重算一致)。
139
+ - 新增规范挂命令:项目规范可在 frontmatter 中声明 `cmd`、`files`、`timeout` 和 `when`。
140
+ - 新增 `./.cowork-flow/run spec-check`,结果分为 `pass`、`violation` 和 `unchecked`;后两者阻断完成。
141
+ - 编辑期检查提供单行提示,收口检查把结果写入任务记录。
142
+ - doctor 报告无法解析或无法执行的规范检查声明。
123
143
 
124
- ### 发布门禁加固(release.sh)
144
+ ## [1.1.4] - 2026-08-31
125
145
 
126
- - 同步 `--force` 自实例镜像时带 AGENTS.md 定制守卫(脏树预检、sync 后从 HEAD 还原);pytest services 门禁前置到 `test:all` 之前;`.gitattributes` 将 `*.version` 钉为 LF(fingerprint 字节比对前提)。
146
+ ### Fixed
127
147
 
128
- ## 1.2.0 - 2026-09-08
148
+ - 修复 Windows 下 Node 直接启动 npm `.cmd` shim 时出现 `EINVAL` 的问题;`mcp-state` 改用与 npm 一致的 shell 启动方式。
129
149
 
130
- ### 规范挂命令(spec 约束前移)
150
+ ## [1.1.3] - 2026-08-30
131
151
 
132
- 用户在 `.cowork-flow/spec/` 定义的行为规范,从"review 才发现"前移为"编码时即约束":
152
+ > 1.1.1 和 1.1.2 的变更首次随 1.1.3 一起发布;本版本同时承载前两个版本的代码。
133
153
 
134
- - **spec frontmatter `checks:` 声明**:每条规范可声明检查命令(`cmd`/`files`/`timeout`/`when`),由唯一执行器 `./.cowork-flow/run spec-check` 按相位执行;机制只消费声明、不解析规范正文,规则变化随 spec 同文件天然同步。`files` 只支持目录前缀与扩展名两种形式(完整 glob 解析为错误且声明不执行,doctor 报告)。契约文档见 `spec/contracts/spec-checks.md`。
135
- - **三态门禁语义**:`pass` / `violation`(complete 阻断、状态不推进)/ `unchecked`(命令缺失、解释器缺失、超时——阻断并要求显式 `--allow-unchecked`,豁免留痕进 `task.json` `meta.specCheckExempt` 供 review 可见)。unchecked 永不冒充 pass。
136
- - **收口遥测**:complete 时全量结果写 `meta.specCheckSummary`,为"返工前移"效果提供可对比基线。
137
- - **三线 digest 注入**:进入 in_progress 后,stage-contract 的 Specs 行升级为 h2 标题树索引(每 spec 最多 6 条、每条截断 24 字符),规范条目名随契约常驻注意力;spec 正文改动不影响 digest,超预算整行让位(Scope/Gates 永不丢)。python/zcode/opencode 输出由 matrix 用例锁定逐字相等,claude 线经 Python 单源自动获得。
138
- - **编辑期快跑**:zcode(PostToolUse 短路径,spawn 单源 CLI、3.8s 上限)与 claude(PostToolUse 新增 hook 资产,exit 2 单行 stderr 反馈)在编辑命中 `files` 的声明时就地执行,违规单行警告、同文件 10 秒节流(状态在 `.cowork-flow/.runtime/`)、执行器缺失静默不阻断编辑流;opencode 降级为仅 digest + 收口。
139
- - **doctor 健康项**:`specChecks` 报告声明解析错误与命令入口不存在——"跑不了的声明"在收口前暴露。
154
+ ### Changed
140
155
 
141
- 配套:spec-check CLI(`--phase/--file/--json/--verbose/--throttled`)、`--allow-unchecked` 收口旗标、架构拓扑保持 services 层无 CLI 关注点。
156
+ - scope 规则和阶段契约预算移入 `spec/runtime/scope-rules.json`,Python 与 JavaScript 运行时共用同一份数据。
157
+ - 缺少或损坏规则文件时使用与原行为一致的默认值。
142
158
 
143
- ## 1.1.4 - 2026-08-31
159
+ ### Fixed
144
160
 
145
- ### 修复
161
+ - 修复 delegated 注入在非项目目录中因空项目根崩溃。
162
+ - 修复 Windows 缺少 git 时任务上下文收集失败。
163
+ - 修复 scope 预算裁剪少保留一个换行,导致闭标签不完整的问题。
146
164
 
147
- - **Windows 启动修复**:`mcp-state` 子进程在 Windows 平台改为经 `cmd.exe` 启动(`shell: true`),与 npm shims 的启动方式保持一致——绕过 Node 24+ 直接 spawn `.cmd` 文件(如 `cowork-flow.cmd` 的 shell 入口)时抛出的 EINVAL 错误。
165
+ ## [1.1.2] - 2026-08-30
148
166
 
149
- ## 1.1.3 - 2026-08-30
167
+ ### Added
150
168
 
151
- > **版本内容载体说明**:1.1.1(守卫修复批次)与 1.1.2(Review 基线 diff)章节内容随本 1.1.3 首次进入 npm 分发——三个批次同属一个发布周期,章节按批次序号记录,包内容以最新版本号为载体(与 1.1.0 承载 1.0.0 章节内容同一惯例)。
169
+ - 任务进入实现阶段时记录固定 review 基线。审查范围合并基线后的提交和当前 working tree,避免中途提交让越界文件从检查中消失。
170
+ - 无 git、HEAD 或基线时降级为 working-tree 状态,不产生虚假阻断。
152
171
 
153
- ### 规则表数据化(scope-rules 单源)
172
+ ## [1.1.1] - 2026-08-30
154
173
 
155
- - 新增 `.cowork-flow/spec/runtime/scope-rules.json`:scope 过滤规则(allowedTypes/wildcardChars/rejectedSegments/driveLetterPattern/trailingSlashRejectedTypes)与 stage-contract 限制(budget/scopeLimit/specLimit/verifyLimit)从三份复制实现下沉为单一数据文件。
156
- - Python(context_paths/fact_view)与 zcode/opencode JS 镜像运行时消费同一文件;文件缺失/畸形降级到与默认内容逐字一致的内嵌默认(默认等价由 tests/test_scope_rules.py 与 selfcheck 锁定)。
157
- - 规则可真实改变行为:wildcardChars 置空 → 通配条目进入 Scope;budget 调小 → 预算降级路径触发。
158
- - 修复预算兜底 1 字节超限:裁剪切分与闭标签间的换行预留。
159
- - **CI 修复(delegated 注入崩溃)**:zcode delegated 分支不再以空输入对象重新发现项目根(`findProjectRoot({})`),改为复用 main 已解析的工作流根——在无 `.cowork-flow/` 的目录(干净 checkout、非项目目录)触发 delegated prompt 不再 `join(null)` 崩溃;对应的注入测试显式指定 spawn 工作目录,消除对测试运行 cwd 的隐式依赖(干净 checkout 下此前必红,实测 dev 推送 CI 双平台失败)。
160
- - **CI 修复(Windows git 降级)**:`git` 二进制不可用(PATH 缺失/未安装)时 `_run_git_command` 捕获 OSError 按 rc!=0 降级——`current_head` 视为无头(不写 baseline)、变更集收集降级 status-only,`task start` 不再崩溃(Windows 的 CreateProcess 在 PATH 缺失时不回退,清空环境的会话测试此前必红;macOS execvp 有默认 PATH 兜底故本地绿)。
174
+ ### Fixed
161
175
 
162
- ## 1.1.2 - 2026-08-30
176
+ - 修复带 `./` 前缀的 scope 条目导致 ZCode/OpenCode hook 崩溃。
177
+ - 修复超预算阶段契约产生未闭合文本的问题。
178
+ - MCP 拒绝仓库外路径和没有工具调用的 JSON-RPC 通知。
179
+ - JavaScript 与 Python 使用一致的 scope 过滤规则,delegated 子代理只读呈现父任务范围。
180
+ - 非法 UTF-8 锚点不再让整个阶段契约静默消失。
181
+ - review 缺少 `implement.jsonl` 时明确阻断。
163
182
 
164
- ### Review 基线 diff(堵住提交绕行面)
183
+ ## [1.1.0] - 2026-08-29
165
184
 
166
- - **基线记录**:`task start`(进入 in_progress)在 task.json `meta.baselineCommit` 记录当前 HEAD,且永不滑动(重复/幂等 start 不覆盖)——任务期间的审查窗口从激活时刻起固定。
167
- - **变更集合并**:review 门禁以 `baseline..HEAD` diff 与 working-tree status 的并集去重作为变更集——agent 中途 `git commit` 越界文件后,review 的 `unlisted_changed_file` 仍会触发(此前提交即从 status 消失,形成无痕通道)。
168
- - **降级语义**:无 git 仓库 / HEAD 不存在 / 基线缺失 / diff 失败(如 rebase 孤儿化)→ 降级 status-only,与旧行为一致,不产生错误 blocker。
169
- - **契约重开**:task-review SKILL 输入语义写明基线变更集与降级行为;已审查任务的增量重审聚焦自基线以来的变化,证据要求不变。
185
+ > npm 上的 1.0.0 包早于最终发版修复;下文阶段 0-3 的完整能力从 1.1.0 起实际发布。
170
186
 
171
- ## 1.1.1 - 2026-08-30
187
+ ### Added
172
188
 
173
- ### 守卫修复批次(对抗评审后落地)
189
+ - 新增统一的工作流状态注入、contract digest 和 decision anchor 摘要。
190
+ - 新增 `run state [task] --json` 事实视图,汇总任务、计划、会话和规范绑定。
191
+ - 新增 executor 归属、冲突阻断、显式接管和无会话 CI 启动。
192
+ - 新增子代理 evidence 记录。
193
+ - 新增无第三方依赖的只读 MCP 服务,提供 `task_state` 和 `task_list`。
194
+ - 新增全局 `cowork-flow mcp-state` 透传入口。
174
195
 
175
- - **hook 崩溃修复**:implement.jsonl 含 `./` 前缀条目时 zcode/opencode 双宿主 hook 从 `TypeError: Assignment to constant variable` 崩溃(整个上下文注入丢失)改为正常输出——`const`→`let` 两处 + 回归 fixture。
176
- - **stage-contract 预算降级**:超限输入不再产出未闭合的畸形块;按 Verify → Specs → Scope 条目(至少 1 条)逐级降级,收尾标签与 Gates 行恒在;三线同构算法。
177
- - **MCP 路径隔离**:`task_scope`/`task_specs` 拒绝仓库外路径(`../`、绝对路径)返回 `task-outside-repo`;无 id 的 JSON-RPC 通知(含 initialize/ping/tools/list)不再响应。
178
- - **JS 白名单语义对齐**:zcode/opencode 过滤规则与 Python `normalize_context_file_scope_entry` 一致(非法 type、`../`、绝对路径、盘符、通配符一律丢弃)——editScopeWarning 与 Scope 行不再对 gate 会标记越界的文件静默放行;spec 指针同规则过滤。
179
- - **delegated 只读 scope**:子代理注入包删除 `Scope: subagent` 行;stage-contract 以父任务 scope `[read-only]` 变体呈现,Gates 话术同步(不再暗示子代理可自声明 scope)。
180
- - **异常降级可诊断**:锚点文件非法 UTF-8 时 stage-contract 保留 Scope/Gates 仅丢 Verify(此前整块静默消失);非例行异常在 stderr 留痕。
181
- - **review 门禁补洞**:implement.jsonl 缺失时 review 产生 `missing_implement_jsonl_file_scope` blocker(此前静默放行,删除 manifest 即绕过白名单)。
182
- - **矩阵化跨端测试**:`test/fixtures/stage-contract-matrix.json` 单一数据文件驱动三线(python/zcode/opencode)逐字节相等断言,覆盖规范/`./` 前缀/非法边界/超限/emoji/缺锚点/空 scope/delegated 8 类用例;zcode hooks.json matcher(Bash|Edit|Write|MultiEdit)由模板测试锁定;新增 Python 侧矩阵断言。
183
- - dev_type 畸形值(非字符串)在 task_specs 中按缺省降级;spec 指针忽略 directory 条目;normalizeScopePath 带 trim;zcode 生命周期刷新正则对齐 dsh(task|subagent|resume)。
184
- - 契约文档如实化:context-injection.md 不再声称三线结构恒等/always emitted,改为差异表 + 矩阵锁定范围 + 残余缺口清单(matcher 依赖 ZCode 运行时工具名、JS 过滤为规则移植)。
196
+ ## [1.0.0] - 2026-08-26
185
197
 
186
- ## 1.1.0 - 2026-08-29
198
+ 首个稳定主线版本,冻结任务状态、会话身份和宿主注入协议。
187
199
 
188
- > **版本内容错位说明**:npm registry 上的 1.0.0 tarball 发布于 2026-08-26(仅含发版脚本修复之前的代码)。1.0.0 段下述的里程碑描述以本 1.1.0 为其实际发布载体——阶段 0-3 的全部内容自本版本起进入 npm 分发。
200
+ ### Added
189
201
 
190
- ### 方向落地(阶段 0-3,详见 1.0.0 段)
202
+ - 支持 Codex、OpenCode、Claude Code、DSH 和 ZCode 五个宿主。
203
+ - 新增 `<workflow-state>`、contract digest 和状态快照协议。
204
+ - 新增任务事实视图、executor 归属、stage contract、MCP 只读查询和全局 MCP 入口。
205
+ - 新增计划绑定、任务树、Party Mode 与 Batch 基础能力。
206
+ - 新增发布脚本、跨平台测试和主机资产同步。
191
207
 
192
- - 阶段 0:README 定位改写为「运行时上下文与协作事实层」;注入协议契约 `spec/contracts/context-injection.md`;契约指纹序列化三线统一 + slim 全覆盖 + 跨 host 一致性测试。
193
- - 阶段 1:`run state [task] --json` 事实视图;`<workflow-state>` 属性事实头 + `<decision-anchor>` 决策要点注入(三线一致)。
194
- - 阶段 2:`executor` 归属、冲突拦截与 `--takeover`、无会话 CI start、`subagent evidence` 证据位。
195
- - 阶段 3:`run mcp-state` 无依赖 MCP stdio 只读服务(`task_state` / `task_list`)+ `spec/contracts/fact-layer-access.md` 接入契约。
196
- - MCP 全局入口:`cowork-flow mcp-state` 透传命令——MCP 客户端全局注册一次即可服务所有 cowork-flow 项目。
208
+ ### Changed
197
209
 
198
- ## 1.0.0 - 2026-08-26
210
+ - 会话绑定区分宿主 session id、显式 context id 和进程 fallback;不可信身份不再自动跟随其它会话。
211
+ - 状态转换与运行快照在同一事务单元内提交。
199
212
 
200
- 首个稳定主线发布:核心流程契约、会话模型与宿主矩阵在此版本冻结,后续改动进入语义化版本约束。
213
+ ## [0.0.52] - 2026-08-26
201
214
 
202
- ### 稳定性声明
215
+ ### Added
203
216
 
204
- - **宿主矩阵冻结**:`codex` / `opencode` / `claude-code` / `dsh` / `zcode` 五宿主经 host-assets 注册、adapter 一致性校验与 doctor 全链路覆盖;zcode 插件资产与工作区流程资产均为单源分发(`.zcode/` 走插件市场,技能落盘 `.cowork-flow/skills/` 供内核解析且不进入提示层)。
205
- - **状态注入协议冻结**:`<workflow-state>` 块 + contract-digest(SessionStart 全量 / 逐消息指纹行)+ 生命周期快照(`.runtime/state-snapshot.json`,与状态转换同单元原子提交)构成宿主 hook 的标准输入;`build_hook_context` 共享协议具备直接单测覆盖。
206
- - **会话模型冻结**:按会话身份(host session id / 显式 context id / hook sessionId)绑定;显式身份无绑定时判 `no_task` 并列可改绑任务,无身份请求才走全局最新有效兜底;进程级 fallback 绑定不再自动跟随。
217
+ - 接入 ZCode 宿主、插件、hook、会话身份和项目技能。
218
+ - 生命周期命令后立即刷新工作流状态,无需等待下一条用户消息。
219
+ - doctor 新增会话卫生检查。
207
220
 
208
- ### 自 0.0.52 以来的变更
221
+ ### Fixed
209
222
 
210
- - 会话绑定安全加固:进程 fallback 会话键(`ZCODE_PROCESS_LABEL`)带 provenance 标记,导航、`--run` 派发、review/complete 目标解析与命令行收尾拒绝自动跟随 fallback 绑定,要求显式任务目录;trusted 身份(显式 env、宿主 session env、hook sessionId)保持完整绑定语义。
211
- - 对抗性审查修正批次:显式 `COWORK_FLOW_CONTEXT_ID` 按裸键解析与 CLI 对齐;PostToolUse 刷新过滤支持 `cd` + 裸 `run` 与 Windows `run.cmd` 命令形态;legacy cursor 宿主保留完整 contract-digest;改绑提示排除已完成的终态任务;doctor 会话卫生检查对无时区时间戳降级为告警而非崩溃。
212
- - 交互式平台选择器与平台检测断言随五宿主矩阵更新。
213
- - release.sh 容错:`--version` 精确模式在版本文件已全部就位(干净工作树)时,`git commit` 的 no-op 空提交不再中止脚本,继续 tag 与 publish;其余 commit 失败仍立即中止。新增回归测试覆盖两条路径。
214
- - release.sh 容错:目标发布 tag 已存在且指向当前 HEAD 时跳过创建并继续 publish(上次运行 tag 后 publish 未完成的重跑场景);指向其它提交则中止报错。新增回归测试覆盖两条路径。
215
- - 方向收敛(阶段 0):README 定位改为「运行时上下文与协作事实层」;新增注入协议契约 `spec/contracts/context-injection.md`(事件时机矩阵、digest 形态规则、序列化规范);契约指纹序列化三线统一(zcode/opencode 稳定排序 + Python 紧凑分隔符,跨 host 指纹一致性测试锁定);Python 线补 slim(SessionStart 全量 / 后续单行指纹,无事件 host 按会话文件首次判定);codex 事件名读取;opencode 首次全量后续单行;dsh 会话开始全量、生命周期命令后单行刷新。
216
- - 事实层 API 化(阶段 1a):新增 `./.cowork-flow/run state [task] --json` 事实视图——聚合 task.json(含 `_state` 修订)、decision-anchor 结构化要点(目标/验收项/被拒方案名)、plan 绑定、绑定会话与受信快照;无绑定输出 `task: null` 供机器分支。
217
- - 注入结构化(阶段 1b):`<workflow-state>` 升级为属性事实头(`task`/`status`/`source` 进开标签,body 保留人读面包屑),三线一致并在协议契约冻结;planning/in_progress/review 状态下三线注入紧凑 `<decision-anchor>` 决策要点块(Python 复用 fact_view 解析单源),completed 终态与缺文件不注入。
218
- - 多执行者语义(阶段 2):task.json 增加 `executor` 归属(start 写入会话 key 或显式 `--executor`);执行者冲突 fail-closed(`LIFECYCLE-EXECUTOR-001`,幂等重跑同样拦截),`--takeover` 显式接管并覆写归属(含已激活任务的幂等接管);`--executor` 允许无会话 CI/无头 start(不建会话绑定);子代理运行时上下文新增 `evidence` 证据位(`subagent evidence <id> --note [--artifact]`,CAS 保护、closed 可补记、不影响任务状态机);`run state` 人读摘要透出 Executor。
219
- - 生态适配(阶段 3):新增 `./.cowork-flow/run mcp-state`——无依赖 MCP stdio 只读服务(newline-delimited JSON-RPC 2.0),工具 `task_state`(事实视图)与 `task_list`(活动任务概览);接入契约 `spec/contracts/fact-layer-access.md` 冻结只读保证与"不自创跨 agent 协议、adapter 保持薄"立场,写路径仍独占于 CLI 门禁链。
220
- - 实现阶段守卫三件套:MCP `task_scope`/`task_specs` 只读工具(越界判定与规范清单,宿主无关、Python 单源);`<stage-contract>` 实现契约块三线注入(编辑白名单/规范入口/门禁预告/任务自声明验证命令,≤1200 字符,跨宿主逐字相等测试锁定);zcode 编辑越界实时警告(PostToolUse Edit/Write/MultiEdit 短路径,能力矩阵声明 `editScopeWarning`,其余宿主 fallback 到静态预告)。
221
- - MCP 全局入口:npm CLI 新增 `cowork-flow mcp-state` 透传命令——从 cwd 向上定位最近 `.cowork-flow/` 并以继承 stdio exec 该项目的 `run mcp-state`;MCP 客户端全局注册一次(`cowork-flow mcp-state`)即可服务所有 cowork-flow 项目,无需逐项目配置。
223
+ - 全局回退不再选择失效绑定或子代理会话。
224
+ - contract digest 在会话开始时输出完整内容,后续消息只输出指纹。
222
225
 
223
- ## 0.0.52 - 2026-08-26
226
+ ## [0.0.51] - 2026-08-15
224
227
 
225
- ### ZCode 宿主与 hook 体验
228
+ ### Added
226
229
 
227
- - 修复 hook 过期会话污染:按会话身份选取活动任务,全局兜底跳过失效绑定与 subagent 会话;显式身份无绑定时对齐 CLI 判 `no_task` 并列出可改绑活动任务。
228
- - 注册 zcode 为一等宿主平台:`host-assets.json` platforms 条目 + `adapters/zcode/adapter.yaml`,alias 解析、平台检测、adapter 一致性校验与 doctor 全链路覆盖;`.zcode/` 维持插件分发不落工程。
229
- - 纯 zcode 工程生命周期可用:技能落盘 `.cowork-flow/skills/`(宿主提示层仍由插件单源提供),内核 `skill_roots()` 解析 action owner;`detectAny` 增加 adapter 标记修复 sync 静默失养。
230
- - contract digest 注入瘦身:SessionStart(含 compact/clear)注入完整块,UserPromptSubmit 仅重复指纹行。
231
- - 新增 PostToolUse(Bash) 轮内刷新:生命周期命令落定后立即注入最新 workflow-state 与指纹行,无关命令零输出。
230
+ - 接入 DeepSeek Harness 预设和 workflow-state hook。
231
+ - 任务可绑定计划,归档时保留计划快照。
232
+ - CI 在 Ubuntu 和 Windows 上运行 Python 测试。
232
233
 
233
- ### 运行时与诊断
234
+ ### Fixed
234
235
 
235
- - 生命周期转换在提交单元内原子写 `.runtime/state-snapshot.json`;hook 在快照与所选任务一致时采用快照面包屑键,缺失或不一致回退 status 推导。Python 共享 hook 协议(build_hook_context)补直接单测。
236
- - doctor 新增会话卫生检查:报告失效任务绑定、超龄未活跃、不可读的运行时会话文件。
236
+ - 统一平台和 ZCode 会话上下文解析。
237
+ - Windows 通过 cmd wrapper 启动批处理和 hook。
237
238
 
238
- ### 文档
239
+ ## [0.0.50] - 2026-08-10
239
240
 
240
- - AGENTS.md 0.1 明确注入块优先、勿重复运行导航器;README 平台清单与技能分发表同步 zcode。
241
+ ### Changed
241
242
 
242
- ## 0.0.51 - 2026-08-15
243
+ - task-review 明确把用户绑定的 spec 视为必须完成的检查项。
243
244
 
244
- ### DSH host 接入
245
+ ## [0.0.49] - 2026-08-08
245
246
 
246
- - 注册 DeepSeek Harness(dsh)host adapter 与平台标签映射(dsh_ context keys)。
247
- - 新增 `install-dsh-preset` 分发 DSH agent 预设;预设内置 workflow-state hook 插件,向系统提示注入与其它宿主同构的 `<workflow-state>` 块,每条用户消息刷新,生命周期命令落定后轮内刷新。
248
- - 补齐协议失败静默降级边界测试;记录 DSH 子代理绑定 field-test 路径(subagent init/bind/close)。
247
+ ### Added
249
248
 
250
- ### 计划绑定
249
+ - 新增源码仓库 `source-refresh` 命令。
250
+ - 计划绑定 lite 在高风险任务启动前检查计划和 decision anchor。
251
251
 
252
- - `--from-plan` 支持绑定计划到 planning 任务(plan binding lite 收口),补 --from-plan help 与实际行为一致。
253
- - 归档任务快照绑定计划(snapshot bound plan into archived task)。
252
+ ### Changed
254
253
 
255
- ### 运行时与发布
254
+ - 拆分任务上下文服务,精简 lifecycle CLI 适配层。
255
+ - 状态恢复、host manifest、Batch 和 Party Mode 使用明确模块边界。
256
+ - CI 增加 Windows 发布信心门禁。
256
257
 
257
- - `platform_from_context_key` 单源化并修复 zcode 平台漂移;zcode 会话上下文确定性解析;slug 前缀与任务 id/name 归一。
258
- - 共享 PYTHONPATH bootstrap;批量动作与 codex hook 在 Windows 通过 cmd wrapper 运行。
259
- - CI 在 Ubuntu/Windows 双平台跑全量 pytest;发布流程先同步 Skill replicas 再过全量门禁。
258
+ ## [0.0.48] - 2026-08-05
260
259
 
261
- ## 0.0.50 - 2026-08-10
260
+ ### Changed
262
261
 
263
- ### 文档
262
+ - 拆分 lifecycle 命令并收紧路由和 runtime context 恢复规则。
263
+ - 移除旧 changes control plane 和 session journal 工作流。
264
+ - Party Mode 使用独立 board 存储;Batch 增加事实检查和 host action 结果校验。
265
+ - 新增 host capability matrix、集中同步策略和健康检查输出。
266
+ - README 增加任务流程图与故障排查说明。
264
267
 
265
- - task-review 技能把用户自定义 spec 明确为绑定义务(binding obligations)。
268
+ ## [0.0.47] - 2026-08-05
266
269
 
267
- ## 0.0.49 - 2026-08-08
270
+ 此版本未保留本地条目正文,详情见 [GitHub Release](https://github.com/fishlikewater/cowork-flow/releases/tag/v0.0.47)。
268
271
 
269
- ### 计划与任务
270
-
271
- - 引入 plan binding lite:任务元数据绑定计划文件,Normal/High-risk 任务启动前校验计划与 decision anchor 就绪。
272
- - `task next` 暴露实现优先读上下文(implement read-first);test-first 技能强化 red-green 指引。
273
-
274
- ### 运行时与架构
275
-
276
- - 新增源码检出 source-refresh 命令;任务上下文服务模块化,lifecycle CLI adapter 瘦身;架构护栏测试固化边界。
277
- - 状态恢复诊断增强;host manifest 契约对齐;批量与 party 编排器模块化。
278
- - 保持 python 3.9 runner 兼容。
279
-
280
- ### CI / 发布
281
-
282
- - 增加 Windows 发布信心门禁;发布验证测试稳定化。
283
-
284
- ## 0.0.48 - 2026-08-05
285
-
286
- ### 运行时与流程
287
-
288
- - 拆分 lifecycle 命令;route 契约收紧;runtime context 生命周期硬化,恢复元数据错误 fail-closed;subagent 运行错误码透出。
289
- - 移除 legacy changes control plane 与 add-session journal 工作流;guides 指引归入规划阶段。
290
-
291
- ### Party Mode 与 Batch
292
-
293
- - 抽取 Party board 存储层;final report facts 丰富;host action fallback 对齐 capability matrix。
294
- - Batch 增加 inspect facts 与 host action 结果校验;恢复契约文档化。
295
-
296
- ### Host 资产与健康
297
-
298
- - 新增 host capability matrix 契约;host-assets sync 策略集中;防止 ZCode scaffold 向模块目录泄漏流程文件。
299
- - task-review issue 与 runtime-health envelope 归一,review/health 输出更易消费。
300
-
301
- ### 文档
302
-
303
- - README 项目概览刷新、任务流程图;产品故障排查 playbook;changelog 发布就绪说明。
304
-
305
- ## 0.0.47 - 2026-08-05
272
+ [Unreleased]: https://github.com/fishlikewater/cowork-flow/compare/v1.7.1...HEAD
273
+ [1.7.1]: https://github.com/fishlikewater/cowork-flow/compare/v1.7.0...v1.7.1
274
+ [1.7.0]: https://github.com/fishlikewater/cowork-flow/compare/v1.6.0...v1.7.0
275
+ [1.6.0]: https://github.com/fishlikewater/cowork-flow/compare/v1.5.0...v1.6.0
276
+ [1.5.0]: https://github.com/fishlikewater/cowork-flow/compare/v1.4.0...v1.5.0
277
+ [1.4.0]: https://github.com/fishlikewater/cowork-flow/compare/v1.3.0...v1.4.0
278
+ [1.3.0]: https://github.com/fishlikewater/cowork-flow/compare/v1.2.0...v1.3.0
279
+ [1.2.0]: https://github.com/fishlikewater/cowork-flow/compare/v1.1.4...v1.2.0
280
+ [1.1.4]: https://github.com/fishlikewater/cowork-flow/compare/v1.1.3...v1.1.4
281
+ [1.1.3]: https://github.com/fishlikewater/cowork-flow/compare/v1.1.2...v1.1.3
282
+ [1.1.2]: https://github.com/fishlikewater/cowork-flow/compare/v1.1.1...v1.1.2
283
+ [1.1.1]: https://github.com/fishlikewater/cowork-flow/compare/v1.1.0...v1.1.1
284
+ [1.1.0]: https://github.com/fishlikewater/cowork-flow/compare/v1.0.0...v1.1.0
285
+ [1.0.0]: https://github.com/fishlikewater/cowork-flow/compare/v0.0.52...v1.0.0
286
+ [0.0.52]: https://github.com/fishlikewater/cowork-flow/compare/v0.0.51...v0.0.52
287
+ [0.0.51]: https://github.com/fishlikewater/cowork-flow/compare/v0.0.50...v0.0.51
288
+ [0.0.50]: https://github.com/fishlikewater/cowork-flow/compare/v0.0.49...v0.0.50
289
+ [0.0.49]: https://github.com/fishlikewater/cowork-flow/compare/v0.0.48...v0.0.49
290
+ [0.0.48]: https://github.com/fishlikewater/cowork-flow/compare/v0.0.47...v0.0.48
291
+ [0.0.47]: https://github.com/fishlikewater/cowork-flow/releases/tag/v0.0.47