@givolt/i3-composer-agent 3.2.1 → 4.0.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 (611) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude/commands/i3-build.md +1 -0
  3. package/.claude/commands/i3-code-simplify.md +1 -0
  4. package/.claude/commands/i3-constraints.md +1 -0
  5. package/.claude/commands/i3-plan.md +1 -0
  6. package/.claude/commands/i3-review.md +1 -0
  7. package/.claude/commands/i3-ship.md +1 -0
  8. package/.claude/commands/i3-spec.md +1 -0
  9. package/.claude/commands/i3-test.md +1 -0
  10. package/.claude/commands/i3-webperf.md +1 -0
  11. package/.claude-plugin/marketplace.json +1 -1
  12. package/.claude-plugin/plugin.json +1 -1
  13. package/.codex-plugin/plugin.json +2 -2
  14. package/README.md +31 -25
  15. package/bin/i3-composer-agent.cjs +4 -59
  16. package/bin/install.cjs +6 -14
  17. package/bin/native-layout.cjs +11 -2
  18. package/bin/native-migration.cjs +68 -28
  19. package/bin/retired-custom-fingerprints.json +1597 -0
  20. package/bin/wizard.cjs +2 -13
  21. package/docs/antigravity-setup.md +3 -1
  22. package/docs/codebuddy-setup.md +19 -76
  23. package/docs/codex-setup.md +10 -4
  24. package/docs/comparison.md +1 -1
  25. package/docs/copilot-cli-setup.md +4 -4
  26. package/docs/cursor-setup.md +1 -1
  27. package/docs/gemini-cli-setup.md +1 -1
  28. package/docs/other-hosts.md +2 -2
  29. package/docs/windsurf-setup.md +2 -2
  30. package/docs/workbuddy-setup.md +9 -16
  31. package/evals/README.md +10 -0
  32. package/evals/cases/i3-code-simplification.json +8 -0
  33. package/evals/cases/i3-documentation-and-adrs.json +4 -0
  34. package/evals/cases/i3-enterprise-sop.json +1 -1
  35. package/evals/cases/i3-frontend-ui-engineering.json +1 -1
  36. package/evals/cases/i3-security-and-hardening.json +4 -0
  37. package/evals/cases/i3-ui-demo.json +2 -2
  38. package/evals/cases/i3-using-agent-skills.json +5 -5
  39. package/evals/plugin/simplify-fires-on-pasted-function/graders/behavior-kept-and-explained.md +7 -0
  40. package/evals/plugin/simplify-fires-on-pasted-function/graders/skill-fired.md +5 -0
  41. package/evals/plugin/simplify-fires-on-pasted-function/prompt.md +30 -0
  42. package/evals/plugin/simplify-stays-quiet-on-make-it-fast/graders/not-fired.md +8 -0
  43. package/evals/plugin/simplify-stays-quiet-on-make-it-fast/prompt.md +20 -0
  44. package/evals/zh-CN/cases/i3-code-simplification.json +8 -0
  45. package/evals/zh-CN/cases/i3-documentation-and-adrs.json +4 -0
  46. package/evals/zh-CN/cases/i3-enterprise-sop.json +1 -1
  47. package/evals/zh-CN/cases/i3-frontend-ui-engineering.json +2 -2
  48. package/evals/zh-CN/cases/i3-security-and-hardening.json +4 -0
  49. package/evals/zh-CN/cases/i3-ui-demo.json +2 -2
  50. package/evals/zh-CN/cases/i3-using-agent-skills.json +6 -6
  51. package/hooks/SDD-CACHE.md +1 -1
  52. package/package.json +13 -80
  53. package/plugin.json +15 -2
  54. package/references/accessibility-checklist.md +4 -4
  55. package/references/performance-checklist.md +5 -4
  56. package/references/testing-patterns.md +2 -1
  57. package/scripts/floor-guard-reference-test.js +32 -0
  58. package/scripts/lib/execution-status.js +44 -0
  59. package/scripts/run-evals-test.js +157 -7
  60. package/scripts/run-evals.js +59 -12
  61. package/scripts/ui-demo-test.js +2 -2
  62. package/scripts/validate-artifact-paths-test.js +14 -0
  63. package/scripts/validate-artifact-paths.js +4 -2
  64. package/skills/i3-api-and-interface-design/SKILL.md +3 -1
  65. package/skills/i3-ci-cd-and-automation/SKILL.md +7 -4
  66. package/skills/i3-code-simplification/SKILL.md +3 -3
  67. package/skills/i3-constraint-driven-development/SKILL.md +4 -4
  68. package/skills/i3-constraint-driven-development/references/floor-guard.md +2 -2
  69. package/skills/i3-context-engineering/SKILL.md +1 -1
  70. package/skills/i3-debugging-and-error-recovery/SKILL.md +1 -1
  71. package/skills/i3-deprecation-and-migration/SKILL.md +6 -1
  72. package/skills/i3-documentation-and-adrs/SKILL.md +3 -2
  73. package/skills/i3-enterprise-sop/SKILL.md +37 -70
  74. package/skills/i3-enterprise-sop/references/engineering-skeleton/directory-standard.md +7 -7
  75. package/skills/i3-enterprise-sop/references/handoff.py +149 -120
  76. package/skills/i3-enterprise-sop/references/technical-baseline/baselines/enterprise-application-technical-baseline-v0-0-4.md +24 -24
  77. package/skills/i3-enterprise-sop/references/technical-baseline/templates/technical-baseline.md +8 -8
  78. package/skills/i3-enterprise-sop/references/templates/ad.md +31 -31
  79. package/skills/i3-enterprise-sop/references/templates/brd.md +6 -6
  80. package/skills/i3-enterprise-sop/references/templates/prd.md +37 -37
  81. package/skills/i3-enterprise-sop/references/templates/testcase.md +25 -25
  82. package/skills/i3-frontend-ui-engineering/SKILL.md +6 -10
  83. package/skills/i3-idea-refine/SKILL.md +4 -2
  84. package/skills/i3-incremental-implementation/SKILL.md +0 -4
  85. package/skills/i3-performance-optimization/SKILL.md +2 -2
  86. package/skills/i3-security-and-hardening/references/hardening-patterns.md +5 -0
  87. package/skills/i3-source-driven-development/SKILL.md +3 -2
  88. package/skills/i3-spec-driven-development/SKILL.md +1 -1
  89. package/skills/i3-ui-demo/SKILL.md +3 -1
  90. package/skills/i3-ui-demo/references/dependencies.md +1 -1
  91. package/skills/i3-ui-demo/references/resources.md +1 -1
  92. package/skills/i3-ui-demo/scripts/dependencies.cjs +0 -3
  93. package/skills/i3-using-agent-skills/SKILL.md +2 -2
  94. package/.claude/commands/i3-prototype.md +0 -23
  95. package/.gemini/commands/i3-prototype.toml +0 -23
  96. package/commands/i3-prototype.toml +0 -23
  97. package/evals/cases/i3-ui-prototype.json +0 -158
  98. package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.css +0 -3
  99. package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.js +0 -8
  100. package/evals/fixtures/i3-ui-prototype/admin-list/capability-definition.json +0 -67
  101. package/evals/fixtures/i3-ui-prototype/admin-list/index.html +0 -89
  102. package/evals/fixtures/i3-ui-prototype/admin-list/readme.md +0 -52
  103. package/evals/fixtures/i3-ui-prototype/admin-list/template.json +0 -8
  104. package/evals/fixtures/i3-ui-prototype/business-brief.md +0 -7
  105. package/evals/zh-CN/cases/i3-ui-prototype.json +0 -165
  106. package/hooks/PROTOTYPE.md +0 -31
  107. package/hooks/codebuddy-upstream.cjs +0 -93
  108. package/hooks/i3-prototype.cjs +0 -7
  109. package/hooks/manage.cjs +0 -169
  110. package/scripts/design-provider-discovery-test.js +0 -190
  111. package/scripts/design-provider-test.js +0 -75
  112. package/scripts/enterprise-template-test.js +0 -205
  113. package/scripts/lib/prototype-fixture.cjs +0 -17
  114. package/scripts/prototype-cache-test.js +0 -55
  115. package/scripts/prototype-generation-entry-test.js +0 -6
  116. package/scripts/prototype-generation-evidence-test.js +0 -10
  117. package/scripts/prototype-generation-native-test.js +0 -78
  118. package/scripts/prototype-generation-test.js +0 -99
  119. package/scripts/prototype-inventory-test.js +0 -43
  120. package/scripts/prototype-locations-test.js +0 -79
  121. package/scripts/prototype-project-test.js +0 -183
  122. package/scripts/template-adapter-test.js +0 -155
  123. package/scripts/ui-prototype-binding-recovery-test.js +0 -84
  124. package/scripts/ui-prototype-buddy-lifecycle-test.js +0 -102
  125. package/scripts/ui-prototype-codebuddy-hook-test.js +0 -112
  126. package/scripts/ui-prototype-content-test.js +0 -123
  127. package/scripts/ui-prototype-dependencies-test.js +0 -226
  128. package/scripts/ui-prototype-devtools-test.js +0 -53
  129. package/scripts/ui-prototype-execution-evidence-test.js +0 -62
  130. package/scripts/ui-prototype-execution-gates-test.js +0 -91
  131. package/scripts/ui-prototype-execution-policy-test.js +0 -53
  132. package/scripts/ui-prototype-execution-runtime-test.js +0 -27
  133. package/scripts/ui-prototype-ide-source-test.js +0 -73
  134. package/scripts/ui-prototype-native-test.js +0 -526
  135. package/scripts/ui-prototype-recovery-test.js +0 -81
  136. package/scripts/ui-prototype-registration-test.js +0 -53
  137. package/scripts/ui-prototype-template-test.js +0 -261
  138. package/scripts/ui-prototype-test.js +0 -124
  139. package/scripts/ui-prototype-transcript-auto-test.js +0 -67
  140. package/skills/i3-ui-prototype/SKILL.md +0 -256
  141. package/skills/i3-ui-prototype/assets/capabilities/generation.json +0 -833
  142. package/skills/i3-ui-prototype/assets/capabilities/management.json +0 -294
  143. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/acceptance.json +0 -51
  144. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/component-map.json +0 -13
  145. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/generation-component-map.json +0 -300
  146. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/index.html +0 -11
  147. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package-lock.json +0 -2298
  148. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package.json +0 -22
  149. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/public/prototype-config.json +0 -6
  150. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/App.vue +0 -136
  151. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/components/DeviceEditor.vue +0 -111
  152. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/config.ts +0 -19
  153. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/content.ts +0 -28
  154. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/devices.ts +0 -50
  155. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/theme.ts +0 -25
  156. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/main.ts +0 -18
  157. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/style.css +0 -50
  158. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/useDevices.ts +0 -66
  159. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/devices.test.ts +0 -44
  160. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/theme.test.ts +0 -26
  161. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tsconfig.json +0 -15
  162. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/vite.config.ts +0 -4
  163. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/profile.json +0 -174
  164. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/readme.md +0 -61
  165. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/index.html +0 -11
  166. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package-lock.json +0 -2298
  167. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package.json +0 -22
  168. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/public/prototype-config.json +0 -21
  169. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/App.vue +0 -62
  170. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/PrototypeShell.vue +0 -59
  171. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/config.ts +0 -23
  172. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/presentation.ts +0 -29
  173. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/theme.ts +0 -25
  174. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/main.ts +0 -18
  175. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/style.css +0 -26
  176. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/presentation.test.ts +0 -23
  177. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/theme.test.ts +0 -26
  178. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tsconfig.json +0 -15
  179. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/vite.config.ts +0 -4
  180. package/skills/i3-ui-prototype/assets/hosts/codebuddy/profile.json +0 -17
  181. package/skills/i3-ui-prototype/assets/optional-skills/host-targets.json +0 -739
  182. package/skills/i3-ui-prototype/assets/optional-skills/sources.json +0 -27
  183. package/skills/i3-ui-prototype/assets/templates/catalog.js +0 -149
  184. package/skills/i3-ui-prototype/assets/templates/catalog.json +0 -149
  185. package/skills/i3-ui-prototype/assets/templates/classic-admin/manifest.json +0 -9
  186. package/skills/i3-ui-prototype/assets/templates/classic-admin/preset.json +0 -6
  187. package/skills/i3-ui-prototype/assets/templates/common/app/app.mjs +0 -89
  188. package/skills/i3-ui-prototype/assets/templates/common/app/config.json +0 -1
  189. package/skills/i3-ui-prototype/assets/templates/common/app/domain.mjs +0 -20
  190. package/skills/i3-ui-prototype/assets/templates/common/app/index.html +0 -17
  191. package/skills/i3-ui-prototype/assets/templates/common/app/serve.cjs +0 -16
  192. package/skills/i3-ui-prototype/assets/templates/common/app/styles.css +0 -670
  193. package/skills/i3-ui-prototype/assets/templates/common/app/tokens.css +0 -19
  194. package/skills/i3-ui-prototype/assets/templates/common/design-system/master.md +0 -20
  195. package/skills/i3-ui-prototype/assets/templates/common/gallery.html +0 -2
  196. package/skills/i3-ui-prototype/assets/templates/common/mocks/applications.json +0 -5
  197. package/skills/i3-ui-prototype/assets/templates/common/requirements-map.json +0 -8
  198. package/skills/i3-ui-prototype/assets/templates/common/serve-gallery.cjs +0 -16
  199. package/skills/i3-ui-prototype/assets/templates/credits.md +0 -17
  200. package/skills/i3-ui-prototype/assets/templates/data-operations/manifest.json +0 -9
  201. package/skills/i3-ui-prototype/assets/templates/data-operations/preset.json +0 -6
  202. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/capability-definition.json +0 -294
  203. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/component-inventory.json +0 -707
  204. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/design-system.md +0 -32
  205. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/generation.json +0 -49
  206. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/index.html +0 -534
  207. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/manifest.json +0 -9
  208. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline-build.json +0 -265
  209. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline.js +0 -8888
  210. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/origin.json +0 -344
  211. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/preset.json +0 -928
  212. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/app.js +0 -22
  213. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/empty.svg +0 -1
  214. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/reference-styles.json +0 -1
  215. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-403.svg +0 -1
  216. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-404.svg +0 -1
  217. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets-manifest.json +0 -334
  218. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/baseline.json +0 -173
  219. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/conversion.md +0 -30
  220. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/credits.md +0 -17
  221. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/design-tokens.json +0 -881
  222. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/index.html +0 -28
  223. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +0 -9
  224. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +0 -22
  225. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +0 -21
  226. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/package.json +0 -12
  227. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/browser-routes.json +0 -298
  228. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/coverage.json +0 -180
  229. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/integrity.json +0 -13
  230. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/keyboard.json +0 -11
  231. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/responsive.json +0 -125
  232. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/review.md +0 -51
  233. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/rules.log +0 -150
  234. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
  235. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
  236. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
  237. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
  238. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
  239. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
  240. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
  241. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
  242. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/selection.json +0 -9
  243. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +0 -342
  244. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/readme.md +0 -73
  245. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/reference.md +0 -59
  246. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/routes.json +0 -178
  247. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/controls.js +0 -99
  248. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dialogs.js +0 -54
  249. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dom.js +0 -264
  250. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/forms.js +0 -47
  251. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/icons.js +0 -41
  252. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/layout.js +0 -47
  253. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/router.js +0 -63
  254. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/state.js +0 -90
  255. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/table.js +0 -41
  256. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/widgets.js +0 -8
  257. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +0 -3
  258. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +0 -36
  259. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +0 -2
  260. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +0 -51
  261. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +0 -3
  262. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +0 -48
  263. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +0 -2
  264. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +0 -6
  265. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +0 -2
  266. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +0 -13
  267. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/data.js +0 -24
  268. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/domain.js +0 -32
  269. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/registry.js +0 -25
  270. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/store.js +0 -85
  271. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +0 -2
  272. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +0 -17
  273. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +0 -2
  274. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +0 -66
  275. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +0 -3
  276. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +0 -38
  277. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +0 -2
  278. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +0 -66
  279. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +0 -2
  280. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +0 -5
  281. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +0 -2
  282. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +0 -12
  283. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +0 -2
  284. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +0 -11
  285. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +0 -2
  286. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +0 -116
  287. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +0 -2
  288. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +0 -32
  289. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +0 -2
  290. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +0 -49
  291. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +0 -2
  292. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +0 -10
  293. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +0 -2
  294. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +0 -77
  295. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/data.js +0 -60
  296. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/domain.js +0 -105
  297. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/store.js +0 -212
  298. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +0 -2
  299. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +0 -18
  300. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +0 -2
  301. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +0 -23
  302. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +0 -2
  303. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +0 -78
  304. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +0 -2
  305. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +0 -55
  306. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +0 -2
  307. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +0 -26
  308. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +0 -2
  309. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +0 -38
  310. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +0 -2
  311. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +0 -7
  312. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +0 -2
  313. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +0 -72
  314. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +0 -2
  315. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +0 -46
  316. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +0 -2
  317. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +0 -52
  318. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.html +0 -2
  319. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.js +0 -19
  320. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +0 -2
  321. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +0 -30
  322. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/data.js +0 -48
  323. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/domain.js +0 -39
  324. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/store.js +0 -129
  325. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +0 -4
  326. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +0 -21
  327. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +0 -2
  328. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +0 -8
  329. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +0 -2
  330. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +0 -37
  331. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +0 -2
  332. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +0 -10
  333. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +0 -2
  334. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +0 -37
  335. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +0 -2
  336. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +0 -49
  337. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +0 -4
  338. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +0 -22
  339. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +0 -2
  340. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +0 -9
  341. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/commands.js +0 -82
  342. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/examples.js +0 -47
  343. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/model.js +0 -61
  344. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/repair.js +0 -68
  345. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/store.js +0 -55
  346. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/types.js +0 -1
  347. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/workbench.js +0 -18
  348. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +0 -3
  349. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +0 -28
  350. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +0 -2
  351. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +0 -18
  352. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +0 -2
  353. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +0 -31
  354. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +0 -2
  355. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +0 -27
  356. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +0 -2
  357. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +0 -16
  358. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +0 -2
  359. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +0 -43
  360. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +0 -4
  361. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +0 -34
  362. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +0 -2
  363. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +0 -30
  364. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +0 -3
  365. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +0 -67
  366. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +0 -2
  367. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +0 -41
  368. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +0 -2
  369. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +0 -31
  370. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +0 -2
  371. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +0 -26
  372. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +0 -2
  373. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +0 -70
  374. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/data.js +0 -8
  375. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/domain.js +0 -62
  376. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/management.js +0 -36
  377. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +0 -49
  378. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/store.js +0 -132
  379. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +0 -2
  380. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +0 -38
  381. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +0 -2
  382. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +0 -11
  383. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +0 -2
  384. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +0 -45
  385. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +0 -2
  386. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +0 -54
  387. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +0 -3
  388. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +0 -27
  389. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +0 -2
  390. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +0 -12
  391. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +0 -2
  392. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +0 -45
  393. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +0 -3
  394. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +0 -38
  395. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/domain.js +0 -61
  396. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/state.js +0 -51
  397. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/store.js +0 -116
  398. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +0 -2
  399. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +0 -45
  400. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +0 -4
  401. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +0 -30
  402. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +0 -2
  403. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +0 -67
  404. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +0 -2
  405. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +0 -5
  406. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +0 -4
  407. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +0 -60
  408. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/commands.js +0 -157
  409. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/model.js +0 -136
  410. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/store.js +0 -76
  411. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +0 -3
  412. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +0 -26
  413. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +0 -2
  414. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +0 -14
  415. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +0 -2
  416. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +0 -113
  417. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +0 -3
  418. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +0 -62
  419. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/commands.js +0 -97
  420. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/model.js +0 -147
  421. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/store.js +0 -13
  422. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +0 -2
  423. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +0 -9
  424. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +0 -2
  425. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +0 -8
  426. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +0 -2
  427. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +0 -37
  428. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +0 -2
  429. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +0 -8
  430. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +0 -2
  431. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +0 -17
  432. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/columns.js +0 -32
  433. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +0 -49
  434. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +0 -12
  435. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +0 -15
  436. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +0 -37
  437. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/policy.js +0 -68
  438. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/session.js +0 -44
  439. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +0 -2
  440. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +0 -25
  441. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +0 -2
  442. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +0 -53
  443. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +0 -10
  444. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +0 -30
  445. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +0 -2
  446. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +0 -10
  447. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +0 -2
  448. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +0 -9
  449. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +0 -3
  450. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/navigation.js +0 -19
  451. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +0 -2
  452. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +0 -8
  453. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +0 -2
  454. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +0 -32
  455. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +0 -2
  456. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +0 -15
  457. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +0 -2
  458. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +0 -11
  459. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +0 -2
  460. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +0 -57
  461. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +0 -2
  462. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +0 -37
  463. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/data.js +0 -20
  464. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/domain.js +0 -55
  465. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/store.js +0 -151
  466. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +0 -3
  467. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +0 -18
  468. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +0 -2
  469. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +0 -40
  470. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +0 -2
  471. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +0 -51
  472. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +0 -2
  473. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +0 -9
  474. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +0 -5
  475. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +0 -48
  476. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/domain.js +0 -204
  477. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +0 -22
  478. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/registry.js +0 -135
  479. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/store.js +0 -137
  480. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +0 -3
  481. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +0 -36
  482. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/model.js +0 -56
  483. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/store.js +0 -15
  484. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +0 -2
  485. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +0 -27
  486. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +0 -4
  487. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +0 -31
  488. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +0 -2
  489. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +0 -68
  490. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +0 -5
  491. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +0 -55
  492. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/data.js +0 -16
  493. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/domain.js +0 -83
  494. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/registry.js +0 -18
  495. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/store.js +0 -61
  496. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/admin.css +0 -60
  497. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/agents.css +0 -46
  498. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/antdv.css +0 -295
  499. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/app.css +0 -102
  500. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/delivery.css +0 -4
  501. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/intents.css +0 -37
  502. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/native.css +0 -22
  503. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/operations.css +0 -2
  504. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pbc.css +0 -3
  505. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/permissions.css +0 -22
  506. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pro.css +0 -1
  507. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/releases.css +0 -4
  508. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reset.css +0 -246
  509. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reviews.css +0 -8
  510. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tasks.css +0 -6
  511. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tokens.css +0 -15
  512. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workbench.css +0 -61
  513. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workflows.css +0 -1
  514. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +0 -96
  515. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/agents.test.js +0 -14
  516. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +0 -37
  517. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +0 -44
  518. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +0 -19
  519. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +0 -14
  520. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operations.test.js +0 -25
  521. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +0 -17
  522. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +0 -24
  523. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +0 -23
  524. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permissions.test.js +0 -24
  525. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/releases.test.js +0 -50
  526. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/reviews.test.js +0 -36
  527. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +0 -28
  528. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +0 -42
  529. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +0 -16
  530. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +0 -11
  531. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/tasks.test.js +0 -27
  532. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workbench.test.js +0 -34
  533. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workflows.test.js +0 -16
  534. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/convert.mjs +0 -168
  535. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/serve.mjs +0 -7
  536. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/styles.mjs +0 -11
  537. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/verify.mjs +0 -24
  538. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/serve.cjs +0 -16
  539. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template-inventory.json +0 -28791
  540. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template.json +0 -9
  541. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/usability.css +0 -44
  542. package/skills/i3-ui-prototype/assets/templates/gallery/index.html +0 -40
  543. package/skills/i3-ui-prototype/assets/templates/generation-options.js +0 -42
  544. package/skills/i3-ui-prototype/assets/templates/index.html +0 -3
  545. package/skills/i3-ui-prototype/assets/templates/modern-workspace/manifest.json +0 -9
  546. package/skills/i3-ui-prototype/assets/templates/modern-workspace/preset.json +0 -6
  547. package/skills/i3-ui-prototype/assets/templates/presentation.html +0 -17
  548. package/skills/i3-ui-prototype/assets/templates/serve-gallery.cjs +0 -23
  549. package/skills/i3-ui-prototype/references/artifact-contract.md +0 -66
  550. package/skills/i3-ui-prototype/references/content-template.md +0 -81
  551. package/skills/i3-ui-prototype/references/enterprise-admin.md +0 -44
  552. package/skills/i3-ui-prototype/references/entry-contract.md +0 -71
  553. package/skills/i3-ui-prototype/references/execution-evidence.md +0 -51
  554. package/skills/i3-ui-prototype/references/expert-adapter.md +0 -76
  555. package/skills/i3-ui-prototype/references/framework-contract.md +0 -76
  556. package/skills/i3-ui-prototype/references/generation-contract.md +0 -122
  557. package/skills/i3-ui-prototype/references/interaction-acceptance.md +0 -169
  558. package/skills/i3-ui-prototype/references/legacy-native.md +0 -58
  559. package/skills/i3-ui-prototype/references/optional-skills.md +0 -63
  560. package/skills/i3-ui-prototype/references/project-layout.md +0 -92
  561. package/skills/i3-ui-prototype/references/template-adapters.md +0 -63
  562. package/skills/i3-ui-prototype/references/workflow-contract.md +0 -77
  563. package/skills/i3-ui-prototype/scripts/adapters/easel-html.cjs +0 -30
  564. package/skills/i3-ui-prototype/scripts/adapters/legacy-html.cjs +0 -28
  565. package/skills/i3-ui-prototype/scripts/browser-workspace.cjs +0 -72
  566. package/skills/i3-ui-prototype/scripts/buddy-host.cjs +0 -40
  567. package/skills/i3-ui-prototype/scripts/check-design-provider.cjs +0 -9
  568. package/skills/i3-ui-prototype/scripts/check-prototype.cjs +0 -14
  569. package/skills/i3-ui-prototype/scripts/codebuddy-context.cjs +0 -92
  570. package/skills/i3-ui-prototype/scripts/codebuddy-hook.cjs +0 -298
  571. package/skills/i3-ui-prototype/scripts/codebuddy-ide-source.cjs +0 -69
  572. package/skills/i3-ui-prototype/scripts/codebuddy-registration.cjs +0 -125
  573. package/skills/i3-ui-prototype/scripts/content-template.cjs +0 -98
  574. package/skills/i3-ui-prototype/scripts/design-provider-discovery.cjs +0 -128
  575. package/skills/i3-ui-prototype/scripts/enterprise-template.cjs +0 -104
  576. package/skills/i3-ui-prototype/scripts/execution-assertions.cjs +0 -43
  577. package/skills/i3-ui-prototype/scripts/execution-diagnostics.cjs +0 -91
  578. package/skills/i3-ui-prototype/scripts/execution-evidence.cjs +0 -177
  579. package/skills/i3-ui-prototype/scripts/execution-gates.cjs +0 -216
  580. package/skills/i3-ui-prototype/scripts/execution-policy.cjs +0 -62
  581. package/skills/i3-ui-prototype/scripts/execution-recovery.cjs +0 -58
  582. package/skills/i3-ui-prototype/scripts/execution-runtime.cjs +0 -69
  583. package/skills/i3-ui-prototype/scripts/generation-assets.cjs +0 -18
  584. package/skills/i3-ui-prototype/scripts/generation-contract.cjs +0 -214
  585. package/skills/i3-ui-prototype/scripts/generation-evidence.cjs +0 -50
  586. package/skills/i3-ui-prototype/scripts/generation-replan.cjs +0 -34
  587. package/skills/i3-ui-prototype/scripts/hosts/codebuddy.cjs +0 -21
  588. package/skills/i3-ui-prototype/scripts/init-prototype.cjs +0 -8
  589. package/skills/i3-ui-prototype/scripts/manage-baseline.cjs +0 -11
  590. package/skills/i3-ui-prototype/scripts/native-browser.cjs +0 -785
  591. package/skills/i3-ui-prototype/scripts/native-build.cjs +0 -91
  592. package/skills/i3-ui-prototype/scripts/native-command.cjs +0 -35
  593. package/skills/i3-ui-prototype/scripts/native-delivery.cjs +0 -104
  594. package/skills/i3-ui-prototype/scripts/native-devtools.cjs +0 -92
  595. package/skills/i3-ui-prototype/scripts/native-files.cjs +0 -44
  596. package/skills/i3-ui-prototype/scripts/native-pilot-lib.cjs +0 -290
  597. package/skills/i3-ui-prototype/scripts/native-pilot.cjs +0 -59
  598. package/skills/i3-ui-prototype/scripts/native-tool-name.cjs +0 -5
  599. package/skills/i3-ui-prototype/scripts/native-tool-result.cjs +0 -14
  600. package/skills/i3-ui-prototype/scripts/optional-skill-install.cjs +0 -203
  601. package/skills/i3-ui-prototype/scripts/project-registry.cjs +0 -126
  602. package/skills/i3-ui-prototype/scripts/prototype-dependencies.cjs +0 -103
  603. package/skills/i3-ui-prototype/scripts/prototype-hooks.cjs +0 -94
  604. package/skills/i3-ui-prototype/scripts/prototype-lib.cjs +0 -277
  605. package/skills/i3-ui-prototype/scripts/prototype-locations.cjs +0 -69
  606. package/skills/i3-ui-prototype/scripts/ptc-callbacks.cjs +0 -131
  607. package/skills/i3-ui-prototype/scripts/sync-template.cjs +0 -19
  608. package/skills/i3-ui-prototype/scripts/template-adapters.cjs +0 -89
  609. package/skills/i3-ui-prototype/scripts/template-contract.cjs +0 -407
  610. package/skills/i3-ui-prototype/scripts/template-inventory.cjs +0 -78
  611. package/skills/i3-ui-prototype/scripts/validate-result.cjs +0 -117
