@mantajs/cli 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 (282) hide show
  1. package/bin/manta.mjs +20 -0
  2. package/bin/manta.ts +13 -0
  3. package/dist/admin/generate-admin-config.d.ts +8 -0
  4. package/dist/admin/generate-admin-config.d.ts.map +1 -0
  5. package/dist/admin/generate-admin-config.js +127 -0
  6. package/dist/admin/generate-admin-config.js.map +1 -0
  7. package/dist/ai/chat-handler.d.ts +10 -0
  8. package/dist/ai/chat-handler.d.ts.map +1 -0
  9. package/dist/ai/chat-handler.js +1353 -0
  10. package/dist/ai/chat-handler.js.map +1 -0
  11. package/dist/bootstrap/boot.d.ts +25 -0
  12. package/dist/bootstrap/boot.d.ts.map +1 -0
  13. package/dist/bootstrap/boot.js +344 -0
  14. package/dist/bootstrap/boot.js.map +1 -0
  15. package/dist/bootstrap/bootstrap-app.d.ts +71 -0
  16. package/dist/bootstrap/bootstrap-app.d.ts.map +1 -0
  17. package/dist/bootstrap/bootstrap-app.js +308 -0
  18. package/dist/bootstrap/bootstrap-app.js.map +1 -0
  19. package/dist/bootstrap/bootstrap-context.d.ts +76 -0
  20. package/dist/bootstrap/bootstrap-context.d.ts.map +1 -0
  21. package/dist/bootstrap/bootstrap-context.js +4 -0
  22. package/dist/bootstrap/bootstrap-context.js.map +1 -0
  23. package/dist/bootstrap/bootstrap-helpers.d.ts +71 -0
  24. package/dist/bootstrap/bootstrap-helpers.d.ts.map +1 -0
  25. package/dist/bootstrap/bootstrap-helpers.js +373 -0
  26. package/dist/bootstrap/bootstrap-helpers.js.map +1 -0
  27. package/dist/bootstrap/generate-types.d.ts +7 -0
  28. package/dist/bootstrap/generate-types.d.ts.map +1 -0
  29. package/dist/bootstrap/generate-types.js +832 -0
  30. package/dist/bootstrap/generate-types.js.map +1 -0
  31. package/dist/bootstrap/phases/assemble/index.d.ts +5 -0
  32. package/dist/bootstrap/phases/assemble/index.d.ts.map +1 -0
  33. package/dist/bootstrap/phases/assemble/index.js +5 -0
  34. package/dist/bootstrap/phases/assemble/index.js.map +1 -0
  35. package/dist/bootstrap/phases/assemble/load-links.d.ts +3 -0
  36. package/dist/bootstrap/phases/assemble/load-links.d.ts.map +1 -0
  37. package/dist/bootstrap/phases/assemble/load-links.js +160 -0
  38. package/dist/bootstrap/phases/assemble/load-links.js.map +1 -0
  39. package/dist/bootstrap/phases/assemble/load-modules.d.ts +3 -0
  40. package/dist/bootstrap/phases/assemble/load-modules.d.ts.map +1 -0
  41. package/dist/bootstrap/phases/assemble/load-modules.js +163 -0
  42. package/dist/bootstrap/phases/assemble/load-modules.js.map +1 -0
  43. package/dist/bootstrap/phases/assemble/load-resources.d.ts +3 -0
  44. package/dist/bootstrap/phases/assemble/load-resources.d.ts.map +1 -0
  45. package/dist/bootstrap/phases/assemble/load-resources.js +270 -0
  46. package/dist/bootstrap/phases/assemble/load-resources.js.map +1 -0
  47. package/dist/bootstrap/phases/assemble/wire-commands.d.ts +3 -0
  48. package/dist/bootstrap/phases/assemble/wire-commands.d.ts.map +1 -0
  49. package/dist/bootstrap/phases/assemble/wire-commands.js +408 -0
  50. package/dist/bootstrap/phases/assemble/wire-commands.js.map +1 -0
  51. package/dist/bootstrap/phases/assemble-modules.d.ts +3 -0
  52. package/dist/bootstrap/phases/assemble-modules.d.ts.map +1 -0
  53. package/dist/bootstrap/phases/assemble-modules.js +14 -0
  54. package/dist/bootstrap/phases/assemble-modules.js.map +1 -0
  55. package/dist/bootstrap/phases/build-app.d.ts +3 -0
  56. package/dist/bootstrap/phases/build-app.d.ts.map +1 -0
  57. package/dist/bootstrap/phases/build-app.js +15 -0
  58. package/dist/bootstrap/phases/build-app.js.map +1 -0
  59. package/dist/bootstrap/phases/discover-resources.d.ts +3 -0
  60. package/dist/bootstrap/phases/discover-resources.d.ts.map +1 -0
  61. package/dist/bootstrap/phases/discover-resources.js +60 -0
  62. package/dist/bootstrap/phases/discover-resources.js.map +1 -0
  63. package/dist/bootstrap/phases/index.d.ts +7 -0
  64. package/dist/bootstrap/phases/index.d.ts.map +1 -0
  65. package/dist/bootstrap/phases/index.js +7 -0
  66. package/dist/bootstrap/phases/index.js.map +1 -0
  67. package/dist/bootstrap/phases/init-infra.d.ts +3 -0
  68. package/dist/bootstrap/phases/init-infra.d.ts.map +1 -0
  69. package/dist/bootstrap/phases/init-infra.js +193 -0
  70. package/dist/bootstrap/phases/init-infra.js.map +1 -0
  71. package/dist/bootstrap/phases/seed-dev-users.d.ts +3 -0
  72. package/dist/bootstrap/phases/seed-dev-users.d.ts.map +1 -0
  73. package/dist/bootstrap/phases/seed-dev-users.js +93 -0
  74. package/dist/bootstrap/phases/seed-dev-users.js.map +1 -0
  75. package/dist/bootstrap/phases/wire/auth-helpers.d.ts +12 -0
  76. package/dist/bootstrap/phases/wire/auth-helpers.d.ts.map +1 -0
  77. package/dist/bootstrap/phases/wire/auth-helpers.js +25 -0
  78. package/dist/bootstrap/phases/wire/auth-helpers.js.map +1 -0
  79. package/dist/bootstrap/phases/wire/contexts/context-registry.d.ts +4 -0
  80. package/dist/bootstrap/phases/wire/contexts/context-registry.d.ts.map +1 -0
  81. package/dist/bootstrap/phases/wire/contexts/context-registry.js +96 -0
  82. package/dist/bootstrap/phases/wire/contexts/context-registry.js.map +1 -0
  83. package/dist/bootstrap/phases/wire/contexts/cqrs-routes.d.ts +3 -0
  84. package/dist/bootstrap/phases/wire/contexts/cqrs-routes.d.ts.map +1 -0
  85. package/dist/bootstrap/phases/wire/contexts/cqrs-routes.js +138 -0
  86. package/dist/bootstrap/phases/wire/contexts/cqrs-routes.js.map +1 -0
  87. package/dist/bootstrap/phases/wire/contexts/index.d.ts +6 -0
  88. package/dist/bootstrap/phases/wire/contexts/index.d.ts.map +1 -0
  89. package/dist/bootstrap/phases/wire/contexts/index.js +6 -0
  90. package/dist/bootstrap/phases/wire/contexts/index.js.map +1 -0
  91. package/dist/bootstrap/phases/wire/contexts/query-endpoints.d.ts +3 -0
  92. package/dist/bootstrap/phases/wire/contexts/query-endpoints.d.ts.map +1 -0
  93. package/dist/bootstrap/phases/wire/contexts/query-endpoints.js +116 -0
  94. package/dist/bootstrap/phases/wire/contexts/query-endpoints.js.map +1 -0
  95. package/dist/bootstrap/phases/wire/contexts/spa-warnings.d.ts +3 -0
  96. package/dist/bootstrap/phases/wire/contexts/spa-warnings.d.ts.map +1 -0
  97. package/dist/bootstrap/phases/wire/contexts/spa-warnings.js +17 -0
  98. package/dist/bootstrap/phases/wire/contexts/spa-warnings.js.map +1 -0
  99. package/dist/bootstrap/phases/wire/contexts/user-routes.d.ts +3 -0
  100. package/dist/bootstrap/phases/wire/contexts/user-routes.d.ts.map +1 -0
  101. package/dist/bootstrap/phases/wire/contexts/user-routes.js +83 -0
  102. package/dist/bootstrap/phases/wire/contexts/user-routes.js.map +1 -0
  103. package/dist/bootstrap/phases/wire/index.d.ts +5 -0
  104. package/dist/bootstrap/phases/wire/index.d.ts.map +1 -0
  105. package/dist/bootstrap/phases/wire/index.js +5 -0
  106. package/dist/bootstrap/phases/wire/index.js.map +1 -0
  107. package/dist/bootstrap/phases/wire/wire-adapter.d.ts +12 -0
  108. package/dist/bootstrap/phases/wire/wire-adapter.d.ts.map +1 -0
  109. package/dist/bootstrap/phases/wire/wire-adapter.js +156 -0
  110. package/dist/bootstrap/phases/wire/wire-adapter.js.map +1 -0
  111. package/dist/bootstrap/phases/wire/wire-auth.d.ts +3 -0
  112. package/dist/bootstrap/phases/wire/wire-auth.d.ts.map +1 -0
  113. package/dist/bootstrap/phases/wire/wire-auth.js +46 -0
  114. package/dist/bootstrap/phases/wire/wire-auth.js.map +1 -0
  115. package/dist/bootstrap/phases/wire/wire-contexts.d.ts +3 -0
  116. package/dist/bootstrap/phases/wire/wire-contexts.d.ts.map +1 -0
  117. package/dist/bootstrap/phases/wire/wire-contexts.js +15 -0
  118. package/dist/bootstrap/phases/wire/wire-contexts.js.map +1 -0
  119. package/dist/bootstrap/phases/wire/wire-cron-routes.d.ts +3 -0
  120. package/dist/bootstrap/phases/wire/wire-cron-routes.d.ts.map +1 -0
  121. package/dist/bootstrap/phases/wire/wire-cron-routes.js +102 -0
  122. package/dist/bootstrap/phases/wire/wire-cron-routes.js.map +1 -0
  123. package/dist/bootstrap/phases/wire/wire-extras.d.ts +3 -0
  124. package/dist/bootstrap/phases/wire/wire-extras.d.ts.map +1 -0
  125. package/dist/bootstrap/phases/wire/wire-extras.js +305 -0
  126. package/dist/bootstrap/phases/wire/wire-extras.js.map +1 -0
  127. package/dist/bootstrap/phases/wire/wire-workflow-routes.d.ts +3 -0
  128. package/dist/bootstrap/phases/wire/wire-workflow-routes.d.ts.map +1 -0
  129. package/dist/bootstrap/phases/wire/wire-workflow-routes.js +212 -0
  130. package/dist/bootstrap/phases/wire/wire-workflow-routes.js.map +1 -0
  131. package/dist/bootstrap/phases/wire-http.d.ts +3 -0
  132. package/dist/bootstrap/phases/wire-http.d.ts.map +1 -0
  133. package/dist/bootstrap/phases/wire-http.js +10 -0
  134. package/dist/bootstrap/phases/wire-http.js.map +1 -0
  135. package/dist/bootstrap/validate-generated-ts.d.ts +6 -0
  136. package/dist/bootstrap/validate-generated-ts.d.ts.map +1 -0
  137. package/dist/bootstrap/validate-generated-ts.js +26 -0
  138. package/dist/bootstrap/validate-generated-ts.js.map +1 -0
  139. package/dist/build/generate-manifest.d.ts +10 -0
  140. package/dist/build/generate-manifest.d.ts.map +1 -0
  141. package/dist/build/generate-manifest.js +138 -0
  142. package/dist/build/generate-manifest.js.map +1 -0
  143. package/dist/cli.d.ts +3 -0
  144. package/dist/cli.d.ts.map +1 -0
  145. package/dist/cli.js +421 -0
  146. package/dist/cli.js.map +1 -0
  147. package/dist/commands/build.d.ts +21 -0
  148. package/dist/commands/build.d.ts.map +1 -0
  149. package/dist/commands/build.js +399 -0
  150. package/dist/commands/build.js.map +1 -0
  151. package/dist/commands/db/create.d.ts +17 -0
  152. package/dist/commands/db/create.d.ts.map +1 -0
  153. package/dist/commands/db/create.js +94 -0
  154. package/dist/commands/db/create.js.map +1 -0
  155. package/dist/commands/db/diff.d.ts +39 -0
  156. package/dist/commands/db/diff.d.ts.map +1 -0
  157. package/dist/commands/db/diff.js +81 -0
  158. package/dist/commands/db/diff.js.map +1 -0
  159. package/dist/commands/db/generate.d.ts +58 -0
  160. package/dist/commands/db/generate.d.ts.map +1 -0
  161. package/dist/commands/db/generate.js +138 -0
  162. package/dist/commands/db/generate.js.map +1 -0
  163. package/dist/commands/db/migrate.d.ts +29 -0
  164. package/dist/commands/db/migrate.d.ts.map +1 -0
  165. package/dist/commands/db/migrate.js +118 -0
  166. package/dist/commands/db/migrate.js.map +1 -0
  167. package/dist/commands/db/pg-deps.d.ts +30 -0
  168. package/dist/commands/db/pg-deps.d.ts.map +1 -0
  169. package/dist/commands/db/pg-deps.js +178 -0
  170. package/dist/commands/db/pg-deps.js.map +1 -0
  171. package/dist/commands/db/rollback.d.ts +21 -0
  172. package/dist/commands/db/rollback.d.ts.map +1 -0
  173. package/dist/commands/db/rollback.js +85 -0
  174. package/dist/commands/db/rollback.js.map +1 -0
  175. package/dist/commands/db/types.d.ts +113 -0
  176. package/dist/commands/db/types.d.ts.map +1 -0
  177. package/dist/commands/db/types.js +4 -0
  178. package/dist/commands/db/types.js.map +1 -0
  179. package/dist/commands/dev.d.ts +12 -0
  180. package/dist/commands/dev.d.ts.map +1 -0
  181. package/dist/commands/dev.js +79 -0
  182. package/dist/commands/dev.js.map +1 -0
  183. package/dist/commands/exec.d.ts +21 -0
  184. package/dist/commands/exec.d.ts.map +1 -0
  185. package/dist/commands/exec.js +148 -0
  186. package/dist/commands/exec.js.map +1 -0
  187. package/dist/commands/generate.d.ts +11 -0
  188. package/dist/commands/generate.d.ts.map +1 -0
  189. package/dist/commands/generate.js +19 -0
  190. package/dist/commands/generate.js.map +1 -0
  191. package/dist/commands/init.d.ts +14 -0
  192. package/dist/commands/init.d.ts.map +1 -0
  193. package/dist/commands/init.js +476 -0
  194. package/dist/commands/init.js.map +1 -0
  195. package/dist/commands/start.d.ts +15 -0
  196. package/dist/commands/start.d.ts.map +1 -0
  197. package/dist/commands/start.js +121 -0
  198. package/dist/commands/start.js.map +1 -0
  199. package/dist/commands/user.d.ts +19 -0
  200. package/dist/commands/user.d.ts.map +1 -0
  201. package/dist/commands/user.js +125 -0
  202. package/dist/commands/user.js.map +1 -0
  203. package/dist/config/load-config.d.ts +23 -0
  204. package/dist/config/load-config.d.ts.map +1 -0
  205. package/dist/config/load-config.js +105 -0
  206. package/dist/config/load-config.js.map +1 -0
  207. package/dist/config/load-env.d.ts +11 -0
  208. package/dist/config/load-env.d.ts.map +1 -0
  209. package/dist/config/load-env.js +61 -0
  210. package/dist/config/load-env.js.map +1 -0
  211. package/dist/config/resolve-adapters.d.ts +23 -0
  212. package/dist/config/resolve-adapters.d.ts.map +1 -0
  213. package/dist/config/resolve-adapters.js +96 -0
  214. package/dist/config/resolve-adapters.js.map +1 -0
  215. package/dist/index.d.ts +18 -0
  216. package/dist/index.d.ts.map +1 -0
  217. package/dist/index.js +19 -0
  218. package/dist/index.js.map +1 -0
  219. package/dist/jiti.d.ts +2 -0
  220. package/dist/jiti.d.ts.map +1 -0
  221. package/dist/jiti.js +2 -0
  222. package/dist/jiti.js.map +1 -0
  223. package/dist/openapi/generate-spec.d.ts +56 -0
  224. package/dist/openapi/generate-spec.d.ts.map +1 -0
  225. package/dist/openapi/generate-spec.js +491 -0
  226. package/dist/openapi/generate-spec.js.map +1 -0
  227. package/dist/openapi/index.d.ts +4 -0
  228. package/dist/openapi/index.d.ts.map +1 -0
  229. package/dist/openapi/index.js +3 -0
  230. package/dist/openapi/index.js.map +1 -0
  231. package/dist/openapi/swagger-html.d.ts +2 -0
  232. package/dist/openapi/swagger-html.d.ts.map +1 -0
  233. package/dist/openapi/swagger-html.js +29 -0
  234. package/dist/openapi/swagger-html.js.map +1 -0
  235. package/dist/plugins/merge-resources.d.ts +18 -0
  236. package/dist/plugins/merge-resources.d.ts.map +1 -0
  237. package/dist/plugins/merge-resources.js +76 -0
  238. package/dist/plugins/merge-resources.js.map +1 -0
  239. package/dist/plugins/resolve-plugins.d.ts +14 -0
  240. package/dist/plugins/resolve-plugins.d.ts.map +1 -0
  241. package/dist/plugins/resolve-plugins.js +73 -0
  242. package/dist/plugins/resolve-plugins.js.map +1 -0
  243. package/dist/resource-loader.d.ts +151 -0
  244. package/dist/resource-loader.d.ts.map +1 -0
  245. package/dist/resource-loader.js +456 -0
  246. package/dist/resource-loader.js.map +1 -0
  247. package/dist/route-discovery.d.ts +33 -0
  248. package/dist/route-discovery.d.ts.map +1 -0
  249. package/dist/route-discovery.js +69 -0
  250. package/dist/route-discovery.js.map +1 -0
  251. package/dist/server-bootstrap.d.ts +38 -0
  252. package/dist/server-bootstrap.d.ts.map +1 -0
  253. package/dist/server-bootstrap.js +21 -0
  254. package/dist/server-bootstrap.js.map +1 -0
  255. package/dist/spa/generate-spa.d.ts +15 -0
  256. package/dist/spa/generate-spa.d.ts.map +1 -0
  257. package/dist/spa/generate-spa.js +357 -0
  258. package/dist/spa/generate-spa.js.map +1 -0
  259. package/dist/templates/agent/nextjs.md +129 -0
  260. package/dist/templates/agent/nuxt.md +98 -0
  261. package/dist/templates/agent/standalone.md +498 -0
  262. package/dist/types.d.ts +145 -0
  263. package/dist/types.d.ts.map +1 -0
  264. package/dist/types.js +3 -0
  265. package/dist/types.js.map +1 -0
  266. package/dist/utils/colors.d.ts +7 -0
  267. package/dist/utils/colors.d.ts.map +1 -0
  268. package/dist/utils/colors.js +8 -0
  269. package/dist/utils/colors.js.map +1 -0
  270. package/dist/utils/logger.d.ts +10 -0
  271. package/dist/utils/logger.d.ts.map +1 -0
  272. package/dist/utils/logger.js +27 -0
  273. package/dist/utils/logger.js.map +1 -0
  274. package/dist/utils/prompts.d.ts +6 -0
  275. package/dist/utils/prompts.d.ts.map +1 -0
  276. package/dist/utils/prompts.js +28 -0
  277. package/dist/utils/prompts.js.map +1 -0
  278. package/dist/utils/spinner.d.ts +7 -0
  279. package/dist/utils/spinner.d.ts.map +1 -0
  280. package/dist/utils/spinner.js +20 -0
  281. package/dist/utils/spinner.js.map +1 -0
  282. package/package.json +80 -0
