@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,190 +0,0 @@
1
- 'use strict';
2
- const test = require('node:test');
3
- const assert = require('node:assert/strict');
4
- const fs = require('node:fs');
5
- const os = require('node:os');
6
- const path = require('node:path');
7
- const childProcess = require('node:child_process');
8
- const installationFile = path.join(__dirname, 'lib/installation.js');
9
- const skillsDirectory = fs.existsSync(installationFile) ? require(installationFile).loadInstallation().skillsDirectory : path.resolve(__dirname, '../skills');
10
- const moduleFile = path.join(skillsDirectory, 'i3-ui-prototype/scripts/design-provider-discovery.cjs');
11
-
12
- function fixture(t) {
13
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'i3-provider-discovery-'));
14
- t.after(() => fs.rmSync(root, { recursive: true, force: true }));
15
- const home = path.join(root, 'home'), project = path.join(root, 'project');
16
- fs.mkdirSync(home); fs.mkdirSync(project);
17
- return { root, home, project, env: {} };
18
- }
19
- function write(file, value) { fs.mkdirSync(path.dirname(file), { recursive: true }); fs.writeFileSync(file, typeof value === 'string' ? value : JSON.stringify(value)); }
20
- function skill(root) { write(path.join(root, 'SKILL.md'), '# Fixture UI/UX'); return root; }
21
- function discover(options, run = () => { throw new Error('Unexpected host CLI call'); }) {
22
- const original = childProcess.spawnSync;
23
- childProcess.spawnSync = run;
24
- delete require.cache[require.resolve(moduleFile)];
25
- let api;
26
- try { api = require(moduleFile); } finally { childProcess.spawnSync = original; }
27
- return api.discoverProviderCandidates(options);
28
- }
29
- function codexPlugin(f, overrides = {}) {
30
- const record = { pluginId: 'ui-ux-pro-max@ui-ux-pro-max-skill', name: 'ui-ux-pro-max', marketplaceName: 'ui-ux-pro-max-skill', version: '2.15.0', installed: true, enabled: true, ...overrides };
31
- const cache = path.join(f.env.CODEX_HOME || path.join(f.home, '.codex'), 'plugins/cache/ui-ux-pro-max-skill/ui-ux-pro-max', record.version);
32
- if (!record.version.includes('..')) {
33
- write(path.join(cache, '.claude-plugin/plugin.json'), { name: 'ui-ux-pro-max', version: record.version, skills: './.claude/skills/' });
34
- skill(path.join(cache, '.claude/skills/ui-ux-pro-max'));
35
- }
36
- return { record, cache, run: () => ({ status: 0, stdout: JSON.stringify({ installed: [record], available: [] }) }) };
37
- }
38
- function registryPlugin(f, host, records, enabled = true) {
39
- const config = path.join(f.home, `.${host}`), id = 'ui-ux-pro-max@fixture-market';
40
- write(path.join(config, 'settings.json'), { enabledPlugins: { [id]: enabled } });
41
- write(path.join(config, 'plugins/installed_plugins.json'), { version: 2, plugins: { [id]: records } });
42
- for (const record of records) {
43
- write(path.join(record.installPath, host === 'claude' ? '.claude-plugin/plugin.json' : '.codebuddy-plugin/plugin.json'), { name: 'ui-ux-pro-max', version: record.version, ...(host === 'claude' ? { skills: './.claude/skills/' } : {}) });
44
- skill(path.join(record.installPath, host === 'claude' ? '.claude/skills/ui-ux-pro-max' : 'skills/ui-ux-pro-max'));
45
- }
46
- return config;
47
- }
48
-
49
- test('explicit provider has precedence over host roots and does not invoke discovery', t => {
50
- const f = fixture(t), root = path.join(f.root, 'explicit');
51
- assert.deepEqual(discover({ ...f, provider: root, providerRoots: ['/ignored'], host: 'codex' }), { candidates: [{ root, source: 'explicit' }], diagnostics: [] });
52
- });
53
- test('host-exposed provider roots work without host context and preserve order', t => {
54
- const f = fixture(t), roots = [path.join(f.root, 'first'), path.join(f.root, 'second')];
55
- assert.deepEqual(discover({ ...f, providerRoots: roots }).candidates.map(c => c.root), roots);
56
- assert.equal(discover({ ...f, providerRoots: [] }).contextRequired, undefined);
57
- });
58
- test('unknown host requires context and cannot read another host cache', t => {
59
- const f = fixture(t); skill(path.join(f.home, '.claude/skills/ui-ux-pro-max'));
60
- assert.equal(discover(f).contextRequired, true);
61
- assert.equal(discover({ ...f, host: 'unknown' }).contextRequired, true);
62
- assert.deepEqual(discover({ ...f, host: 'unknown' }).candidates, []);
63
- });
64
- test('discover false prevents automatic host access', t => {
65
- const f = fixture(t); skill(path.join(f.home, '.agents/skills/ui-ux-pro-max'));
66
- assert.deepEqual(discover({ ...f, host: 'codex', discover: false }), { candidates: [], diagnostics: [], contextRequired: true });
67
- });
68
- test('Codex returns project then global skill locations and the exact enabled plugin version', t => {
69
- const f = fixture(t), plugin = codexPlugin(f);
70
- const project = skill(path.join(f.project, '.agents/skills/ui-ux-pro-max'));
71
- const global = skill(path.join(f.home, '.codex/skills/ui-ux-pro-max'));
72
- const stale = path.join(f.home, '.codex/plugins/cache/ui-ux-pro-max-skill/ui-ux-pro-max/99.0.0/.claude/skills/ui-ux-pro-max'); skill(stale);
73
- let command;
74
- const result = discover({ ...f, host: 'codex' }, (...args) => { command = args; return plugin.run(); });
75
- assert.deepEqual(result.candidates.map(c => c.root), [project, global, path.join(plugin.cache, '.claude/skills/ui-ux-pro-max')]);
76
- assert.equal(command[0], 'codex');
77
- assert.deepEqual(command[1], ['plugin', 'list', '--marketplace', 'ui-ux-pro-max-skill', '--json']);
78
- assert.ok(command[2].timeout > 0 && command[2].timeout <= 15000);
79
- assert.equal(command[2].shell, false);
80
- });
81
- test('Codex honors isolated CODEX_HOME and never scans the default cache', t => {
82
- const f = fixture(t); f.env.CODEX_HOME = path.join(f.root, 'custom-codex');
83
- const plugin = codexPlugin(f);
84
- const result = discover({ ...f, host: 'codex' }, plugin.run);
85
- assert.equal(result.candidates.at(-1).root, path.join(plugin.cache, '.claude/skills/ui-ux-pro-max'));
86
- });
87
- test('Codex disabled cached plugin is not a candidate', t => {
88
- const f = fixture(t), plugin = codexPlugin(f, { enabled: false });
89
- const result = discover({ ...f, host: 'codex' }, plugin.run);
90
- assert.deepEqual(result.candidates, []);
91
- assert.equal(result.diagnostics[0].availability, 'disabled');
92
- });
93
- test('Codex missing installation does not inspect cached versions', t => {
94
- const f = fixture(t); codexPlugin(f);
95
- const result = discover({ ...f, host: 'codex' }, () => ({ status: 0, stdout: '{"installed":[],"available":[]}' }));
96
- assert.deepEqual(result.candidates, []);
97
- assert.ok(result.diagnostics.every(d => d.availability === 'missing'));
98
- });
99
- for (const [name, run] of [
100
- ['missing CLI', () => ({ status: null, error: { code: 'ENOENT' }, stdout: '' })],
101
- ['failed CLI', () => ({ status: 1, stderr: 'failure', stdout: '' })],
102
- ['invalid JSON', () => ({ status: 0, stdout: '{bad' })],
103
- ['invalid schema', () => ({ status: 0, stdout: '{}' })],
104
- ]) test(`Codex ${name} is a discovery error, not a missing installation`, t => {
105
- const f = fixture(t), result = discover({ ...f, host: 'codex' }, run);
106
- assert.equal(result.diagnostics[0].availability, 'discovery-error');
107
- });
108
- test('Codex rejects multiple active installed records instead of selecting a version', t => {
109
- const f = fixture(t), { record } = codexPlugin(f);
110
- const result = discover({ ...f, host: 'codex' }, () => ({ status: 0, stdout: JSON.stringify({ installed: [record, { ...record, version: '2.14.0' }] }) }));
111
- assert.deepEqual(result.candidates, []);
112
- assert.equal(result.diagnostics[0].availability, 'ambiguous');
113
- });
114
- for (const [name, change] of [
115
- ['wrong manifest version', m => { m.version = '2.14.0'; }],
116
- ['wrong manifest name', m => { m.name = 'different'; }],
117
- ['escaping skills declaration', m => { m.skills = '../../../outside'; }],
118
- ['missing skills declaration', m => { delete m.skills; }],
119
- ]) test(`Codex rejects ${name}`, t => {
120
- const f = fixture(t), plugin = codexPlugin(f), file = path.join(plugin.cache, '.claude-plugin/plugin.json');
121
- const manifest = JSON.parse(fs.readFileSync(file)); change(manifest); write(file, manifest);
122
- const result = discover({ ...f, host: 'codex' }, plugin.run);
123
- assert.deepEqual(result.candidates, []);
124
- assert.equal(result.diagnostics[0].availability, 'discovery-error');
125
- });
126
- test('Codex validates the active version as a single safe path segment', t => {
127
- const f = fixture(t), plugin = codexPlugin(f, { version: '../../escape' });
128
- assert.equal(discover({ ...f, host: 'codex' }, plugin.run).diagnostics[0].availability, 'discovery-error');
129
- });
130
- test('Codex rejects a child skill symlink escaping the registered plugin root', t => {
131
- const f = fixture(t), plugin = codexPlugin(f), outside = skill(path.join(f.root, 'outside'));
132
- const child = path.join(plugin.cache, '.claude/skills/ui-ux-pro-max');
133
- fs.rmSync(child, { recursive: true }); fs.symlinkSync(outside, child, 'dir');
134
- const result = discover({ ...f, host: 'codex' }, plugin.run);
135
- assert.deepEqual(result.candidates, []);
136
- assert.equal(result.diagnostics[0].availability, 'discovery-error');
137
- });
138
- for (const host of ['claude', 'workbuddy', 'codebuddy']) test(`${host} selects only enabled registered plugins`, t => {
139
- const f = fixture(t), installPath = path.join(f.root, host, 'plugin');
140
- registryPlugin(f, host, [{ scope: 'user', installPath, version: '2.0.0' }]);
141
- const result = discover({ ...f, host });
142
- assert.deepEqual(result.candidates.map(c => c.root), [path.join(installPath, host === 'claude' ? '.claude/skills/ui-ux-pro-max' : 'skills/ui-ux-pro-max')]);
143
- registryPlugin(f, host, [{ scope: 'user', installPath, version: '2.0.0' }], false);
144
- const disabled = discover({ ...f, host });
145
- assert.deepEqual(disabled.candidates, []); assert.equal(disabled.diagnostics[0].availability, 'disabled');
146
- });
147
- test('missing optional registry is normal, while corrupt metadata is an error', t => {
148
- const f = fixture(t);
149
- assert.ok(discover({ ...f, host: 'workbuddy' }).diagnostics.every(d => d.availability === 'missing'));
150
- write(path.join(f.home, '.workbuddy/plugins/installed_plugins.json'), '{invalid');
151
- assert.equal(discover({ ...f, host: 'workbuddy' }).diagnostics[0].availability, 'discovery-error');
152
- });
153
- test('a registered plugin with missing enablement metadata needs diagnosis instead of installation', t => {
154
- const f = fixture(t);
155
- const config = registryPlugin(f, 'workbuddy', [{ scope: 'user', installPath: path.join(f.root, 'plugin'), version: '2.0.0' }]);
156
- fs.unlinkSync(path.join(config, 'settings.json'));
157
- const result = discover({ ...f, host: 'workbuddy' });
158
- assert.deepEqual(result.candidates, []);
159
- assert.equal(result.diagnostics[0].availability, 'discovery-error');
160
- });
161
- test('project plugin scope must match the current project path', t => {
162
- const f = fixture(t), installPath = path.join(f.root, 'plugin');
163
- registryPlugin(f, 'claude', [{ scope: 'project', projectPath: path.join(f.root, 'other-project'), installPath, version: '2.0.0' }]);
164
- assert.deepEqual(discover({ ...f, host: 'claude-code' }).candidates, []);
165
- registryPlugin(f, 'claude', [{ scope: 'project', projectPath: f.project, installPath, version: '2.0.0' }]);
166
- assert.equal(discover({ ...f, host: 'claude-code' }).candidates.length, 1);
167
- registryPlugin(f, 'claude', [{ scope: 'project', installPath, version: '2.0.0' }]);
168
- assert.deepEqual(discover({ ...f, host: 'claude-code' }).candidates, []);
169
- });
170
- test('ambiguous matching registry entries do not pick one arbitrarily', t => {
171
- const f = fixture(t);
172
- registryPlugin(f, 'workbuddy', [
173
- { scope: 'user', installPath: path.join(f.root, 'first'), version: '2.0.0' },
174
- { scope: 'user', installPath: path.join(f.root, 'second'), version: '2.1.0' },
175
- ]);
176
- const result = discover({ ...f, host: 'workbuddy' });
177
- assert.deepEqual(result.candidates, []); assert.equal(result.diagnostics[0].availability, 'ambiguous');
178
- });
179
- test('host selection never borrows another host global plugin', t => {
180
- const f = fixture(t);
181
- registryPlugin(f, 'claude', [{ scope: 'user', installPath: path.join(f.root, 'claude'), version: '2.0.0' }]);
182
- registryPlugin(f, 'workbuddy', [{ scope: 'user', installPath: path.join(f.root, 'workbuddy'), version: '2.0.0' }]);
183
- assert.deepEqual(discover({ ...f, host: 'codebuddy' }).candidates, []);
184
- });
185
- test('WorkBuddy uses its global config override and the project CodeBuddy skills directory', t => {
186
- const f = fixture(t); f.env.WORKBUDDY_CONFIG_DIR = path.join(f.root, 'custom-workbuddy');
187
- const projectRoot = skill(path.join(f.project, '.codebuddy/skills/ui-ux-pro-max'));
188
- const globalRoot = skill(path.join(f.env.WORKBUDDY_CONFIG_DIR, 'skills/ui-ux-pro-max'));
189
- assert.deepEqual(discover({ ...f, host: 'workbuddy' }).candidates.map(c => c.root), [projectRoot, globalRoot]);
190
- });
@@ -1,75 +0,0 @@
1
- 'use strict';
2
- const { test, mock } = require('node:test');
3
- const assert = require('node:assert/strict');
4
- const fs = require('node:fs');
5
- const os = require('node:os');
6
- const path = require('node:path');
7
- const cp = require('node:child_process');
8
- mock.method(cp, 'spawnSync', (command, args) => {
9
- if (!args.includes('--json') || args[0] !== '-B') return { status: 1, stdout: '', stderr: 'No plugin CLI in isolated test' };
10
- if (args[1].includes('query-fails')) return { status: 1, stdout: '', stderr: 'Python module unavailable' };
11
- return { status: 0, stdout: JSON.stringify({ domain: 'ux', results: [{ name: 'Error summary' }] }), stderr: '' };
12
- });
13
- const installationFile = path.join(__dirname, 'lib/installation.js');
14
- const skillsDirectory = fs.existsSync(installationFile) ? require(installationFile).loadInstallation().skillsDirectory : path.resolve(__dirname, '../skills');
15
- const lib = require(path.join(skillsDirectory, 'i3-ui-prototype/scripts/prototype-lib.cjs'));
16
- function fixture(t) {
17
- const home = fs.mkdtempSync(path.join(os.tmpdir(), 'i3-provider-'));
18
- t.after(() => fs.rmSync(home, { recursive: true, force: true }));
19
- return home;
20
- }
21
- function provider(home, name) {
22
- const root = path.join(home, name);
23
- for (const file of ['SKILL.md', 'scripts/search.py', 'scripts/core.py', 'scripts/design_system.py', ...['ux-guidelines', 'styles', 'colors', 'typography', 'products', 'landing', 'ui-reasoning'].map(name => `data/${name}.csv`)]) {
24
- fs.mkdirSync(path.dirname(path.join(root, file)), { recursive: true });
25
- fs.writeFileSync(path.join(root, file), 'fixture');
26
- }
27
- return root;
28
- }
29
- test('an incomplete project provider does not shadow a usable global provider', t => {
30
- const home = fixture(t), local = path.join(home, 'project-provider'), global = provider(home, 'global-provider');
31
- fs.mkdirSync(local);
32
- const result = lib.checkDesignProvider({ providerRoots: [local, global] });
33
- assert.equal(result.availability, 'available');
34
- assert.equal(result.root, global);
35
- assert.equal(result.attempts[0].availability, 'unusable');
36
- assert.ok(result.attempts[0].missing.includes('scripts/search.py'));
37
- });
38
- test('a failed project query does not shadow a usable global provider', t => {
39
- const home = fixture(t), local = provider(home, 'query-fails'), global = provider(home, 'global-provider');
40
- const result = lib.checkDesignProvider({ providerRoots: [local, global] });
41
- assert.equal(result.availability, 'available');
42
- assert.equal(result.root, global);
43
- assert.match(result.attempts[0].reason, /Python module unavailable/);
44
- });
45
- test('an explicit provider failure never silently selects a different provider', t => {
46
- const home = fixture(t), selected = path.join(home, 'missing'), other = provider(home, 'other');
47
- const result = lib.checkDesignProvider({ provider: selected, providerRoots: [other] });
48
- assert.equal(result.availability, 'missing');
49
- assert.deepEqual(result.searched, [selected]);
50
- });
51
- test('without host or provider the result requests context, not installation', t => {
52
- const home = fixture(t);
53
- const result = lib.initPrototype({ project: home, id: 'demo', home, env: {} });
54
- assert.equal(result.provider.availability, 'needs-context');
55
- assert.equal(result.choices[0].id, 'locate');
56
- assert.ok(!result.choices.some(choice => choice.id === 'install'));
57
- assert.equal(fs.existsSync(path.join(home, 'prototypes')), false);
58
- });
59
- test('all unusable providers preserve their individual failure reasons without asking to reinstall', t => {
60
- const home = fixture(t), incomplete = path.join(home, 'incomplete'), failing = provider(home, 'query-fails');
61
- fs.mkdirSync(incomplete);
62
- const result = lib.initPrototype({ project: home, id: 'demo', providerRoots: [incomplete, failing] });
63
- assert.equal(result.provider.availability, 'unusable');
64
- assert.equal(result.provider.attempts.length, 2);
65
- assert.equal(result.choices[0].id, 'repair');
66
- assert.ok(!result.choices.some(choice => choice.id === 'install'));
67
- assert.equal(fs.existsSync(path.join(home, 'prototypes')), false);
68
- });
69
- test('a business package version cannot masquerade as the later installed UIUX version', t => {
70
- const home = fixture(t), root = provider(home, 'manual-provider');
71
- fs.writeFileSync(path.join(home, 'package.json'), JSON.stringify({ name: 'human-business-project', version: '99.88.77' }));
72
- assert.equal(lib.checkDesignProvider({ provider: root }).version, 'unversioned');
73
- fs.writeFileSync(path.join(root, 'UPSTREAM-ORIGIN.json'), JSON.stringify({ packageName: 'ui-ux-pro-max-cli', version: '2.15.0' }));
74
- assert.equal(lib.checkDesignProvider({ provider: root }).version, '2.15.0');
75
- });
@@ -1,205 +0,0 @@
1
- 'use strict';
2
- const test = require('node:test');
3
- const assert = require('node:assert/strict');
4
- const fs = require('node:fs');
5
- const path = require('node:path');
6
- const os = require('node:os');
7
- const crypto = require('node:crypto');
8
- const { spawn, spawnSync } = require('node:child_process');
9
- const install = path.join(__dirname, 'lib/installation.js');
10
- const skills = fs.existsSync(install) ? require(install).loadInstallation().skillsDirectory : path.resolve(__dirname, '../skills');
11
- const skill = path.join(skills, 'i3-ui-prototype');
12
- const lib = require(path.join(skill, 'scripts/prototype-lib.cjs'));
13
- const enterprise = require(path.join(skill, 'scripts/enterprise-template.cjs'));
14
- const read = (root, file) => JSON.parse(fs.readFileSync(path.join(root, file), 'utf8'));
15
- function project(t) {
16
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'enterprise-template-'));
17
- t.after(() => fs.rmSync(root, { recursive: true, force: true }));
18
- return root;
19
- }
20
- function initialize(t, options = {}) {
21
- return lib.initPrototype({ project: project(t), id: 'enterprise-demo', expertMode: 'template', purpose: 'template-review', ...options }).directory;
22
- }
23
- test('runtime branding changes uppercase product text only in runtime HTML and JavaScript', () => {
24
- const source = 'EASEL easel-html /easel EASEL 研发';
25
- for (const file of ['index.html', 'src/shell/ConsoleShell.html', 'src/models/data.js']) {
26
- assert.equal(enterprise.brandRuntimeResource(file, source), 'i3-Composer easel-html /easel i3-Composer 研发');
27
- }
28
- for (const file of ['origin.json', 'licenses/EASEL.txt', 'qa/REVIEW.md', 'src/styles.css', 'tests/behavior.js', 'app.js']) {
29
- const bytes = Buffer.from(source);
30
- assert.equal(enterprise.brandRuntimeResource(file, bytes), bytes, file);
31
- }
32
- assert.ok(Buffer.isBuffer(enterprise.brandRuntimeResource('src/models/data.js', Buffer.from(source))));
33
- });
34
- test('generated enterprise runtime uses i3-Composer branding with one final adaptation record per changed source', t => {
35
- const dir = initialize(t, { title: 'i3-Composer 品牌验收' });
36
- const shell = fs.readFileSync(path.join(dir, 'app/src/shell/ConsoleShell.html'), 'utf8');
37
- assert.match(shell, /<strong>i3-Composer<\/strong>/);
38
- assert.doesNotMatch(shell, /EASEL/);
39
- assert.match(fs.readFileSync(path.join(dir, 'app/index.html'), 'utf8'), /<title>i3-Composer/);
40
- const models = fs.readFileSync(path.join(dir, 'app/src/models/data.js'), 'utf8');
41
- assert.match(models, /i3-Composer 研发/);
42
- assert.doesNotMatch(models, /EASEL/);
43
- assert.match(fs.readFileSync(path.join(dir, 'app/src/permissions/MemberEditor.html'), 'utf8'), /i3-Composer 业务角色/);
44
- assert.doesNotMatch(read(dir, 'requirements-map.json').scope, /EASEL/);
45
- assert.doesNotMatch(fs.readFileSync(path.join(dir, 'mocks/README.md'), 'utf8'), /EASEL/);
46
- const origin = enterprise.verifyReference(), source = read(dir, 'design-system/source.json');
47
- assert.equal(origin.fileCount, 326);
48
- assert.equal(new Set(source.adaptations.map(record => record.file)).size, source.adaptations.length);
49
- const adapted = new Map(source.adaptations.map(record => [record.file, record]));
50
- for (const [file, expected] of Object.entries(origin.files)) {
51
- const generated = crypto.createHash('sha256').update(fs.readFileSync(path.join(dir, 'app', file))).digest('hex');
52
- if (generated === expected) continue;
53
- const record = adapted.get(file);
54
- assert.ok(record, `Unrecorded runtime adaptation: ${file}`);
55
- assert.equal(record.source, expected, file);
56
- assert.equal(record.generated, generated, file);
57
- assert.ok(record.reason, file);
58
- }
59
- assert.match(adapted.get('index.html').reason, /i3-Composer/);
60
- assert.match(adapted.get('src/models/data.js').reason, /i3-Composer/);
61
- });
62
- test('four prototype families expose the EASEL enterprise template and explicitly defer the other three', () => {
63
- const entries = lib.listTemplates();
64
- assert.deepEqual(entries.map(x => x.id), ['enterprise-admin', 'ai-workbench', 'digital-twin', 'mobile-app']);
65
- assert.deepEqual(entries.filter(x => x.availability === 'available').map(x => x.id), ['enterprise-admin']);
66
- for (const entry of entries.slice(1)) assert.equal(entry.availability, 'planned');
67
- });
68
- test('default enterprise initializer preserves the complete EASEL runtime and its review scope', t => {
69
- const dir = initialize(t), metadata = read(dir, 'prototype.json');
70
- assert.equal(metadata.template.id, 'enterprise-admin');
71
- assert.equal(metadata.purpose, 'template-review');
72
- assert.equal(metadata.review.status, 'pending-review');
73
- const inspection = lib.checkPrototype(dir);
74
- assert.equal(inspection.status, 'passed', JSON.stringify(inspection));
75
- const routes = read(dir, 'app/routes.json').filter(x => x.component && !x.path.startsWith('/module/'));
76
- assert.equal(routes.length, 37);
77
- assert.equal(new Set(routes.map(x => x.component)).size, 34);
78
- for (const file of ['app/runtime/dom.js', 'app/styles/antdv.css', 'app/src/shell/ConsoleShell.html', 'app/licenses/antdv-next.txt', 'design-system/source.json']) {
79
- assert.ok(fs.existsSync(path.join(dir, file)), file);
80
- }
81
- });
82
- test('planned template families refuse initialization without silently generating a desktop demo', t => {
83
- const root = project(t);
84
- for (const template of ['ai-workbench', 'digital-twin', 'mobile-app']) {
85
- assert.throws(() => lib.initPrototype({ project: root, id: template, template, expertMode: 'template' }), /planned|尚未|待建设/);
86
- }
87
- assert.equal(fs.existsSync(path.join(root, 'prototypes')), false);
88
- });
89
- test('all imported reference files retain their declared source hashes', () => {
90
- const origin = read(skill, 'assets/templates/enterprise-admin/origin.json');
91
- assert.equal(Object.keys(origin.files).length, 326);
92
- for (const [file, expected] of Object.entries(origin.files)) {
93
- const contents = fs.readFileSync(path.join(skill, 'assets/templates/enterprise-admin/reference', origin.storagePaths?.[file] || file));
94
- assert.equal(crypto.createHash('sha256').update(contents).digest('hex'), expected, file);
95
- }
96
- });
97
- test('an unadapted EASEL example cannot pass new-business acceptance', t => {
98
- const dir = initialize(t, { purpose: 'business-prototype' });
99
- assert.equal(read(dir, 'prototype.json').business.status, 'needs-adaptation');
100
- assert.match(lib.checkPrototype(dir, { acceptance: true }).errors.join(' '), /业务|adapt/);
101
- });
102
- test('generated enterprise instances isolate their local demo storage and retain the original route behavior', t => {
103
- const dir = initialize(t);
104
- const source = fs.readFileSync(path.join(dir, 'app/src/shared/session.js'), 'utf8');
105
- assert.match(source, /i3-enterprise-enterprise-demo-/);
106
- assert.doesNotMatch(source, /i3-prototype-antdv-/);
107
- assert.match(fs.readFileSync(path.join(dir, 'app/index.html'), 'utf8'), /src="offline\.js"/);
108
- assert.ok(fs.existsSync(path.join(dir, 'app/enterprise-bootstrap.mjs')), 'Retain the historical module bootstrap for compatibility');
109
- assert.match(fs.readFileSync(path.join(dir, 'app/index.html'), 'utf8'), /tokens\.css/);
110
- const other = initialize(t);
111
- assert.notEqual(read(dir, 'prototype.json').runtime.storagePrefix, read(other, 'prototype.json').runtime.storagePrefix);
112
- });
113
- test('offline entry carries every editable HTML fragment and routes without changing the reference', t => {
114
- const root = path.join(skill, 'assets/templates/enterprise-admin');
115
- const build = read(root, 'offline-build.json');
116
- for (const [file, expected] of Object.entries(build.files)) {
117
- assert.equal(crypto.createHash('sha256').update(fs.readFileSync(path.join(root, file))).digest('hex'), expected, file);
118
- }
119
- const html = fs.readFileSync(path.join(root, 'index.html'), 'utf8');
120
- assert.equal([...html.matchAll(/<template data-source=/g)].length, build.htmlFragmentCount);
121
- const routes = JSON.parse(html.match(/id="prototype-offline-routes">([\s\S]*?)<\/script>/)[1]);
122
- assert.deepEqual(routes, read(root, 'reference/routes.json'));
123
- for (const component of new Set(routes.map(route => route.component).filter(Boolean))) {
124
- const source = fs.readFileSync(path.resolve(root, 'reference', component), 'utf8');
125
- const fragment = source.match(/template: new URL\('\.\/([^']+\.html)'/)[1];
126
- assert.ok(html.includes(`data-source="reference/${path.posix.dirname(component).replace(/^\.\//, '')}/${fragment}"`), component);
127
- }
128
- assert.doesNotMatch(html, /type="module"/);
129
- assert.doesNotMatch(fs.readFileSync(path.join(root, 'offline.js'), 'utf8'), /\bfetch\s*\(|\bimport\s*\(|import\.meta/);
130
- const dir = initialize(t, { title: '离线配置 <安全标题>' });
131
- const instance = fs.readFileSync(path.join(dir, 'app/index.html'), 'utf8');
132
- assert.equal(JSON.parse(instance.match(/id="prototype-offline-config">([\s\S]*?)<\/script>/)[1]).title, '离线配置 <安全标题>');
133
- assert.equal(read(dir, 'prototype.json').runtime.offlineVersion, 1);
134
- assert.equal(lib.checkPrototype(dir).status, 'passed');
135
- fs.unlinkSync(path.join(dir, 'app/offline.js'));
136
- assert.equal(lib.checkPrototype(dir).status, 'failed', 'A new offline instance must require its runtime');
137
- });
138
- test('missing enterprise runtime imports are rejected while declarative data-bind attributes remain valid', t => {
139
- const dir = initialize(t);
140
- assert.equal(lib.checkPrototype(dir).status, 'passed');
141
- fs.unlinkSync(path.join(dir, 'app/runtime/controls.js'));
142
- const result = lib.checkPrototype(dir);
143
- assert.equal(result.status, 'failed');
144
- assert.match(result.errors.join(' '), /controls\.js/);
145
- });
146
- test('tampered template source assets are rejected before a new instance can be trusted', t => {
147
- const temp = project(t);
148
- const copy = path.join(temp, 'enterprise-admin');
149
- fs.cpSync(path.join(skill, 'assets/templates/enterprise-admin'), copy, { recursive: true });
150
- fs.appendFileSync(path.join(copy, 'reference/styles/app.css'), '\n/* unexpected source edit */');
151
- const { verifyReference } = require(path.join(skill, 'scripts/enterprise-template.cjs'));
152
- assert.throws(() => verifyReference(copy), /integrity|来源完整性/);
153
- });
154
- test('enterprise preview serves JavaScript modules and SVG assets with browser-compatible MIME types', async t => {
155
- const dir = initialize(t);
156
- const child = spawn(process.execPath, ['app/serve.cjs'], { cwd: dir, stdio: ['ignore', 'pipe', 'pipe'] });
157
- t.after(() => child.kill());
158
- const url = await new Promise((resolve, reject) => {
159
- const timer = setTimeout(() => reject(new Error('Preview start timed out')), 5000);
160
- child.stdout.on('data', data => { const match = data.toString().match(/http:\/\/127\.0\.0\.1:\d+\//); if (match) { clearTimeout(timer); resolve(match[0]); } });
161
- child.once('error', reject);
162
- });
163
- const js = await fetch(url + 'app/app.js');
164
- assert.equal(js.status, 200);
165
- assert.match(js.headers.get('content-type'), /javascript/);
166
- const svg = await fetch(url + 'app/assets/empty.svg');
167
- assert.equal(svg.status, 200);
168
- assert.match(svg.headers.get('content-type'), /image\/svg\+xml/);
169
- });
170
- test('gallery and generated enterprise instances deliver the same scrolling adapter while retaining the complete reference', t => {
171
- const dir = initialize(t);
172
- const css = fs.readFileSync(path.join(dir, 'app/usability.css'));
173
- assert.equal(css.compare(fs.readFileSync(path.join(skill, 'assets/templates/enterprise-admin/usability.css'))), 0);
174
- assert.match(fs.readFileSync(path.join(dir, 'app/index.html'), 'utf8'), /href="usability\.css"/);
175
- const preview = lib.listTemplates()[0].preview.split('#')[0];
176
- const entry = path.join(skill, 'assets/templates', preview);
177
- assert.notEqual(preview, 'enterprise-admin/reference/index.html');
178
- const html = fs.readFileSync(entry, 'utf8');
179
- assert.match(html, /href="usability\.css"/);
180
- for (const match of html.matchAll(/(?:src|href)="([^"#]+)"/g)) {
181
- if (match[1].startsWith('data:')) continue;
182
- assert.ok(fs.existsSync(path.resolve(path.dirname(entry), match[1])), match[1]);
183
- }
184
- const { verifyReference } = require(path.join(skill, 'scripts/enterprise-template.cjs'));
185
- assert.equal(verifyReference().fileCount, 326);
186
- });
187
- test('scrolling behavior remains protected after an enterprise baseline is confirmed', t => {
188
- const dir = initialize(t);
189
- // Unit fixture only: these records exercise the baseline guard and do not
190
- // claim real browser execution or human acceptance of a delivered prototype.
191
- fs.writeFileSync(path.join(dir, 'qa/unit-fixture.txt'), 'UNIT FIXTURE ONLY');
192
- const manifest = lib.contentManifest(dir);
193
- const scenarios = new Set(read(dir, 'requirements-map.json').requirements.flatMap(x => x.scenarios));
194
- fs.writeFileSync(path.join(dir, 'qa/browser.json'), JSON.stringify({
195
- ...manifest, status: 'passed', source: 'UNIT FIXTURE ONLY', consoleErrors: [],
196
- screenshots: ['qa/unit-fixture.txt'], viewports: [390, 1440],
197
- journeys: [...scenarios].map(id => ({ id, status: 'passed' })),
198
- }));
199
- lib.freezeBaseline(dir, { revision: manifest.revision, digest: manifest.digest, reviewer: 'unit fixture', statement: 'UNIT FIXTURE ONLY', source: 'test fixture' });
200
- fs.appendFileSync(path.join(dir, 'app/usability.css'), '\n/* changed scrolling behavior */\n');
201
- assert.ok(lib.compareBaseline(dir).protectedChanges.includes('app/usability.css'));
202
- const guard = spawnSync(process.execPath, [path.join(skill, 'scripts/check-prototype.cjs'), dir, '--enforce-baseline'], { encoding: 'utf8' });
203
- assert.equal(guard.status, 1);
204
- assert.match(guard.stdout, /Design constraints changed/);
205
- });
@@ -1,17 +0,0 @@
1
- 'use strict';
2
- // Historical admin-list input for regression tests only; no public template entry.
3
- const fs = require('node:fs');
4
- const path = require('node:path');
5
- function prepareTemplate(contract, { project, id = 'admin-list' }) {
6
- if (!/^[a-z][a-z0-9-]{0,63}$/.test(id)) throw new Error('Invalid identifier');
7
- const directory = path.resolve(project, 'ui-templates', id);
8
- if (fs.existsSync(path.join(project, 'ui-templates')) && fs.lstatSync(path.join(project, 'ui-templates')).isSymbolicLink()) throw new Error('Refusing symlink');
9
- if (fs.existsSync(directory)) return { directory, created: false, index: contract.loadTemplate(directory).index };
10
- fs.cpSync(path.resolve(__dirname, '../../evals/fixtures/i3-ui-prototype/admin-list'), directory, { recursive: true });
11
- const file = path.join(directory, 'template.json');
12
- const manifest = JSON.parse(fs.readFileSync(file));
13
- manifest.id = id;
14
- fs.writeFileSync(file, JSON.stringify(manifest, null, 2) + '\n');
15
- return { directory, created: true, index: contract.syncTemplate(directory) };
16
- }
17
- module.exports = { prepareTemplate };
@@ -1,55 +0,0 @@
1
- 'use strict';
2
- const test = require('node:test');
3
- const assert = require('node:assert/strict');
4
- const fs = require('node:fs');
5
- const os = require('node:os');
6
- const path = require('node:path');
7
- const installation = path.join(__dirname, 'lib/installation.js');
8
- const skills = fs.existsSync(installation) ? require(installation).loadInstallation().skillsDirectory : path.resolve(__dirname, '../skills');
9
- const scripts = path.join(skills, 'i3-ui-prototype/scripts'), cache = require(path.join(scripts, 'browser-workspace.cjs'));
10
- function fixture(t, scope = 'project') {
11
- const root = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'i3-browser-output-'))), project = path.join(root, '中文 项目'), home = path.join(root, 'isolated-home');
12
- fs.mkdirSync(project); fs.mkdirSync(home); t.after(() => fs.rmSync(root, { recursive: true, force: true }));
13
- return { root, project, home, host: 'codebuddy', scope, runId: 'output-test', env: {} };
14
- }
15
- for (const scope of ['project', 'global']) test(`${scope} browser output is prepared only under its host cache and can be reused without overwriting files`, t => {
16
- const options = fixture(t, scope), result = cache.prepare(options);
17
- assert.equal(result.status, 'prepared');
18
- assert.ok(result.directory.startsWith(scope === 'global' ? options.home : path.join(options.project, '.codebuddy')));
19
- assert.equal(fs.existsSync(path.join(options.project, '.playwright-cli')), false);
20
- assert.equal(fs.existsSync(path.join(options.project, 'prototypes')), false);
21
- const config = JSON.parse(fs.readFileSync(result.configFile));
22
- assert.equal(config.outputDir, result.directory); assert.equal(config.outputMode, 'file');
23
- fs.writeFileSync(path.join(result.directory, 'keep.txt'), 'keep');
24
- assert.equal(cache.prepare(options).directory, result.directory);
25
- assert.equal(fs.readFileSync(path.join(result.directory, 'keep.txt'), 'utf8'), 'keep');
26
- if (scope === 'global') assert.deepEqual(fs.readdirSync(options.project), []);
27
- });
28
- test('CLI wrapper uses an existing explicit Node entry, cache cwd and configured output without installing anything', t => {
29
- const options = fixture(t), entry = path.join(options.root, 'fixture-cli.cjs');
30
- fs.writeFileSync(entry, 'const f=require("node:fs"),p=require("node:path");const c=JSON.parse(f.readFileSync(process.argv[process.argv.indexOf("--config")+1]));if(c.outputDir!==process.cwd())process.exit(5);f.writeFileSync(p.join(c.outputDir,"snapshot.yml"),"fixture snapshot");console.log("fixture command executed");');
31
- const result = cache.runCli({ ...options, cli: entry, command: ['snapshot'] });
32
- assert.equal(result.status, 'executed'); assert.equal(result.exitCode, 0);
33
- assert.ok(fs.existsSync(path.join(result.directory, 'snapshot.yml')));
34
- assert.equal(fs.existsSync(path.join(options.project, '.playwright-cli')), false);
35
- assert.throws(() => cache.runCli({ ...options, cli: entry, command: ['--config=other.json', 'snapshot'] }), /config/i);
36
- });
37
- test('explicit evidence archiving preserves candidate identity and survives cache removal', t => {
38
- const options = fixture(t), output = cache.prepare(options), native = require(path.join(scripts, 'native-pilot-lib.cjs'));
39
- const scope = { schemaVersion: 2, moduleIds: ['assets'], title: '资产', pages: [{ id: 'assets', title: '资产台账', referencePage: 'models-page', regions: [{ id: 'list', mode: 'management-list' }] }], requirements: [{ id: 'A-01', text: '资产操作', pages: ['assets'], source: { type: 'prd', reference: 'fixture/A-01', statement: 'Synthetic fixture, not real acceptance.' } }], exemptions: [] };
40
- const file = path.join(options.root, 'scope.json'); fs.writeFileSync(file, JSON.stringify(scope));
41
- const prototype = native.createPrototype({ project: options.project, id: 'assets', scope: file, expertMode: 'template' }).directory, before = native.manifest(prototype);
42
- fs.writeFileSync(path.join(output.directory, 'page.yml'), 'synthetic snapshot, not acceptance');
43
- const archived = cache.archive({ ...options, id: 'assets', files: ['page.yml'] });
44
- assert.equal(archived.status, 'archived'); assert.equal(archived.verification, 'not-assessed');
45
- assert.deepEqual(native.manifest(prototype), before);
46
- fs.rmSync(output.directory, { recursive: true });
47
- assert.equal(fs.readFileSync(path.join(archived.directory, 'page.yml'), 'utf8'), 'synthetic snapshot, not acceptance');
48
- assert.throws(() => cache.archive({ ...options, id: 'assets', files: ['../scope.json'] }), /path|cache|exist/i);
49
- });
50
- test('unsafe run identifiers and absent CLI entries fail before cache creation', t => {
51
- const options = fixture(t);
52
- assert.throws(() => cache.prepare({ ...options, runId: '../outside' }), /identifier|path/i);
53
- assert.throws(() => cache.runCli({ ...options, cli: path.join(options.root, 'missing.cjs'), command: ['snapshot'] }));
54
- assert.deepEqual(fs.readdirSync(options.project), []);
55
- });
@@ -1,6 +0,0 @@
1
- 'use strict';
2
- const test=require('node:test'),assert=require('node:assert/strict'),fs=require('node:fs'),path=require('node:path'),vm=require('node:vm');
3
- const install=path.join(__dirname,'lib/installation.js'),skills=fs.existsSync(install)?require(install).loadInstallation().skillsDirectory:path.resolve(__dirname,'../skills');const root=path.join(skills,'i3-ui-prototype'),lib=require(path.join(root,'scripts/native-pilot.cjs'));
4
- const hash=()=>require('node:crypto').createHash('sha256').update(fs.readFileSync(path.join(root,'assets/templates/enterprise-admin/template-inventory.json'))).digest('hex');
5
- test('template discovery and inventory commands remain read-only and expose real supported choices',async()=>{const before=hash();const options=await lib.main(['generation-options','--template','enterprise-admin']);assert.equal(options.readOnly,true);assert.equal(Object.keys(options.choices.layout).length,4);assert.equal(Object.keys(options.choices.style).length,3);assert.ok(options.patterns['tree-table']);const inventory=await lib.main(['inventory']);assert.equal(inventory.events,595);assert.equal(inventory.components,116);assert.equal(hash(),before);await assert.rejects(()=>lib.main(['generation-options','--template','../bad']));});
6
- test('offline preview uses metadata-derived local classic scripts and has valid JavaScript',()=>{const templates=path.join(root,'assets/templates'),context={};vm.runInNewContext(fs.readFileSync(path.join(templates,'generation-options.js'),'utf8'),context);assert.equal(context.I3_GENERATION_OPTIONS[0].id,'enterprise-admin');const html=fs.readFileSync(path.join(templates,'presentation.html'),'utf8');assert.ok(!/type="module"|https?:\/\/|fetch\(/.test(html));for(const block of html.matchAll(/<script(?:\s[^>]*)?>([\s\S]*?)<\/script>/g))new vm.Script(block[1]);assert.equal(require(path.join(root,'scripts/generation-assets.cjs')).refresh(root,{check:true}).status,'passed');});
@@ -1,10 +0,0 @@
1
- 'use strict';
2
- const test=require('node:test'),assert=require('node:assert/strict'),fs=require('node:fs'),os=require('node:os'),path=require('node:path');
3
- const install=path.join(__dirname,'lib/installation.js');const skills=fs.existsSync(install)?require(install).loadInstallation().skillsDirectory:path.resolve(__dirname,'../skills');
4
- const script=path.join(skills,'i3-ui-prototype/scripts/generation-evidence.cjs');
5
- function fixture(t){const directory=fs.mkdtempSync(path.join(os.tmpdir(),'i3-generation-evidence-'));t.after(()=>fs.rmSync(directory,{recursive:true,force:true}));fs.mkdirSync(path.join(directory,'app/src'),{recursive:true});fs.writeFileSync(path.join(directory,'app/src/Actual.vue'),'<template><a-tree /></template>');return directory;}
6
- const generation={bindings:[{id:'items/tree/hierarchy',capabilityId:'hierarchy'}],scenarios:[{id:'generation/items/tree/hierarchy/expand',bindingId:'items/tree/hierarchy'}]};
7
- test('each capability maps to implementation and its exact scenarios before acceptance',t=>{const lib=require(script),dir=fixture(t),fixed=lib.initialize(generation);assert.equal(lib.validateImplementation(dir,generation,fixed).status,'pending');assert.throws(()=>lib.validateImplementation(dir,generation,fixed,{complete:true}),/pending/i);const item=fixed.bindings[0];item.status='implemented';item.components=['Tree'];item.files=[{path:'app/src/Actual.vue',locator:'a-tree'}];assert.equal(lib.validateImplementation(dir,generation,fixed,{complete:true}).status,'implemented');item.scenarioIds=[];assert.throws(()=>lib.validateImplementation(dir,generation,fixed),/scenario/i);});
8
- test('deleting a binding, pointing to absent code, or using input documents cannot pass',t=>{const lib=require(script),dir=fixture(t),fixed=lib.initialize(generation);fixed.bindings=[];assert.throws(()=>lib.validateImplementation(dir,generation,fixed),/binding/i);fixed.bindings=lib.initialize(generation).bindings;Object.assign(fixed.bindings[0],{status:'implemented',components:['Tree'],files:[{path:'inputs/generation.json',locator:'Tree'}]});assert.throws(()=>lib.validateImplementation(dir,generation,fixed),/implementation|source/i);fixed.bindings[0].files[0].path='app/src/Missing.vue';assert.throws(()=>lib.validateImplementation(dir,generation,fixed),/ENOENT|Missing/);});
9
- test('browser observations need every scenario, actual actions and immutable evidence bytes',t=>{const lib=require(script),dir=fixture(t);assert.throws(()=>lib.validateObservations(dir,generation,{}),/observation/i);fs.mkdirSync(path.join(dir,'qa'));fs.writeFileSync(path.join(dir,'qa/observation.txt'),'Synthetic test evidence, never a browser result.');const hash=require('node:crypto').createHash('sha256').update(fs.readFileSync(path.join(dir,'qa/observation.txt'))).digest('hex');const report={generationObservations:[{scenarioId:generation.scenarios[0].id,bindingId:generation.bindings[0].id,status:'passed',steps:[{action:'fixture action',target:'fixture tree',observed:'fixture result'}],toolCallIds:['fixture-call'],evidence:[{path:'qa/observation.txt',sha256:hash}]}]};assert.equal(lib.validateObservations(dir,generation,report).invocationVerified,false);report.generationObservations[0].steps=[];assert.throws(()=>lib.validateObservations(dir,generation,report),/step/i);report.generationObservations[0].steps=[{action:'fixture',target:'fixture',observed:'fixture'}];fs.appendFileSync(path.join(dir,'qa/observation.txt'),'changed');assert.throws(()=>lib.validateObservations(dir,generation,report),/evidence/i);});
10
- test('framework mapping covers all semantic capabilities without device sample assumptions',()=>{const lib=require(script),catalog=require(path.join(skills,'i3-ui-prototype/assets/capabilities/generation.json')),map=lib.framework();assert.deepEqual(Object.keys(map.capabilities).sort(),Object.keys(catalog.capabilities).sort());assert.ok(!JSON.stringify(map).includes('useDevices'));assert.ok(!JSON.stringify(map).includes('21 deterministic'));});