@xgent-ai/skills 0.7.0 → 0.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.
@@ -151,6 +151,24 @@ prepare 显式联网准备锁定依赖、工具、浏览器、迁移包和公告
151
151
 
152
152
  [CI workflow](../.github/workflows/phoenix-ui.yml) 在 macOS/Linux 四个平台同架构冷构建/运行,不恢复编译缓存,另有 Node18 consumer。固定成功 run 的四份 native、四份 phase evidence、一份 Node18 evidence 必须保留原始 ZIP/digest、HEAD/tree、工具链、输入/制品摘要、许可及全部真实 step/phase 结果。CI 不持 R2/npm 凭据;缺平台、失败 phase 或摘要不符不能交接。
153
153
 
154
- 维护者用与候选 package.json 兼容的 checkout,只搬运已测字节,不重编;先做 HTTP/R2 替身演练,实际上传另行授权。仓根 [publish-phoenix-ui-r2.mjs](../scripts/publish-phoenix-ui-r2.mjs) 使用现有 `AGENT_RELEASE_R2_*` 环境变量与固定 `--run-id`、`--source-commit`、`--source-tree`、run/jobs/artifacts 原始记录及 `--archives-dir`、`--output-dir` 参数;不自动读 `.env.cf` 或发布 npm。条件上传拒绝覆盖,部分成功保留对象;显式 `--resume` 获取输出 OS 锁并回读已有对象,仅复用相同 size/SHA。具体校验与恢复以该脚本为准。
154
+ 发布只用一条命令,在**干净、已推送且 Phoenix CI 成功**的 HEAD 上执行。版本号先在 `package.json` 改好,并用上面的开发构建同步 `VERSION.json`/`ENGINE.json`/`GENERATED.json`:
155
155
 
156
- 四平台公共 URL 回读全部通过后才冻结 release manifest 与交接清单,再用相同 manifest/资源字节打一次最终 tarball,记录 SHA-256。用**同一 tarball**完成新装、旧包迁移、A→B 升级/回滚和真实融合验收;获得另行授权后才用于 npm 发布,不重新生成 manifest 或重打包后直接发布。替身、开发包和四平台 CI 不独自证明最终 B、线上 URL 或 M6 退出门通过;本指南不填写未验证的最终 hash。
156
+ ```bash
157
+ mise exec --no-deps -- npm run release:phoenix # 上传 R2 与 npm 发布前各确认一次,npm 会要 OTP
158
+ mise exec --no-deps -- npm run release:phoenix -- --prepare-only # 只做到安装检查;再跑一次不带参数即发布
159
+ ```
160
+
161
+ [release-phoenix-ui.mjs](../scripts/release-phoenix-ui.mjs) 依次执行,任一步失败即停:
162
+
163
+ 1. 核对工作树干净、npm 上还没有这个版本,找到该提交成功的 Phoenix CI run(也可用 `--run-id` 指定)。
164
+ 2. 下载 CI 的九个原始 ZIP,逐个核对 GitHub digest。
165
+ 3. 用 [publish-phoenix-ui-r2.mjs](../scripts/publish-phoenix-ui-r2.mjs) 条件上传四个 engine(已存在即拒绝覆盖),公共 URL 回读通过后冻结 release manifest。凭据取已导出的 `AGENT_RELEASE_R2_*`,没有时读仓根 `.env.cf` 里的同名行。
166
+ 4. 用 [pack-phoenix-ui-release.mjs](../scripts/pack-phoenix-ui-release.mjs) 只打一次 tarball。
167
+ 5. 用 [check-phoenix-ui-release.mjs](../scripts/check-phoenix-ui-release.mjs) 在 Node 18 和维护 Node 上新装(engine 从公共 URL 下载),并做 0.3.0/0.6.0 迁移与回滚。
168
+ 6. `npm publish` 这个 tarball,再从 registry 下载回来核对 shasum、integrity 和 SHA-256。
169
+
170
+ 每步产物保存在 `local/phoenix-ui/releases/v<版本>-<短SHA>/`,中断后重跑会复核已有产物再续接。预发布版本必须加 `--tag`。
171
+
172
+ 在仓库根目录直接 `npm publish` 会被 `prepublishOnly` 拒绝:检出里的 `vendor/phoenix-ui/VERSION.json` 是开发清单,没有 engine 下载地址。发布过的 R2 对象和 npm 版本都不能覆盖,出错只能发新版本。
173
+
174
+ M6 终验在日常发布检查之外,还用同一 tarball 做过 A→B 升级/回滚与真实融合验收(见计划 M6 记录);替身、开发包和四平台 CI 都不能单独证明线上 URL 或最终包可用。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xgent-ai/skills",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "description": "XGENT skills 与 Claude Code 辅助工具:通过 npx 为项目安装 hooks、启用 settings,并安装 Phoenix UI 设计工具与 UI 验收 skills",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -18,7 +18,9 @@
18
18
  },