@@ -0,0 +1,498 @@
1
+ # Manta — AI Agent Instructions
2
+
3
+ You are working in a **standalone Manta project**. Manta is a filesystem-first framework with an integrated database. You write models, services, commands, queries, and the framework generates HTTP API, auth, admin dashboard, AI tools, and OpenAPI documentation automatically.
4
+
5
+ ## Architecture
6
+
7
+ **Filesystem-first**: The structure of your folders IS your configuration. No routing files, no module registration. The framework scans and wires everything at boot.
8
+
9
+ **CQRS**: Commands = mutations (write), Queries = reads. Commands are compensable workflows. Queries use the Query Graph for cross-module joins.
10
+
11
+ **1 entity = 1 service**: Each entity has its own service. A service mutates ONE entity only. Cross-entity mutations go in commands.
12
+
13
+ **Constraint as Convention**: The framework prevents mistakes structurally. Services only receive their repository. Compensation is automatic via snapshots.
14
+
15
+ ## The primitives
16
+
17
+ All `define*` functions are **globals** — zero imports needed:
18
+
19
+ | Function | Purpose | Location |
20
+ |----------|---------|----------|
21
+ | `defineModel()` | Entity schema (DML) | `src/modules/{mod}/entities/{entity}/model.ts` |
22
+ | `defineService()` | Custom mutations per entity | `src/modules/{mod}/entities/{entity}/service.ts` |
23
+ | `defineCommand()` | Compensable workflow (= API endpoint) | `src/commands/{context}/{name}.ts` |
24
+ | `defineWorkflow()` | Intra-module workflow (business logic) | `src/modules/{mod}/workflows/{name}.ts` |
25
+ | `defineQuery()` | Read endpoint (CQRS read side) | `src/queries/{context}/{name}.ts` |
26
+ | `defineQueryGraph()` | Expose query graph to frontend | `src/queries/{context}/graph.ts` |
27
+ | `extendQueryGraph()` | Resolver for external entities (PostHog, Stripe…) | `src/modules/{mod}/queries/graph.ts` |
28
+ | `defineSubscriber()` | Event reaction | `src/subscribers/{name}.ts` |
29
+ | `defineJob()` | Scheduled cron (dispatches commands) | `src/jobs/{name}.ts` |
30
+ | `defineLink()` | Relation (intra-module or cross-module) | `src/links/` or `src/modules/{mod}/links/` |
31
+ | `defineAgent()` | Typed AI step (LLM call) | `src/agents/{name}.ts` |
32
+ | `defineUserModel()` | Augmented defineModel with auth | `src/modules/{mod}/entities/{entity}/model.ts` |
33
+ | `defineMiddleware()` | Override per-context auth middleware | `src/middleware/{context}.ts` |
34
+ | `defineConfig()` | App configuration | `manta.config.ts` |
35
+ | `definePreset()` | Adapter preset (dev/prod) | Config or package |
36
+
37
+ Helpers: `field.*` (property types), `many()` (cardinality), `listParams()` / `retrieveParams()` (query input helpers), `fromZodSchema()` (convert a Zod schema into DML fields, typically for external models).
38
+
39
+ > **Note:** Relations between entities are defined exclusively with `defineLink()`. There is no `field.relation()`, `belongsTo()`, `hasMany()`, or `hasOne()` API.
40
+
41
+ ## Project structure
42
+
43
+ ```
44
+ src/
45
+ ├── modules/ # Business logic (filesystem = module)
46
+ │ ├── catalog/
47
+ │ │ ├── entities/
48
+ │ │ │ ├── product/
49
+ │ │ │ │ ├── model.ts # defineModel('Product', { ... })
50
+ │ │ │ │ └── service.ts # defineService('product', ({ db }) => ({ ... }))
51
+ │ │ │ └── category/
52
+ │ │ │ └── model.ts
53
+ │ │ ├── links/
54
+ │ │ │ └── product-category.ts # defineLink (intra-module)
55
+ │ │ └── workflows/
56
+ │ │ └── categorize-product.ts # defineWorkflow (scoped, no auth)
57
+ │ ├── inventory/
58
+ │ │ └── entities/
59
+ │ │ └── inventory-item/
60
+ │ │ └── model.ts
61
+ │ └── admin/
62
+ │ └── entities/
63
+ │ └── admin/
64
+ │ └── model.ts # defineUserModel('admin', { role: field.enum([...]) })
65
+
66
+ ├── commands/ # Mutations (context = folder name)
67
+ │ ├── admin/
68
+ │ │ ├── create-product.ts # → POST /api/admin/command/create-product
69
+ │ │ └── bulk-import.ts
70
+ │ └── store/
71
+ │ └── place-order.ts # → POST /api/store/command/place-order
72
+
73
+ ├── queries/ # Reads (context = folder name)
74
+ │ ├── admin/
75
+ │ │ ├── list-products.ts # → GET /api/admin/list-products
76
+ │ │ └── graph.ts # defineQueryGraph('*') → POST /api/admin/graph
77
+ │ └── store/
78
+ │ ├── get-catalog.ts # → GET /api/store/get-catalog
79
+ │ └── graph.ts # defineQueryGraph({ product: true, order: (auth) => ... })
80
+
81
+ ├── subscribers/ # Event reactions
82
+ │ └── product-created.ts
83
+ ├── jobs/ # Cron tasks (dispatch commands)
84
+ │ └── cleanup-drafts.ts
85
+ ├── links/ # Cross-module relations
86
+ │ └── product-inventory.ts
87
+ ├── agents/ # AI agents
88
+ │ └── categorize-product.ts
89
+ ├── middleware/ # Per-context auth overrides (optional)
90
+ │ └── admin.ts
91
+ ├── spa/ # Single Page Applications (auto-detected)
92
+ │ ├── admin/
93
+ │ │ └── pages/
94
+ │ │ ├── page.tsx # → /admin/
95
+ │ │ └── products/
96
+ │ │ └── page.tsx # → /admin/products
97
+ │ └── vendor/
98
+ │ └── pages/
99
+ │ └── page.tsx
100
+ └── manta.config.ts
101
+ ```
102
+
103
+ ## How things work
104
+
105
+ ### defineModel — Data entities
106
+
107
+ ```typescript
108
+ // src/modules/catalog/entities/product/model.ts
109
+ export default defineModel('Product', {
110
+ title: field.text(),
111
+ description: field.text().nullable(),
112
+ price: field.bigNumber(),
113
+ status: field.enum(['draft', 'active', 'archived']).default('draft'),
114
+ sku: field.text().unique(),
115
+ })
116
+ ```
117
+
118
+ Auto-generates: database table, TypeScript types, CRUD service methods.
119
+
120
+ ### defineService — Custom mutations
121
+
122
+ ```typescript
123
+ // src/modules/catalog/entities/product/service.ts
124
+ export default defineService('product', ({ db }) => ({
125
+ activate: async (id: string) => {
126
+ await db.update({ id, status: 'active' })
127
+ },
128
+ }))
129
+ ```
130
+
131
+ - First arg: entity name (string, autocompletes from codegen)
132
+ - Factory receives `{ db, log }` — db is a typed repository, log is ILoggerPort
133
+ - Auto-generated CRUD: `createProducts()`, `listProducts()`, `retrieveProduct()`, `updateProducts()`, `deleteProducts()`, `softDeleteProducts()`, `restoreProducts()`
134
+ - Compensation is automatic via repository snapshots
135
+
136
+ ### defineCommand — Compensable workflows
137
+
138
+ ```typescript
139
+ // src/commands/admin/create-product.ts
140
+ export default defineCommand({
141
+ name: 'create-product',
142
+ description: 'Create a product with initial inventory',
143
+ input: z.object({
144
+ title: z.string(),
145
+ sku: z.string(),
146
+ price: z.number(),
147
+ }),
148
+ workflow: async (input, { step, log, auth, headers }) => {
149
+ const product = await step.service.catalog.create({
150
+ title: input.title,
151
+ sku: input.sku,
152
+ price: input.price,
153
+ })
154
+ await step.emit('product.created', { id: product.id, sku: input.sku })
155
+ return product
156
+ },
157
+ })
158
+ ```
159
+
160
+ - Folder = context: `commands/admin/` → `POST /api/admin/command/create-product`
161
+ - `step.service.MODULE.METHOD()` — auto-compensated
162
+ - `step.command.NAME()` — sub-command
163
+ - `step.workflow.MODULE.NAME()` — call a module workflow
164
+ - `step.agent.NAME()` — AI call (checkpointed)
165
+ - `step.action('name', { invoke, compensate })` — external action
166
+ - `step.emit('event', data)` — fire event
167
+ - `step.link(a, b)` — link entities
168
+ - `auth` — authenticated user (`{ id, type, email }`) or null
169
+ - `headers` — raw request headers (for custom context like `x-property-id`)
170
+
171
+ ### defineWorkflow — Intra-module business logic
172
+
173
+ ```typescript
174
+ // src/modules/catalog/workflows/categorize-product.ts
175
+ export default defineWorkflow({
176
+ name: 'categorize-product',
177
+ input: z.object({
178
+ productId: z.string(),
179
+ categoryId: z.string(),
180
+ }),
181
+ workflow: async (input, { step, log }) => {
182
+ const product = await step.service.catalog.retrieveProduct(input.productId)
183
+ await step.service.catalog.update(input.productId, { category_id: input.categoryId })
184
+ log.info(`Product ${product.id} categorized`)
185
+ return { productId: product.id }
186
+ },
187
+ })
188
+ ```
189
+
190
+ - Scoped to the module: can only call `step.service.MODULE.*` for its own module's entities
191
+ - Receives `{ step, log }` — NO `auth`, NO `headers` (pure business logic)
192
+ - Has compensation (same step proxy as commands)
193
+ - Called from commands via `step.workflow.MODULE.NAME(input)`
194
+ - NOT an HTTP endpoint — only callable as a sub-workflow from commands
195
+
196
+ ### defineQuery — Read endpoints
197
+
198
+ ```typescript
199
+ // src/queries/admin/list-products.ts
200
+ export default defineQuery({
201
+ name: 'list-products',
202
+ description: 'List products with filtering',
203
+ input: z.object({
204
+ status: z.string().optional(),
205
+ ...listParams(), // adds limit, offset, sort, order, search
206
+ }),
207
+ handler: async (input, { query, log, auth, headers }) => {
208
+ return query.graph({
209
+ entity: 'product',
210
+ filters: input.status ? { status: input.status } : undefined,
211
+ pagination: { take: input.limit, skip: input.offset },
212
+ })
213
+ },
214
+ })
215
+ ```
216
+
217
+ - Handler receives `{ query, log, auth, headers }` — NO `app` (forced to use query graph)
218
+ - `query.graph()` for cross-module joins
219
+ - `listParams()` helper adds standard pagination/sort/search fields
220
+ - `retrieveParams()` helper adds `{ id, fields }` for single entity lookups
221
+
222
+ ### defineQueryGraph — Expose query graph to frontend
223
+
224
+ ```typescript
225
+ // src/queries/admin/graph.ts — full access (admin/AI)
226
+ export default defineQueryGraph('*')
227
+
228
+ // src/queries/store/graph.ts — scoped access with row-level filtering
229
+ export default defineQueryGraph({
230
+ product: true, // all products
231
+ category: true, // all categories
232
+ order: (auth) => ({ customer_id: auth.id }), // only MY orders
233
+ customer: (auth) => ({ id: auth.id }), // only MY profile
234
+ })
235
+ ```
236
+
237
+ - `'*'` = wildcard, all entities, all rows (admin/AI use case)
238
+ - `true` = all rows for this entity
239
+ - `(auth) => filters` = row-level filter applied automatically
240
+ - Not listed = not accessible (403)
241
+ - Creates `POST /api/{context}/graph` endpoint
242
+ - Frontend uses `useGraphQuery()` from `@mantajs/sdk`
243
+
244
+ ### External entities — .external() + extendQueryGraph()
245
+
246
+ Use `.external()` on a model when the data lives in a third-party system (PostHog, Stripe, Shopify…). Manta keeps the entity visible to the query graph, AI tools, and `defineLink()`, but does NOT create a table, migration, or CRUD service.
247
+
248
+ ```typescript
249
+ // src/modules/posthog/entities/posthog-event/model.ts
250
+ export default defineModel('PostHogEvent', {
251
+ id: field.text().primaryKey(),
252
+ event: field.text(),
253
+ distinct_id: field.text(),
254
+ timestamp: field.dateTime(),
255
+ properties: field.json(),
256
+ }).external()
257
+
258
+ // Shortcut: build the field map from a Zod schema (e.g. generated from an SDK)
259
+ // export default defineModel('PostHogEvent', fromZodSchema(postHogEventSchema)).external()
260
+ ```
261
+
262
+ Every module that owns external entities MUST register a resolver via `extendQueryGraph()` in `src/modules/{mod}/queries/graph.ts`:
263
+
264
+ ```typescript
265
+ // src/modules/posthog/queries/graph.ts
266
+ export default extendQueryGraph({
267
+ owns: ['PostHogEvent', 'PostHogPerson'],
268
+ async resolve(query, { app, logger }) {
269
+ // Translate the Manta GraphQueryConfig into a call to the external backend
270
+ return await fetchFromPostHog(query)
271
+ },
272
+ supportedFilters: {
273
+ PostHogEvent: ['distinct_id', 'event', 'timestamp'],
274
+ },
275
+ })
276
+ ```
277
+
278
+ - `owns` — entity names this module resolves (must match `defineModel` names).
279
+ - `resolve` — receives the Manta query graph config, returns normalized rows shaped like the model's schema.
280
+ - `supportedFilters` (optional) — whitelist accepted filters; unsupported filters throw a clear error.
281
+ - The engine hydrates relations transparently: joining a local `product` to a `PostHogEvent` via `defineLink()` will trigger one DB query + one resolver call.
282
+
283
+ ### defineSubscriber — Event reactions
284
+
285
+ ```typescript
286
+ // src/subscribers/product-created.ts
287
+ export default defineSubscriber('product.created', async (event, { command, log }) => {
288
+ await command.initializeInventory({ productId: event.data.id })
289
+ })
290
+ ```
291
+
292
+ - Handler receives `(event, { command, log })` — can ONLY dispatch commands
293
+ - Event names autocomplete from codegen (MantaEventMap)
294
+ - `makeIdempotent(cache, handler)` for at-least-once deduplication
295
+
296
+ ### defineJob — Scheduled tasks
297
+
298
+ ```typescript
299
+ // src/jobs/cleanup-drafts.ts
300
+ export default defineJob('cleanup-drafts', '0 3 * * *', async ({ command, log }) => {
301
+ await command.cleanupDraftProducts({ olderThanDays: 30 })
302
+ })
303
+ ```
304
+
305
+ - Same `{ command, log }` scope as subscribers — forces command dispatch
306
+ - Cron syntax for schedule
307
+ - Also accepts object form: `defineJob({ name, schedule, handler })`
308
+
309
+ ### defineLink — Relations (unified API)
310
+
311
+ ```typescript
312
+ // src/links/product-inventory.ts (cross-module — always creates pivot table)
313
+ export default defineLink('product', many('inventory_item'))
314
+
315
+ // src/modules/catalog/links/product-category.ts (intra-module — 1:N creates FK directly)
316
+ export default defineLink('product', many('category'))
317
+ ```
318
+
319
+ - ONE API for all relations: cross-module and intra-module
320
+ - Cross-module (`src/links/`): always creates pivot tables
321
+ - Intra-module (`src/modules/{mod}/links/`): 1:1 and 1:N create FK directly, M:N creates pivot
322
+ - `many()` wraps for 1:N or M:N cardinality
323
+ - Cascade is automatic
324
+
325
+ ### defineUserModel — Augmented defineModel with auth
326
+
327
+ Use instead of `defineModel()` when an entity represents a user that can log in.
328
+ Place it in `model.ts` like any other entity — it IS a model, with auth on top.
329
+
330
+ ```typescript
331
+ // src/modules/admin/entities/admin/model.ts
332
+ export default defineUserModel('admin', {
333
+ role: field.enum(['super_admin', 'editor', 'viewer']),
334
+ })
335
+
336
+ // src/modules/customer/entities/customer/model.ts
337
+ export default defineUserModel('customer', {
338
+ company_name: field.text().nullable(),
339
+ phone: field.text().nullable(),
340
+ has_account: field.boolean().default(false),
341
+ })
342
+ ```
343
+
344
+ **The entity works like any defineModel** — has a service, links, workflows, appears in the query graph. **In addition, the framework auto-generates:**
345
+
346
+ Tables: `admin_user`, `admin_invite`
347
+
348
+ Auth routes (on `/api/admin/`):
349
+ - `POST /login` (public) — returns JWT with `{ id, type: 'admin' }`
350
+ - `DELETE /logout` (public) — blacklists token
351
+ - `POST /refresh` (public) — refresh token
352
+ - `POST /forgot-password` (public) — reset flow
353
+ - `POST /reset-password` (public) — confirm reset
354
+ - `POST /accept-invite` (public) — accept invitation
355
+
356
+ Protected routes (JWT required, `type === 'admin'`):
357
+ - `GET /me` — current user
358
+ - `GET /users` — list users
359
+ - `POST /create-user`, `POST /update-user`, `POST /delete-user`
360
+ - `POST /create-invite`, `POST /refresh-invite`
361
+
362
+ Middleware: all `/api/admin/*` routes verify JWT + `type === 'admin'`
363
+
364
+ Override: create `src/commands/admin/login.ts` to replace auto-generated login.
365
+ Override: create `src/middleware/admin.ts` to replace auto-generated middleware.
366
+
367
+ Dev seed: `admin@manta.local` / `admin` created automatically in dev mode.
368
+
369
+ ### defineAgent — AI steps
370
+
371
+ ```typescript
372
+ // src/agents/categorize-product.ts
373
+ export default defineAgent({
374
+ name: 'categorize-product',
375
+ description: 'Categorize a product into a department',
376
+ input: z.object({ title: z.string() }),
377
+ output: z.object({ category: z.enum(['electronics', 'clothing', 'food', 'other']) }),
378
+ instructions: (input) => `Categorize this product: "${input.title}"`,
379
+ })
380
+ ```
381
+
382
+ Used in commands via `step.agent.categorizeProduct(input)`. Checkpointed — if the workflow crashes after the agent step, result is recovered.
383
+
384
+ ### SPA — Single Page Applications
385
+
386
+ SPAs are auto-detected from `src/spa/{name}/`. No boilerplate needed.
387
+
388
+ ```
389
+ src/spa/admin/
390
+ └── pages/
391
+ ├── page.tsx # → /admin/
392
+ └── products/
393
+ └── page.tsx # → /admin/products
394
+ ```
395
+
396
+ Defaults: `@mantajs/dashboard` (shell) + `@mantajs/ui` (preset). Override in config:
397
+
398
+ ```typescript
399
+ // manta.config.ts
400
+ export default defineConfig({
401
+ spa: {
402
+ admin: { preset: '@mantajs/ui-preset-dark' }, // change theme
403
+ vendor: { dashboard: null }, // no shell, custom SPA
404
+ },
405
+ })
406
+ ```
407
+
408
+ ### SDK — Frontend hooks
409
+
410
+ ```typescript
411
+ import { useCommand, useQuery, useGraphQuery, useAuth } from '@mantajs/sdk'
412
+
413
+ // Commands (autocomplete from MantaGeneratedCommands)
414
+ const createProduct = useCommand('create-product')
415
+ await createProduct.mutateAsync({ title: 'Widget', sku: 'W-001' })
416
+
417
+ // Named queries (autocomplete from MantaGeneratedQueries)
418
+ const { data } = useQuery('list-products', { status: 'active', limit: 10 })
419
+
420
+ // Graph queries (only if defineQueryGraph exists for context)
421
+ const { data } = useGraphQuery({ entity: 'product', relations: ['inventory_item'] })
422
+
423
+ // Auth
424
+ const { login, logout, me, isAuthenticated } = useAuth()
425
+ ```
426
+
427
+ ### Auth context
428
+
429
+ Commands and queries receive `auth` and `headers`:
430
+
431
+ ```typescript
432
+ // auth.id — user ID (from admin_user.id, customer_user.id, etc.)
433
+ // auth.type — context type ('admin', 'customer')
434
+ // auth.email — user email
435
+ // headers['x-property-id'] — custom headers
436
+ ```
437
+
438
+ `auth` is null on public routes. JWT is signed and verified — cannot be tampered with.
439
+
440
+ ## Critical rules
441
+
442
+ 1. **No API routes** — Define commands + queries. The framework generates endpoints from filesystem structure.
443
+ 2. **1 entity = 1 service** — Each entity gets `model.ts` + optional `service.ts`. Services receive ONLY their entity's repository.
444
+ 3. **defineWorkflow for intra-module logic** — Workflows in `src/modules/X/workflows/` orchestrate multiple entities within the same module. They receive `{ step, log }` (no auth).
445
+ 4. **defineCommand for cross-module + HTTP** — Commands in `src/commands/` orchestrate any module and receive `{ step, log, auth, headers }`.
446
+ 5. **Commands call workflows** — Use `step.workflow.MODULE.NAME(input)` to invoke module workflows from commands.
447
+ 6. **Subscribers dispatch commands** — They receive `(event, { command, log })`, not direct service access.
448
+ 7. **Jobs dispatch commands** — They receive `{ command, log }`, same scope as subscribers.
449
+ 8. **No cross-module imports** — Modules cannot import from other modules. Use links.
450
+ 9. **No field.relation()** — Relations are defined ONLY via `defineLink()`. No `belongsTo`, `hasMany`, `hasOne`.
451
+ 10. **Events are at-least-once** — Use `makeIdempotent()` if duplicate processing is a problem.
452
+ 11. **Entity names are PascalCase** — `Product`, `BlogPost`, `InventoryItem`.
453
+ 12. **defineUserModel instead of defineModel** — When an entity represents a user that can log in, use `defineUserModel()` instead of `defineModel()`. It works like a model but adds auth routes, middleware, and invites.
454
+ 13. **Query graph for reads** — In defineQuery, use `query.graph()`. No direct service access.
455
+ 14. **External entities need a resolver** — Any `defineModel(...).external()` MUST be paired with `extendQueryGraph({ owns: [...], resolve })` in the same module, otherwise queries on that entity fail.
456
+
457
+ ## Auto-generated from your code
458
+
459
+ | Your code | Framework generates |
460
+ |-----------|-------------------|
461
+ | `defineModel('Product', {...})` | DB table, TypeScript types, CRUD methods |
462
+ | `defineModel('Ext', {...}).external()` | Entity registry entry only — NO table, NO migration, NO CRUD service |
463
+ | `extendQueryGraph({ owns, resolve })` | Routes queries on owned external entities to the module's resolver |
464
+ | `defineService('product', ...)` | Custom service methods with auto-compensation |
465
+ | `defineCommand({ name: 'create-product', ... })` | `POST /api/{ctx}/command/create-product` |
466
+ | `defineQuery({ name: 'list-products', ... })` | `GET /api/{ctx}/list-products` |
467
+ | `defineQueryGraph('*')` | `POST /api/{ctx}/graph` |
468
+ | `defineUserModel('admin', {...})` | Table, auth routes, middleware, invite system, dev seed |
469
+ | `defineSubscriber('event', handler)` | Event subscription with typed data |
470
+ | `defineWorkflow({ name, input, workflow })` | Intra-module compensable workflow (no HTTP endpoint) |
471
+ | `defineLink('product', many('item'))` | FK (intra-module) or pivot table (cross-module) |
472
+ | `src/spa/admin/pages/*.tsx` | SPA with routing, dashboard shell, Vite build |
473
+
474
+ ## Documentation
475
+
476
+ Complete framework documentation is in `node_modules/@mantajs/core/docs/`:
477
+
478
+ | Doc | Content |
479
+ |-----|---------|
480
+ | [00-overview](node_modules/@mantajs/core/docs/00-overview.md) | Philosophy, mental model |
481
+ | [01-getting-started](node_modules/@mantajs/core/docs/01-getting-started.md) | Create a project from scratch |
482
+ | [02-models](node_modules/@mantajs/core/docs/02-models.md) | defineModel() — properties, modifiers |
483
+ | [03-services](node_modules/@mantajs/core/docs/03-services.md) | defineService() — CRUD, compensation, typed repo |
484
+ | [04-users](node_modules/@mantajs/core/docs/04-users.md) | defineUserModel() — auth, CRUD, invites, middleware |
485
+ | [05-commands](node_modules/@mantajs/core/docs/05-commands.md) | defineCommand() — workflows, steps, compensation |
486
+ | [06-queries](node_modules/@mantajs/core/docs/06-queries.md) | defineQuery() + defineQueryGraph() |
487
+ | [07-events](node_modules/@mantajs/core/docs/07-events.md) | defineSubscriber() + defineJob() + defineWorkflow() |
488
+ | [08-links](node_modules/@mantajs/core/docs/08-links.md) | defineLink() — unified relation API (FK or pivot) |
489
+ | [09-agents](node_modules/@mantajs/core/docs/09-agents.md) | defineAgent() — AI steps, checkpointing |
490
+ | [10-spa](node_modules/@mantajs/core/docs/10-spa.md) | SPA system, dashboard, SDK |
491
+ | [11-config](node_modules/@mantajs/core/docs/11-config.md) | defineConfig(), CLI, presets |
492
+ | [12-constraints](node_modules/@mantajs/core/docs/12-constraints.md) | Validations, error messages |
493
+ | [13-testing](node_modules/@mantajs/core/docs/13-testing.md) | Testing guide |
494
+ | [14-adapters](node_modules/@mantajs/core/docs/14-adapters.md) | Custom adapters |
495
+ | [15-hosts](node_modules/@mantajs/core/docs/15-hosts.md) | Custom hosts |
496
+ | [16-reference](node_modules/@mantajs/core/docs/16-reference.md) | API reference |
497
+
498
+ **Read the relevant doc BEFORE writing code.** When in doubt, check [04-commands.md](node_modules/@mantajs/core/docs/04-commands.md) for workflow patterns.
@@ -0,0 +1,145 @@
1
+ export interface DevOptions {
2
+ port?: number;
3
+ noMigrate?: boolean;
4
+ verbose?: boolean;
5
+ }
6
+ export interface StartOptions {
7
+ port?: number;
8
+ }
9
+ export interface BuildOptions {
10
+ preset?: string;
11
+ }
12
+ export type InitPreset = 'nitro' | 'next';
13
+ export interface InitOptions {
14
+ dir?: string;
15
+ preset?: InitPreset;
16
+ }
17
+ export interface ExecOptions {
18
+ script: string;
19
+ dryRun?: boolean;
20
+ args?: string[];
21
+ }
22
+ export interface GenerateOptions {
23
+ name?: string;
24
+ }
25
+ export interface MigrateOptions {
26
+ force?: boolean;
27
+ dryRun?: boolean;
28
+ json?: boolean;
29
+ allOrNothing?: boolean;
30
+ forceUnlock?: boolean;
31
+ }
32
+ export interface RollbackOptions {
33
+ steps?: number;
34
+ }
35
+ export interface DiffOptions {
36
+ json?: boolean;
37
+ }
38
+ export interface LoadedConfig {
39
+ database?: {
40
+ url?: string;
41
+ pool?: {
42
+ min?: number;
43
+ max?: number;
44
+ };
45
+ };
46
+ http?: {
47
+ port?: number;
48
+ cors?: Record<string, unknown>;
49
+ rateLimit?: {
50
+ enabled?: boolean;
51
+ windowMs?: number;
52
+ maxRequests?: number;
53
+ };
54
+ };
55
+ auth?: {
56
+ jwtSecret?: string;
57
+ session?: {
58
+ enabled?: boolean;
59
+ cookieName?: string;
60
+ ttl?: number;
61
+ cookie?: Record<string, unknown>;
62
+ };
63
+ };
64
+ modules?: unknown[];
65
+ plugins?: Array<string | {
66
+ resolve: string;
67
+ options?: Record<string, unknown>;
68
+ }>;
69
+ featureFlags?: Record<string, boolean>;
70
+ query?: {
71
+ maxTotalEntities?: number;
72
+ };
73
+ strict?: boolean;
74
+ boot?: {
75
+ lazyBootTimeoutMs?: number;
76
+ autoMigrate?: boolean;
77
+ };
78
+ events?: {
79
+ maxPayloadSize?: number;
80
+ };
81
+ appEnv?: string;
82
+ adapters?: Record<string, {
83
+ adapter: string;
84
+ options?: Record<string, unknown>;
85
+ }>;
86
+ /** Preset name ('dev', 'vercel') or inline PresetDefinition */
87
+ preset?: string | import('@mantajs/core').PresetDefinition;
88
+ /** SPA declarations — each key is a context name (e.g. 'admin', 'vendor') */
89
+ spa?: Record<string, {
90
+ dashboard?: string;
91
+ preset?: string;
92
+ }>;
93
+ }
94
+ export interface BootContext {
95
+ config: LoadedConfig;
96
+ profile: 'dev' | 'prod';
97
+ verbose?: boolean;
98
+ /** App object — created at step 3, used by all subsequent steps */
99
+ app?: import('@mantajs/core').MantaApp;
100
+ /** Resolved adapters to register — injected by the CLI before boot */
101
+ adapters?: Record<string, unknown>;
102
+ /** Working directory (defaults to process.cwd()) */
103
+ cwd?: string;
104
+ /** Discovered resources from ResourceLoader (populated before lazy boot) */
105
+ discoveredResources?: import('./resource-loader').DiscoveredResources;
106
+ /** Loaded modules — maps module name to ModuleExports (populated at step 9) */
107
+ loadedModules?: Map<string, import('@mantajs/core').ModuleExports>;
108
+ /** Event group ID for boot event buffer (set at step 7, released at step 18) */
109
+ bootEventGroupId?: string;
110
+ }
111
+ export interface ManifestRouteEntry {
112
+ path: string;
113
+ methods: string[];
114
+ file: string;
115
+ namespace: string;
116
+ middlewares: unknown[];
117
+ }
118
+ export interface ManifestSubscriberEntry {
119
+ id: string;
120
+ file: string;
121
+ events: string[];
122
+ }
123
+ export interface ManifestWorkflowEntry {
124
+ id: string;
125
+ file: string;
126
+ steps: string[];
127
+ }
128
+ export interface ManifestJobEntry {
129
+ id: string;
130
+ file: string;
131
+ schedule: string;
132
+ }
133
+ export interface ManifestLinkEntry {
134
+ id: string;
135
+ file: string;
136
+ modules: string[];
137
+ table: string;
138
+ }
139
+ export interface ManifestModuleEntry {
140
+ name: string;
141
+ file: string;
142
+ models: string[];
143
+ service: string;
144
+ }
145
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // CLI types — options for each command
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,uCAAuC"}
@@ -0,0 +1,7 @@
1
+ export declare const dim: (s: string) => string;
2
+ export declare const green: (s: string) => string;
3
+ export declare const red: (s: string) => string;
4
+ export declare const bold: (s: string) => string;
5
+ export declare const cyan: (s: string) => string;
6
+ export declare const yellow: (s: string) => string;
7
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,WAAyB,CAAA;AACtD,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,WAA0B,CAAA;AACzD,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,WAA0B,CAAA;AACvD,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,WAAyB,CAAA;AACvD,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,WAA0B,CAAA;AACxD,eAAO,MAAM,MAAM,GAAI,GAAG,MAAM,WAA0B,CAAA"}
@@ -0,0 +1,8 @@
1
+ // ANSI color helpers — no external dependencies
2
+ export const dim = (s) => `\x1b[2m${s}\x1b[0m`;
3
+ export const green = (s) => `\x1b[32m${s}\x1b[0m`;
4
+ export const red = (s) => `\x1b[31m${s}\x1b[0m`;
5
+ export const bold = (s) => `\x1b[1m${s}\x1b[0m`;
6
+ export const cyan = (s) => `\x1b[36m${s}\x1b[0m`;
7
+ export const yellow = (s) => `\x1b[33m${s}\x1b[0m`;
8
+ //# sourceMappingURL=colors.js.map