@yss123/cage-cli 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/README.md +7 -3
  2. package/dist/approval-tree.d.ts +88 -0
  3. package/dist/approval-tree.js +18 -0
  4. package/dist/approval-tree.js.map +1 -0
  5. package/dist/capabilities.js +46 -31
  6. package/dist/capabilities.js.map +1 -1
  7. package/dist/graph-approvals.d.ts +11 -1
  8. package/dist/graph-approvals.js +18 -5
  9. package/dist/graph-approvals.js.map +1 -1
  10. package/dist/graph-relations.js +10 -8
  11. package/dist/graph-relations.js.map +1 -1
  12. package/dist/graph.js +2 -0
  13. package/dist/graph.js.map +1 -1
  14. package/dist/main.js +1 -1
  15. package/dist/main.js.map +1 -1
  16. package/dist/ontology.js +8 -5
  17. package/dist/ontology.js.map +1 -1
  18. package/dist/project-structure.js +2 -2
  19. package/dist/project-structure.js.map +1 -1
  20. package/dist/sync.d.ts +1 -1
  21. package/dist/sync.js +25 -108
  22. package/dist/sync.js.map +1 -1
  23. package/graph-ui/approval-flow.js +28 -8
  24. package/graph-ui/approval-parallel.js +110 -0
  25. package/graph-ui/approval-tree.js +17 -0
  26. package/graph-ui/business.css +26 -0
  27. package/graph-ui/business.js +30 -13
  28. package/graph-ui/graph-approvals.js +18 -5
  29. package/graph-ui/graph-relations.js +10 -8
  30. package/package.json +6 -6
  31. package/templates/app/.agents/skills/cage-development/SKILL.md +10 -0
  32. package/templates/app/AGENTS.md +39 -122
  33. package/templates/app/CLAUDE.md +6 -0
  34. package/templates/app/README.md +9 -8
  35. package/templates/app/apps/api/package.json +2 -2
  36. package/templates/app/apps/web/package.json +1 -1
  37. package/templates/app/apps/web/src/modules/approval/components/task-operation-dialog.tsx +61 -0
  38. package/templates/app/apps/web/src/modules/approval/hooks/use-approval-tasks.ts +6 -9
  39. package/templates/app/apps/web/src/modules/approval/pages/approval-tasks-page.tsx +81 -49
  40. package/templates/app/apps/web/src/modules/approval/pages/approval-tasks.css +18 -0
  41. package/templates/app/apps/web/src/modules/purchase/components/approval-history.tsx +39 -4
  42. package/templates/app/apps/web/src/modules/purchase/components/order-reviewers.tsx +38 -0
  43. package/templates/app/apps/web/src/modules/purchase/components/purchase-order-form.tsx +9 -2
  44. package/templates/app/apps/web/src/modules/purchase/pages/purchase-intelligence.css +2 -0
  45. package/templates/app/apps/web/src/modules/purchase/pages/purchase-order-detail-page.tsx +2 -0
  46. package/templates/app/apps/web/src/modules/purchase/pages/purchase-orders-page.tsx +2 -0
  47. package/templates/app/apps/web/src/shared/lib/error-message.ts +6 -1
  48. package/templates/app/apps/web/src/shared/ui/approval-member-picker.css +10 -0
  49. package/templates/app/apps/web/src/shared/ui/approval-member-picker.tsx +51 -0
  50. package/templates/app/cage.config.json +14 -0
  51. package/templates/app/db/migrations/0004_draft.sql +27 -0
  52. package/templates/app/docs/README.md +11 -0
  53. package/templates/app/docs/development/README.md +64 -0
  54. package/templates/app/docs/development/examples/note/note-detail-page.tsx +106 -0
  55. package/templates/app/docs/development/examples/note/note.ts +67 -0
  56. package/templates/app/docs/development/examples/note/notes-page.tsx +87 -0
  57. package/templates/{blank/docs/ai → app/docs/development/examples}/purchase-example.md +24 -10
  58. package/templates/{blank/docs/ai → app/docs/development/getting-started}/architecture.md +4 -4
  59. package/templates/app/docs/development/getting-started/first-feature.md +66 -0
  60. package/templates/{blank/docs/ai → app/docs/development/getting-started}/workflow.md +13 -12
  61. package/templates/app/docs/development/guides/approvals.md +270 -0
  62. package/templates/app/docs/development/guides/business-collaboration.md +63 -0
  63. package/templates/{blank/docs/ai → app/docs/development/guides}/files.md +5 -1
  64. package/templates/app/docs/{ai → development/guides}/intelligence.md +4 -4
  65. package/templates/{blank/docs/ai → app/docs/development/guides}/recipes.md +31 -11
  66. package/templates/app/docs/{ai → development/guides}/relations.md +2 -2
  67. package/templates/app/docs/{ai → development/guides}/routing.md +1 -1
  68. package/templates/{blank/docs/ai → app/docs/development/guides}/transfers.md +1 -1
  69. package/templates/{blank/docs/ai → app/docs/development/reference}/commenting.md +1 -1
  70. package/templates/app/docs/{ai → development/reference}/primitives.md +8 -62
  71. package/templates/app/docs/{ai → development/reference}/project-structure.md +2 -2
  72. package/templates/app/docs/development/skills/cage-development/SKILL.md +134 -0
  73. package/templates/{blank/docs/ai → app/docs/development/tools}/diagnostics.md +3 -3
  74. package/templates/{blank/docs/ai → app/docs/development/tools}/ontology-context.md +3 -3
  75. package/templates/app/docs/{ai → development/tools}/troubleshooting.md +7 -1
  76. package/templates/app/docs/errors/CAGE-AI-001.md +3 -3
  77. package/templates/app/docs/errors/CAGE-APPR-001.md +13 -10
  78. package/templates/app/docs/errors/CAGE-APPR-002.md +1 -1
  79. package/templates/app/docs/errors/CAGE-APPR-003.md +1 -1
  80. package/templates/app/docs/errors/CAGE-APPR-004.md +1 -1
  81. package/templates/app/docs/errors/CAGE-APPR-005.md +5 -5
  82. package/templates/app/docs/errors/CAGE-APPR-006.md +25 -10
  83. package/templates/app/docs/errors/CAGE-APPR-007.md +9 -7
  84. package/templates/app/docs/errors/CAGE-APPR-010.md +1 -1
  85. package/templates/app/docs/errors/CAGE-AUDIT-001.md +1 -1
  86. package/templates/app/docs/errors/CAGE-AUTH-001.md +1 -1
  87. package/templates/app/docs/errors/CAGE-BIZ-001.md +1 -1
  88. package/templates/app/docs/errors/CAGE-BIZ-002.md +1 -1
  89. package/templates/app/docs/errors/CAGE-BUDGET-001.md +1 -1
  90. package/templates/app/docs/errors/CAGE-BUDGET-002.md +1 -1
  91. package/templates/app/docs/errors/CAGE-BUDGET-003.md +1 -1
  92. package/templates/app/docs/errors/CAGE-CMD-002.md +1 -1
  93. package/templates/app/docs/errors/CAGE-CMD-003.md +1 -1
  94. package/templates/app/docs/errors/CAGE-CONN-001.md +1 -1
  95. package/templates/app/docs/errors/CAGE-CONN-002.md +1 -1
  96. package/templates/app/docs/errors/CAGE-CONN-003.md +1 -1
  97. package/templates/app/docs/errors/CAGE-CONN-004.md +1 -1
  98. package/templates/app/docs/errors/CAGE-CONN-005.md +1 -1
  99. package/templates/app/docs/errors/CAGE-CONN-006.md +1 -1
  100. package/templates/app/docs/errors/CAGE-CONN-007.md +1 -1
  101. package/templates/app/docs/errors/CAGE-CONN-008.md +1 -1
  102. package/templates/app/docs/errors/CAGE-CONN-009.md +1 -1
  103. package/templates/app/docs/errors/CAGE-CONN-010.md +1 -1
  104. package/templates/app/docs/errors/CAGE-CONN-011.md +1 -1
  105. package/templates/app/docs/errors/CAGE-CONN-012.md +1 -1
  106. package/templates/app/docs/errors/CAGE-CONN-013.md +1 -1
  107. package/templates/app/docs/errors/CAGE-CONN-014.md +1 -1
  108. package/templates/app/docs/errors/CAGE-CONN-015.md +1 -1
  109. package/templates/app/docs/errors/CAGE-CREATE-001.md +2 -2
  110. package/templates/app/docs/errors/CAGE-DECL-001.md +1 -1
  111. package/templates/app/docs/errors/CAGE-DECL-002.md +1 -1
  112. package/templates/app/docs/errors/CAGE-DECL-003.md +1 -1
  113. package/templates/app/docs/errors/CAGE-DECL-004.md +1 -1
  114. package/templates/app/docs/errors/CAGE-DEP-001.md +1 -1
  115. package/templates/app/docs/errors/CAGE-DEP-002.md +1 -1
  116. package/templates/app/docs/errors/CAGE-DEP-003.md +1 -1
  117. package/templates/app/docs/errors/CAGE-DEP-004.md +1 -1
  118. package/templates/app/docs/errors/CAGE-DEP-005.md +1 -1
  119. package/templates/app/docs/errors/CAGE-DIAG-001.md +1 -1
  120. package/templates/app/docs/errors/CAGE-DLQ-001.md +1 -1
  121. package/templates/app/docs/errors/CAGE-ENV-001.md +1 -1
  122. package/templates/app/docs/errors/CAGE-ENV-002.md +1 -1
  123. package/templates/app/docs/errors/CAGE-ENV-003.md +1 -1
  124. package/templates/app/docs/errors/CAGE-EVENT-001.md +2 -2
  125. package/templates/app/docs/errors/CAGE-EVENT-002.md +1 -1
  126. package/templates/app/docs/errors/CAGE-FIELD-001.md +1 -1
  127. package/templates/app/docs/errors/CAGE-FIELD-002.md +1 -1
  128. package/templates/app/docs/errors/CAGE-FIELD-003.md +1 -1
  129. package/templates/app/docs/errors/CAGE-FIELD-004.md +1 -1
  130. package/templates/app/docs/errors/CAGE-FILE-001.md +1 -1
  131. package/templates/app/docs/errors/CAGE-GEN-001.md +1 -1
  132. package/templates/app/docs/errors/CAGE-GEN-002.md +1 -1
  133. package/templates/app/docs/errors/CAGE-GEN-003.md +1 -1
  134. package/templates/app/docs/errors/CAGE-GRANT-001.md +1 -1
  135. package/templates/app/docs/errors/CAGE-GRANT-002.md +1 -1
  136. package/templates/app/docs/errors/CAGE-GRANT-003.md +1 -1
  137. package/templates/app/docs/errors/CAGE-IMPACT-001.md +1 -1
  138. package/templates/app/docs/errors/CAGE-IMPACT-002.md +1 -1
  139. package/templates/app/docs/errors/CAGE-INIT-001.md +1 -1
  140. package/templates/app/docs/errors/CAGE-INIT-002.md +1 -1
  141. package/templates/app/docs/errors/CAGE-INIT-003.md +1 -1
  142. package/templates/app/docs/errors/CAGE-INIT-004.md +1 -1
  143. package/templates/app/docs/errors/CAGE-INIT-005.md +1 -1
  144. package/templates/app/docs/errors/CAGE-JOB-001.md +1 -1
  145. package/templates/app/docs/errors/CAGE-JOB-002.md +1 -1
  146. package/templates/app/docs/errors/CAGE-JOB-003.md +1 -1
  147. package/templates/app/docs/errors/CAGE-LINT-001.md +1 -1
  148. package/templates/app/docs/errors/CAGE-MIG-001.md +1 -1
  149. package/templates/app/docs/errors/CAGE-MIG-002.md +1 -1
  150. package/templates/app/docs/errors/CAGE-MIG-005.md +1 -1
  151. package/templates/app/docs/errors/CAGE-NAME-001.md +1 -1
  152. package/templates/app/docs/errors/CAGE-NAME-002.md +1 -1
  153. package/templates/app/docs/errors/CAGE-NAME-003.md +1 -1
  154. package/templates/app/docs/errors/CAGE-NAME-004.md +1 -1
  155. package/templates/app/docs/errors/CAGE-NAME-005.md +1 -1
  156. package/templates/app/docs/errors/CAGE-NAME-006.md +1 -1
  157. package/templates/app/docs/errors/CAGE-ORG-001.md +1 -1
  158. package/templates/app/docs/errors/CAGE-PAIR-002.md +1 -1
  159. package/templates/app/docs/errors/CAGE-QUERY-001.md +1 -1
  160. package/templates/app/docs/errors/CAGE-QUERY-002.md +1 -1
  161. package/templates/app/docs/errors/CAGE-QUERY-003.md +1 -1
  162. package/templates/app/docs/errors/CAGE-REACT-001.md +1 -1
  163. package/templates/app/docs/errors/CAGE-REACT-002.md +1 -1
  164. package/templates/app/docs/errors/CAGE-REACT-003.md +1 -1
  165. package/templates/app/docs/errors/CAGE-READS-001.md +1 -1
  166. package/templates/app/docs/errors/CAGE-REG-001.md +2 -2
  167. package/templates/app/docs/errors/CAGE-REG-002.md +1 -1
  168. package/templates/app/docs/errors/CAGE-REG-003.md +1 -1
  169. package/templates/app/docs/errors/CAGE-REL-001.md +1 -1
  170. package/templates/app/docs/errors/CAGE-ROUTE-001.md +1 -1
  171. package/templates/app/docs/errors/CAGE-SCOPE-001.md +1 -1
  172. package/templates/app/docs/errors/CAGE-SCOPE-002.md +1 -1
  173. package/templates/app/docs/errors/CAGE-SECRET-001.md +1 -1
  174. package/templates/app/docs/errors/CAGE-SECRET-002.md +1 -1
  175. package/templates/app/docs/errors/CAGE-SENS-001.md +1 -1
  176. package/templates/app/docs/errors/CAGE-SQL-001.md +1 -1
  177. package/templates/app/docs/errors/CAGE-SQL-002.md +1 -1
  178. package/templates/app/docs/errors/CAGE-STATE-001.md +1 -1
  179. package/templates/app/docs/errors/CAGE-STATE-002.md +1 -1
  180. package/templates/app/docs/errors/CAGE-STATE-003.md +1 -1
  181. package/templates/app/docs/errors/CAGE-STATE-004.md +1 -1
  182. package/templates/app/docs/errors/CAGE-STATE-005.md +1 -1
  183. package/templates/app/docs/errors/CAGE-STATE-010.md +1 -1
  184. package/templates/app/docs/errors/CAGE-STATE-011.md +1 -1
  185. package/templates/app/docs/errors/CAGE-STRUCT-001.md +4 -4
  186. package/templates/app/docs/errors/CAGE-STRUCT-002.md +3 -3
  187. package/templates/app/docs/errors/CAGE-SYNC-001.md +4 -4
  188. package/templates/app/docs/errors/CAGE-TEST-001.md +1 -1
  189. package/templates/app/docs/errors/CAGE-TEST-002.md +1 -1
  190. package/templates/app/docs/errors/CAGE-TEST-003.md +1 -1
  191. package/templates/app/docs/errors/CAGE-UNSAFE-001.md +1 -1
  192. package/templates/app/docs/errors/CAGE-UPGRADE-001.md +1 -1
  193. package/templates/app/docs/errors/CAGE-WORKER-001.md +1 -1
  194. package/templates/app/docs/errors/CAGE-WORKER-002.md +1 -1
  195. package/templates/app/docs/errors/CAGE-WORKER-003.md +1 -1
  196. package/templates/app/docs/errors/README.md +3 -3
  197. package/templates/app/docs/errors/runtime.md +1 -1
  198. package/templates/app/package.json +3 -3
  199. package/templates/app/packages/contracts/package.json +1 -1
  200. package/templates/app/packages/contracts/src/aggregates/approval-member/index.ts +70 -0
  201. package/templates/app/packages/contracts/src/aggregates/purchase-order/index.ts +10 -2
  202. package/templates/app/packages/contracts/src/index.ts +9 -0
  203. package/templates/app/packages/domain/package.json +5 -5
  204. package/templates/app/packages/domain/src/modules/purchase/approval-members.ts +54 -0
  205. package/templates/app/packages/domain/src/modules/purchase/approvals.ts +19 -8
  206. package/templates/app/packages/domain/src/modules/purchase/index.ts +2 -1
  207. package/templates/app/packages/domain/src/modules/purchase/intelligence.test.ts +169 -7
  208. package/templates/app/packages/domain/src/modules/purchase/purchase-order.ts +56 -5
  209. package/templates/blank/.agents/skills/cage-development/SKILL.md +10 -0
  210. package/templates/blank/AGENTS.md +39 -122
  211. package/templates/blank/CLAUDE.md +6 -0
  212. package/templates/blank/README.md +3 -3
  213. package/templates/blank/apps/api/package.json +1 -1
  214. package/templates/blank/apps/web/package.json +1 -1
  215. package/templates/blank/docs/README.md +11 -0
  216. package/templates/blank/docs/development/README.md +64 -0
  217. package/templates/blank/docs/development/examples/note/note-detail-page.tsx +106 -0
  218. package/templates/blank/docs/development/examples/note/note.ts +67 -0
  219. package/templates/blank/docs/development/examples/note/notes-page.tsx +87 -0
  220. package/templates/{app/docs/ai → blank/docs/development/examples}/purchase-example.md +24 -10
  221. package/templates/{app/docs/ai → blank/docs/development/getting-started}/architecture.md +4 -4
  222. package/templates/blank/docs/development/getting-started/first-feature.md +66 -0
  223. package/templates/{app/docs/ai → blank/docs/development/getting-started}/workflow.md +13 -12
  224. package/templates/blank/docs/development/guides/approvals.md +270 -0
  225. package/templates/blank/docs/development/guides/business-collaboration.md +63 -0
  226. package/templates/{app/docs/ai → blank/docs/development/guides}/files.md +5 -1
  227. package/templates/blank/docs/{ai → development/guides}/intelligence.md +4 -4
  228. package/templates/{app/docs/ai → blank/docs/development/guides}/recipes.md +31 -11
  229. package/templates/blank/docs/{ai → development/guides}/relations.md +2 -2
  230. package/templates/blank/docs/{ai → development/guides}/routing.md +1 -1
  231. package/templates/{app/docs/ai → blank/docs/development/guides}/transfers.md +1 -1
  232. package/templates/{app/docs/ai → blank/docs/development/reference}/commenting.md +1 -1
  233. package/templates/blank/docs/{ai → development/reference}/primitives.md +8 -62
  234. package/templates/blank/docs/{ai → development/reference}/project-structure.md +2 -2
  235. package/templates/blank/docs/development/skills/cage-development/SKILL.md +134 -0
  236. package/templates/{app/docs/ai → blank/docs/development/tools}/diagnostics.md +3 -3
  237. package/templates/{app/docs/ai → blank/docs/development/tools}/ontology-context.md +3 -3
  238. package/templates/blank/docs/{ai → development/tools}/troubleshooting.md +7 -1
  239. package/templates/blank/docs/errors/CAGE-AI-001.md +3 -3
  240. package/templates/blank/docs/errors/CAGE-APPR-001.md +13 -10
  241. package/templates/blank/docs/errors/CAGE-APPR-002.md +1 -1
  242. package/templates/blank/docs/errors/CAGE-APPR-003.md +1 -1
  243. package/templates/blank/docs/errors/CAGE-APPR-004.md +1 -1
  244. package/templates/blank/docs/errors/CAGE-APPR-005.md +5 -5
  245. package/templates/blank/docs/errors/CAGE-APPR-006.md +25 -10
  246. package/templates/blank/docs/errors/CAGE-APPR-007.md +9 -7
  247. package/templates/blank/docs/errors/CAGE-APPR-010.md +1 -1
  248. package/templates/blank/docs/errors/CAGE-AUDIT-001.md +1 -1
  249. package/templates/blank/docs/errors/CAGE-AUTH-001.md +1 -1
  250. package/templates/blank/docs/errors/CAGE-BIZ-001.md +1 -1
  251. package/templates/blank/docs/errors/CAGE-BIZ-002.md +1 -1
  252. package/templates/blank/docs/errors/CAGE-BUDGET-001.md +1 -1
  253. package/templates/blank/docs/errors/CAGE-BUDGET-002.md +1 -1
  254. package/templates/blank/docs/errors/CAGE-BUDGET-003.md +1 -1
  255. package/templates/blank/docs/errors/CAGE-CMD-002.md +1 -1
  256. package/templates/blank/docs/errors/CAGE-CMD-003.md +1 -1
  257. package/templates/blank/docs/errors/CAGE-CONN-001.md +1 -1
  258. package/templates/blank/docs/errors/CAGE-CONN-002.md +1 -1
  259. package/templates/blank/docs/errors/CAGE-CONN-003.md +1 -1
  260. package/templates/blank/docs/errors/CAGE-CONN-004.md +1 -1
  261. package/templates/blank/docs/errors/CAGE-CONN-005.md +1 -1
  262. package/templates/blank/docs/errors/CAGE-CONN-006.md +1 -1
  263. package/templates/blank/docs/errors/CAGE-CONN-007.md +1 -1
  264. package/templates/blank/docs/errors/CAGE-CONN-008.md +1 -1
  265. package/templates/blank/docs/errors/CAGE-CONN-009.md +1 -1
  266. package/templates/blank/docs/errors/CAGE-CONN-010.md +1 -1
  267. package/templates/blank/docs/errors/CAGE-CONN-011.md +1 -1
  268. package/templates/blank/docs/errors/CAGE-CONN-012.md +1 -1
  269. package/templates/blank/docs/errors/CAGE-CONN-013.md +1 -1
  270. package/templates/blank/docs/errors/CAGE-CONN-014.md +1 -1
  271. package/templates/blank/docs/errors/CAGE-CONN-015.md +1 -1
  272. package/templates/blank/docs/errors/CAGE-CREATE-001.md +2 -2
  273. package/templates/blank/docs/errors/CAGE-DECL-001.md +1 -1
  274. package/templates/blank/docs/errors/CAGE-DECL-002.md +1 -1
  275. package/templates/blank/docs/errors/CAGE-DECL-003.md +1 -1
  276. package/templates/blank/docs/errors/CAGE-DECL-004.md +1 -1
  277. package/templates/blank/docs/errors/CAGE-DEP-001.md +1 -1
  278. package/templates/blank/docs/errors/CAGE-DEP-002.md +1 -1
  279. package/templates/blank/docs/errors/CAGE-DEP-003.md +1 -1
  280. package/templates/blank/docs/errors/CAGE-DEP-004.md +1 -1
  281. package/templates/blank/docs/errors/CAGE-DEP-005.md +1 -1
  282. package/templates/blank/docs/errors/CAGE-DIAG-001.md +1 -1
  283. package/templates/blank/docs/errors/CAGE-DLQ-001.md +1 -1
  284. package/templates/blank/docs/errors/CAGE-ENV-001.md +1 -1
  285. package/templates/blank/docs/errors/CAGE-ENV-002.md +1 -1
  286. package/templates/blank/docs/errors/CAGE-ENV-003.md +1 -1
  287. package/templates/blank/docs/errors/CAGE-EVENT-001.md +2 -2
  288. package/templates/blank/docs/errors/CAGE-EVENT-002.md +1 -1
  289. package/templates/blank/docs/errors/CAGE-FIELD-001.md +1 -1
  290. package/templates/blank/docs/errors/CAGE-FIELD-002.md +1 -1
  291. package/templates/blank/docs/errors/CAGE-FIELD-003.md +1 -1
  292. package/templates/blank/docs/errors/CAGE-FIELD-004.md +1 -1
  293. package/templates/blank/docs/errors/CAGE-FILE-001.md +1 -1
  294. package/templates/blank/docs/errors/CAGE-GEN-001.md +1 -1
  295. package/templates/blank/docs/errors/CAGE-GEN-002.md +1 -1
  296. package/templates/blank/docs/errors/CAGE-GEN-003.md +1 -1
  297. package/templates/blank/docs/errors/CAGE-GRANT-001.md +1 -1
  298. package/templates/blank/docs/errors/CAGE-GRANT-002.md +1 -1
  299. package/templates/blank/docs/errors/CAGE-GRANT-003.md +1 -1
  300. package/templates/blank/docs/errors/CAGE-IMPACT-001.md +1 -1
  301. package/templates/blank/docs/errors/CAGE-IMPACT-002.md +1 -1
  302. package/templates/blank/docs/errors/CAGE-INIT-001.md +1 -1
  303. package/templates/blank/docs/errors/CAGE-INIT-002.md +1 -1
  304. package/templates/blank/docs/errors/CAGE-INIT-003.md +1 -1
  305. package/templates/blank/docs/errors/CAGE-INIT-004.md +1 -1
  306. package/templates/blank/docs/errors/CAGE-INIT-005.md +1 -1
  307. package/templates/blank/docs/errors/CAGE-JOB-001.md +1 -1
  308. package/templates/blank/docs/errors/CAGE-JOB-002.md +1 -1
  309. package/templates/blank/docs/errors/CAGE-JOB-003.md +1 -1
  310. package/templates/blank/docs/errors/CAGE-LINT-001.md +1 -1
  311. package/templates/blank/docs/errors/CAGE-MIG-001.md +1 -1
  312. package/templates/blank/docs/errors/CAGE-MIG-002.md +1 -1
  313. package/templates/blank/docs/errors/CAGE-MIG-005.md +1 -1
  314. package/templates/blank/docs/errors/CAGE-NAME-001.md +1 -1
  315. package/templates/blank/docs/errors/CAGE-NAME-002.md +1 -1
  316. package/templates/blank/docs/errors/CAGE-NAME-003.md +1 -1
  317. package/templates/blank/docs/errors/CAGE-NAME-004.md +1 -1
  318. package/templates/blank/docs/errors/CAGE-NAME-005.md +1 -1
  319. package/templates/blank/docs/errors/CAGE-NAME-006.md +1 -1
  320. package/templates/blank/docs/errors/CAGE-ORG-001.md +1 -1
  321. package/templates/blank/docs/errors/CAGE-PAIR-002.md +1 -1
  322. package/templates/blank/docs/errors/CAGE-QUERY-001.md +1 -1
  323. package/templates/blank/docs/errors/CAGE-QUERY-002.md +1 -1
  324. package/templates/blank/docs/errors/CAGE-QUERY-003.md +1 -1
  325. package/templates/blank/docs/errors/CAGE-REACT-001.md +1 -1
  326. package/templates/blank/docs/errors/CAGE-REACT-002.md +1 -1
  327. package/templates/blank/docs/errors/CAGE-REACT-003.md +1 -1
  328. package/templates/blank/docs/errors/CAGE-READS-001.md +1 -1
  329. package/templates/blank/docs/errors/CAGE-REG-001.md +2 -2
  330. package/templates/blank/docs/errors/CAGE-REG-002.md +1 -1
  331. package/templates/blank/docs/errors/CAGE-REG-003.md +1 -1
  332. package/templates/blank/docs/errors/CAGE-REL-001.md +1 -1
  333. package/templates/blank/docs/errors/CAGE-ROUTE-001.md +1 -1
  334. package/templates/blank/docs/errors/CAGE-SCOPE-001.md +1 -1
  335. package/templates/blank/docs/errors/CAGE-SCOPE-002.md +1 -1
  336. package/templates/blank/docs/errors/CAGE-SECRET-001.md +1 -1
  337. package/templates/blank/docs/errors/CAGE-SECRET-002.md +1 -1
  338. package/templates/blank/docs/errors/CAGE-SENS-001.md +1 -1
  339. package/templates/blank/docs/errors/CAGE-SQL-001.md +1 -1
  340. package/templates/blank/docs/errors/CAGE-SQL-002.md +1 -1
  341. package/templates/blank/docs/errors/CAGE-STATE-001.md +1 -1
  342. package/templates/blank/docs/errors/CAGE-STATE-002.md +1 -1
  343. package/templates/blank/docs/errors/CAGE-STATE-003.md +1 -1
  344. package/templates/blank/docs/errors/CAGE-STATE-004.md +1 -1
  345. package/templates/blank/docs/errors/CAGE-STATE-005.md +1 -1
  346. package/templates/blank/docs/errors/CAGE-STATE-010.md +1 -1
  347. package/templates/blank/docs/errors/CAGE-STATE-011.md +1 -1
  348. package/templates/blank/docs/errors/CAGE-STRUCT-001.md +4 -4
  349. package/templates/blank/docs/errors/CAGE-STRUCT-002.md +3 -3
  350. package/templates/blank/docs/errors/CAGE-SYNC-001.md +4 -4
  351. package/templates/blank/docs/errors/CAGE-TEST-001.md +1 -1
  352. package/templates/blank/docs/errors/CAGE-TEST-002.md +1 -1
  353. package/templates/blank/docs/errors/CAGE-TEST-003.md +1 -1
  354. package/templates/blank/docs/errors/CAGE-UNSAFE-001.md +1 -1
  355. package/templates/blank/docs/errors/CAGE-UPGRADE-001.md +1 -1
  356. package/templates/blank/docs/errors/CAGE-WORKER-001.md +1 -1
  357. package/templates/blank/docs/errors/CAGE-WORKER-002.md +1 -1
  358. package/templates/blank/docs/errors/CAGE-WORKER-003.md +1 -1
  359. package/templates/blank/docs/errors/README.md +3 -3
  360. package/templates/blank/docs/errors/runtime.md +1 -1
  361. package/templates/blank/docs/examples/purchase-admin/README.md +1 -1
  362. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/components/task-operation-dialog.tsx +61 -0
  363. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/hooks/use-approval-tasks.ts +6 -9
  364. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/pages/approval-tasks-page.tsx +81 -49
  365. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/approval/pages/approval-tasks.css +18 -0
  366. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/approval-history.tsx +39 -4
  367. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/order-reviewers.tsx +38 -0
  368. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/components/purchase-order-form.tsx +9 -2
  369. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-intelligence.css +2 -0
  370. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-order-detail-page.tsx +2 -0
  371. package/templates/blank/docs/examples/purchase-admin/apps/web/src/modules/purchase/pages/purchase-orders-page.tsx +2 -0
  372. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/lib/error-message.ts +6 -1
  373. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/approval-member-picker.css +10 -0
  374. package/templates/blank/docs/examples/purchase-admin/apps/web/src/shared/ui/approval-member-picker.tsx +51 -0
  375. package/templates/blank/docs/examples/purchase-admin/cage.config.json +14 -0
  376. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/approval-member/index.ts +70 -0
  377. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/aggregates/purchase-order/index.ts +10 -2
  378. package/templates/blank/docs/examples/purchase-admin/packages/contracts/src/index.ts +9 -0
  379. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/approval-members.ts +54 -0
  380. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/approvals.ts +19 -8
  381. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/index.ts +2 -1
  382. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/intelligence.test.ts +169 -7
  383. package/templates/blank/docs/examples/purchase-admin/packages/domain/src/modules/purchase/purchase-order.ts +56 -5
  384. package/templates/blank/package.json +3 -3
  385. package/templates/blank/packages/contracts/package.json +1 -1
  386. package/templates/blank/packages/domain/package.json +5 -5
  387. package/templates/app/docs/ai/README.md +0 -98
  388. package/templates/blank/docs/ai/README.md +0 -98
