@givolt/i3-composer-agent 3.0.0 → 3.1.0

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 (494) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude/commands/i3-ui-demo.md +21 -0
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/.claude-plugin/plugin.json +1 -1
  5. package/.codex-plugin/plugin.json +2 -2
  6. package/.gemini/commands/i3-ui-demo.toml +21 -0
  7. package/README.md +10 -8
  8. package/bin/i3-composer-agent.cjs +38 -44
  9. package/bin/install.cjs +15 -3
  10. package/bin/native-layout.cjs +2 -1
  11. package/bin/native-migration.cjs +19 -2
  12. package/bin/retired-sop-fingerprints.json +213 -0
  13. package/bin/wizard.cjs +7 -18
  14. package/commands/i3-ui-demo.toml +21 -0
  15. package/docs/codebuddy-setup.md +20 -23
  16. package/docs/codex-setup.md +2 -2
  17. package/docs/comparison.md +131 -0
  18. package/docs/developer-onboarding.md +143 -0
  19. package/docs/opencode-setup.md +1 -1
  20. package/docs/other-hosts.md +2 -2
  21. package/docs/skill-anatomy.md +211 -0
  22. package/docs/upstream-repository/AGENTS.md +92 -0
  23. package/docs/upstream-repository/CLAUDE.md +60 -0
  24. package/docs/upstream-repository/CONTRIBUTING.md +137 -0
  25. package/docs/upstream-repository/README.md +8 -0
  26. package/docs/upstream-repository/gitattributes.txt +1 -0
  27. package/docs/upstream-repository/gitignore.txt +10 -0
  28. package/docs/upstream-repository/manifest.json +71 -0
  29. package/docs/upstream-repository/opencode-skills.link +1 -0
  30. package/docs/upstream-repository/skill-gap.yml +80 -0
  31. package/docs/upstream-repository/skills-contributing.md +15 -0
  32. package/docs/upstream-repository/test-plugin-install.yml +167 -0
  33. package/docs/workbuddy-setup.md +7 -10
  34. package/evals/cases/i3-ui-demo.json +98 -0
  35. package/evals/fixtures/i3-ui-demo/asset-management.md +25 -0
  36. package/evals/zh-CN/cases/i3-ui-demo.json +103 -0
  37. package/hooks/PROTOTYPE.md +16 -8
  38. package/hooks/i3-prototype.cjs +4 -10
  39. package/hooks/manage.cjs +30 -31
  40. package/package.json +42 -5
  41. package/plugin.json +1 -1
  42. package/scripts/ui-demo-dependencies-test.js +228 -0
  43. package/scripts/ui-demo-mcp-test.js +95 -0
  44. package/scripts/ui-demo-test.js +170 -0
  45. package/scripts/ui-prototype-execution-runtime-test.js +1 -1
  46. package/scripts/ui-prototype-native-test.js +25 -3
  47. package/skills/i3-enterprise-sop/SKILL.md +15 -15
  48. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/assets-manifest.json +9 -29
  49. package/{references/enterprise-sop-resources/ad/README.md → skills/i3-enterprise-sop/references/ad/readme.md} +4 -4
  50. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/assets-manifest.json +64 -33
  51. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/assets-manifest.json +9 -20
  52. package/{references/enterprise-sop-resources/brd/README.md → skills/i3-enterprise-sop/references/brd/readme.md} +4 -4
  53. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/codebuddy-project-guide.md +1 -1
  54. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/controlled_handoff.py +52 -7
  55. package/{references/engineering-skeleton-resources → skills/i3-enterprise-sop/references/engineering-skeleton}/adoption.md +1 -1
  56. package/{references/engineering-skeleton-resources/README.md → skills/i3-enterprise-sop/references/engineering-skeleton/readme.md} +2 -2
  57. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/handoff-contract.md +2 -2
  58. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/lifecycle-contract.md +1 -1
  59. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/plan-handoff.md +3 -3
  60. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/assets-manifest.json +20 -26
  61. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/prompts/01-generate.md +1 -1
  62. package/{references/enterprise-sop-resources/prd/README.md → skills/i3-enterprise-sop/references/prd/readme.md} +4 -4
  63. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/template-contracts.md +3 -3
  64. package/{references/enterprise-sop-resources/prd/templates/AD.md → skills/i3-enterprise-sop/references/prd/templates/ad.md} +1 -1
  65. package/{references/enterprise-sop-resources/prd/templates/PRD.md → skills/i3-enterprise-sop/references/prd/templates/prd.md} +1 -1
  66. package/{references/enterprise-sop-resources/README.md → skills/i3-enterprise-sop/references/readme.md} +14 -12
  67. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/recovery-contract.md +2 -2
  68. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/stages.json +16 -7
  69. package/skills/i3-enterprise-sop/references/technical-baseline/assets-manifest.json +84 -0
  70. package/{references/enterprise-sop-resources/technical-baseline/baselines//344/274/201/344/270/232/345/272/224/347/224/250-/346/212/200/346/234/257/350/247/204/347/272/246_v0.0.2.md → skills/i3-enterprise-sop/references/technical-baseline/baselines/enterprise-application-technical-baseline-v0-0-4.md} +122 -37
  71. package/{references/enterprise-sop-resources/technical-baseline/README.md → skills/i3-enterprise-sop/references/technical-baseline/readme.md} +8 -8
  72. package/{references/enterprise-sop-resources/technical-baseline/templates/TECHNICAL-BASELINE.md → skills/i3-enterprise-sop/references/technical-baseline/templates/technical-baseline.md} +1 -1
  73. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/template-contracts.md +7 -7
  74. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/assets-manifest.json +9 -29
  75. package/{references/enterprise-sop-resources/testcase/README.md → skills/i3-enterprise-sop/references/testcase/readme.md} +4 -4
  76. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/review_handoff.py +3 -3
  77. package/skills/i3-ui-demo/SKILL.md +234 -0
  78. package/skills/i3-ui-demo/assets/antdv-build/package-lock.json +3363 -0
  79. package/skills/i3-ui-demo/assets/antdv-build/package.json +28 -0
  80. package/skills/i3-ui-demo/assets/design-source.json +11 -0
  81. package/skills/i3-ui-demo/assets/host-targets.json +739 -0
  82. package/skills/i3-ui-demo/assets/official-files.json +76 -0
  83. package/skills/i3-ui-demo/assets/starter/index.html +11 -0
  84. package/skills/i3-ui-demo/assets/starter/package-lock.json +2299 -0
  85. package/skills/i3-ui-demo/assets/starter/package.json +28 -0
  86. package/skills/i3-ui-demo/assets/starter/provenance.json +14 -0
  87. package/skills/i3-ui-demo/assets/starter/public/prototype-config.json +22 -0
  88. package/skills/i3-ui-demo/assets/starter/src/App.vue +64 -0
  89. package/skills/i3-ui-demo/assets/starter/src/PrototypeShell.vue +59 -0
  90. package/skills/i3-ui-demo/assets/starter/src/config.ts +23 -0
  91. package/skills/i3-ui-demo/assets/starter/src/domain/presentation.ts +30 -0
  92. package/skills/i3-ui-demo/assets/starter/src/domain/theme.ts +25 -0
  93. package/skills/i3-ui-demo/assets/starter/src/main.ts +18 -0
  94. package/skills/i3-ui-demo/assets/starter/src/style.css +26 -0
  95. package/skills/i3-ui-demo/assets/starter/tests/presentation.test.ts +23 -0
  96. package/skills/i3-ui-demo/assets/starter/tests/theme.test.ts +26 -0
  97. package/skills/i3-ui-demo/assets/starter/tsconfig.json +15 -0
  98. package/skills/i3-ui-demo/assets/starter/vite.config.ts +4 -0
  99. package/skills/i3-ui-demo/assets/templates/enterprise-admin/capability-definition.json +1395 -0
  100. package/skills/i3-ui-demo/assets/templates/enterprise-admin/component-inventory.json +707 -0
  101. package/skills/i3-ui-demo/assets/templates/enterprise-admin/design-system.md +26 -0
  102. package/skills/i3-ui-demo/assets/templates/enterprise-admin/generation.json +49 -0
  103. package/skills/i3-ui-demo/assets/templates/enterprise-admin/index.html +534 -0
  104. package/skills/i3-ui-demo/assets/templates/enterprise-admin/manifest.json +9 -0
  105. package/skills/i3-ui-demo/assets/templates/enterprise-admin/offline-build.json +265 -0
  106. package/skills/i3-ui-demo/assets/templates/enterprise-admin/offline.js +8888 -0
  107. package/skills/i3-ui-demo/assets/templates/enterprise-admin/origin.json +344 -0
  108. package/skills/i3-ui-demo/assets/templates/enterprise-admin/preset.json +928 -0
  109. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/app.js +22 -0
  110. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/empty.svg +1 -0
  111. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/reference-styles.json +1 -0
  112. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/result-403.svg +1 -0
  113. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/result-404.svg +1 -0
  114. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets-manifest.json +334 -0
  115. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/baseline.json +173 -0
  116. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/conversion.md +30 -0
  117. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/credits.md +17 -0
  118. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/design-tokens.json +881 -0
  119. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/index.html +28 -0
  120. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +9 -0
  121. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +22 -0
  122. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +21 -0
  123. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/package.json +12 -0
  124. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/browser-routes.json +298 -0
  125. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/coverage.json +180 -0
  126. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/integrity.json +13 -0
  127. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/keyboard.json +11 -0
  128. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/responsive.json +125 -0
  129. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/review.md +51 -0
  130. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/rules.log +150 -0
  131. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
  132. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
  133. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
  134. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
  135. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
  136. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
  137. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
  138. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
  139. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/selection.json +9 -0
  140. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +342 -0
  141. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/readme.md +73 -0
  142. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/reference.md +59 -0
  143. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/routes.json +178 -0
  144. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/controls.js +99 -0
  145. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/dialogs.js +54 -0
  146. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/dom.js +264 -0
  147. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/forms.js +47 -0
  148. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/icons.js +41 -0
  149. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/layout.js +47 -0
  150. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/router.js +63 -0
  151. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/state.js +90 -0
  152. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/table.js +41 -0
  153. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/widgets.js +8 -0
  154. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +3 -0
  155. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +36 -0
  156. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +2 -0
  157. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +51 -0
  158. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +3 -0
  159. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +48 -0
  160. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +2 -0
  161. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +6 -0
  162. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +2 -0
  163. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +13 -0
  164. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/data.js +24 -0
  165. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/domain.js +32 -0
  166. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/registry.js +25 -0
  167. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/store.js +85 -0
  168. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +2 -0
  169. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +17 -0
  170. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +2 -0
  171. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +66 -0
  172. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +3 -0
  173. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +38 -0
  174. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +2 -0
  175. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +66 -0
  176. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +2 -0
  177. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +5 -0
  178. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +2 -0
  179. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +12 -0
  180. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +2 -0
  181. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +11 -0
  182. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +2 -0
  183. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +116 -0
  184. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +2 -0
  185. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +32 -0
  186. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +2 -0
  187. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +49 -0
  188. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +2 -0
  189. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +10 -0
  190. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +2 -0
  191. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +77 -0
  192. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/data.js +60 -0
  193. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/domain.js +105 -0
  194. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/store.js +212 -0
  195. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +2 -0
  196. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +18 -0
  197. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +2 -0
  198. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +23 -0
  199. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +2 -0
  200. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +78 -0
  201. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +2 -0
  202. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +55 -0
  203. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +2 -0
  204. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +26 -0
  205. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +2 -0
  206. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +38 -0
  207. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +2 -0
  208. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +7 -0
  209. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +2 -0
  210. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +72 -0
  211. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +2 -0
  212. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +46 -0
  213. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +2 -0
  214. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +52 -0
  215. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/RowActions.html +2 -0
  216. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/RowActions.js +19 -0
  217. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +2 -0
  218. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +30 -0
  219. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/data.js +48 -0
  220. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/domain.js +39 -0
  221. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/store.js +129 -0
  222. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +4 -0
  223. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +21 -0
  224. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +2 -0
  225. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +8 -0
  226. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +2 -0
  227. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +37 -0
  228. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +2 -0
  229. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +10 -0
  230. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +2 -0
  231. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +37 -0
  232. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +2 -0
  233. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +49 -0
  234. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +4 -0
  235. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +22 -0
  236. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +2 -0
  237. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +9 -0
  238. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/commands.js +82 -0
  239. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/examples.js +47 -0
  240. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/model.js +61 -0
  241. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/repair.js +68 -0
  242. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/store.js +55 -0
  243. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/types.js +1 -0
  244. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/workbench.js +18 -0
  245. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +3 -0
  246. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +28 -0
  247. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +2 -0
  248. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +18 -0
  249. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +2 -0
  250. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +31 -0
  251. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +2 -0
  252. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +27 -0
  253. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +2 -0
  254. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +16 -0
  255. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +2 -0
  256. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +43 -0
  257. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +4 -0
  258. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +34 -0
  259. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +2 -0
  260. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +30 -0
  261. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +3 -0
  262. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +67 -0
  263. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +2 -0
  264. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +41 -0
  265. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +2 -0
  266. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +31 -0
  267. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +2 -0
  268. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +26 -0
  269. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +2 -0
  270. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +70 -0
  271. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/data.js +8 -0
  272. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/domain.js +62 -0
  273. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/management.js +36 -0
  274. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +49 -0
  275. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/store.js +132 -0
  276. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +2 -0
  277. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +38 -0
  278. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +2 -0
  279. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +11 -0
  280. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +2 -0
  281. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +45 -0
  282. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +2 -0
  283. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +54 -0
  284. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +3 -0
  285. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +27 -0
  286. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +2 -0
  287. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +12 -0
  288. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +2 -0
  289. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +45 -0
  290. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +3 -0
  291. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +38 -0
  292. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/domain.js +61 -0
  293. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/state.js +51 -0
  294. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/store.js +116 -0
  295. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +2 -0
  296. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +45 -0
  297. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +4 -0
  298. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +30 -0
  299. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +2 -0
  300. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +67 -0
  301. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +2 -0
  302. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +5 -0
  303. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +4 -0
  304. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +60 -0
  305. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/commands.js +157 -0
  306. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/model.js +136 -0
  307. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/store.js +76 -0
  308. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +3 -0
  309. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +26 -0
  310. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +2 -0
  311. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +14 -0
  312. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +2 -0
  313. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +113 -0
  314. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +3 -0
  315. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +62 -0
  316. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/commands.js +97 -0
  317. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/model.js +147 -0
  318. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/store.js +13 -0
  319. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +2 -0
  320. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +9 -0
  321. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +2 -0
  322. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +8 -0
  323. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +2 -0
  324. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +37 -0
  325. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +2 -0
  326. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +8 -0
  327. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +2 -0
  328. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +17 -0
  329. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/columns.js +32 -0
  330. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +49 -0
  331. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +12 -0
  332. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +15 -0
  333. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +37 -0
  334. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/policy.js +68 -0
  335. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/session.js +44 -0
  336. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +2 -0
  337. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +25 -0
  338. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +2 -0
  339. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +53 -0
  340. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +10 -0
  341. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +30 -0
  342. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +2 -0
  343. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +10 -0
  344. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +2 -0
  345. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +9 -0
  346. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +3 -0
  347. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/navigation.js +19 -0
  348. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +2 -0
  349. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +8 -0
  350. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +2 -0
  351. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +32 -0
  352. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +2 -0
  353. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +15 -0
  354. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +2 -0
  355. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +11 -0
  356. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +2 -0
  357. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +57 -0
  358. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +2 -0
  359. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +37 -0
  360. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/data.js +20 -0
  361. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/domain.js +55 -0
  362. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/store.js +151 -0
  363. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +3 -0
  364. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +18 -0
  365. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +2 -0
  366. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +40 -0
  367. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +2 -0
  368. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +51 -0
  369. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +2 -0
  370. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +9 -0
  371. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +5 -0
  372. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +48 -0
  373. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/domain.js +204 -0
  374. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +22 -0
  375. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/registry.js +135 -0
  376. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/store.js +137 -0
  377. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +3 -0
  378. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +36 -0
  379. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/model.js +56 -0
  380. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/store.js +15 -0
  381. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +2 -0
  382. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +27 -0
  383. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +4 -0
  384. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +31 -0
  385. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +2 -0
  386. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +68 -0
  387. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +5 -0
  388. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +55 -0
  389. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/data.js +16 -0
  390. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/domain.js +83 -0
  391. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/registry.js +18 -0
  392. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/store.js +61 -0
  393. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/admin.css +60 -0
  394. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/agents.css +46 -0
  395. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/antdv.css +295 -0
  396. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/app.css +102 -0
  397. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/delivery.css +4 -0
  398. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/intents.css +37 -0
  399. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/native.css +22 -0
  400. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/operations.css +2 -0
  401. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/pbc.css +3 -0
  402. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/permissions.css +22 -0
  403. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/pro.css +1 -0
  404. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/releases.css +4 -0
  405. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/reset.css +246 -0
  406. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/reviews.css +8 -0
  407. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/tasks.css +6 -0
  408. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/tokens.css +15 -0
  409. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/workbench.css +61 -0
  410. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/workflows.css +1 -0
  411. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +96 -0
  412. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/agents.test.js +14 -0
  413. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +37 -0
  414. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +44 -0
  415. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +19 -0
  416. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +14 -0
  417. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/operations.test.js +25 -0
  418. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +17 -0
  419. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +24 -0
  420. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +23 -0
  421. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/permissions.test.js +24 -0
  422. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/releases.test.js +50 -0
  423. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/reviews.test.js +36 -0
  424. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +28 -0
  425. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +42 -0
  426. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +16 -0
  427. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +11 -0
  428. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/tasks.test.js +27 -0
  429. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/workbench.test.js +34 -0
  430. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/workflows.test.js +16 -0
  431. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/convert.mjs +168 -0
  432. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/serve.mjs +7 -0
  433. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/styles.mjs +11 -0
  434. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/verify.mjs +24 -0
  435. package/skills/i3-ui-demo/assets/templates/enterprise-admin/serve.cjs +16 -0
  436. package/skills/i3-ui-demo/assets/templates/enterprise-admin/template-inventory.json +28791 -0
  437. package/skills/i3-ui-demo/assets/templates/enterprise-admin/template.json +9 -0
  438. package/skills/i3-ui-demo/assets/templates/enterprise-admin/usability.css +44 -0
  439. package/skills/i3-ui-demo/assets/templates.json +10 -0
  440. package/skills/i3-ui-demo/assets/versions.json +20 -0
  441. package/skills/i3-ui-demo/readme.md +350 -0
  442. package/skills/i3-ui-demo/references/browser.md +71 -0
  443. package/skills/i3-ui-demo/references/dependencies.md +67 -0
  444. package/skills/i3-ui-demo/references/resources.md +142 -0
  445. package/skills/i3-ui-demo/scripts/dependencies.cjs +364 -0
  446. package/skills/i3-ui-demo/scripts/design-install.cjs +105 -0
  447. package/skills/i3-ui-demo/scripts/design-provider.cjs +57 -0
  448. package/skills/i3-ui-demo/scripts/locations.cjs +52 -0
  449. package/skills/i3-ui-demo/scripts/mcp.cjs +112 -0
  450. package/skills/i3-ui-demo/scripts/provider-discovery.cjs +131 -0
  451. package/skills/i3-ui-demo/scripts/resources.cjs +283 -0
  452. package/skills/i3-ui-prototype/SKILL.md +1 -1
  453. package/skills/i3-ui-prototype/references/execution-evidence.md +12 -56
  454. package/skills/i3-ui-prototype/scripts/codebuddy-registration.cjs +1 -1
  455. package/skills/i3-ui-prototype/scripts/execution-runtime.cjs +5 -2
  456. package/skills/i3-ui-prototype/scripts/hosts/codebuddy.cjs +3 -2
  457. package/skills/i3-ui-prototype/scripts/native-delivery.cjs +2 -2
  458. package/skills/i3-ui-prototype/scripts/prototype-hooks.cjs +23 -20
  459. package/docs/ui-prototype-native/MAIN-SESSION-REPORT.md +0 -66
  460. package/docs/ui-prototype-native/USAGE.md +0 -93
  461. package/references/enterprise-sop-resources/technical-baseline/assets-manifest.json +0 -101
  462. package/references/enterprise-sop-resources/technical-baseline/baselines/PROVENANCE.md +0 -40
  463. package/references/enterprise-sop-resources/technical-baseline/references/engineering-directory-v0.2.0/adoption.md +0 -112
  464. package/references/enterprise-sop-resources/technical-baseline/references/engineering-directory-v0.2.0/directory-standard.md +0 -119
  465. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/prompts/01-generate.md +0 -0
  466. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/prompts/02-review.md +0 -0
  467. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/prompts/03-revise.md +0 -0
  468. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/prompts/04-recheck.md +0 -0
  469. /package/{references/enterprise-sop-resources/ad/templates/AD.md → skills/i3-enterprise-sop/references/ad/templates/ad.md} +0 -0
  470. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/prompts/01-generate.md +0 -0
  471. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/prompts/02-review.md +0 -0
  472. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/prompts/03-revise.md +0 -0
  473. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/prompts/04-recheck.md +0 -0
  474. /package/{references/enterprise-sop-resources/brd/templates/BRD.md → skills/i3-enterprise-sop/references/brd/templates/brd.md} +0 -0
  475. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/controlled-handoff.md +0 -0
  476. /package/{references/engineering-skeleton-resources → skills/i3-enterprise-sop/references/engineering-skeleton}/catalog.json +0 -0
  477. /package/{references/engineering-skeleton-resources → skills/i3-enterprise-sop/references/engineering-skeleton}/directory-standard.md +0 -0
  478. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/handoff.py +0 -0
  479. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/prompts/02-review.md +0 -0
  480. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/prompts/03-revise.md +0 -0
  481. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/prompts/04-recheck.md +0 -0
  482. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/review-handoff.md +0 -0
  483. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/selection-handoff.md +0 -0
  484. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/selection_handoff.py +0 -0
  485. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/prompts/01-generate.md +0 -0
  486. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/prompts/02-review.md +0 -0
  487. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/prompts/03-revise.md +0 -0
  488. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/prompts/04-recheck.md +0 -0
  489. /package/{references/enterprise-sop-resources/testcase/templates/TestCase.md → skills/i3-enterprise-sop/references/testcase/templates/testcase.md} +0 -0
  490. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/check_execution.py +0 -0
  491. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/check_native_execution.py +0 -0
  492. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/check_reads.py +0 -0
  493. /package/{references/enterprise-sop-resources/verification/README.md → skills/i3-enterprise-sop/references/verification/readme.md} +0 -0
  494. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/review-output.schema.json +0 -0
@@ -0,0 +1,283 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+ const fs = require('node:fs');
4
+ const path = require('node:path');
5
+ const crypto = require('node:crypto');
6
+ const assert = require('node:assert/strict');
7
+ const root = path.resolve(__dirname, '..');
8
+ const catalog = require('../assets/templates.json');
9
+ const versions = require('../assets/versions.json');
10
+
11
+ function selectTemplates({ submitted = false, values = [] } = {}) {
12
+ if (!submitted) return { status: 'needs-selection', templates: catalog.templates };
13
+ if (!Array.isArray(values) || values.some(value => typeof value !== 'string')) throw new Error('Template values must be an array of submitted choices');
14
+ const choices = values.length ? values : [catalog.defaultTemplate];
15
+ const selected = [];
16
+ for (const value of choices) {
17
+ const template = catalog.templates.find(item => item.id === value || item.number === value);
18
+ if (!template) throw new Error(`Unknown template: ${value}`);
19
+ if (template.availability !== 'available') throw new Error(`Template unavailable: ${template.name}(暂未开放)`);
20
+ if (!selected.includes(template.id)) selected.push(template.id);
21
+ }
22
+ return { status: 'selected', selected };
23
+ }
24
+
25
+ const hash = value => crypto.createHash('sha256').update(value).digest('hex');
26
+ const json = file => JSON.parse(fs.readFileSync(file, 'utf8'));
27
+ function local(directory, relative) {
28
+ assert.ok(typeof relative === 'string' && relative && !path.isAbsolute(relative) && !relative.split(/[\\/]/).includes('..'), 'Unsafe template resource path');
29
+ let current = directory;
30
+ for (const part of relative.split('/')) {
31
+ current = path.join(current, part);
32
+ assert.ok(!fs.lstatSync(current).isSymbolicLink(), `Template symlink refused: ${relative}`);
33
+ }
34
+ return current;
35
+ }
36
+ function loadTemplate() {
37
+ const templateRoot = local(root, 'assets/templates/enterprise-admin');
38
+ const generation = path.join(templateRoot, 'generation.json');
39
+ const designRules = path.join(templateRoot, 'design-system.md');
40
+ const capabilityDefinition = path.join(templateRoot, 'capability-definition.json');
41
+ if (![generation, designRules, capabilityDefinition].every(file => fs.existsSync(file) && fs.statSync(file).isFile())) {
42
+ throw new Error('This i3-ui-demo skill is missing its own enterprise-admin template resources. Restore this skill; no other skill template or demo substitute was selected.');
43
+ }
44
+ const inventory = json(local(templateRoot, 'template-inventory.json'));
45
+ for (const [relative, expected] of Object.entries(inventory.files)) {
46
+ assert.equal(hash(fs.readFileSync(local(templateRoot, relative))), expected, `Template resource integrity changed: ${relative}`);
47
+ }
48
+ const meta = json(generation), definition = json(capabilityDefinition), manifest = json(local(templateRoot, 'template.json'));
49
+ assert.equal(definition.schemaVersion, 2, 'Unsupported independent capability contract');
50
+ assert.equal(meta.definitionDigest, hash(JSON.stringify(definition)), 'Template capability definition digest changed');
51
+ assert.equal(meta.templateId, manifest.id, 'Template metadata identity differs');
52
+ for (const id of definition.core) assert.ok(definition.capabilities[id], `Missing core capability: ${id}`);
53
+ for (const [id, capability] of Object.entries(definition.capabilities)) {
54
+ assert.equal(capability.id, id, 'Capability identity differs');
55
+ assert.ok(capability.implementation?.components?.length, `Missing native mapping: ${id}`);
56
+ assert.ok(capability.scenarios.length && new Set(capability.scenarios.map(item => item.id)).size === capability.scenarios.length, `Invalid capability scenarios: ${id}`);
57
+ const native = capability.nativeChecks || [];
58
+ assert.equal(new Set(native.map(check => check.id)).size, native.length, `Duplicate native checks: ${id}`);
59
+ }
60
+ for (const pattern of meta.patterns) {
61
+ assert.ok(definition.patterns[pattern], `Missing pattern: ${pattern}`);
62
+ for (const id of definition.patterns[pattern].required) assert.ok(definition.capabilities[id], `Unmapped pattern capability: ${id}`);
63
+ }
64
+ const preset = json(local(templateRoot, 'preset.json'));
65
+ return { templateRoot, generation, designRules, capabilityDefinition, inventory, definition, meta, manifest, preset,
66
+ templateDigest: hash(JSON.stringify({ manifest, inventory })) };
67
+ }
68
+
69
+ function visualProfile(context) {
70
+ const semantic = context.preset.semantic;
71
+ return { source: 'preset.json', semantic, nativeTokens: {
72
+ colorPrimary: semantic['easel-primary'], colorBgLayout: semantic['easel-page'], colorBgContainer: semantic['easel-surface'],
73
+ colorText: semantic['easel-text'], colorTextSecondary: semantic['easel-secondary'], colorBorder: semantic['easel-border-strong'],
74
+ colorBorderSecondary: semantic['easel-border'], fontFamily: semantic['easel-font'], fontSize: Number.parseInt(semantic['easel-body'], 10),
75
+ borderRadius: Number.parseInt(context.preset.component['ant-border-radius'], 10), controlHeight: Number.parseInt(context.preset.component['ant-control-height'], 10),
76
+ }, panelRadius: Number.parseInt(semantic['easel-radius'], 10), spacing: Number.parseInt(semantic['easel-space-6'], 10) };
77
+ }
78
+ function resolveResources() {
79
+ const context = loadTemplate();
80
+ return { template: { ...catalog.templates[0], version: context.manifest.version },
81
+ templateRoot: context.templateRoot, generation: context.generation, designRules: context.designRules,
82
+ capabilityDefinition: context.capabilityDefinition, templateDigest: context.templateDigest,
83
+ templateInventory: path.join(context.templateRoot, 'template-inventory.json'),
84
+ componentInventory: path.join(context.templateRoot, 'component-inventory.json'), preset: path.join(context.templateRoot, 'preset.json'),
85
+ summary: { pages: context.inventory.pages.length, routes: context.inventory.routes.length,
86
+ capabilities: Object.keys(context.definition.capabilities).length, patterns: context.meta.patterns },
87
+ referencePages: context.inventory.pages.map(page => ({ id: pageId(page.component), fragment: page.fragment, routes: page.routes })),
88
+ visual: visualProfile(context), starter: path.join(root, 'assets/starter'), versions, skillRoot: root };
89
+ }
90
+ const pageId = component => path.posix.basename(component, '.js').replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
91
+ function reference(context, id) {
92
+ const selected = id === 'app-shell' ? { fragment: context.meta.shell, routes: [] } : context.inventory.pages.find(page => pageId(page.component) === id);
93
+ assert.ok(selected, `Unknown reference page: ${id}`);
94
+ const fragments = new Map(context.inventory.fragments.map(item => [item.file, item])), visited = new Set(), elements = [];
95
+ function visit(file) {
96
+ if (visited.has(file)) return;
97
+ visited.add(file);
98
+ const fragment = fragments.get(file); assert.ok(fragment, `Reference fragment missing: ${file}`);
99
+ for (const node of fragment.nodes) {
100
+ const name = node.attributes['data-component'], component = context.inventory.components[name];
101
+ if (name) assert.ok(component?.classification, `Unclassified reference component: ${name}`);
102
+ const capabilities = (component?.classification.capabilities || []).filter(value => value !== 'review-tools');
103
+ const events = Object.entries(node.attributes).filter(([key]) => key.startsWith('data-on-')).map(([event, expression]) => ({ event, expression }));
104
+ if (events.length || (component?.classification.kind !== 'icon' && capabilities.length)) elements.push({ id: node.id, fragment: file, component: name || null, capabilities, events });
105
+ if (component?.classification.source) visit(component.classification.source);
106
+ }
107
+ }
108
+ visit(selected.fragment);
109
+ const behaviorFiles = new Set();
110
+ function behavior(file) {
111
+ if (behaviorFiles.has(file)) return;
112
+ assert.ok(Object.hasOwn(context.inventory.files, file), `Reference behavior missing: ${file}`);
113
+ behaviorFiles.add(file);
114
+ const text = fs.readFileSync(local(context.templateRoot, file), 'utf8');
115
+ for (const match of text.matchAll(/\b(?:from\s*|import\s*)["']([^"']+)["']/g)) {
116
+ if (match[1].startsWith('.')) behavior(path.posix.normalize(path.posix.join(path.posix.dirname(file), match[1])));
117
+ }
118
+ }
119
+ for (const file of visited) {
120
+ const js = file.replace(/\.html$/, '.js');
121
+ if (Object.hasOwn(context.inventory.files, js)) behavior(js);
122
+ }
123
+ return { id, templateDigest: context.templateDigest, routes: selected.routes,
124
+ fragments: [...visited].map(file => ({ file, digest: context.inventory.files[file], elements: elements.filter(item => item.fragment === file).length })),
125
+ behaviorFiles: [...behaviorFiles].sort(), styleFiles: Object.keys(context.inventory.files).filter(file => file.endsWith('.css')),
126
+ elements, capabilities: [...new Set(elements.flatMap(item => item.capabilities))].sort() };
127
+ }
128
+ function readPage(id) { return reference(loadTemplate(), id); }
129
+ function readCapability(id) {
130
+ const context = loadTemplate(), capability = context.definition.capabilities[id];
131
+ assert.ok(capability, `Unknown capability: ${id}`);
132
+ return { ...capability, frameworkId: context.definition.frameworkId, componentVersion: versions.component.version };
133
+ }
134
+
135
+ function parameters(capability, supplied = {}, pattern = '') {
136
+ const value = { ...capability.defaults, ...supplied };
137
+ if (capability.id === 'pagination' && supplied.mode === 'fixed') {
138
+ for (const key of ['defaultPageSize', 'pageSizeOptions']) {
139
+ assert.ok(!Object.hasOwn(supplied, key), `Fixed pagination cannot contain ${key}`); delete value[key];
140
+ }
141
+ }
142
+ if (capability.id === 'feedback' && !Object.hasOwn(supplied, 'states')) value.states = ['edit-form','form-page','wizard','permissions'].includes(pattern) ? ['loading','error','success'] : ['loading','empty','error','success'];
143
+ for (const [key, rule] of Object.entries(capability.parameters)) {
144
+ const item = value[key];
145
+ if (rule.required || (rule.requiredInMode && rule.requiredInMode === value.mode)) assert.ok(item !== undefined, `Missing ${capability.id}.${key}`);
146
+ if (item === undefined) continue;
147
+ if (rule.enum) assert.ok(rule.enum.includes(item), `Invalid ${capability.id}.${key}`);
148
+ if (rule.boolean || rule.type === 'boolean') assert.equal(typeof item, 'boolean', `Invalid boolean: ${key}`);
149
+ if (rule.string || rule.type === 'string') assert.ok(typeof item === 'string' && item.trim(), `Invalid string: ${key}`);
150
+ if (rule.integer || rule.type === 'integer') assert.ok(Number.isInteger(item) && item >= (rule.minimum ?? rule.integer ?? 0), `Invalid integer: ${key}`);
151
+ if (rule.type === 'array' || rule.strings || rule.positiveIntegers) assert.ok(Array.isArray(item), `Invalid array: ${key}`);
152
+ if (rule.strings) assert.ok(item.every(entry => typeof entry === 'string' && entry.trim()), `Invalid strings: ${key}`);
153
+ if (rule.positiveIntegers) assert.ok(item.length >= 2 && new Set(item).size === item.length && item.every(entry => Number.isInteger(entry) && entry > 0), `Invalid page-size options: ${key}`);
154
+ if (rule.minItems) assert.ok(item.length >= rule.minItems, `Too few items: ${key}`);
155
+ if (rule.uniqueItems) assert.equal(new Set(item).size, item.length, `Duplicate items: ${key}`);
156
+ if (rule.includes) assert.ok(rule.includes.every(entry => item.includes(entry)), `Missing required values: ${key}`);
157
+ if (rule.includesByMode) {
158
+ const mode = ['edit-form','form-page','wizard','permissions'].includes(pattern) ? 'edit-form' : ['management-list','tree-list','tree-table'].includes(pattern) ? 'management-list' : 'content';
159
+ assert.ok((rule.includesByMode[mode] || []).every(entry => item.includes(entry)), `Missing ${mode} states`);
160
+ }
161
+ }
162
+ for (const key of Object.keys(value)) assert.ok(Object.hasOwn(capability.parameters, key), `Unknown ${capability.id} parameter: ${key}`);
163
+ if (capability.id === 'pagination') {
164
+ assert.ok(value.mode === 'fixed' ? Number.isInteger(value.fixedPageSize) && value.fixedPageSize > 0 : !Object.hasOwn(value, 'fixedPageSize') && value.pageSizeOptions?.includes(value.defaultPageSize), value.mode === 'fixed' ? 'fixedPageSize is required' : 'Invalid adjustable pagination');
165
+ }
166
+ return value;
167
+ }
168
+ const validId = value => typeof value === 'string' && /^[a-z][a-z0-9-]{0,63}$/.test(value);
169
+ function plan(scope) {
170
+ const context = loadTemplate(), definition = context.definition;
171
+ assert.ok(Array.isArray(scope.pages) && scope.pages.length, 'Business pages are required');
172
+ const requirements = new Map((scope.requirements || []).map(item => [item.id, item]));
173
+ assert.ok(requirements.size && requirements.size === scope.requirements.length, 'Unique sourced business requirements are required');
174
+ for (const item of requirements.values()) assert.ok(item.id?.trim() && item.text?.trim() && ['type','reference','statement'].every(key => typeof item.source?.[key] === 'string' && item.source[key].trim()), 'Requirement source is missing');
175
+ const presentation = { ...context.meta.defaults, ...(scope.generation?.presentation || scope.presentation) };
176
+ for (const [key, value] of Object.entries(presentation)) assert.ok(Object.hasOwn(context.meta.choices[key] || {}, value), `Unsupported presentation: ${key}`);
177
+ const bindings = [], coverage = [{ pageId: 'app-shell', ...reference(context, 'app-shell') }], pageIds = new Set();
178
+ function bind(page, region, id, values = {}, pattern = '') {
179
+ const capability = definition.capabilities[id]; assert.ok(capability, `Unknown capability: ${id}`);
180
+ const binding = { id: `${page}/${region}/${id}`, pageId: page, regionId: region, capabilityId: id, parameters: parameters(capability, values, pattern) };
181
+ if (!bindings.some(item => item.id === binding.id)) bindings.push(binding);
182
+ }
183
+ for (const id of definition.core) bind('app-shell', 'shell', id);
184
+ const businessDetails = [];
185
+ for (const page of scope.pages) {
186
+ assert.ok(validId(page.id) && page.id !== 'app-shell' && !pageIds.has(page.id) && page.title?.trim(), 'Invalid or duplicate business page'); pageIds.add(page.id);
187
+ assert.ok([...requirements.values()].some(item => item.pages?.includes(page.id)), `Page lacks a business requirement: ${page.id}`);
188
+ coverage.push({ pageId: page.id, ...reference(context, page.referencePage) });
189
+ assert.ok(Array.isArray(page.regions) && page.regions.length, 'Page regions are required');
190
+ const regions = new Set();
191
+ for (const region of page.regions) {
192
+ assert.ok(validId(region.id) && !regions.has(region.id), 'Invalid or duplicate region'); regions.add(region.id);
193
+ const pattern = region.pattern || region.mode; assert.ok(context.meta.patterns.includes(pattern), `Unsupported pattern: ${pattern}`);
194
+ const selected = new Set(definition.patterns[pattern].required);
195
+ const edit = region.parameters?.edit?.presentation || (pattern === 'edit-form' ? 'drawer' : 'page');
196
+ if (['form-page','wizard','permissions'].includes(pattern)) assert.equal(edit, 'page', 'Full-page pattern requires page presentation');
197
+ if (pattern === 'edit-form') assert.ok(['drawer','modal'].includes(edit), 'Edit-form requires drawer or modal presentation');
198
+ if (selected.has('edit') && edit !== 'page') selected.add('dialog');
199
+ for (const id of Object.keys(region.parameters || {})) assert.ok(selected.has(id), `Unused capability parameters: ${id}`);
200
+ for (const id of selected) {
201
+ const defaults = id === 'edit' || id === 'dialog' ? { presentation: edit } : id === 'hierarchy' ? { kind: pattern === 'tree-table' ? 'tree-table' : pattern === 'permissions' ? 'permission-tree' : 'filter-tree', selectionPolicy: pattern === 'permissions' ? 'cascade' : pattern === 'tree-table' ? 'independent' : 'single' } : {};
202
+ bind(page.id, region.id, id, { ...defaults, ...region.parameters?.[id] }, pattern);
203
+ }
204
+ for (const [kind, items] of Object.entries({ field: region.fields || [], action: region.actions || [] })) {
205
+ if (!items.length && !region.emptyReason?.trim()) businessDetails.push({ pageId: page.id, regionId: region.id, kind, reason: 'Declare actual business details or explain why none apply' });
206
+ const seen = new Set();
207
+ for (const item of items) {
208
+ assert.ok(validId(item.id) && !seen.has(item.id) && item.label?.trim() && requirements.get(item.requirementId)?.pages?.includes(page.id), 'Business field/action requires a unique identity and matching requirement'); seen.add(item.id);
209
+ if (kind === 'field') assert.ok(item.type?.trim(), 'Business field type is required');
210
+ if (kind === 'action') assert.ok(item.outcome?.trim() && ['page','row','selected','node'].includes(item.target), 'Action target and outcome are required');
211
+ bindings.push({ id: `${page.id}/${region.id}/${kind}/${item.id}`, pageId: page.id, regionId: region.id, capabilityId: 'interaction', kind, parameters: item });
212
+ }
213
+ }
214
+ }
215
+ }
216
+ for (const item of requirements.values()) assert.ok(item.pages?.length && item.pages.every(id => pageIds.has(id)), 'Requirement references an unknown business page');
217
+ const decisions = scope.generation?.decisions || [], referenceDecisions = scope.generation?.referenceDecisions || [];
218
+ const decided = new Set();
219
+ for (const item of decisions) {
220
+ const key = `${item.pageId}/${item.capabilityId}`;
221
+ assert.ok(!decided.has(key) && definition.capabilities[item.capabilityId] && ['adopted','not-applicable'].includes(item.decision) && item.reason?.trim(), 'Invalid or duplicate capability decision'); decided.add(key);
222
+ const requirement = requirements.get(item.requirementId);
223
+ assert.ok(requirement && (item.pageId === 'app-shell' || requirement.pages.includes(item.pageId)), 'Capability decision needs a matching source');
224
+ const required = bindings.some(binding => (binding.pageId === item.pageId || binding.pageId === 'app-shell') && binding.capabilityId === item.capabilityId);
225
+ assert.ok(!(required && item.decision === 'not-applicable'), 'Required capability cannot be excluded');
226
+ if (item.decision === 'adopted' && !required) {
227
+ const region = scope.pages.find(page => page.id === item.pageId)?.regions.find(region => region.id === item.regionId);
228
+ assert.ok(region, 'Adopted capability needs a declared region'); bind(item.pageId, item.regionId, item.capabilityId, item.parameters, region.pattern || region.mode);
229
+ }
230
+ }
231
+ const accounted = new Set(), referenceScenarios = [];
232
+ for (const item of referenceDecisions) {
233
+ const selected = coverage.find(entry => entry.pageId === item.pageId), requirement = requirements.get(item.requirementId);
234
+ assert.ok(selected && requirement && (item.pageId === 'app-shell' || requirement.pages.includes(item.pageId)) && item.reason?.trim() && ['mapped','not-applicable'].includes(item.decision) && item.nodeIds?.length, 'Reference decision needs actual nodes and a matching source');
235
+ for (const id of item.nodeIds) {
236
+ const element = selected.elements.find(entry => entry.id === id), key = `${item.pageId}/${id}`;
237
+ assert.ok(element && !accounted.has(key), 'Unknown or duplicate reference element'); accounted.add(key);
238
+ if (item.decision === 'mapped') {
239
+ assert.ok(item.bindingIds?.length && item.bindingIds.every(id => bindings.some(binding => binding.id === id && (binding.pageId === item.pageId || binding.pageId === 'app-shell'))), 'Reference element requires matching implementation bindings');
240
+ const mapped = bindings.filter(binding => item.bindingIds.includes(binding.id));
241
+ assert.ok(!element.capabilities.length || element.capabilities.some(id => mapped.some(binding => binding.capabilityId === id)), 'Reference capability mapping does not match the element');
242
+ if (element.events.length) assert.ok(mapped.some(binding => binding.kind === 'action') || item.behavior?.trim(), 'Reference event needs a business action or explicit observable behavior');
243
+ referenceScenarios.push({ id: `reference/${item.pageId}/${id}`, pageId: item.pageId, referenceNodeId: id,
244
+ bindingIds: item.bindingIds, events: element.events, expected: item.behavior || item.reason });
245
+ } else assert.ok(!item.bindingIds?.length, 'Excluded reference element cannot claim an implementation');
246
+ }
247
+ }
248
+ const scenarios = bindings.flatMap(binding => {
249
+ if (binding.kind) return [{ id: `template/${binding.id}`, bindingId: binding.id, expected: binding.kind === 'action' ? binding.parameters.outcome : `字段 ${binding.parameters.label} 的类型、校验、只读和联动符合声明` }];
250
+ const capability = definition.capabilities[binding.capabilityId];
251
+ return [...capability.scenarios, ...(capability.nativeChecks || []).filter(check => !check.when || Object.entries(check.when).every(([key,value]) => binding.parameters[key] === value)).map(check => ({ ...check, id: `native/${check.id}` }))]
252
+ .map(check => ({ ...check, id: `template/${binding.id}/${check.id}`, bindingId: binding.id, parameters: binding.parameters }));
253
+ });
254
+ return { schemaVersion: 1, status: 'pending-implementation', executionVerified: false,
255
+ template: { id: context.manifest.id, version: context.manifest.version, digest: context.templateDigest },
256
+ component: versions.component, presentation, visual: visualProfile(context), pages: scope.pages, bindings, scenarios: [...scenarios, ...referenceScenarios],
257
+ frameworkChecks: definition.frameworkChecks, requiredChecks: definition.requiredChecks, browserReview: definition.browserReview,
258
+ pendingBusinessDetails: businessDetails,
259
+ pendingDecisions: coverage.flatMap(item => item.capabilities.filter(id => !bindings.some(binding => (binding.pageId === item.pageId || binding.pageId === 'app-shell') && binding.capabilityId === id) && !decided.has(`${item.pageId}/${id}`)).map(capabilityId => ({ pageId: item.pageId, capabilityId }))),
260
+ referenceCoverage: coverage, referenceDecisions,
261
+ pendingReferenceElements: coverage.flatMap(item => item.elements.filter(element => !accounted.has(`${item.pageId}/${element.id}`)).map(element => ({ pageId: item.pageId, ...element }))),
262
+ };
263
+ }
264
+
265
+ module.exports = { root, catalog, versions, selectTemplates, resolveResources, readPage, readCapability, plan };
266
+ if (require.main === module) {
267
+ try {
268
+ const args = process.argv.slice(2); let output;
269
+ if (!args.length) output = resolveResources();
270
+ else if (args[0] === '--capability' && args.length === 2) output = readCapability(args[1]);
271
+ else if (args[0] === '--plan' && args.length === 2) output = plan(json(path.resolve(args[1])));
272
+ else if (args[0] === '--page' && [2,4].includes(args.length)) {
273
+ const page = readPage(args[1]);
274
+ if (args.length === 4) {
275
+ assert.equal(args[2], '--fragment', 'Expected --fragment');
276
+ assert.ok(page.fragments.some(fragment => fragment.file === args[3]), 'Fragment is outside the selected page');
277
+ output = { page: page.id, file: args[3], html: fs.readFileSync(local(resolveResources().templateRoot, args[3]), 'utf8'), elements: page.elements.filter(item => item.fragment === args[3]) };
278
+ } else { const { elements, ...summary } = page; output = { ...summary, elementCount: elements.length, next: 'Use --fragment <listed-path> to read actual HTML and its functional nodes' }; }
279
+ } else throw new Error('Use no arguments, --page <id> [--fragment <path>], --capability <id>, or --plan <scope.json>');
280
+ process.stdout.write(JSON.stringify(output, null, 2) + '\n');
281
+ }
282
+ catch (error) { process.stderr.write(JSON.stringify({ status: 'failed', errors: [error.message] }) + '\n'); process.exitCode = 1; }
283
+ }
@@ -57,7 +57,7 @@ analyze 的交付是需求/能力覆盖、模板与框架选型、交互验收
57
57
 
58
58
  已有 v2 实例先运行一次 `node <skill-root>/scripts/native-pilot.cjs state <prototype-root>`,从聚合结果恢复身份、固定需求、设计/构建/实际QA、负责人和下一步的精确命令。不要为寻找参数反复遍历全仓库、node_modules或阅读控制器内部实现。这里只读检查,不安装、启动浏览器或更新状态。
59
59
 
60
- 制作前实际调用所需的前端/框架/设计 Skill,真实浏览器验收使用浏览器 Skill;不能以读取 SKILL.md 代替调用。安装器注册的 Hooks 自动运行。收到缺少 Skill 的反馈时,补调该 Skill、等待成功后重试原操作。同一有效上下文内的成功加载可复用,普通追问后继续原任务,不重新绑定或重复加载全部 Skill;基础设施异常只简要报告未验收项,由独立维护入口处理,不在原型任务中排查。
60
+ 制作前实际调用所需的前端/框架/设计 Skill,真实浏览器验收使用浏览器 Skill;不能以读取 SKILL.md 代替调用。缺少必要 Skill 时先补调并等待成功,再继续原操作。同一有效上下文内的成功加载可复用,普通追问后继续原任务,不重新绑定或重复加载全部 Skill;基础设施异常只简要报告未验收项,由独立维护入口处理,不在原型任务中排查。
61
61
 
62
62
  新 create 使用实际 `--host <codebuddy|workbuddy>`。按 PRD 和固定能力制定交互验收场景,使用 `native-pilot.cjs execution-assertions-template --scope <scope-file>` 取得场景骨架,填充预期 JSON 事实并传 `--execution-assertions <assertions-file>`。这是原型交互验收,不要求手动绑定会话或填写 Hook 调用记录。旧 HTML 和既有 execution-* 入口保持兼容。
63
63
 
@@ -8,25 +8,17 @@
8
8
  默认使用简体中文解释、追问及生成报告;用户明确要求其他语言时可切换。原方法正文、引用、阈值和审批条件完整保留。代码标识、路径、命令、工具参数、JSON 键/枚举与原文引用保持原样。
9
9
  <!-- i3:zh-guide:end -->
10
10
 
11
- 当前正常流程由安装器注册的 Hooks 自动采集真实 Skill 和工具调用。原型会话直接制作、修订和验收 UI;没有手动 execution-begin、检查 Hook 或填写内部调用记录的前置。缺少必要 Skill 时只补调该 Skill 并重试原操作。安装、原生协议和失败诊断统一见随包 [Hooks 维护说明](../../../hooks/PROTOTYPE.md),不属于原型工作步骤。
11
+ 原型自动审计 Hook 已移除,安装器不再注册 prototype 组,旧事件入口不再采集、拦截、补调或阻止 Stop。原型会话继续按 Skill 正文实际加载适用技能、制作 UI、构建和验收;不要求 execution-begin、Hook 会话绑定或内部调用记录作为正常流程的前置。配置清理见 [Hooks 维护说明](../../../hooks/PROTOTYPE.md)。
12
12
 
13
- 以下为已有显式 execution-* 使用者保留的兼容格式与旧手动流程,不作为新任务指导;已有原型不会自动改写。
13
+ ## 当前执行与验收
14
14
 
15
- ## 旧 Buddy A+B 执行与补调合同
15
+ 正常 build、record-run、record-devtools-review、finalize 和 state 不进入 Hook 调用审计。审计字段显示 `auditHook=retired`、`invocationVerification=unverified`,不作为已通过的调用证明。固定输入、业务断言、依赖、实际构建、业务报告、浏览器证据与交付摘要仍按各自合同检查;缺少这些证据仍不能通过。
16
16
 
17
- 本合同适配 CodeBuddy IDE/CLI 和 WorkBuddy 桌面 command Hooks;各宿主项目/全局的真实调用、补调及业务效果仍须逐项手测,profile 保持 pending-user。不是新增专责 Agent,不改 using 的发现/路由、上游前端/浏览器方法或上游 Hooks。A 是确定性门禁,B 采集与绑定原生来源;没有 C 提示词对照表方案。
17
+ 原型 Skill 仍要求前端技能在首次 UI 写入前成功加载,适用时实际调用 antDv、UIUX 和浏览器技能。读取 SKILL.md、模型自述或已有审计状态不能代替真实调用。移除自动回调不承诺自动发现或阻止所有漏调。
18
18
 
19
- ## 安装范围与原生生效
19
+ ## 安装与历史保留
20
20
 
21
- 安装器对 CodeBuddy/WorkBuddy 默认注册 prototype 组,不再询问是否启用、组或 IDE/CLI;非交互同默认。其他原版组仍交付脚本,但不新增注册。已有启用组保留,明确禁用由 state/i3-composer-agent/hooks.json 的 prototypeDisabledHosts 记忆;只有显式 enable 撤销禁用。显式 --hooks keep 保留状态,--hooks enable|list|check|disable 和 --hook-groups 继续作为管理参数;旧 --prototype-hooks 仅管理原型组。新注册 product=auto、schemaVersion=2;旧 ide/cli 注册和参数兼容,可安全升级到 auto,手改和未知归属不接管。
22
-
23
- 每次仅使用原生 Hook 的 transcript_path 具体文件,校验 session_id、实际项目和工具请求/结果,不扫描最新日志。真实 client 或已配置宿主原生日志位置用于身份识别,身份缺失/冲突不能默认 CLI。WorkBuddy 5.8.3 安装程序源代码表明其桌面使用 CLI 后端协议和原生项目会话 JSONL;本地源代码核对不替代实际回调。--codebuddy-transcript-root/--transcript-root 可设置手动限制,已有 manual roots 不被默认升级放宽;显式 auto 才切回自动。
24
-
25
- 原型 Hook 的新注册入口是 `<host-base>/i3-composer-agent/hooks/i3-prototype.cjs`,委托本 Skill 的 `scripts/hosts/codebuddy.cjs`;旧入口继续兼容。统一管理入口为同目录 `manage.cjs`,原版三组由 `codebuddy-upstream.cjs` 包装,原脚本不改。项目设置在 `.codebuddy/settings.json`;全局 CodeBuddy 为 CODEBUDDY_CONFIG_DIR 或 ~/.codebuddy,全局 WorkBuddy 为 WORKBUDDY_CONFIG_DIR 或 ~/.workbuddy。原型归属在 <host-base>/state/i3-prototype/installation.json,通用归属在 <host-base>/state/i3-composer-agent/hooks.json。项目注册引用项目副本,全局注册引用全局副本。保留原设置、权限和其他 Hook;无效 JSON、被手改的自有注册或未知配置归属拒绝合并;共享 Buddy 项目只注册一个入口,hosts 分别记录与禁用。Windows 命令引用尚未验证,此 B profile 不宣称支持。
26
-
27
- 独立统一管理可调用 `node <host-base>/i3-composer-agent/hooks/manage.cjs list|check|enable|disable --host codebuddy|workbuddy --scope project|global --project <project-root> --groups prototype`。旧 `node <skill-root>/scripts/prototype-hooks.cjs check|enable|disable` 参数保持且只针对 prototype。无需指定 product;旧 `--product ide|cli` 兼容,`--product-version <实际版本>` 可记录安装信息;可选 `--transcript-root <目录|auto>`。全局配置根按所选宿主遵循绝对 CODEBUDDY_CONFIG_DIR/WORKBUDDY_CONFIG_DIR,默认 ~/.codebuddy/~/.workbuddy,工具、注册、状态和运行时选择使用同一根。check 不执行安装、不写配置或缓存。首次没有实际日志时 `transcript.status=awaiting-native-event`,配置可注册但证据尚未核验;不是安装失败,也不算 active。CLI 注册后需用户在原生 `/hooks` 审核,然后新建会话;IDE 需重载。状态为 files-present/registered/pending-host-review/active/failed 等,active 只指展示的项目/会话和当前注册/脚本字节的近期事件。它不代表所有项目已激活或业务已通过。原版三组的 triggered 仅表示包装回调观察,仍是未核验等级。
28
-
29
- CodeBuddy IDE 对存在的项目设置保守按覆盖处理,不能穿透到全局冒称生效;CodeBuddy CLI/WorkBuddy 在项目/全局合并来源中优先选自有项目绑定,否则全局。未选中的回调退出,选中状态用锁和原生来源游标去重。配置、脚本或 profile 改动使旧观察失效;重复启用不增加注册。disable 仅撤销自有配置,不删除原型与 QA。卸载核心前先 disable,避免悬空自有命令。
21
+ 新装不创建原型审计注册。升级按精确归属清理所选宿主范围的旧注册,归属记录归档到 `state/i3-prototype/history/`;用户配置、其他 Hook、旧会话与原型保留。手改或未知归属先停下报告,不能覆盖。旧 helper/参数仅兼容 check、disable/keep 清理;prototype enable 已拒绝。check 只读,不扫描原生日志、不构造新的调用证据。
30
22
 
31
23
  ## 新实例的固定预期
32
24
 
@@ -46,50 +38,14 @@ node <skill-root>/scripts/native-pilot.cjs execution-assertions-template --scope
46
38
 
47
39
  实际原生 evaluate_script 应读取真实 DOM/组件可观察状态并返回可解析 JSON(或唯一 JSON 代码块),例如 `{"form":{"invalidFields":1}}`。使用正常 click/fill 等完成业务操作,不在求值中直接修改业务状态制造通过。支持 equals、includes、gte、lte,JSON pointer 路径必须存在。视觉、语义、动效中间态、毛玻璃呈现仍按浏览器 Skill 方法复核,数值检查不代替人工质量判断。
48
40
 
49
- ## 会话绑定与阶段
50
-
51
- 以下显式入口仅供已有使用者兼容:通过自然语言/using 选到工作 Skill,或实际 `/i3-prototype` 快捷入口后,执行 `execution-begin <prototype-root>`。B 回查原生来源,关联 projectKey、sessionId、runId、实例、输入、模式、策略与注册。只读或停止请求不能启动写任务。新会话/压缩后的上下文需重新核验适用 Skill;普通追问延续原运行,不要求重新 begin。用户手改保留。初建骨架不等于实际实施。
52
-
53
- 使用 `state` 中的 `commands.executionBegin.shell` 或拒绝反馈中的绝对路径命令,作为一次独立 Shell 调用;不加 `cd &&`、管道、重定向或 `head`。严格解析器不解释组合 Shell。成功须同时满足进程退出 0 和内层 `status=bound`;外层 `status=success`/`success:true` 不足以证明阶段成功。缺绑定、任务切换、上下文变化或输入变化时重新执行,不能由 CLI 自行写入原生绑定;A 和写入门禁回查当前任务最新一次 begin 的成功结果,失败/待返回不可复用旧成功。
54
-
55
- 原始工具名 `use_skill`/`skill` 与 `Skill` 通过同一有限别名表识别;IDE 历史转换和原始 JSONL 采用相同规则。保留原始请求/结果摘要、调用 ID、会话与时序校验,普通 Read、未知近似名称仍不算 Skill。原生 execute_command 的内层非零退出、错误结果或 stdout 中完整 JSON `status=failed` 都按失败处理;不会把浏览器返回的任意业务 `result.status` 当成工具错误。
56
-
57
- `execution-template <prototype-root>` 只读返回当前证据骨架和已经成功返回的 Skill 引用;保存并填入 `qa/execution-evidence.json`。字段语义:
58
-
59
- - 固定身份:schemaVersion=1、runId、sessionId、projectKey、policyDigest、inputDigest、candidateDigest、revision,须与当前绑定一致。
60
- - frontend:真实 Skill 的 toolCallId/resultDigest;files 覆盖实际 app/src、mocks 和实现映射引用,每项 path/sha256;requirementIds 覆盖固定需求。首次业务 UI Write/Edit 在成功加载之后;实现后依据完整前端规范审查,而非只改 adapted。
61
- - official:skill 真实 antDv 加载;version 是目标版本包/类型/源码查询的真实 toolCallId 和 quote;queries 每项 component、toolCallId、quote,覆盖当前实现映射的实际框架组件。CLI 数据 1.5.2 不得当成目标 1.5.3。固定 probe 不能替代业务 API 核实。合法 fallback 需 channel=official-source、unavailable.toolCallId 指向真实不可用返回,以及官方资料/目标类型结果。
62
- - uiux(professional):真实 skill 引用;queries 每项 query、toolCallId、quote、decisions;decision 字段 identity、decision、rationale,采用/调整还要 implementation 和 scenarioId。原始条目身份必须在返回中,且与 qa/design-advice.json 的 resultIdentity、query、decision、rationale 一致。拒绝或 no-match 允许,不能假称采用。template 需 templateChoice.quote 指向真实用户的明确模式选择,功能场景照验。
63
- - build:实际 native-pilot build 调用的 toolCallId,成功返回必须包含当前 buildId/buildDigest;类型检查、测试和构建按原构建合同。
64
- - browser:真实浏览器 Skill 引用、report(尚未 record-run 的业务报告可位于 QA)、preview(当前构建 navigate_page/new_page 引用)、identity(实际页面返回的候选摘要 quote)、observations(六类对应原生方法的 toolCallId/quote)、facts。facts 每项 scenarioId、checkIndex、toolCallId、quote 连接固定预期和实际 JSON;每个场景/检查都有成功的真实工具返回。原 devtools 与业务报告的 ID、方法、场景、构建和文件摘要继续校验。
65
-
66
- 所有引用回查实际 assistant/tool_use、user/tool_result 原文配对。读取 Skill 文件不当成原生加载;只有请求、失败返回、空结果、假 ID、旧会话、上下文失效、无关查询、错误版本、旧构建、被改写的源前缀均不能通过。来源字段来自 command Hook 的 transcript_path/session_id;若宿主日志不是支持的 JSONL 或缺实际会话字段,则 unverified。auto 只使用回调给定的具体文件,校验绝对路径、普通非链接文件、大小、业务目录排除与会话身份;不把任意父目录纳入信任。manual 还必须落在指定日志根。普通模型 JSON 不能替代原生来源,路径及摘要检查仍非防同用户篡改。
67
-
68
- 本期按完整当前任务重新核验查询;未提供跨任务自动继承查询的捷径。同一会话与上下文内可复用真实 Skill 加载。修复 U01 时先加载、检查现有页面并作本次真实修订;不把旧写入倒填为已满足历史前置。
69
-
70
- ## 门禁、回传与限制
71
-
72
- `execution-check --stage design|implementation-entry|implementation|build|browser-entry|browser|delivery`、build、record-run、record-devtools-review、finalize 使用同一谓词。state 展示 execution 缺项及恢复命令,finalize 成功收据包含 runId/policyDigest、证据摘要和调用等级;HANDOFF 显示同一结果。修改源码/输入/设计/QA 会使相应检查失效,旧收据不能复用。
73
-
74
- B 的 PreToolUse 只拒绝可识别的缺前置 UI 写入或明确阶段命令,不返回强制 allow,不替换原生结果。它不是通用 Shell 文件隔离器;未知 Shell 写法和所有自然语言完成方式不保证被拦截。新 buddy-ab-v2 的 Stop 对已纳管当前任务、可识别的完成声明且缺有效收据时按有限预算反馈;旧 codebuddy-ab-v1 保留原单次反馈合同。进度、blocked、awaiting-input、用户停止正常结束,不能无限循环。崩溃/超时不生成成功记录,A 拒绝无有效来源的严格完成。
75
-
76
- 本地原文、索引与配置同属用户权限域,`native-source-correlated` 表示受配置来源的逐项回查,不是防篡改签名。文件摘要、chmod、机器落盘或模型自述均不能单独证明可信。若日志本身缺独立可信来源,结果继续披露 unverified,需用户检查真实宿主调用。本测试包原生 profile 状态 pending-user;源码/合成/打包通过不改变它。
77
-
78
- 旧 HTML/未采用 executionPolicy 的原生实例继续原摘要、输入、场景与基线,不自动迁移,新等级为 unverified。四主题、完整离线 HTML、业务共享索引和 moduleIds→appliesTo 不变;跨宿主可读共享原型,不继承 CodeBuddy 的调用证明。
79
-
80
-
81
- ## 补调与恢复验收
82
-
83
- 首次业务 UI 写入前,当前有效上下文须成功加载前端 Skill;新 buddy-ab-v2 还检查可调用的 antDv Skill 和专业模式 UIUX。阶段命令使用同一 A 谓词,缺 Skill 时反馈准确名称,已有加载但证据缺项时要求 execution-check 和真实引用,不要求重复加载全部 Skill。
84
-
85
- B 拒绝后主会话立即补调,等待成功返回,再重试被拒操作;普通 Read 或另开会话不算本主会话 Skill 调用。缺项、反馈事件、后续成功 toolCallId/resultDigest 及重试结果在宿主会话状态落盘。required → ready-to-retry → recovered 分别表示缺项、已可重试、观察到成功重试;recovered 不表示业务验收通过。A 再回查补调及重试的原生引用和时序。
41
+ ## 历史 execution-* 兼容
86
42
 
87
- PostToolUse 观察到已落盘的 begin/阶段失败时,通过该事件的 additionalContext 返回补调指令并保留 required;Stop 才使用停止反馈协议。IDE 尚未持久化当前结果时继续等待后续原生来源核验,不制造成功。实际 Skill 已成功但缺绑定时只提示 execution-begin;补调成功不直接记 recovered,仍须观察原操作的成功重试。
43
+ 已有 execution-policy、execution-context、execution-evidence 和原始审计报告保留,不自动改写。显式 `execution-begin`、`execution-template`、`execution-check` 及底层协议回放仍可用于历史资料检查,它们继续要求原合同的真实来源、身份与引用;没有来源时如实报告 unverified/failed。这些命令的历史审计失败不再接管正常原型构建或交付。
88
44
 
89
- 重试按 kind 区分 ui-write 和 stage;阶段重试绑定实际 operation、stage 与同一原型目录。两类新记录都以 feedbackLine 核对请求发生在反馈之后,旧成功回调不能恢复后续拒绝;旧无 kind 的记录继续仅按页面写入合同核验。
45
+ 历史格式中的 runId、sessionId、projectKey、输入/候选摘要、toolCallId 与 resultDigest 只描述对应旧会话。旧 recovered 只表示当时观察到补调和重试;不是当前模型的 Skill 调用证明或业务认可。旧宿主适配导出的纯回放函数仅用于兼容测试;两个可执行回调入口均不再执行审计。
90
46
 
91
- 同一会话/有效上下文/原型运行默认同一缺项提示两次、累计六次;重复回调、普通追问、反复 begin 和内部 providerData.isMeta 消息不重置计数。达到上限只停止重复催调,仍缺项则拒绝当前操作,取得真实成功结果后重新按事实放行。required/ready-to-retry/recovered/blocked 保留为兼容审计显示,不构成额外许可或永久锁。允许如实报告阻塞,不无限驱动 Stop。用户只读/暂停优先。入口、Skill 发现、加载成功、CLI 查询、重试成功、交付和用户认可分开记录。
47
+ ## 保持的边界
92
48
 
93
- 每宿主/范围实测:故意漏调 → 写入被拒且文件未被该操作修改 → 本主会话实际 Skill 成功 → 原操作重试成功;失败调用、旧上下文、假 ID、旧会话及当前构建缺项不能放行。持续缺项须在预算耗尽后报告阻塞。源测试里的合成日志只能验证解析和门禁逻辑,不证明模型会补调。原生 Hooks 没有指定下一工具的执行接口,不能承诺必然调用,也不是任意 Shell 安全隔离。
49
+ 旧 HTML、四主题、业务共享索引和 moduleIds→appliesTo 保持;跨宿主读取原型不继承旧调用证明。固定预期不能事后改成与失败结果一致,真实业务意见保留人工判断空间。实际宿主调用、静态测试、安装检查与业务验收分别记录。
94
50
 
95
- antDv 加载与本地 CLI 查询分别留证:`prototype-deps query --host <host> --scope project --project <project> --kind info --component Table --version 1.5.2` 经解析的绝对 Node/入口执行,仅引用知识 1.5.2;目标 1.5.3 仍核对包类型/源码。probe 不是业务查询,退出零的错误内容仍失败,不自动安装。
51
+ antDv 加载与本地 CLI 查询分别留证:`prototype-deps query --host <host> --scope project --project <project> --kind info --component Table --version 1.5.2` 使用解析的本地入口;知识版本与目标组件版本分别核对。probe 不是业务查询,退出零的错误内容仍失败,不自动安装依赖。
@@ -32,7 +32,7 @@ function plan(options) {
32
32
  const hosts=[...new Set(options.hosts || [...(record?.hosts || (record ? ['codebuddy'] : [])),...(options.agents?.filter(host=>['codebuddy','workbuddy'].includes(host)) || [options.host || 'codebuddy'])])].sort();
33
33
  assert.ok((hosts.length||action==='disable')&&hosts.every(host=>['codebuddy','workbuddy'].includes(host)), 'Unsupported prototype Hook host');
34
34
  for (const item of [base, project, nodePath, scriptPath]) assert.ok(typeof item === 'string' && path.isAbsolute(item) && !/[\x00\r\n]/.test(item), 'Absolute safe registration paths required');
35
- if (process.platform === 'win32') throw new Error('CodeBuddy A+B Windows Hook quoting is not yet verified');
35
+ if (process.platform === 'win32' && action !== 'disable') throw new Error('CodeBuddy A+B Windows Hook quoting is not yet verified');
36
36
  const before = config(currentText), after = structuredClone(before), activeRecord = record && record.owner === OWNER ? record : null;
37
37
  if (record) {
38
38
  assert.ok(activeRecord && [1,2].includes(activeRecord.schemaVersion), 'Unknown registration ownership');
@@ -14,7 +14,7 @@ function policy(directory) {
14
14
  function binding(directory) {
15
15
  const metadata=inside(directory,'prototype.json');
16
16
  const automaticExpected=fs.existsSync(metadata)&&json(metadata).runtime?.executionPolicy===P.AUTO_ID;
17
- const recover=automaticExpected?'Installed Hooks collect this automatically on the next prototype UI operation. Load the required Skills and continue the UI task; report an infrastructure fault through maintenance if collection fails.':Recovery.instruction(['execution-begin'],{directory});
17
+ const recover=automaticExpected?'Prototype audit Hooks are retired. Normal prototype commands no longer require this historical audit binding.':Recovery.instruction(['execution-begin'],{directory});
18
18
  const pointer=optional(directory,'qa/execution-context.json');assert.ok(pointer?.schemaVersion===1,'No native Hook task binding; '+recover);
19
19
  const project=fs.realpathSync(pointer.project),selected=C.select({project,product:pointer.product,host:pointer.host||'codebuddy'});assert.ok(selected,'Hooks are not enabled or are shadowed');
20
20
  assert.equal(selected.base,pointer.base,'Effective Hook scope changed');
@@ -47,7 +47,10 @@ function check(directory,stage,lib,options={}) {
47
47
  catch(error){return {status:'failed',stage,errors:[error.message],invocationVerification:'unverified'};}
48
48
  }
49
49
  function requireStage(directory,stage,lib,options={}) {
50
- const result=check(directory,stage,lib,options);assert.ok(['passed','not-required'].includes(result.status),`Execution gate ${stage}: ${result.errors?.join('; ')}`);return result;
50
+ assert.ok(P.STAGES.includes(stage),'Unknown execution stage');
51
+ // Only the automatic callback audit is retired. Existing fixed inputs,
52
+ // framework/build checks and business/DevTools evidence are checked by their owners.
53
+ return {status:'not-required',stage,auditHook:'retired',invocationVerification:'unverified',tamperProof:false};
51
54
  }
52
55
  function template(directory,lib) {
53
56
  const fixed=policy(directory);assert.ok(fixed,'This existing prototype retains its original execution contract');
@@ -15,6 +15,7 @@ function main(argv=process.argv.slice(2),raw=fs.readFileSync(0,'utf8')) {
15
15
  const result=require('../codebuddy-hook.cjs').handle(JSON.parse(raw),options);
16
16
  return format(result,options.event);
17
17
  }
18
- if(require.main===module)try{const result=main();process.stdout.write(JSON.stringify(result.output)+'\n');if(result.code===2)process.stderr.write(result.output.reason+'\n');process.exitCode=result.code;}
19
- catch(error){process.stderr.write(`i3 prototype audit unavailable: ${error.message}. Strict A gates remain unverified.\n`);process.exitCode=1;}
18
+ // Historical replay helpers above remain available to explicit audit tooling.
19
+ // The old executable callback is retired, including registrations before the wrapper.
20
+ if(require.main===module)process.stdout.write('{}\n');
20
21
  module.exports={main,format};
@@ -27,7 +27,7 @@ function state(directory,options,lib) {
27
27
  } catch(error) { browser={status:'failed',errors:[error.message]}; }
28
28
  }
29
29
  const devtoolsReview=require('./native-devtools.cjs').check(directory,lib);
30
- const execution=require('./execution-runtime.cjs').check(directory,'delivery',lib);
30
+ const execution=require('./execution-runtime.cjs').requireStage(directory,'delivery',lib);
31
31
  const ownership=read(directory,'.prototype-write.lock');
32
32
  const savedDelivery=read(directory,'qa/delivery.json');
33
33
  const deliveryCurrent=savedDelivery?.schemaVersion===1&&savedDelivery.status==='complete'&&savedDelivery.id===meta.id&&savedDelivery.revision===current.revision&&savedDelivery.candidateDigest===current.digest&&savedDelivery.inputDigest===current.inputDigest&&savedDelivery.buildId===build.buildId&&savedDelivery.buildDigest===build.buildDigest&&savedDelivery.report===browser.report&&savedDelivery.review===review.status&&savedDelivery.humanConfirmationRequired===(review.status!=='approved')&&browser.status==='current'&&((!devtoolsReview.required&&savedDelivery.browserReportDigest===undefined)||savedDelivery.browserReportDigest===browser.reportDigest)&&(!devtoolsReview.required||(devtoolsReview.status==='current'&&savedDelivery.devtoolsReviewDigest===devtoolsReview.reportDigest));
@@ -64,7 +64,7 @@ function state(directory,options,lib) {
64
64
  if(generation)commands.replan=command('replan',['--scope',path.join(directory,'inputs/scope.json'),'--revision',nextRevision,...expected]);
65
65
  const fixedScope=json(inside(directory,'inputs/scope.json'));
66
66
  const scopes=meta.runtime.generationContract===1?{sourceFile:'inputs/scope.json',schemaVersion:fixedScope.schemaVersion,title:fixedScope.title,moduleIds:fixedScope.moduleIds,pages:fixedScope.pages.map(page=>({id:page.id,title:page.title,referencePage:page.referencePage,regions:page.regions.map(region=>({id:region.id,pattern:region.pattern||region.mode,fields:region.fields?.length||0,actions:region.actions?.length||0}))})),requirements:fixedScope.requirements.map(item=>({id:item.id,pages:item.pages,source:{type:item.source.type,reference:item.source.reference}}))}:fixedScope;
67
- return {status:structure.status==='passed'?'ready':'failed',operation:'state',readOnly:true,directory,id:meta.id,revision:current.revision,candidateDigest:current.digest,inputDigest:current.inputDigest,identity:current.identity,instanceId:meta.instanceId,scopes,structure,...(generation?{generation}:{}),design,build,browser,devtoolsReview,execution,delivery,browserRuntime:runtime,ownership,verification:meta.verification,review,nextAction,commands,notes:['Design decisions and real provider queries remain the executing role responsibility.','Use the printed prototype commands; installed Hooks execute automatically.','A missing browser provider requires an existing Playwright module path; no automatic install or global changes.','Legacy execution commands remain available for compatibility; prototype work does not require manual binding or Hook diagnosis.']};
67
+ return {status:structure.status==='passed'?'ready':'failed',operation:'state',readOnly:true,directory,id:meta.id,revision:current.revision,candidateDigest:current.digest,inputDigest:current.inputDigest,identity:current.identity,instanceId:meta.instanceId,scopes,structure,...(generation?{generation}:{}),design,build,browser,devtoolsReview,execution,delivery,browserRuntime:runtime,ownership,verification:meta.verification,review,nextAction,commands,notes:['Design decisions and real provider queries remain the executing role responsibility.','Use the printed prototype commands; automatic prototype audit Hooks are retired and invocation remains unverified.','A missing browser provider requires an existing Playwright module path; no automatic install or global changes.','Legacy execution commands remain available for compatibility; prototype work does not require manual binding or Hook diagnosis.']};
68
68
  }
69
69
 
70
70
  function finalize(directory,options,lib) {
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  'use strict';
3
3
  // Explicit configuration lifecycle. check is read-only and never invokes the installer.
4
- const fs=require('node:fs'),path=require('node:path'),os=require('node:os'),assert=require('node:assert/strict');
5
- const R=require('./codebuddy-registration.cjs'),C=require('./codebuddy-context.cjs'),E=require('./execution-evidence.cjs');
4
+ const fs=require('node:fs'),path=require('node:path'),assert=require('node:assert/strict');
5
+ const R=require('./codebuddy-registration.cjs'),C=require('./codebuddy-context.cjs');
6
6
  function context(options) {
7
7
  const host=options.host||'codebuddy';assert.ok(['codebuddy','workbuddy'].includes(host),'A+B supports CodeBuddy and WorkBuddy');
8
8
  const project=fs.realpathSync(path.resolve(options.project||'.')),scope=options.scope;
@@ -15,29 +15,24 @@ function context(options) {
15
15
  return {project,scope,base,record,scriptPath,host};
16
16
  }
17
17
  function prepare(options,runtime={}) {
18
- const current=runtime.current||context(options),readText=runtime.readText||R.fileIO.read,action=options.action||'keep';
19
- assert.ok(['keep','enable','disable'].includes(action),'Invalid Hook configuration action');
20
- if(['keep','disable'].includes(action)&&!current.record){
21
- if(action==='disable'){const settings=R.config(readText(path.join(current.base,'settings.json')));assert.ok(!Object.values(settings.hooks||{}).flat().some(g=>g.hooks.some(h=>h.command?.includes(R.OWNER))),'Unknown owned-looking Hook has no ownership record; preserve it for review');}
22
- return {summary:{status:'not-enabled',scope:current.scope,changed:false},unchanged:true};
18
+ const requested=options.action||'keep';
19
+ assert.ok(['keep','enable','disable'].includes(requested),'Invalid Hook configuration action');
20
+ assert.notEqual(requested,'enable','Prototype audit Hooks are retired and cannot be enabled');
21
+ const current=runtime.current||context(options),readText=runtime.readText||R.fileIO.read;
22
+ const settingsText=readText(path.join(current.base,'settings.json'));
23
+ if(!current.record) {
24
+ const settings=R.config(settingsText);
25
+ assert.ok(!Object.values(settings.hooks||{}).flat().some(g=>g.hooks.some(h=>h.command?.includes(R.OWNER))),'Unknown owned-looking Hook has no ownership record; preserve it for review');
26
+ return {summary:{status:'retired',scope:current.scope,changed:false},unchanged:true};
23
27
  }
24
- assert.ok(options.product===undefined||['auto','ide','cli'].includes(options.product),'Invalid Buddy product profile');
25
- const product='auto'; // Legacy product arguments are hints, never a second new registration.
26
- const explicit=options.transcriptRoot,roots=explicit==='auto'?[]:explicit?[path.resolve(explicit)]:current.record?.transcriptRoots||[];
27
- const mode=explicit?(explicit==='auto'?'auto':'manual'):current.record?.transcriptMode||(roots.length?'manual':'auto');
28
- if(action!=='disable') {
29
- for(const root of roots){const relative=path.relative(current.project,root);assert.ok(relative==='..'||relative.startsWith('..'+path.sep)||path.isAbsolute(relative),'Native log root must be outside the business project; QA exports are not native provenance');}
30
- }
31
- const settingsText=readText(path.join(current.base,'settings.json')),settings=R.config(settingsText);
32
- if(action!=='disable')assert.ok(!settings.disableAllHooks&&!settings.allowManagedHooksOnly,'Host policy prevents automatic auditing; preserve the existing policy');
33
- return R.plan({action,...current,product,hosts:options.hosts,agents:options.agents,nodePath:process.execPath,scriptDigest:runtime.scriptDigest||C.bundle(options.entrySource||(path.basename(current.scriptPath)==='i3-prototype.cjs'?current.scriptPath:path.join(__dirname,'hosts/codebuddy.cjs'))),currentText:settingsText,
34
- transcriptMode:mode,transcriptRoots:roots,productVersion:options.productVersion||current.record?.productVersion||'unreported'});
28
+ return R.plan({action:'disable',...current,product:'auto',hosts:[],nodePath:process.execPath,scriptDigest:current.record.scriptDigest,currentText:settingsText});
35
29
  }
36
30
  function configure(options) {
37
31
  const change=prepare(options);if(change.unchanged||options.preview)return change.summary;
38
32
  return R.apply(change);
39
33
  }
40
- function check(options,runtime={}) {
34
+ // Explicit historical replay only; normal management must never inspect transcripts.
35
+ function legacyCheck(options,runtime={}) {
41
36
  const current=runtime.current||context(options),profile=require('../assets/hosts/codebuddy/profile.json');
42
37
  const result={scope:current.scope,base:current.base,scriptPath:current.scriptPath,filesPresent:fs.existsSync(current.scriptPath),profile:profile.id,nativeValidation:profile.nativeValidation,readOnly:true,sideEffects:[]};
43
38
  if(process.platform==='win32')return {...result,status:'unsupported',reason:'CodeBuddy Hook quoting on Windows has not been validated'};
@@ -80,6 +75,14 @@ function check(options,runtime={}) {
80
75
  next:'CLI: review /hooks; desktop: reload. Verify an actual Skill invocation and missing-Skill recovery in the chosen host.'};
81
76
  }catch(error){if(result.transcript)Object.assign(result.transcript,{status:'unverified',invocationVerified:false});return {...result,status:'failed',errors:[error.message]};}
82
77
  }
78
+ function check(options,runtime={}) {
79
+ const current=runtime.current||context(options),readText=runtime.readText||R.fileIO.read;
80
+ const result={status:'retired',scope:current.scope,base:current.base,readOnly:true,sideEffects:[],invocationVerified:false,registered:!!current.record};
81
+ try {
82
+ prepare({...options,action:'disable'},{current,readText});
83
+ return {...result,cleanupRequired:!!current.record,next:current.record?'Upgrade or explicitly disable to remove the exact owned registration.':'No prototype audit Hooks are enabled.'};
84
+ }catch(error){return {...result,status:'failed',errors:[error.message]};}
85
+ }
83
86
  function main(argv=process.argv.slice(2)) {
84
87
  const central=[path.resolve(__dirname,'../../../i3-composer-agent/hooks/manage.cjs'),path.resolve(__dirname,'../../../hooks/manage.cjs')].find(file=>fs.existsSync(file));
85
88
  if(central)return require(central).main([...argv,'--groups','prototype']);
@@ -87,5 +90,5 @@ function main(argv=process.argv.slice(2)) {
87
90
  while(argv.length){const arg=argv.shift();assert.ok(arg.startsWith('--')&&argv[0]&&!argv[0].startsWith('--'),'Hook option needs a value');const key=arg.slice(2).replace(/-([a-z])/g,(_,c)=>c.toUpperCase());assert.ok(['host','scope','project','product','productVersion','transcriptRoot'].includes(key),'Unknown Hook option');options[key]=argv.shift();}
88
91
  return options.action==='check'?check(options):configure(options);
89
92
  }
90
- module.exports={context,globalBase:C.globalBase,prepare,configure,check,main};
93
+ module.exports={context,globalBase:C.globalBase,prepare,configure,check,legacyCheck,main};
91
94
  if(require.main===module)try{const result=main();process.stdout.write(JSON.stringify(result,null,2)+'\n');if(result.status==='failed')process.exitCode=1;}catch(error){process.stderr.write(error.message+'\n');process.exitCode=1;}