@yss123/cage-cli 0.3.1 → 0.4.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.
Files changed (388) hide show
  1. package/README.md +7 -3
  2. package/dist/analyze.js +3 -0
  3. package/dist/analyze.js.map +1 -1
  4. package/dist/capabilities.js +50 -40
  5. package/dist/capabilities.js.map +1 -1
  6. package/dist/config.d.ts +4 -0
  7. package/dist/config.js.map +1 -1
  8. package/dist/context.js +2 -2
  9. package/dist/context.js.map +1 -1
  10. package/dist/doctor.js +1 -1
  11. package/dist/doctor.js.map +1 -1
  12. package/dist/findings.d.ts +1 -1
  13. package/dist/findings.js +2 -2
  14. package/dist/findings.js.map +1 -1
  15. package/dist/graph-business.d.ts +11 -8
  16. package/dist/graph-business.js +16 -16
  17. package/dist/graph-business.js.map +1 -1
  18. package/dist/graph-relations.js +3 -5
  19. package/dist/graph-relations.js.map +1 -1
  20. package/dist/impact.js +1 -4
  21. package/dist/impact.js.map +1 -1
  22. package/dist/main.js +1 -1
  23. package/dist/main.js.map +1 -1
  24. package/dist/ontology-names.d.ts +17 -0
  25. package/dist/ontology-names.js +42 -0
  26. package/dist/ontology-names.js.map +1 -0
  27. package/dist/project-structure.js +2 -2
  28. package/dist/project-structure.js.map +1 -1
  29. package/dist/sync.d.ts +5 -1
  30. package/dist/sync.js +45 -121
  31. package/dist/sync.js.map +1 -1
  32. package/graph-ui/app.js +3 -2
  33. package/graph-ui/business.js +11 -3
  34. package/graph-ui/graph-business.js +16 -16
  35. package/graph-ui/graph-relations.js +3 -5
  36. package/package.json +6 -6
  37. package/templates/app/.agents/skills/cage-development/SKILL.md +10 -0
  38. package/templates/app/AGENTS.md +42 -122
  39. package/templates/app/CLAUDE.md +6 -0
  40. package/templates/app/README.md +6 -6
  41. package/templates/app/apps/api/package.json +2 -2
  42. package/templates/app/apps/web/package.json +3 -1
  43. package/templates/app/apps/web/src/app/styles/global.css +12 -11
  44. package/templates/app/apps/web/src/main.tsx +18 -7
  45. package/templates/app/apps/web/src/shared/lib/error-message.ts +1 -1
  46. package/templates/app/apps/web/src/shared/ui/approval-member-picker.tsx +1 -1
  47. package/templates/app/cage.config.json +2 -1
  48. package/templates/app/docs/README.md +13 -0
  49. package/templates/app/docs/development/README.md +80 -0
  50. package/templates/app/docs/development/examples/note/note-detail-page.tsx +106 -0
  51. package/templates/app/docs/development/examples/note/note.ts +71 -0
  52. package/templates/app/docs/development/examples/note/notes-page.tsx +87 -0
  53. package/templates/{blank/docs/ai → app/docs/development/examples}/purchase-example.md +10 -10
  54. package/templates/{blank/docs/ai → app/docs/development/getting-started}/architecture.md +9 -9
  55. package/templates/app/docs/development/getting-started/first-feature.md +66 -0
  56. package/templates/{blank/docs/ai → app/docs/development/getting-started}/workflow.md +22 -27
  57. package/templates/app/docs/{ai → development/guides}/approvals.md +19 -9
  58. package/templates/app/docs/development/guides/business-collaboration.md +65 -0
  59. package/templates/{blank/docs/ai → app/docs/development/guides}/files.md +5 -1
  60. package/templates/app/docs/development/guides/frontend-ui.md +30 -0
  61. package/templates/app/docs/{ai → development/guides}/intelligence.md +18 -16
  62. package/templates/app/docs/development/guides/ontology-modeling.md +83 -0
  63. package/templates/app/docs/development/guides/recipes.md +123 -0
  64. package/templates/app/docs/{ai → development/guides}/relations.md +33 -10
  65. package/templates/{blank/docs/ai → app/docs/development/guides}/routing.md +1 -1
  66. package/templates/app/docs/{ai → development/guides}/transfers.md +1 -1
  67. package/templates/{blank/docs/ai → app/docs/development/reference}/commenting.md +8 -5
  68. package/templates/app/docs/{ai → development/reference}/primitives.md +12 -64
  69. package/templates/app/docs/{ai → development/reference}/project-structure.md +2 -2
  70. package/templates/app/docs/development/skills/cage-development/SKILL.md +144 -0
  71. package/templates/{blank/docs/ai → app/docs/development/tools}/diagnostics.md +7 -4
  72. package/templates/{blank/docs/ai → app/docs/development/tools}/ontology-context.md +4 -4
  73. package/templates/app/docs/{ai → development/tools}/troubleshooting.md +10 -4
  74. package/templates/app/docs/errors/CAGE-AI-001.md +1 -1
  75. package/templates/app/docs/errors/CAGE-APPR-001.md +2 -2
  76. package/templates/app/docs/errors/CAGE-APPR-002.md +1 -1
  77. package/templates/app/docs/errors/CAGE-APPR-003.md +1 -1
  78. package/templates/app/docs/errors/CAGE-APPR-004.md +1 -1
  79. package/templates/app/docs/errors/CAGE-APPR-005.md +1 -1
  80. package/templates/app/docs/errors/CAGE-APPR-006.md +1 -1
  81. package/templates/app/docs/errors/CAGE-APPR-007.md +2 -2
  82. package/templates/app/docs/errors/CAGE-APPR-010.md +1 -1
  83. package/templates/app/docs/errors/CAGE-AUDIT-001.md +1 -1
  84. package/templates/app/docs/errors/CAGE-AUTH-001.md +1 -1
  85. package/templates/app/docs/errors/CAGE-BIZ-001.md +1 -1
  86. package/templates/app/docs/errors/CAGE-BIZ-002.md +1 -1
  87. package/templates/app/docs/errors/CAGE-BUDGET-001.md +1 -1
  88. package/templates/app/docs/errors/CAGE-BUDGET-002.md +1 -1
  89. package/templates/app/docs/errors/CAGE-BUDGET-003.md +1 -1
  90. package/templates/app/docs/errors/CAGE-CMD-002.md +1 -1
  91. package/templates/app/docs/errors/CAGE-CMD-003.md +1 -1
  92. package/templates/app/docs/errors/CAGE-CONN-001.md +1 -1
  93. package/templates/app/docs/errors/CAGE-CONN-002.md +1 -1
  94. package/templates/app/docs/errors/CAGE-CONN-003.md +1 -1
  95. package/templates/app/docs/errors/CAGE-CONN-004.md +1 -1
  96. package/templates/app/docs/errors/CAGE-CONN-005.md +1 -1
  97. package/templates/app/docs/errors/CAGE-CONN-006.md +1 -1
  98. package/templates/app/docs/errors/CAGE-CONN-007.md +1 -1
  99. package/templates/app/docs/errors/CAGE-CONN-008.md +1 -1
  100. package/templates/app/docs/errors/CAGE-CONN-009.md +1 -1
  101. package/templates/app/docs/errors/CAGE-CONN-010.md +1 -1
  102. package/templates/app/docs/errors/CAGE-CONN-011.md +1 -1
  103. package/templates/app/docs/errors/CAGE-CONN-012.md +1 -1
  104. package/templates/app/docs/errors/CAGE-CONN-013.md +1 -1
  105. package/templates/app/docs/errors/CAGE-CONN-014.md +1 -1
  106. package/templates/app/docs/errors/CAGE-CONN-015.md +1 -1
  107. package/templates/app/docs/errors/CAGE-CREATE-001.md +2 -2
  108. package/templates/app/docs/errors/CAGE-DECL-001.md +1 -1
  109. package/templates/app/docs/errors/CAGE-DECL-002.md +1 -1
  110. package/templates/app/docs/errors/CAGE-DECL-003.md +1 -1
  111. package/templates/app/docs/errors/CAGE-DECL-004.md +1 -1
  112. package/templates/app/docs/errors/CAGE-DEP-001.md +1 -1
  113. package/templates/app/docs/errors/CAGE-DEP-002.md +1 -1
  114. package/templates/app/docs/errors/CAGE-DEP-003.md +1 -1
  115. package/templates/app/docs/errors/CAGE-DEP-004.md +1 -1
  116. package/templates/app/docs/errors/CAGE-DEP-005.md +1 -1
  117. package/templates/app/docs/errors/CAGE-DIAG-001.md +1 -1
  118. package/templates/app/docs/errors/CAGE-DLQ-001.md +1 -1
  119. package/templates/app/docs/errors/CAGE-ENV-001.md +1 -1
  120. package/templates/app/docs/errors/CAGE-ENV-002.md +1 -1
  121. package/templates/app/docs/errors/CAGE-ENV-003.md +1 -1
  122. package/templates/app/docs/errors/CAGE-EVENT-001.md +1 -1
  123. package/templates/app/docs/errors/CAGE-EVENT-002.md +1 -1
  124. package/templates/app/docs/errors/CAGE-FIELD-001.md +1 -1
  125. package/templates/app/docs/errors/CAGE-FIELD-002.md +1 -1
  126. package/templates/app/docs/errors/CAGE-FIELD-003.md +1 -1
  127. package/templates/app/docs/errors/CAGE-FIELD-004.md +1 -1
  128. package/templates/app/docs/errors/CAGE-FILE-001.md +1 -1
  129. package/templates/app/docs/errors/CAGE-GEN-001.md +1 -1
  130. package/templates/app/docs/errors/CAGE-GEN-002.md +1 -1
  131. package/templates/app/docs/errors/CAGE-GEN-003.md +1 -1
  132. package/templates/app/docs/errors/CAGE-GRANT-001.md +19 -13
  133. package/templates/app/docs/errors/CAGE-GRANT-002.md +3 -3
  134. package/templates/app/docs/errors/CAGE-GRANT-003.md +4 -4
  135. package/templates/app/docs/errors/CAGE-IMPACT-001.md +1 -1
  136. package/templates/app/docs/errors/CAGE-IMPACT-002.md +1 -1
  137. package/templates/app/docs/errors/CAGE-INIT-001.md +1 -1
  138. package/templates/app/docs/errors/CAGE-INIT-002.md +1 -1
  139. package/templates/app/docs/errors/CAGE-INIT-003.md +1 -1
  140. package/templates/app/docs/errors/CAGE-INIT-004.md +1 -1
  141. package/templates/app/docs/errors/CAGE-INIT-005.md +1 -1
  142. package/templates/app/docs/errors/CAGE-JOB-001.md +1 -1
  143. package/templates/app/docs/errors/CAGE-JOB-002.md +1 -1
  144. package/templates/app/docs/errors/CAGE-JOB-003.md +1 -1
  145. package/templates/app/docs/errors/CAGE-LINT-001.md +1 -1
  146. package/templates/app/docs/errors/CAGE-MIG-001.md +1 -1
  147. package/templates/app/docs/errors/CAGE-MIG-002.md +1 -1
  148. package/templates/app/docs/errors/CAGE-MIG-005.md +1 -1
  149. package/templates/app/docs/errors/CAGE-NAME-001.md +1 -1
  150. package/templates/app/docs/errors/CAGE-NAME-002.md +1 -1
  151. package/templates/app/docs/errors/CAGE-NAME-003.md +1 -1
  152. package/templates/app/docs/errors/CAGE-NAME-004.md +1 -1
  153. package/templates/app/docs/errors/CAGE-NAME-005.md +1 -1
  154. package/templates/app/docs/errors/CAGE-NAME-006.md +1 -1
  155. package/templates/app/docs/errors/CAGE-ONTOLOGY-001.md +52 -0
  156. package/templates/app/docs/errors/CAGE-ORG-001.md +1 -1
  157. package/templates/app/docs/errors/CAGE-PAIR-002.md +1 -1
  158. package/templates/app/docs/errors/CAGE-QUERY-001.md +1 -1
  159. package/templates/app/docs/errors/CAGE-QUERY-002.md +1 -1
  160. package/templates/app/docs/errors/CAGE-QUERY-003.md +1 -1
  161. package/templates/app/docs/errors/CAGE-REACT-001.md +1 -1
  162. package/templates/app/docs/errors/CAGE-REACT-002.md +1 -1
  163. package/templates/app/docs/errors/CAGE-REACT-003.md +1 -1
  164. package/templates/app/docs/errors/CAGE-READS-001.md +1 -1
  165. package/templates/app/docs/errors/CAGE-REG-001.md +1 -1
  166. package/templates/app/docs/errors/CAGE-REG-002.md +1 -1
  167. package/templates/app/docs/errors/CAGE-REG-003.md +1 -1
  168. package/templates/app/docs/errors/CAGE-REL-001.md +1 -1
  169. package/templates/app/docs/errors/CAGE-ROUTE-001.md +1 -1
  170. package/templates/app/docs/errors/CAGE-SCOPE-001.md +1 -1
  171. package/templates/app/docs/errors/CAGE-SCOPE-002.md +1 -1
  172. package/templates/app/docs/errors/CAGE-SECRET-001.md +1 -1
  173. package/templates/app/docs/errors/CAGE-SECRET-002.md +1 -1
  174. package/templates/app/docs/errors/CAGE-SENS-001.md +1 -1
  175. package/templates/app/docs/errors/CAGE-SQL-001.md +1 -1
  176. package/templates/app/docs/errors/CAGE-SQL-002.md +1 -1
  177. package/templates/app/docs/errors/CAGE-STATE-001.md +1 -1
  178. package/templates/app/docs/errors/CAGE-STATE-002.md +1 -1
  179. package/templates/app/docs/errors/CAGE-STATE-003.md +2 -2
  180. package/templates/app/docs/errors/CAGE-STATE-004.md +1 -1
  181. package/templates/app/docs/errors/CAGE-STATE-005.md +1 -1
  182. package/templates/app/docs/errors/CAGE-STATE-010.md +1 -1
  183. package/templates/app/docs/errors/CAGE-STATE-011.md +1 -1
  184. package/templates/app/docs/errors/CAGE-STRUCT-001.md +4 -4
  185. package/templates/app/docs/errors/CAGE-STRUCT-002.md +3 -3
  186. package/templates/app/docs/errors/CAGE-SYNC-001.md +4 -4
  187. package/templates/app/docs/errors/CAGE-TEST-001.md +1 -1
  188. package/templates/app/docs/errors/CAGE-TEST-002.md +1 -1
  189. package/templates/app/docs/errors/CAGE-TEST-003.md +1 -1
  190. package/templates/app/docs/errors/CAGE-UNSAFE-001.md +1 -1
  191. package/templates/app/docs/errors/CAGE-UPGRADE-001.md +1 -1
  192. package/templates/app/docs/errors/CAGE-WORKER-001.md +1 -1
  193. package/templates/app/docs/errors/CAGE-WORKER-002.md +1 -1
  194. package/templates/app/docs/errors/CAGE-WORKER-003.md +1 -1
  195. package/templates/app/docs/errors/README.md +8 -2
  196. package/templates/app/docs/errors/runtime.md +2 -2
  197. package/templates/app/package.json +3 -3
  198. package/templates/app/packages/contracts/package.json +1 -1
  199. package/templates/app/packages/contracts/src/aggregates/role/index.ts +2 -2
  200. package/templates/app/packages/contracts/src/aggregates/user/index.ts +3 -3
  201. package/templates/app/packages/domain/package.json +5 -5
  202. package/templates/app/packages/domain/src/modules/purchase/approval-members.ts +1 -1
  203. package/templates/app/packages/domain/src/modules/purchase/approvals.ts +2 -2
  204. package/templates/app/packages/domain/src/modules/purchase/intelligence.test.ts +4 -4
  205. package/templates/app/packages/domain/src/modules/purchase/purchase-order.test.ts +10 -17
  206. package/templates/app/packages/domain/src/modules/purchase/purchase-order.ts +4 -5
  207. package/templates/app/packages/domain/src/workflows/purchase-process.ts +1 -1
  208. package/templates/blank/.agents/skills/cage-development/SKILL.md +10 -0
  209. package/templates/blank/AGENTS.md +42 -122
  210. package/templates/blank/CLAUDE.md +6 -0
  211. package/templates/blank/README.md +3 -3
  212. package/templates/blank/apps/api/package.json +1 -1
  213. package/templates/blank/apps/web/package.json +3 -1
  214. package/templates/blank/apps/web/src/app/styles/global.css +6 -5
  215. package/templates/blank/apps/web/src/main.tsx +18 -7
  216. package/templates/blank/cage.config.json +1 -0
  217. package/templates/blank/docs/README.md +13 -0
  218. package/templates/blank/docs/development/README.md +80 -0
  219. package/templates/blank/docs/development/examples/note/note-detail-page.tsx +106 -0
  220. package/templates/blank/docs/development/examples/note/note.ts +71 -0
  221. package/templates/blank/docs/development/examples/note/notes-page.tsx +87 -0
  222. package/templates/{app/docs/ai → blank/docs/development/examples}/purchase-example.md +10 -10
  223. package/templates/{app/docs/ai → blank/docs/development/getting-started}/architecture.md +9 -9
  224. package/templates/blank/docs/development/getting-started/first-feature.md +66 -0
  225. package/templates/{app/docs/ai → blank/docs/development/getting-started}/workflow.md +22 -27
  226. package/templates/blank/docs/{ai → development/guides}/approvals.md +19 -9
  227. package/templates/blank/docs/development/guides/business-collaboration.md +65 -0
  228. package/templates/{app/docs/ai → blank/docs/development/guides}/files.md +5 -1
  229. package/templates/blank/docs/development/guides/frontend-ui.md +30 -0
  230. package/templates/blank/docs/{ai → development/guides}/intelligence.md +18 -16
  231. package/templates/blank/docs/development/guides/ontology-modeling.md +83 -0
  232. package/templates/blank/docs/development/guides/recipes.md +123 -0
  233. package/templates/blank/docs/{ai → development/guides}/relations.md +33 -10
  234. package/templates/{app/docs/ai → blank/docs/development/guides}/routing.md +1 -1
  235. package/templates/blank/docs/{ai → development/guides}/transfers.md +1 -1
  236. package/templates/{app/docs/ai → blank/docs/development/reference}/commenting.md +8 -5
  237. package/templates/blank/docs/{ai → development/reference}/primitives.md +12 -64
  238. package/templates/blank/docs/{ai → development/reference}/project-structure.md +2 -2
  239. package/templates/blank/docs/development/skills/cage-development/SKILL.md +144 -0
  240. package/templates/{app/docs/ai → blank/docs/development/tools}/diagnostics.md +7 -4
  241. package/templates/{app/docs/ai → blank/docs/development/tools}/ontology-context.md +4 -4
  242. package/templates/blank/docs/{ai → development/tools}/troubleshooting.md +10 -4
  243. package/templates/blank/docs/errors/CAGE-AI-001.md +1 -1
  244. package/templates/blank/docs/errors/CAGE-APPR-001.md +2 -2
  245. package/templates/blank/docs/errors/CAGE-APPR-002.md +1 -1
  246. package/templates/blank/docs/errors/CAGE-APPR-003.md +1 -1
  247. package/templates/blank/docs/errors/CAGE-APPR-004.md +1 -1
  248. package/templates/blank/docs/errors/CAGE-APPR-005.md +1 -1
  249. package/templates/blank/docs/errors/CAGE-APPR-006.md +1 -1
  250. package/templates/blank/docs/errors/CAGE-APPR-007.md +2 -2
  251. package/templates/blank/docs/errors/CAGE-APPR-010.md +1 -1
  252. package/templates/blank/docs/errors/CAGE-AUDIT-001.md +1 -1
  253. package/templates/blank/docs/errors/CAGE-AUTH-001.md +1 -1
  254. package/templates/blank/docs/errors/CAGE-BIZ-001.md +1 -1
  255. package/templates/blank/docs/errors/CAGE-BIZ-002.md +1 -1
  256. package/templates/blank/docs/errors/CAGE-BUDGET-001.md +1 -1
  257. package/templates/blank/docs/errors/CAGE-BUDGET-002.md +1 -1
  258. package/templates/blank/docs/errors/CAGE-BUDGET-003.md +1 -1
  259. package/templates/blank/docs/errors/CAGE-CMD-002.md +1 -1
  260. package/templates/blank/docs/errors/CAGE-CMD-003.md +1 -1
  261. package/templates/blank/docs/errors/CAGE-CONN-001.md +1 -1
  262. package/templates/blank/docs/errors/CAGE-CONN-002.md +1 -1
  263. package/templates/blank/docs/errors/CAGE-CONN-003.md +1 -1
  264. package/templates/blank/docs/errors/CAGE-CONN-004.md +1 -1
  265. package/templates/blank/docs/errors/CAGE-CONN-005.md +1 -1
  266. package/templates/blank/docs/errors/CAGE-CONN-006.md +1 -1
  267. package/templates/blank/docs/errors/CAGE-CONN-007.md +1 -1
  268. package/templates/blank/docs/errors/CAGE-CONN-008.md +1 -1
  269. package/templates/blank/docs/errors/CAGE-CONN-009.md +1 -1
  270. package/templates/blank/docs/errors/CAGE-CONN-010.md +1 -1
  271. package/templates/blank/docs/errors/CAGE-CONN-011.md +1 -1
  272. package/templates/blank/docs/errors/CAGE-CONN-012.md +1 -1
  273. package/templates/blank/docs/errors/CAGE-CONN-013.md +1 -1
  274. package/templates/blank/docs/errors/CAGE-CONN-014.md +1 -1
  275. package/templates/blank/docs/errors/CAGE-CONN-015.md +1 -1
  276. package/templates/blank/docs/errors/CAGE-CREATE-001.md +2 -2
  277. package/templates/blank/docs/errors/CAGE-DECL-001.md +1 -1
  278. package/templates/blank/docs/errors/CAGE-DECL-002.md +1 -1
  279. package/templates/blank/docs/errors/CAGE-DECL-003.md +1 -1
  280. package/templates/blank/docs/errors/CAGE-DECL-004.md +1 -1
  281. package/templates/blank/docs/errors/CAGE-DEP-001.md +1 -1
  282. package/templates/blank/docs/errors/CAGE-DEP-002.md +1 -1
  283. package/templates/blank/docs/errors/CAGE-DEP-003.md +1 -1
  284. package/templates/blank/docs/errors/CAGE-DEP-004.md +1 -1
  285. package/templates/blank/docs/errors/CAGE-DEP-005.md +1 -1
  286. package/templates/blank/docs/errors/CAGE-DIAG-001.md +1 -1
  287. package/templates/blank/docs/errors/CAGE-DLQ-001.md +1 -1
  288. package/templates/blank/docs/errors/CAGE-ENV-001.md +1 -1
  289. package/templates/blank/docs/errors/CAGE-ENV-002.md +1 -1
  290. package/templates/blank/docs/errors/CAGE-ENV-003.md +1 -1
  291. package/templates/blank/docs/errors/CAGE-EVENT-001.md +1 -1
  292. package/templates/blank/docs/errors/CAGE-EVENT-002.md +1 -1
  293. package/templates/blank/docs/errors/CAGE-FIELD-001.md +1 -1
  294. package/templates/blank/docs/errors/CAGE-FIELD-002.md +1 -1
  295. package/templates/blank/docs/errors/CAGE-FIELD-003.md +1 -1
  296. package/templates/blank/docs/errors/CAGE-FIELD-004.md +1 -1
  297. package/templates/blank/docs/errors/CAGE-FILE-001.md +1 -1
  298. package/templates/blank/docs/errors/CAGE-GEN-001.md +1 -1
  299. package/templates/blank/docs/errors/CAGE-GEN-002.md +1 -1
  300. package/templates/blank/docs/errors/CAGE-GEN-003.md +1 -1
  301. package/templates/blank/docs/errors/CAGE-GRANT-001.md +19 -13
  302. package/templates/blank/docs/errors/CAGE-GRANT-002.md +3 -3
  303. package/templates/blank/docs/errors/CAGE-GRANT-003.md +4 -4
  304. package/templates/blank/docs/errors/CAGE-IMPACT-001.md +1 -1
  305. package/templates/blank/docs/errors/CAGE-IMPACT-002.md +1 -1
  306. package/templates/blank/docs/errors/CAGE-INIT-001.md +1 -1
  307. package/templates/blank/docs/errors/CAGE-INIT-002.md +1 -1
  308. package/templates/blank/docs/errors/CAGE-INIT-003.md +1 -1
  309. package/templates/blank/docs/errors/CAGE-INIT-004.md +1 -1
  310. package/templates/blank/docs/errors/CAGE-INIT-005.md +1 -1
  311. package/templates/blank/docs/errors/CAGE-JOB-001.md +1 -1
  312. package/templates/blank/docs/errors/CAGE-JOB-002.md +1 -1
  313. package/templates/blank/docs/errors/CAGE-JOB-003.md +1 -1
  314. package/templates/blank/docs/errors/CAGE-LINT-001.md +1 -1
  315. package/templates/blank/docs/errors/CAGE-MIG-001.md +1 -1
  316. package/templates/blank/docs/errors/CAGE-MIG-002.md +1 -1
  317. package/templates/blank/docs/errors/CAGE-MIG-005.md +1 -1
  318. package/templates/blank/docs/errors/CAGE-NAME-001.md +1 -1
  319. package/templates/blank/docs/errors/CAGE-NAME-002.md +1 -1
  320. package/templates/blank/docs/errors/CAGE-NAME-003.md +1 -1
  321. package/templates/blank/docs/errors/CAGE-NAME-004.md +1 -1
  322. package/templates/blank/docs/errors/CAGE-NAME-005.md +1 -1
  323. package/templates/blank/docs/errors/CAGE-NAME-006.md +1 -1
  324. package/templates/blank/docs/errors/CAGE-ONTOLOGY-001.md +52 -0
  325. package/templates/blank/docs/errors/CAGE-ORG-001.md +1 -1
  326. package/templates/blank/docs/errors/CAGE-PAIR-002.md +1 -1
  327. package/templates/blank/docs/errors/CAGE-QUERY-001.md +1 -1
  328. package/templates/blank/docs/errors/CAGE-QUERY-002.md +1 -1
  329. package/templates/blank/docs/errors/CAGE-QUERY-003.md +1 -1
  330. package/templates/blank/docs/errors/CAGE-REACT-001.md +1 -1
  331. package/templates/blank/docs/errors/CAGE-REACT-002.md +1 -1
  332. package/templates/blank/docs/errors/CAGE-REACT-003.md +1 -1
  333. package/templates/blank/docs/errors/CAGE-READS-001.md +1 -1
  334. package/templates/blank/docs/errors/CAGE-REG-001.md +1 -1
  335. package/templates/blank/docs/errors/CAGE-REG-002.md +1 -1
  336. package/templates/blank/docs/errors/CAGE-REG-003.md +1 -1
  337. package/templates/blank/docs/errors/CAGE-REL-001.md +1 -1
  338. package/templates/blank/docs/errors/CAGE-ROUTE-001.md +1 -1
  339. package/templates/blank/docs/errors/CAGE-SCOPE-001.md +1 -1
  340. package/templates/blank/docs/errors/CAGE-SCOPE-002.md +1 -1
  341. package/templates/blank/docs/errors/CAGE-SECRET-001.md +1 -1
  342. package/templates/blank/docs/errors/CAGE-SECRET-002.md +1 -1
  343. package/templates/blank/docs/errors/CAGE-SENS-001.md +1 -1
  344. package/templates/blank/docs/errors/CAGE-SQL-001.md +1 -1
  345. package/templates/blank/docs/errors/CAGE-SQL-002.md +1 -1
  346. package/templates/blank/docs/errors/CAGE-STATE-001.md +1 -1
  347. package/templates/blank/docs/errors/CAGE-STATE-002.md +1 -1
  348. package/templates/blank/docs/errors/CAGE-STATE-003.md +2 -2
  349. package/templates/blank/docs/errors/CAGE-STATE-004.md +1 -1
  350. package/templates/blank/docs/errors/CAGE-STATE-005.md +1 -1
  351. package/templates/blank/docs/errors/CAGE-STATE-010.md +1 -1
  352. package/templates/blank/docs/errors/CAGE-STATE-011.md +1 -1
  353. package/templates/blank/docs/errors/CAGE-STRUCT-001.md +4 -4
  354. package/templates/blank/docs/errors/CAGE-STRUCT-002.md +3 -3
  355. package/templates/blank/docs/errors/CAGE-SYNC-001.md +4 -4
  356. package/templates/blank/docs/errors/CAGE-TEST-001.md +1 -1
  357. package/templates/blank/docs/errors/CAGE-TEST-002.md +1 -1
  358. package/templates/blank/docs/errors/CAGE-TEST-003.md +1 -1
  359. package/templates/blank/docs/errors/CAGE-UNSAFE-001.md +1 -1
  360. package/templates/blank/docs/errors/CAGE-UPGRADE-001.md +1 -1
  361. package/templates/blank/docs/errors/CAGE-WORKER-001.md +1 -1
  362. package/templates/blank/docs/errors/CAGE-WORKER-002.md +1 -1
  363. package/templates/blank/docs/errors/CAGE-WORKER-003.md +1 -1
  364. package/templates/blank/docs/errors/README.md +8 -2
  365. package/templates/blank/docs/errors/runtime.md +2 -2
  366. package/templates/blank/docs/examples/purchase-admin/README.md +1 -1
  367. package/templates/blank/docs/examples/purchase-admin/apps/web/src/app/styles/global.css +12 -11
  368. package/templates/blank/docs/examples/purchase-admin/apps/web/src/main.tsx +18 -7
  369. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/lib/error-message.ts +1 -1
  370. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/approval-member-picker.tsx +1 -1
  371. package/templates/blank/docs/examples/purchase-admin/cage.config.json +2 -1
  372. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/role/index.ts +2 -2
  373. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/user/index.ts +3 -3
  374. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/approval-members.ts +1 -1
  375. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/approvals.ts +2 -2
  376. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/intelligence.test.ts +4 -4
  377. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.test.ts +10 -17
  378. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.ts +4 -5
  379. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/workflows/purchase-process.ts +1 -1
  380. package/templates/blank/package.json +3 -3
  381. package/templates/blank/packages/contracts/package.json +1 -1
  382. package/templates/blank/packages/contracts/src/aggregates/role/index.ts +2 -2
  383. package/templates/blank/packages/contracts/src/aggregates/user/index.ts +3 -3
  384. package/templates/blank/packages/domain/package.json +5 -5
  385. package/templates/app/docs/ai/README.md +0 -103
  386. package/templates/app/docs/ai/recipes.md +0 -89
  387. package/templates/blank/docs/ai/README.md +0 -103
  388. package/templates/blank/docs/ai/recipes.md +0 -89