@@ -1,6 +1,6 @@
1
1
  # CAGE-NAME-002:字段名必须小驼峰
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-NAME-003:事件名必须大驼峰
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-NAME-004:命令名必须小驼峰
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-NAME-005:查询名必须小驼峰
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-NAME-006:任务名必须小驼峰
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-ORG-001:业务入口遗漏组织模型
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-PAIR-002:离开持有资源状态却没有释放
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-QUERY-001:查询必须选择一种实现
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-QUERY-002:自定义查询直接访问基表
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-QUERY-003:查询读取范围与声明不一致
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-REACT-001:反应目标与命令聚合不一致
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-REACT-002:同事务反应链嵌套过深
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-REACT-003:集合或步骤顺序声明无效
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-READS-001:handler 使用了未声明读依赖
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-REG-001:注册表缺少被引用声明
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -34,7 +34,7 @@ export * from './inventory.js'; export * from './purchase-order.js';
34
34
 
35
35
  以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
36
 
37
- - `packages/approval/src/route.ts:161`
37
+ - `packages/approval/src/route.ts:231`
38
38
  - `packages/kernel/src/kernel.ts:161`
39
39
  - `packages/kernel/src/registry.ts:209`
40
40
  - `packages/kernel/src/registry.ts:215`
@@ -1,6 +1,6 @@
1
1
  # CAGE-REG-002:聚合或查询注册重名
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-REG-003:命令能力点重复
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-REL-001:关系字段声明无效
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-ROUTE-001:业务项目手写 HTTP 路由
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-SCOPE-001:范围组合子未知
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-SCOPE-002:范围字段没有声明
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-SECRET-001:运行环境缺少密钥
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-SECRET-002:源码疑似包含密钥字面量
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-SENS-001:敏感字段未标注就进入事件
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-SQL-001:SQL 拼接用户值
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-SQL-002:sql.raw 接收动态表达式
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-STATE-001:引用了未声明状态
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-STATE-002:状态集合为空
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-STATE-003:状态名称格式错误
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-STATE-004:状态名称重复
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-STATE-005:状态声明位置冲突
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-STATE-010:状态不可达
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-STATE-011:非终态没有后续操作
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-STRUCT-001:业务源码目录不符合模块约定
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  1. 前端使用 app / modules / shared,src 根目录只保留 main.tsx;领域使用 modules / workflows / integrations / shared,根目录只保留 index.ts。
16
16
  2. 把页面、表单、hooks 和业务辅助代码放在同一业务模块,需要时再拆文件;不要创建空目录凑层级。测试就近放置,类型声明 .d.ts 不受入口约束。