@@ -1,79 +0,0 @@
1
- 'use strict';
2
- const test = require('node:test');
3
- const assert = require('node:assert/strict');
4
- const fs = require('node:fs');
5
- const path = require('node:path');
6
- const os = require('node:os');
7
- const installation = path.join(__dirname, 'lib/installation.js');
8
- const skills = fs.existsSync(installation) ? require(installation).loadInstallation().skillsDirectory : path.resolve(__dirname, '../skills');
9
- const locations = require(path.join(skills, 'i3-ui-prototype/scripts/prototype-locations.cjs'));
10
- function workspace(t) {
11
- const root = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'i3-tool-locations-')));
12
- t.after(() => fs.rmSync(root, { recursive: true, force: true }));
13
- const project = path.join(root, 'business'), home = path.join(root, 'home');
14
- fs.mkdirSync(project); fs.mkdirSync(home);
15
- return { project, home, env: {} };
16
- }
17
- test('all registered project and global targets keep tools under their host base without writes', t => {
18
- const options = workspace(t);
19
- for (const agent of locations.registry.agents) {
20
- const local = locations.resolveLocations({ ...options, host: agent.id });
21
- assert.equal(local.skillsDirectory, path.resolve(options.project, agent.projectSkillsDir));
22
- const toolBase = path.dirname(local.skillsDirectory) === options.project ? path.join(options.project, `.${agent.id}`) : path.dirname(local.skillsDirectory);
23
- assert.equal(local.toolsDirectory, path.join(toolBase, 'tools/i3-prototype'));
24
- assert.notEqual(local.toolsDirectory, path.join(options.project, 'tools/i3-prototype'));
25
- assert.equal(local.cacheDirectory, path.join(toolBase, 'cache/i3-prototype'));
26
- if (agent.globalSkillsDir) {
27
- const global = locations.resolveLocations({ ...options, host: agent.id, scope: 'global' });
28
- assert.equal(global.toolsDirectory, path.join(path.dirname(global.skillsDirectory), 'tools/i3-prototype'));
29
- assert.ok(global.base.startsWith(options.home + path.sep));
30
- assert.equal(global.cacheDirectory, path.join(global.base, 'cache/i3-prototype', global.projectKey));
31
- } else assert.throws(() => locations.resolveLocations({ ...options, host: agent.id, scope: 'global' }), /project installation only/);
32
- }
33
- assert.deepEqual(fs.readdirSync(options.project), []);
34
- assert.deepEqual(fs.readdirSync(options.home), []);
35
- });
36
- test('global caches distinguish same-name projects while path resolution remains read-only', t => {
37
- const options = workspace(t), other = path.join(options.home, 'business'); fs.mkdirSync(other);
38
- const first = locations.resolveLocations({ ...options, host: 'codebuddy', scope: 'global' });
39
- const second = locations.resolveLocations({ ...options, project: other, host: 'codebuddy', scope: 'global' });
40
- assert.notEqual(first.projectKey, second.projectKey);
41
- assert.notEqual(first.cacheDirectory, second.cacheDirectory);
42
- assert.deepEqual(fs.readdirSync(options.project), []);
43
- assert.equal(fs.existsSync(path.join(options.home, '.codebuddy')), false);
44
- });
45
- test('CLI path output distinguishes installation scope from the preparation scope file without writes', async t => {
46
- const options = workspace(t), cli = require(path.join(skills, 'i3-ui-prototype/scripts/native-pilot.cjs'));
47
- for (const scope of ['project', 'global']) {
48
- const result = await cli.main(['paths', '--project', options.project, '--home', options.home, '--host', 'codebuddy', '--scope', scope, '--id', 'assets']);
49
- assert.equal(result.scope, scope);
50
- assert.equal(result.scopeFile, path.join(options.project, 'prototypes/.preparation/assets/scope.json'));
51
- }
52
- assert.deepEqual(fs.readdirSync(options.project), []);
53
- assert.deepEqual(fs.readdirSync(options.home), []);
54
- });
55
- test('CodeBuddy and WorkBuddy share project tools but use separate global roots; Codex follows agents', t => {
56
- const options = workspace(t), get = (host, scope = 'project') => locations.resolveLocations({ ...options, host, scope });
57
- assert.equal(get('codebuddy').toolsDirectory, get('workbuddy').toolsDirectory);
58
- assert.notEqual(get('codebuddy', 'global').toolsDirectory, get('workbuddy', 'global').toolsDirectory);
59
- assert.equal(get('codex').base, path.join(options.project, '.agents'));
60
- assert.equal(get('codex', 'global').base, path.join(options.home, '.agents'));
61
- });
62
- test('configuration roots and aliases follow installer mapping and explicit global checks exclude business paths', t => {
63
- const options = workspace(t);
64
- const context = locations.resolveLocations({ ...options, host: 'claude', scope: 'global', env: { CLAUDE_CONFIG_DIR: path.join(options.home, 'custom claude') } });
65
- assert.equal(context.base, path.join(options.home, 'custom claude'));
66
- assert.equal(context.host, 'claude-code');
67
- const opencode = locations.resolveLocations({ ...options, host: 'opencode', env: { XDG_CONFIG_HOME: path.join(options.home, 'config') }, scope: 'global' });
68
- assert.equal(opencode.base, path.join(options.home, 'config/opencode'));
69
- assert.ok(locations.toolCandidates(context).every(item => !item.root.startsWith(options.project + path.sep)));
70
- assert.throws(() => locations.resolveLocations({ ...options, host: 'unknown' }), /Unknown host/);
71
- assert.throws(() => locations.resolveLocations({ ...options, scope: 'all' }), /scope/);
72
- });
73
- test('new project and global tools precede both legacy layouts', t => {
74
- const options = workspace(t), context = locations.resolveLocations({ ...options, host: 'codex' });
75
- const paths = locations.toolCandidates(context);
76
- assert.deepEqual(paths.map(item => item.source), ['project-tool', 'global-tool', 'legacy-project-tool', 'legacy-project-tool']);
77
- assert.ok(paths[0].root.includes('/.agents/tools/i3-prototype/antdv-cli/'));
78
- assert.ok(paths.at(-1).root.includes('/.prototype-tools/node_modules/'));
79
- });
@@ -1,183 +0,0 @@
1
- 'use strict';
2
- const test = require('node:test');
3
- const assert = require('node:assert/strict');
4
- const fs = require('node:fs');
5
- const os = require('node:os');
6
- const path = require('node:path');
7
- const installation = path.join(__dirname, 'lib/installation.js');
8
- const skills = fs.existsSync(installation) ? require(installation).loadInstallation().skillsDirectory : path.resolve(__dirname, '../skills');
9
- const scripts = path.join(skills, 'i3-ui-prototype/scripts');
10
- const native = require(path.join(scripts, 'native-pilot-lib.cjs'));
11
- const registry = require(path.join(scripts, 'project-registry.cjs'));
12
- const read = file => JSON.parse(fs.readFileSync(file, 'utf8'));
13
- function fixture(t) {
14
- const project = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'i3-project-')));
15
- t.after(() => fs.rmSync(project, { recursive: true, force: true }));
16
- const scope = { schemaVersion: 2, moduleIds: ['asset-management', 'work-orders', 'asset-management'], title: '资产原型',
17
- pages: [{ id: 'assets', title: '资产台账', referencePage: 'models-page', regions: [{ id: 'list', mode: 'management-list' }] }],
18
- requirements: [{ id: 'ASSET-01', text: '查询、多选、分页和批量状态变更', pages: ['assets'], source: { type: 'prd', reference: 'PRD-assets-v1.2#ASSET-01', statement: 'Isolated fixture with explicitly named project modules.' } }], exemptions: [] };
19
- const file = path.join(project, 'scope.json');
20
- const create = (id = 'assets') => { fs.writeFileSync(file, JSON.stringify(scope)); return native.createPrototype({ project, id, scope: file, expertMode: 'template' }); };
21
- return { project, scope, create };
22
- }
23
- test('new prototypes use one shared nested index and derive module associations from fixed scope', t => {
24
- const { project, scope, create } = fixture(t), created = create();
25
- const index = read(path.join(project, 'prototypes/index.json'));
26
- assert.deepEqual(index.prototypes[0].appliesTo, ['asset-management', 'work-orders']);
27
- assert.equal(index.prototypes[0].directory, 'prototypes/assets');
28
- assert.deepEqual(read(path.join(created.directory, 'inputs/scope.json')), scope);
29
- for (const name of ['.i3-ui-prototypes.json', '.i3-ui-prototypes.lock', '.prototype-preparation', '.playwright-cli', 'ui-templates']) assert.equal(fs.existsSync(path.join(project, name)), false, name);
30
- assert.equal(fs.existsSync(path.join(project, 'prototypes/.index.lock')), false);
31
- });
32
- test('scope module validation rejects invented paths and malformed declarations before any output', t => {
33
- const { project, scope, create } = fixture(t);
34
- for (const value of [undefined, null, 'assets', [null], ['../assets'], ['src/assets'], ['*'], [''], ['asset management']]) {
35
- scope.moduleIds = value;
36
- assert.throws(() => create(), /moduleIds|module identifier/i);
37
- assert.equal(fs.existsSync(path.join(project, 'prototypes')), false);
38
- }
39
- scope.moduleIds = [];
40
- create();
41
- assert.deepEqual(registry.query({ project, module: 'asset-management' }).matches, []);
42
- assert.deepEqual(registry.query({ project }).unbound.map(entry => entry.id), ['assets']);
43
- });
44
- test('index lookup is read-only, detects overlapping prototypes and never treats unbound as global', t => {
45
- const { project, scope, create } = fixture(t);
46
- assert.equal(registry.query({ project }).prototypes.length, 0);
47
- assert.deepEqual(fs.readdirSync(project), []);
48
- create('first'); create('second');
49
- const result = registry.query({ project, module: 'asset-management' });
50
- assert.equal(result.selection, 'ambiguous');
51
- assert.deepEqual(result.matches.map(entry => entry.id), ['first', 'second']);
52
- scope.moduleIds = []; create('exploration');
53
- assert.equal(registry.query({ project, module: 'work-orders' }).matches.length, 2);
54
- assert.equal(registry.query({ project, module: 'other' }).matches.length, 0);
55
- });
56
- test('a legacy-only project keeps one active index until explicitly migrated and preserves its instances', t => {
57
- const { project, create } = fixture(t), first = create('old');
58
- const before = native.manifest(first.directory);
59
- fs.renameSync(path.join(project, 'prototypes/index.json'), path.join(project, '.i3-ui-prototypes.json'));
60
- create('new');
61
- assert.equal(fs.existsSync(path.join(project, 'prototypes/index.json')), false);
62
- assert.equal(registry.query({ project }).legacy, true);
63
- assert.equal(read(path.join(project, '.i3-ui-prototypes.json')).prototypes.length, 2);
64
- assert.deepEqual(native.manifest(first.directory), before);
65
- });
66
- test('conflicting indices and an old active writer block creation without overwriting user content', t => {
67
- const { project, create } = fixture(t); create('first');
68
- const before = fs.readFileSync(path.join(project, 'prototypes/index.json'));
69
- fs.writeFileSync(path.join(project, '.i3-ui-prototypes.json'), JSON.stringify({ schemaVersion: 1, prototypes: [] }));
70
- assert.throws(() => create('second'), /conflict|indices/i);
71
- assert.equal(fs.existsSync(path.join(project, 'prototypes/second')), false);
72
- assert.deepEqual(fs.readFileSync(path.join(project, 'prototypes/index.json')), before);
73
- fs.unlinkSync(path.join(project, '.i3-ui-prototypes.json'));
74
- fs.writeFileSync(path.join(project, '.i3-ui-prototypes.lock'), 'existing writer');
75
- assert.throws(() => create('second'), /lock|writer/i);
76
- assert.equal(fs.readFileSync(path.join(project, '.i3-ui-prototypes.lock'), 'utf8'), 'existing writer');
77
- });
78
- test('failed atomic index publication removes only the newly created prototype', t => {
79
- const { project, create } = fixture(t); create('first');
80
- const original = fs.readFileSync(path.join(project, 'prototypes/index.json'));
81
- const rename = fs.renameSync;
82
- fs.renameSync = (from, to) => { if (to === path.join(project, 'prototypes/index.json')) throw new Error('fixture index write failed'); return rename(from, to); };
83
- try { assert.throws(() => create('second'), /fixture index write failed/); } finally { fs.renameSync = rename; }
84
- assert.deepEqual(fs.readFileSync(path.join(project, 'prototypes/index.json')), original);
85
- assert.equal(fs.existsSync(path.join(project, 'prototypes/second')), false);
86
- assert.deepEqual(fs.readdirSync(path.join(project, 'prototypes')).sort(), ['first', 'index.json']);
87
- });
88
- test('old scope contracts remain valid and legacy HTML creation also uses the shared index', t => {
89
- const { project, scope, create } = fixture(t);
90
- scope.schemaVersion = 1; delete scope.moduleIds;
91
- const first = create();
92
- assert.equal(native.inspect(first.directory).status, 'passed');
93
- assert.deepEqual(registry.query({ project }).unbound.map(entry => entry.id), ['assets']);
94
- const legacy = require(path.join(scripts, 'prototype-lib.cjs'));
95
- const html = legacy.initPrototype({ project, id: 'html', template: 'classic-admin', expertMode: 'template' });
96
- assert.equal(legacy.checkPrototype(html.directory).status, 'passed');
97
- assert.equal(registry.query({ project }).prototypes.length, 2);
98
- assert.equal(fs.existsSync(path.join(project, '.i3-ui-prototypes.json')), false);
99
- });
100
- test('legacy human module labels remain searchable without rewriting their old scope', t => {
101
- const { project, scope, create } = fixture(t); scope.schemaVersion = 1; delete scope.moduleIds;
102
- const directory = create().directory, before = native.manifest(directory), file = path.join(project, 'prototypes/index.json'), index = read(file);
103
- index.prototypes[0].appliesTo = ['资产管理']; fs.writeFileSync(file, JSON.stringify(index));
104
- assert.equal(registry.query({ project, module: '资产管理' }).matches[0].id, 'assets');
105
- assert.deepEqual(native.manifest(directory), before);
106
- });
107
- test('explicitly accepting a revised scope updates the index and invalid associations cannot be selected', t => {
108
- const { project, create } = fixture(t), directory = create().directory;
109
- const scopeFile = path.join(directory, 'inputs/scope.json'), scope = read(scopeFile);
110
- scope.moduleIds = ['maintenance']; fs.writeFileSync(scopeFile, JSON.stringify(scope));
111
- assert.equal(registry.query({ project, module: 'asset-management' }).status, 'failed');
112
- assert.deepEqual(registry.query({ project, module: 'asset-management' }).matches, []);
113
- const candidate = native.manifest(directory);
114
- native.revise(directory, { revision: 'r002', expectedRevision: candidate.revision, expectedDigest: candidate.digest, acceptInputs: true });
115
- assert.deepEqual(read(path.join(project, 'prototypes/index.json')).prototypes[0].appliesTo, ['maintenance']);
116
- assert.equal(registry.query({ project, module: 'maintenance' }).selection, 'matched');
117
- assert.equal(native.inspect(directory).status, 'passed');
118
- });
119
- test('synchronizing the index uses fixed accepted inputs and leaves the candidate unchanged', t => {
120
- const { project, create } = fixture(t), directory = create().directory, before = native.manifest(directory);
121
- const indexFile = path.join(project, 'prototypes/index.json'), index = read(indexFile);
122
- index.prototypes[0].appliesTo = ['invented']; fs.writeFileSync(indexFile, JSON.stringify(index));
123
- assert.equal(registry.query({ project, module: 'invented' }).status, 'failed');
124
- const rename = fs.renameSync; let instanceLocked = false;
125
- fs.renameSync = (from, to) => { if (to === indexFile) instanceLocked = fs.existsSync(path.join(directory, '.prototype-write.lock')); return rename(from, to); };
126
- try { assert.equal(native.synchronizeIndex({ project, id: 'assets' }).status, 'synchronized'); } finally { fs.renameSync = rename; }
127
- assert.equal(instanceLocked, true, 'Synchronization must lock the candidate while reading its fixed inputs');
128
- assert.deepEqual(native.manifest(directory), before);
129
- assert.equal(registry.query({ project, module: 'invented' }).matches.length, 0);
130
- assert.equal(registry.query({ project, module: 'asset-management' }).matches.length, 1);
131
- const scope = read(path.join(directory, 'inputs/scope.json')); scope.moduleIds = ['pending'];
132
- fs.writeFileSync(path.join(directory, 'inputs/scope.json'), JSON.stringify(scope));
133
- assert.throws(() => native.synchronizeIndex({ project, id: 'assets' }), /input|contract|合同/i);
134
- });
135
- test('an index failure while revising restores prototype metadata and preserves the previous registry', t => {
136
- const { project, create } = fixture(t), directory = create().directory;
137
- const metadataFile = path.join(directory, 'prototype.json'), before = fs.readFileSync(metadataFile);
138
- const indexFile = path.join(project, 'prototypes/index.json'), indexBefore = fs.readFileSync(indexFile);
139
- const scopeFile = path.join(directory, 'inputs/scope.json'), scope = read(scopeFile); scope.moduleIds = ['maintenance']; fs.writeFileSync(scopeFile, JSON.stringify(scope));
140
- const candidate = native.manifest(directory), rename = fs.renameSync;
141
- fs.renameSync = (from, to) => { if (to === indexFile) throw new Error('fixture revise index failure'); return rename(from, to); };
142
- try { assert.throws(() => native.revise(directory, { revision: 'r002', expectedRevision: candidate.revision, expectedDigest: candidate.digest, acceptInputs: true }), /fixture revise index failure/); }
143
- finally { fs.renameSync = rename; }
144
- assert.deepEqual(fs.readFileSync(metadataFile), before);
145
- assert.deepEqual(fs.readFileSync(indexFile), indexBefore);
146
- });
147
- test('legacy index migration previews without writes, archives source bytes and preserves prototype identity', t => {
148
- const { project, create } = fixture(t), directory = create().directory, candidate = native.manifest(directory);
149
- const current = path.join(project, 'prototypes/index.json'), old = path.join(project, '.i3-ui-prototypes.json');
150
- fs.renameSync(current, old); const bytes = fs.readFileSync(old), before = fs.readdirSync(path.join(project, 'prototypes'));
151
- const preview = registry.migrate({ project, check: true });
152
- assert.equal(preview.status, 'migration-preview');
153
- assert.equal(fs.existsSync(current), false);
154
- assert.deepEqual(fs.readdirSync(path.join(project, 'prototypes')), before);
155
- const result = registry.migrate({ project });
156
- assert.equal(result.status, 'migrated');
157
- assert.deepEqual(fs.readFileSync(result.backup), bytes);
158
- assert.deepEqual(fs.readFileSync(current), bytes);
159
- assert.equal(fs.existsSync(old), false);
160
- assert.deepEqual(native.manifest(directory), candidate);
161
- assert.equal(registry.migrate({ project }).status, 'current');
162
- });
163
- test('failed migration rolls back its new index and retains original source and user files', t => {
164
- const { project, create } = fixture(t); create();
165
- const current = path.join(project, 'prototypes/index.json'), old = path.join(project, '.i3-ui-prototypes.json');
166
- fs.renameSync(current, old); const bytes = fs.readFileSync(old);
167
- fs.writeFileSync(path.join(project, 'user.md'), 'keep user content');
168
- const unlink = fs.unlinkSync;
169
- fs.unlinkSync = file => { if (file === old) throw new Error('fixture old source cannot be removed'); return unlink(file); };
170
- try { assert.throws(() => registry.migrate({ project }), /fixture old source/); } finally { fs.unlinkSync = unlink; }
171
- assert.deepEqual(fs.readFileSync(old), bytes);
172
- assert.equal(fs.existsSync(current), false);
173
- assert.equal(fs.readFileSync(path.join(project, 'user.md'), 'utf8'), 'keep user content');
174
- assert.equal(fs.existsSync(path.join(project, 'prototypes/.index.lock')), false);
175
- assert.equal(fs.existsSync(path.join(project, '.i3-ui-prototypes.lock')), false);
176
- });
177
- test('migration refuses divergent duplicate indices rather than picking a winner', t => {
178
- const { project, create } = fixture(t); create();
179
- const current = path.join(project, 'prototypes/index.json'), bytes = fs.readFileSync(current);
180
- fs.writeFileSync(path.join(project, '.i3-ui-prototypes.json'), '{"schemaVersion":1,"prototypes":[]}');
181
- assert.throws(() => registry.migrate({ project }), /conflict|indices/i);
182
- assert.deepEqual(fs.readFileSync(current), bytes);
183
- });
@@ -1,155 +0,0 @@
1
- 'use strict';
2
- const test = require('node:test');
3
- const assert = require('node:assert/strict');
4
- const fs = require('node:fs');
5
- const os = require('node:os');
6
- const path = require('node:path');
7
- const crypto = require('node:crypto');
8
- const installation = path.join(__dirname, 'lib/installation.js');
9
- const skills = fs.existsSync(installation) ? require(installation).loadInstallation().skillsDirectory : path.resolve(__dirname, '../skills');
10
- const skill = path.join(skills, 'i3-ui-prototype');
11
- const lib = require(path.join(skill, 'scripts/prototype-lib.cjs'));
12
- const { createTemplateRegistry } = require(path.join(skill, 'scripts/template-adapters.cjs'));
13
- const read = (root, file) => JSON.parse(fs.readFileSync(path.join(root, file), 'utf8'));
14
- function write(root, file, value) {
15
- fs.mkdirSync(path.dirname(path.join(root, file)), { recursive: true });
16
- fs.writeFileSync(path.join(root, file), typeof value === 'string' ? value : JSON.stringify(value, null, 2));
17
- }
18
- function fixture(t) {
19
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'template-adapter-'));
20
- t.after(() => fs.rmSync(root, { recursive: true, force: true }));
21
- const assets = path.join(root, 'assets'), project = path.join(root, 'project');
22
- fs.mkdirSync(project);
23
- write(assets, 'catalog.json', { schemaVersion: 2, defaultTemplate: 'independent-demo', templates: [
24
- { id: 'independent-demo', name: 'Independent test fixture', version: '1.0.0', availability: 'available', manifest: 'independent-demo/manifest.json' },
25
- { id: 'not-built', name: 'Planned fixture', version: null, availability: 'planned' },
26
- ], legacyTemplates: [] });
27
- write(assets, 'independent-demo/manifest.json', { schemaVersion: 1, adapter: 'independent-test', preset: 'independent-demo/preset.json', resources: { root: 'independent-demo/runtime' }, defaultTitle: 'Independent fixture' });
28
- write(assets, 'independent-demo/preset.json', { layout: 'independent', primitive: {}, semantic: { 'color-primary': '#123456' }, component: {} });
29
- write(assets, 'independent-demo/runtime/index.html', '<!doctype html><title>Independent fixture</title><main>Independent runtime</main>');
30
- write(assets, 'independent-demo/runtime/unique.txt', 'INDEPENDENT RUNTIME');
31
- const adapter = {
32
- version: 'test-fixture-1',
33
- runtime: { kind: 'independent-test', requiredFiles: ['app/unique.txt'], identityFields: ['runtime'], excludedBrowserPrefixes: [], protectedFiles: ['app/unique.txt'], protectedDirectories: [] },
34
- fingerprintInputs: ({ resources }) => [resources.root],
35
- initialize(directory, options, context) {
36
- fs.cpSync(context.resource('root'), path.join(directory, 'app'), { recursive: true });
37
- fs.mkdirSync(path.join(directory, 'mocks'));
38
- write(directory, 'design-system/MASTER.md', '# Independent design');
39
- write(directory, 'requirements-map.json', { schemaVersion: 1, requirements: [{ id: 'ONLY-01', pages: ['app/index.html'], roles: ['test'], actions: ['read'], scenarios: ['independent-flow'] }] });
40
- return { metadata: { runtime: { kind: 'independent-test', entry: 'app/index.html' } }, handoff: 'Independent test fixture only.' };
41
- },
42
- validateRuntime(metadata) { assert.equal(metadata.runtime?.kind, 'independent-test'); },
43
- };
44
- const registry = () => createTemplateRegistry({ assetRoot: assets, adapters: { 'independent-test': adapter } });
45
- return { assets, project, registry, adapter };
46
- }
47
- test('a registered independent runtime initializes and validates without any common assets', t => {
48
- const f = fixture(t), registry = f.registry();
49
- const result = lib.initPrototype({ project: f.project, id: 'standalone', expertMode: 'template' }, registry);
50
- assert.equal(result.status, 'created');
51
- assert.equal(fs.existsSync(path.join(f.assets, 'common')), false);
52
- assert.equal(fs.readFileSync(path.join(result.directory, 'app/unique.txt'), 'utf8'), 'INDEPENDENT RUNTIME');
53
- assert.equal(read(result.directory, 'prototype.json').template.adapter, 'independent-test');
54
- const checked = lib.checkPrototype(result.directory, {}, registry);
55
- assert.equal(checked.status, 'passed', JSON.stringify(checked));
56
- fs.unlinkSync(path.join(result.directory, 'app/unique.txt'));
57
- assert.match(lib.checkPrototype(result.directory, {}, registry).errors.join(' '), /unique\.txt/);
58
- });
59
- test('planned, unknown and unregistered adapters fail before touching the output project', t => {
60
- const f = fixture(t);
61
- assert.throws(() => lib.initPrototype({ project: f.project, id: 'planned', template: 'not-built', expertMode: 'template' }, f.registry()), /planned|尚未/);
62
- assert.deepEqual(fs.readdirSync(f.project), []);
63
- const manifest = read(f.assets, 'independent-demo/manifest.json');
64
- manifest.adapter = 'missing-adapter'; write(f.assets, 'independent-demo/manifest.json', manifest);
65
- assert.throws(() => lib.initPrototype({ project: f.project, id: 'unknown', expertMode: 'template' }, f.registry()), /adapter/i);
66
- assert.deepEqual(fs.readdirSync(f.project), []);
67
- });
68
- test('catalog and manifest paths reject traversal, absolute paths and symlinks before writes', t => {
69
- for (const unsafe of ['../outside', '/tmp/outside', 'C:\\outside', 'independent-demo/../outside']) {
70
- const f = fixture(t), manifest = read(f.assets, 'independent-demo/manifest.json');
71
- manifest.resources.root = unsafe; write(f.assets, 'independent-demo/manifest.json', manifest);
72
- assert.throws(() => lib.initPrototype({ project: f.project, id: 'unsafe', expertMode: 'template' }, f.registry()), /path|路径|outside|inside|unsafe/i);
73
- assert.deepEqual(fs.readdirSync(f.project), []);
74
- }
75
- const f = fixture(t), manifest = read(f.assets, 'independent-demo/manifest.json');
76
- fs.symlinkSync(path.join(f.assets, 'independent-demo/runtime'), path.join(f.assets, 'linked'), 'dir');
77
- manifest.resources.root = 'linked'; write(f.assets, 'independent-demo/manifest.json', manifest);
78
- assert.throws(() => lib.initPrototype({ project: f.project, id: 'linked', expertMode: 'template' }, f.registry()), /symlink|符号链接/i);
79
- assert.deepEqual(fs.readdirSync(f.project), []);
80
- });
81
- test('duplicate catalog identities and unsafe manifest locations cannot alias another template', t => {
82
- const f = fixture(t), catalog = read(f.assets, 'catalog.json');
83
- catalog.legacyTemplates.push({ ...catalog.templates[0] }); write(f.assets, 'catalog.json', catalog);
84
- assert.throws(() => f.registry().list(), /duplicate|重复/i);
85
- catalog.legacyTemplates = []; catalog.templates[0].manifest = '../manifest.json'; write(f.assets, 'catalog.json', catalog);
86
- assert.throws(() => f.registry().list(), /path|路径|manifest/i);
87
- });
88
- test('independent runtime and manifest changes are included in the template fingerprint', t => {
89
- const f = fixture(t), original = f.registry().list()[0].digest;
90
- fs.appendFileSync(path.join(f.assets, 'independent-demo/runtime/unique.txt'), '\nchanged');
91
- const changedRuntime = f.registry().list()[0].digest;
92
- assert.notEqual(changedRuntime, original);
93
- const manifest = read(f.assets, 'independent-demo/manifest.json');
94
- manifest.defaultTitle = 'Changed default title'; write(f.assets, 'independent-demo/manifest.json', manifest);
95
- assert.notEqual(f.registry().list()[0].digest, changedRuntime);
96
- });
97
- test('adapter versions and declared implementation files participate in template fingerprints', t => {
98
- const f = fixture(t), initial = f.registry().list()[0].digest;
99
- f.adapter.version = 'test-fixture-2';
100
- assert.notEqual(f.registry().list()[0].digest, initial);
101
- const implementation = path.join(f.assets, 'adapter-fixture.cjs');
102
- fs.writeFileSync(implementation, '// fixture adapter implementation v1');
103
- f.adapter.implementationFiles = [implementation];
104
- const before = f.registry().list()[0].digest;
105
- fs.writeFileSync(implementation, '// fixture adapter implementation v2');
106
- assert.notEqual(f.registry().list()[0].digest, before);
107
- });
108
- test('selected catalog metadata affects fingerprints without coupling unrelated templates', t => {
109
- const f = fixture(t), original = f.registry().resolve('independent-demo').entry.digest;
110
- const catalog = read(f.assets, 'catalog.json');
111
- catalog.templates[0].name = 'Renamed independent fixture'; write(f.assets, 'catalog.json', catalog);
112
- const renamed = f.registry().resolve('independent-demo').entry.digest;
113
- assert.notEqual(renamed, original);
114
- catalog.templates[1].name = 'Renamed unrelated planned fixture'; write(f.assets, 'catalog.json', catalog);
115
- assert.equal(f.registry().resolve('independent-demo').entry.digest, renamed);
116
- });
117
- test('baseline guards use independent adapter protected paths and reject runtime substitution', t => {
118
- const f = fixture(t), registry = f.registry();
119
- const dir = lib.initPrototype({ project: f.project, id: 'baseline', expertMode: 'template' }, registry).directory;
120
- const manifest = lib.contentManifest(dir, registry);
121
- write(dir, 'qa/unit-fixture.txt', 'UNIT FIXTURE ONLY; not browser evidence or human approval');
122
- write(dir, 'qa/browser.json', { revision: manifest.revision, digest: manifest.digest, status: 'passed', source: 'UNIT FIXTURE ONLY', screenshots: ['qa/unit-fixture.txt'], journeys: [{ id: 'independent-flow', status: 'passed' }], consoleErrors: [], viewports: [390, 1440] });
123
- lib.freezeBaseline(dir, { revision: manifest.revision, digest: manifest.digest, reviewer: 'unit fixture', statement: 'UNIT FIXTURE ONLY', source: 'test fixture' }, registry);
124
- fs.appendFileSync(path.join(dir, 'app/unique.txt'), '\nchanged');
125
- assert.ok(lib.compareBaseline(dir, registry).protectedChanges.includes('app/unique.txt'));
126
- fs.appendFileSync(path.join(dir, 'design-system/MASTER.md'), '\nchanged design contract');
127
- assert.ok(lib.compareBaseline(dir, registry).protectedChanges.includes('design-system/MASTER.md'));
128
- const identityChange = read(dir, 'prototype.json');
129
- identityChange.runtime.variant = 'changed'; write(dir, 'prototype.json', identityChange);
130
- assert.ok(lib.compareBaseline(dir, registry).protectedChanges.includes('runtime-contract'));
131
- const metadata = read(dir, 'prototype.json'); metadata.template.adapter = 'legacy-html'; write(dir, 'prototype.json', metadata);
132
- assert.equal(lib.checkPrototype(dir, {}, registry).status, 'failed');
133
- });
134
- test('pre-adapter legacy instances retain their original manifest digest and remain inspectable', t => {
135
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'legacy-adapter-'));
136
- t.after(() => fs.rmSync(root, { recursive: true, force: true }));
137
- const dir = lib.initPrototype({ project: root, id: 'old-legacy', template: 'classic-admin', expertMode: 'template' }).directory;
138
- const metadata = read(dir, 'prototype.json'); delete metadata.template.adapter; delete metadata.runtime; write(dir, 'prototype.json', metadata);
139
- const identity = { id: metadata.id, revision: metadata.revision, template: metadata.template, expertMode: metadata.expertMode, artifactKind: metadata.artifactKind };
140
- const manifest = lib.contentManifest(dir);
141
- assert.deepEqual(manifest.identity, identity);
142
- assert.equal(manifest.digest, crypto.createHash('sha256').update(JSON.stringify({ identity, files: manifest.files })).digest('hex'));
143
- assert.equal(lib.checkPrototype(dir).status, 'passed');
144
- });
145
- test('pre-adapter EASEL identities keep the previous content-manifest field order and digest', t => {
146
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'old-easel-adapter-'));
147
- t.after(() => fs.rmSync(root, { recursive: true, force: true }));
148
- const dir = lib.initPrototype({ project: root, id: 'old-easel', purpose: 'template-review', expertMode: 'template' }).directory;
149
- const metadata = read(dir, 'prototype.json'); delete metadata.template.adapter; write(dir, 'prototype.json', metadata);
150
- const identity = { id: metadata.id, revision: metadata.revision, template: metadata.template, expertMode: metadata.expertMode, artifactKind: metadata.artifactKind, purpose: metadata.purpose, business: metadata.business, runtime: metadata.runtime };
151
- const manifest = lib.contentManifest(dir);
152
- assert.equal(JSON.stringify(manifest.identity), JSON.stringify(identity));
153
- assert.equal(manifest.digest, crypto.createHash('sha256').update(JSON.stringify({ identity, files: manifest.files })).digest('hex'));
154
- assert.equal(lib.checkPrototype(dir).status, 'passed');
155
- });
@@ -1,84 +0,0 @@
1
- 'use strict';
2
- // Regression cases reduced from a real IDE failure; no native host is installed.
3
- const test=require('node:test'),assert=require('node:assert/strict'),fs=require('node:fs'),path=require('node:path'),os=require('node:os'),cp=require('node:child_process');
4
- const installed=path.join(__dirname,'lib/installation.js');
5
- const scripts=path.join(fs.existsSync(installed)?require(installed).loadInstallation().skillsDirectory:path.resolve(__dirname,'../skills'),'i3-ui-prototype/scripts');
6
- const E=require(path.join(scripts,'execution-evidence.cjs')),H=require(path.join(scripts,'codebuddy-hook.cjs')),N=require(path.join(scripts,'native-command.cjs')),R=require(path.join(scripts,'execution-recovery.cjs'));
7
- const raw=rows=>rows.map(row=>JSON.stringify(row)).join('\n')+'\n';
8
- for(const flat of [false,true])test(`raw ${flat?'flat':'paired'} use_skill is a real Skill without accepting Read or forged names`,()=>{
9
- const rows=flat?[
10
- {type:'function_call',callId:'front',name:'use_skill',arguments:'{"command":"i3-frontend-ui-engineering"}',sessionId:'s1'},
11
- {type:'function_call_result',callId:'front',name:'Skill',status:'completed',output:'Frontend instructions',sessionId:'s1'}
12
- ]:[
13
- {type:'assistant',sessionId:'s1',message:{content:[{type:'tool_use',id:'front',name:'use_skill',input:{command:'i3-frontend-ui-engineering'}}]}},
14
- {type:'user',sessionId:'s1',message:{content:[{type:'tool_result',tool_use_id:'front',tool_name:'Skill',content:'Frontend instructions'}]}}
15
- ];
16
- const calls=E.parse(raw(rows));assert.equal(E.loaded(calls,'frontend').length,1);assert.equal(calls[0].name,'Skill');assert.equal(calls[0].rawName,'use_skill');
17
- assert.equal(H.eventCall({hook_event_name:'PostToolUse',tool_name:'use_skill',tool_use_id:'front',tool_input:calls[0].input},{prompts:[{line:0}],calls}).toolCallId,'front');
18
- for(const name of ['Read','use_skill_fake']){
19
- const changed=JSON.parse(JSON.stringify(rows));if(flat){changed[0].name=changed[1].name=name;}else{changed[0].message.content[0].name=changed[1].message.content[0].tool_name=name;}
20
- assert.equal(E.loaded(E.parse(raw(changed)),'frontend').length,0);
21
- }
22
- const wrong=JSON.parse(JSON.stringify(rows));if(flat)wrong[1].sessionId='s2';else wrong[1].sessionId='s2';assert.throws(()=>E.parse(raw(wrong)),/session/);
23
- });
24
- test('native execute_command success cannot hide a failed stage inside result or stdout',()=>{
25
- for(const result of [
26
- {type:'execute_command_result',exitCode:1,stdout:'failed'},
27
- {type:'execute_command_result',exitCode:0,stdout:'{"status":"failed","errors":["No native Hook task binding"]}\r\n\r\n'},
28
- {type:'execute_command_result',exitCode:0,stdout:'Error: unavailable'},
29
- {status:'failed',errors:['native stage failed']}
30
- ])assert.equal(E.successful({content:{status:'success',success:true,result}}),false);
31
- assert.equal(E.successful({content:{status:'success',success:true,result:{type:'execute_command_result',exitCode:0,stdout:'{"status":"bound","runId":"r1"}'}}}),true);
32
- assert.equal(E.successful({content:{result:{status:'failed'},observedApplicationState:true}}),true,'A browser observation of an error is not a failed tool');
33
- });
34
- test('frontend already loaded leaves only execution-begin missing until the native begin actually succeeds',()=>{
35
- const directory='/work/prototypes/a',binding={entryLine:1,contextLine:0,sessionId:'s1',runId:'r1',directory,project:'/work'};
36
- const source={prompts:[{line:1,text:'实现原型'}],contextLine:0,calls:[{skill:'frontend',success:true,sessionId:'s1',requestLine:2,resultLine:3}]};
37
- const input={event:'PreToolUse',source,binding,tool:'Write',input:{file_path:directory+'/app/src/A.vue'},directory,cwd:'/work'};
38
- let answer=H.decision(input);assert.equal(answer.deny,true);assert.deepEqual(answer.missing,['execution-begin']);assert.doesNotMatch(answer.reason,/调用 i3-frontend/);
39
- const command=`node /skills/native-pilot.cjs execution-begin '${directory}'`;
40
- const begin={toolCallId:'begin',name:'Bash',input:{command},cwd:'/work',success:false,sessionId:'s1',result:{status:'bound',runId:'r1',sessionId:'s1',directory},requestLine:4,resultLine:5};source.calls.push(begin);
41
- assert.equal(H.decision(input).deny,true);begin.success=true;assert.equal(H.decision(input).continue,true);
42
- begin.result={...begin.result,runId:'another-run'};assert.equal(H.decision(input).deny,true);begin.result.runId='r1';
43
- begin.result.status='success';assert.equal(H.decision(input).deny,true);begin.result.status='bound';
44
- source.stableThroughLine=4;assert.equal(H.decision(input).deny,true);delete source.stableThroughLine;
45
- source.calls.push({...begin,toolCallId:'failed-rebind',requestLine:6,resultLine:7,success:false});assert.equal(H.decision(input).deny,true,'A failed rebind must not inherit old success');
46
- });
47
- test('binding recovery emits one absolute quoted command that the strict parser recognizes',()=>{
48
- const directory="/work with spaces/prototypes/customer's demo";
49
- const command=N.beginCommand(directory);const parsed=N.nativeCommand('Bash',{command},'/unrelated');
50
- assert.equal(parsed.operation,'execution-begin');assert.equal(parsed.root,directory);assert.ok(path.isAbsolute(parsed.argv[0]));assert.ok(path.isAbsolute(parsed.argv[1]));
51
- assert.match(R.instruction(['execution-begin'],{directory}),new RegExp('execution-begin'));assert.ok(R.instruction(['execution-begin'],{directory}).includes(command));
52
- assert.match(R.instruction(['execution-begin'],{directory}),/管道|pipeline/);
53
- assert.equal(N.nativeCommand('Bash',{command:`cd /work && ${command} 2>&1 | head -80`},'/work'),null);
54
- });
55
- test('unbound CLI execution-begin exits nonzero with an actionable standalone command and creates no proof',t=>{
56
- const root=fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(),'i3-unbound-regression-')));t.after(()=>fs.rmSync(root,{recursive:true,force:true}));
57
- const result=cp.spawnSync(process.execPath,[path.join(scripts,'native-pilot.cjs'),'execution-begin',root],{encoding:'utf8'});
58
- assert.equal(result.status,1);const failure=JSON.parse(result.stderr);assert.equal(failure.status,'failed');assert.match(failure.errors.join(),/No native Hook task binding/);
59
- assert.ok(failure.errors.join().includes(N.beginCommand(root)));assert.deepEqual(fs.readdirSync(root),[]);
60
- });
61
- test('PostToolUse failures use additionalContext and keep the tool return intact',()=>{
62
- const value=require(path.join(scripts,'hosts/codebuddy.cjs')).format({feedback:true,reason:'实际返回失败,请补调'},'PostToolUse');
63
- assert.equal(value.output.continue,true);assert.deepEqual(value.output.hookSpecificOutput,{hookEventName:'PostToolUse',additionalContext:'实际返回失败,请补调'});
64
- const bound={status:'bound',runId:'r1'};assert.deepEqual(E.resultValue([{type:'text',text:JSON.stringify(bound)}]),bound);
65
- });
66
- test('native wrappers preserve actual JSON facts and quoted findings without matching escaped wrapper bytes',()=>{
67
- const facts={form:{errors:1},observed:true},wrapped={status:'success',success:true,result:JSON.stringify(facts)};
68
- const A=require(path.join(scripts,'execution-assertions.cjs'));
69
- assert.equal(A.extract(A.resultData(wrapped),'/form/errors'),1);assert.ok(E.resultText(wrapped).includes('"observed":true'));
70
- assert.deepEqual(A.resultData({result:{status:'failed'},observedApplicationState:true}),{result:{status:'failed'},observedApplicationState:true});
71
- assert.equal(E.successful({content:{type:'text',text:'{"status":"failed","operation":"execution-begin"}'}}),false);
72
- });
73
- test('loading a missing browser Skill cannot let another stage stand in for the denied finalize retry',()=>{
74
- const source={prompts:[{line:1,digest:'task',text:'实现原型'}],contextLine:0,calls:[]},index={};
75
- const context={source,sessionId:'s1',directory:'/work/prototypes/a',stage:'delivery',event:'PreToolUse',eventKey:'deny-finalize',expectedRetry:{kind:'stage',stage:'delivery',operation:'finalize'}};
76
- R.record(index,context,{deny:true,missing:['browser']});
77
- source.calls.push({skill:'browser',toolCallId:'actual-browser-load',sessionId:'s1',requestLine:2,resultLine:3,success:true});
78
- const failedPrerequisite=R.record(index,{...context,stage:'browser-entry',event:'PostToolUse',eventKey:'failed-review',expectedRetry:{kind:'stage',stage:'browser-entry',operation:'record-devtools-review'}},{feedback:true,missing:['execution-evidence']});
79
- assert.equal(failedPrerequisite.recovery.expectedRetry.operation,'finalize');
80
- const other=R.record(index,{...context,stage:'browser-entry',resolved:['execution-evidence'],event:'PostToolUse',eventKey:'other-stage-result',retrySucceeded:true,retry:{kind:'stage',stage:'browser-entry',operation:'record-devtools-review',requestLine:4,resultLine:5}},{continue:true});
81
- assert.equal(other.recovery.status,'ready-to-retry');
82
- const correct=R.record(index,{...context,event:'PostToolUse',eventKey:'finalize-result',retrySucceeded:true,retry:{kind:'stage',stage:'delivery',operation:'finalize',requestLine:6,resultLine:7}},{continue:true});
83
- assert.equal(correct.recovery.status,'recovered');
84
- });