@mantajs/core 0.1.6 → 0.2.0-beta.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 (564) hide show
  1. package/dist/adapters/auth-mock.d.ts +44 -0
  2. package/dist/adapters/auth-mock.d.ts.map +1 -0
  3. package/dist/adapters/auth-mock.js +160 -0
  4. package/dist/adapters/auth-mock.js.map +1 -0
  5. package/dist/adapters/cache-memory.d.ts +11 -0
  6. package/dist/adapters/cache-memory.d.ts.map +1 -0
  7. package/dist/adapters/cache-memory.js +32 -0
  8. package/dist/adapters/cache-memory.js.map +1 -0
  9. package/dist/adapters/database-memory.d.ts +24 -0
  10. package/dist/adapters/database-memory.d.ts.map +1 -0
  11. package/dist/adapters/database-memory.js +141 -0
  12. package/dist/adapters/database-memory.js.map +1 -0
  13. package/dist/adapters/eventbus-memory.d.ts +37 -0
  14. package/dist/adapters/eventbus-memory.d.ts.map +1 -0
  15. package/dist/adapters/eventbus-memory.js +166 -0
  16. package/dist/adapters/eventbus-memory.js.map +1 -0
  17. package/dist/adapters/file-memory.d.ts +24 -0
  18. package/dist/adapters/file-memory.d.ts.map +1 -0
  19. package/dist/adapters/file-memory.js +77 -0
  20. package/dist/adapters/file-memory.js.map +1 -0
  21. package/dist/adapters/http-memory.d.ts +23 -0
  22. package/dist/adapters/http-memory.d.ts.map +1 -0
  23. package/dist/adapters/http-memory.js +149 -0
  24. package/dist/adapters/http-memory.js.map +1 -0
  25. package/dist/adapters/index.d.ts +14 -0
  26. package/dist/adapters/index.d.ts.map +1 -0
  27. package/dist/adapters/index.js +15 -0
  28. package/dist/adapters/index.js.map +1 -0
  29. package/dist/adapters/job-scheduler-memory.d.ts +20 -0
  30. package/dist/adapters/job-scheduler-memory.d.ts.map +1 -0
  31. package/dist/adapters/job-scheduler-memory.js +103 -0
  32. package/dist/adapters/job-scheduler-memory.js.map +1 -0
  33. package/dist/adapters/locking-memory.d.ts +20 -0
  34. package/dist/adapters/locking-memory.d.ts.map +1 -0
  35. package/dist/adapters/locking-memory.js +85 -0
  36. package/dist/adapters/locking-memory.js.map +1 -0
  37. package/dist/adapters/logger-test.d.ts +30 -0
  38. package/dist/adapters/logger-test.d.ts.map +1 -0
  39. package/dist/adapters/logger-test.js +77 -0
  40. package/dist/adapters/logger-test.js.map +1 -0
  41. package/dist/adapters/notification-memory.d.ts +27 -0
  42. package/dist/adapters/notification-memory.d.ts.map +1 -0
  43. package/dist/adapters/notification-memory.js +69 -0
  44. package/dist/adapters/notification-memory.js.map +1 -0
  45. package/dist/adapters/relational-query-memory.d.ts +47 -0
  46. package/dist/adapters/relational-query-memory.d.ts.map +1 -0
  47. package/dist/adapters/relational-query-memory.js +263 -0
  48. package/dist/adapters/relational-query-memory.js.map +1 -0
  49. package/dist/adapters/repository-factory-memory.d.ts +17 -0
  50. package/dist/adapters/repository-factory-memory.d.ts.map +1 -0
  51. package/dist/adapters/repository-factory-memory.js +32 -0
  52. package/dist/adapters/repository-factory-memory.js.map +1 -0
  53. package/dist/adapters/repository-memory.d.ts +30 -0
  54. package/dist/adapters/repository-memory.d.ts.map +1 -0
  55. package/dist/adapters/repository-memory.js +183 -0
  56. package/dist/adapters/repository-memory.js.map +1 -0
  57. package/dist/ai/index.d.ts +53 -0
  58. package/dist/ai/index.d.ts.map +1 -0
  59. package/dist/ai/index.js +48 -0
  60. package/dist/ai/index.js.map +1 -0
  61. package/dist/app/index.d.ts +97 -0
  62. package/dist/app/index.d.ts.map +1 -0
  63. package/dist/app/index.js +217 -0
  64. package/dist/app/index.js.map +1 -0
  65. package/dist/app/request-context.d.ts +35 -0
  66. package/dist/app/request-context.d.ts.map +1 -0
  67. package/dist/app/request-context.js +32 -0
  68. package/dist/app/request-context.js.map +1 -0
  69. package/dist/auth/auth-module-service.d.ts +62 -0
  70. package/dist/auth/auth-module-service.d.ts.map +1 -0
  71. package/dist/auth/auth-module-service.js +210 -0
  72. package/dist/auth/auth-module-service.js.map +1 -0
  73. package/dist/auth/index.d.ts +7 -0
  74. package/dist/auth/index.d.ts.map +1 -0
  75. package/dist/auth/index.js +5 -0
  76. package/dist/auth/index.js.map +1 -0
  77. package/dist/auth/middleware.d.ts +19 -0
  78. package/dist/auth/middleware.d.ts.map +1 -0
  79. package/dist/auth/middleware.js +61 -0
  80. package/dist/auth/middleware.js.map +1 -0
  81. package/dist/auth/models/auth-identity.d.ts +11 -0
  82. package/dist/auth/models/auth-identity.d.ts.map +1 -0
  83. package/dist/auth/models/auth-identity.js +12 -0
  84. package/dist/auth/models/auth-identity.js.map +1 -0
  85. package/dist/auth/providers/emailpass.d.ts +7 -0
  86. package/dist/auth/providers/emailpass.d.ts.map +1 -0
  87. package/dist/auth/providers/emailpass.js +94 -0
  88. package/dist/auth/providers/emailpass.js.map +1 -0
  89. package/dist/auth/providers/types.d.ts +66 -0
  90. package/dist/auth/providers/types.d.ts.map +1 -0
  91. package/dist/auth/providers/types.js +3 -0
  92. package/dist/auth/providers/types.js.map +1 -0
  93. package/dist/auth/types.d.ts +36 -0
  94. package/dist/auth/types.d.ts.map +1 -0
  95. package/dist/auth/types.js +3 -0
  96. package/dist/auth/types.js.map +1 -0
  97. package/dist/command/define-command-graph.d.ts +63 -0
  98. package/dist/command/define-command-graph.d.ts.map +1 -0
  99. package/dist/command/define-command-graph.js +80 -0
  100. package/dist/command/define-command-graph.js.map +1 -0
  101. package/dist/command/dml-to-zod.d.ts +34 -0
  102. package/dist/command/dml-to-zod.d.ts.map +1 -0
  103. package/dist/command/dml-to-zod.js +140 -0
  104. package/dist/command/dml-to-zod.js.map +1 -0
  105. package/dist/command/generate-entity-commands.d.ts +68 -0
  106. package/dist/command/generate-entity-commands.d.ts.map +1 -0
  107. package/dist/command/generate-entity-commands.js +350 -0
  108. package/dist/command/generate-entity-commands.js.map +1 -0
  109. package/dist/command/index.d.ts +54 -0
  110. package/dist/command/index.d.ts.map +1 -0
  111. package/dist/command/index.js +338 -0
  112. package/dist/command/index.js.map +1 -0
  113. package/dist/command/types.d.ts +131 -0
  114. package/dist/command/types.d.ts.map +1 -0
  115. package/dist/command/types.js +2 -0
  116. package/dist/command/types.js.map +1 -0
  117. package/dist/config/built-in-presets.d.ts +20 -0
  118. package/dist/config/built-in-presets.d.ts.map +1 -0
  119. package/dist/config/built-in-presets.js +70 -0
  120. package/dist/config/built-in-presets.js.map +1 -0
  121. package/dist/config/config-manager.d.ts +117 -0
  122. package/dist/config/config-manager.d.ts.map +1 -0
  123. package/dist/config/config-manager.js +245 -0
  124. package/dist/config/config-manager.js.map +1 -0
  125. package/dist/config/define-config.d.ts +20 -0
  126. package/dist/config/define-config.d.ts.map +1 -0
  127. package/dist/config/define-config.js +64 -0
  128. package/dist/config/define-config.js.map +1 -0
  129. package/dist/config/feature-flags.d.ts +48 -0
  130. package/dist/config/feature-flags.d.ts.map +1 -0
  131. package/dist/config/feature-flags.js +97 -0
  132. package/dist/config/feature-flags.js.map +1 -0
  133. package/dist/config/index.d.ts +9 -0
  134. package/dist/config/index.d.ts.map +1 -0
  135. package/dist/config/index.js +8 -0
  136. package/dist/config/index.js.map +1 -0
  137. package/dist/config/presets.d.ts +38 -0
  138. package/dist/config/presets.d.ts.map +1 -0
  139. package/dist/config/presets.js +29 -0
  140. package/dist/config/presets.js.map +1 -0
  141. package/dist/config/types.d.ts +707 -0
  142. package/dist/config/types.d.ts.map +1 -0
  143. package/dist/config/types.js +112 -0
  144. package/dist/config/types.js.map +1 -0
  145. package/dist/context/index.d.ts +95 -0
  146. package/dist/context/index.d.ts.map +1 -0
  147. package/dist/context/index.js +26 -0
  148. package/dist/context/index.js.map +1 -0
  149. package/dist/context/registry.d.ts +32 -0
  150. package/dist/context/registry.d.ts.map +1 -0
  151. package/dist/context/registry.js +142 -0
  152. package/dist/context/registry.js.map +1 -0
  153. package/dist/db/index.d.ts +2 -0
  154. package/dist/db/index.d.ts.map +1 -0
  155. package/dist/db/index.js +4 -0
  156. package/dist/db/index.js.map +1 -0
  157. package/dist/db/schema.d.ts +839 -0
  158. package/dist/db/schema.d.ts.map +1 -0
  159. package/dist/db/schema.js +106 -0
  160. package/dist/db/schema.js.map +1 -0
  161. package/dist/dml/entity.d.ts +132 -0
  162. package/dist/dml/entity.d.ts.map +1 -0
  163. package/dist/dml/entity.js +110 -0
  164. package/dist/dml/entity.js.map +1 -0
  165. package/dist/dml/from-zod.d.ts +13 -0
  166. package/dist/dml/from-zod.d.ts.map +1 -0
  167. package/dist/dml/from-zod.js +81 -0
  168. package/dist/dml/from-zod.js.map +1 -0
  169. package/dist/dml/generator/index.d.ts +62 -0
  170. package/dist/dml/generator/index.d.ts.map +1 -0
  171. package/dist/dml/generator/index.js +208 -0
  172. package/dist/dml/generator/index.js.map +1 -0
  173. package/dist/dml/index.d.ts +11 -0
  174. package/dist/dml/index.d.ts.map +1 -0
  175. package/dist/dml/index.js +13 -0
  176. package/dist/dml/index.js.map +1 -0
  177. package/dist/dml/infer.d.ts +36 -0
  178. package/dist/dml/infer.d.ts.map +1 -0
  179. package/dist/dml/infer.js +5 -0
  180. package/dist/dml/infer.js.map +1 -0
  181. package/dist/dml/model.d.ts +58 -0
  182. package/dist/dml/model.d.ts.map +1 -0
  183. package/dist/dml/model.js +95 -0
  184. package/dist/dml/model.js.map +1 -0
  185. package/dist/dml/modifiers.d.ts +9 -0
  186. package/dist/dml/modifiers.d.ts.map +1 -0
  187. package/dist/dml/modifiers.js +25 -0
  188. package/dist/dml/modifiers.js.map +1 -0
  189. package/dist/dml/properties/array.d.ts +7 -0
  190. package/dist/dml/properties/array.d.ts.map +1 -0
  191. package/dist/dml/properties/array.js +5 -0
  192. package/dist/dml/properties/array.js.map +1 -0
  193. package/dist/dml/properties/autoincrement.d.ts +7 -0
  194. package/dist/dml/properties/autoincrement.d.ts.map +1 -0
  195. package/dist/dml/properties/autoincrement.js +5 -0
  196. package/dist/dml/properties/autoincrement.js.map +1 -0
  197. package/dist/dml/properties/base.d.ts +124 -0
  198. package/dist/dml/properties/base.d.ts.map +1 -0
  199. package/dist/dml/properties/base.js +76 -0
  200. package/dist/dml/properties/base.js.map +1 -0
  201. package/dist/dml/properties/big-number.d.ts +7 -0
  202. package/dist/dml/properties/big-number.d.ts.map +1 -0
  203. package/dist/dml/properties/big-number.js +5 -0
  204. package/dist/dml/properties/big-number.js.map +1 -0
  205. package/dist/dml/properties/boolean.d.ts +7 -0
  206. package/dist/dml/properties/boolean.d.ts.map +1 -0
  207. package/dist/dml/properties/boolean.js +5 -0
  208. package/dist/dml/properties/boolean.js.map +1 -0
  209. package/dist/dml/properties/computed.d.ts +9 -0
  210. package/dist/dml/properties/computed.d.ts.map +1 -0
  211. package/dist/dml/properties/computed.js +22 -0
  212. package/dist/dml/properties/computed.js.map +1 -0
  213. package/dist/dml/properties/date-time.d.ts +7 -0
  214. package/dist/dml/properties/date-time.d.ts.map +1 -0
  215. package/dist/dml/properties/date-time.js +5 -0
  216. package/dist/dml/properties/date-time.js.map +1 -0
  217. package/dist/dml/properties/enum.d.ts +12 -0
  218. package/dist/dml/properties/enum.d.ts.map +1 -0
  219. package/dist/dml/properties/enum.js +14 -0
  220. package/dist/dml/properties/enum.js.map +1 -0
  221. package/dist/dml/properties/float.d.ts +7 -0
  222. package/dist/dml/properties/float.d.ts.map +1 -0
  223. package/dist/dml/properties/float.js +5 -0
  224. package/dist/dml/properties/float.js.map +1 -0
  225. package/dist/dml/properties/index.d.ts +15 -0
  226. package/dist/dml/properties/index.d.ts.map +1 -0
  227. package/dist/dml/properties/index.js +15 -0
  228. package/dist/dml/properties/index.js.map +1 -0
  229. package/dist/dml/properties/json.d.ts +7 -0
  230. package/dist/dml/properties/json.d.ts.map +1 -0
  231. package/dist/dml/properties/json.js +6 -0
  232. package/dist/dml/properties/json.js.map +1 -0
  233. package/dist/dml/properties/nullable.d.ts +23 -0
  234. package/dist/dml/properties/nullable.d.ts.map +1 -0
  235. package/dist/dml/properties/nullable.js +46 -0
  236. package/dist/dml/properties/nullable.js.map +1 -0
  237. package/dist/dml/properties/number.d.ts +10 -0
  238. package/dist/dml/properties/number.d.ts.map +1 -0
  239. package/dist/dml/properties/number.js +13 -0
  240. package/dist/dml/properties/number.js.map +1 -0
  241. package/dist/dml/properties/primary-key.d.ts +14 -0
  242. package/dist/dml/properties/primary-key.d.ts.map +1 -0
  243. package/dist/dml/properties/primary-key.js +23 -0
  244. package/dist/dml/properties/primary-key.js.map +1 -0
  245. package/dist/dml/properties/text.d.ts +15 -0
  246. package/dist/dml/properties/text.d.ts.map +1 -0
  247. package/dist/dml/properties/text.js +19 -0
  248. package/dist/dml/properties/text.js.map +1 -0
  249. package/dist/dml/relations/belongs-to.d.ts +20 -0
  250. package/dist/dml/relations/belongs-to.d.ts.map +1 -0
  251. package/dist/dml/relations/belongs-to.js +29 -0
  252. package/dist/dml/relations/belongs-to.js.map +1 -0
  253. package/dist/dml/relations/has-many.d.ts +16 -0
  254. package/dist/dml/relations/has-many.d.ts.map +1 -0
  255. package/dist/dml/relations/has-many.js +25 -0
  256. package/dist/dml/relations/has-many.js.map +1 -0
  257. package/dist/dml/relations/has-one.d.ts +26 -0
  258. package/dist/dml/relations/has-one.d.ts.map +1 -0
  259. package/dist/dml/relations/has-one.js +46 -0
  260. package/dist/dml/relations/has-one.js.map +1 -0
  261. package/dist/dml/relations/many-to-many.d.ts +9 -0
  262. package/dist/dml/relations/many-to-many.d.ts.map +1 -0
  263. package/dist/dml/relations/many-to-many.js +11 -0
  264. package/dist/dml/relations/many-to-many.js.map +1 -0
  265. package/dist/errors/manta-error.d.ts +68 -0
  266. package/dist/errors/manta-error.d.ts.map +1 -0
  267. package/dist/errors/manta-error.js +80 -0
  268. package/dist/errors/manta-error.js.map +1 -0
  269. package/dist/events/index.d.ts +3 -0
  270. package/dist/events/index.d.ts.map +1 -0
  271. package/dist/events/index.js +3 -0
  272. package/dist/events/index.js.map +1 -0
  273. package/dist/events/message-aggregator.d.ts +25 -0
  274. package/dist/events/message-aggregator.d.ts.map +1 -0
  275. package/dist/events/message-aggregator.js +35 -0
  276. package/dist/events/message-aggregator.js.map +1 -0
  277. package/dist/events/types.d.ts +42 -0
  278. package/dist/events/types.d.ts.map +1 -0
  279. package/dist/events/types.js +3 -0
  280. package/dist/events/types.js.map +1 -0
  281. package/dist/index.d.ts +55 -0
  282. package/dist/index.d.ts.map +1 -0
  283. package/dist/index.js +53 -0
  284. package/dist/index.js.map +1 -0
  285. package/dist/job/index.d.ts +52 -0
  286. package/dist/job/index.d.ts.map +1 -0
  287. package/dist/job/index.js +31 -0
  288. package/dist/job/index.js.map +1 -0
  289. package/dist/link/index.d.ts +97 -0
  290. package/dist/link/index.d.ts.map +1 -0
  291. package/dist/link/index.js +185 -0
  292. package/dist/link/index.js.map +1 -0
  293. package/dist/middleware/define-middleware.d.ts +54 -0
  294. package/dist/middleware/define-middleware.d.ts.map +1 -0
  295. package/dist/middleware/define-middleware.js +40 -0
  296. package/dist/middleware/define-middleware.js.map +1 -0
  297. package/dist/middleware/index.d.ts +56 -0
  298. package/dist/middleware/index.d.ts.map +1 -0
  299. package/dist/middleware/index.js +50 -0
  300. package/dist/middleware/index.js.map +1 -0
  301. package/dist/module/index.d.ts +56 -0
  302. package/dist/module/index.d.ts.map +1 -0
  303. package/dist/module/index.js +52 -0
  304. package/dist/module/index.js.map +1 -0
  305. package/dist/module/versioning.d.ts +27 -0
  306. package/dist/module/versioning.d.ts.map +1 -0
  307. package/dist/module/versioning.js +64 -0
  308. package/dist/module/versioning.js.map +1 -0
  309. package/dist/naming.d.ts +39 -0
  310. package/dist/naming.d.ts.map +1 -0
  311. package/dist/naming.js +95 -0
  312. package/dist/naming.js.map +1 -0
  313. package/dist/ports/analytics.d.ts +7 -0
  314. package/dist/ports/analytics.d.ts.map +1 -0
  315. package/dist/ports/analytics.js +3 -0
  316. package/dist/ports/analytics.js.map +1 -0
  317. package/dist/ports/auth.d.ts +27 -0
  318. package/dist/ports/auth.d.ts.map +1 -0
  319. package/dist/ports/auth.js +3 -0
  320. package/dist/ports/auth.js.map +1 -0
  321. package/dist/ports/cache.d.ts +35 -0
  322. package/dist/ports/cache.d.ts.map +1 -0
  323. package/dist/ports/cache.js +3 -0
  324. package/dist/ports/cache.js.map +1 -0
  325. package/dist/ports/database.d.ts +40 -0
  326. package/dist/ports/database.d.ts.map +1 -0
  327. package/dist/ports/database.js +3 -0
  328. package/dist/ports/database.js.map +1 -0
  329. package/dist/ports/event-bus.d.ts +85 -0
  330. package/dist/ports/event-bus.d.ts.map +1 -0
  331. package/dist/ports/event-bus.js +3 -0
  332. package/dist/ports/event-bus.js.map +1 -0
  333. package/dist/ports/file.d.ts +62 -0
  334. package/dist/ports/file.d.ts.map +1 -0
  335. package/dist/ports/file.js +3 -0
  336. package/dist/ports/file.js.map +1 -0
  337. package/dist/ports/http.d.ts +20 -0
  338. package/dist/ports/http.d.ts.map +1 -0
  339. package/dist/ports/http.js +3 -0
  340. package/dist/ports/http.js.map +1 -0
  341. package/dist/ports/in-memory-progress-channel.d.ts +9 -0
  342. package/dist/ports/in-memory-progress-channel.d.ts.map +1 -0
  343. package/dist/ports/in-memory-progress-channel.js +19 -0
  344. package/dist/ports/in-memory-progress-channel.js.map +1 -0
  345. package/dist/ports/in-memory-queue.d.ts +24 -0
  346. package/dist/ports/in-memory-queue.d.ts.map +1 -0
  347. package/dist/ports/in-memory-queue.js +63 -0
  348. package/dist/ports/in-memory-queue.js.map +1 -0
  349. package/dist/ports/index.d.ts +27 -0
  350. package/dist/ports/index.d.ts.map +1 -0
  351. package/dist/ports/index.js +6 -0
  352. package/dist/ports/index.js.map +1 -0
  353. package/dist/ports/job-scheduler.d.ts +42 -0
  354. package/dist/ports/job-scheduler.d.ts.map +1 -0
  355. package/dist/ports/job-scheduler.js +3 -0
  356. package/dist/ports/job-scheduler.js.map +1 -0
  357. package/dist/ports/locking.d.ts +43 -0
  358. package/dist/ports/locking.d.ts.map +1 -0
  359. package/dist/ports/locking.js +3 -0
  360. package/dist/ports/locking.js.map +1 -0
  361. package/dist/ports/logger.d.ts +65 -0
  362. package/dist/ports/logger.d.ts.map +1 -0
  363. package/dist/ports/logger.js +3 -0
  364. package/dist/ports/logger.js.map +1 -0
  365. package/dist/ports/notification.d.ts +71 -0
  366. package/dist/ports/notification.d.ts.map +1 -0
  367. package/dist/ports/notification.js +3 -0
  368. package/dist/ports/notification.js.map +1 -0
  369. package/dist/ports/progress-channel.d.ts +46 -0
  370. package/dist/ports/progress-channel.d.ts.map +1 -0
  371. package/dist/ports/progress-channel.js +6 -0
  372. package/dist/ports/progress-channel.js.map +1 -0
  373. package/dist/ports/queue.d.ts +21 -0
  374. package/dist/ports/queue.d.ts.map +1 -0
  375. package/dist/ports/queue.js +15 -0
  376. package/dist/ports/queue.js.map +1 -0
  377. package/dist/ports/relational-query.d.ts +37 -0
  378. package/dist/ports/relational-query.d.ts.map +1 -0
  379. package/dist/ports/relational-query.js +3 -0
  380. package/dist/ports/relational-query.js.map +1 -0
  381. package/dist/ports/repository-factory.d.ts +21 -0
  382. package/dist/ports/repository-factory.d.ts.map +1 -0
  383. package/dist/ports/repository-factory.js +4 -0
  384. package/dist/ports/repository-factory.js.map +1 -0
  385. package/dist/ports/repository.d.ts +73 -0
  386. package/dist/ports/repository.d.ts.map +1 -0
  387. package/dist/ports/repository.js +3 -0
  388. package/dist/ports/repository.js.map +1 -0
  389. package/dist/ports/schema-generator.d.ts +15 -0
  390. package/dist/ports/schema-generator.d.ts.map +1 -0
  391. package/dist/ports/schema-generator.js +4 -0
  392. package/dist/ports/schema-generator.js.map +1 -0
  393. package/dist/ports/search.d.ts +7 -0
  394. package/dist/ports/search.d.ts.map +1 -0
  395. package/dist/ports/search.js +3 -0
  396. package/dist/ports/search.js.map +1 -0
  397. package/dist/ports/types.d.ts +112 -0
  398. package/dist/ports/types.d.ts.map +1 -0
  399. package/dist/ports/types.js +26 -0
  400. package/dist/ports/types.js.map +1 -0
  401. package/dist/ports/workflow-store.d.ts +111 -0
  402. package/dist/ports/workflow-store.d.ts.map +1 -0
  403. package/dist/ports/workflow-store.js +5 -0
  404. package/dist/ports/workflow-store.js.map +1 -0
  405. package/dist/query/define-query-graph.d.ts +55 -0
  406. package/dist/query/define-query-graph.d.ts.map +1 -0
  407. package/dist/query/define-query-graph.js +59 -0
  408. package/dist/query/define-query-graph.js.map +1 -0
  409. package/dist/query/define-query.d.ts +79 -0
  410. package/dist/query/define-query.d.ts.map +1 -0
  411. package/dist/query/define-query.js +77 -0
  412. package/dist/query/define-query.js.map +1 -0
  413. package/dist/query/extend-query-graph.d.ts +36 -0
  414. package/dist/query/extend-query-graph.d.ts.map +1 -0
  415. package/dist/query/extend-query-graph.js +34 -0
  416. package/dist/query/extend-query-graph.js.map +1 -0
  417. package/dist/query/index.d.ts +181 -0
  418. package/dist/query/index.d.ts.map +1 -0
  419. package/dist/query/index.js +288 -0
  420. package/dist/query/index.js.map +1 -0
  421. package/dist/service/define.d.ts +97 -0
  422. package/dist/service/define.d.ts.map +1 -0
  423. package/dist/service/define.js +45 -0
  424. package/dist/service/define.js.map +1 -0
  425. package/dist/service/index.d.ts +52 -0
  426. package/dist/service/index.d.ts.map +1 -0
  427. package/dist/service/index.js +281 -0
  428. package/dist/service/index.js.map +1 -0
  429. package/dist/service/instantiate.d.ts +15 -0
  430. package/dist/service/instantiate.d.ts.map +1 -0
  431. package/dist/service/instantiate.js +143 -0
  432. package/dist/service/instantiate.js.map +1 -0
  433. package/dist/service/snapshot-repository.d.ts +31 -0
  434. package/dist/service/snapshot-repository.d.ts.map +1 -0
  435. package/dist/service/snapshot-repository.js +114 -0
  436. package/dist/service/snapshot-repository.js.map +1 -0
  437. package/dist/service/types.d.ts +39 -0
  438. package/dist/service/types.d.ts.map +1 -0
  439. package/dist/service/types.js +3 -0
  440. package/dist/service/types.js.map +1 -0
  441. package/dist/strict-mode/index.d.ts +42 -0
  442. package/dist/strict-mode/index.d.ts.map +1 -0
  443. package/dist/strict-mode/index.js +84 -0
  444. package/dist/strict-mode/index.js.map +1 -0
  445. package/dist/subscriber/index.d.ts +117 -0
  446. package/dist/subscriber/index.d.ts.map +1 -0
  447. package/dist/subscriber/index.js +76 -0
  448. package/dist/subscriber/index.js.map +1 -0
  449. package/dist/testing/relational-query-suite.d.ts +22 -0
  450. package/dist/testing/relational-query-suite.d.ts.map +1 -0
  451. package/dist/testing/relational-query-suite.js +233 -0
  452. package/dist/testing/relational-query-suite.js.map +1 -0
  453. package/dist/user/auto-routes.d.ts +32 -0
  454. package/dist/user/auto-routes.d.ts.map +1 -0
  455. package/dist/user/auto-routes.js +424 -0
  456. package/dist/user/auto-routes.js.map +1 -0
  457. package/dist/user/define-user.d.ts +54 -0
  458. package/dist/user/define-user.d.ts.map +1 -0
  459. package/dist/user/define-user.js +103 -0
  460. package/dist/user/define-user.js.map +1 -0
  461. package/dist/user/index.d.ts +7 -0
  462. package/dist/user/index.d.ts.map +1 -0
  463. package/dist/user/index.js +5 -0
  464. package/dist/user/index.js.map +1 -0
  465. package/dist/user/models/user.d.ts +15 -0
  466. package/dist/user/models/user.d.ts.map +1 -0
  467. package/dist/user/models/user.js +16 -0
  468. package/dist/user/models/user.js.map +1 -0
  469. package/dist/user/user-module-service.d.ts +55 -0
  470. package/dist/user/user-module-service.d.ts.map +1 -0
  471. package/dist/user/user-module-service.js +100 -0
  472. package/dist/user/user-module-service.js.map +1 -0
  473. package/dist/workflows/ai-step.d.ts +2 -0
  474. package/dist/workflows/ai-step.d.ts.map +1 -0
  475. package/dist/workflows/ai-step.js +54 -0
  476. package/dist/workflows/ai-step.js.map +1 -0
  477. package/dist/workflows/create-step.d.ts +16 -0
  478. package/dist/workflows/create-step.d.ts.map +1 -0
  479. package/dist/workflows/create-step.js +194 -0
  480. package/dist/workflows/create-step.js.map +1 -0
  481. package/dist/workflows/create-workflow.d.ts +16 -0
  482. package/dist/workflows/create-workflow.d.ts.map +1 -0
  483. package/dist/workflows/create-workflow.js +21 -0
  484. package/dist/workflows/create-workflow.js.map +1 -0
  485. package/dist/workflows/define-workflow.d.ts +55 -0
  486. package/dist/workflows/define-workflow.d.ts.map +1 -0
  487. package/dist/workflows/define-workflow.js +72 -0
  488. package/dist/workflows/define-workflow.js.map +1 -0
  489. package/dist/workflows/emit-event-step.d.ts +17 -0
  490. package/dist/workflows/emit-event-step.d.ts.map +1 -0
  491. package/dist/workflows/emit-event-step.js +46 -0
  492. package/dist/workflows/emit-event-step.js.map +1 -0
  493. package/dist/workflows/for-each.d.ts +6 -0
  494. package/dist/workflows/for-each.d.ts.map +1 -0
  495. package/dist/workflows/for-each.js +79 -0
  496. package/dist/workflows/for-each.js.map +1 -0
  497. package/dist/workflows/index.d.ts +15 -0
  498. package/dist/workflows/index.d.ts.map +1 -0
  499. package/dist/workflows/index.js +12 -0
  500. package/dist/workflows/index.js.map +1 -0
  501. package/dist/workflows/manager.d.ts +99 -0
  502. package/dist/workflows/manager.d.ts.map +1 -0
  503. package/dist/workflows/manager.js +450 -0
  504. package/dist/workflows/manager.js.map +1 -0
  505. package/dist/workflows/orphan-reaper.d.ts +50 -0
  506. package/dist/workflows/orphan-reaper.d.ts.map +1 -0
  507. package/dist/workflows/orphan-reaper.js +69 -0
  508. package/dist/workflows/orphan-reaper.js.map +1 -0
  509. package/dist/workflows/progress-helper.d.ts +20 -0
  510. package/dist/workflows/progress-helper.d.ts.map +1 -0
  511. package/dist/workflows/progress-helper.js +48 -0
  512. package/dist/workflows/progress-helper.js.map +1 -0
  513. package/dist/workflows/step.d.ts +103 -0
  514. package/dist/workflows/step.d.ts.map +1 -0
  515. package/dist/workflows/step.js +949 -0
  516. package/dist/workflows/step.js.map +1 -0
  517. package/dist/workflows/types.d.ts +215 -0
  518. package/dist/workflows/types.d.ts.map +1 -0
  519. package/dist/workflows/types.js +9 -0
  520. package/dist/workflows/types.js.map +1 -0
  521. package/dist/workflows/yield.d.ts +12 -0
  522. package/dist/workflows/yield.d.ts.map +1 -0
  523. package/dist/workflows/yield.js +29 -0
  524. package/dist/workflows/yield.js.map +1 -0
  525. package/docs/00-overview.md +254 -0
  526. package/docs/01-getting-started.md +224 -0
  527. package/docs/02-models.md +163 -0
  528. package/docs/03-services.md +208 -0
  529. package/docs/04-users.md +165 -0
  530. package/docs/05-commands.md +501 -0
  531. package/docs/06-queries.md +342 -0
  532. package/docs/07-events.md +248 -0
  533. package/docs/08-links.md +182 -0
  534. package/docs/09-agents.md +142 -0
  535. package/docs/10-spa.md +327 -0
  536. package/docs/11-config.md +481 -0
  537. package/docs/12-constraints.md +183 -0
  538. package/docs/13-testing.md +345 -0
  539. package/docs/14-adapters.md +204 -0
  540. package/docs/15-hosts.md +163 -0
  541. package/docs/16-reference.md +274 -0
  542. package/docs/17-dashboard.md +619 -0
  543. package/docs/AGENT.md +501 -0
  544. package/package.json +49 -52
  545. package/.medusa/server/src/admin/index.js +0 -5358
  546. package/.medusa/server/src/admin/index.mjs +0 -5356
  547. package/.medusa/server/src/api/admin/companies/[id]/route.js +0 -39
  548. package/.medusa/server/src/api/admin/companies/middlewares.js +0 -41
  549. package/.medusa/server/src/api/admin/companies/route.js +0 -37
  550. package/.medusa/server/src/api/admin/companies/validators.js +0 -29
  551. package/.medusa/server/src/api/middlewares.js +0 -8
  552. package/.medusa/server/src/index.js +0 -5
  553. package/.medusa/server/src/modules/company/index.js +0 -13
  554. package/.medusa/server/src/modules/company/migrations/Migration20260126141741.js +0 -26
  555. package/.medusa/server/src/modules/company/models/company.js +0 -24
  556. package/.medusa/server/src/modules/company/models/employee.js +0 -15
  557. package/.medusa/server/src/modules/company/models/index.js +0 -11
  558. package/.medusa/server/src/modules/company/service.js +0 -11
  559. package/.medusa/server/src/workflows/create-company.js +0 -10
  560. package/.medusa/server/src/workflows/delete-company.js +0 -10
  561. package/.medusa/server/src/workflows/steps/create-company.js +0 -16
  562. package/.medusa/server/src/workflows/steps/delete-company.js +0 -30
  563. package/.medusa/server/src/workflows/steps/update-company.js +0 -30
  564. package/.medusa/server/src/workflows/update-company.js +0 -10
