@yss123/cage-cli 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +69 -3
- package/bin/cage.js +5 -0
- package/bin/create-cage-app.js +5 -0
- package/dist/analyze.d.ts +16 -0
- package/dist/analyze.js +20 -2
- package/dist/analyze.js.map +1 -1
- package/dist/baseline.d.ts +8 -0
- package/dist/baseline.js +13 -0
- package/dist/baseline.js.map +1 -1
- package/dist/bootstrap.d.ts +20 -0
- package/dist/bootstrap.js +75 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/budget.d.ts +7 -0
- package/dist/budget.js +49 -5
- package/dist/budget.js.map +1 -1
- package/dist/capabilities.d.ts +38 -0
- package/dist/capabilities.js +133 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/config.d.ts +33 -4
- package/dist/config.js +22 -1
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +86 -0
- package/dist/context.js +235 -0
- package/dist/context.js.map +1 -0
- package/dist/create-prompt.d.ts +12 -0
- package/dist/create-prompt.js +62 -0
- package/dist/create-prompt.js.map +1 -0
- package/dist/create.d.ts +38 -1
- package/dist/create.js +52 -13
- package/dist/create.js.map +1 -1
- package/dist/derive.d.ts +23 -0
- package/dist/derive.js +40 -0
- package/dist/derive.js.map +1 -1
- package/dist/dev.d.ts +6 -0
- package/dist/dev.js +23 -51
- package/dist/dev.js.map +1 -1
- package/dist/doctor.d.ts +98 -0
- package/dist/doctor.js +93 -0
- package/dist/doctor.js.map +1 -0
- package/dist/env.d.ts +6 -0
- package/dist/env.js +11 -0
- package/dist/env.js.map +1 -1
- package/dist/findings.d.ts +27 -0
- package/dist/findings.js +20 -0
- package/dist/findings.js.map +1 -1
- package/dist/gen/contracts.d.ts +28 -0
- package/dist/gen/contracts.js +81 -20
- package/dist/gen/contracts.js.map +1 -1
- package/dist/gen/index.d.ts +26 -0
- package/dist/gen/index.js +112 -4
- package/dist/gen/index.js.map +1 -1
- package/dist/gen/zod-code.d.ts +43 -1
- package/dist/gen/zod-code.js +180 -16
- package/dist/gen/zod-code.js.map +1 -1
- package/dist/graph-approvals.d.ts +60 -0
- package/dist/graph-approvals.js +80 -0
- package/dist/graph-approvals.js.map +1 -0
- package/dist/graph-business.d.ts +135 -0
- package/dist/graph-business.js +404 -0
- package/dist/graph-business.js.map +1 -0
- package/dist/graph-command.d.ts +28 -0
- package/dist/graph-command.js +88 -0
- package/dist/graph-command.js.map +1 -0
- package/dist/graph-model.d.ts +65 -0
- package/dist/graph-model.js +134 -0
- package/dist/graph-model.js.map +1 -0
- package/dist/graph-presentation.d.ts +27 -0
- package/dist/graph-presentation.js +34 -0
- package/dist/graph-presentation.js.map +1 -0
- package/dist/graph-query.d.ts +266 -0
- package/dist/graph-query.js +304 -0
- package/dist/graph-query.js.map +1 -0
- package/dist/graph-relations.d.ts +34 -0
- package/dist/graph-relations.js +172 -0
- package/dist/graph-relations.js.map +1 -0
- package/dist/graph-search.d.ts +56 -0
- package/dist/graph-search.js +99 -0
- package/dist/graph-search.js.map +1 -0
- package/dist/graph-snapshot.d.ts +28 -4
- package/dist/graph-snapshot.js +32 -20
- package/dist/graph-snapshot.js.map +1 -1
- package/dist/graph.d.ts +13 -2
- package/dist/graph.js +78 -5
- package/dist/graph.js.map +1 -1
- package/dist/impact.d.ts +56 -0
- package/dist/impact.js +90 -18
- package/dist/impact.js.map +1 -1
- package/dist/index.d.ts +15 -1
- package/dist/index.js +15 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +18 -0
- package/dist/init.js +146 -0
- package/dist/init.js.map +1 -0
- package/dist/load.d.ts +10 -0
- package/dist/load.js +15 -0
- package/dist/load.js.map +1 -1
- package/dist/main.d.ts +6 -0
- package/dist/main.js +170 -37
- package/dist/main.js.map +1 -1
- package/dist/migrate.d.ts +15 -6
- package/dist/migrate.js +31 -53
- package/dist/migrate.js.map +1 -1
- package/dist/ontology.d.ts +69 -2
- package/dist/ontology.js +101 -4
- package/dist/ontology.js.map +1 -1
- package/dist/process-rules.d.ts +21 -0
- package/dist/process-rules.js +100 -0
- package/dist/process-rules.js.map +1 -0
- package/dist/process.d.ts +32 -0
- package/dist/process.js +32 -0
- package/dist/process.js.map +1 -1
- package/dist/project-structure.d.ts +13 -0
- package/dist/project-structure.js +104 -0
- package/dist/project-structure.js.map +1 -0
- package/dist/registration.d.ts +16 -0
- package/dist/registration.js +56 -0
- package/dist/registration.js.map +1 -0
- package/dist/rules.d.ts +52 -0
- package/dist/rules.js +58 -0
- package/dist/rules.js.map +1 -1
- package/dist/runtime-diagnostics.d.ts +27 -0
- package/dist/runtime-diagnostics.js +60 -0
- package/dist/runtime-diagnostics.js.map +1 -0
- package/dist/snapshots.d.ts +40 -0
- package/dist/snapshots.js +62 -0
- package/dist/snapshots.js.map +1 -0
- package/dist/static-check.d.ts +33 -0
- package/dist/static-check.js +38 -5
- package/dist/static-check.js.map +1 -1
- package/dist/sync.d.ts +11 -0
- package/dist/sync.js +139 -10
- package/dist/sync.js.map +1 -1
- package/dist/upgrade.d.ts +16 -0
- package/dist/upgrade.js +21 -0
- package/dist/upgrade.js.map +1 -1
- package/dist/verify.d.ts +14 -0
- package/dist/verify.js +19 -0
- package/dist/verify.js.map +1 -1
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -1
- package/graph-ui/app.js +367 -35
- package/graph-ui/approval-flow.js +165 -0
- package/graph-ui/business.css +985 -0
- package/graph-ui/business.js +549 -0
- package/graph-ui/flowchart-interaction.js +177 -0
- package/graph-ui/flowchart.js +1059 -0
- package/graph-ui/graph-approvals.js +79 -0
- package/graph-ui/graph-business.js +403 -0
- package/graph-ui/graph-model.js +133 -0
- package/graph-ui/graph-relations.js +171 -0
- package/graph-ui/graph-search.js +98 -0
- package/graph-ui/index.html +26 -12
- package/graph-ui/model.js +47 -77
- package/graph-ui/relations.js +6 -125
- package/graph-ui/structure.js +48 -1
- package/graph-ui/style.css +33 -0
- package/package.json +10 -8
- package/templates/app/.dockerignore +2 -0
- package/templates/app/.env.example +68 -14
- package/templates/app/AGENTS.md +135 -12
- package/templates/app/Dockerfile +2 -0
- package/templates/app/README.md +49 -16
- package/templates/app/_gitignore +9 -0
- package/templates/app/apps/api/package.json +2 -2
- package/templates/app/apps/api/src/main.ts +5 -1
- package/templates/app/apps/api/src/worker.ts +3 -0
- package/templates/app/apps/web/index.html +1 -0
- package/templates/app/apps/web/package.json +7 -3
- package/templates/app/apps/web/src/app/app.tsx +128 -0
- package/templates/app/apps/web/src/{style.css → app/styles/global.css} +88 -8
- package/templates/app/apps/web/src/app/use-session.ts +43 -0
- package/templates/app/apps/web/src/app/workspace-layout.tsx +109 -0
- package/templates/app/apps/web/src/main.tsx +9 -543
- package/templates/app/apps/web/src/modules/approval/hooks/use-approval-tasks.ts +31 -0
- package/templates/app/apps/web/src/modules/approval/index.ts +6 -0
- package/templates/app/apps/web/src/modules/approval/pages/approval-tasks-page.tsx +73 -0
- package/templates/app/apps/web/src/modules/auth/index.ts +5 -0
- package/templates/app/apps/web/src/modules/auth/pages/login-page.tsx +71 -0
- package/templates/app/apps/web/src/modules/inventory/index.ts +5 -0
- package/templates/app/apps/web/src/modules/inventory/pages/inventory-page.tsx +102 -0
- package/templates/app/apps/web/src/modules/purchase/components/approval-history.tsx +32 -0
- package/templates/app/apps/web/src/modules/purchase/components/order-attachments.tsx +29 -0
- package/templates/app/apps/web/src/modules/purchase/components/purchase-assistant-context.tsx +17 -0
- package/templates/app/apps/web/src/modules/purchase/components/purchase-order-form.css +6 -0
- package/templates/app/apps/web/src/modules/purchase/components/purchase-order-form.tsx +82 -0
- package/templates/app/apps/web/src/modules/purchase/index.ts +7 -0
- package/templates/app/apps/web/src/modules/purchase/lib/presentation.ts +20 -0
- package/templates/app/apps/web/src/modules/purchase/pages/purchase-intelligence.css +15 -0
- package/templates/app/apps/web/src/modules/purchase/pages/purchase-order-detail-page.tsx +154 -0
- package/templates/app/apps/web/src/modules/purchase/pages/purchase-orders-page.tsx +240 -0
- package/templates/app/apps/web/src/modules/workspace/index.ts +5 -0
- package/templates/app/apps/web/src/modules/workspace/pages/home-page.tsx +44 -0
- package/templates/app/apps/web/src/shared/hooks/use-command.ts +42 -0
- package/templates/app/apps/web/src/shared/lib/error-message.ts +24 -0
- package/templates/app/apps/web/src/shared/lib/navigation.ts +21 -0
- package/templates/app/apps/web/src/shared/ui/assistant-markdown.tsx +19 -0
- package/templates/app/apps/web/src/shared/ui/assistant-panel.css +134 -0
- package/templates/app/apps/web/src/shared/ui/assistant-panel.tsx +200 -0
- package/templates/app/apps/web/src/shared/ui/assistant-scope.tsx +72 -0
- package/templates/app/apps/web/src/shared/ui/attachment-upload.css +28 -0
- package/templates/app/apps/web/src/shared/ui/attachment-upload.tsx +163 -0
- package/templates/app/apps/web/src/shared/ui/notice.tsx +20 -0
- package/templates/app/apps/web/src/shared/ui/page-heading.tsx +35 -0
- package/templates/app/apps/web/src/shared/ui/page-state.css +47 -0
- package/templates/app/apps/web/src/shared/ui/page-state.tsx +76 -0
- package/templates/app/apps/web/src/shared/ui/require-capability.tsx +34 -0
- package/templates/app/apps/web/vite.config.ts +8 -0
- package/templates/app/cage.config.json +10 -1
- package/templates/app/db/migrations/0002_draft.sql +12 -0
- package/templates/app/db/migrations/0003_draft.sql +8 -0
- package/templates/app/deploy/nginx.conf +52 -0
- package/templates/app/docs/ai/README.md +98 -0
- package/templates/app/docs/ai/architecture.md +148 -0
- package/templates/app/docs/ai/commenting.md +203 -0
- package/templates/app/docs/ai/diagnostics.md +80 -0
- package/templates/app/docs/ai/files.md +93 -0
- package/templates/app/docs/ai/intelligence.md +348 -0
- package/templates/app/docs/ai/ontology-context.md +172 -0
- package/templates/app/docs/ai/primitives.md +282 -0
- package/templates/app/docs/ai/project-structure.md +128 -0
- package/templates/app/docs/ai/purchase-example.md +111 -0
- package/templates/app/docs/ai/recipes.md +89 -0
- package/templates/app/docs/ai/relations.md +160 -0
- package/templates/app/docs/ai/routing.md +86 -0
- package/templates/app/docs/ai/transfers.md +92 -0
- package/templates/app/docs/ai/troubleshooting.md +65 -0
- package/templates/app/docs/ai/workflow.md +152 -0
- package/templates/app/docs/errors/CAGE-AI-001.md +61 -0
- package/templates/app/docs/errors/CAGE-APPR-001.md +48 -0
- package/templates/app/docs/errors/CAGE-APPR-002.md +47 -0
- package/templates/app/docs/errors/CAGE-APPR-003.md +47 -0
- package/templates/app/docs/errors/CAGE-APPR-004.md +47 -0
- package/templates/app/docs/errors/CAGE-APPR-005.md +47 -0
- package/templates/app/docs/errors/CAGE-APPR-006.md +53 -0
- package/templates/app/docs/errors/CAGE-APPR-007.md +50 -0
- package/templates/app/docs/errors/CAGE-APPR-010.md +48 -0
- package/templates/app/docs/errors/CAGE-AUDIT-001.md +53 -0
- package/templates/app/docs/errors/CAGE-AUTH-001.md +47 -0
- package/templates/app/docs/errors/CAGE-BIZ-001.md +51 -0
- package/templates/app/docs/errors/CAGE-BIZ-002.md +49 -0
- package/templates/app/docs/errors/CAGE-BUDGET-001.md +47 -0
- package/templates/app/docs/errors/CAGE-BUDGET-002.md +47 -0
- package/templates/app/docs/errors/CAGE-BUDGET-003.md +47 -0
- package/templates/app/docs/errors/CAGE-CMD-002.md +47 -0
- package/templates/app/docs/errors/CAGE-CMD-003.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-001.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-002.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-003.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-004.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-005.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-006.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-007.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-008.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-009.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-010.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-011.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-012.md +47 -0
- package/templates/app/docs/errors/CAGE-CONN-013.md +49 -0
- package/templates/app/docs/errors/CAGE-CONN-014.md +48 -0
- package/templates/app/docs/errors/CAGE-CONN-015.md +49 -0
- package/templates/app/docs/errors/CAGE-CREATE-001.md +53 -0
- package/templates/app/docs/errors/CAGE-DECL-001.md +48 -0
- package/templates/app/docs/errors/CAGE-DECL-002.md +48 -0
- package/templates/app/docs/errors/CAGE-DECL-003.md +47 -0
- package/templates/app/docs/errors/CAGE-DECL-004.md +47 -0
- package/templates/app/docs/errors/CAGE-DEP-001.md +48 -0
- package/templates/app/docs/errors/CAGE-DEP-002.md +47 -0
- package/templates/app/docs/errors/CAGE-DEP-003.md +47 -0
- package/templates/app/docs/errors/CAGE-DEP-004.md +47 -0
- package/templates/app/docs/errors/CAGE-DEP-005.md +47 -0
- package/templates/app/docs/errors/CAGE-DIAG-001.md +53 -0
- package/templates/app/docs/errors/CAGE-DLQ-001.md +48 -0
- package/templates/app/docs/errors/CAGE-ENV-001.md +52 -0
- package/templates/app/docs/errors/CAGE-ENV-002.md +51 -0
- package/templates/app/docs/errors/CAGE-ENV-003.md +48 -0
- package/templates/app/docs/errors/CAGE-EVENT-001.md +47 -0
- package/templates/app/docs/errors/CAGE-EVENT-002.md +50 -0
- package/templates/app/docs/errors/CAGE-FIELD-001.md +47 -0
- package/templates/app/docs/errors/CAGE-FIELD-002.md +47 -0
- package/templates/app/docs/errors/CAGE-FIELD-003.md +47 -0
- package/templates/app/docs/errors/CAGE-FIELD-004.md +47 -0
- package/templates/app/docs/errors/CAGE-FILE-001.md +56 -0
- package/templates/app/docs/errors/CAGE-GEN-001.md +48 -0
- package/templates/app/docs/errors/CAGE-GEN-002.md +47 -0
- package/templates/app/docs/errors/CAGE-GEN-003.md +53 -0
- package/templates/app/docs/errors/CAGE-GRANT-001.md +49 -0
- package/templates/app/docs/errors/CAGE-GRANT-002.md +48 -0
- package/templates/app/docs/errors/CAGE-GRANT-003.md +48 -0
- package/templates/app/docs/errors/CAGE-IMPACT-001.md +48 -0
- package/templates/app/docs/errors/CAGE-IMPACT-002.md +52 -0
- package/templates/app/docs/errors/CAGE-INIT-001.md +47 -0
- package/templates/app/docs/errors/CAGE-INIT-002.md +49 -0
- package/templates/app/docs/errors/CAGE-INIT-003.md +48 -0
- package/templates/app/docs/errors/CAGE-INIT-004.md +48 -0
- package/templates/app/docs/errors/CAGE-INIT-005.md +52 -0
- package/templates/app/docs/errors/CAGE-JOB-001.md +47 -0
- package/templates/app/docs/errors/CAGE-JOB-002.md +47 -0
- package/templates/app/docs/errors/CAGE-JOB-003.md +47 -0
- package/templates/app/docs/errors/CAGE-LINT-001.md +47 -0
- package/templates/app/docs/errors/CAGE-MIG-001.md +47 -0
- package/templates/app/docs/errors/CAGE-MIG-002.md +47 -0
- package/templates/app/docs/errors/CAGE-MIG-003.md +5 -0
- package/templates/app/docs/errors/CAGE-MIG-004.md +5 -0
- package/templates/app/docs/errors/CAGE-MIG-005.md +47 -0
- package/templates/app/docs/errors/CAGE-NAME-001.md +47 -0
- package/templates/app/docs/errors/CAGE-NAME-002.md +47 -0
- package/templates/app/docs/errors/CAGE-NAME-003.md +47 -0
- package/templates/app/docs/errors/CAGE-NAME-004.md +47 -0
- package/templates/app/docs/errors/CAGE-NAME-005.md +47 -0
- package/templates/app/docs/errors/CAGE-NAME-006.md +47 -0
- package/templates/app/docs/errors/CAGE-ORG-001.md +50 -0
- package/templates/app/docs/errors/CAGE-PAIR-002.md +51 -0
- package/templates/app/docs/errors/CAGE-QUERY-001.md +47 -0
- package/templates/app/docs/errors/CAGE-QUERY-002.md +47 -0
- package/templates/app/docs/errors/CAGE-QUERY-003.md +50 -0
- package/templates/app/docs/errors/CAGE-REACT-001.md +47 -0
- package/templates/app/docs/errors/CAGE-REACT-002.md +47 -0
- package/templates/app/docs/errors/CAGE-REACT-003.md +50 -0
- package/templates/app/docs/errors/CAGE-READS-001.md +50 -0
- package/templates/app/docs/errors/CAGE-REG-001.md +54 -0
- package/templates/app/docs/errors/CAGE-REG-002.md +49 -0
- package/templates/app/docs/errors/CAGE-REG-003.md +47 -0
- package/templates/app/docs/errors/CAGE-REL-001.md +64 -0
- package/templates/app/docs/errors/CAGE-ROUTE-001.md +48 -0
- package/templates/app/docs/errors/CAGE-SCOPE-001.md +47 -0
- package/templates/app/docs/errors/CAGE-SCOPE-002.md +47 -0
- package/templates/app/docs/errors/CAGE-SECRET-001.md +48 -0
- package/templates/app/docs/errors/CAGE-SECRET-002.md +47 -0
- package/templates/app/docs/errors/CAGE-SENS-001.md +48 -0
- package/templates/app/docs/errors/CAGE-SQL-001.md +47 -0
- package/templates/app/docs/errors/CAGE-SQL-002.md +47 -0
- package/templates/app/docs/errors/CAGE-STATE-001.md +49 -0
- package/templates/app/docs/errors/CAGE-STATE-002.md +47 -0
- package/templates/app/docs/errors/CAGE-STATE-003.md +47 -0
- package/templates/app/docs/errors/CAGE-STATE-004.md +47 -0
- package/templates/app/docs/errors/CAGE-STATE-005.md +49 -0
- package/templates/app/docs/errors/CAGE-STATE-010.md +48 -0
- package/templates/app/docs/errors/CAGE-STATE-011.md +48 -0
- package/templates/app/docs/errors/CAGE-STRUCT-001.md +51 -0
- package/templates/app/docs/errors/CAGE-STRUCT-002.md +51 -0
- package/templates/app/docs/errors/CAGE-SYNC-001.md +49 -0
- package/templates/app/docs/errors/CAGE-TEST-001.md +47 -0
- package/templates/app/docs/errors/CAGE-TEST-002.md +50 -0
- package/templates/app/docs/errors/CAGE-TEST-003.md +52 -0
- package/templates/app/docs/errors/CAGE-UNSAFE-001.md +49 -0
- package/templates/app/docs/errors/CAGE-UPGRADE-001.md +48 -0
- package/templates/app/docs/errors/CAGE-WORKER-001.md +48 -0
- package/templates/app/docs/errors/CAGE-WORKER-002.md +50 -0
- package/templates/app/docs/errors/CAGE-WORKER-003.md +48 -0
- package/templates/app/docs/errors/README.md +357 -0
- package/templates/app/docs/errors/runtime.md +50 -0
- package/templates/app/package.json +4 -7
- package/templates/app/packages/contracts/package.json +1 -1
- package/templates/app/packages/contracts/src/{dept.ts → aggregates/dept/index.ts} +11 -11
- package/templates/app/packages/contracts/src/{inventory.ts → aggregates/inventory/index.ts} +6 -6
- package/templates/app/packages/contracts/src/{inventory-lock.ts → aggregates/inventory-lock/index.ts} +5 -5
- package/templates/app/packages/contracts/src/aggregates/purchase-order/index.ts +86 -0
- package/templates/app/packages/contracts/src/{role.ts → aggregates/role/index.ts} +16 -16
- package/templates/app/packages/contracts/src/aggregates/user/index.ts +89 -0
- package/templates/app/packages/contracts/src/index.ts +20 -14
- package/templates/app/packages/contracts/src/{queries.ts → queries/index.ts} +2 -2
- package/templates/app/packages/domain/package.json +5 -4
- package/templates/app/packages/domain/src/index.ts +8 -7
- package/templates/app/packages/domain/src/{erp.ts → integrations/erp.ts} +16 -1
- package/templates/app/packages/domain/src/integrations/intelligence.ts +20 -0
- package/templates/app/packages/domain/src/modules/inventory/index.ts +3 -0
- package/templates/app/packages/domain/src/{inventory.ts → modules/inventory/inventory.ts} +12 -0
- package/templates/app/packages/domain/src/modules/purchase/approvals.ts +39 -0
- package/templates/app/packages/domain/src/modules/purchase/index.ts +7 -0
- package/templates/app/packages/domain/src/modules/purchase/intelligence.test.ts +62 -0
- package/templates/app/packages/domain/src/{jobs.ts → modules/purchase/jobs.ts} +5 -0
- package/templates/app/packages/domain/src/{purchase-order.test.ts → modules/purchase/purchase-order.test.ts} +11 -2
- package/templates/app/packages/domain/src/modules/purchase/purchase-order.ts +192 -0
- package/templates/app/packages/domain/src/{queries.ts → modules/purchase/queries.ts} +5 -0
- package/templates/app/packages/domain/src/{reactions.ts → workflows/purchase-inventory.ts} +8 -2
- package/templates/app/packages/domain/src/workflows/purchase-process.ts +42 -0
- package/templates/blank/.dockerignore +12 -0
- package/templates/blank/.env.example +71 -0
- package/templates/blank/.github/workflows/cage.yml +44 -0
- package/templates/blank/AGENTS.md +136 -0
- package/templates/blank/Dockerfile +25 -0
- package/templates/blank/README.md +40 -0
- package/templates/blank/_gitignore +9 -0
- package/templates/blank/apps/api/package.json +15 -0
- package/templates/blank/apps/api/src/main.ts +14 -0
- package/templates/blank/apps/api/src/worker.ts +10 -0
- package/templates/blank/apps/api/tsconfig.json +5 -0
- package/templates/blank/apps/web/index.html +14 -0
- package/templates/blank/apps/web/package.json +26 -0
- package/templates/blank/apps/web/src/app/app.tsx +106 -0
- package/templates/blank/apps/web/src/app/styles/global.css +606 -0
- package/templates/blank/apps/web/src/app/use-session.ts +43 -0
- package/templates/blank/apps/web/src/app/workspace-layout.tsx +95 -0
- package/templates/blank/apps/web/src/main.tsx +18 -0
- package/templates/blank/apps/web/src/modules/auth/index.ts +5 -0
- package/templates/blank/apps/web/src/modules/auth/pages/login-page.tsx +104 -0
- package/templates/blank/apps/web/src/modules/directory/index.ts +7 -0
- package/templates/blank/apps/web/src/modules/directory/pages/user-detail-page.tsx +78 -0
- package/templates/blank/apps/web/src/modules/directory/pages/users-page.tsx +93 -0
- package/templates/blank/apps/web/src/modules/workspace/index.ts +5 -0
- package/templates/blank/apps/web/src/modules/workspace/pages/home-page.tsx +62 -0
- package/templates/blank/apps/web/src/shared/lib/error-message.ts +22 -0
- package/templates/blank/apps/web/src/shared/lib/navigation.ts +21 -0
- package/templates/blank/apps/web/src/shared/ui/brand.tsx +19 -0
- package/templates/blank/apps/web/src/shared/ui/page-state.css +47 -0
- package/templates/blank/apps/web/src/shared/ui/page-state.tsx +76 -0
- package/templates/blank/apps/web/src/shared/ui/require-capability.tsx +34 -0
- package/templates/blank/apps/web/tsconfig.json +11 -0
- package/templates/blank/apps/web/vite.config.ts +24 -0
- package/templates/blank/cage.config.json +14 -0
- package/templates/blank/db/migrations/0001_init.sql +63 -0
- package/templates/blank/deploy/nginx.conf +52 -0
- package/templates/blank/docs/ai/README.md +98 -0
- package/templates/blank/docs/ai/architecture.md +148 -0
- package/templates/blank/docs/ai/commenting.md +203 -0
- package/templates/blank/docs/ai/diagnostics.md +80 -0
- package/templates/blank/docs/ai/files.md +93 -0
- package/templates/blank/docs/ai/intelligence.md +348 -0
- package/templates/blank/docs/ai/ontology-context.md +172 -0
- package/templates/blank/docs/ai/primitives.md +282 -0
- package/templates/blank/docs/ai/project-structure.md +128 -0
- package/templates/blank/docs/ai/purchase-example.md +111 -0
- package/templates/blank/docs/ai/recipes.md +89 -0
- package/templates/blank/docs/ai/relations.md +160 -0
- package/templates/blank/docs/ai/routing.md +86 -0
- package/templates/blank/docs/ai/transfers.md +92 -0
- package/templates/blank/docs/ai/troubleshooting.md +65 -0
- package/templates/blank/docs/ai/workflow.md +152 -0
- package/templates/blank/docs/errors/CAGE-AI-001.md +61 -0
- package/templates/blank/docs/errors/CAGE-APPR-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-APPR-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-APPR-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-APPR-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-APPR-005.md +47 -0
- package/templates/blank/docs/errors/CAGE-APPR-006.md +53 -0
- package/templates/blank/docs/errors/CAGE-APPR-007.md +50 -0
- package/templates/blank/docs/errors/CAGE-APPR-010.md +48 -0
- package/templates/blank/docs/errors/CAGE-AUDIT-001.md +53 -0
- package/templates/blank/docs/errors/CAGE-AUTH-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-BIZ-001.md +51 -0
- package/templates/blank/docs/errors/CAGE-BIZ-002.md +49 -0
- package/templates/blank/docs/errors/CAGE-BUDGET-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-BUDGET-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-BUDGET-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-CMD-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-CMD-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-005.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-006.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-007.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-008.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-009.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-010.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-011.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-012.md +47 -0
- package/templates/blank/docs/errors/CAGE-CONN-013.md +49 -0
- package/templates/blank/docs/errors/CAGE-CONN-014.md +48 -0
- package/templates/blank/docs/errors/CAGE-CONN-015.md +49 -0
- package/templates/blank/docs/errors/CAGE-CREATE-001.md +53 -0
- package/templates/blank/docs/errors/CAGE-DECL-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-DECL-002.md +48 -0
- package/templates/blank/docs/errors/CAGE-DECL-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-DECL-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-DEP-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-DEP-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-DEP-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-DEP-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-DEP-005.md +47 -0
- package/templates/blank/docs/errors/CAGE-DIAG-001.md +53 -0
- package/templates/blank/docs/errors/CAGE-DLQ-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-ENV-001.md +52 -0
- package/templates/blank/docs/errors/CAGE-ENV-002.md +51 -0
- package/templates/blank/docs/errors/CAGE-ENV-003.md +48 -0
- package/templates/blank/docs/errors/CAGE-EVENT-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-EVENT-002.md +50 -0
- package/templates/blank/docs/errors/CAGE-FIELD-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-FIELD-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-FIELD-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-FIELD-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-FILE-001.md +56 -0
- package/templates/blank/docs/errors/CAGE-GEN-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-GEN-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-GEN-003.md +53 -0
- package/templates/blank/docs/errors/CAGE-GRANT-001.md +49 -0
- package/templates/blank/docs/errors/CAGE-GRANT-002.md +48 -0
- package/templates/blank/docs/errors/CAGE-GRANT-003.md +48 -0
- package/templates/blank/docs/errors/CAGE-IMPACT-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-IMPACT-002.md +52 -0
- package/templates/blank/docs/errors/CAGE-INIT-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-INIT-002.md +49 -0
- package/templates/blank/docs/errors/CAGE-INIT-003.md +48 -0
- package/templates/blank/docs/errors/CAGE-INIT-004.md +48 -0
- package/templates/blank/docs/errors/CAGE-INIT-005.md +52 -0
- package/templates/blank/docs/errors/CAGE-JOB-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-JOB-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-JOB-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-LINT-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-MIG-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-MIG-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-MIG-003.md +5 -0
- package/templates/blank/docs/errors/CAGE-MIG-004.md +5 -0
- package/templates/blank/docs/errors/CAGE-MIG-005.md +47 -0
- package/templates/blank/docs/errors/CAGE-NAME-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-NAME-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-NAME-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-NAME-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-NAME-005.md +47 -0
- package/templates/blank/docs/errors/CAGE-NAME-006.md +47 -0
- package/templates/blank/docs/errors/CAGE-ORG-001.md +50 -0
- package/templates/blank/docs/errors/CAGE-PAIR-002.md +51 -0
- package/templates/blank/docs/errors/CAGE-QUERY-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-QUERY-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-QUERY-003.md +50 -0
- package/templates/blank/docs/errors/CAGE-REACT-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-REACT-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-REACT-003.md +50 -0
- package/templates/blank/docs/errors/CAGE-READS-001.md +50 -0
- package/templates/blank/docs/errors/CAGE-REG-001.md +54 -0
- package/templates/blank/docs/errors/CAGE-REG-002.md +49 -0
- package/templates/blank/docs/errors/CAGE-REG-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-REL-001.md +64 -0
- package/templates/blank/docs/errors/CAGE-ROUTE-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-SCOPE-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-SCOPE-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-SECRET-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-SECRET-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-SENS-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-SQL-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-SQL-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-STATE-001.md +49 -0
- package/templates/blank/docs/errors/CAGE-STATE-002.md +47 -0
- package/templates/blank/docs/errors/CAGE-STATE-003.md +47 -0
- package/templates/blank/docs/errors/CAGE-STATE-004.md +47 -0
- package/templates/blank/docs/errors/CAGE-STATE-005.md +49 -0
- package/templates/blank/docs/errors/CAGE-STATE-010.md +48 -0
- package/templates/blank/docs/errors/CAGE-STATE-011.md +48 -0
- package/templates/blank/docs/errors/CAGE-STRUCT-001.md +51 -0
- package/templates/blank/docs/errors/CAGE-STRUCT-002.md +51 -0
- package/templates/blank/docs/errors/CAGE-SYNC-001.md +49 -0
- package/templates/blank/docs/errors/CAGE-TEST-001.md +47 -0
- package/templates/blank/docs/errors/CAGE-TEST-002.md +50 -0
- package/templates/blank/docs/errors/CAGE-TEST-003.md +52 -0
- package/templates/blank/docs/errors/CAGE-UNSAFE-001.md +49 -0
- package/templates/blank/docs/errors/CAGE-UPGRADE-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-WORKER-001.md +48 -0
- package/templates/blank/docs/errors/CAGE-WORKER-002.md +50 -0
- package/templates/blank/docs/errors/CAGE-WORKER-003.md +48 -0
- package/templates/blank/docs/errors/README.md +357 -0
- package/templates/blank/docs/errors/runtime.md +50 -0
- package/templates/blank/docs/examples/purchase-admin/README.md +5 -0
- package/templates/blank/docs/examples/purchase-admin/apps/api/src/main.ts +14 -0
- package/templates/blank/docs/examples/purchase-admin/apps/api/src/worker.ts +17 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/app.tsx +128 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/styles/global.css +743 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/use-session.ts +43 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/workspace-layout.tsx +109 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/main.tsx +18 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/hooks/use-approval-tasks.ts +31 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/index.ts +6 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/pages/approval-tasks-page.tsx +73 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/auth/index.ts +5 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/auth/pages/login-page.tsx +71 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/inventory/index.ts +5 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/inventory/pages/inventory-page.tsx +102 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/approval-history.tsx +32 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/order-attachments.tsx +29 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/purchase-assistant-context.tsx +17 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/purchase-order-form.css +6 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/purchase-order-form.tsx +82 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/index.ts +7 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/lib/presentation.ts +20 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-intelligence.css +15 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-order-detail-page.tsx +154 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-orders-page.tsx +240 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/workspace/index.ts +5 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/workspace/pages/home-page.tsx +44 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/hooks/use-command.ts +42 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/lib/error-message.ts +24 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/lib/navigation.ts +21 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/assistant-markdown.tsx +19 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/assistant-panel.css +134 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/assistant-panel.tsx +200 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/assistant-scope.tsx +72 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/attachment-upload.css +28 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/attachment-upload.tsx +163 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/notice.tsx +20 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/page-heading.tsx +35 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/page-state.css +47 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/page-state.tsx +76 -0
- package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/require-capability.tsx +34 -0
- package/templates/blank/docs/examples/purchase-admin/cage.config.json +123 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/dept/index.ts +74 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/inventory/index.ts +57 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/inventory-lock/index.ts +52 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/purchase-order/index.ts +86 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/role/index.ts +85 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/user/index.ts +89 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/index.ts +87 -0
- package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/queries/index.ts +17 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/index.ts +10 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/integrations/erp.ts +51 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/integrations/intelligence.ts +20 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/inventory/index.ts +3 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/inventory/inventory.ts +55 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/approvals.ts +39 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/index.ts +7 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/intelligence.test.ts +62 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/jobs.ts +18 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.test.ts +146 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.ts +192 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/queries.ts +15 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/workflows/purchase-inventory.ts +30 -0
- package/templates/blank/docs/examples/purchase-admin/packages/domain/src/workflows/purchase-process.ts +42 -0
- package/templates/blank/package.json +22 -0
- package/templates/blank/packages/contracts/package.json +16 -0
- package/templates/blank/packages/contracts/src/aggregates/dept/index.ts +74 -0
- package/templates/blank/packages/contracts/src/aggregates/role/index.ts +85 -0
- package/templates/blank/packages/contracts/src/aggregates/user/index.ts +89 -0
- package/templates/blank/packages/contracts/src/index.ts +55 -0
- package/templates/blank/packages/contracts/src/queries/index.ts +13 -0
- package/templates/blank/packages/contracts/tsconfig.json +5 -0
- package/templates/blank/packages/domain/package.json +24 -0
- package/templates/blank/packages/domain/src/index.ts +5 -0
- package/templates/blank/packages/domain/tsconfig.json +5 -0
- package/templates/blank/pnpm-workspace.yaml +10 -0
- package/templates/blank/renovate.json +5 -0
- package/templates/blank/tsconfig.base.json +8 -0
- package/dist/database.d.ts +0 -5
- package/dist/database.js +0 -70
- package/dist/database.js.map +0 -1
- package/managed/errors/CAGE-APPR-001.md +0 -32
- package/managed/errors/CAGE-APPR-002.md +0 -32
- package/managed/errors/CAGE-APPR-003.md +0 -32
- package/managed/errors/CAGE-APPR-004.md +0 -32
- package/managed/errors/CAGE-APPR-005.md +0 -32
- package/managed/errors/CAGE-APPR-006.md +0 -32
- package/managed/errors/CAGE-APPR-007.md +0 -32
- package/managed/errors/CAGE-APPR-010.md +0 -32
- package/managed/errors/CAGE-AUTH-001.md +0 -32
- package/managed/errors/CAGE-BUDGET-001.md +0 -32
- package/managed/errors/CAGE-BUDGET-002.md +0 -32
- package/managed/errors/CAGE-BUDGET-003.md +0 -32
- package/managed/errors/CAGE-CMD-002.md +0 -32
- package/managed/errors/CAGE-CMD-003.md +0 -34
- package/managed/errors/CAGE-CONN-001.md +0 -32
- package/managed/errors/CAGE-CONN-002.md +0 -32
- package/managed/errors/CAGE-CONN-003.md +0 -32
- package/managed/errors/CAGE-CONN-004.md +0 -32
- package/managed/errors/CAGE-CONN-005.md +0 -32
- package/managed/errors/CAGE-CONN-006.md +0 -32
- package/managed/errors/CAGE-CONN-007.md +0 -32
- package/managed/errors/CAGE-CONN-008.md +0 -32
- package/managed/errors/CAGE-CONN-009.md +0 -32
- package/managed/errors/CAGE-CONN-010.md +0 -32
- package/managed/errors/CAGE-CONN-011.md +0 -32
- package/managed/errors/CAGE-CONN-012.md +0 -32
- package/managed/errors/CAGE-CREATE-001.md +0 -32
- package/managed/errors/CAGE-DECL-001.md +0 -34
- package/managed/errors/CAGE-DECL-002.md +0 -34
- package/managed/errors/CAGE-DECL-003.md +0 -34
- package/managed/errors/CAGE-DECL-004.md +0 -34
- package/managed/errors/CAGE-DEP-001.md +0 -34
- package/managed/errors/CAGE-DEP-002.md +0 -34
- package/managed/errors/CAGE-DEP-003.md +0 -34
- package/managed/errors/CAGE-DEP-004.md +0 -34
- package/managed/errors/CAGE-DEP-005.md +0 -34
- package/managed/errors/CAGE-DLQ-001.md +0 -32
- package/managed/errors/CAGE-ENV-001.md +0 -32
- package/managed/errors/CAGE-EVENT-001.md +0 -32
- package/managed/errors/CAGE-EVENT-002.md +0 -32
- package/managed/errors/CAGE-FIELD-001.md +0 -32
- package/managed/errors/CAGE-FIELD-002.md +0 -32
- package/managed/errors/CAGE-FIELD-003.md +0 -32
- package/managed/errors/CAGE-FIELD-004.md +0 -32
- package/managed/errors/CAGE-GEN-001.md +0 -33
- package/managed/errors/CAGE-GEN-002.md +0 -33
- package/managed/errors/CAGE-GRANT-001.md +0 -32
- package/managed/errors/CAGE-GRANT-002.md +0 -32
- package/managed/errors/CAGE-GRANT-003.md +0 -32
- package/managed/errors/CAGE-IMPACT-001.md +0 -32
- package/managed/errors/CAGE-JOB-001.md +0 -32
- package/managed/errors/CAGE-JOB-002.md +0 -32
- package/managed/errors/CAGE-JOB-003.md +0 -32
- package/managed/errors/CAGE-LINT-001.md +0 -32
- package/managed/errors/CAGE-MIG-001.md +0 -32
- package/managed/errors/CAGE-MIG-002.md +0 -32
- package/managed/errors/CAGE-MIG-003.md +0 -32
- package/managed/errors/CAGE-MIG-004.md +0 -32
- package/managed/errors/CAGE-MIG-005.md +0 -32
- package/managed/errors/CAGE-NAME-001.md +0 -32
- package/managed/errors/CAGE-NAME-002.md +0 -32
- package/managed/errors/CAGE-NAME-003.md +0 -32
- package/managed/errors/CAGE-NAME-004.md +0 -32
- package/managed/errors/CAGE-NAME-005.md +0 -32
- package/managed/errors/CAGE-NAME-006.md +0 -32
- package/managed/errors/CAGE-ORG-001.md +0 -32
- package/managed/errors/CAGE-PAIR-002.md +0 -33
- package/managed/errors/CAGE-QUERY-001.md +0 -32
- package/managed/errors/CAGE-QUERY-002.md +0 -32
- package/managed/errors/CAGE-QUERY-003.md +0 -32
- package/managed/errors/CAGE-REACT-001.md +0 -32
- package/managed/errors/CAGE-REACT-002.md +0 -32
- package/managed/errors/CAGE-READS-001.md +0 -32
- package/managed/errors/CAGE-REG-001.md +0 -32
- package/managed/errors/CAGE-REG-002.md +0 -32
- package/managed/errors/CAGE-REG-003.md +0 -32
- package/managed/errors/CAGE-ROUTE-001.md +0 -32
- package/managed/errors/CAGE-SCOPE-001.md +0 -32
- package/managed/errors/CAGE-SCOPE-002.md +0 -32
- package/managed/errors/CAGE-SECRET-001.md +0 -32
- package/managed/errors/CAGE-SECRET-002.md +0 -32
- package/managed/errors/CAGE-SENS-001.md +0 -32
- package/managed/errors/CAGE-SQL-001.md +0 -32
- package/managed/errors/CAGE-SQL-002.md +0 -32
- package/managed/errors/CAGE-STATE-001.md +0 -32
- package/managed/errors/CAGE-STATE-002.md +0 -32
- package/managed/errors/CAGE-STATE-003.md +0 -32
- package/managed/errors/CAGE-STATE-004.md +0 -32
- package/managed/errors/CAGE-STATE-005.md +0 -32
- package/managed/errors/CAGE-STATE-010.md +0 -32
- package/managed/errors/CAGE-STATE-011.md +0 -32
- package/managed/errors/CAGE-SYNC-001.md +0 -35
- package/managed/errors/CAGE-TEST-001.md +0 -33
- package/managed/errors/CAGE-UNSAFE-001.md +0 -32
- package/managed/errors/CAGE-UPGRADE-001.md +0 -32
- package/managed/errors/README.md +0 -99
- package/templates/app/compose.yaml +0 -39
- package/templates/app/packages/contracts/src/purchase-order.ts +0 -72
- package/templates/app/packages/contracts/src/user.ts +0 -89
- package/templates/app/packages/domain/src/approvals.ts +0 -18
- package/templates/app/packages/domain/src/purchase-order.ts +0 -122
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-JOB-001
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/primitives/flow.ts:190](../../packages/kernel/src/primitives/flow.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
if (!/^[a-z][A-Za-z0-9]*$/.test(name)) throw declError('CAGE-NAME-006', `任务名 ${name} 必须是小驼峰`);
|
|
11
|
-
if (def.cron.trim().split(/\s+/).length < 5) throw declError('CAGE-JOB-001', `任务 ${name} 的 cron 表达式不合法`);
|
|
12
|
-
return Object.freeze({
|
|
13
|
-
[JOB]: true as const,
|
|
14
|
-
name,
|
|
15
|
-
cron: def.cron,
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
校正 cron、reads 和 calls。任务只能读取和调用显式声明的依赖。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
job('expireOrders', { cron: '0 2 * * *', reads: [Order], calls: [cancel], run })
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
calls: [] // run 却调用 cancel
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-JOB-002
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/worker/scheduler.ts:38](../../packages/kernel/src/worker/scheduler.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
async call(cmd: AnyCommand, input: unknown) {
|
|
11
|
-
if (!j.calls.includes(cmd)) throw cageError('FORBIDDEN', { message: `[CAGE-JOB-002] 任务 ${j.name} 调用了未声明的命令` });
|
|
12
|
-
return (await k.execute(cmd, input, ctx)) as any;
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
校正 cron、reads 和 calls。任务只能读取和调用显式声明的依赖。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
job('expireOrders', { cron: '0 2 * * *', reads: [Order], calls: [cancel], run })
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
calls: [] // run 却调用 cancel
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-JOB-003
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/worker/scheduler.ts:28](../../packages/kernel/src/worker/scheduler.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
async list(agg, where = {}, opts = {}) {
|
|
11
|
-
if (!allowedReads.has(agg)) throw new Error(`[CAGE-JOB-003] 任务 ${j.name} 读取了未声明的聚合 ${agg.name}`);
|
|
12
|
-
const { createdBefore, createdAfter, updatedBefore, ...eq } = where as Record<string, any>;
|
|
13
|
-
let q = scopedFind(k.app, agg, ctx, eq, { limit: opts.limit ?? 1000 });
|
|
14
|
-
if (createdBefore) q = q.where('t.created_at', '<', new Date(createdBefore));
|
|
15
|
-
if (createdAfter) q = q.where('t.created_at', '>=', new Date(createdAfter));
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
校正 cron、reads 和 calls。任务只能读取和调用显式声明的依赖。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
job('expireOrders', { cron: '0 2 * * *', reads: [Order], calls: [cancel], run })
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
calls: [] // run 却调用 cancel
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-LINT-001
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/cli/src/verify.ts:95](../../packages/cli/src/verify.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
f.messages.map((m): Finding => ({
|
|
11
|
-
code: /\[(CAGE-[\w-]+)\]/.exec(m.message)?.[1] ?? 'CAGE-LINT-001',
|
|
12
|
-
at: `${f.filePath}:${m.line}`,
|
|
13
|
-
reason: m.message,
|
|
14
|
-
severity: m.severity === 1 ? 'warning' : 'error',
|
|
15
|
-
})),
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
根据输出中的 ruleId 修复语法或规则问题,再重跑 verify。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
pnpm cage verify
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
// 用禁用 lint 代替修复业务边界
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-MIG-001
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/db/migrate.ts:84](../../packages/kernel/src/db/migrate.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
await client.query('rollback');
|
|
11
|
-
throw new Error(`[CAGE-MIG-001] 迁移 ${m.name} 失败:${(e as Error).message}`);
|
|
12
|
-
}
|
|
13
|
-
applied.push(m.name);
|
|
14
|
-
}
|
|
15
|
-
// 安全层每次整体重建
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
核对迁移 SQL、账号权限和目标数据库。初始化只用于独立新集群,已发布迁移不可重写。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
pnpm cage migrate
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
// 用 cage_read 执行建表或覆盖已有集群角色密码
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-MIG-002
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/db/migrate.ts:96](../../packages/kernel/src/db/migrate.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
await client.query('rollback');
|
|
11
|
-
throw new Error(`[CAGE-MIG-002] 重建安全层失败:${(e as Error).message}`);
|
|
12
|
-
}
|
|
13
|
-
log('安全层已重建');
|
|
14
|
-
return { applied, safeLayerRebuilt: true };
|
|
15
|
-
} finally {
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
核对迁移 SQL、账号权限和目标数据库。初始化只用于独立新集群,已发布迁移不可重写。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
pnpm cage migrate
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
// 用 cage_read 执行建表或覆盖已有集群角色密码
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-MIG-003
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/cli/src/migrate.ts:15](../../packages/cli/src/migrate.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
if (!/^[a-z][a-z0-9_]{0,62}$/.test(name))
|
|
11
|
-
throw new Error('[CAGE-MIG-003] 数据库名只允许小写字母、数字和下划线,以字母开头');
|
|
12
|
-
const admin = new pg.Client({ connectionString: superUrl });
|
|
13
|
-
await admin.connect();
|
|
14
|
-
try {
|
|
15
|
-
if (!(await admin.query('select 1 from pg_database where datname = $1', [name])).rowCount)
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
核对迁移 SQL、账号权限和目标数据库。初始化只用于独立新集群,已发布迁移不可重写。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
pnpm cage migrate
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
// 用 cage_read 执行建表或覆盖已有集群角色密码
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-MIG-004
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/cli/src/migrate.ts:35](../../packages/cli/src/migrate.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
throw new Error(
|
|
11
|
-
'[CAGE-MIG-004] 集群已有 cage 账号,拒绝覆盖密码;请复用已初始化的库或使用独立 PostgreSQL 集群',
|
|
12
|
-
);
|
|
13
|
-
}
|
|
14
|
-
await db.query('begin');
|
|
15
|
-
await db.query(bootstrapSql(passwords, name));
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
核对迁移 SQL、账号权限和目标数据库。初始化只用于独立新集群,已发布迁移不可重写。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
pnpm cage migrate
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
// 用 cage_read 执行建表或覆盖已有集群角色密码
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-MIG-005
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/db/migrate.ts:71](../../packages/kernel/src/db/migrate.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
if (done.has(migration.name) && done.get(migration.name) !== checksum(migration.sql)) {
|
|
11
|
-
throw new Error(`[CAGE-MIG-005] 已执行迁移 ${migration.name} 的内容被修改,请恢复原文件并新增迁移`);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
for (const m of all) {
|
|
15
|
-
if (done.has(m.name)) continue;
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
恢复已经执行的迁移文件,不要修改数据库中的校验和来绕过检查。需要变更结构时新增迁移;若仅受换行转换影响,恢复原始文件字节并使用仓库的 LF 约定。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
保留 0001_init.sql,新增 0002_add_field.sql,再运行 cage migrate
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
修改已执行的 0001_init.sql,或手工重写迁移历史的 checksum
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-NAME-001
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/primitives/aggregate.ts:72](../../packages/kernel/src/primitives/aggregate.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
if (!/^[A-Z][A-Za-z0-9]*$/.test(name)) {
|
|
11
|
-
throw declError('CAGE-NAME-001', `聚合名 ${name} 必须是大驼峰`);
|
|
12
|
-
}
|
|
13
|
-
let st: StatesDef<any> | undefined = def.states;
|
|
14
|
-
const fields: Record<string, AnyField> = {};
|
|
15
|
-
for (const [k, v] of Object.entries(def.fields)) {
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
聚合、事件使用大驼峰;命令、任务和查询使用小驼峰,且同类名称唯一。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
aggregate('PurchaseOrder', definition);
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
aggregate('purchase-order', definition);
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-NAME-002
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/primitives/aggregate.ts:87](../../packages/kernel/src/primitives/aggregate.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
}
|
|
11
|
-
if (!/^[a-z][A-Za-z0-9]*$/.test(k)) throw declError('CAGE-NAME-002', `字段名 ${name}.${k} 必须是小驼峰`);
|
|
12
|
-
fields[k] = v;
|
|
13
|
-
}
|
|
14
|
-
const states = st ?? DEFAULT_STATES;
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
聚合、事件使用大驼峰;命令、任务和查询使用小驼峰,且同类名称唯一。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
aggregate('PurchaseOrder', definition);
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
aggregate('purchase-order', definition);
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-NAME-003
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/primitives/event.ts:19](../../packages/kernel/src/primitives/event.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
export function event<const N extends string, F extends Fields>(name: N, fields: F, opts?: { description?: string }): Event<N, F> {
|
|
11
|
-
if (!/^[A-Z][A-Za-z0-9]*$/.test(name)) throw declError('CAGE-NAME-003', `事件名 ${name} 必须是大驼峰`);
|
|
12
|
-
return Object.freeze({
|
|
13
|
-
[EVENT]: true as const,
|
|
14
|
-
name,
|
|
15
|
-
fields: Object.freeze({ ...fields }),
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
聚合、事件使用大驼峰;命令、任务和查询使用小驼峰,且同类名称唯一。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
aggregate('PurchaseOrder', definition);
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
aggregate('purchase-order', definition);
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-NAME-004
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/primitives/command.ts:145](../../packages/kernel/src/primitives/command.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
if (def.name !== undefined && !/^[a-z][A-Za-z0-9]*$/.test(def.name)) {
|
|
11
|
-
throw declError('CAGE-NAME-004', `命令名 ${def.name} 必须是小驼峰`);
|
|
12
|
-
}
|
|
13
|
-
return Object.freeze({
|
|
14
|
-
[COMMAND]: true as const,
|
|
15
|
-
agg,
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
聚合、事件使用大驼峰;命令、任务和查询使用小驼峰,且同类名称唯一。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
aggregate('PurchaseOrder', definition);
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
aggregate('purchase-order', definition);
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-NAME-005
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/primitives/flow.ts:88](../../packages/kernel/src/primitives/flow.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
): Query<I> {
|
|
11
|
-
if (!/^[a-z][A-Za-z0-9]*$/.test(name)) throw declError('CAGE-NAME-005', `查询名 ${name} 必须是小驼峰`);
|
|
12
|
-
if (!def.sql === !def.build) throw declError('CAGE-QUERY-001', `查询 ${name} 必须二选一:sql 或 build`);
|
|
13
|
-
if (def.sql && /\bcore\.|\bsys\./i.test(def.sql)) {
|
|
14
|
-
throw declError('CAGE-QUERY-002', `查询 ${name} 引用了基表,只能引用 safe.* 安全视图`);
|
|
15
|
-
}
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
聚合、事件使用大驼峰;命令、任务和查询使用小驼峰,且同类名称唯一。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
aggregate('PurchaseOrder', definition);
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
aggregate('purchase-order', definition);
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-NAME-006
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/primitives/flow.ts:189](../../packages/kernel/src/primitives/flow.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
): Job {
|
|
11
|
-
if (!/^[a-z][A-Za-z0-9]*$/.test(name)) throw declError('CAGE-NAME-006', `任务名 ${name} 必须是小驼峰`);
|
|
12
|
-
if (def.cron.trim().split(/\s+/).length < 5) throw declError('CAGE-JOB-001', `任务 ${name} 的 cron 表达式不合法`);
|
|
13
|
-
return Object.freeze({
|
|
14
|
-
[JOB]: true as const,
|
|
15
|
-
name,
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
聚合、事件使用大驼峰;命令、任务和查询使用小驼峰,且同类名称唯一。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
aggregate('PurchaseOrder', definition);
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
aggregate('purchase-order', definition);
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-ORG-001
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/cli/src/rules.ts:211](../../packages/cli/src/rules.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
|
|
11
|
-
/** CAGE-ORG-001:domain 必须包含框架自带的组织模型 */
|
|
12
|
-
export function checkOrg(g: Ontology): Finding[] {
|
|
13
|
-
const has = (id: string) => g.nodes.some((n) => n.kind === 'aggregate' && n.id === id);
|
|
14
|
-
return has('User') && has('Dept') && has('Role')
|
|
15
|
-
? []
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
从 domain 入口导出框架组织模型。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
export * from '@yss123/cage-admin/domain';
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
// domain 入口只导出业务聚合,遗漏组织模型
|
|
32
|
-
```
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# CAGE-PAIR-002
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/cli/src/rules.ts:43](../../packages/cli/src/rules.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
|
|
11
|
-
/** CAGE-PAIR-002:进入某状态时获得了资源,从该状态出发的每一条迁移都必须释放它,或进入一个同样持有它的状态 */
|
|
12
|
-
export function checkPairing(g: Ontology): Finding[] {
|
|
13
|
-
const { get } = index(g);
|
|
14
|
-
const findings: Finding[] = [];
|
|
15
|
-
const held = statesHoldingResources(g);
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
离开持有资源的状态时,发出事件并声明释放该资源的反应;检查每一条离开路径。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
reaction(OrderCancelled, { command: releaseLock, releases: 'inventory.lock', map: e => ({ id: e.orderId }) });
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
// approved 持有 inventory.lock,取消却没有 releases 反应
|
|
32
|
-
command(PurchaseOrder, { from: 'approved', to: 'cancelled', handler: o => o });
|
|
33
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-QUERY-001
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/primitives/flow.ts:89](../../packages/kernel/src/primitives/flow.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
if (!/^[a-z][A-Za-z0-9]*$/.test(name)) throw declError('CAGE-NAME-005', `查询名 ${name} 必须是小驼峰`);
|
|
11
|
-
if (!def.sql === !def.build) throw declError('CAGE-QUERY-001', `查询 ${name} 必须二选一:sql 或 build`);
|
|
12
|
-
if (def.sql && /\bcore\.|\bsys\./i.test(def.sql)) {
|
|
13
|
-
throw declError('CAGE-QUERY-002', `查询 ${name} 引用了基表,只能引用 safe.* 安全视图`);
|
|
14
|
-
}
|
|
15
|
-
return Object.freeze({
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
SQL 引用 reads 对应的 safe 视图,用命名参数绑定输入。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
reads: [PurchaseOrder], sql: 'select amount from safe.purchase_order where status = :status'
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
sql: 'select * from core.purchase_order'
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-QUERY-002
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/kernel/src/primitives/flow.ts:91](../../packages/kernel/src/primitives/flow.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
if (def.sql && /\bcore\.|\bsys\./i.test(def.sql)) {
|
|
11
|
-
throw declError('CAGE-QUERY-002', `查询 ${name} 引用了基表,只能引用 safe.* 安全视图`);
|
|
12
|
-
}
|
|
13
|
-
return Object.freeze({
|
|
14
|
-
[QUERY]: true as const,
|
|
15
|
-
name,
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
SQL 引用 reads 对应的 safe 视图,用命名参数绑定输入。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
reads: [PurchaseOrder], sql: 'select amount from safe.purchase_order where status = :status'
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
sql: 'select * from core.purchase_order'
|
|
32
|
-
```
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# CAGE-QUERY-003
|
|
2
|
-
|
|
3
|
-
## 什么时候出现
|
|
4
|
-
|
|
5
|
-
命中以下实现中的检查时触发。终端会附具体声明位置、原因和修复方法。
|
|
6
|
-
|
|
7
|
-
来源:[packages/cli/src/rules.ts:168](../../packages/cli/src/rules.ts)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
|
|
11
|
-
/** CAGE-QUERY-003:手写 SQL 只能引用 reads 里聚合的安全视图 */
|
|
12
|
-
export function checkQueries(g: Ontology): Finding[] {
|
|
13
|
-
const { get } = index(g);
|
|
14
|
-
const findings: Finding[] = [];
|
|
15
|
-
for (const q of g.nodes.filter((n) => n.kind === 'query')) {
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 怎么修
|
|
19
|
-
|
|
20
|
-
SQL 引用 reads 对应的 safe 视图,用命名参数绑定输入。
|
|
21
|
-
|
|
22
|
-
## 正例
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
reads: [PurchaseOrder], sql: 'select amount from safe.purchase_order where status = :status'
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 反例
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
sql: 'select * from core.purchase_order'
|
|
32
|
-
```
|