@givolt/i3-composer-agent 3.1.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (677) 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-sop.md +3 -3
  9. package/.claude/commands/i3-spec.md +1 -0
  10. package/.claude/commands/i3-test.md +1 -0
  11. package/.claude/commands/i3-webperf.md +1 -0
  12. package/.claude-plugin/marketplace.json +1 -1
  13. package/.claude-plugin/plugin.json +1 -1
  14. package/.codex-plugin/plugin.json +2 -2
  15. package/.gemini/commands/i3-sop.toml +3 -3
  16. package/README.md +44 -43
  17. package/bin/i3-composer-agent.cjs +4 -59
  18. package/bin/install.cjs +6 -14
  19. package/bin/native-layout.cjs +11 -2
  20. package/bin/native-migration.cjs +68 -28
  21. package/bin/retired-custom-fingerprints.json +1597 -0
  22. package/bin/wizard.cjs +2 -13
  23. package/commands/i3-sop.toml +3 -3
  24. package/docs/antigravity-setup.md +3 -1
  25. package/docs/codebuddy-setup.md +19 -76
  26. package/docs/codex-setup.md +10 -4
  27. package/docs/comparison.md +1 -1
  28. package/docs/copilot-cli-setup.md +4 -4
  29. package/docs/cursor-setup.md +1 -1
  30. package/docs/gemini-cli-setup.md +1 -1
  31. package/docs/other-hosts.md +2 -2
  32. package/docs/windsurf-setup.md +2 -2
  33. package/docs/workbuddy-setup.md +9 -16
  34. package/evals/README.md +10 -0
  35. package/evals/cases/i3-code-simplification.json +8 -0
  36. package/evals/cases/i3-documentation-and-adrs.json +4 -0
  37. package/evals/cases/i3-enterprise-sop.json +70 -32
  38. package/evals/cases/i3-frontend-ui-engineering.json +1 -1
  39. package/evals/cases/i3-security-and-hardening.json +4 -0
  40. package/evals/cases/i3-ui-demo.json +2 -2
  41. package/evals/cases/i3-using-agent-skills.json +5 -5
  42. package/evals/plugin/simplify-fires-on-pasted-function/graders/behavior-kept-and-explained.md +7 -0
  43. package/evals/plugin/simplify-fires-on-pasted-function/graders/skill-fired.md +5 -0
  44. package/evals/plugin/simplify-fires-on-pasted-function/prompt.md +30 -0
  45. package/evals/plugin/simplify-stays-quiet-on-make-it-fast/graders/not-fired.md +8 -0
  46. package/evals/plugin/simplify-stays-quiet-on-make-it-fast/prompt.md +20 -0
  47. package/evals/zh-CN/cases/i3-code-simplification.json +8 -0
  48. package/evals/zh-CN/cases/i3-documentation-and-adrs.json +4 -0
  49. package/evals/zh-CN/cases/i3-enterprise-sop.json +77 -31
  50. package/evals/zh-CN/cases/i3-frontend-ui-engineering.json +2 -2
  51. package/evals/zh-CN/cases/i3-security-and-hardening.json +4 -0
  52. package/evals/zh-CN/cases/i3-ui-demo.json +2 -2
  53. package/evals/zh-CN/cases/i3-using-agent-skills.json +6 -6
  54. package/hooks/SDD-CACHE.md +1 -1
  55. package/package.json +13 -102
  56. package/plugin.json +15 -2
  57. package/references/accessibility-checklist.md +4 -4
  58. package/references/performance-checklist.md +5 -4
  59. package/references/testing-patterns.md +2 -1
  60. package/scripts/floor-guard-reference-test.js +32 -0
  61. package/scripts/lib/execution-status.js +44 -0
  62. package/scripts/run-evals-test.js +157 -7
  63. package/scripts/run-evals.js +59 -12
  64. package/scripts/ui-demo-test.js +2 -2
  65. package/scripts/validate-artifact-paths-test.js +14 -0
  66. package/scripts/validate-artifact-paths.js +4 -2
  67. package/skills/i3-api-and-interface-design/SKILL.md +3 -1
  68. package/skills/i3-ci-cd-and-automation/SKILL.md +7 -4
  69. package/skills/i3-code-simplification/SKILL.md +3 -3
  70. package/skills/i3-constraint-driven-development/SKILL.md +4 -4
  71. package/skills/i3-constraint-driven-development/references/floor-guard.md +2 -2
  72. package/skills/i3-context-engineering/SKILL.md +1 -1
  73. package/skills/i3-debugging-and-error-recovery/SKILL.md +1 -1
  74. package/skills/i3-deprecation-and-migration/SKILL.md +6 -1
  75. package/skills/i3-documentation-and-adrs/SKILL.md +3 -2
  76. package/skills/i3-enterprise-sop/SKILL.md +121 -94
  77. package/skills/i3-enterprise-sop/references/engineering-skeleton/directory-standard.md +31 -17
  78. package/skills/i3-enterprise-sop/references/handoff.py +235 -135
  79. package/skills/i3-enterprise-sop/references/read_text.py +60 -0
  80. package/skills/i3-enterprise-sop/references/technical-baseline/baselines/enterprise-application-technical-baseline-v0-0-4.md +47 -47
  81. package/skills/i3-enterprise-sop/references/technical-baseline/readme.md +9 -118
  82. package/skills/i3-enterprise-sop/references/technical-baseline/templates/technical-baseline.md +8 -8
  83. package/skills/i3-enterprise-sop/references/{ad/templates → templates}/ad.md +57 -50
  84. package/skills/i3-enterprise-sop/references/{brd/templates → templates}/brd.md +23 -12
  85. package/skills/i3-enterprise-sop/references/{prd/templates → templates}/prd.md +84 -51
  86. package/skills/i3-enterprise-sop/references/{testcase/templates → templates}/testcase.md +49 -39
  87. package/skills/i3-frontend-ui-engineering/SKILL.md +6 -10
  88. package/skills/i3-idea-refine/SKILL.md +4 -2
  89. package/skills/i3-incremental-implementation/SKILL.md +0 -4
  90. package/skills/i3-performance-optimization/SKILL.md +2 -2
  91. package/skills/i3-security-and-hardening/references/hardening-patterns.md +5 -0
  92. package/skills/i3-source-driven-development/SKILL.md +3 -2
  93. package/skills/i3-spec-driven-development/SKILL.md +1 -1
  94. package/skills/i3-ui-demo/SKILL.md +3 -1
  95. package/skills/i3-ui-demo/references/dependencies.md +1 -1
  96. package/skills/i3-ui-demo/references/resources.md +1 -1
  97. package/skills/i3-ui-demo/scripts/dependencies.cjs +0 -3
  98. package/skills/i3-using-agent-skills/SKILL.md +2 -2
  99. package/.claude/commands/i3-prototype.md +0 -23
  100. package/.gemini/commands/i3-prototype.toml +0 -23
  101. package/commands/i3-prototype.toml +0 -23
  102. package/docs/upstream-repository/AGENTS.md +0 -92
  103. package/docs/upstream-repository/CLAUDE.md +0 -60
  104. package/docs/upstream-repository/CONTRIBUTING.md +0 -137
  105. package/docs/upstream-repository/README.md +0 -8
  106. package/docs/upstream-repository/gitattributes.txt +0 -1
  107. package/docs/upstream-repository/gitignore.txt +0 -10
  108. package/docs/upstream-repository/manifest.json +0 -71
  109. package/docs/upstream-repository/opencode-skills.link +0 -1
  110. package/docs/upstream-repository/skill-gap.yml +0 -80
  111. package/docs/upstream-repository/skills-contributing.md +0 -15
  112. package/docs/upstream-repository/test-plugin-install.yml +0 -167
  113. package/evals/cases/i3-ui-prototype.json +0 -158
  114. package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.css +0 -3
  115. package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.js +0 -8
  116. package/evals/fixtures/i3-ui-prototype/admin-list/capability-definition.json +0 -67
  117. package/evals/fixtures/i3-ui-prototype/admin-list/index.html +0 -89
  118. package/evals/fixtures/i3-ui-prototype/admin-list/readme.md +0 -52
  119. package/evals/fixtures/i3-ui-prototype/admin-list/template.json +0 -8
  120. package/evals/fixtures/i3-ui-prototype/business-brief.md +0 -7
  121. package/evals/zh-CN/cases/i3-ui-prototype.json +0 -165
  122. package/hooks/PROTOTYPE.md +0 -31
  123. package/hooks/codebuddy-upstream.cjs +0 -93
  124. package/hooks/i3-prototype.cjs +0 -7
  125. package/hooks/manage.cjs +0 -169
  126. package/scripts/design-provider-discovery-test.js +0 -190
  127. package/scripts/design-provider-test.js +0 -75
  128. package/scripts/enterprise-template-test.js +0 -205
  129. package/scripts/lib/prototype-fixture.cjs +0 -17
  130. package/scripts/prototype-cache-test.js +0 -55
  131. package/scripts/prototype-generation-entry-test.js +0 -6
  132. package/scripts/prototype-generation-evidence-test.js +0 -10
  133. package/scripts/prototype-generation-native-test.js +0 -78
  134. package/scripts/prototype-generation-test.js +0 -99
  135. package/scripts/prototype-inventory-test.js +0 -43
  136. package/scripts/prototype-locations-test.js +0 -79
  137. package/scripts/prototype-project-test.js +0 -183
  138. package/scripts/template-adapter-test.js +0 -155
  139. package/scripts/ui-prototype-binding-recovery-test.js +0 -84
  140. package/scripts/ui-prototype-buddy-lifecycle-test.js +0 -102
  141. package/scripts/ui-prototype-codebuddy-hook-test.js +0 -112
  142. package/scripts/ui-prototype-content-test.js +0 -123
  143. package/scripts/ui-prototype-dependencies-test.js +0 -226
  144. package/scripts/ui-prototype-devtools-test.js +0 -53
  145. package/scripts/ui-prototype-execution-evidence-test.js +0 -62
  146. package/scripts/ui-prototype-execution-gates-test.js +0 -91
  147. package/scripts/ui-prototype-execution-policy-test.js +0 -53
  148. package/scripts/ui-prototype-execution-runtime-test.js +0 -27
  149. package/scripts/ui-prototype-ide-source-test.js +0 -73
  150. package/scripts/ui-prototype-native-test.js +0 -526
  151. package/scripts/ui-prototype-recovery-test.js +0 -81
  152. package/scripts/ui-prototype-registration-test.js +0 -53
  153. package/scripts/ui-prototype-template-test.js +0 -261
  154. package/scripts/ui-prototype-test.js +0 -124
  155. package/scripts/ui-prototype-transcript-auto-test.js +0 -67
  156. package/skills/i3-enterprise-sop/references/ad/assets-manifest.json +0 -86
  157. package/skills/i3-enterprise-sop/references/ad/prompts/01-generate.md +0 -58
  158. package/skills/i3-enterprise-sop/references/ad/prompts/02-review.md +0 -54
  159. package/skills/i3-enterprise-sop/references/ad/prompts/03-revise.md +0 -54
  160. package/skills/i3-enterprise-sop/references/ad/prompts/04-recheck.md +0 -54
  161. package/skills/i3-enterprise-sop/references/ad/readme.md +0 -70
  162. package/skills/i3-enterprise-sop/references/assets-manifest.json +0 -230
  163. package/skills/i3-enterprise-sop/references/brd/assets-manifest.json +0 -83
  164. package/skills/i3-enterprise-sop/references/brd/prompts/01-generate.md +0 -51
  165. package/skills/i3-enterprise-sop/references/brd/prompts/02-review.md +0 -47
  166. package/skills/i3-enterprise-sop/references/brd/prompts/03-revise.md +0 -47
  167. package/skills/i3-enterprise-sop/references/brd/prompts/04-recheck.md +0 -47
  168. package/skills/i3-enterprise-sop/references/brd/readme.md +0 -50
  169. package/skills/i3-enterprise-sop/references/codebuddy-project-guide.md +0 -34
  170. package/skills/i3-enterprise-sop/references/controlled-handoff.md +0 -41
  171. package/skills/i3-enterprise-sop/references/controlled_handoff.py +0 -379
  172. package/skills/i3-enterprise-sop/references/engineering-skeleton/adoption.md +0 -200
  173. package/skills/i3-enterprise-sop/references/engineering-skeleton/catalog.json +0 -17
  174. package/skills/i3-enterprise-sop/references/engineering-skeleton/readme.md +0 -52
  175. package/skills/i3-enterprise-sop/references/handoff-contract.md +0 -196
  176. package/skills/i3-enterprise-sop/references/lifecycle-contract.md +0 -91
  177. package/skills/i3-enterprise-sop/references/plan-handoff.md +0 -73
  178. package/skills/i3-enterprise-sop/references/prd/assets-manifest.json +0 -109
  179. package/skills/i3-enterprise-sop/references/prd/prompts/01-generate.md +0 -64
  180. package/skills/i3-enterprise-sop/references/prd/prompts/02-review.md +0 -49
  181. package/skills/i3-enterprise-sop/references/prd/prompts/03-revise.md +0 -48
  182. package/skills/i3-enterprise-sop/references/prd/prompts/04-recheck.md +0 -47
  183. package/skills/i3-enterprise-sop/references/prd/readme.md +0 -137
  184. package/skills/i3-enterprise-sop/references/prd/template-contracts.md +0 -39
  185. package/skills/i3-enterprise-sop/references/prd/templates/ad.md +0 -17
  186. package/skills/i3-enterprise-sop/references/readme.md +0 -167
  187. package/skills/i3-enterprise-sop/references/recovery-contract.md +0 -65
  188. package/skills/i3-enterprise-sop/references/review-handoff.md +0 -105
  189. package/skills/i3-enterprise-sop/references/selection-handoff.md +0 -55
  190. package/skills/i3-enterprise-sop/references/selection_handoff.py +0 -225
  191. package/skills/i3-enterprise-sop/references/stages.json +0 -271
  192. package/skills/i3-enterprise-sop/references/technical-baseline/assets-manifest.json +0 -84
  193. package/skills/i3-enterprise-sop/references/template-contracts.md +0 -142
  194. package/skills/i3-enterprise-sop/references/testcase/assets-manifest.json +0 -91
  195. package/skills/i3-enterprise-sop/references/testcase/prompts/01-generate.md +0 -53
  196. package/skills/i3-enterprise-sop/references/testcase/prompts/02-review.md +0 -51
  197. package/skills/i3-enterprise-sop/references/testcase/prompts/03-revise.md +0 -49
  198. package/skills/i3-enterprise-sop/references/testcase/prompts/04-recheck.md +0 -51
  199. package/skills/i3-enterprise-sop/references/testcase/readme.md +0 -61
  200. package/skills/i3-enterprise-sop/references/verification/check_execution.py +0 -185
  201. package/skills/i3-enterprise-sop/references/verification/check_native_execution.py +0 -282
  202. package/skills/i3-enterprise-sop/references/verification/check_reads.py +0 -348
  203. package/skills/i3-enterprise-sop/references/verification/readme.md +0 -149
  204. package/skills/i3-enterprise-sop/references/verification/review-output.schema.json +0 -155
  205. package/skills/i3-enterprise-sop/references/verification/review_handoff.py +0 -329
  206. package/skills/i3-ui-prototype/SKILL.md +0 -256
  207. package/skills/i3-ui-prototype/assets/capabilities/generation.json +0 -833
  208. package/skills/i3-ui-prototype/assets/capabilities/management.json +0 -294
  209. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/acceptance.json +0 -51
  210. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/component-map.json +0 -13
  211. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/generation-component-map.json +0 -300
  212. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/index.html +0 -11
  213. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package-lock.json +0 -2298
  214. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package.json +0 -22
  215. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/public/prototype-config.json +0 -6
  216. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/App.vue +0 -136
  217. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/components/DeviceEditor.vue +0 -111
  218. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/config.ts +0 -19
  219. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/content.ts +0 -28
  220. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/devices.ts +0 -50
  221. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/theme.ts +0 -25
  222. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/main.ts +0 -18
  223. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/style.css +0 -50
  224. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/useDevices.ts +0 -66
  225. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/devices.test.ts +0 -44
  226. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/theme.test.ts +0 -26
  227. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tsconfig.json +0 -15
  228. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/vite.config.ts +0 -4
  229. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/profile.json +0 -174
  230. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/readme.md +0 -61
  231. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/index.html +0 -11
  232. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package-lock.json +0 -2298
  233. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package.json +0 -22
  234. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/public/prototype-config.json +0 -21
  235. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/App.vue +0 -62
  236. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/PrototypeShell.vue +0 -59
  237. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/config.ts +0 -23
  238. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/presentation.ts +0 -29
  239. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/theme.ts +0 -25
  240. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/main.ts +0 -18
  241. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/style.css +0 -26
  242. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/presentation.test.ts +0 -23
  243. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/theme.test.ts +0 -26
  244. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tsconfig.json +0 -15
  245. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/vite.config.ts +0 -4
  246. package/skills/i3-ui-prototype/assets/hosts/codebuddy/profile.json +0 -17
  247. package/skills/i3-ui-prototype/assets/optional-skills/host-targets.json +0 -739
  248. package/skills/i3-ui-prototype/assets/optional-skills/sources.json +0 -27
  249. package/skills/i3-ui-prototype/assets/templates/catalog.js +0 -149
  250. package/skills/i3-ui-prototype/assets/templates/catalog.json +0 -149
  251. package/skills/i3-ui-prototype/assets/templates/classic-admin/manifest.json +0 -9
  252. package/skills/i3-ui-prototype/assets/templates/classic-admin/preset.json +0 -6
  253. package/skills/i3-ui-prototype/assets/templates/common/app/app.mjs +0 -89
  254. package/skills/i3-ui-prototype/assets/templates/common/app/config.json +0 -1
  255. package/skills/i3-ui-prototype/assets/templates/common/app/domain.mjs +0 -20
  256. package/skills/i3-ui-prototype/assets/templates/common/app/index.html +0 -17
  257. package/skills/i3-ui-prototype/assets/templates/common/app/serve.cjs +0 -16
  258. package/skills/i3-ui-prototype/assets/templates/common/app/styles.css +0 -670
  259. package/skills/i3-ui-prototype/assets/templates/common/app/tokens.css +0 -19
  260. package/skills/i3-ui-prototype/assets/templates/common/design-system/master.md +0 -20
  261. package/skills/i3-ui-prototype/assets/templates/common/gallery.html +0 -2
  262. package/skills/i3-ui-prototype/assets/templates/common/mocks/applications.json +0 -5
  263. package/skills/i3-ui-prototype/assets/templates/common/requirements-map.json +0 -8
  264. package/skills/i3-ui-prototype/assets/templates/common/serve-gallery.cjs +0 -16
  265. package/skills/i3-ui-prototype/assets/templates/credits.md +0 -17
  266. package/skills/i3-ui-prototype/assets/templates/data-operations/manifest.json +0 -9
  267. package/skills/i3-ui-prototype/assets/templates/data-operations/preset.json +0 -6
  268. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/capability-definition.json +0 -294
  269. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/component-inventory.json +0 -707
  270. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/design-system.md +0 -32
  271. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/generation.json +0 -49
  272. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/index.html +0 -534
  273. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/manifest.json +0 -9
  274. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline-build.json +0 -265
  275. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline.js +0 -8888
  276. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/origin.json +0 -344
  277. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/preset.json +0 -928
  278. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/app.js +0 -22
  279. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/empty.svg +0 -1
  280. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/reference-styles.json +0 -1
  281. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-403.svg +0 -1
  282. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-404.svg +0 -1
  283. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets-manifest.json +0 -334
  284. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/baseline.json +0 -173
  285. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/conversion.md +0 -30
  286. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/credits.md +0 -17
  287. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/design-tokens.json +0 -881
  288. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/index.html +0 -28
  289. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +0 -9
  290. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +0 -22
  291. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +0 -21
  292. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/package.json +0 -12
  293. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/browser-routes.json +0 -298
  294. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/coverage.json +0 -180
  295. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/integrity.json +0 -13
  296. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/keyboard.json +0 -11
  297. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/responsive.json +0 -125
  298. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/review.md +0 -51
  299. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/rules.log +0 -150
  300. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
  301. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
  302. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
  303. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
  304. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
  305. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
  306. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
  307. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
  308. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/selection.json +0 -9
  309. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +0 -342
  310. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/readme.md +0 -73
  311. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/reference.md +0 -59
  312. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/routes.json +0 -178
  313. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/controls.js +0 -99
  314. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dialogs.js +0 -54
  315. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dom.js +0 -264
  316. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/forms.js +0 -47
  317. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/icons.js +0 -41
  318. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/layout.js +0 -47
  319. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/router.js +0 -63
  320. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/state.js +0 -90
  321. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/table.js +0 -41
  322. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/widgets.js +0 -8
  323. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +0 -3
  324. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +0 -36
  325. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +0 -2
  326. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +0 -51
  327. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +0 -3
  328. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +0 -48
  329. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +0 -2
  330. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +0 -6
  331. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +0 -2
  332. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +0 -13
  333. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/data.js +0 -24
  334. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/domain.js +0 -32
  335. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/registry.js +0 -25
  336. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/store.js +0 -85
  337. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +0 -2
  338. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +0 -17
  339. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +0 -2
  340. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +0 -66
  341. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +0 -3
  342. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +0 -38
  343. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +0 -2
  344. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +0 -66
  345. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +0 -2
  346. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +0 -5
  347. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +0 -2
  348. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +0 -12
  349. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +0 -2
  350. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +0 -11
  351. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +0 -2
  352. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +0 -116
  353. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +0 -2
  354. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +0 -32
  355. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +0 -2
  356. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +0 -49
  357. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +0 -2
  358. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +0 -10
  359. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +0 -2
  360. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +0 -77
  361. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/data.js +0 -60
  362. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/domain.js +0 -105
  363. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/store.js +0 -212
  364. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +0 -2
  365. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +0 -18
  366. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +0 -2
  367. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +0 -23
  368. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +0 -2
  369. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +0 -78
  370. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +0 -2
  371. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +0 -55
  372. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +0 -2
  373. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +0 -26
  374. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +0 -2
  375. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +0 -38
  376. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +0 -2
  377. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +0 -7
  378. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +0 -2
  379. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +0 -72
  380. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +0 -2
  381. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +0 -46
  382. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +0 -2
  383. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +0 -52
  384. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.html +0 -2
  385. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.js +0 -19
  386. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +0 -2
  387. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +0 -30
  388. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/data.js +0 -48
  389. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/domain.js +0 -39
  390. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/store.js +0 -129
  391. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +0 -4
  392. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +0 -21
  393. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +0 -2
  394. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +0 -8
  395. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +0 -2
  396. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +0 -37
  397. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +0 -2
  398. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +0 -10
  399. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +0 -2
  400. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +0 -37
  401. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +0 -2
  402. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +0 -49
  403. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +0 -4
  404. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +0 -22
  405. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +0 -2
  406. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +0 -9
  407. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/commands.js +0 -82
  408. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/examples.js +0 -47
  409. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/model.js +0 -61
  410. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/repair.js +0 -68
  411. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/store.js +0 -55
  412. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/types.js +0 -1
  413. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/workbench.js +0 -18
  414. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +0 -3
  415. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +0 -28
  416. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +0 -2
  417. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +0 -18
  418. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +0 -2
  419. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +0 -31
  420. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +0 -2
  421. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +0 -27
  422. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +0 -2
  423. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +0 -16
  424. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +0 -2
  425. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +0 -43
  426. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +0 -4
  427. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +0 -34
  428. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +0 -2
  429. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +0 -30
  430. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +0 -3
  431. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +0 -67
  432. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +0 -2
  433. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +0 -41
  434. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +0 -2
  435. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +0 -31
  436. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +0 -2
  437. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +0 -26
  438. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +0 -2
  439. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +0 -70
  440. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/data.js +0 -8
  441. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/domain.js +0 -62
  442. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/management.js +0 -36
  443. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +0 -49
  444. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/store.js +0 -132
  445. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +0 -2
  446. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +0 -38
  447. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +0 -2
  448. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +0 -11
  449. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +0 -2
  450. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +0 -45
  451. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +0 -2
  452. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +0 -54
  453. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +0 -3
  454. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +0 -27
  455. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +0 -2
  456. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +0 -12
  457. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +0 -2
  458. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +0 -45
  459. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +0 -3
  460. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +0 -38
  461. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/domain.js +0 -61
  462. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/state.js +0 -51
  463. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/store.js +0 -116
  464. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +0 -2
  465. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +0 -45
  466. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +0 -4
  467. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +0 -30
  468. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +0 -2
  469. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +0 -67
  470. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +0 -2
  471. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +0 -5
  472. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +0 -4
  473. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +0 -60
  474. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/commands.js +0 -157
  475. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/model.js +0 -136
  476. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/store.js +0 -76
  477. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +0 -3
  478. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +0 -26
  479. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +0 -2
  480. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +0 -14
  481. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +0 -2
  482. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +0 -113
  483. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +0 -3
  484. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +0 -62
  485. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/commands.js +0 -97
  486. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/model.js +0 -147
  487. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/store.js +0 -13
  488. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +0 -2
  489. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +0 -9
  490. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +0 -2
  491. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +0 -8
  492. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +0 -2
  493. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +0 -37
  494. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +0 -2
  495. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +0 -8
  496. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +0 -2
  497. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +0 -17
  498. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/columns.js +0 -32
  499. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +0 -49
  500. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +0 -12
  501. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +0 -15
  502. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +0 -37
  503. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/policy.js +0 -68
  504. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/session.js +0 -44
  505. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +0 -2
  506. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +0 -25
  507. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +0 -2
  508. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +0 -53
  509. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +0 -10
  510. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +0 -30
  511. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +0 -2
  512. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +0 -10
  513. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +0 -2
  514. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +0 -9
  515. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +0 -3
  516. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/navigation.js +0 -19
  517. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +0 -2
  518. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +0 -8
  519. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +0 -2
  520. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +0 -32
  521. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +0 -2
  522. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +0 -15
  523. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +0 -2
  524. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +0 -11
  525. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +0 -2
  526. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +0 -57
  527. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +0 -2
  528. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +0 -37
  529. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/data.js +0 -20
  530. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/domain.js +0 -55
  531. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/store.js +0 -151
  532. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +0 -3
  533. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +0 -18
  534. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +0 -2
  535. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +0 -40
  536. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +0 -2
  537. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +0 -51
  538. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +0 -2
  539. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +0 -9
  540. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +0 -5
  541. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +0 -48
  542. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/domain.js +0 -204
  543. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +0 -22
  544. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/registry.js +0 -135
  545. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/store.js +0 -137
  546. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +0 -3
  547. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +0 -36
  548. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/model.js +0 -56
  549. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/store.js +0 -15
  550. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +0 -2
  551. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +0 -27
  552. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +0 -4
  553. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +0 -31
  554. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +0 -2
  555. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +0 -68
  556. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +0 -5
  557. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +0 -55
  558. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/data.js +0 -16
  559. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/domain.js +0 -83
  560. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/registry.js +0 -18
  561. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/store.js +0 -61
  562. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/admin.css +0 -60
  563. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/agents.css +0 -46
  564. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/antdv.css +0 -295
  565. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/app.css +0 -102
  566. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/delivery.css +0 -4
  567. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/intents.css +0 -37
  568. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/native.css +0 -22
  569. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/operations.css +0 -2
  570. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pbc.css +0 -3
  571. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/permissions.css +0 -22
  572. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pro.css +0 -1
  573. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/releases.css +0 -4
  574. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reset.css +0 -246
  575. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reviews.css +0 -8
  576. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tasks.css +0 -6
  577. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tokens.css +0 -15
  578. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workbench.css +0 -61
  579. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workflows.css +0 -1
  580. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +0 -96
  581. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/agents.test.js +0 -14
  582. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +0 -37
  583. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +0 -44
  584. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +0 -19
  585. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +0 -14
  586. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operations.test.js +0 -25
  587. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +0 -17
  588. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +0 -24
  589. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +0 -23
  590. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permissions.test.js +0 -24
  591. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/releases.test.js +0 -50
  592. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/reviews.test.js +0 -36
  593. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +0 -28
  594. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +0 -42
  595. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +0 -16
  596. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +0 -11
  597. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/tasks.test.js +0 -27
  598. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workbench.test.js +0 -34
  599. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workflows.test.js +0 -16
  600. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/convert.mjs +0 -168
  601. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/serve.mjs +0 -7
  602. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/styles.mjs +0 -11
  603. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/verify.mjs +0 -24
  604. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/serve.cjs +0 -16
  605. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template-inventory.json +0 -28791
  606. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template.json +0 -9
  607. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/usability.css +0 -44
  608. package/skills/i3-ui-prototype/assets/templates/gallery/index.html +0 -40
  609. package/skills/i3-ui-prototype/assets/templates/generation-options.js +0 -42
  610. package/skills/i3-ui-prototype/assets/templates/index.html +0 -3
  611. package/skills/i3-ui-prototype/assets/templates/modern-workspace/manifest.json +0 -9
  612. package/skills/i3-ui-prototype/assets/templates/modern-workspace/preset.json +0 -6
  613. package/skills/i3-ui-prototype/assets/templates/presentation.html +0 -17
  614. package/skills/i3-ui-prototype/assets/templates/serve-gallery.cjs +0 -23
  615. package/skills/i3-ui-prototype/references/artifact-contract.md +0 -66
  616. package/skills/i3-ui-prototype/references/content-template.md +0 -81
  617. package/skills/i3-ui-prototype/references/enterprise-admin.md +0 -44
  618. package/skills/i3-ui-prototype/references/entry-contract.md +0 -71
  619. package/skills/i3-ui-prototype/references/execution-evidence.md +0 -51
  620. package/skills/i3-ui-prototype/references/expert-adapter.md +0 -76
  621. package/skills/i3-ui-prototype/references/framework-contract.md +0 -76
  622. package/skills/i3-ui-prototype/references/generation-contract.md +0 -122
  623. package/skills/i3-ui-prototype/references/interaction-acceptance.md +0 -169
  624. package/skills/i3-ui-prototype/references/legacy-native.md +0 -58
  625. package/skills/i3-ui-prototype/references/optional-skills.md +0 -63
  626. package/skills/i3-ui-prototype/references/project-layout.md +0 -92
  627. package/skills/i3-ui-prototype/references/template-adapters.md +0 -63
  628. package/skills/i3-ui-prototype/references/workflow-contract.md +0 -77
  629. package/skills/i3-ui-prototype/scripts/adapters/easel-html.cjs +0 -30
  630. package/skills/i3-ui-prototype/scripts/adapters/legacy-html.cjs +0 -28
  631. package/skills/i3-ui-prototype/scripts/browser-workspace.cjs +0 -72
  632. package/skills/i3-ui-prototype/scripts/buddy-host.cjs +0 -40
  633. package/skills/i3-ui-prototype/scripts/check-design-provider.cjs +0 -9
  634. package/skills/i3-ui-prototype/scripts/check-prototype.cjs +0 -14
  635. package/skills/i3-ui-prototype/scripts/codebuddy-context.cjs +0 -92
  636. package/skills/i3-ui-prototype/scripts/codebuddy-hook.cjs +0 -298
  637. package/skills/i3-ui-prototype/scripts/codebuddy-ide-source.cjs +0 -69
  638. package/skills/i3-ui-prototype/scripts/codebuddy-registration.cjs +0 -125
  639. package/skills/i3-ui-prototype/scripts/content-template.cjs +0 -98
  640. package/skills/i3-ui-prototype/scripts/design-provider-discovery.cjs +0 -128
  641. package/skills/i3-ui-prototype/scripts/enterprise-template.cjs +0 -104
  642. package/skills/i3-ui-prototype/scripts/execution-assertions.cjs +0 -43
  643. package/skills/i3-ui-prototype/scripts/execution-diagnostics.cjs +0 -91
  644. package/skills/i3-ui-prototype/scripts/execution-evidence.cjs +0 -177
  645. package/skills/i3-ui-prototype/scripts/execution-gates.cjs +0 -216
  646. package/skills/i3-ui-prototype/scripts/execution-policy.cjs +0 -62
  647. package/skills/i3-ui-prototype/scripts/execution-recovery.cjs +0 -58
  648. package/skills/i3-ui-prototype/scripts/execution-runtime.cjs +0 -69
  649. package/skills/i3-ui-prototype/scripts/generation-assets.cjs +0 -18
  650. package/skills/i3-ui-prototype/scripts/generation-contract.cjs +0 -214
  651. package/skills/i3-ui-prototype/scripts/generation-evidence.cjs +0 -50
  652. package/skills/i3-ui-prototype/scripts/generation-replan.cjs +0 -34
  653. package/skills/i3-ui-prototype/scripts/hosts/codebuddy.cjs +0 -21
  654. package/skills/i3-ui-prototype/scripts/init-prototype.cjs +0 -8
  655. package/skills/i3-ui-prototype/scripts/manage-baseline.cjs +0 -11
  656. package/skills/i3-ui-prototype/scripts/native-browser.cjs +0 -785
  657. package/skills/i3-ui-prototype/scripts/native-build.cjs +0 -91
  658. package/skills/i3-ui-prototype/scripts/native-command.cjs +0 -35
  659. package/skills/i3-ui-prototype/scripts/native-delivery.cjs +0 -104
  660. package/skills/i3-ui-prototype/scripts/native-devtools.cjs +0 -92
  661. package/skills/i3-ui-prototype/scripts/native-files.cjs +0 -44
  662. package/skills/i3-ui-prototype/scripts/native-pilot-lib.cjs +0 -290
  663. package/skills/i3-ui-prototype/scripts/native-pilot.cjs +0 -59
  664. package/skills/i3-ui-prototype/scripts/native-tool-name.cjs +0 -5
  665. package/skills/i3-ui-prototype/scripts/native-tool-result.cjs +0 -14
  666. package/skills/i3-ui-prototype/scripts/optional-skill-install.cjs +0 -203
  667. package/skills/i3-ui-prototype/scripts/project-registry.cjs +0 -126
  668. package/skills/i3-ui-prototype/scripts/prototype-dependencies.cjs +0 -103
  669. package/skills/i3-ui-prototype/scripts/prototype-hooks.cjs +0 -94
  670. package/skills/i3-ui-prototype/scripts/prototype-lib.cjs +0 -277
  671. package/skills/i3-ui-prototype/scripts/prototype-locations.cjs +0 -69
  672. package/skills/i3-ui-prototype/scripts/ptc-callbacks.cjs +0 -131
  673. package/skills/i3-ui-prototype/scripts/sync-template.cjs +0 -19
  674. package/skills/i3-ui-prototype/scripts/template-adapters.cjs +0 -89
  675. package/skills/i3-ui-prototype/scripts/template-contract.cjs +0 -407
  676. package/skills/i3-ui-prototype/scripts/template-inventory.cjs +0 -78
  677. package/skills/i3-ui-prototype/scripts/validate-result.cjs +0 -117
