@givolt/i3-composer-agent 3.2.1 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/plugins/marketplace.json +1 -1
- package/.claude/commands/i3-build.md +1 -0
- package/.claude/commands/i3-code-simplify.md +1 -0
- package/.claude/commands/i3-constraints.md +1 -0
- package/.claude/commands/i3-plan.md +1 -0
- package/.claude/commands/i3-review.md +1 -0
- package/.claude/commands/i3-ship.md +1 -0
- package/.claude/commands/i3-spec.md +1 -0
- package/.claude/commands/i3-test.md +1 -0
- package/.claude/commands/i3-webperf.md +1 -0
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +2 -2
- package/README.md +31 -25
- package/bin/i3-composer-agent.cjs +4 -59
- package/bin/install.cjs +6 -14
- package/bin/native-layout.cjs +11 -2
- package/bin/native-migration.cjs +68 -28
- package/bin/retired-custom-fingerprints.json +1597 -0
- package/bin/wizard.cjs +2 -13
- package/docs/antigravity-setup.md +3 -1
- package/docs/codebuddy-setup.md +19 -76
- package/docs/codex-setup.md +10 -4
- package/docs/comparison.md +1 -1
- package/docs/copilot-cli-setup.md +4 -4
- package/docs/cursor-setup.md +1 -1
- package/docs/gemini-cli-setup.md +1 -1
- package/docs/other-hosts.md +2 -2
- package/docs/windsurf-setup.md +2 -2
- package/docs/workbuddy-setup.md +9 -16
- package/evals/README.md +10 -0
- package/evals/cases/i3-code-simplification.json +8 -0
- package/evals/cases/i3-documentation-and-adrs.json +4 -0
- package/evals/cases/i3-enterprise-sop.json +1 -1
- package/evals/cases/i3-frontend-ui-engineering.json +1 -1
- package/evals/cases/i3-security-and-hardening.json +4 -0
- package/evals/cases/i3-ui-demo.json +2 -2
- package/evals/cases/i3-using-agent-skills.json +5 -5
- package/evals/plugin/simplify-fires-on-pasted-function/graders/behavior-kept-and-explained.md +7 -0
- package/evals/plugin/simplify-fires-on-pasted-function/graders/skill-fired.md +5 -0
- package/evals/plugin/simplify-fires-on-pasted-function/prompt.md +30 -0
- package/evals/plugin/simplify-stays-quiet-on-make-it-fast/graders/not-fired.md +8 -0
- package/evals/plugin/simplify-stays-quiet-on-make-it-fast/prompt.md +20 -0
- package/evals/zh-CN/cases/i3-code-simplification.json +8 -0
- package/evals/zh-CN/cases/i3-documentation-and-adrs.json +4 -0
- package/evals/zh-CN/cases/i3-enterprise-sop.json +1 -1
- package/evals/zh-CN/cases/i3-frontend-ui-engineering.json +2 -2
- package/evals/zh-CN/cases/i3-security-and-hardening.json +4 -0
- package/evals/zh-CN/cases/i3-ui-demo.json +2 -2
- package/evals/zh-CN/cases/i3-using-agent-skills.json +6 -6
- package/hooks/SDD-CACHE.md +1 -1
- package/package.json +13 -80
- package/plugin.json +15 -2
- package/references/accessibility-checklist.md +4 -4
- package/references/performance-checklist.md +5 -4
- package/references/testing-patterns.md +2 -1
- package/scripts/floor-guard-reference-test.js +32 -0
- package/scripts/lib/execution-status.js +44 -0
- package/scripts/run-evals-test.js +157 -7
- package/scripts/run-evals.js +59 -12
- package/scripts/ui-demo-test.js +2 -2
- package/scripts/validate-artifact-paths-test.js +14 -0
- package/scripts/validate-artifact-paths.js +4 -2
- package/skills/i3-api-and-interface-design/SKILL.md +3 -1
- package/skills/i3-ci-cd-and-automation/SKILL.md +7 -4
- package/skills/i3-code-simplification/SKILL.md +3 -3
- package/skills/i3-constraint-driven-development/SKILL.md +4 -4
- package/skills/i3-constraint-driven-development/references/floor-guard.md +2 -2
- package/skills/i3-context-engineering/SKILL.md +1 -1
- package/skills/i3-debugging-and-error-recovery/SKILL.md +1 -1
- package/skills/i3-deprecation-and-migration/SKILL.md +6 -1
- package/skills/i3-documentation-and-adrs/SKILL.md +3 -2
- package/skills/i3-enterprise-sop/SKILL.md +38 -71
- package/skills/i3-enterprise-sop/references/engineering-skeleton/directory-standard.md +7 -7
- package/skills/i3-enterprise-sop/references/handoff.py +149 -120
- package/skills/i3-enterprise-sop/references/technical-baseline/baselines/enterprise-application-technical-baseline-v0-0-4.md +24 -24
- package/skills/i3-enterprise-sop/references/technical-baseline/templates/technical-baseline.md +8 -8
- package/skills/i3-enterprise-sop/references/templates/ad.md +31 -31
- package/skills/i3-enterprise-sop/references/templates/brd.md +6 -6
- package/skills/i3-enterprise-sop/references/templates/prd.md +37 -37
- package/skills/i3-enterprise-sop/references/templates/testcase.md +25 -25
- package/skills/i3-frontend-ui-engineering/SKILL.md +6 -10
- package/skills/i3-idea-refine/SKILL.md +4 -2
- package/skills/i3-incremental-implementation/SKILL.md +0 -4
- package/skills/i3-performance-optimization/SKILL.md +2 -2
- package/skills/i3-security-and-hardening/references/hardening-patterns.md +5 -0
- package/skills/i3-source-driven-development/SKILL.md +3 -2
- package/skills/i3-spec-driven-development/SKILL.md +1 -1
- package/skills/i3-ui-demo/SKILL.md +3 -1
- package/skills/i3-ui-demo/references/dependencies.md +1 -1
- package/skills/i3-ui-demo/references/resources.md +1 -1
- package/skills/i3-ui-demo/scripts/dependencies.cjs +0 -3
- package/skills/i3-using-agent-skills/SKILL.md +2 -2
- package/.claude/commands/i3-prototype.md +0 -23
- package/.gemini/commands/i3-prototype.toml +0 -23
- package/commands/i3-prototype.toml +0 -23
- package/evals/cases/i3-ui-prototype.json +0 -158
- package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.css +0 -3
- package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.js +0 -8
- package/evals/fixtures/i3-ui-prototype/admin-list/capability-definition.json +0 -67
- package/evals/fixtures/i3-ui-prototype/admin-list/index.html +0 -89
- package/evals/fixtures/i3-ui-prototype/admin-list/readme.md +0 -52
- package/evals/fixtures/i3-ui-prototype/admin-list/template.json +0 -8
- package/evals/fixtures/i3-ui-prototype/business-brief.md +0 -7
- package/evals/zh-CN/cases/i3-ui-prototype.json +0 -165
- package/hooks/PROTOTYPE.md +0 -31
- package/hooks/codebuddy-upstream.cjs +0 -93
- package/hooks/i3-prototype.cjs +0 -7
- package/hooks/manage.cjs +0 -169
- package/scripts/design-provider-discovery-test.js +0 -190
- package/scripts/design-provider-test.js +0 -75
- package/scripts/enterprise-template-test.js +0 -205
- package/scripts/lib/prototype-fixture.cjs +0 -17
- package/scripts/prototype-cache-test.js +0 -55
- package/scripts/prototype-generation-entry-test.js +0 -6
- package/scripts/prototype-generation-evidence-test.js +0 -10
- package/scripts/prototype-generation-native-test.js +0 -78
- package/scripts/prototype-generation-test.js +0 -99
- package/scripts/prototype-inventory-test.js +0 -43
- package/scripts/prototype-locations-test.js +0 -79
- package/scripts/prototype-project-test.js +0 -183
- package/scripts/template-adapter-test.js +0 -155
- package/scripts/ui-prototype-binding-recovery-test.js +0 -84
- package/scripts/ui-prototype-buddy-lifecycle-test.js +0 -102
- package/scripts/ui-prototype-codebuddy-hook-test.js +0 -112
- package/scripts/ui-prototype-content-test.js +0 -123
- package/scripts/ui-prototype-dependencies-test.js +0 -226
- package/scripts/ui-prototype-devtools-test.js +0 -53
- package/scripts/ui-prototype-execution-evidence-test.js +0 -62
- package/scripts/ui-prototype-execution-gates-test.js +0 -91
- package/scripts/ui-prototype-execution-policy-test.js +0 -53
- package/scripts/ui-prototype-execution-runtime-test.js +0 -27
- package/scripts/ui-prototype-ide-source-test.js +0 -73
- package/scripts/ui-prototype-native-test.js +0 -526
- package/scripts/ui-prototype-recovery-test.js +0 -81
- package/scripts/ui-prototype-registration-test.js +0 -53
- package/scripts/ui-prototype-template-test.js +0 -261
- package/scripts/ui-prototype-test.js +0 -124
- package/scripts/ui-prototype-transcript-auto-test.js +0 -67
- package/skills/i3-ui-prototype/SKILL.md +0 -256
- package/skills/i3-ui-prototype/assets/capabilities/generation.json +0 -833
- package/skills/i3-ui-prototype/assets/capabilities/management.json +0 -294
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/acceptance.json +0 -51
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/component-map.json +0 -13
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/generation-component-map.json +0 -300
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/index.html +0 -11
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package-lock.json +0 -2298
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package.json +0 -22
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/public/prototype-config.json +0 -6
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/App.vue +0 -136
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/components/DeviceEditor.vue +0 -111
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/config.ts +0 -19
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/content.ts +0 -28
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/devices.ts +0 -50
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/theme.ts +0 -25
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/main.ts +0 -18
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/style.css +0 -50
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/useDevices.ts +0 -66
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/devices.test.ts +0 -44
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/theme.test.ts +0 -26
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tsconfig.json +0 -15
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/vite.config.ts +0 -4
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/profile.json +0 -174
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/readme.md +0 -61
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/index.html +0 -11
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package-lock.json +0 -2298
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package.json +0 -22
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/public/prototype-config.json +0 -21
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/App.vue +0 -62
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/PrototypeShell.vue +0 -59
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/config.ts +0 -23
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/presentation.ts +0 -29
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/theme.ts +0 -25
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/main.ts +0 -18
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/style.css +0 -26
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/presentation.test.ts +0 -23
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/theme.test.ts +0 -26
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tsconfig.json +0 -15
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/vite.config.ts +0 -4
- package/skills/i3-ui-prototype/assets/hosts/codebuddy/profile.json +0 -17
- package/skills/i3-ui-prototype/assets/optional-skills/host-targets.json +0 -739
- package/skills/i3-ui-prototype/assets/optional-skills/sources.json +0 -27
- package/skills/i3-ui-prototype/assets/templates/catalog.js +0 -149
- package/skills/i3-ui-prototype/assets/templates/catalog.json +0 -149
- package/skills/i3-ui-prototype/assets/templates/classic-admin/manifest.json +0 -9
- package/skills/i3-ui-prototype/assets/templates/classic-admin/preset.json +0 -6
- package/skills/i3-ui-prototype/assets/templates/common/app/app.mjs +0 -89
- package/skills/i3-ui-prototype/assets/templates/common/app/config.json +0 -1
- package/skills/i3-ui-prototype/assets/templates/common/app/domain.mjs +0 -20
- package/skills/i3-ui-prototype/assets/templates/common/app/index.html +0 -17
- package/skills/i3-ui-prototype/assets/templates/common/app/serve.cjs +0 -16
- package/skills/i3-ui-prototype/assets/templates/common/app/styles.css +0 -670
- package/skills/i3-ui-prototype/assets/templates/common/app/tokens.css +0 -19
- package/skills/i3-ui-prototype/assets/templates/common/design-system/master.md +0 -20
- package/skills/i3-ui-prototype/assets/templates/common/gallery.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/common/mocks/applications.json +0 -5
- package/skills/i3-ui-prototype/assets/templates/common/requirements-map.json +0 -8
- package/skills/i3-ui-prototype/assets/templates/common/serve-gallery.cjs +0 -16
- package/skills/i3-ui-prototype/assets/templates/credits.md +0 -17
- package/skills/i3-ui-prototype/assets/templates/data-operations/manifest.json +0 -9
- package/skills/i3-ui-prototype/assets/templates/data-operations/preset.json +0 -6
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/capability-definition.json +0 -294
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/component-inventory.json +0 -707
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/design-system.md +0 -32
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/generation.json +0 -49
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/index.html +0 -534
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/manifest.json +0 -9
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline-build.json +0 -265
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline.js +0 -8888
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/origin.json +0 -344
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/preset.json +0 -928
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/app.js +0 -22
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/empty.svg +0 -1
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/reference-styles.json +0 -1
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-403.svg +0 -1
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-404.svg +0 -1
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets-manifest.json +0 -334
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/baseline.json +0 -173
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/conversion.md +0 -30
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/credits.md +0 -17
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/design-tokens.json +0 -881
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/index.html +0 -28
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +0 -9
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +0 -22
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +0 -21
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/package.json +0 -12
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/browser-routes.json +0 -298
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/coverage.json +0 -180
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/integrity.json +0 -13
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/keyboard.json +0 -11
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/responsive.json +0 -125
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/review.md +0 -51
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/rules.log +0 -150
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/selection.json +0 -9
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +0 -342
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/readme.md +0 -73
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/reference.md +0 -59
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/routes.json +0 -178
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/controls.js +0 -99
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dialogs.js +0 -54
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dom.js +0 -264
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/forms.js +0 -47
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/icons.js +0 -41
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/layout.js +0 -47
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/router.js +0 -63
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/state.js +0 -90
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/table.js +0 -41
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/widgets.js +0 -8
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +0 -36
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +0 -51
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +0 -48
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +0 -6
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +0 -13
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/data.js +0 -24
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/domain.js +0 -32
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/registry.js +0 -25
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/store.js +0 -85
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +0 -17
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +0 -66
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +0 -38
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +0 -66
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +0 -5
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +0 -12
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +0 -11
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +0 -116
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +0 -32
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +0 -49
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +0 -10
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +0 -77
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/data.js +0 -60
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/domain.js +0 -105
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/store.js +0 -212
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +0 -18
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +0 -23
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +0 -78
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +0 -55
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +0 -26
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +0 -38
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +0 -7
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +0 -72
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +0 -46
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +0 -52
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.js +0 -19
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +0 -30
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/data.js +0 -48
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/domain.js +0 -39
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/store.js +0 -129
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +0 -4
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +0 -21
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +0 -8
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +0 -37
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +0 -10
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +0 -37
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +0 -49
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +0 -4
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +0 -22
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +0 -9
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/commands.js +0 -82
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/examples.js +0 -47
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/model.js +0 -61
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/repair.js +0 -68
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/store.js +0 -55
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/types.js +0 -1
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/workbench.js +0 -18
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +0 -28
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +0 -18
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +0 -31
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +0 -27
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +0 -16
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +0 -43
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +0 -4
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +0 -34
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +0 -30
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +0 -67
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +0 -41
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +0 -31
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +0 -26
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +0 -70
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/data.js +0 -8
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/domain.js +0 -62
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/management.js +0 -36
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +0 -49
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/store.js +0 -132
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +0 -38
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +0 -11
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +0 -45
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +0 -54
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +0 -27
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +0 -12
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +0 -45
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +0 -38
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/domain.js +0 -61
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/state.js +0 -51
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/store.js +0 -116
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +0 -45
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +0 -4
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +0 -30
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +0 -67
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +0 -5
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +0 -4
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +0 -60
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/commands.js +0 -157
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/model.js +0 -136
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/store.js +0 -76
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +0 -26
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +0 -14
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +0 -113
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +0 -62
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/commands.js +0 -97
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/model.js +0 -147
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/store.js +0 -13
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +0 -9
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +0 -8
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +0 -37
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +0 -8
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +0 -17
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/columns.js +0 -32
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +0 -49
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +0 -12
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +0 -15
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +0 -37
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/policy.js +0 -68
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/session.js +0 -44
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +0 -25
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +0 -53
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +0 -10
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +0 -30
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +0 -10
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +0 -9
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/navigation.js +0 -19
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +0 -8
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +0 -32
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +0 -15
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +0 -11
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +0 -57
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +0 -37
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/data.js +0 -20
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/domain.js +0 -55
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/store.js +0 -151
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +0 -18
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +0 -40
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +0 -51
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +0 -9
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +0 -5
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +0 -48
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/domain.js +0 -204
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +0 -22
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/registry.js +0 -135
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/store.js +0 -137
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +0 -36
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/model.js +0 -56
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/store.js +0 -15
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +0 -27
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +0 -4
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +0 -31
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +0 -68
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +0 -5
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +0 -55
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/data.js +0 -16
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/domain.js +0 -83
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/registry.js +0 -18
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/store.js +0 -61
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/admin.css +0 -60
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/agents.css +0 -46
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/antdv.css +0 -295
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/app.css +0 -102
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/delivery.css +0 -4
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/intents.css +0 -37
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/native.css +0 -22
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/operations.css +0 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pbc.css +0 -3
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/permissions.css +0 -22
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pro.css +0 -1
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/releases.css +0 -4
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reset.css +0 -246
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reviews.css +0 -8
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tasks.css +0 -6
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tokens.css +0 -15
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workbench.css +0 -61
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workflows.css +0 -1
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +0 -96
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/agents.test.js +0 -14
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +0 -37
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +0 -44
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +0 -19
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +0 -14
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operations.test.js +0 -25
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +0 -17
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +0 -24
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +0 -23
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permissions.test.js +0 -24
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/releases.test.js +0 -50
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/reviews.test.js +0 -36
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +0 -28
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +0 -42
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +0 -16
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +0 -11
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/tasks.test.js +0 -27
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workbench.test.js +0 -34
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workflows.test.js +0 -16
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/convert.mjs +0 -168
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/serve.mjs +0 -7
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/styles.mjs +0 -11
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/verify.mjs +0 -24
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/serve.cjs +0 -16
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template-inventory.json +0 -28791
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template.json +0 -9
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/usability.css +0 -44
- package/skills/i3-ui-prototype/assets/templates/gallery/index.html +0 -40
- package/skills/i3-ui-prototype/assets/templates/generation-options.js +0 -42
- package/skills/i3-ui-prototype/assets/templates/index.html +0 -3
- package/skills/i3-ui-prototype/assets/templates/modern-workspace/manifest.json +0 -9
- package/skills/i3-ui-prototype/assets/templates/modern-workspace/preset.json +0 -6
- package/skills/i3-ui-prototype/assets/templates/presentation.html +0 -17
- package/skills/i3-ui-prototype/assets/templates/serve-gallery.cjs +0 -23
- package/skills/i3-ui-prototype/references/artifact-contract.md +0 -66
- package/skills/i3-ui-prototype/references/content-template.md +0 -81
- package/skills/i3-ui-prototype/references/enterprise-admin.md +0 -44
- package/skills/i3-ui-prototype/references/entry-contract.md +0 -71
- package/skills/i3-ui-prototype/references/execution-evidence.md +0 -51
- package/skills/i3-ui-prototype/references/expert-adapter.md +0 -76
- package/skills/i3-ui-prototype/references/framework-contract.md +0 -76
- package/skills/i3-ui-prototype/references/generation-contract.md +0 -122
- package/skills/i3-ui-prototype/references/interaction-acceptance.md +0 -169
- package/skills/i3-ui-prototype/references/legacy-native.md +0 -58
- package/skills/i3-ui-prototype/references/optional-skills.md +0 -63
- package/skills/i3-ui-prototype/references/project-layout.md +0 -92
- package/skills/i3-ui-prototype/references/template-adapters.md +0 -63
- package/skills/i3-ui-prototype/references/workflow-contract.md +0 -77
- package/skills/i3-ui-prototype/scripts/adapters/easel-html.cjs +0 -30
- package/skills/i3-ui-prototype/scripts/adapters/legacy-html.cjs +0 -28
- package/skills/i3-ui-prototype/scripts/browser-workspace.cjs +0 -72
- package/skills/i3-ui-prototype/scripts/buddy-host.cjs +0 -40
- package/skills/i3-ui-prototype/scripts/check-design-provider.cjs +0 -9
- package/skills/i3-ui-prototype/scripts/check-prototype.cjs +0 -14
- package/skills/i3-ui-prototype/scripts/codebuddy-context.cjs +0 -92
- package/skills/i3-ui-prototype/scripts/codebuddy-hook.cjs +0 -298
- package/skills/i3-ui-prototype/scripts/codebuddy-ide-source.cjs +0 -69
- package/skills/i3-ui-prototype/scripts/codebuddy-registration.cjs +0 -125
- package/skills/i3-ui-prototype/scripts/content-template.cjs +0 -98
- package/skills/i3-ui-prototype/scripts/design-provider-discovery.cjs +0 -128
- package/skills/i3-ui-prototype/scripts/enterprise-template.cjs +0 -104
- package/skills/i3-ui-prototype/scripts/execution-assertions.cjs +0 -43
- package/skills/i3-ui-prototype/scripts/execution-diagnostics.cjs +0 -91
- package/skills/i3-ui-prototype/scripts/execution-evidence.cjs +0 -177
- package/skills/i3-ui-prototype/scripts/execution-gates.cjs +0 -216
- package/skills/i3-ui-prototype/scripts/execution-policy.cjs +0 -62
- package/skills/i3-ui-prototype/scripts/execution-recovery.cjs +0 -58
- package/skills/i3-ui-prototype/scripts/execution-runtime.cjs +0 -69
- package/skills/i3-ui-prototype/scripts/generation-assets.cjs +0 -18
- package/skills/i3-ui-prototype/scripts/generation-contract.cjs +0 -214
- package/skills/i3-ui-prototype/scripts/generation-evidence.cjs +0 -50
- package/skills/i3-ui-prototype/scripts/generation-replan.cjs +0 -34
- package/skills/i3-ui-prototype/scripts/hosts/codebuddy.cjs +0 -21
- package/skills/i3-ui-prototype/scripts/init-prototype.cjs +0 -8
- package/skills/i3-ui-prototype/scripts/manage-baseline.cjs +0 -11
- package/skills/i3-ui-prototype/scripts/native-browser.cjs +0 -785
- package/skills/i3-ui-prototype/scripts/native-build.cjs +0 -91
- package/skills/i3-ui-prototype/scripts/native-command.cjs +0 -35
- package/skills/i3-ui-prototype/scripts/native-delivery.cjs +0 -104
- package/skills/i3-ui-prototype/scripts/native-devtools.cjs +0 -92
- package/skills/i3-ui-prototype/scripts/native-files.cjs +0 -44
- package/skills/i3-ui-prototype/scripts/native-pilot-lib.cjs +0 -290
- package/skills/i3-ui-prototype/scripts/native-pilot.cjs +0 -59
- package/skills/i3-ui-prototype/scripts/native-tool-name.cjs +0 -5
- package/skills/i3-ui-prototype/scripts/native-tool-result.cjs +0 -14
- package/skills/i3-ui-prototype/scripts/optional-skill-install.cjs +0 -203
- package/skills/i3-ui-prototype/scripts/project-registry.cjs +0 -126
- package/skills/i3-ui-prototype/scripts/prototype-dependencies.cjs +0 -103
- package/skills/i3-ui-prototype/scripts/prototype-hooks.cjs +0 -94
- package/skills/i3-ui-prototype/scripts/prototype-lib.cjs +0 -277
- package/skills/i3-ui-prototype/scripts/prototype-locations.cjs +0 -69
- package/skills/i3-ui-prototype/scripts/ptc-callbacks.cjs +0 -131
- package/skills/i3-ui-prototype/scripts/sync-template.cjs +0 -19
- package/skills/i3-ui-prototype/scripts/template-adapters.cjs +0 -89
- package/skills/i3-ui-prototype/scripts/template-contract.cjs +0 -407
- package/skills/i3-ui-prototype/scripts/template-inventory.cjs +0 -78
- 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
|
-
}
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/model.js
DELETED
|
@@ -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);
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/repair.js
DELETED
|
@@ -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
|
-
}
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/store.js
DELETED
|
@@ -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
|
-
});
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -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 => r.status))].map(value => ({ 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 () => { })" 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) => '共 ' + 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 => ({ value: s.id, label: s.code + ' · ' + s.title + ' · ' + s.guide.label })))" placeholder="搜索需求名称或编号"></template><p class="muted">显示全部有权查看的需求;其中 {{ (candidates.filter(s => 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 && !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>
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js
DELETED
|
@@ -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
|
-
} });
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html
DELETED
|
@@ -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') && !!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 => store.serviceCheck(id, t))" data-bind-submit="(ts => store.serviceRemove(id, deleteVersion, ts))" data-on-close="(targets = [])" data-on-deleted="(targets = [])"></template></template>
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js
DELETED
|
@@ -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
|
-
} });
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html
DELETED
|
@@ -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>
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js
DELETED
|
@@ -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
|
-
} });
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html
DELETED
|
@@ -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>
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js
DELETED
|
@@ -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
|
-
} });
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html
DELETED
|
@@ -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 && !job && !sourceError && session.can('pbc:create', intent.tenantId))" data-bind-key="(id)" data-bind-intent-id="(id)" data-on-close="(wizard = false)"></template></template>
|