17
- 3. 目录调整后修正导入并运行 cage check、gen、verify;完整规范见 docs/ai/project-structure.md。
17
+ 3. 目录调整后修正导入并运行 cage check、gen、verify;完整规范见 docs/development/reference/project-structure.md。
18
18
 
19
19
  ## 正例
20
20
 
@@ -32,7 +32,7 @@ packages/domain/src/expense.ts
32
32
 
33
33
  ## 修复后验证
34
34
 
35
- 按 docs/ai/project-structure.md 整理归属和导入后重跑 cage check 与 verify;不关闭目录规则,也不改业务表或能力标识。
35
+ 按 docs/development/reference/project-structure.md 整理归属和导入后重跑 cage check 与 verify;不关闭目录规则,也不改业务表或能力标识。
36
36
 
37
37
  ## 框架内的检查位置
38
38
 
@@ -47,5 +47,5 @@ packages/domain/src/expense.ts
47
47
  code: 'CAGE-STRUCT-001',
48
48
  at,
49
49
  reason: `${kind} 源码没有放入约定模块:${from.path}`,
50
- fix: `src 根目录只保留${kind === 'domain' ? '领域 index.ts' : '浏览器 main.tsx'};业务按归属放入 ${layers.join(' / ')},见 docs/ai/project-structure.md`,
50
+ fix: `src 根目录只保留${kind === 'domain' ? '领域 index.ts' : '浏览器 main.tsx'};业务按归属放入 ${layers.join(' / ')},见 docs/development/reference/project-structure.md`,
51
51
  ```
@@ -1,6 +1,6 @@
1
1
  # CAGE-STRUCT-002:源码依赖越过模块边界
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -32,7 +32,7 @@ import { ExpensePage } from '../../modules/expense/pages/expense-page';
32
32
 
33
33
  ## 修复后验证
34
34
 
35
- 按 docs/ai/project-structure.md 整理归属和导入后重跑 cage check 与 verify;不关闭目录规则,也不改业务表或能力标识。
35
+ 按 docs/development/reference/project-structure.md 整理归属和导入后重跑 cage check 与 verify;不关闭目录规则,也不改业务表或能力标识。
36
36
 
37
37
  ## 框架内的检查位置
38
38
 
@@ -47,5 +47,5 @@ import { ExpensePage } from '../../modules/expense/pages/expense-page';
47
47
  code: 'CAGE-STRUCT-002',
48
48
  at: `${at}:${source.slice(0, spec.pos).split('\n').length}`,
49
49
  reason: `${reason}(${spec.fileName})`,
50
- fix: '调整依赖归属;共用纯逻辑下沉到 shared,页面协作由 app 传参,领域交互通过模块公开声明。见 docs/ai/project-structure.md',
50
+ fix: '调整依赖归属;共用纯逻辑下沉到 shared,页面协作由 app 传参,领域交互通过模块公开声明。见 docs/development/reference/project-structure.md',
51
51
  ```
