@givolt/i3-composer-agent 3.0.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude/commands/i3-sop.md +3 -3
  3. package/.claude/commands/i3-ui-demo.md +21 -0
  4. package/.claude-plugin/marketplace.json +1 -1
  5. package/.claude-plugin/plugin.json +1 -1
  6. package/.codex-plugin/plugin.json +2 -2
  7. package/.gemini/commands/i3-sop.toml +3 -3
  8. package/.gemini/commands/i3-ui-demo.toml +21 -0
  9. package/README.md +29 -32
  10. package/bin/i3-composer-agent.cjs +38 -44
  11. package/bin/install.cjs +15 -3
  12. package/bin/native-layout.cjs +2 -1
  13. package/bin/native-migration.cjs +19 -2
  14. package/bin/retired-sop-fingerprints.json +213 -0
  15. package/bin/wizard.cjs +7 -18
  16. package/commands/i3-sop.toml +3 -3
  17. package/commands/i3-ui-demo.toml +21 -0
  18. package/docs/codebuddy-setup.md +20 -23
  19. package/docs/codex-setup.md +2 -2
  20. package/docs/comparison.md +131 -0
  21. package/docs/developer-onboarding.md +143 -0
  22. package/docs/opencode-setup.md +1 -1
  23. package/docs/other-hosts.md +2 -2
  24. package/docs/skill-anatomy.md +211 -0
  25. package/docs/workbuddy-setup.md +7 -10
  26. package/evals/cases/i3-enterprise-sop.json +70 -32
  27. package/evals/cases/i3-ui-demo.json +98 -0
  28. package/evals/fixtures/i3-ui-demo/asset-management.md +25 -0
  29. package/evals/zh-CN/cases/i3-enterprise-sop.json +77 -31
  30. package/evals/zh-CN/cases/i3-ui-demo.json +103 -0
  31. package/hooks/PROTOTYPE.md +16 -8
  32. package/hooks/i3-prototype.cjs +4 -10
  33. package/hooks/manage.cjs +30 -31
  34. package/package.json +20 -5
  35. package/plugin.json +1 -1
  36. package/scripts/ui-demo-dependencies-test.js +228 -0
  37. package/scripts/ui-demo-mcp-test.js +95 -0
  38. package/scripts/ui-demo-test.js +170 -0
  39. package/scripts/ui-prototype-execution-runtime-test.js +1 -1
  40. package/scripts/ui-prototype-native-test.js +25 -3
  41. package/skills/i3-enterprise-sop/SKILL.md +151 -91
  42. package/{references/engineering-skeleton-resources → skills/i3-enterprise-sop/references/engineering-skeleton}/directory-standard.md +29 -15
  43. package/skills/i3-enterprise-sop/references/handoff.py +348 -0
  44. package/skills/i3-enterprise-sop/references/read_text.py +60 -0
  45. package/{references/enterprise-sop-resources/technical-baseline/baselines//344/274/201/344/270/232/345/272/224/347/224/250-/346/212/200/346/234/257/350/247/204/347/272/246_v0.0.2.md → skills/i3-enterprise-sop/references/technical-baseline/baselines/enterprise-application-technical-baseline-v0-0-4.md} +136 -51
  46. package/skills/i3-enterprise-sop/references/technical-baseline/readme.md +23 -0
  47. package/{references/enterprise-sop-resources/technical-baseline/templates/TECHNICAL-BASELINE.md → skills/i3-enterprise-sop/references/technical-baseline/templates/technical-baseline.md} +1 -1
  48. package/{references/enterprise-sop-resources/ad/templates/AD.md → skills/i3-enterprise-sop/references/templates/ad.md} +34 -27
  49. package/{references/enterprise-sop-resources/brd/templates/BRD.md → skills/i3-enterprise-sop/references/templates/brd.md} +21 -10
  50. package/{references/enterprise-sop-resources/prd/templates/PRD.md → skills/i3-enterprise-sop/references/templates/prd.md} +57 -24
  51. package/{references/enterprise-sop-resources/testcase/templates/TestCase.md → skills/i3-enterprise-sop/references/templates/testcase.md} +32 -22
  52. package/skills/i3-ui-demo/SKILL.md +234 -0
  53. package/skills/i3-ui-demo/assets/antdv-build/package-lock.json +3363 -0
  54. package/skills/i3-ui-demo/assets/antdv-build/package.json +28 -0
  55. package/skills/i3-ui-demo/assets/design-source.json +11 -0
  56. package/skills/i3-ui-demo/assets/host-targets.json +739 -0
  57. package/skills/i3-ui-demo/assets/official-files.json +76 -0
  58. package/skills/i3-ui-demo/assets/starter/index.html +11 -0
  59. package/skills/i3-ui-demo/assets/starter/package-lock.json +2299 -0
  60. package/skills/i3-ui-demo/assets/starter/package.json +28 -0
  61. package/skills/i3-ui-demo/assets/starter/provenance.json +14 -0
  62. package/skills/i3-ui-demo/assets/starter/public/prototype-config.json +22 -0
  63. package/skills/i3-ui-demo/assets/starter/src/App.vue +64 -0
  64. package/skills/i3-ui-demo/assets/starter/src/PrototypeShell.vue +59 -0
  65. package/skills/i3-ui-demo/assets/starter/src/config.ts +23 -0
  66. package/skills/i3-ui-demo/assets/starter/src/domain/presentation.ts +30 -0
  67. package/skills/i3-ui-demo/assets/starter/src/domain/theme.ts +25 -0
  68. package/skills/i3-ui-demo/assets/starter/src/main.ts +18 -0
  69. package/skills/i3-ui-demo/assets/starter/src/style.css +26 -0
  70. package/skills/i3-ui-demo/assets/starter/tests/presentation.test.ts +23 -0
  71. package/skills/i3-ui-demo/assets/starter/tests/theme.test.ts +26 -0
  72. package/skills/i3-ui-demo/assets/starter/tsconfig.json +15 -0
  73. package/skills/i3-ui-demo/assets/starter/vite.config.ts +4 -0
  74. package/skills/i3-ui-demo/assets/templates/enterprise-admin/capability-definition.json +1395 -0
  75. package/skills/i3-ui-demo/assets/templates/enterprise-admin/component-inventory.json +707 -0
  76. package/skills/i3-ui-demo/assets/templates/enterprise-admin/design-system.md +26 -0
  77. package/skills/i3-ui-demo/assets/templates/enterprise-admin/generation.json +49 -0
  78. package/skills/i3-ui-demo/assets/templates/enterprise-admin/index.html +534 -0
  79. package/skills/i3-ui-demo/assets/templates/enterprise-admin/manifest.json +9 -0
  80. package/skills/i3-ui-demo/assets/templates/enterprise-admin/offline-build.json +265 -0
  81. package/skills/i3-ui-demo/assets/templates/enterprise-admin/offline.js +8888 -0
  82. package/skills/i3-ui-demo/assets/templates/enterprise-admin/origin.json +344 -0
  83. package/skills/i3-ui-demo/assets/templates/enterprise-admin/preset.json +928 -0
  84. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/app.js +22 -0
  85. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/empty.svg +1 -0
  86. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/reference-styles.json +1 -0
  87. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/result-403.svg +1 -0
  88. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/result-404.svg +1 -0
  89. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets-manifest.json +334 -0
  90. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/baseline.json +173 -0
  91. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/conversion.md +30 -0
  92. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/credits.md +17 -0
  93. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/design-tokens.json +881 -0
  94. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/index.html +28 -0
  95. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +9 -0
  96. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +22 -0
  97. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +21 -0
  98. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/package.json +12 -0
  99. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/browser-routes.json +298 -0
  100. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/coverage.json +180 -0
  101. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/integrity.json +13 -0
  102. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/keyboard.json +11 -0
  103. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/responsive.json +125 -0
  104. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/review.md +51 -0
  105. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/rules.log +150 -0
  106. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
  107. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
  108. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
  109. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
  110. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
  111. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
  112. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
  113. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
  114. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/selection.json +9 -0
  115. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +342 -0
  116. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/readme.md +73 -0
  117. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/reference.md +59 -0
  118. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/routes.json +178 -0
  119. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/controls.js +99 -0
  120. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/dialogs.js +54 -0
  121. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/dom.js +264 -0
  122. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/forms.js +47 -0
  123. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/icons.js +41 -0
  124. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/layout.js +47 -0
  125. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/router.js +63 -0
  126. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/state.js +90 -0
  127. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/table.js +41 -0
  128. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/widgets.js +8 -0
  129. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +3 -0
  130. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +36 -0
  131. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +2 -0
  132. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +51 -0
  133. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +3 -0
  134. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +48 -0
  135. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +2 -0
  136. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +6 -0
  137. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +2 -0
  138. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +13 -0
  139. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/data.js +24 -0
  140. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/domain.js +32 -0
  141. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/registry.js +25 -0
  142. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/store.js +85 -0
  143. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +2 -0
  144. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +17 -0
  145. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +2 -0
  146. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +66 -0
  147. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +3 -0
  148. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +38 -0
  149. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +2 -0
  150. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +66 -0
  151. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +2 -0
  152. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +5 -0
  153. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +2 -0
  154. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +12 -0
  155. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +2 -0
  156. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +11 -0
  157. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +2 -0
  158. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +116 -0
  159. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +2 -0
  160. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +32 -0
  161. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +2 -0
  162. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +49 -0
  163. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +2 -0
  164. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +10 -0
  165. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +2 -0
  166. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +77 -0
  167. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/data.js +60 -0
  168. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/domain.js +105 -0
  169. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/store.js +212 -0
  170. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +2 -0
  171. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +18 -0
  172. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +2 -0
  173. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +23 -0
  174. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +2 -0
  175. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +78 -0
  176. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +2 -0
  177. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +55 -0
  178. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +2 -0
  179. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +26 -0
  180. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +2 -0
  181. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +38 -0
  182. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +2 -0
  183. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +7 -0
  184. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +2 -0
  185. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +72 -0
  186. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +2 -0
  187. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +46 -0
  188. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +2 -0
  189. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +52 -0
  190. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/RowActions.html +2 -0
  191. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/RowActions.js +19 -0
  192. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +2 -0
  193. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +30 -0
  194. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/data.js +48 -0
  195. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/domain.js +39 -0
  196. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/store.js +129 -0
  197. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +4 -0
  198. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +21 -0
  199. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +2 -0
  200. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +8 -0
  201. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +2 -0
  202. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +37 -0
  203. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +2 -0
  204. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +10 -0
  205. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +2 -0
  206. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +37 -0
  207. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +2 -0
  208. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +49 -0
  209. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +4 -0
  210. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +22 -0
  211. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +2 -0
  212. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +9 -0
  213. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/commands.js +82 -0
  214. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/examples.js +47 -0
  215. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/model.js +61 -0
  216. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/repair.js +68 -0
  217. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/store.js +55 -0
  218. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/types.js +1 -0
  219. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/workbench.js +18 -0
  220. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +3 -0
  221. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +28 -0
  222. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +2 -0
  223. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +18 -0
  224. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +2 -0
  225. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +31 -0
  226. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +2 -0
  227. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +27 -0
  228. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +2 -0
  229. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +16 -0
  230. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +2 -0
  231. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +43 -0
  232. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +4 -0
  233. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +34 -0
  234. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +2 -0
  235. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +30 -0
  236. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +3 -0
  237. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +67 -0
  238. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +2 -0
  239. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +41 -0
  240. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +2 -0
  241. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +31 -0
  242. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +2 -0
  243. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +26 -0
  244. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +2 -0
  245. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +70 -0
  246. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/data.js +8 -0
  247. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/domain.js +62 -0
  248. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/management.js +36 -0
  249. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +49 -0
  250. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/store.js +132 -0
  251. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +2 -0
  252. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +38 -0
  253. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +2 -0
  254. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +11 -0
  255. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +2 -0
  256. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +45 -0
  257. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +2 -0
  258. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +54 -0
  259. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +3 -0
  260. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +27 -0
  261. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +2 -0
  262. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +12 -0
  263. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +2 -0
  264. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +45 -0
  265. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +3 -0
  266. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +38 -0
  267. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/domain.js +61 -0
  268. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/state.js +51 -0
  269. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/store.js +116 -0
  270. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +2 -0
  271. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +45 -0
  272. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +4 -0
  273. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +30 -0
  274. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +2 -0
  275. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +67 -0
  276. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +2 -0
  277. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +5 -0
  278. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +4 -0
  279. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +60 -0
  280. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/commands.js +157 -0
  281. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/model.js +136 -0
  282. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/store.js +76 -0
  283. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +3 -0
  284. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +26 -0
  285. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +2 -0
  286. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +14 -0
  287. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +2 -0
  288. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +113 -0
  289. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +3 -0
  290. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +62 -0
  291. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/commands.js +97 -0
  292. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/model.js +147 -0
  293. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/store.js +13 -0
  294. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +2 -0
  295. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +9 -0
  296. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +2 -0
  297. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +8 -0
  298. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +2 -0
  299. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +37 -0
  300. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +2 -0
  301. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +8 -0
  302. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +2 -0
  303. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +17 -0
  304. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/columns.js +32 -0
  305. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +49 -0
  306. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +12 -0
  307. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +15 -0
  308. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +37 -0
  309. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/policy.js +68 -0
  310. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/session.js +44 -0
  311. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +2 -0
  312. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +25 -0
  313. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +2 -0
  314. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +53 -0
  315. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +10 -0
  316. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +30 -0
  317. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +2 -0
  318. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +10 -0
  319. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +2 -0
  320. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +9 -0
  321. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +3 -0
  322. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/navigation.js +19 -0
  323. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +2 -0
  324. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +8 -0
  325. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +2 -0
  326. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +32 -0
  327. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +2 -0
  328. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +15 -0
  329. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +2 -0
  330. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +11 -0
  331. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +2 -0
  332. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +57 -0
  333. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +2 -0
  334. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +37 -0
  335. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/data.js +20 -0
  336. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/domain.js +55 -0
  337. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/store.js +151 -0
  338. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +3 -0
  339. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +18 -0
  340. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +2 -0
  341. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +40 -0
  342. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +2 -0
  343. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +51 -0
  344. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +2 -0
  345. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +9 -0
  346. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +5 -0
  347. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +48 -0
  348. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/domain.js +204 -0
  349. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +22 -0
  350. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/registry.js +135 -0
  351. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/store.js +137 -0
  352. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +3 -0
  353. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +36 -0
  354. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/model.js +56 -0
  355. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/store.js +15 -0
  356. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +2 -0
  357. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +27 -0
  358. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +4 -0
  359. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +31 -0
  360. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +2 -0
  361. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +68 -0
  362. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +5 -0
  363. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +55 -0
  364. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/data.js +16 -0
  365. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/domain.js +83 -0
  366. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/registry.js +18 -0
  367. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/store.js +61 -0
  368. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/admin.css +60 -0
  369. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/agents.css +46 -0
  370. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/antdv.css +295 -0
  371. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/app.css +102 -0
  372. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/delivery.css +4 -0
  373. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/intents.css +37 -0
  374. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/native.css +22 -0
  375. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/operations.css +2 -0
  376. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/pbc.css +3 -0
  377. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/permissions.css +22 -0
  378. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/pro.css +1 -0
  379. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/releases.css +4 -0
  380. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/reset.css +246 -0
  381. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/reviews.css +8 -0
  382. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/tasks.css +6 -0
  383. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/tokens.css +15 -0
  384. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/workbench.css +61 -0
  385. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/workflows.css +1 -0
  386. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +96 -0
  387. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/agents.test.js +14 -0
  388. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +37 -0
  389. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +44 -0
  390. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +19 -0
  391. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +14 -0
  392. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/operations.test.js +25 -0
  393. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +17 -0
  394. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +24 -0
  395. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +23 -0
  396. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/permissions.test.js +24 -0
  397. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/releases.test.js +50 -0
  398. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/reviews.test.js +36 -0
  399. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +28 -0
  400. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +42 -0
  401. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +16 -0
  402. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +11 -0
  403. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/tasks.test.js +27 -0
  404. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/workbench.test.js +34 -0
  405. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/workflows.test.js +16 -0
  406. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/convert.mjs +168 -0
  407. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/serve.mjs +7 -0
  408. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/styles.mjs +11 -0
  409. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/verify.mjs +24 -0
  410. package/skills/i3-ui-demo/assets/templates/enterprise-admin/serve.cjs +16 -0
  411. package/skills/i3-ui-demo/assets/templates/enterprise-admin/template-inventory.json +28791 -0
  412. package/skills/i3-ui-demo/assets/templates/enterprise-admin/template.json +9 -0
  413. package/skills/i3-ui-demo/assets/templates/enterprise-admin/usability.css +44 -0
  414. package/skills/i3-ui-demo/assets/templates.json +10 -0
  415. package/skills/i3-ui-demo/assets/versions.json +20 -0
  416. package/skills/i3-ui-demo/readme.md +350 -0
  417. package/skills/i3-ui-demo/references/browser.md +71 -0
  418. package/skills/i3-ui-demo/references/dependencies.md +67 -0
  419. package/skills/i3-ui-demo/references/resources.md +142 -0
  420. package/skills/i3-ui-demo/scripts/dependencies.cjs +364 -0
  421. package/skills/i3-ui-demo/scripts/design-install.cjs +105 -0
  422. package/skills/i3-ui-demo/scripts/design-provider.cjs +57 -0
  423. package/skills/i3-ui-demo/scripts/locations.cjs +52 -0
  424. package/skills/i3-ui-demo/scripts/mcp.cjs +112 -0
  425. package/skills/i3-ui-demo/scripts/provider-discovery.cjs +131 -0
  426. package/skills/i3-ui-demo/scripts/resources.cjs +283 -0
  427. package/skills/i3-ui-prototype/SKILL.md +1 -1
  428. package/skills/i3-ui-prototype/references/execution-evidence.md +12 -56
  429. package/skills/i3-ui-prototype/scripts/codebuddy-registration.cjs +1 -1
  430. package/skills/i3-ui-prototype/scripts/execution-runtime.cjs +5 -2
  431. package/skills/i3-ui-prototype/scripts/hosts/codebuddy.cjs +3 -2
  432. package/skills/i3-ui-prototype/scripts/native-delivery.cjs +2 -2
  433. package/skills/i3-ui-prototype/scripts/prototype-hooks.cjs +23 -20
  434. package/docs/ui-prototype-native/MAIN-SESSION-REPORT.md +0 -66
  435. package/docs/ui-prototype-native/USAGE.md +0 -93
  436. package/references/engineering-skeleton-resources/README.md +0 -52
  437. package/references/engineering-skeleton-resources/adoption.md +0 -200
  438. package/references/engineering-skeleton-resources/catalog.json +0 -17
  439. package/references/enterprise-sop-resources/README.md +0 -165
  440. package/references/enterprise-sop-resources/ad/README.md +0 -70
  441. package/references/enterprise-sop-resources/ad/assets-manifest.json +0 -106
  442. package/references/enterprise-sop-resources/ad/prompts/01-generate.md +0 -58
  443. package/references/enterprise-sop-resources/ad/prompts/02-review.md +0 -54
  444. package/references/enterprise-sop-resources/ad/prompts/03-revise.md +0 -54
  445. package/references/enterprise-sop-resources/ad/prompts/04-recheck.md +0 -54
  446. package/references/enterprise-sop-resources/assets-manifest.json +0 -199
  447. package/references/enterprise-sop-resources/brd/README.md +0 -50
  448. package/references/enterprise-sop-resources/brd/assets-manifest.json +0 -94
  449. package/references/enterprise-sop-resources/brd/prompts/01-generate.md +0 -51
  450. package/references/enterprise-sop-resources/brd/prompts/02-review.md +0 -47
  451. package/references/enterprise-sop-resources/brd/prompts/03-revise.md +0 -47
  452. package/references/enterprise-sop-resources/brd/prompts/04-recheck.md +0 -47
  453. package/references/enterprise-sop-resources/codebuddy-project-guide.md +0 -34
  454. package/references/enterprise-sop-resources/controlled-handoff.md +0 -41
  455. package/references/enterprise-sop-resources/controlled_handoff.py +0 -334
  456. package/references/enterprise-sop-resources/handoff-contract.md +0 -196
  457. package/references/enterprise-sop-resources/handoff.py +0 -277
  458. package/references/enterprise-sop-resources/lifecycle-contract.md +0 -91
  459. package/references/enterprise-sop-resources/plan-handoff.md +0 -73
  460. package/references/enterprise-sop-resources/prd/README.md +0 -137
  461. package/references/enterprise-sop-resources/prd/assets-manifest.json +0 -115
  462. package/references/enterprise-sop-resources/prd/prompts/01-generate.md +0 -64
  463. package/references/enterprise-sop-resources/prd/prompts/02-review.md +0 -49
  464. package/references/enterprise-sop-resources/prd/prompts/03-revise.md +0 -48
  465. package/references/enterprise-sop-resources/prd/prompts/04-recheck.md +0 -47
  466. package/references/enterprise-sop-resources/prd/template-contracts.md +0 -39
  467. package/references/enterprise-sop-resources/prd/templates/AD.md +0 -17
  468. package/references/enterprise-sop-resources/recovery-contract.md +0 -65
  469. package/references/enterprise-sop-resources/review-handoff.md +0 -105
  470. package/references/enterprise-sop-resources/selection-handoff.md +0 -55
  471. package/references/enterprise-sop-resources/selection_handoff.py +0 -225
  472. package/references/enterprise-sop-resources/stages.json +0 -262
  473. package/references/enterprise-sop-resources/technical-baseline/README.md +0 -132
  474. package/references/enterprise-sop-resources/technical-baseline/assets-manifest.json +0 -101
  475. package/references/enterprise-sop-resources/technical-baseline/baselines/PROVENANCE.md +0 -40
  476. package/references/enterprise-sop-resources/technical-baseline/references/engineering-directory-v0.2.0/adoption.md +0 -112
  477. package/references/enterprise-sop-resources/technical-baseline/references/engineering-directory-v0.2.0/directory-standard.md +0 -119
  478. package/references/enterprise-sop-resources/template-contracts.md +0 -142
  479. package/references/enterprise-sop-resources/testcase/README.md +0 -61
  480. package/references/enterprise-sop-resources/testcase/assets-manifest.json +0 -111
  481. package/references/enterprise-sop-resources/testcase/prompts/01-generate.md +0 -53
  482. package/references/enterprise-sop-resources/testcase/prompts/02-review.md +0 -51
  483. package/references/enterprise-sop-resources/testcase/prompts/03-revise.md +0 -49
  484. package/references/enterprise-sop-resources/testcase/prompts/04-recheck.md +0 -51
  485. package/references/enterprise-sop-resources/verification/README.md +0 -149
  486. package/references/enterprise-sop-resources/verification/check_execution.py +0 -185
  487. package/references/enterprise-sop-resources/verification/check_native_execution.py +0 -282
  488. package/references/enterprise-sop-resources/verification/check_reads.py +0 -348
  489. package/references/enterprise-sop-resources/verification/review-output.schema.json +0 -155
  490. package/references/enterprise-sop-resources/verification/review_handoff.py +0 -329
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "ui-demo-app",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "packageManager": "npm@11.12.1",
7
+ "engines": {
8
+ "node": ">=22.18.0",
9
+ "npm": ">=10"
10
+ },
11
+ "scripts": {
12
+ "dev": "vite --host 127.0.0.1",
13
+ "typecheck": "vue-tsc --noEmit",
14
+ "test": "node --experimental-strip-types --test tests/*.test.ts",
15
+ "build": "vue-tsc --noEmit && vite build",
16
+ "preview": "vite preview --host 127.0.0.1"
17
+ },
18
+ "dependencies": {
19
+ "antdv-next": "1.6.0",
20
+ "vue": "3.5.42"
21
+ },
22
+ "devDependencies": {
23
+ "@vitejs/plugin-vue": "6.0.4",
24
+ "typescript": "5.9.3",
25
+ "vite": "7.3.1",
26
+ "vue-tsc": "3.3.13"
27
+ }
28
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "source": "derived Vue and antdv-next starter",
3
+ "sourceCommit": "f5d095a6de2b196541615e2812f6a4ae241b7c36",
4
+ "changes": [
5
+ "independent package identity",
6
+ "antdv-next fixed to 1.6.0",
7
+ "independent lockfile",
8
+ "Drawer 1.6.0 size and afterOpenChange props with localized close label",
9
+ "default light theme and native token dimensions aligned with owned enterprise-admin preset",
10
+ "default enterprise presentation and independent template capability contract"
11
+ ],
12
+ "license": "MIT",
13
+ "runtimeResources": "All resources belong to this skill; source history is not a runtime dependency."
14
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "instanceId": "business-preview",
3
+ "storageNamespace": "prototype:business-preview",
4
+ "mockVersion": "business-v1",
5
+ "title": "业务原型",
6
+ "presentation": { "layout": "sidebar", "style": "business", "density": "standard" },
7
+ "pages": [
8
+ {
9
+ "id": "business",
10
+ "title": "业务页面"
11
+ }
12
+ ],
13
+ "theme": {
14
+ "defaultTheme": "light",
15
+ "presets": [
16
+ "light",
17
+ "dark",
18
+ "fresh",
19
+ "tech"
20
+ ]
21
+ }
22
+ }
@@ -0,0 +1,64 @@
1
+ <script setup lang="ts">
2
+ import { computed, onBeforeUnmount, ref, watch } from 'vue'
3
+ import { Alert, ConfigProvider, Select, Tabs, TabPane, theme as antdTheme } from 'antdv-next'
4
+ import zhCN from 'antdv-next/locale/zh_CN'
5
+ import type { PrototypeConfig } from './config'
6
+ import { THEME_IDS, THEME_PRESETS, loadThemePreference, safeThemeStorage, saveThemePreference, themeStorageKey } from './domain/theme'
7
+ import type { ThemeId } from './domain/theme'
8
+ import PrototypeShell from './PrototypeShell.vue'
9
+ import { presentationTokens, resolvePresentation } from './domain/presentation'
10
+ const props = defineProps<{ config: PrototypeConfig }>()
11
+ const storage = safeThemeStorage(() => window.localStorage)
12
+ const key = themeStorageKey(props.config.storageNamespace)
13
+ const selected = ref<ThemeId>(loadThemePreference(storage, key))
14
+ const activePage = ref(props.config.pages[0]?.id)
15
+ const warning = ref('')
16
+ const options = THEME_IDS.map(value => ({ value, label: THEME_PRESETS[value].label }))
17
+ const media = matchMedia('(prefers-reduced-motion: reduce)')
18
+ const reduced = ref(media.matches)
19
+ const motionChanged = (event: MediaQueryListEvent) => { reduced.value = event.matches }
20
+ media.addEventListener('change', motionChanged)
21
+ onBeforeUnmount(() => media.removeEventListener('change', motionChanged))
22
+ const preset = computed(() => THEME_PRESETS[selected.value])
23
+ const recipe = computed(() => props.config.presentation ? presentationTokens(resolvePresentation(props.config.presentation)) : undefined)
24
+ const variables = computed(() => ({ '--prototype-bg': preset.value.bg, '--prototype-surface': preset.value.surface, '--prototype-text': preset.value.text, '--prototype-border': preset.value.panelBorder, '--prototype-radius': `${recipe.value?.panelRadius ?? 8}px` }))
25
+ const tokens = computed(() => ({
26
+ algorithm: preset.value.mode === 'dark' ? antdTheme.darkAlgorithm : antdTheme.defaultAlgorithm,
27
+ token: { colorPrimary: preset.value.primary, colorBgBase: preset.value.surface, colorBgLayout: preset.value.bg, colorBgContainer: preset.value.surface,
28
+ colorBgElevated: preset.value.surface, colorText: preset.value.text, colorTextSecondary: preset.value.muted,
29
+ colorBorder: preset.value.border, colorBorderSecondary: preset.value.panelBorder, colorError: preset.value.error, colorSuccess: preset.value.success,
30
+ colorTextLightSolid: preset.value.onPrimary, fontSize: 14,
31
+ fontFamily: '-apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif', motion: !reduced.value,
32
+ ...(recipe.value ? { borderRadius: recipe.value.borderRadius, controlHeight: recipe.value.controlHeight } : {}) },
33
+ }))
34
+ function choose(value: unknown) {
35
+ if (typeof value !== 'string' || !THEME_IDS.includes(value as ThemeId)) return
36
+ selected.value = value as ThemeId
37
+ warning.value = saveThemePreference(storage, key, selected.value) ? '' : '主题偏好无法保存,本页仍可切换。'
38
+ }
39
+ watch(preset, value => {
40
+ document.documentElement.dataset.prototypeTheme = selected.value
41
+ document.documentElement.style.colorScheme = value.mode
42
+ }, { immediate: true })
43
+ </script>
44
+ <template>
45
+ <ConfigProvider :locale="zhCN" :theme="tokens" :component-size="recipe?.componentSize">
46
+ <div v-if="config.presentation" :style="variables">
47
+ <PrototypeShell :config="config" :menu-theme="preset.mode">
48
+ <template #appearance><div class="theme-picker"><label for="prototype-theme">主题</label><Select id="prototype-theme" aria-label="主题" :value="selected" :options="options" @change="choose" /></div></template>
49
+ <template #default="{ page }"><Alert v-if="warning" type="warning" :title="warning" show-icon /><section :aria-label="page.title"><h2>{{ page.title }}</h2><Alert type="warning" title="业务页面待实现" description="按固定的页面模式、字段、操作与验收合同实现此页。" show-icon /></section></template>
50
+ </PrototypeShell>
51
+ </div>
52
+ <div v-else class="prototype-shell" :style="{ background: preset.bg, color: preset.text }">
53
+ <header><h1>{{ config.title }}</h1><div class="theme-picker"><label for="prototype-theme">主题</label><Select id="prototype-theme" aria-label="主题" :value="selected" :options="options" @change="choose" /></div></header>
54
+ <main :style="{ background: preset.surface, borderColor: preset.border }">
55
+ <Alert v-if="warning" type="warning" :title="warning" show-icon />
56
+ <Tabs v-model:active-key="activePage">
57
+ <TabPane v-for="page in config.pages" :key="page.id" :tab="page.title">
58
+ <section :aria-label="page.title"><h2>{{ page.title }}</h2><Alert type="warning" title="业务页面待实现" description="按固定需求、完整内容模板和通用能力清单实现此页,再进行交互验收。" show-icon /></section>
59
+ </TabPane>
60
+ </Tabs>
61
+ </main>
62
+ </div>
63
+ </ConfigProvider>
64
+ </template>
@@ -0,0 +1,59 @@
1
+ <script setup lang="ts">
2
+ import { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue'
3
+ import { Button, Drawer, Layout, LayoutContent, LayoutHeader, LayoutSider, Menu, Result } from 'antdv-next'
4
+ import type { MenuProps } from 'antdv-next'
5
+ import type { PrototypeConfig } from './config'
6
+ import { navigationMenus, pageFromHash, presentationTokens, resolvePresentation } from './domain/presentation'
7
+ import type { NavigationItem } from './domain/presentation'
8
+ const props = defineProps<{ config: PrototypeConfig; menuTheme?: 'light' | 'dark' }>()
9
+ const presentation = computed(() => resolvePresentation(props.config.presentation))
10
+ const recipe = computed(() => presentationTokens(presentation.value))
11
+ const active = ref(pageFromHash(location.hash, props.config.pages))
12
+ const current = computed(() => props.config.pages.find(page => page.id === active.value))
13
+ const items = computed(() => props.config.navigation || props.config.pages.map(page => ({ key: page.id, label: page.title })))
14
+ const menus = computed(() => navigationMenus(items.value, presentation.value.layout, active.value))
15
+ const collapsed = ref(false), mobileOpen = ref(false), focusAfterClose = ref(false)
16
+ const opened = ref<string[]>([])
17
+ function ancestors(nodes: NavigationItem[], target: string | undefined, parents: string[] = []): string[] | undefined { for (const node of nodes) { if (node.key === target) return parents; if (node.children) { const found = ancestors(node.children, target, [...parents, node.key]); if (found) return found } } }
18
+ watch(active, value => { opened.value = [...new Set([...opened.value, ...(ancestors(items.value, value) || [])])] }, { immediate: true })
19
+ const media = matchMedia('(max-width: 767px)'), narrow = ref(media.matches)
20
+ const onResize = (event: MediaQueryListEvent) => { narrow.value = event.matches; if (!event.matches) mobileOpen.value = false }
21
+ const onHash = () => { active.value = pageFromHash(location.hash, props.config.pages) }
22
+ media.addEventListener('change', onResize); window.addEventListener('hashchange', onHash); window.addEventListener('popstate', onHash)
23
+ onBeforeUnmount(() => { media.removeEventListener('change', onResize); window.removeEventListener('hashchange', onHash); window.removeEventListener('popstate', onHash) })
24
+ function navigate(event: { key: string | number }) {
25
+ const id = String(event.key)
26
+ if (!props.config.pages.some(page => page.id === id)) return
27
+ history.pushState(null, '', `#/${encodeURIComponent(id)}`); active.value = id
28
+ if (mobileOpen.value) { focusAfterClose.value = true; mobileOpen.value = false } else nextTick(focusMain)
29
+ }
30
+ function afterMenuChange(open: boolean) { if (!open && focusAfterClose.value) { focusAfterClose.value = false; nextTick(focusMain) } }
31
+ function focusMain() { document.getElementById('prototype-main')?.focus() }
32
+ function nativeItems(nodes: NavigationItem[]): NonNullable<MenuProps['items']> { return nodes.map(node => node.children ? { key: node.key, label: node.label, children: nativeItems(node.children) } : { key: node.key, label: node.label }) }
33
+ const side = computed(() => ['sidebar','mixed'].includes(presentation.value.layout))
34
+ const top = computed(() => ['topbar','mixed'].includes(presentation.value.layout))
35
+ </script>
36
+ <template>
37
+ <Layout class="generation-shell" :class="[`layout-${presentation.layout}`, `style-${presentation.style}`, `density-${presentation.density}`]" :style="{ '--prototype-spacing': `${recipe.spacing}px` }" :data-layout="presentation.layout" :data-style="presentation.style" :data-density="presentation.density">
38
+ <a class="skip-link" href="#prototype-main" @click.prevent="focusMain">跳到页面内容</a>
39
+ <LayoutHeader class="generation-header">
40
+ <div class="generation-brand"><Button v-if="narrow" aria-label="打开导航" :aria-expanded="mobileOpen" @click="mobileOpen = true">菜单</Button><strong>{{ config.title }}</strong></div>
41
+ <slot name="appearance" />
42
+ </LayoutHeader>
43
+ <nav v-if="top && !narrow" aria-label="顶部导航" class="generation-topnav"><Menu :theme="menuTheme || 'light'" mode="horizontal" :items="nativeItems(menus.top)" :selected-keys="menus.topSelected ? [menus.topSelected] : []" @click="navigate" /></nav>
44
+ <Layout class="generation-body">
45
+ <LayoutSider v-if="side && !narrow" class="generation-sidebar" :width="224" :collapsed-width="72" :collapsed="collapsed" :theme="menuTheme || 'light'">
46
+ <Button block :aria-expanded="!collapsed" :aria-label="collapsed ? '展开侧栏' : '收起侧栏'" @click="collapsed = !collapsed">{{ collapsed ? '展开' : '收起侧栏' }}</Button>
47
+ <nav aria-label="侧栏导航"><Menu :theme="menuTheme || 'light'" v-model:open-keys="opened" mode="inline" :inline-collapsed="collapsed" :items="nativeItems(menus.side)" :selected-keys="active ? [active] : []" @click="navigate" /></nav>
48
+ </LayoutSider>
49
+ <LayoutContent id="prototype-main" class="generation-content" tabindex="-1">
50
+ <nav v-if="presentation.layout === 'focused' && !narrow && config.pages.length > 1" aria-label="工作区页面"><Menu :theme="menuTheme || 'light'" mode="horizontal" :items="nativeItems(items)" :selected-keys="active ? [active] : []" @click="navigate" /></nav>
51
+ <slot v-if="current" :page="current" />
52
+ <Result v-else status="404" title="页面不存在" sub-title="当前地址不在本原型的页面范围内。"><template #extra><Button @click="navigate({ key: config.pages[0].id })">返回首页</Button></template></Result>
53
+ </LayoutContent>
54
+ </Layout>
55
+ <Drawer :open="mobileOpen" title="导航" placement="left" :size="288" :mask="{ enabled: true, blur: true }" :closable="{ 'aria-label': '关闭导航' }" destroy-on-hidden :after-open-change="afterMenuChange" @close="mobileOpen = false">
56
+ <nav aria-label="移动导航"><Menu :theme="menuTheme || 'light'" v-model:open-keys="opened" mode="inline" :items="nativeItems(items)" :selected-keys="active ? [active] : []" @click="navigate" /></nav>
57
+ </Drawer>
58
+ </Layout>
59
+ </template>
@@ -0,0 +1,23 @@
1
+ import { resolveThemeConfig } from './domain/theme'
2
+ import type { ThemeBinding } from './domain/theme'
3
+ import { resolvePresentation } from './domain/presentation'
4
+ import type { NavigationItem, Presentation } from './domain/presentation'
5
+ export interface PrototypeConfig { instanceId: string; storageNamespace: string; mockVersion: string; title?: string; pages: { id: string; title: string }[]; theme?: ThemeBinding; presentation?: Presentation; navigation?: NavigationItem[]; generation?: { pages: unknown[] } }
6
+ export interface PrototypeMeta extends PrototypeConfig { candidateId: string }
7
+ declare global { interface Window { __PROTOTYPE_META__: PrototypeMeta } }
8
+
9
+ export async function loadConfig(): Promise<PrototypeConfig> {
10
+ const response = await fetch(`${import.meta.env.BASE_URL}prototype-config.json`, { cache: 'no-store' })
11
+ if (!response.ok) throw new Error('无法读取原型配置,请检查当前预览构建。')
12
+ const config: unknown = await response.json()
13
+ if (!config || typeof config !== 'object') throw new Error('原型配置无效。')
14
+ const value = config as Record<string, unknown>
15
+ for (const key of ['instanceId', 'storageNamespace', 'mockVersion']) {
16
+ if (typeof value[key] !== 'string' || !(value[key] as string).trim()) throw new Error(`原型配置缺少 ${key}。`)
17
+ }
18
+ resolveThemeConfig(value.theme)
19
+ if (value.presentation !== undefined) resolvePresentation(value.presentation)
20
+ if (!Array.isArray(value.pages) || !value.pages.length || value.pages.some(page => !page || typeof page.id !== 'string' || !page.id || typeof page.title !== 'string')) throw new Error('原型页面配置无效。')
21
+ if (new Set(value.pages.map(page => page.id)).size !== value.pages.length) throw new Error('原型页面标识重复。')
22
+ return value as unknown as PrototypeConfig
23
+ }
@@ -0,0 +1,30 @@
1
+ export interface Presentation { layout: 'sidebar' | 'topbar' | 'mixed' | 'focused'; style: 'business' | 'minimal' | 'soft'; density: 'compact' | 'standard' | 'comfortable' }
2
+ export interface NavigationItem { key: string; label: string; children?: NavigationItem[] }
3
+ export function navigationMenus(items: NavigationItem[], layout: Presentation['layout'], active?: string) {
4
+ const first = (item: NavigationItem): string => item.children?.length ? first(item.children[0]) : item.key
5
+ const contains = (item: NavigationItem): boolean => item.key === active || !!item.children?.some(contains)
6
+ const groups = items.some(item => item.children) ? items : [{ key: '@pages', label: '业务页面', children: items }]
7
+ const current = groups.find(contains) || groups[0]
8
+ return { top: layout === 'mixed' ? groups.map(item => ({ key: first(item), label: item.label })) : items,
9
+ side: layout === 'mixed' ? current?.children || [current] : items,
10
+ topSelected: layout === 'mixed' && current ? first(current) : active }
11
+ }
12
+ export function resolvePresentation(value: unknown): Presentation {
13
+ if (!value || typeof value !== 'object') throw new Error('缺少已固定的页面呈现选择。')
14
+ const item = value as Record<string, unknown>
15
+ for (const [key, choices] of Object.entries({ layout: ['sidebar', 'topbar', 'mixed', 'focused'], style: ['business', 'minimal', 'soft'], density: ['compact', 'standard', 'comfortable'] })) {
16
+ if (!choices.includes(item[key] as string)) throw new Error(`不支持的呈现选择:${key}`)
17
+ }
18
+ return item as unknown as Presentation
19
+ }
20
+ export function presentationTokens(value: Presentation) {
21
+ return { borderRadius: { business: 6, minimal: 4, soft: 10 }[value.style],
22
+ panelRadius: { business: 8, minimal: 4, soft: 10 }[value.style],
23
+ controlHeight: { compact: 28, standard: 32, comfortable: 40 }[value.density],
24
+ spacing: { compact: 12, standard: 24, comfortable: 32 }[value.density],
25
+ componentSize: { compact: 'small', standard: 'middle', comfortable: 'large' }[value.density] as 'small' | 'middle' | 'large' }
26
+ }
27
+ export function pageFromHash(hash: string, pages: { id: string }[]): string | undefined {
28
+ if (!hash || hash === '#/' || hash === '#') return pages[0]?.id
29
+ try { const id = decodeURIComponent(hash.replace(/^#\/?/, '')); return pages.some(page => page.id === id) ? id : undefined } catch { return undefined }
30
+ }
@@ -0,0 +1,25 @@
1
+ export type ThemeId = 'light' | 'dark' | 'fresh' | 'tech'
2
+ export interface ThemeBinding { defaultTheme: 'light'; presets: ThemeId[] }
3
+ export interface ThemeStorage { getItem(key: string): string | null; setItem(key: string, value: string): void }
4
+ export const THEME_IDS: ThemeId[] = ['light', 'dark', 'fresh', 'tech']
5
+ export const THEME_PRESETS = {
6
+ light: { label: '明亮', mode: 'light', primary: '#1677ff', bg: '#f5f5f5', surface: '#fff', subtle: '#fafafa', text: '#262626', muted: '#595959', border: '#d9d9d9', panelBorder: '#f0f0f0', accent: '#1677ff', onPrimary: '#ffffff', error: '#cf1322', success: '#389e0d' },
7
+ dark: { label: '暗黑', mode: 'dark', primary: '#8fb8ff', bg: '#15181d', surface: '#20242b', subtle: '#1b2028', text: '#edf1f7', muted: '#b2bece', border: '#667387', panelBorder: '#667387', accent: '#a6c7ff', onPrimary: '#101c2c', error: '#ffb4ab', success: '#9bddad' },
8
+ fresh: { label: '清新', mode: 'light', primary: '#0c6a55', bg: '#edf8f4', surface: '#fbfffd', subtle: '#e6f4ed', text: '#173b31', muted: '#4c665c', border: '#a4c4b5', panelBorder: '#a4c4b5', accent: '#0c6a55', onPrimary: '#ffffff', error: '#b4232c', success: '#166534' },
9
+ tech: { label: '科技', mode: 'dark', primary: '#55ddc6', bg: '#07131f', surface: '#102536', subtle: '#0b1c2b', text: '#e1f4f7', muted: '#a0bdca', border: '#5b8294', panelBorder: '#5b8294', accent: '#55ddc6', onPrimary: '#071b20', error: '#ffb4ab', success: '#9bddad' },
10
+ } as const
11
+ export function resolveThemeConfig(value: unknown): ThemeBinding | null {
12
+ if (value === undefined) return null
13
+ const config=value as Partial<ThemeBinding> | null
14
+ if (!config || config.defaultTheme !== 'light' || !Array.isArray(config.presets) || config.presets.length !== 4 || new Set(config.presets).size !== 4 || !THEME_IDS.every(id => config.presets!.includes(id))) throw new Error('主题配置必须包含明亮、暗黑、清新、科技且默认明亮。')
15
+ return { defaultTheme: 'light', presets: [...THEME_IDS] }
16
+ }
17
+ export const themeStorageKey = (namespace: string) => `${namespace}:ui-theme:v1`
18
+ export function safeThemeStorage(access: () => ThemeStorage): ThemeStorage | null { try { return access() } catch { return null } }
19
+ export function loadThemePreference(storage: ThemeStorage | null, key: string): ThemeId {
20
+ try { const value=JSON.parse(storage?.getItem(key) ?? 'null'); if (value?.version===1 && THEME_IDS.includes(value.themeId)) return value.themeId } catch { /* Damaged or denied storage uses the explicit default. */ }
21
+ return 'light'
22
+ }
23
+ export function saveThemePreference(storage: ThemeStorage | null, key: string, themeId: ThemeId): boolean {
24
+ try { if (!storage) return false; storage.setItem(key,JSON.stringify({version:1,themeId})); return true } catch { return false }
25
+ }
@@ -0,0 +1,18 @@
1
+ import { createApp } from 'vue'
2
+ import 'antdv-next/dist/reset.css'
3
+ import App from './App.vue'
4
+ import { loadConfig } from './config'
5
+ import './style.css'
6
+
7
+ loadConfig().then(config => {
8
+ window.__PROTOTYPE_META__ = { ...config, candidateId: import.meta.env.VITE_CANDIDATE_ID || 'unverified-development' }
9
+ createApp(App, { config }).mount('#app')
10
+ }).catch(error => {
11
+ const container = document.querySelector('#app')!
12
+ const heading = document.createElement('h1')
13
+ heading.textContent = '原型无法启动'
14
+ const message = document.createElement('p')
15
+ message.textContent = error instanceof Error ? error.message : '配置读取失败。'
16
+ container.setAttribute('role', 'alert')
17
+ container.append(heading, message)
18
+ })
@@ -0,0 +1,26 @@
1
+ * { box-sizing: border-box; }
2
+ body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif; }
3
+ .prototype-shell { min-height: 100dvh; padding: 24px; }
4
+ header { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin: 0 auto 20px; max-width: 1440px; }
5
+ h1 { margin: 0; font-size: 24px; }
6
+ h2 { margin-top: 0; font-size: 20px; }
7
+ .theme-picker { display: flex; align-items: center; gap: 8px; }
8
+ .theme-picker .ant-select { min-width: 100px; }
9
+ main { max-width: 1440px; margin: auto; padding: 20px; border: 1px solid; border-radius: 10px; }
10
+ section { min-height: 240px; }
11
+ :focus-visible { outline: 3px solid currentColor; outline-offset: 3px; }
12
+ @media (max-width: 600px) { .prototype-shell { padding: 12px; } main { padding: 12px; } h1 { font-size: 20px; } }
13
+ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; transition-duration: .01ms !important; } }
14
+ .generation-shell { min-height: 100dvh; background: var(--prototype-bg); color: var(--prototype-text); }
15
+ .generation-header { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 16px; width: 100%; max-width: none; min-height: 64px; height: auto; margin: 0; padding: 12px 24px; line-height: 1.5; background: var(--prototype-surface); color: inherit; border-bottom: 1px solid var(--prototype-border); }
16
+ .generation-brand { display: flex; align-items: center; gap: 12px; font-size: 18px; }
17
+ .generation-body { min-width: 0; background: var(--prototype-bg); }
18
+ .generation-sidebar { padding: 12px 8px; background: var(--prototype-surface) !important; border-right: 1px solid var(--prototype-border); }
19
+ .generation-topnav { background: var(--prototype-surface); }
20
+ .generation-content { min-width: 0; max-width: none; margin: var(--prototype-spacing); padding: var(--prototype-spacing); border: 1px solid var(--prototype-border); border-radius: var(--prototype-radius); background: var(--prototype-surface); color: inherit; }
21
+ .layout-focused .generation-content { width: calc(100% - 2 * var(--prototype-spacing)); max-width: 1200px; margin: var(--prototype-spacing) auto; }
22
+ .style-minimal .generation-content { border-color: transparent; }
23
+ .style-soft .generation-content { box-shadow: 0 4px 20px rgb(0 0 0 / 6%); }
24
+ .skip-link { position: fixed; top: 8px; left: 8px; z-index: 2000; padding: 8px 12px; background: var(--prototype-surface); color: var(--prototype-text); transform: translateY(-200%); }
25
+ .skip-link:focus { transform: none; }
26
+ @media (max-width: 767px) { .generation-header { padding: 12px; } .generation-content { margin: 8px; padding: 12px; } }
@@ -0,0 +1,23 @@
1
+ import test from 'node:test'
2
+ import assert from 'node:assert/strict'
3
+ import { resolvePresentation, presentationTokens, pageFromHash, navigationMenus } from '../src/domain/presentation.ts'
4
+ test('every supported presentation combination has a usable native token recipe', () => {
5
+ for (const layout of ['sidebar','topbar','mixed','focused']) for (const style of ['business','minimal','soft']) for (const density of ['compact','standard','comfortable']) {
6
+ const value = resolvePresentation({ layout, style, density }), tokens = presentationTokens(value)
7
+ assert.ok(tokens.controlHeight > 0 && tokens.spacing > 0 && tokens.borderRadius >= 0)
8
+ }
9
+ assert.throws(() => resolvePresentation({ layout: 'lost', style: 'minimal', density: 'compact' }), /不支持/)
10
+ })
11
+ test('deep links retain declared page identity and reject unknown or malformed locations', () => {
12
+ const pages = [{ id: 'assets' }, { id: 'details' }]
13
+ assert.equal(pageFromHash('#/details', pages), 'details')
14
+ assert.equal(pageFromHash('', pages), 'assets')
15
+ assert.equal(pageFromHash('#/missing', pages), undefined)
16
+ assert.equal(pageFromHash('#/%broken', pages), undefined)
17
+ })
18
+ test('mixed navigation separates group entries from the selected group pages', () => {
19
+ const value = navigationMenus([{ key: '@assets', label: '资产', children: [{ key: 'list', label: '台账' }, { key: 'detail', label: '详情' }] }, { key: '@work', label: '作业', children: [{ key: 'jobs', label: '任务' }] }], 'mixed', 'detail')
20
+ assert.deepEqual(value.top.map(item => item.key), ['list','jobs'])
21
+ assert.deepEqual(value.side.map(item => item.key), ['list','detail'])
22
+ assert.equal(value.topSelected, 'list')
23
+ })
@@ -0,0 +1,26 @@
1
+ import assert from 'node:assert/strict'
2
+ import test from 'node:test'
3
+ import { THEME_PRESETS, resolveThemeConfig, themeStorageKey, loadThemePreference, saveThemePreference, safeThemeStorage } from '../src/domain/theme.ts'
4
+
5
+ const binding = { defaultTheme: 'light', presets: ['light', 'dark', 'fresh', 'tech'] }
6
+ test('four named presets are explicit while an unbound instance stays legacy', () => {
7
+ assert.equal(resolveThemeConfig(undefined), null)
8
+ assert.deepEqual(resolveThemeConfig(binding), binding)
9
+ assert.deepEqual(Object.values(THEME_PRESETS).map(theme => theme.label), ['明亮', '暗黑', '清新', '科技'])
10
+ assert.deepEqual(Object.values(THEME_PRESETS).map(theme => theme.mode), ['light', 'dark', 'light', 'dark'])
11
+ for (const config of [{ ...binding, defaultTheme: 'dark' }, { ...binding, presets: [1,2,3,4] }, { ...binding, presets: ['light','dark','fresh','fresh'] }]) assert.throws(() => resolveThemeConfig(config))
12
+ })
13
+ test('theme preference is namespaced independently and damaged cache falls back', () => {
14
+ const values=new Map<string,string>(), storage={ getItem:(key:string)=>values.get(key)??null,setItem:(key:string,value:string)=>{values.set(key,value)} }
15
+ const a=themeStorageKey('instance-a'),b=themeStorageKey('instance-b')
16
+ assert.notEqual(a,b);assert.match(a,/:ui-theme:v1$/)
17
+ assert.equal(saveThemePreference(storage,a,'tech'),true)
18
+ assert.equal(loadThemePreference(storage,a),'tech');assert.equal(loadThemePreference(storage,b),'light')
19
+ for (const broken of ['{','null','{"version":1,"themeId":2}','{"version":2,"themeId":"tech"}','{"version":1,"themeId":"unknown"}']) { values.set(a,broken);assert.equal(loadThemePreference(storage,a),'light') }
20
+ })
21
+ test('denied storage never prevents local theme changes or returns a fake saved preference', () => {
22
+ const denied={getItem(){throw Error('denied')},setItem(){throw Error('denied')}}
23
+ assert.equal(safeThemeStorage(()=>{throw Error('getter denied')}),null)
24
+ assert.equal(loadThemePreference(denied,'key'),'light');assert.equal(loadThemePreference(null,'key'),'light')
25
+ assert.equal(saveThemePreference(denied,'key','dark'),false);assert.equal(saveThemePreference(null,'key','dark'),false)
26
+ })
@@ -0,0 +1,15 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Bundler",
6
+ "strict": true,
7
+ "noEmit": true,
8
+ "skipLibCheck": true,
9
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
10
+ "types": ["vite/client"],
11
+ "allowImportingTsExtensions": true,
12
+ "verbatimModuleSyntax": true
13
+ },
14
+ "include": ["src/**/*.ts", "src/**/*.vue", "vite.config.ts"]
15
+ }
@@ -0,0 +1,4 @@
1
+ import { defineConfig } from 'vite'
2
+ import vue from '@vitejs/plugin-vue'
3
+
4
+ export default defineConfig({ plugins: [vue()], base: './', build: { manifest: true } })