@givolt/i3-composer-agent 3.2.1 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +38 -71
  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,42 +0,0 @@
1
- import test from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { ref, computed, reactive, watch, defineStore, nextTick } from '../runtime/state.js';
4
-
5
- test('deep edits and computed permissions remain observable', async () => {
6
- const role = ref({ actions: ['view', 'edit'] });
7
- const canEdit = computed(() => role.value.actions.includes('edit'));
8
- const seen = [];
9
- const stop = watch(canEdit, value => seen.push(value), { immediate: true });
10
- role.value.actions.splice(1, 1);
11
- await nextTick();
12
- assert.equal(canEdit.value, false);
13
- assert.deepEqual(seen, [true, false]);
14
- stop();
15
- role.value.actions.push('edit');
16
- await nextTick();
17
- assert.deepEqual(seen, [true, false]);
18
- });
19
-
20
- test('store fields unwrap state and retain one shared instance', async () => {
21
- const useDemo = defineStore('native-state-test', () => {
22
- const scope = ref('heating');
23
- const rows = reactive({ count: 1 });
24
- return { scope, rows, allowed: computed(() => scope.value === 'heating') };
25
- });
26
- const a = useDemo(), b = useDemo();
27
- assert.equal(a, b);
28
- assert.equal(a.allowed, true);
29
- a.scope = 'north';
30
- a.rows.count = 2;
31
- await nextTick();
32
- assert.equal(b.scope, 'north');
33
- assert.equal(b.allowed, false);
34
- assert.equal(b.rows.count, 2);
35
- });
36
-
37
- test('derived form fields support explicit setters', () => {
38
- const value = ref('old');
39
- const field = computed({ get: () => value.value, set: v => { value.value = v.trim(); } });
40
- field.value = ' new ';
41
- assert.equal(value.value, 'new');
42
- });
@@ -1,16 +0,0 @@
1
- import test from 'node:test';
2
- import assert from 'node:assert/strict';
3
- const storage=new Map();
4
- globalThis.localStorage={getItem:key=>storage.get(key)??null,setItem:(key,value)=>storage.set(key,String(value)),removeItem:key=>storage.delete(key)};
5
-
6
- test('committed observations update both the runtime store and the persisted task',async()=>{
7
- const {useOperations}=await import('../src/operations/store.js');
8
- const store=useOperations();store.addExamples();
9
- const id='run-ops-release-2',before=store.find(id);
10
- assert.equal(before.run.observations.length,0);
11
- store.apply(id,{id:'html-observation-test',action:'observe',expected:before.run.recordVersion,note:'HTML 原生状态层观测提交测试',checked:true,outcome:'pass'});
12
- assert.equal(store.find(id).run.observations.length,1);
13
- assert.equal(store.find(id).run.recordVersion,2);
14
- const saved=JSON.parse(storage.get('i3-prototype-antdv-tasks-v010'));
15
- assert.equal(saved.find(t=>t.id==='operation-example-2').operations[0].observations.length,1);
16
- });
@@ -1,11 +0,0 @@
1
- import test from "node:test";
2
- import assert from "node:assert/strict";
3
- import { actors, can } from "../src/shared/policy.js";
4
- import { newIntent, publishVersion, confirmVersion } from "../src/intents/domain.js";
5
- import { newSpec, appendVersion, sourceOf, beginSpecConfirmation, completeSpecConfirmation, sections, assertSpec } from "../src/specs/domain.js";
6
- const actor = actors.at(-1), at = '2026-09-10T10:00:00Z';
7
- function fixture() { let i = newIntent({ title: '供热报修', request: '分诊建议', outcome: '确认后派单', context: '意图池' }, 'i1', 'INT-001', at, actor); i.answers = { audience: '居民', process: '确认后派单', boundary: '不控制设备', acceptance: '不重复派单' }; i = confirmVersion(publishVersion(i, at), 1, at, actor); const content = Object.fromEntries(sections.map(s => [s.key, s.label])); return { i, s: appendVersion(newSpec(i, actor, at), sourceOf(i), content, [], '示例', actor, at) }; }
8
- test('spec confirmation binds source, version and authorized human', () => { const { i, s } = fixture(); const pending = beginSpecConfirmation(s, i, actor, 1, 1, 'q1', at); const confirmed = completeSpecConfirmation({ ...pending, pending: { ...pending.pending, acceptedAt: at } }); assert.equal(confirmed.versions[0]?.confirmedBy, actor.name); assert.equal(s.versions[0]?.confirmedAt, undefined); assert.throws(() => beginSpecConfirmation(s, i, actor, 2, 1, 'q2', at), /版本/); assert.throws(() => beginSpecConfirmation(s, { ...i, status: 'clarifying' }, actor, 1, 1, 'q3', at), /意图/); });
9
- test('spec unresolved decisions and missing reasons block confirmation', () => { const { i, s } = fixture(); s.versions[0].decisions = [{ id: 'd', question: '选哪种', options: ['A'], answer: 'A', reason: '', owner: '有权用户' }]; assert.throws(() => beginSpecConfirmation(s, i, actor, 1, 1, 'q', at), /决策/); });
10
- test('pending or unknown operations cannot be resubmitted and need a receipt', () => { const { i, s } = fixture(); const pending = beginSpecConfirmation(s, i, actor, 1, 1, 'q', at); assert.throws(() => beginSpecConfirmation(pending, i, actor, 1, 1, 'r', at), /处理中/); assert.throws(() => completeSpecConfirmation(pending), /核实/); assert.throws(() => assertSpec({ ...pending, confirmation: 'unknown' }, actor, 'spec:edit'), /核实/); });
11
- test('grant revocation and cross-scope assignment deny the exact action', () => { const { i, s } = fixture(); const limited = { ...actor, grants: [{ id: 'north', name: '确认', actions: ['spec:confirm'], tenantIds: ['north'] }] }; assert.equal(can(limited, 'spec:confirm'), true); assert.throws(() => beginSpecConfirmation(s, i, limited, 1, 1, 'q', at), /权限/); });
@@ -1,27 +0,0 @@
1
- import test from "node:test";
2
- import assert from "node:assert/strict";
3
- import { actors } from "../src/shared/policy.js";
4
- import { standardBody } from "../src/workflows/data.js";
5
- import { newTask, startTask, advanceTask, approveTask, retryTask, controlTask, assertTaskRemovable, latestArtifact, clone } from "../src/tasks/domain.js";
6
- const actor = actors[0];
7
- function binding() { return { intentId: 'intent', spec: { number: 1, source: { intentId: 'intent', code: 'INT-1', title: '测试需求', version: 1, confirmedAt: '2026-09-11' }, content: { overview: '需求', stories: '故事', requirements: '需求条款', acceptance: 'AC', success: '标准', entities: '实体', pages: '页面', assumptions: '假设' }, decisions: [], reason: '确认样例', createdBy: '演示', createdAt: '2026-09-11', confirmedBy: '演示', confirmedAt: '2026-09-11' }, specRecordVersion: 1, pbcId: 'pbc-0', project: '供热工单', tenantId: 'heating', flowId: 'flow-0', flowRecordVersion: 1, flow: { number: 1, body: standardBody(), note: '标准', by: '演示', at: '2026-09-11', submittedBy: '演示' }, agents: [] }; }
8
- function task() { return newTask(binding(), actor, '交付测试'); }
9
- function build() { const t = task(); startTask(t, '陈敏'); advanceTask(t); approveTask(t, '核对人', 1, '已核对原型与规格'); return t; }
10
- function verify() { const t = build(); advanceTask(t); advanceTask(t); return t; }
11
- test('草稿要求有效名称;基础字段与独立快照完整', () => { const b = binding(), t = newTask(b, actor, '交付'); b.flow.body.nodes[0].name = '后续改变'; assert.equal(t.binding.flow.body.nodes[0].name, '交付开始'); assert.equal(t.tenantId, 'heating'); assert.equal(t.recordVersion, 1); assert.ok(t.createdBy && t.createdAt && t.createdDept); assert.throws(() => newTask(b, actor, ' '), /名称/); assert.throws(() => newTask(b, actor, 'a', 'x'.repeat(1001)), /1000/); assert.doesNotThrow(() => assertTaskRemovable(t)); });
12
- test('启动固定输入;重复启动与已启动删除被拒绝', () => { const t = task(); startTask(t, '陈敏'); assert.equal(t.artifacts.length, 2); assert.equal(t.artifacts[0].versions[0].taskId, t.id); assert.throws(() => startTask(t, '陈敏'), /已经启动/); assert.throws(() => assertTaskRemovable(t), /仅草稿/); assert.equal(t.currentId, 'start'); });
13
- test('原型确认阻断推进;缺少说明和过期产物版本不接受', () => { const t = task(); startTask(t, '陈敏'); advanceTask(t); assert.equal(t.status, 'waiting'); assert.throws(() => advanceTask(t), /可推进/); assert.throws(() => approveTask(t, '确认人', 1, ''), /核对说明/); assert.throws(() => approveTask(t, '确认人', 2, '已核对'), /已变化/); approveTask(t, '确认人', 1, '已核对'); assert.equal(t.currentId, 'build'); assert.ok(t.prototypeApproved); });
14
- test('标准流程至待后续确认,没有实际发布或归档', () => { const t = verify(); advanceTask(t); assert.equal(t.status, 'ready'); assert.equal(t.currentId, 'approval'); assert.equal(t.stages.find(s => s.nodeId === 'release').state, 'pending'); assert.equal(t.stages.find(s => s.nodeId === 'archive').state, 'pending'); assert.throws(() => advanceTask(t), /可推进/); assert.throws(() => approveTask(t, '确认人', 1, '发布'), /不接受/); assert.ok(latestArtifact(t, 'verify').inputs.some(x => x.id === 'code' && x.version === 1)); });
15
- test('独立验证不接受同一实现 Agent,也不接受未通过的质量检查', () => { const t = verify(); t.checksPassed = false; assert.throws(() => advanceTask(t), /质量检查/); const x = verify(); x.binding.flow.body.nodes.find(n => n.id === 'verify').agentId = 'agent-1'; assert.throws(() => advanceTask(x), /不能同时实现/); assert.equal(x.status, 'running'); });
16
- test('验证失败返工重跑实现与质量检查,旧版本和失败证据不覆盖', () => { const t = verify(); advanceTask(t, 'fail'); const old = clone(t.artifacts); retryTask(t, '处理人', '修复幂等性'); assert.equal(t.currentId, 'build'); assert.equal(t.reworks, 1); assert.equal(t.checksPassed, false); advanceTask(t); assert.equal(t.stages.find(s => s.nodeId === 'verify').state, 'pending'); advanceTask(t); advanceTask(t); assert.equal(t.status, 'ready'); assert.equal(latestArtifact(t, 'code').number, 2); for (const a of old)
17
- assert.deepEqual(t.artifacts.find(x => x.id === a.id).versions[0], a.versions[0]); assert.equal(t.artifacts.find(a => a.kind === 'verify').versions[0].result, 'fail'); });
18
- test('阶段失败重试仅继续当前阶段,不重复已完成实现', () => { const t = build(); advanceTask(t); advanceTask(t, 'fail'); assert.equal(t.status, 'failed'); assert.equal(t.currentId, 'ci'); retryTask(t, '处理人', '检查服务已恢复'); advanceTask(t); assert.equal(latestArtifact(t, 'code').number, 1); assert.equal(t.stages.find(s => s.nodeId === 'build').attempts, 1); assert.equal(t.stages.find(s => s.nodeId === 'ci').attempts, 2); });
19
- test('处理次数有界;接管不会清零预算、判定通过或修改产物', () => { const t = build(); for (let i = 0; i < 3; i++) {
20
- advanceTask(t, 'fail');
21
- if (i < 2)
22
- retryTask(t, '处理人', '重试');
23
- } assert.equal(t.reworks, 2); assert.throws(() => retryTask(t, '处理人', '继续'), /达到/); const versions = clone(t.artifacts); controlTask(t, 'takeover', '接管人', '人工检查'); assert.equal(t.status, 'manual'); assert.equal(t.owner, '接管人'); controlTask(t, 'resume', '接管人', '继续原任务'); assert.equal(t.status, 'failed'); assert.equal(t.reworks, 2); assert.deepEqual(t.artifacts, versions); });
24
- test('暂停和刷新后恢复保留当前阶段;等待确认也能恢复到等待', () => { const t = build(); advanceTask(t); controlTask(t, 'pause', '陈敏', '等待窗口'); const restored = JSON.parse(JSON.stringify(t)); controlTask(restored, 'resume', '陈敏', '窗口已到'); assert.equal(restored.status, 'running'); assert.equal(restored.currentId, 'ci'); assert.deepEqual(restored.artifacts, t.artifacts); const w = task(); startTask(w, '陈敏'); advanceTask(w); controlTask(w, 'pause', '陈敏', '稍后核对'); controlTask(w, 'resume', '陈敏', '继续核对'); assert.equal(w.status, 'waiting'); assert.throws(() => advanceTask(w), /可推进/); });
25
- test('不允许伪造跳到发布确认:缺少本轮验证结论会被拦住', () => { const t = build(); t.binding.flow.body.edges.find(e => e.from === 'build').to = 'approval'; assert.throws(() => advanceTask(t), /有效独立验证/); assert.notEqual(t.status, 'ready'); });
26
- test('真实采用绑定流程的分支,未选路径标记跳过', () => { const t = build(), b = t.binding.flow.body; b.nodes.push({ id: 'decision', kind: 'branch', name: '质量判断', condition: 'checks.passed', x: 0, y: 0 }, { id: 'fix', kind: 'loop', name: '有限修复', agentId: 'agent-1', limit: 2, x: 0, y: 0 }); b.edges.find(e => e.from === 'ci').to = 'decision'; b.edges.push({ id: 'yes', from: 'decision', to: 'verify', label: '满足' }, { id: 'no', from: 'decision', to: 'fix', label: '不满足' }, { id: 'fixed', from: 'fix', to: 'verify', label: '' }); t.stages.push({ nodeId: 'decision', state: 'pending', attempts: 0, detail: '' }, { nodeId: 'fix', state: 'pending', attempts: 0, detail: '' }); advanceTask(t); advanceTask(t); assert.equal(t.currentId, 'decision'); advanceTask(t); assert.equal(t.currentId, 'verify'); assert.equal(t.stages.find(s => s.nodeId === 'fix').state, 'skipped'); advanceTask(t); assert.equal(t.status, 'ready'); });
27
- test('检查不通过时走已定义的有限修复分支,再独立验证', () => { const t = build(), b = t.binding.flow.body; b.nodes.push({ id: 'decision', kind: 'branch', name: '质量判断', condition: 'checks.passed', x: 0, y: 0 }, { id: 'fix', kind: 'loop', name: '有限修复', agentId: 'agent-1', limit: 1, x: 0, y: 0 }); b.edges.find(e => e.from === 'ci').to = 'decision'; b.edges.push({ id: 'yes', from: 'decision', to: 'verify', label: '满足' }, { id: 'no', from: 'decision', to: 'fix', label: '不满足' }, { id: 'fixed', from: 'fix', to: 'verify', label: '' }); t.stages.push({ nodeId: 'decision', state: 'pending', attempts: 0, detail: '' }, { nodeId: 'fix', state: 'pending', attempts: 0, detail: '' }); advanceTask(t); advanceTask(t, 'fail'); assert.equal(t.currentId, 'decision'); advanceTask(t); assert.equal(t.currentId, 'fix'); advanceTask(t, 'fail'); retryTask(t, '处理人', '修复'); advanceTask(t); assert.equal(t.currentId, 'verify'); advanceTask(t); assert.equal(t.status, 'ready'); assert.equal(latestArtifact(t, 'code').number, 3); });
@@ -1,34 +0,0 @@
1
- import test from "node:test";
2
- import assert from "node:assert/strict";
3
- import { actors, metadata } from "../src/shared/policy.js";
4
- import { newIntent, publishVersion, confirmVersion } from "../src/intents/domain.js";
5
- import { newSpec, appendVersion, sourceOf, sections } from "../src/specs/domain.js";
6
- import { makeJob } from "../src/pbc/domain.js";
7
- import { affiliation, deliveryGuide, actorAccess } from "../src/shared/deliveryGuide.js";
8
- import { buildWorkbench, relatedTo } from "../src/workbench/model.js";
9
- const actor = actors.find(a => a.id === 'complete'), at = '2026-09-11T00:00:00Z';
10
- function fixture() {
11
- let i = newIntent({ title: '测试归属', request: '报修分诊', outcome: '人工确认', context: '集团意图池 · 尚未立项' }, 'i1', 'INT-001', at, actor);
12
- i.answers = { audience: '居民', process: '确认', boundary: '演示', acceptance: '可追溯' };
13
- i = confirmVersion(publishVersion(i, at), 1, at, actor);
14
- const content = Object.fromEntries(sections.map(s => [s.key, s.label])), s = appendVersion(newSpec(i, actor, at), sourceOf(i), content, [], '示例', actor, at);
15
- s.versions[0].confirmedAt = at;
16
- const p = { ...metadata(actor, at), id: 'p1', name: '供热智能分诊01', slug: 'heating', ebc: '服务', domain: 'example.test', owner: actor.name, services: [] }, j = makeJob(i, s, actor, p);
17
- j.status = 'done';
18
- return { i, s, p, j };
19
- }
20
- test('实际归属读取当前目录名称,保留原始意图与请求快照', () => { const { i, j, p } = fixture(); const result = affiliation(i, [j], [{ ...p, name: '改名后的系统' }], actorAccess(actor)); assert.equal(result.label, '已归属:改名后的系统'); assert.equal(result.key, 'pbc:p1'); assert.equal(i.context, '集团意图池 · 尚未立项'); assert.equal(j.pbc.name, '供热智能分诊01'); });
21
- test('已有归属目标不可见时不暴露名称或导航,也不退回未归属', () => { const { i, j, p } = fixture(); const r = affiliation(i, [j], [p], () => false); assert.equal(r.state, 'restricted'); assert.equal(r.path, ''); assert.ok(!r.label.includes(p.name)); });
22
- test('未知、失败与进行中归属均指向原请求,禁止创建重复请求', () => { const { i, j, s } = fixture(); for (const status of ['unknown', 'failed', 'running', 'paused']) {
23
- const r = deliveryGuide(i, s, [{ ...j, status }], actorAccess(actor));
24
- assert.equal(r.create, false);
25
- assert.equal(r.path, '/intents/i1/pbc');
26
- assert.notEqual(r.stage, 'done');
27
- } });
28
- test('来源重新澄清时安全解释,不能因sourceOf抛错导致来源列表消失', () => { const { i, s } = fixture(); const r = deliveryGuide({ ...i, status: 'clarifying' }, s, [], actorAccess(actor)); assert.equal(r.stage, 'intent'); assert.equal(r.create, false); assert.equal(r.path, '/intents/i1/workspace'); });
29
- test('未生成、未确认和旧版规格分别解释;最新已确认才允许创建', () => { const { i, s } = fixture(), access = actorAccess(actor); assert.equal(deliveryGuide(i, undefined, [], access).label, '尚未生成规格'); assert.equal(deliveryGuide(i, { ...s, versions: [{ ...s.versions[0], confirmedAt: undefined }] }, [], access).label, '规格待确认'); assert.equal(deliveryGuide(i, { ...s, versions: [{ ...s.versions[0], source: { ...s.versions[0].source, version: 0 } }] }, [], access).label, '规格来源已变化'); assert.equal(deliveryGuide(i, s, [], access).create, true); });
30
- test('零未决项不等于拥有规格确认或创建权限', () => { const { i, s } = fixture(); const limited = { ...actor, grants: [{ id: 'r', name: 'read', actions: ['intent:view', 'spec:view', 'pbc:view'], tenantIds: ['heating'] }] }; const r = deliveryGuide(i, { ...s, versions: [{ ...s.versions[0], confirmedAt: undefined }] }, [], actorAccess(limited)); assert.equal(r.allowed, false); assert.match(r.reason, /确认权限/); assert.equal(deliveryGuide(i, s, [], actorAccess(limited)).create, false); });
31
- test('我的范围先按授权过滤;他人的可见记录不能冒充我的', () => { const { i, s, p } = fixture(); const other = { ...i, id: 'other', createdById: 'zhou', owner: '周晨' }, input = { actor, active: true, intents: [i, other], specs: [s], jobs: [], pbcs: [p], tasks: [] }; assert.equal(buildWorkbench(input, 'mine').todos.length, 1); assert.equal(buildWorkbench(input, 'all').todos.length, 2); assert.equal(buildWorkbench({ ...input, actor: { ...actor, grants: [] } }, 'all').todos.length, 0); assert.equal(buildWorkbench({ ...input, active: false }, 'all').pbcs.length, 0); });
32
- test('归属完成后从待办移除,相关PBC进入首页且重新命名同步', () => { const { i, s, p, j } = fixture(); const input = { actor, active: true, intents: [i], specs: [s], jobs: [], pbcs: [{ ...p, createdById: 'zhou', owner: '周晨' }], tasks: [] }; assert.equal(buildWorkbench(input, 'mine').todos.length, 1); assert.equal(buildWorkbench(input, 'mine').pbcs.length, 0); const done = buildWorkbench({ ...input, jobs: [j] }, 'mine'); assert.equal(done.todos.length, 0); assert.equal(done.pbcs.length, 1); });
33
- test('个人身份适配不合并权限,不按岗位或任意重名判定关系', () => { assert.equal(relatedTo(actor, { createdById: 'lin' }), true); assert.equal(relatedTo({ ...actor, id: 'zhou' }, { createdById: 'lin', owner: '林晓' }), false); assert.equal(relatedTo(actor, { createdById: 'unknown', owner: '同名用户' }), false); assert.equal(actorAccess({ ...actor, grants: [] })('intent:view'), false); });
34
- test('隐藏租户与删除记录不影响可见计数或关系', () => { const { i, s, p, j } = fixture(); const out = buildWorkbench({ actor, active: true, intents: [{ ...i, tenantId: 'north' }], specs: [s], jobs: [j], pbcs: [{ ...p, tenantId: 'north' }], tasks: [] }, 'all'); assert.equal(out.todos.length, 0); assert.equal(out.pbcs.length, 0); assert.equal(buildWorkbench({ actor, active: true, intents: [{ ...i, isDeleted: true }], specs: [s], jobs: [], pbcs: [{ ...p, isDeleted: true }], tasks: [] }, 'mine').todos.length, 0); });
@@ -1,16 +0,0 @@
1
- import test from "node:test";
2
- import assert from "node:assert/strict";
3
- import { validateFlow, clone, diffBodies, assertRemovable, protectedNode } from "../src/workflows/domain.js";
4
- import { standardBody, seedFlows } from "../src/workflows/data.js";
5
- const agents = ['agent-1', 'agent-2'].map(id => ({ id, name: id, available: true, reason: '', recordVersion: 1 }));
6
- const failed = (b = standardBody()) => validateFlow(b, agents).filter(c => !c.ok);
7
- test('标准交付路径通过;必要治理节点受保护', () => { assert.deepEqual(failed(), []); for (const id of ['prototype', 'verify', 'approval'])
8
- assert.equal(protectedNode(standardBody().nodes.find(n => n.id === id)), true); });
9
- test('删除治理节点和直接连线绕过批准都被检查拒绝', () => { const b = standardBody(); b.edges.push({ id: 'bypass', from: 'build', to: 'release', label: '' }); assert.ok(failed(b).some(c => c.id === 'release')); const d = standardBody(); d.nodes = d.nodes.filter(n => n.id !== 'prototype'); assert.ok(failed(d).some(c => c.id === 'gates')); });
10
- test('无法借条件分支让一条发布路径绕过独立验证', () => { const b = standardBody(); b.nodes.find(n => n.id === 'ci').kind = 'branch'; b.nodes.find(n => n.id === 'ci').condition = 'checks.passed'; b.edges.find(e => e.from === 'ci').label = '满足'; b.edges.push({ id: 'branch-bypass', from: 'ci', to: 'approval', label: '不满足' }); assert.ok(failed(b).some(c => c.id === 'release')); });
11
- test('同一 Agent 自验证、验证后修改及未登记人工权限均阻断', () => { const b = standardBody(); b.nodes.find(n => n.id === 'verify').agentId = 'agent-1'; assert.ok(failed(b).some(c => c.id === 'independent')); const d = standardBody(); d.edges.push({ id: 'rewrite', from: 'verify', to: 'build', label: '' }); assert.ok(failed(d).some(c => c.id === 'after-verify')); const e = standardBody(); e.nodes.find(n => n.id === 'approval').permission = 'unknown'; assert.ok(failed(e).some(c => c.id === 'human-approval')); });
12
- test('有限修复必须有上限;普通循环与断开的节点被拒绝', () => { const b = standardBody(); Object.assign(b.nodes.find(n => n.id === 'build'), { kind: 'loop', limit: 0 }); assert.ok(failed(b).some(c => c.id === 'limit-build')); b.nodes.find(n => n.id === 'build').limit = 2; assert.deepEqual(failed(b), []); b.edges.push({ id: 'loop', from: 'ci', to: 'build', label: '' }); assert.ok(failed(b).some(c => c.id === 'cycle')); const d = standardBody(); d.edges = d.edges.filter(e => e.to !== 'ci'); assert.ok(failed(d).some(c => c.id === 'connectivity')); });
13
- test('缺失或停用的 Agent 及无输入输出不能发布', () => { const b = standardBody(); assert.ok(validateFlow(b, agents.map(a => ({ ...a, available: false, reason: '已停用' }))).some(c => c.id === 'agent-build' && !c.ok)); b.nodes.find(n => n.id === 'build').input = ''; assert.ok(failed(b).some(c => c.id === 'io-build')); });
14
- test('差异覆盖节点属性/连线和元数据,旧版本快照不变', () => { const before = standardBody(), after = clone(before); after.description = '新描述'; after.nodes.find(n => n.id === 'build').name = '实现工单助手'; after.edges.pop(); const diff = diffBodies(before, after); assert.ok(diff.some(x => x.includes('更新用途'))); assert.ok(diff.some(x => x.includes('实现工单助手'))); assert.ok(diff.some(x => x.includes('移除连线'))); assert.equal(before.nodes.find(n => n.id === 'build').name, '实现应用'); });
15
- test('模板启用、待审核及已有选择引用均保护删除', () => { const r = seedFlows()[0]; assert.throws(() => assertRemovable(r, false), /停用/); assert.throws(() => assertRemovable({ ...r, enabled: false, state: 'review' }, false), /撤回/); assert.throws(() => assertRemovable({ ...r, enabled: false }, true), /引用/); assert.doesNotThrow(() => assertRemovable({ ...r, enabled: false }, false)); });
16
- test('合规双分支与有限修复均汇入独立验证;移除属性计入差异', () => { const b = standardBody(); b.nodes.push({ id: 'judge', kind: 'branch', name: '质量结果', condition: 'checks.passed', x: 1100, y: 60 }, { id: 'fix', kind: 'loop', name: '修复产物', agentId: 'agent-1', input: '检查报告', output: '修订产物', limit: 2, x: 1100, y: 260 }); b.edges.find(e => e.from === 'ci').to = 'judge'; b.edges.push({ id: 'ok', from: 'judge', to: 'verify', label: '满足' }, { id: 'bad', from: 'judge', to: 'fix', label: '不满足' }, { id: 'fixed', from: 'fix', to: 'verify', label: '' }); assert.deepEqual(failed(b), []); const c = clone(b); delete c.nodes.find(n => n.id === 'fix').agentId; assert.ok(diffBodies(b, c).some(x => x.includes('Agent:agent-1 → 未设置'))); });
@@ -1,168 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import crypto from 'node:crypto';
4
- import { createRequire } from 'node:module';
5
- import { fileURLToPath } from 'node:url';
6
-
7
- const output = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
8
- const source = path.resolve(output, '../../交互原型/console-operations-v0.14');
9
- const require = createRequire(path.join(source, 'package.json'));
10
- const ts = require('typescript');
11
- const { parse: parseSfc } = require('@vue/compiler-sfc');
12
- const { parse: parseTemplate } = require('@vue/compiler-dom');
13
- const hashes = {};
14
- const iconNames = new Set(['DownOutlined', 'UpOutlined', 'LeftOutlined', 'RightOutlined', 'CloseOutlined', 'CloseCircleOutlined', 'SearchOutlined', 'LoadingOutlined', 'CheckOutlined', 'CheckCircleOutlined', 'InfoCircleOutlined', 'ExclamationCircleOutlined','CheckCircleFilled','InfoCircleFilled','CloseCircleFilled','ExclamationCircleFilled']);
15
- const esc = value => String(value).replaceAll('&', '&amp;').replaceAll('"', '&quot;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');
16
- const transpile = input => ts.transpileModule(input, { compilerOptions: { target: ts.ScriptTarget.ES2022, module: ts.ModuleKind.ESNext, verbatimModuleSyntax: false } }).outputText;
17
-
18
- function expression(input) {
19
- if (!input) return '';
20
- const js = transpile(`const __expression = (${input});`);
21
- return js.replace(/^const __expression =\s*/, '').replace(/;\s*$/, '').trim();
22
- }
23
- function eventExpression(input) {
24
- const parsed = ts.createSourceFile('event.ts', `const __event = (${input});`, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
25
- return parsed.parseDiagnostics.length ? transpile(input).trim() : expression(input);
26
- }
27
- function relativeRuntime(file, module) {
28
- return path.relative(path.dirname(file), 'runtime/' + module + '.js').replaceAll(path.sep, '/').replace(/^(?!\.)/, './');
29
- }
30
- function rewriteImports(input, file) {
31
- const sf = ts.createSourceFile(file, input, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
32
- const changes = [];
33
- for (const node of sf.statements) {
34
- if (!ts.isImportDeclaration(node)) continue;
35
- const from = node.moduleSpecifier.text;
36
- if (from === 'vue') {
37
- const specs = node.importClause?.namedBindings?.elements || [];
38
- const state = specs.filter(s => !s.isTypeOnly && !['h', 'defineComponent'].includes(s.propertyName?.text || s.name.text)).map(s => s.getText(sf));
39
- const dom = specs.filter(s => !s.isTypeOnly && ['h', 'defineComponent'].includes(s.propertyName?.text || s.name.text)).map(s => s.getText(sf));
40
- changes.push([node.getStart(sf), node.end, [state.length ? `import { ${state.join(', ')} } from '${relativeRuntime(file, 'state')}';` : '', dom.length ? `import { ${dom.join(', ')} } from '${relativeRuntime(file, 'dom')}';` : ''].filter(Boolean).join('\n')]);
41
- } else {
42
- let target = from;
43
- if (from === 'pinia') target = relativeRuntime(file, 'state');
44
- else if (from === 'vue-router') target = relativeRuntime(file, 'router');
45
- else if (from === 'antdv-next' || from === '@qin-ui/antdv-next-pro') target = relativeRuntime(file, 'widgets');
46
- else if (from === '@ant-design/icons-vue') target = relativeRuntime(file, 'icons');
47
- else if (from.startsWith('.')) target = from.replace(/\.(vue|ts)$/, '.js') + (/\.[a-z]+$/.test(from) ? '' : '.js');
48
- changes.push([node.moduleSpecifier.getStart(sf), node.moduleSpecifier.end, JSON.stringify(target)]);
49
- }
50
- }
51
- for (const [start, end, replacement] of changes.sort((a, b) => b[0] - a[0])) input = input.slice(0, start) + replacement + input.slice(end);
52
- return input.replace(/(['"`])easel(?=[-:])/g, '$1i3-prototype-antdv').replace(/(['"`])(ops-(?:draft|link):)/g,'$1i3-prototype-antdv-$2').replaceAll('当前 4187 地址','当前 HTML 原型地址');
53
- }
54
- function bindings(sf) {
55
- const names = [];
56
- const add = node => { if (ts.isIdentifier(node)) names.push(node.text); else if (ts.isObjectBindingPattern(node) || ts.isArrayBindingPattern(node)) for (const element of node.elements) if (ts.isBindingElement(element)) add(element.name); };
57
- for (const s of sf.statements) {
58
- if (ts.isVariableStatement(s)) for (const d of s.declarationList.declarations) add(d.name);
59
- else if ((ts.isFunctionDeclaration(s) || ts.isClassDeclaration(s)) && s.name) names.push(s.name.text);
60
- else if (ts.isImportDeclaration(s) && s.importClause && !s.importClause.isTypeOnly) {
61
- if (s.importClause.name) names.push(s.importClause.name.text);
62
- const n = s.importClause.namedBindings;
63
- if (n && ts.isNamedImports(n)) for (const e of n.elements) if (!e.isTypeOnly) names.push(e.name.text);
64
- }
65
- }
66
- return [...new Set(names)];
67
- }
68
- function templateNode(node) {
69
- if (node.type === 2) return esc(node.content);
70
- if (node.type === 5) return '{{ ' + esc(expression(node.content.content)) + ' }}';
71
- if (node.type === 3) return '';
72
- if (node.type === 0) return node.children.map(templateNode).join('');
73
- if (node.type !== 1) throw Error('Unsupported template node ' + node.type);
74
- const attrs = [];
75
- const original = node.tag;
76
- const component = node.tagType === 1 || original === 'component';
77
- let tag = component ? 'template' : original;
78
- if (component) attrs.push(['data-component', original === 'component' ? '$dynamic' : original]);
79
- for (const p of node.props) {
80
- if (p.type === 6) attrs.push([p.name, p.value?.content ?? '']);
81
- else if (p.type === 7) {
82
- const value = p.exp?.content || '';
83
- const arg = p.arg?.content || '';
84
- if (p.name === 'bind') attrs.push([arg ? 'data-bind-' + arg : 'data-bind', expression(value || arg)]);
85
- else if (p.name === 'on') attrs.push(['data-on-' + arg + (p.modifiers.length ? '.' + p.modifiers.map(m => m.content || m).join('.') : ''), eventExpression(value)]);
86
- else if (p.name === 'model') attrs.push(['data-model-' + (arg || 'model-value'), expression(value)]);
87
- else if (p.name === 'slot') { attrs.push(['data-slot', arg || 'default']); if (value) attrs.push(['data-slot-args', value]); }
88
- else if (p.name === 'for') {
89
- const loop=value.match(/^(.*?)\s+(in|of)\s+([\s\S]+)$/);
90
- if(!loop)throw Error('Invalid source iteration: '+value);
91
- attrs.push(['data-each',loop[1]+' '+loop[2]+' '+expression(loop[3])]);
92
- }
93
- else if (['if', 'else-if', 'else', 'show'].includes(p.name)) attrs.push(['data-' + p.name,expression(value)]);
94
- else if (p.name === 'html' || p.name === 'text') attrs.push(['data-' + p.name, expression(value)]);
95
- else throw Error('Unsupported directive ' + p.name);
96
- }
97
- }
98
- const attributes = attrs.map(([key, value]) => ` ${key}="${esc(value)}"`).join('');
99
- const children = node.children.map(templateNode).join('');
100
- if (['input', 'img', 'br', 'hr', 'meta', 'link', 'source'].includes(tag)) return `<${tag}${attributes}>`;
101
- return `<${tag}${attributes}>${children}</${tag}>`;
102
- }
103
- async function write(file, body) { await fs.mkdir(path.dirname(path.join(output, file)), { recursive: true }); await fs.writeFile(path.join(output, file), body); }
104
- async function walk(base) { const out = []; for (const e of await fs.readdir(base, { withFileTypes: true })) { const f = path.join(base, e.name); if (e.isDirectory()) out.push(...await walk(f)); else if (e.isFile()) out.push(f); } return out; }
105
-
106
- for (const full of await walk(path.join(source, 'src'))) {
107
- const file = path.relative(source, full).replaceAll(path.sep, '/');
108
- const input = await fs.readFile(full, 'utf8');
109
- for (const match of input.matchAll(/import\s*\{([^}]+)\}\s*from\s*['"]@ant-design\/icons-vue['"]/g)) for (const name of match[1].split(',').map(s => s.trim())) iconNames.add(name);
110
- hashes[file] = crypto.createHash('sha256').update(input).digest('hex');
111
- if (file === 'src/main.ts' || file === 'src/App.vue' || file === 'src/styles/theme.ts') continue;
112
- if (file.endsWith('.css')) { await write(file.replace('src/styles/', 'styles/'), input); continue; }
113
- if (file.endsWith('.ts')) { await write(file.replace(/\.ts$/, '.js'), transpile(rewriteImports(input, file))); continue; }
114
- if (!file.endsWith('.vue')) continue;
115
- const { descriptor, errors } = parseSfc(input);
116
- if (errors.length) throw errors[0];
117
- let code = rewriteImports(descriptor.scriptSetup?.content || '', file);
118
- const sf = ts.createSourceFile(file, code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
119
- const exposed = bindings(sf);
120
- const propKeys = [];
121
- const visitProps = node => {
122
- if (ts.isCallExpression(node) && node.expression.getText(sf) === 'defineProps' && ts.isTypeLiteralNode(node.typeArguments?.[0])) {
123
- for (const member of node.typeArguments[0].members) if (member.name) propKeys.push(member.name.getText(sf).replace(/^['"]|['"]$/g, ''));
124
- }
125
- ts.forEachChild(node, visitProps);
126
- };
127
- visitProps(sf);
128
- const imports = sf.statements.filter(ts.isImportDeclaration).map(s => s.getText(sf)).join('\n');
129
- let body = sf.statements.filter(s => !ts.isImportDeclaration(s)).map(s => s.getText(sf)).join('\n');
130
- body = body.replace(/defineProps\s*<[^]*?>\s*\(\s*\)/g, '__props').replace(/defineEmits\s*<[^]*?>\s*\(\s*\)/g, '__emit');
131
- const compiled = transpile(`${imports}\nimport { createComponent } from '${relativeRuntime(file, 'dom')}';\nimport { withDefaults } from '${relativeRuntime(file, 'state')}';\nexport default createComponent({ name: '${path.basename(file, '.vue')}', propKeys: ${JSON.stringify(propKeys)}, template: new URL('./${path.basename(file, '.vue')}.html', import.meta.url).href, setup(__props, __emit) { ${body}\n return { ${exposed.join(', ')} }; } });`);
132
- await write(file.replace(/\.vue$/, '.js'), compiled);
133
- const html = templateNode(parseTemplate(descriptor.template?.content || '', { expressionPlugins: ['typescript'], whitespace: 'condense' }));
134
- await write(file.replace(/\.vue$/, '.html'), `<!-- 来源:${file};HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->\n${html}\n`);
135
- }
136
- for (const full of await walk(path.join(source, 'tests'))) {
137
- if (!full.endsWith('.ts')) continue;
138
- const file = path.relative(source, full).replaceAll(path.sep, '/');
139
- await write(file.replace(/\.ts$/, '.js'), transpile(rewriteImports(await fs.readFile(full, 'utf8'), file)));
140
- }
141
- const main = await fs.readFile(path.join(source, 'src/main.ts'), 'utf8');
142
- const routes = main.split('\n').flatMap(line => {
143
- const route = line.match(/path:\s*['"]([^'"]+)['"]/); if (!route) return [];
144
- let component = line.match(/import\(['"]\.\/([^'"]+)\.vue['"]\)/)?.[1];
145
- if (line.includes('component: ModelsPage')) component = 'models/ModelsPage';
146
- if (line.includes('component: ScopePage')) component = 'shell/ScopePage';
147
- return [{ path: route[1], ...(component ? { component: './src/' + component + '.js' } : {}), ...(line.match(/redirect:\s*['"]([^'"]+)['"]/) ? { redirect: line.match(/redirect:\s*['"]([^'"]+)['"]/)[1] } : {}) }];
148
- });
149
- await write('routes.json', JSON.stringify(routes, null, 2) + '\n');
150
- await write('baseline.json', JSON.stringify({ source: path.relative(path.resolve(output, '../..'), source), version: 'v0.14', package: 'PT-06b', convertedAt: '2026-10-13', files: hashes, businessRouteCount: 37, userApproval: 'pending-review' }, null, 2) + '\n');
151
- const iconCode = ["import { h, defineWidget } from './dom.js';", "const svg = node => h(node.tag, node.attrs || {}, (node.children || []).map(svg));", "const icon = (name, data) => defineWidget(name, props => h('span', { class: ['anticon', 'anticon-' + data.name, props.class], role: 'img', 'aria-label': data.name, style: props.style }, svg({ ...data.icon, attrs: { ...data.icon.attrs, width: '1em', height: '1em', fill: 'currentColor', 'aria-hidden': 'true' } })));" ];
152
- for (const name of iconNames) {
153
- const loaded = require('@ant-design/icons-svg/lib/asn/' + name + '.js');
154
- iconCode.push(`export const ${name} = icon('${name}', ${JSON.stringify(loaded.default || loaded)});`);
155
- }
156
- await write('runtime/icons.js', iconCode.join('\n') + '\n');
157
- await fs.copyFile(require.resolve('antdv-next/dist/reset.css'), path.join(output, 'styles/reset.css'));
158
- for(const name of await fs.readdir(path.join(source,'dist/assets')))if(name.endsWith('.css')){
159
- const css=await fs.readFile(path.join(source,'dist/assets',name),'utf8'),split=css.indexOf(':root{--easel-primary');
160
- if(split>=0)await write('styles/pro.css',css.slice(0,split).replace(/\[data-v-[a-f0-9]+\]/g,'')+'\n');
161
- }
162
- for (const packageName of ['antdv-next', '@ant-design/icons-svg','@ant-design/icons-vue', '@qin-ui/antdv-next-pro']) {
163
- const packageDirectory = await fs.realpath(path.join(source, 'node_modules', packageName));
164
- for (const name of (await fs.readdir(packageDirectory)).filter(name=>/^licen[cs]e(?:\..*)?$/i.test(name))) {
165
- try { const text = await fs.readFile(path.join(packageDirectory, name), 'utf8'); await write('licenses/' + packageName.replaceAll('/', '-') + '.txt', text); break; } catch {}
166
- }
167
- }
168
- console.log(`Converted ${Object.keys(hashes).length} source files; ${routes.length} route rules.`);
@@ -1,7 +0,0 @@
1
- import http from 'node:http';
2
- import fs from 'node:fs/promises';
3
- import path from 'node:path';
4
- import { fileURLToPath } from 'node:url';
5
- const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..'),port=Number(process.env.PROTOTYPE_PORT||process.argv[2]||4194);
6
- const types={'.html':'text/html; charset=utf-8','.js':'text/javascript; charset=utf-8','.json':'application/json; charset=utf-8','.css':'text/css; charset=utf-8','.svg':'image/svg+xml','.png':'image/png','.md':'text/plain; charset=utf-8'};
7
- http.createServer(async(req,res)=>{try{let pathname=decodeURIComponent(new URL(req.url,'http://localhost').pathname),file=path.resolve(root,'.'+pathname);if(file!==root&&!file.startsWith(root+path.sep)){res.writeHead(403);res.end();return;}if(pathname.endsWith('/'))file=path.join(file,'index.html');const body=await fs.readFile(file);res.writeHead(200,{'Content-Type':types[path.extname(file)]||'application/octet-stream','Cache-Control':'no-store'});res.end(body);}catch(error){res.writeHead(error.code==='ENOENT'?404:500,{'Content-Type':'text/plain; charset=utf-8'});res.end('文件不可用');}}).listen(port,'127.0.0.1',()=>console.log(`HTML 原型:http://127.0.0.1:${port}/#/workbench`));
@@ -1,11 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { fileURLToPath } from 'node:url';
4
- const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
5
- const sheets = JSON.parse(await fs.readFile(path.join(root, 'assets/reference-styles.json'), 'utf8'));
6
- const variables = {};
7
- for (const sheet of sheets) for (const match of sheet.matchAll(/(--[\w-]+)\s*:\s*([^;{}]+);/g)) variables[match[1]] = match[2].trim();
8
- const css = sheets.map(sheet => sheet.replace(/:where\(\.css-(?!var-)[^)]*\)/g, '').replace(/\.css-var-[a-zA-Z0-9_-]+/g, '.native-theme')).join('\n');
9
- await fs.writeFile(path.join(root, 'styles/antdv.css'), css + '\n:root{' + Object.entries(variables).map(([key, value]) => key + ':' + value).join(';') + '}\n');
10
- await fs.writeFile(path.join(root, 'design-tokens.json'), JSON.stringify({ origin: 'v0.14 rendered Antdv Next theme', cssVariables: variables }, null, 2) + '\n');
11
- console.log(`${sheets.length} rendered style blocks; ${Object.keys(variables).length} CSS variables.`);
@@ -1,24 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import crypto from 'node:crypto';
4
- import { execFileSync } from 'node:child_process';
5
- import { fileURLToPath } from 'node:url';
6
- const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..'),source=path.resolve(root,'../../交互原型/console-operations-v0.14');
7
- const hash=bytes=>crypto.createHash('sha256').update(bytes).digest('hex');
8
- async function walk(directory){const result=[];for(const entry of await fs.readdir(directory,{withFileTypes:true})){const file=path.join(directory,entry.name);if(entry.isDirectory())result.push(...await walk(file));else if(entry.isFile())result.push(file);}return result;}
9
- const files=await walk(root),errors=[];let externalImports=0;
10
- for(const file of files.filter(file=>file.endsWith('.js')||file.endsWith('.mjs')))try{execFileSync(process.execPath,['--check',file],{stdio:'pipe'});}catch(error){errors.push(path.relative(root,file)+': '+error.stderr?.toString());}
11
- const runtimeFiles=files.filter(file=>file===path.join(root,'app.js')||file.startsWith(path.join(root,'runtime')+path.sep)||file.startsWith(path.join(root,'src')+path.sep));
12
- for(const file of runtimeFiles.filter(file=>file.endsWith('.js'))){const code=await fs.readFile(file,'utf8');for(const match of code.matchAll(/\bfrom\s*['"]([^'"]+)['"]/g)){const spec=match[1];if(!spec.startsWith('.')){externalImports++;errors.push('外部运行时导入:'+spec);}else try{await fs.access(path.resolve(path.dirname(file),spec));}catch{errors.push('导入缺失:'+spec+' in '+file);}}}
13
- if(files.some(file=>file.endsWith('.vue')))errors.push('HTML 交付中出现 .vue 文件');
14
- const routes=JSON.parse(await fs.readFile(path.join(root,'routes.json'),'utf8')),business=routes.filter(route=>route.component&&!route.path.startsWith('/module/'));
15
- if(business.length!==37)errors.push('业务路由数量应为 37');
16
- for(const route of routes.filter(route=>route.component))try{await fs.access(path.join(root,route.component));await fs.access(path.join(root,route.component.replace(/\.js$/,'.html')));}catch{errors.push('路由文件缺失:'+route.path);}
17
- const baseline=JSON.parse(await fs.readFile(path.join(root,'baseline.json'),'utf8'));
18
- let sourceFilesChecked=0,sourceManifestFilesChecked=0,sourceStatus='not-present';
19
- try{await fs.access(source);sourceStatus='checked';for(const [name,expected] of Object.entries(baseline.files)){if(hash(await fs.readFile(path.join(source,name)))!==expected)errors.push('来源变更:'+name);sourceFilesChecked++;}
20
- const manifest=JSON.parse(await fs.readFile(path.join(source,'交付校验.json'),'utf8'));for(const [name,expected] of Object.entries(manifest.files)){if(hash(await fs.readFile(path.join(source,name)))!==expected)errors.push('原版清单不符:'+name);sourceManifestFilesChecked++;}
21
- }catch(error){if(sourceStatus==='checked')errors.push('来源校验失败:'+error.message);}
22
- const report={checkedAt:new Date().toISOString(),syntaxFilesChecked:files.filter(f=>f.endsWith('.js')||f.endsWith('.mjs')).length,runtimeExternalImports:externalImports,businessRoutes:business.length,uniqueBusinessPages:new Set(business.map(r=>r.component)).size,htmlTemplates:files.filter(f=>f.startsWith(path.join(root,'src')+path.sep)&&f.endsWith('.html')).length,sourceStatus,sourceFilesChecked,sourceManifestFilesChecked,errors,status:errors.length?'FAIL':'PASS'};
23
- await fs.mkdir(path.join(root,'qa'),{recursive:true});await fs.writeFile(path.join(root,'qa/integrity.json'),JSON.stringify(report,null,2)+'\n');
24
- console.log(JSON.stringify(report,null,2));if(errors.length)process.exitCode=1;
@@ -1,16 +0,0 @@
1
- 'use strict';
2
- const http = require('node:http');
3
- const fs = require('node:fs');
4
- const path = require('node:path');
5
- const root = path.resolve(__dirname, '..');
6
- const types = { '.html': 'text/html', '.mjs': 'text/javascript', '.js': 'text/javascript', '.svg': 'image/svg+xml', '.png': 'image/png', '.jpg': 'image/jpeg', '.webp': 'image/webp', '.css': 'text/css', '.json': 'application/json' };
7
- const server = http.createServer((req, res) => {
8
- let relative;
9
- try { relative = decodeURIComponent(new URL(req.url, 'http://localhost').pathname); } catch { res.writeHead(400).end(); return; }
10
- if (relative === '/') { res.writeHead(302, { Location: '/app/index.html' }).end(); return; }
11
- const file = path.resolve(root, '.' + relative);
12
- if (!file.startsWith(root + path.sep) || !fs.existsSync(file) || !fs.statSync(file).isFile() || !fs.realpathSync(file).startsWith(fs.realpathSync(root) + path.sep)) { res.writeHead(404).end(); return; }
13
- res.writeHead(200, { 'Content-Type': (types[path.extname(file)] || 'application/octet-stream') + '; charset=utf-8', 'Cache-Control': 'no-store' });
14
- fs.createReadStream(file).pipe(res);
15
- });
16
- server.listen(Number(process.argv[2] || 0), '127.0.0.1', () => process.stdout.write(`原型预览:http://127.0.0.1:${server.address().port}/\n`));