19
19
  "scripts": {
20
20
  "test": "node scripts/run-tests.mjs",
21
- "test:phoenix": "node scripts/test-phoenix-ui.mjs"
21
+ "test:phoenix": "node scripts/test-phoenix-ui.mjs",
22
+ "release:phoenix": "node scripts/release-phoenix-ui.mjs",
23
+ "prepublishOnly": "node scripts/require-release-package.mjs"
22
24
  },
23
25
  "files": [
24
26
  "bin",
@@ -131,7 +131,7 @@
131
131
  "reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
132
132
  "reference/typeset.md": "266887459ebcf2247c9a569e34c828058854a6c5db75b986d952335df197cd3a",
133
133
  "reference/visualize.md": "9f2fefa242907cb6f5e3a2bf62ab4571151118c774ac8edd813179eb4d4e58b4",
134
- "scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
134
+ "scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
135
135
  "scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
136
136
  "scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
137
137
  "scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -202,7 +202,7 @@
202
202
  "agents/.agents/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
203
203
  "agents/.agents/skills/phoenix-ui/reference/typeset.md": "09471ffe6fc9917a6e2dd0f18e820ba025cc8dcd2f461157f1466e2ecffa20fc",
204
204
  "agents/.agents/skills/phoenix-ui/reference/visualize.md": "1c51d37995cbd7fb993be4ad2105357c06447086770707bfc4fe9ae432253ea7",
205
- "agents/.agents/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
205
+ "agents/.agents/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
206
206
  "agents/.agents/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
207
207
  "agents/.agents/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
208
208
  "agents/.agents/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -270,7 +270,7 @@
270
270
  "antigravity/.agent/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
271
271
  "antigravity/.agent/skills/phoenix-ui/reference/typeset.md": "bd9aad79eb1f071fbf4b52964a877d74437ec04baf1b449de247ba40724877c4",
272
272
  "antigravity/.agent/skills/phoenix-ui/reference/visualize.md": "991d2d7129415c51cca616b23bd500fdb46bb54d391d9c6bf01944cee7c42dd9",
273
- "antigravity/.agent/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
273
+ "antigravity/.agent/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
274
274
  "antigravity/.agent/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
275
275
  "antigravity/.agent/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
276
276
  "antigravity/.agent/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -339,7 +339,7 @@
339
339
  "claude-code/.claude/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
340
340
  "claude-code/.claude/skills/phoenix-ui/reference/typeset.md": "a87afc99d24146fe8fe0d4040641559d355f4ffff4edb15e062c4a3487dacd70",
341
341
  "claude-code/.claude/skills/phoenix-ui/reference/visualize.md": "0389662aa8c9bd0df1f7802773a783fee5b1c773eed77f8a4a55252dcd750f6e",
342
- "claude-code/.claude/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
342
+ "claude-code/.claude/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
343
343
  "claude-code/.claude/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
344
344
  "claude-code/.claude/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
345
345
  "claude-code/.claude/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -405,7 +405,7 @@
405
405
  "codex/.codex/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
406
406
  "codex/.codex/skills/phoenix-ui/reference/typeset.md": "aebe2f0424cf20722302f897a8fb658abc31e9819d2007bb2280ff1611ad3abf",
407
407
  "codex/.codex/skills/phoenix-ui/reference/visualize.md": "9a6623eb816608930834366a62387df67585c00ddd866dcafd572f37f94becfb",
408
- "codex/.codex/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
408
+ "codex/.codex/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
409
409
  "codex/.codex/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
410
410
  "codex/.codex/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
411
411
  "codex/.codex/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -478,7 +478,7 @@
478
478
  "cursor/.cursor/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
479
479
  "cursor/.cursor/skills/phoenix-ui/reference/typeset.md": "748e309d9f9277994639b843208794e07bc7aa1d7669877f37517cc373508da1",
480
480
  "cursor/.cursor/skills/phoenix-ui/reference/visualize.md": "6817bb72f26d0592f34cf785c7a7db98ac888ee70f28b3dfb49b92820c583402",
481
- "cursor/.cursor/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
481
+ "cursor/.cursor/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
482
482
  "cursor/.cursor/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
483
483
  "cursor/.cursor/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
484
484
  "cursor/.cursor/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -542,7 +542,7 @@
542
542
  "dsh/.dsh/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
543
543
  "dsh/.dsh/skills/phoenix-ui/reference/typeset.md": "f05511879e0707c46b481678de61629c8e971976ea4419e3257845a4665537a2",
544
544
  "dsh/.dsh/skills/phoenix-ui/reference/visualize.md": "b6b6b4e82376e65a8e86047b2bfe8643a259b8aab9f65aa4d9abb167c40a738c",
545
- "dsh/.dsh/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
545
+ "dsh/.dsh/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
546
546
  "dsh/.dsh/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
547
547
  "dsh/.dsh/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
548
548
  "dsh/.dsh/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -607,7 +607,7 @@
607
607
  "gemini/.gemini/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
608
608
  "gemini/.gemini/skills/phoenix-ui/reference/typeset.md": "5707efcbda57b681d9598a0f3a49eb0b1300dfd155c37ad985363fc5bd56b5ef",
609
609
  "gemini/.gemini/skills/phoenix-ui/reference/visualize.md": "3d8d9a62aa3f861a6ebfe97e258f72084023962fa7954d46b5c9269d2cb48450",
610
- "gemini/.gemini/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
610
+ "gemini/.gemini/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
611
611
  "gemini/.gemini/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
612
612
  "gemini/.gemini/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
613
613
  "gemini/.gemini/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -676,7 +676,7 @@
676
676
  "github/.github/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
677
677
  "github/.github/skills/phoenix-ui/reference/typeset.md": "8d35fdd9909ecb618b5fd2fb7ef49e90f234ff946b541b9acc14580b8a293b7d",
678
678
  "github/.github/skills/phoenix-ui/reference/visualize.md": "fc7c75a51875eaffa28b4731b0d0395241f3b6d095a597315b3dbc2a58dce308",
679
- "github/.github/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
679
+ "github/.github/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
680
680
  "github/.github/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
681
681
  "github/.github/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
682
682
  "github/.github/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -745,7 +745,7 @@
745
745
  "grok/.grok/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
746
746
  "grok/.grok/skills/phoenix-ui/reference/typeset.md": "5057febac0a0bd935882a9bb6ce6fbf3b3ae5ea0f9dae4bcc591fc78b5e32540",
747
747
  "grok/.grok/skills/phoenix-ui/reference/visualize.md": "955c2c2bc70822d3c65d334aa8dce55ed3bc5ba66f33d683ca2f2f9ac5d792e1",
748
- "grok/.grok/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
748
+ "grok/.grok/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
749
749
  "grok/.grok/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
750
750
  "grok/.grok/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
751
751
  "grok/.grok/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -809,7 +809,7 @@
809
809
  "hermes/.hermes/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
810
810
  "hermes/.hermes/skills/phoenix-ui/reference/typeset.md": "2d16e6cd514e98996f8cf4b58552eec71016b0c06695e8526eaffc396ff22dd7",
811
811
  "hermes/.hermes/skills/phoenix-ui/reference/visualize.md": "451faed5574d012b4f63191db25d451b4b916c972ca7d47610e862b3d868e259",
812
- "hermes/.hermes/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
812
+ "hermes/.hermes/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
813
813
  "hermes/.hermes/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
814
814
  "hermes/.hermes/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
815
815
  "hermes/.hermes/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -873,7 +873,7 @@
873
873
  "kiro/.kiro/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
874
874
  "kiro/.kiro/skills/phoenix-ui/reference/typeset.md": "77995c215ddefdcdb596e0be9ed3989fbbba0d258fd959f731dcd54b81729bd5",
875
875
  "kiro/.kiro/skills/phoenix-ui/reference/visualize.md": "4aec66dea1c41cef5d24615cf6770e1593a2ace068bc4ce2cdc94c5078f03226",
876
- "kiro/.kiro/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
876
+ "kiro/.kiro/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
877
877
  "kiro/.kiro/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
878
878
  "kiro/.kiro/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
879
879
  "kiro/.kiro/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -938,7 +938,7 @@
938
938
  "opencode/.opencode/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
939
939
  "opencode/.opencode/skills/phoenix-ui/reference/typeset.md": "616df84da8448ecf3c4eb3d3c63535e150c3f7a519ee34f75187cfa9fe742d88",
940
940
  "opencode/.opencode/skills/phoenix-ui/reference/visualize.md": "6968dcbe46b7a06b555d952a3b5a93099240ac3a2e9594db90ad85edc79c4928",
941
- "opencode/.opencode/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
941
+ "opencode/.opencode/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
942
942
  "opencode/.opencode/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
943
943
  "opencode/.opencode/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
944
944
  "opencode/.opencode/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -1002,7 +1002,7 @@
1002
1002
  "pi/.pi/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
1003
1003
  "pi/.pi/skills/phoenix-ui/reference/typeset.md": "97266c256014b963e9f029e4e671f186111207e18ee4e85b0e7373a1badf9ada",
1004
1004
  "pi/.pi/skills/phoenix-ui/reference/visualize.md": "420657758f3952f0eea8ce774e79ab50ce541e31c7e6f55aff8139a51ac98ec4",
1005
- "pi/.pi/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
1005
+ "pi/.pi/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
1006
1006
  "pi/.pi/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
1007
1007
  "pi/.pi/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
1008
1008
  "pi/.pi/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -1066,7 +1066,7 @@
1066
1066
  "qoder/.qoder/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
1067
1067
  "qoder/.qoder/skills/phoenix-ui/reference/typeset.md": "5fb9019041a849724f4bf6b5aff825670e00d8f289a7940de8150083d9182ad3",
1068
1068
  "qoder/.qoder/skills/phoenix-ui/reference/visualize.md": "30a4b25e0f38b51fa22dbf7c3bed8d42b35bce4b9d03b66a18ce18d726b69cd8",
1069
- "qoder/.qoder/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
1069
+ "qoder/.qoder/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
1070
1070
  "qoder/.qoder/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
1071
1071
  "qoder/.qoder/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
1072
1072
  "qoder/.qoder/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -1130,7 +1130,7 @@
1130
1130
  "rovo-dev/.rovodev/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
1131
1131
  "rovo-dev/.rovodev/skills/phoenix-ui/reference/typeset.md": "837fd8f637f57ccd09a938a26205486c23be5d004e20f4cfd9adfd921d31b23d",
1132
1132
  "rovo-dev/.rovodev/skills/phoenix-ui/reference/visualize.md": "54eba14f6fdfe0c107b79e404614c9553b7c8e998ee3b75e478364544ed7c3fc",
1133
- "rovo-dev/.rovodev/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
1133
+ "rovo-dev/.rovodev/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
1134
1134
  "rovo-dev/.rovodev/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
1135
1135
  "rovo-dev/.rovodev/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
1136
1136
  "rovo-dev/.rovodev/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -1194,7 +1194,7 @@
1194
1194
  "trae/.trae/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
1195
1195
  "trae/.trae/skills/phoenix-ui/reference/typeset.md": "d40f18b6419f82d35b93164b480b18f58f61dd6df813bfe14d89697ec167b571",
1196
1196
  "trae/.trae/skills/phoenix-ui/reference/visualize.md": "767511785216ff25b8780d39674d8d33469e4338c539565af58a09e3b2124def",
1197
- "trae/.trae/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
1197
+ "trae/.trae/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
1198
1198
  "trae/.trae/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
1199
1199
  "trae/.trae/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
1200
1200
  "trae/.trae/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -1258,7 +1258,7 @@
1258
1258
  "trae-cn/.trae-cn/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
1259
1259
  "trae-cn/.trae-cn/skills/phoenix-ui/reference/typeset.md": "8c7aaa03ec8131eb4c2f25f5f33cdcb7e011e7db0240f5a9d926386585ed1f49",
1260
1260
  "trae-cn/.trae-cn/skills/phoenix-ui/reference/visualize.md": "f6cec907cf998a070724c4c457cd7217bec65a0fbf50fd1b9f823489f607166c",
1261
- "trae-cn/.trae-cn/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
1261
+ "trae-cn/.trae-cn/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
1262
1262
  "trae-cn/.trae-cn/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
1263
1263
  "trae-cn/.trae-cn/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
1264
1264
  "trae-cn/.trae-cn/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -1322,7 +1322,7 @@
1322
1322
  "veto/.veto/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
1323
1323
  "veto/.veto/skills/phoenix-ui/reference/typeset.md": "b23a2e8201ae72f13205fdaaf1eec3e75904a0154adc3f7445c3df4647d584c7",
1324
1324
  "veto/.veto/skills/phoenix-ui/reference/visualize.md": "53d699a61ec9cacd18600cac7e1ec945529789863db6a28e4baaa1767d8be9b8",
1325
- "veto/.veto/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
1325
+ "veto/.veto/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
1326
1326
  "veto/.veto/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
1327
1327
  "veto/.veto/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
1328
1328
  "veto/.veto/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -1386,7 +1386,7 @@
1386
1386
  "vibe/.vibe/skills/phoenix-ui/reference/shape.md": "a55f016c046cb6a27c55bd7f346375aeb506a755c4fbca19a5f92dbd42309c23",
1387
1387
  "vibe/.vibe/skills/phoenix-ui/reference/typeset.md": "997a23f558b6164a991ffcd66ecd5255a327fbf5c8181451349340d2988d3247",
1388
1388
  "vibe/.vibe/skills/phoenix-ui/reference/visualize.md": "bea1f841298b40d6078e028ba03cd7fd5dffe48676a3d8c4dbaa07e65535050e",
1389
- "vibe/.vibe/skills/phoenix-ui/scripts/ENGINE.json": "f3e604c113fc1d1f9e4d19df1fd7c14ae171d81363d5b43b41ad52f868801e19",
1389
+ "vibe/.vibe/skills/phoenix-ui/scripts/ENGINE.json": "0241d5e77cea5c48b620af9c7fd93b05feaffd3d055b701a5f6ee1f6052e3ecd",
1390
1390
  "vibe/.vibe/skills/phoenix-ui/scripts/VERSION": "e9dd8507f4bf0c6f42458e41aea833ad0bd3f6127272335eee9bf4d58541ed67",
1391
1391
  "vibe/.vibe/skills/phoenix-ui/scripts/command-metadata.json": "fcab887ef557cc74babd484ddd764f36ab04fa2d8251d440d93f6018239b05fe",
1392
1392
  "vibe/.vibe/skills/phoenix-ui/scripts/data/catalog/composition-ingredients.json": "ce19855b842a453973bff4eab9614bcfe502092dc9b2f4238dce27038e2d15d1",
@@ -1,20 +1,39 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "distribution": "development",
3
+ "distribution": "release",
4
4
  "toolVersion": "0.1.0",
5
- "npmPackageVersion": "0.7.0",
6
- "sourceCommit": "ca775b27b3c772886cb3bce435284d003f07fe37",
7
- "sourceTree": "e632a7cdde0e79bef093952dc472bd7ba6d109d5",
5
+ "npmPackageVersion": "0.7.1",
6
+ "sourceCommit": "73d098637bcc07565352c5e94fa1dbcb5322c79f",
7
+ "sourceTree": "10b498a286bb994433f96a1449704df343979b30",
8
8
  "sourceState": "dirty",
9
- "sourceInputSha256": "2a574581eb3326e33442533dfb6ad7ef284081b308961253cda2497fa1fe6e67",
9
+ "sourceInputSha256": "580361999880330995ea867135d295ad49dcdaaeace8936efd37b1a80f7245b1",
10
10
  "bundleSchema": 1,
11
11
  "bundleSha256": "95bca755477c6864e11eab1104d2147d0d4c80dca24ec15a058c6af4d96e7c30",
12
12
  "reviewSchema": 1,
13
13
  "engines": {
14
14
  "darwin-arm64": {
15
15
  "asset": "phoenix-ui-darwin-arm64",
16
- "sha256": "794e2c95763238021edd26b976be2dab66db4ffd78e9604a567ac8ba87986269",
17
- "size": 20924264
16
+ "sha256": "f3f634a18c6acbf446702394623a8d1e569a42d62dbe6d558174319cc8aa2cab",
17
+ "size": 18284080,
18
+ "url": "https://download.xgent.ai/vendor/phoenix-ui/v0.7.1/darwin-arm64/phoenix-ui-darwin-arm64"
19
+ },
20
+ "darwin-x64": {
21
+ "asset": "phoenix-ui-darwin-x64",
22
+ "sha256": "108b5e02edf8a66723dcd82c00d9ab7cedfbf9c15e4de3ea038ba11d7a798cde",
23
+ "size": 20772536,
24
+ "url": "https://download.xgent.ai/vendor/phoenix-ui/v0.7.1/darwin-x64/phoenix-ui-darwin-x64"
25
+ },
26
+ "linux-x64": {
27
+ "asset": "phoenix-ui-linux-x64",
28
+ "sha256": "425c300353779498c1954af4c5f6cb87c8f8ab70a55a69dca86e20668ad4a1ce",
29
+ "size": 22855792,
30
+ "url": "https://download.xgent.ai/vendor/phoenix-ui/v0.7.1/linux-x64/phoenix-ui-linux-x64"
31
+ },
32
+ "linux-arm64": {
33
+ "asset": "phoenix-ui-linux-arm64",
34
+ "sha256": "fe61b42262cb9409849342e5ea3116c17c6054e13da5c1425580ed73ff242eca",
35
+ "size": 19702656,
36
+ "url": "https://download.xgent.ai/vendor/phoenix-ui/v0.7.1/linux-arm64/phoenix-ui-linux-arm64"
18
37
  }
19
38
  }
20
39
  }
