@givolt/i3-composer-agent 3.2.1 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude/commands/i3-build.md +1 -0
  3. package/.claude/commands/i3-code-simplify.md +1 -0
  4. package/.claude/commands/i3-constraints.md +1 -0
  5. package/.claude/commands/i3-plan.md +1 -0
  6. package/.claude/commands/i3-review.md +1 -0
  7. package/.claude/commands/i3-ship.md +1 -0
  8. package/.claude/commands/i3-spec.md +1 -0
  9. package/.claude/commands/i3-test.md +1 -0
  10. package/.claude/commands/i3-webperf.md +1 -0
  11. package/.claude-plugin/marketplace.json +1 -1
  12. package/.claude-plugin/plugin.json +1 -1
  13. package/.codex-plugin/plugin.json +2 -2
  14. package/README.md +31 -25
  15. package/bin/i3-composer-agent.cjs +4 -59
  16. package/bin/install.cjs +6 -14
  17. package/bin/native-layout.cjs +11 -2
  18. package/bin/native-migration.cjs +68 -28
  19. package/bin/retired-custom-fingerprints.json +1597 -0
  20. package/bin/wizard.cjs +2 -13
  21. package/docs/antigravity-setup.md +3 -1
  22. package/docs/codebuddy-setup.md +19 -76
  23. package/docs/codex-setup.md +10 -4
  24. package/docs/comparison.md +1 -1
  25. package/docs/copilot-cli-setup.md +4 -4
  26. package/docs/cursor-setup.md +1 -1
  27. package/docs/gemini-cli-setup.md +1 -1
  28. package/docs/other-hosts.md +2 -2
  29. package/docs/windsurf-setup.md +2 -2
  30. package/docs/workbuddy-setup.md +9 -16
  31. package/evals/README.md +10 -0
  32. package/evals/cases/i3-code-simplification.json +8 -0
  33. package/evals/cases/i3-documentation-and-adrs.json +4 -0
  34. package/evals/cases/i3-enterprise-sop.json +1 -1
  35. package/evals/cases/i3-frontend-ui-engineering.json +1 -1
  36. package/evals/cases/i3-security-and-hardening.json +4 -0
  37. package/evals/cases/i3-ui-demo.json +2 -2
  38. package/evals/cases/i3-using-agent-skills.json +5 -5
  39. package/evals/plugin/simplify-fires-on-pasted-function/graders/behavior-kept-and-explained.md +7 -0
  40. package/evals/plugin/simplify-fires-on-pasted-function/graders/skill-fired.md +5 -0
  41. package/evals/plugin/simplify-fires-on-pasted-function/prompt.md +30 -0
  42. package/evals/plugin/simplify-stays-quiet-on-make-it-fast/graders/not-fired.md +8 -0
  43. package/evals/plugin/simplify-stays-quiet-on-make-it-fast/prompt.md +20 -0
  44. package/evals/zh-CN/cases/i3-code-simplification.json +8 -0
  45. package/evals/zh-CN/cases/i3-documentation-and-adrs.json +4 -0
  46. package/evals/zh-CN/cases/i3-enterprise-sop.json +1 -1
  47. package/evals/zh-CN/cases/i3-frontend-ui-engineering.json +2 -2
  48. package/evals/zh-CN/cases/i3-security-and-hardening.json +4 -0
  49. package/evals/zh-CN/cases/i3-ui-demo.json +2 -2
  50. package/evals/zh-CN/cases/i3-using-agent-skills.json +6 -6
  51. package/hooks/SDD-CACHE.md +1 -1
  52. package/package.json +13 -80
  53. package/plugin.json +15 -2
  54. package/references/accessibility-checklist.md +4 -4
  55. package/references/performance-checklist.md +5 -4
  56. package/references/testing-patterns.md +2 -1
  57. package/scripts/floor-guard-reference-test.js +32 -0
  58. package/scripts/lib/execution-status.js +44 -0
  59. package/scripts/run-evals-test.js +157 -7
  60. package/scripts/run-evals.js +59 -12
  61. package/scripts/ui-demo-test.js +2 -2
  62. package/scripts/validate-artifact-paths-test.js +14 -0
  63. package/scripts/validate-artifact-paths.js +4 -2
  64. package/skills/i3-api-and-interface-design/SKILL.md +3 -1
  65. package/skills/i3-ci-cd-and-automation/SKILL.md +7 -4
  66. package/skills/i3-code-simplification/SKILL.md +3 -3
  67. package/skills/i3-constraint-driven-development/SKILL.md +4 -4
  68. package/skills/i3-constraint-driven-development/references/floor-guard.md +2 -2
  69. package/skills/i3-context-engineering/SKILL.md +1 -1
  70. package/skills/i3-debugging-and-error-recovery/SKILL.md +1 -1
  71. package/skills/i3-deprecation-and-migration/SKILL.md +6 -1
  72. package/skills/i3-documentation-and-adrs/SKILL.md +3 -2
  73. package/skills/i3-enterprise-sop/SKILL.md +38 -71
  74. package/skills/i3-enterprise-sop/references/engineering-skeleton/directory-standard.md +7 -7
  75. package/skills/i3-enterprise-sop/references/handoff.py +149 -120
  76. package/skills/i3-enterprise-sop/references/technical-baseline/baselines/enterprise-application-technical-baseline-v0-0-4.md +24 -24
  77. package/skills/i3-enterprise-sop/references/technical-baseline/templates/technical-baseline.md +8 -8
  78. package/skills/i3-enterprise-sop/references/templates/ad.md +31 -31
  79. package/skills/i3-enterprise-sop/references/templates/brd.md +6 -6
  80. package/skills/i3-enterprise-sop/references/templates/prd.md +37 -37
  81. package/skills/i3-enterprise-sop/references/templates/testcase.md +25 -25
  82. package/skills/i3-frontend-ui-engineering/SKILL.md +6 -10
  83. package/skills/i3-idea-refine/SKILL.md +4 -2
  84. package/skills/i3-incremental-implementation/SKILL.md +0 -4
  85. package/skills/i3-performance-optimization/SKILL.md +2 -2
  86. package/skills/i3-security-and-hardening/references/hardening-patterns.md +5 -0
  87. package/skills/i3-source-driven-development/SKILL.md +3 -2
  88. package/skills/i3-spec-driven-development/SKILL.md +1 -1
  89. package/skills/i3-ui-demo/SKILL.md +3 -1
  90. package/skills/i3-ui-demo/references/dependencies.md +1 -1
  91. package/skills/i3-ui-demo/references/resources.md +1 -1
  92. package/skills/i3-ui-demo/scripts/dependencies.cjs +0 -3
  93. package/skills/i3-using-agent-skills/SKILL.md +2 -2
  94. package/.claude/commands/i3-prototype.md +0 -23
  95. package/.gemini/commands/i3-prototype.toml +0 -23
  96. package/commands/i3-prototype.toml +0 -23
  97. package/evals/cases/i3-ui-prototype.json +0 -158
  98. package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.css +0 -3
  99. package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.js +0 -8
  100. package/evals/fixtures/i3-ui-prototype/admin-list/capability-definition.json +0 -67
  101. package/evals/fixtures/i3-ui-prototype/admin-list/index.html +0 -89
  102. package/evals/fixtures/i3-ui-prototype/admin-list/readme.md +0 -52
  103. package/evals/fixtures/i3-ui-prototype/admin-list/template.json +0 -8
  104. package/evals/fixtures/i3-ui-prototype/business-brief.md +0 -7
  105. package/evals/zh-CN/cases/i3-ui-prototype.json +0 -165
  106. package/hooks/PROTOTYPE.md +0 -31
  107. package/hooks/codebuddy-upstream.cjs +0 -93
  108. package/hooks/i3-prototype.cjs +0 -7
  109. package/hooks/manage.cjs +0 -169
  110. package/scripts/design-provider-discovery-test.js +0 -190
  111. package/scripts/design-provider-test.js +0 -75
  112. package/scripts/enterprise-template-test.js +0 -205
  113. package/scripts/lib/prototype-fixture.cjs +0 -17
  114. package/scripts/prototype-cache-test.js +0 -55
  115. package/scripts/prototype-generation-entry-test.js +0 -6
  116. package/scripts/prototype-generation-evidence-test.js +0 -10
  117. package/scripts/prototype-generation-native-test.js +0 -78
  118. package/scripts/prototype-generation-test.js +0 -99
  119. package/scripts/prototype-inventory-test.js +0 -43
  120. package/scripts/prototype-locations-test.js +0 -79
  121. package/scripts/prototype-project-test.js +0 -183
  122. package/scripts/template-adapter-test.js +0 -155
  123. package/scripts/ui-prototype-binding-recovery-test.js +0 -84
  124. package/scripts/ui-prototype-buddy-lifecycle-test.js +0 -102
  125. package/scripts/ui-prototype-codebuddy-hook-test.js +0 -112
  126. package/scripts/ui-prototype-content-test.js +0 -123
  127. package/scripts/ui-prototype-dependencies-test.js +0 -226
  128. package/scripts/ui-prototype-devtools-test.js +0 -53
  129. package/scripts/ui-prototype-execution-evidence-test.js +0 -62
  130. package/scripts/ui-prototype-execution-gates-test.js +0 -91
  131. package/scripts/ui-prototype-execution-policy-test.js +0 -53
  132. package/scripts/ui-prototype-execution-runtime-test.js +0 -27
  133. package/scripts/ui-prototype-ide-source-test.js +0 -73
  134. package/scripts/ui-prototype-native-test.js +0 -526
  135. package/scripts/ui-prototype-recovery-test.js +0 -81
  136. package/scripts/ui-prototype-registration-test.js +0 -53
  137. package/scripts/ui-prototype-template-test.js +0 -261
  138. package/scripts/ui-prototype-test.js +0 -124
  139. package/scripts/ui-prototype-transcript-auto-test.js +0 -67
  140. package/skills/i3-ui-prototype/SKILL.md +0 -256
  141. package/skills/i3-ui-prototype/assets/capabilities/generation.json +0 -833
  142. package/skills/i3-ui-prototype/assets/capabilities/management.json +0 -294
  143. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/acceptance.json +0 -51
  144. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/component-map.json +0 -13
  145. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/generation-component-map.json +0 -300
  146. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/index.html +0 -11
  147. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package-lock.json +0 -2298
  148. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package.json +0 -22
  149. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/public/prototype-config.json +0 -6
  150. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/App.vue +0 -136
  151. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/components/DeviceEditor.vue +0 -111
  152. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/config.ts +0 -19
  153. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/content.ts +0 -28
  154. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/devices.ts +0 -50
  155. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/theme.ts +0 -25
  156. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/main.ts +0 -18
  157. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/style.css +0 -50
  158. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/useDevices.ts +0 -66
  159. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/devices.test.ts +0 -44
  160. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/theme.test.ts +0 -26
  161. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tsconfig.json +0 -15
  162. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/vite.config.ts +0 -4
  163. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/profile.json +0 -174
  164. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/readme.md +0 -61
  165. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/index.html +0 -11
  166. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package-lock.json +0 -2298
  167. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package.json +0 -22
  168. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/public/prototype-config.json +0 -21
  169. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/App.vue +0 -62
  170. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/PrototypeShell.vue +0 -59
  171. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/config.ts +0 -23
  172. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/presentation.ts +0 -29
  173. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/theme.ts +0 -25
  174. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/main.ts +0 -18
  175. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/style.css +0 -26
  176. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/presentation.test.ts +0 -23
  177. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/theme.test.ts +0 -26
  178. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tsconfig.json +0 -15
  179. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/vite.config.ts +0 -4
  180. package/skills/i3-ui-prototype/assets/hosts/codebuddy/profile.json +0 -17
  181. package/skills/i3-ui-prototype/assets/optional-skills/host-targets.json +0 -739
  182. package/skills/i3-ui-prototype/assets/optional-skills/sources.json +0 -27
  183. package/skills/i3-ui-prototype/assets/templates/catalog.js +0 -149
  184. package/skills/i3-ui-prototype/assets/templates/catalog.json +0 -149
  185. package/skills/i3-ui-prototype/assets/templates/classic-admin/manifest.json +0 -9
  186. package/skills/i3-ui-prototype/assets/templates/classic-admin/preset.json +0 -6
  187. package/skills/i3-ui-prototype/assets/templates/common/app/app.mjs +0 -89
  188. package/skills/i3-ui-prototype/assets/templates/common/app/config.json +0 -1
  189. package/skills/i3-ui-prototype/assets/templates/common/app/domain.mjs +0 -20
  190. package/skills/i3-ui-prototype/assets/templates/common/app/index.html +0 -17
  191. package/skills/i3-ui-prototype/assets/templates/common/app/serve.cjs +0 -16
  192. package/skills/i3-ui-prototype/assets/templates/common/app/styles.css +0 -670
  193. package/skills/i3-ui-prototype/assets/templates/common/app/tokens.css +0 -19
  194. package/skills/i3-ui-prototype/assets/templates/common/design-system/master.md +0 -20
  195. package/skills/i3-ui-prototype/assets/templates/common/gallery.html +0 -2
  196. package/skills/i3-ui-prototype/assets/templates/common/mocks/applications.json +0 -5
  197. package/skills/i3-ui-prototype/assets/templates/common/requirements-map.json +0 -8
  198. package/skills/i3-ui-prototype/assets/templates/common/serve-gallery.cjs +0 -16
  199. package/skills/i3-ui-prototype/assets/templates/credits.md +0 -17
  200. package/skills/i3-ui-prototype/assets/templates/data-operations/manifest.json +0 -9
  201. package/skills/i3-ui-prototype/assets/templates/data-operations/preset.json +0 -6
  202. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/capability-definition.json +0 -294
  203. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/component-inventory.json +0 -707
  204. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/design-system.md +0 -32
  205. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/generation.json +0 -49
  206. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/index.html +0 -534
  207. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/manifest.json +0 -9
  208. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline-build.json +0 -265
  209. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline.js +0 -8888
  210. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/origin.json +0 -344
  211. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/preset.json +0 -928
  212. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/app.js +0 -22
  213. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/empty.svg +0 -1
  214. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/reference-styles.json +0 -1
  215. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-403.svg +0 -1
  216. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-404.svg +0 -1
  217. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets-manifest.json +0 -334
  218. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/baseline.json +0 -173
  219. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/conversion.md +0 -30
  220. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/credits.md +0 -17
  221. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/design-tokens.json +0 -881
  222. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/index.html +0 -28
  223. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +0 -9
  224. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +0 -22
  225. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +0 -21
  226. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/package.json +0 -12
  227. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/browser-routes.json +0 -298
  228. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/coverage.json +0 -180
  229. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/integrity.json +0 -13
  230. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/keyboard.json +0 -11
  231. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/responsive.json +0 -125
  232. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/review.md +0 -51
  233. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/rules.log +0 -150
  234. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
  235. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
  236. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
  237. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
  238. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
  239. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
  240. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
  241. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
  242. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/selection.json +0 -9
  243. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +0 -342
  244. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/readme.md +0 -73
  245. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/reference.md +0 -59
  246. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/routes.json +0 -178
  247. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/controls.js +0 -99
  248. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dialogs.js +0 -54
  249. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dom.js +0 -264
  250. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/forms.js +0 -47
  251. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/icons.js +0 -41
  252. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/layout.js +0 -47
  253. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/router.js +0 -63
  254. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/state.js +0 -90
  255. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/table.js +0 -41
  256. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/widgets.js +0 -8
  257. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +0 -3
  258. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +0 -36
  259. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +0 -2
  260. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +0 -51
  261. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +0 -3
  262. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +0 -48
  263. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +0 -2
  264. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +0 -6
  265. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +0 -2
  266. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +0 -13
  267. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/data.js +0 -24
  268. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/domain.js +0 -32
  269. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/registry.js +0 -25
  270. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/store.js +0 -85
  271. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +0 -2
  272. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +0 -17
  273. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +0 -2
  274. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +0 -66
  275. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +0 -3
  276. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +0 -38
  277. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +0 -2
  278. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +0 -66
  279. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +0 -2
  280. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +0 -5
  281. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +0 -2
  282. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +0 -12
  283. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +0 -2
  284. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +0 -11
  285. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +0 -2
  286. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +0 -116
  287. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +0 -2
  288. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +0 -32
  289. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +0 -2
  290. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +0 -49
  291. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +0 -2
  292. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +0 -10
  293. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +0 -2
  294. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +0 -77
  295. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/data.js +0 -60
  296. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/domain.js +0 -105
  297. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/store.js +0 -212
  298. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +0 -2
  299. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +0 -18
  300. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +0 -2
  301. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +0 -23
  302. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +0 -2
  303. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +0 -78
  304. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +0 -2
  305. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +0 -55
  306. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +0 -2
  307. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +0 -26
  308. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +0 -2
  309. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +0 -38
  310. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +0 -2
  311. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +0 -7
  312. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +0 -2
  313. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +0 -72
  314. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +0 -2
  315. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +0 -46
  316. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +0 -2
  317. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +0 -52
  318. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.html +0 -2
  319. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.js +0 -19
  320. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +0 -2
  321. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +0 -30
  322. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/data.js +0 -48
  323. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/domain.js +0 -39
  324. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/store.js +0 -129
  325. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +0 -4
  326. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +0 -21
  327. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +0 -2
  328. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +0 -8
  329. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +0 -2
  330. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +0 -37
  331. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +0 -2
  332. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +0 -10
  333. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +0 -2
  334. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +0 -37
  335. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +0 -2
  336. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +0 -49
  337. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +0 -4
  338. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +0 -22
  339. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +0 -2
  340. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +0 -9
  341. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/commands.js +0 -82
  342. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/examples.js +0 -47
  343. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/model.js +0 -61
  344. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/repair.js +0 -68
  345. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/store.js +0 -55
  346. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/types.js +0 -1
  347. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/workbench.js +0 -18
  348. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +0 -3
  349. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +0 -28
  350. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +0 -2
  351. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +0 -18
  352. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +0 -2
  353. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +0 -31
  354. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +0 -2
  355. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +0 -27
  356. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +0 -2
  357. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +0 -16
  358. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +0 -2
  359. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +0 -43
  360. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +0 -4
  361. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +0 -34
  362. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +0 -2
  363. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +0 -30
  364. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +0 -3
  365. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +0 -67
  366. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +0 -2
  367. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +0 -41
  368. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +0 -2
  369. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +0 -31
  370. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +0 -2
  371. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +0 -26
  372. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +0 -2
  373. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +0 -70
  374. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/data.js +0 -8
  375. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/domain.js +0 -62
  376. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/management.js +0 -36
  377. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +0 -49
  378. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/store.js +0 -132
  379. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +0 -2
  380. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +0 -38
  381. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +0 -2
  382. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +0 -11
  383. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +0 -2
  384. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +0 -45
  385. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +0 -2
  386. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +0 -54
  387. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +0 -3
  388. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +0 -27
  389. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +0 -2
  390. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +0 -12
  391. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +0 -2
  392. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +0 -45
  393. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +0 -3
  394. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +0 -38
  395. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/domain.js +0 -61
  396. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/state.js +0 -51
  397. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/store.js +0 -116
  398. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +0 -2
  399. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +0 -45
  400. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +0 -4
  401. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +0 -30
  402. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +0 -2
  403. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +0 -67
  404. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +0 -2
  405. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +0 -5
  406. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +0 -4
  407. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +0 -60
  408. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/commands.js +0 -157
  409. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/model.js +0 -136
  410. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/store.js +0 -76
  411. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +0 -3
  412. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +0 -26
  413. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +0 -2
  414. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +0 -14
  415. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +0 -2
  416. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +0 -113
  417. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +0 -3
  418. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +0 -62
  419. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/commands.js +0 -97
  420. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/model.js +0 -147
  421. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/store.js +0 -13
  422. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +0 -2
  423. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +0 -9
  424. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +0 -2
  425. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +0 -8
  426. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +0 -2
  427. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +0 -37
  428. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +0 -2
  429. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +0 -8
  430. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +0 -2
  431. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +0 -17
  432. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/columns.js +0 -32
  433. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +0 -49
  434. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +0 -12
  435. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +0 -15
  436. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +0 -37
  437. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/policy.js +0 -68
  438. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/session.js +0 -44
  439. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +0 -2
  440. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +0 -25
  441. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +0 -2
  442. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +0 -53
  443. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +0 -10
  444. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +0 -30
  445. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +0 -2
  446. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +0 -10
  447. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +0 -2
  448. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +0 -9
  449. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +0 -3
  450. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/navigation.js +0 -19
  451. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +0 -2
  452. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +0 -8
  453. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +0 -2
  454. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +0 -32
  455. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +0 -2
  456. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +0 -15
  457. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +0 -2
  458. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +0 -11
  459. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +0 -2
  460. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +0 -57
  461. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +0 -2
  462. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +0 -37
  463. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/data.js +0 -20
  464. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/domain.js +0 -55
  465. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/store.js +0 -151
  466. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +0 -3
  467. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +0 -18
  468. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +0 -2
  469. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +0 -40
  470. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +0 -2
  471. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +0 -51
  472. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +0 -2
  473. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +0 -9
  474. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +0 -5
  475. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +0 -48
  476. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/domain.js +0 -204
  477. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +0 -22
  478. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/registry.js +0 -135
  479. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/store.js +0 -137
  480. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +0 -3
  481. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +0 -36
  482. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/model.js +0 -56
  483. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/store.js +0 -15
  484. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +0 -2
  485. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +0 -27
  486. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +0 -4
  487. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +0 -31
  488. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +0 -2
  489. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +0 -68
  490. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +0 -5
  491. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +0 -55
  492. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/data.js +0 -16
  493. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/domain.js +0 -83
  494. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/registry.js +0 -18
  495. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/store.js +0 -61
  496. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/admin.css +0 -60
  497. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/agents.css +0 -46
  498. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/antdv.css +0 -295
  499. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/app.css +0 -102
  500. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/delivery.css +0 -4
  501. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/intents.css +0 -37
  502. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/native.css +0 -22
  503. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/operations.css +0 -2
  504. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pbc.css +0 -3
  505. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/permissions.css +0 -22
  506. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pro.css +0 -1
  507. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/releases.css +0 -4
  508. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reset.css +0 -246
  509. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reviews.css +0 -8
  510. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tasks.css +0 -6
  511. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tokens.css +0 -15
  512. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workbench.css +0 -61
  513. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workflows.css +0 -1
  514. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +0 -96
  515. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/agents.test.js +0 -14
  516. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +0 -37
  517. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +0 -44
  518. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +0 -19
  519. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +0 -14
  520. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operations.test.js +0 -25
  521. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +0 -17
  522. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +0 -24
  523. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +0 -23
  524. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permissions.test.js +0 -24
  525. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/releases.test.js +0 -50
  526. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/reviews.test.js +0 -36
  527. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +0 -28
  528. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +0 -42
  529. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +0 -16
  530. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +0 -11
  531. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/tasks.test.js +0 -27
  532. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workbench.test.js +0 -34
  533. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workflows.test.js +0 -16
  534. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/convert.mjs +0 -168
  535. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/serve.mjs +0 -7
  536. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/styles.mjs +0 -11
  537. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/verify.mjs +0 -24
  538. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/serve.cjs +0 -16
  539. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template-inventory.json +0 -28791
  540. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template.json +0 -9
  541. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/usability.css +0 -44
  542. package/skills/i3-ui-prototype/assets/templates/gallery/index.html +0 -40
  543. package/skills/i3-ui-prototype/assets/templates/generation-options.js +0 -42
  544. package/skills/i3-ui-prototype/assets/templates/index.html +0 -3
  545. package/skills/i3-ui-prototype/assets/templates/modern-workspace/manifest.json +0 -9
  546. package/skills/i3-ui-prototype/assets/templates/modern-workspace/preset.json +0 -6
  547. package/skills/i3-ui-prototype/assets/templates/presentation.html +0 -17
  548. package/skills/i3-ui-prototype/assets/templates/serve-gallery.cjs +0 -23
  549. package/skills/i3-ui-prototype/references/artifact-contract.md +0 -66
  550. package/skills/i3-ui-prototype/references/content-template.md +0 -81
  551. package/skills/i3-ui-prototype/references/enterprise-admin.md +0 -44
  552. package/skills/i3-ui-prototype/references/entry-contract.md +0 -71
  553. package/skills/i3-ui-prototype/references/execution-evidence.md +0 -51
  554. package/skills/i3-ui-prototype/references/expert-adapter.md +0 -76
  555. package/skills/i3-ui-prototype/references/framework-contract.md +0 -76
  556. package/skills/i3-ui-prototype/references/generation-contract.md +0 -122
  557. package/skills/i3-ui-prototype/references/interaction-acceptance.md +0 -169
  558. package/skills/i3-ui-prototype/references/legacy-native.md +0 -58
  559. package/skills/i3-ui-prototype/references/optional-skills.md +0 -63
  560. package/skills/i3-ui-prototype/references/project-layout.md +0 -92
  561. package/skills/i3-ui-prototype/references/template-adapters.md +0 -63
  562. package/skills/i3-ui-prototype/references/workflow-contract.md +0 -77
  563. package/skills/i3-ui-prototype/scripts/adapters/easel-html.cjs +0 -30
  564. package/skills/i3-ui-prototype/scripts/adapters/legacy-html.cjs +0 -28
  565. package/skills/i3-ui-prototype/scripts/browser-workspace.cjs +0 -72
  566. package/skills/i3-ui-prototype/scripts/buddy-host.cjs +0 -40
  567. package/skills/i3-ui-prototype/scripts/check-design-provider.cjs +0 -9
  568. package/skills/i3-ui-prototype/scripts/check-prototype.cjs +0 -14
  569. package/skills/i3-ui-prototype/scripts/codebuddy-context.cjs +0 -92
  570. package/skills/i3-ui-prototype/scripts/codebuddy-hook.cjs +0 -298
  571. package/skills/i3-ui-prototype/scripts/codebuddy-ide-source.cjs +0 -69
  572. package/skills/i3-ui-prototype/scripts/codebuddy-registration.cjs +0 -125
  573. package/skills/i3-ui-prototype/scripts/content-template.cjs +0 -98
  574. package/skills/i3-ui-prototype/scripts/design-provider-discovery.cjs +0 -128
  575. package/skills/i3-ui-prototype/scripts/enterprise-template.cjs +0 -104
  576. package/skills/i3-ui-prototype/scripts/execution-assertions.cjs +0 -43
  577. package/skills/i3-ui-prototype/scripts/execution-diagnostics.cjs +0 -91
  578. package/skills/i3-ui-prototype/scripts/execution-evidence.cjs +0 -177
  579. package/skills/i3-ui-prototype/scripts/execution-gates.cjs +0 -216
  580. package/skills/i3-ui-prototype/scripts/execution-policy.cjs +0 -62
  581. package/skills/i3-ui-prototype/scripts/execution-recovery.cjs +0 -58
  582. package/skills/i3-ui-prototype/scripts/execution-runtime.cjs +0 -69
  583. package/skills/i3-ui-prototype/scripts/generation-assets.cjs +0 -18
  584. package/skills/i3-ui-prototype/scripts/generation-contract.cjs +0 -214
  585. package/skills/i3-ui-prototype/scripts/generation-evidence.cjs +0 -50
  586. package/skills/i3-ui-prototype/scripts/generation-replan.cjs +0 -34
  587. package/skills/i3-ui-prototype/scripts/hosts/codebuddy.cjs +0 -21
  588. package/skills/i3-ui-prototype/scripts/init-prototype.cjs +0 -8
  589. package/skills/i3-ui-prototype/scripts/manage-baseline.cjs +0 -11
  590. package/skills/i3-ui-prototype/scripts/native-browser.cjs +0 -785
  591. package/skills/i3-ui-prototype/scripts/native-build.cjs +0 -91
  592. package/skills/i3-ui-prototype/scripts/native-command.cjs +0 -35
  593. package/skills/i3-ui-prototype/scripts/native-delivery.cjs +0 -104
  594. package/skills/i3-ui-prototype/scripts/native-devtools.cjs +0 -92
  595. package/skills/i3-ui-prototype/scripts/native-files.cjs +0 -44
  596. package/skills/i3-ui-prototype/scripts/native-pilot-lib.cjs +0 -290
  597. package/skills/i3-ui-prototype/scripts/native-pilot.cjs +0 -59
  598. package/skills/i3-ui-prototype/scripts/native-tool-name.cjs +0 -5
  599. package/skills/i3-ui-prototype/scripts/native-tool-result.cjs +0 -14
  600. package/skills/i3-ui-prototype/scripts/optional-skill-install.cjs +0 -203
  601. package/skills/i3-ui-prototype/scripts/project-registry.cjs +0 -126
  602. package/skills/i3-ui-prototype/scripts/prototype-dependencies.cjs +0 -103
  603. package/skills/i3-ui-prototype/scripts/prototype-hooks.cjs +0 -94
  604. package/skills/i3-ui-prototype/scripts/prototype-lib.cjs +0 -277
  605. package/skills/i3-ui-prototype/scripts/prototype-locations.cjs +0 -69
  606. package/skills/i3-ui-prototype/scripts/ptc-callbacks.cjs +0 -131
  607. package/skills/i3-ui-prototype/scripts/sync-template.cjs +0 -19
  608. package/skills/i3-ui-prototype/scripts/template-adapters.cjs +0 -89
  609. package/skills/i3-ui-prototype/scripts/template-contract.cjs +0 -407
  610. package/skills/i3-ui-prototype/scripts/template-inventory.cjs +0 -78
  611. package/skills/i3-ui-prototype/scripts/validate-result.cjs +0 -117
