@givolt/i3-composer-agent 2.2.2 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/plugins/marketplace.json +1 -1
- package/.claude/commands/i3-prototype.md +23 -0
- package/.claude/commands/i3-review.md +1 -1
- package/.claude/commands/i3-ship.md +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +2 -2
- package/.gemini/commands/i3-prototype.toml +23 -0
- package/.gemini/commands/i3-review.toml +1 -1
- package/.gemini/commands/i3-ship.toml +1 -1
- package/README.md +42 -25
- package/agents/code-reviewer.md +1 -1
- package/agents/test-engineer.md +1 -1
- package/bin/i3-composer-agent.cjs +5 -4
- package/bin/install.cjs +22 -10
- package/bin/native-command-validation.cjs +8 -13
- package/bin/native-layout.cjs +64 -28
- package/bin/native-migration.cjs +13 -7
- package/bin/native-runtime.cjs +10 -5
- package/commands/i3-prototype.toml +23 -0
- package/commands/i3-review.toml +1 -1
- package/commands/i3-ship.toml +1 -1
- package/docs/advanced-per-agent-configuration.md +78 -0
- package/docs/agents.md +2 -2
- package/docs/codebuddy-setup.md +5 -5
- package/docs/codex-setup.md +3 -3
- package/docs/copilot-setup.md +4 -0
- package/docs/cursor-setup.md +3 -0
- package/docs/other-hosts.md +44 -9
- package/docs/workbuddy-setup.md +9 -9
- package/evals/README.md +28 -16
- package/evals/cases/i3-documentation-and-adrs.json +18 -0
- package/evals/cases/i3-test-driven-development.json +8 -0
- package/evals/cases/i3-ui-prototype.json +49 -0
- package/evals/fixtures/i3-documentation-and-adrs/prose-review/README.md +19 -0
- package/evals/fixtures/i3-documentation-and-adrs/prose-review/queue.js +32 -0
- package/evals/fixtures/i3-ui-prototype/business-brief.md +7 -0
- package/evals/plugin/tdd-fires-on-pasted-bug/graders/failing-test-first.md +7 -0
- package/evals/plugin/tdd-fires-on-pasted-bug/graders/skill-fired.md +5 -0
- package/evals/plugin/tdd-fires-on-pasted-bug/prompt.md +15 -0
- package/evals/plugin/tdd-stays-quiet-on-debug/graders/not-fired.md +8 -0
- package/evals/plugin/tdd-stays-quiet-on-debug/prompt.md +25 -0
- package/evals/zh-CN/cases/i3-documentation-and-adrs.json +19 -0
- package/evals/zh-CN/cases/i3-test-driven-development.json +4 -0
- package/evals/zh-CN/cases/i3-ui-prototype.json +50 -0
- package/hooks/SIMPLIFY-IGNORE.md +3 -2
- package/hooks/simplify-ignore-test.sh +93 -1
- package/hooks/simplify-ignore.sh +94 -11
- package/package.json +63 -18
- package/plugin.json +1 -1
- package/references/performance-checklist.md +4 -2
- package/scripts/enterprise-template-test.js +139 -0
- package/scripts/floor-guard-reference-test.js +291 -0
- package/scripts/lib/skill-lint-test.js +762 -0
- package/scripts/lib/skill-lint.js +62 -8
- package/scripts/run-evals-test.js +830 -0
- package/scripts/run-evals.js +47 -9
- package/scripts/run-regressions.js +19 -0
- package/scripts/template-adapter-test.js +155 -0
- package/scripts/ui-prototype-test.js +114 -0
- package/scripts/validate-artifact-paths-test.js +179 -0
- package/scripts/validate-commands-test.js +246 -0
- package/scripts/validate-commands.js +6 -16
- package/scripts/validate-reference-links-test.js +513 -0
- package/scripts/validate-reference-links.js +4 -2
- package/scripts/validate-skills.js +26 -3
- package/scripts/validate-versions-test.js +32 -0
- package/skills/i3-documentation-and-adrs/SKILL.md +9 -0
- package/skills/i3-frontend-ui-engineering/SKILL.md +5 -1
- package/skills/i3-idea-refine/SKILL.md +20 -5
- package/skills/i3-incremental-implementation/SKILL.md +4 -0
- package/skills/i3-performance-optimization/SKILL.md +10 -10
- package/skills/i3-security-and-hardening/references/hardening-patterns.md +1 -1
- package/skills/i3-shipping-and-launch/SKILL.md +6 -0
- package/skills/i3-test-driven-development/SKILL.md +3 -3
- package/skills/i3-ui-prototype/SKILL.md +119 -0
- package/skills/i3-ui-prototype/assets/templates/catalog.json +147 -0
- package/skills/i3-ui-prototype/assets/templates/classic-admin/manifest.json +9 -0
- package/skills/i3-ui-prototype/assets/templates/classic-admin/preset.json +6 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/app.mjs +89 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/config.json +1 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/domain.mjs +20 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/index.html +17 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/serve.cjs +16 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/styles.css +670 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/tokens.css +19 -0
- package/skills/i3-ui-prototype/assets/templates/common/design-system/master.md +20 -0
- package/skills/i3-ui-prototype/assets/templates/common/gallery.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/common/mocks/applications.json +5 -0
- package/skills/i3-ui-prototype/assets/templates/common/requirements-map.json +8 -0
- package/skills/i3-ui-prototype/assets/templates/common/serve-gallery.cjs +16 -0
- package/skills/i3-ui-prototype/assets/templates/credits.md +17 -0
- package/skills/i3-ui-prototype/assets/templates/data-operations/manifest.json +9 -0
- package/skills/i3-ui-prototype/assets/templates/data-operations/preset.json +6 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/design-system.md +32 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/index.html +29 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/manifest.json +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/origin.json +344 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/preset.json +928 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/app.js +22 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/empty.svg +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/reference-styles.json +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-403.svg +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-404.svg +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets-manifest.json +334 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/baseline.json +173 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/conversion.md +30 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/credits.md +17 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/design-tokens.json +881 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/index.html +28 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +22 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +21 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/package.json +12 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/browser-routes.json +298 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/coverage.json +180 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/integrity.json +13 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/keyboard.json +11 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/responsive.json +125 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/review.md +51 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/rules.log +150 -0
- 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 +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +342 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/readme.md +73 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/reference.md +59 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/routes.json +178 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/controls.js +99 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dialogs.js +54 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dom.js +264 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/forms.js +47 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/icons.js +41 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/layout.js +47 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/router.js +63 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/state.js +90 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/table.js +41 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/widgets.js +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +36 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +51 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +48 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +6 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +13 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/data.js +24 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/domain.js +32 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/registry.js +25 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/store.js +85 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +17 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +66 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +38 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +66 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +5 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +12 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +11 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +116 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +32 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +49 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +10 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +77 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/data.js +60 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/domain.js +105 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/store.js +212 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +18 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +23 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +78 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +55 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +26 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +38 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +7 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +72 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +46 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +52 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.js +19 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +30 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/data.js +48 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/domain.js +39 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/store.js +129 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +21 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +10 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +49 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +22 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/commands.js +82 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/examples.js +47 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/model.js +61 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/repair.js +68 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/store.js +55 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/types.js +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/workbench.js +18 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +28 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +18 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +31 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +27 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +16 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +43 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +34 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +30 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +67 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +41 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +31 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +26 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +70 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/data.js +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/domain.js +62 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/management.js +36 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +49 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/store.js +132 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +38 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +11 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +45 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +54 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +27 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +12 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +45 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +38 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/domain.js +61 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/state.js +51 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/store.js +116 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +45 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +30 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +67 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +5 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +60 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/commands.js +157 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/model.js +136 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/store.js +76 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +26 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +14 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +113 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +62 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/commands.js +97 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/model.js +147 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/store.js +13 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +17 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/columns.js +32 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +49 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +12 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +15 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/policy.js +68 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/session.js +44 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +25 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +53 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +10 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +30 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +10 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/navigation.js +19 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +32 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +15 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +11 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +57 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/data.js +20 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/domain.js +55 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/store.js +151 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +18 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +40 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +51 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +5 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +48 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/domain.js +204 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +22 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/registry.js +135 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/store.js +137 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +36 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/model.js +56 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/store.js +15 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +27 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +31 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +68 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +5 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +55 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/data.js +16 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/domain.js +83 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/registry.js +18 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/store.js +61 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/admin.css +60 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/agents.css +46 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/antdv.css +295 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/app.css +102 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/delivery.css +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/intents.css +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/native.css +22 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/operations.css +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pbc.css +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/permissions.css +22 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pro.css +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/releases.css +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reset.css +246 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reviews.css +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tasks.css +6 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tokens.css +15 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workbench.css +61 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workflows.css +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +96 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/agents.test.js +14 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +44 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +19 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +14 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operations.test.js +25 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +17 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +24 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +23 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permissions.test.js +24 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/releases.test.js +50 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/reviews.test.js +36 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +28 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +42 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +16 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +11 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/tasks.test.js +27 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workbench.test.js +34 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workflows.test.js +16 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/convert.mjs +168 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/serve.mjs +7 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/styles.mjs +11 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/verify.mjs +24 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/serve.cjs +16 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/usability.css +44 -0
- package/skills/i3-ui-prototype/assets/templates/gallery/index.html +40 -0
- package/skills/i3-ui-prototype/assets/templates/modern-workspace/manifest.json +9 -0
- package/skills/i3-ui-prototype/assets/templates/modern-workspace/preset.json +6 -0
- package/skills/i3-ui-prototype/assets/templates/serve-gallery.cjs +16 -0
- package/skills/i3-ui-prototype/references/artifact-contract.md +41 -0
- package/skills/i3-ui-prototype/references/enterprise-admin.md +38 -0
- package/skills/i3-ui-prototype/references/expert-adapter.md +42 -0
- package/skills/i3-ui-prototype/references/template-adapters.md +57 -0
- package/skills/i3-ui-prototype/references/workflow-contract.md +19 -0
- package/skills/i3-ui-prototype/scripts/adapters/easel-html.cjs +30 -0
- package/skills/i3-ui-prototype/scripts/adapters/legacy-html.cjs +28 -0
- package/skills/i3-ui-prototype/scripts/check-design-provider.cjs +9 -0
- package/skills/i3-ui-prototype/scripts/check-prototype.cjs +14 -0
- package/skills/i3-ui-prototype/scripts/enterprise-template.cjs +88 -0
- package/skills/i3-ui-prototype/scripts/init-prototype.cjs +8 -0
- package/skills/i3-ui-prototype/scripts/manage-baseline.cjs +11 -0
- package/skills/i3-ui-prototype/scripts/prototype-lib.cjs +255 -0
- package/skills/i3-ui-prototype/scripts/template-adapters.cjs +89 -0
- package/skills/i3-using-agent-skills/SKILL.md +5 -0
- package/bin/native-version-validation.cjs +0 -8
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Alert, Modal, message } from "../../runtime/widgets.js";
|
|
2
|
+
import { ProForm, useForm } from "../../runtime/widgets.js";
|
|
3
|
+
import { useIntents } from "./store.js";
|
|
4
|
+
import { questions } from "./data.js";
|
|
5
|
+
import { createComponent } from '../../runtime/dom.js';
|
|
6
|
+
export default createComponent({ name: 'IntentReplan', propKeys: ["intent"], template: new URL('./IntentReplan.html', import.meta.url).href, setup(__props, __emit) {
|
|
7
|
+
const props = __props, emit = __emit, store = useIntents();
|
|
8
|
+
const expected = props.intent.recordVersion;
|
|
9
|
+
const form = useForm({ keys: ['boundary'], note: '' }, [
|
|
10
|
+
{ path: 'keys', label: '重新澄清的部分', component: 'select', mode: 'multiple', span: 24, options: questions.map(q => ({ label: q.label, value: q.key })), rules: [{ required: true, type: 'array', min: 1, message: '请选择至少一项' }] },
|
|
11
|
+
{ path: 'note', label: '调整原因', component: 'textarea', placeholder: '说明哪些方向需要调整,后续澄清将保留这条意见。', span: 24, autoSize: { minRows: 4, maxRows: 8 }, maxlength: 500, rules: [{ required: true, whitespace: true, message: '请填写调整原因' }] },
|
|
12
|
+
]);
|
|
13
|
+
async function save() {
|
|
14
|
+
if (!store.canEdit)
|
|
15
|
+
return;
|
|
16
|
+
try {
|
|
17
|
+
await form.formRef.value?.validate();
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
store.replan(props.intent.id, form.formData.keys, form.formData.note, expected);
|
|
24
|
+
message.success('已保留当前版本,返回澄清工作区');
|
|
25
|
+
emit('close');
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
message.error(e.message);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return { Alert, Modal, message, ProForm, useForm, useIntents, questions, props, emit, store, expected, form, save };
|
|
32
|
+
} });
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<!-- 来源:src/intents/IntentRevision.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
|
|
2
|
+
<template data-component="Drawer" data-bind-open="(true)" title="修改意图" data-bind-size="(720)" data-bind-mask="({ closable: false })" data-on-close="(close)"><template data-component="Alert" class="form-intro" type="info" show-icon="" data-bind-title="('保存后形成 v' + ((lastVersion(intent)?.number || 0) + 1) + ',需要重新确认。旧版本继续保留。')"></template><template data-component="Alert" data-if="(error)" class="form-intro" type="error" show-icon="" data-bind-title="(error)"></template><template data-component="ProForm" name="intent-revision" data-bind-form="(form)" layout="vertical" data-bind-disabled="(!store.canEdit)" class="intent-form"></template><template data-component="IntentDecisions" data-bind-decisions="(decisions)" data-bind-editable="(store.canEdit)" data-on-change="(decisions = $event)"></template><template data-slot="footer"><div class="drawer-footer"><span class="muted">修改仅保存在演示数据中</span><template data-component="Space"><template data-component="Button" data-on-click="(close)">取消</template><template data-component="Button" type="primary" data-bind-disabled="(!store.canEdit || !dirty)" data-on-click="(save)">保存新版本</template></template></div></template></template>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { confirmAction } from "../shell/confirmation.js";
|
|
2
|
+
import { computed, ref } from '../../runtime/state.js';
|
|
3
|
+
import { Alert, Button, Drawer, Space, message } from "../../runtime/widgets.js";
|
|
4
|
+
import { ProForm, useForm } from "../../runtime/widgets.js";
|
|
5
|
+
import { contexts, questions } from "./data.js";
|
|
6
|
+
import { lastVersion, questionKeys } from "./domain.js";
|
|
7
|
+
import { useIntents } from "./store.js";
|
|
8
|
+
import IntentDecisions from "./IntentDecisions.js";
|
|
9
|
+
import { createComponent } from '../../runtime/dom.js';
|
|
10
|
+
export default createComponent({ name: 'IntentRevision', propKeys: ["intent"], template: new URL('./IntentRevision.html', import.meta.url).href, setup(__props, __emit) {
|
|
11
|
+
const props = __props, emit = __emit, store = useIntents();
|
|
12
|
+
const expected = props.intent.recordVersion, error = ref(''), decisions = ref(props.intent.decisions.map(d => ({ ...d })));
|
|
13
|
+
const initial = { title: props.intent.title, request: props.intent.request, outcome: props.intent.outcome || '', context: props.intent.context, ...props.intent.answers };
|
|
14
|
+
const form = useForm({ ...initial });
|
|
15
|
+
const required = (label) => [{ required: true, whitespace: true, message: '请补充' + label }];
|
|
16
|
+
form.fields.value = [
|
|
17
|
+
{ path: 'title', label: '意图名称', component: 'input', span: 24, maxlength: 80, rules: required('意图名称') },
|
|
18
|
+
{ path: 'request', label: '要解决的问题', component: 'textarea', span: 24, autoSize: { minRows: 3, maxRows: 8 }, maxlength: 2000, rules: required('问题描述') },
|
|
19
|
+
{ path: 'outcome', label: '预期结果', component: 'textarea', span: 24, autoSize: { minRows: 3, maxRows: 6 }, maxlength: 1000, rules: required('预期结果') },
|
|
20
|
+
{ path: 'context', label: '拟归属', component: 'select', span: 24, options: contexts.map(value => ({ label: value, value })), allowClear: false },
|
|
21
|
+
...questions.map(q => ({ path: q.key, label: q.label, component: 'textarea', span: 24, autoSize: { minRows: 3, maxRows: 8 }, maxlength: 2000, rules: required(q.label) })),
|
|
22
|
+
];
|
|
23
|
+
const dirty = computed(() => JSON.stringify(form.formData) !== JSON.stringify(initial) || JSON.stringify(decisions.value) !== JSON.stringify(props.intent.decisions));
|
|
24
|
+
function close() { if (dirty.value)
|
|
25
|
+
confirmAction({ title: '放弃本次修改?', content: '已保存的意图版本不会受影响。', okText: '放弃修改', cancelText: '继续编辑', onOk: () => emit('close') });
|
|
26
|
+
else
|
|
27
|
+
emit('close'); }
|
|
28
|
+
async function save() {
|
|
29
|
+
if (!store.canEdit || !dirty.value)
|
|
30
|
+
return;
|
|
31
|
+
try {
|
|
32
|
+
await form.formRef.value?.validate();
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const { title, request, outcome, context } = form.formData;
|
|
38
|
+
const answers = Object.fromEntries(questionKeys.map(q => [q, form.formData[q]]));
|
|
39
|
+
try {
|
|
40
|
+
store.revise(props.intent.id, { title, request, outcome, context }, answers, decisions.value, expected);
|
|
41
|
+
message.success('已保存新版本,请重新确认');
|
|
42
|
+
emit('close');
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
error.value = e.message;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return { confirmAction, computed, ref, Alert, Button, Drawer, Space, message, ProForm, useForm, contexts, questions, lastVersion, questionKeys, useIntents, IntentDecisions, props, emit, store, expected, error, decisions, initial, form, required, dirty, close, save };
|
|
49
|
+
} });
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<!-- 来源:src/intents/IntentSummary.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
|
|
2
|
+
<aside class="panel intent-summary" aria-label="意图摘要"><h2>意图摘要</h2><ol class="intent-outline"><li data-each="(q, index) in (questions)" data-bind-key="(q.key)" data-bind-class="({ active: selectable && intent?.activeQuestion === index })"><button data-if="(selectable && intent)" data-bind-disabled="(intent.generating)" class="outline-item" data-bind-aria-current="(intent.activeQuestion === index ? 'step' : undefined)" data-on-click="(emit('select', index))"><span class="outline-number">{{ (index + 1) }}</span><span><strong>{{ (q.label) }}</strong><small data-bind-class="({ answered: !!intent.answers[q.key].trim() })"><template data-component="CheckCircleFilled" data-if="(intent.answers[q.key].trim())"></template>{{ (intent.answers[q.key].trim() ? '已回答' : '待补充') }}</small></span></button><div data-else="" class="outline-item"><span class="outline-number">{{ (index + 1) }}</span><span><strong>{{ (q.label) }}</strong><small data-bind-class="({ answered: !!intent?.answers[q.key].trim() })"><template data-component="CheckCircleFilled" data-if="(intent?.answers[q.key].trim())"></template>{{ (intent?.answers[q.key].trim() ? '已回答' : '待补充') }}</small></span></div></li></ol><div class="summary-context"><h3>PBC 归属</h3><p>{{ (intent ? affiliationOf(intent).label : '尚未归属 PBC') }}</p><p class="muted">归属完成后显示当前 PBC;意图历史内容保留。</p></div><div data-if="(intent?.versions.length)" class="summary-context"><h3>已保留版本</h3><p>{{ (intent.versions.length) }} 个意图版本</p><p class="muted">修改和重新规划会保留历史记录。</p></div></aside>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useDeliveryView } from "../shared/deliveryView.js";
|
|
2
|
+
import { CheckCircleFilled } from "../../runtime/icons.js";
|
|
3
|
+
import { questions, contexts } from "./data.js";
|
|
4
|
+
import { createComponent } from '../../runtime/dom.js';
|
|
5
|
+
export default createComponent({ name: 'IntentSummary', propKeys: ["intent", "selectable"], template: new URL('./IntentSummary.html', import.meta.url).href, setup(__props, __emit) {
|
|
6
|
+
const { affiliationOf } = useDeliveryView();
|
|
7
|
+
__props;
|
|
8
|
+
const emit = __emit;
|
|
9
|
+
return { useDeliveryView, affiliationOf, CheckCircleFilled, questions, contexts, emit };
|
|
10
|
+
} });
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<!-- 来源:src/intents/IntentWorkspace.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
|
|
2
|
+
<template data-component="Result" data-if="(!intent)" status="403" title="记录不存在或当前身份无权访问"><template data-slot="extra"><template data-component="RouterLink" to="/intents"><template data-component="Button" type="primary">返回意图池</template></template></template></template><template data-else=""><template data-component="IntentSource" data-bind-intent="(intent)"></template><template data-component="IntentHeader" data-bind-intent="(intent)" data-bind-step="(1)"><template data-component="Button" data-if="(store.canClose)" danger="" data-bind-disabled="(intent.generating)" data-on-click="(closing = true)">关闭意图</template><template data-component="Button" data-on-click="(preview = true)">预览意图</template><template data-component="Button" data-on-click="(router.push('/intents'))">返回列表</template></template><template data-component="Alert" data-if="(store.notice)" class="page-alert" type="warning" show-icon="" data-bind-title="(store.notice)"></template><template data-component="Alert" data-if="(!store.canEdit)" class="page-alert" type="info" show-icon="" title="只读查看:当前不能补充、整理或确认意图。"></template><template data-component="Alert" data-if="(intent.replanNote)" class="page-alert" type="info" show-icon="" title="正在重新澄清" data-bind-description="(intent.replanNote)"></template><div class="intent-grid"><section class="panel intent-main"><h2>需求澄清</h2><p class="muted intent-subtitle">按问题补充信息,形成可确认的意图。</p><div class="request-brief"><h3>要解决的问题</h3><p>{{ (intent.request) }}</p><h3 class="brief-outcome">预期结果</h3><p>{{ (intent.outcome) }}</p></div><div data-if="(intent.generating)" class="intent-generating" role="status" aria-live="polite"><h3>正在整理意图…</h3><p class="muted">根据已补充的四项内容生成演示意图。</p><template data-component="Skeleton" active="" data-bind-paragraph="({ rows: 4 })"></template></div><div data-else="" class="clarification-block"><div class="assistant-label"><template data-component="CommentOutlined"></template><span>需求规划助手 · 演示</span><small>第 {{ (intent.activeQuestion + 1) }} 项,共 4 项</small></div><h3 class="question-title">{{ (question.title) }}</h3><p class="muted question-hint">{{ (question.hint) }}</p><template data-component="Button" class="example-answer" data-bind-disabled="(!store.canEdit)" data-on-click="(example)"><template data-component="EditOutlined"></template>{{ (/供热|报修|派单/.test(intent.request) ? '填入供热示例' : '填入回答示例') }}</template><label for="clarification-answer" class="answer-label">我的补充</label><template data-component="Input.TextArea" id="clarification-answer" data-model-value="(answer)" data-bind-rows="(5)" data-bind-maxlength="(2000)" show-count="" data-bind-disabled="(!store.canEdit)" data-bind-placeholder="(question.placeholder)" data-bind-aria-invalid="(!!validation)" data-bind-aria-describedby="(validation ? 'answer-error' : undefined)"></template><p data-if="(validation)" id="answer-error" class="input-error" role="alert">{{ (validation) }}</p></div><template data-component="Alert" data-if="(intent.error)" class="intent-error" type="error" show-icon="" title="意图整理失败" data-bind-description="(intent.error)"><template data-slot="action"><template data-component="Button" data-bind-disabled="(!store.canEdit)" data-on-click="(generate)">重试生成</template></template></template><div class="intent-actions"><span class="muted" role="status"><template data-component="InfoCircleOutlined"></template> 回答保存在当前浏览器</span><template data-component="Button" type="primary" data-bind-loading="(intent.generating)" data-bind-disabled="(!store.canEdit)" data-on-click="(next)">{{ (allDone ? '生成意图' : '保存并继续') }}</template></div><template data-component="IntentDecisions" data-bind-decisions="(intent.decisions)" data-bind-editable="(store.canEdit && !intent.generating)" data-bind-commit="(saveDecisions)"></template></section><div class="intent-side-stack"><template data-component="IntentSummary" data-bind-intent="(intent)" selectable="" data-on-select="(select)"></template><div class="panel intent-summary"><template data-component="RecordMetadata" data-bind-record="(intent)" compact=""></template></div></div></div><template data-component="IntentClose" data-if="(closing)" data-bind-intent="(intent)" data-on-close="(closing = false)"></template><template data-component="Drawer" data-bind-open="(preview)" title="意图草稿预览" data-bind-size="(720)" data-on-close="(preview = false)"><template data-component="Alert" type="info" show-icon="" title="根据当前已保存的输入展示,未填写的内容保持待补充。"></template><template data-component="IntentDocument" data-bind-value="(intent)"></template></template></template>
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import IntentSource from "../operations/IntentSource.js";
|
|
2
|
+
import { confirmAction } from "../shell/confirmation.js";
|
|
3
|
+
import { computed, ref, watch, nextTick } from '../../runtime/state.js';
|
|
4
|
+
import { useRoute, useRouter } from "../../runtime/router.js";
|
|
5
|
+
import { Alert, Button, Drawer, Input, Result, Skeleton, message } from "../../runtime/widgets.js";
|
|
6
|
+
import { CommentOutlined, EditOutlined, InfoCircleOutlined } from "../../runtime/icons.js";
|
|
7
|
+
import { useIntents } from "./store.js";
|
|
8
|
+
import { questions, exampleFor } from "./data.js";
|
|
9
|
+
import { completeAnswers } from "./domain.js";
|
|
10
|
+
import IntentHeader from "./IntentHeader.js";
|
|
11
|
+
import IntentSummary from "./IntentSummary.js";
|
|
12
|
+
import IntentDecisions from "./IntentDecisions.js";
|
|
13
|
+
import IntentClose from "./IntentClose.js";
|
|
14
|
+
import RecordMetadata from "../shared/RecordMetadata.js";
|
|
15
|
+
import IntentDocument from "./IntentDocument.js";
|
|
16
|
+
import { createComponent } from '../../runtime/dom.js';
|
|
17
|
+
export default createComponent({ name: 'IntentWorkspace', propKeys: [], template: new URL('./IntentWorkspace.html', import.meta.url).href, setup(__props, __emit) {
|
|
18
|
+
const route = useRoute(), router = useRouter(), store = useIntents(), validation = ref('');
|
|
19
|
+
const closing = ref(false), preview = ref(false);
|
|
20
|
+
const id = computed(() => String(route.params.id)), intent = computed(() => store.get(id.value));
|
|
21
|
+
const question = computed(() => questions[intent.value?.activeQuestion || 0]);
|
|
22
|
+
const answer = computed({ get: () => intent.value?.answers[question.value.key] || '', set: value => { validation.value = ''; try {
|
|
23
|
+
store.answer(id.value, question.value.key, value);
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
validation.value = e.message;
|
|
27
|
+
} } });
|
|
28
|
+
const allDone = computed(() => !!intent.value && completeAnswers(intent.value.answers));
|
|
29
|
+
watch([id, () => store.canEdit], () => { if (intent.value?.status === 'draft' && store.canEdit) {
|
|
30
|
+
try {
|
|
31
|
+
store.start(id.value);
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
validation.value = e.message;
|
|
35
|
+
}
|
|
36
|
+
} }, { immediate: true });
|
|
37
|
+
watch(() => intent.value?.status, value => { if (value === 'ready' || value === 'confirmed' || value === 'closed')
|
|
38
|
+
router.replace('/intents/' + id.value); }, { immediate: true });
|
|
39
|
+
function saveDecisions(decisions) { try {
|
|
40
|
+
store.setDecisions(id.value, decisions, intent.value.recordVersion);
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
message.error(e.message);
|
|
45
|
+
return false;
|
|
46
|
+
} }
|
|
47
|
+
function select(index) { validation.value = ''; store.selectQuestion(id.value, index); nextTick(() => document.getElementById('clarification-answer')?.focus()); }
|
|
48
|
+
function example() {
|
|
49
|
+
const fill = () => { answer.value = exampleFor(question.value.key, intent.value?.request || ''); };
|
|
50
|
+
if (answer.value.trim())
|
|
51
|
+
confirmAction({ title: '替换当前回答为示例?', content: '其他澄清回答不受影响。', okText: '填入示例', cancelText: '保留回答', onOk: fill });
|
|
52
|
+
else
|
|
53
|
+
fill();
|
|
54
|
+
}
|
|
55
|
+
async function next() {
|
|
56
|
+
if (!store.canEdit || !intent.value)
|
|
57
|
+
return;
|
|
58
|
+
if (!answer.value.trim()) {
|
|
59
|
+
validation.value = '请先补充当前问题,再继续。';
|
|
60
|
+
document.getElementById('clarification-answer')?.focus();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (allDone.value) {
|
|
64
|
+
await generate();
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const after = questions.findIndex((q, index) => index > intent.value.activeQuestion && !intent.value.answers[q.key].trim());
|
|
68
|
+
select(after >= 0 ? after : questions.findIndex(q => !intent.value.answers[q.key].trim()));
|
|
69
|
+
}
|
|
70
|
+
async function generate() { try {
|
|
71
|
+
await store.generate(id.value);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
message.error(e.message);
|
|
75
|
+
} }
|
|
76
|
+
return { IntentSource, confirmAction, computed, ref, watch, nextTick, useRoute, useRouter, Alert, Button, Drawer, Input, Result, Skeleton, message, CommentOutlined, EditOutlined, InfoCircleOutlined, useIntents, questions, exampleFor, completeAnswers, IntentHeader, IntentSummary, IntentDecisions, IntentClose, RecordMetadata, IntentDocument, route, router, store, validation, closing, preview, id, intent, question, answer, allDone, saveDecisions, select, example, next, generate };
|
|
77
|
+
} });
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/data.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { newIntent, publishVersion, confirmVersion } from "./domain.js";
|
|
2
|
+
import { actors, formatDate } from "../shared/policy.js";
|
|
3
|
+
export const statusMeta = {
|
|
4
|
+
draft: { label: '草稿', color: 'default' }, clarifying: { label: '待补充', color: 'orange' },
|
|
5
|
+
ready: { label: '待确认', color: 'blue' }, confirmed: { label: '已确认', color: 'green' },
|
|
6
|
+
closed: { label: '已关闭', color: 'default' },
|
|
7
|
+
};
|
|
8
|
+
export const contexts = ['集团意图池 · 尚未立项', '拟归属:供热工单 PBC', '拟归属:知识助手 PBC', '拟归属:EASEL 研发平台'];
|
|
9
|
+
export const heatingExample = {
|
|
10
|
+
title: '供热报修智能分诊与主管确认派单',
|
|
11
|
+
request: '居民报修后,结合设备台账和历史工单给出故障分类与班组建议,由主管确认后派单。', context: contexts[0],
|
|
12
|
+
outcome: '主管能查看有依据的分类与班组建议,确认后完成派单;不确定的报修可以转人工。',
|
|
13
|
+
};
|
|
14
|
+
export const heatingAnswers = {
|
|
15
|
+
audience: '居民或客服提交报修,主管在工作台查看分诊建议并确认,处理班组查看工单进度。',
|
|
16
|
+
process: '系统查询授权资料并形成分类和班组建议;主管确认或调整后派单。信息不足或建议不可靠时转人工处理。',
|
|
17
|
+
boundary: '使用授权的设备台账、历史工单和班组资料;不执行设备控制或参数调整。派单和通知先在测试环境验证。',
|
|
18
|
+
acceptance: '每条建议可查看依据;必须经主管确认后派单;重复操作不重复派单;异常可转人工并记录原因。',
|
|
19
|
+
};
|
|
20
|
+
export const questions = [
|
|
21
|
+
{ key: 'audience', label: '使用者与入口', title: '哪些人使用?从哪里发起?', hint: '说明参与的人、使用入口,以及各自需要完成的动作。', placeholder: '例如:居民或客服提交报修,主管在工作台确认建议。' },
|
|
22
|
+
{ key: 'process', label: '处理流程', title: '系统给出结果后,谁决定下一步?', hint: '说明主要步骤、人工确认点,以及不确定时如何处理。', placeholder: '从输入到结果,按先后写出处理步骤。' },
|
|
23
|
+
{ key: 'boundary', label: '数据与边界', title: '可以使用哪些资料?有哪些限制?', hint: '把可用数据、权限范围、暂不涉及的能力写清楚。', placeholder: '填写数据来源、允许的操作和需要遵守的限制。' },
|
|
24
|
+
{ key: 'acceptance', label: '验收标准', title: '怎样判断这项需求已经做好?', hint: '描述能观察、能验证的结果。暂时不确定的指标可以注明待业务方提供。', placeholder: '例如:哪些结果必须可查询,哪些异常必须可恢复。' },
|
|
25
|
+
];
|
|
26
|
+
export function exampleFor(key, request) {
|
|
27
|
+
if (/供热|报修|派单/.test(request))
|
|
28
|
+
return heatingAnswers[key];
|
|
29
|
+
return { audience: '业务人员从工作台发起,负责人查看和确认结果。', process: '提交信息后整理建议,由负责人确认;信息不足时补充,处理失败时可重试或转人工。',
|
|
30
|
+
boundary: '只读取本项目已授权的数据,不自动修改生产业务记录;具体数据接口由业务方提供。', acceptance: '输入、处理结果和确认记录可以追溯;错误原因明确,重新打开页面可继续未完成的工作。' }[key];
|
|
31
|
+
}
|
|
32
|
+
export function seedIntents() {
|
|
33
|
+
const at = '2026-09-08T10:20:00.000Z';
|
|
34
|
+
const first = newIntent(heatingExample, 'seed-heating', 'INT-20260909-001', at);
|
|
35
|
+
first.status = 'clarifying';
|
|
36
|
+
first.decisions = [{ id: 'decision-1', question: '低置信度建议由谁复核,超时后如何处理?', answer: '' }];
|
|
37
|
+
let knowledge = newIntent({ title: '知识助手增加回答来源引用', request: '员工查询制度时,答案应同时展示原文来源,资料不足时明确提示。', context: contexts[2] }, 'seed-knowledge', 'INT-20260909-002', at);
|
|
38
|
+
knowledge.answers = { audience: '员工在知识助手入口提问,知识管理员维护制度资料。', process: '查询授权资料并返回答案与原文引用;没有可靠依据时提示无法回答。', boundary: '仅查询当前账号有权访问的制度资料,不读取未授权文件。', acceptance: '每个答案可打开来源;过期资料有提示;找不到依据时不编造答案。' };
|
|
39
|
+
Object.assign(knowledge, { tenantId: 'north', owner: actors[5].name, createdById: actors[5].id, createdBy: actors[5].name, createdDept: actors[5].department, updatedBy: actors[5].name });
|
|
40
|
+
knowledge = publishVersion(knowledge, at);
|
|
41
|
+
const inspection = newIntent({ title: '巡检异常上报与转派', request: '巡检人员可以提交异常和照片,由值班负责人判断是否转为维修工单。', context: contexts[0] }, 'seed-inspection', 'INT-20260909-003', at);
|
|
42
|
+
let confirmed = newIntent({ title: '工单处理进度通知', request: '工单状态变化后,为相关业务人员提供可查询的处理进度。', context: contexts[1] }, 'seed-notice', 'INT-20260909-004', at);
|
|
43
|
+
confirmed.answers = { audience: '客服与处理班组在工单工作台查看。', process: '工单状态更新后生成进度记录,业务人员可查询处理过程。', boundary: '先验证测试环境记录,不发送真实居民通知。', acceptance: '状态与工单一致,重复事件不生成重复记录,错误原因可查。' };
|
|
44
|
+
confirmed = confirmVersion(publishVersion(confirmed, at), 1, at);
|
|
45
|
+
const report = newIntent({ title: '班组日报自动汇总', request: '将每天班组处理的工单汇总为日报,班组长补充说明后确认。', context: contexts[1] }, 'seed-report', 'INT-20260909-005', at);
|
|
46
|
+
report.status = 'clarifying';
|
|
47
|
+
report.answers.audience = '班组长每天在工作台查看汇总并补充说明。';
|
|
48
|
+
report.activeQuestion = 1;
|
|
49
|
+
Object.assign(report, { owner: actors[3].name, createdById: actors[3].id, createdBy: actors[3].name, createdDept: actors[3].department, updatedBy: actors[3].name });
|
|
50
|
+
let delivery = newIntent({ ...heatingExample, title: heatingExample.title + ' · 规格演示' }, 'seed-spec-heating', 'INT-20260910-006', at);
|
|
51
|
+
delivery.answers = { ...heatingAnswers };
|
|
52
|
+
delivery = confirmVersion(publishVersion(delivery, at), 1, at);
|
|
53
|
+
const factory = JSON.parse(JSON.stringify(delivery));
|
|
54
|
+
factory.id = 'seed-pbc-create';
|
|
55
|
+
factory.code = 'INT-20260911-PBC';
|
|
56
|
+
factory.title = '供热智能分诊 · 新建系统样例';
|
|
57
|
+
factory.versions.forEach(v => v.title = factory.title);
|
|
58
|
+
return [factory, delivery, first, knowledge, inspection, confirmed, report];
|
|
59
|
+
}
|
|
60
|
+
export const dateText = formatDate;
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/domain.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { actors, metadata, can } from "../shared/policy.js";
|
|
2
|
+
export const questionKeys = ['audience', 'process', 'boundary', 'acceptance'];
|
|
3
|
+
export const emptyAnswers = () => ({ audience: '', process: '', boundary: '', acceptance: '' });
|
|
4
|
+
export const completeAnswers = (answers) => questionKeys.every(key => !!answers[key]?.trim());
|
|
5
|
+
export const lastVersion = (intent) => intent.versions.at(-1);
|
|
6
|
+
export const unresolved = (decisions) => decisions.filter(d => !d.answer.trim());
|
|
7
|
+
export const confirmationBusy = (intent) => ['pending', 'unknown'].includes(intent.confirmation);
|
|
8
|
+
export function assertIntentAccess(intent, actor, action, expected) {
|
|
9
|
+
if (!can(actor, action, intent.tenantId) || intent.isDeleted)
|
|
10
|
+
throw new Error('当前身份没有此操作权限,或记录不在可见范围内。');
|
|
11
|
+
if (expected !== undefined && expected !== intent.recordVersion)
|
|
12
|
+
throw new Error('记录已被更新,请重新打开并核对最新内容。');
|
|
13
|
+
}
|
|
14
|
+
export function assertMutable(intent) {
|
|
15
|
+
if (intent.status === 'closed')
|
|
16
|
+
throw new Error('意图已关闭,保留内容与历史供查阅。');
|
|
17
|
+
if (confirmationBusy(intent))
|
|
18
|
+
throw new Error('确认结果尚未明确,请先核实结果再修改。');
|
|
19
|
+
}
|
|
20
|
+
export function newIntent(input, id, code, at, actor = actors[2]) {
|
|
21
|
+
if (!input.title.trim() || !input.request.trim())
|
|
22
|
+
throw new Error('请填写意图名称和需求描述。');
|
|
23
|
+
return { ...input, outcome: input.outcome || input.request, title: input.title.trim(), request: input.request.trim(), id, code,
|
|
24
|
+
...metadata(actor, at), owner: actor.name, status: 'draft', answers: emptyAnswers(), decisions: [], activeQuestion: 0,
|
|
25
|
+
versions: [], events: [{ label: '保存意图草稿', at, actor: actor.name }], replanNote: '', generating: false, error: '', confirmation: 'idle' };
|
|
26
|
+
}
|
|
27
|
+
export function publishVersion(intent, at, reason = '根据澄清回答整理') {
|
|
28
|
+
assertMutable(intent);
|
|
29
|
+
if (!completeAnswers(intent.answers) || !intent.outcome?.trim())
|
|
30
|
+
throw new Error('请先补充预期结果与全部澄清事项。');
|
|
31
|
+
if (intent.status === 'confirmed')
|
|
32
|
+
throw new Error('请先通过修改或重新规划创建新的意图版本。');
|
|
33
|
+
const number = (lastVersion(intent)?.number || 0) + 1;
|
|
34
|
+
const version = { title: intent.title, request: intent.request, outcome: intent.outcome, context: intent.context,
|
|
35
|
+
answers: { ...intent.answers }, decisions: intent.decisions.map(d => ({ ...d })), number, createdAt: at, reason };
|
|
36
|
+
return { ...intent, status: 'ready', generating: false, error: '', confirmation: 'idle', pendingConfirmation: undefined, updatedAt: at,
|
|
37
|
+
versions: [...intent.versions, version], events: [...intent.events, { label: '形成意图 v' + number + ',等待确认', at }] };
|
|
38
|
+
}
|
|
39
|
+
export function reviseVersion(intent, input, answers, at, decisions = intent.decisions) {
|
|
40
|
+
assertMutable(intent);
|
|
41
|
+
if (!lastVersion(intent))
|
|
42
|
+
throw new Error('当前还没有可修改的意图版本。');
|
|
43
|
+
if (!input.title.trim() || !input.request.trim())
|
|
44
|
+
throw new Error('意图名称与目标不能为空。');
|
|
45
|
+
return publishVersion({ ...intent, ...input, answers: { ...answers }, decisions: decisions.map(d => ({ ...d })), status: 'clarifying' }, at, '人工修改意图内容或决策登记');
|
|
46
|
+
}
|
|
47
|
+
function checkCandidate(intent, expected) {
|
|
48
|
+
const current = lastVersion(intent);
|
|
49
|
+
if (intent.status !== 'ready' || !current || current.number !== expected)
|
|
50
|
+
throw new Error('当前版本已变化,请重新查看后确认。');
|
|
51
|
+
if (!completeAnswers(intent.answers) || JSON.stringify(intent.answers) !== JSON.stringify(current.answers) ||
|
|
52
|
+
JSON.stringify(intent.decisions) !== JSON.stringify(current.decisions) || intent.outcome !== current.outcome ||
|
|
53
|
+
intent.request !== current.request || intent.title !== current.title || intent.context !== current.context)
|
|
54
|
+
throw new Error('内容已经变化,请先重新整理意图。');
|
|
55
|
+
if (unresolved(current.decisions).length)
|
|
56
|
+
throw new Error('仍有未决问题,请登记结论并形成新版本后确认。');
|
|
57
|
+
return current;
|
|
58
|
+
}
|
|
59
|
+
export function confirmVersion(intent, expected, at, actor = actors[2]) {
|
|
60
|
+
assertIntentAccess(intent, actor, 'intent:confirm');
|
|
61
|
+
const current = checkCandidate(intent, expected);
|
|
62
|
+
const confirmed = { ...current, answers: { ...current.answers }, decisions: current.decisions.map(d => ({ ...d })), confirmedAt: at, confirmedBy: actor.name };
|
|
63
|
+
return { ...intent, status: 'confirmed', confirmation: 'idle', error: '', pendingConfirmation: undefined, updatedAt: at,
|
|
64
|
+
versions: [...intent.versions.slice(0, -1), confirmed], events: [...intent.events, { label: '确认意图 v' + expected, at, actor: actor.name }] };
|
|
65
|
+
}
|
|
66
|
+
export function beginConfirmation(intent, expected, at, actor, requestId) {
|
|
67
|
+
assertIntentAccess(intent, actor, 'intent:confirm');
|
|
68
|
+
assertMutable(intent);
|
|
69
|
+
checkCandidate(intent, expected);
|
|
70
|
+
return { ...intent, confirmation: 'pending', error: '', pendingConfirmation: { requestId, version: expected, actorId: actor.id, actor: actor.name, at } };
|
|
71
|
+
}
|
|
72
|
+
export function closeIntent(intent, reason, at, actor) {
|
|
73
|
+
assertIntentAccess(intent, actor, 'intent:close');
|
|
74
|
+
assertMutable(intent);
|
|
75
|
+
if (intent.status === 'confirmed')
|
|
76
|
+
throw new Error('已确认意图需保留确认基线;归档策略另行确认。');
|
|
77
|
+
if (intent.generating)
|
|
78
|
+
throw new Error('正在整理意图,请等待完成后再关闭。');
|
|
79
|
+
if (!reason.trim())
|
|
80
|
+
throw new Error('请填写关闭原因。');
|
|
81
|
+
return { ...intent, status: 'closed', closedReason: reason.trim(), closedBy: actor.name, closedAt: at,
|
|
82
|
+
events: [...intent.events, { label: '关闭意图:' + reason.trim(), actor: actor.name, at }] };
|
|
83
|
+
}
|
|
84
|
+
export function replanIntent(intent, keys, note, at) {
|
|
85
|
+
assertMutable(intent);
|
|
86
|
+
if (!['ready', 'confirmed'].includes(intent.status))
|
|
87
|
+
throw new Error('请先完成当前澄清。');
|
|
88
|
+
if (!keys.length || keys.some(key => !questionKeys.includes(key)) || !note.trim())
|
|
89
|
+
throw new Error('请选择重新澄清的部分并填写原因。');
|
|
90
|
+
const answers = { ...intent.answers };
|
|
91
|
+
keys.forEach(key => { answers[key] = ''; });
|
|
92
|
+
return { ...intent, answers, status: 'clarifying', activeQuestion: questionKeys.indexOf(keys[0]), error: '', generating: false,
|
|
93
|
+
confirmation: 'idle', pendingConfirmation: undefined, replanNote: note.trim(), updatedAt: at,
|
|
94
|
+
events: [...intent.events, { label: '重新规划:' + note.trim(), at }] };
|
|
95
|
+
}
|
|
96
|
+
export function assertIntentDelete(intent) {
|
|
97
|
+
if (intent.operationLinks?.length)
|
|
98
|
+
throw new Error('意图关联运行异常,必须保留来源与处理记录,不能删除。');
|
|
99
|
+
if (intent.status === 'confirmed' || intent.versions.some(v => v.confirmedAt))
|
|
100
|
+
throw new Error('存在已确认版本,须保留意图与历史,不能删除。');
|
|
101
|
+
if (confirmationBusy(intent) || intent.pendingConfirmation)
|
|
102
|
+
throw new Error('确认处理中或结果待核实,请先核实结果。');
|
|
103
|
+
if (intent.generating)
|
|
104
|
+
throw new Error('正在整理意图,请等待完成后再操作。');
|
|
105
|
+
}
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/store.js
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { computed, ref } from '../../runtime/state.js';
|
|
2
|
+
import { defineStore } from "../../runtime/state.js";
|
|
3
|
+
import { useSession } from "../shared/session.js";
|
|
4
|
+
import { seedIntents } from "./data.js";
|
|
5
|
+
import { newIntent, publishVersion, reviseVersion, confirmVersion, beginConfirmation, closeIntent, replanIntent, completeAnswers, questionKeys, assertIntentAccess, assertMutable, assertIntentDelete } from "./domain.js";
|
|
6
|
+
import { assertBatch } from "../shared/listBatch.js";
|
|
7
|
+
const key = 'i3-prototype-antdv-console-intents-prototype-v010';
|
|
8
|
+
const copy = (value) => JSON.parse(JSON.stringify(value));
|
|
9
|
+
export const useIntents = defineStore('intents', () => {
|
|
10
|
+
const session = useSession(), records = ref(seedIntents()), notice = ref(''), scene = ref('normal'), resultMode = ref('success'), resetTick = ref(0);
|
|
11
|
+
const canEdit = computed(() => session.can('intent:edit')), canConfirm = computed(() => session.can('intent:confirm')), canClose = computed(() => session.can('intent:close'));
|
|
12
|
+
let epoch = 0;
|
|
13
|
+
try {
|
|
14
|
+
const raw = localStorage.getItem(key);
|
|
15
|
+
if (raw) {
|
|
16
|
+
const saved = JSON.parse(raw);
|
|
17
|
+
if (saved.schema !== 3 || !Array.isArray(saved.items) || !saved.items.every((i) => i.id && i.tenantId && i.recordVersion &&
|
|
18
|
+
['draft', 'clarifying', 'ready', 'confirmed', 'closed'].includes(i.status) && Array.isArray(i.versions) && Array.isArray(i.decisions) &&
|
|
19
|
+
i.answers && questionKeys.every(q => typeof i.answers[q] === 'string')))
|
|
20
|
+
throw new Error('Invalid saved data');
|
|
21
|
+
records.value = saved.items.map((i) => ({ ...i, generating: false, confirmation: i.confirmation === 'pending' ? 'unknown' : i.confirmation,
|
|
22
|
+
error: i.generating ? '上次整理被中断,回答已保留。请重试生成。' : i.error }));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
notice.value = '本地演示数据无法读取,已加载初始示例。';
|
|
27
|
+
}
|
|
28
|
+
function commit(next) {
|
|
29
|
+
try {
|
|
30
|
+
localStorage.setItem(key, JSON.stringify({ schema: 3, items: next }));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
throw new Error('浏览器无法保存演示数据,本次操作未提交。请保留输入后重试。');
|
|
34
|
+
}
|
|
35
|
+
records.value = next;
|
|
36
|
+
notice.value = '';
|
|
37
|
+
}
|
|
38
|
+
function freshRecords() {
|
|
39
|
+
try {
|
|
40
|
+
const raw = localStorage.getItem(key);
|
|
41
|
+
if (!raw)
|
|
42
|
+
return records.value;
|
|
43
|
+
const saved = JSON.parse(raw);
|
|
44
|
+
if (saved.schema !== 3 || !Array.isArray(saved.items))
|
|
45
|
+
throw Error();
|
|
46
|
+
return saved.items;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
throw Error('意图数据无法读取,本次未提交。请重新加载核对。');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function operationCommit(transform) {
|
|
53
|
+
const fresh = freshRecords(), next = transform(copy(fresh));
|
|
54
|
+
commit([next, ...fresh.filter(i => i.id !== next.id)]);
|
|
55
|
+
return next;
|
|
56
|
+
}
|
|
57
|
+
if (typeof window !== 'undefined')
|
|
58
|
+
window.addEventListener('storage', e => { if (e.key === key) {
|
|
59
|
+
try {
|
|
60
|
+
records.value = freshRecords();
|
|
61
|
+
notice.value = '';
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
notice.value = '其他页面写入的意图无法读取,请刷新核对。';
|
|
65
|
+
}
|
|
66
|
+
} });
|
|
67
|
+
const items = computed(() => records.value.filter(i => !i.isDeleted && session.readable('intent:view', i.tenantId)));
|
|
68
|
+
const get = (id) => items.value.find(i => i.id === id);
|
|
69
|
+
function requireRecord(id, action, expected) {
|
|
70
|
+
session.require(action);
|
|
71
|
+
const i = get(id);
|
|
72
|
+
if (!i)
|
|
73
|
+
throw new Error('记录不存在或当前身份无权访问。');
|
|
74
|
+
assertIntentAccess(i, session.actor, action, expected);
|
|
75
|
+
return i;
|
|
76
|
+
}
|
|
77
|
+
function update(record, actor = session.actor, touch = true) {
|
|
78
|
+
const known = records.value.find(i => i.id === record.id), fresh = freshRecords(), current = fresh.find(i => i.id === record.id);
|
|
79
|
+
if (known && current && known.recordVersion !== current.recordVersion) {
|
|
80
|
+
records.value = fresh;
|
|
81
|
+
throw Error('意图已在其他页面更新,请核对当前版本;输入保留。');
|
|
82
|
+
}
|
|
83
|
+
if (!current)
|
|
84
|
+
throw new Error('记录已不存在。');
|
|
85
|
+
const next = copy(record);
|
|
86
|
+
if (touch) {
|
|
87
|
+
next.recordVersion = current.recordVersion + 1;
|
|
88
|
+
next.updatedAt = new Date().toISOString();
|
|
89
|
+
next.updatedBy = actor.name;
|
|
90
|
+
}
|
|
91
|
+
next.events = next.events.map((e, n) => n >= current.events.length ? { ...e, actor: e.actor || actor.name } : e);
|
|
92
|
+
commit(fresh.map(i => i.id === next.id ? next : i));
|
|
93
|
+
}
|
|
94
|
+
function create(input) {
|
|
95
|
+
session.require('intent:edit', session.actor.tenantId);
|
|
96
|
+
session.writeCheck();
|
|
97
|
+
records.value = freshRecords();
|
|
98
|
+
const at = new Date().toISOString(), id = crypto.randomUUID();
|
|
99
|
+
const max = Math.max(0, ...records.value.map(i => Number(i.code.split('-').at(-1)) || 0)) + 1;
|
|
100
|
+
const code = 'INT-' + at.slice(0, 10).replaceAll('-', '') + '-' + String(max).padStart(3, '0');
|
|
101
|
+
const item = newIntent(input, id, code, at, session.actor);
|
|
102
|
+
commit([item, ...records.value]);
|
|
103
|
+
return item.id;
|
|
104
|
+
}
|
|
105
|
+
function start(id) { const i = requireRecord(id, 'intent:edit'); if (i.status === 'draft')
|
|
106
|
+
update({ ...i, status: 'clarifying' }); }
|
|
107
|
+
function answer(id, q, value) {
|
|
108
|
+
const i = requireRecord(id, 'intent:edit');
|
|
109
|
+
assertMutable(i);
|
|
110
|
+
if (i.generating || i.status !== 'clarifying')
|
|
111
|
+
throw new Error('当前状态不能修改澄清回答。');
|
|
112
|
+
update({ ...i, answers: { ...i.answers, [q]: value }, error: '' });
|
|
113
|
+
}
|
|
114
|
+
function selectQuestion(id, index) { const i = get(id); if (i)
|
|
115
|
+
update({ ...i, activeQuestion: Math.max(0, Math.min(index, 3)) }, session.actor, false); }
|
|
116
|
+
async function generate(id) {
|
|
117
|
+
const i = requireRecord(id, 'intent:edit');
|
|
118
|
+
assertMutable(i);
|
|
119
|
+
if (i.generating || !completeAnswers(i.answers) || !['draft', 'clarifying'].includes(i.status))
|
|
120
|
+
return false;
|
|
121
|
+
session.writeCheck();
|
|
122
|
+
const run = epoch, mode = resultMode.value, actor = copy(session.actor);
|
|
123
|
+
update({ ...i, status: 'clarifying', generating: true, error: '' });
|
|
124
|
+
await new Promise(resolve => setTimeout(resolve, 850));
|
|
125
|
+
if (run !== epoch)
|
|
126
|
+
return false;
|
|
127
|
+
const current = records.value.find(r => r.id === id);
|
|
128
|
+
if (!current)
|
|
129
|
+
return false;
|
|
130
|
+
if (actor.id !== session.actor.id || !session.can('intent:edit', current.tenantId) || mode === 'failure') {
|
|
131
|
+
update({ ...current, generating: false, error: mode === 'failure' ? '整理暂未完成(模拟超时)。回答已保留,可重试。' : '身份或登录状态已变化,整理已中止。重新登录后可重试。' }, actor);
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
update(publishVersion(current, new Date().toISOString(), current.replanNote ? '重新规划:' + current.replanNote : undefined), actor);
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
function revise(id, input, answers, decisions, expected) {
|
|
138
|
+
const i = requireRecord(id, 'intent:edit', expected);
|
|
139
|
+
session.writeCheck();
|
|
140
|
+
update(reviseVersion(i, input, answers, new Date().toISOString(), decisions));
|
|
141
|
+
}
|
|
142
|
+
function setDecisions(id, decisions, expected) {
|
|
143
|
+
const i = requireRecord(id, 'intent:edit', expected);
|
|
144
|
+
assertMutable(i);
|
|
145
|
+
session.writeCheck();
|
|
146
|
+
if (i.status === 'confirmed')
|
|
147
|
+
throw new Error('请通过修改意图形成新版本。');
|
|
148
|
+
if (i.generating)
|
|
149
|
+
throw new Error('正在整理,请稍后修改决策登记。');
|
|
150
|
+
if (i.status === 'ready')
|
|
151
|
+
update(reviseVersion(i, i, i.answers, new Date().toISOString(), decisions));
|
|
152
|
+
else
|
|
153
|
+
update({ ...i, decisions: copy(decisions) });
|
|
154
|
+
}
|
|
155
|
+
async function confirm(id, expected, expectedRecord) {
|
|
156
|
+
const i = requireRecord(id, 'intent:confirm', expectedRecord);
|
|
157
|
+
session.writeCheck();
|
|
158
|
+
const actor = copy(session.actor), requestId = crypto.randomUUID(), run = epoch, mode = session.confirmResult;
|
|
159
|
+
update(beginConfirmation(i, expected, new Date().toISOString(), actor, requestId), actor);
|
|
160
|
+
await new Promise(resolve => setTimeout(resolve, 800));
|
|
161
|
+
if (run !== epoch)
|
|
162
|
+
return 'cancelled';
|
|
163
|
+
const current = records.value.find(r => r.id === id);
|
|
164
|
+
if (!current || current.pendingConfirmation?.requestId !== requestId)
|
|
165
|
+
return 'cancelled';
|
|
166
|
+
if (mode === 'failure' || session.actor.id !== actor.id || !session.can('intent:confirm', current.tenantId)) {
|
|
167
|
+
update({ ...current, confirmation: 'failed', pendingConfirmation: undefined, error: mode === 'failure' ? '确认未被接受(模拟服务错误),当前版本仍未确认,可重试。' : '身份、权限或登录状态已变化,本次确认未被接受。' }, actor);
|
|
168
|
+
return 'failed';
|
|
169
|
+
}
|
|
170
|
+
if (mode === 'unknown') {
|
|
171
|
+
update({ ...current, confirmation: 'unknown', pendingConfirmation: { ...current.pendingConfirmation, acceptedAt: new Date().toISOString(), acceptedActor: actor }, error: '' }, actor);
|
|
172
|
+
return 'unknown';
|
|
173
|
+
}
|
|
174
|
+
update(confirmVersion(current, expected, new Date().toISOString(), actor), actor);
|
|
175
|
+
return 'confirmed';
|
|
176
|
+
}
|
|
177
|
+
function reconcile(id) {
|
|
178
|
+
const i = get(id);
|
|
179
|
+
if (!i)
|
|
180
|
+
throw Error('记录不存在或没有查看权限。');
|
|
181
|
+
session.require('intent:view', i.tenantId);
|
|
182
|
+
const pending = i.pendingConfirmation;
|
|
183
|
+
if (i.confirmation !== 'unknown' || !pending)
|
|
184
|
+
throw new Error('当前没有待核实的确认请求。');
|
|
185
|
+
if (!pending.acceptedAt || !pending.acceptedActor) {
|
|
186
|
+
update({ ...i, confirmation: 'failed', pendingConfirmation: undefined, error: '本地模拟服务尚未接受原请求,请核对后重新提交。' });
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const original = pending.acceptedActor;
|
|
190
|
+
update(confirmVersion(i, pending.version, pending.acceptedAt, original), original);
|
|
191
|
+
}
|
|
192
|
+
function close(id, reason, expected) { const i = requireRecord(id, 'intent:close', expected); session.writeCheck(); update(closeIntent(i, reason, new Date().toISOString(), session.actor)); }
|
|
193
|
+
function replan(id, keys, note, expected) { const i = requireRecord(id, 'intent:edit', expected); session.writeCheck(); update(replanIntent(i, keys, note, new Date().toISOString())); }
|
|
194
|
+
function deletionCheck(i) { assertIntentAccess(i, session.actor, 'intent:delete'); assertIntentDelete(i); }
|
|
195
|
+
function checkRemove(target) {
|
|
196
|
+
session.require('intent:delete');
|
|
197
|
+
assertBatch(items.value, [target], deletionCheck);
|
|
198
|
+
}
|
|
199
|
+
function removeMany(targets) {
|
|
200
|
+
records.value = freshRecords();
|
|
201
|
+
session.require('intent:delete');
|
|
202
|
+
const selected = assertBatch(items.value, targets, deletionCheck);
|
|
203
|
+
session.writeCheck();
|
|
204
|
+
const ids = new Set(selected.map(i => i.id)), at = new Date().toISOString(), batchId = crypto.randomUUID();
|
|
205
|
+
commit(records.value.map(i => ids.has(i.id) ? { ...i, isDeleted: true, recordVersion: i.recordVersion + 1,
|
|
206
|
+
updatedAt: at, updatedBy: session.actor.name,
|
|
207
|
+
events: [...i.events, { label: '逻辑删除意图;批次 ' + batchId + '(' + selected.length + ' 项)', at, actor: session.actor.name }],
|
|
208
|
+
} : i));
|
|
209
|
+
}
|
|
210
|
+
function reset() { epoch++; resetTick.value++; commit(seedIntents()); scene.value = 'normal'; resultMode.value = 'success'; }
|
|
211
|
+
return { operationRecords: freshRecords, operationCommit, items, notice, scene, resultMode, resetTick, canEdit, canConfirm, canClose, get, create, start, answer, selectQuestion, generate, revise, setDecisions, confirm, reconcile, close, replan, checkRemove, removeMany, reset };
|
|
212
|
+
});
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<!-- 来源:src/models/AuditPanel.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
|
|
2
|
+
<section class="panel audit-panel"><h2>模型操作记录</h2><template data-component="Alert" class="form-intro" type="info" show-icon="" title="本地演示记录,不构成正式审计或审批证据。"></template><template data-component="ProTable" data-bind-table="(table)" data-bind-table-container="(false)" data-bind-control="(false)" row-key="id" data-bind-scroll="({ x: 1020 })" data-bind-search="(async () => { })" data-bind-pagination="({ showTotal: (t) => `共 ${t} 条`, showSizeChanger: true, pageSizeOptions: [10, 20, 50, 100], hideOnSinglePage: false })"></template></section>
|
package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { computed, watch } from '../../runtime/state.js';
|
|
2
|
+
import { Alert } from "../../runtime/widgets.js";
|
|
3
|
+
import { ProTable, useTable } from "../../runtime/widgets.js";
|
|
4
|
+
import { useModels } from "./store.js";
|
|
5
|
+
import { createComponent } from '../../runtime/dom.js';
|
|
6
|
+
export default createComponent({ name: 'AuditPanel', propKeys: [], template: new URL('./AuditPanel.html', import.meta.url).href, setup(__props, __emit) {
|
|
7
|
+
const store = useModels();
|
|
8
|
+
const table = useTable({ pageParam: { current: 1, pageSize: 10, total: store.audit.length }, columns: [
|
|
9
|
+
{ title: '操作时间', dataIndex: 'time', width: 166 },
|
|
10
|
+
{ title: '操作者', dataIndex: 'actor', width: 170 },
|
|
11
|
+
{ title: '模型', dataIndex: 'model', width: 164 },
|
|
12
|
+
{ title: '操作', dataIndex: 'action', width: 110 },
|
|
13
|
+
{ title: '变更说明', dataIndex: 'detail', width: 410 },
|
|
14
|
+
] });
|
|
15
|
+
const records = computed(() => store.audit.slice(((table.pageParam.current || 1) - 1) * (table.pageParam.pageSize || 10), (table.pageParam.current || 1) * (table.pageParam.pageSize || 10)));
|
|
16
|
+
watch(records, () => { table.dataSource.value = records.value; table.setPageParam({ total: store.audit.length }); }, { immediate: true });
|
|
17
|
+
return { computed, watch, Alert, ProTable, useTable, useModels, store, table, records };
|
|
18
|
+
} });
|