@givolt/i3-composer-agent 2.2.3 → 2.3.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-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 +15 -5
- package/agents/code-reviewer.md +1 -1
- package/agents/test-engineer.md +1 -1
- package/bin/native-layout.cjs +2 -0
- package/commands/i3-prototype.toml +23 -0
- package/commands/i3-review.toml +1 -1
- package/commands/i3-ship.toml +1 -1
- package/docs/agents.md +2 -2
- package/docs/codebuddy-setup.md +2 -2
- package/docs/codex-setup.md +1 -1
- 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 +2 -2
- package/evals/README.md +2 -0
- 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 +31 -1
- package/plugin.json +1 -1
- package/references/performance-checklist.md +4 -2
- package/scripts/design-provider-discovery-test.js +190 -0
- package/scripts/design-provider-test.js +68 -0
- package/scripts/enterprise-template-test.js +179 -0
- package/scripts/lib/skill-lint-test.js +113 -1
- package/scripts/lib/skill-lint.js +62 -8
- package/scripts/run-evals-test.js +207 -0
- package/scripts/run-evals.js +47 -9
- package/scripts/template-adapter-test.js +155 -0
- package/scripts/ui-prototype-test.js +114 -0
- package/scripts/validate-commands-test.js +30 -0
- package/scripts/validate-commands.js +6 -16
- package/scripts/validate-reference-links-test.js +18 -0
- package/scripts/validate-reference-links.js +4 -2
- package/scripts/validate-skills.js +26 -3
- 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 +148 -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 +23 -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 +48 -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/design-provider-discovery.cjs +128 -0
- package/skills/i3-ui-prototype/scripts/enterprise-template.cjs +97 -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 +259 -0
- package/skills/i3-ui-prototype/scripts/template-adapters.cjs +89 -0
- package/skills/i3-using-agent-skills/SKILL.md +5 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# 产物与验收
|
|
2
|
+
|
|
3
|
+
<!-- i3:zh-guide:start -->
|
|
4
|
+
## 中文使用说明
|
|
5
|
+
|
|
6
|
+
按下文完整工程步骤、检查项与验证条件执行。根据任务选择适用步骤,保留证据、风险和退出条件;正文示例中的英文标签在面向用户输出时译为中文。
|
|
7
|
+
|
|
8
|
+
默认使用简体中文解释、追问及生成报告;用户明确要求其他语言时可切换。原方法正文、引用、阈值和审批条件完整保留。代码标识、路径、命令、工具参数、JSON 键/枚举与原文引用保持原样。
|
|
9
|
+
<!-- i3:zh-guide:end -->
|
|
10
|
+
|
|
11
|
+
项目 `.i3-ui-prototypes.json` 的 prototypes 列出 id、相对目录和 appliesTo。初始 appliesTo 为空,按实际业务补充模块范围;工程任务选择适用原型,不能把所有基线强加到无关模块。
|
|
12
|
+
|
|
13
|
+
原型目录含 prototype.json、requirements-map.json、design-system/MASTER.md 与 tokens.json、app、mocks、qa、reviews、baselines、baseline.json、HANDOFF.md。企业后台生成 EASEL 完整参考示例,兼容旧模板生成通用演示;用于新业务时代理必须适配实际业务。企业后台还保留 design-system/source.json、runtime 与 purpose,记录来源、实例数据隔离及用途。模板来源与许可在技能资源中保留。生成实例 app/qa 是来源历史记录;本轮验收证据必须写入根目录 qa,不能复用历史通过状态。
|
|
14
|
+
|
|
15
|
+
新增实例的 template.adapter 记录清单选定的运行层;模板指纹覆盖 manifest、preset、声明资源及 adapter 实现。旧实例不补写缺失字段或改写已有模板摘要,其原 contentManifest 身份与摘要保持兼容。运行身份、必需资源和保护路径由明确的运行层合同决定,未知运行层拒绝,不回退兼容演示;详见 [template-adapters.md](template-adapters.md)。
|
|
16
|
+
|
|
17
|
+
需求映射 schemaVersion=1,每个 requirement 具有唯一 id、pages、fields、actions、roles、states、scenarios 和 confirmation。scenarios 是浏览器检查的场景 ID;涉及权限与状态变化的需求应补充可见范围、转移条件及校验。未确认规则写入 openQuestions。
|
|
18
|
+
|
|
19
|
+
浏览器记录 qa/browser.json:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"schemaVersion": 1,
|
|
24
|
+
"revision": "r001",
|
|
25
|
+
"digest": "当前 manifest 命令返回的 SHA-256",
|
|
26
|
+
"status": "passed",
|
|
27
|
+
"source": "实际浏览器工具与运行记录位置",
|
|
28
|
+
"screenshots": ["qa/screenshots/desktop.png", "qa/screenshots/narrow.png"],
|
|
29
|
+
"journeys": [{"id": "需求映射中的场景ID", "status": "passed"}],
|
|
30
|
+
"consoleErrors": [],
|
|
31
|
+
"viewports": [1440, 768]
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
每个必要场景都必须实际执行。记录无法执行或失败的项,不以填写 JSON 替代运行。结构验收检查记录一致性与引用存在;其结果不能独立证明浏览器发生过执行。截图固定数据与视口,键盘和焦点采用实际交互验证。
|
|
36
|
+
|
|
37
|
+
确认文件含当前 revision 和 digest,以及 reviewer、statement、source 三个非空字段。source 指向可信的人类确认记录;statement 保留用户认可意思。测试夹具的模拟确认仅用于验证保护逻辑。
|
|
38
|
+
|
|
39
|
+
快照保存运行文件、需求、设计契约和专业建议记录,manifest.json 记录摘要,review.json 记录确认。baseline.json 引用当前已确认快照。新候选不覆盖旧快照;快照损坏或失去匹配时报告 corrupt-baseline。
|
|
40
|
+
|
|
41
|
+
check-prototype --enforce-baseline 对设计契约、token、需求映射或模板/模式改变返回失败,供项目选择接入门禁。它不会自动分析不同框架的生产组件;真实工程仍需组件映射、受影响页面的浏览器与业务回归。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 企业管理后台复用
|
|
2
|
+
|
|
3
|
+
<!-- i3:zh-guide:start -->
|
|
4
|
+
## 中文使用说明
|
|
5
|
+
|
|
6
|
+
按下文完整工程步骤、检查项与验证条件执行。根据任务选择适用步骤,保留证据、风险和退出条件;正文示例中的英文标签在面向用户输出时译为中文。
|
|
7
|
+
|
|
8
|
+
默认使用简体中文解释、追问及生成报告;用户明确要求其他语言时可切换。原方法正文、引用、阈值和审批条件完整保留。代码标识、路径、命令、工具参数、JSON 键/枚举与原文引用保持原样。
|
|
9
|
+
<!-- i3:zh-guide:end -->
|
|
10
|
+
|
|
11
|
+
企业后台模板统一使用 i3-Composer 品牌,来源是工作区的 EASEL v0.14 HTML 审查成果。模板完整保留 326 个来源文件:运行页面、控件、样式、图标、规则测试、来源、许可及历史验收材料。原 history/easel-history 目录不修改。
|
|
12
|
+
|
|
13
|
+
## 完整示例与新业务
|
|
14
|
+
|
|
15
|
+
- 用户要审查原来的整套后台时,使用 enterprise-admin 和 purpose=template-review,保留示例菜单与业务,便于和原版对照。
|
|
16
|
+
- 用户要根据新业务做原型时,使用默认 business-prototype,先明确模块、字段、角色、状态和需求映射,修改原型副本中的相关文件;未适配状态 needs-adaptation 不能通过业务验收。
|
|
17
|
+
- 审查完整示例不代表批准其全部示例业务,也不代表其他项目已完成业务适配。
|
|
18
|
+
- 模板根 origin.json 保存全部来源文件的 SHA-256。reference/ 是完整来源快照,品牌转换不改写其中内容。预览响应与新生成实例共用品牌适配,页面标题、导航、示例项目及授权说明统一显示 i3-Composer;生成副本同时接入启动、设计 token 和本地数据命名空间。
|
|
19
|
+
- 资源库中的 5 个 Markdown 文件按技能命名规范存放为小写名称,原名到存放路径记录在 origin.storagePaths;内容不变,生成实例时还原原文件名,原文链接继续有效。既有验证器保持原有规则。
|
|
20
|
+
- design-system/source.json 记录本实例的局部接入及用途。app/qa 保存的是来源历史记录,当前验收使用原型根 qa/。
|
|
21
|
+
|
|
22
|
+
## 页面与组件
|
|
23
|
+
|
|
24
|
+
完整示例包括工作台、模型、Agent、意图、规格、流程、任务、PBC、权限、评审、发布、运行等原有页面,以及原来的占位范围。它仍是本地模拟;不接入真实模型、SSO、GitLab、Dapr、CI、监控或生产服务。
|
|
25
|
+
|
|
26
|
+
表格、列设置、批量操作、抽屉、表单校验、详情、向导、画布、版本与证据链均沿用已有交互。EASEL 语义变量和 Antdv 变量共同保留,不能只调整一组颜色。原生 HTML 运行层无需安装 Vue/React 依赖;进入真实工程时另做组件和接口映射。
|
|
27
|
+
|
|
28
|
+
## 自适应与验收
|
|
29
|
+
|
|
30
|
+
检查 320、390、768、1024、1440px,覆盖工作台、管理列表、抽屉表单、向导和画布。导航在窄屏切换为菜单,内容区域重排,宽表格允许局部滚动,整页不能横向溢出。键盘检查菜单、Escape、返回、取消与焦点恢复;减少动态效果设置保持原规则。
|
|
31
|
+
|
|
32
|
+
UI/UX Pro Max 使用专项 UX 查询校核这些规则,匹配的建议写入 qa/design-advice.json 并实际验证。专业建议不重新定义原版配色、字号、导航或控件尺度。
|
|
33
|
+
|
|
34
|
+
AI 工作台、数字孪生大屏、移动端应用在目录中为 planned。不得将三类请求悄悄生成成企业后台。旧三套通用模板仅作兼容和历史原型迭代。
|
|
35
|
+
|
|
36
|
+
## 完整内容与滚动
|
|
37
|
+
|
|
38
|
+
原始 EASEL 文件不删减。实例和预览入口使用独立 usability.css 解除导出样式残留的页面滚动锁,恢复完整宽度,并显示表格、标签栏的横向滚动条。弹窗运行时的滚动锁仍有效。验收应实际滚到页面底部、表格最右操作列和最后一个标签,不能仅检查整页 scrollWidth。
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# UI/UX Pro Max 接入
|
|
2
|
+
|
|
3
|
+
<!-- i3:zh-guide:start -->
|
|
4
|
+
## 中文使用说明
|
|
5
|
+
|
|
6
|
+
按下文完整工程步骤、检查项与验证条件执行。根据任务选择适用步骤,保留证据、风险和退出条件;正文示例中的英文标签在面向用户输出时译为中文。
|
|
7
|
+
|
|
8
|
+
默认使用简体中文解释、追问及生成报告;用户明确要求其他语言时可切换。原方法正文、引用、阈值和审批条件完整保留。代码标识、路径、命令、工具参数、JSON 键/枚举与原文引用保持原样。
|
|
9
|
+
<!-- i3:zh-guide:end -->
|
|
10
|
+
|
|
11
|
+
专业增强模式对应 professional,模板模式对应 template。依赖在用户实际执行的宿主中检测,安装范围互相独立:项目级 i3-ui-prototype 可以直接使用同一宿主全局安装的 UI/UX Pro Max,不要求项目再安装一份。
|
|
12
|
+
|
|
13
|
+
优先将宿主暴露的实际技能根传给 --provider;明确指定路径时只检查该副本。自动检测传 --host 与 --project,按项目 Skill、全局 Skill、当前宿主已安装且启用的插件顺序检查,不可用副本不会遮蔽后续可用副本。Codex 通过原生 `codex plugin list --marketplace ui-ux-pro-max-skill --json` 核对启用状态与确切安装版本;Claude Code、WorkBuddy 和 CodeBuddy 通过各自 installed_plugins.json 与 enabledPlugins 核对。插件入口按 manifest 定位,不遍历缓存选最高版本,也不读取另一宿主的安装。Cursor、Gemini 保留普通 Skill 目录检测;未覆盖的插件安装方式使用宿主提供的 --provider 路径。
|
|
14
|
+
|
|
15
|
+
检测输出包含 source、searched、attempts 与 diagnostics。未传宿主/路径返回 needs-context;插件发现失败或安装记录冲突时补充实际路径;停用返回 disabled;文件缺失或真实查询失败返回 unusable。上述情况分别定位、启用或修复,不要求重复安装。自动发现所需 CLI 不可用时,不将其当作“未安装”的证据。
|
|
16
|
+
|
|
17
|
+
检测 SKILL.md、Python 查询模块与数据库,执行只读 UX 探测。安装版本/资源摘要和当前查询记录保存为来源;探测成功只说明可执行,不意味着业务建议已经采用。
|
|
18
|
+
|
|
19
|
+
确认当前宿主未安装时提示安装并验证;也可选择模板模式继续,或先整理需求和比较模板。默认不降级。用户已经选择安装或模板模式时沿用选择,不重复请求相同许可。
|
|
20
|
+
|
|
21
|
+
按维护方 [官方安装说明](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill#installation) 选择当前宿主适用入口。对于未实测的宿主只说明已验证方法和限制,不猜测安装路径。选择安装后应安装完整技能,包括 Python 脚本、数据库与必要引用,重新检测可用性。不能只复制 SKILL.md。不自动安装 Python 或其他系统运行环境。
|
|
22
|
+
|
|
23
|
+
使用已安装专业技能的指令和查询机制,向数据库传递抽象设计问题,不传私有业务数据。整体设计建议用 --design-system;专项交互用 --domain;实际技术栈支持时另查 --stack。HTML 模板不等于 html-tailwind,不为了查询参数而更换原型技术。
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
node <skill-root>/scripts/check-design-provider.cjs --host codex --project <project-root>
|
|
27
|
+
# 宿主提供实际路径时:
|
|
28
|
+
node <skill-root>/scripts/check-design-provider.cjs --provider <uiux-root> --query "error summary validation" --domain ux
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
对产品类型、页面结构和结果身份核对。返回失配时按专业技能契约重试一次,仍失配就拒绝;专业建议未匹配不等于可以补造业务流程。专业 provider 无可采用结果时记录 no-match 与采用的模板/工程依据,必要时由用户决定是否切换模式。
|
|
32
|
+
|
|
33
|
+
qa/design-advice.json 采用以下记录结构:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"schemaVersion": 1,
|
|
38
|
+
"mode": "professional",
|
|
39
|
+
"provider": {"version": "实际版本", "digest": "检测输出的摘要"},
|
|
40
|
+
"records": [
|
|
41
|
+
{"query": "error summary validation", "resultIdentity": "Focusable Error Summary", "decision": "adopted", "rationale": "适用当前申请表单;保持模板布局", "verification": "提交失败聚焦摘要且可跳到错误字段", "pages": ["#/new"], "result": {"保存实际相关返回内容": true}}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
decision 可使用 adopted、adjusted、rejected;采用或调整的建议应写入设计契约和验收。初始化为 pending;没有记录实际查询和采用证据时不能声称 used。原始 --persist 结果只可写独立建议候选位置,不覆盖已认可的 MASTER 或使用未授权 --force。
|
|
47
|
+
|
|
48
|
+
渲染后的专业复核围绕实际发现的问题查询,再由浏览器检查修复。专业数据库提供建议,不自动证明可用性、无障碍认证或用户认可。
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# 模板目录与运行层接入
|
|
2
|
+
|
|
3
|
+
<!-- i3:zh-guide:start -->
|
|
4
|
+
## 中文使用说明
|
|
5
|
+
|
|
6
|
+
按下文完整工程步骤、检查项与验证条件执行。根据任务选择适用步骤,保留证据、风险和退出条件;正文示例中的英文标签在面向用户输出时译为中文。
|
|
7
|
+
|
|
8
|
+
默认使用简体中文解释、追问及生成报告;用户明确要求其他语言时可切换。原方法正文、引用、阈值和审批条件完整保留。代码标识、路径、命令、工具参数、JSON 键/枚举与原文引用保持原样。
|
|
9
|
+
<!-- i3:zh-guide:end -->
|
|
10
|
+
|
|
11
|
+
## 当前资源
|
|
12
|
+
|
|
13
|
+
`assets/templates/catalog.json` 负责类型、可用状态、版本和预览入口,并用 `defaultTemplate` 指定默认类型。可生成条目必须指向自己目录下的 `manifest.json`;planned 条目不要求资源目录,不能初始化,也不会回退为其他模板。
|
|
14
|
+
|
|
15
|
+
当前企业后台使用 `easel-html`:完整 EASEL `reference/`、`origin.json` 来源清单、设计 token 和独立滚动适配。原始 326 个文件保持原样。AI 工作台、数字孪生大屏和移动端仅为 planned 目录条目,没有假模板包。旧三套兼容模板明确使用 `legacy-html`,共享 `common/`,各自保留 preset;不能把这些兼容演示当成新三类已经实现。
|
|
16
|
+
|
|
17
|
+
模板选择页按 catalog 展示可用类型并切换预览,只负责查看资源;点击卡片不会创建业务原型、采用专业建议或确认基线。实际生成仍走技能操作并按业务适配,浏览器验证和用户认可分别保存。
|
|
18
|
+
|
|
19
|
+
## manifest
|
|
20
|
+
|
|
21
|
+
可生成模板的最小清单示例:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"schemaVersion": 1,
|
|
26
|
+
"adapter": "easel-html",
|
|
27
|
+
"preset": "enterprise-admin/preset.json",
|
|
28
|
+
"resources": { "root": "enterprise-admin" },
|
|
29
|
+
"defaultTitle": "企业管理后台 · EASEL 完整示例"
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
资源路径相对于 `assets/templates/`,必须存在,不能绝对寻址、包含 `..` 或通过符号链接跳转。manifest 只能选择代码中明确登记的内置 adapter;它不是可以执行任意脚本的插件描述。未知 adapter、缺清单或不安全路径在创建实例前拒绝。摘要包含所选 catalog 条目、清单、资源、登记器、adapter 版本及其声明的实现文件;其他模板条目不会改变当前模板摘要。仅修改 preset 不足以表示一个独立运行层。
|
|
34
|
+
|
|
35
|
+
## adapter 合同
|
|
36
|
+
|
|
37
|
+
`scripts/template-adapters.cjs` 集中读取与校验 catalog/manifest,计算摘要并选择运行层。当前仅登记 `adapters/easel-html.cjs`、`adapters/legacy-html.cjs`,不按模板 ID 在公共生成器中分支,也不隐式复制 common。
|
|
38
|
+
|
|
39
|
+
每个 adapter 提供:
|
|
40
|
+
|
|
41
|
+
- `version` 和 `implementationFiles`:运行层版本、应计入摘要的实现及辅助文件;新增内置运行层应完整登记实现依赖。
|
|
42
|
+
- `fingerprintInputs(context)`:实际模板资源路径。上下文的 `resource(name)` 只读取 manifest 声明且通过安全校验的位置。
|
|
43
|
+
- `initialize(directory, options, context)`:写入隔离的实例暂存目录,返回 `{metadata, handoff}`;公共层再统一写配置、token、QA 和项目登记。
|
|
44
|
+
- `validateRuntime(metadata, options)`:运行身份、用途及适用业务验收条件。
|
|
45
|
+
- `runtime`:`kind`、`requiredFiles`、`identityFields`、`excludedBrowserPrefixes`、`protectedFiles`、`protectedDirectories`。它们定义运行检查、摘要身份和基线保护,不代替实际浏览器执行。
|
|
46
|
+
|
|
47
|
+
共同设计契约、token、入口和需求映射始终受保护,运行层可增加自己的保护路径。运行身份变化也作为契约变化报告。EASEL 的历史 tools/tests/qa 不作为浏览器模块扫描;当前验收仍读取实例根 qa。
|
|
48
|
+
|
|
49
|
+
`createTemplateRegistry({assetRoot, adapters})` 支持受信任的程序内集成与隔离测试;CLI 使用随包登记器,不接受从模板清单加载任意 adapter 代码。旧实例没有 `template.adapter` 时按已登记模板识别;缺新增 runtime 字段的旧 legacy 身份不补写字段,旧 EASEL 的 purpose/business/runtime 顺序保持,原有内容摘要与快照继续可读。未知模板不靠猜测识别为 common。
|
|
50
|
+
|
|
51
|
+
## 扩展步骤
|
|
52
|
+
|
|
53
|
+
1. 准备完整可运行资源、preset 与设计契约;有外部来源时保留来源清单、许可和固定内容。
|
|
54
|
+
2. 增加 manifest,声明真实 adapter 与资源;独立运行形态实现并登记 adapter,不能只改 available 后复用错误演示。
|
|
55
|
+
3. catalog 登记版本、manifest 和本地预览。planned 保持不可生成,原有实例不自动切换模板或升级摘要。
|
|
56
|
+
4. 验证独立运行层无 common 也能生成,资源/实现变化改变指纹,非法清单写入前拒绝,运行检查与基线保护覆盖,旧实例摘要兼容;再做真实浏览器与业务场景验收。
|
|
57
|
+
5. 在源码维护流程登记新增分发文件,完成品牌生成、打包/安装完整性检查。此登记不代表用户认可模板或授权发布。
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 操作与状态
|
|
2
|
+
|
|
3
|
+
<!-- i3:zh-guide:start -->
|
|
4
|
+
## 中文使用说明
|
|
5
|
+
|
|
6
|
+
按下文完整工程步骤、检查项与验证条件执行。根据任务选择适用步骤,保留证据、风险和退出条件;正文示例中的英文标签在面向用户输出时译为中文。
|
|
7
|
+
|
|
8
|
+
默认使用简体中文解释、追问及生成报告;用户明确要求其他语言时可切换。原方法正文、引用、阈值和审批条件完整保留。代码标识、路径、命令、工具参数、JSON 键/枚举与原文引用保持原样。
|
|
9
|
+
<!-- i3:zh-guide:end -->
|
|
10
|
+
|
|
11
|
+
create 读取业务上下文、检测默认专业增强模式、展示四类模板的可用状态并记录选择,然后初始化和适配原型。企业后台当前可用;AI 工作台、数字孪生大屏和移动端尚待建设,不能自动替换为其他模板。兼容旧版三套模板仅供已有项目继续使用。脚本返回 needs-design-provider 时不得冒充创建成功;允许先完成需求和模板比较,等待安装或用户选择 template。已有原型的 expertMode 作为迭代默认值。
|
|
12
|
+
|
|
13
|
+
revise 必须指定未使用的新版本;改变全局导航、token、组件行为或业务状态时解释影响并形成新的评审候选。inspect 可写检查报告但不修改页面或冻结基线。confirm-baseline 必须有用户对具体内容的明确认可和完整必需证据。
|
|
14
|
+
|
|
15
|
+
verification 使用 not-run、partial、passed、failed、blocked;review 使用 pending-review、changes-requested、approved。expert 使用 pending、used、skipped、missing、unusable、no-match。它们分别表示检查、用户认可及专业能力使用;不相互推断。
|
|
16
|
+
|
|
17
|
+
原型可从草拟需求开始。需求确认、原型认可、正式规格批准和生产授权各自保存。返回 scope、revision、mode、verification、review、openQuestions 和下一项必要动作,避免笼统地报告全部完成。
|
|
18
|
+
|
|
19
|
+
企业后台默认 purpose=business-prototype,完整参考副本的 business.status=needs-adaptation;必须完成实际业务适配才能验收。用户明确评审 EASEL 模板本身时,使用 purpose=template-review,并将 reference-demo 范围写进交接。模板认可不等于任何新业务的需求或原型认可。
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const assert = require('node:assert/strict');
|
|
3
|
+
const enterprise = require('../enterprise-template.cjs');
|
|
4
|
+
module.exports = {
|
|
5
|
+
version: '1',
|
|
6
|
+
implementationFiles: [__filename, require.resolve('../enterprise-template.cjs')],
|
|
7
|
+
runtime: {
|
|
8
|
+
kind: 'easel-html', identityFields: ['purpose', 'business', 'runtime'],
|
|
9
|
+
requiredFiles: ['app/app.js', 'app/enterprise-bootstrap.mjs', 'app/routes.json', 'app/runtime/dom.js', 'app/styles/tokens.css', 'design-system/source.json'],
|
|
10
|
+
excludedBrowserPrefixes: ['app/tools/', 'app/tests/', 'app/qa/'],
|
|
11
|
+
protectedFiles: ['app/tokens.css', 'app/styles.css', 'app/index.html', 'app/domain.mjs', 'requirements-map.json', 'app/app.js', 'app/routes.json', 'app/config.json', 'app/enterprise-bootstrap.mjs', 'app/usability.css'],
|
|
12
|
+
protectedDirectories: ['design-system/', 'app/styles/', 'app/runtime/', 'app/src/'],
|
|
13
|
+
},
|
|
14
|
+
fingerprintInputs(context) {
|
|
15
|
+
enterprise.verifyReference(context.resource('root'));
|
|
16
|
+
return [context.resources.root];
|
|
17
|
+
},
|
|
18
|
+
initialize(directory, options, context) {
|
|
19
|
+
const purpose = options.purpose || 'business-prototype';
|
|
20
|
+
const runtime = enterprise.initialize(directory, { ...options, purpose, templateRoot: context.resource('root') });
|
|
21
|
+
return {
|
|
22
|
+
metadata: { purpose, runtime, business: { status: purpose === 'template-review' ? 'reference-demo' : 'needs-adaptation', source: 'i3-Composer 示例业务' } },
|
|
23
|
+
handoff: `用途:${purpose}。业务适配:${purpose === 'template-review' ? 'reference-demo' : 'needs-adaptation'}。完整保留 i3-Composer 示例,不能当作其他业务已完成;app/qa 为历史来源证据,当前验收读取根 qa/。\n\n`,
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
validateRuntime(metadata, options = {}) {
|
|
27
|
+
assert.ok(metadata.runtime?.kind === 'easel-html' && ['template-review', 'business-prototype'].includes(metadata.purpose), 'Invalid enterprise runtime contract');
|
|
28
|
+
if (options.acceptance && metadata.purpose === 'business-prototype') assert.equal(metadata.business?.status, 'adapted', 'Enterprise demo needs business adaptation / 需先完成实际业务适配');
|
|
29
|
+
},
|
|
30
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const fs = require('node:fs');
|
|
3
|
+
const path = require('node:path');
|
|
4
|
+
const assert = require('node:assert/strict');
|
|
5
|
+
module.exports = {
|
|
6
|
+
version: '1',
|
|
7
|
+
implementationFiles: [__filename],
|
|
8
|
+
runtime: {
|
|
9
|
+
kind: 'legacy-html', identityFields: ['runtime'],
|
|
10
|
+
requiredFiles: ['app/app.mjs', 'app/domain.mjs', 'app/styles.css', 'mocks/applications.json'],
|
|
11
|
+
excludedBrowserPrefixes: [],
|
|
12
|
+
protectedFiles: ['app/tokens.css', 'app/styles.css', 'app/index.html', 'app/domain.mjs', 'requirements-map.json'],
|
|
13
|
+
protectedDirectories: ['design-system/'],
|
|
14
|
+
},
|
|
15
|
+
fingerprintInputs: ({ resources }) => [resources.common],
|
|
16
|
+
initialize(directory, options, context) {
|
|
17
|
+
const common = context.resource('common');
|
|
18
|
+
for (const folder of ['app', 'mocks', 'design-system']) fs.cpSync(path.join(common, folder), path.join(directory, folder), { recursive: true });
|
|
19
|
+
fs.renameSync(path.join(directory, 'design-system/master.md'), path.join(directory, 'design-system/MASTER.md'));
|
|
20
|
+
fs.copyFileSync(path.join(common, 'requirements-map.json'), path.join(directory, 'requirements-map.json'));
|
|
21
|
+
return { metadata: { runtime: { kind: 'legacy-html', entry: 'app/index.html' } }, handoff: '' };
|
|
22
|
+
},
|
|
23
|
+
validateRuntime(metadata) {
|
|
24
|
+
// Older legacy instances did not store a runtime field. Do not migrate
|
|
25
|
+
// their identity or invalidate already recorded content digests.
|
|
26
|
+
assert.ok(!metadata.runtime || metadata.runtime.kind === 'legacy-html', 'Invalid legacy runtime contract');
|
|
27
|
+
},
|
|
28
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const lib = require('./prototype-lib.cjs');
|
|
3
|
+
try {
|
|
4
|
+
const { options } = lib.parseArgs(process.argv.slice(2));
|
|
5
|
+
const provider = lib.checkDesignProvider(options);
|
|
6
|
+
const result = options.query && provider.availability === 'available' ? { provider, query: options.query, result: lib.queryProvider(provider.root, options.query, options) } : provider;
|
|
7
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
8
|
+
if (provider.availability !== 'available') process.exitCode = 2;
|
|
9
|
+
} catch (error) { process.stderr.write(error.message + '\n'); process.exitCode = 1; }
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const lib = require('./prototype-lib.cjs');
|
|
3
|
+
try {
|
|
4
|
+
const { options, positional } = lib.parseArgs(process.argv.slice(2));
|
|
5
|
+
if (!positional[0]) throw new Error('Usage: node check-prototype.cjs <prototype-directory> [--acceptance] [--enforce-baseline]');
|
|
6
|
+
const result = lib.checkPrototype(positional[0], options);
|
|
7
|
+
result.baseline = lib.compareBaseline(positional[0]);
|
|
8
|
+
if (result.baseline.status === 'corrupt-baseline' || (options.enforceBaseline && result.baseline.protectedChanges.length)) {
|
|
9
|
+
result.status = 'failed';
|
|
10
|
+
result.errors = [...(result.errors || []), result.baseline.status === 'corrupt-baseline' ? 'Approved baseline is corrupt' : 'Design constraints changed; review and confirm a new baseline'];
|
|
11
|
+
}
|
|
12
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
13
|
+
if (result.status !== 'passed') process.exitCode = 1;
|
|
14
|
+
} catch (error) { process.stderr.write(error.message + '\n'); process.exitCode = 1; }
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const fs = require('node:fs');
|
|
3
|
+
const path = require('node:path');
|
|
4
|
+
const os = require('node:os');
|
|
5
|
+
const { spawnSync } = require('node:child_process');
|
|
6
|
+
|
|
7
|
+
const PROVIDER = 'ui-ux-pro-max';
|
|
8
|
+
const MARKETPLACE = 'ui-ux-pro-max-skill';
|
|
9
|
+
const json = file => JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
10
|
+
const object = value => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
11
|
+
const safeSegment = value => typeof value === 'string' && /^[a-zA-Z0-9][a-zA-Z0-9._+-]*$/.test(value) && !value.includes('..');
|
|
12
|
+
function ensure(condition, message) { if (!condition) throw new Error(message); }
|
|
13
|
+
function canonical(file) { return fs.existsSync(file) ? fs.realpathSync(file) : path.resolve(file); }
|
|
14
|
+
|
|
15
|
+
function pluginRoot(installation, manifests, fallback) {
|
|
16
|
+
ensure(typeof installation.installPath === 'string' && path.isAbsolute(installation.installPath), 'Plugin installPath must be absolute');
|
|
17
|
+
ensure(safeSegment(installation.version), 'Installed plugin version is invalid');
|
|
18
|
+
const root = installation.installPath;
|
|
19
|
+
const manifestFile = manifests.map(name => path.join(root, name)).find(file => fs.existsSync(file));
|
|
20
|
+
ensure(manifestFile, 'Installed plugin manifest is missing');
|
|
21
|
+
const manifest = json(manifestFile);
|
|
22
|
+
ensure(manifest.name === PROVIDER && manifest.version === installation.version, 'Installed plugin manifest name or version does not match its registration');
|
|
23
|
+
const declared = manifest.skills === undefined ? fallback : manifest.skills;
|
|
24
|
+
ensure(typeof declared === 'string' && declared && !path.isAbsolute(declared) && !declared.includes('\\'), 'Plugin skills declaration is missing or invalid');
|
|
25
|
+
const folder = path.resolve(root, declared), relative = path.relative(path.resolve(root), folder);
|
|
26
|
+
ensure(relative !== '..' && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative), 'Plugin skills declaration escapes its root');
|
|
27
|
+
if (fs.existsSync(folder)) {
|
|
28
|
+
const realRelative = path.relative(canonical(root), canonical(folder));
|
|
29
|
+
ensure(realRelative !== '..' && !realRelative.startsWith(`..${path.sep}`) && !path.isAbsolute(realRelative), 'Plugin skills path escapes its root');
|
|
30
|
+
}
|
|
31
|
+
const skill = path.join(folder, PROVIDER);
|
|
32
|
+
ensure(fs.existsSync(path.join(skill, 'SKILL.md')), 'Installed plugin skill entrypoint is missing');
|
|
33
|
+
const skillRelative = path.relative(canonical(root), canonical(skill));
|
|
34
|
+
ensure(skillRelative !== '..' && !skillRelative.startsWith(`..${path.sep}`) && !path.isAbsolute(skillRelative), 'Plugin skill path escapes its root');
|
|
35
|
+
return skill;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function codexCandidates(config, project, env, add, report) {
|
|
39
|
+
const source = 'codex-plugin';
|
|
40
|
+
try {
|
|
41
|
+
const run = spawnSync('codex', ['plugin', 'list', '--marketplace', MARKETPLACE, '--json'], { cwd: project, env, encoding: 'utf8', timeout: 10000, maxBuffer: 1024 * 1024, shell: false });
|
|
42
|
+
ensure(!run.error && run.status === 0, `Codex plugin discovery failed${run.error?.code ? ` (${run.error.code})` : ''}`);
|
|
43
|
+
const data = JSON.parse(run.stdout);
|
|
44
|
+
ensure(object(data) && Array.isArray(data.installed), 'Codex plugin discovery returned invalid metadata');
|
|
45
|
+
const records = data.installed.filter(record => record?.pluginId === `${PROVIDER}@${MARKETPLACE}`);
|
|
46
|
+
if (!records.length) { report(source, 'missing', 'Current Codex host has no registered UI/UX Pro Max plugin'); return; }
|
|
47
|
+
ensure(records.every(record => record.name === PROVIDER && record.marketplaceName === MARKETPLACE && typeof record.enabled === 'boolean' && typeof record.installed === 'boolean'), 'Codex plugin registration is invalid');
|
|
48
|
+
const active = records.filter(record => record.installed && record.enabled);
|
|
49
|
+
if (!active.length) { report(source, records.some(record => record.installed) ? 'disabled' : 'missing', 'UI/UX Pro Max is not enabled in the current Codex host'); return; }
|
|
50
|
+
if (active.length !== 1) { report(source, 'ambiguous', 'Multiple active Codex UI/UX Pro Max registrations require an explicit provider path'); return; }
|
|
51
|
+
const record = active[0];
|
|
52
|
+
ensure(safeSegment(record.version), 'Codex plugin version is invalid');
|
|
53
|
+
const installPath = path.join(config, 'plugins/cache', MARKETPLACE, PROVIDER, record.version);
|
|
54
|
+
add(pluginRoot({ installPath, version: record.version }, ['.codex-plugin/plugin.json', '.claude-plugin/plugin.json']), source);
|
|
55
|
+
} catch (error) { report(source, 'discovery-error', error.message); }
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function registeredCandidates(host, config, project, add, report) {
|
|
59
|
+
const source = `${host}-plugin`, registryFile = path.join(config, 'plugins/installed_plugins.json'), settingsFile = path.join(config, 'settings.json');
|
|
60
|
+
try {
|
|
61
|
+
if (!fs.existsSync(registryFile)) { report(source, 'missing', 'Optional host plugin installation registry is absent'); return; }
|
|
62
|
+
const registry = json(registryFile);
|
|
63
|
+
ensure(registry.version === 2 && object(registry.plugins), 'Host plugin installation registry has an unsupported or invalid schema');
|
|
64
|
+
const entries = Object.entries(registry.plugins).filter(([id]) => id.startsWith(`${PROVIDER}@`));
|
|
65
|
+
if (!entries.length) { report(source, 'missing', 'Current host has no registered UI/UX Pro Max plugin'); return; }
|
|
66
|
+
ensure(fs.existsSync(settingsFile), 'Registered plugin enablement metadata is missing');
|
|
67
|
+
const settings = json(settingsFile);
|
|
68
|
+
ensure(object(settings) && object(settings.enabledPlugins), 'Host plugin enablement metadata is invalid');
|
|
69
|
+
const active = [];
|
|
70
|
+
let disabled = false;
|
|
71
|
+
for (const [id, records] of entries) {
|
|
72
|
+
ensure(Array.isArray(records), 'Host plugin registration must contain an installation array');
|
|
73
|
+
if (settings.enabledPlugins[id] !== true) { disabled = true; continue; }
|
|
74
|
+
for (const record of records) {
|
|
75
|
+
ensure(object(record), 'Host plugin installation entry is invalid');
|
|
76
|
+
if (record.scope === 'user') active.push(record);
|
|
77
|
+
else if (record.scope === 'project') {
|
|
78
|
+
ensure(typeof record.projectPath === 'string' && path.isAbsolute(record.projectPath), 'Project-scoped plugin requires an absolute projectPath');
|
|
79
|
+
if (canonical(record.projectPath) === canonical(project)) active.push(record);
|
|
80
|
+
} else throw new Error('Host plugin installation scope is unsupported');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (!active.length) { report(source, disabled ? 'disabled' : 'missing', 'No enabled UI/UX Pro Max installation applies to the current project'); return; }
|
|
84
|
+
if (active.length !== 1) { report(source, 'ambiguous', 'Multiple applicable plugin installations require an explicit provider path'); return; }
|
|
85
|
+
const fallback = host === 'workbuddy' || host === 'codebuddy' ? './skills/' : undefined;
|
|
86
|
+
const manifests = host === 'claude' ? ['.claude-plugin/plugin.json'] : ['.codebuddy-plugin/plugin.json', '.claude-plugin/plugin.json'];
|
|
87
|
+
add(pluginRoot(active[0], manifests, fallback), source);
|
|
88
|
+
} catch (error) { report(source, 'discovery-error', error.message); }
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function discoverProviderCandidates(options = {}) {
|
|
92
|
+
const result = { candidates: [], diagnostics: [] }, seen = new Set();
|
|
93
|
+
const report = (source, availability, reason) => result.diagnostics.push({ source, availability, reason });
|
|
94
|
+
const add = (root, source) => {
|
|
95
|
+
ensure(typeof root === 'string' && root, 'Provider root must be a nonempty path');
|
|
96
|
+
root = path.resolve(root);
|
|
97
|
+
if (!seen.has(root)) { seen.add(root); result.candidates.push({ root, source }); }
|
|
98
|
+
};
|
|
99
|
+
if (options.provider !== undefined) {
|
|
100
|
+
try { add(options.provider, 'explicit'); } catch (error) { report('explicit', 'discovery-error', error.message); }
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
if (options.providerRoots !== undefined) {
|
|
104
|
+
try {
|
|
105
|
+
ensure(Array.isArray(options.providerRoots), 'Host-exposed providerRoots must be an array');
|
|
106
|
+
for (const root of options.providerRoots) add(root, 'host-exposed');
|
|
107
|
+
} catch (error) { report('host-exposed', 'discovery-error', error.message); }
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
if (options.discover === false) return { ...result, contextRequired: true };
|
|
111
|
+
const host = options.host === 'claude-code' ? 'claude' : options.host;
|
|
112
|
+
if (!['codex', 'claude', 'workbuddy', 'codebuddy', 'gemini', 'cursor'].includes(host)) return { ...result, contextRequired: true };
|
|
113
|
+
const home = options.home || os.homedir(), env = options.env === undefined ? process.env : options.env, project = path.resolve(options.project || '.');
|
|
114
|
+
const configName = host === 'claude' ? 'CLAUDE_CONFIG_DIR' : `${host.toUpperCase()}_${host === 'codex' ? 'HOME' : 'CONFIG_DIR'}`;
|
|
115
|
+
const config = path.resolve(env[configName] || path.join(home, `.${host}`));
|
|
116
|
+
const projectFolder = host === 'codex' ? '.agents' : host === 'workbuddy' ? '.codebuddy' : `.${host}`;
|
|
117
|
+
const locations = [
|
|
118
|
+
[path.join(project, projectFolder, 'skills', PROVIDER), 'project-skill'],
|
|
119
|
+
...(host === 'codex' ? [[path.join(home, '.agents/skills', PROVIDER), 'global-skill']] : []),
|
|
120
|
+
[path.join(config, 'skills', PROVIDER), 'global-skill'],
|
|
121
|
+
];
|
|
122
|
+
for (const [root, source] of locations) if (fs.existsSync(path.join(root, 'SKILL.md'))) add(root, source);
|
|
123
|
+
if (host === 'codex') codexCandidates(config, project, env, add, report);
|
|
124
|
+
else if (['claude', 'workbuddy', 'codebuddy'].includes(host)) registeredCandidates(host, config, project, add, report);
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
module.exports = { discoverProviderCandidates };
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const fs = require('node:fs');
|
|
3
|
+
const path = require('node:path');
|
|
4
|
+
const crypto = require('node:crypto');
|
|
5
|
+
const assert = require('node:assert/strict');
|
|
6
|
+
const assetRoot = path.resolve(__dirname, '../assets/templates/enterprise-admin');
|
|
7
|
+
const hash = bytes => crypto.createHash('sha256').update(bytes).digest('hex');
|
|
8
|
+
function inventory(root, prefix = '') {
|
|
9
|
+
return fs.readdirSync(path.join(root, prefix), { withFileTypes: true }).flatMap(entry => {
|
|
10
|
+
const file = prefix ? prefix + '/' + entry.name : entry.name;
|
|
11
|
+
assert.ok(!entry.isSymbolicLink(), 'Refusing reference symlink: ' + file);
|
|
12
|
+
return entry.isDirectory() ? inventory(root, file) : [file];
|
|
13
|
+
}).sort();
|
|
14
|
+
}
|
|
15
|
+
function verifyReference(root = assetRoot) {
|
|
16
|
+
const origin = JSON.parse(fs.readFileSync(path.join(root, 'origin.json'), 'utf8'));
|
|
17
|
+
assert.equal(origin.schemaVersion, 1, 'Invalid enterprise source record');
|
|
18
|
+
const reference = path.join(root, 'reference');
|
|
19
|
+
const storedPaths = Object.keys(origin.files).map(file => origin.storagePaths?.[file] || file);
|
|
20
|
+
assert.equal(new Set(storedPaths).size, storedPaths.length, 'Duplicate enterprise asset mapping');
|
|
21
|
+
assert.deepEqual(inventory(reference), storedPaths.sort(), 'Enterprise source inventory changed');
|
|
22
|
+
assert.equal(origin.fileCount, Object.keys(origin.files).length, 'Enterprise source file count changed');
|
|
23
|
+
for (const [file, expected] of Object.entries(origin.files)) {
|
|
24
|
+
assert.ok(!path.isAbsolute(file) && !file.split(/[\\/]/).some(part => !part || part === '..'), 'Invalid source path');
|
|
25
|
+
const stored = origin.storagePaths?.[file] || file;
|
|
26
|
+
assert.ok(!path.isAbsolute(stored) && !stored.split(/[\\/]/).some(part => !part || part === '..'), 'Invalid mapped source path');
|
|
27
|
+
assert.equal(hash(fs.readFileSync(path.join(reference, stored))), expected, 'Enterprise source integrity / 来源完整性: ' + file);
|
|
28
|
+
}
|
|
29
|
+
assert.equal(hash(fs.readFileSync(path.join(reference, 'assets-manifest.json'))), origin.sourceManifestDigest, 'Invalid source manifest digest');
|
|
30
|
+
return origin;
|
|
31
|
+
}
|
|
32
|
+
function brandRuntimeResource(file, content) {
|
|
33
|
+
if (file !== 'index.html' && !/^src\/(?:[^/.][^/]*\/)*[^/]+\.(?:js|mjs|html)$/.test(file)) return content;
|
|
34
|
+
const text = Buffer.isBuffer(content) ? content.toString('utf8') : content;
|
|
35
|
+
const branded = text.replaceAll('EASEL', 'i3-Composer');
|
|
36
|
+
return branded === text ? content : Buffer.isBuffer(content) ? Buffer.from(branded, 'utf8') : branded;
|
|
37
|
+
}
|
|
38
|
+
const mapping = {
|
|
39
|
+
schemaVersion: 1,
|
|
40
|
+
scope: 'i3-Composer 企业后台完整示例;模板审查范围,不代表其他业务已适配',
|
|
41
|
+
requirements: [
|
|
42
|
+
{ id: 'ENT-01', pages: ['#/workbench'], roles: ['演示身份'], actions: ['查看工作台和导航'], scenarios: ['enterprise-navigation'] },
|
|
43
|
+
{ id: 'ENT-02', pages: ['#/models'], roles: ['有模型编辑权限的演示身份'], actions: ['新增模型', '校验和保存草稿'], scenarios: ['enterprise-form'] },
|
|
44
|
+
{ id: 'ENT-03', pages: ['#/models', '#/permissions'], roles: ['演示身份', '只读身份'], actions: ['切换身份并检查动作权限'], scenarios: ['enterprise-permissions'] },
|
|
45
|
+
{ id: 'ENT-04', pages: ['#/workflows'], roles: ['演示身份'], actions: ['查看和编辑流程'], scenarios: ['enterprise-workflow'] },
|
|
46
|
+
{ id: 'ENT-05', pages: ['#/pbcs'], roles: ['演示身份'], actions: ['查看 PBC 并操作业务向导'], scenarios: ['enterprise-pbc'] },
|
|
47
|
+
{ id: 'ENT-06', pages: ['#/workbench', '#/models', '#/intents/new'], roles: ['演示身份'], actions: ['窄屏导航', '键盘开关菜单', '保留未保存输入'], scenarios: ['enterprise-responsive', 'enterprise-keyboard'] },
|
|
48
|
+
{ id: 'ENT-07', pages: ['#/models'], roles: ['演示身份'], actions: ['查看空、失败等演示反馈'], scenarios: ['enterprise-feedback'] },
|
|
49
|
+
{ id: 'ENT-08', pages: ['app/routes.json'], roles: ['演示身份'], actions: ['打开原版已提供的全部页面入口'], scenarios: ['enterprise-routes'] },
|
|
50
|
+
],
|
|
51
|
+
openQuestions: ['新项目的模块、字段、状态、权限及接口需按实际需求替换。原有 i3-Composer 示例不自动成为新业务规格。'],
|
|
52
|
+
};
|
|
53
|
+
function initialize(directory, { id, title, purpose, templateRoot = assetRoot }) {
|
|
54
|
+
const origin = verifyReference(templateRoot);
|
|
55
|
+
assert.ok(['template-review', 'business-prototype'].includes(purpose), 'Invalid enterprise prototype purpose');
|
|
56
|
+
const app = path.join(directory, 'app');
|
|
57
|
+
const instanceId = crypto.randomUUID();
|
|
58
|
+
const storagePrefix = 'i3-enterprise-' + id + '-' + instanceId + '-';
|
|
59
|
+
fs.cpSync(path.join(templateRoot, 'reference'), app, { recursive: true });
|
|
60
|
+
// Skill-supporting Markdown follows the repository naming convention. The
|
|
61
|
+
// source name and bytes are recorded, then restored in each runnable copy.
|
|
62
|
+
for (const [original, stored] of Object.entries(origin.storagePaths || {})) {
|
|
63
|
+
fs.renameSync(path.join(app, stored), path.join(app, original));
|
|
64
|
+
}
|
|
65
|
+
const adaptations = [];
|
|
66
|
+
for (const file of inventory(app).filter(name => name !== 'index.html' && /\.(?:js|mjs|html)$/.test(name))) {
|
|
67
|
+
const location = path.join(app, file), old = fs.readFileSync(location, 'utf8');
|
|
68
|
+
const reasons = [], branded = brandRuntimeResource(file, old);
|
|
69
|
+
if (branded !== old) reasons.push('运行时可见品牌与示例数据统一为 i3-Composer');
|
|
70
|
+
const next = /\.(?:js|mjs)$/.test(file) ? branded.replaceAll('i3-prototype-antdv-', storagePrefix) : branded;
|
|
71
|
+
if (next !== branded) reasons.push('替换本地演示存储前缀,隔离不同原型实例');
|
|
72
|
+
if (next !== old) {
|
|
73
|
+
fs.writeFileSync(location, next);
|
|
74
|
+
adaptations.push({ file, reason: reasons.join(';'), source: origin.files[file], generated: hash(next) });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const index = path.join(app, 'index.html'), original = fs.readFileSync(index, 'utf8');
|
|
78
|
+
assert.ok(original.includes('src="app.js"'), 'Review changed EASEL boot entry before adapting');
|
|
79
|
+
const adapted = brandRuntimeResource('index.html', original).replace('</head>', ' <link rel="stylesheet" href="tokens.css">\n <link rel="stylesheet" href="usability.css">\n</head>')
|
|
80
|
+
.replace('src="app.js"', 'src="enterprise-bootstrap.mjs"');
|
|
81
|
+
fs.writeFileSync(index, adapted);
|
|
82
|
+
adaptations.push({ file: 'index.html', reason: '默认品牌统一为 i3-Composer;接入原有设计 token、实例配置和独立滚动适配,完整保留页面内容', source: origin.files['index.html'], generated: hash(adapted) });
|
|
83
|
+
fs.copyFileSync(path.join(templateRoot, 'usability.css'), path.join(app, 'usability.css'));
|
|
84
|
+
fs.writeFileSync(path.join(app, 'enterprise-bootstrap.mjs'), "const response = await fetch(new URL('./config.json', import.meta.url));\nif (!response.ok) throw new Error('无法读取企业后台实例配置');\nconst config = await response.json();\ndocument.title = config.title;\nawait import('./app.js');\n");
|
|
85
|
+
fs.copyFileSync(path.join(templateRoot, 'serve.cjs'), path.join(app, 'serve.cjs'));
|
|
86
|
+
fs.mkdirSync(path.join(directory, 'design-system'), { recursive: true });
|
|
87
|
+
fs.writeFileSync(path.join(directory, 'design-system/MASTER.md'), fs.readFileSync(path.join(templateRoot, 'design-system.md')));
|
|
88
|
+
fs.writeFileSync(path.join(directory, 'design-system/source.json'), JSON.stringify({
|
|
89
|
+
schemaVersion: 1, source: origin.source, sourceVersion: origin.sourceVersion, sourceManifestDigest: origin.sourceManifestDigest,
|
|
90
|
+
sourceFileCount: origin.fileCount, adaptations, purpose, description: '所有来源文件已复制;运行时统一使用 i3-Composer 品牌,并保留初始化接入和存储隔离记录。app/qa 是历史来源证据,当前验收使用原型根 qa/。',
|
|
91
|
+
}, null, 2) + '\n');
|
|
92
|
+
fs.mkdirSync(path.join(directory, 'mocks'), { recursive: true });
|
|
93
|
+
fs.writeFileSync(path.join(directory, 'mocks/README.md'), '# 演示数据\n\n完整 i3-Composer 示例的数据与规则保留在 app/src/ 各模块中,并使用实例独立的本地存储。它们用于模板审查;新业务需要按需求替换,不能当作真实服务或已完成业务适配。\n');
|
|
94
|
+
fs.writeFileSync(path.join(directory, 'requirements-map.json'), JSON.stringify(mapping, null, 2) + '\n');
|
|
95
|
+
return { kind: 'easel-html', entry: 'app/index.html', sourceVersion: origin.sourceVersion, instanceId, storagePrefix };
|
|
96
|
+
}
|
|
97
|
+
module.exports = { verifyReference, initialize, brandRuntimeResource };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const lib = require('./prototype-lib.cjs');
|
|
3
|
+
try {
|
|
4
|
+
const { options, positional } = lib.parseArgs(process.argv.slice(2));
|
|
5
|
+
const result = positional[0] === 'templates' ? { templates: lib.listTemplates() } : lib.initPrototype(options);
|
|
6
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
7
|
+
if (result.status === 'needs-design-provider') process.exitCode = 2;
|
|
8
|
+
} catch (error) { process.stderr.write(error.message + '\n'); process.exitCode = 1; }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const fs = require('node:fs');
|
|
3
|
+
const lib = require('./prototype-lib.cjs');
|
|
4
|
+
try {
|
|
5
|
+
const { options, positional } = lib.parseArgs(process.argv.slice(2));
|
|
6
|
+
const [operation, directory] = positional;
|
|
7
|
+
if (!directory || !['inspect', 'manifest', 'revise', 'confirm-baseline'].includes(operation)) throw new Error('Usage: manage-baseline.cjs <inspect|manifest|revise|confirm-baseline> <directory> [--revision r002] [--confirmation file.json]');
|
|
8
|
+
const result = operation === 'manifest' ? lib.contentManifest(directory) : operation === 'inspect' ? lib.compareBaseline(directory) : operation === 'revise' ? lib.revisePrototype(directory, options.revision) : lib.freezeBaseline(directory, JSON.parse(fs.readFileSync(options.confirmation, 'utf8')));
|
|
9
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
10
|
+
if (result.status === 'corrupt-baseline') process.exitCode = 1;
|
|
11
|
+
} catch (error) { process.stderr.write(error.message + '\n'); process.exitCode = 1; }
|