@@ -1,37 +0,0 @@
1
- import { computed, onMounted, onUpdated, ref, watch } from '../../runtime/state.js';
2
- import { defineComponent, h } from '../../runtime/dom.js';
3
- // The installed Checkbox puts aria attributes on its wrapper; label the native input.
4
- const SelectionLabel = defineComponent({
5
- props: { node: { type: Object, required: true }, label: { type: String, required: true } },
6
- setup(props) {
7
- const element = ref();
8
- const labelInput = () => element.value?.querySelector('input[type="checkbox"],input[type="radio"]')?.setAttribute('aria-label', props.label);
9
- onMounted(labelInput);
10
- onUpdated(labelInput);
11
- return () => h('span', { ref: element }, [props.node]);
12
- },
13
- });
14
- export const labeledSelection = (node, label) => h(SelectionLabel, { node: node, label });
15
- export function useListSelection(rows, scope, allowed, name) {
16
- const keys = ref([]);
17
- const checkboxLabel = (node, label) => h(SelectionLabel, { node: node, label });
18
- const clear = () => { keys.value = []; };
19
- watch(scope, clear, { flush: 'sync' });
20
- watch(allowed, clear, { flush: 'sync' });
21
- watch(() => rows.value.map(r => r.id).join('|'), clear, { flush: 'sync' });
22
- const selected = computed(() => rows.value.filter(r => keys.value.includes(r.id)));
23
- const rowSelection = computed(() => ({
24
- selectedRowKeys: keys.value, columnWidth: 48,
25
- columnTitle: (node) => checkboxLabel(node, '全选当前页'),
26
- renderCell: (_checked, record, _index, node) => {
27
- const row = rows.value.find(r => r.id === record.id);
28
- return checkboxLabel(node, '选择' + (row ? name(row) : '记录'));
29
- },
30
- onChange: (values) => { keys.value = allowed.value ? values.map(String).filter(id => rows.value.some(r => r.id === id)) : []; },
31
- getCheckboxProps: (record) => {
32
- const row = rows.value.find(r => r.id === record.id);
33
- return { disabled: !allowed.value || !row };
34
- },
35
- }));
36
- return { keys, selected, rowSelection, clear };
37
- }
@@ -1,68 +0,0 @@
1
- const actorSeeds = [
2
- { id: 'chen', name: '陈敏', role: 'platform', tenantId: 'platform', department: '平台技术部', label: '平台管理员' },
3
- { id: 'wang', name: '王睿', role: 'reviewer', tenantId: 'platform', department: '平台技术部', label: '配置审核员' },
4
- { id: 'lin', name: '林晓', role: 'pm', tenantId: 'heating', department: '供热产品部', label: '产品负责人' },
5
- { id: 'zhou', name: '周晨', role: 'engineer', tenantId: 'heating', department: '供热研发部', label: 'AI 工程师' },
6
- { id: 'liu', name: '刘宁', role: 'viewer', tenantId: 'heating', department: '供热运营部', label: '只读成员' },
7
- { id: 'zhao', name: '赵云', role: 'other', tenantId: 'north', department: '能源产品部', label: '北方能源 · 产品负责人' },
8
- { id: 'guest', name: '访客', role: 'none', tenantId: 'heating', department: '访客', label: '无业务权限成员' },
9
- ];
10
- const templates = {
11
- platform: ['model:view', 'model:edit', 'model:test', 'model:grant', 'model:status', 'model:delete', 'model:audit', 'intent:view', 'intent:edit', 'intent:delete'],
12
- reviewer: ['model:view', 'model:publish', 'model:audit', 'intent:view'],
13
- pm: ['model:view', 'intent:view', 'intent:edit', 'intent:confirm', 'intent:close', 'intent:delete'],
14
- engineer: ['model:view', 'intent:view', 'intent:edit'], viewer: ['model:view', 'intent:view'],
15
- other: ['model:view', 'intent:view', 'intent:edit', 'intent:confirm', 'intent:close', 'intent:delete'], none: [],
16
- };
17
- export const actionGroups = [
18
- { name: '意图', items: [{ value: 'intent:view', label: '查看意图' }, { value: 'intent:edit', label: '创建/修改意图' }, { value: 'intent:confirm', label: '确认意图' }, { value: 'intent:close', label: '关闭意图' }, { value: 'intent:delete', label: '删除意图' }] },
19
- { name: '规格', items: [{ value: 'spec:view', label: '查看规格' }, { value: 'spec:generate', label: '生成规格' }, { value: 'spec:edit', label: '修改/重新规划' }, { value: 'spec:confirm', label: '确认规格' }] },
20
- { name: 'PBC', items: [{ value: 'pbc:view', label: '查看 PBC' }, { value: 'pbc:link', label: '关联已有 PBC' }, { value: 'pbc:create', label: '创建 PBC' }] },
21
- { name: '模型', items: [{ value: 'model:view', label: '查看模型' }, { value: 'model:edit', label: '接入/编辑模型' }, { value: 'model:test', label: '测试模型' }, { value: 'model:grant', label: '模型使用授权' }, { value: 'model:publish', label: '发布模型配置' }, { value: 'model:status', label: '启停模型' }, { value: 'model:delete', label: '删除模型' }, { value: 'model:audit', label: '模型审计' }] },
22
- ];
23
- actionGroups.push({ name: '权限管理', items: [{ value: 'permission:view', label: '查看角色与成员' }, { value: 'permission:roles', label: '维护角色' }, { value: 'permission:grant', label: '配置角色权限' }, { value: 'permission:members', label: '维护成员授权' }, { value: 'permission:delete', label: '删除角色与成员关联' }, { value: 'permission:audit', label: '查看授权记录' }, { value: 'permission:delegate', label: '转授权限管理能力' }] });
24
- actionGroups.push({ name: 'Agent 注册表', items: [{ value: 'agent:view', label: '查看 Agent' }, { value: 'agent:edit', label: '创建/编辑 Agent' }, { value: 'agent:check', label: '检查 Agent 配置' }, { value: 'agent:status', label: '启停 Agent' }, { value: 'agent:delete', label: '删除 Agent' }, { value: 'agent:audit', label: '查看 Agent 记录' }] });
25
- templates.platform.push(...actionGroups.at(-1).items.map(i => i.value), 'pbc:view');
26
- templates.engineer.push('agent:view', 'agent:edit', 'agent:check', 'pbc:view');
27
- templates.viewer.push('agent:view', 'pbc:view');
28
- templates.other.push('agent:view', 'pbc:view');
29
- actionGroups.push({ name: '流程模板', items: [{ value: 'workflow:view', label: '查看流程模板' }, { value: 'workflow:edit', label: '创建/编辑模板' }, { value: 'workflow:use', label: '选择交付模板' }, { value: 'workflow:publish', label: '审核发布模板' }, { value: 'workflow:status', label: '启停模板' }, { value: 'workflow:delete', label: '删除模板' }, { value: 'workflow:audit', label: '查看流程记录' }, { value: 'workflow:approve', label: '交付人工确认' }] });
30
- templates.platform.push('workflow:view', 'workflow:edit', 'workflow:use', 'workflow:status', 'workflow:delete', 'workflow:audit', 'workflow:approve');
31
- templates.reviewer.push('workflow:view', 'workflow:publish', 'workflow:audit', 'agent:view', 'pbc:view');
32
- templates.engineer.push('workflow:view', 'workflow:edit', 'workflow:use');
33
- templates.viewer.push('workflow:view');
34
- templates.other.push('workflow:view');
35
- actionGroups.push({ name: '交付任务与产物', items: [{ value: 'task:view', label: '查看交付任务' }, { value: 'task:create', label: '创建交付任务' }, { value: 'task:edit', label: '修改交付草稿' }, { value: 'task:operate', label: '启动/暂停/恢复/处理任务' }, { value: 'task:takeover', label: '人工接管任务' }, { value: 'task:delete', label: '删除交付草稿' }, { value: 'task:audit', label: '查看交付记录' }, { value: 'artifact:view', label: '查看交付产物' }] });
36
- templates.platform.push(...actionGroups.at(-1).items.map(i => i.value), 'spec:view');
37
- templates.engineer.push('task:view', 'task:create', 'task:edit', 'task:operate', 'task:takeover', 'task:delete', 'task:audit', 'artifact:view', 'spec:view');
38
- templates.reviewer.push('task:view', 'task:audit', 'artifact:view', 'spec:view');
39
- templates.viewer.push('task:view', 'artifact:view');
40
- templates.other.push('task:view', 'artifact:view');
41
- actionGroups.find(g => g.name === 'PBC').items.push({ value: 'pbc:edit', label: '修改 PBC 资料' }, { value: 'pbc:archive', label: '归档/恢复 PBC' }, { value: 'pbc:delete', label: '删除 PBC' }, { value: 'pbc:audit', label: '查看 PBC 记录' }, { value: 'pbc:service', label: '维护服务方案' });
42
- templates.platform.push('pbc:create', 'pbc:link', 'pbc:edit', 'pbc:archive', 'pbc:delete', 'pbc:audit', 'pbc:service');
43
- templates.engineer.push('pbc:audit');
44
- actionGroups.push({ name: '质量与人工确认', items: [{ value: 'review:edit', label: '修改评审设计' }, { value: 'review:replan', label: '重新规划交付' }] });
45
- templates.platform.push('review:edit', 'review:replan');
46
- templates.engineer.push('review:edit', 'review:replan');
47
- actionGroups.push({ name: '发布准备与人工放行', items: [{ value: 'release:edit', label: '创建/编辑/检查发布单' }, { value: 'release:delete', label: '删除发布草稿' }, { value: 'release:submit', label: '提交发布审核' }, { value: 'release:approve', label: '人工授权/退回发布' }, { value: 'release:execute', label: '执行/恢复/重试发布' }, { value: 'release:pause', label: '暂停发布' }, { value: 'release:rollback', label: '回滚/停止并撤流' }] });
48
- templates.platform.push(...actionGroups.at(-1).items.map(i => i.value));
49
- templates.engineer.push('release:edit', 'release:delete', 'release:submit', 'release:execute', 'release:pause', 'release:rollback');
50
- actionGroups.push({ name: '运行验收与异常反馈', items: [{ value: 'operation:view', label: '查看运行与异常' }, { value: 'operation:observe', label: '获取观测/诊断证据' }, { value: 'operation:accept', label: '记录运行验收' }, { value: 'operation:triage', label: '异常分诊' }, { value: 'operation:link', label: '关联/创建修复需求' }, { value: 'operation:close', label: '关闭已复核异常' }] });
51
- templates.platform.push(...actionGroups.at(-1).items.map(i => i.value));
52
- templates.engineer.push('operation:view', 'operation:observe', 'operation:triage', 'operation:link');
53
- templates.viewer.push('operation:view');
54
- export const allActions = actionGroups.flatMap(g => g.items.map(i => i.value));
55
- export const actors = actorSeeds.map(a => ({ ...a, grants: [{ id: a.id + '-base', name: a.label, actions: [...(templates[a.role] || [])], tenantIds: a.tenantId === 'platform' ? ['*'] : [a.tenantId] }] }));
56
- actors.push({ id: 'complete', name: '林晓', role: 'delivery', label: '完整授权演示', tenantId: 'heating', department: '供热产品部', grants: [
57
- { id: 'delivery', name: '需求与交付', actions: allActions.filter(a => !a.startsWith('model:') && !a.startsWith('permission:')), tenantIds: ['heating'] },
58
- { id: 'models', name: '平台模型管理', actions: allActions.filter(a => a.startsWith('model:')), tenantIds: ['platform'] },
59
- ] });
60
- const matchesScope = (grant, tenantId) => grant.tenantIds.includes('*') || grant.tenantIds.includes(tenantId);
61
- export const can = (actor, action, tenantId, pbcId, environmentId) => actor.grants.some(g => g.actions.includes(action) && (tenantId === undefined || matchesScope(g, tenantId)) && (!pbcId || !g.pbcIds || g.pbcIds.includes('*') || g.pbcIds.includes(pbcId)) && (!environmentId || !g.environmentIds || g.environmentIds.includes('*') || g.environmentIds.includes(environmentId)));
62
- export const inScope = (actor, tenantId, action) => actor.grants.some(g => matchesScope(g, tenantId) && (!action || g.actions.includes(action)));
63
- export const tenants = [{ value: 'heating', label: '供热事业部' }, { value: 'north', label: '北方能源' }];
64
- export const tenantLabel = (id) => id === 'platform' ? '平台统一管理' : tenants.find(t => t.value === id)?.label || id;
65
- export function metadata(actor, at, tenantId = actor.tenantId) {
66
- return { createdById: actor.id, createdBy: actor.name, createdAt: at, createdDept: actor.department, updatedBy: actor.name, updatedAt: at, tenantId, recordVersion: 1, isDeleted: false };
67
- }
68
- export const formatDate = (at) => at ? new Date(at).toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false }) : '—';
@@ -1,44 +0,0 @@
1
- import { computed, ref, watch } from '../../runtime/state.js';
2
- import { defineStore } from "../../runtime/state.js";
3
- import { authority } from "../permissions/state.js";
4
- import { resolveActor } from "../permissions/domain.js";
5
- import { actors, can as check } from "./policy.js";
6
- // This is a scenario switcher for the isolated prototype, never an auth provider.
7
- export const useSession = defineStore('session', () => {
8
- const actorId = ref('chen'), state = ref('active');
9
- const overrides = ref({}), policyVersion = ref(0);
10
- try {
11
- const raw = localStorage.getItem('i3-prototype-antdv-v010-demo-session');
12
- if (raw) {
13
- const saved = JSON.parse(raw);
14
- if (actors.some(a => a.id === saved.actorId))
15
- actorId.value = saved.actorId;
16
- if (saved.overrides && typeof saved.overrides === 'object')
17
- overrides.value = saved.overrides;
18
- }
19
- }
20
- catch { /* Demo settings may be reset safely. */ }
21
- const nextWrite = ref('success');
22
- const publishResult = ref('success'), confirmResult = ref('success');
23
- const actor = computed(() => { const base = actors.find(a => a.id === actorId.value) || actors.at(-1); return resolveActor(base, authority); });
24
- watch(() => JSON.stringify(actor.value.grants), () => policyVersion.value++, { flush: 'sync' });
25
- const key = computed(() => actor.value.id + ':' + actor.value.tenantId + ':' + policyVersion.value);
26
- const can = (action, tenantId, pbcId, environmentId) => state.value === 'active' && check(actor.value, action, tenantId, pbcId, environmentId);
27
- const readable = (action, tenantId, pbcId, environmentId) => check(actor.value, action, tenantId, pbcId, environmentId);
28
- function require(action, tenantId, pbcId, environmentId) { if (!can(action, tenantId, pbcId, environmentId))
29
- throw new Error(state.value === 'active' ? '当前身份没有此操作权限,或资源不在授权范围。' : '登录状态已失效,请重新通过 MaxKey 登录。'); }
30
- watch([actorId, overrides], () => { try {
31
- localStorage.setItem('i3-prototype-antdv-v010-demo-session', JSON.stringify({ actorId: actorId.value, overrides: overrides.value }));
32
- }
33
- catch { /* This is a local scenario selector, not an authorization service. */ } }, { deep: true });
34
- function writeCheck() {
35
- const result = nextWrite.value;
36
- nextWrite.value = 'success';
37
- if (result === 'failure')
38
- throw new Error('保存失败(模拟服务不可用),输入已保留,请重试。');
39
- if (result === 'conflict')
40
- throw new Error('记录已被其他人更新(模拟版本冲突),请关闭后重新打开,核对最新内容再提交。');
41
- }
42
- function reset() { actorId.value = 'chen'; overrides.value = {}; policyVersion.value++; state.value = 'active'; nextWrite.value = 'success'; publishResult.value = 'success'; confirmResult.value = 'success'; }
43
- return { actorId, actor, state, key, nextWrite, publishResult, confirmResult, can, readable, require, writeCheck, reset };
44
- });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/shell/ConfirmationDialog.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Modal" data-bind-open="(!!confirmation)" data-bind-title="(confirmation?.title)" data-bind-width="(480)" data-bind-mask="({ closable: false })" data-bind-closable="(false)" data-on-cancel="(cancel)"><p>{{ (confirmation?.content) }}</p><template data-slot="footer"><template data-component="Space"><template data-component="Button" data-bind-disabled="(busy)" data-on-click="(cancel)">{{ (confirmation?.cancelText) }}</template><template data-component="Button" type="primary" data-bind-danger="(confirmation?.okButtonProps?.danger)" data-bind-loading="(busy)" data-on-click="(accept)">{{ (confirmation?.okText) }}</template></template></template></template>
@@ -1,25 +0,0 @@
1
- import { ref } from '../../runtime/state.js';
2
- import { Modal, Button, Space } from "../../runtime/widgets.js";
3
- import { confirmation } from "./confirmation.js";
4
- import { createComponent } from '../../runtime/dom.js';
5
- export default createComponent({ name: 'ConfirmationDialog', propKeys: [], template: new URL('./ConfirmationDialog.html', import.meta.url).href, setup(__props, __emit) {
6
- const busy = ref(false);
7
- function cancel() { if (busy.value)
8
- return; const current = confirmation.value; confirmation.value = undefined; current?.onCancel?.(); }
9
- async function accept() {
10
- const current = confirmation.value;
11
- if (!current || busy.value)
12
- return;
13
- busy.value = true;
14
- try {
15
- await current.onOk?.();
16
- if (confirmation.value === current)
17
- confirmation.value = undefined;
18
- }
19
- catch { /* A rejected action leaves the dialog open; its caller shows the error. */ }
20
- finally {
21
- busy.value = false;
22
- }
23
- }
24
- return { ref, Modal, Button, Space, confirmation, busy, cancel, accept };
25
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/shell/ConsoleShell.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <div class="console-shell" data-bind-class="({ collapsed, 'mobile-open': mobileOpen })" data-on-keydown.esc="(closeNav)"><a class="skip-link" href="#main-content" data-on-click.prevent="(focusMain)">跳到页面内容</a><button data-if="(mobileOpen)" class="nav-scrim" aria-label="关闭导航" data-on-click="(mobileOpen = false)"></button><aside class="sidebar" aria-label="平台导航" data-bind-inert="(navHidden)" data-bind-aria-hidden="(navHidden)"><template data-component="RouterLink" to="/workbench" class="brand" data-on-click="(mobileOpen = false)"><strong>EASEL</strong><span>企业级 AI 软件工程平台</span></template><nav class="navigation"><template data-each="item in (visibleNavigation)" data-bind-key="(item.id)"><button data-if="(item.children)" class="nav-row" data-bind-class="({ 'nav-parent-active': item.children.some(c =&gt; c.id === current) })" data-bind-aria-expanded="(expanded[item.id])" data-on-click="(expanded[item.id] = !expanded[item.id])"><template data-component="$dynamic" data-bind-is="(item.icon)"></template><span>{{ (item.label) }}</span><template data-component="UpOutlined" data-if="(expanded[item.id])" class="nav-arrow"></template><template data-component="DownOutlined" data-else="" class="nav-arrow"></template></button><template data-component="RouterLink" data-else="" data-bind-to="(item.id === 'workbench' ? '/workbench' : item.id === 'projects' ? '/pbcs' : item.id === 'tasks' ? '/tasks' : item.id === 'operations' ? '/operations' : item.id === 'release' ? '/releases' : item.id === 'quality' ? '/reviews' : item.id === 'requirements' ? '/intents' : `/module/${item.id}`)" class="nav-row" data-bind-class="({ selected: current === item.id })" data-bind-aria-current="(current === item.id ? 'page' : undefined)" data-on-click="(mobileOpen = false)"><template data-component="$dynamic" data-bind-is="(item.icon)"></template><span>{{ (item.label) }}</span><template data-component="RightOutlined" data-if="(item.id !== 'workbench')" class="nav-arrow"></template></template><template data-if="(item.children &amp;&amp; expanded[item.id])"><template data-component="RouterLink" data-each="child in (item.children)" data-bind-key="(child.id)" data-bind-to="(child.id.startsWith('permission-') ? '/permissions/' + child.id.replace('permission-', '') : child.id === 'workflows' ? '/workflows' : child.id === 'agents' ? '/agents' : child.id === 'models' ? '/models' : `/module/${child.id}`)" class="nav-row nav-child" data-bind-class="({ selected: current === child.id })" data-bind-aria-current="(current === child.id ? 'page' : undefined)" data-on-click="(mobileOpen = false)">{{ (child.label) }}</template></template></template></nav><div class="sidebar-footer"><button class="text-button guide-button" data-on-click="(guide = true)"><template data-component="InfoCircleOutlined"></template> 原型说明</button><span>v0.14</span></div></aside><div class="workspace" data-bind-inert="(narrow &amp;&amp; mobileOpen)"><header class="topbar"><template data-component="Button" type="text" data-nav-toggle="" data-bind-aria-label="(navHidden ? '展开导航' : '收起导航')" data-bind-aria-expanded="(!navHidden)" data-on-click="(toggleMenu)"><template data-component="MenuUnfoldOutlined" data-if="(collapsed)"></template><template data-component="MenuFoldOutlined" data-else=""></template></template><div class="breadcrumb"><span data-if="(isAi)">AI 编排 <span class="crumb-slash">/</span></span><span>{{ (label) }}</span><span data-if="(subLabel)"><span class="crumb-slash">/</span>{{ (subLabel) }}</span></div><div class="topbar-right"><template data-component="Button" type="text" class="demo-settings-button" data-on-click="(guide = true)">演示设置</template><span class="demo-label">{{ (tenantLabel(session.actor.tenantId)) }} · 演示</span><template data-component="Dropdown" data-bind-menu="(roleMenu)" data-bind-trigger="(['click'])"><button class="profile-button" aria-label="切换演示身份"><template data-component="Avatar" data-bind-size="(30)">{{ (session.actor.name.slice(0, 1)) }}</template><span>{{ (session.actor.name) }} · {{ (session.actor.label) }}</span><template data-component="DownOutlined"></template></button></template></div></header><main id="main-content" tabindex="-1"><div data-show="(canView)" data-bind-inert="(!canView)" data-bind-key="(session.key)"><slot></slot></div><template data-component="Result" data-if="(!canView &amp;&amp; session.state === 'active')" status="403" title="没有业务访问权限" sub-title="已登录不代表拥有业务权限。请联系业务管理员分配相应权限;账号和登录设置由 MaxKey 管理。"><template data-slot="extra"><template data-component="Button" data-on-click="(guide = true)">查看权限演示</template></template></template></main><footer class="page-footer"><template data-component="InfoCircleOutlined"></template> 当前为演示环境,配置与测试仅用于交互评审。<button class="text-button" data-on-click="(guide = true)">评审指南</button></footer></div><template data-component="PrototypeGuide" data-bind-open="(guide)" data-on-close="(guide = false)"></template><template data-component="ConfirmationDialog"></template><template data-component="SessionDialog"></template></div>
@@ -1,53 +0,0 @@
1
- import { computed, ref, onMounted, onBeforeUnmount, nextTick } from '../../runtime/state.js';
2
- import { useRoute } from "../../runtime/router.js";
3
- import { Button, Avatar, Dropdown, Result } from "../../runtime/widgets.js";
4
- import { MenuFoldOutlined, MenuUnfoldOutlined, DownOutlined, UpOutlined, RightOutlined, InfoCircleOutlined } from "../../runtime/icons.js";
5
- import { navigation, moduleLabel } from "./navigation.js";
6
- import PrototypeGuide from "./PrototypeGuide.js";
7
- import ConfirmationDialog from "./ConfirmationDialog.js";
8
- import { useSession } from "../shared/session.js";
9
- import { actors, tenantLabel } from "../shared/policy.js";
10
- import SessionDialog from "./SessionDialog.js";
11
- import { createComponent } from '../../runtime/dom.js';
12
- export default createComponent({ name: 'ConsoleShell', propKeys: [], template: new URL('./ConsoleShell.html', import.meta.url).href, setup(__props, __emit) {
13
- const route = useRoute();
14
- const session = useSession();
15
- const visibleNavigation = computed(() => navigation.filter(n => (n.id !== 'operations' || session.can('operation:view')) && (!['quality', 'release'].includes(n.id) || (session.can('task:view') && session.can('artifact:view'))) && (n.id !== 'projects' || session.can('pbc:view')) && (n.id !== 'tasks' || session.can('task:view')) && (n.id !== 'requirements' || session.can('intent:view')) && (n.id !== 'permissions' || session.can('permission:view') || session.can('permission:audit'))).map(n => n.children ? ({ ...n, children: n.children.filter(c => (c.id !== 'models' || session.can('model:view')) && (c.id !== 'agents' || session.can('agent:view')) && (c.id !== 'workflows' || session.can('workflow:view')) && (c.id !== 'permission-records' || session.can('permission:audit')) && (!['permission-roles', 'permission-members'].includes(c.id) || session.can('permission:view'))) }) : n));
16
- const canView = computed(() => route.path === '/workbench' ? session.state === 'active' : (route.path.startsWith('/reviews') || route.path.startsWith('/releases')) ? (session.can('task:view') && session.can('artifact:view')) : session.can(route.path.startsWith('/operations') ? 'operation:view' : route.path.startsWith('/pbcs') ? 'pbc:view' : route.path.startsWith('/tasks') ? 'task:view' : route.path.startsWith('/workflows') ? 'workflow:view' : route.path.startsWith('/agents') ? 'agent:view' : route.path.startsWith('/permissions') ? (route.path.endsWith('/records') ? 'permission:audit' : 'permission:view') : route.path.startsWith('/models') ? 'model:view' : route.path.endsWith('/pbc') ? 'pbc:view' : route.path.includes('/spec') ? 'spec:view' : 'intent:view'));
17
- const expanded = ref({ ai: true, permissions: true });
18
- const collapsed = ref(false), mobileOpen = ref(false), guide = ref(false);
19
- const narrow = ref(window.innerWidth < 900);
20
- const navHidden = computed(() => narrow.value ? !mobileOpen.value : collapsed.value);
21
- function onResize() { narrow.value = window.innerWidth < 900; if (!narrow.value)
22
- mobileOpen.value = false; }
23
- function onKeydown(event) { if (event.key === 'Escape')
24
- closeNav(); }
25
- onMounted(() => { window.addEventListener('resize', onResize); window.addEventListener('keydown', onKeydown); });
26
- onBeforeUnmount(() => { window.removeEventListener('resize', onResize); window.removeEventListener('keydown', onKeydown); });
27
- function focusMain() { document.getElementById('main-content')?.focus(); }
28
- function closeNav() { if (mobileOpen.value) {
29
- mobileOpen.value = false;
30
- nextTick(() => document.querySelector('[data-nav-toggle]')?.focus());
31
- } }
32
- const isIntent = computed(() => route.path.startsWith('/intents'));
33
- const current = computed(() => route.path === '/workbench' ? 'workbench' : route.path.startsWith('/operations') ? 'operations' : route.path.startsWith('/releases') ? 'release' : route.path.startsWith('/reviews') ? 'quality' : route.path.startsWith('/pbcs') ? 'projects' : route.path.startsWith('/tasks') ? 'tasks' : route.path.startsWith('/workflows') ? 'workflows' : route.path.startsWith('/agents') ? 'agents' : route.path.startsWith('/permissions/') ? 'permission-' + route.path.split('/').at(-1) : isIntent.value ? 'requirements' : route.path === '/models' ? 'models' : String(route.params.id));
34
- const isAi = computed(() => navigation.find(n => n.id === 'ai').children.some(n => n.id === current.value));
35
- const label = computed(() => moduleLabel(current.value));
36
- const subLabel = computed(() => route.path.endsWith('/pbc') ? 'PBC 归属' : route.path.includes('/spec') ? '需求规格' : route.path === '/intents/new' ? '发起需求' : route.path.endsWith('/workspace') ? (route.path.startsWith('/pbcs/') ? '交付工作区' : '澄清工作区') : isIntent.value && route.params.id ? '意图详情' : '');
37
- function toggleMenu() {
38
- if (!narrow.value) {
39
- collapsed.value = !collapsed.value;
40
- return;
41
- }
42
- if (mobileOpen.value)
43
- closeNav();
44
- else {
45
- mobileOpen.value = true;
46
- nextTick(() => document.querySelector('.sidebar [aria-current="page"]')?.focus());
47
- }
48
- }
49
- const roleMenu = computed(() => ({ items: [
50
- ...actors.map(a => ({ key: a.id, label: a.name + ' · ' + a.label })),
51
- ], onClick: ({ key }) => { session.actorId = key; } }));
52
- return { computed, ref, onMounted, onBeforeUnmount, nextTick, useRoute, Button, Avatar, Dropdown, Result, MenuFoldOutlined, MenuUnfoldOutlined, DownOutlined, UpOutlined, RightOutlined, InfoCircleOutlined, navigation, moduleLabel, PrototypeGuide, ConfirmationDialog, useSession, actors, tenantLabel, SessionDialog, route, session, visibleNavigation, canView, expanded, collapsed, mobileOpen, guide, narrow, navHidden, onResize, onKeydown, focusMain, closeNav, isIntent, current, isAi, label, subLabel, toggleMenu, roleMenu };
53
- } });
@@ -1,10 +0,0 @@
1
- <!-- 来源:src/shell/PrototypeGuide.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Drawer" data-bind-open="(open)" title="原型说明与评审指南" data-bind-size="(640)" data-on-close="(emit('close'))"><template data-component="Alert" type="info" show-icon="" title="v0.14 · 运行验收与异常反馈" description="运行验收、异常调查分诊与修复跟踪已接回发布、工作台、任务和 PBC。身份、授权、观测与工程交付均为本地模拟,真实服务尚未接入。"></template><section class="drawer-section"><h2>运行验收与异常反馈 · v0.14</h2><p>运行记录 → 业务证据与人工验收 → 异常调查/分诊 → 关联或创建修复需求 → 新发布版本的回归与验收 → 关闭原异常。</p><p>在运行管理页底部载入独立模拟样例;新功能权限通过权限管理配置。旧版数据和端口保留,新版4187的数据按浏览器独立保存。</p><template data-component="Button" data-on-click="router.push('/operations');
3
- emit('close');">打开运行管理</template></section><section class="drawer-section"><h2>发布准备与人工放行</h2><p>创建发布草稿 → 核对固定版本证据 → 人工授权 → 部署 → 首次灰度 → 观测与全量;失败时有限重试、暂停或恢复。所有执行与材料均为模拟。</p><p>历史任务保留材料缺失;独立样例提供完整模拟证据。既有用户新增发布权限需在权限管理配置,可限定目标环境。</p><template data-component="Button" data-on-click="router.push('/releases');
4
- emit('close');">打开门禁与发布</template><h3>发布列表状态</h3><template data-component="RadioGroup" data-model-value="(releases.scene)" data-bind-options="(listOutcomes)"></template><h3>下一次发布提交结果</h3><template data-component="RadioGroup" data-model-value="(releases.response)" data-bind-options="(outcomes)"></template></section><section class="drawer-section"><h2>质量与人工确认走读</h2><ol><li>打开评审列表,按PBC和状态筛选;查看更多、显示字段与审批记录删除说明。</li><li>进入有问题的质量评审,查看固定版本,再修改设计或填写重新规划意见。</li><li>提交后进入新设计评审,接收模拟复核结果并确认;回到任务重新实现、检查、独立验证。</li><li>回到工作台查看同一任务待办更新;打开历史评审核对旧报告与处理人。</li></ol><p>既有用户的授权保持。新增“修改评审设计”和“重新规划交付”由权限管理员在独立权限菜单配置;新动作未授权时仍可查看原因。</p><template data-component="Button" type="primary" data-on-click="router.push('/reviews');
5
- emit('close');">打开质量与评审</template><h3>评审列表状态</h3><template data-component="RadioGroup" data-model-value="(reviews.scene)" data-bind-options="(listOutcomes)"></template><h3>下一次评审提交结果</h3><template data-component="RadioGroup" data-model-value="(session.confirmResult)" data-bind-options="(outcomes)"></template></section><section class="drawer-section"><h2>工作台首版走读</h2><ol><li>切换“与我相关”和“全部授权范围”,核对待办、PBC及交付数量。</li><li>从待办进入规格或任务处理,返回首页查看状态变化。</li><li>新建PBC可查看所有可见需求的前置原因;已归属记录进入原结果。</li><li>查看只读公告与规范提醒;质量评审已接入,发布待办已接入,运行验收与异常待办已接入。</li></ol><p>个人关系按创建人、负责人和可见关联记录识别;演示林晓的两种授权配置属于同一人员,权限仍单独计算。本版使用 4187 独立预览,其他端口保留各自版本与数据。</p><h2>PBC 与项目走读</h2><ol class="review-steps"><li>从 PBC 列表编辑资料,查看基础字段、更多与批量删除预检。</li><li>进入服务管理,新增并修改服务方案,核对已建工程的保护。</li><li>打开交付工作区,从需求规格进入任务与版本产物。</li><li>新建 PBC 选择已确认规格,沿用三步创建向导及失败续接。</li></ol><p class="muted">本版以 PBC 聚合交付工作区;独立项目实体尚待确认。更名保留历史和原型兼容的资源授权引用;正式接口按稳定ID治理。</p><template data-component="Button" type="primary" data-on-click="router.push('/pbcs');
6
- emit('close');">打开 PBC 管理</template></section><section class="drawer-section"><h2>交付任务走读</h2><ol class="review-steps"><li>发起交付,核对已确认规格、PBC、流程与资源版本。</li><li>打开任务,用阶段详情中的演示控件推进;确认原型后查看产物。</li><li>模拟失败,尝试返工、暂停与人工接管,再刷新查看保留的状态。</li></ol><p class="muted">预置确认与产物均为样例;可继续查看发布、运行验收和修复反馈。</p><template data-component="Button" data-on-click="router.push('/tasks');
7
- emit('close');">打开交付任务</template><h3>任务列表状态</h3><template data-component="RadioGroup" data-model-value="(tasks.scene)" data-bind-options="(listOutcomes)"></template></section><section class="drawer-section"><h2>研发交付流程走读</h2><ol class="review-steps"><li>查看标准交付模板,选择节点核对 Agent 和产物。</li><li>编辑草稿并修改节点,检查流程后提交审核。</li><li>切换到有发布权限的王睿,审核配置;再核对版本差异与固定版本选择。</li></ol><p class="muted">本地原型不运行 CI、Agent 或 Dapr。预置质量评审 Agent 在本版示例中已启用并取得模型授权。独立审核为待评审交互提案。</p><template data-component="Button" type="primary" data-bind-disabled="(!session.can('workflow:view'))" data-on-click="router.push('/workflows');
8
- emit('close');">打开流程模板</template><h3>流程列表状态</h3><template data-component="RadioGroup" data-model-value="(workflows.scene)" data-bind-options="(listOutcomes)"></template></section><section class="drawer-section"><h2>Agent 原型走读</h2><ol class="review-steps"><li>在 Agent 注册表查看四要素配置、所属项目与基础字段。</li><li>注册一个 Agent 并保存草稿,检查引用与模型使用授权;通过模型管理补齐授权后启用。</li><li>停用后编辑,再核对批量删除、引用保护及操作记录。</li></ol><template data-component="Button" type="primary" data-bind-disabled="(!session.can('agent:view'))" data-on-click="router.push('/agents');
9
- emit('close');">打开 Agent 注册表</template><p class="muted">提示词、技能、工具与模板为示例资源,本包没有连接真实 Agent 运行时。</p><h3>Agent 列表状态</h3><template data-component="RadioGroup" data-model-value="(agents.scene)" data-bind-options="(listOutcomes)"></template></section><section class="drawer-section"><h2>权限管理走读</h2><ol class="review-steps"><li>使用陈敏进入独立的「权限管理」,新增角色并配置功能和资源范围。</li><li>在成员授权中,将角色关联给周晨;查看成员的有效权限与来源。</li><li>切换到周晨,进入原有意图/规格页面核对权限;切回陈敏撤权并查看授权记录。</li></ol><template data-component="Button" type="primary" data-bind-disabled="(!session.can('permission:view'))" data-on-click="router.push('/permissions/roles');
10
- emit('close');">打开权限管理</template><p class="muted">以下身份切换和故障选项仅供原型评审,正式产品不包含这些控件。</p></section><section class="drawer-section"><h2>身份与权限</h2><template data-component="Select" data-model-value="(session.actorId)" aria-label="评审身份" class="full-width" data-bind-options="(actors.map(a =&gt; ({ label: a.name + ' · ' + a.label, value: a.id })))"></template><p class="muted">预置角色只是演示配置;动作与范围决定功能,角色名称不参与授权判断。</p><template data-component="Space" wrap=""><template data-component="Button" data-on-click="(session.state = 'expired')">模拟登录失效</template><template data-component="Button" data-on-click="(session.state = 'anonymous')">模拟未登录</template></template></section><section class="drawer-section"><h2>规格生成与资源</h2><template data-component="RadioGroup" data-model-value="(specs.generation)" data-bind-options="(outcomes.slice(0, 2))"></template><p><template data-component="Switch" data-model-checked="(specs.resource)" aria-label="规格生成资源可用"></template> 规格生成资源可用(模拟)</p><h3>规格确认结果</h3><template data-component="RadioGroup" data-model-value="(specs.confirmation)" data-bind-options="(outcomes)"></template></section><section class="drawer-section"><h2>下一次 PBC 关联 / 创建</h2><template data-component="RadioGroup" data-model-value="(pbcs.mode)" data-bind-options="(outcomes)"></template><p class="muted">创建失败发生在第 3 步;未知结果发生在第 1 步。核实 / 续接沿用原操作编号,已完成步骤保留。</p><h3>PBC 目录</h3><template data-component="RadioGroup" data-model-value="(pbcs.scene)" data-bind-options="(listOutcomes)"></template></section><section class="drawer-section"><h2>权限管理列表</h2><template data-component="RadioGroup" data-model-value="(authority.scene)" data-bind-options="(listOutcomes)"></template></section><section class="drawer-section"><h2>下一次保存 / 提交</h2><template data-component="RadioGroup" data-model-value="(session.nextWrite)" data-bind-options="([{ label: '成功', value: 'success' }, { label: '服务失败', value: 'failure' }, { label: '版本冲突', value: 'conflict' }])"></template><p class="muted">失败或冲突仅作用一次,便于继续重试。</p></section><section class="drawer-section"><h2>原有模型 / 意图列表状态</h2><template data-component="RadioGroup" data-model-value="(scene)" data-bind-options="(listOutcomes)"></template><h3>模型发布结果</h3><template data-component="RadioGroup" data-model-value="(session.publishResult)" data-bind-options="(outcomes.slice(0, 2))"></template><h3>意图确认结果</h3><template data-component="RadioGroup" data-model-value="(session.confirmResult)" data-bind-options="(outcomes)"></template><h3>意图整理结果</h3><template data-component="RadioGroup" data-model-value="(intents.resultMode)" data-bind-options="(outcomes.slice(0, 2))"></template></section><template data-slot="footer"><template data-component="Space"><template data-component="Button" danger="" data-on-click="(reset)">重置演示数据</template><template data-component="Button" type="primary" data-on-click="(emit('close'))">开始体验</template></template></template></template>
@@ -1,30 +0,0 @@
1
- import { confirmAction } from "./confirmation.js";
2
- import { computed, ref } from '../../runtime/state.js';
3
- import { useRoute, useRouter } from "../../runtime/router.js";
4
- import { Alert, Button, Drawer, RadioGroup, Space, Select, Switch } from "../../runtime/widgets.js";
5
- import { useModels } from "../models/store.js";
6
- import { useIntents } from "../intents/store.js";
7
- import { useSpecs } from "../specs/store.js";
8
- import { usePbcs } from "../pbc/store.js";
9
- import { useSession } from "../shared/session.js";
10
- import { actors } from "../shared/policy.js";
11
- import { useAuthority } from "../permissions/store.js";
12
- import { useReleases } from "../releases/store.js";
13
- import { useReviews } from "../reviews/store.js";
14
- import { useTasks } from "../tasks/store.js";
15
- import { useWorkflows } from "../workflows/store.js";
16
- import { useAgents } from "../agents/store.js";
17
- import { createComponent } from '../../runtime/dom.js';
18
- export default createComponent({ name: 'PrototypeGuide', propKeys: ["open"], template: new URL('./PrototypeGuide.html', import.meta.url).href, setup(__props, __emit) {
19
- __props;
20
- const emit = __emit, route = useRoute(), router = useRouter(), models = useModels(), intents = useIntents(), specs = useSpecs(), pbcs = usePbcs(), session = useSession(), authority = useAuthority(), agents = useAgents(), workflows = useWorkflows(), tasks = useTasks(), reviews = useReviews(), releases = useReleases();
21
- const isIntent = computed(() => route.path.startsWith('/intents'));
22
- const scene = computed({ get: () => isIntent.value ? intents.scene : models.scene, set: value => { if (isIntent.value)
23
- intents.scene = value;
24
- else
25
- models.scene = value; } });
26
- const outcomes = [{ label: '成功', value: 'success' }, { label: '失败', value: 'failure' }, { label: '结果待核实', value: 'unknown' }];
27
- const listOutcomes = [{ label: '正常', value: 'normal' }, { label: '空列表', value: 'empty' }, { label: '加载失败', value: 'error' }];
28
- function reset() { confirmAction({ title: '重置 v0.14 演示数据?', content: '恢复当前 HTML 原型地址的模型、意图、规格、PBC、权限、Agent、流程、任务、发布与运行演示记录。请先保留需要的内容;其他端口的历史版本数据不受影响。', okText: '确认重置', cancelText: '取消', onOk: () => { authority.reset(); session.reset(); models.reset(); intents.reset(); specs.reset(); pbcs.reset(); agents.reset(); workflows.reset(); tasks.reset(); emit('close'); router.push('/workbench'); } }); }
29
- return { confirmAction, computed, ref, useRoute, useRouter, Alert, Button, Drawer, RadioGroup, Space, Select, Switch, useModels, useIntents, useSpecs, usePbcs, useSession, actors, useAuthority, useReleases, useReviews, useTasks, useWorkflows, useAgents, emit, route, router, models, intents, specs, pbcs, session, authority, agents, workflows, tasks, reviews, releases, isIntent, scene, outcomes, listOutcomes, reset };
30
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/shell/ScopePage.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <div class="page-heading"><div><h1>{{ (label) }}</h1><p>Console 导航结构预览</p></div></div><section class="panel scope-panel"><template data-component="Empty" data-bind-description="(`${label}将在后续逐功能设计中展开`)"><p class="muted">当前可体验意图发起与澄清,以及模型管理。</p><template data-component="Button" type="primary" data-on-click="(router.push('/intents'))">进入意图池</template></template></section>
@@ -1,10 +0,0 @@
1
- import { computed } from '../../runtime/state.js';
2
- import { useRoute, useRouter } from "../../runtime/router.js";
3
- import { Empty, Button } from "../../runtime/widgets.js";
4
- import { moduleLabel } from "./navigation.js";
5
- import { createComponent } from '../../runtime/dom.js';
6
- export default createComponent({ name: 'ScopePage', propKeys: [], template: new URL('./ScopePage.html', import.meta.url).href, setup(__props, __emit) {
7
- const route = useRoute(), router = useRouter();
8
- const label = computed(() => moduleLabel(String(route.params.id)));
9
- return { computed, useRoute, useRouter, Empty, Button, moduleLabel, route, router, label };
10
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/shell/SessionDialog.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Modal" data-bind-open="(session.state !== 'active')" data-bind-z-index="(4000)" data-bind-title="(redirected ? 'MaxKey 统一认证 · 演示' : session.state === 'expired' ? '登录状态已失效' : '请先登录')" data-bind-closable="(false)" data-bind-keyboard="(false)" data-bind-mask="({ closable: false })"><p>{{ (redirected ? '实际应用会跳转 MaxKey 完成认证。这里仅模拟登录结果,不收集密码或生成令牌。' : '继续操作前需要通过统一认证。当前页面的未提交输入暂时保留,重新登录后可核对并继续。') }}</p><template data-component="Alert" data-if="(redirected)" type="info" data-bind-title="('模拟以 ' + session.actor.name + ' 登录')"></template><template data-slot="footer"><template data-component="Button" data-if="(!redirected)" type="primary" data-on-click="(redirected = true)">前往 MaxKey 登录</template><template data-component="Button" data-else="" type="primary" data-on-click="(session.state = 'active')">模拟登录成功并返回</template></template></template>
@@ -1,9 +0,0 @@
1
- import { ref, watch } from '../../runtime/state.js';
2
- import { Modal, Button, Alert } from "../../runtime/widgets.js";
3
- import { useSession } from "../shared/session.js";
4
- import { createComponent } from '../../runtime/dom.js';
5
- export default createComponent({ name: 'SessionDialog', propKeys: [], template: new URL('./SessionDialog.html', import.meta.url).href, setup(__props, __emit) {
6
- const session = useSession(), redirected = ref(false);
7
- watch(() => session.state, () => { redirected.value = false; });
8
- return { ref, watch, Modal, Button, Alert, useSession, session, redirected };
9
- } });
@@ -1,3 +0,0 @@
1
- import { shallowRef } from '../../runtime/state.js';
2
- export const confirmation = shallowRef();
3
- export function confirmAction(options) { confirmation.value = options; }
@@ -1,19 +0,0 @@
1
- import { HomeOutlined, ProjectOutlined, CommentOutlined, AppstoreOutlined, SafetyCertificateOutlined, RocketOutlined, FundProjectionScreenOutlined, AuditOutlined, TeamOutlined, SettingOutlined } from "../../runtime/icons.js";
2
- export const navigation = [
3
- { id: 'workbench', label: '工作台', icon: HomeOutlined },
4
- { id: 'projects', label: 'PBC 与项目', icon: ProjectOutlined },
5
- { id: 'requirements', label: '意图与需求', icon: CommentOutlined },
6
- { id: 'ai', label: 'AI 编排', icon: AppstoreOutlined, children: [
7
- { id: 'models', label: '模型管理' }, { id: 'agents', label: 'Agent 注册表' },
8
- { id: 'workflows', label: '研发交付流程' }, { id: 'tools', label: '工具与 MCP' }, { id: 'knowledge', label: '知识库' },
9
- ] },
10
- { id: 'tasks', label: '交付任务', icon: ProjectOutlined },
11
- { id: 'quality', label: '质量与评审', icon: SafetyCertificateOutlined },
12
- { id: 'release', label: '门禁与发布', icon: RocketOutlined },
13
- { id: 'operations', label: '运行管理', icon: FundProjectionScreenOutlined },
14
- { id: 'standards', label: '规范与治理', icon: AuditOutlined },
15
- { id: 'permissions', label: '权限管理', icon: SafetyCertificateOutlined, children: [{ id: 'permission-roles', label: '角色管理' }, { id: 'permission-members', label: '成员授权' }, { id: 'permission-records', label: '授权记录' }] },
16
- { id: 'organization', label: '组织与审计', icon: TeamOutlined },
17
- { id: 'settings', label: '系统设置', icon: SettingOutlined },
18
- ];
19
- export const moduleLabel = (id) => navigation.flatMap(n => [n, ...(n.children || [])]).find(n => n.id === id)?.label || '模型管理';
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/specs/SpecDocument.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <article class="spec-document" aria-label="需求规格正文"><section data-each="section in (sections)" data-bind-id="('spec-' + section.key)" data-bind-key="(section.key)"><h2>{{ (section.label) }}</h2><p>{{ (version.content[section.key]) }}</p></section><section><h2>决策登记</h2><div data-each="d in (version.decisions)" data-bind-key="(d.id)" class="decision-row"><div class="section-heading"><strong>{{ (d.question) }}</strong><template data-component="Tag" data-bind-color="(d.answer &amp;&amp; d.reason ? 'green' : 'orange')">{{ (d.answer &amp;&amp; d.reason ? '已明确' : '待处理') }}</template></div><p>结论:{{ (d.answer || '尚未明确') }}<br>理由:{{ (d.reason || '待补充') }}</p><small class="muted">责任方:{{ (d.owner) }}<template data-if="(d.resolvedAt)"> · {{ (d.resolvedBy) }} · {{ (formatDate(d.resolvedAt)) }}</template></small></div></section></article>
@@ -1,8 +0,0 @@
1
- import { Tag } from "../../runtime/widgets.js";
2
- import { sections } from "./domain.js";
3
- import { formatDate } from "../shared/policy.js";
4
- import { createComponent } from '../../runtime/dom.js';
5
- export default createComponent({ name: 'SpecDocument', propKeys: ["version"], template: new URL('./SpecDocument.html', import.meta.url).href, setup(__props, __emit) {
6
- __props;
7
- return { Tag, sections, formatDate };
8
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/specs/SpecEdit.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Drawer" data-bind-open="(true)" data-bind-title="(mode === 'content' ? '修改需求规格' : '处理未决事项')" data-bind-size="(860)" data-bind-mask="({ closable: false })" data-on-close="(close)"><template data-component="Alert" type="info" show-icon="" data-bind-title="('保存为规格 v' + (version.number + 1) + ',需重新确认')" description="原版本及其签署记录继续保留。请分别填写每项决策理由,以及表单底部必填的“本次修改原因”;前者解释决策,后者记录本次版本变化。" class="page-alert"></template><template data-component="Alert" data-if="(error)" type="error" show-icon="" data-bind-title="(error)" class="page-alert"></template><template data-if="(mode === 'decisions')"><fieldset data-each="(d,index) in (decisions)" data-bind-key="(d.id)" class="spec-decision-form" data-bind-disabled="(!editable)"><legend>{{ (index + 1) }}. {{ (d.question) }}</legend><p class="muted">责任方:{{ (d.owner) }}</p><template data-component="RadioGroup" data-model-value="(d.answer)" data-bind-aria-label="(d.question)" class="vertical-options" data-bind-options="(d.options.map(value =&gt; ({ label: value, value })))"></template><label data-bind-for="('reason-' + d.id)">决策理由</label><template data-component="Input.TextArea" data-bind-id="('reason-' + d.id)" data-model-value="(d.reason)" data-bind-rows="(2)" data-bind-maxlength="(1500)" placeholder="说明依据、影响与后续处理。"></template></fieldset></template><template data-component="ProForm" data-bind-form="(form)" name="spec-revision" layout="vertical" data-bind-disabled="(!editable)"></template><template data-slot="footer"><template data-component="Alert" data-if="(error)" type="error" show-icon="" data-bind-title="(error)" class="page-alert" role="alert"><template data-slot="action"><template data-component="Button" data-if="(error.startsWith('尚未保存'))" data-on-click="(locateInvalid)">定位缺项</template></template></template><div class="drawer-footer"><span class="muted">保存后保留版本与操作人</span><template data-component="Space"><template data-component="Button" data-on-click="(close)">取消</template><template data-component="Button" type="primary" data-bind-disabled="(!editable)" data-on-click="(save)">保存新版本</template></template></div></template></template>
@@ -1,32 +0,0 @@
1
- import { computed, ref, nextTick } from '../../runtime/state.js';
2
- import { Alert, Button, Drawer, Input, RadioGroup, Space } from "../../runtime/widgets.js";
3
- import { ProForm, useForm } from "../../runtime/widgets.js";
4
- import { clone, currentVersion, sections, specBusy } from "./domain.js";
5
- import { useSpecs } from "./store.js";
6
- import { useSession } from "../shared/session.js";
7
- import { confirmAction } from "../shell/confirmation.js";
8
- import { createComponent } from '../../runtime/dom.js';
9
- export default createComponent({ name: 'SpecEdit', propKeys: ["spec", "mode"], template: new URL('./SpecEdit.html', import.meta.url).href, setup(__props, __emit) {
10
- const props = __props, emit = __emit, store = useSpecs(), session = useSession();
11
- const version = currentVersion(props.spec), expected = props.spec.recordVersion, error = ref(''), decisions = ref(clone(version.decisions));
12
- const form = useForm({ ...clone(version.content), reason: '' });
13
- form.fields.value = [...(props.mode === 'content' ? sections.map(s => ({ path: s.key, label: s.label, component: 'textarea', span: 24, autoSize: { minRows: 3, maxRows: 10 }, rules: [{ required: true, whitespace: true, message: '请填写' + s.label }] })) : []), { path: 'reason', label: '本次修改原因', component: 'textarea', span: 24, rows: 2, placeholder: '概括这次修改,例如:补充人工复核方案及验收资源,关闭未决事项。', rules: [{ required: true, whitespace: true, message: '请填写修改原因' }] }];
14
- const editable = computed(() => session.can('spec:edit', props.spec.tenantId) && !specBusy(props.spec));
15
- function close() { confirmAction({ title: '放弃本次未保存修改?', content: '已保存的规格与确认记录保留。', okText: '放弃修改', cancelText: '继续编辑', onOk: () => emit('close') }); }
16
- async function locateInvalid() { await nextTick(); const el = document.querySelector('#spec-revision .ant-form-item-has-error textarea, #spec-revision .ant-form-item-has-error input') || document.getElementById('spec-revision_reason'); el?.scrollIntoView({ block: 'center', behavior: 'smooth' }); el?.focus({ preventScroll: true }); }
17
- async function save() { error.value = ''; try {
18
- await form.formRef.value?.validate();
19
- }
20
- catch {
21
- error.value = '尚未保存:请补齐标红字段。每项决策理由之外,还需填写“本次修改原因”。输入已保留。';
22
- await locateInvalid();
23
- return;
24
- } try {
25
- store.revise(props.spec.intentId, form.formData, decisions.value, form.formData.reason, expected);
26
- emit('close');
27
- }
28
- catch (e) {
29
- error.value = e.message;
30
- } }
31
- return { computed, ref, nextTick, Alert, Button, Drawer, Input, RadioGroup, Space, ProForm, useForm, clone, currentVersion, sections, specBusy, useSpecs, useSession, confirmAction, props, emit, store, session, version, expected, error, decisions, form, editable, close, locateInvalid, save };
32
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/specs/SpecHeader.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Button" type="link" class="intent-back" data-on-click="(router.push('/intents/' + intent.id))">← 返回来源意图</template><div class="page-heading intent-heading"><div><h1>{{ (['需求规格工作区', '规格版本评审', 'PBC 归属'][step]) }}</h1><p class="muted">{{ (intent.title) }}</p><template data-component="Space" wrap=""><template data-component="Tag">{{ (intent.code) }}</template><template data-component="Tag" data-if="(version)" data-bind-color="(version.confirmedAt ? 'green' : 'blue')">规格 v{{ (version.number) }} · {{ (version.confirmedAt ? '已确认' : '待确认') }}</template><span class="muted">来源意图 v{{ (version?.source.version || intent.versions.at(-1)?.number) }}</span></template></div><template data-component="Space" wrap=""><slot></slot></template></div><template data-component="Steps" class="delivery-steps" data-bind-current="(step)" size="small" data-on-change="(navigate)" data-bind-items="([{ title: '生成与完善规格' }, { title: '核对版本并确认', disabled: !version }, { title: '关联或创建 PBC', disabled: !version?.confirmedAt || !session.can('pbc:view', intent.tenantId) }])"></template>
@@ -1,15 +0,0 @@
1
- import { Button, Space, Steps, Tag } from "../../runtime/widgets.js";
2
- import { useSession } from "../shared/session.js";
3
- import { useRouter } from "../../runtime/router.js";
4
- import { createComponent } from '../../runtime/dom.js';
5
- export default createComponent({ name: 'SpecHeader', propKeys: ["intent", "version", "step"], template: new URL('./SpecHeader.html', import.meta.url).href, setup(__props, __emit) {
6
- const props = __props;
7
- const router = useRouter(), session = useSession();
8
- function navigate(step) { const root = '/intents/' + props.intent.id; if (step === 0)
9
- router.push(root + '/spec');
10
- else if (step === 1 && props.version)
11
- router.push(root + '/spec/review');
12
- else if (step === 2 && props.version?.confirmedAt && session.can('pbc:view', props.intent.tenantId))
13
- router.push(root + '/pbc'); }
14
- return { Button, Space, Steps, Tag, useSession, useRouter, props, router, session, navigate };
15
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/specs/SpecHistory.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Drawer" data-bind-open="(true)" title="规格版本与操作记录" data-bind-size="(860)" data-on-close="(emit('close'))"><template data-component="Alert" type="info" show-icon="" title="版本与签署记录只读保存,不适用删除或批量删除。"></template><template data-component="Tabs" data-model-active-key="(tab)" data-bind-items="([{ key: 'versions', label: '历史版本' }, { key: 'events', label: '操作记录' }])"></template><template data-if="(tab === 'versions')"><template data-component="Select" data-model-value="(selected)" aria-label="历史规格版本" class="full-width" data-bind-options="(spec.versions.map(v =&gt; ({ label: '规格 v' + v.number + ' · ' + (v.confirmedAt ? '已确认' : '未确认'), value: v.number })))"></template><template data-if="(version)"><p>{{ (version.reason) }} · {{ (version.createdBy) }} · {{ (formatDate(version.createdAt)) }}</p><p data-if="(version.confirmedAt)" class="version-confirmed">{{ (version.confirmedBy) }} · {{ (formatDate(version.confirmedAt)) }} 确认此版本</p><p data-if="(version.resource)" class="muted">生成来源:{{ (version.resource.agent) }} v{{ (version.resource.agentVersion) }} · {{ (version.resource.name) }} v{{ (version.resource.version) }}</p><template data-component="SpecDocument" data-bind-version="(version)"></template></template></template><ol data-else="" class="intent-events"><li data-each="event in ([...spec.events].reverse())" data-bind-key="(event.id)"><strong>{{ (event.action) }} · v{{ (event.version) }}</strong><p>{{ (event.result) }}</p><small>{{ (event.actor) }} · {{ (formatDate(event.at)) }}</small></li></ol></template>
@@ -1,11 +0,0 @@
1
- import { computed, ref } from '../../runtime/state.js';
2
- import { Alert, Drawer, Select, Tabs } from "../../runtime/widgets.js";
3
- import { currentVersion } from "./domain.js";
4
- import { formatDate } from "../shared/policy.js";
5
- import SpecDocument from "./SpecDocument.js";
6
- import { createComponent } from '../../runtime/dom.js';
7
- export default createComponent({ name: 'SpecHistory', propKeys: ["spec"], template: new URL('./SpecHistory.html', import.meta.url).href, setup(__props, __emit) {
8
- const props = __props, emit = __emit, tab = ref('versions'), selected = ref(currentVersion(props.spec)?.number);
9
- const version = computed(() => props.spec.versions.find(v => v.number === selected.value));
10
- return { computed, ref, Alert, Drawer, Select, Tabs, currentVersion, formatDate, SpecDocument, props, emit, tab, selected, version };
11
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/specs/SpecReview.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Result" data-if="(!intent || !spec || !version || !viewed)" title="尚无可评审的规格或无权访问"><template data-slot="extra"><template data-component="Button" data-on-click="(router.push('/intents/' + id + '/spec'))">返回规格工作区</template></template></template><template data-else=""><template data-component="SpecHeader" data-bind-intent="(intent)" data-bind-version="(version)" data-bind-step="(1)"><template data-component="Button" data-on-click="(history = true)">版本与记录</template><template data-component="Button" data-on-click="(router.push('/intents/' + id + '/spec'))">返回工作区</template></template><template data-component="Alert" data-if="(error || spec.error || sourceError)" type="error" show-icon="" data-bind-title="(error || spec.error || sourceError)" class="page-alert"></template><template data-component="Alert" data-if="(spec.confirmation === 'pending')" type="info" show-icon="" title="正在提交确认,请稍候…" class="page-alert"></template><template data-component="Alert" data-if="(spec.confirmation === 'unknown')" type="warning" show-icon="" title="确认响应未收到,请核实原请求结果" data-bind-description="('请求 ' + spec.pending?.id + ';规格 v' + spec.pending?.version)" class="page-alert"><template data-slot="action"><template data-component="Button" data-on-click="(reconcile)">核实确认结果</template></template></template><template data-component="Alert" data-if="(version.confirmedAt)" type="success" show-icon="" data-bind-title="('规格 v' + version.number + ' 已确认')" data-bind-description="(version.confirmedBy + ' · ' + formatDate(version.confirmedAt) + ';确认基线只读保留,修改会形成新版本。')" class="page-alert"></template><template data-component="Alert" data-else-if="(pendingDecisions(version).length)" type="warning" show-icon="" data-bind-title="('还有 ' + pendingDecisions(version).length + ' 项决策需要结论和理由,暂不能确认。')" class="page-alert"><template data-slot="action"><template data-component="Button" data-on-click="(router.push('/intents/' + id + '/spec'))">返回处理</template></template></template><section class="panel delivery-main"><div class="review-toolbar"><div class="version-toolbar"><label for="review-after">查看版本</label><template data-component="Select" id="review-after" data-model-value="(after)" data-bind-options="(spec.versions.map(v =&gt; ({ label: '规格 v' + v.number, value: v.number })))"></template><template data-component="Button" data-bind-disabled="(spec.versions.length &lt; 2)" data-on-click="(compare = !compare)">{{ (compare ? '阅读完整规格' : '对比版本变化') }}</template><template data-if="(compare)"><label for="review-before">对比来源</label><template data-component="Select" id="review-before" data-model-value="(before)" data-bind-options="(spec.versions.filter(v =&gt; v.number !== after).map(v =&gt; ({ label: '规格 v' + v.number, value: v.number })))"></template></template></div><template data-component="Tag" data-if="(after !== version.number)">历史版本 · 只读</template></div><p class="muted">{{ (viewed.reason) }} · {{ (viewed.createdBy) }} · {{ (formatDate(viewed.createdAt)) }} · 来源意图 v{{ (viewed.source.version) }}</p><template data-if="(compare)"><div data-each="d in (diff)" data-bind-key="(d.key)" class="spec-diff"><div class="section-heading"><h2>{{ (d.label) }}</h2><template data-component="Tag" data-bind-color="(d.changed ? 'blue' : 'default')">{{ (d.changed ? '有变化' : '内容相同') }}</template></div><div class="diff-columns"><section><h3>原内容 · v{{ (before) }}</h3><p>{{ (d.before || '无内容') }}</p></section><section data-bind-class="({ 'diff-changed': d.changed })"><h3>当前查看 · v{{ (after) }}</h3><p>{{ (d.after) }}</p></section></div></div><section class="decision-row"><h2>决策变化</h2><div data-each="d in (viewed.decisions)" data-bind-key="(d.id)"><strong>{{ (d.question) }}</strong><p>原结论:{{ (previous?.decisions.find(x =&gt; x.id === d.id)?.answer || '未明确') }} → 新结论:{{ (d.answer || '未明确') }}</p><p>新理由:{{ (d.reason || '待补充') }}</p></div></section></template><template data-component="SpecDocument" data-else="" data-bind-version="(viewed)"></template></section><template data-component="Alert" data-if="(!version.confirmedAt &amp;&amp; blockReason)" type="info" show-icon="" data-bind-title="(blockReason)" class="page-alert"></template><template data-component="Alert" data-if="(version.confirmedAt &amp;&amp; !session.can('pbc:view', spec.tenantId))" type="info" show-icon="" title="规格已确认;继续归属需要当前租户的 PBC 查看及相应创建/关联权限。" class="page-alert"></template><section class="panel review-actions" aria-label="规格评审操作"><span class="muted">当前操作:规格 v{{ (version.number) }} · {{ (session.actor.name) }}</span><template data-component="Space" wrap=""><template data-component="Button" data-bind-disabled="(busy || !!sourceError || !session.can('spec:edit', spec.tenantId))" data-on-click="(edit = true)">修改规格</template><template data-component="Button" data-bind-disabled="(busy || !!sourceError || !session.can('spec:generate', spec.tenantId) || !session.can('spec:edit', spec.tenantId))" data-on-click="(replan = true)">重新规划</template><template data-component="Button" data-if="(!version.confirmedAt)" type="primary" data-bind-disabled="(blocked)" data-bind-loading="(spec.confirmation === 'pending')" data-on-click="(confirm)">确认规格 v{{ (version.number) }}</template><template data-component="Button" data-else="" type="primary" data-bind-disabled="(!!sourceError || !session.can('pbc:view', spec.tenantId))" data-on-click="(router.push('/intents/' + id + '/pbc'))">确定 PBC 归属</template></template></section><template data-component="SpecEdit" data-if="(edit)" data-bind-spec="(spec)" mode="content" data-on-close="(edit = false)"></template><template data-component="SpecHistory" data-if="(history)" data-bind-spec="(spec)" data-on-close="(history = false)"></template><template data-component="Modal" data-model-open="(replan)" title="重新规划规格" ok-text="生成新版本" cancel-text="取消" data-bind-confirm-loading="(spec.generating)" data-on-ok="(regenerate)"><p>重新读取已确认意图,保留旧版本与签署记录。</p><label for="spec-replan-reason">重新规划原因</label><template data-component="Input.TextArea" id="spec-replan-reason" data-model-value="(reason)" data-bind-rows="(4)"></template><template data-component="Alert" data-if="(error)" type="error" data-bind-title="(error)"></template></template></template>