@@ -94,7 +94,7 @@ POST {PORTAL}/oauth/token
94
94
  | 归属 | 姿态 | 后果 |
95
95
  | --- | --- | --- |
96
96
  | **归用户**:用户主动存的、他在目标 App 里看得见删得掉、算他的配额 | 令牌交换(用户态) | 落用户自己的容器;令牌带 `azp=A`,目标侧照样有来源归因 |
97
- | **归 App**:系统产物、用户删不得、随 A 的生命周期消失 | 服务账号(服务态) | 落 A 的应用级容器,默认只有租户管理员可见 |
97
+ | **归 App**:系统产物、用户删不得、随 A 的生命周期消失 | 服务账号(服务态) | 落 A 的应用级容器,默认只有租户管理员可见;Files 可带 `onBehalfOf` 署名,让作者只读可见(见 portal-external-app 的代成员保存) |
98
98
 
99
99
  典型误判:把「用户点一下另存到我的空间」做成服务态——写进去的是 A 的应用容器,用户在目标 App 里根本看不见自己刚存的东西,功能等于没有。
100
100
 
@@ -19,6 +19,7 @@ description: '用于把独立仓库、以 Docker 镜像交付的外部服务接
19
19
  | 写 manifest、注册布线、一盒联调、排查 | [references/registration-and-onebox.md](references/registration-and-onebox.md) |