@@ -1,103 +0,0 @@
1
- # 业务开发指南(给 Codex 等编程工具)
2
-
3
- 这是 `create-cage-app` 产物自带的业务开发资料。目标是让 Codex 等编程工具只读当前项目,就能增加业务对象、操作、审批、报表和页面。先读根目录 `AGENTS.md`,再按任务定位本页资料;无需另行克隆 Cage 框架仓库。
4
-
5
- ## 先认识当前应用
6
-
7
- | 目录 | 开发业务时放什么 |
8
- | --- | --- |
9
- | `packages/domain/src/modules/<业务>` | 按业务集中聚合、命令、事件、审批、查询与任务;跨模块反应放 workflows,外部协议放 integrations |
10
- | `packages/contracts/src/aggregates`、`queries` | 按聚合目录生成 API 与类型;通过根 @app/contracts 使用,通过 gen 更新 |
11
- | `apps/api/src` | API 与 worker 的薄启动入口;普通业务不在这里写路由 |
12
- | `apps/web/src/app`、`modules`、`shared` | 应用组合 / 业务页面与交互 / 无具体业务归属的共用代码 |
13
- | `db/migrations` | 生成后审查的迁移;更新已有数据库中的表 |
14
- | `.env` / `.env.example` | 本机配置 / 不含真实凭证的配置说明 |
15
- | `docs/ai`、`docs/errors` | 业务开发方法与错误排查 |
16
-
17
- 下文路径均相对**应用根目录**,即生成项目的 `package.json` 所在目录。框架包使用 `@yss123/cage-*`,作为依赖安装;当前项目不应复制或重新实现这些包。框架维护者在源码仓库读本页时,应用根目录为 `examples/purchase-admin`。
18
-
19
- 创建时可选 `blank`(空白业务项目)或 `purchase`(采购示例项目)。空白项目只有组织基础模型,新增客户业务写入根目录的 `packages/domain/src`;采购参考源码放在 `docs/examples/purchase-admin`,不参与注册、编译或建表。阅读本指南中的采购路径时,空白项目在该参考目录下查找,采购项目直接在应用根目录查找。先读本项目 AGENTS.md 的模板说明,不能把参考代码误当成已运行的业务。
20
-
21
- ## 推荐阅读顺序
22
-
23
- | 顺序 | 资料 | 读完应能回答 |
24
- | --- | --- | --- |
25
- | 1 | [架构与执行模型](architecture.md) | 聚合是什么?为什么写入必须走命令?数据库由谁连接? |
26
- | 2 | [工程目录与代码组织](project-structure.md) | 新业务放哪里?页面如何拆分?哪些依赖会被门禁阻止? |
27
- | 3 | [原语与最小业务](primitives.md) | 如何新增字段、CRUD 命令、读依赖、事件和查询? |
28
- | 编码必读 | [详细中文注释规范](commenting.md) | 如何说明文件职责、API、字段、关键流程、权限/事务与失败边界,并同步维护注释? |
29
- | 开发前 | [本体查询与 AI 上下文](ontology-context.md) | 按需求查哪些代码?为什么关联?候选、证据与子图边界怎么判断? |
30
- | 开发与排错 | [能力发现与状态诊断](diagnostics.md) | 公开 API 有什么?注册/契约/进程哪里过期?如何查执行时间线和授权拒绝? |
31
- | 按需 | [对象关系](relations.md) | 如何在 fields 中声明一对一、一对多、多对多,修改关联并分页读取? |
32
- | 复杂审批 | [审批流转、并行与流程时效](approvals.md) | 如何声明 AND 并行与汇合,按字段选人、候选领取、转办/委派/加签,并使用框架节点时限、站内提醒、催办和已读? |
33
- | 前端必读 | [业务路由与浏览器验收](routing.md) | 列表/详情如何获得独立 URL?登录回跳、404、/admin 和部署回退怎样验收? |
34
- | 原生 AI | [智能助理与 AI 审批](intelligence.md) | 如何启用后端、配置三态审核、生成工具、传入页面快照和接入 SDK? |
35
- | 4 | [标准采购范例导读](purchase-example.md) | 一次提交如何进入审批、锁库存、推 ERP、释放资源? |
36
- | 5 | [开发步骤](workflow.md) | 改哪个文件?运行哪些命令?检查结果在哪里? |
37
- | 6 | [业务任务配方](recipes.md) | 如何从采购演示换成自己的业务?常见需求如何交给 AI? |
38
- | 7 | [业务页导入导出](transfers.md) | 如何提交任务、准备 CSV、查询状态、下载和展示报告? |
39
- | 8 | [排错方法](troubleshooting.md)、[错误码册](../errors/README.md) | 如何区分配置、权限、业务失败和异步死信? |
40
- | 按需 | [文件字段与断点续传](files.md) | 私有上传、分片恢复、命令绑定、下载授权和存储部署 |
41
-
42
- 第一次先读架构、目录规范和原语,再沿范例读代码。接到业务需求后先运行 `pnpm exec cage context "需求关键词"`,确认候选入口,再按源码位置阅读对应实现。
43
-
44
- 框架源码与脚手架应用都要求详细中文注释。新建或修改代码时按[注释规范](commenting.md)同步说明文件职责与调用链、导出 API/类型字段、组件/hooks 和关键流程的“做什么、为什么、怎么做、边界”;修改既有行为时连同相关上下游说明一起更新。注释属于交付内容,不能用“代码自解释”免除,也不能以逐行翻译或注释字数代替质量。
45
-
46
- 不确定框架支持什么时先用 `pnpm exec cage capabilities 关键词 --format json` 查看当前版本公开签名;功能未生效时用 `pnpm exec cage doctor` 区分注册、生成、构建、迁移、授权和实际进程。未检查项为 `unknown`,不能作为验证通过。
47
-
48
- 遇到 AI 审批、业务助理、随页助理、模型管理、性格或 Responses 需求,先读[原生智能化指南](intelligence.md)。这些是框架可选能力:后端循环、工具、会话与偏好记忆、HTTP 和 SDK 由框架提供;应用配置声明、策略、授权、页面快照及界面。入口不要求每次加载整份本体或全部指南,按本次任务读取相关章节即可。
49
-
50
- ## 按任务找入口
51
-
52
- | 用户需求 | 优先修改 | 需要一起考虑 |
53
- | --- | --- | --- |
54
- | 增加业务对象、字段 | `packages/domain/src/modules/<业务>` | 模块公开入口、范围字段、不变量、契约、迁移、角色授权、图谱中文名 |
55
- | 增加对象关联 | `fields` 的 ref / hasMany / manyToMany;见[关系指南](relations.md) | 归属命令、双侧权限与范围、目标分页、迁移;纯关联不手写中间表聚合 |
56
- | 增加操作按钮 | 领域命令 + `apps/web/src/modules/<业务>` | 状态迁移、调用身份、错误展示、提交幂等键 |
57
- | 增加列表、详情或新页面 | 模块 pages + app 路由表 | URL、查询条件、深链接、刷新、前进后退、登录回跳;见[路由指南](routing.md) |
58
- | 增加报表 | 所属领域模块 `queries.ts` | `reads`、`safe.*`、参数化、调用人 read 权限 |
59
- | 修改审批顺序/条件/并行/选人 | 所属领域模块 `approvals.ts` | `parallel/branch` 的 AND 汇合与完整 currentSteps、`routable`、`approver.field` 的 UUID/数组、角色/负责人数据、同租户 active 用户及结论命令约束;见[任务流转](approvals.md) |
60
- | 候选领取、转办、委派和前后加签 | 人工 `step` 的 `assignment/actions` + 客户端任务接口 | 候选规则与权限实时检查、waiting 依赖、任务 revision、旧实例快照、系统迁移;Admin/采购已有领取、释放、归还,采购还提供协作名录选人、转办/委派/三种加签及分页人工历史 |
61
- | 节点时限、流程提醒与申请人催办 | `step.sla`、`route.reminders` + 导出的 `approvalOperations()` | 自然分钟、逐节点开启计时、同实例共享催办冷却;并行催办携带 expectedSteps;沿用框架 Admin 申请/提醒页或 SDK,见[流程时效](approvals.md) |
62
- | AI 预审、退回修改、转人工 | 现有 `step` 的 `kind: 'ai'` + `approval` 绑定 | 策略、取证字段/查询、`automatedBy` 角色、结论命令及 `handoff`;见[智能化指南](intelligence.md) |
63
- | 业务助理、随页悬浮窗 | domain 导出 `ai()`;页面接 `useAssistant` 与 `useAiPageContext` | 业务权限、页面快照、流式 Markdown、写入确认;界面由应用实现 |
64
- | 模型动态配置、Responses、性格 | `managedModel` 与框架 Admin 页面 | 部署加密密钥、管理权限、实际网关能力、性格仅影响表达 |
65
- | 取消后释放占用 | `workflows/<相关业务>.ts` + 领域事件/命令 | 所有离开持有状态的路径、同事务/异步选择 |
66
- | 接 ERP 或其他系统 | `integrations/<系统名>.ts` | schema、密钥名、白名单、幂等、回调验签、重试 |
67
- | 业务页导入/导出 | 业务前端调用已有接口 | 任务状态、worker、权限、导入目标命令;不固定到系统管理页 |
68
- | 文件上传/业务附件 | file/files 字段 + 用户命令 + 客户端上传任务 | 断点续传、当前权限、命令绑定、私有存储及清理;见[文件指南](files.md) |
69
- | 新业务没出现在图或 API | domain 统一入口 | 顶层 `export const`、导出名唯一、入口 re-export |
70
- | 框架无法表达业务 | 先核对公开导出与范例 | 说明能力缺口;不要编造 API 或把业务分支塞进内核 |
71
-
72
- ## 三份协作材料各管什么
73
-
74
- - **AGENTS.md** 是工作入口:必守边界、目录、顺序和验证要求。`<!-- cage:begin ... -->` 到 `<!-- cage:end -->` 为框架托管区,`cage sync` 更新它;项目自己的规则放在外面。
75
- - **标准范例** 是可运行证据:采购模板包含完整运行链路,空白模板保留离线参考源码。按需学习其中模式,客户业务仍写在本项目自己的 domain 和页面中。
76
- - **错误码册** 是诊断索引:按真实错误码查位置、触发原因、修复步骤和正反例;不要靠放开权限或关闭门禁“修好”报错。
77
-
78
- `docs/ai` 与 `docs/errors` 已放入分发模板,创建项目时一起复制,可离线阅读。框架仓库中的标准范例使用根目录的规范文档,资料位置由应用 AGENTS.md 指明。
79
-
80
- ## 当前实现边界
81
-
82
- 以下区分可避免 agent 把方案中的愿景写成不存在的功能。
83
-
84
- | 已有能力 | 使用边界 |
85
- | --- | --- |
86
- | 真实 PostgreSQL 连接、分账号、表结构迁移 | 连接已有数据库;`init` 不建库;不会自动识别并接管任意历史表 |
87
- | 聚合/命令、能力与范围、掩码、审计、outbox、worker | handler 不做数据库/网络 IO;生产角色不会自动拿到新能力 |
88
- | fields 中的 ref / hasMany / manyToMany | hasMany 为只读反查;manyToMany 自动中间表并随主对象事务写入,公开读取独立分页;双向集合不会自动互为镜像 |
89
- | 本体抽取、中文检索/节点/路径/AI 上下文、图规则、图谱、生成、影响分析与门禁 | 上下文注明证据、源码和覆盖边界;名称与测试匹配是候选线索,不能证明任意 JS 正确;跳过用例仍需补足 |
90
- | 有界集合 reactionEach、显式步骤 order | 稳定唯一键排序后串行调用目标命令;同事务整体回滚,异步链按 outbox 恢复;不是并行写表接口 |
91
- | capabilities、doctor、timeline、explain、snapshot | 实际运行诊断需要受控会话与权限;未取得的证据为 unknown,授权解释不执行 handler |
92
- | 代码审批路由与任务流转 | 顺序/条件、`parallel/branch` 结构化 AND 分支与汇合、any/all、字段选人、候选领取/释放、转办、单层委派归还、前后/并行必签和动作历史;候选池仅支持 any,追加票全部必签。条件和依赖随提交冻结,currentStep 仅为最小活动索引;尚无任意连线/循环/OR 网关、岗位/代理规则、通用恢复、任意 JS 选人或在途迁移,见[任务流转](approvals.md) |
93
- | 审批时限、站内提醒与催办 | 人工节点按实际开启时间计算自然分钟 SLA,worker 持久投递临期/超时提醒;申请人可按完整活动集合催办,同实例共享冷却,接收人可标已读。旧快照不自动获得政策;尚无工作日历、自动升级、抄送或邮件/短信通知 |
94
- | 审批界面与 SDK | Admin/采购待办可领取、释放、归还受托任务并查看等待加签;采购另有协作名录选人器、转办/委派/三种加签及分页人工历史,view 查询参数保留视图。启用运营后通用 Admin 提供我的申请、催办和流程提醒;页面仍需应用启用、真实授权与浏览器验收。AI 助理目前只查询本人待办及提交决定,无人员管理写工具 |
95
- | 原生 AI 审批与领域助理 | 现有 `step` 支持 `kind: 'ai'`;三态审核、自动工具、会话及偏好记忆可复用;需显式启用、授权并做模型质量验收 |
96
- | Admin 模型与性格、助理 SDK | 动态模型连接和性格管理;Chat Completions / Responses 兼容性以实际服务为准;SDK 提供流式状态与页面快照,悬浮窗和 Markdown 由应用实现 |
97
- | 连接器 fake、出站、入站验签、同步记录 | fake 不等于真实 ERP 联调,也不等于完整请求录制/回放平台 |
98
- | 异步 CSV 导入/导出接口与客户端任务查询 | 界面由业务项目决定;导出结果不是可直接回导的命令输入模板 |
99
- | 私有文件字段、流式分片上传、暂停与续传、范围下载 | 默认本地存储,提供对象存储适配接口;尚无内置 S3/OSS、签名直传、病毒扫描及文件共享 |
100
- | 组织模型、系统管理界面 | 暂无移动部门(改上级)的完整支持、菜单配置页 |
101
- | 库存锁采购范例 | 演示资源生命周期;不是仓库级并发库存扣减、退货或 ERP 撤销补偿系统 |
102
-
103
- 文档与实现冲突时,以当前代码和检查结果为依据,指出冲突并修正文档;不要默默扩展公开 API。规划、代码存在、构建通过、真实联调通过是不同状态,交付时分别说明。
@@ -1,89 +0,0 @@
1
- # 业务任务配方
2
-
3
- [返回学习入口](README.md) · [原语示例](primitives.md) · [开发步骤](workflow.md)
4
-
5
- 本页用于把用户的业务描述转成 Cage 项目的可执行修改。按需要读对应配方即可,不需要修改框架内部。
6
-
7
- 需要 AI 审批、业务助理、随页聊天、模型管理或性格配置时,先用 `cage capabilities` 查框架能力,再按[原生智能化指南](intelligence.md)接入。普通业务建模仍按下文声明聚合和命令;接入已有框架服务无需另建一套通用后端。
8
-
9
- ## 先把需求落到一张业务表
10
-
11
- 开始编码前,从用户需求或现有业务中确定以下信息。能从上下文确认的直接使用;真正缺失且影响实现的再询问,不要为技术细节反复让用户确认。
12
-
13
- | 业务问题 | 落到什么声明 | 例如 |
14
- | --- | --- | --- |
15
- | 管理什么对象?有哪些字段? | aggregate、字段与 Zod 输入 | 报销单:金额、事由、部门、提单人、明细 |
16
- | 有哪些阶段?谁能做什么? | states、command、invokedBy | 草稿可编辑、提交后审批、完成后不可撤回 |
17
- | 数据属于谁/哪个部门? | 范围字段 + 角色数据范围 | 申请人看本人,经理看部门及下级 |
18
- | 每次操作有什么硬规则? | constraints、invariants、fail | 提单人不可审批、额度上限、金额必须为正 |
19
- | 成功后还要发生什么? | event、reaction、approval、outbound | 启动审批、登记额度占用、推送财务系统 |
20
- | 取消/失败要撤销什么? | cancelOn、释放命令、补偿流程 | 取消待办、释放占用、远端撤销或人工补偿 |
21
- | 页面需要看什么? | 生成的 list/get、query、业务页面 | 分页、详情、按状态汇总、导出与导入 |
22
-
23
- ## 新增一个普通管理对象
24
-
25
- 按[最小便笺业务](primitives.md)新增 `packages/domain/src/modules/<业务>/<对象>.ts`:字段、范围、不变量、create/update/archive 命令。采用唯一的导出名和必要的 `name` 覆盖,避免 index 的 `export *` 丢失重名符号。
26
-
27
- 从模块 index 到 domain 入口导出后运行 check/gen,审查迁移,再在 `apps/web/src/modules/<业务>` 使用生成 contracts 做列表、详情、表单和操作按钮,经模块公开入口注册到 app 路由。列表和详情都有独立 URL,筛选/分页进入 query,按[浏览器配方](routing.md)检查导航。最后给角色授权并补图谱中文名。完整归属规则见[目录规范](project-structure.md)。不要手写后端增删改查路由、ORM 实体与 repository,也不要复制框架鉴权代码。
28
-
29
- 完成标准:授权用户能创建和修改,范围外数据不可见,归档后的允许行为符合业务要求,生成契约和迁移一致。没有审批需求时不必添加审批;没有外部系统时不必添加连接器。
30
-
31
- ## 增加一对多或多对多
32
-
33
- 参考[对象关系](relations.md),在聚合的同一个 fields 中添加 `hasMany/manyToMany`。纯关联交给框架生成中间表;关系本身有职位、状态等业务属性时再建立有意义的聚合。hasMany 反查目标上的 ref,修改归属执行子对象命令;manyToMany 用所属对象的命令返回 ID 数组。
34
-
35
- 生成后前端通过 `对象.related.字段(id, params)` 或 `use对象Related字段` 分页读取,不从普通 get 响应猜测已加载关联。给角色配置两侧 read 能力与范围;添加成员时也检查目标可见性。修改关系执行版本检查,不能把当前一页当作完整集合替换。不要创建新的业务连接池、ORM 中间实体或手写关系路由。
36
-
37
- ## 给业务单据加审批
38
-
39
- 1. 为单据补草稿、待审批、通过、驳回等真实状态及命令;提交时发事件。
40
- 2. 通过/驳回使用 process 命令,根据业务添加职责分离、额度等约束。
41
- 3. 添加 approval 绑定和 route;只将需要的字段放进 routable,取消命令发事件并配置 cancelOn。
42
- 4. 配置实际部门负责人、角色或指定用户;给审批人配置能力、范围和额度。
43
- 5. 页面通过待办接口操作。通过后需占用资源时用反应调用资源命令,按业务一致性选择同事务。
44
-
45
- 完成标准:提交生成待办、正确的人审批、越权和自审批拒绝、取消能结束待办、资源配对完整。转办、委派归还和当前节点并行必签见[审批任务流转](approvals.md),须显式启用政策并传任务版本。任意流程设计器、动态 JS 选人、前后加签和指定节点退回仍需明确扩展范围。
46
-
47
- ## 加入 AI 审批或随页助理
48
-
49
- 先检查 domain 是否已经导出 `ai()`,再按需求修改已有声明或启用一次。AI 审批配置在业务模块的现有 `step` 内,填写 `kind: 'ai'`、审核策略、取证字段/查询与 `handoff`,由 `approval` 绑定自动执行角色和结论命令。业务助理使用框架生成的工具,前端通过 `useAssistant` 与 `useAiPageContext` 接入当前页面;悬浮窗、Markdown 和确认交互由应用实现。
50
-
51
- 模型地址、协议和密钥通过 `managedModel` 对应的 Admin 配置管理,性格也使用框架现有管理页。先完成系统迁移和必要授权,按[智能化指南](intelligence.md)的接入顺序、SDK 示例和验收步骤验证。分别说明框架支持、应用已启用和真实联调结果;空白模板中的参考代码不参与运行。
52
-
53
- ## 增加报表或复杂列表
54
-
55
- 普通分页和详情先使用生成的 list/get;汇总、联表等需求再添加 query。写清 reads、输入 schema,选择参数化 SQL 或 build;只查对应 safe 视图,不为“报表方便”切到管理员连接。
56
-
57
- 重新生成后使用 `queries.你的查询()` 或生成 hook。检查真实调用人的 read 能力和数据范围;管理员能看到结果不能证明普通用户的报表正确。
58
-
59
- ## 接入外部系统
60
-
61
- 沿 `packages/domain/src/integrations/erp.ts` 的结构声明 host、密钥名、操作 schema、outbound 和 inbound。远端成功后的字段回写也走 external 命令。先用 fake 完成本地链路,再在测试环境做真实联调。
62
-
63
- 明确重复请求如何识别、哪些错误重试、回执晚到怎么办、取消后如何补偿。不要假设本地事务可以回滚已经提交给第三方的写入。
64
-
65
- ## 增加导入或导出
66
-
67
- 在客户实际需要的业务页调用客户端/生成契约,展示任务进行中、完成和失败。导入映射到用户可调用的命令,准备与该命令输入匹配的 CSV;不要生成直接写业务表的上传接口。
68
-
69
- 明确逐行还是整批原子模式、失败报告如何呈现、任务过期如何处理。任务提交成功不能立即标成导入/导出完成,worker 与下载时授权也是链路的一部分。完整方法、CSV 例子与协议见[业务页导入导出](transfers.md)。
70
-
71
- ## 由采购演示换成客户业务
72
-
73
- 空白模板不需要清理采购业务,直接从 `packages/domain/src` 新增自己的声明和页面;参考源码在 `docs/examples/purchase-admin`,不在运行入口中。下面的替换步骤只适用于采购模板。
74
-
75
- 建议先保留运行薄壳和一条可验证的演示链路,新增真实业务并接通页面,再移除不需要的演示引用。清理时沿领域导出、反应、审批、连接器、查询、任务、页面和 graph.labels 一起检查,避免残留仍在运行的自动任务。
76
-
77
- 组织模型仍从 `@yss123/cage-admin/domain` 导出。已执行迁移作为历史保留,新表/删表通过新迁移表达;需要保存旧数据时先制定迁移方案,不能只把整个 migrations 文件夹删除。
78
-
79
- ## 给编程工具的任务模板
80
-
81
- ```text
82
- 阅读当前项目 AGENTS.md,按 docs/ai/README.md 找到本次需求对应的原语和标准范例。
83
- 遵守 docs/ai/project-structure.md:领域和前端按业务建 modules,app 组合页面,shared 只放通用代码,不平铺 src 或堆进 main.tsx。
84
- 业务:……;角色与数据范围:……;状态与允许动作:……;审批/外部系统/资源占用:……。
85
- 先列出需要修改的 domain、页面、契约、迁移和授权,再直接完成实现。
86
- 使用当前公开 API;对无法表达的需求说明具体缺口,不编造方法。
87
- 生成文件通过 cage gen 更新,数据库使用已有 .env 配置,按改动完成必要验证。
88
- 交付时说明用户如何体验、管理员需配置什么,以及通过/跳过/未执行的检查。
89
- ```
@@ -1,103 +0,0 @@
1
- # 业务开发指南(给 Codex 等编程工具)
2
-
3
- 这是 `create-cage-app` 产物自带的业务开发资料。目标是让 Codex 等编程工具只读当前项目,就能增加业务对象、操作、审批、报表和页面。先读根目录 `AGENTS.md`,再按任务定位本页资料;无需另行克隆 Cage 框架仓库。
4
-
5
- ## 先认识当前应用
6
-
7
- | 目录 | 开发业务时放什么 |
8
- | --- | --- |
9
- | `packages/domain/src/modules/<业务>` | 按业务集中聚合、命令、事件、审批、查询与任务;跨模块反应放 workflows,外部协议放 integrations |
10
- | `packages/contracts/src/aggregates`、`queries` | 按聚合目录生成 API 与类型;通过根 @app/contracts 使用,通过 gen 更新 |
11
- | `apps/api/src` | API 与 worker 的薄启动入口;普通业务不在这里写路由 |
12
- | `apps/web/src/app`、`modules`、`shared` | 应用组合 / 业务页面与交互 / 无具体业务归属的共用代码 |
13
- | `db/migrations` | 生成后审查的迁移;更新已有数据库中的表 |
14
- | `.env` / `.env.example` | 本机配置 / 不含真实凭证的配置说明 |
15
- | `docs/ai`、`docs/errors` | 业务开发方法与错误排查 |
16
-
17
- 下文路径均相对**应用根目录**,即生成项目的 `package.json` 所在目录。框架包使用 `@yss123/cage-*`,作为依赖安装;当前项目不应复制或重新实现这些包。框架维护者在源码仓库读本页时,应用根目录为 `examples/purchase-admin`。
18
-
19
- 创建时可选 `blank`(空白业务项目)或 `purchase`(采购示例项目)。空白项目只有组织基础模型,新增客户业务写入根目录的 `packages/domain/src`;采购参考源码放在 `docs/examples/purchase-admin`,不参与注册、编译或建表。阅读本指南中的采购路径时,空白项目在该参考目录下查找,采购项目直接在应用根目录查找。先读本项目 AGENTS.md 的模板说明,不能把参考代码误当成已运行的业务。
20
-
21
- ## 推荐阅读顺序
22
-
23
- | 顺序 | 资料 | 读完应能回答 |
24
- | --- | --- | --- |
25
- | 1 | [架构与执行模型](architecture.md) | 聚合是什么?为什么写入必须走命令?数据库由谁连接? |
26
- | 2 | [工程目录与代码组织](project-structure.md) | 新业务放哪里?页面如何拆分?哪些依赖会被门禁阻止? |
27
- | 3 | [原语与最小业务](primitives.md) | 如何新增字段、CRUD 命令、读依赖、事件和查询? |
28
- | 编码必读 | [详细中文注释规范](commenting.md) | 如何说明文件职责、API、字段、关键流程、权限/事务与失败边界,并同步维护注释? |
29
- | 开发前 | [本体查询与 AI 上下文](ontology-context.md) | 按需求查哪些代码?为什么关联?候选、证据与子图边界怎么判断? |
30
- | 开发与排错 | [能力发现与状态诊断](diagnostics.md) | 公开 API 有什么?注册/契约/进程哪里过期?如何查执行时间线和授权拒绝? |
31
- | 按需 | [对象关系](relations.md) | 如何在 fields 中声明一对一、一对多、多对多,修改关联并分页读取? |
32
- | 复杂审批 | [审批流转、并行与流程时效](approvals.md) | 如何声明 AND 并行与汇合,按字段选人、候选领取、转办/委派/加签,并使用框架节点时限、站内提醒、催办和已读? |
33
- | 前端必读 | [业务路由与浏览器验收](routing.md) | 列表/详情如何获得独立 URL?登录回跳、404、/admin 和部署回退怎样验收? |
34
- | 原生 AI | [智能助理与 AI 审批](intelligence.md) | 如何启用后端、配置三态审核、生成工具、传入页面快照和接入 SDK? |
35
- | 4 | [标准采购范例导读](purchase-example.md) | 一次提交如何进入审批、锁库存、推 ERP、释放资源? |
36
- | 5 | [开发步骤](workflow.md) | 改哪个文件?运行哪些命令?检查结果在哪里? |
37
- | 6 | [业务任务配方](recipes.md) | 如何从采购演示换成自己的业务?常见需求如何交给 AI? |
38
- | 7 | [业务页导入导出](transfers.md) | 如何提交任务、准备 CSV、查询状态、下载和展示报告? |
39
- | 8 | [排错方法](troubleshooting.md)、[错误码册](../errors/README.md) | 如何区分配置、权限、业务失败和异步死信? |
40
- | 按需 | [文件字段与断点续传](files.md) | 私有上传、分片恢复、命令绑定、下载授权和存储部署 |
41
-
42
- 第一次先读架构、目录规范和原语,再沿范例读代码。接到业务需求后先运行 `pnpm exec cage context "需求关键词"`,确认候选入口,再按源码位置阅读对应实现。
43
-
44
- 框架源码与脚手架应用都要求详细中文注释。新建或修改代码时按[注释规范](commenting.md)同步说明文件职责与调用链、导出 API/类型字段、组件/hooks 和关键流程的“做什么、为什么、怎么做、边界”;修改既有行为时连同相关上下游说明一起更新。注释属于交付内容,不能用“代码自解释”免除,也不能以逐行翻译或注释字数代替质量。
45
-
46
- 不确定框架支持什么时先用 `pnpm exec cage capabilities 关键词 --format json` 查看当前版本公开签名;功能未生效时用 `pnpm exec cage doctor` 区分注册、生成、构建、迁移、授权和实际进程。未检查项为 `unknown`,不能作为验证通过。
47
-
48
- 遇到 AI 审批、业务助理、随页助理、模型管理、性格或 Responses 需求,先读[原生智能化指南](intelligence.md)。这些是框架可选能力:后端循环、工具、会话与偏好记忆、HTTP 和 SDK 由框架提供;应用配置声明、策略、授权、页面快照及界面。入口不要求每次加载整份本体或全部指南,按本次任务读取相关章节即可。
49
-
50
- ## 按任务找入口
51
-
52
- | 用户需求 | 优先修改 | 需要一起考虑 |
53
- | --- | --- | --- |
54
- | 增加业务对象、字段 | `packages/domain/src/modules/<业务>` | 模块公开入口、范围字段、不变量、契约、迁移、角色授权、图谱中文名 |
55
- | 增加对象关联 | `fields` 的 ref / hasMany / manyToMany;见[关系指南](relations.md) | 归属命令、双侧权限与范围、目标分页、迁移;纯关联不手写中间表聚合 |
56
- | 增加操作按钮 | 领域命令 + `apps/web/src/modules/<业务>` | 状态迁移、调用身份、错误展示、提交幂等键 |
57
- | 增加列表、详情或新页面 | 模块 pages + app 路由表 | URL、查询条件、深链接、刷新、前进后退、登录回跳;见[路由指南](routing.md) |
58
- | 增加报表 | 所属领域模块 `queries.ts` | `reads`、`safe.*`、参数化、调用人 read 权限 |
59
- | 修改审批顺序/条件/并行/选人 | 所属领域模块 `approvals.ts` | `parallel/branch` 的 AND 汇合与完整 currentSteps、`routable`、`approver.field` 的 UUID/数组、角色/负责人数据、同租户 active 用户及结论命令约束;见[任务流转](approvals.md) |
60
- | 候选领取、转办、委派和前后加签 | 人工 `step` 的 `assignment/actions` + 客户端任务接口 | 候选规则与权限实时检查、waiting 依赖、任务 revision、旧实例快照、系统迁移;Admin/采购已有领取、释放、归还,采购还提供协作名录选人、转办/委派/三种加签及分页人工历史 |
61
- | 节点时限、流程提醒与申请人催办 | `step.sla`、`route.reminders` + 导出的 `approvalOperations()` | 自然分钟、逐节点开启计时、同实例共享催办冷却;并行催办携带 expectedSteps;沿用框架 Admin 申请/提醒页或 SDK,见[流程时效](approvals.md) |
62
- | AI 预审、退回修改、转人工 | 现有 `step` 的 `kind: 'ai'` + `approval` 绑定 | 策略、取证字段/查询、`automatedBy` 角色、结论命令及 `handoff`;见[智能化指南](intelligence.md) |
63
- | 业务助理、随页悬浮窗 | domain 导出 `ai()`;页面接 `useAssistant` 与 `useAiPageContext` | 业务权限、页面快照、流式 Markdown、写入确认;界面由应用实现 |
64
- | 模型动态配置、Responses、性格 | `managedModel` 与框架 Admin 页面 | 部署加密密钥、管理权限、实际网关能力、性格仅影响表达 |
65
- | 取消后释放占用 | `workflows/<相关业务>.ts` + 领域事件/命令 | 所有离开持有状态的路径、同事务/异步选择 |
66
- | 接 ERP 或其他系统 | `integrations/<系统名>.ts` | schema、密钥名、白名单、幂等、回调验签、重试 |
67
- | 业务页导入/导出 | 业务前端调用已有接口 | 任务状态、worker、权限、导入目标命令;不固定到系统管理页 |
68
- | 文件上传/业务附件 | file/files 字段 + 用户命令 + 客户端上传任务 | 断点续传、当前权限、命令绑定、私有存储及清理;见[文件指南](files.md) |
69
- | 新业务没出现在图或 API | domain 统一入口 | 顶层 `export const`、导出名唯一、入口 re-export |
70
- | 框架无法表达业务 | 先核对公开导出与范例 | 说明能力缺口;不要编造 API 或把业务分支塞进内核 |
71
-
72
- ## 三份协作材料各管什么
73
-
74
- - **AGENTS.md** 是工作入口:必守边界、目录、顺序和验证要求。`<!-- cage:begin ... -->` 到 `<!-- cage:end -->` 为框架托管区,`cage sync` 更新它;项目自己的规则放在外面。
75
- - **标准范例** 是可运行证据:采购模板包含完整运行链路,空白模板保留离线参考源码。按需学习其中模式,客户业务仍写在本项目自己的 domain 和页面中。
76
- - **错误码册** 是诊断索引:按真实错误码查位置、触发原因、修复步骤和正反例;不要靠放开权限或关闭门禁“修好”报错。
77
-
78
- `docs/ai` 与 `docs/errors` 已放入分发模板,创建项目时一起复制,可离线阅读。框架仓库中的标准范例使用根目录的规范文档,资料位置由应用 AGENTS.md 指明。
79
-
80
- ## 当前实现边界
81
-
82
- 以下区分可避免 agent 把方案中的愿景写成不存在的功能。
83
-
84
- | 已有能力 | 使用边界 |
85
- | --- | --- |
86
- | 真实 PostgreSQL 连接、分账号、表结构迁移 | 连接已有数据库;`init` 不建库;不会自动识别并接管任意历史表 |
87
- | 聚合/命令、能力与范围、掩码、审计、outbox、worker | handler 不做数据库/网络 IO;生产角色不会自动拿到新能力 |
88
- | fields 中的 ref / hasMany / manyToMany | hasMany 为只读反查;manyToMany 自动中间表并随主对象事务写入,公开读取独立分页;双向集合不会自动互为镜像 |
89
- | 本体抽取、中文检索/节点/路径/AI 上下文、图规则、图谱、生成、影响分析与门禁 | 上下文注明证据、源码和覆盖边界;名称与测试匹配是候选线索,不能证明任意 JS 正确;跳过用例仍需补足 |
90
- | 有界集合 reactionEach、显式步骤 order | 稳定唯一键排序后串行调用目标命令;同事务整体回滚,异步链按 outbox 恢复;不是并行写表接口 |
91
- | capabilities、doctor、timeline、explain、snapshot | 实际运行诊断需要受控会话与权限;未取得的证据为 unknown,授权解释不执行 handler |
92
- | 代码审批路由与任务流转 | 顺序/条件、`parallel/branch` 结构化 AND 分支与汇合、any/all、字段选人、候选领取/释放、转办、单层委派归还、前后/并行必签和动作历史;候选池仅支持 any,追加票全部必签。条件和依赖随提交冻结,currentStep 仅为最小活动索引;尚无任意连线/循环/OR 网关、岗位/代理规则、通用恢复、任意 JS 选人或在途迁移,见[任务流转](approvals.md) |
93
- | 审批时限、站内提醒与催办 | 人工节点按实际开启时间计算自然分钟 SLA,worker 持久投递临期/超时提醒;申请人可按完整活动集合催办,同实例共享冷却,接收人可标已读。旧快照不自动获得政策;尚无工作日历、自动升级、抄送或邮件/短信通知 |
94
- | 审批界面与 SDK | Admin/采购待办可领取、释放、归还受托任务并查看等待加签;采购另有协作名录选人器、转办/委派/三种加签及分页人工历史,view 查询参数保留视图。启用运营后通用 Admin 提供我的申请、催办和流程提醒;页面仍需应用启用、真实授权与浏览器验收。AI 助理目前只查询本人待办及提交决定,无人员管理写工具 |
95
- | 原生 AI 审批与领域助理 | 现有 `step` 支持 `kind: 'ai'`;三态审核、自动工具、会话及偏好记忆可复用;需显式启用、授权并做模型质量验收 |
96
- | Admin 模型与性格、助理 SDK | 动态模型连接和性格管理;Chat Completions / Responses 兼容性以实际服务为准;SDK 提供流式状态与页面快照,悬浮窗和 Markdown 由应用实现 |
97
- | 连接器 fake、出站、入站验签、同步记录 | fake 不等于真实 ERP 联调,也不等于完整请求录制/回放平台 |
98
- | 异步 CSV 导入/导出接口与客户端任务查询 | 界面由业务项目决定;导出结果不是可直接回导的命令输入模板 |
99
- | 私有文件字段、流式分片上传、暂停与续传、范围下载 | 默认本地存储,提供对象存储适配接口;尚无内置 S3/OSS、签名直传、病毒扫描及文件共享 |
100
- | 组织模型、系统管理界面 | 暂无移动部门(改上级)的完整支持、菜单配置页 |
101
- | 库存锁采购范例 | 演示资源生命周期;不是仓库级并发库存扣减、退货或 ERP 撤销补偿系统 |
102
-
103
- 文档与实现冲突时,以当前代码和检查结果为依据,指出冲突并修正文档;不要默默扩展公开 API。规划、代码存在、构建通过、真实联调通过是不同状态,交付时分别说明。
@@ -1,89 +0,0 @@
1
- # 业务任务配方
2
-
3
- [返回学习入口](README.md) · [原语示例](primitives.md) · [开发步骤](workflow.md)
4
-
5
- 本页用于把用户的业务描述转成 Cage 项目的可执行修改。按需要读对应配方即可,不需要修改框架内部。
6
-
7
- 需要 AI 审批、业务助理、随页聊天、模型管理或性格配置时,先用 `cage capabilities` 查框架能力,再按[原生智能化指南](intelligence.md)接入。普通业务建模仍按下文声明聚合和命令;接入已有框架服务无需另建一套通用后端。
8
-
9
- ## 先把需求落到一张业务表
10
-
11
- 开始编码前,从用户需求或现有业务中确定以下信息。能从上下文确认的直接使用;真正缺失且影响实现的再询问,不要为技术细节反复让用户确认。
12
-
13
- | 业务问题 | 落到什么声明 | 例如 |
14
- | --- | --- | --- |
15
- | 管理什么对象?有哪些字段? | aggregate、字段与 Zod 输入 | 报销单:金额、事由、部门、提单人、明细 |
16
- | 有哪些阶段?谁能做什么? | states、command、invokedBy | 草稿可编辑、提交后审批、完成后不可撤回 |
17
- | 数据属于谁/哪个部门? | 范围字段 + 角色数据范围 | 申请人看本人,经理看部门及下级 |
18
- | 每次操作有什么硬规则? | constraints、invariants、fail | 提单人不可审批、额度上限、金额必须为正 |
19
- | 成功后还要发生什么? | event、reaction、approval、outbound | 启动审批、登记额度占用、推送财务系统 |
20
- | 取消/失败要撤销什么? | cancelOn、释放命令、补偿流程 | 取消待办、释放占用、远端撤销或人工补偿 |
21
- | 页面需要看什么? | 生成的 list/get、query、业务页面 | 分页、详情、按状态汇总、导出与导入 |
22
-
23
- ## 新增一个普通管理对象
24
-
25
- 按[最小便笺业务](primitives.md)新增 `packages/domain/src/modules/<业务>/<对象>.ts`:字段、范围、不变量、create/update/archive 命令。采用唯一的导出名和必要的 `name` 覆盖,避免 index 的 `export *` 丢失重名符号。
26
-
27
- 从模块 index 到 domain 入口导出后运行 check/gen,审查迁移,再在 `apps/web/src/modules/<业务>` 使用生成 contracts 做列表、详情、表单和操作按钮,经模块公开入口注册到 app 路由。列表和详情都有独立 URL,筛选/分页进入 query,按[浏览器配方](routing.md)检查导航。最后给角色授权并补图谱中文名。完整归属规则见[目录规范](project-structure.md)。不要手写后端增删改查路由、ORM 实体与 repository,也不要复制框架鉴权代码。
28
-
29
- 完成标准:授权用户能创建和修改,范围外数据不可见,归档后的允许行为符合业务要求,生成契约和迁移一致。没有审批需求时不必添加审批;没有外部系统时不必添加连接器。
30
-
31
- ## 增加一对多或多对多
32
-
33
- 参考[对象关系](relations.md),在聚合的同一个 fields 中添加 `hasMany/manyToMany`。纯关联交给框架生成中间表;关系本身有职位、状态等业务属性时再建立有意义的聚合。hasMany 反查目标上的 ref,修改归属执行子对象命令;manyToMany 用所属对象的命令返回 ID 数组。
34
-
35
- 生成后前端通过 `对象.related.字段(id, params)` 或 `use对象Related字段` 分页读取,不从普通 get 响应猜测已加载关联。给角色配置两侧 read 能力与范围;添加成员时也检查目标可见性。修改关系执行版本检查,不能把当前一页当作完整集合替换。不要创建新的业务连接池、ORM 中间实体或手写关系路由。
36
-
37
- ## 给业务单据加审批
38
-
39
- 1. 为单据补草稿、待审批、通过、驳回等真实状态及命令;提交时发事件。
40
- 2. 通过/驳回使用 process 命令,根据业务添加职责分离、额度等约束。
41
- 3. 添加 approval 绑定和 route;只将需要的字段放进 routable,取消命令发事件并配置 cancelOn。
42
- 4. 配置实际部门负责人、角色或指定用户;给审批人配置能力、范围和额度。
43
- 5. 页面通过待办接口操作。通过后需占用资源时用反应调用资源命令,按业务一致性选择同事务。
44
-
45
- 完成标准:提交生成待办、正确的人审批、越权和自审批拒绝、取消能结束待办、资源配对完整。转办、委派归还和当前节点并行必签见[审批任务流转](approvals.md),须显式启用政策并传任务版本。任意流程设计器、动态 JS 选人、前后加签和指定节点退回仍需明确扩展范围。
46
-
47
- ## 加入 AI 审批或随页助理
48
-
49
- 先检查 domain 是否已经导出 `ai()`,再按需求修改已有声明或启用一次。AI 审批配置在业务模块的现有 `step` 内,填写 `kind: 'ai'`、审核策略、取证字段/查询与 `handoff`,由 `approval` 绑定自动执行角色和结论命令。业务助理使用框架生成的工具,前端通过 `useAssistant` 与 `useAiPageContext` 接入当前页面;悬浮窗、Markdown 和确认交互由应用实现。
50
-
51
- 模型地址、协议和密钥通过 `managedModel` 对应的 Admin 配置管理,性格也使用框架现有管理页。先完成系统迁移和必要授权,按[智能化指南](intelligence.md)的接入顺序、SDK 示例和验收步骤验证。分别说明框架支持、应用已启用和真实联调结果;空白模板中的参考代码不参与运行。
52
-
53
- ## 增加报表或复杂列表
54
-
55
- 普通分页和详情先使用生成的 list/get;汇总、联表等需求再添加 query。写清 reads、输入 schema,选择参数化 SQL 或 build;只查对应 safe 视图,不为“报表方便”切到管理员连接。
56
-
57
- 重新生成后使用 `queries.你的查询()` 或生成 hook。检查真实调用人的 read 能力和数据范围;管理员能看到结果不能证明普通用户的报表正确。
58
-
59
- ## 接入外部系统
60
-
61
- 沿 `packages/domain/src/integrations/erp.ts` 的结构声明 host、密钥名、操作 schema、outbound 和 inbound。远端成功后的字段回写也走 external 命令。先用 fake 完成本地链路,再在测试环境做真实联调。
62
-
63
- 明确重复请求如何识别、哪些错误重试、回执晚到怎么办、取消后如何补偿。不要假设本地事务可以回滚已经提交给第三方的写入。
64
-
65
- ## 增加导入或导出
66
-
67
- 在客户实际需要的业务页调用客户端/生成契约,展示任务进行中、完成和失败。导入映射到用户可调用的命令,准备与该命令输入匹配的 CSV;不要生成直接写业务表的上传接口。
68
-
69
- 明确逐行还是整批原子模式、失败报告如何呈现、任务过期如何处理。任务提交成功不能立即标成导入/导出完成,worker 与下载时授权也是链路的一部分。完整方法、CSV 例子与协议见[业务页导入导出](transfers.md)。
70
-
71
- ## 由采购演示换成客户业务
72
-
73
- 空白模板不需要清理采购业务,直接从 `packages/domain/src` 新增自己的声明和页面;参考源码在 `docs/examples/purchase-admin`,不在运行入口中。下面的替换步骤只适用于采购模板。
74
-
75
- 建议先保留运行薄壳和一条可验证的演示链路,新增真实业务并接通页面,再移除不需要的演示引用。清理时沿领域导出、反应、审批、连接器、查询、任务、页面和 graph.labels 一起检查,避免残留仍在运行的自动任务。
76
-
77
- 组织模型仍从 `@yss123/cage-admin/domain` 导出。已执行迁移作为历史保留,新表/删表通过新迁移表达;需要保存旧数据时先制定迁移方案,不能只把整个 migrations 文件夹删除。
78
-
79
- ## 给编程工具的任务模板
80
-
81
- ```text
82
- 阅读当前项目 AGENTS.md,按 docs/ai/README.md 找到本次需求对应的原语和标准范例。
83
- 遵守 docs/ai/project-structure.md:领域和前端按业务建 modules,app 组合页面,shared 只放通用代码,不平铺 src 或堆进 main.tsx。
84
- 业务:……;角色与数据范围:……;状态与允许动作:……;审批/外部系统/资源占用:……。
85
- 先列出需要修改的 domain、页面、契约、迁移和授权,再直接完成实现。
86
- 使用当前公开 API;对无法表达的需求说明具体缺口,不编造方法。
87
- 生成文件通过 cage gen 更新,数据库使用已有 .env 配置,按改动完成必要验证。
88
- 交付时说明用户如何体验、管理员需配置什么,以及通过/跳过/未执行的检查。
89
- ```