@@ -1,6 +1,6 @@
1
1
  # CAGE-SYNC-001:AGENTS 托管区过期或标记损坏
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -34,9 +34,9 @@ sync --check 发现框架规则需更新,或 begin/end 标记缺失一边、
34
34
 
35
35
  以下路径相对框架源码仓库,不是要求业务项目创建这些文件。当前项目先修业务声明、配置或授权;明确属于框架缺口时反馈错误码和脱敏上下文。
36
36
 
37
- - `packages/cli/src/sync.ts:149`
38
- - `packages/cli/src/sync.ts:156`
39
- - `packages/cli/src/sync.ts:167`
37
+ - `packages/cli/src/sync.ts:66`
38
+ - `packages/cli/src/sync.ts:73`
39
+ - `packages/cli/src/sync.ts:84`
40
40
 
41
41
  实现片段(位置随框架版本更新):
42
42
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-TEST-001:测试进程没有生成结果报告
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-TEST-002:派生测试准备或初始夹具失败
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-TEST-003:测试数据库目录归属不匹配
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-UNSAFE-001:逃生口缺少原因或负责人
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-UPGRADE-001:升级版本或 codemod 有歧义
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-WORKER-001:缺少必要后台引擎
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-WORKER-002:事件与消费者清单不匹配
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -1,6 +1,6 @@
1
1
  # CAGE-WORKER-003:后台任务未在停机时限内结束