20
20
  | 匿名页、后端直出 HTML、公开站点/独立域名、旧链接或 listingKey 迁移 | [references/public-entrypoints.md](references/public-entrypoints.md):现有 /apps、/svc、Sites 三种通路及各自责任 |
21
21
  | 将本 App 的图片/视频/PDF 发布为不过期、可吊销的固定内容 URL | [references/files-stable-links.md](references/files-stable-links.md):特权 scope 申请、服务态签发、轮询、公开读取与生命周期 |
22
+ | 服务账号写进应用空间的文件,要让作者本人在文件管理里看得到 | [references/files-member-docs.md](references/files-member-docs.md):`onBehalfOf` 署名、成员只读可见、成员内容隐私开关 |
22
23
  | 原生客户端(iOS/Android/桌面)登录与刷新、设备凭证、停用后失效时效、服务端成员查询与事件 | [references/native-clients.md](references/native-clients.md) |
23
24
  | 为外部服务写/审对接契约文档 | [references/contract-doc-template.md](references/contract-doc-template.md) |
24
25
  | 有「每租户最多几个 X」的配额诉求(选模型、数值谁配、已用怎么来) | [references/quota-and-seats.md](references/quota-and-seats.md) |
@@ -281,7 +282,8 @@ compose 网络** —— 一份在一盒里能跑的 descriptor,`env` 里写着
281
282
 
