@givolt/i3-composer-agent 3.1.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (677) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude/commands/i3-build.md +1 -0
  3. package/.claude/commands/i3-code-simplify.md +1 -0
  4. package/.claude/commands/i3-constraints.md +1 -0
  5. package/.claude/commands/i3-plan.md +1 -0
  6. package/.claude/commands/i3-review.md +1 -0
  7. package/.claude/commands/i3-ship.md +1 -0
  8. package/.claude/commands/i3-sop.md +3 -3
  9. package/.claude/commands/i3-spec.md +1 -0
  10. package/.claude/commands/i3-test.md +1 -0
  11. package/.claude/commands/i3-webperf.md +1 -0
  12. package/.claude-plugin/marketplace.json +1 -1
  13. package/.claude-plugin/plugin.json +1 -1
  14. package/.codex-plugin/plugin.json +2 -2
  15. package/.gemini/commands/i3-sop.toml +3 -3
  16. package/README.md +44 -43
  17. package/bin/i3-composer-agent.cjs +4 -59
  18. package/bin/install.cjs +6 -14
  19. package/bin/native-layout.cjs +11 -2
  20. package/bin/native-migration.cjs +68 -28
  21. package/bin/retired-custom-fingerprints.json +1597 -0
  22. package/bin/wizard.cjs +2 -13
  23. package/commands/i3-sop.toml +3 -3
  24. package/docs/antigravity-setup.md +3 -1
  25. package/docs/codebuddy-setup.md +19 -76
  26. package/docs/codex-setup.md +10 -4
  27. package/docs/comparison.md +1 -1
  28. package/docs/copilot-cli-setup.md +4 -4
  29. package/docs/cursor-setup.md +1 -1
  30. package/docs/gemini-cli-setup.md +1 -1
  31. package/docs/other-hosts.md +2 -2
  32. package/docs/windsurf-setup.md +2 -2
  33. package/docs/workbuddy-setup.md +9 -16
  34. package/evals/README.md +10 -0
  35. package/evals/cases/i3-code-simplification.json +8 -0
  36. package/evals/cases/i3-documentation-and-adrs.json +4 -0
  37. package/evals/cases/i3-enterprise-sop.json +70 -32
  38. package/evals/cases/i3-frontend-ui-engineering.json +1 -1
  39. package/evals/cases/i3-security-and-hardening.json +4 -0
  40. package/evals/cases/i3-ui-demo.json +2 -2
  41. package/evals/cases/i3-using-agent-skills.json +5 -5
  42. package/evals/plugin/simplify-fires-on-pasted-function/graders/behavior-kept-and-explained.md +7 -0
  43. package/evals/plugin/simplify-fires-on-pasted-function/graders/skill-fired.md +5 -0
  44. package/evals/plugin/simplify-fires-on-pasted-function/prompt.md +30 -0
  45. package/evals/plugin/simplify-stays-quiet-on-make-it-fast/graders/not-fired.md +8 -0
  46. package/evals/plugin/simplify-stays-quiet-on-make-it-fast/prompt.md +20 -0
  47. package/evals/zh-CN/cases/i3-code-simplification.json +8 -0
  48. package/evals/zh-CN/cases/i3-documentation-and-adrs.json +4 -0
  49. package/evals/zh-CN/cases/i3-enterprise-sop.json +77 -31
  50. package/evals/zh-CN/cases/i3-frontend-ui-engineering.json +2 -2
  51. package/evals/zh-CN/cases/i3-security-and-hardening.json +4 -0
  52. package/evals/zh-CN/cases/i3-ui-demo.json +2 -2
  53. package/evals/zh-CN/cases/i3-using-agent-skills.json +6 -6
  54. package/hooks/SDD-CACHE.md +1 -1
  55. package/package.json +13 -102
  56. package/plugin.json +15 -2
  57. package/references/accessibility-checklist.md +4 -4
  58. package/references/performance-checklist.md +5 -4
  59. package/references/testing-patterns.md +2 -1
  60. package/scripts/floor-guard-reference-test.js +32 -0
  61. package/scripts/lib/execution-status.js +44 -0
  62. package/scripts/run-evals-test.js +157 -7
  63. package/scripts/run-evals.js +59 -12
  64. package/scripts/ui-demo-test.js +2 -2
  65. package/scripts/validate-artifact-paths-test.js +14 -0
  66. package/scripts/validate-artifact-paths.js +4 -2
  67. package/skills/i3-api-and-interface-design/SKILL.md +3 -1
  68. package/skills/i3-ci-cd-and-automation/SKILL.md +7 -4
  69. package/skills/i3-code-simplification/SKILL.md +3 -3
  70. package/skills/i3-constraint-driven-development/SKILL.md +4 -4
  71. package/skills/i3-constraint-driven-development/references/floor-guard.md +2 -2
  72. package/skills/i3-context-engineering/SKILL.md +1 -1
  73. package/skills/i3-debugging-and-error-recovery/SKILL.md +1 -1
  74. package/skills/i3-deprecation-and-migration/SKILL.md +6 -1
  75. package/skills/i3-documentation-and-adrs/SKILL.md +3 -2
  76. package/skills/i3-enterprise-sop/SKILL.md +121 -94
  77. package/skills/i3-enterprise-sop/references/engineering-skeleton/directory-standard.md +31 -17
  78. package/skills/i3-enterprise-sop/references/handoff.py +235 -135
  79. package/skills/i3-enterprise-sop/references/read_text.py +60 -0
  80. package/skills/i3-enterprise-sop/references/technical-baseline/baselines/enterprise-application-technical-baseline-v0-0-4.md +47 -47
  81. package/skills/i3-enterprise-sop/references/technical-baseline/readme.md +9 -118
  82. package/skills/i3-enterprise-sop/references/technical-baseline/templates/technical-baseline.md +8 -8
  83. package/skills/i3-enterprise-sop/references/{ad/templates → templates}/ad.md +57 -50
  84. package/skills/i3-enterprise-sop/references/{brd/templates → templates}/brd.md +23 -12
  85. package/skills/i3-enterprise-sop/references/{prd/templates → templates}/prd.md +84 -51
  86. package/skills/i3-enterprise-sop/references/{testcase/templates → templates}/testcase.md +49 -39
  87. package/skills/i3-frontend-ui-engineering/SKILL.md +6 -10
  88. package/skills/i3-idea-refine/SKILL.md +4 -2
  89. package/skills/i3-incremental-implementation/SKILL.md +0 -4
  90. package/skills/i3-performance-optimization/SKILL.md +2 -2
  91. package/skills/i3-security-and-hardening/references/hardening-patterns.md +5 -0
  92. package/skills/i3-source-driven-development/SKILL.md +3 -2
  93. package/skills/i3-spec-driven-development/SKILL.md +1 -1
  94. package/skills/i3-ui-demo/SKILL.md +3 -1
  95. package/skills/i3-ui-demo/references/dependencies.md +1 -1
  96. package/skills/i3-ui-demo/references/resources.md +1 -1
  97. package/skills/i3-ui-demo/scripts/dependencies.cjs +0 -3
  98. package/skills/i3-using-agent-skills/SKILL.md +2 -2
  99. package/.claude/commands/i3-prototype.md +0 -23
  100. package/.gemini/commands/i3-prototype.toml +0 -23
  101. package/commands/i3-prototype.toml +0 -23
  102. package/docs/upstream-repository/AGENTS.md +0 -92
  103. package/docs/upstream-repository/CLAUDE.md +0 -60
  104. package/docs/upstream-repository/CONTRIBUTING.md +0 -137
  105. package/docs/upstream-repository/README.md +0 -8
  106. package/docs/upstream-repository/gitattributes.txt +0 -1
  107. package/docs/upstream-repository/gitignore.txt +0 -10
  108. package/docs/upstream-repository/manifest.json +0 -71
  109. package/docs/upstream-repository/opencode-skills.link +0 -1
  110. package/docs/upstream-repository/skill-gap.yml +0 -80
  111. package/docs/upstream-repository/skills-contributing.md +0 -15
  112. package/docs/upstream-repository/test-plugin-install.yml +0 -167
  113. package/evals/cases/i3-ui-prototype.json +0 -158
  114. package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.css +0 -3
  115. package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.js +0 -8
  116. package/evals/fixtures/i3-ui-prototype/admin-list/capability-definition.json +0 -67
  117. package/evals/fixtures/i3-ui-prototype/admin-list/index.html +0 -89
  118. package/evals/fixtures/i3-ui-prototype/admin-list/readme.md +0 -52
  119. package/evals/fixtures/i3-ui-prototype/admin-list/template.json +0 -8
  120. package/evals/fixtures/i3-ui-prototype/business-brief.md +0 -7
  121. package/evals/zh-CN/cases/i3-ui-prototype.json +0 -165
  122. package/hooks/PROTOTYPE.md +0 -31
  123. package/hooks/codebuddy-upstream.cjs +0 -93
  124. package/hooks/i3-prototype.cjs +0 -7
  125. package/hooks/manage.cjs +0 -169
  126. package/scripts/design-provider-discovery-test.js +0 -190
  127. package/scripts/design-provider-test.js +0 -75
  128. package/scripts/enterprise-template-test.js +0 -205
  129. package/scripts/lib/prototype-fixture.cjs +0 -17
  130. package/scripts/prototype-cache-test.js +0 -55
  131. package/scripts/prototype-generation-entry-test.js +0 -6
  132. package/scripts/prototype-generation-evidence-test.js +0 -10
  133. package/scripts/prototype-generation-native-test.js +0 -78
  134. package/scripts/prototype-generation-test.js +0 -99
  135. package/scripts/prototype-inventory-test.js +0 -43
  136. package/scripts/prototype-locations-test.js +0 -79
  137. package/scripts/prototype-project-test.js +0 -183
  138. package/scripts/template-adapter-test.js +0 -155
  139. package/scripts/ui-prototype-binding-recovery-test.js +0 -84
  140. package/scripts/ui-prototype-buddy-lifecycle-test.js +0 -102
  141. package/scripts/ui-prototype-codebuddy-hook-test.js +0 -112
  142. package/scripts/ui-prototype-content-test.js +0 -123
  143. package/scripts/ui-prototype-dependencies-test.js +0 -226
  144. package/scripts/ui-prototype-devtools-test.js +0 -53
  145. package/scripts/ui-prototype-execution-evidence-test.js +0 -62
  146. package/scripts/ui-prototype-execution-gates-test.js +0 -91
  147. package/scripts/ui-prototype-execution-policy-test.js +0 -53
  148. package/scripts/ui-prototype-execution-runtime-test.js +0 -27
  149. package/scripts/ui-prototype-ide-source-test.js +0 -73
  150. package/scripts/ui-prototype-native-test.js +0 -526
  151. package/scripts/ui-prototype-recovery-test.js +0 -81
  152. package/scripts/ui-prototype-registration-test.js +0 -53
  153. package/scripts/ui-prototype-template-test.js +0 -261
  154. package/scripts/ui-prototype-test.js +0 -124
  155. package/scripts/ui-prototype-transcript-auto-test.js +0 -67
  156. package/skills/i3-enterprise-sop/references/ad/assets-manifest.json +0 -86
  157. package/skills/i3-enterprise-sop/references/ad/prompts/01-generate.md +0 -58
  158. package/skills/i3-enterprise-sop/references/ad/prompts/02-review.md +0 -54
  159. package/skills/i3-enterprise-sop/references/ad/prompts/03-revise.md +0 -54
  160. package/skills/i3-enterprise-sop/references/ad/prompts/04-recheck.md +0 -54
  161. package/skills/i3-enterprise-sop/references/ad/readme.md +0 -70
  162. package/skills/i3-enterprise-sop/references/assets-manifest.json +0 -230
  163. package/skills/i3-enterprise-sop/references/brd/assets-manifest.json +0 -83
  164. package/skills/i3-enterprise-sop/references/brd/prompts/01-generate.md +0 -51
  165. package/skills/i3-enterprise-sop/references/brd/prompts/02-review.md +0 -47
  166. package/skills/i3-enterprise-sop/references/brd/prompts/03-revise.md +0 -47
  167. package/skills/i3-enterprise-sop/references/brd/prompts/04-recheck.md +0 -47
  168. package/skills/i3-enterprise-sop/references/brd/readme.md +0 -50
  169. package/skills/i3-enterprise-sop/references/codebuddy-project-guide.md +0 -34
  170. package/skills/i3-enterprise-sop/references/controlled-handoff.md +0 -41
  171. package/skills/i3-enterprise-sop/references/controlled_handoff.py +0 -379
  172. package/skills/i3-enterprise-sop/references/engineering-skeleton/adoption.md +0 -200
  173. package/skills/i3-enterprise-sop/references/engineering-skeleton/catalog.json +0 -17
  174. package/skills/i3-enterprise-sop/references/engineering-skeleton/readme.md +0 -52
  175. package/skills/i3-enterprise-sop/references/handoff-contract.md +0 -196
  176. package/skills/i3-enterprise-sop/references/lifecycle-contract.md +0 -91
  177. package/skills/i3-enterprise-sop/references/plan-handoff.md +0 -73
  178. package/skills/i3-enterprise-sop/references/prd/assets-manifest.json +0 -109
  179. package/skills/i3-enterprise-sop/references/prd/prompts/01-generate.md +0 -64
  180. package/skills/i3-enterprise-sop/references/prd/prompts/02-review.md +0 -49
  181. package/skills/i3-enterprise-sop/references/prd/prompts/03-revise.md +0 -48
  182. package/skills/i3-enterprise-sop/references/prd/prompts/04-recheck.md +0 -47
  183. package/skills/i3-enterprise-sop/references/prd/readme.md +0 -137
  184. package/skills/i3-enterprise-sop/references/prd/template-contracts.md +0 -39
  185. package/skills/i3-enterprise-sop/references/prd/templates/ad.md +0 -17
  186. package/skills/i3-enterprise-sop/references/readme.md +0 -167
  187. package/skills/i3-enterprise-sop/references/recovery-contract.md +0 -65
  188. package/skills/i3-enterprise-sop/references/review-handoff.md +0 -105
  189. package/skills/i3-enterprise-sop/references/selection-handoff.md +0 -55
  190. package/skills/i3-enterprise-sop/references/selection_handoff.py +0 -225
  191. package/skills/i3-enterprise-sop/references/stages.json +0 -271
  192. package/skills/i3-enterprise-sop/references/technical-baseline/assets-manifest.json +0 -84
  193. package/skills/i3-enterprise-sop/references/template-contracts.md +0 -142
  194. package/skills/i3-enterprise-sop/references/testcase/assets-manifest.json +0 -91
  195. package/skills/i3-enterprise-sop/references/testcase/prompts/01-generate.md +0 -53
  196. package/skills/i3-enterprise-sop/references/testcase/prompts/02-review.md +0 -51
  197. package/skills/i3-enterprise-sop/references/testcase/prompts/03-revise.md +0 -49
  198. package/skills/i3-enterprise-sop/references/testcase/prompts/04-recheck.md +0 -51
  199. package/skills/i3-enterprise-sop/references/testcase/readme.md +0 -61
  200. package/skills/i3-enterprise-sop/references/verification/check_execution.py +0 -185
  201. package/skills/i3-enterprise-sop/references/verification/check_native_execution.py +0 -282
  202. package/skills/i3-enterprise-sop/references/verification/check_reads.py +0 -348
  203. package/skills/i3-enterprise-sop/references/verification/readme.md +0 -149
  204. package/skills/i3-enterprise-sop/references/verification/review-output.schema.json +0 -155
  205. package/skills/i3-enterprise-sop/references/verification/review_handoff.py +0 -329
  206. package/skills/i3-ui-prototype/SKILL.md +0 -256
  207. package/skills/i3-ui-prototype/assets/capabilities/generation.json +0 -833
  208. package/skills/i3-ui-prototype/assets/capabilities/management.json +0 -294
  209. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/acceptance.json +0 -51
  210. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/component-map.json +0 -13
  211. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/generation-component-map.json +0 -300
  212. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/index.html +0 -11
  213. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package-lock.json +0 -2298
  214. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package.json +0 -22
  215. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/public/prototype-config.json +0 -6
  216. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/App.vue +0 -136
  217. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/components/DeviceEditor.vue +0 -111
  218. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/config.ts +0 -19
  219. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/content.ts +0 -28
  220. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/devices.ts +0 -50
  221. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/theme.ts +0 -25
  222. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/main.ts +0 -18
  223. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/style.css +0 -50
  224. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/useDevices.ts +0 -66
  225. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/devices.test.ts +0 -44
  226. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/theme.test.ts +0 -26
  227. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tsconfig.json +0 -15
  228. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/vite.config.ts +0 -4
  229. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/profile.json +0 -174
  230. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/readme.md +0 -61
  231. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/index.html +0 -11
  232. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package-lock.json +0 -2298
  233. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package.json +0 -22
  234. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/public/prototype-config.json +0 -21
  235. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/App.vue +0 -62
  236. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/PrototypeShell.vue +0 -59
  237. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/config.ts +0 -23
  238. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/presentation.ts +0 -29
  239. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/theme.ts +0 -25
  240. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/main.ts +0 -18
  241. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/style.css +0 -26
  242. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/presentation.test.ts +0 -23
  243. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/theme.test.ts +0 -26
  244. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tsconfig.json +0 -15
  245. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/vite.config.ts +0 -4
  246. package/skills/i3-ui-prototype/assets/hosts/codebuddy/profile.json +0 -17
  247. package/skills/i3-ui-prototype/assets/optional-skills/host-targets.json +0 -739
  248. package/skills/i3-ui-prototype/assets/optional-skills/sources.json +0 -27
  249. package/skills/i3-ui-prototype/assets/templates/catalog.js +0 -149
  250. package/skills/i3-ui-prototype/assets/templates/catalog.json +0 -149
  251. package/skills/i3-ui-prototype/assets/templates/classic-admin/manifest.json +0 -9
  252. package/skills/i3-ui-prototype/assets/templates/classic-admin/preset.json +0 -6
  253. package/skills/i3-ui-prototype/assets/templates/common/app/app.mjs +0 -89
  254. package/skills/i3-ui-prototype/assets/templates/common/app/config.json +0 -1
  255. package/skills/i3-ui-prototype/assets/templates/common/app/domain.mjs +0 -20
  256. package/skills/i3-ui-prototype/assets/templates/common/app/index.html +0 -17
  257. package/skills/i3-ui-prototype/assets/templates/common/app/serve.cjs +0 -16
  258. package/skills/i3-ui-prototype/assets/templates/common/app/styles.css +0 -670
  259. package/skills/i3-ui-prototype/assets/templates/common/app/tokens.css +0 -19
  260. package/skills/i3-ui-prototype/assets/templates/common/design-system/master.md +0 -20
  261. package/skills/i3-ui-prototype/assets/templates/common/gallery.html +0 -2
  262. package/skills/i3-ui-prototype/assets/templates/common/mocks/applications.json +0 -5
  263. package/skills/i3-ui-prototype/assets/templates/common/requirements-map.json +0 -8
  264. package/skills/i3-ui-prototype/assets/templates/common/serve-gallery.cjs +0 -16
  265. package/skills/i3-ui-prototype/assets/templates/credits.md +0 -17
  266. package/skills/i3-ui-prototype/assets/templates/data-operations/manifest.json +0 -9
  267. package/skills/i3-ui-prototype/assets/templates/data-operations/preset.json +0 -6
  268. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/capability-definition.json +0 -294
  269. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/component-inventory.json +0 -707
  270. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/design-system.md +0 -32
  271. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/generation.json +0 -49
  272. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/index.html +0 -534
  273. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/manifest.json +0 -9
  274. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline-build.json +0 -265
  275. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline.js +0 -8888
  276. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/origin.json +0 -344
  277. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/preset.json +0 -928
  278. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/app.js +0 -22
  279. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/empty.svg +0 -1
  280. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/reference-styles.json +0 -1
  281. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-403.svg +0 -1
  282. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-404.svg +0 -1
  283. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets-manifest.json +0 -334
  284. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/baseline.json +0 -173
  285. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/conversion.md +0 -30
  286. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/credits.md +0 -17
  287. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/design-tokens.json +0 -881
  288. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/index.html +0 -28
  289. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +0 -9
  290. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +0 -22
  291. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +0 -21
  292. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/package.json +0 -12
  293. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/browser-routes.json +0 -298
  294. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/coverage.json +0 -180
  295. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/integrity.json +0 -13
  296. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/keyboard.json +0 -11
  297. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/responsive.json +0 -125
  298. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/review.md +0 -51
  299. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/rules.log +0 -150
  300. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
  301. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
  302. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
  303. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
  304. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
  305. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
  306. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
  307. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
  308. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/selection.json +0 -9
  309. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +0 -342
  310. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/readme.md +0 -73
  311. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/reference.md +0 -59
  312. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/routes.json +0 -178
  313. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/controls.js +0 -99
  314. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dialogs.js +0 -54
  315. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dom.js +0 -264
  316. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/forms.js +0 -47
  317. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/icons.js +0 -41
  318. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/layout.js +0 -47
  319. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/router.js +0 -63
  320. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/state.js +0 -90
  321. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/table.js +0 -41
  322. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/widgets.js +0 -8
  323. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +0 -3
  324. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +0 -36
  325. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +0 -2
  326. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +0 -51
  327. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +0 -3
  328. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +0 -48
  329. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +0 -2
  330. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +0 -6
  331. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +0 -2
  332. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +0 -13
  333. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/data.js +0 -24
  334. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/domain.js +0 -32
  335. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/registry.js +0 -25
  336. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/store.js +0 -85
  337. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +0 -2
  338. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +0 -17
  339. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +0 -2
  340. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +0 -66
  341. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +0 -3
  342. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +0 -38
  343. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +0 -2
  344. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +0 -66
  345. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +0 -2
  346. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +0 -5
  347. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +0 -2
  348. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +0 -12
  349. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +0 -2
  350. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +0 -11
  351. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +0 -2
  352. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +0 -116
  353. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +0 -2
  354. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +0 -32
  355. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +0 -2
  356. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +0 -49
  357. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +0 -2
  358. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +0 -10
  359. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +0 -2
  360. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +0 -77
  361. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/data.js +0 -60
  362. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/domain.js +0 -105
  363. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/store.js +0 -212
  364. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +0 -2
  365. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +0 -18
  366. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +0 -2
  367. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +0 -23
  368. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +0 -2
  369. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +0 -78
  370. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +0 -2
  371. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +0 -55
  372. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +0 -2
  373. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +0 -26
  374. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +0 -2
  375. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +0 -38
  376. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +0 -2
  377. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +0 -7
  378. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +0 -2
  379. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +0 -72
  380. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +0 -2
  381. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +0 -46
  382. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +0 -2
  383. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +0 -52
  384. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.html +0 -2
  385. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.js +0 -19
  386. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +0 -2
  387. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +0 -30
  388. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/data.js +0 -48
  389. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/domain.js +0 -39
  390. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/store.js +0 -129
  391. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +0 -4
  392. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +0 -21
  393. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +0 -2
  394. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +0 -8
  395. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +0 -2
  396. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +0 -37
  397. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +0 -2
  398. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +0 -10
  399. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +0 -2
  400. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +0 -37
  401. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +0 -2
  402. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +0 -49
  403. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +0 -4
  404. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +0 -22
  405. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +0 -2
  406. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +0 -9
  407. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/commands.js +0 -82
  408. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/examples.js +0 -47
  409. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/model.js +0 -61
  410. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/repair.js +0 -68
  411. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/store.js +0 -55
  412. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/types.js +0 -1
  413. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/workbench.js +0 -18
  414. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +0 -3
  415. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +0 -28
  416. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +0 -2
  417. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +0 -18
  418. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +0 -2
  419. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +0 -31
  420. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +0 -2
  421. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +0 -27
  422. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +0 -2
  423. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +0 -16
  424. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +0 -2
  425. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +0 -43
  426. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +0 -4
  427. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +0 -34
  428. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +0 -2
  429. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +0 -30
  430. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +0 -3
  431. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +0 -67
  432. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +0 -2
  433. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +0 -41
  434. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +0 -2
  435. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +0 -31
  436. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +0 -2
  437. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +0 -26
  438. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +0 -2
  439. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +0 -70
  440. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/data.js +0 -8
  441. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/domain.js +0 -62
  442. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/management.js +0 -36
  443. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +0 -49
  444. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/store.js +0 -132
  445. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +0 -2
  446. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +0 -38
  447. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +0 -2
  448. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +0 -11
  449. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +0 -2
  450. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +0 -45
  451. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +0 -2
  452. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +0 -54
  453. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +0 -3
  454. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +0 -27
  455. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +0 -2
  456. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +0 -12
  457. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +0 -2
  458. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +0 -45
  459. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +0 -3
  460. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +0 -38
  461. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/domain.js +0 -61
  462. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/state.js +0 -51
  463. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/store.js +0 -116
  464. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +0 -2
  465. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +0 -45
  466. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +0 -4
  467. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +0 -30
  468. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +0 -2
  469. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +0 -67
  470. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +0 -2
  471. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +0 -5
  472. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +0 -4
  473. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +0 -60
  474. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/commands.js +0 -157
  475. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/model.js +0 -136
  476. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/store.js +0 -76
  477. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +0 -3
  478. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +0 -26
  479. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +0 -2
  480. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +0 -14
  481. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +0 -2
  482. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +0 -113
  483. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +0 -3
  484. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +0 -62
  485. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/commands.js +0 -97
  486. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/model.js +0 -147
  487. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/store.js +0 -13
  488. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +0 -2
  489. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +0 -9
  490. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +0 -2
  491. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +0 -8
  492. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +0 -2
  493. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +0 -37
  494. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +0 -2
  495. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +0 -8
  496. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +0 -2
  497. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +0 -17
  498. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/columns.js +0 -32
  499. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +0 -49
  500. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +0 -12
  501. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +0 -15
  502. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +0 -37
  503. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/policy.js +0 -68
  504. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/session.js +0 -44
  505. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +0 -2
  506. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +0 -25
  507. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +0 -2
  508. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +0 -53
  509. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +0 -10
  510. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +0 -30
  511. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +0 -2
  512. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +0 -10
  513. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +0 -2
  514. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +0 -9
  515. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +0 -3
  516. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/navigation.js +0 -19
  517. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +0 -2
  518. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +0 -8
  519. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +0 -2
  520. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +0 -32
  521. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +0 -2
  522. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +0 -15
  523. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +0 -2
  524. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +0 -11
  525. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +0 -2
  526. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +0 -57
  527. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +0 -2
  528. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +0 -37
  529. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/data.js +0 -20
  530. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/domain.js +0 -55
  531. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/store.js +0 -151
  532. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +0 -3
  533. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +0 -18
  534. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +0 -2
  535. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +0 -40
  536. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +0 -2
  537. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +0 -51
  538. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +0 -2
  539. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +0 -9
  540. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +0 -5
  541. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +0 -48
  542. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/domain.js +0 -204
  543. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +0 -22
  544. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/registry.js +0 -135
  545. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/store.js +0 -137
  546. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +0 -3
  547. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +0 -36
  548. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/model.js +0 -56
  549. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/store.js +0 -15
  550. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +0 -2
  551. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +0 -27
  552. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +0 -4
  553. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +0 -31
  554. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +0 -2
  555. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +0 -68
  556. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +0 -5
  557. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +0 -55
  558. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/data.js +0 -16
  559. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/domain.js +0 -83
  560. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/registry.js +0 -18
  561. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/store.js +0 -61
  562. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/admin.css +0 -60
  563. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/agents.css +0 -46
  564. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/antdv.css +0 -295
  565. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/app.css +0 -102
  566. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/delivery.css +0 -4
  567. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/intents.css +0 -37
  568. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/native.css +0 -22
  569. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/operations.css +0 -2
  570. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pbc.css +0 -3
  571. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/permissions.css +0 -22
  572. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pro.css +0 -1
  573. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/releases.css +0 -4
  574. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reset.css +0 -246
  575. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reviews.css +0 -8
  576. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tasks.css +0 -6
  577. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tokens.css +0 -15
  578. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workbench.css +0 -61
  579. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workflows.css +0 -1
  580. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +0 -96
  581. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/agents.test.js +0 -14
  582. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +0 -37
  583. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +0 -44
  584. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +0 -19
  585. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +0 -14
  586. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operations.test.js +0 -25
  587. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +0 -17
  588. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +0 -24
  589. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +0 -23
  590. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permissions.test.js +0 -24
  591. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/releases.test.js +0 -50
  592. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/reviews.test.js +0 -36
  593. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +0 -28
  594. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +0 -42
  595. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +0 -16
  596. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +0 -11
  597. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/tasks.test.js +0 -27
  598. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workbench.test.js +0 -34
  599. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workflows.test.js +0 -16
  600. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/convert.mjs +0 -168
  601. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/serve.mjs +0 -7
  602. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/styles.mjs +0 -11
  603. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/verify.mjs +0 -24
  604. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/serve.cjs +0 -16
  605. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template-inventory.json +0 -28791
  606. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template.json +0 -9
  607. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/usability.css +0 -44
  608. package/skills/i3-ui-prototype/assets/templates/gallery/index.html +0 -40
  609. package/skills/i3-ui-prototype/assets/templates/generation-options.js +0 -42
  610. package/skills/i3-ui-prototype/assets/templates/index.html +0 -3
  611. package/skills/i3-ui-prototype/assets/templates/modern-workspace/manifest.json +0 -9
  612. package/skills/i3-ui-prototype/assets/templates/modern-workspace/preset.json +0 -6
  613. package/skills/i3-ui-prototype/assets/templates/presentation.html +0 -17
  614. package/skills/i3-ui-prototype/assets/templates/serve-gallery.cjs +0 -23
  615. package/skills/i3-ui-prototype/references/artifact-contract.md +0 -66
  616. package/skills/i3-ui-prototype/references/content-template.md +0 -81
  617. package/skills/i3-ui-prototype/references/enterprise-admin.md +0 -44
  618. package/skills/i3-ui-prototype/references/entry-contract.md +0 -71
  619. package/skills/i3-ui-prototype/references/execution-evidence.md +0 -51
  620. package/skills/i3-ui-prototype/references/expert-adapter.md +0 -76
  621. package/skills/i3-ui-prototype/references/framework-contract.md +0 -76
  622. package/skills/i3-ui-prototype/references/generation-contract.md +0 -122
  623. package/skills/i3-ui-prototype/references/interaction-acceptance.md +0 -169
  624. package/skills/i3-ui-prototype/references/legacy-native.md +0 -58
  625. package/skills/i3-ui-prototype/references/optional-skills.md +0 -63
  626. package/skills/i3-ui-prototype/references/project-layout.md +0 -92
  627. package/skills/i3-ui-prototype/references/template-adapters.md +0 -63
  628. package/skills/i3-ui-prototype/references/workflow-contract.md +0 -77
  629. package/skills/i3-ui-prototype/scripts/adapters/easel-html.cjs +0 -30
  630. package/skills/i3-ui-prototype/scripts/adapters/legacy-html.cjs +0 -28
  631. package/skills/i3-ui-prototype/scripts/browser-workspace.cjs +0 -72
  632. package/skills/i3-ui-prototype/scripts/buddy-host.cjs +0 -40
  633. package/skills/i3-ui-prototype/scripts/check-design-provider.cjs +0 -9
  634. package/skills/i3-ui-prototype/scripts/check-prototype.cjs +0 -14
  635. package/skills/i3-ui-prototype/scripts/codebuddy-context.cjs +0 -92
  636. package/skills/i3-ui-prototype/scripts/codebuddy-hook.cjs +0 -298
  637. package/skills/i3-ui-prototype/scripts/codebuddy-ide-source.cjs +0 -69
  638. package/skills/i3-ui-prototype/scripts/codebuddy-registration.cjs +0 -125
  639. package/skills/i3-ui-prototype/scripts/content-template.cjs +0 -98
  640. package/skills/i3-ui-prototype/scripts/design-provider-discovery.cjs +0 -128
  641. package/skills/i3-ui-prototype/scripts/enterprise-template.cjs +0 -104
  642. package/skills/i3-ui-prototype/scripts/execution-assertions.cjs +0 -43
  643. package/skills/i3-ui-prototype/scripts/execution-diagnostics.cjs +0 -91
  644. package/skills/i3-ui-prototype/scripts/execution-evidence.cjs +0 -177
  645. package/skills/i3-ui-prototype/scripts/execution-gates.cjs +0 -216
  646. package/skills/i3-ui-prototype/scripts/execution-policy.cjs +0 -62
  647. package/skills/i3-ui-prototype/scripts/execution-recovery.cjs +0 -58
  648. package/skills/i3-ui-prototype/scripts/execution-runtime.cjs +0 -69
  649. package/skills/i3-ui-prototype/scripts/generation-assets.cjs +0 -18
  650. package/skills/i3-ui-prototype/scripts/generation-contract.cjs +0 -214
  651. package/skills/i3-ui-prototype/scripts/generation-evidence.cjs +0 -50
  652. package/skills/i3-ui-prototype/scripts/generation-replan.cjs +0 -34
  653. package/skills/i3-ui-prototype/scripts/hosts/codebuddy.cjs +0 -21
  654. package/skills/i3-ui-prototype/scripts/init-prototype.cjs +0 -8
  655. package/skills/i3-ui-prototype/scripts/manage-baseline.cjs +0 -11
  656. package/skills/i3-ui-prototype/scripts/native-browser.cjs +0 -785
  657. package/skills/i3-ui-prototype/scripts/native-build.cjs +0 -91
  658. package/skills/i3-ui-prototype/scripts/native-command.cjs +0 -35
  659. package/skills/i3-ui-prototype/scripts/native-delivery.cjs +0 -104
  660. package/skills/i3-ui-prototype/scripts/native-devtools.cjs +0 -92
  661. package/skills/i3-ui-prototype/scripts/native-files.cjs +0 -44
  662. package/skills/i3-ui-prototype/scripts/native-pilot-lib.cjs +0 -290
  663. package/skills/i3-ui-prototype/scripts/native-pilot.cjs +0 -59
  664. package/skills/i3-ui-prototype/scripts/native-tool-name.cjs +0 -5
  665. package/skills/i3-ui-prototype/scripts/native-tool-result.cjs +0 -14
  666. package/skills/i3-ui-prototype/scripts/optional-skill-install.cjs +0 -203
  667. package/skills/i3-ui-prototype/scripts/project-registry.cjs +0 -126
  668. package/skills/i3-ui-prototype/scripts/prototype-dependencies.cjs +0 -103
  669. package/skills/i3-ui-prototype/scripts/prototype-hooks.cjs +0 -94
  670. package/skills/i3-ui-prototype/scripts/prototype-lib.cjs +0 -277
  671. package/skills/i3-ui-prototype/scripts/prototype-locations.cjs +0 -69
  672. package/skills/i3-ui-prototype/scripts/ptc-callbacks.cjs +0 -131
  673. package/skills/i3-ui-prototype/scripts/sync-template.cjs +0 -19
  674. package/skills/i3-ui-prototype/scripts/template-adapters.cjs +0 -89
  675. package/skills/i3-ui-prototype/scripts/template-contract.cjs +0 -407
  676. package/skills/i3-ui-prototype/scripts/template-inventory.cjs +0 -78
  677. package/skills/i3-ui-prototype/scripts/validate-result.cjs +0 -117