2
2
 
3
- [返回错误码册](README.md) · [业务排错](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [业务排错](../development/tools/troubleshooting.md)
4
4
 
5
5
  > 本页由框架生成。正反例为局部声明或操作说明,完整写法见业务开发指南及本项目 domain。
6
6
 
@@ -3,7 +3,7 @@
3
3
  这是本业务项目自带的离线诊断手册。先使用错误码、声明位置、reason/fix 定位;不需要克隆框架仓库。
4
4
 
5
5
  - [HTTP 运行时错误与业务码](runtime.md):401/403/404、状态冲突、约束拒绝、DOMAIN_ERROR 等。
6
- - [业务排错顺序](../ai/troubleshooting.md):启动、权限、审批人、worker、死信与导入导出。
6
+ - [业务排错顺序](../development/tools/troubleshooting.md):启动、权限、审批人、worker、死信与导入导出。
7
7
  - CAGE-* 是声明、工具链或内部运行诊断;HTTP code 与业务 domainCode 是另一层,不要混为一谈。
8
8
 
9
9
  每页包含触发阶段、具体原因、修复步骤、正反例、验证方法与当前版实现位置。例子为局部说明,不能替代完整业务输入。
@@ -44,12 +44,12 @@
44
44
 
45
45
  | 诊断码 | 含义 |
46
46
  | --- | --- |
47
- | [CAGE-APPR-001](CAGE-APPR-001.md) | 可路由字段不存在 |
47
+ | [CAGE-APPR-001](CAGE-APPR-001.md) | 审批字段声明无效 |
48
48
  | [CAGE-APPR-002](CAGE-APPR-002.md) | 审批结论落到其他聚合 |
49
49
  | [CAGE-APPR-003](CAGE-APPR-003.md) | 审批结论未允许流程调用 |
50
50
  | [CAGE-APPR-004](CAGE-APPR-004.md) | 路由没有对应审批绑定 |
51
51
  | [CAGE-APPR-005](CAGE-APPR-005.md) | 流程名称格式错误 |
52
- | [CAGE-APPR-006](CAGE-APPR-006.md) | 流程没有步骤 |
52
+ | [CAGE-APPR-006](CAGE-APPR-006.md) | 审批步骤配置无效 |
53
53
  | [CAGE-APPR-007](CAGE-APPR-007.md) | 找不到审批人 |
54
54
  | [CAGE-APPR-010](CAGE-APPR-010.md) | 流程专用命令没有调用者 |
55
55
 
@@ -1,6 +1,6 @@
1
1
  # HTTP 运行时错误与业务码
2
2
 
3
- [返回错误码册](README.md) · [排错方法](../ai/troubleshooting.md)
3
+ [返回错误码册](README.md) · [排错方法](../development/tools/troubleshooting.md)
4
4
 
5
5
  框架诊断分三层:`CAGE-APPR-007` 等内部/工具码、HTTP 响应的通用 `code`、业务拒绝的 `domainCode`。同一次失败可以同时涉及几层;例如审批人配置问题出现在 worker 死信,前端提交此前可能已成功。
6
6
 
@@ -11,9 +11,9 @@
11
11
  "build:app": "pnpm --filter @app/domain build && pnpm --filter @app/api build && pnpm --filter @app/web build"
12
12
  },