282
283
  | 这份字节归谁 | 姿态 | 落在哪 | 用户在文件管理里 |
283
284
  | --- | --- | --- | --- |
284
- | **归 App**:系统产物、用户删不得、随 App 生命周期消失 | 服务账号 `client_credentials`(无用户上下文) | 你自己的**应用空间**(不传 spaceId,懒创建) | 默认只有租户管理员看得到 |
285
+ | **归 App**:系统产物、用户删不得、随 App 生命周期消失 | 服务账号 `client_credentials`(无用户上下文) | 你自己的**应用空间**(不传 spaceId,懒创建) | 只有租户管理员看得到(要让作者看见用下一行) |
286
+ | **归 App,但作者要看得见**:文件由你掌控、用户删改不得,作者本人要在文件管理里找到它 | 服务账号 + `onBehalfOf=<成员的门户 user_id>` 署名 | 你自己的**应用空间** | 署名成员在「我的应用文件」里**只读**可见,其他成员看不到;读 [代成员保存](references/files-member-docs.md) |
285
287
  | **归用户**:用户主动另存、他看得见删得掉、算他的空间 | 令牌交换换出的 `aud=files` **用户态**令牌 | 用户选的**个人/团队空间**(带 spaceId) | 就在他自己的空间里 |
286
288
 