@@ -1,82 +0,0 @@
1
- import { metadata } from "../shared/policy.js";
2
- import { clone } from "../tasks/domain.js";
3
- import { runsForTask, operationReason, operationLabels } from "./model.js";
4
- import { closureReason } from "./repair.js";
5
- export function applyOperation(t, runId, a, c, context) {
6
- const original = runsForTask(t).find(r => r.id === runId);
7
- if (!original)
8
- throw Error('运行记录不存在。');
9
- const fingerprint = JSON.stringify([c.action, c.note || '', !!c.checked, c.incidentId, c.outcome || 'pass', c.target]), prior = original.receipts.find(r => r.id === c.id);
10
- // Authentication and resource permissions still apply to receipt replays.
11
- const access = operationReason(t, original, a, 'verify');
12
- if (/权限/.test(access))
13
- throw Error(access);
14
- if (prior) {
15
- if (prior.fingerprint !== fingerprint)
16
- throw Error('同一请求编号不能提交不同内容。');
17
- return original;
18
- }
19
- if (c.expected !== original.recordVersion)
20
- throw Error('记录版本已变化,输入已保留;请核对当前版本后再提交。');
21
- const why = operationReason(t, original, a, c.action, c.incidentId);
22
- if (why)
23
- throw Error(why);
24
- if (c.action.startsWith('triage') && context?.intents.some(i => i.operationLinks?.some(l => l.incidentId === c.incidentId)))
25
- throw Error('异常已经关联修复需求,请继续原处理链。');
26
- if ((c.note?.length || 0) > 2000)
27
- throw Error('处理说明最多 2000 字。');
28
- if (c.action !== 'verify' && !c.note?.trim())
29
- throw Error('请填写处理说明。');
30
- if (['accept', 'rejectAcceptance', 'closeIncident'].includes(c.action) && !c.checked)
31
- throw Error('请勾选已核对本次版本与证据。');
32
- const r = clone(original), at = new Date().toISOString(), incident = r.incidents.find(i => i.id === c.incidentId), outcome = c.outcome || 'pass';
33
- if (c.action === 'observe') {
34
- const number = (r.observations.at(-1)?.number || 0) + 1;
35
- r.observations.push({ number, at, by: a.name, sourceSignature: r.source.signature, health: outcome === 'pass' ? 'healthy' : outcome === 'fail' ? 'abnormal' : 'unknown', simulated: true, checks: [
36
- { id: 'business', name: '业务场景验收', criterion: t.binding.spec.content.acceptance || '按绑定规格的验收标准核对', status: outcome, detail: outcome === 'pass' ? '模拟业务样例验证通过' : '本轮模拟结果:' + ({ fail: '关键业务请求失败', missing: '未取得业务证据', stale: '观测已过期' })[outcome] },
37
- { id: 'regression', name: '问题回归与关键路径', criterion: '核对本次版本的业务回归证据', status: outcome, detail: '本地演示回归结果;未连接真实监控或 CI。' },
38
- { id: 'version', name: '制品与配置一致性', criterion: r.source.digest + ' / ' + r.source.config, status: outcome === 'missing' || outcome === 'stale' ? outcome : 'pass', detail: '绑定发布版本 ' + r.source.version }
39
- ], ...(outcome === 'pass' ? { errorRate: 0.2, p95: 320 } : outcome === 'fail' ? { errorRate: 4.2, p95: 1450 } : {}) });
40
- if (outcome === 'fail' && !r.incidents.some(i => !i.closed && i.triage?.choice !== 'reject')) {
41
- const id = r.id + '-incident-' + number;
42
- r.incidents.push({ ...metadata(a, at, t.tenantId), id, code: 'INC-' + r.source.releaseCode.replace(/^REL-/, '') + '-' + number, title: '智能分诊关键请求失败(模拟)', observedAt: at, evidenceVersion: number, source: clone(r.source), signal: '关键请求错误率 4.2%,P95 1450 ms(样例)', band: '3σ', traceId: 'demo-trace-' + id, logs: [{ at, level: 'ERROR', text: '[模拟日志] 工单分类工具调用超时;部分请求未完成分诊。' }, { at, level: 'WARN', text: '[模拟日志] 依赖响应超过样例观测窗口。' }], reports: [], priorId: r.incidents.at(-1)?.id });
43
- }
44
- }
45
- else if (c.action === 'accept' || c.action === 'rejectAcceptance') {
46
- r.acceptances.push({ id: c.id, verdict: c.action === 'accept' ? 'pass' : 'fail', evidenceVersion: r.observations.at(-1)?.number || 0, sourceSignature: r.source.signature, note: c.note.trim(), actorId: a.id, actor: a.name, at });
47
- }
48
- else if (c.action === 'diagnose' && incident) {
49
- incident.reports.push({ number: incident.reports.length + 1, at, by: a.name, status: outcome === 'pass' ? 'ready' : 'incomplete', facts: outcome === 'pass' ? [incident.signal, '日志记录工单分类工具调用超时。'] : ['本轮诊断资料获取不完整,保留原始异常证据。'], hypotheses: outcome === 'pass' ? ['依赖调用超时可能导致请求失败,尚未验证根因。'] : [], questions: ['需核查工具服务响应、请求样本与超时配置。'], suggestion: outcome === 'pass' ? '建议分诊后建立修复需求,补充回归样例。' : '补充调查;当前资料不足以判断根因。' });
50
- }
51
- else if (c.action.startsWith('triage') && incident) {
52
- if (!incident.triageHistory)
53
- incident.triageHistory = incident.triage ? [clone(incident.triage)] : [];
54
- incident.triage = { choice: c.action === 'triageNow' ? 'now' : c.action === 'triagePlan' ? 'plan' : 'reject', note: c.note.trim(), actor: a.name, actorId: a.id, at, reportVersion: incident.reports.at(-1)?.number || 0 };
55
- incident.triageHistory.push(clone(incident.triage));
56
- }
57
- else if (c.action === 'closeIncident' && incident) {
58
- if (!context)
59
- throw Error('缺少修复版本与重新验收证据。');
60
- const closure = closureReason(r, incident, context.intents, context.tasks, a, c.target);
61
- if (closure)
62
- throw Error(closure);
63
- r.supersededBy = clone(c.target);
64
- incident.closed = { note: c.note.trim(), actor: a.name, actorId: a.id, at, target: clone(c.target) };
65
- }
66
- else if (c.action === 'verify')
67
- r.unconfirmed = undefined;
68
- if (incident) {
69
- incident.recordVersion++;
70
- incident.updatedAt = at;
71
- incident.updatedBy = a.name;
72
- }
73
- r.recordVersion++;
74
- r.updatedAt = at;
75
- r.updatedBy = a.name;
76
- r.receipts.push({ id: c.id, fingerprint, action: c.action, at });
77
- r.events.push({ id: c.id, action: operationLabels[c.action], detail: c.action === 'verify' ? '已核实原请求 ' + original.unconfirmed + '(模拟);未重复执行。' : c.note.trim(), actor: a.name, at, incidentId: c.incidentId, evidenceVersion: r.observations.at(-1)?.number });
78
- if (c.unknown && c.action !== 'verify')
79
- r.unconfirmed = c.id;
80
- t.operations = [...(t.operations || []).filter(x => x.id !== runId), clone(r)];
81
- return r;
82
- }
@@ -1,47 +0,0 @@
1
- import { seedTasks } from "../tasks/registry.js";
2
- import { actors } from "../shared/policy.js";
3
- import { clone } from "../tasks/domain.js";
4
- import { createRelease, sourceKey } from "../releases/model.js";
5
- import { applyRelease } from "../releases/commands.js";
6
- import { applyOperation } from "./commands.js";
7
- import { runsForTask } from "./model.js";
8
- export function operationExamples() {
9
- const actor = actors[0], tasks = [], links = [];
10
- function published(index, name, version = '1.0.0') {
11
- const t = clone(seedTasks()[6]);
12
- t.id = 'operation-example-' + index;
13
- t.code = 'DEL-OPS-00' + index;
14
- t.name = name;
15
- t.operations = [];
16
- t.releases = [];
17
- t.note = '运行评审独立样例:前置确认和发布均为预置模拟,不代表用户批准。';
18
- for (const a of t.artifacts)
19
- for (const v of a.versions)
20
- v.taskId = t.id;
21
- t.releaseMaterials = { sourceKey: sourceKey(t), commit: 'demo-ops-commit-' + index, digest: 'sha256:demo-ops-' + index, config: 'config-demo-' + version, migration: 'none', checks: ['merge', 'build', 'functional', 'contract', 'eval', 'security', 'migration'].map(id => ({ id, name: id, status: 'pass', detail: '预置模拟证据' })), by: '模拟材料服务', at: new Date().toISOString() };
22
- const r = createRelease(t, actor, { name, version, environment: 'production', config: t.releaseMaterials.config, description: '独立运行评审样例', traffic: 10, errorLimit: 1, latencyLimit: 800, rollbackPlan: '首发异常时停止并撤流,数据另行核查。' }, 'ops-release-' + index);
23
- r.code = 'REL-OPS-00' + index;
24
- for (const [n, action] of ['check', 'submit', 'approve', 'start', 'advance', 'advance', 'advance'].entries())
25
- applyRelease(t, r.id, actor, { id: r.id + '-preset-' + n, action, expected: r.recordVersion, note: '演示样例预置步骤;不代表真实人工批准。', checked: true });
26
- tasks.push(t);
27
- return t;
28
- }
29
- function op(t, action, outcome = 'pass') { const r = runsForTask(t)[0]; return applyOperation(t, r.id, actor, { id: t.id + '-' + action + '-' + r.recordVersion, action, expected: r.recordVersion, note: '预置模拟样例,用于核对交互。', checked: true, outcome, incidentId: r.incidents[0]?.id }); }
30
- const normal = published(1, '工单分诊 · 已验收样例');
31
- op(normal, 'observe');
32
- op(normal, 'accept');
33
- published(2, '巡检摘要 · 待运行证据');
34
- const abnormal = published(3, '智能分诊 · 新异常');
35
- op(abnormal, 'observe', 'fail');
36
- for (let i = 4; i <= 5; i++) {
37
- const t = published(i, i === 4 ? '智能分诊 · 已关联修复需求' : '智能分诊 · 等待修复验证');
38
- op(t, 'observe', 'fail');
39
- op(t, 'diagnose');
40
- const r = op(t, i === 4 ? 'triagePlan' : 'triageNow');
41
- links.push({ runId: r.id, incidentId: r.incidents[0].id });
42
- }
43
- const fixed = published(6, '智能分诊 · 修复版本待验收', '1.0.1');
44
- fixed.createdAt = new Date(Date.now() + 1000).toISOString();
45
- fixed.releases[0].finishedAt = new Date(Date.now() + 2000).toISOString();
46
- return { tasks, links };
47
- }
@@ -1,61 +0,0 @@
1
- import { can, metadata } from "../shared/policy.js";
2
- import { clone } from "../tasks/domain.js";
3
- import { releaseRows, versionOf } from "../releases/model.js";
4
- export function runtimeSource(t, r) {
5
- const v = versionOf(r);
6
- const source = { taskId: t.id, taskCode: t.code, releaseId: r.id, releaseCode: r.code, revision: v.number, version: v.version, service: t.name, pbcId: r.pbcId, project: t.binding.project, tenantId: t.tenantId, environment: 'production', digest: v.materials?.digest || '', config: v.config, specVersion: v.specVersion, flowVersion: v.flowVersion, publishedAt: r.finishedAt || r.updatedAt };
7
- return { ...source, signature: JSON.stringify(source) };
8
- }
9
- export function runsForTask(t) {
10
- const saved = t.operations || [];
11
- return [...saved, ...releaseRows(t).filter(r => r.state === 'succeeded' && !r.unconfirmed && versionOf(r).environment === 'production' && !saved.some(x => x.source.releaseId === r.id)).map(r => ({
12
- ...metadata({ id: 'runtime', name: '运行记录服务(模拟)', department: '运行服务' }, r.finishedAt || r.updatedAt, t.tenantId), id: 'run-' + r.id, code: 'RUN-' + r.code.replace(/^REL-/, ''), source: runtimeSource(t, r), observations: [], acceptances: [], incidents: [], receipts: [], events: []
13
- }))];
14
- }
15
- export const canReadRun = (t, a) => !t.isDeleted && can(a, 'operation:view', t.tenantId, t.binding.pbcId, 'production') && can(a, 'task:view', t.tenantId, t.binding.pbcId);
16
- export const acceptanceLabel = (r) => r.unconfirmed ? '结果待核实' : r.acceptances.at(-1)?.verdict === 'pass' ? '验收通过' : r.acceptances.at(-1)?.verdict === 'fail' ? '验收不通过' : '待验收';
17
- export const healthLabel = (r) => r.unconfirmed ? '结果待核实' : r.observations.at(-1)?.health === 'healthy' ? '运行正常' : r.observations.at(-1)?.health === 'abnormal' ? '运行异常' : r.observations.at(-1)?.checks.some(c => c.status === 'stale') ? '证据已过期' : '数据待提供';
18
- export const incidentLabel = (i) => i.closed ? '已关闭' : i.triage?.choice === 'reject' ? '已驳回' : i.triage?.choice === 'now' ? '立即修复' : i.triage?.choice === 'plan' ? '排期修复' : i.reports.at(-1)?.status === 'ready' ? '待分诊' : '待调查';
19
- export const operationPermissions = { observe: 'operation:observe', accept: 'operation:accept', rejectAcceptance: 'operation:accept', diagnose: 'operation:triage', triageNow: 'operation:triage', triagePlan: 'operation:triage', triageReject: 'operation:triage', closeIncident: 'operation:close', verify: 'operation:view' };
20
- export const operationLabels = { observe: '获取最新观测', accept: '验收通过', rejectAcceptance: '验收不通过', diagnose: '补充调查', triageNow: '立即修复', triagePlan: '排期修复', triageReject: '驳回异常', closeIncident: '确认修复并关闭', verify: '查询原请求回执' };
21
- export function sourceReason(t, r) {
22
- const replacement = r.supersededBy || r.incidents.find(i => i.closed)?.closed?.target;
23
- if (replacement)
24
- return '已由修复版本 ' + replacement.version + ' 接替,此运行记录保留为历史证据。';
25
- const release = releaseRows(t).find(x => x.id === r.source.releaseId);
26
- if (!release || release.state !== 'succeeded' || release.unconfirmed)
27
- return '源发布未确认成功或已停止、回滚、撤流,请核对发布记录。';
28
- if (runtimeSource(t, release).signature !== r.source.signature)
29
- return '源发布版本已经变化,请核对发布记录。';
30
- if (releaseRows(t).some(x => x.id !== release.id && versionOf(x).environment === 'production' && ((x.unconfirmed) || (['deploying', 'canary', 'observing', 'rollingBack'].includes(x.state)) || (x.state === 'succeeded' && (x.finishedAt || x.updatedAt) > r.source.publishedAt))))
31
- return '生产环境存在新发布或未核实状态,此记录保留为历史版本。';
32
- return '';
33
- }
34
- export function operationReason(t, r, a, action, incidentId) {
35
- if (!canReadRun(t, a) || !can(a, operationPermissions[action], r.tenantId, r.source.pbcId, 'production'))
36
- return '没有当前 PBC / 生产环境的操作权限,请在权限管理配置。';
37
- if (action === 'verify')
38
- return r.unconfirmed ? '' : '当前没有待核实回执。';
39
- if (r.unconfirmed)
40
- return '原请求回执尚未核实,请先查询原请求回执。';
41
- if (['observe', 'accept', 'rejectAcceptance'].includes(action)) {
42
- const why = sourceReason(t, r);
43
- if (why)
44
- return why;
45
- }
46
- if (action === 'accept' && (!r.observations.length || r.observations.at(-1).sourceSignature !== r.source.signature || r.observations.at(-1).checks.some(c => c.status !== 'pass')))
47
- return '当前业务验收与回归证据不完整、失败或已过期,不能通过。';
48
- if (['accept', 'rejectAcceptance'].includes(action) && r.acceptances.length > 0 && r.acceptances.at(-1)?.evidenceVersion === r.observations.at(-1)?.number)
49
- return '这版证据已有人工验收结论,请先获取新观测。';
50
- if (['diagnose', 'triageNow', 'triagePlan', 'triageReject', 'closeIncident'].includes(action)) {
51
- const incident = r.incidents.find(i => i.id === incidentId);
52
- if (!incident)
53
- return '异常记录不存在。';
54
- if (incident.closed || incident.triage?.choice === 'reject')
55
- return '异常已经结束,历史记录不可改写。';
56
- if (['triageNow', 'triagePlan'].includes(action) && incident.reports.at(-1)?.status !== 'ready')
57
- return '调查证据尚未齐备,请先补充调查。';
58
- }
59
- return '';
60
- }
61
- export const cloneRun = (r) => clone(r);
@@ -1,68 +0,0 @@
1
- import { can } from "../shared/policy.js";
2
- import { clone } from "../tasks/domain.js";
3
- import { newIntent } from "../intents/domain.js";
4
- import { canReadRun, runsForTask, sourceReason, operationReason } from "./model.js";
5
- export const linkedIntent = (items, incidentId) => items.find(i => i.operationLinks?.some(l => l.incidentId === incidentId));
6
- export function linkRepairIntent(items, task, run, incidentId, actor, c) {
7
- const incident = run.incidents.find(i => i.id === incidentId);
8
- if (!incident || !canReadRun(task, actor) || !can(actor, 'operation:link', run.tenantId, run.source.pbcId, 'production') || !can(actor, 'intent:edit', run.tenantId) || !can(actor, 'intent:view', run.tenantId))
9
- throw Error('没有关联修复需求的权限或异常不存在。');
10
- const fingerprint = JSON.stringify([incidentId, c.targetId || '', c.note.trim()]), old = linkedIntent(items, incidentId), link = old?.operationLinks?.find(l => l.incidentId === incidentId);
11
- if (link) {
12
- if (link.requestId === c.id && link.fingerprint === fingerprint)
13
- return clone(old);
14
- throw Error('此异常已经关联需求,请查询并继续原记录。');
15
- }
16
- if (run.unconfirmed)
17
- throw Error('先核实原请求回执。');
18
- if (incident.closed || !['now', 'plan'].includes(incident.triage?.choice || ''))
19
- throw Error('请先将异常分诊为立即修复或排期修复。');
20
- if (c.note.length > 2000)
21
- throw Error('关联说明最多 2000 字。');
22
- if (!c.note.trim())
23
- throw Error('请填写关联说明。');
24
- const at = new Date().toISOString(), existing = c.targetId ? items.find(i => i.id === c.targetId) : undefined;
25
- if (c.targetId && !existing)
26
- throw Error('目标需求不存在。');
27
- if (existing && (existing.tenantId !== run.tenantId || existing.isDeleted || existing.status === 'closed' || existing.generating || ['pending', 'unknown'].includes(existing.confirmation)))
28
- throw Error('目标需求不在同一租户、已结束或存在待核实操作。');
29
- if (existing?.operationLinks?.some(l => l.pbcId !== run.source.pbcId))
30
- throw Error('目标修复需求属于其他 PBC。');
31
- const item = existing ? clone(existing) : newIntent({ title: '修复:' + incident.title, request: '处理异常 ' + incident.code + '。\n' + incident.signal + '\n' + c.note.trim(), context: '来源 PBC:' + run.source.project + ';发布版本 ' + run.source.version + ';需澄清修复范围与回归标准。', outcome: '恢复关键业务场景,并以新版本的回归及运行验收证据确认修复。' }, 'repair-' + c.id, 'INT-REPAIR-' + c.id.slice(0, 8).toUpperCase(), at, actor);
32
- item.tenantId = run.tenantId;
33
- (item.operationLinks ||= []).push({ runId: run.id, incidentId, incidentCode: incident.code, incidentTitle: incident.title, taskId: task.id, releaseId: run.source.releaseId, tenantId: run.tenantId, pbcId: run.source.pbcId, project: run.source.project, sourceVersion: run.source.version, sourceSignature: run.source.signature, requestId: c.id, fingerprint, unconfirmed: c.unknown, at, actor: actor.name, actorId: actor.id, note: c.note.trim() });
34
- item.events.push({ label: '关联运行异常 ' + incident.code + ';' + c.note.trim(), at, actor: actor.name });
35
- if (existing)
36
- item.recordVersion++;
37
- item.updatedAt = at;
38
- item.updatedBy = actor.name;
39
- return item;
40
- }
41
- export function repairCandidates(incident, intents, tasks, actor) {
42
- const intent = linkedIntent(intents, incident.id);
43
- if (!intent || intent.isDeleted)
44
- return [];
45
- return tasks.filter(t => t.binding.intentId === intent.id && t.createdAt > incident.observedAt && t.tenantId === incident.tenantId && t.binding.pbcId === incident.source.pbcId && canReadRun(t, actor)).flatMap(t => runsForTask(t).filter(r => r.source.publishedAt > incident.observedAt && (r.source.version !== incident.source.version || r.source.digest !== incident.source.digest || r.source.config !== incident.source.config)).map(r => ({ taskId: t.id, releaseId: r.source.releaseId, runId: r.id, version: r.source.version, digest: r.source.digest, config: r.source.config, evidenceVersion: r.observations.at(-1)?.number || 0, runVersion: r.recordVersion, sourceSignature: r.source.signature })));
46
- }
47
- export function closureReason(run, incident, intents, tasks, actor, target) {
48
- const sourceTask = tasks.find(t => t.id === run.source.taskId);
49
- if (!sourceTask)
50
- return '来源任务不存在。';
51
- const why = operationReason(sourceTask, run, actor, 'closeIncident', incident.id);
52
- if (why)
53
- return why;
54
- const intent = linkedIntent(intents, incident.id), link = intent?.operationLinks?.find(l => l.incidentId === incident.id);
55
- if (!intent || !link || link.unconfirmed)
56
- return '尚无已核实的修复需求及新修复版本。';
57
- const candidates = repairCandidates(incident, intents, tasks, actor), current = candidates.find(c => c.runId === target?.runId);
58
- if (!target || !current)
59
- return '请选择关联修复需求产生的新生产修复版本。';
60
- if (JSON.stringify(current) !== JSON.stringify(target))
61
- return '修复版本或证据已变化,请核对当前版本。';
62
- const task = tasks.find(t => t.id === target.taskId), r = runsForTask(task).find(r => r.id === target.runId), e = r.observations.at(-1), accept = r.acceptances.at(-1);
63
- if (r.unconfirmed || sourceReason(task, r))
64
- return '修复发布或运行结果待核实,或版本已失效。';
65
- if (!e || e.sourceSignature !== r.source.signature || e.checks.some(c => c.status !== 'pass') || !accept || accept.verdict !== 'pass' || accept.evidenceVersion !== e.number || accept.sourceSignature !== r.source.signature)
66
- return '修复版本尚缺当前回归证据和人工运行验收通过记录。';
67
- return '';
68
- }
@@ -1,55 +0,0 @@
1
- import { computed, ref } from '../../runtime/state.js';
2
- import { defineStore } from "../../runtime/state.js";
3
- import { useSession } from "../shared/session.js";
4
- import { useIntents } from "../intents/store.js";
5
- import { usePbcs } from "../pbc/store.js";
6
- import { taskRecords, taskReadError, refreshTaskRecords, commitTaskChanges } from "../tasks/registry.js";
7
- import { clone, taskEvent } from "../tasks/domain.js";
8
- import { canReadRun, runsForTask, operationReason } from "./model.js";
9
- import { applyOperation } from "./commands.js";
10
- import { linkRepairIntent, closureReason } from "./repair.js";
11
- import { operationExamples } from "./examples.js";
12
- export const useOperations = defineStore('operations', () => {
13
- const session = useSession(), intents = useIntents(), pbcs = usePbcs(), scene = ref('normal'), response = ref('success');
14
- const tasks = computed(() => taskRecords.value.filter(t => canReadRun(t, session.actor)));
15
- const rows = computed(() => tasks.value.flatMap(task => runsForTask(task).map(run => ({ task, run }))).sort((a, b) => b.run.updatedAt.localeCompare(a.run.updatedAt)));
16
- const find = (id) => rows.value.find(r => r.run.id === id);
17
- function reason(row, action, incidentId) { if (session.state !== 'active')
18
- return '登录状态已失效,请重新登录。'; const p = pbcs.catalog.find(p => p.id === row.run.source.pbcId); if (action !== 'verify' && (!p || p.isDeleted || p.state !== 'active'))
19
- return '来源 PBC 不存在或已归档。'; return operationReason(row.task, row.run, session.actor, action, incidentId); }
20
- function mode() { session.writeCheck(); const mode = response.value; response.value = 'success'; if (mode === 'failure')
21
- throw Error('提交失败(模拟服务不可用),本次未保存,输入已保留。'); return mode; }
22
- function apply(id, c) { refreshTaskRecords(); const row = find(id); if (!row)
23
- throw Error('记录不存在或无权访问。'); session.require('operation:view', row.run.tenantId, row.run.source.pbcId, 'production'); const replay = row.run.receipts.some(x => x.id === c.id); if (!replay) {
24
- const why = reason(row, c.action, c.incidentId);
25
- if (why)
26
- throw Error(why);
27
- } const t = clone(row.task), m = mode(), expected = t.recordVersion; const result = applyOperation(t, id, session.actor, { ...c, unknown: m === 'unknown' }, { tasks: taskRecords.value, intents: intents.operationRecords() }); if (!replay) {
28
- t.recordVersion++;
29
- t.updatedAt = new Date().toISOString();
30
- t.updatedBy = session.actor.name;
31
- taskEvent(t, session.actor.name, '运行记录更新', '观测、验收或异常处理(模拟)');
32
- commitTaskChanges([t], [{ id: t.id, version: expected }]);
33
- } return result; }
34
- function link(id, incidentId, c, expected, targetVersion) { refreshTaskRecords(); const row = find(id); if (!row)
35
- throw Error('运行记录不存在。'); session.require('operation:link', row.run.tenantId, row.run.source.pbcId, 'production'); if (row.run.recordVersion !== expected)
36
- throw Error('异常版本已变化,请核对当前记录。'); const m = mode(); return intents.operationCommit(items => { if (c.targetId && !items.some(i => i.operationLinks?.some(l => l.incidentId === incidentId))) {
37
- const target = items.find(i => i.id === c.targetId);
38
- if (target?.recordVersion !== targetVersion)
39
- throw Error('目标需求版本已更新,输入保留,请核对当前版本。');
40
- const jobs = pbcs.jobs.filter(j => j.intentId === c.targetId && !j.isDeleted);
41
- if (jobs.some(j => j.pbc.id !== row.run.source.pbcId || j.tenantId !== row.run.tenantId))
42
- throw Error('目标需求已归属其他 PBC。');
43
- } return linkRepairIntent(items, row.task, row.run, incidentId, session.actor, { ...c, unknown: m === 'unknown' }); }); }
44
- function verifyLink(incidentId) { session.require('operation:view'); mode(); return intents.operationCommit(items => { const i = items.find(i => i.operationLinks?.some(l => l.incidentId === incidentId)); if (!i)
45
- throw Error('原关联请求不存在。'); const l = i.operationLinks.find(l => l.incidentId === incidentId); session.require('operation:view', l.tenantId, l.pbcId, 'production'); session.require('intent:view', l.tenantId); if (!l.unconfirmed)
46
- return i; l.unconfirmed = false; i.recordVersion++; i.updatedAt = new Date().toISOString(); i.updatedBy = session.actor.name; i.events.push({ label: '核实异常关联原请求 ' + l.requestId + '(模拟)', at: i.updatedAt, actor: session.actor.name }); return i; }); }
47
- function closeReason(row, incidentId, target) { const i = row.run.incidents.find(i => i.id === incidentId); return reason(row, 'closeIncident', incidentId) || (i ? closureReason(row.run, i, intents.items, taskRecords.value, session.actor, target) : '异常不存在。'); }
48
- function addExamples() { session.require('operation:observe', 'heating', 'pbc-0', 'production'); session.require('task:create', 'heating', 'pbc-0'); session.require('intent:edit', 'heating'); mode(); const examples = operationExamples(), changes = examples.tasks.filter(t => !taskRecords.value.some(x => x.id === t.id)); if (changes.length)
49
- commitTaskChanges(changes, changes.map(t => ({ id: t.id }))); for (const source of examples.links) {
50
- const row = find(source.runId);
51
- if (!intents.items.some(i => i.operationLinks?.some(l => l.incidentId === source.incidentId)))
52
- intents.operationCommit(items => linkRepairIntent(items, row.task, row.run, source.incidentId, session.actor, { id: source.incidentId + '-preset', note: '预置模拟关联,用于评审修复追踪。', targetId: 'seed-spec-heating' }));
53
- } return changes.length; }
54
- return { session, intents, tasks, rows, find, reason, apply, link, verifyLink, closeReason, scene, response, addExamples, notice: taskReadError };
55
- });
@@ -1,18 +0,0 @@
1
- import { can } from "../shared/policy.js";
2
- import { canReadRun, runsForTask, operationReason, sourceReason, acceptanceLabel, incidentLabel } from "./model.js";
3
- export function operationTodos(tasks, actor, active) {
4
- return tasks.filter(t => canReadRun(t, actor)).flatMap(t => runsForTask(t).flatMap(r => {
5
- const base = { taskId: t.id, group: '运行管理', updatedAt: r.updatedAt, createdBy: r.createdBy, tenantId: r.tenantId, affiliation: r.source.project }, todos = [];
6
- if (r.unconfirmed || (!sourceReason(t, r) && r.acceptances.at(-1)?.verdict !== 'pass')) {
7
- const a = r.unconfirmed ? 'verify' : r.observations.at(-1)?.checks.every(c => c.status === 'pass') ? 'accept' : 'observe';
8
- const allowed = active && !operationReason(t, r, actor, a);
9
- todos.push({ ...base, id: 'run:' + r.id, code: r.code, title: r.source.service, status: acceptanceLabel(r), reason: r.unconfirmed ? '原请求回执待核实,避免重复操作。' : '核对运行证据后记录人工验收。', path: '/operations?run=' + r.id, action: allowed ? '处理运行验收' : '查看运行记录', allowed });
10
- }
11
- if (!r.unconfirmed)
12
- for (const i of r.incidents.filter(i => !i.closed && i.triage?.choice !== 'reject')) {
13
- const allowed = active && can(actor, 'operation:triage', r.tenantId, r.source.pbcId, 'production');
14
- todos.push({ ...base, id: 'incident:' + i.id, code: i.code, title: i.title, status: incidentLabel(i), reason: '保留来源异常,核对调查、修复版本及重新验收。', path: '/operations/' + t.id + '/' + r.id + '/incidents/' + i.id, action: allowed ? '处理异常' : '查看异常', allowed });
15
- }
16
- return todos;
17
- }));
18
- }
@@ -1,3 +0,0 @@
1
- <!-- 来源:src/pbc/ManagementTable.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <section class="auth-list" data-bind-aria-label="(pageKey + '列表')"><div class="auth-filters"><template data-component="Input" data-model-value="(query)" data-bind-aria-label="('搜索' + pageKey)" placeholder="搜索名称、标识或负责人" allow-clear=""></template><template data-component="Select" data-model-value="(state)" aria-label="记录状态筛选" data-bind-options="([{ value: 'all', label: '全部状态' }, ...[...new Set(rows.map(r =&gt; r.status))].map(value =&gt; ({ value, label: value }))])"></template><template data-component="Button" data-on-click="query = '';
3
- state = 'all';">重置</template></div><div class="auth-tools"><template data-component="ListBatchBar" data-if="(!readonly)" data-bind-count="(selection.selected.value.length)" data-bind-allowed="(!!canDelete)" data-on-remove="(emit('remove', selection.selected.value))" data-on-clear="(selection.clear)"></template><p data-else="" class="muted">关联与版本证据只读;删除不适用,业务操作请进入对应详情。</p><template data-component="Space" wrap=""><template data-component="Button" data-on-click="(desc = !desc)">时间{{ (desc ? '倒序' : '正序') }}</template><template data-component="Button" data-bind-loading="(loading)" data-on-click="(refresh)">刷新</template><template data-component="ColumnSettings" data-bind-preferences="(prefs)"></template></template></div><template data-component="Alert" data-if="(scene === 'error')" type="error" show-icon="" title="列表加载失败,已有记录保留。"><template data-slot="action"><template data-component="Button" data-on-click="(refresh)">重试</template></template></template><template data-else=""><template data-component="ProTable" data-bind-table="(table)" data-bind-control="(false)" data-bind-search="(async () =&gt; { })" data-bind-table-container="(false)" row-key="id" data-bind-loading="(loading)" data-bind-row-selection="(readonly ? undefined : selection.rowSelection.value)" data-bind-scroll="({ x: 'max-content' })" data-bind-pagination="({ showTotal: (n) =&gt; '共 ' + n + ' 项', showSizeChanger: true, pageSizeOptions: [5, 10, 20] })"></template><p data-if="(!filtered.length)" class="pbc-empty muted">{{ (readonly ? '暂无符合条件的记录,请调整筛选或核对来源业务。' : '暂无符合条件的记录,可调整筛选或使用页面上方的创建入口。') }}</p></template></section>
@@ -1,28 +0,0 @@
1
- import { computed, ref, watch } from '../../runtime/state.js';
2
- import { h } from '../../runtime/dom.js';
3
- import { Alert, Button, Input, Select, Space, Tag } from "../../runtime/widgets.js";
4
- import { ProTable, useTable } from "../../runtime/widgets.js";
5
- import { useColumns } from "../shared/columns.js";
6
- import { useListSelection } from "../shared/listSelection.js";
7
- import { useSession } from "../shared/session.js";
8
- import { formatDate, tenantLabel } from "../shared/policy.js";
9
- import ColumnSettings from "../shared/ColumnSettings.js";
10
- import ListMore from "../shared/ListMore.js";
11
- import ListBatchBar from "../shared/ListBatchBar.js";
12
- import { createComponent } from '../../runtime/dom.js';
13
- import { withDefaults } from '../../runtime/state.js';
14
- export default createComponent({ name: 'ManagementTable', propKeys: ["rows", "pageKey", "contextLabel", "ownerLabel", "readonly", "canDelete", "scene", "more", "primary"], template: new URL('./ManagementTable.html', import.meta.url).href, setup(__props, __emit) {
15
- const props = withDefaults(__props, { contextLabel: '业务归属', ownerLabel: '负责人', scene: 'normal', primary: '详情' });
16
- const emit = __emit, session = useSession(), query = ref(''), state = ref('all'), desc = ref(true), loading = ref(false);
17
- const prefs = useColumns(props.pageKey, [{ key: 'name', label: '名称', locked: true }, { key: 'code', label: '标识' }, { key: 'status', label: '状态', defaultVisible: true }, { key: 'context', label: props.contextLabel, defaultVisible: true }, { key: 'owner', label: props.ownerLabel, defaultVisible: true }, { key: 'createdBy', label: '创建人', defaultVisible: true }, { key: 'createdAt', label: '创建时间', defaultVisible: true }, { key: 'tenantId', label: '所属租户' }, { key: 'createdDept', label: '创建部门' }, { key: 'updatedBy', label: '修改人' }, { key: 'updatedAt', label: '修改时间' }, { key: 'recordVersion', label: '记录版本' }, { key: 'isDeleted', label: '逻辑删除标记' }, { key: 'actions', label: '操作', locked: true }]);
18
- 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' ? 200 : c.key === 'context' ? 180 : c.key === 'code' ? 150 : c.key === 'actions' ? 136 : c.key.endsWith('At') ? 155 : 90, fixed: c.key === 'actions' ? 'right' : undefined, ...(c.key === 'name' ? { render: (_, row) => h('div', [h(Button, { type: 'link', class: 'agent-name', onClick: () => emit('action', 'detail', row) }, () => String(row.name)), h('small', { class: 'agent-code' }, () => String(row.code))]) } : c.key === 'actions' ? { render: (_, row) => { const r = row; return h('div', { class: 'row-actions' }, [h(Button, { type: 'link', onClick: () => emit('action', 'detail', r) }, () => props.primary), h(ListMore, { name: r.name, items: props.more(r), onAction: (key) => emit('action', key, r) })]); } } : c.key === 'status' ? { render: (v) => h(Tag, { color: v === '已归档' ? 'default' : v === '待建工程' ? 'orange' : 'blue' }, () => String(v)) } : c.key === 'tenantId' ? { render: (v) => tenantLabel(String(v)) } : c.key === 'isDeleted' ? { render: (v) => v ? '已删除' : '未删除' } : c.key.endsWith('At') ? { render: (v) => formatDate(String(v)) } : {}) })) });
19
- const columns = new Map(table.columns.value.map(c => [c.key, c]));
20
- watch(prefs.keys, keys => table.columns.value = keys.map(k => columns.get(k)).filter(Boolean), { immediate: true });
21
- const filtered = computed(() => props.scene === 'empty' ? [] : props.rows.filter(r => (r.name + r.code + r.context + r.owner).toLowerCase().includes(query.value.trim().toLowerCase()) && (state.value === 'all' || r.status === state.value)).sort((a, b) => desc.value ? b.createdAt.localeCompare(a.createdAt) : a.createdAt.localeCompare(b.createdAt)));
22
- 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)
23
- 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 });
24
- const selection = useListSelection(table.dataSource, computed(() => JSON.stringify([session.key, query.value, state.value, desc.value, table.pageParam.current, table.pageParam.pageSize])), computed(() => !!props.canDelete), r => r.name);
25
- watch([query, state], () => table.setPageParam({ current: 1 }));
26
- async function refresh() { selection.clear(); loading.value = true; await new Promise(r => setTimeout(r, 180)); loading.value = false; emit('refresh'); }
27
- return { computed, ref, watch, h, Alert, Button, Input, Select, Space, Tag, ProTable, useTable, useColumns, useListSelection, useSession, formatDate, tenantLabel, ColumnSettings, ListMore, ListBatchBar, props, emit, session, query, state, desc, loading, prefs, table, columns, filtered, selection, refresh };
28
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/pbc/PbcCreateEntry.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Modal" data-bind-open="(open)" title="从需求规格创建 PBC" data-on-cancel="(emit('close'))" data-bind-width="(720)"><p>先选择需求,核对规格与归属状态后继续。</p><label for="create-pbc-source" class="pbc-label">需求来源</label><template data-component="Select" id="create-pbc-source" data-model-value="(selected)" aria-label="PBC 创建来源" class="full-width" show-search="" option-filter-prop="label" data-bind-options="(candidates.map(s =&gt; ({ value: s.id, label: s.code + ' · ' + s.title + ' · ' + s.guide.label })))" placeholder="搜索需求名称或编号"></template><p class="muted">显示全部有权查看的需求;其中 {{ (candidates.filter(s =&gt; s.guide.create).length) }} 条当前可创建 PBC。</p><template data-component="Alert" data-if="(!candidates.length)" class="page-alert" type="info" show-icon="" title="暂无可见需求" description="请先发起意图,或联系业务管理员核对数据范围。"></template><section data-if="(source)" class="source-choice" aria-label="所选需求的创建条件"><h3>{{ (source.title) }}</h3><p><span class="mono">{{ (source.code) }}</span> · {{ (tenantLabel(source.tenantId)) }}</p><template data-component="Tag" data-bind-color="(source.guide.create ? 'green' : 'orange')">{{ (source.guide.label) }}</template><template data-component="Alert" data-bind-type="(source.guide.create ? 'success' : 'info')" show-icon="" data-bind-title="(source.guide.reason)" class="page-alert"></template><p class="muted">{{ (source.affiliation.label) }}</p></section><template data-slot="footer"><template data-component="Button" data-on-click="(emit('close'))">取消</template><template data-component="Button" data-if="(source &amp;&amp; !source.guide.create)" data-on-click="(next)">{{ (source.guide.action) }}</template><template data-component="Button" type="primary" data-bind-disabled="(!source?.guide.create)" data-on-click="(next)">继续创建向导</template></template></template>
@@ -1,18 +0,0 @@
1
- import { computed, ref, watch } from '../../runtime/state.js';
2
- import { useRouter } from "../../runtime/router.js";
3
- import { Alert, Button, Modal, Select, Tag } from "../../runtime/widgets.js";
4
- import { useDeliveryView } from "../shared/deliveryView.js";
5
- import { tenantLabel } from "../shared/policy.js";
6
- import { createComponent } from '../../runtime/dom.js';
7
- export default createComponent({ name: 'PbcCreateEntry', propKeys: ["open"], template: new URL('./PbcCreateEntry.html', import.meta.url).href, setup(__props, __emit) {
8
- const props = __props, emit = __emit, router = useRouter(), selected = ref('');
9
- const { candidates } = useDeliveryView();
10
- const source = computed(() => candidates.value.find(s => s.id === selected.value));
11
- watch(() => props.open, open => { if (open)
12
- selected.value = ''; });
13
- function next() { if (source.value) {
14
- router.push(source.value.guide.path);
15
- emit('close');
16
- } }
17
- return { computed, ref, watch, useRouter, Alert, Button, Modal, Select, Tag, useDeliveryView, tenantLabel, props, emit, router, selected, candidates, source, next };
18
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/pbc/PbcDetail.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Result" data-if="(!pbc)" status="403" title="PBC 不存在或无权访问"><template data-slot="extra"><template data-component="Button" data-on-click="(router.push('/pbcs'))">返回 PBC 列表</template></template></template><template data-else=""><div class="page-heading"><div><template data-component="Button" type="link" class="agent-back" data-on-click="(router.push('/pbcs'))">← 返回 PBC 列表</template><h1>{{ (pbc.name) }}</h1><p>{{ (pbc.ebc) }} · {{ (tenantLabel(pbc.tenantId)) }} · 负责人 {{ (pbc.owner) }}</p></div><template data-component="Space" wrap=""><template data-component="Tag">{{ (stateLabel(pbc)) }}</template><template data-component="Button" data-bind-disabled="(!can('pbc:edit') || !active)" data-on-click="(edit = pbc)">编辑资料</template><template data-component="Button" type="primary" data-on-click="(router.push('/pbcs/' + pbc.id + '/workspace'))">进入交付工作区</template></template></div><template data-component="Alert" data-if="(!active)" type="info" show-icon="" title="PBC 已归档,历史记录可查看。" class="page-alert"><template data-slot="action"><template data-component="Button" data-bind-disabled="(!can('pbc:archive'))" data-on-click="(lifecycle = pbc)">恢复使用</template></template></template><template data-component="Tabs" data-model-active-key="(tab)" data-bind-items="([{ key: 'overview', label: 'PBC 概览' }, { key: 'services', label: '服务管理' }, { key: 'metadata', label: '基础信息' }, { key: 'records', label: '操作记录', disabled: !can('pbc:audit') }])"></template><section data-if="(tab === 'overview')" class="pbc-overview"><article class="agent-panel"><h2>业务职责</h2><p class="pbc-description">{{ (pbc.description || '暂未填写职责与边界,可通过编辑资料补充。') }}</p><dl class="task-info-grid"><div><dt>PBC 标识</dt><dd>{{ (pbc.slug) }}</dd></div><div><dt>EBC 业务能力</dt><dd>{{ (pbc.ebc) }}</dd></div><div><dt>服务与方案</dt><dd>{{ (services.length) }} 项 <template data-component="Button" type="link" data-on-click="(tab = 'services')">查看服务</template></dd></div><div><dt>管理状态</dt><dd>{{ (stateLabel(pbc)) }} <template data-component="Button" type="link" data-bind-disabled="(!can('pbc:archive'))" data-on-click="(lifecycle = pbc)">{{ (active ? '归档' : '恢复') }}</template></dd></div></dl><h2>工程信息</h2><dl class="task-info-grid"><div><dt>GitLab Group(规划标识)</dt><dd>{{ (pbc.slug) }}</dd></div><div><dt>业务应用域名(规划)</dt><dd>{{ (pbc.domain) }}</dd></div></dl><template data-component="Alert" type="info" show-icon="" data-bind-title="(pbc.provisioned ? '工程登记为演示数据,未连接真实仓库或运行环境。' : '此记录尚未建立工程。')" description="一个 PBC 可包含多个服务仓库;运行健康、拓扑和环境配置后续接入。"></template></article><aside class="agent-panel"><h2>从这里继续交付</h2><ol class="pbc-next"><li><strong>查看需求与规格</strong><p>追溯每次建设与迭代的目标。</p></li><li><strong>继续交付任务</strong><p>核对当前阶段、等待与返工。</p></li><li><strong>回看版本产物</strong><p>查看任务生成的内容与验证结果。</p></li></ol><template data-component="Button" block="" type="primary" data-on-click="(router.push('/pbcs/' + pbc.id + '/workspace'))">打开工作区</template><p class="muted">质量确认与生产发布将在后续原型包继续衔接。</p></aside></section><template data-if="(tab === 'services')"><div class="section-heading pbc-section"><div><h2>服务与扩展方案</h2><p class="muted">已登记工程保持标识;新增方案经需求、契约及增量交付后建工程。</p></div><template data-component="Button" type="primary" data-bind-disabled="(!can('pbc:service') || !active)" data-on-click="(serviceDialog = {})">新增服务方案</template></div><template data-component="ManagementTable" data-bind-key="(id)" page-key="服务" data-bind-rows="(services)" context-label="工程类型" data-bind-more="(more)" data-bind-can-delete="(can('pbc:service') &amp;&amp; !!active)" data-on-action="(action)" data-on-remove="(remove)"></template><p class="muted pbc-list-note">只删除未建工程的方案;不会删除运行中的服务、仓库或历史产物。</p></template><section data-if="(tab === 'metadata')" class="agent-panel"><template data-component="RecordMetadata" data-bind-record="(pbc)"></template><p>管理状态:{{ (stateLabel(pbc)) }} · 记录版本 {{ (pbc.recordVersion) }} · 逻辑删除标记:{{ (pbc.isDeleted ? '已删除' : '未删除') }}</p></section><section data-if="(tab === 'records')" class="agent-panel"><template data-if="(can('pbc:audit'))"><h2>操作记录</h2><p class="muted">记录只读,删除与批量删除不适用。正式审计将由服务端可靠记录。</p><article data-each="e in (store.eventsFor(id))" data-bind-key="(e.id)" class="pbc-event"><h3>{{ (e.action) }}</h3><p>{{ (e.actor) }} · {{ (formatDate(e.at)) }} · {{ (e.reason) }}</p><details><summary>查看变更前后</summary><div class="pbc-diff"><pre>{{ (e.before) }}</pre><pre>{{ (e.after) }}</pre></div></details></article><p data-if="(!store.eventsFor(id).length)" class="muted">暂无管理操作记录;新建与归属执行记录可在工作区的来源结果中查看。</p></template><template data-component="Result" data-else="" status="403" title="没有查看操作记录的权限"></template></section><template data-component="PbcEditor" data-if="(edit)" data-bind-record="(edit)" data-on-close="(edit = undefined)" data-on-saved="(saved)"></template><template data-component="PbcLifecycle" data-if="(lifecycle)" data-bind-record="(lifecycle)" data-on-close="(lifecycle = undefined)" data-on-saved="(saved)"></template><template data-component="ServiceEditor" data-if="(serviceDialog)" data-bind-pbc="(pbc)" data-bind-service="(serviceDialog.service)" data-bind-readonly="(serviceDialog.readonly)" data-on-close="(serviceDialog = undefined)" data-on-saved="(saved)"></template><template data-component="ListDeleteDialog" data-if="(targets.length)" data-model-targets="(targets)" label="服务方案" data-bind-check="(t =&gt; store.serviceCheck(id, t))" data-bind-submit="(ts =&gt; store.serviceRemove(id, deleteVersion, ts))" data-on-close="(targets = [])" data-on-deleted="(targets = [])"></template></template>
@@ -1,31 +0,0 @@
1
- import { computed, ref, watch } from '../../runtime/state.js';
2
- import { useRoute, useRouter } from "../../runtime/router.js";
3
- import { Alert, Button, Result, Space, Tabs, Tag, message } from "../../runtime/widgets.js";
4
- import { usePbcManagement } from "./managementStore.js";
5
- import { useSession } from "../shared/session.js";
6
- import { formatDate, tenantLabel } from "../shared/policy.js";
7
- import { stateOf, stateLabel } from "./management.js";
8
- import { templates } from "./domain.js";
9
- import ManagementTable from "./ManagementTable.js";
10
- import PbcEditor from "./PbcEditor.js";
11
- import PbcLifecycle from "./PbcLifecycle.js";
12
- import ServiceEditor from "./ServiceEditor.js";
13
- import RecordMetadata from "../shared/RecordMetadata.js";
14
- import ListDeleteDialog from "../shared/ListDeleteDialog.js";
15
- import { createComponent } from '../../runtime/dom.js';
16
- export default createComponent({ name: 'PbcDetail', propKeys: [], template: new URL('./PbcDetail.html', import.meta.url).href, setup(__props, __emit) {
17
- const route = useRoute(), router = useRouter(), store = usePbcManagement(), session = useSession(), id = computed(() => String(route.params.id)), pbc = computed(() => store.item(id.value)), tab = ref(String(route.query.tab || 'overview')), edit = ref(), lifecycle = ref(), serviceDialog = ref(), targets = ref([]), deleteVersion = ref(0);
18
- watch(() => route.query.tab, v => tab.value = String(v || 'overview'));
19
- watch(tab, v => router.replace({ query: { ...route.query, tab: v } }));
20
- const can = (a) => !!pbc.value && session.can(a, pbc.value.tenantId, pbc.value.id), active = computed(() => pbc.value && stateOf(pbc.value) === 'active');
21
- const services = computed(() => pbc.value?.services.filter(s => !s.isDeleted).map(s => ({ ...s, name: s.title, code: s.name, status: s.registered ? '已登记工程' : '待建工程', context: templates.find(t => t.value === s.template)?.label || s.template, owner: pbc.value.owner })) || []);
22
- function more(r) { return [{ key: 'detail', label: '查看详情' }, { key: 'edit', label: '编辑服务', disabled: !can('pbc:service') || !active.value }, { key: 'delete', label: '删除服务方案', danger: true, disabled: !can('pbc:service') || !active.value }]; }
23
- function action(key, r) { const s = pbc.value?.services.find(s => s.id === r.id); if (!s)
24
- return; if (key === 'delete')
25
- remove([r]);
26
- else
27
- serviceDialog.value = { service: s, readonly: key === 'detail' }; }
28
- function remove(rows) { deleteVersion.value = pbc.value.recordVersion; targets.value = rows; }
29
- function saved() { edit.value = undefined; lifecycle.value = undefined; serviceDialog.value = undefined; message.success('已保存'); }
30
- return { computed, ref, watch, useRoute, useRouter, Alert, Button, Result, Space, Tabs, Tag, message, usePbcManagement, useSession, formatDate, tenantLabel, stateOf, stateLabel, templates, ManagementTable, PbcEditor, PbcLifecycle, ServiceEditor, RecordMetadata, ListDeleteDialog, route, router, store, session, id, pbc, tab, edit, lifecycle, serviceDialog, targets, deleteVersion, can, active, services, more, action, remove, saved };
31
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/pbc/PbcEditor.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Drawer" data-bind-open="(true)" title="编辑 PBC 基础资料" data-bind-size="(680)" data-bind-mask="({ closable: false })" data-on-close="(close)"><template data-component="Alert" data-if="(error)" type="error" show-icon="" data-bind-title="(error)" class="page-alert"></template><p class="muted">{{ (record.slug) }} · 租户与工程标识保持固定。此处保存不改变部署或历史交付快照。</p><template data-component="Form" layout="vertical" data-bind-disabled="(!allowed || busy)"><template data-component="FormItem" label="PBC 名称" required=""><template data-component="Input" data-model-value="(data.name)" aria-label="PBC 名称" data-bind-maxlength="(60)"></template></template><template data-component="FormItem" label="EBC 业务能力" required=""><template data-component="Input" data-model-value="(data.ebc)" aria-label="EBC 业务能力" data-bind-maxlength="(80)"></template></template><template data-component="FormItem" label="负责人" required=""><template data-component="Input" data-model-value="(data.owner)" aria-label="PBC 负责人" data-bind-maxlength="(60)"></template></template><template data-component="FormItem" label="职责与边界"><template data-component="Input.TextArea" data-model-value="(data.description)" aria-label="PBC 职责与边界" data-bind-rows="(4)" data-bind-maxlength="(1000)"></template></template><template data-component="FormItem" label="变更原因" required=""><template data-component="Input.TextArea" data-model-value="(reason)" aria-label="PBC 变更原因" data-bind-maxlength="(500)" data-bind-rows="(3)"></template></template></template><template data-slot="footer"><template data-component="Space"><template data-component="Button" data-on-click="(close)">取消</template><template data-component="Button" type="primary" data-bind-disabled="(!allowed)" data-bind-loading="(busy)" data-on-click="(save)">保存资料</template></template></template></template>
@@ -1,27 +0,0 @@
1
- import { computed, reactive, ref } from '../../runtime/state.js';
2
- import { Alert, Button, Drawer, Form, FormItem, Input, Space } from "../../runtime/widgets.js";
3
- import { usePbcManagement } from "./managementStore.js";
4
- import { useSession } from "../shared/session.js";
5
- import { confirmAction } from "../shell/confirmation.js";
6
- import { createComponent } from '../../runtime/dom.js';
7
- export default createComponent({ name: 'PbcEditor', propKeys: ["record"], template: new URL('./PbcEditor.html', import.meta.url).href, setup(__props, __emit) {
8
- const props = __props, emit = __emit, store = usePbcManagement(), session = useSession(), version = props.record.recordVersion;
9
- const data = reactive({ name: props.record.name, ebc: props.record.ebc, owner: props.record.owner, description: props.record.description || '' }), initial = JSON.stringify(data), reason = ref(''), error = ref(''), busy = ref(false);
10
- const allowed = computed(() => session.can('pbc:edit', props.record.tenantId, props.record.id));
11
- function close() { if (JSON.stringify(data) !== initial || reason.value)
12
- confirmAction({ title: '放弃未保存的修改?', content: '已保存的 PBC 资料保持不变。', okText: '放弃修改', cancelText: '继续编辑', onOk: () => emit('close') });
13
- else
14
- emit('close'); }
15
- function save() { if (busy.value)
16
- return; busy.value = true; try {
17
- store.save(props.record.id, version, data, reason.value);
18
- emit('saved');
19
- }
20
- catch (e) {
21
- error.value = e.message;
22
- }
23
- finally {
24
- busy.value = false;
25
- } }
26
- return { computed, reactive, ref, Alert, Button, Drawer, Form, FormItem, Input, Space, usePbcManagement, useSession, confirmAction, props, emit, store, session, version, data, initial, reason, error, busy, allowed, close, save };
27
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/pbc/PbcLifecycle.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Modal" data-bind-open="(true)" data-bind-title="(verb + ' ' + record.name)" data-bind-mask-closable="(false)" data-on-cancel="(emit('close'))"><template data-component="Alert" show-icon="" type="info" data-bind-title="(verb === '归档' ? '归档后保留历史,停止新增归属与配置。' : '恢复后可继续新增需求归属与配置。')" description="这项管理操作不会停止服务、删除仓库或变更生产环境。"></template><label for="pbc-lifecycle-reason" class="pbc-label">{{ (verb) }}原因</label><template data-component="Input.TextArea" id="pbc-lifecycle-reason" data-model-value="(reason)" aria-label="状态变更原因" data-bind-rows="(3)" data-bind-maxlength="(500)"></template><template data-component="Alert" data-if="(error)" type="error" show-icon="" data-bind-title="(error)" class="page-alert"></template><template data-slot="footer"><template data-component="Button" data-on-click="(emit('close'))">取消</template><template data-component="Button" type="primary" data-on-click="(save)">确认{{ (verb) }}</template></template></template>
@@ -1,16 +0,0 @@
1
- import { ref } from '../../runtime/state.js';
2
- import { Alert, Button, Input, Modal } from "../../runtime/widgets.js";
3
- import { stateOf } from "./management.js";
4
- import { usePbcManagement } from "./managementStore.js";
5
- import { createComponent } from '../../runtime/dom.js';
6
- export default createComponent({ name: 'PbcLifecycle', propKeys: ["record"], template: new URL('./PbcLifecycle.html', import.meta.url).href, setup(__props, __emit) {
7
- const props = __props, emit = __emit, store = usePbcManagement(), reason = ref(''), error = ref(''), version = props.record.recordVersion, verb = stateOf(props.record) === 'active' ? '归档' : '恢复';
8
- function save() { try {
9
- store.archive(props.record.id, version, reason.value);
10
- emit('saved');
11
- }
12
- catch (e) {
13
- error.value = e.message;
14
- } }
15
- return { ref, Alert, Button, Input, Modal, stateOf, usePbcManagement, props, emit, store, reason, error, version, verb, save };
16
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/pbc/PbcPage.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Result" data-if="(!intent || !spec || !session.readable('pbc:view', intent.tenantId))" status="403" title="归属页面不可访问或尚未生成规格"><template data-slot="extra"><template data-component="Button" data-on-click="(router.push('/intents/' + id + '/spec'))">返回规格工作区</template></template></template><template data-else=""><template data-component="SpecHeader" data-bind-intent="(intent)" data-bind-version="(version)" data-bind-step="(2)"><template data-component="Button" data-on-click="(router.push('/intents/' + id + '/spec/review'))">查看规格评审</template></template><template data-component="Alert" data-if="(error || store.notice)" type="error" show-icon="" data-bind-title="(error || store.notice)" class="page-alert"></template><template data-component="Alert" data-if="(sourceError)" type="warning" show-icon="" data-bind-title="(sourceError)" class="page-alert"></template><section data-if="(job?.status === 'done')" class="panel delivery-main"><div class="section-heading"><div><h2>PBC 归属已完成,可以发起研发交付</h2><p class="muted">将本次已确认规格交给所选交付流程,查看执行阶段和产物。</p></div><template data-component="Space" wrap=""><template data-component="Button" data-on-click="(router.push('/pbcs/' + job.pbc.id))">打开 PBC 概览</template><template data-component="Button" data-on-click="(router.push('/pbcs/' + job.pbc.id + '/workspace'))">进入交付工作区</template><template data-component="TaskLaunch" data-bind-intent-id="(id)"></template></template></div></section><template data-component="PbcProgress" data-if="(job)" data-bind-job="(job)"></template><template data-else=""><section class="panel delivery-main"><div class="section-heading"><div><h2>关联已有 PBC</h2><p class="muted">为当前需求确定业务归属。优先复用已有业务系统,按授权选择。</p></div><template data-component="Button" data-bind-disabled="(!!sourceError || !session.can('pbc:create', intent.tenantId))" data-on-click="(wizard = true)">创建新 PBC</template></div><template data-component="PbcPicker" data-bind-tenant-id="(intent.tenantId)" data-bind-value="(selected)" data-on-change="(selected = $event)"></template><div class="pbc-link-review"><div><strong>{{ (target ? '已选择:' + target.name : '请选择一个 PBC') }}</strong><p class="muted">来源意图 v{{ (version?.source.version) }} · 规格 v{{ (version?.number) }} · {{ (target?.ebc || '选择后核对 EBC 归属与负责人') }}</p></div><template data-component="Button" type="primary" data-bind-disabled="(!target || !!sourceError || !session.can('pbc:link', intent.tenantId, target?.id))" data-bind-loading="(submitting)" data-on-click="(link)">核对并关联</template></div></section></template><template data-component="PbcWizard" data-if="(wizard &amp;&amp; !job &amp;&amp; !sourceError &amp;&amp; session.can('pbc:create', intent.tenantId))" data-bind-key="(id)" data-bind-intent-id="(id)" data-on-close="(wizard = false)"></template></template>