@yss123/cage-cli 0.3.1 → 0.3.2
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/README.md +7 -3
- package/dist/capabilities.js +40 -40
- package/dist/capabilities.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/project-structure.js +2 -2
- package/dist/project-structure.js.map +1 -1
- package/dist/sync.d.ts +1 -1
- package/dist/sync.js +25 -108
- package/dist/sync.js.map +1 -1
- package/package.json +6 -6
- package/templates/app/.agents/skills/cage-development/SKILL.md +10 -0
- package/templates/app/AGENTS.md +39 -122
- package/templates/app/CLAUDE.md +6 -0
- package/templates/app/README.md +4 -4
- package/templates/app/apps/api/package.json +2 -2
- package/templates/app/apps/web/package.json +1 -1
- package/templates/app/docs/README.md +11 -0
- package/templates/app/docs/development/README.md +64 -0
- package/templates/app/docs/development/examples/note/note-detail-page.tsx +106 -0
- package/templates/app/docs/development/examples/note/note.ts +67 -0
- package/templates/app/docs/development/examples/note/notes-page.tsx +87 -0
- package/templates/{blank/docs/ai → app/docs/development/examples}/purchase-example.md +5 -5
- package/templates/{blank/docs/ai → app/docs/development/getting-started}/architecture.md +4 -4
- package/templates/app/docs/development/getting-started/first-feature.md +66 -0
- package/templates/app/docs/{ai → development/getting-started}/workflow.md +13 -12
- package/templates/app/docs/{ai → development/guides}/approvals.md +16 -6
- package/templates/app/docs/development/guides/business-collaboration.md +63 -0
- package/templates/{blank/docs/ai → app/docs/development/guides}/files.md +5 -1
- package/templates/app/docs/{ai → development/guides}/intelligence.md +4 -4
- package/templates/app/docs/{ai → development/guides}/recipes.md +31 -11
- package/templates/app/docs/{ai → development/guides}/relations.md +2 -2
- package/templates/{blank/docs/ai → app/docs/development/guides}/routing.md +1 -1
- package/templates/app/docs/{ai → development/guides}/transfers.md +1 -1
- package/templates/{blank/docs/ai → app/docs/development/reference}/commenting.md +1 -1
- package/templates/app/docs/{ai → development/reference}/primitives.md +8 -62
- package/templates/app/docs/{ai → development/reference}/project-structure.md +2 -2
- package/templates/app/docs/development/skills/cage-development/SKILL.md +134 -0
- package/templates/{blank/docs/ai → app/docs/development/tools}/diagnostics.md +3 -3
- package/templates/{blank/docs/ai → app/docs/development/tools}/ontology-context.md +3 -3
- package/templates/app/docs/{ai → development/tools}/troubleshooting.md +7 -1
- package/templates/app/docs/errors/CAGE-AI-001.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-001.md +2 -2
- package/templates/app/docs/errors/CAGE-APPR-002.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-003.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-004.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-005.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-006.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-007.md +1 -1
- package/templates/app/docs/errors/CAGE-APPR-010.md +1 -1
- package/templates/app/docs/errors/CAGE-AUDIT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-AUTH-001.md +1 -1
- package/templates/app/docs/errors/CAGE-BIZ-001.md +1 -1
- package/templates/app/docs/errors/CAGE-BIZ-002.md +1 -1
- package/templates/app/docs/errors/CAGE-BUDGET-001.md +1 -1
- package/templates/app/docs/errors/CAGE-BUDGET-002.md +1 -1
- package/templates/app/docs/errors/CAGE-BUDGET-003.md +1 -1
- package/templates/app/docs/errors/CAGE-CMD-002.md +1 -1
- package/templates/app/docs/errors/CAGE-CMD-003.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-001.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-002.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-003.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-004.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-005.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-006.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-007.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-008.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-009.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-010.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-011.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-012.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-013.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-014.md +1 -1
- package/templates/app/docs/errors/CAGE-CONN-015.md +1 -1
- package/templates/app/docs/errors/CAGE-CREATE-001.md +2 -2
- package/templates/app/docs/errors/CAGE-DECL-001.md +1 -1
- package/templates/app/docs/errors/CAGE-DECL-002.md +1 -1
- package/templates/app/docs/errors/CAGE-DECL-003.md +1 -1
- package/templates/app/docs/errors/CAGE-DECL-004.md +1 -1
- package/templates/app/docs/errors/CAGE-DEP-001.md +1 -1
- package/templates/app/docs/errors/CAGE-DEP-002.md +1 -1
- package/templates/app/docs/errors/CAGE-DEP-003.md +1 -1
- package/templates/app/docs/errors/CAGE-DEP-004.md +1 -1
- package/templates/app/docs/errors/CAGE-DEP-005.md +1 -1
- package/templates/app/docs/errors/CAGE-DIAG-001.md +1 -1
- package/templates/app/docs/errors/CAGE-DLQ-001.md +1 -1
- package/templates/app/docs/errors/CAGE-ENV-001.md +1 -1
- package/templates/app/docs/errors/CAGE-ENV-002.md +1 -1
- package/templates/app/docs/errors/CAGE-ENV-003.md +1 -1
- package/templates/app/docs/errors/CAGE-EVENT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-EVENT-002.md +1 -1
- package/templates/app/docs/errors/CAGE-FIELD-001.md +1 -1
- package/templates/app/docs/errors/CAGE-FIELD-002.md +1 -1
- package/templates/app/docs/errors/CAGE-FIELD-003.md +1 -1
- package/templates/app/docs/errors/CAGE-FIELD-004.md +1 -1
- package/templates/app/docs/errors/CAGE-FILE-001.md +1 -1
- package/templates/app/docs/errors/CAGE-GEN-001.md +1 -1
- package/templates/app/docs/errors/CAGE-GEN-002.md +1 -1
- package/templates/app/docs/errors/CAGE-GEN-003.md +1 -1
- package/templates/app/docs/errors/CAGE-GRANT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-GRANT-002.md +1 -1
- package/templates/app/docs/errors/CAGE-GRANT-003.md +1 -1
- package/templates/app/docs/errors/CAGE-IMPACT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-IMPACT-002.md +1 -1
- package/templates/app/docs/errors/CAGE-INIT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-INIT-002.md +1 -1
- package/templates/app/docs/errors/CAGE-INIT-003.md +1 -1
- package/templates/app/docs/errors/CAGE-INIT-004.md +1 -1
- package/templates/app/docs/errors/CAGE-INIT-005.md +1 -1
- package/templates/app/docs/errors/CAGE-JOB-001.md +1 -1
- package/templates/app/docs/errors/CAGE-JOB-002.md +1 -1
- package/templates/app/docs/errors/CAGE-JOB-003.md +1 -1
- package/templates/app/docs/errors/CAGE-LINT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-MIG-001.md +1 -1
- package/templates/app/docs/errors/CAGE-MIG-002.md +1 -1
- package/templates/app/docs/errors/CAGE-MIG-005.md +1 -1
- package/templates/app/docs/errors/CAGE-NAME-001.md +1 -1
- package/templates/app/docs/errors/CAGE-NAME-002.md +1 -1
- package/templates/app/docs/errors/CAGE-NAME-003.md +1 -1
- package/templates/app/docs/errors/CAGE-NAME-004.md +1 -1
- package/templates/app/docs/errors/CAGE-NAME-005.md +1 -1
- package/templates/app/docs/errors/CAGE-NAME-006.md +1 -1
- package/templates/app/docs/errors/CAGE-ORG-001.md +1 -1
- package/templates/app/docs/errors/CAGE-PAIR-002.md +1 -1
- package/templates/app/docs/errors/CAGE-QUERY-001.md +1 -1
- package/templates/app/docs/errors/CAGE-QUERY-002.md +1 -1
- package/templates/app/docs/errors/CAGE-QUERY-003.md +1 -1
- package/templates/app/docs/errors/CAGE-REACT-001.md +1 -1
- package/templates/app/docs/errors/CAGE-REACT-002.md +1 -1
- package/templates/app/docs/errors/CAGE-REACT-003.md +1 -1
- package/templates/app/docs/errors/CAGE-READS-001.md +1 -1
- package/templates/app/docs/errors/CAGE-REG-001.md +1 -1
- package/templates/app/docs/errors/CAGE-REG-002.md +1 -1
- package/templates/app/docs/errors/CAGE-REG-003.md +1 -1
- package/templates/app/docs/errors/CAGE-REL-001.md +1 -1
- package/templates/app/docs/errors/CAGE-ROUTE-001.md +1 -1
- package/templates/app/docs/errors/CAGE-SCOPE-001.md +1 -1
- package/templates/app/docs/errors/CAGE-SCOPE-002.md +1 -1
- package/templates/app/docs/errors/CAGE-SECRET-001.md +1 -1
- package/templates/app/docs/errors/CAGE-SECRET-002.md +1 -1
- package/templates/app/docs/errors/CAGE-SENS-001.md +1 -1
- package/templates/app/docs/errors/CAGE-SQL-001.md +1 -1
- package/templates/app/docs/errors/CAGE-SQL-002.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-001.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-002.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-003.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-004.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-005.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-010.md +1 -1
- package/templates/app/docs/errors/CAGE-STATE-011.md +1 -1
- package/templates/app/docs/errors/CAGE-STRUCT-001.md +4 -4
- package/templates/app/docs/errors/CAGE-STRUCT-002.md +3 -3
- package/templates/app/docs/errors/CAGE-SYNC-001.md +4 -4
- package/templates/app/docs/errors/CAGE-TEST-001.md +1 -1
- package/templates/app/docs/errors/CAGE-TEST-002.md +1 -1
- package/templates/app/docs/errors/CAGE-TEST-003.md +1 -1
- package/templates/app/docs/errors/CAGE-UNSAFE-001.md +1 -1
- package/templates/app/docs/errors/CAGE-UPGRADE-001.md +1 -1
- package/templates/app/docs/errors/CAGE-WORKER-001.md +1 -1
- package/templates/app/docs/errors/CAGE-WORKER-002.md +1 -1
- package/templates/app/docs/errors/CAGE-WORKER-003.md +1 -1
- package/templates/app/docs/errors/README.md +1 -1
- package/templates/app/docs/errors/runtime.md +1 -1
- package/templates/app/package.json +3 -3
- package/templates/app/packages/contracts/package.json +1 -1
- package/templates/app/packages/domain/package.json +5 -5
- package/templates/blank/.agents/skills/cage-development/SKILL.md +10 -0
- package/templates/blank/AGENTS.md +39 -122
- package/templates/blank/CLAUDE.md +6 -0
- package/templates/blank/README.md +3 -3
- package/templates/blank/apps/api/package.json +1 -1
- package/templates/blank/apps/web/package.json +1 -1
- package/templates/blank/docs/README.md +11 -0
- package/templates/blank/docs/development/README.md +64 -0
- package/templates/blank/docs/development/examples/note/note-detail-page.tsx +106 -0
- package/templates/blank/docs/development/examples/note/note.ts +67 -0
- package/templates/blank/docs/development/examples/note/notes-page.tsx +87 -0
- package/templates/{app/docs/ai → blank/docs/development/examples}/purchase-example.md +5 -5
- package/templates/{app/docs/ai → blank/docs/development/getting-started}/architecture.md +4 -4
- package/templates/blank/docs/development/getting-started/first-feature.md +66 -0
- package/templates/blank/docs/{ai → development/getting-started}/workflow.md +13 -12
- package/templates/blank/docs/{ai → development/guides}/approvals.md +16 -6
- package/templates/blank/docs/development/guides/business-collaboration.md +63 -0
- package/templates/{app/docs/ai → blank/docs/development/guides}/files.md +5 -1
- package/templates/blank/docs/{ai → development/guides}/intelligence.md +4 -4
- package/templates/blank/docs/{ai → development/guides}/recipes.md +31 -11
- package/templates/blank/docs/{ai → development/guides}/relations.md +2 -2
- package/templates/{app/docs/ai → blank/docs/development/guides}/routing.md +1 -1
- package/templates/blank/docs/{ai → development/guides}/transfers.md +1 -1
- package/templates/{app/docs/ai → blank/docs/development/reference}/commenting.md +1 -1
- package/templates/blank/docs/{ai → development/reference}/primitives.md +8 -62
- package/templates/blank/docs/{ai → development/reference}/project-structure.md +2 -2
- package/templates/blank/docs/development/skills/cage-development/SKILL.md +134 -0
- package/templates/{app/docs/ai → blank/docs/development/tools}/diagnostics.md +3 -3
- package/templates/{app/docs/ai → blank/docs/development/tools}/ontology-context.md +3 -3
- package/templates/blank/docs/{ai → development/tools}/troubleshooting.md +7 -1
- package/templates/blank/docs/errors/CAGE-AI-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-001.md +2 -2
- package/templates/blank/docs/errors/CAGE-APPR-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-006.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-007.md +1 -1
- package/templates/blank/docs/errors/CAGE-APPR-010.md +1 -1
- package/templates/blank/docs/errors/CAGE-AUDIT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-AUTH-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-BIZ-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-BIZ-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-BUDGET-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-BUDGET-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-BUDGET-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-CMD-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-CMD-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-006.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-007.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-008.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-009.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-010.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-011.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-012.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-013.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-014.md +1 -1
- package/templates/blank/docs/errors/CAGE-CONN-015.md +1 -1
- package/templates/blank/docs/errors/CAGE-CREATE-001.md +2 -2
- package/templates/blank/docs/errors/CAGE-DECL-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-DECL-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-DECL-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-DECL-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-DEP-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-DEP-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-DEP-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-DEP-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-DEP-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-DIAG-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-DLQ-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-ENV-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-ENV-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-ENV-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-EVENT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-EVENT-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-FIELD-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-FIELD-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-FIELD-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-FIELD-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-FILE-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-GEN-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-GEN-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-GEN-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-GRANT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-GRANT-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-GRANT-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-IMPACT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-IMPACT-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-INIT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-INIT-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-INIT-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-INIT-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-INIT-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-JOB-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-JOB-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-JOB-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-LINT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-MIG-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-MIG-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-MIG-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-NAME-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-NAME-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-NAME-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-NAME-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-NAME-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-NAME-006.md +1 -1
- package/templates/blank/docs/errors/CAGE-ORG-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-PAIR-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-QUERY-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-QUERY-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-QUERY-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-REACT-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-REACT-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-REACT-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-READS-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-REG-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-REG-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-REG-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-REL-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-ROUTE-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-SCOPE-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-SCOPE-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-SECRET-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-SECRET-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-SENS-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-SQL-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-SQL-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-004.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-005.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-010.md +1 -1
- package/templates/blank/docs/errors/CAGE-STATE-011.md +1 -1
- package/templates/blank/docs/errors/CAGE-STRUCT-001.md +4 -4
- package/templates/blank/docs/errors/CAGE-STRUCT-002.md +3 -3
- package/templates/blank/docs/errors/CAGE-SYNC-001.md +4 -4
- package/templates/blank/docs/errors/CAGE-TEST-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-TEST-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-TEST-003.md +1 -1
- package/templates/blank/docs/errors/CAGE-UNSAFE-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-UPGRADE-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-WORKER-001.md +1 -1
- package/templates/blank/docs/errors/CAGE-WORKER-002.md +1 -1
- package/templates/blank/docs/errors/CAGE-WORKER-003.md +1 -1
- package/templates/blank/docs/errors/README.md +1 -1
- package/templates/blank/docs/errors/runtime.md +1 -1
- package/templates/blank/docs/examples/purchase-admin/README.md +1 -1
- package/templates/blank/package.json +3 -3
- package/templates/blank/packages/contracts/package.json +1 -1
- package/templates/blank/packages/domain/package.json +5 -5
- package/templates/app/docs/ai/README.md +0 -103
- package/templates/blank/docs/ai/README.md +0 -103
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CAGE-STRUCT-001:业务源码目录不符合模块约定
|
|
2
2
|
|
|
3
|
-
[返回错误码册](README.md) · [业务排错](../
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
|
|
4
4
|
|
|
5
5
|
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
1. 前端使用 app / modules / shared,src 根目录只保留 main.tsx;领域使用 modules / workflows / integrations / shared,根目录只保留 index.ts。
|
|
16
16
|
2. 把页面、表单、hooks 和业务辅助代码放在同一业务模块,需要时再拆文件;不要创建空目录凑层级。测试就近放置,类型声明 .d.ts 不受入口约束。
|
|
17
|
-
3. 目录调整后修正导入并运行 cage check、gen、verify;完整规范见 docs/
|
|
17
|
+
3. 目录调整后修正导入并运行 cage check、gen、verify;完整规范见 docs/development/reference/project-structure.md。
|
|
18
18
|
|
|
19
19
|
## 正例
|
|
20
20
|
|
|
@@ -32,7 +32,7 @@ packages/domain/src/expense.ts
|
|
|
32
32
|
|
|
33
33
|
## 修复后验证
|
|
34
34
|
|
|
35
|
-
按 docs/
|
|
35
|
+
按 docs/development/reference/project-structure.md 整理归属和导入后重跑 cage check 与 verify;不关闭目录规则,也不改业务表或能力标识。
|
|
36
36
|
|
|
37
37
|
## 框架内的检查位置
|
|
38
38
|
|
|
@@ -47,5 +47,5 @@ packages/domain/src/expense.ts
|
|
|
47
47
|
code: 'CAGE-STRUCT-001',
|
|
48
48
|
at,
|
|
49
49
|
reason: `${kind} 源码没有放入约定模块:${from.path}`,
|
|
50
|
-
fix: `src 根目录只保留${kind === 'domain' ? '领域 index.ts' : '浏览器 main.tsx'};业务按归属放入 ${layers.join(' / ')},见 docs/
|
|
50
|
+
fix: `src 根目录只保留${kind === 'domain' ? '领域 index.ts' : '浏览器 main.tsx'};业务按归属放入 ${layers.join(' / ')},见 docs/development/reference/project-structure.md`,
|
|
51
51
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CAGE-STRUCT-002:源码依赖越过模块边界
|
|
2
2
|
|
|
3
|
-
[返回错误码册](README.md) · [业务排错](../
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
|
|
4
4
|
|
|
5
5
|
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
6
|
|
|
@@ -32,7 +32,7 @@ import { ExpensePage } from '../../modules/expense/pages/expense-page';
|
|
|
32
32
|
|
|
33
33
|
## 修复后验证
|
|
34
34
|
|
|
35
|
-
按 docs/
|
|
35
|
+
按 docs/development/reference/project-structure.md 整理归属和导入后重跑 cage check 与 verify;不关闭目录规则,也不改业务表或能力标识。
|
|
36
36
|
|
|
37
37
|
## 框架内的检查位置
|
|
38
38
|
|
|
@@ -47,5 +47,5 @@ import { ExpensePage } from '../../modules/expense/pages/expense-page';
|
|
|
47
47
|
code: 'CAGE-STRUCT-002',
|
|
48
48
|
at: `${at}:${source.slice(0, spec.pos).split('\n').length}`,
|
|
49
49
|
reason: `${reason}(${spec.fileName})`,
|
|
50
|
-
fix: '调整依赖归属;共用纯逻辑下沉到 shared,页面协作由 app 传参,领域交互通过模块公开声明。见 docs/
|
|
50
|
+
fix: '调整依赖归属;共用纯逻辑下沉到 shared,页面协作由 app 传参,领域交互通过模块公开声明。见 docs/development/reference/project-structure.md',
|
|
51
51
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CAGE-SYNC-001:AGENTS 托管区过期或标记损坏
|
|
2
2
|
|
|
3
|
-
[返回错误码册](README.md) · [业务排错](../
|
|
3
|
+
[返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
|
|
4
4
|
|
|
5
5
|
> 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
|
|
6
6
|
|
|
@@ -34,9 +34,9 @@ sync --check 发现框架规则需更新,或 begin/end 标记缺失一边、
|
|
|
34
34
|
|
|
35
35
|
以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
|
|
36
36
|
|
|
37
|
-
- `packages/cli/src/sync.ts:
|
|
38
|
-
- `packages/cli/src/sync.ts:
|
|
39
|
-
- `packages/cli/src/sync.ts:
|
|
37
|
+
- `packages/cli/src/sync.ts:66`
|
|
38
|
+
- `packages/cli/src/sync.ts:73`
|
|
39
|
+
- `packages/cli/src/sync.ts:84`
|
|
40
40
|
|
|
41
41
|
实现片段(位置随框架版本更新):
|
|
42
42
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
这是本业务项目自带的离线诊断手册。先使用错误码、声明位置、reason/fix 定位;不需要克隆框架仓库。
|
|
4
4
|
|
|
5
5
|
- [HTTP 运行时错误与业务码](runtime.md):401/403/404、状态冲突、约束拒绝、DOMAIN_ERROR 等。
|
|
6
|
-
- [业务排错顺序](../
|
|
6
|
+
- [业务排错顺序](../development/tools/troubleshooting.md):启动、权限、审批人、worker、死信与导入导出。
|
|
7
7
|
- CAGE-* 是声明、工具链或内部运行诊断;HTTP code 与业务 domainCode 是另一层,不要混为一谈。
|
|
8
8
|
|
|
9
9
|
每页包含触发阶段、具体原因、修复步骤、正反例、验证方法与当前版实现位置。例子为局部说明,不能替代完整业务输入。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# HTTP 运行时错误与业务码
|
|
2
2
|
|
|
3
|
-
[返回错误码册](README.md) · [排错方法](../
|
|
3
|
+
[返回错误码册](README.md) · [排错方法](../development/tools/troubleshooting.md)
|
|
4
4
|
|
|
5
5
|
框架诊断分三层:`CAGE-APPR-007` 等内部/工具码、HTTP 响应的通用 `code`、业务拒绝的 `domainCode`。同一次失败可以同时涉及几层;例如审批人配置问题出现在 worker 死信,前端提交此前可能已成功。
|
|
6
6
|
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"build:app": "pnpm --filter @app/domain build && pnpm --filter @app/api build && pnpm --filter @app/web build"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
|
-
"@yss123/cage-cli": "0.3.
|
|
15
|
-
"@yss123/cage-testkit": "0.3.
|
|
16
|
-
"@yss123/cage-lint": "0.3.
|
|
14
|
+
"@yss123/cage-cli": "0.3.2",
|
|
15
|
+
"@yss123/cage-testkit": "0.3.2",
|
|
16
|
+
"@yss123/cage-lint": "0.3.2",
|
|
17
17
|
"@types/node": "^24.3.0",
|
|
18
18
|
"typescript": "~5.9.3",
|
|
19
19
|
"vitest": "^4.1.12",
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@yss123/cage-kernel": "0.3.
|
|
18
|
-
"@yss123/cage-admin": "0.3.
|
|
19
|
-
"@yss123/cage-approval": "0.3.
|
|
20
|
-
"@yss123/cage-connectors": "0.3.
|
|
21
|
-
"@yss123/cage-ai": "0.3.
|
|
17
|
+
"@yss123/cage-kernel": "0.3.2",
|
|
18
|
+
"@yss123/cage-admin": "0.3.2",
|
|
19
|
+
"@yss123/cage-approval": "0.3.2",
|
|
20
|
+
"@yss123/cage-connectors": "0.3.2",
|
|
21
|
+
"@yss123/cage-ai": "0.3.2",
|
|
22
22
|
"zod": "^4.1.5"
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cage-development
|
|
3
|
+
description: 使用 Cage 框架开发、修改和排查业务应用。适用于依赖 @yss123/cage-*、具有 cage.config.json 的项目,与用户澄清需求、比较方案,再完成业务建模、框架接入与验收;维护框架内部实现时先遵守框架仓库的 AGENTS.md。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- 由 scripts/sync-agent-skill.ts 生成;教学正文只在 docs/development 维护。 -->
|
|
7
|
+
|
|
8
|
+
加载本技能后,先阅读[完整框架开发方法](../../../docs/development/skills/cage-development/SKILL.md),再根据其中的任务选择表读取相关专题。
|
|
9
|
+
正文包含 Cage 运行模型、与用户澄清业务并选择方案的方法、真实接入、排错与验收;不要只凭本入口的摘要开始编写业务。
|
|
10
|
+
当前项目的业务要求与 AGENTS.md 仍适用,框架维护任务遵守仓库的包边界。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
这是 create-cage-app 的空白业务项目。真实运行的 domain 仅包含用户、部门和角色组织模型;从 packages/domain/src 新建客户自己的业务,再从 index.ts 导出。框架通过 @yss123/cage-* 依赖提供。
|
|
4
4
|
|
|
5
|
-
先读 [业务开发指南](docs/
|
|
5
|
+
先读 [业务开发指南](docs/development/README.md)、[任务配方](docs/development/guides/recipes.md) 和 [错误码册](docs/errors/README.md)。[采购范例参考源码](docs/examples/purchase-admin/README.md) 只用于学习,未注册到应用;导读中的采购路径在 docs/examples/purchase-admin 下查找。普通业务路径仍相对项目根目录。
|
|
6
6
|
|
|
7
7
|
## 项目自己的业务约定
|
|
8
8
|
|
|
@@ -10,127 +10,44 @@
|
|
|
10
10
|
|
|
11
11
|
本节位于托管区之外,cage sync 会保留。下面的托管区提供框架工作方法。
|
|
12
12
|
|
|
13
|
-
<!-- cage:begin v0.3.
|
|
13
|
+
<!-- cage:begin v0.3.2 -->
|
|
14
14
|
## Cage 业务开发约定(框架托管)
|
|
15
15
|
|
|
16
|
-
###
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
| `packages/domain/src/modules/<业务>` | 同业务聚合、状态、命令、事件、审批、查询、任务;模块 index.ts 公开导出 |
|
|
54
|
-
| `packages/domain/src/workflows`、`integrations` | 跨模块反应 / 第三方协议与映射;不堆到全局 reactions.ts、queries.ts |
|
|
55
|
-
| `packages/domain/src/index.ts` | 统一导出全部业务及组织模型;没导出的声明不会注册 |
|
|
56
|
-
| `packages/contracts/src/aggregates/<聚合>`、`queries` | 生成协议;根 index.ts 提供 @app/contracts 公共入口,只用 cage gen 更新 |
|
|
57
|
-
| `apps/api/src` | API/worker 薄启动入口,普通业务不手写 HTTP 路由 |
|
|
58
|
-
| `apps/web/src/app` | 会话、URL 路由、布局、模块组合;main.tsx 只挂载和装配 Provider |
|
|
59
|
-
| `apps/web/src/modules/<业务>` | 页面、表单、专用 hooks/API/样式;从模块 index.ts 暴露页面 |
|
|
60
|
-
| `apps/web/src/shared` | 跨模块复用且不绑定业务的 UI、hooks、纯辅助函数 |
|
|
61
|
-
| `db/migrations` | 审查过的结构迁移,作用于已配置的数据库 |
|
|
62
|
-
| `cage.config.json` | 项目路径、检查配置、graph.labels 中文图谱名称 |
|
|
63
|
-
| `.env` | 本机真实连接和密钥;不提交、不输出完整内容 |
|
|
64
|
-
|
|
65
|
-
新增业务不得继续平铺在 src 根目录。前端模块只依赖自己和 shared,由 app 通过公开入口组合;shared 不反向依赖业务。领域模块间确有读取依赖时走目标模块 index.ts;跨模块反应写 workflows。小模块不创建空层级,已有独立职责再拆文件。完整命名、目录树和示例见 `docs/ai/project-structure.md`。新模板启用 `structure: modular`,check/verify 检查目录和导入边界,遇到 CAGE-STRUCT 错误按职责修正。
|
|
66
|
-
|
|
67
|
-
### 实现一项需求的顺序
|
|
68
|
-
|
|
69
|
-
1. 先运行 `pnpm exec cage context "需求关键词"`;按需 `graph search` 查候选、`graph inspect` 查完整节点、`graph path` 看关系路径。确认中文匹配入口后按源码位置阅读实现;候选和子图不是全部依赖,具体条件不能凭连线推断。完整用法见 `docs/ai/ontology-context.md`。从用户需求确定字段、状态/动作、角色/范围、约束与后续动作;能由业务声明表达的不改框架。
|
|
70
|
-
2. 已有业务含义变化时,修改前用 `pnpm exec cage snapshot save before-change` 保存不可覆盖的命名基线;或使用真实 Git 提交/独立本体图文件。
|
|
71
|
-
3. 先声明 aggregate/states/command/constraints/event,再写 handler、reaction/query/approval/connector,最后接业务页面。声明使用模块顶层 `export const`,从 domain 入口导出,跨文件导出名保持唯一。
|
|
72
|
-
4. 运行 `pnpm exec cage check` 和 `pnpm gen`,审查 contracts 和迁移草稿。按需运行 `pnpm exec cage impact --snapshot before-change`,补中文图谱名。
|
|
73
|
-
5. 页面使用生成方法并处理 code/domainCode;列表、详情等多页面注册到 React Router,Link/NavLink 导航,筛选/分页进入 URL。组件状态用于弹窗和表单等临时交互。新增能力由管理员授权。数据库结构变化审查后显式 `pnpm migrate`,dev 不代办迁移。
|
|
74
|
-
6. 按 `commenting.md` 逐文件检查详细中文注释与实现一致,再按改动运行必要验证;交付时说明体验步骤、授权配置、迁移、注释覆盖,以及通过/跳过/未执行项。
|
|
75
|
-
|
|
76
|
-
### 必守边界
|
|
77
|
-
|
|
78
|
-
- 聚合定义对象字段、状态、范围字段与不变量;命令是业务写入口。handler 只计算业务变化和读取 reads 中的依赖,不直接操作数据库、网络或文件。
|
|
79
|
-
- 对象关系统一放在 fields:ref 为外键,hasMany 为只读反查,manyToMany 自动生成中间表并随所属对象命令提交。前端用生成的 related 方法分页读取;不手写纯中间表聚合,不把单页结果当完整集合替换。完整例子见 docs/ai/relations.md。
|
|
80
|
-
- command 的 input 使用 Zod;已有记录输入必须含 id。from/to 表达状态迁移;`to: null` 只适用于已有记录并保留状态,不能靠 handler 改 status 绕过状态机。
|
|
81
|
-
- 写入、审计、版本、幂等和事务交给内核;不要在业务项目重建 repository、连接池或权限流水线。
|
|
82
|
-
- 自定义查询声明 reads,二选一使用 sql/build,只读 `safe.*`;值参数化。不得拼接 SQL、查询基表绕过范围或硬编码密钥。
|
|
83
|
-
- scope 描述范围字段,角色数据决定实际范围;`scope.none()` 不代表所有人可访问。`can/useCan` 只控制按钮,后端负责授权。
|
|
84
|
-
- 前端从 `@app/contracts` 导入生成 API/类型,按需使用 `@yss123/cage-client`;不导入 domain、内核或数据库包。
|
|
85
|
-
- 多页面业务必须有独立 URL,不用 useState/tab 模拟整页导航;详情从 URL 取 ID 并独立加载。前端路由集中在 app,页面从模块公开入口接入 Outlet。登录后保留原路径/query/hash,401 回登录,403 展示权限提示;/admin/ 使用普通链接进入独立系统管理。前端路由不替代后端授权。实现、SPA 部署回退和浏览器配方见 docs/ai/routing.md。
|
|
86
|
-
- 跨聚合写入通过 reaction 调用命令。`tx: 'same'` 共同提交/回滚,默认 outbox 异步执行。资源 acquires/releases 是图规则标签,实际占用/释放仍由命令完成;离开持有状态要检查每条释放路径。
|
|
87
|
-
- 批量调用同一命令使用 reactionEach,声明 maxItems、唯一排序字段 orderBy、items 和 map;稳定键排序后串行执行。步骤依赖用 order,同事件同事务分组不得混用有序/无序或重复顺序。保持同事务回滚边界,见 docs/ai/primitives.md。
|
|
88
|
-
- 审批通过 approval + route 配置,结论是 process 命令;选中审批人不等于已具备能力、范围和额度。parallel(title, ...branch(...)) 声明结构化 AND:分支同时开始,内部顺序独立,全部活动分支完成后汇合;when 支持嵌套并仍按提交快照求值,声明有深度/数量边界,不支持任意跳转。currentSteps 表示当前活动节点集合,兼容字段 currentStep 只是最小活动索引,不能据此隐藏其他分支。人工节点 assignment: 'candidate' 开放候选领取/释放,approver.field 从 routable 字段选人;actions 开放转办、委派归还和前后/并行必签。任务操作与决定携带 revision,waiting 任务只能查看。approvalOperations() 为框架通用时效运行时:step.sla 配置自然分钟节点总时限,route.reminders 配置申请人催办;迁移并运行 worker 后提供持久站内提醒、已读与 Admin 通用页面,不自动批准或授予权限。政策、SDK 和边界见 docs/ai/approvals.md。第三方 IO 通过连接器,回调验签后调用 external 命令。
|
|
89
|
-
- job 的读取与调用必须列入 reads/calls。业务导入/导出放在需要的业务页面调用通用任务接口,202 只代表任务已接受;worker 必须运行。
|
|
90
|
-
- 已部署事件只做兼容扩展;新增字段设为 optional,不兼容含义用新事件。已执行/已发布迁移不能改写,结构更新新增迁移。
|
|
91
|
-
- 不手改生成物,不关闭门禁掩盖错误,不因方便自动授予生产角色新能力。unsafe 必须写明 reason/owner,不能替代普通业务声明。
|
|
92
|
-
- 按前述详细中文注释规范完成文件、API、业务声明和关键流程说明;避免无业务价值的防御分支和静默兜底。维护脚本用 TypeScript,不新增 .mjs。
|
|
93
|
-
|
|
94
|
-
### 最小命令形状
|
|
95
|
-
|
|
96
|
-
```ts
|
|
97
|
-
// 片段:Order 为已导出的聚合,OrderSubmitted 为事件,业务校验按需求添加。
|
|
98
|
-
/**
|
|
99
|
-
* 将草稿订单提交审批:只有 draft 可进入 pending_approval。
|
|
100
|
-
* 入口使用 Order.submit 能力,真实授权、范围、状态和版本由内核检查;声明本身不自动授予权限。
|
|
101
|
-
* handler 返回草稿供后续校验和持久化,OrderSubmitted 随命令事务登记,后续由已配置消费者处理。
|
|
102
|
-
* 失败不会提交这次业务变更;事件已登记也不代表后续审批已经完成。
|
|
103
|
-
*/
|
|
104
|
-
export const submitOrder = command(Order, {
|
|
105
|
-
name: 'submit',
|
|
106
|
-
from: 'draft',
|
|
107
|
-
to: 'pending_approval',
|
|
108
|
-
emits: [OrderSubmitted],
|
|
109
|
-
handler: (draft) => draft,
|
|
110
|
-
});
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
完整可添加的普通管理对象见 `docs/ai/primitives.md` 的 Note;采购模板的审批、资源、第三方示例在 `packages/domain/src`,空白模板的参考源码在 `docs/examples/purchase-admin`。先读本项目 AGENTS.md 中的模板说明,区分运行代码与参考资料。API 以当前包公开导出和生成契约为准,不发明不存在的配置和方法。
|
|
114
|
-
|
|
115
|
-
### 启动、验证与排错
|
|
116
|
-
|
|
117
|
-
在项目根目录执行:首次 `pnpm install`,复制并编辑 .env.example,仅提供已有库管理员连接后 `pnpm exec cage init`;再 `pnpm build:app`、`pnpm gen`,审查后 `pnpm migrate`;用 `pnpm exec cage bootstrap --credentials-file .cage/admin-credentials.json` 显式初始化组织,最后 `pnpm dev`。已有配置不能覆盖,凭据文件必须是新受限文件且父目录存在。
|
|
118
|
-
|
|
119
|
-
init 只准备账号/schema/授权并填写三个连接,不创建数据库;APP/READ/MIGRATE 指向同一个库。已有集群账号复用原密码,日常启动不用管理员。普通项目不新增 Docker 生命周期命令。
|
|
120
|
-
|
|
121
|
-
API 日常启动不初始化组织、不输出管理员密码;生产缺少合格 Cookie 密钥会拒绝启动。bootstrap 不自动授予业务能力。`/healthz` 只表示存活,`/readyz` 检查必要依赖。首阶段 API 与 worker 同版本部署,查看实际注册指纹和消费者心跳。
|
|
122
|
-
|
|
123
|
-
- `pnpm exec cage graph`:浏览器图谱,默认端口 15418,以终端为准。
|
|
124
|
-
- `pnpm exec cage context command:对象.命令 --format json --out .cage/context.json`:按完整 key 取精简上下文;默认 Markdown,可用 --depth/--limit 调整范围。CLI 每次重新抽取;Web“复制 AI 上下文”使用当前页面快照,改代码后先刷新图谱。
|
|
125
|
-
- `graph inspect/path` 有歧义时复制候选完整 key;path 默认沿箭头,--direction both 的逆向遍历不表示执行方向。报告中的测试/前端文件是候选,须核对;context 与图谱查询不覆盖当前图或命名快照。
|
|
126
|
-
- `pnpm exec cage capabilities 关键词 --format json`:查当前安装版本公开签名;`cage doctor`:区分注册、生成、构建、迁移、授权与实际进程证据,unknown 不能当作通过。`cage timeline/explain` 关联实际异步证据与解释授权,参数和权限见 docs/ai/diagnostics.md。
|
|
127
|
-
- 生成方法支持 signal/timeoutMs/idempotencyKey 请求选项。底层 CageResult 与 mutation 行为有区别:useCageCommand 失败抛 CageCommandError,成功才返回业务数据。订阅 client.subscribe 在退出、401、切换账号时取消查询并清除应用缓存。
|
|
128
|
-
- `pnpm exec cage gen --check`:生成一致性;`pnpm exec cage sync --check`:本托管区一致性。
|
|
129
|
-
- `pnpm exec cage test --only project`:业务测试;`pnpm verify`:类型、依赖、lint、图规则、生成、托管区、预算和测试。
|
|
130
|
-
- `pnpm exec cage verify --skip-tests` 表示不完整门禁;派生测试跳过不能当作通过。测试连接只用独立测试集群。
|
|
131
|
-
- 重要业务改动验证成功路径及有风险的反例;文档或可逆的小改动不反复跑全量数据库测试。
|
|
132
|
-
- 修改页面/导航后实际验收深链接、刷新、前进后退、登录回跳、无权限和 404;生产再查 SPA 回退。check/verify 不自动完成浏览器验收,未执行要明确报告。见 docs/ai/routing.md。
|
|
133
|
-
- CLI 报错先看 code/at/reason/fix,再查错误码册;HTTP 错误查 runtime.md。异步失败先看 worker、同步记录和死信,修复后重放,不能直接 SQL 改状态。
|
|
134
|
-
|
|
135
|
-
框架托管区由 cage sync 更新;项目独有的业务规则写在标记之外,避免升级覆盖。
|
|
16
|
+
### 学习与任务入口
|
|
17
|
+
|
|
18
|
+
本项目使用 `@yss123/cage-*`,业务写在本项目。先读项目说明指定的教材;独立项目默认入口是 `docs/development/README.md`。
|
|
19
|
+
|
|
20
|
+
开始 Cage 业务开发或排错时,加载 `docs/development/skills/cage-development/SKILL.md`。它讲清运行模型、业务澄清、能力选择、实施与验收方法;首次学习配合 `docs/development/getting-started/first-feature.md`。已熟悉时只读受影响专题,普通样式/文案改动无需重走业务建模。
|
|
21
|
+
|
|
22
|
+
支持 Agent Skills 的工具可发现 `.agents/skills/cage-development`;其他工具直接读取上述 Markdown,使用相同流程。教材随框架版本分发,均为本地文件,不需要额外服务、模型或索引。框架仓库范例使用项目说明指定的规范教材位置。
|
|
23
|
+
|
|
24
|
+
### 框架执行什么
|
|
25
|
+
|
|
26
|
+
- 业务声明从 domain 总入口导出,框架据此构建注册表、能力、HTTP 接口、本体图、契约与迁移草稿;只有文件而未导出不会生效。
|
|
27
|
+
- 命令是业务写入口;handler 描述变化与显式 reads,内核处理授权、状态、范围、版本、事务、审计及 outbox。读侧通过生成契约或 query 的安全视图,外部 IO 通过连接器。
|
|
28
|
+
- 角色、能力、数据范围、调用身份与业务约束分别建模。前端 can() 只影响显示,新增能力不自动授给生产角色;审批选人不授予能力。
|
|
29
|
+
- 页面依赖生成契约及客户端。表单、弹窗等临时状态留在前端;正式业务数据和流程结果通过服务端读写。实际记录不能用模拟仓储或固定统计替代。
|
|
30
|
+
|
|
31
|
+
### 实现与排错
|
|
32
|
+
|
|
33
|
+
1. 阅读需求、文档和现有实现后,按 `docs/development/guides/business-collaboration.md` 主动提出疑点、可行选项、影响与推荐理由,让用户选择业务规则;沿用已明确的选择与授权,等待回答时推进独立部分,可选建议不阻塞已明确任务。再把确定的规则映射到聚合、命令、归属/范围、后续行为与验收,沿已有模块修改。具体选择看 `docs/development/guides/recipes.md`,目录归属看 `docs/development/reference/project-structure.md`。
|
|
34
|
+
2. 不熟悉的 API 先按手册任务目录定位,用本地文件搜索查术语,再执行 `pnpm exec cage capabilities 符号 --format json` 核对当前版本签名;`cage context "业务关键词"` 定位当前应用。未命中不代表不支持,不发明方法或返回字段。
|
|
35
|
+
3. 涉及已有领域含义变化,先 `pnpm exec cage snapshot save before-change` 保存本体基线,或使用真实 Git 基线。修改声明与导出,运行 check/gen,审查契约和迁移草稿。生成物不手改,已执行迁移不可改写。
|
|
36
|
+
4. 页面使用真实契约,处理业务失败、版本冲突、会话与缓存;多页面使用独立 URL,列表筛选/分页进入查询参数。按 `docs/development/guides/routing.md` 验收深链接、刷新、登录回跳和无权限行为。
|
|
37
|
+
5. 出错保留 code/at/reason/fix,查 `docs/errors/README.md` 与 `docs/development/tools/troubleshooting.md`;从真实调用逐层定位。不得放宽权限、删约束或关闭门禁来掩盖问题。
|
|
38
|
+
|
|
39
|
+
遇到原生 AI、AI 审批或随页助理,先读 `docs/development/guides/intelligence.md`,核对已有能力及应用启用状态。审批、文件、关系、数据传输等专题由 Skill 按需引导,不重建框架已有运行时。
|
|
40
|
+
|
|
41
|
+
### 代码与环境边界
|
|
42
|
+
|
|
43
|
+
- 所有手写代码遵守 `docs/development/reference/commenting.md`:文件职责与调用链、导出 API/字段、复杂分支的中文说明,写清做什么、为什么、怎样完成及实际边界;随代码更新。生成物注释从生成器维护。
|
|
44
|
+
- domain 按 modules/workflows/integrations/shared 组织,Web 按 app/modules/shared 组织。模块通过 index.ts 公开入口组合,前端不导入 domain、数据库或内核运行时;不关闭 modular 目录门禁。
|
|
45
|
+
- 新项目启动步骤见 `docs/development/getting-started/workflow.md`。使用已有 PostgreSQL 和项目 .env;init 准备账号,migrate 更新结构,bootstrap 显式初始化组织,dev 启动进程。普通业务不新增连接池或管理 Docker。
|
|
46
|
+
- 不输出或提交 .env、数据库密码、Cookie 密钥及初始化凭据。API 与 worker 使用一致的 domain,修改配置后按实际需要重启。
|
|
47
|
+
|
|
48
|
+
### 完成依据
|
|
49
|
+
|
|
50
|
+
验证与改动匹配。check/gen/typecheck/build 证明各自检查范围;业务读写还需独立读取结果,权限需直接请求验证,审批需待办与结论,文件需实际内容,异步需任务终态,页面需浏览器操作。
|
|
51
|
+
|
|
52
|
+
`pnpm verify` 汇总门禁;`verify --skip-tests` 不代表完整通过。诊断用 `cage doctor`、`timeline`、`explain`,具体前提见 `docs/development/tools/diagnostics.md`。交付分别说明通过、跳过、未执行及剩余配置;文档和可逆小改动不反复执行全量数据库回归。
|
|
136
53
|
<!-- cage:end -->
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
这是可直接开发业务的 TypeScript + React 项目,框架由 `@yss123/cage-*` npm 包提供。当前仅注册用户、部门、角色基础模型,保留登录、权限、系统管理、审计和异步任务;没有采购、库存、审批演示声明或演示业务表。
|
|
4
4
|
|
|
5
|
-
先读 [AGENTS.md](AGENTS.md) 和 [业务开发指南](docs/
|
|
5
|
+
先读 [AGENTS.md](AGENTS.md) 和 [业务开发指南](docs/development/README.md)。给 Codex 等工具描述自己的业务需求,按 [任务配方](docs/development/guides/recipes.md) 开发即可。[采购范例导读](docs/development/examples/purchase-example.md) 对应 `docs/examples/purchase-admin` 中的参考源码;这些文件不参与编译、领域注册或迁移。
|
|
6
6
|
|
|
7
7
|
## 首次启动
|
|
8
8
|
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
|
|
18
18
|
登录后可从“系统管理”配置用户、部门、角色与权限,再按业务需求添加模块。页面不会显示虚构业务数据。`.env` 中三个账号连接同一个数据库;日常运行不需要管理员账号。首次迁移应在为本项目准备的库中执行,接管历史业务表需要额外映射和迁移审查。
|
|
19
19
|
|
|
20
|
-
前端已配置 React Router:`/login` 登录、`/workspace` 工作台、`/directory/users` 成员列表、`/directory/users/:id` 成员详情,以及应用 404。成员页面只读取已有组织模型,需要 User.read,未增加演示业务或数据。详情可直达、刷新,登录后返回原地址。新增业务与生产 SPA 回退按[路由和浏览器验收指南](docs/
|
|
20
|
+
前端已配置 React Router:`/login` 登录、`/workspace` 工作台、`/directory/users` 成员列表、`/directory/users/:id` 成员详情,以及应用 404。成员页面只读取已有组织模型,需要 User.read,未增加演示业务或数据。详情可直达、刷新,登录后返回原地址。新增业务与生产 SPA 回退按[路由和浏览器验收指南](docs/development/guides/routing.md)执行;反向代理示例见 [deploy/nginx.conf](deploy/nginx.conf)。
|
|
21
21
|
|
|
22
22
|
## 添加第一个业务模块
|
|
23
23
|
|
|
24
|
-
先读[工程目录与代码组织](docs/
|
|
24
|
+
先读[工程目录与代码组织](docs/development/reference/project-structure.md)。在 `packages/domain/src/modules/<业务>` 新建声明,通过模块 index.ts 从领域总入口导出;运行 `pnpm exec cage check`、`pnpm gen`,审查生成契约和迁移。在 `apps/web/src/modules/<业务>` 使用 `@app/contracts` 实现页面和表单,通过模块公开入口接入 `app` 导航;共享 UI/工具放 `shared`。最后按需迁移,并由管理员分配新增能力。完整的 Note 对象示例见 [原语与最小业务](docs/development/reference/primitives.md)。
|
|
25
25
|
|
|
26
26
|
`src/main.tsx` 只挂载 React 和全局 Provider,业务不平铺到 src 根目录。`cage.config.json` 已启用 `structure: modular`,check/verify 会检查目录和依赖边界;不要关闭检查或将所有业务移入 shared 来消除提示。
|
|
27
27
|
|