@@ -1,290 +0,0 @@
1
- 'use strict';
2
- const F=require('./native-files.cjs');
3
- const {fs,path,crypto,assert,hash,json,id,inside,walk,write,entries,excluded}=F;
4
- const skillRoot=path.resolve(__dirname,'..');
5
- const frameworkRoot=path.join(skillRoot,'assets/frameworks/vue-antdv-next');
6
- const templates=()=>require('./template-contract.cjs');
7
- const projectRegistry=require('./project-registry.cjs');
8
- function metadata(directory) { const data=json(inside(directory,'prototype.json')); assert.equal(data.schemaVersion,2,'Not a native v2 prototype'); assert.equal(data.runtime.kind,'vue-antdv-next'); return data; }
9
- function effectiveReview(data,current) {
10
- const review=data.review;
11
- if(review.status!=='approved'||(review.revision===current.revision&&review.digest===current.digest))return review;
12
- return {status:'pending-review',previousApproval:review,reason:'The stored approval applies to a different revision or candidate digest'};
13
- }
14
- function analyze(options={}) {
15
- if(options.execution!==undefined)assert.ok(['inline','delegated'].includes(options.execution),'Invalid execution declaration: use inline or delegated');
16
- const project=path.resolve(options.project||'.');
17
- return {operation:'analyze',readOnly:true,project,projectExists:fs.existsSync(project),supportedOperations:['analyze','create','revise','inspect','confirm-baseline'],execution:options.execution??null,executionEvidence:options.execution===undefined?'unverified':'caller-declared',sideEffects:[]};
18
- }
19
- function prepareTemplate(options) { return templates().prepareTemplate(options); }
20
- function manifest(directory) {
21
- const data=metadata(directory);
22
- const inputFiles=walk(directory,'inputs');
23
- const inputs=entries(directory,inputFiles), inputDigest=hash(JSON.stringify(inputs));
24
- const files=entries(directory,[...inputFiles,'requirements-map.json',...['app','mocks','design-system'].flatMap(folder=>walk(directory,folder,excluded))]);
25
- const identity={...(data.runtime.contentReference?{business:data.business}:{}),schemaVersion:2,id:data.id,revision:data.revision,artifactKind:data.artifactKind,runtime:data.runtime,template:data.template,framework:data.framework,expertMode:data.expertMode};
26
- return {schemaVersion:2,revision:data.revision,identity,inputDigest,files,digest:hash(JSON.stringify({identity,files}))};
27
- }
28
- function defaultScope() {
29
- return {schemaVersion:1,title:'设备清单首期演示需求',requirements:[
30
- {id:'PILOT-01',text:'设备列表支持查询、当前页多选、分页和批量变更状态',source:{type:'prd',reference:'pilot-fixture/PILOT-01',statement:'21条记录,每页10条;换页或筛选清空选择;批量操作仅影响选中记录'}},
31
- {id:'PILOT-02',text:'编辑抽屉使用真实表单校验,失败保留输入,成功更新对应记录',source:{type:'prd',reference:'pilot-fixture/PILOT-02',statement:'设备名称必填;可模拟提交失败并重试'}},
32
- {id:'PILOT-03',text:'加载、空、失败和恢复可触发;抽屉开合、遮罩模糊及焦点可验证',source:{type:'prd',reference:'pilot-fixture/PILOT-03',statement:'首期演示规则;不是任何生产项目的已确认权限或流程'}}
33
- ],exemptions:[],openQuestions:[]};
34
- }
35
- function createPrototype(options) {
36
- if(options.executionPolicy!==undefined){const policy=require('./execution-policy.cjs');assert.ok([policy.ID,policy.AUTO_ID].includes(options.executionPolicy),'Unsupported execution policy');assert.ok(['codebuddy','workbuddy'].includes(options.host),'Explicit Buddy host required for A+B');if(options.executionPolicy===policy.ID)assert.equal(options.host,'codebuddy','Legacy policy is CodeBuddy only');}
37
- assert.ok(options.framework===undefined||options.framework==='vue-antdv-next','Unsupported framework / 不支持的框架');
38
- assert.ok(options.title===undefined||(typeof options.title==='string'&&options.title.trim()),'Title must be a nonempty string');
39
- const project=path.resolve(options.project||'.'); assert.ok(fs.statSync(project).isDirectory(),'Project must exist'); id(options.id);
40
- const mode=options.expertMode||'professional'; assert.ok(['professional','template'].includes(mode),'Invalid expert mode');
41
- let provider=null;
42
- if(mode==='professional') {
43
- provider=require('./prototype-lib.cjs').checkDesignProvider({...options,project});
44
- if(provider.availability!=='available') return {status:'needs-design-provider',provider,sideEffects:[],choices:['locate-or-repair','explicit-template-mode','analyze']};
45
- }
46
- assert.ok(!(options.templateRoot && options.template), 'Choose a template ID or an explicit template root');
47
- const template=options.templateRoot?templates().loadTemplate(path.resolve(options.templateRoot)):templates().loadBundledTemplate(options.template);
48
- const reference=template.kind==='content-reference';
49
- assert.ok(!reference||options.scope,'A sourced scope file is required for business generation; no default device demo');
50
- const scope=options.scope?json(path.resolve(options.scope)):defaultScope();
51
- const appliesTo=projectRegistry.moduleIds(scope);
52
- const selection=reference?require('./content-template.cjs').scopeInputs(template,scope,templates()):null;
53
- const generation=scope.schemaVersion===3?require('./generation-contract.cjs').compile(template,scope):null;
54
- const content=reference?{pageTitle:scope.title||'业务原型'}:templates().projectAdminListContent(template);
55
- if(options.title!==undefined)content.pageTitle=options.title;
56
- const profile=json(path.join(frameworkRoot,'profile.json'));
57
- const target=inside(project,`prototypes/${options.id}`); assert.ok(!fs.existsSync(target),'Prototype exists; revise without reinitializing');
58
- return projectRegistry.transaction(project,store=>{
59
- let stage=null,published=false;
60
- try {
61
- fs.mkdirSync(path.dirname(target),{recursive:true}); stage=fs.mkdtempSync(path.join(path.dirname(target),'.native-'));
62
- const registry=store.registry;
63
- assert.equal(registry.schemaVersion,1); assert.ok(Array.isArray(registry.prototypes)); assert.ok(!registry.prototypes.some(p=>p.id===options.id),'Duplicate prototype ID');
64
- const frameworkFiles=entries(frameworkRoot,walk(frameworkRoot,'',excluded));
65
- const instanceId=crypto.randomUUID();
66
- const data={schemaVersion:2,id:options.id,title:options.title||content.pageTitle||'设备清单原型',revision:'r001',artifactKind:'framework-prototype',runtime:{kind:'vue-antdv-next',version:'1',...(reference?{contentReference:true}:{})},...(reference?{business:{status:'needs-adaptation',source:'inputs/scope.json'}}:{}),template:{id:template.id,version:template.version,digest:template.digest},framework:{id:'vue-antdv-next',version:profile.version||'1',digest:hash(JSON.stringify(frameworkFiles))},expertMode:mode,expert:{status:provider?'pending':'skipped',provider},verification:{status:'not-run'},review:{status:'pending-review'},instanceId};
67
- if(generation)data.runtime.generationContract=1;
68
- if(options.executionPolicy){data.runtime.executionPolicy=options.executionPolicy;write(stage,'inputs/execution-policy.json',require('./execution-policy.cjs').create({id:options.executionPolicy,host:options.host,mode,officialCallable:!options.officialSourceFallback}));}
69
- write(stage,'prototype.json',data);
70
- for(const file of template.files) {
71
- assert.equal(file.encoding,'base64');
72
- const destination=inside(stage,`inputs/template/${file.path}`); fs.mkdirSync(path.dirname(destination),{recursive:true}); fs.writeFileSync(destination,Buffer.from(file.content,'base64'));
73
- }
74
- write(stage,'inputs/template-snapshot.json',template);
75
- write(stage,'inputs/scope.json',scope);
76
- if(generation)write(stage,'inputs/generation.json',generation);
77
- write(stage,'inputs/capabilities.json',selection?selection.fixed:{schemaVersion:1,definition:template.definition,bindings:template.index.bindings,regions:template.index.regions,decisions:[]});
78
- write(stage,'inputs/framework.json',{profile,componentMap:generation?require('./generation-evidence.cjs').framework():json(path.join(frameworkRoot,'component-map.json')),acceptance:json(path.join(frameworkRoot,'acceptance.json')),files:frameworkFiles});
79
- const checked=templates().checkInstanceCapabilities(path.join(stage,'inputs')); assert.equal(checked.status,'passed',checked.errors?.join('; '));
80
- const scenarioDetails=[...checked.requiredScenarios,...(generation?.scenarios||[])],requiredScenarios=scenarioDetails.map(s=>typeof s==='string'?s:s.id);
81
- const hasDrawer=reference&&(selection.fixed.regions.some(region=>region.mode==='edit-form')||generation?.bindings.some(binding=>binding.capabilityId==='dialog'&&binding.parameters.presentation==='drawer'));
82
- write(stage,'inputs/acceptance.json',{schemaVersion:1,requiredScenarios,scenarioDetails,frameworkScenarios:reference?['framework-responsive','framework-instance-isolation','template-content-projection',...(hasDrawer?['framework-drawer-motion','framework-mask-blur','framework-focus-scroll']:[])]:['framework-drawer-motion','framework-mask-blur','framework-focus-scroll','framework-states','framework-responsive','framework-instance-isolation','template-content-projection'],browserReview:json(path.join(frameworkRoot,'acceptance.json')).browserReview});
83
- if(options.executionPolicy){const all=json(inside(stage,'inputs/acceptance.json'));assert.ok(options.executionAssertions,`Strict policy requires --execution-assertions with fixed expected JSON facts for: ${[...all.requiredScenarios,...all.frameworkScenarios].join(', ')}`);const fixed=require('./execution-assertions.cjs').validate(json(path.resolve(options.executionAssertions)),[...all.requiredScenarios,...all.frameworkScenarios]);write(stage,'inputs/execution-assertions.json',fixed);}
84
- const requirements=json(path.join(stage,'inputs/scope.json')).requirements;
85
- write(stage,'requirements-map.json',{schemaVersion:2,requirements:requirements.map(r=>({...r,pages:reference?r.pages:template.index.pages.map(page=>page.id),scenarios:reference?scenarioDetails.filter(s=>s.bindingId.startsWith('app-shell/')||r.pages.some(page=>s.bindingId.startsWith(page+'/'))).map(s=>s.id):requiredScenarios})),bindings:[...(selection?selection.fixed.bindings:template.index.bindings),...(generation?.bindings||[])]});
86
- const starter=path.join(frameworkRoot,reference?profile.starter:(profile.legacyStarter||profile.starter));
87
- fs.cpSync(starter,path.join(stage,'app'),{recursive:true,filter:file=>!excluded(`starter/${path.relative(starter,file).split(path.sep).join('/')}`,path.basename(file))});
88
- const themeBinding=(selection?selection.fixed.bindings:template.index.bindings).find(binding=>binding.capabilityId==='theme');
89
- write(stage,'app/public/prototype-config.json',{instanceId,storageNamespace:`i3-native-${options.id}-${instanceId}`,mockVersion:reference?'business-v1':'admin-list-v1',title:data.title,...(reference?{pages:scope.pages.map(page=>({id:page.id,title:page.title}))}:{content}),...(generation?{presentation:generation.presentation,navigation:generation.navigation,generation:{pages:generation.pages}}:{}),...(themeBinding?{theme:templates().resolveThemeParameters(themeBinding.parameters)}:{})});
90
- write(stage,'mocks/contract.json',reference?{schemaVersion:1,instanceId,status:'needs-business-data',requirements:scope.requirements.map(r=>r.id)}:{schemaVersion:1,seed:'admin-list-v1',count:21,pageSize:10,selection:'current-page-clear-on-page-or-filter',instanceId});
91
- write(stage,'design-system/MASTER.md',`# ${data.title}\n\n使用 antDv-next 原生组件与主题。管理列表采用紧凑信息层级,正文与操作可读;错误在字段附近呈现。抽屉保留进入与退出过程,显式开启遮罩模糊。\n\n本地模拟,不代表生产权限。\n`);
92
- if(generation)write(stage,'design-system/MASTER.md',require('./generation-evidence.cjs').designSummary(generation,`# ${data.title}\n\nPrototypeShell 提供已选原生外壳;按逐区域/字段/操作合同实现业务,补齐真实源码映射和浏览器证据。骨架不是业务完成。本地模拟不代表生产权限。`));
93
- if(generation)write(stage,'design-system/implementation.json',require('./generation-evidence.cjs').initialize(generation));
94
- write(stage,'design-system/decisions.json',{schemaVersion:1,records:[],reviewStatus:mode==='template'?'skipped':'pending'});
95
- write(stage,'qa/design-advice.json',{schemaVersion:2,provider,queries:[],records:[],status:mode==='template'?'skipped':'pending'});
96
- write(stage,'HANDOFF.md',`# ${data.title}\n\n本次为 ${mode} 模式;来源 ${template.id} ${template.version}。运行形态为真实 Vue+antDv-next。读取 inputs 中固定合同和实际源码,勿从安装目录更新旧合同。\n\n使用 native-pilot.cjs inspect/build/preview。当前未验证,待用户评审;不要把检查通过当用户认可。\n`);
97
- const candidate=manifest(stage); data.inputs={digest:candidate.inputDigest}; write(stage,'prototype.json',data);
98
- fs.renameSync(stage,target); published=true;
99
- const digest=manifest(target).digest;
100
- registry.prototypes.push({id:options.id,directory:`prototypes/${options.id}`,appliesTo,schemaVersion:2}); store.save();
101
- return {status:'created',directory:target,revision:'r001',digest};
102
- } catch(error) { if(published) fs.rmSync(target,{recursive:true,force:true}); throw error; }
103
- finally { if(stage&&fs.existsSync(stage)) fs.rmSync(stage,{recursive:true,force:true}); }
104
- });
105
- }
106
- function inspectDesignReview(directory,current=manifest(directory)) {
107
- const data=metadata(directory);
108
- if(data.expertMode!=='professional') return {status:'skipped',queries:0,records:0,adoptedAdvice:[]};
109
- const advice=json(inside(directory,'qa/design-advice.json')); assert.equal(advice.provider?.availability,'available','Professional provider not available');
110
- assert.ok(advice.provider.digest,'Professional provider identity required');
111
- assert.ok(advice.queries?.length && advice.queries.every(q=>q.query && q.source && q.resultDigest),'Real design query record required');
112
- assert.ok(['reviewed','no-match'].includes(advice.status),'Design advice review pending');
113
- assert.ok(advice.records?.length && advice.records.every(r=>['adopted','adjusted','rejected','no-match'].includes(r.decision) && r.query && advice.queries.some(q=>q.query===r.query) && r.resultIdentity && r.rationale && r.verification),'Advice decisions need query, identity, reasons and verification');
114
- const decisions=json(inside(directory,'design-system/decisions.json'));
115
- assert.ok(['reviewed','no-match'].includes(decisions.reviewStatus),'Design contract review pending');
116
- const stable=r=>({query:r.query,resultIdentity:r.resultIdentity,decision:r.decision,rationale:r.rationale,implementation:r.implementation||null,verificationScenario:r.verificationScenario||null});
117
- assert.deepEqual(decisions.records.map(stable),advice.records.map(stable),'Design contract differs from advice review');
118
- const adoptedAdvice=advice.records.filter(r=>['adopted','adjusted'].includes(r.decision));
119
- for(const record of adoptedAdvice)assert.ok(Object.hasOwn(current.files,record.implementation) && record.verificationScenario,'Adopted advice needs implementation and verified scenario');
120
-
121
- return {status:advice.status,queries:advice.queries.length,records:advice.records.length,adoptedAdvice};
122
- }
123
- function inspectWithInputs(directory,options={},acceptedInputDigest) {
124
- try {
125
- const data=metadata(directory); const current=manifest(directory);
126
- assert.equal(acceptedInputDigest??data.inputs.digest,current.inputDigest,'Input contract changed; explicitly revise fixed inputs');
127
- const capability=templates().checkInstanceCapabilities(path.join(directory,'inputs')); assert.equal(capability.status,'passed',capability.errors?.join('; '));
128
- const acceptance=json(inside(directory,'inputs/acceptance.json'));
129
- require('./execution-runtime.cjs').policy(directory);
130
- require('./native-devtools.cjs').readPolicy(directory);
131
- for(const scenario of capability.requiredScenarios.map(s=>typeof s==='string'?s:s.id)) assert.ok(acceptance.requiredScenarios.includes(scenario),`Required scenario omitted: ${scenario}`);
132
- const fixedFramework=json(inside(directory,'inputs/framework.json'));
133
- if(fixedFramework.acceptance?.scenarios?.some(scenario=>scenario.id==='template-content-projection'&&scenario.required))assert.ok(acceptance.frameworkScenarios.includes('template-content-projection'),'Required template-content-projection scenario omitted from fixed framework acceptance');
134
- const template=json(inside(directory,'inputs/template-snapshot.json')),mapping=json(inside(directory,'requirements-map.json')),scope=json(inside(directory,'inputs/scope.json'));
135
- const generation=scope.schemaVersion===3?json(inside(directory,'inputs/generation.json')):null;
136
- if(generation){assert.equal(data.runtime.generationContract,1,'Generation runtime identity is required');require('./generation-contract.cjs').verify(template,scope,generation);for(const scenario of generation.scenarios)assert.ok(acceptance.requiredScenarios.includes(scenario.id),`Generation scenario omitted: ${scenario.id}`);}
137
- projectRegistry.moduleIds(scope);
138
- const pageIds=new Set(data.runtime.contentReference?['app-shell',...scope.pages.map(page=>page.id)]:template.index.pages.map(page=>page.id)),bindingIds=new Set([...json(inside(directory,'inputs/capabilities.json')).bindings,...(generation?.bindings||[])].map(binding=>binding.id));
139
- for(const requirement of scope.requirements)assert.ok(mapping.requirements.some(item=>item.id===requirement.id),`Requirement omitted from mapping: ${requirement.id}`);
140
- for(const requirement of mapping.requirements) {
141
- assert.ok(scope.requirements.some(item=>item.id===requirement.id),`Unknown mapped requirement: ${requirement.id}`);
142
- if(data.runtime.contentReference)assert.deepEqual(requirement.pages,scope.requirements.find(item=>item.id===requirement.id).pages,`Business requirement page mapping changed: ${requirement.id}`);
143
- assert.ok(requirement.pages?.length&&requirement.pages.every(page=>pageIds.has(page)),`Unknown page identity in requirement: ${requirement.id}`);
144
- assert.ok(requirement.scenarios?.length&&requirement.scenarios.every(scenario=>acceptance.requiredScenarios.includes(scenario)||acceptance.frameworkScenarios.includes(scenario)),`Unknown scenario in requirement: ${requirement.id}`);
145
- }
146
- for(const binding of mapping.bindings||[])assert.ok(bindingIds.has(binding.id),`Unknown binding in mapping: ${binding.id}`);
147
- for(const file of ['app/package.json','app/package-lock.json','app/src/App.vue','app/public/prototype-config.json','design-system/MASTER.md']) assert.ok(fs.existsSync(inside(directory,file)),`Missing ${file}`);
148
- const config=json(inside(directory,'app/public/prototype-config.json')); assert.equal(config.instanceId,data.instanceId); assert.ok(config.storageNamespace.includes(data.instanceId),'Instance storage not isolated');
149
- if(data.runtime.contentReference) {
150
- assert.deepEqual(config.pages,scope.pages.map(page=>({id:page.id,title:page.title})),'Business configuration differs from fixed page scope');
151
- assert.ok(['needs-adaptation','adapted'].includes(data.business?.status),'Unknown business implementation status');
152
- const fixedBindings=[...json(inside(directory,'inputs/capabilities.json')).bindings,...(generation?.bindings||[])];
153
- assert.deepEqual((mapping.bindings||[]).map(binding=>binding.id).sort(),fixedBindings.map(binding=>binding.id).sort(),'Business mapping omits fixed capabilities');
154
- }
155
- const themeBinding=json(inside(directory,'inputs/capabilities.json')).bindings.find(binding=>data.runtime.contentReference?binding.capabilityId==='theme':binding.id==='devices/device-list/theme');
156
- if(themeBinding)assert.deepEqual(config.theme,templates().resolveThemeParameters(themeBinding.parameters),'Theme configuration differs from fixed input binding');
157
- else assert.equal(config.theme,undefined,'Theme requires an explicit optional capability binding');
158
- if(generation){assert.deepEqual(config.presentation,generation.presentation,'Customer presentation differs from fixed choices');assert.deepEqual(config.navigation,generation.navigation,'Navigation differs from fixed generation');assert.deepEqual(config.generation,{pages:generation.pages},'Business page patterns differ from fixed generation');}
159
- const deps=json(inside(directory,'app/package.json')).dependencies; assert.ok(deps['antdv-next'] && deps.vue,'Native framework dependencies missing');
160
- if(generation)require('./generation-evidence.cjs').validateImplementation(directory,generation,json(inside(directory,'design-system/implementation.json')),{complete:!!options.acceptance,frameworkMap:fixedFramework.componentMap});
161
- if(options.acceptance) {
162
- if(generation){assert.equal(generation.pendingDecisions.length,0,'Reference applicability decisions remain unresolved');assert.equal(generation.pendingReferenceElements.length,0,'Reference functional elements remain unaccounted for');}
163
- if(data.runtime.contentReference)assert.equal(data.business?.status,'adapted','Business implementation pending; a scaffold cannot pass acceptance');
164
- const adoptedAdvice=inspectDesignReview(directory,current).adoptedAdvice;
165
- const report=options.report||json(inside(directory,json(inside(directory,'qa/latest.json')).report));
166
- assert.equal(report.status,'passed'); assert.equal(report.candidateDigest,current.digest,'Browser evidence is stale'); assert.equal(report.revision,current.revision);
167
- const build=verifyBuild(directory,report.buildId); assert.equal(report.buildDigest,build.buildDigest);
168
- assert.ok(report.executor && report.tool && report.startedAt && report.completedAt && report.source,'Browser run provenance required');
169
- require('./native-build.cjs').verifyBrowserReport(directory,report,build);
170
- assert.deepEqual(report.consoleErrors,[],'Browser errors remain');
171
- const required=[...acceptance.requiredScenarios,...acceptance.frameworkScenarios];
172
- for(const scenario of required) assert.ok(report.journeys.some(j=>j.id===scenario && j.status==='passed'),`Missing browser scenario: ${scenario}`);
173
- if(generation)require('./generation-evidence.cjs').validateObservations(directory,generation,report);
174
- for(const record of adoptedAdvice)assert.ok(report.journeys.some(j=>j.id===record.verificationScenario && j.status==='passed'),`Advice verification missing: ${record.resultIdentity}`);
175
- require('./execution-runtime.cjs').requireStage(directory,'delivery',module.exports,{businessReport:report});
176
- }
177
- return {status:'passed',level:options.acceptance?'acceptance':'structure',revision:current.revision,digest:current.digest,verification:data.verification.status,review:effectiveReview(data,current).status};
178
- } catch(error) { return {status:'failed',errors:[error.message]}; }
179
- }
180
- function inspect(directory,options={}) { return inspectWithInputs(directory,options); }
181
- function expected(directory,options) {
182
- const current=manifest(directory);
183
- assert.equal(options.expectedRevision,current.revision,'Stale revision / 版本冲突'); assert.equal(options.expectedDigest,current.digest,'Candidate changed / 内容变化'); return current;
184
- }
185
- function claim(directory,options) {
186
- id(options.owner); expected(directory,options);
187
- const lock=inside(directory,'.prototype-write.lock'); const fd=fs.openSync(lock,'wx');
188
- try { fs.writeFileSync(fd,JSON.stringify({owner:options.owner,revision:options.expectedRevision,digest:options.expectedDigest})); }
189
- finally { fs.closeSync(fd); }
190
- write(directory,'execution.json',{owner:options.owner,status:'editing',revision:options.expectedRevision,digest:options.expectedDigest}); return {owner:options.owner};
191
- }
192
- function release(directory,owner) {
193
- const lock=inside(directory,'.prototype-write.lock'); assert.equal(json(lock).owner,owner,'Different writing owner');
194
- fs.unlinkSync(lock); write(directory,'execution.json',{owner,status:'released'}); return {status:'released'};
195
- }
196
- function mutate(directory,options,fn) {
197
- const lock=inside(directory,'.prototype-write.lock'); const temporary=!fs.existsSync(lock); const owner=options.owner||`run-${crypto.randomUUID()}`;
198
- if(temporary) claim(directory,{...options,owner}); else { assert.equal(json(lock).owner,owner,'Candidate has another writing owner'); expected(directory,options); }
199
- try { return fn(); } finally { if(temporary) release(directory,owner); }
200
- }
201
- function revise(directory,options) {
202
- id(options.revision);
203
- assert.ok(options.acceptInputs===undefined||typeof options.acceptInputs==='boolean','--accept-inputs must be a boolean flag');
204
- return mutate(directory,options,()=>{
205
- const current=manifest(directory);
206
- const data=metadata(directory); assert.notEqual(data.revision,options.revision); assert.ok(!fs.existsSync(inside(directory,`baselines/${options.revision}`)),'Revision already frozen');
207
- if(options.acceptInputs) {
208
- const checked=inspectWithInputs(directory,{},current.inputDigest);
209
- assert.equal(checked.status,'passed',checked.errors?.join('; '));
210
- } else assert.equal(data.inputs.digest,current.inputDigest,'Input contract changed; revise --accept-inputs must explicitly validate the new contract');
211
- assert.equal(manifest(directory).digest,current.digest,'Candidate changed while validating fixed inputs');
212
- const scope=json(inside(directory,'inputs/scope.json')); projectRegistry.moduleIds(scope);
213
- return projectRegistry.withInstanceAssociation(directory,scope,()=>{
214
- if(options.acceptInputs)data.inputs={digest:current.inputDigest};
215
- data.revision=options.revision; data.verification={status:'not-run'}; data.review={status:'pending-review'};
216
- write(directory,'prototype.json',data); return manifest(directory);
217
- });
218
- });
219
- }
220
- function replan(directory,options) { const owner=options.owner||`replan-${crypto.randomUUID()}`;return mutate(directory,{...options,owner},()=>require('./generation-replan.cjs').run(directory,{...options,owner},module.exports)); }
221
- function build(directory,options={}) { const gates=require('./execution-runtime.cjs');gates.requireStage(directory,'implementation',module.exports);gates.requireStage(directory,'design',module.exports);return require('./native-build.cjs').build(directory,options,{manifest,inspect}); }
222
- function synchronizeIndex(options={}) {
223
- id(options.id);
224
- const index=projectRegistry.read(options.project),entry=index.registry.prototypes.find(item=>item.id===options.id);
225
- assert.ok(entry,'Prototype is not registered');
226
- const directory=inside(index.project,entry.directory),scope=json(inside(directory,'inputs/scope.json'));
227
- assert.ok(scope.moduleIds!==undefined||scope.schemaVersion===2,'Legacy scope has no explicit moduleIds; do not invent or rewrite old input contracts');
228
- const current=manifest(directory);
229
- return mutate(directory,{...options,expectedRevision:current.revision,expectedDigest:current.digest},()=>{
230
- const checked=inspect(directory);assert.equal(checked.status,'passed',checked.errors?.join('; '));
231
- return projectRegistry.transaction(index.project,store=>{
232
- const selected=store.registry.prototypes.find(item=>item.id===options.id);
233
- assert.ok(selected&&selected.directory===entry.directory,'Prototype index entry changed during synchronization');
234
- const fixed=json(inside(directory,'inputs/scope.json')),appliesTo=projectRegistry.moduleIds(fixed);
235
- assert.equal(manifest(directory).digest,current.digest,'Candidate changed during synchronization');
236
- selected.appliesTo=appliesTo;store.save();
237
- return {status:'synchronized',index:store.file,id:selected.id,appliesTo};
238
- });
239
- });
240
- }
241
- function verifyBuild(directory,buildId) { return require('./native-build.cjs').verifyBuild(directory,buildId,{manifest}); }
242
- function preview(directory,options={}) { return require('./native-build.cjs').preview(directory,options,{manifest}); }
243
- function recordRun(directory,report) {
244
- report=JSON.parse(JSON.stringify(report));
245
- id(report.id); const current=manifest(directory); assert.equal(report.candidateDigest,current.digest,'Candidate changed during browser run'); assert.equal(report.revision,current.revision);
246
- const result=inspect(directory,{acceptance:true,report}); assert.equal(result.status,'passed',result.errors?.join('; '));
247
- assert.equal(manifest(directory).digest,current.digest,'Candidate changed while checking browser report');
248
- const relative=`qa/runs/${report.id}/report.json`,existing=inside(directory,relative);
249
- if(fs.existsSync(existing))assert.deepEqual(json(existing),report,'Published browser run is immutable; use a new run ID');
250
- else write(directory,relative,report);
251
- write(directory,'qa/latest.json',{report:relative});
252
- const data=metadata(directory); data.verification={status:'passed',digest:current.digest,run:report.id};
253
- data.review=effectiveReview(data,current);
254
- if(data.expertMode==='professional') {
255
- const advice=json(inside(directory,'qa/design-advice.json'));
256
- data.expert.status=advice.records.some(record=>['adopted','adjusted'].includes(record.decision))?'used':advice.records.every(record=>record.decision==='no-match')?'no-match':'reviewed';
257
- }
258
- write(directory,'prototype.json',data); return {...result,verification:'passed'};
259
- }
260
- function confirmBaseline(directory,confirmation) {
261
- assert.ok(confirmation.reviewer && confirmation.statement && confirmation.source,'Explicit human confirmation required / 人类确认');
262
- const current=manifest(directory); assert.equal(confirmation.revision,current.revision); assert.equal(confirmation.digest,current.digest);
263
- return mutate(directory,{expectedRevision:current.revision,expectedDigest:current.digest},()=>{
264
- const checked=inspect(directory,{acceptance:true}); assert.equal(checked.status,'passed',checked.errors?.join('; '));
265
- const devtoolsReview=require('./native-devtools.cjs').check(directory,module.exports);assert.ok(!devtoolsReview.required||devtoolsReview.status==='current',`Current DevTools review required: ${devtoolsReview.errors?.join('; ')||devtoolsReview.status}`);
266
- const target=inside(directory,`baselines/${id(current.revision)}`); assert.ok(!fs.existsSync(target),'Baseline exists');
267
- fs.mkdirSync(path.dirname(target),{recursive:true});const stage=fs.mkdtempSync(path.join(path.dirname(target),'.freeze-'));
268
- try {
269
- for(const [file,digest]of Object.entries(current.files)) {
270
- const destination=inside(stage,file);fs.mkdirSync(path.dirname(destination),{recursive:true});fs.copyFileSync(inside(directory,file),destination);
271
- assert.equal(hash(fs.readFileSync(destination)),digest,`Snapshot copy differs: ${file}`);
272
- }
273
- write(stage,'manifest.json',current);write(stage,'review.json',confirmation);const reviewDigest=hash(fs.readFileSync(path.join(stage,'review.json')));
274
- assert.equal(manifest(directory).digest,current.digest,'Candidate changed during freezing');
275
- fs.renameSync(stage,target);
276
- write(directory,'baseline.json',{schemaVersion:2,revision:current.revision,digest:current.digest,reviewDigest,directory:`baselines/${current.revision}`});
277
- const data=metadata(directory);data.review={status:'approved',revision:current.revision,digest:current.digest};write(directory,'prototype.json',data);return current;
278
- } finally {if(fs.existsSync(stage))fs.rmSync(stage,{recursive:true,force:true});}
279
- });
280
- }
281
- function compareBaseline(directory) {
282
- if(!fs.existsSync(inside(directory,'baseline.json'))) return {status:'no-baseline',changes:[],protectedChanges:[]};
283
- const baseline=json(inside(directory,'baseline.json')); const folder=inside(directory,baseline.directory); const saved=json(path.join(folder,'manifest.json'));
284
- if(hash(fs.readFileSync(path.join(folder,'review.json')))!==baseline.reviewDigest || saved.digest!==baseline.digest || hash(JSON.stringify({identity:saved.identity,files:saved.files}))!==saved.digest || Object.entries(saved.files).some(([f,d])=>!fs.existsSync(inside(folder,f))||hash(fs.readFileSync(inside(folder,f)))!==d)) return {status:'corrupt-baseline'};
285
- const current=manifest(directory); const changes=[...new Set([...Object.keys(saved.files),...Object.keys(current.files)])].filter(f=>saved.files[f]!==current.files[f]);
286
- return {status:current.digest===saved.digest?'unchanged':'changed',changes,protectedChanges:changes,revision:current.revision,baselineRevision:saved.revision};
287
- }
288
- function state(directory,options={}) { return require('./native-delivery.cjs').state(directory,options,module.exports); }
289
- function finalize(directory,options={}) { return require('./native-delivery.cjs').finalize(directory,options,module.exports); }
290
- module.exports={analyze,prepareTemplate,createPrototype,manifest,inspect,inspectDesignReview,effectiveReview,claim,release,revise,replan,synchronizeIndex,build,verifyBuild,preview,recordRun,confirmBaseline,compareBaseline,state,finalize};
@@ -1,59 +0,0 @@
1
- #!/usr/bin/env node
2
- 'use strict';
3
- const path=require('node:path');
4
- const fs=require('node:fs');
5
- const lib=require('./native-pilot-lib.cjs');
6
- async function main(argv=process.argv.slice(2)) {
7
- const operation=argv.shift()||'analyze'; const positional=[]; const options={};
8
- while(argv.length) { const value=argv.shift(); if(value==='--') { options.command=argv.splice(0); break; } if(value.startsWith('--')) { const key=value.slice(2).replace(/-([a-z])/g,(_,c)=>c.toUpperCase()); options[key]=!argv.length||argv[0].startsWith('--')?true:argv.shift(); } else positional.push(value); }
9
- const root=positional[0]?path.resolve(positional[0]):null;
10
- switch(operation) {
11
- case 'analyze': return lib.analyze(options);
12
- case 'paths': { const context=require('./prototype-locations.cjs').resolveLocations(options); return {...require('./project-registry.cjs').paths(options.project,options.id),host:context.host,scope:context.scope,projectKey:context.projectKey,toolsDirectory:context.toolsDirectory,cacheDirectory:context.cacheDirectory}; }
13
- case 'index': return require('./project-registry.cjs').query(options);
14
- case 'sync-index': return lib.synchronizeIndex(options);
15
- case 'migrate-index': return require('./project-registry.cjs').migrate(options);
16
- case 'browser-cache': return require('./browser-workspace.cjs').prepare(options);
17
- case 'browser-cli': return require('./browser-workspace.cjs').runCli(options);
18
- case 'archive-browser-output': return require('./browser-workspace.cjs').archive(options);
19
- case 'prepare-template': return lib.prepareTemplate(options);
20
- case 'sync-template': { const templates=require('./template-contract.cjs'); return options.check?templates.loadTemplate(root).index:templates.syncTemplate(root); }
21
- case 'template-page': { const templates=require('./template-contract.cjs'); return require('./content-template.cjs').pageContent(root?templates.loadTemplate(root):templates.loadBundledTemplate(options.template),options.page); }
22
- case 'generation-options': { const templates=require('./template-contract.cjs'),snapshot=root?templates.loadTemplate(root):templates.loadBundledTemplate(options.template),meta=require('./generation-contract.cjs').resource(snapshot,'generation.json');return {status:'passed',readOnly:true,template:snapshot.id,...meta,patterns:require('./generation-contract.cjs').definition().patterns}; }
23
- case 'generation-plan': { const templates=require('./template-contract.cjs'),snapshot=root?templates.loadTemplate(root):templates.loadBundledTemplate(options.template);const contract=require('./generation-contract.cjs');return contract.view(contract.compile(snapshot,JSON.parse(fs.readFileSync(path.resolve(options.scope),'utf8'))),options); }
24
- case 'inventory': { const templates=require('./template-contract.cjs'),snapshot=root?templates.loadTemplate(root):templates.loadBundledTemplate(options.template),value=require('./template-inventory.cjs').verifySnapshot(snapshot);return options.details?value:{status:'passed',readOnly:true,template:snapshot.id,files:Object.keys(value.files).length,routes:value.routes.length,pages:value.pages.length,fragments:value.fragments.length,components:Object.keys(value.components).length,events:value.eventCount}; }
25
- case 'sync-generation-assets': return require('./generation-assets.cjs').refresh(path.resolve(__dirname,'..'),{check:!!options.check});
26
- case 'create': {
27
- const installedFile=path.resolve(__dirname,'../../../.i3-composer-agent.json');
28
- const effective=fs.existsSync(installedFile)?require('./execution-policy.cjs').creationOptions(options,JSON.parse(fs.readFileSync(installedFile,'utf8'))):options;
29
- return lib.createPrototype(effective);
30
- }
31
- case 'execution-begin': return require('./execution-runtime.cjs').begin(root,lib);
32
- case 'execution-assertions-template': return require('./execution-assertions.cjs').template(options);
33
- case 'execution-template': return require('./execution-runtime.cjs').template(root,lib);
34
- case 'execution-check': return require('./execution-runtime.cjs').check(root,options.stage||'delivery',lib);
35
- case 'manifest': return lib.manifest(root);
36
- case 'inspect': return lib.inspect(root,{acceptance:!!options.acceptance});
37
- case 'state': return lib.state(root,options);
38
- case 'browser': return require('./native-browser.cjs').main(root,options);
39
- case 'record-devtools-review': return require('./native-devtools.cjs').record(root,JSON.parse(fs.readFileSync(path.resolve(options.report),'utf8')),lib);
40
- case 'finalize': return lib.finalize(root,options);
41
- case 'build': return lib.build(root,options);
42
- case 'preview': { const running=await lib.preview(root,options); process.stdout.write(JSON.stringify({url:running.url,buildId:running.build.buildId})+'\n'); return null; }
43
- case 'revise': return lib.revise(root,options);
44
- case 'replan': return lib.replan(root,options);
45
- case 'claim': return lib.claim(root,options);
46
- case 'release': return lib.release(root,options.owner);
47
- case 'record-run': return lib.recordRun(root,JSON.parse(fs.readFileSync(path.resolve(options.report),'utf8')));
48
- case 'compare-baseline': return lib.compareBaseline(root);
49
- case 'confirm-baseline': return lib.confirmBaseline(root,JSON.parse(fs.readFileSync(path.resolve(options.confirmation),'utf8')));
50
- default: throw new Error(`Unknown operation: ${operation}`);
51
- }
52
- }
53
- function capture(result,exitCode){
54
- const args=process.argv.slice(2),at=args.indexOf('--project');let project=at>=0&&args[at+1]?path.resolve(args[at+1]):process.cwd();
55
- const target=args[1];if(target&&path.isAbsolute(target)&&target.includes(path.sep+'prototypes'+path.sep))project=target.slice(0,target.indexOf(path.sep+'prototypes'+path.sep));
56
- require('./ptc-callbacks.cjs').captureResult({script:__filename,argv:args,project,result,exitCode});
57
- }
58
- if(require.main===module) main().then(result=>{if(result!==null){const code=result.status==='failed'?1:0;capture(result,code);process.stdout.write(JSON.stringify(result,null,2)+'\n');process.exitCode=code;}}).catch(error=>{const result={status:'failed',operation:process.argv[2]||'analyze',errors:[error.message]};try{capture(result,1);}catch{/* The primary failure remains authoritative. */}process.stderr.write(JSON.stringify(result)+'\n');process.exitCode=1;});
59
- module.exports={main};
@@ -1,5 +0,0 @@
1
- 'use strict';
2
- // Observed Buddy tool aliases only. Preserve original blocks for digest checks.
3
- const aliases=Object.freeze({use_skill:'Skill',skill:'Skill',execute_command:'Bash',write_to_file:'Write',read_file:'Read',replace_in_file:'Edit'});
4
- const toolName=name=>Object.hasOwn(aliases,name)?aliases[name]:name;
5
- module.exports={toolName};
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env node
2
- 'use strict';
3
- // Capture a real read-only query result when the host's Bash callback omits stdout.
4
- const fs=require('node:fs'),path=require('node:path'),assert=require('node:assert/strict'),{spawnSync}=require('node:child_process');
5
- const J=require('./ptc-callbacks.cjs');
6
- function main(argv=process.argv.slice(2)){
7
- const args=[...argv];assert.equal(args.shift(),'--project','Explicit query project required');const project=fs.realpathSync(args.shift());assert.equal(args.shift(),'--','Separate the executable and its arguments');
8
- const executable=args.shift();assert.ok(path.isAbsolute(executable)&&fs.statSync(executable).isFile(),'Use the detected absolute local executable; this command does not install tools');
9
- const run=spawnSync(executable,args,{cwd:project,encoding:'utf8',timeout:30000,maxBuffer:8*1024*1024});
10
- const result={type:'execute_command_result',exitCode:run.status??1,stdout:run.stdout||'',stderr:run.stderr||'',...(run.error?{error:run.error.message}:{})};
11
- J.captureResult({script:__filename,argv,project,result,exitCode:result.exitCode});return result;
12
- }
13
- module.exports={main};
14
- if(require.main===module)try{const result=main();process.stdout.write(JSON.stringify(result)+'\n');process.exitCode=result.exitCode;}catch(error){process.stderr.write(JSON.stringify({status:'failed',errors:[error.message]})+'\n');process.exitCode=1;}
@@ -1,203 +0,0 @@
1
- 'use strict';
2
- const fs = require('node:fs');
3
- const path = require('node:path');
4
- const crypto = require('node:crypto');
5
- const { spawn } = require('node:child_process');
6
- const sources = require('../assets/optional-skills/sources.json');
7
-
8
- function selection(value = 'none') {
9
- if (typeof value !== 'string') throw new Error('Optional Skill selection must be a string');
10
- const names = [...new Set(value.split(',').map(name => name.trim()))];
11
- if (names.length === 1 && names[0] === 'none') return [];
12
- if (!names.length || names.some(name => !['uiux', 'antdv'].includes(name))) throw new Error('Choose none, uiux, antdv or uiux,antdv');
13
- return names;
14
- }
15
- function safePath(project, relative) {
16
- let current = project;
17
- for (const part of relative.split('/')) {
18
- if (!part || part === '..') throw new Error('Invalid install path');
19
- current = path.join(current, part);
20
- try { if (fs.lstatSync(current).isSymbolicLink()) throw new Error(`Install path contains a symlink: ${current}`); }
21
- catch (error) { if (error.code !== 'ENOENT') throw error; }
22
- }
23
- return current;
24
- }
25
- function verify(data, expected, algorithm = 'sha256', encoding = 'hex') {
26
- if (crypto.createHash(algorithm).update(data).digest(encoding) !== expected) throw new Error('Official download integrity mismatch');
27
- return data;
28
- }
29
- async function download(url, expected, algorithm, encoding) {
30
- const response = await fetch(url, { signal: AbortSignal.timeout(60000) });
31
- if (!response.ok) throw new Error(`Official download failed: HTTP ${response.status}`);
32
- const data = Buffer.from(await response.arrayBuffer());
33
- if (data.length > 50 * 1024 * 1024) throw new Error('Official download exceeds size limit');
34
- return verify(data, expected, algorithm, encoding);
35
- }
36
- function npmEntry() {
37
- const directory = path.dirname(process.execPath);
38
- const candidates = [process.env.npm_execpath, path.join(directory, '../lib/node_modules/npm/bin/npm-cli.js'), path.join(directory, 'node_modules/npm/bin/npm-cli.js')];
39
- for (const folder of (process.env.PATH || '').split(path.delimiter)) {
40
- const entry = path.join(folder, 'npm');
41
- if (fs.existsSync(entry)) candidates.push(fs.realpathSync(entry));
42
- }
43
- const found = candidates.find(file => file && path.basename(file) === 'npm-cli.js' && fs.existsSync(file));
44
- if (!found) throw new Error('Cannot locate npm-cli.js; use a standard Node.js/npm installation');
45
- return found;
46
- }
47
- function run(entry, args, cwd, env) {
48
- return new Promise((resolve, reject) => {
49
- const child = spawn(process.execPath, [entry, ...args], { cwd, env, stdio: ['ignore', 'pipe', 'pipe'] });
50
- let output = '', failed = false;
51
- const timer = setTimeout(() => { failed = true; child.kill(); reject(new Error('Official installer timed out')); }, 180000);
52
- for (const stream of [child.stdout, child.stderr]) stream.on('data', chunk => {
53
- output += chunk;
54
- if (output.length > 5 * 1024 * 1024) { failed = true; child.kill(); reject(new Error('Official installer output exceeds limit')); }
55
- });
56
- child.once('error', error => { clearTimeout(timer); failed = true; reject(error); });
57
- child.once('close', code => { clearTimeout(timer); if (!failed) code === 0 ? resolve() : reject(new Error(`Official installer failed (${code}): ${output.slice(-1500)}`)); });
58
- });
59
- }
60
- function validateSkill(folder, name) {
61
- const entry = fs.readFileSync(path.join(folder, 'SKILL.md'), 'utf8');
62
- if (!new RegExp(`^name:\\s*["']?${name}["']?\\s*$`, 'm').test(entry)) throw new Error(`Official Skill identity mismatch: ${name}`);
63
- function visit(directory) {
64
- for (const item of fs.readdirSync(directory, { withFileTypes: true })) {
65
- if (item.isSymbolicLink()) throw new Error('Official Skill contains a symbolic link');
66
- if (item.isDirectory()) visit(path.join(directory, item.name));
67
- else if (!item.isFile()) throw new Error('Official Skill contains an unsupported file');
68
- }
69
- }
70
- visit(folder);
71
- if (name === 'ui-ux-pro-max') for (const file of ['scripts/search.py', 'scripts/core.py', 'scripts/design_system.py', 'data/ux-guidelines.csv']) {
72
- if (!fs.existsSync(path.join(folder, file))) throw new Error(`Incomplete UIUX resources: ${file}`);
73
- }
74
- }
75
- function uiuxPaths(packageRoot, skill, context, platform) {
76
- const templates = path.join(packageRoot, 'assets/templates');
77
- const config = JSON.parse(fs.readFileSync(path.join(templates, 'platforms', `${platform}.json`), 'utf8'));
78
- const template = fs.readFileSync(path.join(templates, 'base/skill-content.md'), 'utf8');
79
- const scriptFile = path.join(context.destination, 'scripts/search.py');
80
- const script = (context.scope === 'global' ? scriptFile : path.relative(context.project, scriptFile)).split(path.sep).join('/');
81
- const command = /^[a-zA-Z0-9_./:-]+$/.test(script) ? script : process.platform === 'win32' ? "'" + script.replaceAll("'", "''") + "'" : "'" + script.replaceAll("'", "'\\''") + "'";
82
- const parameters = { TITLE: config.title, DESCRIPTION: config.description, SCRIPT_PATH: command, SKILL_OR_WORKFLOW: config.skillOrWorkflow,
83
- QUICK_REFERENCE: config.sections.quickReference ? '\n' + fs.readFileSync(path.join(templates, 'base/quick-reference.md'), 'utf8') : '' };
84
- const file = path.join(skill, 'SKILL.md'), original = fs.readFileSync(file, 'utf8');
85
- const header = original.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n/)?.[0];
86
- if (!header) throw new Error('Official UIUX frontmatter is missing');
87
- // Only official template placeholders are parameterized. The downloaded
88
- // template and CLI code remain unchanged; paths work in every supported host.
89
- const body = template.replace(/\{\{([A-Z_]+)\}\}/g, (match, key) => {
90
- if (!Object.hasOwn(parameters, key)) throw new Error(`Unknown official UIUX placeholder: ${key}`);
91
- return parameters[key];
92
- });
93
- fs.writeFileSync(file, header + body);
94
- return { platform, script, command, templateSha256: crypto.createHash('sha256').update(template).digest('hex') };
95
- }
96
- async function prepareOfficial(name, stage, context) {
97
- const source = sources[name], tool = path.join(stage, 'tool'), workspace = path.join(stage, 'workspace');
98
- fs.mkdirSync(tool, { recursive: true }); fs.mkdirSync(workspace);
99
- const archive = await download(source.tarball, source.integrity.slice(7), 'sha512', 'base64');
100
- fs.writeFileSync(path.join(tool, 'source.tgz'), archive);
101
- const env = { ...process.env, npm_config_cache: path.join(stage, 'npm-cache'), npm_config_offline: 'false', NPM_CONFIG_OFFLINE: 'false', npm_config_update_notifier: 'false', ANTDV_NO_AUTO_REPORT: '1' };
102
- await run(npmEntry(), ['install', '--ignore-scripts', '--no-audit', '--no-fund', '--package-lock', './source.tgz'], tool, env);
103
- const packageRoot = path.join(tool, 'node_modules', source.packageName), pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8'));
104
- if (pkg.name !== source.packageName || pkg.version !== source.version) throw new Error('Official CLI version mismatch');
105
- let skill, pathParameters;
106
- if (name === 'uiux') {
107
- const platform = ['codebuddy', 'workbuddy'].includes(context.host) ? 'codebuddy' : context.host === 'codex' ? 'codex' : context.host === 'claude-code' ? 'claude' : 'universal';
108
- await run(path.join(packageRoot, pkg.bin.uipro), ['init', '--ai', platform, '--offline'], workspace, env);
109
- const config = JSON.parse(fs.readFileSync(path.join(packageRoot, 'assets/templates/platforms', `${platform}.json`), 'utf8'));
110
- skill = path.join(workspace, config.folderStructure.root, config.folderStructure.skillPath);
111
- pathParameters = uiuxPaths(packageRoot, skill, context, platform);
112
- } else {
113
- skill = path.join(workspace, 'antdv'); fs.mkdirSync(skill);
114
- fs.writeFileSync(path.join(skill, 'SKILL.md'), await download(source.skillUrl, source.skillSha256));
115
- }
116
- fs.writeFileSync(path.join(skill, 'LICENSE'), await download(source.licenseUrl, source.licenseSha256));
117
- const receipt = JSON.stringify({ ...source, installedAt: new Date().toISOString(), installer: 'i3 optional dependency preparation; official templates retained',
118
- ...(pathParameters ? { pathParameters } : {}) }, null, 2) + '\n';
119
- fs.writeFileSync(path.join(skill, 'UPSTREAM-ORIGIN.json'), receipt);
120
- if (name === 'antdv') fs.writeFileSync(path.join(tool, 'UPSTREAM-ORIGIN.json'), receipt);
121
- return { skill, tool };
122
- }
123
- async function install(options = {}, services = {}) {
124
- if (options.provider !== undefined || options.tool !== undefined) throw new Error('--provider and --tool are for read-only check');
125
- const deps = require('./prototype-dependencies.cjs');
126
- const names = selection(options.skills), before = deps.check(options), context = before.locations;
127
- if (options.migrateTools && (context.scope !== 'project' || !names.includes('antdv'))) throw new Error('--migrate-tools requires project scope and selected antdv');
128
- if (!names.length) return { status: 'skipped', selected: [], detection: before };
129
- const pending = [], preserved = [];
130
- const safe = file => safePath(path.parse(file).root, path.relative(path.parse(file).root, file).split(path.sep).join('/'));
131
- for (const name of names) {
132
- const source = sources[name], destination = safe(path.join(context.skillsDirectory, source.skillName));
133
- const available = name === 'uiux' ? before.uiux.availability === 'available' : before.antdv.skill.availability === 'available';
134
- const needsSkill = !available;
135
- if (needsSkill && fs.existsSync(destination)) throw new Error(`Existing Skill preserved; repair or choose its actual provider path: ${destination}`);
136
- const toolDestination = name === 'antdv' ? safe(path.join(context.toolsDirectory, 'antdv-cli')) : null;
137
- if (name === 'antdv' && before.antdv.tool.availability === 'unusable') throw new Error(`Existing tool unusable; preserved: ${before.antdv.tool.root}`);
138
- const needsTool = name === 'antdv' && before.antdv.tool.availability === 'missing' && !fs.existsSync(toolDestination);
139
- if (name === 'antdv' && before.antdv.tool.availability === 'missing' && fs.existsSync(toolDestination)) throw new Error(`Existing tool directory preserved: ${toolDestination}`);
140
- let migration;
141
- if (name === 'antdv' && options.migrateTools && fs.existsSync(path.join(context.project, '.prototype-tools'))) {
142
- migration = safe(path.join(context.project, '.prototype-tools/antdv-cli'));
143
- if (!fs.existsSync(migration)) {
144
- if (fs.existsSync(path.join(context.project, '.prototype-tools/node_modules/@antdv-next/cli'))) throw new Error('Legacy mixed tools have no independent i3 ownership; preserved');
145
- migration = undefined;
146
- }
147
- }
148
- if (migration) {
149
- let receipt;
150
- try { receipt = JSON.parse(fs.readFileSync(path.join(migration, 'UPSTREAM-ORIGIN.json'), 'utf8')); } catch { /* handled below */ }
151
- if (!receipt?.installer?.startsWith('i3 optional dependency preparation') || receipt.packageName !== sources.antdv.packageName || receipt.version !== sources.antdv.version || receipt.integrity !== sources.antdv.integrity) throw new Error('Legacy tool has no verified i3 ownership; preserved');
152
- if (deps.antdvTool(context.project, { ...options, host: context.host, scope: context.scope, tool: path.join(migration, 'node_modules/@antdv-next/cli') }).availability !== 'available') throw new Error('Legacy tool query failed; preserved');
153
- if (fs.existsSync(toolDestination)) throw new Error(`Existing tool directory preserved: ${toolDestination}`);
154
- }
155
- if (needsSkill || needsTool || migration) pending.push({ name, destination, needsSkill, toolDestination, needsTool, migration });
156
- if (!needsSkill) preserved.push(name);
157
- }
158
- if (!pending.length) return { status: 'reused', selected: names, preserved, detection: before };
159
- const tools = safe(context.toolsDirectory), committed = [], created = [];
160
- const lock = path.join(tools, '.i3-optional-install.lock');
161
- let descriptor, stage, result;
162
- const mkdir = directory => { if (!fs.existsSync(directory)) { mkdir(path.dirname(directory)); fs.mkdirSync(directory); created.push(directory); } };
163
- try {
164
- mkdir(tools); descriptor = fs.openSync(lock, 'wx');
165
- stage = fs.mkdtempSync(path.join(tools, '.i3-optional-stage-'));
166
- const moves = [];
167
- for (const item of pending) {
168
- if (item.needsSkill || item.needsTool) {
169
- (services.progress || (message => process.stderr.write(message + '\n')))(`准备官方依赖:${item.name}(${context.host} / ${context.scope})`);
170
- const folder = path.join(stage, item.name); fs.mkdirSync(folder);
171
- const prepared = await (services.prepare || prepareOfficial)(item.name, folder, { ...context, destination: item.destination });
172
- if (item.needsSkill) { validateSkill(prepared.skill, sources[item.name].skillName); moves.push({ from: prepared.skill, to: item.destination }); }
173
- if (item.needsTool) moves.push({ from: prepared.tool, to: item.toolDestination });
174
- }
175
- if (item.migration) moves.push({ from: item.migration, to: item.toolDestination, migration: true });
176
- }
177
- for (const move of moves) {
178
- const { from, to } = move; safe(from); safe(to);
179
- if (fs.existsSync(to)) throw new Error(`Destination appeared during install; preserved: ${to}`);
180
- mkdir(path.dirname(to)); fs.renameSync(from, to); committed.push(move);
181
- }
182
- const detection = deps.check(options);
183
- if (names.includes('antdv') && detection.antdv.tool.availability !== 'available') throw new Error('Installed or migrated antDv tool query failed');
184
- const migrated = committed.filter(item => item.migration).map(item => ({ from: item.from, to: item.to }));
185
- result = { status: migrated.length && pending.every(item => !item.needsSkill && !item.needsTool) ? 'migrated' : 'installed', selected: names, preserved,
186
- installed: pending.filter(item => item.needsSkill || item.needsTool).map(item => item.name), migrated, detection,
187
- note: 'Reload the selected host or open a new session if needed. Installation/probing does not prove Skill invocation. Existing prototypes are unchanged.' };
188
- } catch (error) {
189
- for (const move of committed.reverse()) {
190
- if (move.migration) fs.renameSync(move.to, move.from);
191
- else fs.rmSync(move.to, { recursive: true, force: true });
192
- }
193
- throw error;
194
- } finally {
195
- if (stage) fs.rmSync(stage, { recursive: true, force: true });
196
- if (descriptor !== undefined) { fs.closeSync(descriptor); fs.unlinkSync(lock); }
197
- for (const directory of created.reverse()) if (fs.existsSync(directory) && !fs.readdirSync(directory).length) fs.rmdirSync(directory);
198
- }
199
- const legacy = path.join(context.project, '.prototype-tools');
200
- if (result.migrated.length && !fs.readdirSync(legacy).length) fs.rmdirSync(legacy);
201
- return result;
202
- }
203
- module.exports = { install, selection, safePath, verify, validateSkill };