@@ -0,0 +1,182 @@
1
+ # Links — defineLink()
2
+
3
+ ## Why links exist
4
+
5
+ Entities need relations. In Manta, relations are always defined with `defineLink()` — never in the model itself. There is no `field.relation()`, `belongsTo()`, `hasMany()`, or `hasOne()` API.
6
+
7
+ `defineLink()` is the ONE interface for all relations:
8
+
9
+ - **Intra-module** (`src/modules/{mod}/links/`): 1:1 and 1:N create a FK directly on the child table. M:N creates a pivot table.
10
+ - **Cross-module** (`src/links/`): always creates a pivot table (modules are isolated, no shared FK).
11
+
12
+ Same API in both cases.
13
+
14
+ ## defineLink()
15
+
16
+ ```typescript
17
+ // src/links/product-inventory.ts — cross-module link
18
+ export default defineLink('product', many('inventory_item'))
19
+ ```
20
+
21
+ **Signature:** `defineLink(left: string, right: string | many(string), extraColumns?)`
22
+
23
+ - `left` — Left entity name (string, autocompletes from codegen)
24
+ - `right` — Right entity name, optionally wrapped in `many()` for cardinality
25
+ - `extraColumns` — (optional) Additional columns on the pivot table using `field.*`
26
+
27
+ No imports needed — `defineLink`, `many`, and `field` are globals.
28
+
29
+ ## Cardinality with `many()`
30
+
31
+ The `many()` modifier controls the relationship type and cascade behavior:
32
+
33
+ | Pattern | Cardinality | Cascade behavior |
34
+ |---------|-------------|-----------------|
35
+ | `defineLink('a', 'b')` | 1:1 | Symmetric — delete either side deletes the other |
36
+ | `defineLink('a', many('b'))` | 1:N | Delete parent (a) cascades to children (b) |
37
+ | `defineLink(many('a'), many('b'))` | M:N | Delete either side only cleans pivot |
38
+
39
+ Cascade is **automatic** — no configuration needed.
40
+
41
+ ## Two locations, different storage
42
+
43
+ ### Intra-module links (`src/modules/{mod}/links/`)
44
+
45
+ For entities within the **same module**. The storage strategy depends on cardinality:
46
+
47
+ **1:1 — FK on child table:**
48
+ ```typescript
49
+ // src/modules/blog/links/post-seo.ts
50
+ // Creates seo.post_id FK (no pivot table)
51
+ export default defineLink('post', 'seo')
52
+ ```
53
+
54
+ **1:N — FK on child table:**
55
+ ```typescript
56
+ // src/modules/catalog/links/product-variant.ts
57
+ // Creates variant.product_id FK (no pivot table)
58
+ export default defineLink('product', many('variant'))
59
+ ```
60
+
61
+ **M:N — Pivot table:**
62
+ ```typescript
63
+ // src/modules/catalog/links/product-tag.ts
64
+ // Creates product_tag pivot table
65
+ export default defineLink(many('product'), many('tag'))
66
+ ```
67
+
68
+ ### Cross-module links (`src/links/`)
69
+
70
+ For entities in **different modules**. Always creates a pivot table (modules cannot share FK columns):
71
+
72
+ **1:1 — Pivot table:**
73
+ ```typescript
74
+ // src/links/customer-profile.ts
75
+ // Creates customer_profile pivot table
76
+ export default defineLink('customer', 'profile')
77
+ ```
78
+
79
+ **1:N — Pivot table:**
80
+ ```typescript
81
+ // src/links/product-inventory.ts
82
+ // Creates product_inventory_item pivot table
83
+ export default defineLink('product', many('inventory_item'))
84
+ ```
85
+
86
+ **M:N — Pivot table:**
87
+ ```typescript
88
+ // src/links/product-collection.ts
89
+ // Creates product_collection pivot table
90
+ export default defineLink(many('product'), many('collection'))
91
+ ```
92
+
93
+ ## Summary: all 6 cases
94
+
95
+ | Location | Cardinality | Storage |
96
+ |----------|-------------|---------|
97
+ | Intra-module | 1:1 | FK on child |
98
+ | Intra-module | 1:N | FK on child |
99
+ | Intra-module | M:N | Pivot table |
100
+ | Cross-module | 1:1 | Pivot table |
101
+ | Cross-module | 1:N | Pivot table |
102
+ | Cross-module | M:N | Pivot table |
103
+
104
+ ## Extra columns on pivot table
105
+
106
+ For M:N relations (or any cross-module link), you can add extra columns using `field.*`:
107
+
108
+ ```typescript
109
+ export default defineLink(many('product'), many('collection'), {
110
+ position: field.number().default(0),
111
+ })
112
+ ```
113
+
114
+ Extra columns are only supported on pivot tables — not on FK-based links.
115
+
116
+ ### Syntax
117
+
118
+ The third argument to `defineLink()` is an object of `field.*` definitions, exactly like `defineModel` properties:
119
+
120
+ ```typescript
121
+ // src/links/customer-address.ts
122
+ export default defineLink('customer', many('address'), {
123
+ type: field.text(),
124
+ is_default: field.boolean().default(false),
125
+ })
126
+ ```
127
+
128
+ This creates a pivot table `customer_address` with columns: `customer_id`, `address_id`, `type`, `is_default`, plus the standard `id`, `created_at`, `updated_at`, `deleted_at`.
129
+
130
+ ### Behavior
131
+
132
+ - **Schema generation**: Extra columns are added to the pivot table's Drizzle schema automatically.
133
+ - **Auto-generated link commands**: When `defineLink()` has extra columns, the auto-generated Zod schema for link commands includes the extra fields. `step.link(a, b, { type: 'shipping', is_default: true })` passes extra column values to the INSERT.
134
+ - **Query graph integration**: When using relation field syntax in `query.graph()` (e.g., `fields: ['*', 'addresses.*']`), extra columns from the pivot table are merged into each target entity in the result. For example, each address object will include `type` and `is_default` from the pivot row.
135
+
136
+ ## Usage in workflows
137
+
138
+ After creating both entities in a command, link them:
139
+
140
+ ```typescript
141
+ workflow: async (input, { step }) => {
142
+ const product = await step.service.catalog.create({ title: 'Widget' })
143
+ const inventory = await step.service.inventory.create({ quantity: 100 })
144
+
145
+ // Link them — IDs are auto-resolved from the creates above
146
+ await step.service.catalog.link.inventoryItem()
147
+ }
148
+ ```
149
+
150
+ The framework tracks the last created ID per entity type. `link.inventoryItem()` automatically resolves the Product ID and InventoryItem ID.
151
+
152
+ ## Cascade delete
153
+
154
+ With `many('inventory_item')`, deleting the parent (product) automatically cascades:
155
+
156
+ ```typescript
157
+ // Deleting a product also soft-deletes linked inventory items
158
+ await step.service.catalog.delete(productId)
159
+ // → Product soft-deleted
160
+ // → All linked InventoryItems soft-deleted
161
+ // → Pivot table entries soft-deleted (cross-module) or FK nulled (intra-module)
162
+ ```
163
+
164
+ The cascade is determined by `many()` placement — no manual configuration needed.
165
+
166
+ ## File locations
167
+
168
+ ```
169
+ src/links/{name}.ts # Cross-module links (always pivot)
170
+ src/modules/{mod}/links/{name}.ts # Intra-module links (FK or pivot)
171
+ ```
172
+
173
+ Each file exports a single `defineLink()` as the default export.
174
+
175
+ ## Validation errors
176
+
177
+ | Error | Cause | Fix |
178
+ |-------|-------|-----|
179
+ | `Link requires exactly two entities` | Missing second argument | Use `defineLink('a', 'b')` or `defineLink('a', many('b'))` |
180
+ | `Link between "X" and "Y" is already defined` | Duplicate link | Remove the duplicate file |
181
+ | `No link defined between "X" and "Y"` | Missing link definition | Create a file in `src/links/` with `defineLink()` |
182
+ | `Cannot link: no X created yet` | Link before create | Call `step.service.MODULE.create()` before linking |
@@ -0,0 +1,142 @@
1
+ # Agents — defineAgent()
2
+
3
+ ## What is an agent
4
+
5
+ An agent is a **typed AI call** that you can use as a step in your workflows. It has a contract: typed input (Zod), typed output (Zod), and instructions. The LLM is forced to return the output schema via `generateObject()`.
6
+
7
+ In a workflow, the agent result is **checkpointed** — if the workflow crashes after the agent step, the result is recovered from checkpoint (no re-call to the LLM).
8
+
9
+ ## defineAgent()
10
+
11
+ ```typescript
12
+ // src/agents/categorize-product.ts
13
+ export default defineAgent({
14
+ name: 'categorize-product',
15
+ description: 'Categorize a product into a department',
16
+ input: z.object({
17
+ title: z.string(),
18
+ description: z.string().optional(),
19
+ }),
20
+ output: z.object({
21
+ category: z.enum(['electronics', 'clothing', 'food', 'home', 'other']),
22
+ confidence: z.number().min(0).max(1),
23
+ reasoning: z.string(),
24
+ }),
25
+ instructions: (input) =>
26
+ `Categorize this product: "${input.title}". Description: "${input.description ?? 'none'}".`,
27
+ system: 'You are a product categorization expert.',
28
+ temperature: 0,
29
+ })
30
+ ```
31
+
32
+ **Required fields:**
33
+ - `name` — Unique agent identifier (kebab-case)
34
+ - `description` — What this agent does
35
+ - `input` — Zod schema for the input (validated before the LLM call)
36
+ - `output` — Zod schema for the output (the LLM is forced to return this shape)
37
+ - `instructions` — Function that receives `input` directly and returns the prompt string
38
+
39
+ **Optional:**
40
+ - `system` — System prompt
41
+ - `temperature` — 0 = deterministic (default), 1 = creative
42
+ - `maxTokens` — Max response tokens
43
+ - `model` — Override model (e.g., `'gpt-4o'`, `'claude-sonnet-4-20250514'`)
44
+
45
+ ## Usage in commands
46
+
47
+ ```typescript
48
+ // src/commands/import-product.ts
49
+ export default defineCommand({
50
+ name: 'import-product',
51
+ description: 'Import and auto-categorize a product',
52
+ input: z.object({
53
+ title: z.string(),
54
+ description: z.string().optional(),
55
+ price: z.number(),
56
+ }),
57
+ workflow: async (input, { step }) => {
58
+ // Create the product
59
+ const product = await step.service.catalog.create({
60
+ title: input.title,
61
+ description: input.description,
62
+ price: input.price,
63
+ status: 'draft',
64
+ })
65
+
66
+ // AI categorization — typed input/output, checkpointed
67
+ const { category, confidence } = await step.agent.categorizeProduct({
68
+ title: input.title,
69
+ description: input.description,
70
+ })
71
+
72
+ // Use the AI result
73
+ if (confidence > 0.8) {
74
+ await step.service.catalog.update(product.id, { category })
75
+ }
76
+
77
+ return { product, category, confidence }
78
+ },
79
+ })
80
+ ```
81
+
82
+ `step.agent.categorizeProduct()` is:
83
+ - **Typed** — input and output are known by autocomplete (from the Zod schemas)
84
+ - **Checkpointed** — if the workflow crashes after this step, the LLM result is recovered
85
+ - **Validated** — input is Zod-checked before calling the LLM, output is forced by `generateObject()`
86
+ - **No compensation** — LLM calls are read-only, nothing to undo
87
+
88
+ ## AI provider configuration
89
+
90
+ Set the provider via environment variable:
91
+
92
+ | Variable | Provider | Default model |
93
+ |----------|----------|--------------|
94
+ | `ANTHROPIC_API_KEY` | Anthropic | claude-sonnet-4-20250514 |
95
+ | `OPENAI_API_KEY` | OpenAI | gpt-4o |
96
+ | `GOOGLE_AI_API_KEY` | Google | gemini-2.0-flash |
97
+ | `MISTRAL_API_KEY` | Mistral | mistral-large-latest |
98
+
99
+ Set `MANTA_AI_PROVIDER` to choose which provider (default: `anthropic`).
100
+
101
+ ## File location
102
+
103
+ ```
104
+ src/agents/{name}.ts
105
+ ```
106
+
107
+ Each file exports a single `defineAgent()` as the default export. Auto-discovered at boot.
108
+
109
+ ## How it works under the hood
110
+
111
+ 1. `step.agent.categorizeProduct(input)` resolves the agent definition from the registry
112
+ 2. Input is validated against the agent's Zod `input` schema
113
+ 3. `instructions(input)` generates the prompt string
114
+ 4. `generateObject()` from Vercel AI SDK calls the LLM with the `output` Zod schema
115
+ 5. The LLM is forced to return valid JSON matching the schema
116
+ 6. Result is checkpointed via `runStep()` (same as all other steps)
117
+ 7. On workflow retry, the checkpoint is returned directly (no LLM re-call)
118
+
119
+ ## Validation errors
120
+
121
+ | Error | Cause | Fix |
122
+ |-------|-------|-----|
123
+ | `Agent name is required` | Missing name | Add `name: 'my-agent'` |
124
+ | `Agent "X" requires an output Zod schema` | Missing output | Add `output: z.object({...})` |
125
+ | `Agent "X" instructions must be a function` | String instead of function | Change to `instructions: (input) => '...'` |
126
+ | `Agent "X" not found` | Typo or missing file | Create `src/agents/X.ts` with `defineAgent()` |
127
+ | `step.agent requires ANTHROPIC_API_KEY` | No API key set | Set the environment variable |
128
+
129
+ ## The primitives (updated)
130
+
131
+ ```
132
+ defineModel → Entity
133
+ defineService → Mutations (auto-compensated)
134
+ defineCommand → Workflow
135
+ defineQuery → Read endpoint (CQRS read side)
136
+ defineQueryGraph → Graph endpoint (flexible reads)
137
+ defineSubscriber → Event reaction
138
+ defineJob → Cron
139
+ defineLink → Relation
140
+ defineUser → Auth + CRUD + middleware (auto-generated)
141
+ defineAgent → AI
142
+ ```
package/docs/10-spa.md ADDED
@@ -0,0 +1,327 @@
1
+ # SPA, Dashboard & SDK
2
+
3
+ ## SPA — Auto-detected from filesystem
4
+
5
+ SPAs are auto-detected from `src/spa/{name}/`. No boilerplate — just pages.
6
+
7
+ ```
8
+ src/spa/admin/
9
+ ├── config.ts # defineSpa() — navigation, title, branding
10
+ ├── pages/
11
+ │ ├── page.tsx # → /admin/ (React page)
12
+ │ ├── products/
13
+ │ │ └── page.ts # → /admin/products (definePage spec)
14
+ │ ├── products/[id]/
15
+ │ │ └── page.ts # → /admin/products/:id (definePage spec)
16
+ │ │ └── edit/
17
+ │ │ └── page.ts # → /admin/products/:id/edit (defineForm spec)
18
+ │ ├── products/create/
19
+ │ │ └── page.ts # → /admin/products/create (defineForm spec)
20
+ │ └── settings/
21
+ │ └── page.tsx # → /admin/settings (React page)
22
+ ├── blocks/ # Custom blocks (auto-discovered)
23
+ │ └── inventory-matrix.tsx
24
+ └── components/ # Local components (imported by blocks/pages)
25
+ └── product-card.tsx
26
+ ```
27
+
28
+ **Auto-discovered:**
29
+ - `config.ts` → SPA configuration (navigation, branding, settings)
30
+ - `pages/` → file-based routing
31
+ - `blocks/` → custom blocks
32
+
33
+ **Two page formats:**
34
+ - **`.ts`** — exports `definePage()` or `defineForm()` spec (declarative, no React)
35
+ - **`.tsx`** — exports a React component (full control, for complex cases)
36
+
37
+ **Defaults**: `@mantajs/dashboard` shell + `@mantajs/ui` preset. Override in config if needed:
38
+
39
+ ```typescript
40
+ // manta.config.ts — optional, only for overrides
41
+ export default defineConfig({
42
+ spa: {
43
+ admin: { preset: '@mantajs/ui-preset-dark' },
44
+ vendor: { dashboard: null }, // no shell, custom SPA
45
+ },
46
+ })
47
+ ```
48
+
49
+ ---
50
+
51
+ ## SPA Configuration — defineSpa()
52
+
53
+ Define navigation, branding, and settings in `src/spa/{name}/config.ts`. See [Dashboard](./17-dashboard.md) for the full reference.
54
+
55
+ ```typescript
56
+ // src/spa/admin/config.ts
57
+ import { defineSpa } from '@mantajs/dashboard'
58
+
59
+ export default defineSpa({
60
+ title: 'Commerce Admin',
61
+ logo: '/logo.svg',
62
+ favicon: '/favicon.ico',
63
+
64
+ navigation: [
65
+ { icon: 'Tag', label: 'Products', to: '/products' },
66
+ { icon: 'Users', label: 'Customers', to: '/customers', items: [
67
+ { label: 'Groups', to: '/customer-groups' },
68
+ ]},
69
+ ],
70
+
71
+ settings: [
72
+ { icon: 'Store', label: 'Store Details', to: '/settings/store' },
73
+ { icon: 'Key', label: 'API Keys', to: '/settings/api-keys' },
74
+ ],
75
+ })
76
+ ```
77
+
78
+ ---
79
+
80
+ ## Declarative Pages — definePage() & defineForm()
81
+
82
+ The preferred approach. Pages are pure data specs — no React, no JSX. See [Dashboard](./17-dashboard.md) for the full reference.
83
+
84
+ ### Listing page
85
+
86
+ ```typescript
87
+ // src/spa/admin/pages/customers/page.ts
88
+ import { definePage } from '@mantajs/dashboard'
89
+
90
+ export default definePage({
91
+ header: { title: 'Customers', actions: ['create'] },
92
+ main: [
93
+ {
94
+ type: 'DataTable',
95
+ query: {
96
+ graph: {
97
+ entity: 'customer',
98
+ fields: ['email', 'first_name', 'last_name', 'created_at'],
99
+ pagination: { limit: 20 },
100
+ },
101
+ },
102
+ columns: [
103
+ { key: 'email', label: 'Email' },
104
+ { key: 'first_name', label: 'First Name' },
105
+ { key: 'last_name', label: 'Last Name' },
106
+ { key: 'created_at', label: 'Joined', format: 'date' },
107
+ ],
108
+ searchable: true,
109
+ navigateTo: '/customers/:id',
110
+ },
111
+ ],
112
+ })
113
+ ```
114
+
115
+ ### Detail page
116
+
117
+ ```typescript
118
+ // src/spa/admin/pages/customers/[id]/page.ts
119
+ import { definePage } from '@mantajs/dashboard'
120
+
121
+ export default definePage({
122
+ header: { titleField: 'email', actions: ['edit', 'delete'] },
123
+ main: [
124
+ {
125
+ type: 'InfoCard',
126
+ title: 'General',
127
+ query: {
128
+ graph: {
129
+ entity: 'customer',
130
+ fields: ['first_name', 'last_name', 'email', 'phone'],
131
+ },
132
+ },
133
+ },
134
+ ],
135
+ sidebar: [
136
+ {
137
+ type: 'InfoCard',
138
+ title: 'Dates',
139
+ query: {
140
+ graph: {
141
+ entity: 'customer',
142
+ fields: ['created_at', 'updated_at'],
143
+ },
144
+ },
145
+ fields: [
146
+ { key: 'created_at', label: 'Created', display: 'date' },
147
+ { key: 'updated_at', label: 'Updated', display: 'date' },
148
+ ],
149
+ },
150
+ ],
151
+ })
152
+ ```
153
+
154
+ ### Create form
155
+
156
+ ```typescript
157
+ // src/spa/admin/pages/customers/create/page.ts
158
+ import { defineForm } from '@mantajs/dashboard'
159
+
160
+ export default defineForm({
161
+ title: 'Create Customer',
162
+ command: 'create-customer',
163
+ fields: [
164
+ { key: 'email', label: 'Email', type: 'text', required: true },
165
+ { key: 'first_name', label: 'First Name', type: 'text' },
166
+ { key: 'last_name', label: 'Last Name', type: 'text' },
167
+ { key: 'phone', label: 'Phone', type: 'text' },
168
+ ],
169
+ })
170
+ ```
171
+
172
+ ### Edit form
173
+
174
+ ```typescript
175
+ // src/spa/admin/pages/customers/[id]/edit/page.ts
176
+ import { defineForm } from '@mantajs/dashboard'
177
+
178
+ export default defineForm({
179
+ title: 'Edit Customer',
180
+ command: 'update-customer',
181
+ query: {
182
+ graph: {
183
+ entity: 'customer',
184
+ fields: ['first_name', 'last_name', 'email', 'phone'],
185
+ },
186
+ },
187
+ fields: [
188
+ { key: 'first_name', label: 'First Name', type: 'text' },
189
+ { key: 'last_name', label: 'Last Name', type: 'text' },
190
+ { key: 'email', label: 'Email', type: 'text', required: true },
191
+ { key: 'phone', label: 'Phone', type: 'text' },
192
+ ],
193
+ })
194
+ ```
195
+
196
+ ---
197
+
198
+ ## React Pages — Full Control
199
+
200
+ For complex pages that need full React control (custom interactions, animations, etc.), use `.tsx` files:
201
+
202
+ ```tsx
203
+ // src/spa/admin/pages/dashboard/page.tsx
204
+ import { useGraphQuery, useCommand } from '@mantajs/sdk'
205
+ import { Button, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Badge } from '@mantajs/ui'
206
+ import { useNavigate } from 'react-router-dom'
207
+
208
+ export default function DashboardPage() {
209
+ const { data: orders } = useGraphQuery({ entity: 'order', pagination: { limit: 5 } })
210
+ // ... full React control
211
+ }
212
+ ```
213
+
214
+ ---
215
+
216
+ ## Custom Blocks
217
+
218
+ Blocks are standard React components in `src/spa/{name}/blocks/`. Auto-discovered, available in `definePage()` specs.
219
+
220
+ ```tsx
221
+ // src/spa/admin/blocks/inventory-matrix.tsx
222
+ import { useGraphQuery } from '@mantajs/sdk'
223
+
224
+ interface InventoryMatrixProps {
225
+ query: Parameters<typeof useGraphQuery>[0]
226
+ warehouses?: string[]
227
+ }
228
+
229
+ export default function InventoryMatrix({ query, warehouses = ['default'] }: InventoryMatrixProps) {
230
+ const { data } = useGraphQuery(query)
231
+ // ... render matrix
232
+ }
233
+ ```
234
+
235
+ Usage in a page spec:
236
+
237
+ ```typescript
238
+ main: [
239
+ { type: 'InventoryMatrix', query: { graph: { entity: 'product', relations: ['variant'] } }, warehouses: ['paris'] },
240
+ ]
241
+ ```
242
+
243
+ **Override framework blocks**: Create a block with the same kebab-case filename as a framework block (e.g., `blocks/info-card.tsx` overrides the built-in `InfoCard`).
244
+
245
+ ---
246
+
247
+ ## Component Reference
248
+
249
+ ### @mantajs/dashboard — blocks (used in definePage specs)
250
+
251
+ | Block | Purpose |
252
+ |-------|---------|
253
+ | `DataTable` | List with columns, search, sort, filter, pagination |
254
+ | `InfoCard` | Key-value card with fields |
255
+ | `RelationTable` | Related entities table |
256
+ | `MediaCard` | Image/file gallery |
257
+ | `StatsCard` | Metric cards |
258
+ | `PageHeader` | Title, status badge, actions (used via `header` shortcut) |
259
+
260
+ ### @mantajs/dashboard — patterns (used in React pages)
261
+
262
+ | Component | Purpose |
263
+ |-----------|---------|
264
+ | `FocusModal` | Full-width modal with header/footer for forms |
265
+ | `EntitySelect` | Searchable selection table in a modal |
266
+ | `MultiStepForm` | Multi-step wizard with stepper |
267
+ | `EditableTable` | Inline editable table (Excel-like) |
268
+ | `BulkActionBar` | Floating action bar for multi-select |
269
+ | `ConfirmDialog` | Confirmation dialog for destructive actions |
270
+
271
+ ### @mantajs/ui (shadcn/ui — 26 components)
272
+
273
+ | Category | Components |
274
+ |----------|-----------|
275
+ | **Form** | Input, Label, Select, Textarea, Checkbox, Switch, RadioGroup |
276
+ | **Layout** | Card, Separator, Tabs, ScrollArea |
277
+ | **Feedback** | Alert, Badge, Skeleton, Progress, Toaster/toast |
278
+ | **Overlay** | Dialog, Sheet, AlertDialog, Popover, Tooltip, DropdownMenu |
279
+ | **Data** | Table, Pagination |
280
+ | **Navigation** | Button, Command (Cmd+K) |
281
+ | **Display** | Avatar |
282
+
283
+ ### @mantajs/sdk (hooks — 4 hooks + client)
284
+
285
+ | Hook | Purpose |
286
+ |------|---------|
287
+ | `useCommand('name')` | Execute a command (mutation) — autocomplete |
288
+ | `useQuery('name', params)` | Execute a named query — autocomplete |
289
+ | `useGraphQuery({ entity })` | Graph query (flexible reads) — autocomplete |
290
+ | `useAuth()` | Login, logout, me, isAuthenticated |
291
+
292
+ ---
293
+
294
+ ## AI Agent — Setup & Configuration
295
+
296
+ The dashboard includes a built-in AI conversational agent that can create pages, modify components, and query data through the query graph.
297
+
298
+ ### Setup
299
+
300
+ 1. Set environment variables:
301
+
302
+ ```bash
303
+ # .env
304
+ MANTA_AI_PROVIDER=anthropic # or 'openai'
305
+ ANTHROPIC_API_KEY=sk-ant-... # your API key
306
+ # MANTA_AI_MODEL=claude-sonnet-4-20250514 # optional model override
307
+ ```
308
+
309
+ 2. The AI panel appears automatically in the dashboard shell (bottom-right sparkle icon). It's enabled when `ANTHROPIC_API_KEY` (or `OPENAI_API_KEY` for OpenAI) is set.
310
+
311
+ ### What the AI can do
312
+
313
+ | Capability | How |
314
+ |-----------|-----|
315
+ | **Create pages** | AI generates `definePage()` / `defineForm()` specs |
316
+ | **Modify blocks** | AI updates block props (columns, filters, etc.) |
317
+ | **Query data** | AI uses the query graph to browse entities |
318
+ | **Navigate** | AI adds/removes navigation items in the sidebar |
319
+
320
+ ### Providers
321
+
322
+ | Provider | Env var | Default model |
323
+ |----------|---------|--------------|
324
+ | Anthropic | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514` |
325
+ | OpenAI | `OPENAI_API_KEY` | `gpt-4o` |
326
+
327
+ Set `MANTA_AI_PROVIDER` to switch providers. Default: `anthropic`.