@givolt/i3-composer-agent 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude/commands/i3-ui-demo.md +21 -0
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/.claude-plugin/plugin.json +1 -1
  5. package/.codex-plugin/plugin.json +2 -2
  6. package/.gemini/commands/i3-ui-demo.toml +21 -0
  7. package/README.md +10 -8
  8. package/bin/i3-composer-agent.cjs +38 -44
  9. package/bin/install.cjs +15 -3
  10. package/bin/native-layout.cjs +2 -1
  11. package/bin/native-migration.cjs +19 -2
  12. package/bin/retired-sop-fingerprints.json +213 -0
  13. package/bin/wizard.cjs +7 -18
  14. package/commands/i3-ui-demo.toml +21 -0
  15. package/docs/codebuddy-setup.md +20 -23
  16. package/docs/codex-setup.md +2 -2
  17. package/docs/comparison.md +131 -0
  18. package/docs/developer-onboarding.md +143 -0
  19. package/docs/opencode-setup.md +1 -1
  20. package/docs/other-hosts.md +2 -2
  21. package/docs/skill-anatomy.md +211 -0
  22. package/docs/upstream-repository/AGENTS.md +92 -0
  23. package/docs/upstream-repository/CLAUDE.md +60 -0
  24. package/docs/upstream-repository/CONTRIBUTING.md +137 -0
  25. package/docs/upstream-repository/README.md +8 -0
  26. package/docs/upstream-repository/gitattributes.txt +1 -0
  27. package/docs/upstream-repository/gitignore.txt +10 -0
  28. package/docs/upstream-repository/manifest.json +71 -0
  29. package/docs/upstream-repository/opencode-skills.link +1 -0
  30. package/docs/upstream-repository/skill-gap.yml +80 -0
  31. package/docs/upstream-repository/skills-contributing.md +15 -0
  32. package/docs/upstream-repository/test-plugin-install.yml +167 -0
  33. package/docs/workbuddy-setup.md +7 -10
  34. package/evals/cases/i3-ui-demo.json +98 -0
  35. package/evals/fixtures/i3-ui-demo/asset-management.md +25 -0
  36. package/evals/zh-CN/cases/i3-ui-demo.json +103 -0
  37. package/hooks/PROTOTYPE.md +16 -8
  38. package/hooks/i3-prototype.cjs +4 -10
  39. package/hooks/manage.cjs +30 -31
  40. package/package.json +42 -5
  41. package/plugin.json +1 -1
  42. package/scripts/ui-demo-dependencies-test.js +228 -0
  43. package/scripts/ui-demo-mcp-test.js +95 -0
  44. package/scripts/ui-demo-test.js +170 -0
  45. package/scripts/ui-prototype-execution-runtime-test.js +1 -1
  46. package/scripts/ui-prototype-native-test.js +25 -3
  47. package/skills/i3-enterprise-sop/SKILL.md +15 -15
  48. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/assets-manifest.json +9 -29
  49. package/{references/enterprise-sop-resources/ad/README.md → skills/i3-enterprise-sop/references/ad/readme.md} +4 -4
  50. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/assets-manifest.json +64 -33
  51. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/assets-manifest.json +9 -20
  52. package/{references/enterprise-sop-resources/brd/README.md → skills/i3-enterprise-sop/references/brd/readme.md} +4 -4
  53. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/codebuddy-project-guide.md +1 -1
  54. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/controlled_handoff.py +52 -7
  55. package/{references/engineering-skeleton-resources → skills/i3-enterprise-sop/references/engineering-skeleton}/adoption.md +1 -1
  56. package/{references/engineering-skeleton-resources/README.md → skills/i3-enterprise-sop/references/engineering-skeleton/readme.md} +2 -2
  57. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/handoff-contract.md +2 -2
  58. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/lifecycle-contract.md +1 -1
  59. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/plan-handoff.md +3 -3
  60. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/assets-manifest.json +20 -26
  61. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/prompts/01-generate.md +1 -1
  62. package/{references/enterprise-sop-resources/prd/README.md → skills/i3-enterprise-sop/references/prd/readme.md} +4 -4
  63. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/template-contracts.md +3 -3
  64. package/{references/enterprise-sop-resources/prd/templates/AD.md → skills/i3-enterprise-sop/references/prd/templates/ad.md} +1 -1
  65. package/{references/enterprise-sop-resources/prd/templates/PRD.md → skills/i3-enterprise-sop/references/prd/templates/prd.md} +1 -1
  66. package/{references/enterprise-sop-resources/README.md → skills/i3-enterprise-sop/references/readme.md} +14 -12
  67. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/recovery-contract.md +2 -2
  68. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/stages.json +16 -7
  69. package/skills/i3-enterprise-sop/references/technical-baseline/assets-manifest.json +84 -0
  70. package/{references/enterprise-sop-resources/technical-baseline/baselines//344/274/201/344/270/232/345/272/224/347/224/250-/346/212/200/346/234/257/350/247/204/347/272/246_v0.0.2.md → skills/i3-enterprise-sop/references/technical-baseline/baselines/enterprise-application-technical-baseline-v0-0-4.md} +122 -37
  71. package/{references/enterprise-sop-resources/technical-baseline/README.md → skills/i3-enterprise-sop/references/technical-baseline/readme.md} +8 -8
  72. package/{references/enterprise-sop-resources/technical-baseline/templates/TECHNICAL-BASELINE.md → skills/i3-enterprise-sop/references/technical-baseline/templates/technical-baseline.md} +1 -1
  73. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/template-contracts.md +7 -7
  74. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/assets-manifest.json +9 -29
  75. package/{references/enterprise-sop-resources/testcase/README.md → skills/i3-enterprise-sop/references/testcase/readme.md} +4 -4
  76. package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/review_handoff.py +3 -3
  77. package/skills/i3-ui-demo/SKILL.md +234 -0
  78. package/skills/i3-ui-demo/assets/antdv-build/package-lock.json +3363 -0
  79. package/skills/i3-ui-demo/assets/antdv-build/package.json +28 -0
  80. package/skills/i3-ui-demo/assets/design-source.json +11 -0
  81. package/skills/i3-ui-demo/assets/host-targets.json +739 -0
  82. package/skills/i3-ui-demo/assets/official-files.json +76 -0
  83. package/skills/i3-ui-demo/assets/starter/index.html +11 -0
  84. package/skills/i3-ui-demo/assets/starter/package-lock.json +2299 -0
  85. package/skills/i3-ui-demo/assets/starter/package.json +28 -0
  86. package/skills/i3-ui-demo/assets/starter/provenance.json +14 -0
  87. package/skills/i3-ui-demo/assets/starter/public/prototype-config.json +22 -0
  88. package/skills/i3-ui-demo/assets/starter/src/App.vue +64 -0
  89. package/skills/i3-ui-demo/assets/starter/src/PrototypeShell.vue +59 -0
  90. package/skills/i3-ui-demo/assets/starter/src/config.ts +23 -0
  91. package/skills/i3-ui-demo/assets/starter/src/domain/presentation.ts +30 -0
  92. package/skills/i3-ui-demo/assets/starter/src/domain/theme.ts +25 -0
  93. package/skills/i3-ui-demo/assets/starter/src/main.ts +18 -0
  94. package/skills/i3-ui-demo/assets/starter/src/style.css +26 -0
  95. package/skills/i3-ui-demo/assets/starter/tests/presentation.test.ts +23 -0
  96. package/skills/i3-ui-demo/assets/starter/tests/theme.test.ts +26 -0
  97. package/skills/i3-ui-demo/assets/starter/tsconfig.json +15 -0
  98. package/skills/i3-ui-demo/assets/starter/vite.config.ts +4 -0
  99. package/skills/i3-ui-demo/assets/templates/enterprise-admin/capability-definition.json +1395 -0
  100. package/skills/i3-ui-demo/assets/templates/enterprise-admin/component-inventory.json +707 -0
  101. package/skills/i3-ui-demo/assets/templates/enterprise-admin/design-system.md +26 -0
  102. package/skills/i3-ui-demo/assets/templates/enterprise-admin/generation.json +49 -0
  103. package/skills/i3-ui-demo/assets/templates/enterprise-admin/index.html +534 -0
  104. package/skills/i3-ui-demo/assets/templates/enterprise-admin/manifest.json +9 -0
  105. package/skills/i3-ui-demo/assets/templates/enterprise-admin/offline-build.json +265 -0
  106. package/skills/i3-ui-demo/assets/templates/enterprise-admin/offline.js +8888 -0
  107. package/skills/i3-ui-demo/assets/templates/enterprise-admin/origin.json +344 -0
  108. package/skills/i3-ui-demo/assets/templates/enterprise-admin/preset.json +928 -0
  109. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/app.js +22 -0
  110. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/empty.svg +1 -0
  111. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/reference-styles.json +1 -0
  112. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/result-403.svg +1 -0
  113. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/result-404.svg +1 -0
  114. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets-manifest.json +334 -0
  115. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/baseline.json +173 -0
  116. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/conversion.md +30 -0
  117. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/credits.md +17 -0
  118. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/design-tokens.json +881 -0
  119. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/index.html +28 -0
  120. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +9 -0
  121. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +22 -0
  122. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +21 -0
  123. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/package.json +12 -0
  124. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/browser-routes.json +298 -0
  125. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/coverage.json +180 -0
  126. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/integrity.json +13 -0
  127. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/keyboard.json +11 -0
  128. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/responsive.json +125 -0
  129. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/review.md +51 -0
  130. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/rules.log +150 -0
  131. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
  132. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
  133. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
  134. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
  135. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
  136. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
  137. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
  138. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
  139. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/selection.json +9 -0
  140. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +342 -0
  141. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/readme.md +73 -0
  142. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/reference.md +59 -0
  143. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/routes.json +178 -0
  144. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/controls.js +99 -0
  145. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/dialogs.js +54 -0
  146. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/dom.js +264 -0
  147. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/forms.js +47 -0
  148. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/icons.js +41 -0
  149. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/layout.js +47 -0
  150. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/router.js +63 -0
  151. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/state.js +90 -0
  152. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/table.js +41 -0
  153. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/widgets.js +8 -0
  154. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +3 -0
  155. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +36 -0
  156. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +2 -0
  157. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +51 -0
  158. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +3 -0
  159. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +48 -0
  160. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +2 -0
  161. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +6 -0
  162. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +2 -0
  163. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +13 -0
  164. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/data.js +24 -0
  165. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/domain.js +32 -0
  166. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/registry.js +25 -0
  167. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/store.js +85 -0
  168. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +2 -0
  169. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +17 -0
  170. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +2 -0
  171. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +66 -0
  172. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +3 -0
  173. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +38 -0
  174. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +2 -0
  175. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +66 -0
  176. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +2 -0
  177. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +5 -0
  178. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +2 -0
  179. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +12 -0
  180. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +2 -0
  181. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +11 -0
  182. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +2 -0
  183. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +116 -0
  184. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +2 -0
  185. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +32 -0
  186. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +2 -0
  187. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +49 -0
  188. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +2 -0
  189. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +10 -0
  190. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +2 -0
  191. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +77 -0
  192. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/data.js +60 -0
  193. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/domain.js +105 -0
  194. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/store.js +212 -0
  195. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +2 -0
  196. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +18 -0
  197. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +2 -0
  198. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +23 -0
  199. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +2 -0
  200. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +78 -0
  201. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +2 -0
  202. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +55 -0
  203. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +2 -0
  204. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +26 -0
  205. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +2 -0
  206. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +38 -0
  207. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +2 -0
  208. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +7 -0
  209. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +2 -0
  210. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +72 -0
  211. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +2 -0
  212. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +46 -0
  213. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +2 -0
  214. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +52 -0
  215. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/RowActions.html +2 -0
  216. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/RowActions.js +19 -0
  217. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +2 -0
  218. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +30 -0
  219. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/data.js +48 -0
  220. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/domain.js +39 -0
  221. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/store.js +129 -0
  222. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +4 -0
  223. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +21 -0
  224. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +2 -0
  225. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +8 -0
  226. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +2 -0
  227. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +37 -0
  228. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +2 -0
  229. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +10 -0
  230. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +2 -0
  231. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +37 -0
  232. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +2 -0
  233. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +49 -0
  234. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +4 -0
  235. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +22 -0
  236. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +2 -0
  237. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +9 -0
  238. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/commands.js +82 -0
  239. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/examples.js +47 -0
  240. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/model.js +61 -0
  241. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/repair.js +68 -0
  242. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/store.js +55 -0
  243. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/types.js +1 -0
  244. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/workbench.js +18 -0
  245. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +3 -0
  246. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +28 -0
  247. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +2 -0
  248. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +18 -0
  249. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +2 -0
  250. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +31 -0
  251. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +2 -0
  252. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +27 -0
  253. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +2 -0
  254. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +16 -0
  255. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +2 -0
  256. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +43 -0
  257. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +4 -0
  258. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +34 -0
  259. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +2 -0
  260. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +30 -0
  261. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +3 -0
  262. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +67 -0
  263. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +2 -0
  264. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +41 -0
  265. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +2 -0
  266. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +31 -0
  267. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +2 -0
  268. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +26 -0
  269. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +2 -0
  270. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +70 -0
  271. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/data.js +8 -0
  272. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/domain.js +62 -0
  273. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/management.js +36 -0
  274. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +49 -0
  275. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/store.js +132 -0
  276. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +2 -0
  277. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +38 -0
  278. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +2 -0
  279. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +11 -0
  280. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +2 -0
  281. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +45 -0
  282. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +2 -0
  283. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +54 -0
  284. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +3 -0
  285. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +27 -0
  286. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +2 -0
  287. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +12 -0
  288. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +2 -0
  289. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +45 -0
  290. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +3 -0
  291. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +38 -0
  292. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/domain.js +61 -0
  293. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/state.js +51 -0
  294. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/store.js +116 -0
  295. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +2 -0
  296. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +45 -0
  297. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +4 -0
  298. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +30 -0
  299. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +2 -0
  300. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +67 -0
  301. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +2 -0
  302. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +5 -0
  303. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +4 -0
  304. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +60 -0
  305. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/commands.js +157 -0
  306. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/model.js +136 -0
  307. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/store.js +76 -0
  308. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +3 -0
  309. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +26 -0
  310. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +2 -0
  311. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +14 -0
  312. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +2 -0
  313. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +113 -0
  314. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +3 -0
  315. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +62 -0
  316. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/commands.js +97 -0
  317. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/model.js +147 -0
  318. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/store.js +13 -0
  319. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +2 -0
  320. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +9 -0
  321. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +2 -0
  322. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +8 -0
  323. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +2 -0
  324. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +37 -0
  325. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +2 -0
  326. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +8 -0
  327. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +2 -0
  328. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +17 -0
  329. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/columns.js +32 -0
  330. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +49 -0
  331. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +12 -0
  332. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +15 -0
  333. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +37 -0
  334. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/policy.js +68 -0
  335. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/session.js +44 -0
  336. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +2 -0
  337. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +25 -0
  338. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +2 -0
  339. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +53 -0
  340. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +10 -0
  341. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +30 -0
  342. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +2 -0
  343. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +10 -0
  344. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +2 -0
  345. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +9 -0
  346. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +3 -0
  347. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/navigation.js +19 -0
  348. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +2 -0
  349. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +8 -0
  350. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +2 -0
  351. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +32 -0
  352. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +2 -0
  353. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +15 -0
  354. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +2 -0
  355. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +11 -0
  356. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +2 -0
  357. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +57 -0
  358. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +2 -0
  359. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +37 -0
  360. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/data.js +20 -0
  361. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/domain.js +55 -0
  362. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/store.js +151 -0
  363. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +3 -0
  364. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +18 -0
  365. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +2 -0
  366. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +40 -0
  367. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +2 -0
  368. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +51 -0
  369. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +2 -0
  370. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +9 -0
  371. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +5 -0
  372. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +48 -0
  373. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/domain.js +204 -0
  374. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +22 -0
  375. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/registry.js +135 -0
  376. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/store.js +137 -0
  377. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +3 -0
  378. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +36 -0
  379. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/model.js +56 -0
  380. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/store.js +15 -0
  381. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +2 -0
  382. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +27 -0
  383. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +4 -0
  384. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +31 -0
  385. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +2 -0
  386. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +68 -0
  387. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +5 -0
  388. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +55 -0
  389. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/data.js +16 -0
  390. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/domain.js +83 -0
  391. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/registry.js +18 -0
  392. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/store.js +61 -0
  393. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/admin.css +60 -0
  394. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/agents.css +46 -0
  395. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/antdv.css +295 -0
  396. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/app.css +102 -0
  397. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/delivery.css +4 -0
  398. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/intents.css +37 -0
  399. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/native.css +22 -0
  400. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/operations.css +2 -0
  401. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/pbc.css +3 -0
  402. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/permissions.css +22 -0
  403. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/pro.css +1 -0
  404. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/releases.css +4 -0
  405. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/reset.css +246 -0
  406. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/reviews.css +8 -0
  407. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/tasks.css +6 -0
  408. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/tokens.css +15 -0
  409. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/workbench.css +61 -0
  410. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/workflows.css +1 -0
  411. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +96 -0
  412. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/agents.test.js +14 -0
  413. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +37 -0
  414. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +44 -0
  415. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +19 -0
  416. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +14 -0
  417. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/operations.test.js +25 -0
  418. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +17 -0
  419. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +24 -0
  420. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +23 -0
  421. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/permissions.test.js +24 -0
  422. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/releases.test.js +50 -0
  423. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/reviews.test.js +36 -0
  424. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +28 -0
  425. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +42 -0
  426. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +16 -0
  427. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +11 -0
  428. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/tasks.test.js +27 -0
  429. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/workbench.test.js +34 -0
  430. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/workflows.test.js +16 -0
  431. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/convert.mjs +168 -0
  432. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/serve.mjs +7 -0
  433. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/styles.mjs +11 -0
  434. package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/verify.mjs +24 -0
  435. package/skills/i3-ui-demo/assets/templates/enterprise-admin/serve.cjs +16 -0
  436. package/skills/i3-ui-demo/assets/templates/enterprise-admin/template-inventory.json +28791 -0
  437. package/skills/i3-ui-demo/assets/templates/enterprise-admin/template.json +9 -0
  438. package/skills/i3-ui-demo/assets/templates/enterprise-admin/usability.css +44 -0
  439. package/skills/i3-ui-demo/assets/templates.json +10 -0
  440. package/skills/i3-ui-demo/assets/versions.json +20 -0
  441. package/skills/i3-ui-demo/readme.md +350 -0
  442. package/skills/i3-ui-demo/references/browser.md +71 -0
  443. package/skills/i3-ui-demo/references/dependencies.md +67 -0
  444. package/skills/i3-ui-demo/references/resources.md +142 -0
  445. package/skills/i3-ui-demo/scripts/dependencies.cjs +364 -0
  446. package/skills/i3-ui-demo/scripts/design-install.cjs +105 -0
  447. package/skills/i3-ui-demo/scripts/design-provider.cjs +57 -0
  448. package/skills/i3-ui-demo/scripts/locations.cjs +52 -0
  449. package/skills/i3-ui-demo/scripts/mcp.cjs +112 -0
  450. package/skills/i3-ui-demo/scripts/provider-discovery.cjs +131 -0
  451. package/skills/i3-ui-demo/scripts/resources.cjs +283 -0
  452. package/skills/i3-ui-prototype/SKILL.md +1 -1
  453. package/skills/i3-ui-prototype/references/execution-evidence.md +12 -56
  454. package/skills/i3-ui-prototype/scripts/codebuddy-registration.cjs +1 -1
  455. package/skills/i3-ui-prototype/scripts/execution-runtime.cjs +5 -2
  456. package/skills/i3-ui-prototype/scripts/hosts/codebuddy.cjs +3 -2
  457. package/skills/i3-ui-prototype/scripts/native-delivery.cjs +2 -2
  458. package/skills/i3-ui-prototype/scripts/prototype-hooks.cjs +23 -20
  459. package/docs/ui-prototype-native/MAIN-SESSION-REPORT.md +0 -66
  460. package/docs/ui-prototype-native/USAGE.md +0 -93
  461. package/references/enterprise-sop-resources/technical-baseline/assets-manifest.json +0 -101
  462. package/references/enterprise-sop-resources/technical-baseline/baselines/PROVENANCE.md +0 -40
  463. package/references/enterprise-sop-resources/technical-baseline/references/engineering-directory-v0.2.0/adoption.md +0 -112
  464. package/references/enterprise-sop-resources/technical-baseline/references/engineering-directory-v0.2.0/directory-standard.md +0 -119
  465. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/prompts/01-generate.md +0 -0
  466. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/prompts/02-review.md +0 -0
  467. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/prompts/03-revise.md +0 -0
  468. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/prompts/04-recheck.md +0 -0
  469. /package/{references/enterprise-sop-resources/ad/templates/AD.md → skills/i3-enterprise-sop/references/ad/templates/ad.md} +0 -0
  470. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/prompts/01-generate.md +0 -0
  471. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/prompts/02-review.md +0 -0
  472. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/prompts/03-revise.md +0 -0
  473. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/prompts/04-recheck.md +0 -0
  474. /package/{references/enterprise-sop-resources/brd/templates/BRD.md → skills/i3-enterprise-sop/references/brd/templates/brd.md} +0 -0
  475. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/controlled-handoff.md +0 -0
  476. /package/{references/engineering-skeleton-resources → skills/i3-enterprise-sop/references/engineering-skeleton}/catalog.json +0 -0
  477. /package/{references/engineering-skeleton-resources → skills/i3-enterprise-sop/references/engineering-skeleton}/directory-standard.md +0 -0
  478. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/handoff.py +0 -0
  479. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/prompts/02-review.md +0 -0
  480. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/prompts/03-revise.md +0 -0
  481. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/prompts/04-recheck.md +0 -0
  482. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/review-handoff.md +0 -0
  483. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/selection-handoff.md +0 -0
  484. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/selection_handoff.py +0 -0
  485. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/prompts/01-generate.md +0 -0
  486. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/prompts/02-review.md +0 -0
  487. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/prompts/03-revise.md +0 -0
  488. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/prompts/04-recheck.md +0 -0
  489. /package/{references/enterprise-sop-resources/testcase/templates/TestCase.md → skills/i3-enterprise-sop/references/testcase/templates/testcase.md} +0 -0
  490. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/check_execution.py +0 -0
  491. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/check_native_execution.py +0 -0
  492. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/check_reads.py +0 -0
  493. /package/{references/enterprise-sop-resources/verification/README.md → skills/i3-enterprise-sop/references/verification/readme.md} +0 -0
  494. /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/review-output.schema.json +0 -0
@@ -0,0 +1,5 @@
1
+ <!-- 来源:src/tasks/TasksPage.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
+ <div class="page-heading"><div><h1>交付任务</h1><p>从一份已确认的需求,追踪到研发阶段、产物和待处理事项。</p></div><template data-component="Space" wrap=""><template data-component="Segmented" data-model-value="(view)" data-bind-options="(['列表', '看板'])" aria-label="任务展示方式"></template><template data-component="Button" type="primary" data-bind-disabled="(!session.can('task:create'))" data-on-click="(router.push('/tasks/new'))">发起交付</template></template></div><div class="task-metrics"><article><span>全部任务</span><strong>{{ (store.records.length) }}</strong></article><article><span>正在执行</span><strong>{{ (store.records.filter(t =&gt; t.status === 'running').length) }}</strong></article><article><span>等待或需处理</span><strong>{{ (store.records.filter(t =&gt; ['waiting', 'failed', 'paused', 'manual'].includes(t.status)).length) }}</strong></article><article><span>待质量 / 发布处理</span><strong>{{ (store.records.filter(t =&gt; t.status === 'ready' &amp;&amp; hasPendingRelease(t)).length) }}</strong></article></div><section class="auth-list"><div class="auth-filters"><template data-component="Input" data-model-value="(query)" aria-label="搜索交付任务" placeholder="搜索任务、需求或阻塞原因" allow-clear=""></template><template data-component="Select" data-model-value="(project)" aria-label="任务 PBC 筛选" data-bind-options="([{ value: 'all', label: '全部可见 PBC' }, ...[...new Set(store.records.map(r =&gt; r.binding.project))].map(v =&gt; ({ value: v, label: v }))])"></template><template data-component="Select" data-model-value="(state)" aria-label="任务状态筛选" data-bind-options="([{ value: 'all', label: '全部任务状态' }, ...Object.entries(statusLabels).map(([value, label]) =&gt; ({ value, label }))])"></template><template data-component="Button" data-on-click="query = '';
3
+ state = 'all';
4
+ project = 'all';">重置</template></div><div class="auth-tools"><template data-component="ListBatchBar" data-if="(view === '列表')" data-bind-count="(selection.selected.value.length)" data-bind-allowed="(canDelete)" data-on-remove="(targets = selection.selected.value)" data-on-clear="(selection.clear)"></template><p data-else="" class="muted">{{ (filtered.length) }} 项任务 · 切换列表可选择并批量处理</p><template data-component="Space" wrap=""><template data-component="Button" data-on-click="(desc = !desc)">时间{{ (desc ? '倒序' : '正序') }}</template><template data-component="Button" data-bind-loading="(refreshing)" data-on-click="(refresh)">刷新</template><template data-component="ColumnSettings" data-if="(view === '列表')" data-bind-preferences="(prefs)"></template></template></div><template data-component="Alert" data-if="(store.notice)" type="warning" show-icon="" data-bind-title="(store.notice)"></template><template data-component="Alert" data-if="(store.scene === 'error')" type="error" show-icon="" title="交付任务加载失败" description="任务记录保留,重试不会重新创建任务。"><template data-slot="action"><template data-component="Button" data-on-click="(refresh)">重试</template></template></template><template data-else=""><template data-component="ProTable" data-if="(view === '列表')" data-bind-table="(table)" data-bind-search="(async () =&gt; { })" data-bind-control="(false)" data-bind-table-container="(false)" row-key="id" data-bind-loading="(refreshing)" data-bind-row-selection="(selection.rowSelection.value)" data-bind-scroll="({ x: 'max-content' })" data-bind-pagination="({ showTotal: (n) =&gt; '共 ' + n + ' 项', showSizeChanger: true, pageSizeOptions: [5, 10, 20] })"></template><div data-else="" class="task-board"><section data-each="lane in (lanes)" data-bind-key="(lane.name)" class="task-lane"><h2>{{ (lane.name) }} <small>{{ (filtered.filter(t =&gt; lane.states.includes(t.status)).length) }}</small></h2><article data-each="t in (filtered.filter(t =&gt; lane.states.includes(t.status)))" data-bind-key="(t.id)" class="task-card"><div><template data-component="Tag" data-bind-color="(statusColors[t.status])">{{ (taskLabel(t)) }}</template><template data-component="ListMore" data-bind-name="(t.name)" data-bind-items="(more(t))" data-on-action="(action($event, t))"></template></div><template data-component="Button" type="link" class="task-card-name" data-on-click="(router.push('/tasks/' + t.id))">{{ (t.name) }}</template><small>{{ (t.binding.project) }} · {{ (t.code) }}</small><p>{{ (currentNode(t)?.name || '尚未启动') }} · {{ (taskProgress(t)) }}%</p><div class="task-progress-bar"><i data-bind-style="({ width: taskProgress(t) + '%' })"></i></div><p class="task-card-reason">{{ (t.reason) }}</p><small>{{ (t.owner) }} · {{ (formatDate(t.updatedAt)) }}</small></article><p data-if="(!filtered.some(t =&gt; lane.states.includes(t.status)))" class="muted">暂无任务</p></section></div><p data-if="(!filtered.length)" class="muted">没有符合条件的交付任务,可调整筛选或发起交付。</p></template><p class="muted task-list-note">仅未启动的草稿可以删除。已启动任务保留阶段与产物;发布状态由对应发布单汇总,真实运行验收仍待后续设计。</p></section><template data-component="ListDeleteDialog" data-if="(targets.length)" data-model-targets="(targets)" label="交付任务" data-bind-check="(store.checkRemove)" data-bind-submit="(store.removeMany)" data-on-close="(targets = [])" data-on-deleted="targets = [];
5
+ selection.clear();"></template>
@@ -0,0 +1,48 @@
1
+ import { computed, ref, watch } from '../../runtime/state.js';
2
+ import { h } from '../../runtime/dom.js';
3
+ import { useRouter } from "../../runtime/router.js";
4
+ import { Alert, Button, Input, Select, Space, Tag, Segmented } from "../../runtime/widgets.js";
5
+ import { ProTable, useTable } from "../../runtime/widgets.js";
6
+ import { actionableReview, canReadReview, reviewStatus, stateLabels, reviewUrl } from "../reviews/model.js";
7
+ import { taskReleaseLabel, hasPendingRelease } from "../releases/model.js";
8
+ import { useTasks } from "./store.js";
9
+ import { statusLabels, statusColors, currentNode, taskProgress } from "./domain.js";
10
+ import { useSession } from "../shared/session.js";
11
+ import { formatDate, tenantLabel } from "../shared/policy.js";
12
+ import { useColumns } from "../shared/columns.js";
13
+ import { useListSelection } from "../shared/listSelection.js";
14
+ import ListMore from "../shared/ListMore.js";
15
+ import ColumnSettings from "../shared/ColumnSettings.js";
16
+ import ListBatchBar from "../shared/ListBatchBar.js";
17
+ import ListDeleteDialog from "../shared/ListDeleteDialog.js";
18
+ import { createComponent } from '../../runtime/dom.js';
19
+ export default createComponent({ name: 'TasksPage', propKeys: [], template: new URL('./TasksPage.html', import.meta.url).href, setup(__props, __emit) {
20
+ const store = useTasks(), session = useSession(), router = useRouter(), query = ref(''), state = ref('all'), project = ref('all'), desc = ref(true), refreshing = ref(false), targets = ref([]), view = ref('列表');
21
+ const prefs = useColumns('tasks', [{ key: 'name', label: '任务名称', locked: true }, { key: 'project', label: '所属 PBC', defaultVisible: true }, { key: 'status', label: '任务状态', defaultVisible: true }, { key: 'stage', label: '当前阶段', defaultVisible: true }, { key: 'owner', label: '负责人', defaultVisible: true }, { key: 'createdBy', label: '创建人', defaultVisible: true }, { key: 'createdAt', label: '创建时间', defaultVisible: true }, { key: 'reason', label: '等待/阻塞原因' }, { key: 'code', label: '任务编号' }, { key: 'source', label: '来源规格' }, { key: 'tenantId', label: '所属租户' }, { key: 'createdDept', label: '创建部门' }, { key: 'updatedBy', label: '修改人' }, { key: 'updatedAt', label: '修改时间' }, { key: 'recordVersion', label: '记录版本' }, { key: 'actions', label: '操作', locked: true }]);
22
+ const canDelete = computed(() => session.can('task:delete'));
23
+ function remove(r) { targets.value = [{ id: r.id, name: r.name, recordVersion: r.recordVersion }]; }
24
+ const currentReview = (t) => canReadReview(session.actor, t) ? actionableReview(t) : undefined;
25
+ const taskLabel = (t) => { const r = currentReview(t); return taskReleaseLabel(t, session.actor) || (r ? stateLabels[reviewStatus(t, r)] : statusLabels[t.status]); };
26
+ function more(r) { return [{ key: 'release', label: '门禁与发布记录', disabled: !canReadReview(session.actor, r) }, { key: 'review', label: '质量与评审记录', disabled: !canReadReview(session.actor, r) }, { key: 'detail', label: '查看详情' }, { key: 'artifacts', label: '查看产物', disabled: !session.can('artifact:view', r.tenantId, r.binding.pbcId) || !r.artifacts.length }, { key: 'records', label: '操作记录', disabled: !session.can('task:audit', r.tenantId, r.binding.pbcId) }, { key: 'delete', label: '删除草稿', danger: true, disabled: !session.can('task:delete', r.tenantId, r.binding.pbcId) }]; }
27
+ function action(key, r) { if (key === 'release') {
28
+ router.push('/releases?task=' + r.id);
29
+ return;
30
+ } if (key === 'delete')
31
+ remove(r);
32
+ else if (key === 'review')
33
+ router.push(currentReview(r) ? reviewUrl(r.id, currentReview(r).id) : '/reviews?task=' + r.id);
34
+ else
35
+ router.push('/tasks/' + r.id + (key === 'artifacts' ? '?tab=artifacts' : key === 'records' ? '?tab=records' : '')); }
36
+ function actions(r) { return h('div', { class: 'row-actions' }, [h(Button, { type: 'link', disabled: r.status === 'draft' && !session.can('task:edit', r.tenantId, r.binding.pbcId), onClick: () => router.push('/tasks/' + r.id + (r.status === 'draft' ? '/edit' : '')) }, () => r.status === 'draft' ? '编辑' : '进度'), h(ListMore, { name: r.name, items: more(r), onAction: (k) => action(k, r) })]); }
37
+ const table = useTable({ pageParam: { current: 1, pageSize: 5, total: 0 }, columns: prefs.choices.map(c => ({ key: c.key, title: c.label, dataIndex: c.key, width: c.key === 'name' ? 240 : c.key === 'stage' ? 160 : c.key === 'actions' ? 130 : c.key.endsWith('At') ? 165 : c.key === 'reason' ? 250 : 110, fixed: c.key === 'actions' ? 'right' : undefined, ...(c.key === 'name' ? { render: (_, row) => { const r = row; return h('div', [h(Button, { type: 'link', class: 'agent-name', onClick: () => router.push('/tasks/' + r.id) }, () => r.name), h('small', { class: 'agent-code' }, () => r.code + (r.example ? ' · 预置样例' : ''))]); } } : c.key === 'actions' ? { render: (_, r) => actions(r) } : c.key === 'status' ? { render: (_, r) => h(Tag, { color: statusColors[r.status] }, () => taskLabel(r)) } : c.key === 'stage' ? { render: (_, r) => currentNode(r)?.name || '尚未启动' } : c.key === 'project' ? { render: (_, r) => r.binding.project } : c.key === 'source' ? { render: (_, r) => r.binding.spec.source.code + ' · 规格 v' + r.binding.spec.number } : c.key === 'tenantId' ? { render: (v) => tenantLabel(String(v)) } : c.key.endsWith('At') ? { render: (v) => formatDate(String(v)) } : {}) })) });
38
+ const columns = new Map(table.columns.value.map(c => [c.key, c]));
39
+ watch(prefs.keys, keys => table.columns.value = keys.map(k => columns.get(k)).filter(Boolean), { immediate: true });
40
+ const filtered = computed(() => store.scene === 'empty' ? [] : store.records.filter(r => (r.name + r.code + r.binding.spec.source.title + r.reason).toLowerCase().includes(query.value.trim().toLowerCase()) && (state.value === 'all' || r.status === state.value) && (project.value === 'all' || r.binding.project === project.value)).sort((a, b) => desc.value ? b.createdAt.localeCompare(a.createdAt) : a.createdAt.localeCompare(b.createdAt)));
41
+ watch([filtered, () => table.pageParam.current, () => table.pageParam.pageSize], () => { const size = table.pageParam.pageSize || 5, max = Math.max(1, Math.ceil(filtered.value.length / size)); if ((table.pageParam.current || 1) > max)
42
+ table.setPageParam({ current: max }); const start = ((table.pageParam.current || 1) - 1) * size; table.dataSource.value = filtered.value.slice(start, start + size); table.setPageParam({ total: filtered.value.length }); }, { immediate: true });
43
+ const selection = useListSelection(table.dataSource, computed(() => JSON.stringify([session.key, query.value, state.value, project.value, desc.value, view.value, table.pageParam.current, table.pageParam.pageSize])), canDelete, r => r.name);
44
+ watch([query, state, project], () => table.setPageParam({ current: 1 }));
45
+ const lanes = [{ name: '待开始 / 确认', states: ['draft', 'waiting'] }, { name: '执行中', states: ['running'] }, { name: '需要处理', states: ['failed', 'paused', 'manual'] }, { name: '质量与发布', states: ['ready'] }];
46
+ async function refresh() { selection.clear(); refreshing.value = true; await new Promise(r => setTimeout(r, 200)); store.scene = 'normal'; refreshing.value = false; }
47
+ return { computed, ref, watch, h, useRouter, Alert, Button, Input, Select, Space, Tag, Segmented, ProTable, useTable, actionableReview, canReadReview, reviewStatus, stateLabels, reviewUrl, taskReleaseLabel, hasPendingRelease, useTasks, statusLabels, statusColors, currentNode, taskProgress, useSession, formatDate, tenantLabel, useColumns, useListSelection, ListMore, ColumnSettings, ListBatchBar, ListDeleteDialog, store, session, router, query, state, project, desc, refreshing, targets, view, prefs, canDelete, remove, currentReview, taskLabel, more, action, actions, table, columns, filtered, selection, lanes, refresh };
48
+ } });
@@ -0,0 +1,204 @@
1
+ import { metadata } from "../shared/policy.js";
2
+ import { sections } from "../specs/domain.js";
3
+ export const clone = (v) => JSON.parse(JSON.stringify(v));
4
+ export const statusLabels = { draft: '草稿', running: '进行中', waiting: '待人工确认', failed: '需处理', paused: '已暂停', manual: '人工接管中', ready: '待后续发布确认' };
5
+ export const statusColors = { draft: 'default', running: 'blue', waiting: 'orange', failed: 'red', paused: 'default', manual: 'purple', ready: 'cyan' };
6
+ export const currentStage = (t) => t.stages.find(s => s.nodeId === t.currentId);
7
+ export const currentNode = (t) => t.binding.flow.body.nodes.find(n => n.id === t.currentId);
8
+ export const latestArtifact = (t, kind) => t.artifacts.find(a => a.kind === kind)?.versions.at(-1);
9
+ export function taskProgress(t) { const stages = t.stages.filter(s => !(t.releases?.some(r => !r.isDeleted) ? ['archive'] : ['publish', 'archive']).includes(t.binding.flow.body.nodes.find(n => n.id === s.nodeId).kind)); return Math.round(stages.filter(s => s.state === 'done' || s.state === 'skipped').length / stages.length * 100); }
10
+ export function taskEvent(t, actor, action, detail, at = new Date().toISOString()) { t.events.push({ id: crypto.randomUUID(), at, actor, action, detail, stageId: t.currentId, iteration: t.reworks }); }
11
+ export function newTask(binding, actor, name, note = '', at = new Date().toISOString()) {
12
+ if (!name.trim() || name.length > 80)
13
+ throw Error('请填写 1–80 字的任务名称。');
14
+ if (note.length > 1000)
15
+ throw Error('交付说明最多 1000 字。');
16
+ const id = crypto.randomUUID(), t = { ...metadata(actor, at, binding.tenantId), id, name: name.trim(), code: 'DEL-' + id.slice(0, 8).toUpperCase(), owner: actor.name, note, binding: clone(binding), status: 'draft', currentId: '', stages: binding.flow.body.nodes.map(n => ({ nodeId: n.id, state: 'pending', attempts: 0, detail: '尚未执行' })), artifacts: [], events: [], reason: '草稿尚未启动', reworks: 0, retryLimit: 2, prototypeApproved: false, checksPassed: false, reviewApproved: false, example: false };
17
+ taskEvent(t, actor.name, '创建草稿', '已保留来源与所选流程,启动前再次核对。', at);
18
+ return t;
19
+ }
20
+ export function artifact(t, kind, name, content, result = 'info', by = '交付引擎(模拟)') {
21
+ let a = t.artifacts.find(a => a.kind === kind);
22
+ if (!a) {
23
+ a = { id: kind, name, kind, versions: [] };
24
+ t.artifacts.push(a);
25
+ }
26
+ const inputs = t.artifacts.filter(x => x !== a && x.versions.length).map(x => ({ id: x.id, version: x.versions.at(-1).number }));
27
+ a.versions.push({ number: (a.versions.at(-1)?.number || 0) + 1, stageId: t.currentId || 'source', taskId: t.id, at: new Date().toISOString(), by, content, result, iteration: t.reworks, inputs });
28
+ }
29
+ export function enter(t, id) {
30
+ const node = t.binding.flow.body.nodes.find(n => n.id === id), stage = t.stages.find(s => s.nodeId === id);
31
+ if (!node || !stage)
32
+ throw Error('流程连线没有有效的目标节点。');
33
+ t.currentId = id;
34
+ stage.state = 'active';
35
+ stage.startedAt = new Date().toISOString();
36
+ stage.detail = '等待模拟事件';
37
+ t.status = 'running';
38
+ t.reason = '等待执行:' + node.name;
39
+ if (node.gate === 'production' || node.kind === 'publish') {
40
+ const v = latestArtifact(t, 'verify'), code = latestArtifact(t, 'code');
41
+ if (!t.prototypeApproved || !t.checksPassed || v?.result !== 'pass' || v.iteration !== t.reworks || !v.inputs.some(i => i.id === 'code' && i.version === code?.number))
42
+ throw Error('缺少针对本轮产物的有效独立验证,不能进入发布确认。');
43
+ }
44
+ if (node.kind === 'human') {
45
+ t.status = node.gate === 'production' ? 'ready' : 'waiting';
46
+ t.reason = node.gate === 'production' ? '本包演示至此:产物待后续质量与发布确认,尚未发布。' : '请核对绑定规格和交互原型,再由获授权的人确认。';
47
+ stage.detail = t.reason;
48
+ }
49
+ if (node.kind === 'publish' || node.kind === 'archive') {
50
+ t.status = 'ready';
51
+ t.reason = '生产发布与交付归档在后续原型中处理;当前未执行。';
52
+ stage.detail = t.reason;
53
+ }
54
+ }
55
+ function next(t, n) {
56
+ const edges = t.binding.flow.body.edges.filter(e => e.from === n.id);
57
+ const condition = n.condition === 'checks.passed' ? t.checksPassed : t.reviewApproved;
58
+ const edge = n.kind === 'branch' ? edges.find(e => e.label === (condition ? '满足' : '不满足')) : edges[0];
59
+ if (!edge)
60
+ throw Error('流程缺少下一阶段连线,不能继续。');
61
+ if (n.kind === 'branch') {
62
+ taskEvent(t, '交付引擎(模拟)', '条件分支', `${n.condition} = ${condition};选择「${edge.label}」。`);
63
+ const reachable = (id, seen = new Set()) => { if (seen.has(id))
64
+ return seen; seen.add(id); t.binding.flow.body.edges.filter(e => e.from === id).forEach(e => reachable(e.to, seen)); return seen; };
65
+ const chosen = reachable(edge.to);
66
+ for (const other of edges.filter(e => e !== edge))
67
+ for (const id of reachable(other.to))
68
+ if (!chosen.has(id)) {
69
+ const stage = t.stages.find(s => s.nodeId === id);
70
+ if (stage?.state === 'pending') {
71
+ stage.state = 'skipped';
72
+ stage.detail = '未命中本次分支';
73
+ }
74
+ }
75
+ }
76
+ enter(t, edge.to);
77
+ }
78
+ export function startTask(t, actor) {
79
+ if (t.status !== 'draft')
80
+ throw Error('该任务已经启动,请查看原任务,避免重复发起。');
81
+ const start = t.binding.flow.body.nodes.find(n => n.kind === 'start');
82
+ if (!start)
83
+ throw Error('缺少开始节点。');
84
+ t.startedAt = new Date().toISOString();
85
+ t.currentId = 'source';
86
+ artifact(t, 'spec', '需求规格', sections.map(section => section.label + '\n' + t.binding.spec.content[section.key]).join('\n\n'), 'info', t.binding.spec.confirmedBy || '演示样例');
87
+ artifact(t, 'prototype', '交互原型评审包', '交互样例 v1(仅本地预览)\n\n报修受理 → 核对地址和描述 → 获取建议及依据 → 获授权的人确认派单。\n\n必须展示:信息不足、缺少依据、无权限、建议版本变化与重复确认。\n页面参考绑定规格 pages / acceptance;此文本只是评审输入,确认前须阅读任务中的交互示意。');
88
+ taskEvent(t, actor, '启动任务', '固定规格 v' + t.binding.spec.number + ' / 交付流程 v' + t.binding.flow.number + ' / Agent 与模型引用版本。');
89
+ enter(t, start.id);
90
+ }
91
+ export function approveTask(t, actor, artifactVersion, note) {
92
+ const n = currentNode(t);
93
+ if (t.status !== 'waiting' || n?.kind !== 'human' || n.gate === 'production')
94
+ throw Error('当前阶段不接受此确认。');
95
+ if (!note.trim())
96
+ throw Error('请填写核对说明。');
97
+ if (latestArtifact(t, 'prototype')?.number !== artifactVersion)
98
+ throw Error('原型产物已变化,请重新核对后确认。');
99
+ t.prototypeApproved = true;
100
+ t.reviewApproved = true;
101
+ const s = currentStage(t);
102
+ s.state = 'done';
103
+ s.finishedAt = new Date().toISOString();
104
+ s.detail = actor + ' 已确认原型 v' + artifactVersion;
105
+ taskEvent(t, actor, '确认交互原型', '规格 v' + t.binding.spec.number + ' / 原型 v' + artifactVersion + ':' + note);
106
+ next(t, n);
107
+ }
108
+ export function advanceTask(t, outcome = 'pass') {
109
+ if (t.status !== 'running')
110
+ throw Error('当前任务不在可推进状态。');
111
+ const n = currentNode(t), s = currentStage(t);
112
+ if (!n || !s)
113
+ throw Error('当前阶段不存在。');
114
+ if (['human', 'publish', 'archive'].includes(n.kind))
115
+ throw Error('人工确认和生产发布不能由演示推进绕过。');
116
+ if (['agent', 'loop', 'tool', 'verify'].includes(n.kind) && !t.prototypeApproved)
117
+ throw Error('尚未确认交互原型,不能执行实现或验证。');
118
+ s.attempts++;
119
+ const agent = t.binding.agents.find(a => a.config.id === n.agentId), by = agent?.config.name + '(模拟)';
120
+ if (n.kind === 'agent' || n.kind === 'loop') {
121
+ if (t.approvedDesignVersion !== latestArtifact(t, 'design')?.number || !t.approvedDesignVersion)
122
+ artifact(t, 'design', '实现设计说明', `设计示例 · 第 ${t.reworks + 1} 轮\n绑定规格 v${t.binding.spec.number}\n\n输入:居民报修文本;输出:分类、建议班组、证据引用。\n模型仅生成建议;确认与派单由带权限、租户和幂等控制的业务服务处理。\nFR-004 → 主管确认接口必须绑定建议版本。\nFR-005 → 重复操作先查询已有派单结果。\n实际实现、接口契约与测试尚未开发。`, 'info', by);
123
+ artifact(t, 'code', '代码变更', `变更示例 · 第 ${t.reworks + 1} 轮(未提交仓库)\n\n+ requirePermission("workorder:confirm", tenant, building);\n+ assertSuggestionVersion(request.suggestionVersion);\n${t.reworks ? '+ return dispatchOnce(request.idempotencyKey, confirmedSuggestion);' : '- return dispatch(confirmedSuggestion);\n+ // 待验证:重复确认与响应丢失的处理。'}\n\n示意片段仅用于原型评审,不能直接投产。`, outcome === 'fail' ? 'fail' : 'info', by);
124
+ }
125
+ if (n.kind === 'loop' && outcome === 'pass') {
126
+ t.checksPassed = true;
127
+ artifact(t, 'test', '质量检查报告', '有限修复子流程内的复检(模拟)\n代码 v' + latestArtifact(t, 'code')?.number + '\n示例通过,仍须独立验证。', 'pass', by);
128
+ }
129
+ if (n.kind === 'tool') {
130
+ t.checksPassed = outcome === 'pass';
131
+ artifact(t, n.tool === 'ci-check' ? 'test' : 'tool', n.tool === 'ci-check' ? '质量检查报告' : '工具结果', `工具执行示例:${n.tool}\n代码 v${latestArtifact(t, 'code')?.number || '—'}\n${outcome === 'pass' ? '示例检查通过;并非真实 CI 运行结果。' : '模拟失败:检查服务超时;已有输入和产物仍保留。'}\n验收映射:AC-001.1 信息不足;AC-002.1 授权范围;AC-003.1/2 确认版本与重复请求。`, outcome, '项目工具(模拟)');
132
+ }
133
+ if (n.kind === 'verify') {
134
+ if (!t.checksPassed)
135
+ throw Error('需要本轮质量检查通过后再独立验证。');
136
+ if (t.binding.flow.body.nodes.some(x => ['agent', 'loop'].includes(x.kind) && x.agentId === n.agentId))
137
+ throw Error('验证 Agent 不能同时实现或修复本任务。');
138
+ artifact(t, 'verify', '独立验证报告', `独立验证示例 · 代码 v${latestArtifact(t, 'code')?.number}\n规格 v${t.binding.spec.number} / 第 ${t.reworks + 1} 轮\n${outcome === 'pass' ? '示例结论:本轮证据已对照,等待后续人工质量与发布确认。' : '示例问题:AC-003.2 响应丢失后重复确认,仍可能重复派单。修复后须重新运行质量检查与独立验证。'}\n执行者:${agent?.config.name},与实现 Agent 分离。此处没有启动真实独立上下文。`, outcome, by);
139
+ }
140
+ s.finishedAt = new Date().toISOString();
141
+ const handlesCheckResult = n.kind === 'tool' && n.tool === 'ci-check' && t.binding.flow.body.edges.some(e => e.from === n.id && t.binding.flow.body.nodes.some(x => x.id === e.to && x.kind === 'branch' && x.condition === 'checks.passed'));
142
+ if (outcome === 'fail' && !handlesCheckResult && !['start', 'branch'].includes(n.kind)) {
143
+ s.state = 'failed';
144
+ s.detail = n.kind === 'verify' ? '独立验证发现重复派单问题(模拟)' : '阶段执行失败(模拟),可在原任务处理';
145
+ t.status = 'failed';
146
+ t.reason = s.detail;
147
+ taskEvent(t, '交付引擎(模拟)', '阶段失败', s.detail);
148
+ return;
149
+ }
150
+ s.state = 'done';
151
+ s.detail = outcome === 'fail' ? '检查未通过,转条件分支处理(模拟)' : '已完成(模拟)';
152
+ taskEvent(t, '交付引擎(模拟)', '阶段完成', n.name);
153
+ next(t, n);
154
+ }
155
+ export const retryBudget = (t) => currentNode(t)?.kind === 'loop' ? Math.min(t.retryLimit, currentNode(t)?.limit || 1) : t.retryLimit;
156
+ export function retryTask(t, actor, note) {
157
+ if (t.status !== 'failed')
158
+ throw Error('只有失败阶段可以重试或返工。');
159
+ if (!note.trim())
160
+ throw Error('请填写处理说明。');
161
+ const n = currentNode(t), limit = retryBudget(t);
162
+ if (t.reworks >= limit)
163
+ throw Error('已达到本原型的有限处理次数,请人工接管。');
164
+ t.reworks++;
165
+ if (n.kind === 'verify') {
166
+ const build = t.binding.flow.body.nodes.find(x => ['agent', 'loop'].includes(x.kind));
167
+ if (!build)
168
+ throw Error('没有可返工的实现阶段。');
169
+ const reset = (id, seen = new Set()) => { if (seen.has(id))
170
+ return; seen.add(id); const s = t.stages.find(s => s.nodeId === id); s.state = 'pending'; s.detail = '待本轮重新执行'; delete s.finishedAt; t.binding.flow.body.edges.filter(e => e.from === id).forEach(e => reset(e.to, seen)); };
171
+ reset(build.id);
172
+ t.checksPassed = false;
173
+ enter(t, build.id);
174
+ }
175
+ else
176
+ enter(t, n.id);
177
+ taskEvent(t, actor, n.kind === 'verify' ? '发起返工' : '重试阶段', `第 ${t.reworks}/${limit} 次:${note};旧产物保留。`);
178
+ }
179
+ export function controlTask(t, action, actor, note) {
180
+ if (t.releases?.some(r => !r.isDeleted && r.startedAt))
181
+ throw Error('此任务已进入发布,请从门禁与发布处理暂停、恢复或回滚。');
182
+ if (!note.trim())
183
+ throw Error('请填写操作原因。');
184
+ if (action === 'resume') {
185
+ if (!['paused', 'manual'].includes(t.status) || !t.previousStatus)
186
+ throw Error('当前任务无需恢复。');
187
+ t.status = t.previousStatus;
188
+ delete t.previousStatus;
189
+ t.reason = currentStage(t)?.detail || '继续当前阶段';
190
+ }
191
+ else {
192
+ if (t.status === 'draft' || (t.status === 'ready' && action !== 'takeover') || (action === 'pause' && !['running', 'waiting'].includes(t.status)) || (action === 'takeover' && t.status === 'manual'))
193
+ throw Error('当前状态不能执行此操作。');
194
+ if (t.status !== 'paused')
195
+ t.previousStatus = t.status;
196
+ t.status = action === 'pause' ? 'paused' : 'manual';
197
+ if (action === 'takeover')
198
+ t.owner = actor;
199
+ t.reason = note;
200
+ }
201
+ taskEvent(t, actor, { pause: '暂停任务', resume: '恢复任务', takeover: '人工接管' }[action], note + ';保留阶段和产物,不代替验证或批准。');
202
+ }
203
+ export function assertTaskRemovable(t) { if (t.startedAt || t.status !== 'draft')
204
+ throw Error('任务已启动,执行记录与产物须保留;仅草稿可删除。'); }
@@ -0,0 +1,22 @@
1
+ import { actors } from "../shared/policy.js";
2
+ import { seedIntents } from "../intents/data.js";
3
+ import { generatedContent, generatedDecisions } from "../specs/data.js";
4
+ import { newSpec, appendVersion, sourceOf } from "../specs/domain.js";
5
+ import { seedPbcs } from "../pbc/data.js";
6
+ import { makeJob } from "../pbc/domain.js";
7
+ export function exampleSource(intentId = 'seed-spec-heating') {
8
+ const intent = seedIntents().find(i => i.id === intentId), actor = actors.find(a => a.id === 'complete'), at = '2026-09-11T10:00:00.000Z';
9
+ let spec = newSpec(intent, actor, at);
10
+ const decisions = generatedDecisions().map(d => ({ ...d, answer: d.options[0], reason: '预置演示样例:仅用隔离样本,不代表真实用户决定。', resolvedBy: '演示样例', resolvedAt: at }));
11
+ spec = appendVersion(spec, sourceOf(intent), generatedContent(intent), decisions, 'PT-04 预置样例', actor, at);
12
+ spec.id = 'example-spec-heating';
13
+ Object.assign(spec.versions[0], { confirmedBy: '演示样例(预置)', confirmedAt: at });
14
+ const job = makeJob(intent, spec, actor, seedPbcs()[0]);
15
+ job.id = 'example-pbc-heating';
16
+ job.status = 'done';
17
+ job.steps.forEach(s => { s.state = 'done'; s.detail = '预置归属演示,未创建真实工程'; });
18
+ job.events = [{ at, actor: '演示样例', text: '预置供热工单 PBC 归属,供任务主线评审使用' }];
19
+ return { intent, spec, job };
20
+ }
21
+ export const seedTaskSpecs = () => { const created = exampleSource('seed-pbc-create').spec; created.id = 'example-spec-pbc-create'; return [exampleSource().spec, created]; };
22
+ export const seedTaskJobs = () => [exampleSource().job];
@@ -0,0 +1,135 @@
1
+ import { ref } from '../../runtime/state.js';
2
+ import { actors } from "../shared/policy.js";
3
+ import { seedFlows } from "../workflows/data.js";
4
+ import { seedAgents } from "../agents/data.js";
5
+ import { exampleSource } from "./exampleSource.js";
6
+ import { newTask, startTask, advanceTask, approveTask, controlTask } from "./domain.js";
7
+ const storage = 'i3-prototype-antdv-tasks-v010';
8
+ export function seedTasks() {
9
+ const { spec, job } = exampleSource(), flow = seedFlows()[0], actor = actors[0];
10
+ const binding = { intentId: spec.intentId, spec: spec.versions[0], specRecordVersion: spec.recordVersion, pbcId: job.pbc.id, project: job.pbc.name, tenantId: job.tenantId, flowId: flow.id, flowRecordVersion: flow.recordVersion, flow: flow.versions[0], agents: seedAgents().filter(a => ['agent-1', 'agent-2'].includes(a.id)).map(config => ({ config, model: { id: 'demo-1', name: '通用对话模型', version: 1 } })) };
11
+ return ['AI 智能分诊 · 原型待确认', 'AI 智能分诊 · 验证问题处理', 'AI 智能分诊 · 暂停检查', 'AI 智能分诊 · 待后续确认', 'AI 智能分诊 · 交付草稿', 'AI 智能分诊 · 备用草稿', 'AI 智能分诊 · A 档机器检查', 'AI 智能分诊 · 敏感停点处理'].map((name, i) => {
12
+ const t = newTask(binding, actor, name, '预置任务样例;所有阶段和产物均为模拟。', `2026-09-11T10:0${i}:00.000Z`);
13
+ t.id = 'task-example-' + i;
14
+ t.code = 'DEL-20260911-00' + (i + 1);
15
+ t.example = true;
16
+ t.reviewPolicy = { grade: i === 6 ? 'A' : i === 7 ? 'C' : 'B', humanQuality: i !== 6, veto: i === 7, reason: i === 6 ? '预置A档样例:当前质量点无额外人工批准;生产发布仍需人工。' : i === 7 ? '预置C档样例:存在敏感停点,不能自动或人工一键跳过。' : '预置B档交付验收样例:保留当前人工确认点;不据此配置其他任务。' };
17
+ if (i === 4 || i === 5)
18
+ return t;
19
+ startTask(t, '演示样例');
20
+ advanceTask(t);
21
+ if (i === 0)
22
+ return t;
23
+ approveTask(t, '演示样例', 1, '预置确认,用于演示后续阶段,不代表用户已认可原型。');
24
+ advanceTask(t);
25
+ if (i === 2) {
26
+ controlTask(t, 'pause', '陈敏', '等待检查窗口(预置演示)');
27
+ return t;
28
+ }
29
+ advanceTask(t);
30
+ advanceTask(t, i === 1 ? 'fail' : 'pass');
31
+ return t;
32
+ });
33
+ }
34
+ export const taskRecords = ref(seedTasks());
35
+ export const taskReadError = ref('');
36
+ try {
37
+ const saved = localStorage.getItem(storage);
38
+ if (saved) {
39
+ const rows = JSON.parse(saved);
40
+ if (!Array.isArray(rows))
41
+ throw Error();
42
+ taskRecords.value = rows;
43
+ }
44
+ }
45
+ catch {
46
+ taskReadError.value = '交付任务本地数据读取失败,已加载预置样例;不会自动覆盖原数据。';
47
+ }
48
+ export function commitTasks(rows, expected) {
49
+ let next = rows;
50
+ try {
51
+ if (expected) {
52
+ const raw = localStorage.getItem(storage);
53
+ if (raw) {
54
+ const fresh = JSON.parse(raw);
55
+ if (!Array.isArray(fresh))
56
+ throw Error('本地任务数据无法解析,请先重新加载核对。');
57
+ const before = fresh.find(t => t.id === expected.id);
58
+ if (!before || before.isDeleted || before.recordVersion !== expected.version) {
59
+ taskRecords.value = fresh;
60
+ throw Error('任务已在其他页面更新,请核对最新版本;本次输入保留。');
61
+ }
62
+ const changed = rows.find(t => t.id === expected.id);
63
+ next = [changed, ...fresh.filter(t => t.id !== expected.id)];
64
+ }
65
+ }
66
+ localStorage.setItem(storage, JSON.stringify(next));
67
+ }
68
+ catch (error) {
69
+ throw Error(error instanceof Error && /更新|解析/.test(error.message) ? error.message : '浏览器保存失败,操作未提交;请保留输入并重试。');
70
+ }
71
+ taskRecords.value = next;
72
+ taskReadError.value = '';
73
+ }
74
+ if (typeof window !== 'undefined')
75
+ window.addEventListener('storage', event => { if (event.key === storage && event.newValue) {
76
+ try {
77
+ const rows = JSON.parse(event.newValue);
78
+ if (Array.isArray(rows)) {
79
+ taskRecords.value = rows;
80
+ taskReadError.value = '';
81
+ }
82
+ }
83
+ catch {
84
+ taskReadError.value = '其他页面写入的任务记录无法读取,请重新加载核对。';
85
+ }
86
+ } });
87
+ export function taskFlowReferenced(id) { return taskRecords.value.some(t => !t.isDeleted && t.binding.flowId === id); }
88
+ export function taskAgentReferences(id) { return taskRecords.value.filter(t => !t.isDeleted && t.binding.agents.some(a => a.config.id === id)).map(t => ({ name: t.name, version: '交付任务 ' + t.code })); }
89
+ // One local write for all parent tasks; retain unrelated changes from another tab.
90
+ export function commitTaskChanges(changes, expected) {
91
+ if (taskReadError.value)
92
+ throw Error(taskReadError.value);
93
+ let fresh;
94
+ try {
95
+ const raw = localStorage.getItem(storage);
96
+ fresh = raw ? JSON.parse(raw) : taskRecords.value;
97
+ if (!Array.isArray(fresh))
98
+ throw Error();
99
+ }
100
+ catch {
101
+ throw Error('本地任务数据无法读取,本次未提交。');
102
+ }
103
+ for (const e of expected) {
104
+ const before = fresh.find(t => t.id === e.id);
105
+ if (e.version === undefined ? !!before : !before || before.isDeleted || before.recordVersion !== e.version) {
106
+ taskRecords.value = fresh;
107
+ throw Error('任务已在其他页面更新,请核对最新版本;本次输入保留。');
108
+ }
109
+ }
110
+ const ids = new Set(changes.map(t => t.id)), next = [...changes, ...fresh.filter(t => !ids.has(t.id))];
111
+ try {
112
+ localStorage.setItem(storage, JSON.stringify(next));
113
+ }
114
+ catch {
115
+ throw Error('浏览器保存失败,操作未提交,请保留输入并重试。');
116
+ }
117
+ taskRecords.value = next;
118
+ }
119
+ export function refreshTaskRecords() {
120
+ try {
121
+ const raw = localStorage.getItem(storage);
122
+ if (raw) {
123
+ const fresh = JSON.parse(raw);
124
+ if (!Array.isArray(fresh))
125
+ throw Error();
126
+ taskRecords.value = fresh;
127
+ }
128
+ if (taskReadError.value)
129
+ throw Error(taskReadError.value);
130
+ }
131
+ catch {
132
+ throw Error('任务数据无法读取,请先刷新核对;本次未保存。');
133
+ }
134
+ return taskRecords.value;
135
+ }
@@ -0,0 +1,137 @@
1
+ import { reviewsForTask, retainReviews, sameRequest, actionPermission } from "../reviews/model.js";
2
+ import { decideReview, validateDesign } from "../reviews/commands.js";
3
+ import { stateOf } from "../pbc/management.js";
4
+ import { computed, ref } from '../../runtime/state.js';
5
+ import { defineStore } from "../../runtime/state.js";
6
+ import { useSession } from "../shared/session.js";
7
+ import { assertBatch } from "../shared/listBatch.js";
8
+ import { useSpecs } from "../specs/store.js";
9
+ import { useIntents } from "../intents/store.js";
10
+ import { usePbcs } from "../pbc/store.js";
11
+ import { useWorkflows } from "../workflows/store.js";
12
+ import { useAgents } from "../agents/store.js";
13
+ import { currentVersion, sourceOf, specBusy } from "../specs/domain.js";
14
+ import { taskRecords, taskReadError, commitTasks, seedTasks } from "./registry.js";
15
+ import { clone, newTask, startTask, advanceTask, approveTask, retryTask, controlTask, assertTaskRemovable, taskEvent, currentNode } from "./domain.js";
16
+ export const useTasks = defineStore('tasks', () => {
17
+ const session = useSession(), specs = useSpecs(), intents = useIntents(), pbcs = usePbcs(), flows = useWorkflows(), agents = useAgents(), scene = ref('normal');
18
+ const records = computed(() => taskRecords.value.filter(t => !t.isDeleted && session.can('task:view', t.tenantId, t.binding.pbcId))), item = (id) => records.value.find(t => t.id === id);
19
+ const sources = computed(() => specs.items.map(s => { const i = intents.get(s.intentId), v = currentVersion(s), job = pbcs.job(s.intentId); let reason = ''; try {
20
+ if (!i || !v?.confirmedAt)
21
+ throw Error('需求规格尚未确认');
22
+ if (specBusy(s))
23
+ throw Error('规格正在更新或确认结果待核实');
24
+ if (sourceOf(i).version !== v.source.version)
25
+ throw Error('来源意图已有新版本');
26
+ if (!job || job.status !== 'done')
27
+ throw Error('PBC 归属尚未完成');
28
+ if (!pbcs.items.some(p => p.id === job.pbc.id && p.tenantId === s.tenantId && stateOf(p) === 'active'))
29
+ throw Error('PBC 已不可用或超出授权范围');
30
+ if (job.specVersion !== v.number || job.sourceVersion !== v.source.version)
31
+ throw Error('规格与既有 PBC 归属版本不一致');
32
+ if (!session.can('task:create', s.tenantId, job.pbc.id))
33
+ throw Error('没有此 PBC 的创建任务权限');
34
+ }
35
+ catch (e) {
36
+ reason = e.message;
37
+ } return { id: s.intentId, title: v?.source.title || '尚无规格', spec: s, version: v, job, reason }; }));
38
+ function flowChoices(intentId) { const s = sources.value.find(s => s.id === intentId); return flows.records.filter(f => f.enabled && f.versions.length && s?.job?.pbc.id === f.pbcId && f.tenantId === s.spec.tenantId && session.can('workflow:use', f.tenantId, f.pbcId)); }
39
+ function binding(intentId, flowId, number) {
40
+ const s = sources.value.find(s => s.id === intentId);
41
+ if (!s || s.reason || !s.version || !s.job)
42
+ throw Error(s?.reason || '没有可用的规格与 PBC 归属,请先完成确认。');
43
+ const f = flowChoices(intentId).find(f => f.id === flowId), version = f?.versions.find(v => v.number === number);
44
+ if (!f || !version)
45
+ throw Error('请选择同一 PBC 下可用的已发布交付流程版本。');
46
+ const failed = flows.checks(f, version.body).filter(c => !c.ok);
47
+ if (failed.length)
48
+ throw Error(failed.map(c => c.title + ':' + c.detail).join(';'));
49
+ const bindings = [...new Set(version.body.nodes.map(n => n.agentId).filter(Boolean))].map(id => { const a = agents.item(id); if (!a || !a.enabled)
50
+ throw Error('流程引用的 Agent 不可用或无权查看'); const m = agents.choices(a).find(m => m.id === a.modelRef); if (!m?.version)
51
+ throw Error('模型没有可用发布版本'); return { config: { ...clone(a), references: [] }, model: { id: m.id, name: m.name, version: m.version } }; });
52
+ return clone({ intentId, spec: s.version, specRecordVersion: s.spec.recordVersion, pbcId: s.job.pbc.id, project: pbcs.items.find(p => p.id === s.job.pbc.id).name, tenantId: s.spec.tenantId, flowId, flowRecordVersion: f.recordVersion, flow: version, agents: bindings });
53
+ }
54
+ function current(id, action, expected) { const t = item(id); if (!t)
55
+ throw Error('任务不存在或无权访问。'); session.require(action, t.tenantId, t.binding.pbcId); if (expected !== t.recordVersion)
56
+ throw Error('任务记录已更新,请重新打开核对后操作。'); return clone(t); }
57
+ function persist(t, action, detail) { const old = taskRecords.value.find(x => x.id === t.id); retainReviews(old, t); t.recordVersion = (old?.recordVersion || 0) + 1; t.updatedBy = session.actor.name; t.updatedAt = new Date().toISOString(); taskEvent(t, session.actor.name, action, detail); commitTasks([t, ...taskRecords.value.filter(x => x.id !== t.id)], old ? { id: old.id, version: old.recordVersion } : undefined); return t; }
58
+ function sourceCheck(b) { const fresh = binding(b.intentId, b.flowId, b.flow.number); if (JSON.stringify(fresh) !== JSON.stringify(b))
59
+ throw Error('来源、流程或资源版本已变化,请返回创建页重新核对。'); }
60
+ function resources(t) { for (const b of t.binding.agents) {
61
+ const a = agents.item(b.config.id);
62
+ if (!a || !a.enabled)
63
+ throw Error('任务引用的 Agent 已停用或不可访问,请先处理资源配置。');
64
+ const failures = agents.checks(b.config).filter(c => !c.ok);
65
+ if (failures.length)
66
+ throw Error('绑定资源暂不可用:' + failures.map(c => c.detail).join(';'));
67
+ } return true; }
68
+ function create(b, name, note, start, requestId) {
69
+ session.require('task:create', b.tenantId, b.pbcId);
70
+ session.require('task:view', b.tenantId, b.pbcId);
71
+ if (start)
72
+ session.require('task:operate', b.tenantId, b.pbcId);
73
+ const existing = taskRecords.value.find(t => t.id === requestId);
74
+ if (existing) {
75
+ if (existing.isDeleted || existing.name !== name.trim() || existing.note !== note || JSON.stringify(existing.binding) !== JSON.stringify(b))
76
+ throw Error('此提交编号已使用,请重新核对后创建。');
77
+ return existing;
78
+ }
79
+ sourceCheck(b);
80
+ session.writeCheck();
81
+ const t = newTask(b, session.actor, name, note);
82
+ t.id = requestId;
83
+ t.code = 'DEL-' + requestId.slice(0, 8).toUpperCase();
84
+ if (start)
85
+ startTask(t, session.actor.name);
86
+ return persist(t, start ? '创建并启动' : '保存草稿', '来源 ' + b.spec.source.code + ' / 规格 v' + b.spec.number + ' / 流程 v' + b.flow.number);
87
+ }
88
+ function edit(id, expected, b, name, note) { const t = current(id, 'task:edit', expected); assertTaskRemovable(t); if (b.pbcId !== t.binding.pbcId || b.tenantId !== t.tenantId)
89
+ throw Error('草稿不能跨 PBC 改绑,请另建任务。'); sourceCheck(b); newTask(b, session.actor, name, note); session.writeCheck(); t.name = name.trim(); t.note = note; t.binding = clone(b); t.stages = b.flow.body.nodes.map(n => ({ nodeId: n.id, state: 'pending', attempts: 0, detail: '尚未执行' })); return persist(t, '修改草稿', '重新核对所选来源和流程版本。'); }
90
+ function start(id, expected) { const t = current(id, 'task:operate', expected); sourceCheck(t.binding); session.writeCheck(); startTask(t, session.actor.name); return persist(t, '开始交付', '仅启动本地交互演示。'); }
91
+ function advance(id, expected, result) { const t = current(id, 'task:operate', expected); if (currentNode(t)?.agentId || currentNode(t)?.kind === 'tool')
92
+ resources(t); session.writeCheck(); advanceTask(t, result); return persist(t, '接收模拟事件', '未调用真实 Agent、工具或 CI。'); }
93
+ function approve(id, expected, version, note) { const t = current(id, 'workflow:approve', expected); session.writeCheck(); approveTask(t, session.actor.name, version, note); return persist(t, '保留确认凭据', '此确认属于本地任务演示。'); }
94
+ function retry(id, expected, note) { const t = current(id, 'task:operate', expected); resources(t); session.writeCheck(); retryTask(t, session.actor.name, note); return persist(t, '保存处理结果', '继续使用原任务和绑定版本。'); }
95
+ function control(id, expected, action, note) { const t = current(id, action === 'takeover' ? 'task:takeover' : 'task:operate', expected); if (action === 'resume')
96
+ resources(t); session.writeCheck(); controlTask(t, action, session.actor.name, note); return persist(t, '保存任务控制', action); }
97
+ function checkRemove(target) { assertTaskRemovable(current(target.id, 'task:delete', target.recordVersion)); }
98
+ function removeMany(targets) { const selected = assertBatch(taskRecords.value, targets, t => { session.require('task:view', t.tenantId, t.binding.pbcId); session.require('task:delete', t.tenantId, t.binding.pbcId); assertTaskRemovable(t); }); session.writeCheck(); const ids = new Set(selected.map(t => t.id)), at = new Date().toISOString(); const next = taskRecords.value.map(old => { const t = clone(old); if (ids.has(t.id)) {
99
+ t.isDeleted = true;
100
+ t.recordVersion++;
101
+ t.updatedBy = session.actor.name;
102
+ t.updatedAt = at;
103
+ taskEvent(t, session.actor.name, '删除草稿', '逻辑删除;本批 ' + ids.size + ' 项');
104
+ } return t; }); commitTasks(next); }
105
+ function review(id, expected, reviewId, payload) {
106
+ session.require(actionPermission[payload.action]);
107
+ const existing = item(id);
108
+ if (!existing)
109
+ throw Error('任务不存在或无权访问。');
110
+ session.require('artifact:view', existing.tenantId, existing.binding.pbcId);
111
+ session.require(actionPermission[payload.action], existing.tenantId, existing.binding.pbcId);
112
+ const prior = sameRequest(existing, reviewId, payload);
113
+ if (prior)
114
+ return { receipt: prior, unknown: false, replayed: true };
115
+ const t = current(id, actionPermission[payload.action], expected);
116
+ session.writeCheck();
117
+ const result = session.confirmResult;
118
+ session.confirmResult = 'success';
119
+ if (result === 'failure')
120
+ throw Error('提交未保存(模拟服务失败),请保留输入重试。');
121
+ const receipt = decideReview(t, reviewId, session.actor, payload);
122
+ persist(t, '保存评审处理', '处理结果与原任务一次提交,原型未调用真实服务。');
123
+ return { receipt, unknown: result === 'unknown', replayed: false };
124
+ }
125
+ function reviewValidation(id, expected, reviewId, result) {
126
+ const t = current(id, 'task:operate', expected);
127
+ session.require('artifact:view', t.tenantId, t.binding.pbcId);
128
+ resources(t);
129
+ session.writeCheck();
130
+ validateDesign(t, reviewId, result);
131
+ return persist(t, '接收模拟复核', '仅对当前设计版本模拟检查,不改写历史结果。');
132
+ }
133
+ function reviewReceipt(id, requestId) { const t = item(id); if (!t)
134
+ throw Error('任务不存在或无权访问。'); session.require('artifact:view', t.tenantId, t.binding.pbcId); return reviewsForTask(t).find(r => r.decision?.requestId === requestId)?.decision; }
135
+ function reset() { commitTasks(seedTasks()); scene.value = 'normal'; }
136
+ return { records, item, sources, flowChoices, binding, scene, notice: taskReadError, create, edit, start, advance, approve, retry, control, review, reviewValidation, reviewReceipt, checkRemove, removeMany, reset };
137
+ });