@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
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { computed, ref, watch } from '../../runtime/state.js';
|
|
2
|
-
import { useRoute, useRouter } from "../../runtime/router.js";
|
|
3
|
-
import { Alert, Button, Input, Modal, Result, Select, Space, Tag } from "../../runtime/widgets.js";
|
|
4
|
-
import { useIntents } from "../intents/store.js";
|
|
5
|
-
import { useSession } from "../shared/session.js";
|
|
6
|
-
import { useSpecs } from "./store.js";
|
|
7
|
-
import { currentVersion, differences, pendingDecisions, sourceOf, specBusy } from "./domain.js";
|
|
8
|
-
import { formatDate } from "../shared/policy.js";
|
|
9
|
-
import { confirmAction } from "../shell/confirmation.js";
|
|
10
|
-
import SpecHeader from "./SpecHeader.js";
|
|
11
|
-
import SpecDocument from "./SpecDocument.js";
|
|
12
|
-
import SpecEdit from "./SpecEdit.js";
|
|
13
|
-
import SpecHistory from "./SpecHistory.js";
|
|
14
|
-
import { createComponent } from '../../runtime/dom.js';
|
|
15
|
-
export default createComponent({ name: 'SpecReview', propKeys: [], template: new URL('./SpecReview.html', import.meta.url).href, setup(__props, __emit) {
|
|
16
|
-
const route = useRoute(), router = useRouter(), intents = useIntents(), store = useSpecs(), session = useSession();
|
|
17
|
-
const id = computed(() => String(route.params.id)), intent = computed(() => intents.get(id.value)), spec = computed(() => store.get(id.value)), version = computed(() => spec.value && currentVersion(spec.value));
|
|
18
|
-
const before = ref(), after = ref(), compare = ref(false), edit = ref(false), history = ref(false), replan = ref(false), reason = ref(''), error = ref('');
|
|
19
|
-
watch(() => version.value?.number, n => { after.value = n; before.value = n && n > 1 ? n - 1 : undefined; }, { immediate: true });
|
|
20
|
-
const viewed = computed(() => spec.value?.versions.find(v => v.number === after.value)), previous = computed(() => spec.value?.versions.find(v => v.number === before.value)), diff = computed(() => viewed.value ? differences(previous.value, viewed.value) : []);
|
|
21
|
-
const busy = computed(() => !!spec.value && specBusy(spec.value)), sourceError = computed(() => { try {
|
|
22
|
-
if (intent.value && version.value && sourceOf(intent.value).version !== version.value.source.version)
|
|
23
|
-
return '来源意图已变化,请重新生成规格。';
|
|
24
|
-
return '';
|
|
25
|
-
}
|
|
26
|
-
catch (e) {
|
|
27
|
-
return e.message;
|
|
28
|
-
} });
|
|
29
|
-
const blocked = computed(() => !spec.value || !viewed.value || !version.value || viewed.value.number !== version.value.number || !!version.value.confirmedAt || busy.value || !!sourceError.value || !!pendingDecisions(version.value).length || !session.can('spec:confirm', spec.value.tenantId));
|
|
30
|
-
const blockReason = computed(() => !session.can('spec:confirm', spec.value?.tenantId) ? '当前没有此租户的规格确认权限。请联系业务管理员在权限管理中配置;编辑权限不自动包含确认权限。' : viewed.value?.number !== version.value?.number ? '当前查看历史版本,请切换到最新版本后确认。' : busy.value ? '规格正在处理或确认结果待核实,请先完成核实。' : sourceError.value);
|
|
31
|
-
function confirm() { if (blocked.value)
|
|
32
|
-
return; const v = version.value, s = spec.value; confirmAction({ title: '确认规格 v' + v.number + '?', content: '来源:' + v.source.code + ' v' + v.source.version + '。本次确认绑定当前规格内容、决策结论与实际确认人 ' + session.actor.name + '。', okText: '确认此规格版本', cancelText: '继续核对', onOk: async () => { try {
|
|
33
|
-
error.value = '';
|
|
34
|
-
await store.confirm(id.value, v.number, s.recordVersion);
|
|
35
|
-
}
|
|
36
|
-
catch (e) {
|
|
37
|
-
error.value = e.message;
|
|
38
|
-
} } }); }
|
|
39
|
-
function reconcile() { try {
|
|
40
|
-
store.reconcile(id.value);
|
|
41
|
-
error.value = '';
|
|
42
|
-
}
|
|
43
|
-
catch (e) {
|
|
44
|
-
error.value = e.message;
|
|
45
|
-
} }
|
|
46
|
-
async function regenerate() { try {
|
|
47
|
-
if (!reason.value.trim())
|
|
48
|
-
throw Error('请填写重新规划原因。');
|
|
49
|
-
await store.generate(id.value, reason.value);
|
|
50
|
-
replan.value = false;
|
|
51
|
-
router.push('/intents/' + id.value + '/spec');
|
|
52
|
-
}
|
|
53
|
-
catch (e) {
|
|
54
|
-
error.value = e.message;
|
|
55
|
-
} }
|
|
56
|
-
return { computed, ref, watch, useRoute, useRouter, Alert, Button, Input, Modal, Result, Select, Space, Tag, useIntents, useSession, useSpecs, currentVersion, differences, pendingDecisions, sourceOf, specBusy, formatDate, confirmAction, SpecHeader, SpecDocument, SpecEdit, SpecHistory, route, router, intents, store, session, id, intent, spec, version, before, after, compare, edit, history, replan, reason, error, viewed, previous, diff, busy, sourceError, blocked, blockReason, confirm, reconcile, regenerate };
|
|
57
|
-
} });
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
<!-- 来源:src/specs/SpecWorkspace.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
|
|
2
|
-
<template data-component="Result" data-if="(!intent || !session.readable('spec:view', intent.tenantId))" status="403" title="规格不存在或当前没有查看权限"><template data-slot="extra"><template data-component="Button" data-on-click="(router.push('/intents'))">返回意图池</template></template></template><template data-else=""><template data-component="SpecHeader" data-bind-intent="(intent)" data-bind-version="(version)" data-bind-step="(0)"><template data-component="Button" data-if="(spec?.versions.length)" data-on-click="(history = true)">版本与记录</template><template data-component="Button" data-if="(version)" type="primary" data-on-click="(router.push('/intents/' + id + '/spec/review'))">进入规格评审</template><template data-component="TaskLaunch" data-if="(version?.confirmedAt)" data-bind-intent-id="(id)"></template></template><template data-component="Alert" data-if="(error || spec?.error || store.notice)" type="error" show-icon="" class="page-alert" data-bind-title="(error || spec?.error || store.notice)"></template><template data-component="Alert" data-if="(sourceError || stale)" type="warning" show-icon="" class="page-alert" data-bind-title="(sourceError || '来源意图已有新版本,请重新生成规格后评审。')"></template><template data-component="Alert" data-if="(spec?.confirmation === 'unknown')" type="warning" show-icon="" class="page-alert" title="确认结果待核实,修改暂不可用"><template data-slot="action"><template data-component="Button" data-on-click="(router.push('/intents/' + id + '/spec/review'))">核实原请求</template></template></template><template data-component="Alert" data-if="(generationReason)" type="info" show-icon="" class="page-alert" data-bind-title="(generationReason)"></template><template data-component="Alert" data-if="(version && !session.can('spec:edit', intent.tenantId))" type="info" show-icon="" class="page-alert" title="当前可查看规格,但缺少修改权限;需由有权人员处理未决事项。"></template><div class="delivery-grid"><section class="panel delivery-main"><template data-if="(spec?.generating)"><div role="status" aria-live="polite" class="intent-generating"><h2>正在整理需求规格…</h2><p class="muted">读取已确认意图 → 整理需求与验收 → 登记待决策事项</p><template data-component="Skeleton" active="" data-bind-paragraph="({ rows: 9 })"></template></div></template><template data-else-if="(version)"><div class="section-heading"><h2>需求规格 · v{{ (version.number) }}</h2><template data-component="Button" data-bind-disabled="(!session.can('spec:edit', intent.tenantId) || busy || !!sourceError || stale)" data-on-click="(edit = 'content')">修改规格</template></div><template data-component="SpecDocument" data-bind-version="(version)"></template></template><template data-else=""><template data-component="Empty" description="从已确认的意图生成第一版规格"><template data-slot="image"><span class="empty-spec-mark">Aa</span></template><p class="muted">包含需求、验收标准、成功标准、实体和页面清单。<br>生成后先完善未决事项,再人工确认。</p><template data-component="Button" type="primary" data-bind-disabled="(!session.can('spec:generate', intent.tenantId) || !!sourceError || !store.generationResource(intent.tenantId))" data-on-click="(generate)">生成需求规格</template></template></template></section><aside class="panel delivery-aside"><h2>本次规格</h2><p>来源:意图 v{{ (version?.source.version || intent.versions.at(-1)?.number) }}</p><p class="muted">{{ (intent.code) }}</p><template data-if="(version)"><div class="summary-context"><div class="section-heading"><h2>待处理事项</h2><template data-component="Tag" data-bind-color="(pendingDecisions(version).length ? 'orange' : 'green')">{{ (pendingDecisions(version).length) }} 项</template></div><p class="muted">补充决策结论与理由,记录实际操作人。</p><template data-component="Button" block="" data-bind-disabled="(!session.can('spec:edit', intent.tenantId) || busy || !!sourceError || stale)" data-on-click="(edit = 'decisions')">处理未决事项</template></div><nav class="spec-outline" aria-label="规格目录"><a data-each="s in (sections)" data-bind-key="(s.key)" data-bind-href="('#spec-' + s.key)" data-on-click.prevent="($el.ownerDocument.getElementById('spec-' + s.key)?.scrollIntoView({ block: 'start' }))">{{ (s.label) }}</a></nav></template><div class="summary-context"><h2>生成资源</h2><p>需求规划 Agent · v1.0(模拟)<br>{{ (store.generationResource(intent.tenantId)?.name || '配置引用失效') }} · v{{ (store.generationResource(intent.tenantId)?.version || '—') }}</p><template data-component="Tag" data-bind-color="(store.generationResource(intent.tenantId) ? 'green' : 'red')">{{ (store.generationResource(intent.tenantId) ? '资源可用(模拟)' : '资源不可用') }}</template><p class="muted">正式运行需由调用入口校验模型、Agent 与数据权限。</p><template data-component="Button" data-if="(version && !sourceError)" block="" data-bind-disabled="(busy || !session.can('spec:generate', intent.tenantId) || !session.can('spec:edit', intent.tenantId) || !store.generationResource(intent.tenantId))" data-on-click="(generate)">{{ (stale ? '按最新意图生成' : '重新生成规格') }}</template><template data-component="Button" data-if="(!version && spec?.error)" block="" data-bind-disabled="(busy || !session.can('spec:generate', intent.tenantId) || !!sourceError || !store.generationResource(intent.tenantId))" data-on-click="(generate)">重试生成</template></div><template data-component="RecordMetadata" data-if="(spec)" data-bind-record="(spec)" compact=""></template></aside></div><template data-component="SpecEdit" data-if="(edit && spec)" data-bind-spec="(spec)" data-bind-mode="(edit)" data-on-close="(edit = '')"></template><template data-component="SpecHistory" data-if="(history && spec)" data-bind-spec="(spec)" data-on-close="(history = false)"></template></template>
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import TaskLaunch from "../tasks/TaskLaunch.js";
|
|
2
|
-
import { computed, ref } from '../../runtime/state.js';
|
|
3
|
-
import { useRoute, useRouter } from "../../runtime/router.js";
|
|
4
|
-
import { Alert, Button, Empty, Result, Skeleton, Space, Tag } from "../../runtime/widgets.js";
|
|
5
|
-
import { useIntents } from "../intents/store.js";
|
|
6
|
-
import { useSession } from "../shared/session.js";
|
|
7
|
-
import { useSpecs } from "./store.js";
|
|
8
|
-
import { currentVersion, pendingDecisions, sourceOf, specBusy, sections } from "./domain.js";
|
|
9
|
-
import SpecHeader from "./SpecHeader.js";
|
|
10
|
-
import SpecDocument from "./SpecDocument.js";
|
|
11
|
-
import SpecEdit from "./SpecEdit.js";
|
|
12
|
-
import SpecHistory from "./SpecHistory.js";
|
|
13
|
-
import RecordMetadata from "../shared/RecordMetadata.js";
|
|
14
|
-
import { createComponent } from '../../runtime/dom.js';
|
|
15
|
-
export default createComponent({ name: 'SpecWorkspace', propKeys: [], template: new URL('./SpecWorkspace.html', import.meta.url).href, setup(__props, __emit) {
|
|
16
|
-
const route = useRoute(), router = useRouter(), intents = useIntents(), store = useSpecs(), session = useSession(), error = ref(''), edit = ref(''), history = ref(false);
|
|
17
|
-
const id = computed(() => String(route.params.id)), intent = computed(() => intents.get(id.value)), spec = computed(() => store.get(id.value)), version = computed(() => spec.value && currentVersion(spec.value));
|
|
18
|
-
const sourceError = computed(() => { try {
|
|
19
|
-
if (intent.value)
|
|
20
|
-
sourceOf(intent.value);
|
|
21
|
-
return '';
|
|
22
|
-
}
|
|
23
|
-
catch (e) {
|
|
24
|
-
return e.message;
|
|
25
|
-
} });
|
|
26
|
-
const stale = computed(() => !!version.value && intent.value?.versions.at(-1)?.number !== version.value.source.version);
|
|
27
|
-
const busy = computed(() => !!spec.value && specBusy(spec.value));
|
|
28
|
-
const generationReason = computed(() => !intent.value ? '' : !session.can('spec:generate', intent.value.tenantId) ? '当前没有此租户的规格生成权限,请联系业务管理员在权限管理中配置。' : !store.generationResource(intent.value.tenantId) ? '没有可用的生成资源,请先核对 Agent、模型状态及模型使用授权。' : '');
|
|
29
|
-
async function generate() { try {
|
|
30
|
-
error.value = '';
|
|
31
|
-
await store.generate(id.value, version.value ? '按最新已确认意图重新生成' : '首次生成规格');
|
|
32
|
-
}
|
|
33
|
-
catch (e) {
|
|
34
|
-
error.value = e.message;
|
|
35
|
-
} }
|
|
36
|
-
return { TaskLaunch, computed, ref, useRoute, useRouter, Alert, Button, Empty, Result, Skeleton, Space, Tag, useIntents, useSession, useSpecs, currentVersion, pendingDecisions, sourceOf, specBusy, sections, SpecHeader, SpecDocument, SpecEdit, SpecHistory, RecordMetadata, route, router, intents, store, session, error, edit, history, id, intent, spec, version, sourceError, stale, busy, generationReason, generate };
|
|
37
|
-
} });
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/data.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { sourceOf } from "./domain.js";
|
|
2
|
-
export function generatedContent(i) {
|
|
3
|
-
const source = sourceOf(i), heating = /报修|分诊/.test(source.title);
|
|
4
|
-
return {
|
|
5
|
-
overview: source.title + '\n' + i.outcome + '\n本规格仅定义需求与验收,技术方案在立项后的设计阶段确定。',
|
|
6
|
-
stories: heating ? 'R-001 [P1] 作为客服,我希望整理居民报修信息,便于后续分诊。\nR-002 [P1] 作为有权的业务人员,我希望查看分类、班组建议和依据。\nR-003 [P1] 作为获授派单确认权限的人,我希望核对或调整建议,再确认派单。' : 'R-001 [P1] 作为业务使用者,我希望完成:' + i.request + '\nR-002 [P1] 作为有权负责人,我希望核对处理结果及记录。',
|
|
7
|
-
requirements: heating ? 'FR-001 受理文本报修;信息不足时提示补充。\nFR-002 只查询已授权的设备台账、历史工单及班组数据。\nFR-003 分类与班组建议展示来源依据;缺失或冲突时转人工。\nFR-004 未经有效主管确认不得派单,修改建议后重新确认。\nFR-005 处理进度与异常可查询;重复确认不能重复派单。' : 'FR-001 ' + i.answers.process + '\nFR-002 ' + i.answers.boundary + '\nFR-003 记录来源、处理结果与实际确认人。',
|
|
8
|
-
acceptance: heating ? 'AC-001.1 GIVEN 报修信息缺少地址 WHEN 提交 THEN 提示补充且不直接派单。\nAC-002.1 GIVEN 数据不在授权租户/楼栋范围 WHEN 查询 THEN 拒绝访问且不泄露内容。\nAC-003.1 GIVEN 建议未确认或已经更新 WHEN 请求派单 THEN 拒绝执行。\nAC-003.2 GIVEN 同一派单请求重复或响应丢失 WHEN 重试 THEN 先核实结果且最终仅一份派单记录。\nAC-003.3 GIVEN 已派单但通知失败 WHEN 查看进度 THEN 保留已派单状态并显示通知异常。' : 'AC-001.1 GIVEN 已授权的业务输入 WHEN 完成处理 THEN ' + i.answers.acceptance + '\nAC-001.2 GIVEN 未授权请求 WHEN 操作 THEN 拒绝访问。\nAC-002.1 GIVEN 处理结果未知 WHEN 重试 THEN 先查询原操作结果。',
|
|
9
|
-
success: 'SC-001 每份处理结果能回溯输入、依据、确认人及版本。\nSC-002 必须人工确认的动作在无有效确认时不会执行。\n模型质量、性能、预算和代表性样本由试点负责人确定;本示例没有真实达标结论。',
|
|
10
|
-
entities: heating ? '报修:编号、描述、位置、受理时间、所属租户。\n分诊建议:分类、班组、来源依据、内容版本、状态。\n确认记录:确认人、权限范围、建议版本、时间、结果。\n工单与通知:关联报修、幂等标识、处理进度、异常。' : '业务请求:来源、内容、租户、发起人、时间。\n处理结果:关联请求、证据、版本与状态。\n确认记录:操作者、依据版本、时间和结果。',
|
|
11
|
-
pages: heating ? '报修受理:填写、补充与查询。\n分诊工作台:建议、证据、调整与确认。\n工单进度:处理记录、通知状态与异常。' : '业务工作台:输入与处理。\n结果详情:依据、确认与历史。\n进度页面:状态与异常恢复。',
|
|
12
|
-
assumptions: i.answers.boundary + '\nS22-A 中工单 PBC 与接口是演示对象,不表示已存在生产系统。\n不执行设备控制或参数调整;测试不触达真实派单、居民通知或生产环境。',
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
export function generatedDecisions() {
|
|
16
|
-
return [
|
|
17
|
-
{ id: 'decision-review', question: '建议依据不足时采用什么处理方式?', options: ['转人工复核,不自动派单', '补充信息后重新生成建议'], answer: '', reason: '', owner: '业务负责人(示例)' },
|
|
18
|
-
{ id: 'decision-pilot', question: '本轮验收使用哪些资源?', options: ['仅使用隔离的演示样本和模拟接口', '由试点负责人提供真实测试接口和样本后再验收'], answer: '', reason: '', owner: '试点负责人(示例)' },
|
|
19
|
-
];
|
|
20
|
-
}
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/domain.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { can, metadata } from "../shared/policy.js";
|
|
2
|
-
import { lastVersion } from "../intents/domain.js";
|
|
3
|
-
export const sections = [
|
|
4
|
-
{ key: 'overview', label: '需求概述' }, { key: 'stories', label: '用户故事' }, { key: 'requirements', label: '功能需求' },
|
|
5
|
-
{ key: 'acceptance', label: '验收标准' }, { key: 'success', label: '成功标准' }, { key: 'entities', label: '关键实体' },
|
|
6
|
-
{ key: 'pages', label: '页面清单' }, { key: 'assumptions', label: '假设与边界' },
|
|
7
|
-
];
|
|
8
|
-
export const clone = (value) => JSON.parse(JSON.stringify(value));
|
|
9
|
-
export const currentVersion = (s) => s.versions.at(-1);
|
|
10
|
-
export const pendingDecisions = (v) => v.decisions.filter(d => !d.answer.trim() || !d.reason.trim());
|
|
11
|
-
export const specBusy = (s) => s.generating || s.confirmation === 'pending' || s.confirmation === 'unknown';
|
|
12
|
-
export function sourceOf(i) {
|
|
13
|
-
const v = lastVersion(i);
|
|
14
|
-
if (i.isDeleted || i.status !== 'confirmed' || !v?.confirmedAt)
|
|
15
|
-
throw new Error('来源意图尚未确认,或存在新的待确认修订。请先返回意图核对。');
|
|
16
|
-
return { intentId: i.id, code: i.code, version: v.number, title: v.title, confirmedAt: v.confirmedAt };
|
|
17
|
-
}
|
|
18
|
-
export function assertSpec(s, actor, action, expected) {
|
|
19
|
-
if (!can(actor, action, s.tenantId) || s.isDeleted)
|
|
20
|
-
throw new Error('没有此规格操作权限,或不在授权范围。');
|
|
21
|
-
if (expected !== undefined && s.recordVersion !== expected)
|
|
22
|
-
throw new Error('规格已变化,请重新核对当前版本。');
|
|
23
|
-
if (specBusy(s))
|
|
24
|
-
throw new Error('正在处理中或结果待核实,请先核实后继续。');
|
|
25
|
-
}
|
|
26
|
-
export function newSpec(i, actor, at) {
|
|
27
|
-
sourceOf(i);
|
|
28
|
-
return { ...metadata(actor, at, i.tenantId), id: 'spec-' + i.id, intentId: i.id, versions: [], generating: false, error: '', confirmation: 'idle', events: [], replanNote: '', resourceAvailable: true };
|
|
29
|
-
}
|
|
30
|
-
export function appendVersion(s, source, content, decisions, reason, actor, at) {
|
|
31
|
-
if (sections.some(k => !content[k.key]?.trim()))
|
|
32
|
-
throw new Error('请补全规格各部分;未明确的内容应写明待澄清。');
|
|
33
|
-
const version = { number: (currentVersion(s)?.number || 0) + 1, source: clone(source), content: Object.fromEntries(sections.map(k => [k.key, content[k.key]])), decisions: clone(decisions), reason, createdBy: actor.name, createdAt: at, resource: currentVersion(s)?.resource && clone(currentVersion(s).resource) };
|
|
34
|
-
return { ...s, versions: [...s.versions, version], generating: false, error: '', confirmation: 'idle', pending: undefined };
|
|
35
|
-
}
|
|
36
|
-
export function beginSpecConfirmation(s, i, actor, expectedVersion, expectedRecord, id, at) {
|
|
37
|
-
assertSpec(s, actor, 'spec:confirm', expectedRecord);
|
|
38
|
-
const v = currentVersion(s), source = sourceOf(i);
|
|
39
|
-
if (!v || v.number !== expectedVersion || v.confirmedAt)
|
|
40
|
-
throw new Error('展示的版本已变化或已经确认,请重新核对。');
|
|
41
|
-
if (source.intentId !== v.source.intentId || source.version !== v.source.version)
|
|
42
|
-
throw new Error('来源意图版本已变化,请根据最新意图重新生成规格。');
|
|
43
|
-
if (pendingDecisions(v).length)
|
|
44
|
-
throw new Error('仍有待处理决策,请补充结论和理由后形成新版本。');
|
|
45
|
-
return { ...s, confirmation: 'pending', error: '', pending: { id, version: v.number, sourceVersion: source.version, actorId: actor.id, actor: actor.name, at } };
|
|
46
|
-
}
|
|
47
|
-
export function completeSpecConfirmation(s) {
|
|
48
|
-
const request = s.pending, v = currentVersion(s);
|
|
49
|
-
if (!request?.acceptedAt || !v || v.number !== request.version || v.source.version !== request.sourceVersion)
|
|
50
|
-
throw new Error('没有可核实的确认结果,或版本不一致。');
|
|
51
|
-
return { ...s, versions: [...s.versions.slice(0, -1), { ...clone(v), confirmedBy: request.actor, confirmedAt: request.acceptedAt }], confirmation: 'idle', pending: undefined, error: '' };
|
|
52
|
-
}
|
|
53
|
-
export function differences(before, after) {
|
|
54
|
-
return sections.map(s => ({ ...s, before: before?.content[s.key] || '', after: after.content[s.key], changed: before?.content[s.key] !== after.content[s.key] }));
|
|
55
|
-
}
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/store.js
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { computed, ref } from '../../runtime/state.js';
|
|
2
|
-
import { seedTaskSpecs } from "../tasks/exampleSource.js";
|
|
3
|
-
import { defineStore } from "../../runtime/state.js";
|
|
4
|
-
import { useSession } from "../shared/session.js";
|
|
5
|
-
import { useIntents } from "../intents/store.js";
|
|
6
|
-
import { useModels } from "../models/store.js";
|
|
7
|
-
import { generatedContent, generatedDecisions } from "./data.js";
|
|
8
|
-
import { appendVersion, assertSpec, beginSpecConfirmation, clone, completeSpecConfirmation, currentVersion, newSpec, sourceOf } from "./domain.js";
|
|
9
|
-
const storage = 'i3-prototype-antdv-specs-v010', now = () => new Date().toISOString();
|
|
10
|
-
export const useSpecs = defineStore('specs', () => {
|
|
11
|
-
const session = useSession(), intents = useIntents(), models = useModels(), records = ref(seedTaskSpecs()), notice = ref('');
|
|
12
|
-
const generation = ref('success'), resource = ref(true), confirmation = ref('success');
|
|
13
|
-
let epoch = 0;
|
|
14
|
-
try {
|
|
15
|
-
const saved = JSON.parse(localStorage.getItem(storage) || JSON.stringify(seedTaskSpecs()));
|
|
16
|
-
if (!Array.isArray(saved))
|
|
17
|
-
throw Error();
|
|
18
|
-
records.value = saved.map((s) => ({ ...s, generating: false, confirmation: s.confirmation === 'pending' ? 'unknown' : s.confirmation, error: s.generating ? '上次生成中断,已保存的内容仍保留,可重试。' : s.error }));
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
notice.value = '演示规格无法读取,已恢复为空。';
|
|
22
|
-
}
|
|
23
|
-
const items = computed(() => records.value.filter(s => !s.isDeleted && session.readable('spec:view', s.tenantId)));
|
|
24
|
-
const get = (intentId) => items.value.find(s => s.intentId === intentId);
|
|
25
|
-
function save(record, action, result = '成功(模拟)', actor = session.actor.name) {
|
|
26
|
-
const old = records.value.find(s => s.id === record.id), at = now(), v = currentVersion(record);
|
|
27
|
-
const next = { ...clone(record), recordVersion: (old?.recordVersion || 0) + 1, updatedAt: at, updatedBy: actor, events: [...record.events, { id: crypto.randomUUID(), action, actor, at, version: v?.number || 0, result }] };
|
|
28
|
-
const rows = old ? records.value.map(s => s.id === next.id ? next : s) : [next, ...records.value];
|
|
29
|
-
try {
|
|
30
|
-
localStorage.setItem(storage, JSON.stringify(rows));
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
throw Error('浏览器保存失败,操作未提交;请保留输入后重试。');
|
|
34
|
-
}
|
|
35
|
-
records.value = rows;
|
|
36
|
-
return next;
|
|
37
|
-
}
|
|
38
|
-
function intent(id) { const i = intents.get(id); if (!i)
|
|
39
|
-
throw Error('来源意图不存在或没有访问权限。'); return i; }
|
|
40
|
-
function record(id) { const s = get(id); if (!s)
|
|
41
|
-
throw Error('规格不存在或没有查看权限。'); return s; }
|
|
42
|
-
async function generate(id, reason = '首次生成规格') {
|
|
43
|
-
const i = intent(id);
|
|
44
|
-
sourceOf(i);
|
|
45
|
-
session.require('spec:generate', i.tenantId);
|
|
46
|
-
let s = get(id) || newSpec(i, session.actor, now());
|
|
47
|
-
assertSpec(s, session.actor, 'spec:generate');
|
|
48
|
-
if (currentVersion(s))
|
|
49
|
-
session.require('spec:edit', s.tenantId);
|
|
50
|
-
if (!resource.value || !models.generationResource(i.tenantId))
|
|
51
|
-
throw Error('规格生成资源暂不可用,请检查已授权的模型和 Agent 配置。');
|
|
52
|
-
if (!reason.trim())
|
|
53
|
-
throw Error('请填写重新规划原因。');
|
|
54
|
-
session.writeCheck();
|
|
55
|
-
const run = epoch, actor = clone(session.actor), mode = generation.value, source = sourceOf(i), generationRef = clone(models.generationResource(i.tenantId));
|
|
56
|
-
s = save({ ...s, generating: true, error: '', replanNote: reason }, '开始生成规格');
|
|
57
|
-
await new Promise(resolve => setTimeout(resolve, 900));
|
|
58
|
-
if (run !== epoch)
|
|
59
|
-
return;
|
|
60
|
-
const latest = records.value.find(r => r.id === s.id);
|
|
61
|
-
let error = '';
|
|
62
|
-
try {
|
|
63
|
-
session.require('spec:generate', latest.tenantId);
|
|
64
|
-
if (session.actor.id !== actor.id)
|
|
65
|
-
throw Error('演示身份已变化,请重新发起。');
|
|
66
|
-
if (sourceOf(intent(id)).version !== source.version)
|
|
67
|
-
throw Error('来源意图已变化,请根据最新确认版本重试。');
|
|
68
|
-
if (mode === 'failure')
|
|
69
|
-
throw Error('生成超时(模拟),意图与已有规格均已保留。');
|
|
70
|
-
}
|
|
71
|
-
catch (e) {
|
|
72
|
-
error = e.message;
|
|
73
|
-
}
|
|
74
|
-
if (error) {
|
|
75
|
-
save({ ...latest, generating: false, error }, '规格生成未完成', error, actor.name);
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
if (!resource.value || JSON.stringify(models.generationResource(i.tenantId)) !== JSON.stringify(generationRef) || currentVersion(latest) && !session.can('spec:edit', latest.tenantId)) {
|
|
79
|
-
save({ ...latest, generating: false, error: '生成期间资源或权限配置已变化,请检查后重试。' }, '规格生成未完成', '配置变化', actor.name);
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
const generated = appendVersion(latest, source, generatedContent(i), generatedDecisions(), reason, actor, now());
|
|
83
|
-
currentVersion(generated).resource = { ...generationRef, version: generationRef.version };
|
|
84
|
-
save(generated, '生成新规格', '成功(模拟);' + generationRef.agent + ' v' + generationRef.agentVersion + ' / 模型 ' + generationRef.name + ' v' + generationRef.version, actor.name);
|
|
85
|
-
}
|
|
86
|
-
function revise(id, content, decisions, reason, expected) {
|
|
87
|
-
const s = record(id);
|
|
88
|
-
session.require('spec:edit', s.tenantId);
|
|
89
|
-
assertSpec(s, session.actor, 'spec:edit', expected);
|
|
90
|
-
const v = currentVersion(s);
|
|
91
|
-
if (!v)
|
|
92
|
-
throw Error('请先生成规格。');
|
|
93
|
-
if (!reason.trim())
|
|
94
|
-
throw Error('请填写修改原因。');
|
|
95
|
-
if (sourceOf(intent(id)).version !== v.source.version)
|
|
96
|
-
throw Error('来源意图已变化,请重新生成规格。');
|
|
97
|
-
session.writeCheck();
|
|
98
|
-
const at = now(), resolved = decisions.map(d => ({ ...d, resolvedBy: d.answer && d.reason ? session.actor.name : undefined, resolvedAt: d.answer && d.reason ? at : undefined }));
|
|
99
|
-
save(appendVersion(s, v.source, content, resolved, reason, session.actor, at), '人工修订规格');
|
|
100
|
-
}
|
|
101
|
-
async function confirm(id, version, expected) {
|
|
102
|
-
const s = record(id);
|
|
103
|
-
session.require('spec:confirm', s.tenantId);
|
|
104
|
-
session.writeCheck();
|
|
105
|
-
const actor = clone(session.actor), requestId = crypto.randomUUID(), mode = confirmation.value, run = epoch;
|
|
106
|
-
save(beginSpecConfirmation(s, intent(id), actor, version, expected, requestId, now()), '提交规格确认');
|
|
107
|
-
await new Promise(resolve => setTimeout(resolve, 800));
|
|
108
|
-
if (run !== epoch)
|
|
109
|
-
return;
|
|
110
|
-
let current = records.value.find(r => r.id === s.id);
|
|
111
|
-
if (current.pending?.id !== requestId)
|
|
112
|
-
return;
|
|
113
|
-
let error = '';
|
|
114
|
-
try {
|
|
115
|
-
session.require('spec:confirm', current.tenantId);
|
|
116
|
-
if (session.actor.id !== actor.id)
|
|
117
|
-
throw Error('身份已变化,本次确认未被接受。');
|
|
118
|
-
if (sourceOf(intent(id)).version !== current.pending.sourceVersion)
|
|
119
|
-
throw Error('来源意图已变化,本次确认未被接受。');
|
|
120
|
-
if (mode === 'failure')
|
|
121
|
-
throw Error('确认未被接受(模拟),可核对后重试。');
|
|
122
|
-
}
|
|
123
|
-
catch (e) {
|
|
124
|
-
error = e.message;
|
|
125
|
-
}
|
|
126
|
-
if (error) {
|
|
127
|
-
save({ ...current, confirmation: 'failed', pending: undefined, error }, '确认失败', error, actor.name);
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
current = { ...current, pending: { ...current.pending, acceptedAt: now() } };
|
|
131
|
-
if (mode === 'unknown') {
|
|
132
|
-
save({ ...current, confirmation: 'unknown' }, '确认响应未收到', '结果待核实', actor.name);
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
save(completeSpecConfirmation(current), '规格确认完成', '已记录版本与确认人(模拟)', actor.name);
|
|
136
|
-
}
|
|
137
|
-
function reconcile(id) {
|
|
138
|
-
const s = record(id);
|
|
139
|
-
session.require('spec:view', s.tenantId);
|
|
140
|
-
if (s.confirmation !== 'unknown' || !s.pending)
|
|
141
|
-
throw Error('当前没有待核实请求。');
|
|
142
|
-
if (!s.pending.acceptedAt) {
|
|
143
|
-
save({ ...s, confirmation: 'failed', pending: undefined, error: '本地模拟服务未接受该请求,可核对后重新提交。' }, '查询确认结果', '未接受(模拟)');
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
save(completeSpecConfirmation(s), '核实原确认结果', '已接受(模拟)', s.pending.actor);
|
|
147
|
-
}
|
|
148
|
-
function reset() { epoch++; localStorage.removeItem(storage); records.value = seedTaskSpecs(); resource.value = true; generation.value = 'success'; confirmation.value = 'success'; }
|
|
149
|
-
const generationResource = (tenantId) => resource.value ? models.generationResource(tenantId) : undefined;
|
|
150
|
-
return { items, get, notice, generation, resource, confirmation, generate, revise, confirm, reconcile, reset, generationResource };
|
|
151
|
-
});
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
<!-- 来源:src/tasks/ArtifactDetail.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
|
|
2
|
-
<template data-component="Result" data-if="(!task || !artifact || !version)" status="403" title="产物不存在或无权访问"><template data-slot="extra"><template data-component="Button" data-on-click="(router.push('/tasks'))">返回交付任务</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('/tasks/' + task.id + '?tab=artifacts'))">← 返回任务产物</template><div class="agent-title"><h1>{{ (artifact.name) }}</h1><template data-component="Tag">只读快照</template><template data-component="Tag" data-bind-color="(version.result === 'fail' ? 'red' : version.result === 'pass' ? 'green' : 'blue')">{{ (version.result === 'fail' ? '示例问题' : version.result === 'pass' ? '示例通过' : '示例产物') }}</template></div><p>{{ (task.name) }} · {{ (task.code) }}</p></div><template data-component="Space" wrap=""><template data-component="Select" data-bind-value="(version.number)" aria-label="查看产物版本" style="width:210px" data-bind-options="(artifact.versions.slice().reverse().map(v => ({ value: v.number, label: 'v' + v.number + ' · 第 ' + (v.iteration + 1) + ' 轮' })))" data-on-change="(v => router.replace({ query: { ...route.query, version: String(v) } }))"></template><template data-component="Select" data-model-value="(compare)" aria-label="产物对比方式" style="width:155px" data-bind-options="([{ value: 'none', label: '阅读全文' }, { value: 'previous', label: '与上一版对比', disabled: !previous }])"></template></template></div><template data-component="Alert" class="page-alert" type="info" show-icon="" title="用于交互评审的产物样例" description="内容没有经过真实 Agent、代码仓库或 CI 生成。产物及历史版本只读保留,支持回溯,不适用删除。"></template><div class="task-artifact-layout"><section class="agent-panel task-artifact-content"><h2>{{ (compare === 'previous' && previous ? '版本差异 · v' + previous.number + ' → v' + version.number : '内容 · v' + version.number) }}</h2><template data-if="(compare === 'previous' && previous)"><p class="muted">按内容行展示新增与移除,用于样例版本核对。</p><pre data-each="(line,i) in (diff)" data-bind-key="(i)" class="task-diff-line" data-bind-class="(line.kind)">{{ (line.kind === 'added' ? '+ ' : '− ') }}{{ (line.text) }}</pre><p data-if="(!diff.length)">两个版本的正文内容相同,请对照生成轮次与来源。</p></template><pre data-else="" class="task-artifact-text">{{ (version.content) }}</pre></section><aside class="agent-panel"><h2>引用此版本的发布单</h2><p data-if="(!releases.length)" class="muted">暂无发布引用此版本。</p><p data-each="item in (releases)" data-bind-key="(item.r.id + item.v.number)"><template data-component="RouterLink" data-bind-to="(releaseUrl(item.r) + '?tab=versions&version=' + item.v.number)">{{ (item.r.code) }} · 修订 v{{ (item.v.number) }} →</template></p><h2>引用此版本的评审</h2><p data-if="(!reviews.length)" class="muted">暂无评审引用此版本。</p><p data-each="r in (reviews)" data-bind-key="(r.id)"><template data-component="Button" type="link" data-on-click="(router.push(reviewUrl(task.id, r.id)))">{{ (r.title) }}</template></p><h2>来源与版本</h2><dl class="task-trace"><dt>交付任务</dt><dd><template data-component="Button" type="link" data-on-click="(router.push('/tasks/' + task.id))">{{ (task.code) }}</template></dd><dt>生成阶段</dt><dd>{{ (task.binding.flow.body.nodes.find(n => n.id === version.stageId)?.name || '任务启动时固定的输入') }}</dd><dt>依据规格</dt><dd>v{{ (task.binding.spec.number) }} / 意图 v{{ (task.binding.spec.source.version) }}</dd><dt>流程版本</dt><dd>{{ (task.binding.flow.body.name) }} · v{{ (task.binding.flow.number) }}</dd><dt>生成者</dt><dd>{{ (version.by) }}</dd><dt>生成时间</dt><dd>{{ (formatDate(version.at)) }}</dd><dt>本次输入版本</dt><dd><div data-each="i in (version.inputs)" data-bind-key="(i.id)"><template data-component="Button" type="link" data-on-click="router.push('/tasks/' + task.id + '/artifacts/' + i.id + '?version=' + i.version);
|
|
3
|
-
selected = i.version;">{{ (task.artifacts.find(a => a.id === i.id)?.name) }} v{{ (i.version) }}</template></div><span data-if="(!version.inputs.length)">已确认规格与交付配置快照</span></dd></dl></aside></div></template>
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { computed, ref, watch } from '../../runtime/state.js';
|
|
2
|
-
import { useRoute, useRouter } from "../../runtime/router.js";
|
|
3
|
-
import { Alert, Button, Select, Space, Tag, Result } from "../../runtime/widgets.js";
|
|
4
|
-
import { releaseRows, releaseUrl } from "../releases/model.js";
|
|
5
|
-
import { reviewsForTask, reviewUrl } from "../reviews/model.js";
|
|
6
|
-
import { useTasks } from "./store.js";
|
|
7
|
-
import { useSession } from "../shared/session.js";
|
|
8
|
-
import { formatDate } from "../shared/policy.js";
|
|
9
|
-
import { createComponent } from '../../runtime/dom.js';
|
|
10
|
-
export default createComponent({ name: 'ArtifactDetail', propKeys: [], template: new URL('./ArtifactDetail.html', import.meta.url).href, setup(__props, __emit) {
|
|
11
|
-
const store = useTasks(), session = useSession(), route = useRoute(), router = useRouter(), selected = ref(Number(route.query.version) || 0), compare = ref(route.query.compare ? 'previous' : 'none');
|
|
12
|
-
const task = computed(() => store.item(String(route.params.id))), allowed = computed(() => task.value && session.can('artifact:view', task.value.tenantId, task.value.binding.pbcId)), artifact = computed(() => allowed.value ? task.value?.artifacts.find(a => a.id === route.params.artifact) : undefined), version = computed(() => selected.value ? artifact.value?.versions.find(v => v.number === selected.value) : artifact.value?.versions.at(-1)), previous = computed(() => artifact.value?.versions.find(v => v.number === (version.value?.number || 1) - 1));
|
|
13
|
-
watch(() => [route.params.artifact, route.query.version, route.query.compare], () => { selected.value = Number(route.query.version) || 0; compare.value = route.query.compare ? 'previous' : 'none'; });
|
|
14
|
-
const reviews = computed(() => task.value && allowed.value ? reviewsForTask(task.value).filter(r => r.refs.some(a => a.id === artifact.value?.id && a.version === version.value?.number)) : []);
|
|
15
|
-
const releases = computed(() => task.value && allowed.value ? releaseRows(task.value).flatMap(r => r.versions.filter(v => v.refs.some(a => a.id === artifact.value?.id && a.version === version.value?.number)).map(v => ({ r, v }))) : []);
|
|
16
|
-
const diff = computed(() => { const a = previous.value?.content.split('\n') || [], b = version.value?.content.split('\n') || []; return [...a.filter(line => !b.includes(line)).map(text => ({ kind: 'removed', text })), ...b.filter(line => !a.includes(line)).map(text => ({ kind: 'added', text }))]; });
|
|
17
|
-
return { computed, ref, watch, useRoute, useRouter, Alert, Button, Select, Space, Tag, Result, releaseRows, releaseUrl, reviewsForTask, reviewUrl, useTasks, useSession, formatDate, store, session, route, router, selected, compare, task, allowed, artifact, version, previous, reviews, releases, diff };
|
|
18
|
-
} });
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
<!-- 来源:src/tasks/TaskCreate.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
|
|
2
|
-
<template data-component="Result" data-if="(editId && (!old || old.startedAt))" status="403" title="草稿不存在、已经启动或无权访问"><template data-slot="extra"><template data-component="Button" data-on-click="(router.push('/tasks'))">返回任务</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('/tasks'))">← 返回交付任务</template><h1>{{ (editId ? '修改交付草稿' : '发起交付') }}</h1><p>为已确认的需求组织一次研发交付,先核对输入和采用的流程。</p></div><template data-component="Tag" color="blue">{{ (editId ? '草稿可修改' : '1 核对输入 → 2 选择流程 → 3 启动任务') }}</template></div><template data-component="Alert" data-if="(source?.spec.id === 'example-spec-heating')" class="page-alert" type="info" show-icon="" title="当前为预置供热工单示例" description="规格确认与 PBC 归属已预置,供你直接体验完整路径;不代表真实需求已被确认。"></template><div class="task-create-layout"><section class="agent-panel task-form"><h2>交付输入</h2><label for="task-name">任务名称 <span class="required">*</span></label><template data-component="Input" id="task-name" data-model-value="(name)" data-bind-maxlength="(80)" placeholder="描述这次要交付的功能"></template><label>来源需求与规格 <span class="required">*</span></label><template data-component="Select" data-model-value="(intent)" aria-label="来源需求与规格" class="full-width" data-bind-disabled="(!!editId)" data-bind-options="(store.sources.map(s => ({ value: s.id, label: s.title + (s.reason ? ' · ' + s.reason : ''), disabled: !!s.reason })))"></template><p data-if="(!store.sources.length)" class="muted">尚无可见规格。请到意图与需求生成、确认规格并完成 PBC 归属。</p><div data-if="(source?.version)" class="task-source-box"><strong>{{ (source.job?.pbc.name || '尚未归属 PBC') }}</strong><p>{{ (tenantLabel(source.spec.tenantId)) }} · {{ (source.version.source.code) }} v{{ (source.version.source.version) }}</p><p>规格 v{{ (source.version.number) }} · {{ (source.version.confirmedBy || '尚未确认') }}</p><template data-component="Space" wrap=""><template data-component="Button" type="link" data-on-click="(router.push('/intents/' + intent + '/spec'))">查看需求规格</template><template data-component="Button" type="link" data-on-click="(router.push('/intents/' + intent + '/pbc'))">查看 PBC 归属</template></template></div><label>研发交付流程 <span class="required">*</span></label><template data-component="Select" data-model-value="(flow)" aria-label="研发交付流程" class="full-width" placeholder="选择同一 PBC 的已发布流程" data-bind-options="(flows.map(f => ({ value: f.id, label: f.body.name })))"></template><p data-if="(!flows.length)" class="muted">当前没有可用流程。需要同一 PBC 的已启用发布版本,以及对应的流程使用权限。</p><label>使用版本 <span class="required">*</span></label><template data-component="Select" data-model-value="(number)" aria-label="交付流程版本" class="full-width" data-bind-options="(versions)"></template><label for="task-note">交付说明</label><template data-component="Input.TextArea" id="task-note" data-model-value="(note)" data-bind-rows="(3)" data-bind-maxlength="(1000)" placeholder="本次范围、关注点或补充说明"></template></section><aside class="agent-panel task-launch-summary"><h2>本次交付将如何进行</h2><p>{{ (chosen?.versions.find(v => v.number === number)?.body.description || '选择流程后可查看阶段和绑定资源。') }}</p><ol class="task-outline"><li data-each="n in (bindingResult.value?.flow.body.nodes)" data-bind-key="(n.id)"><span>{{ (n.name) }}</span><small>{{ (n.gate === 'production' || ['publish', 'archive'].includes(n.kind) ? '后续原型范围' : n.kind === 'human' ? '等待获授权的人确认' : n.agentId ? bindingResult.value?.agents.find(a => a.config.id === n.agentId)?.config.name : '交付阶段') }}</small></li></ol><h3>固定的资源版本</h3><div data-each="a in (bindingResult.value?.agents)" data-bind-key="(a.config.id)" class="task-resource"><strong>{{ (a.config.name) }} · 记录 v{{ (a.config.recordVersion) }}</strong><small>{{ (a.model.name) }} · 发布 v{{ (a.model.version) }}</small></div><p class="muted">启动后保留绑定版本;本地原型模拟阶段推进和产物,不执行实际研发或生产发布。</p></aside></div><div class="agent-panel task-submit"><template data-component="Alert" data-if="(bindingResult.error || error)" type="error" show-icon="" data-bind-title="(error || bindingResult.error)"></template><template data-component="Checkbox" data-model-checked="(reviewed)" data-bind-disabled="(!bindingResult.value)">已核对来源规格、PBC 和交付流程版本</template><template data-component="Space" wrap=""><template data-component="Button" data-on-click="(router.push('/tasks'))">取消</template><template data-component="Button" data-bind-loading="(busy)" data-bind-disabled="(!reviewed || !session.can(editId ? 'task:edit' : 'task:create', source?.spec.tenantId, source?.job?.pbc.id))" data-on-click="(submit(false))">{{ (editId ? '保存修改' : '保存草稿') }}</template><template data-component="Button" data-if="(!editId)" type="primary" data-bind-loading="(busy)" data-bind-disabled="(!reviewed || !session.can('task:operate', source?.spec.tenantId, source?.job?.pbc.id))" data-on-click="(submit(true))">确认并启动交付</template></template></div></template>
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { computed, ref, watch } from '../../runtime/state.js';
|
|
2
|
-
import { useRoute, useRouter, onBeforeRouteLeave } from "../../runtime/router.js";
|
|
3
|
-
import { Alert, Button, Checkbox, Input, Select, Space, Tag, Result } from "../../runtime/widgets.js";
|
|
4
|
-
import { useTasks } from "./store.js";
|
|
5
|
-
import { useSession } from "../shared/session.js";
|
|
6
|
-
import { confirmAction } from "../shell/confirmation.js";
|
|
7
|
-
import { tenantLabel } from "../shared/policy.js";
|
|
8
|
-
import { createComponent } from '../../runtime/dom.js';
|
|
9
|
-
export default createComponent({ name: 'TaskCreate', propKeys: [], template: new URL('./TaskCreate.html', import.meta.url).href, setup(__props, __emit) {
|
|
10
|
-
const store = useTasks(), session = useSession(), route = useRoute(), router = useRouter(), editId = String(route.params.id || ''), old = editId ? store.item(editId) : undefined;
|
|
11
|
-
const intent = ref(old?.binding.intentId || String(route.query.intent || store.sources.find(s => !s.reason)?.id || '')), flow = ref(old?.binding.flowId || String(route.query.flow || '')), number = ref(old?.binding.flow.number || Number(route.query.version) || 1), name = ref(old?.name || '供热工单 AI 智能分诊交付'), note = ref(old?.note || ''), reviewed = ref(false), busy = ref(false), error = ref(''), saved = ref(false), requestId = crypto.randomUUID(), expected = old?.recordVersion;
|
|
12
|
-
const source = computed(() => store.sources.find(s => s.id === intent.value)), flows = computed(() => store.flowChoices(intent.value)), chosen = computed(() => flows.value.find(f => f.id === flow.value)), versions = computed(() => chosen.value?.versions.map(v => ({ value: v.number, label: 'v' + v.number + ' · ' + v.note })).reverse() || []);
|
|
13
|
-
const bindingResult = computed(() => { try {
|
|
14
|
-
return { value: store.binding(intent.value, flow.value, number.value), error: '' };
|
|
15
|
-
}
|
|
16
|
-
catch (e) {
|
|
17
|
-
return { value: undefined, error: e.message };
|
|
18
|
-
} });
|
|
19
|
-
watch(flows, fs => { if (!flow.value && !route.query.flow)
|
|
20
|
-
flow.value = fs[0]?.id || ''; }, { immediate: true });
|
|
21
|
-
watch(intent, () => { flow.value = ''; number.value = 1; });
|
|
22
|
-
watch(versions, vs => { if (!vs.some(v => v.value === number.value))
|
|
23
|
-
number.value = vs[0]?.value || 1; }, { immediate: true });
|
|
24
|
-
watch(() => JSON.stringify(bindingResult.value.value), () => reviewed.value = false);
|
|
25
|
-
const initial = JSON.stringify([intent.value, flow.value, number.value, name.value, note.value]), dirty = computed(() => JSON.stringify([intent.value, flow.value, number.value, name.value, note.value]) !== initial);
|
|
26
|
-
onBeforeRouteLeave(() => !saved.value && dirty.value ? new Promise(resolve => confirmAction({ title: '离开交付创建页?', content: '本次未保存的输入将丢失。', okText: '离开', cancelText: '继续编辑', onOk: () => resolve(true), onCancel: () => resolve(false) })) : true);
|
|
27
|
-
async function submit(start) { if (!bindingResult.value.value || !reviewed.value || busy.value)
|
|
28
|
-
return; busy.value = true; error.value = ''; try {
|
|
29
|
-
const t = editId ? store.edit(editId, expected, bindingResult.value.value, name.value, note.value) : store.create(bindingResult.value.value, name.value, note.value, start, requestId);
|
|
30
|
-
saved.value = true;
|
|
31
|
-
await router.push('/tasks/' + t.id);
|
|
32
|
-
}
|
|
33
|
-
catch (e) {
|
|
34
|
-
error.value = e.message;
|
|
35
|
-
}
|
|
36
|
-
finally {
|
|
37
|
-
busy.value = false;
|
|
38
|
-
} }
|
|
39
|
-
return { computed, ref, watch, useRoute, useRouter, onBeforeRouteLeave, Alert, Button, Checkbox, Input, Select, Space, Tag, Result, useTasks, useSession, confirmAction, tenantLabel, store, session, route, router, editId, old, intent, flow, number, name, note, reviewed, busy, error, saved, requestId, expected, source, flows, chosen, versions, bindingResult, initial, dirty, submit };
|
|
40
|
-
} });
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
<!-- 来源:src/tasks/TaskDetail.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
|
|
2
|
-
<template data-component="Result" data-if="(!task)" status="404" title="任务不存在或无权访问"><template data-slot="extra"><template data-component="Button" data-on-click="(router.push('/tasks'))">返回交付任务</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('/tasks'))">← 返回交付任务</template><template data-component="Button" data-if="(can('pbc:view'))" type="link" data-on-click="(router.push('/pbcs/' + task.binding.pbcId + '/workspace?tab=tasks'))">PBC 交付工作区</template><div class="agent-title"><h1>{{ (task.name) }}</h1><template data-component="Tag" data-bind-color="(statusColors[task.status])">{{ (release ? taskReleaseLabel(task, session.actor) : review ? stateLabels[reviewStatus(task, review)] : statusLabels[task.status]) }}</template></div><p>{{ (task.code) }} · {{ (task.binding.project) }} · 负责人 {{ (task.owner) }}</p></div><template data-component="Space" wrap=""><template data-component="Button" data-if="(can('artifact:view'))" data-on-click="(router.push('/reviews?task=' + task.id))">评审与处理记录</template><template data-component="Button" data-if="(task.status === 'draft')" data-bind-disabled="(!can('task:edit'))" data-on-click="(router.push('/tasks/' + task.id + '/edit'))">修改草稿</template><template data-component="Button" data-if="(task.status === 'draft')" type="primary" data-bind-disabled="(!can('task:operate'))" data-on-click="(open('start'))">启动交付</template><template data-component="Button" data-if="(['running', 'waiting'].includes(task.status))" data-bind-disabled="(!can('task:operate'))" data-on-click="(open('pause'))">暂停任务</template><template data-component="Button" data-if="(['paused', 'manual'].includes(task.status))" data-bind-disabled="(!can('task:operate'))" data-on-click="(open('resume'))">恢复任务</template><template data-component="Button" data-if="(!['draft', 'manual'].includes(task.status) && (task.status !== 'ready' || !!review))" data-bind-disabled="(!can('task:takeover'))" data-on-click="(open('takeover'))">人工接管</template></template></div><template data-component="Alert" data-if="(error && !modal)" class="page-alert" type="error" show-icon="" data-bind-title="(error)" closable="" data-on-close="(error = '')"></template><template data-component="Alert" data-if="(task.example)" class="page-alert" type="info" show-icon="" title="预置任务样例" description="已有确认、阶段执行与产物都是演示数据,可以继续操作或新建一项交付。"></template><div class="task-status-banner" data-bind-class="('task-status-' + task.status)"><div><span class="task-eyebrow">{{ (task.status === 'draft' ? '尚未启动' : '当前阶段') }}</span><h2>{{ (node?.name || '准备交付输入') }}</h2><p>{{ (taskReason) }}</p></div><div class="task-progress-summary"><strong>{{ (taskProgress(task)) }}<small>%</small></strong><span>{{ (release ? '交付与发布阶段' : '研发阶段进度') }}</span><div class="task-progress-bar"><i data-bind-style="({ width: taskProgress(task) + '%' })"></i></div></div></div><template data-component="OperationEntry" data-bind-task="(task)"></template><template data-component="Alert" data-if="(can('artifact:view') && task.status === 'ready' && !review)" class="page-alert" type="info" show-icon="" data-bind-title="(release ? taskReleaseLabel(task, session.actor) : '可以准备发布')" data-bind-description="((release ? taskReason : '') || qualityReason(task) || '质量点处理结束;发布前仍需独立材料及人工授权。')"><template data-slot="action"><template data-component="Button" type="primary" data-on-click="(router.push(releasePath))">{{ (release ? '查看发布单' : '准备发布') }}</template><template data-component="Button" data-if="(hasPendingRelease(task) && release && !activeRelease(task))" data-on-click="(router.push('/releases?task=' + task.id + '&prepare=1'))">准备生产发布</template></template></template><template data-component="Alert" data-if="(review)" class="page-alert" data-bind-type="(reviewStatus(task, review) === 'blocked' ? 'warning' : 'info')" show-icon="" data-bind-title="(review.title + ' · ' + stateLabels[reviewStatus(task, review)])" data-bind-description="(task.pendingDesignReview ? '新设计需重新验证与确认,之后才恢复实现。' : '在质量与评审中核对本次版本,处理结果直接写回此任务。')"><template data-slot="action"><template data-component="Button" type="primary" data-on-click="(router.push(reviewUrl(task.id, review.id)))">打开当前评审</template></template></template><section class="agent-panel"><template data-component="Tabs" data-model-active-key="(tab)" data-bind-items="(tabs)"></template><div data-if="(tab === 'progress')" class="task-detail-layout"><nav class="task-stage-nav" aria-label="交付阶段"><button data-each="(s,index) in (task.stages)" data-bind-key="(s.nodeId)" data-bind-class="({ active: selected === s.nodeId })" data-bind-aria-current="(selected === s.nodeId ? 'step' : undefined)" data-on-click="(selected = s.nodeId)"><span class="task-stage-dot" data-bind-class="(s.state)">{{ (s.state === 'done' ? '✓' : s.state === 'failed' ? '!' : index + 1) }}</span><span><strong>{{ (task.binding.flow.body.nodes.find(n => n.id === s.nodeId)?.name) }}</strong><small>{{ ({ pending: '待执行', active: '当前阶段', done: '已完成', failed: '执行失败', skipped: '分支未命中' }[s.state]) }}</small></span></button></nav><section class="task-stage-detail"><template data-if="(selectedNode && selectedStage)"><div class="section-heading"><div><h2>{{ (selectedNode.name) }}</h2><p>{{ (kindLabel(selectedNode)) }} · {{ (selectedStage.attempts) }} 次执行</p></div><template data-component="Tag" data-if="(selected === task.currentId)" color="blue">当前阶段</template></div><p class="task-stage-message">{{ (selectedStage.detail) }}</p><dl class="task-info-grid"><div><dt>执行者</dt><dd>{{ (selectedNode.agentId ? task.binding.agents.find(a => a.config.id === selectedNode.agentId)?.config.name : selectedNode.kind === 'human' ? '获得此动作与范围授权的成员' : selectedNode.kind === 'tool' ? '项目工具(模拟)' : '交付引擎(模拟)') }}</dd></div><div><dt>输入</dt><dd>{{ (selectedNode.input || '绑定需求、规格与当前阶段上下文') }}</dd></div><div><dt>预期输出</dt><dd>{{ (selectedNode.output || (selectedNode.kind === 'human' ? '绑定版本的确认记录' : '阶段状态与事件记录')) }}</dd></div><div><dt>开始 / 完成</dt><dd>{{ (formatDate(selectedStage.startedAt || '')) }}<br>{{ (formatDate(selectedStage.finishedAt || '')) }}</dd></div></dl><div data-if="(selected === task.currentId && task.status === 'waiting' && !task.pendingDesignReview)" class="task-gate"><h3>核对当前交互原型与规格</h3><p>原型描述包含报修受理、分诊建议、依据和人工确认。确认只对当前任务中的规格与原型版本有效。</p><template data-component="Space" wrap=""><template data-component="Button" data-bind-disabled="(!can('artifact:view'))" data-on-click="(router.push(artifactUrl('spec')))">阅读规格快照</template><template data-component="Button" data-bind-disabled="(!can('artifact:view'))" data-on-click="(router.push(artifactUrl('prototype')))">阅读原型评审包</template><template data-component="Button" type="primary" data-bind-disabled="(!can('workflow:approve'))" data-on-click="(review ? router.push(reviewUrl(task.id, review.id)) : open('approve'))">核对并确认阶段</template></template><p data-if="(!can('workflow:approve'))" class="muted">你可以查看进度;当前未获此项目的交付人工确认权限。</p></div><div data-if="(selected === task.currentId && task.status === 'failed')" class="task-gate task-failed"><h3>保留本次证据,处理后继续</h3><p>{{ (node?.kind === 'verify' ? '返工将回到实现阶段,生成新代码,再执行质量检查与独立验证。' : '重试沿用同一任务与输入,已完成的前序阶段不重复执行。') }}已处理 {{ (task.reworks) }} / {{ (retryBudget(task)) }} 次(本原型示例上限)。</p><template data-component="Space" wrap=""><template data-component="Button" type="primary" data-bind-disabled="(!can('task:operate') || task.reworks >= retryBudget(task))" data-on-click="(open('retry'))">{{ (node?.kind === 'verify' ? '发起返工' : '重试阶段') }}</template><template data-component="Button" data-bind-disabled="(!can('task:takeover'))" data-on-click="(open('takeover'))">人工接管</template></template><p data-if="(task.reworks >= retryBudget(task))" class="muted">处理次数已耗尽,请人工接管;接管后仍须处理问题,不能直接通过。</p></div><template data-component="Alert" data-if="(selected === task.currentId && task.status === 'ready')" type="info" show-icon="" data-bind-title="(release ? taskReleaseLabel(task, session.actor) : '研发产物等待后续确认')" data-bind-description="(review ? '当前质量评审尚待处理,请从上方进入并核对版本。' : (release ? taskReason : '') || '质量点处理结束,请从发布入口准备本版材料并申请人工授权。')"></template><section data-if="(outputs.length && can('artifact:view'))" class="task-stage-outputs"><h3>本阶段产物</h3><div data-each="o in (outputs.slice().reverse())" data-bind-key="(o.a.id + o.v.number)"><template data-component="Button" type="link" data-on-click="(router.push(artifactUrl(o.a.id, o.v.number)))">{{ (o.a.name) }} · v{{ (o.v.number) }}</template><template data-component="Tag" data-bind-color="(o.v.result === 'fail' ? 'red' : o.v.result === 'pass' ? 'green' : 'default')">{{ (o.v.result === 'fail' ? '有问题' : o.v.result === 'pass' ? '示例通过' : '示例产物') }}</template><span>第 {{ (o.v.iteration + 1) }} 轮</span></div></section><div data-if="(selected === task.currentId && task.status === 'running')" class="task-demo-panel"><strong>原型演示控件</strong><p>模拟收到一次执行结果,以体验任务状态和产物。正式产品由执行服务上报进度。</p><template data-component="Space" wrap=""><template data-component="Select" data-model-value="(outcome)" aria-label="阶段演示结果" data-bind-options="([{ value: 'pass', label: '本阶段成功' }, ...(['agent', 'tool', 'loop', 'verify'].includes(node?.kind || '') ? [{ value: 'fail', label: '本阶段失败' }] : [])])" style="width:180px"></template><template data-component="Button" data-bind-disabled="(!can('task:operate'))" data-on-click="(advance)">演示推进一步</template></template></div></template></section></div><template data-else-if="(tab === 'artifacts' && can('artifact:view'))"><div class="section-heading"><div><h2>交付产物</h2><p>保留各轮版本与证据,产物只读,不适用删除。</p></div><template data-component="Tag">{{ (task.artifacts.length) }} 类产物</template></div><div class="task-artifact-grid"><article data-each="a in (task.artifacts)" data-bind-key="(a.id)" class="task-artifact-card"><div><span class="task-file-icon">{{ (a.kind === 'code' ? '</>' : '文') }}</span><template data-component="ListMore" data-bind-name="(a.name)" data-bind-items="([{ key: 'latest', label: '查看最新版本' }, { key: 'history', label: '版本与差异' }])" data-on-action="(router.push(artifactUrl(a.id) + ($event === 'history' ? '?compare=1' : '')))"></template></div><h3>{{ (a.name) }}</h3><p>{{ (a.versions.length) }} 个版本 · 最新 v{{ (a.versions.at(-1)?.number) }}</p><p class="muted">{{ (a.versions.at(-1)?.by) }}<br>{{ (formatDate(a.versions.at(-1)?.at || '')) }}</p><template data-component="Button" type="link" data-on-click="(router.push(artifactUrl(a.id)))">查看产物 →</template></article></div><p data-if="(!task.artifacts.length)" class="muted">任务尚未启动,还没有产物。</p></template><template data-else-if="(tab === 'bindings')"><h2>启动时固定的交付输入</h2><dl class="task-info-grid"><div><dt>来源意图</dt><dd>{{ (task.binding.spec.source.title) }}<br>{{ (task.binding.spec.source.code) }} v{{ (task.binding.spec.source.version) }}</dd></div><div><dt>确认规格</dt><dd>v{{ (task.binding.spec.number) }} · {{ (task.binding.spec.confirmedBy) }}<br>{{ (formatDate(task.binding.spec.confirmedAt || '')) }}</dd></div><div><dt>PBC / 租户</dt><dd>{{ (task.binding.project) }} / {{ (tenantLabel(task.tenantId)) }}</dd></div><div><dt>研发交付流程</dt><dd>{{ (task.binding.flow.body.name) }} · 发布 v{{ (task.binding.flow.number) }}</dd></div></dl><template data-component="Space" wrap=""><template data-component="Button" data-bind-disabled="(!session.can('spec:view', task.tenantId))" data-on-click="(router.push('/intents/' + task.binding.intentId + '/spec'))">查看当前规格</template><template data-component="Button" data-bind-disabled="(!can('workflow:view'))" data-on-click="(router.push('/workflows/' + task.binding.flowId))">查看当前流程</template></template><p class="muted">当前规格和流程可能已有新版本;本任务使用上面保留的快照。</p><h3>绑定的 Agent 与模型</h3><div data-each="a in (task.binding.agents)" data-bind-key="(a.config.id)" class="task-resource"><strong>{{ (a.config.name) }} · 记录 v{{ (a.config.recordVersion) }}</strong><span>{{ (a.model.name) }} · 发布 v{{ (a.model.version) }}</span><small>提示词 {{ (a.config.promptRef) }} · 技能 {{ (a.config.skillRefs.join('、') || '无') }}</small></div><p class="muted">交付说明:{{ (task.note || '无补充说明') }}</p></template><template data-else-if="(tab === 'metadata')"><template data-component="RecordMetadata" data-bind-record="(task)"></template><p class="muted">记录版本 {{ (task.recordVersion) }} · 逻辑删除 {{ (task.isDeleted ? '是' : '否') }} · 启动时间 {{ (formatDate(task.startedAt || '')) }}</p></template><template data-else-if="(tab === 'records' && can('task:audit'))"><h2>操作与阶段记录</h2><p class="muted">只读历史。每次确认、失败、返工、暂停和接管都保留操作者与阶段。</p><ol class="agent-audit"><li data-each="e in (task.events.slice().reverse())" data-bind-key="(e.id)"><strong>{{ (e.action) }}</strong><span>{{ (e.actor) }} · {{ (formatDate(e.at)) }} · 第 {{ (e.iteration + 1) }} 轮</span><p>{{ (e.detail) }}</p><small>{{ (task.binding.flow.body.nodes.find(n => n.id === e.stageId)?.name || '来源与任务') }}</small></li></ol></template><template data-component="Result" data-else="" status="403" title="没有此页签的访问权限"></template></section><template data-component="Modal" data-bind-open="(!!modal)" data-bind-title="(actionNames[modal] || '处理任务')" data-bind-footer="(null)" data-on-cancel="(modal = '')"><p>{{ (task.name) }}</p><p class="muted">规格 v{{ (task.binding.spec.number) }} · 交付流程 v{{ (task.binding.flow.number) }} · 当前记录 v{{ (expected) }}</p><template data-component="Alert" data-if="(modal === 'takeover')" type="info" show-icon="" title="接管会暂停自动推进并记录负责人" description="接管不绕过确认、验证或发布门禁;恢复后回到原阶段和状态。"></template><template data-component="Checkbox" data-if="(modal === 'approve')" data-model-checked="(checked)">已查看绑定规格和原型评审包 v{{ (artifactVersion) }}</template><p data-if="(modal === 'start')">启动后固定版本;任务、产物与记录须保留,不能再删除。</p><template data-component="Input.TextArea" data-if="(modal !== 'start')" data-model-value="(note)" aria-label="任务处理说明" data-bind-rows="(3)" data-bind-maxlength="(1000)" placeholder="填写核对结果或操作原因"></template><template data-component="Alert" data-if="(error)" type="error" show-icon="" data-bind-title="(error)"></template><template data-component="Space" class="flow-modal-actions"><template data-component="Button" data-on-click="(modal = '')">取消</template><template data-component="Button" type="primary" data-on-click="(submit)">确认{{ (modal === 'approve' ? '阶段' : modal === 'retry' ? '处理' : modal === 'start' ? '启动' : modal === 'takeover' ? '接管' : modal === 'pause' ? '暂停' : '恢复') }}</template></template></template></template>
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { computed, ref, watch } from '../../runtime/state.js';
|
|
2
|
-
import { useRoute, useRouter } from "../../runtime/router.js";
|
|
3
|
-
import { Alert, Button, Checkbox, Input, Modal, Select, Space, Tabs, Tag, Result } from "../../runtime/widgets.js";
|
|
4
|
-
import OperationEntry from "../operations/OperationEntry.js";
|
|
5
|
-
import { currentRelease, activeRelease, hasPendingRelease, taskReleaseLabel, releaseSummary, releaseUrl, qualityReason } from "../releases/model.js";
|
|
6
|
-
import { useTasks } from "./store.js";
|
|
7
|
-
import { useSession } from "../shared/session.js";
|
|
8
|
-
import { formatDate, tenantLabel } from "../shared/policy.js";
|
|
9
|
-
import { currentNode, currentStage, latestArtifact, retryBudget, statusLabels, statusColors, taskProgress } from "./domain.js";
|
|
10
|
-
import { actionableReview, reviewStatus, stateLabels, reviewUrl, canReadReview } from "../reviews/model.js";
|
|
11
|
-
import { kindLabel } from "../workflows/domain.js";
|
|
12
|
-
import RecordMetadata from "../shared/RecordMetadata.js";
|
|
13
|
-
import ListMore from "../shared/ListMore.js";
|
|
14
|
-
import { createComponent } from '../../runtime/dom.js';
|
|
15
|
-
export default createComponent({ name: 'TaskDetail', propKeys: [], template: new URL('./TaskDetail.html', import.meta.url).href, setup(__props, __emit) {
|
|
16
|
-
const store = useTasks(), session = useSession(), route = useRoute(), router = useRouter(), tab = ref(String(route.query.tab || 'progress')), selected = ref(''), error = ref(''), outcome = ref('pass'), modal = ref(''), note = ref(''), checked = ref(false), expected = ref(0), artifactVersion = ref(0);
|
|
17
|
-
const task = computed(() => store.item(String(route.params.id))), node = computed(() => task.value && currentNode(task.value)), stage = computed(() => task.value && currentStage(task.value));
|
|
18
|
-
watch(() => task.value?.currentId, id => { selected.value = id || 'start'; }, { immediate: true });
|
|
19
|
-
const selectedNode = computed(() => task.value?.binding.flow.body.nodes.find(n => n.id === selected.value)), selectedStage = computed(() => task.value?.stages.find(s => s.nodeId === selected.value)), outputs = computed(() => task.value?.artifacts.flatMap(a => a.versions.filter(v => v.stageId === selected.value).map(v => ({ a, v }))) || []);
|
|
20
|
-
const review = computed(() => task.value && canReadReview(session.actor, task.value) ? actionableReview(task.value) : undefined);
|
|
21
|
-
const release = computed(() => task.value && canReadReview(session.actor, task.value) ? currentRelease(task.value) : undefined);
|
|
22
|
-
const taskReason = computed(() => release.value ? releaseSummary(release.value) + (task.value && hasPendingRelease(task.value) && !activeRelease(task.value) ? ' 生产发布仍待单独准备和人工授权。' : '') : task.value?.reason || '');
|
|
23
|
-
const releasePath = computed(() => release.value ? releaseUrl(release.value, !!release.value.startedAt) : '/releases?task=' + task.value?.id + '&prepare=1');
|
|
24
|
-
const can = (a) => !!task.value && session.can(a, task.value.tenantId, task.value.binding.pbcId);
|
|
25
|
-
const tabs = computed(() => [{ key: 'progress', label: '阶段进度' }, ...(can('artifact:view') ? [{ key: 'artifacts', label: '交付产物' }] : []), { key: 'bindings', label: '来源与绑定版本' }, { key: 'metadata', label: '基础信息' }, ...(can('task:audit') ? [{ key: 'records', label: '操作记录' }] : [])]);
|
|
26
|
-
const actionNames = computed(() => ({ start: '启动交付', approve: '确认当前阶段', retry: node.value?.kind === 'verify' ? '返工并重新验证' : '重试当前阶段', pause: '暂停任务', resume: '恢复任务', takeover: '人工接管' }));
|
|
27
|
-
function run(fn) { error.value = ''; try {
|
|
28
|
-
fn();
|
|
29
|
-
}
|
|
30
|
-
catch (e) {
|
|
31
|
-
error.value = e.message;
|
|
32
|
-
} }
|
|
33
|
-
function open(action) { if (!task.value)
|
|
34
|
-
return; modal.value = action; expected.value = task.value.recordVersion; artifactVersion.value = latestArtifact(task.value, 'prototype')?.number || 0; note.value = ''; checked.value = false; error.value = ''; }
|
|
35
|
-
function submit() { const t = task.value; if (!t)
|
|
36
|
-
return; run(() => { const a = modal.value; if (a === 'approve') {
|
|
37
|
-
if (!checked.value)
|
|
38
|
-
throw Error('请先核对绑定规格和产物版本。');
|
|
39
|
-
store.approve(t.id, expected.value, artifactVersion.value, note.value);
|
|
40
|
-
}
|
|
41
|
-
else if (a === 'start')
|
|
42
|
-
store.start(t.id, expected.value);
|
|
43
|
-
else if (a === 'retry')
|
|
44
|
-
store.retry(t.id, expected.value, note.value);
|
|
45
|
-
else
|
|
46
|
-
store.control(t.id, expected.value, a, note.value); modal.value = ''; }); }
|
|
47
|
-
function advance() { const t = task.value; if (t)
|
|
48
|
-
run(() => { store.advance(t.id, t.recordVersion, outcome.value); outcome.value = 'pass'; }); }
|
|
49
|
-
const artifactUrl = (id, version) => '/tasks/' + task.value.id + '/artifacts/' + id + (version ? '?version=' + version : '');
|
|
50
|
-
return { computed, ref, watch, useRoute, useRouter, Alert, Button, Checkbox, Input, Modal, Select, Space, Tabs, Tag, Result, OperationEntry, currentRelease, activeRelease, hasPendingRelease, taskReleaseLabel, releaseSummary, releaseUrl, qualityReason, useTasks, useSession, formatDate, tenantLabel, currentNode, currentStage, latestArtifact, retryBudget, statusLabels, statusColors, taskProgress, actionableReview, reviewStatus, stateLabels, reviewUrl, canReadReview, kindLabel, RecordMetadata, ListMore, store, session, route, router, tab, selected, error, outcome, modal, note, checked, expected, artifactVersion, task, node, stage, selectedNode, selectedStage, outputs, review, release, taskReason, releasePath, can, tabs, actionNames, run, open, submit, advance, artifactUrl };
|
|
51
|
-
} });
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Button } from "../../runtime/widgets.js";
|
|
2
|
-
import { useRouter } from "../../runtime/router.js";
|
|
3
|
-
import { useSession } from "../shared/session.js";
|
|
4
|
-
import { createComponent } from '../../runtime/dom.js';
|
|
5
|
-
export default createComponent({ name: 'TaskLaunch', propKeys: ["intentId"], template: new URL('./TaskLaunch.html', import.meta.url).href, setup(__props, __emit) {
|
|
6
|
-
__props;
|
|
7
|
-
const router = useRouter(), session = useSession();
|
|
8
|
-
return { Button, useRouter, useSession, router, session };
|
|
9
|
-
} });
|