@xgent-ai/skills 0.7.7 → 0.7.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +26 -39
  2. package/bin/xgent-skills.js +27 -56
  3. package/dist/phoenix-diagram/VERSION.json +18 -18
  4. package/dist/phoenix-diagram/bundle/ENGINE.json +18 -18
  5. package/dist/phoenix-diagram/bundle/manifest.json +4 -4
  6. package/dist/phoenix-diagram/bundle/references/migration.md +1 -1
  7. package/dist/phoenix-diagram/bundle/scripts/phoenix-bootstrap.cjs +4 -103
  8. package/dist/phoenix-ui/THIRD-PARTY.json +1 -1
  9. package/dist/phoenix-ui/VERSION.json +19 -19
  10. package/dist/phoenix-ui/bundle/blobs/{567c3f42394f9aee9b048a001016a7ba9d8773d78027f8c995c379886634e719 → 0c95d5c7163bc162cca460e2297ab146e331fd279a738a2055643b45b161c706} +1 -1
  11. package/dist/phoenix-ui/bundle/blobs/{f077545caeb3ecb9f51a3f703a09736ca924869f4b4345c1b1ffbd9bf927a287 → 14bd6a733ce89fcd02bf6dcf0f91378625cb7739a0baaca9cb7611c332ac4580} +1 -1
  12. package/dist/phoenix-ui/bundle/blobs/{125bc7030d7f2ba789d7b1d5f474af34f8902b764e7bc351b98f1f6f55779929 → 14f329a7925311958685a16ba370c4997e924d909091e0977e5d32b3e64ecc4f} +1 -1
  13. package/dist/phoenix-ui/bundle/blobs/{8078b804bea630ed9c4ea07ec2f8ac92aba4128725860a66599eda90390d98f6 → 2b168c9ff212b8daea0d4334c94810458a683cde62f26b985855f8bf3f959db7} +1 -1
  14. package/dist/phoenix-ui/bundle/blobs/{00f4a6a630f31eb05fbdd5725e4a294233d24574bd70f4f32f4597d8256a7c1c → 2fbbc46784d2ab789675941ce81d91822ac00bd5c3e144d06743d0b8ccaccc90} +2 -17
  15. package/dist/phoenix-ui/bundle/blobs/{90f8b07ec12b78e633e306322cda58415aea70d8e0f9ff85bd439361c01dabe1 → 35913e9a7ac47f91c8af70867c71d938aa7f200b562c867fa6a43c4a6209ef61} +1 -1
  16. package/dist/phoenix-ui/bundle/blobs/{0e684572eb98d24b39cd70fa23e66c163178f5a11756dcf8a98fe2335636b33f → 3b62a4d253765fe0bdb180581cf493434d15de94e1b31470c573c0a21ece9e31} +1 -1
  17. package/dist/phoenix-ui/bundle/blobs/{68b454a99ba72c3b9b93ed96c4267847297169f6a5bf321b20e60d637c271068 → 557baa7f9ea3d863f40602f37a85e9af09f9120cfa0669b0b95539774e87b9dc} +1 -1
  18. package/dist/phoenix-ui/bundle/blobs/{c0a70ab2889e5c16e1f09249aefad948ce352c42cfe2b5afb758a4524e1b21b6 → 67fc771aa87556ecc8236c44e76251a41fa4e1809c6ad8c6a1f8eb9de91bb2d7} +1 -1
  19. package/dist/phoenix-ui/bundle/blobs/{88b150cb804bc141b80a5687a091f61b99627155c465a27adb88546ef615af92 → 6b3068f23e684f8566e7f4b069a5554624f479d57ff9073610a0917fe5b5e5af} +1 -1
  20. package/dist/phoenix-ui/bundle/blobs/{61450dbef64859e3136cd17ae3e997134d5df5721d96985c4e07367f38522129 → 6f600dfa082ed593159d3906d108baff9f4cb6bf90817a47429d613a95771d6f} +1 -1
  21. package/dist/phoenix-ui/bundle/blobs/{36310febe3e7bd4c9b21407603f2a04afefdc87b7821758bb47098b1b2876765 → 7bff2e1985a347235ef84b783f801eb3f5872d6e2a8d0278fc8c52c3cd1ac4a4} +1 -1
  22. package/dist/phoenix-ui/bundle/blobs/{e46d63e5f8a6ead1d44c8b6302a0c7247af8585b975ab5715518381777622ede → 821bda87cb9fc9f4349cf5243e18d7b4afc899ee884e33b16007ca3f1f5c9de1} +1 -1
  23. package/dist/phoenix-ui/bundle/blobs/{cadc2daefcf238aab981fa56388381d3d5ab9c0686bb9dd8187035c9933dfcee → 8291ff7c0eef14199f7d209cb8eb5e6643034c1923805b5c7023c93010d7af6e} +1 -1
  24. package/dist/phoenix-ui/bundle/blobs/{6b8d4c71355429a0b16bf367163fea46103a0a99b4e34f87608a39d85b1b980a → 94e595bc8239f72e0f5389f83aa022b18541839fb651d87b5933e89c92836a15} +1 -1
  25. package/dist/phoenix-ui/bundle/blobs/{55277fa15eb4bd2f09bf7bb24c4e79df417b06654b1e10f502c7928b192fd7cc → ba015e8aac17711d7dfbcfce3e8c92190af383af595b9ca58b7df2c0c30ba579} +1 -1
  26. package/dist/phoenix-ui/bundle/blobs/{3625c5c2750f117021232ce81c1e39ac5ef7c21445729327b88cf54dfc937df0 → fddd4bd853ad367d7f755477ee7c5ac3d0d3965c81c8a8e20eb83edc9cb7d43b} +1 -1
  27. package/dist/phoenix-ui/bundle/manifest.json +34 -34
  28. package/docs/phoenix-diagram.md +8 -6
  29. package/{skills/review-ui/references/phoenix-review.md → docs/phoenix-ui-review.md} +7 -12
  30. package/docs/phoenix-ui.md +18 -20
  31. package/package.json +2 -1
  32. package/skills/agi-mode/evals/scenarios.md +7 -8
  33. package/skills/agi-mode/playbooks/sdlc.md +8 -12
  34. package/skills/agi-mode/playbooks/what-next.md +7 -8
  35. package/skills/apply-ui-review/SKILL.md +31 -23
  36. package/skills/apply-ui-review/agents/openai.yaml +2 -2
  37. package/skills/apply-ui-review/evals/scenarios.md +10 -7
  38. package/skills/apply-ui-review/references/record-contract.md +6 -6
  39. package/skills/crd/SKILL.md +36 -8
  40. package/skills/crd/assets/cr-template.md +10 -6
  41. package/skills/crd/evals/scenarios.md +12 -0
  42. package/skills/crd-respond/SKILL.md +22 -10
  43. package/skills/crd-respond/agents/openai.yaml +2 -2
  44. package/skills/crd-respond/assets/response-template.md +7 -6
  45. package/skills/crd-respond/evals/scenarios.md +10 -1
  46. package/skills/optimize-agents-md/SKILL.md +39 -21
  47. package/skills/optimize-agents-md/assets/coding-principles.md +78 -38
  48. package/skills/phoenix-diagram/ENGINE.json +18 -18
  49. package/skills/phoenix-diagram/references/migration.md +1 -1
  50. package/skills/phoenix-diagram/scripts/phoenix-bootstrap.cjs +4 -103
  51. package/skills/phoenix-ui/GENERATED.json +78 -78
  52. package/skills/phoenix-ui/SKILL.md +1 -1
  53. package/skills/phoenix-ui/scripts/ENGINE.json +19 -19
  54. package/skills/phoenix-ui/scripts/phoenix-bootstrap.cjs +2 -17
  55. package/skills/portal-external-app/SKILL.md +3 -2
  56. package/skills/portal-external-app/references/oauth-discovery.md +94 -0
  57. package/skills/portal-external-app/references/public-entrypoints.md +2 -0
  58. package/skills/portal-external-app/references/registration-and-onebox.md +3 -0
  59. package/skills/resolve-blocked/SKILL.md +292 -139
  60. package/skills/resolve-blocked/agents/openai.yaml +2 -2
  61. package/skills/resolve-blocked/evals/scenarios.md +10 -4
  62. package/skills/resolve-blocked/references/decisions-contract.md +2 -1
  63. package/skills/review-ui/SKILL.md +61 -95
  64. package/skills/review-ui/agents/openai.yaml +2 -2
  65. package/skills/review-ui/evals/fresh-context.md +14 -4
  66. package/skills/review-ui/evals/scenarios.md +19 -14
  67. package/skills/review-ui/references/judge.md +19 -20
  68. package/skills/review-ui/references/report-contract.md +18 -18
  69. package/skills/review-ui/references/target-and-capture.md +31 -11
  70. package/skills/xgent-app-release/SKILL.md +11 -2
  71. package/skills/xgent-app-release/references/public-delivery.md +64 -0
  72. package/skills/xgent-app-release/references/publish-api.md +5 -2
  73. package/skills/xgent-init/SKILL.md +1 -1
  74. package/skills/review-ui/references/rules.v1.json +0 -1853
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  XGENT 的 [Agent Skills](https://skills.sh) 集合,可安装到 Claude Code、Cursor、Codex 等支持 skill 的 Agent 中。
4
4
 
5
+ 版本变更与历史记录见 [CHANGELOG.md](CHANGELOG.md)。
6
+
5
7
  ## 安装
6
8
 
7
9
  列出并选择安装公开的 skills (`xgent-init` 是内部初始化 skill,不在默认列表中):
@@ -20,25 +22,19 @@ npx skills add XGENT-ai/skills --skill dev-plan
20
22
 
21
23
  ## 项目辅助工具(Claude Code / Codex)
22
24
 
23
- 本仓库同时以 [`@xgent-ai/skills`](https://www.npmjs.com/package/@xgent-ai/skills) 发布到 npm,自带 `xgent-skills` 命令,可为任意项目安装 XGENT 的 Claude Code hooks(当前包含 statusline)、在项目 `.claude/settings.json` 中启用对应配置,装上随包的 [Phoenix UI](#phoenix-ui) 设计工具,并可选创建通用的 `AGENTS.md`、安装 Codex 或 Claude Code 的 goal 上下文收尾提醒。npm 发布包与仓库的 `xgent-skills install` 统一默认安装 [Phoenix Diagram](docs/phoenix-diagram.md)。发布仅从 `main` 执行,不创建独立发布分支;Diagram 必须具备匹配版本的四平台 release 资源和公共下载地址,当前开发清单不能直接发布:
25
+ 本仓库同时以 [`@xgent-ai/skills`](https://www.npmjs.com/package/@xgent-ai/skills) 发布到 npm,自带 `xgent-skills` 命令,可为任意项目安装 XGENT 的 Claude Code hooks(当前包含 statusline)、在项目 `.claude/settings.json` 中启用对应配置,装上随包的 [Phoenix UI](#phoenix-ui) 设计工具,并可选安装 Codex 或 Claude Code 的 goal 上下文收尾提醒。npm 发布包与仓库的 `xgent-skills install` 统一默认安装 [Phoenix Diagram](docs/phoenix-diagram.md):
24
26
 
25
27
  ```bash
26
28
  # 在目标项目根目录执行(也可显式传目录:npx @xgent-ai/skills install <dir>)
27
29
  npx @xgent-ai/skills install
28
30
  ```
29
31
 
30
- 0.7.3 补齐了 npx 默认入口。旧版 0.7.2 会报 `could not determine executable to run`,使用该版本时请显式指定安装器:
31
-
32
- ```bash
33
- npx --package=@xgent-ai/skills@0.7.2 xgent-skills install
34
- ```
35
-
36
32
  选项:
37
33
 
38
34
  | 选项 | 说明 |
39
35
  | --- | --- |
40
36
  | `--no-phoenix-ui` | 跳过 Phoenix UI,仍安装 XGENT 的 hooks 与 settings;不删除已装版本 |
41
- | `--no-impeccable` | 已弃用,等同 `--no-phoenix-ui`,保留一个迁移主版本 |
37
+ | `--no-impeccable` | 已弃用,请改用 `--no-phoenix-ui` |
42
38
  | `--replace-impeccable` | 删除所选工具目录中的项目级及个人级 impeccable 入口和 hooks,不备份 |
43
39
  | `--keep-impeccable` | 保留 impeccable,与 Phoenix UI 共存;无交互环境默认采用 |
44
40
  | `--no-phoenix-diagram` | 跳过独立 Phoenix Diagram,不删除已装版本 |
@@ -46,8 +42,6 @@ npx --package=@xgent-ai/skills@0.7.2 xgent-skills install
46
42
  | `--confirm-remove-archify` | 与迁移配用的显式确认;旧 skill 不备份,回滚不重建,非交互迁移必须提供 |
47
43
  | `--release-dir=DIR` | 离线安装 Phoenix UI engine:使用已核验的 release 目录,不联网 |
48
44
  | `--diagram-release-dir=DIR` | 为 Phoenix Diagram 使用匹配的完整离线目录 |
49
- | `--xgent-init` | 直接创建仓根 `AGENTS.md` (已有则跳过),不再询问 |
50
- | `--no-xgent-init` | 跳过创建 `AGENTS.md`,不再询问 |
51
45
  | `--providers=a,b` | 指定 Phoenix 工具的 harness 目录(如 `--providers=.claude,.cursor`);`codex` 识别 `.agents/.codex`,Diagram skill 只写 `.agents`;默认按已有目录选择,空项目用 `.claude` |
52
46
 
53
47
  Phoenix UI 和 Phoenix Diagram skill 均由 npm 安装器随匹配引擎安装与更新,已通过 `metadata.internal: true` 从 `npx skills add XGENT-ai/skills` 的默认发现列表排除,避免独立更新 skill 后与引擎版本不一致。
@@ -56,29 +50,22 @@ Phoenix UI 和 Phoenix Diagram skill 均由 npm 安装器随匹配引擎安装
56
50
 
57
51
  普通安装不移除 Archify。`--migrate-archify` 使用独立的 Diagram 迁移分支,仅处理精确项目/provider 的完整已知来源;自定义、链接、外部管理与个人入口保留。TTY 拒绝或 EOF 不迁移;`--no-phoenix-diagram` 仍跳过并保留。旧入口移除后需要时按原来源重装,新 Diagram 入口的恢复/回滚见[迁移说明](docs/phoenix-diagram.md#旧入口迁移与安装恢复)。仓库只保留新活跃入口,不代表其他项目或个人旧安装已被处理。
58
52
 
59
- `install` 会询问是否同时创建仓根 `AGENTS.md`,输入 `y` 或 `yes` 确认,回车默认跳过。确认后直接复制 [通用模板](skills/xgent-init/references/external-app-AGENTS.template.md),只创建 `AGENTS.md`,不安装 `xgent-init` skill,不生成 `CLAUDE.md` / `PRODUCT.md` / `DESIGN.md`。已有 `AGENTS.md` 时直接跳过并保留原文。
60
-
61
- 非交互环境默认跳过,可用 `--xgent-init` 显式创建,或用 `--no-xgent-init` 跳过询问。文件位于仓根,不受 `--providers` 影响。模板没有待填占位,通用编码准则支持不同 coding agent;Portal App 的 onebox 联调与有前端改动时的真实浏览器验收分别按适用条件执行。
62
-
63
- Portal 的产品和设计规范仍保留在 [PRODUCT 模板](skills/xgent-init/references/external-app-PRODUCT.template.md) 与 [DESIGN 模板](skills/xgent-init/references/external-app-DESIGN.template.md) 中。需要生成项目上下文时,显式安装并在 Agent 对话中使用 [xgent-init](skills/xgent-init/SKILL.md),它读取清单与代码事实,补齐 PRODUCT.md / DESIGN.md (无前端的 service 型不新生成 DESIGN.md),已有文件保留:
64
-
65
- ```bash
66
- npx skills add XGENT-ai/skills --skill xgent-init
67
- ```
53
+ `install` 不创建或修改 `AGENTS.md`,也不询问是否安装模板。安装完成后会提示:可在 agent 对话中使用 [optimize-agents-md](skills/optimize-agents-md/SKILL.md),以 opinionated DSL(Odyssey/ODC)改良已有的 `AGENTS.md`;不喜欢这套风格可以忽略。Claude Code 用 `/optimize-agents-md`,Codex 用 `$optimize-agents-md`,由用户自行选择是否使用。
68
54
 
69
55
  ## Phoenix UI
70
56
 
57
+ 只有 `phoenix-ui` skill 随 Phoenix UI 工具附带,`phoenix-diagram` skill 随 Phoenix Diagram 工具附带;其余所有 skill 均独立于这两个工具。
58
+
71
59
  Phoenix UI 是 XGENT 自主维护的设计工具:从 [impeccable](https://github.com/pbakaus/impeccable) 4.5.0 / engine 0.1.11 的固定源码承接(Apache-2.0,来源与修改见 `dist/phoenix-ui/NOTICE.md`),版本、规则与发布由本仓控制,不再查询或下载上游 latest。它只随 npm 安装器分发:`install` 只装入 `phoenix-ui` skill、对应 hooks 与固定 engine。design-md、design-reference、ui-pattern-research、review-ui、apply-ui-review 由 `npx skills add XGENT-ai/skills` 独立安装和更新,Phoenix 不覆盖或比对它们的版本。对话里用 `/phoenix-ui`(Codex 用 `$phoenix-ui`);终端命令为 `npm exec --package=@xgent-ai/skills -- phoenix-ui --help`。
72
60
 
73
61
  Phoenix UI 适用于独立网站、应用和嵌入式界面等 UI 项目。`phoenix-ui init` 可独立完成产品上下文初始化,不依赖 `xgent-init`。subagent 与并行策略由 coding agent 自主安排,Phoenix 不额外要求询问或等待授权。
74
62
 
75
- - **engine**:按包内 `dist/phoenix-ui/VERSION.json` 的摘要校验后放进 `~/.phoenix-ui/bin/<版本>/<平台>/<engineSha256>/`(`PHOENIX_UI_HOME` 可改),新旧项目的引擎可共存,本期支持 darwin-arm64、darwin-x64、linux-x64、linux-arm64,Windows 延期。不可用时整个安装在写项目前停止,可改用 `--release-dir=DIR` 离线安装或 `--no-phoenix-ui`。hook 与 context 运行时不联网补下载。
76
- - **已有工具**:安装时发现 impeccable 会询问是否替换。选择替换则直接删除所选 provider 的项目级及个人级旧入口和旧 hooks,不备份、不留转跳入口;选择保留则共存,不阻止 Phoenix 安装,无交互环境默认保留。没有安装事务状态的 Phoenix 源码副本直接删除后重装。业务源码、旧工具的数据和文档不改动;共享配置中的其他 hooks 保留。
77
- - **回滚**:安装输出给出事务 ID、备份位置与完整命令,例如 `npm exec --package=@xgent-ai/skills@<版本> -- phoenix-ui migrate --rollback <事务ID> --project <项目>`;回滚只撤销本次安装的条目,后来新增的配置保留。
63
+ - **engine**:按包内 `dist/phoenix-ui/VERSION.json` 的摘要校验后放进 `~/.phoenix-ui/bin/<版本>/<平台>/<engineSha256>/`(`PHOENIX_UI_HOME` 可改),新旧项目的引擎可共存,支持 darwin-arm64、darwin-x64、linux-x64、linux-arm64;不支持 Windows。不可用时整个安装在写项目前停止,可改用 `--release-dir=DIR` 离线安装或 `--no-phoenix-ui`。hook 与 context 运行时不联网补下载。
64
+ - **已有工具**:Phoenix UI 和 Diagram 都是可重新安装的工具:安装直接覆盖工具文件,不备份旧版、不创建安装事务目录,不提供普通安装回滚。中断后重跑安装即可;成功安装会清理旧安装记录和备份。业务源码、工具生成的业务数据及其他 hooks 保留。发现 impeccable 时仍可选择替换或共存,无交互环境默认保留。
78
65
 
79
- 安装、迁移、回滚、支持矩阵与渠道说明见 [docs/phoenix-ui.md](docs/phoenix-ui.md)。原 `vendor/impeccable/` 副本及其 vendor/R2 脚本已删除,需要时从 git 历史查看。
66
+ 安装、迁移、支持矩阵与渠道说明见 [docs/phoenix-ui.md](docs/phoenix-ui.md)。
80
67
 
81
- managed UI 循环先核对固定包 engine,再用 `phoenix-ui review --help` 和 `phoenix-ui review schema --json` 发现 verbs 与输入形状;后者是 typed examples,样例不是真实证据。具体调用与恢复边界见 [Phoenix 评审协议](skills/review-ui/references/phoenix-review.md)。
68
+ 选择 Phoenix CLI 管理评审记录时,用 `phoenix-ui review --help` 和 `phoenix-ui review schema --json` 发现 verbs 与输入形状;后者是 typed examples,样例不是真实证据。具体调用与恢复边界见 [Phoenix 评审协议](docs/phoenix-ui-review.md)。
82
69
 
83
70
  ## Skills 列表
84
71
 
@@ -91,8 +78,8 @@ managed UI 循环先核对固定包 engine,再用 `phoenix-ui review --help`
91
78
  | Skill | 说明 |
92
79
  | --- | --- |
93
80
  | [prd](skills/prd/SKILL.md) | 撰写或优化 PRD,明确产品目标、FR/NFR、UAT、分期与终验,可按授权录入 SPMS |
94
- | [crd](skills/crd/SKILL.md) | 固定由提出方使用:起草或修订需求、整合接收方回复、答复反问并维护需求与 Q&A 当前视图 |
95
- | [crd-respond](skills/crd-respond/SKILL.md) | 固定由接收方评估、答复 CRD 或回告实现结果;需改码时生成带来源 CR 与完成回写约定的计划,不实施。仅原样追加/收录不重评或生成计划 |
81
+ | [crd](skills/crd/SKILL.md) | 固定由提出方使用:起草或修订需求、整合接收方回复;基于目标和长期成本明确本方立场,收敛契约及 Q&A,不将未发送等同草案 |
82
+ | [crd-respond](skills/crd-respond/SKILL.md) | 固定由接收方独立评估长期方案、明确本方结论并收敛 CRD 答复,或回告实现结果;需改码时生成带来源 CR 与完成回写约定的计划,不实施。仅原样追加/收录不重评或生成计划 |
96
83
  | [dev-plan](skills/dev-plan/SKILL.md) | 基于需求、仓库规则与代码事实撰写或评审可执行计划,明确开发对象、排除与外部前置;CR 来源可追溯,对应请求完成后回写答复,支持跨对话续做 |
97
84
  | [spec-human-decision](skills/spec-human-decision/SKILL.md) | 逐项讲清 PRD 或开发计划的功能与价值,计划另述做法;交互选择确认、驳回、修改并打磨文档,修改须附说明 |
98
85
  | [test-plan](skills/test-plan/SKILL.md) | 从需求与验收标准生成测试用例,覆盖正常、边界、权限和并发场景,可按授权写入 SPMS |
@@ -102,10 +89,10 @@ managed UI 循环先核对固定包 engine,再用 `phoenix-ui review --help`
102
89
  | [review-code](skills/review-code/SKILL.md) | 评审未提交变更、commit 或分支差异,可对照开发计划,输出有证据的代码评审报告 |
103
90
  | [review-prd-dev-gaps](skills/review-prd-dev-gaps/SKILL.md) | 核对 PRD 与开发交付,将遗漏、合理变更和待拍板差异分流,交互 Triage 后按需调用 dev-plan 生成 gaps plan |
104
91
  | [apply-code-review](skills/apply-code-review/SKILL.md) | 核实代码评审意见,实施合理修复、验证结果并回写实现记录与必要进度 |
105
- | [review-ui](skills/review-ui/SKILL.md) | 代码评审后可选的 UI/UX 验收:只认运行中界面的实拍截图与实测,不凭代码推断效果;由全新上下文的独立评审按冻结的目标包打分并列出可执行差距,默认每个单元 ≥ 8/10 且没有未关闭的 P0/P1 才通过 |
106
- | [apply-ui-review](skills/apply-ui-review/SKILL.md) | 按 UI 验收报告对照截图与目标核实并修复界面差距、自检;停滞预警时重构思路,提交登记后交回复审 |
92
+ | [review-ui](skills/review-ui/SKILL.md) | 代码评审后可选的 UI/UX 验收:真实界面增量取证,同状态多问题共用截图,复用有效历史与 apply 材料;默认一位独立评审检查变化和未关闭项,继承未受影响的已通过结论,默认每个单元 ≥ 8/10 且没有未关闭的 P0/P1 才通过;需补证时交 apply-ui-review 执行补证后独立复审 |
93
+ | [apply-ui-review](skills/apply-ui-review/SKILL.md) | 按 UI 验收报告执行修复、补证与解阻,对照截图与目标核实并自检;停滞预警先诊断,有结构性根因才重构,提交登记后交回复审 |
107
94
  | [apply-doc-review](skills/apply-doc-review/SKILL.md) | 可只传评审报告,沿报告的原文档引用定位并修订 PRD 或开发计划,复核并记录逐条处置结果 |
108
- | [resolve-blocked](skills/resolve-blocked/SKILL.md) | 查证与交互推进计划解阻,外部依赖通过 CRD 交接,存 decisions 并回改计划;最终集中列全剩余阻塞、各方交付和用户具体动作 |
95
+ | [resolve-blocked](skills/resolve-blocked/SKILL.md) | 查证解阻;需用户拍板、补证或协调外部依赖时用工具阻断式问答,外部请求用 CRD 交接,存 decisions 并回改计划,最终列全剩余阻塞和用户动作 |
109
96
 
110
97
  把上述 skill 串成完整交付流水线(想法 → PRD → 分期 → 每期开发与并行测试 → 交付)的方法见 [AI Native SDLC](docs/ai-native-sdlc.md),含各环节产物路径约定与测试线待补环节的现状核对。
111
98
 
@@ -114,12 +101,12 @@ managed UI 循环先核对固定包 engine,再用 `phoenix-ui review --help`
114
101
  需要逐项确定功能取舍时,可在 PRD 或开发计划成稿后使用 `spec-human-decision <文档>`:每项简述功能与价值,开发计划另述做法;选择确认、驳回或附说明修改,修订版再确认,并同步文档与决定记录。这是可选的用户决策环节,技术评审与开工条件仍按下述回路核对。
115
102
 
116
103
  1. (可选)`prd` → `review-prd <PRD>`:需要修改时 `apply-doc-review <报告>`;可交接后 `dev-plan <PRD> P1`。临时或小任务可直接从 `dev-plan` 开始。
117
- 2. `dev-plan` → `review-dev-plan <计划>`:需要修改时 `apply-doc-review <报告>`;之后 `Blocked` 用 `resolve-blocked <计划>`,自行查证、交互补齐前置,收到答复后继续处理,外部缺口实际用 `crd` 创建/续写本地请求,不自动发送;最终开头列全剩余阻塞、各方需提供什么、用户具体动作和解除条件,不只给重跑命令。先推进具体 CR 或本方验证,解除条件满足后再运行以重判就绪,`Ready` 用 `/goal 按 <计划> 开发`。从 PRD 派生的计划在顶部「需求来源」记录 PRD 与期次,开发范围区分本方改动与外部前置,不因端到端目标代建依赖系统。
104
+ 2. `dev-plan` → `review-dev-plan <计划>`:需要修改时 `apply-doc-review <报告>`;之后 `Blocked` 用 `resolve-blocked <计划>`,自行查证,需用户处理的决定、前置和跨项目协调必须用 Ask User 类工具提出并等待明确答复,不能仅输出聊天消息;收到答复后继续处理,外部缺口实际用 `crd` 创建/续写本地请求,不自动发送;最终开头列全剩余阻塞、各方需提供什么、用户具体动作和解除条件,不只给重跑命令。先推进具体 CR 或本方验证,解除条件满足后再运行以重判就绪,`Ready` 用 `/goal 按 <计划> 开发`。从 PRD 派生的计划在顶部「需求来源」记录 PRD 与期次,开发范围区分本方改动与外部前置,不因端到端目标代建依赖系统。
118
105
  3. `/goal` 开发:按计划的提交点分阶段提交,全部里程碑完成后最终提交,SHA 记入完成记录,结束时提示 `review-code <计划>`。来自 CR 的计划按顶部合同,在对应请求或明确子范围实现且约定检查通过后追加实现结果答复,保留历史、余项及回告链接;不等同发布或对方验收,未能回写时保留恢复动作。
119
106
  4. `review-code <计划>` 从完成记录登记的提交与未提交改动确定范围:需要修改时 `apply-code-review <报告>`(按计划约定提交修复并登记 SHA),再回到 `review-code <计划>` 复审,直到通过验收或你明确本期放过。
120
- 5. (可选)计划涉及界面时,`review-ui <计划>` 做 UI/UX 验收:每轮按目标包截图,由全新上下文的独立评审打分。需要修改时 `apply-ui-review <报告>`(按计划约定提交并登记 `UI修复` SHA),再回到 `review-ui <计划>` 复审,直到通过(默认每个单元 ≥ 8/10 且没有未关闭的 P0/P1)、停滞后交你裁定,或你明确放过。UI 修复带来代码改动时,再用 `review-code <计划>` 复审这些改动。
107
+ 5. (可选)计划涉及界面时,`review-ui <计划>` 做 UI/UX 验收:按影响范围自动检查与采集代表帧,同页同状态共用截图;复用有效历史证据及已通过结论,默认一位全新上下文的独立评审,不按接近门槛自动增加评审。需要修改时 `apply-ui-review <报告>`(按计划约定提交并登记 `UI修复` SHA),再回到 `review-ui <计划>` 复审,直到通过(默认每个单元 ≥ 8/10 且没有未关闭的 P0/P1)、停滞后交你裁定,或你明确放过。UI 修复带来代码改动时,再用 `review-code <计划>` 复审这些改动。 需补证时同样交给 `apply-ui-review <报告>`,由执行 agent 补齐环境、数据与实测材料、处理差距后交回 `review-ui <计划或原范围>` 独立复审;只缺独立评审时续接 review-ui。仅无法自行取得的权限、资料或产品决定请求用户提供。没有代码、证据或阻塞条件变化时不新增轮次。
121
108
 
122
- UI 循环可沿用人工 Markdown,或通过匹配的 Phoenix engine 管理证据与轮次。已有 managed 索引时从原轮与 revision 续接;engine 缺失、版本不匹配或状态损坏时保持只读,恢复固定版本后再继续。人工历史只经明确的 `review import` 接管,不能清零未知次数;CLI 操作成功不代表 UI 通过,真实取证和独立评审仍是判定依据。
109
+ UI 验收是独立的 agent 工作流,依据目标、真实证据和 Markdown 历史继续,不绑定工具、规则版本或文档指纹。可选用 Phoenix CLI 管理记录;不可用时保留其状态文件,继续记录评审与修复结果。CLI 操作成功不代表 UI 通过。
123
110
  6. 通过后,计划来自 PRD 时可选 `review-prd-dev-gaps <计划>`;生成 gaps plan 时从第 2 步的 `review-dev-plan <gaps 计划>` 继续。
124
111
 
125
112
  **跨项目入口按角色固定**:提出方始终用 `crd` 起草/修订需求、整合接收方返回稿、答复反问;接收方始终用 `crd-respond <CRD>` 评估/答复需求、续接提出方澄清或回告实现结果。双方收到文件或追加消息都不切换角色,归属不明先核实。接收方默认在原文末追加有证据的评估答复,需改本方代码时实际调用 `dev-plan`(未决契约按就绪门标 `Blocked`),计划记录来源 CR、承接请求/子范围、回写文件与顶部完成回写约定,生成计划从第 2 步继续;完成回告核对适用证据后追加 RESP,不重开规划或改写历史。仅原样追加/收录不重新评估或生成计划,仅评估不落盘,仅答复不生成计划,不自动发送或实施。
@@ -138,13 +125,13 @@ $review-ui [开发计划] [页面URL/路由] [设计稿/目标图] [上轮报告
138
125
  $agi-mode <任务描述> 或 sdlc [流程/阶段/问题] 或 init-sdlc [PRD/计划/范围] 或 what-next [查询/更新] [PRD/计划/范围]
139
126
  ```
140
127
 
141
- 提示的展示取决于客户端:[Claude Code](https://code.claude.com/docs/en/skills#frontmatter-reference) 在 `/skill` 补全中支持 `argument-hint`;Codex 的 `$skill` 参数预览仍有[未关闭的功能请求](https://github.com/openai/codex/issues/31014),不能仅凭新增字段保证弹出提示。未展示时可直接参考上述用法或各技能的 frontmatter。
128
+ 参数提示的展示取决于客户端对 `argument-hint` 的支持。未展示时可直接参考上述用法或各技能的 frontmatter。
142
129
 
143
130
  5 个 `review-*` 支持“对照上轮报告复审修复效果”:逐项保留来源 ID,区分已解决、仍存在、部分解决、回归、待核实、不再适用和本轮未复核;新增问题单列,默认另存报告。代码旧问题的复核不受本次修复 diff 限制。`review-prd-dev-gaps` 会先核对已有 gaps plan,支持“仅报告”,避免重复规划。
144
131
 
145
132
  `apply-doc-review` 与 `apply-code-review` 支持“继续修复”与“仅复核”:前者处理剩余问题,后者保留目标产物并保存必要处置记录;完全只读则仅聊天交付。重复执行先核对已有证据,无实质变化不改文件或时间;apply 的复核不自动成为新一轮独立 review。
146
133
 
147
- 项目状态与下一步能力已合并到 `agi-mode` 的 [what-next 流程](skills/agi-mode/playbooks/what-next.md),不再单独发布 `what-next` skill。查询默认只读;初始化/更新才保存,既有执行授权继续有效。
134
+ 项目状态与下一步查询使用 `agi-mode` 的 [what-next 流程](skills/agi-mode/playbooks/what-next.md)。查询默认只读;初始化/更新才保存,既有执行授权继续有效。
148
135
 
149
136
  ```text
150
137
  使用 $agi-mode sdlc,解释从需求、CRD 往返到开发、验收和发布的交接。
@@ -220,15 +207,15 @@ $agi-mode <任务描述> 或 sdlc [流程/阶段/问题] 或 init-sdlc [PRD/计
220
207
 
221
208
  只需安装 `agi-mode` 即可使用上述流程;保留的 `autoresearch`、`arena`、`reflect` 名称是兼容入口,需要同时安装 `agi-mode`。它们不再独立维护执行规则。
222
209
 
223
- 明确要求优化仓库指令时,可使用 `$optimize-agents-md [repo 路径] [文件范围] [仅诊断]`,默认处理当前代码仓库的根 AGENTS.md。它默认可发现,普通编码、初始化或全局规则修改不进入该流程;仅诊断保持只读。优化时使用已安装的 `use-prompt-dsl` 的 `compose`(默认操作)将原则压缩为 Odyssey RULE 片段(直接嵌入 AGENTS.md,无外层包装),按语义去重并补齐 Think Before Coding 与十二项 Coding Principles,保留项目事实、授权和作用域。缺少 DSL skill 时停止,建议完整安装本仓 skills;安装检查和优化流程只属于 skill,不写进目标 AGENTS.md。无需同仓评测任务或远端配置,文件精简不等于已证明行为质量提升。
210
+ 明确要求优化仓库指令时,可使用 `$optimize-agents-md [repo 路径] [文件范围] [仅诊断]`,默认处理当前代码仓库的根 AGENTS.md。它默认可发现,普通编码、初始化或全局规则修改不进入该流程;仅诊断保持只读。优化时使用已安装的 `use-prompt-dsl` 的 `compose`(默认操作)将原则压缩为 Odyssey RULE 片段(直接嵌入 AGENTS.md,无外层包装),按语义去重并补齐原则素材中缺失的编码准则,保留项目事实、授权和作用域。缺少 DSL skill 时停止,建议完整安装本仓 skills;安装检查和优化流程只属于 skill,不写进目标 AGENTS.md。无需同仓评测任务或远端配置,文件精简不等于已证明行为质量提升。
224
211
 
225
- 独立的 agi-mode [远端执行工具](skills/agi-mode/references/remote-evolution.md) 提供 `validate / run / resume / apply`,优化器、被测 agent 与固定验收使用 SSH 主机上的独立环境。默认搜索 keep 只更新探索最佳,独立确认和原则核对通过后才在已有写回授权内按 CAS 采用;显式获准的 v2 `bounded_exploration_v1` 仅允许质量门通过、来源精度不足时探索一个候选,不晋级最佳、不确认/采用,整体 inconclusive。不自动提交、发布或安装全局配置。首期v1已在指定SSH/Docker组合完成真实隔离、任务对照/搜索、自然请求/CAS与故障恢复验收,但独立确认样本不足,未证明候选优于基线。v2现按已有结果阶段交付:工程和已测子范围可用,完整skill三条件及TypeSafe反馈进入真实optimizer尚未验收,没有已证实的指令收益;资源到位后再按3分目标续跑,详见[M4阶段记录](docs/plan/agent-instruction-evolution-v2.records/M4.md#2026-10-22-阶段交付)。
212
+ 独立的 agi-mode [远端执行工具](skills/agi-mode/references/remote-evolution.md) 提供 `validate / run / resume / apply`,优化器、被测 agent 与固定验收使用 SSH 主机上的独立环境。默认搜索 keep 只更新探索最佳,独立确认和原则核对通过后才在已有写回授权内按 CAS 采用;显式获准的 v2 `bounded_exploration_v1` 仅允许质量门通过、来源精度不足时探索一个候选,不晋级最佳、不确认/采用,整体 inconclusive。不自动提交、发布或安装全局配置。验收范围与运行结果见 [CHANGELOG.md](CHANGELOG.md) 及其引用的阶段记录。
226
213
 
227
214
  自然发现验收可用 `source.fixed_skill_roots` 显式提供完整固定背景目录,目标缺席/候选切换保持其他技能字节;实际目录、读取与任务行为分别记录,单独的目标技能执行不代表完整目录发现已通过。
228
215
 
229
216
  v2运行质量项可显式声明`verifier/`公开观测文件,按白名单接收固定grader的实际运行事实;验收分与运行证据分开,缺证据保持unknown,独立观测不替代新增回归测试。
230
- 新百分表保留其他已知分项,不因单项unknown全表清空;已知硬失败控制可显式声明不可观察的非gate项并要求双评一致未知,成功控制、底线、排序及辅助资格保持严格。
231
- 新百分rubric还可显式让程序从已校验逐项判断派生评审状态,避免把产物失败误作测量无效;旧协议默认保持,新格式需重新校准。
217
+ 百分制评分表保留其他已知分项,不因单项unknown全表清空;已知硬失败控制可显式声明不可观察的非gate项并要求双评一致未知,成功控制、底线、排序及辅助资格保持严格。
218
+ 百分制 rubric 可显式让程序从已校验逐项判断派生评审状态,避免把产物失败误作测量无效;旧协议默认保持,新格式需重新校准。
232
219
  固定预算项可显式要求双评数值及校准固定参考完全相同,分歧保持unknown及原分;缺省程度容差保持,同分仍须核对依据,详见远端手册。
233
220
 
234
221
  v2自有仓任务可显式使用`case.platform=linux/arm64`和匹配的固定镜像;默认及v1/Pro V2仍amd64。平台改变后重新校准,不能迁移旧分或资格;详见[远端手册](skills/agi-mode/references/remote-evolution.md)。
@@ -269,7 +256,7 @@ v2自有仓任务可显式使用`case.platform=linux/arm64`和匹配的固定镜
269
256
 
270
257
  | Skill | 说明 |
271
258
  | --- | --- |
272
- | [xgent-init](skills/xgent-init/SKILL.md) | 内部初始化 skill,补齐 `AGENTS.md` / `PRODUCT.md` / `DESIGN.md`,保留 Portal 产品边界与设计规范;`install` 仅直接创建 AGENTS.md |
259
+ | [xgent-init](skills/xgent-init/SKILL.md) | 内部初始化 skill,补齐 `AGENTS.md` / `PRODUCT.md` / `DESIGN.md`,保留 Portal 产品边界与设计规范 |
273
260
  | [portal-dev-setup](skills/portal-dev-setup/SKILL.md) | 在 App 仓库中启动、体检和排查 Docker 一盒门户,完成本地联调 |
274
261
  | [portal-external-app](skills/portal-external-app/SKILL.md) | 接入以 Docker 镜像交付的外部服务,核对 manifest、注册、路由、权限与交付契约 |
275
262
  | [portal-micro-app](skills/portal-micro-app/SKILL.md) | 开发嵌入门户的微应用前端,处理 SDK 握手、导航、授权与 iframe 交互 |
@@ -13,7 +13,6 @@ const readline = require('node:readline');
13
13
 
14
14
  const PKG_ROOT = path.join(__dirname, '..');
15
15
  const HOOKS_SRC_DIR = path.join(PKG_ROOT, '.claude', 'hooks');
16
- const AGENTS_TEMPLATE = path.join(PKG_ROOT, 'skills', 'xgent-init', 'references', 'external-app-AGENTS.template.md');
17
16
 
18
17
  // 写入目标项目 .claude/settings.json 的配置,按顶层 key 合并:
19
18
  // 这里列出的 key 以本包为准覆盖,其余已有配置保持不动。
@@ -26,7 +25,7 @@ const MANAGED_SETTINGS = {
26
25
  };
27
26
 
28
27
  // ─── Phoenix UI ─────────────────────────────────────────────────────────────
29
- // Phoenix 的受管安装、hooks 与回执由 Rust 执行器事务化完成。
28
+ // Phoenix 工具文件由 Rust 执行器直接覆盖,共享 hooks 只更新本工具条目。
30
29
  // 旧工具是否删除由 npm 安装入口询问,工具清理不备份、不迁移旧数据。
31
30
 
32
31
  const bootstrap = require('../skills/phoenix-ui/scripts/phoenix-bootstrap.cjs');
@@ -101,10 +100,8 @@ function preparePhoenixTools(project, providers) {
101
100
  }
102
101
  }
103
102
  }
104
- if (!fs.existsSync(path.join(project, '.phoenix-ui/install'))) {
105
- const file = checked(project, `${provider}/skills/phoenix-ui`);
106
- if (present(file)) refresh.push(file);
107
- }
103
+ const file = checked(project, `${provider}/skills/phoenix-ui`);
104
+ if (fs.lstatSync(file, { throwIfNoEntry: false })?.isSymbolicLink()) refresh.push(file);
108
105
  }
109
106
  const oldCommand = value => typeof value === 'string'
110
107
  && /(?:skills[\\/]impeccable[\\/]scripts[\\/](?:impeccable(?:\.cmd)?|hook(?:-(?:probe|before-edit|after-edit|stop))?\.mjs)|(?:^|[\s"'])impeccable\s+hook\b)/.test(value);
@@ -201,17 +198,15 @@ function runDiagram(binary, args) {
201
198
 
202
199
  function prepareDiagramTools(project, providers) {
203
200
  const refresh = [];
204
- if (!fs.lstatSync(path.join(project, '.phoenix-diagram/install'), { throwIfNoEntry: false })) {
205
- for (const provider of providers.filter(name => name !== '.codex')) {
206
- const relative = `${provider}/skills/phoenix-diagram`;
207
- const file = path.join(project, relative);
208
- const stat = fs.lstatSync(file, { throwIfNoEntry: false });
209
- if (!stat) continue;
210
- for (let dir = path.dirname(file); dir !== project; dir = path.dirname(dir)) {
211
- if (fs.lstatSync(dir).isSymbolicLink()) throw phoenixFailure(3, `工具目录的父路径是符号链接,未修改: ${dir}`);
212
- }
213
- refresh.push({ file, relative, linked: stat.isSymbolicLink() });
201
+ for (const provider of providers.filter(name => name !== '.codex')) {
202
+ const relative = `${provider}/skills/phoenix-diagram`;
203
+ const file = path.join(project, relative);
204
+ const stat = fs.lstatSync(file, { throwIfNoEntry: false });
205
+ if (!stat?.isSymbolicLink()) continue;
206
+ for (let dir = path.dirname(file); dir !== project; dir = path.dirname(dir)) {
207
+ if (fs.lstatSync(dir).isSymbolicLink()) throw phoenixFailure(3, `工具目录的父路径是符号链接,未修改: ${dir}`);
214
208
  }
209
+ refresh.push({ file, relative, linked: true });
215
210
  }
216
211
  return {
217
212
  covers(conflict) {
@@ -242,10 +237,7 @@ async function prepareDiagram(targetDir, options) {
242
237
  const tools = prepareDiagramTools(targetDir, planned.report.providers || []);
243
238
  const reinstallable = planned.code === 3 && planned.report.status === 'conflict'
244
239
  && planned.report.conflicts.length > 0 && planned.report.conflicts.every(conflict => tools.covers(conflict));
245
- // A known pending transaction is recovered only by the later explicit apply.
246
- const recoverable = planned.code === 3 && planned.report.status === 'recovery-required'
247
- && planned.report.conflicts?.length === 0;
248
- if (!reinstallable && ((planned.code !== 0 && !recoverable) || !['planned', 'unchanged', 'recovery-required'].includes(planned.report.status))) {
240
+ if (!reinstallable && (planned.code !== 0 || !['planned', 'unchanged'].includes(planned.report.status))) {
249
241
  printDiagram(planned.report, ready.manifest);
250
242
  throw phoenixFailure(planned.code || 3, 'Phoenix Diagram 预检失败');
251
243
  }
@@ -336,12 +328,17 @@ function printPhoenix(report, manifest) {
336
328
  }
337
329
  for (const entry of report.transitionEntries) console.log(` 提示 ${entry} 保留一个迁移主版本,只指向新命令`);
338
330
  for (const conflict of report.conflicts) console.log(` 冲突 ${conflict.path}: ${conflict.message}`);
339
- for (const finding of report.findings) console.log(` ${finding.blockingIntegration ? '待处理' : '说明'} ${finding.path}: ${finding.message}`);
331
+ for (const finding of report.findings) {
332
+ if (!finding.blockingIntegration && ['document-old-entry', 'personal-old-command'].includes(finding.kind)) continue;
333
+ console.log(` ${finding.blockingIntegration ? '待处理' : '说明'} ${finding.path}: ${finding.message}`);
334
+ }
340
335
  for (const item of report.unconsumed) console.log(` 未迁移 ${item.path} ${item.field}: ${item.reason}`);
341
336
  if (report.transactionId && ['installed', 'integration-pending'].includes(report.status)) {
342
337
  console.log(` 事务 ${report.transactionId};备份 ${report.backups}`);
343
338
  const project = bootstrap.shellQuote(report.project);
344
339
  console.log(` 回滚 npm exec --package=@xgent-ai/skills@${npmPackageVersion} -- phoenix-ui migrate --rollback ${report.transactionId} --project ${project}`);
340
+ }
341
+ if (['installed', 'integration-pending'].includes(report.status)) {
345
342
  for (const provider of skillProviders) console.log(` 重载 ${reloadStep(provider)}`);
346
343
  }
347
344
  }
@@ -356,17 +353,6 @@ async function confirm(question, skipMessage, answers) {
356
353
  return /^(y|yes)$/i.test(value.trim());
357
354
  }
358
355
 
359
- function createAgents(targetDir) {
360
- const dest = path.join(targetDir, 'AGENTS.md');
361
- try {
362
- fs.copyFileSync(AGENTS_TEMPLATE, dest, fs.constants.COPYFILE_EXCL);
363
- console.log(' 创建 AGENTS.md');
364
- } catch (error) {
365
- if (error.code !== 'EEXIST') throw error;
366
- console.log(' 跳过 AGENTS.md (已存在,保留原文)');
367
- }
368
- }
369
-
370
356
  function usage() {
371
357
  console.log(`用法: npx @xgent-ai/skills <command>
372
358
 
@@ -374,8 +360,7 @@ function usage() {
374
360
  install [dir] 为目标项目(默认当前目录)安装 .claude/hooks 下的全部
375
361
  hook,在 .claude/settings.json 中启用对应配置,并安装
376
362
  Phoenix UI(设计 skill 与 hooks;engine 校验后
377
- 放入用户 cache;旧 impeccable 可选择替换或共存),
378
- ${includesDiagram ? ' 以及 Phoenix Diagram(十类图解 skill 与独立原生 engine),\n' : ''} 并询问是否创建通用的 AGENTS.md
363
+ 放入用户 cache;旧 impeccable 可选择替换或共存)${includesDiagram ? ',\n 以及 Phoenix Diagram(十类图解 skill 与独立原生 engine)' : ''}
379
364
  help 显示本帮助
380
365
 
381
366
  install 选项:
@@ -384,14 +369,12 @@ install 选项:
384
369
  --replace-impeccable 删除项目及个人级旧 impeccable 工具和 hooks,不备份
385
370
  --keep-impeccable 保留 impeccable,与 Phoenix UI 共存(无交互时默认)
386
371
  ${includesDiagram ? ` --no-phoenix-diagram 跳过 Phoenix Diagram(不删除已装版本)
387
- --migrate-archify 仅执行 Diagram 预检/确认/迁移,跳过 hooks/settings/AGENTS/UI;
372
+ --migrate-archify 仅执行 Diagram 预检/确认/迁移,跳过 hooks/settings/UI;
388
373
  使用已存在且匹配包内固定版本的引擎,不自动获取
389
374
  --confirm-remove-archify 仅配 --migrate-archify,确认移除所选项目/provider 旧入口;
390
375
  不备份 Archify,回滚不重建旧入口,需要时按原来源重装
391
376
  ` : ''} --release-dir=DIR 离线安装 Phoenix UI engine:使用已核验的 release 目录,不联网
392
- ${includesDiagram ? ' --diagram-release-dir=DIR 离线安装 Phoenix Diagram:使用匹配的完整目录,不联网\n' : ''} --xgent-init 创建 AGENTS.md (已有则跳过),不再询问
393
- --no-xgent-init 跳过 AGENTS.md,不再询问
394
- --providers=a,b 指定 Phoenix 工具装进哪些 harness 目录(默认按项目里已有的
377
+ ${includesDiagram ? ' --diagram-release-dir=DIR 离线安装 Phoenix Diagram:使用匹配的完整目录,不联网\n' : ''} --providers=a,b 指定 Phoenix 工具装进哪些 harness 目录(默认按项目里已有的
395
378
  目录判断,都没有时装 .claude;codex 同时选 .agents 与 .codex)
396
379
  `);
397
380
  }
@@ -399,7 +382,7 @@ ${includesDiagram ? ' --diagram-release-dir=DIR 离线安装 Phoenix Diagram:
399
382
  async function install(args) {
400
383
  const flags = args.filter((a) => a.startsWith('--'));
401
384
  const dirArg = args.find((a) => !a.startsWith('--'));
402
- const unknown = flags.filter((f) => !['--no-phoenix-ui', '--no-impeccable', '--replace-impeccable', '--keep-impeccable', '--xgent-init', '--no-xgent-init',
385
+ const unknown = flags.filter((f) => !['--no-phoenix-ui', '--no-impeccable', '--replace-impeccable', '--keep-impeccable',
403
386
  ...(includesDiagram ? ['--no-phoenix-diagram', '--migrate-archify', '--confirm-remove-archify'] : [])].includes(f)
404
387
  && !['--providers=', '--release-dir=', ...(includesDiagram ? ['--diagram-release-dir='] : [])].some((p) => f.startsWith(p)));
405
388
  if (unknown.length > 0) {
@@ -408,10 +391,6 @@ async function install(args) {
408
391
  process.exit(1);
409
392
  }
410
393
  if (flags.includes('--confirm-remove-archify') && !flags.includes('--migrate-archify')) throw phoenixFailure(2, '--confirm-remove-archify 需要 --migrate-archify');
411
- if (flags.includes('--xgent-init') && flags.includes('--no-xgent-init')) {
412
- console.error('错误: --xgent-init 与 --no-xgent-init 不能同时使用');
413
- process.exit(1);
414
- }
415
394
  if (flags.includes('--replace-impeccable') && flags.includes('--keep-impeccable')) {
416
395
  throw phoenixFailure(1, '--replace-impeccable 与 --keep-impeccable 不能同时使用');
417
396
  }
@@ -469,24 +448,18 @@ async function install(args) {
469
448
  process.exit(1);
470
449
  }
471
450
  }
472
- const agentsExists = fs.existsSync(path.join(targetDir, 'AGENTS.md'));
473
- const askAgents = !flags.includes('--xgent-init') && !flags.includes('--no-xgent-init') && !agentsExists;
474
451
  const phoenix = options.phoenix ? await preparePhoenix(targetDir, options) : null;
475
452
  const diagram = options.diagram ? await prepareDiagram(targetDir, options) : null;
476
453
  const askReplace = phoenix?.tools.hasLegacy && !flags.includes('--replace-impeccable') && !flags.includes('--keep-impeccable');
477
- const rl = process.stdin.isTTY && (askAgents || askReplace)
454
+ const rl = process.stdin.isTTY && askReplace
478
455
  ? readline.createInterface({ input: process.stdin, output: process.stdout }) : null;
479
456
  const answers = rl?.[Symbol.asyncIterator]();
480
457
  rl?.once('SIGINT', () => { rl.close(); process.exit(130); });
481
- let agents;
482
458
  let replace = flags.includes('--replace-impeccable');
483
459
  try {
484
460
  if (askReplace) replace = await confirm(
485
461
  '发现旧 impeccable,是否删除并替换为 Phoenix UI(含个人级入口,不备份)? [y/N] ',
486
462
  ' 保留 impeccable:无交互环境默认共存;可用 --replace-impeccable 替换', answers);
487
- agents = flags.includes('--xgent-init') || (askAgents && await confirm(
488
- '是否同时创建通用的 AGENTS.md (含 Portal 联调与前端验收约定)? [y/N] ',
489
- ' 跳过 AGENTS.md:非交互环境,可加 --xgent-init 创建', answers));
490
463
  } finally {
491
464
  rl?.close();
492
465
  }
@@ -521,16 +494,13 @@ async function install(args) {
521
494
  console.log(' 写入 .claude/settings.json (statusLine)');
522
495
  }
523
496
 
524
- if (agents) createAgents(targetDir);
525
- else if (agentsExists && !flags.includes('--no-xgent-init')) console.log(' 跳过 AGENTS.md (已存在,保留原文)');
526
-
527
- // XGENT 部分已完成;Phoenix 在锁内重读这些文件后再应用,中断时可重试。
497
+ // XGENT 部分已完成;Phoenix 直接覆盖工具文件,中断后重跑。
528
498
  if (phoenix) {
529
499
  let applied;
530
500
  try {
531
501
  applied = runPhoenix(phoenix.binary, phoenix.args);
532
502
  } catch (error) {
533
- console.log(`未完成: XGENT 部分已安装;Phoenix UI 待恢复(安装被中断,可能已部分写入),按下方错误处理后重跑本命令,会先按日志恢复(可重复执行)。${diagram ? 'Phoenix Diagram 未执行。' : ''}`);
503
+ console.log(`未完成: XGENT 部分已安装;Phoenix UI 安装未完成,处理下方错误后重跑本命令覆盖安装。${diagram ? 'Phoenix Diagram 未执行。' : ''}`);
534
504
  throw error;
535
505
  }
536
506
  printPhoenix(applied.report, phoenix.manifest);
@@ -548,7 +518,7 @@ async function install(args) {
548
518
  try {
549
519
  applied = runDiagram(diagram.binary, diagram.args);
550
520
  } catch (error) {
551
- console.log(`未完成: ${completed};Phoenix Diagram 可能已部分写入,按错误和项目日志重跑恢复。`);
521
+ console.log(`未完成: ${completed};Phoenix Diagram 安装未完成,处理错误后重跑本命令覆盖安装。`);
552
522
  throw error;
553
523
  }
554
524
  printDiagram(applied.report, diagram.manifest);
@@ -559,6 +529,7 @@ async function install(args) {
559
529
  }
560
530
  }
561
531
  console.log(`完成: ${targetDir}`);
532
+ console.log(' 可选 在 agent 对话中用 /optimize-agents-md(Codex 用 $optimize-agents-md)以 opinionated DSL 改良已有 AGENTS.md;不喜欢这套风格可忽略。');
562
533
  }
563
534
 
564
535
  const [cmd, ...args] = process.argv.slice(2);
@@ -3,37 +3,37 @@
3
3
  "distribution": "release",
4
4
  "tool": "phoenix-diagram",
5
5
  "toolVersion": "0.2.0",
6
- "npmPackageVersion": "0.7.7",
7
- "sourceCommit": "f70b989d34ed067a556356501892e16229981faa",
8
- "sourceInputSha256": "1e4a4c134dbae12345002c9c1025ed955b112afa375f2ba2c323315777876ec6",
6
+ "npmPackageVersion": "0.7.9",
7
+ "sourceCommit": "7229a8ba08f7d37bc37530e00e4d933903f1b5cf",
8
+ "sourceInputSha256": "910df91b4e857da6e30d8982aea308d2e1bf2d99c2d7644cb5455b37762740d9",
9
9
  "inputContractSchema": 1,
10
10
  "receiptSchema": 1,
11
11
  "viewerRevision": "phoenix-v2",
12
- "bundleSha256": "58d1580a3a443f79a3aa41ee2c9000542de5a8d4b799377a4be673298ad8589e",
12
+ "bundleSha256": "e573234de7918dc87e1630c30a4ea1ba5862cc647dc0023a6d578ccb114e2ab6",
13
13
  "engines": {
14
14
  "darwin-arm64": {
15
15
  "asset": "phoenix-diagram-darwin-arm64",
16
- "size": 17566448,
17
- "sha256": "c6402d6ba1d3f2641dff8c8ed45dae0b46ce417f6a884f45fbb2e31d646f77b8",
18
- "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.7/darwin-arm64/phoenix-diagram-darwin-arm64"
16
+ "size": 17549968,
17
+ "sha256": "5f432a278a433bd456e8b65e0eb7a4128665f31d8c992609d6eb1cd9c48b7429",
18
+ "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.9/ci-41410951647/darwin-arm64/phoenix-diagram-darwin-arm64"
19
19
  },
20
20
  "darwin-x64": {
21
21
  "asset": "phoenix-diagram-darwin-x64",
22
- "size": 19576864,
23
- "sha256": "adee5a88cf520b0cb549ea8327c3d9c50e046fadb8082f27c4360e574294a044",
24
- "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.7/darwin-x64/phoenix-diagram-darwin-x64"
25
- },
26
- "linux-x64": {
27
- "asset": "phoenix-diagram-linux-x64",
28
- "size": 21880592,
29
- "sha256": "7d2d2e7092544d77b155c8f82a4ce64ec5ee4feec399093ff3fa38baefed9269",
30
- "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.7/linux-x64/phoenix-diagram-linux-x64"
22
+ "size": 19556424,
23
+ "sha256": "236384da35f4f65e892966b5912b1c1631fb4819194a7d51085076f2bc3b1a79",
24
+ "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.9/ci-41410951647/darwin-x64/phoenix-diagram-darwin-x64"
31
25
  },
32
26
  "linux-arm64": {
33
27
  "asset": "phoenix-diagram-linux-arm64",
34
28
  "size": 19406792,
35
- "sha256": "f1bebe41351ca0c384684aa585161653894cc4e06b45e0af19e566f561c42b0f",
36
- "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.7/linux-arm64/phoenix-diagram-linux-arm64"
29
+ "sha256": "0df998aed2c0d1968a94151e01e1be0ea73b62f279ff3f33fbaa2ec037e3c215",
30
+ "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.9/ci-41410951647/linux-arm64/phoenix-diagram-linux-arm64"
31
+ },
32
+ "linux-x64": {
33
+ "asset": "phoenix-diagram-linux-x64",
34
+ "size": 21861536,
35
+ "sha256": "502c95c538ab6db7c4b3de80c65e7188a84a4326ba6a5a965a1c23e7b6033037",
36
+ "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.9/ci-41410951647/linux-x64/phoenix-diagram-linux-x64"
37
37
  }
38
38
  }
39
39
  }
@@ -3,37 +3,37 @@
3
3
  "distribution": "release",
4
4
  "tool": "phoenix-diagram",
5
5
  "toolVersion": "0.2.0",
6
- "npmPackageVersion": "0.7.7",
7
- "sourceCommit": "f70b989d34ed067a556356501892e16229981faa",
8
- "sourceInputSha256": "1e4a4c134dbae12345002c9c1025ed955b112afa375f2ba2c323315777876ec6",
6
+ "npmPackageVersion": "0.7.9",
7
+ "sourceCommit": "7229a8ba08f7d37bc37530e00e4d933903f1b5cf",
8
+ "sourceInputSha256": "910df91b4e857da6e30d8982aea308d2e1bf2d99c2d7644cb5455b37762740d9",
9
9
  "inputContractSchema": 1,
10
10
  "receiptSchema": 1,
11
11
  "viewerRevision": "phoenix-v2",
12
- "bundleSha256": "58d1580a3a443f79a3aa41ee2c9000542de5a8d4b799377a4be673298ad8589e",
12
+ "bundleSha256": "e573234de7918dc87e1630c30a4ea1ba5862cc647dc0023a6d578ccb114e2ab6",
13
13
  "engines": {
14
14
  "darwin-arm64": {
15
15
  "asset": "phoenix-diagram-darwin-arm64",
16
- "size": 17566448,
17
- "sha256": "c6402d6ba1d3f2641dff8c8ed45dae0b46ce417f6a884f45fbb2e31d646f77b8",
18
- "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.7/darwin-arm64/phoenix-diagram-darwin-arm64"
16
+ "size": 17549968,
17
+ "sha256": "5f432a278a433bd456e8b65e0eb7a4128665f31d8c992609d6eb1cd9c48b7429",
18
+ "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.9/ci-41410951647/darwin-arm64/phoenix-diagram-darwin-arm64"
19
19
  },
20
20
  "darwin-x64": {
21
21
  "asset": "phoenix-diagram-darwin-x64",
22
- "size": 19576864,
23
- "sha256": "adee5a88cf520b0cb549ea8327c3d9c50e046fadb8082f27c4360e574294a044",
24
- "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.7/darwin-x64/phoenix-diagram-darwin-x64"
25
- },
26
- "linux-x64": {
27
- "asset": "phoenix-diagram-linux-x64",
28
- "size": 21880592,
29
- "sha256": "7d2d2e7092544d77b155c8f82a4ce64ec5ee4feec399093ff3fa38baefed9269",
30
- "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.7/linux-x64/phoenix-diagram-linux-x64"
22
+ "size": 19556424,
23
+ "sha256": "236384da35f4f65e892966b5912b1c1631fb4819194a7d51085076f2bc3b1a79",
24
+ "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.9/ci-41410951647/darwin-x64/phoenix-diagram-darwin-x64"
31
25
  },
32
26
  "linux-arm64": {
33
27
  "asset": "phoenix-diagram-linux-arm64",
34
28
  "size": 19406792,
35
- "sha256": "f1bebe41351ca0c384684aa585161653894cc4e06b45e0af19e566f561c42b0f",
36
- "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.7/linux-arm64/phoenix-diagram-linux-arm64"
29
+ "sha256": "0df998aed2c0d1968a94151e01e1be0ea73b62f279ff3f33fbaa2ec037e3c215",
30
+ "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.9/ci-41410951647/linux-arm64/phoenix-diagram-linux-arm64"
31
+ },
32
+ "linux-x64": {
33
+ "asset": "phoenix-diagram-linux-x64",
34
+ "size": 21861536,
35
+ "sha256": "502c95c538ab6db7c4b3de80c65e7188a84a4326ba6a5a965a1c23e7b6033037",
36
+ "url": "https://download.xgent.ai/vendor/phoenix-diagram/v0.7.9/ci-41410951647/linux-x64/phoenix-diagram-linux-x64"
37
37
  }
38
38
  }
39
39
  }
@@ -137,8 +137,8 @@
137
137
  },
138
138
  {
139
139
  "path": "references/migration.md",
140
- "size": 6211,
141
- "sha256": "9aad9f2d99eb2f2da9d2f2d656a7a7f01179862a815a6b07f3bf450fe565453a",
140
+ "size": 6209,
141
+ "sha256": "61f88625e1ffcb278db47ca1ddc7ba94ea9b1c459dfecd023125b05195c8a969",
142
142
  "mode": 420
143
143
  },
144
144
  {
@@ -233,8 +233,8 @@
233
233
  },
234
234
  {
235
235
  "path": "scripts/phoenix-bootstrap.cjs",
236
- "size": 45211,
237
- "sha256": "35fe87eb4e534470bc3bb2e6cc05e5483796694a8dd58f01c7702f3129132b71",
236
+ "size": 35018,
237
+ "sha256": "2b0e6f09be39d414d1d3928ed8ef8bd05f76504a03b039bca6200e5691ab0d31",
238
238
  "mode": 420
239
239
  },
240
240
  {
@@ -36,7 +36,7 @@ dry-run只报告计划与冲突,零写入;遇pending只报告,不恢复。
36
36
 
37
37
  recover不接受dry-run;recover/rollback都不接受bundle-root、providers或confirm-remove-archify。它们核已存在的固定正确引擎与本地事务,不下载、不更新、不重装旧skill,不要求当前active安装已完整提交。
38
38
 
39
- 普通 install 的 pending 恢复仍按其回执重跑原显式 install;`migrate --recover ID` 用于已确认的迁移或正在回滚的指定事务,不能代替普通安装恢复。优先执行对应回执的 `recoveryCommand`,不要只因有 journal ID 就改用迁移恢复命令。
39
+ 普通 install 直接覆盖工具文件,不建立事务;中断后重跑即可。成功安装会清理旧安装与迁移状态,不保留历史回滚入口。`migrate --recover ID` 仅用于仍存在的已确认迁移或回滚事务,优先执行该迁移回执的 `recoveryCommand`。
40
40
 
41
41
  - Recover继续指定已确认事务的安全剩余步骤;同一确认范围不重复索取确认。后来新增/改写、删除后重建或父目录身份变化保留并报告recovery-required;不凭stdout推断哪些文件已删。
42
42
  - Rollback仅回滚**当前committed事务**的新入口受管写入;包括仍为v1的当前事务经原生引擎验证并扩展后的回滚,不是跳过后来安装去回滚任意历史ID。后来修改在预检时冲突,先保持零变更;中途身份变化仍保留拒绝。成功rolled-back,同一ID可幂等重试。