13
13
  "devDependencies": {
14
- "@yss123/cage-cli": "0.3.0",
15
- "@yss123/cage-testkit": "0.3.0",
16
- "@yss123/cage-lint": "0.3.0",
14
+ "@yss123/cage-cli": "0.3.2",
15
+ "@yss123/cage-testkit": "0.3.2",
16
+ "@yss123/cage-lint": "0.3.2",
17
17
  "@types/node": "^24.3.0",
18
18
  "typescript": "~5.9.3",
19
19
  "vitest": "^4.1.12",
@@ -10,7 +10,7 @@
10
10
  "typecheck": "tsc -p tsconfig.json --noEmit"
11
11
  },
12
12
  "dependencies": {
13
- "@yss123/cage-client": "0.3.0",
13
+ "@yss123/cage-client": "0.3.2",
14
14
  "zod": "^4.1.5"
15
15
  }
16
16
  }
@@ -0,0 +1,70 @@
1
+ // 生成物:由 cage gen 从 domain 声明生成,不要手改。
2
+ /* eslint-disable */
3
+
4
+ import { z } from 'zod';
5
+ import { client, useCageList, useCageQuery, type TransferTask, type RequestOptions } from '@yss123/cage-client';
6
+
7
+ /** 采购审批协作名录:读侧快照(敏感字段是按权限掩码后的值) */
8
+ export const ApprovalMemberSchema = z.object({
9
+ id: z.string().uuid(),
10
+ userId: z.string().uuid(),
11
+ displayName: z.string(),
12
+ specialty: z.string(),
13
+ status: z.enum(["active", "retired"]),
14
+ version: z.number().int(),
15
+ createdAt: z.string(),
16
+ updatedAt: z.string(),
17
+ });
18
+ export type ApprovalMember = z.infer<typeof ApprovalMemberSchema>;
19
+ export type ApprovalMemberStatus = ApprovalMember['status'];
20
+ export const ApprovalMemberStates = ['active', 'retired'] as const;
21
+
22
+ /** 命令输入:和后端命令的输入校验完全一致 */
23
+ export const ApprovalMemberInputs = {
24
+ create: z.object({ userId: z.string().uuid().regex(new RegExp("^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$")), displayName: z.unknown(), specialty: z.unknown() }),
25
+ retire: z.object({ id: z.string().uuid().regex(new RegExp("^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$")) }),
26
+ update: z.object({ id: z.string().uuid().regex(new RegExp("^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$")), displayName: z.unknown(), specialty: z.unknown() }),
27
+ };
28
+
29
+ /** ApprovalMember.create 可能返回的错误码 */
30
+ export type ApprovalMemberCreateError = 'CONFLICT' | 'CONSTRAINT_VIOLATED' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT';
31
+ /** ApprovalMember.retire 可能返回的错误码 */
32
+ export type ApprovalMemberRetireError = 'CONFLICT' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
33
+ /** ApprovalMember.update 可能返回的错误码 */
34
+ export type ApprovalMemberUpdateError = 'CONFLICT' | 'DOMAIN_ERROR' | 'FORBIDDEN' | 'INVALID_INPUT' | 'INVALID_TRANSITION' | 'NOT_FOUND';
35
+
36
+ export type ApprovalMemberSortKey = 'createdAt' | 'updatedAt' | 'userId' | 'displayName' | 'specialty';
37
+ export interface ApprovalMemberListParams {
38
+ page?: number;
39
+ pageSize?: number;
40
+ /** 排序:字段名,前面加 - 表示倒序 */
41
+ sort?: ApprovalMemberSortKey | `-${ApprovalMemberSortKey}`;
42
+ /** 可以逗号分隔多个状态 */
43
+ status?: string;
44
+ createdAfter?: string;
45
+ createdBefore?: string;
46
+ userId?: string | number | boolean;
47
+ displayName?: string | number | boolean;
48
+ specialty?: string | number | boolean;
49
+ }
50
+
51
+ /** 调用方法:每个命令一个;client 自动生成并附带幂等键和 CSRF 令牌 */
52
+ export const approvalMember = {
53
+ /** 登记采购审批协作人 */
54
+ create: (input: z.input<typeof ApprovalMemberInputs.create>, options: RequestOptions = {}) => client.post<ApprovalMember, ApprovalMemberCreateError>('/api/approval-member/create', input, options),
55
+ /** 停用采购审批协作名录成员 */
56
+ retire: (id: string, expectedVersion?: number, options: RequestOptions = {}) => client.post<ApprovalMember, ApprovalMemberRetireError>(`/api/approval-member/${encodeURIComponent(id)}/retire`, { expectedVersion }, options),
57
+ /** 修改采购协作人的公开资料 */
58
+ update: (id: string, input: Omit<z.input<typeof ApprovalMemberInputs.update>, 'id'>, expectedVersion?: number, options: RequestOptions = {}) => client.post<ApprovalMember, ApprovalMemberUpdateError>(`/api/approval-member/${encodeURIComponent(id)}/update`, { ...input, expectedVersion }, options),
59
+ /** 异步导出 CSV:返回任务,使用 client.transfer(id) 查状态,完成后下载。需要 ApprovalMember.export 能力。 */
60
+ export: (params: ApprovalMemberListParams = {}, options: RequestOptions = {}) => client.post<TransferTask, 'CONFLICT'>('/api/approval-member/export', params, options),
61
+ get: (id: string, options: RequestOptions = {}) => client.get<ApprovalMember>(`/api/approval-member/${encodeURIComponent(id)}`, undefined, options),
62
+ list: (params: ApprovalMemberListParams = {}, options: RequestOptions = {}) => client.get<{ items: ApprovalMember[]; total: number; page: number; pageSize: number }>('/api/approval-member', params as Record<string, unknown>, options),
63
+ };
64
+
65
+ /** 详情查询 hook:响应也用 schema 校验;范围外返回 NOT_FOUND */
66
+ export const useApprovalMember = (id: string) => useCageQuery(['approval-member', id], `/api/approval-member/${encodeURIComponent(id)}`, ApprovalMemberSchema, { enabled: !!id });
67
+ /** 列表查询 hook:走读侧账号与安全视图 */
68
+ export const useApprovalMemberList = (params: ApprovalMemberListParams = {}) => useCageList(['approval-member'], '/api/approval-member', params as Record<string, unknown>, ApprovalMemberSchema);
69
+ /** 查询缓存键前缀:命令成功后让它失效 */
70
+ export const approvalMemberKeys = { all: ['approval-member'] as const, one: (id: string) => ['approval-member', id] as const };