287
289
  **公开固定内容 URL 是 Files 的特权服务态能力**:申请 `privilegedServiceScopes` 中的
@@ -292,8 +294,8 @@ compose 网络** —— 一份在一盒里能跑的 descriptor,`env` 里写着
292
294
 
293
295
  ⚠️ **别因为「要写」就默认必须服务态**:用户态持有 `files.write` 完全合法 —— `exchangeTargets`
294
296
  背书的是整个命名空间,平台不再按读写另行裁量。凡是「用户在你的界面里点一下、另存到我的
295
- 空间」这类功能**只能**用用户态:服务态写进去的是应用空间,用户在文件管理里根本看不见自己
296
- 刚存的东西。用户态写也不丢归因 —— 交换出的令牌带 `azp=<你的 key>`,files 侧照样落
297
+ 空间」这类功能**只能**用用户态:服务态写进去的是应用空间,不署名用户根本看不见自己刚存的
298
+ 东西,署名了也只能只读查看,不在他自己的空间里、删不掉。用户态写也不丢归因 —— 交换出的令牌带 `azp=<你的 key>`,files 侧照样落
297
299
  `viaApp` 溯源,按来源 App 聚合展示。
298
300
 
299
301
  ### 已经立过的红线(同一条道理,都是「平台有、别自建」)
