@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,114 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const test = require('node:test');
|
|
3
|
+
const assert = require('node:assert/strict');
|
|
4
|
+
const fs = require('node:fs');
|
|
5
|
+
const os = require('node:os');
|
|
6
|
+
const path = require('node:path');
|
|
7
|
+
const installationFile = path.join(__dirname, 'lib/installation.js');
|
|
8
|
+
const skillsDirectory = fs.existsSync(installationFile) ? require(installationFile).loadInstallation().skillsDirectory : path.resolve(__dirname, '../skills');
|
|
9
|
+
const lib = require(path.join(skillsDirectory, 'i3-ui-prototype/scripts/prototype-lib.cjs'));
|
|
10
|
+
|
|
11
|
+
function fixture(t, template = 'classic-admin') {
|
|
12
|
+
const project = fs.mkdtempSync(path.join(os.tmpdir(), 'i3-ui-prototype-'));
|
|
13
|
+
t.after(() => fs.rmSync(project, { recursive: true, force: true }));
|
|
14
|
+
return lib.initPrototype({ project, id: 'approval-demo', template, expertMode: 'template' }).directory;
|
|
15
|
+
}
|
|
16
|
+
function json(dir, file) { return JSON.parse(fs.readFileSync(path.join(dir, file), 'utf8')); }
|
|
17
|
+
function write(dir, file, value) { fs.mkdirSync(path.dirname(path.join(dir, file)), { recursive: true }); fs.writeFileSync(path.join(dir, file), JSON.stringify(value, null, 2)); }
|
|
18
|
+
function browserEvidence(dir) {
|
|
19
|
+
const revision = lib.contentManifest(dir);
|
|
20
|
+
fs.mkdirSync(path.join(dir, 'qa/screenshots'), { recursive: true });
|
|
21
|
+
fs.writeFileSync(path.join(dir, 'qa/screenshots/test.png'), Buffer.from('test evidence; not a real browser image'));
|
|
22
|
+
write(dir, 'qa/browser.json', { schemaVersion: 1, revision: revision.revision, digest: revision.digest, status: 'passed', source: 'isolated-test-fixture', screenshots: ['qa/screenshots/test.png'], journeys: [{ id: 'approval-flow', status: 'passed' }], consoleErrors: [], viewports: [1440, 768] });
|
|
23
|
+
}
|
|
24
|
+
test('default professional mode stops on missing dependency without writing a prototype', t => {
|
|
25
|
+
const project = fs.mkdtempSync(path.join(os.tmpdir(), 'i3-ui-missing-'));
|
|
26
|
+
t.after(() => fs.rmSync(project, { recursive: true, force: true }));
|
|
27
|
+
const result = lib.initPrototype({ project, id: 'example', providerRoots: [], discover: false });
|
|
28
|
+
assert.equal(result.status, 'needs-design-provider');
|
|
29
|
+
assert.deepEqual(result.choices.map(x => x.id), ['install', 'template', 'prepare']);
|
|
30
|
+
assert.equal(fs.existsSync(path.join(project, 'prototypes')), false);
|
|
31
|
+
});
|
|
32
|
+
test('template mode has an interactive runnable app and no expert usage claim', t => {
|
|
33
|
+
const dir = fixture(t);
|
|
34
|
+
const metadata = json(dir, 'prototype.json');
|
|
35
|
+
assert.equal(metadata.expertMode, 'template');
|
|
36
|
+
assert.equal(metadata.expert.status, 'skipped');
|
|
37
|
+
assert.equal(metadata.review.status, 'pending-review');
|
|
38
|
+
assert.equal(lib.checkPrototype(dir).status, 'passed');
|
|
39
|
+
assert.ok(fs.existsSync(path.join(dir, 'app/index.html')));
|
|
40
|
+
assert.throws(() => lib.initPrototype({ project: path.resolve(dir, '../..'), id: 'approval-demo', expertMode: 'template' }), /exists|已存在/);
|
|
41
|
+
});
|
|
42
|
+
test('all three legacy templates retain their distinct tokens and layouts', t => {
|
|
43
|
+
const values = lib.listTemplates({ legacy: true }).map(entry => {
|
|
44
|
+
const dir = fixture(t, entry.id);
|
|
45
|
+
assert.equal(lib.checkPrototype(dir).status, 'passed');
|
|
46
|
+
return { layout: json(dir, 'app/config.json').layout, primary: json(dir, 'design-system/tokens.json').semantic['color-primary'] };
|
|
47
|
+
});
|
|
48
|
+
assert.equal(values.length, 3);
|
|
49
|
+
assert.equal(new Set(values.map(v => v.layout)).size, 3);
|
|
50
|
+
assert.equal(new Set(values.map(v => v.primary)).size, 3);
|
|
51
|
+
});
|
|
52
|
+
test('baseline requires matching browser evidence and human confirmation, and is immutable', t => {
|
|
53
|
+
const dir = fixture(t);
|
|
54
|
+
const candidate = lib.contentManifest(dir);
|
|
55
|
+
assert.throws(() => lib.freezeBaseline(dir, { revision: candidate.revision, digest: candidate.digest, reviewer: 'Test reviewer', statement: 'Approved fixture', source: 'isolated-test' }), /browser|浏览器/);
|
|
56
|
+
browserEvidence(dir);
|
|
57
|
+
assert.throws(() => lib.freezeBaseline(dir, {}), /confirm|确认/);
|
|
58
|
+
const baseline = lib.freezeBaseline(dir, { revision: candidate.revision, digest: candidate.digest, reviewer: 'Test reviewer', statement: 'Approved fixture', source: 'isolated-test' });
|
|
59
|
+
assert.equal(baseline.digest, candidate.digest);
|
|
60
|
+
assert.throws(() => lib.freezeBaseline(dir, { revision: candidate.revision, digest: candidate.digest, reviewer: 'Test reviewer', statement: 'Approved fixture', source: 'isolated-test' }), /exists|已存在/);
|
|
61
|
+
const reviewFile = path.join(dir, 'baselines', candidate.revision, 'review.json');
|
|
62
|
+
const originalReview = fs.readFileSync(reviewFile);
|
|
63
|
+
const alteredReview = JSON.parse(originalReview); alteredReview.reviewer = 'Different reviewer';
|
|
64
|
+
fs.writeFileSync(reviewFile, JSON.stringify(alteredReview));
|
|
65
|
+
assert.equal(lib.compareBaseline(dir).status, 'corrupt-baseline');
|
|
66
|
+
fs.writeFileSync(reviewFile, originalReview);
|
|
67
|
+
fs.appendFileSync(path.join(dir, 'baselines', candidate.revision, 'app/styles.css'), '\n/* altered snapshot */');
|
|
68
|
+
assert.equal(lib.compareBaseline(dir).status, 'corrupt-baseline');
|
|
69
|
+
});
|
|
70
|
+
test('changed content invalidates old verification and cannot reuse old confirmation', t => {
|
|
71
|
+
const dir = fixture(t);
|
|
72
|
+
browserEvidence(dir);
|
|
73
|
+
const old = lib.contentManifest(dir);
|
|
74
|
+
fs.appendFileSync(path.join(dir, 'app/styles.css'), '\n/* modified */');
|
|
75
|
+
assert.throws(() => lib.freezeBaseline(dir, { revision: old.revision, digest: old.digest, reviewer: 'Test', statement: 'Approved', source: 'isolated-test' }), /matching|一致|changed|变化/);
|
|
76
|
+
});
|
|
77
|
+
test('iteration preserves baseline and identifies changes to design constraints', t => {
|
|
78
|
+
const dir = fixture(t);
|
|
79
|
+
browserEvidence(dir);
|
|
80
|
+
const current = lib.contentManifest(dir);
|
|
81
|
+
lib.freezeBaseline(dir, { revision: current.revision, digest: current.digest, reviewer: 'Test', statement: 'Approved fixture', source: 'isolated-test' });
|
|
82
|
+
lib.revisePrototype(dir, 'r002');
|
|
83
|
+
const tokens = json(dir, 'design-system/tokens.json');
|
|
84
|
+
tokens.semantic['color-primary'] = '#222222';
|
|
85
|
+
write(dir, 'design-system/tokens.json', tokens);
|
|
86
|
+
const result = lib.compareBaseline(dir);
|
|
87
|
+
assert.equal(result.status, 'changed');
|
|
88
|
+
assert.ok(result.protectedChanges.includes('design-system/tokens.json'));
|
|
89
|
+
assert.equal(json(dir, 'baseline.json').revision, 'r001');
|
|
90
|
+
assert.equal(json(dir, 'prototype.json').review.status, 'pending-review');
|
|
91
|
+
});
|
|
92
|
+
test('design token changes must be reflected in the actual runtime stylesheet', t => {
|
|
93
|
+
const dir = fixture(t);
|
|
94
|
+
const tokens = json(dir, 'design-system/tokens.json');
|
|
95
|
+
tokens.semantic['color-primary'] = '#222222';
|
|
96
|
+
write(dir, 'design-system/tokens.json', tokens);
|
|
97
|
+
assert.equal(lib.checkPrototype(dir).status, 'failed');
|
|
98
|
+
});
|
|
99
|
+
test('a manually created candidate cannot pass with an uncomputed template digest', t => {
|
|
100
|
+
const dir = fixture(t);
|
|
101
|
+
const metadata = json(dir, 'prototype.json');
|
|
102
|
+
metadata.template.digest = 'manual-init-uncomputed';
|
|
103
|
+
write(dir, 'prototype.json', metadata);
|
|
104
|
+
assert.equal(lib.checkPrototype(dir).status, 'failed');
|
|
105
|
+
});
|
|
106
|
+
test('unsafe identifiers and symlinked output parents are rejected before writes', t => {
|
|
107
|
+
const project = fs.mkdtempSync(path.join(os.tmpdir(), 'i3-ui-path-'));
|
|
108
|
+
const elsewhere = fs.mkdtempSync(path.join(os.tmpdir(), 'i3-ui-elsewhere-'));
|
|
109
|
+
t.after(() => { fs.rmSync(project, { recursive: true, force: true }); fs.rmSync(elsewhere, { recursive: true, force: true }); });
|
|
110
|
+
assert.throws(() => lib.initPrototype({ project, id: '../escape', expertMode: 'template' }), /identifier|标识/);
|
|
111
|
+
fs.symlinkSync(elsewhere, path.join(project, 'prototypes'), 'dir');
|
|
112
|
+
assert.throws(() => lib.initPrototype({ project, id: 'safe', expertMode: 'template' }), /symlink|符号链接/);
|
|
113
|
+
assert.deepEqual(fs.readdirSync(elsewhere), []);
|
|
114
|
+
});
|
|
@@ -214,3 +214,33 @@ test('the TOML directories are not put through the YAML rules', () => {
|
|
|
214
214
|
assert.equal(result.status, 0, result.stdout);
|
|
215
215
|
assert.doesNotMatch(result.stdout, /\.gemini.*unquoted value/);
|
|
216
216
|
});
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
test('nested metadata descriptions cannot hide command description drift', () => {
|
|
220
|
+
const root = makeSandbox();
|
|
221
|
+
writeClaudeCommand(root, 'review', 'metadata:\n description: Review a change\ndescription: Inspect a change');
|
|
222
|
+
writeTomlCommand(root, path.join('.gemini', 'commands'), 'review', 'description = "Review a change"');
|
|
223
|
+
writeTomlCommand(root, 'commands', 'review', 'description = "Review a change"');
|
|
224
|
+
const result = run(root);
|
|
225
|
+
assert.equal(result.status, 1, result.stdout + result.stderr);
|
|
226
|
+
assert.match(result.stdout, /Inspect a change/);
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
test('matching top-level descriptions pass despite different nested metadata', () => {
|
|
230
|
+
const root = makeSandbox();
|
|
231
|
+
writeClaudeCommand(root, 'review', 'metadata:\n description: Internal metadata\ndescription: Review a change');
|
|
232
|
+
writeTomlCommand(root, path.join('.gemini', 'commands'), 'review', 'description = "Review a change"');
|
|
233
|
+
writeTomlCommand(root, 'commands', 'review', 'description = "Review a change"');
|
|
234
|
+
const result = run(root);
|
|
235
|
+
assert.equal(result.status, 0, result.stdout + result.stderr);
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
test('a nested description does not supply a missing command description', () => {
|
|
239
|
+
const root = makeSandbox();
|
|
240
|
+
writeClaudeCommand(root, 'review', 'metadata:\n description: Review a change');
|
|
241
|
+
writeTomlCommand(root, path.join('.gemini', 'commands'), 'review', 'description = "Review a change"');
|
|
242
|
+
writeTomlCommand(root, 'commands', 'review', 'description = "Review a change"');
|
|
243
|
+
const result = run(root);
|
|
244
|
+
assert.equal(result.status, 1, result.stdout + result.stderr);
|
|
245
|
+
assert.match(result.stdout, /missing or malformed description/);
|
|
246
|
+
});
|
|
@@ -25,12 +25,11 @@ const fs = require('fs');
|
|
|
25
25
|
const path = require('path');
|
|
26
26
|
|
|
27
27
|
// The same frontmatter-validity rules validate-skills applies to SKILL.md.
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
const { frontmatterYamlErrors } = require(path.join(__dirname, 'lib', 'skill-lint.js'));
|
|
28
|
+
// Description extraction shares the top-level frontmatter reader with skills.
|
|
29
|
+
// YAML validity is checked separately because Claude Code parses frontmatter
|
|
30
|
+
// when the command is loaded. The #494 thread verified all 25 SKILL.md files
|
|
31
|
+
// and the command files by hand; this makes the second half a check too.
|
|
32
|
+
const { frontmatterYamlErrors, parseFrontmatter } = require(path.join(__dirname, 'lib', 'skill-lint.js'));
|
|
34
33
|
|
|
35
34
|
// ─── Config ───────────────────────────────────────────────────────────────────
|
|
36
35
|
|
|
@@ -56,16 +55,7 @@ const NAME_MAP_REVERSE = Object.fromEntries(
|
|
|
56
55
|
|
|
57
56
|
function descriptionFromMd(filePath) {
|
|
58
57
|
const content = fs.readFileSync(filePath, 'utf8');
|
|
59
|
-
|
|
60
|
-
if (!match) return null;
|
|
61
|
-
for (const line of match[1].split(/\r?\n/)) {
|
|
62
|
-
const colonIdx = line.indexOf(':');
|
|
63
|
-
if (colonIdx === -1) continue;
|
|
64
|
-
if (line.slice(0, colonIdx).trim() === 'description') {
|
|
65
|
-
return line.slice(colonIdx + 1).trim().replace(/^['"]|['"]$/g, '');
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return null;
|
|
58
|
+
return parseFrontmatter(content)?.description ?? null;
|
|
69
59
|
}
|
|
70
60
|
|
|
71
61
|
function descriptionFromToml(filePath) {
|
|
@@ -493,3 +493,21 @@ test('a missing file is reported once, not again for its anchor', () => {
|
|
|
493
493
|
assert.match(result.stdout, /L1: references\/renamed\.md — resolves to skills\/hardening\/references\/renamed\.md, which does not exist/);
|
|
494
494
|
assert.match(result.stdout, /1 skills checked — 1 error\(s\) — FAILED/);
|
|
495
495
|
});
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
test('heading slugs remain unique when a literal suffix collides with an allocated slug', () => {
|
|
499
|
+
const root = makeSandbox();
|
|
500
|
+
hardeningSkill(root, 'references/patterns.md#example-1-1');
|
|
501
|
+
// A hyphen in the literal heading makes its base slug collide with Example's suffix.
|
|
502
|
+
writeFile(root, 'skills/hardening/references/patterns.md', '## Example\n\n## Example\n\n## Example-1\n');
|
|
503
|
+
const result = run(root);
|
|
504
|
+
assert.equal(result.status, 0, result.stdout + result.stderr);
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
test('a duplicate skips a slug occupied by an earlier literal heading', () => {
|
|
508
|
+
const root = makeSandbox();
|
|
509
|
+
hardeningSkill(root, 'references/patterns.md#example-2');
|
|
510
|
+
writeFile(root, 'skills/hardening/references/patterns.md', '## Example\n\n## Example-1\n\n## Example\n');
|
|
511
|
+
const result = run(root);
|
|
512
|
+
assert.equal(result.status, 0, result.stdout + result.stderr);
|
|
513
|
+
});
|
|
@@ -77,8 +77,10 @@ function headingAnchors(file) {
|
|
|
77
77
|
const match = line.match(/^ {0,3}#{1,6}[ \t]+(.*?)(?:[ \t]+#+)?[ \t]*$/);
|
|
78
78
|
if (!match) continue;
|
|
79
79
|
const slug = slugify(match[1]);
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
let count = seen.get(slug) || 0;
|
|
81
|
+
let anchor = count === 0 ? slug : `${slug}-${count}`;
|
|
82
|
+
while (anchors.has(anchor)) anchor = `${slug}-${++count}`;
|
|
83
|
+
anchors.add(anchor);
|
|
82
84
|
seen.set(slug, count + 1);
|
|
83
85
|
}
|
|
84
86
|
return anchors;
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* validate-skills.js
|
|
4
4
|
*
|
|
5
5
|
* CLI that validates every skill in skills/ against the rules in
|
|
6
|
-
* docs/skill-anatomy.md
|
|
6
|
+
* docs/skill-anatomy.md, and every persona in agents/ against the three rules
|
|
7
|
+
* in docs/agents.md. The rules themselves live in scripts/lib/skill-lint.js
|
|
7
8
|
* (a single source of truth, importable and unit-testable); this file is a thin
|
|
8
9
|
* wrapper that walks the skills directory, runs the linter, prints the report,
|
|
9
10
|
* and sets the exit code.
|
|
@@ -16,9 +17,10 @@
|
|
|
16
17
|
const fs = require('fs');
|
|
17
18
|
const path = require('path');
|
|
18
19
|
|
|
19
|
-
const { lintSkill } = require('./lib/skill-lint');
|
|
20
|
+
const { lintSkill, lintPersona } = require('./lib/skill-lint');
|
|
20
21
|
|
|
21
22
|
const SKILLS_DIR = path.resolve(__dirname, '..', 'skills');
|
|
23
|
+
const AGENTS_DIR = path.resolve(__dirname, '..', 'agents');
|
|
22
24
|
|
|
23
25
|
// ─── Main ────────────────────────────────────────────────────────────────────
|
|
24
26
|
|
|
@@ -54,8 +56,29 @@ function main() {
|
|
|
54
56
|
}
|
|
55
57
|
}
|
|
56
58
|
|
|
59
|
+
// ── Personas ─────────────────────────────────────────────────────────────
|
|
60
|
+
// agents/<name>.md files are consumed as subagents and spawned by name from
|
|
61
|
+
// commands, so they get the same frontmatter contract plus a closing
|
|
62
|
+
// Composition section (docs/agents.md). An index file such as README.md is
|
|
63
|
+
// not a persona and is skipped.
|
|
64
|
+
const personaFiles = fs.existsSync(AGENTS_DIR)
|
|
65
|
+
? fs.readdirSync(AGENTS_DIR).filter(f => f.endsWith('.md') && !/^readme\.md$/i.test(f)).sort()
|
|
66
|
+
: [];
|
|
67
|
+
|
|
68
|
+
if (personaFiles.length > 0) console.log('');
|
|
69
|
+
for (const fileName of personaFiles) {
|
|
70
|
+
const { errors } = lintPersona(fileName, AGENTS_DIR);
|
|
71
|
+
totalErrors += errors.length;
|
|
72
|
+
if (errors.length === 0) {
|
|
73
|
+
console.log(` ✓ agents/${fileName}`);
|
|
74
|
+
} else {
|
|
75
|
+
console.log(` ✗ agents/${fileName}`);
|
|
76
|
+
for (const msg of errors) console.log(` ERROR: ${msg}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
57
80
|
const status = totalErrors > 0 ? 'FAILED' : totalWarnings > 0 ? 'PASSED WITH WARNINGS' : 'PASSED';
|
|
58
|
-
console.log(`\n${skillDirs.length} skills checked — ${totalErrors} error(s), ${totalWarnings} warning(s) — ${status}`);
|
|
81
|
+
console.log(`\n${skillDirs.length} skills and ${personaFiles.length} personas checked — ${totalErrors} error(s), ${totalWarnings} warning(s) — ${status}`);
|
|
59
82
|
|
|
60
83
|
if (totalErrors > 0) process.exit(1);
|
|
61
84
|
}
|
|
@@ -268,6 +268,14 @@ Special consideration for AI agent context:
|
|
|
268
268
|
- **ADRs** — Help agents understand why past decisions were made (prevents re-deciding)
|
|
269
269
|
- **Inline gotchas** — Prevent agents from falling into known traps
|
|
270
270
|
|
|
271
|
+
## Prose Review
|
|
272
|
+
|
|
273
|
+
After checking the technical content, review the prose for the people who will use it. Clearer wording must not change the decision or its limits.
|
|
274
|
+
|
|
275
|
+
1. Mark the details that must survive the edit: names, numbers and units, commands, paths, links, conditions, trade-offs, and uncertainty. Check them against the available code and decision context; flag anything you cannot substantiate.
|
|
276
|
+
2. Replace stock introductions, promotional adjectives, and repeated summaries with the concrete information the reader needs. Do not replace an unsupported claim with an invented example or a stronger guarantee. Keep necessary technical repetition and the project's established terminology.
|
|
277
|
+
3. Compare the edited document with the original and its sources. Restore any lost qualifier or caveat, verify command and code examples still work as documented, and explain any unresolved factual question rather than polishing it away.
|
|
278
|
+
|
|
271
279
|
## Common Rationalizations
|
|
272
280
|
|
|
273
281
|
| Rationalization | Reality |
|
|
@@ -298,3 +306,4 @@ After documenting:
|
|
|
298
306
|
- [ ] Known gotchas are documented inline where they matter
|
|
299
307
|
- [ ] No commented-out code remains
|
|
300
308
|
- [ ] Rules files (CLAUDE.md etc.) are current and accurate
|
|
309
|
+
- [ ] Prose edits preserve source details, decision trade-offs, and qualifiers without adding unsupported guarantees
|
|
@@ -29,6 +29,10 @@ Build production-quality user interfaces that are accessible, performant, and vi
|
|
|
29
29
|
- Adding interactivity or state management
|
|
30
30
|
- Fixing visual or UX issues
|
|
31
31
|
|
|
32
|
+
## Applicable Prototype Baselines
|
|
33
|
+
|
|
34
|
+
When the project has `.i3-ui-prototypes.json`, read the prototype entry applicable to the UI module being changed, then its `baseline.json`, `design-system/MASTER.md`, tokens and page rules. Preserve approved design and interaction decisions; explain conflicts with new requirements instead of silently changing them. New pages reuse the selected template and component conventions. Changes to global tokens, navigation, component behavior or business states go through the `i3-ui-prototype` workflow and corresponding review. HTML review prototypes need explicit component mapping when implemented in another framework. Verify affected production pages in the browser; a prototype manifest check alone does not prove production fidelity. Projects without an applicable baseline retain this skill's existing workflow.
|
|
35
|
+
|
|
32
36
|
## Component Architecture
|
|
33
37
|
|
|
34
38
|
### File Structure
|
|
@@ -91,7 +95,7 @@ export function TaskItem({ task, onToggle, onDelete }: TaskItemProps) {
|
|
|
91
95
|
```tsx
|
|
92
96
|
// Container: handles data
|
|
93
97
|
export function TaskListContainer() {
|
|
94
|
-
const { tasks, isLoading, error } = useTasks();
|
|
98
|
+
const { tasks, isLoading, error, refetch } = useTasks();
|
|
95
99
|
|
|
96
100
|
if (isLoading) return <TaskListSkeleton />;
|
|
97
101
|
if (error) return <ErrorState message="Failed to load tasks" retry={refetch} />;
|
|
@@ -17,8 +17,18 @@ Skill/Command/Agent 标识、文件路径、命令参数、代码/API 名称、
|
|
|
17
17
|
|
|
18
18
|
# Idea Refine
|
|
19
19
|
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
20
22
|
Refines raw ideas into sharp, actionable concepts worth building through structured divergent and convergent thinking.
|
|
21
23
|
|
|
24
|
+
## When to Use
|
|
25
|
+
|
|
26
|
+
- Use when an idea is still vague and needs shaping before it can become a plan
|
|
27
|
+
- Use when you need to stress-test assumptions before committing to a direction
|
|
28
|
+
- Use when you want to expand options before converging on one
|
|
29
|
+
- Trigger phrases: "Help me refine this idea", "Ideate on [concept]", "Stress-test my plan"
|
|
30
|
+
- Not for: a user who is unsure what they want at all (use `i3-interview-me`), or a direction already chosen that needs a spec (use `i3-spec-driven-development`)
|
|
31
|
+
|
|
22
32
|
## How It Works
|
|
23
33
|
|
|
24
34
|
1. **Understand & Expand (Divergent):** Restate the idea, ask sharpening questions, and generate variations.
|
|
@@ -34,11 +44,6 @@ This skill is primarily an interactive dialogue. Invoke it with an idea, and the
|
|
|
34
44
|
bash skills/i3-idea-refine/scripts/idea-refine.sh
|
|
35
45
|
```
|
|
36
46
|
|
|
37
|
-
**Trigger Phrases:**
|
|
38
|
-
- "Help me refine this idea"
|
|
39
|
-
- "Ideate on [concept]"
|
|
40
|
-
- "Stress-test my plan"
|
|
41
|
-
|
|
42
47
|
## Output
|
|
43
48
|
|
|
44
49
|
The final output is a markdown one-pager saved to `docs/ideas/[idea-name].md` (after user confirmation), containing:
|
|
@@ -167,6 +172,16 @@ Direct, thoughtful, slightly provocative. You're a sharp thinking partner, not a
|
|
|
167
172
|
|
|
168
173
|
Read `examples.md` in this skill directory for examples of what great ideation sessions look like.
|
|
169
174
|
|
|
175
|
+
## Common Rationalizations
|
|
176
|
+
|
|
177
|
+
| Rationalization | Reality |
|
|
178
|
+
|---|---|
|
|
179
|
+
| I'll generate 20+ ideas to cover all bases | 5-8 well-considered variations beat 20 shallow ones. Quality over quantity. |
|
|
180
|
+
| The user just needs encouragement, not critique | A yes-machine produces weak ideas. Push back with specificity and kindness. |
|
|
181
|
+
| Who this is for is obvious — no need to ask | Every good idea starts with a person and their problem. Skipping it means designing for nobody. |
|
|
182
|
+
| We'll surface assumptions once we start building | Untested assumptions are the #1 killer of good ideas. Surface them before committing. |
|
|
183
|
+
| A plan without a Not Doing list is fine | The Not Doing list is arguably the most valuable part. Make trade-offs explicit. |
|
|
184
|
+
|
|
170
185
|
## Red Flags
|
|
171
186
|
|
|
172
187
|
- Generating 20+ shallow variations instead of 5-8 considered ones
|
|
@@ -192,6 +192,10 @@ Each increment should be independently revertable:
|
|
|
192
192
|
- Database migrations should have corresponding rollback migrations
|
|
193
193
|
- Avoid deleting something in one commit and replacing it in the same commit — separate them
|
|
194
194
|
|
|
195
|
+
## UI Slices with Prototype Baselines
|
|
196
|
+
|
|
197
|
+
For a UI slice, check `.i3-ui-prototypes.json` for an applicable approved prototype. Read its design contract, business mapping and baseline before implementation, and include affected interaction/visual checks in the slice acceptance. Preserve prior snapshots; coordinate contract changes through `i3-ui-prototype`. Backend-only slices and projects without a baseline continue the existing increment workflow.
|
|
198
|
+
|
|
195
199
|
## Working with Agents
|
|
196
200
|
|
|
197
201
|
When directing an agent to implement incrementally:
|
|
@@ -57,12 +57,12 @@ Two complementary approaches — use both:
|
|
|
57
57
|
- **RUM (web-vitals library, CrUX):** Real user data in real conditions. Required to validate that a fix actually improved user experience.
|
|
58
58
|
|
|
59
59
|
**Frontend:**
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
```javascript
|
|
61
|
+
// Synthetic: Lighthouse in Chrome DevTools (or CI)
|
|
62
|
+
// Chrome DevTools → Performance tab → Record
|
|
63
|
+
// Chrome DevTools MCP → Performance trace
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
// RUM: Web Vitals library in code
|
|
66
66
|
import { onLCP, onINP, onCLS } from 'web-vitals';
|
|
67
67
|
|
|
68
68
|
onLCP(console.log);
|
|
@@ -71,12 +71,12 @@ onCLS(console.log);
|
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
**Backend:**
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
```javascript
|
|
75
|
+
// Response time logging
|
|
76
|
+
// Application Performance Monitoring (APM)
|
|
77
|
+
// Database query logging with timing
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
// Simple timing
|
|
80
80
|
console.time('db-query');
|
|
81
81
|
const result = await db.query(...);
|
|
82
82
|
console.timeEnd('db-query');
|
|
@@ -167,7 +167,7 @@ The `range() !== 'unicast'` check covers loopback, link-local `169.254.169.254`
|
|
|
167
167
|
import { z } from 'zod';
|
|
168
168
|
|
|
169
169
|
const CreateTaskSchema = z.object({
|
|
170
|
-
title: z.string().
|
|
170
|
+
title: z.string().max(200).trim().min(1),
|
|
171
171
|
description: z.string().max(2000).optional(),
|
|
172
172
|
priority: z.enum(['low', 'medium', 'high']).default('medium'),
|
|
173
173
|
dueDate: z.string().datetime().optional(),
|
|
@@ -202,6 +202,12 @@ Client metrics:
|
|
|
202
202
|
```typescript
|
|
203
203
|
// Set up error boundary with reporting
|
|
204
204
|
class ErrorBoundary extends React.Component {
|
|
205
|
+
state = { hasError: false };
|
|
206
|
+
|
|
207
|
+
static getDerivedStateFromError() {
|
|
208
|
+
return { hasError: true };
|
|
209
|
+
}
|
|
210
|
+
|
|
205
211
|
componentDidCatch(error: Error, info: React.ErrorInfo) {
|
|
206
212
|
// Report to error tracking service
|
|
207
213
|
reportError(error, {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: i3-test-driven-development
|
|
3
|
-
description: "
|
|
4
|
-
# i3-description-source: "description: Drives development with tests using the red-green-refactor loop. Use when implementing any logic, fixing any bug, or changing any behavior. Use when you need to prove that code works, when a bug report arrives, or when you're about to modify existing functionality."
|
|
3
|
+
description: "执行测试先行的红绿重构循环。适用于实现逻辑、修复缺陷、修改行为、复现报错及证明改动有效;也用于为函数补测试、修复或修改直接粘贴的代码,即使请求未提到测试;缺陷修复使用先证明失败的 Prove-It 模式。"
|
|
4
|
+
# i3-description-source: "description: Drives development with tests using the red-green-refactor loop. Use when implementing any logic, fixing any bug, or changing any behavior. Use when you need to prove that code works, when a bug report arrives, or when you're about to modify existing functionality. Use when asked to add tests to a function, fix a bug in it or change its behavior, even when the code is pasted inline and the request does not mention tests."
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- i3:zh-CN:start -->
|
|
@@ -12,7 +12,7 @@ description: "执行测试先行的红绿重构循环。适用于实现逻辑、
|
|
|
12
12
|
Skill/Command/Agent 标识、文件路径、命令参数、代码/API 名称、工具调用参数、JSON 键/类型/枚举、机器状态、测试期望字面量及引用原文保持原样。生成文档正文用中文,SPEC.md、tasks/plan.md、tasks/todo.md、CONSTRAINTS.md 等约定路径不改名。
|
|
13
13
|
严重程度按原规则判断,面向用户可写“严重(Critical)”“必须修复(Required)”“小问题(Nit)”“可选(Optional)”“建议考虑(Consider)”“仅供参考(FYI)”;High/Medium/Low、APPROVE/REQUEST CHANGES 和 GO/NO-GO 保留其原始语义与机器值。不得因翻译降低门槛,角色不能互相委派。
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
适用说明:执行测试先行的红绿重构循环。适用于实现逻辑、修复缺陷、修改行为、复现报错及证明改动有效;也用于为函数补测试、修复或修改直接粘贴的代码,即使请求未提到测试;缺陷修复使用先证明失败的 Prove-It 模式。
|
|
16
16
|
<!-- i3:zh-CN:end -->
|
|
17
17
|
|
|
18
18
|
# Test-Driven Development
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: i3-ui-prototype
|
|
3
|
+
description: "根据业务需求选择 UI 模板,生成、评审并迭代交互原型。适用于选择原型模板、制作可操作审查原型、检查原型一致性及维护已确认的原型基线。"
|
|
4
|
+
# i3-description-source: "description: Creates and iterates reviewable interactive UI prototypes from selected templates and business requirements. Use when choosing UI prototype templates, generating interactive prototypes for review, inspecting prototype fidelity, or maintaining approved prototype baselines."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- i3:zh-CN:start -->
|
|
8
|
+
## 中文交互与输出
|
|
9
|
+
|
|
10
|
+
默认使用简体中文回复,包括追问、选项说明、阶段进度、分析、规格、计划、验收、代码审查与发布报告。只有用户明确要求其他语言时才切换;输入中出现英文术语、代码或引用不构成切换语言的要求。
|
|
11
|
+
下文的工程步骤、审批要求、退出条件和工具约束完整有效。英文示例中的人类可读标题、说明和占位内容在实际输出时应译为中文;保留原有信息与验证标准,不删减方法。
|
|
12
|
+
Skill/Command/Agent 标识、文件路径、命令参数、代码/API 名称、工具调用参数、JSON 键/类型/枚举、机器状态、测试期望字面量及引用原文保持原样。生成文档正文用中文,SPEC.md、tasks/plan.md、tasks/todo.md、CONSTRAINTS.md 等约定路径不改名。
|
|
13
|
+
严重程度按原规则判断,面向用户可写“严重(Critical)”“必须修复(Required)”“小问题(Nit)”“可选(Optional)”“建议考虑(Consider)”“仅供参考(FYI)”;High/Medium/Low、APPROVE/REQUEST CHANGES 和 GO/NO-GO 保留其原始语义与机器值。不得因翻译降低门槛,角色不能互相委派。
|
|
14
|
+
|
|
15
|
+
适用说明:根据业务需求选择 UI 模板,生成、评审并迭代交互原型。适用于选择原型模板、制作可操作审查原型、检查原型一致性及维护已确认的原型基线。
|
|
16
|
+
<!-- i3:zh-CN:end -->
|
|
17
|
+
|
|
18
|
+
# UI Prototype
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
基于业务需求与选定模板交付可操作、可评审的 HTML 原型,保留设计决策、业务映射、浏览器证据和已确认基线。默认使用专业增强模式;用户明确选择后可使用模板模式。原型认可、正式规格、生产开发与发布分别处理。
|
|
23
|
+
|
|
24
|
+
## When to Use
|
|
25
|
+
|
|
26
|
+
- 选择 UI 原型模板,按业务需求生成交互原型。
|
|
27
|
+
- 根据评审意见修改原型,检查与既有基线的一致性。
|
|
28
|
+
- 确认具体原型版本,维护后续迭代使用的设计基线。
|
|
29
|
+
|
|
30
|
+
仅实现已有设计的生产组件时 use the `i3-frontend-ui-engineering` skill。普通排错、纯后端工作和不涉及原型的代码评审继续使用对应工程技能。
|
|
31
|
+
|
|
32
|
+
## Process
|
|
33
|
+
|
|
34
|
+
### 1. 读取上下文与选择操作
|
|
35
|
+
|
|
36
|
+
读取项目规则、实际需求和技术栈,以及项目根 `.i3-ui-prototypes.json` 指向的相关原型。没有正式规格时先整理最小业务范围与待确认项,不能补造审批权限或把演示规则写成已确认需求。
|
|
37
|
+
|
|
38
|
+
选择 `create`、`revise`、`inspect` 或 `confirm-baseline`;无参数默认 `create`。操作契约及产物规则见 [workflow-contract.md](references/workflow-contract.md) 和 [artifact-contract.md](references/artifact-contract.md)。
|
|
39
|
+
|
|
40
|
+
### 2. 检测专业能力并继续模板预览
|
|
41
|
+
|
|
42
|
+
新增原型默认 `professional`(专业增强模式)。优先使用当前宿主暴露的 UI/UX Pro Max 技能位置,运行 `scripts/check-design-provider.cjs --provider <实际技能根>`;也可传入明确的 `--host` 和 `--project` 自动检测项目、全局 Skill 和已启用插件。项目安装的本技能可直接复用同一宿主的全局 UI/UX Pro Max,无需再复制到项目。不能硬编码缓存版本、借用另一宿主安装,或仅凭目录存在判断可执行。明确指定的 provider 失败时报告该路径,不自动换成别的副本。
|
|
43
|
+
|
|
44
|
+
检测不阻断模板预览,先继续展示模板并记录选择。自动检测遇到不可用项目副本时继续检测全局副本;运行探测通过后使用。缺少宿主信息时补充宿主或实际技能路径;已安装但停用、资源不全、查询失败、发现信息不完整时分别提示启用、修复或定位,不能一律要求重新安装。确认当前宿主未安装时提供安装入口;始终允许明确选择“模板模式继续”或“先整理需求和模板选择”,默认不降级。用户选择安装后按该宿主的官方方法安装并验证;已有授权或已选择模板模式时不重复确认。安装系统运行环境需根据实际缺项处理,不能静默改动操作系统。
|
|
45
|
+
|
|
46
|
+
模板模式使用 `template`,仍使用同一套业务和浏览器验收标准。不得静默切换,交付记录必须说明实际模式。专业接入的查询与建议适配见 [expert-adapter.md](references/expert-adapter.md)。
|
|
47
|
+
|
|
48
|
+
### 3. 选择模板并固定版本
|
|
49
|
+
|
|
50
|
+
运行 `node <skill-root>/scripts/init-prototype.cjs templates` 查看四类:企业管理后台、AI 工作台、数字孪生大屏、移动端应用。按 availability 区分可操作模板与 planned;不能把待建设类型生成成其他类型。通过 `node <skill-root>/assets/templates/serve-gallery.cjs` 打开选择页。企业后台使用 i3-Composer 品牌的完整 HTML 审查版,当前可供人工测试,其余三类待后续实施。已有模板选择时沿用。
|
|
51
|
+
|
|
52
|
+
选择页只切换预览,不创建或确认业务实例。可生成模板使用 catalog/manifest 显式指定运行层;未知或缺失 adapter 不回退到 common。资源组织、独立模板扩展与旧实例兼容见 [template-adapters.md](references/template-adapters.md)。
|
|
53
|
+
|
|
54
|
+
企业后台保留原 EASEL 的全部页面、样式、控件和交互;预览及新实例的页面标题、导航、示例项目和相关说明统一使用 i3-Composer,来源快照与内部兼容标识保留。审查整套模板时显式使用 `--purpose template-review`;为新业务生成时沿用默认 business-prototype,替换项目菜单、字段、状态、角色、数据和需求映射,完成后才将 business.status 标为 adapted。旧 classic-admin、modern-workspace、data-operations 仅保留兼容和历史样例迭代,不再作为新项目首选。框架工程保持既有设计规则,交接包含真实组件映射,HTML 审查版不等于真实 Vue/React 组件工程。
|
|
55
|
+
|
|
56
|
+
创建示例:
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
node <skill-root>/scripts/init-prototype.cjs --project <project-root> --id enterprise-review --template enterprise-admin --purpose template-review --provider <uiux-skill-root>
|
|
60
|
+
# 仅在用户明确选择模板模式后:
|
|
61
|
+
node <skill-root>/scripts/init-prototype.cjs --project <project-root> --id enterprise-review --template enterprise-admin --purpose template-review --expert-mode template
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
企业后台初始化保留完整 i3-Composer 示例。template-review 用于本次模板人工审查;business-prototype 初始为 needs-adaptation,未完成实际业务适配时验收守卫拒绝通过。复制的 app/qa 是历史来源材料,本次验收使用原型根 qa/。目标已存在时使用迭代流程,不覆盖。完整复用、来源核对与响应式规则见 [enterprise-admin.md](references/enterprise-admin.md)。
|
|
65
|
+
|
|
66
|
+
### 4. 专业设计与业务实现
|
|
67
|
+
|
|
68
|
+
将需求编号映射到页面、字段、操作、角色、可见范围、状态与验收场景。专业增强模式加载已发现的 UI/UX Pro Max 指令,运行真实查询并核对匹配;建议不能覆盖选定模板、需求或已认可的规则。查询失配时缩小问题重试一次,仍失配则拒绝并记录依据。
|
|
69
|
+
|
|
70
|
+
专业建议的采用/拒绝写入 `qa/design-advice.json`,包括查询、结果身份、原因和验证条件。被采用规则写入 `design-system/MASTER.md`、token 或页面规则。基础工程与业务映射始终由 i3 维护。
|
|
71
|
+
|
|
72
|
+
有实际查询及适用建议采用记录后,将 prototype.json 的 expert.status 更新为 used;没有适用结果时记录 no-match。HANDOFF.md 同步本次真实使用情况,不能保留初始化时“专业建议待适配”的描述冒充已完成。
|
|
73
|
+
|
|
74
|
+
Follow the `i3-frontend-ui-engineering` skill 实现原型。固定模板版本和 token,新增页面复用组件约定。演示数据、状态切换和本地权限模拟必须可复现;普通按钮反馈不能代替完整的业务流程。修改 token 后同步 `app/tokens.css`。
|
|
75
|
+
|
|
76
|
+
### 5. 验证并交付候选
|
|
77
|
+
|
|
78
|
+
运行 `node <skill-root>/scripts/check-prototype.cjs <prototype-root>`,再启动 `node app/serve.cjs`。Follow the `i3-browser-testing-with-devtools` skill 或当前宿主可用的等效真实浏览器能力,检查需求映射中的主流程、校验、权限演示、失败反馈、窄屏、键盘焦点和控制台。
|
|
79
|
+
|
|
80
|
+
先取 `manage-baseline.cjs manifest <prototype-root>` 的版本与内容摘要,将实际浏览器结果、场景 ID、视口和截图保存到 `qa/browser.json`,绑定同一摘要。运行 `check-prototype.cjs <prototype-root> --acceptance` 核对证据与覆盖;有修改则旧证据失效。
|
|
81
|
+
|
|
82
|
+
没有实际浏览器证据时交付待验证候选,不能填写 `passed`。本地通过仍是 `pending-review`。提供可打开的预览、模式、范围、待确认问题、检查结果和 `HANDOFF.md`;关键检查失败时明确阻断项。
|
|
83
|
+
|
|
84
|
+
实际验收通过后,将 prototype.json 的 verification 更新为 passed 并记录对应 digest;review 保持 pending-review。文件再变化时重新验证,不能只修改状态字段。
|
|
85
|
+
|
|
86
|
+
### 6. 迭代与确认
|
|
87
|
+
|
|
88
|
+
`revise` 先运行 `manage-baseline.cjs revise <prototype-root> --revision r002`,读取当前设计契约和旧基线,按反馈产生新候选并重新验证受影响场景。保留旧基线和其确认记录;修改全局设计或业务状态规则必须说明差异。
|
|
89
|
+
|
|
90
|
+
`confirm-baseline` 只能依据用户对明确版本的认可。确认 JSON 含 `revision`、`digest`、`reviewer`、`statement`、`source`,记录用户原意和来源,不能由代理自我认可。先通过当前验收,再运行 `manage-baseline.cjs confirm-baseline <prototype-root> --confirmation <record.json>`。版本或摘要不符、必需证据缺失、旧基线已存在时脚本拒绝。
|
|
91
|
+
|
|
92
|
+
后续 UI 实现读取项目清单、适用基线及页面规则,运行差异检查。`check-prototype.cjs --enforce-baseline` 可作为设计契约变更检查;它检查原型及其契约,不自动证明任意生产代码的视觉一致性。需要强制合并门禁时由项目实际 Hook/CI 接入并验证。
|
|
93
|
+
|
|
94
|
+
## Common Rationalizations
|
|
95
|
+
|
|
96
|
+
| 想法 | 要求 |
|
|
97
|
+
| --- | --- |
|
|
98
|
+
| 专业技能缺失就直接换成模板模式 | 先提示安装或修复,用户明确选择后才切换 |
|
|
99
|
+
| 搜索返回了配色和首页结构就全部采用 | 核对产品与页面匹配,业务界面不能被营销结构替换 |
|
|
100
|
+
| 通用演示生成成功就是完成用户业务 | 按实际需求实现并更新业务映射与验收 |
|
|
101
|
+
| 测试通过可以标记用户已批准 | 本地验证与具体版本的用户认可分别记录 |
|
|
102
|
+
| 更新参考截图即可消除设计差异 | 先解释变更并评审,再更新对应基线 |
|
|
103
|
+
|
|
104
|
+
## Red Flags
|
|
105
|
+
|
|
106
|
+
- 未说明模式变化,声称使用了未安装或没有实际采用建议的专业技能。
|
|
107
|
+
- 保留通用演示数据却报告真实业务完成,或把演示授权当服务端权限。
|
|
108
|
+
- 文件变化后继续使用旧的浏览器报告或用户确认。
|
|
109
|
+
- 覆盖已认可的快照、随意更换模板,或为了检查通过降低原有门槛。
|
|
110
|
+
- 用结构校验、词法路由或截图文件存在冒充浏览器和宿主执行证据。
|
|
111
|
+
|
|
112
|
+
## Verification
|
|
113
|
+
|
|
114
|
+
- [ ] 模板、版本、运行形态、模式和专业能力实际使用有记录。
|
|
115
|
+
- [ ] 业务映射完整,原型行为与本次范围一致;待确认项可见。
|
|
116
|
+
- [ ] 专业建议已核对并形成具体规则;模板模式明确记录未使用。
|
|
117
|
+
- [ ] 结构校验通过,实际浏览器覆盖必要场景并绑定当前内容摘要。
|
|
118
|
+
- [ ] 候选交付待评审;冻结仅依据同一版本的人类确认。
|
|
119
|
+
- [ ] 迭代读取适用基线,设计变更和工程交接保持可追溯。
|