@@ -0,0 +1,36 @@
1
+ # Files 代成员保存(用户模式)
2
+
3
+ 文件要存进本 App 的应用空间、由 App 掌控(用户删改不得),又要让作者本人在文件管理里看得到时读取。
4
+ 用户要「另存到我的空间」、自己能删改的,用令牌交换出的用户态写个人/团队空间,不用本文。
5
+
6
+ ## 1. 写入
7
+
8
+ 基址为去掉末尾 `/` 的 `PORTAL_BASE_URL` 加 `/svc/files/api/v1/files`,令牌是本 App 服务账号的服务态 TDT(`files.write`)。
9
+
10
+ - 新建时带 `onBehalfOf=<userId>`:`POST /presign` 放 body,`POST /content`(请求体就是字节)放 query,
11
+ `POST /closed-uploads` 放 body。不传 `spaceId`,文件落你自己的应用空间、仍归你,只是记下署名成员。
12
+ - `onBehalfOf` 是成员的**门户用户 id**——该成员门户令牌自省结果里的 `user_id`。**不是你 App 自己的用户主键**。
13
+ - 只有应用空间的所属 App 能署名:用户态令牌、写进别的 App 的应用空间(哪怕有 editor 授权)一律
14
+ `VALIDATION_FAILED`(`details.field="onBehalfOf"`)。
15
+ - 写入前 files 向门户核实此人是本租户**在职**成员:非成员或已停用 → `VALIDATION_FAILED`;
16
+ 门户不可达 → 503 `PORTAL_UNAVAILABLE`,不写入,稍后重试。
17
+ - 署名写入时确定,之后不能改;replace 出的新版本继承署名。已写入的未署名文件补不上署名,
18
+ 要让作者看见只能带 `onBehalfOf` 重新新建一份(新 fileId),再删掉旧的。
19
+
20
+ ## 2. 谁能看、谁能动
21
+
22
+ | 角色 | 权限 |
23
+ | --- | --- |
24
+ | 你(所属 App) | owner:改名/移动、删除、replace、标签、`PUT /:id/content` 原位覆盖 |
25
+ | 署名成员 | viewer:在「应用存储 › 我的应用文件」看、预览、下载;**不能**改名、删除、替换、打标签、分享 |
26
+ | 其他成员 | 看不到 |
27
+ | 租户管理员 | 默认看得到;平台为该租户打开「成员内容隐私」后只剩容量(个数、字节) |
28
+
29
+ 「我的应用文件」按目录收起,你的目录约定(比如把媒体放 `/media/`)会原样出现在成员面前。
30
+
31
+ ## 3. 对齐成员内容隐私开关
32
+
33
+ 用服务态令牌调 `GET /app-spaces`,读你自己那一条的 `memberPrivacy`。为 `true` 时,把你 App 里
34
+ 「看全部」一类的角色也收窄成「只看自己的」——否则租户管理员给自己授一个「看全部」角色就绕过了平台开关。
35
+ 应用空间在第一次写入时懒建,还没写过时列表里没有你的那一条,那时也还没有任何署名文件。
36
+ 开关在 files 侧最多 30 s 收敛。
@@ -1,20 +1,39 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "distribution": "development",
3
+ "distribution": "release",
4
4
  "toolVersion": "0.1.0",
5
- "npmPackageVersion": "0.7.0",
6
- "sourceCommit": "ca775b27b3c772886cb3bce435284d003f07fe37",
7
- "sourceTree": "e632a7cdde0e79bef093952dc472bd7ba6d109d5",
5
+ "npmPackageVersion": "0.7.1",
6
+ "sourceCommit": "73d098637bcc07565352c5e94fa1dbcb5322c79f",
7
+ "sourceTree": "10b498a286bb994433f96a1449704df343979b30",
8
8
  "sourceState": "dirty",
9
- "sourceInputSha256": "2a574581eb3326e33442533dfb6ad7ef284081b308961253cda2497fa1fe6e67",
9
+ "sourceInputSha256": "580361999880330995ea867135d295ad49dcdaaeace8936efd37b1a80f7245b1",
10
10
  "bundleSchema": 1,
11
11
  "bundleSha256": "95bca755477c6864e11eab1104d2147d0d4c80dca24ec15a058c6af4d96e7c30",
12
12
  "reviewSchema": 1,
13
13
  "engines": {
14
14
  "darwin-arm64": {
15
15
  "asset": "phoenix-ui-darwin-arm64",
16
- "sha256": "794e2c95763238021edd26b976be2dab66db4ffd78e9604a567ac8ba87986269",
17
- "size": 20924264
16
+ "sha256": "f3f634a18c6acbf446702394623a8d1e569a42d62dbe6d558174319cc8aa2cab",
17
+ "size": 18284080,
18
+ "url": "https://download.xgent.ai/vendor/phoenix-ui/v0.7.1/darwin-arm64/phoenix-ui-darwin-arm64"
19
+ },
20
+ "darwin-x64": {
21
+ "asset": "phoenix-ui-darwin-x64",
22
+ "sha256": "108b5e02edf8a66723dcd82c00d9ab7cedfbf9c15e4de3ea038ba11d7a798cde",
23
+ "size": 20772536,
24
+ "url": "https://download.xgent.ai/vendor/phoenix-ui/v0.7.1/darwin-x64/phoenix-ui-darwin-x64"
25
+ },
26
+ "linux-x64": {
27
+ "asset": "phoenix-ui-linux-x64",
28
+ "sha256": "425c300353779498c1954af4c5f6cb87c8f8ab70a55a69dca86e20668ad4a1ce",
29
+ "size": 22855792,
30
+ "url": "https://download.xgent.ai/vendor/phoenix-ui/v0.7.1/linux-x64/phoenix-ui-linux-x64"
31
+ },
32
+ "linux-arm64": {
33
+ "asset": "phoenix-ui-linux-arm64",
34
+ "sha256": "fe61b42262cb9409849342e5ea3116c17c6054e13da5c1425580ed73ff242eca",
35
+ "size": 19702656,
36
+ "url": "https://download.xgent.ai/vendor/phoenix-ui/v0.7.1/linux-arm64/phoenix-ui-linux-arm64"
18
37
  }
19
38
  }
20
39
  }
@@ -1,55 +0,0 @@
1
- {
2
- "skill_name": "swarm",
3
- "evals": [
4
- {
5
- "id": 0,
6
- "prompt": "我们门户要加一个「需求变更审批」的功能,现在只有一句话想法:产品提的变更要走审批才能进开发。帮我组个团队把这条需求梳理清楚——要能拿去评审会的那种,别写成一堆没法验收的空话。仓库在 ~/code/portal,需求文档放 docs/prd/ 下面。",
7
- "expected_output": "识别为产品团队模式,只加载 references/teams/product.md;给出两段式机制建议(并行只读评审 + 需要多轮往返时用 team);PRD 单一写手;澄清问题批量汇聚到 lead 一次问用户;评审输出带判定档位;与 prd/test-plan 等 skill 的联动写进提示词;团队规模 3-5 人;停在用户确认这一步",
8
- "files": [],
9
- "expectations": [
10
- "选择「产品团队」模式(需求设计/澄清/评审),而不是套用功能开发或代码审计模式",
11
- "只加载命中的团队文件 references/teams/product.md,没有把其余 5 个 teams/*.md 全读一遍",
12
- "明确 PRD 只有一个写手,评审者不得直接修改 PRD(改由 designer 或 lead 合入)",
13
- "澄清问题汇聚到 lead 后批量、一次性问用户,而不是各角色各自提问",
14
- "评审输出要求判定档位(通过/有条件通过/打回)+ 引用原文 + 建议改法,而非只给感想",
15
- "含技术可行性评审角色,且要求引用真实文件路径/接口名(代码事实优先于产品想象)",
16
- "团队规模在 3-7 人之间",
17
- "停在等待用户确认这一步,没有假装团队已经执行完毕",
18
- "不把已废弃的 TeamCreate / TeamDelete / team_name 当作执行步骤使用(作为「已移除」的说明出现是正确行为)"
19
- ]
20
- },
21
- {
22
- "id": 1,
23
- "prompt": "帮我审计一下这个仓库的安全问题,src 下面三百多个文件都要过一遍,重点看鉴权和注入。组个团队并行搞快点。",
24
- "expected_output": "识别出「同一套检查 × 300 文件」是动态 workflow / batch 的主场,而不是 agent team;对用户「组个团队」的说法给出有理由的反建议;审查者只读;统一严重度口径;每条问题带 文件:行号;报告含「未覆盖范围」;审计与修复分阶段",
25
- "files": [],
26
- "expectations": [
27
- "指出「同一套检查 × 300 文件」更适合动态 workflow(ultracode)或 /batch,而不是 agent team",
28
- "对用户「组个团队」的要求给出有理由的反建议,而不是直接照办开团队",
29
- "审查角色为只读(Explore,或显式禁掉 Write/Edit/Bash)",
30
- "统一严重度口径(如 P0-P3)并在派发时定死",
31
- "要求每条问题带 文件:行号 + 为什么是问题 + 建议改法",
32
- "要求报告包含「未覆盖范围」一栏",
33
- "审计与修复分成两个阶段,不让审查者顺手改代码",
34
- "不把已废弃的 TeamCreate / TeamDelete / team_name 当作执行步骤使用(作为「已移除」的说明出现是正确行为)"
35
- ]
36
- },
37
- {
38
- "id": 2,
39
- "prompt": "创建一个团队做这个跨层功能:前端加一个设备列表页,后端加 /api/devices 接口和分页,再补上测试。前端在 src/pages、src/components,后端在 src/api、src/services,测试在 tests/。",
40
- "expected_output": "功能开发团队;使用当前的 Agent 工具 + name 启动 teammate(不出现 TeamCreate / TeamDelete / team_name);提示预检 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 与任务清单可能不可用的降级;契约先冻结再并行;共享文件归 lead;测试工程师提前进场;lead 不写代码",
41
- "files": [],
42
- "expectations": [
43
- "用 Agent 工具 + name 参数启动 teammate,而不是旧的 Task → subagent_type/team_name 形式",
44
- "不把已废弃的 TeamCreate / TeamDelete / team_name 当作执行步骤使用(作为「已移除」的说明出现是正确行为)",
45
- "预检 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 是否已开启(agent teams 默认关闭)",
46
- "提到共享任务清单(TaskCreate 等)可能不可用,并给出降级路径",
47
- "接口契约先冻结,然后前后端才并行实现",
48
- "文件分工使用用户给出的真实目录,且共享文件(类型/路由/配置)归 lead 统一改",
49
- "测试角色提前进场(契约冻结后就写用例骨架),不等实现全部完成",
50
- "不在 spawn 参数里传权限模式(mode),因为 teammate 的权限模式不能在 spawn 时按人指定",
51
- "停在等待用户确认这一步,没有假装团队已经执行完毕"
52
- ]
53
- }
54
- ]
55
- }