create-relkit 0.4.0 → 0.5.1

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 (277) hide show
  1. package/dist/add-name.d.ts +9 -0
  2. package/dist/add-name.d.ts.map +1 -0
  3. package/dist/add-name.js +18 -0
  4. package/dist/add-name.js.map +1 -0
  5. package/dist/add-options-parser.d.ts +21 -0
  6. package/dist/add-options-parser.d.ts.map +1 -0
  7. package/dist/add-options-parser.js +103 -0
  8. package/dist/add-options-parser.js.map +1 -0
  9. package/dist/add-options-resource.d.ts +5 -0
  10. package/dist/add-options-resource.d.ts.map +1 -0
  11. package/dist/add-options-resource.js +18 -0
  12. package/dist/add-options-resource.js.map +1 -0
  13. package/dist/add-options.d.ts +6 -0
  14. package/dist/add-options.d.ts.map +1 -0
  15. package/dist/add-options.js +165 -0
  16. package/dist/add-options.js.map +1 -0
  17. package/dist/add-output.d.ts +4 -0
  18. package/dist/add-output.d.ts.map +1 -0
  19. package/dist/add-output.js +33 -0
  20. package/dist/add-output.js.map +1 -0
  21. package/dist/add-plan.d.ts +4 -0
  22. package/dist/add-plan.d.ts.map +1 -0
  23. package/dist/add-plan.js +62 -0
  24. package/dist/add-plan.js.map +1 -0
  25. package/dist/add-resolution-discovery.d.ts +13 -0
  26. package/dist/add-resolution-discovery.d.ts.map +1 -0
  27. package/dist/add-resolution-discovery.js +70 -0
  28. package/dist/add-resolution-discovery.js.map +1 -0
  29. package/dist/add-resolution-state.d.ts +23 -0
  30. package/dist/add-resolution-state.d.ts.map +1 -0
  31. package/dist/add-resolution-state.js +89 -0
  32. package/dist/add-resolution-state.js.map +1 -0
  33. package/dist/add-resolver-domain.d.ts +4 -0
  34. package/dist/add-resolver-domain.d.ts.map +1 -0
  35. package/dist/add-resolver-domain.js +150 -0
  36. package/dist/add-resolver-domain.js.map +1 -0
  37. package/dist/add-resolver-platform.d.ts +4 -0
  38. package/dist/add-resolver-platform.d.ts.map +1 -0
  39. package/dist/add-resolver-platform.js +112 -0
  40. package/dist/add-resolver-platform.js.map +1 -0
  41. package/dist/add-resolver-resources.d.ts +4 -0
  42. package/dist/add-resolver-resources.d.ts.map +1 -0
  43. package/dist/add-resolver-resources.js +150 -0
  44. package/dist/add-resolver-resources.js.map +1 -0
  45. package/dist/add-resolver.d.ts +14 -0
  46. package/dist/add-resolver.d.ts.map +1 -0
  47. package/dist/add-resolver.js +41 -0
  48. package/dist/add-resolver.js.map +1 -0
  49. package/dist/add-transaction-files.d.ts +12 -0
  50. package/dist/add-transaction-files.d.ts.map +1 -0
  51. package/dist/add-transaction-files.js +103 -0
  52. package/dist/add-transaction-files.js.map +1 -0
  53. package/dist/add-transaction.d.ts +17 -0
  54. package/dist/add-transaction.d.ts.map +1 -0
  55. package/dist/add-transaction.js +115 -0
  56. package/dist/add-transaction.js.map +1 -0
  57. package/dist/add-types.d.ts +136 -0
  58. package/dist/add-types.d.ts.map +1 -0
  59. package/dist/add-types.js +41 -0
  60. package/dist/add-types.js.map +1 -0
  61. package/dist/bucket-profiles.d.ts +4 -0
  62. package/dist/bucket-profiles.d.ts.map +1 -0
  63. package/dist/bucket-profiles.js +18 -0
  64. package/dist/bucket-profiles.js.map +1 -0
  65. package/dist/create-additions.d.ts +7 -0
  66. package/dist/create-additions.d.ts.map +1 -0
  67. package/dist/create-additions.js +27 -0
  68. package/dist/create-additions.js.map +1 -0
  69. package/dist/create-preview.d.ts +12 -0
  70. package/dist/create-preview.d.ts.map +1 -0
  71. package/dist/create-preview.js +50 -0
  72. package/dist/create-preview.js.map +1 -0
  73. package/dist/create-resolver.d.ts +14 -0
  74. package/dist/create-resolver.d.ts.map +1 -0
  75. package/dist/create-resolver.js +96 -0
  76. package/dist/create-resolver.js.map +1 -0
  77. package/dist/domain-planning.d.ts +24 -0
  78. package/dist/domain-planning.d.ts.map +1 -0
  79. package/dist/domain-planning.js +94 -0
  80. package/dist/domain-planning.js.map +1 -0
  81. package/dist/generate-files-utilities.d.ts +18 -0
  82. package/dist/generate-files-utilities.d.ts.map +1 -0
  83. package/dist/generate-files-utilities.js +87 -0
  84. package/dist/generate-files-utilities.js.map +1 -0
  85. package/dist/generate-files.d.ts +1 -12
  86. package/dist/generate-files.d.ts.map +1 -1
  87. package/dist/generate-files.js +39 -89
  88. package/dist/generate-files.js.map +1 -1
  89. package/dist/generate-output.d.ts +2 -1
  90. package/dist/generate-output.d.ts.map +1 -1
  91. package/dist/generate-output.js +9 -0
  92. package/dist/generate-output.js.map +1 -1
  93. package/dist/generate-process.d.ts +1 -1
  94. package/dist/generate-process.d.ts.map +1 -1
  95. package/dist/generate-process.js +7 -3
  96. package/dist/generate-process.js.map +1 -1
  97. package/dist/generate-types.d.ts +46 -0
  98. package/dist/generate-types.d.ts.map +1 -0
  99. package/dist/generate-types.js +20 -0
  100. package/dist/generate-types.js.map +1 -0
  101. package/dist/generate.d.ts +1 -38
  102. package/dist/generate.d.ts.map +1 -1
  103. package/dist/generate.js +34 -39
  104. package/dist/generate.js.map +1 -1
  105. package/dist/index.d.ts +18 -0
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +79 -9
  108. package/dist/index.js.map +1 -1
  109. package/dist/options.d.ts +5 -1
  110. package/dist/options.d.ts.map +1 -1
  111. package/dist/options.js +10 -1
  112. package/dist/options.js.map +1 -1
  113. package/dist/plan-builder.d.ts +33 -0
  114. package/dist/plan-builder.d.ts.map +1 -0
  115. package/dist/plan-builder.js +139 -0
  116. package/dist/plan-builder.js.map +1 -0
  117. package/dist/plan-manifest.d.ts +6 -0
  118. package/dist/plan-manifest.d.ts.map +1 -0
  119. package/dist/plan-manifest.js +40 -0
  120. package/dist/plan-manifest.js.map +1 -0
  121. package/dist/project-discovery-app.d.ts +7 -0
  122. package/dist/project-discovery-app.d.ts.map +1 -0
  123. package/dist/project-discovery-app.js +122 -0
  124. package/dist/project-discovery-app.js.map +1 -0
  125. package/dist/project-discovery-database.d.ts +11 -0
  126. package/dist/project-discovery-database.d.ts.map +1 -0
  127. package/dist/project-discovery-database.js +46 -0
  128. package/dist/project-discovery-database.js.map +1 -0
  129. package/dist/project-discovery-types.d.ts +45 -0
  130. package/dist/project-discovery-types.d.ts.map +1 -0
  131. package/dist/project-discovery-types.js +2 -0
  132. package/dist/project-discovery-types.js.map +1 -0
  133. package/dist/project-discovery.d.ts +4 -0
  134. package/dist/project-discovery.d.ts.map +1 -0
  135. package/dist/project-discovery.js +152 -0
  136. package/dist/project-discovery.js.map +1 -0
  137. package/dist/prompt-driver.d.ts +32 -0
  138. package/dist/prompt-driver.d.ts.map +1 -0
  139. package/dist/prompt-driver.js +42 -0
  140. package/dist/prompt-driver.js.map +1 -0
  141. package/dist/provider-planning-definitions.d.ts +35 -0
  142. package/dist/provider-planning-definitions.d.ts.map +1 -0
  143. package/dist/provider-planning-definitions.js +109 -0
  144. package/dist/provider-planning-definitions.js.map +1 -0
  145. package/dist/provider-planning.d.ts +11 -0
  146. package/dist/provider-planning.d.ts.map +1 -0
  147. package/dist/provider-planning.js +131 -0
  148. package/dist/provider-planning.js.map +1 -0
  149. package/dist/render-ai-sources.d.ts +18 -0
  150. package/dist/render-ai-sources.d.ts.map +1 -0
  151. package/dist/render-ai-sources.js +49 -0
  152. package/dist/render-ai-sources.js.map +1 -0
  153. package/dist/render-ai.d.ts +11 -0
  154. package/dist/render-ai.d.ts.map +1 -0
  155. package/dist/render-ai.js +61 -0
  156. package/dist/render-ai.js.map +1 -0
  157. package/dist/render-auth-schema.d.ts +3 -0
  158. package/dist/render-auth-schema.d.ts.map +1 -0
  159. package/dist/render-auth-schema.js +85 -0
  160. package/dist/render-auth-schema.js.map +1 -0
  161. package/dist/render-auth-sources.d.ts +3 -0
  162. package/dist/render-auth-sources.d.ts.map +1 -0
  163. package/dist/render-auth-sources.js +17 -0
  164. package/dist/render-auth-sources.js.map +1 -0
  165. package/dist/render-auth.d.ts +6 -0
  166. package/dist/render-auth.d.ts.map +1 -0
  167. package/dist/render-auth.js +84 -0
  168. package/dist/render-auth.js.map +1 -0
  169. package/dist/render-database-sources.d.ts +5 -0
  170. package/dist/render-database-sources.d.ts.map +1 -0
  171. package/dist/render-database-sources.js +65 -0
  172. package/dist/render-database-sources.js.map +1 -0
  173. package/dist/render-database.d.ts +13 -0
  174. package/dist/render-database.d.ts.map +1 -0
  175. package/dist/render-database.js +40 -0
  176. package/dist/render-database.js.map +1 -0
  177. package/dist/render-domain-register.d.ts +4 -0
  178. package/dist/render-domain-register.d.ts.map +1 -0
  179. package/dist/render-domain-register.js +11 -0
  180. package/dist/render-domain-register.js.map +1 -0
  181. package/dist/render-domain-sources.d.ts +19 -0
  182. package/dist/render-domain-sources.d.ts.map +1 -0
  183. package/dist/render-domain-sources.js +132 -0
  184. package/dist/render-domain-sources.js.map +1 -0
  185. package/dist/render-domain.d.ts +26 -0
  186. package/dist/render-domain.d.ts.map +1 -0
  187. package/dist/render-domain.js +98 -0
  188. package/dist/render-domain.js.map +1 -0
  189. package/dist/render-resource-sources.d.ts +4 -0
  190. package/dist/render-resource-sources.d.ts.map +1 -0
  191. package/dist/render-resource-sources.js +31 -0
  192. package/dist/render-resource-sources.js.map +1 -0
  193. package/dist/render-resources.d.ts +11 -0
  194. package/dist/render-resources.d.ts.map +1 -0
  195. package/dist/render-resources.js +53 -0
  196. package/dist/render-resources.js.map +1 -0
  197. package/dist/render-route-sources.d.ts +6 -0
  198. package/dist/render-route-sources.d.ts.map +1 -0
  199. package/dist/render-route-sources.js +35 -0
  200. package/dist/render-route-sources.js.map +1 -0
  201. package/dist/render-routes.d.ts +13 -0
  202. package/dist/render-routes.d.ts.map +1 -0
  203. package/dist/render-routes.js +48 -0
  204. package/dist/render-routes.js.map +1 -0
  205. package/dist/render-service.d.ts +6 -0
  206. package/dist/render-service.d.ts.map +1 -0
  207. package/dist/render-service.js +124 -0
  208. package/dist/render-service.js.map +1 -0
  209. package/dist/scaffold-catalog.d.ts +75 -0
  210. package/dist/scaffold-catalog.d.ts.map +1 -0
  211. package/dist/scaffold-catalog.js +24 -0
  212. package/dist/scaffold-catalog.js.map +1 -0
  213. package/dist/source-edit.d.ts +10 -0
  214. package/dist/source-edit.d.ts.map +1 -0
  215. package/dist/source-edit.js +136 -0
  216. package/dist/source-edit.js.map +1 -0
  217. package/dist/source-import-edit.d.ts +3 -0
  218. package/dist/source-import-edit.d.ts.map +1 -0
  219. package/dist/source-import-edit.js +52 -0
  220. package/dist/source-import-edit.js.map +1 -0
  221. package/dist/template-root.d.ts +5 -0
  222. package/dist/template-root.d.ts.map +1 -0
  223. package/dist/template-root.js +15 -0
  224. package/dist/template-root.js.map +1 -0
  225. package/dist/templates/default/README.md +1 -1
  226. package/dist/templates/default/v1/agent/.env.example +0 -2
  227. package/dist/templates/default/v1/agent/README.md +7 -8
  228. package/dist/templates/default/v1/agent/package.json +6 -4
  229. package/dist/templates/default/v1/agent/relkit.config.ts +5 -15
  230. package/dist/templates/default/v1/agent/src/hello/agents/assistant.agent.ts +37 -4
  231. package/dist/templates/default/v1/agent/src/hello/agents/review.agent.ts +43 -0
  232. package/dist/templates/default/v1/agent/src/platform/env.ts +0 -2
  233. package/dist/templates/default/v1/agent/tests/integration/hello.route.test.ts +17 -6
  234. package/dist/templates/default/v1/agent/tests/unit/assistant.agent.test.ts +14 -36
  235. package/dist/templates/default/v1/agent/tests/unit/review.agent.test.ts +19 -0
  236. package/dist/templates/default/v1/api/package.json +3 -3
  237. package/dist/templates/default/v1/fullstack/.env.example +1 -0
  238. package/dist/templates/default/v1/fullstack/README.md +15 -0
  239. package/dist/templates/default/v1/fullstack/gitignore +4 -0
  240. package/dist/templates/default/v1/fullstack/package.json +35 -0
  241. package/dist/templates/default/v1/fullstack/relkit.config.ts +15 -0
  242. package/dist/templates/default/v1/fullstack/src/hello/agents/assistant.agent.ts +46 -0
  243. package/dist/templates/default/v1/fullstack/src/hello/agents/review.agent.ts +43 -0
  244. package/dist/templates/default/v1/fullstack/src/hello/functions/hello.function.ts +10 -0
  245. package/dist/templates/default/v1/fullstack/src/hello/service.ts +4 -0
  246. package/dist/templates/default/v1/fullstack/src/hello/tools/lookup.tool.ts +9 -0
  247. package/dist/templates/default/v1/fullstack/src/platform/env.ts +5 -0
  248. package/dist/templates/default/v1/fullstack/src/routes/hello/route.ts +4 -0
  249. package/dist/templates/default/v1/fullstack/tests/integration/hello.route.test.ts +29 -0
  250. package/dist/templates/default/v1/fullstack/tests/unit/assistant.agent.test.ts +18 -0
  251. package/dist/templates/default/v1/fullstack/tests/unit/hello.function.test.ts +7 -0
  252. package/dist/templates/default/v1/fullstack/tests/unit/review.agent.test.ts +19 -0
  253. package/dist/templates/default/v1/fullstack/tsconfig.json +21 -0
  254. package/dist/templates/default/v1/fullstack/web/app/agent-config.ts +7 -0
  255. package/dist/templates/default/v1/fullstack/web/app/layout.tsx +12 -0
  256. package/dist/templates/default/v1/fullstack/web/app/page.tsx +85 -0
  257. package/dist/templates/default/v1/fullstack/web/app/providers.tsx +29 -0
  258. package/dist/templates/default/v1/fullstack/web/next-env.d.ts +2 -0
  259. package/dist/templates/default/v1/fullstack/web/next.config.ts +5 -0
  260. package/dist/templates/default/v1/fullstack/web/tsconfig.json +10 -0
  261. package/dist/templates/default/v1/minimal/package.json +3 -3
  262. package/dist/templates/default/v1/tasks/.env.example +2 -0
  263. package/dist/templates/default/v1/tasks/README.md +27 -0
  264. package/dist/templates/default/v1/tasks/examples/export-orders.json +1 -0
  265. package/dist/templates/default/v1/tasks/gitignore +10 -0
  266. package/dist/templates/default/v1/tasks/package.json +24 -0
  267. package/dist/templates/default/v1/tasks/relkit.config.ts +11 -0
  268. package/dist/templates/default/v1/tasks/src/orders/functions/health.function.ts +9 -0
  269. package/dist/templates/default/v1/tasks/src/orders/jobs/export-orders.job.ts +15 -0
  270. package/dist/templates/default/v1/tasks/src/orders/service.ts +10 -0
  271. package/dist/templates/default/v1/tasks/src/orders/tasks/export-orders.task.ts +19 -0
  272. package/dist/templates/default/v1/tasks/src/platform/env.ts +3 -0
  273. package/dist/templates/default/v1/tasks/src/routes/health/route.ts +4 -0
  274. package/dist/templates/default/v1/tasks/tests/unit/export-orders.task.test.ts +7 -0
  275. package/dist/templates/default/v1/tasks/tsconfig.json +14 -0
  276. package/package.json +6 -1
  277. package/dist/templates/default/v1/agent/src/hello/functions/ask-assistant.function.ts +0 -16
@@ -0,0 +1,49 @@
1
+ import { sourceImport } from "./domain-planning.js";
2
+ export function toolSource(artifact, target, targetModule, sideEffect, approval) {
3
+ return `${sourceImport(target.binding, targetModule, target.exportKind)}
4
+
5
+ const ${artifact.binding} = ${target.binding}.asTool({
6
+ id: "${artifact.id}",
7
+ description: "${artifact.name.input}",
8
+ sideEffect: "${sideEffect}",
9
+ approval: "${approval}",
10
+ timeoutMs: 2_000,
11
+ });
12
+
13
+ export default ${artifact.binding};
14
+ `;
15
+ }
16
+ export function agentSource(artifact, model, tools, instructions) {
17
+ const imports = [
18
+ `import { defineAgent } from "@relkit/app/agents";`,
19
+ `import { z } from "@relkit/app/schema";`,
20
+ ...(model === undefined ? [`import { FakeToolCallingModel } from "langchain";`] : []),
21
+ ...tools.map((tool) => sourceImport(tool.binding, tool.module, tool.exportKind)),
22
+ ...(instructions.binding && instructions.module
23
+ ? [sourceImport(instructions.binding, instructions.module, instructions.exportKind)]
24
+ : []),
25
+ ];
26
+ const prompt = instructions.binding ?? JSON.stringify(instructions.text);
27
+ return `${imports.join("\n")}\n\nconst ${artifact.binding} = defineAgent({
28
+ id: "${artifact.id}",
29
+ input: z.object({ question: z.string().min(1) }),
30
+ output: z.object({ answer: z.string() }),
31
+ model: ${model === undefined ? offlineModel() : JSON.stringify(model)},
32
+ instructions: ${prompt},
33
+ tools: [${tools.map((tool) => tool.binding).join(", ")}],
34
+ limits: { maxSteps: 4, maxToolCalls: 4, timeoutMs: 10_000 },
35
+ });
36
+
37
+ export default ${artifact.binding};
38
+ `;
39
+ }
40
+ function offlineModel() {
41
+ return `new FakeToolCallingModel({
42
+ toolCalls: [[{
43
+ name: "relkit_output",
44
+ args: { value: { answer: "Hello from the offline LangChain model." } },
45
+ id: "output-1",
46
+ }]],
47
+ })`;
48
+ }
49
+ //# sourceMappingURL=render-ai-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-ai-sources.js","sourceRoot":"","sources":["../src/render-ai-sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAOzE,MAAM,UAAU,UAAU,CACxB,QAAwB,EACxB,MAAyB,EACzB,YAAoB,EACpB,UAAkD,EAClD,QAAyC;IAEzC,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC;;QAEjE,QAAQ,CAAC,OAAO,MAAM,MAAM,CAAC,OAAO;SACnC,QAAQ,CAAC,EAAE;kBACF,QAAQ,CAAC,IAAI,CAAC,KAAK;iBACpB,UAAU;eACZ,QAAQ;;;;iBAIN,QAAQ,CAAC,OAAO;CAChC,CAAC;AACF,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,QAAwB,EACxB,KAAyB,EACzB,KAIG,EACH,YAKC;IAED,MAAM,OAAO,GAAG;QACd,mDAAmD;QACnD,yCAAyC;QACzC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,mDAAmD,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAChF,GAAG,CAAC,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM;YAC7C,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;YACpF,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,OAAO;SAClD,QAAQ,CAAC,EAAE;;;WAGT,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;kBACrD,MAAM;YACZ,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;iBAIvC,QAAQ,CAAC,OAAO;CAChC,CAAC;AACF,CAAC;AAED,SAAS,YAAY;IACnB,OAAO;;;;;;KAMJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type AddRequest } from "./add-types.js";
2
+ import { type DomainTarget } from "./domain-planning.js";
3
+ import { PlanBuilder } from "./plan-builder.js";
4
+ import { type RenderedArtifact } from "./render-domain.js";
5
+ export declare function renderTool(builder: PlanBuilder, target: DomainTarget, request: Extract<AddRequest, {
6
+ kind: "tool";
7
+ }>): Promise<RenderedArtifact>;
8
+ export declare function renderAgent(builder: PlanBuilder, target: DomainTarget, request: Extract<AddRequest, {
9
+ kind: "agent";
10
+ }>): Promise<RenderedArtifact>;
11
+ //# sourceMappingURL=render-ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-ai.d.ts","sourceRoot":"","sources":["../src/render-ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3E,wBAAsB,UAAU,CAC9B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7C,OAAO,CAAC,gBAAgB,CAAC,CA6B3B;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,GAC9C,OAAO,CAAC,gBAAgB,CAAC,CAkC3B"}
@@ -0,0 +1,61 @@
1
+ import { ADD_FAILURE_CODES, AddScaffoldError } from "./add-types.js";
2
+ import { assertAvailableId, domainArtifact, resolveArtifact, sourceModule, } from "./domain-planning.js";
3
+ import { PlanBuilder } from "./plan-builder.js";
4
+ import { agentSource, toolSource } from "./render-ai-sources.js";
5
+ import { renderFunction } from "./render-domain.js";
6
+ export async function renderTool(builder, target, request) {
7
+ const functionTarget = !request.createFunction &&
8
+ (target.service ||
9
+ builder.artifacts.some((item) => item.domain === target.domain.fileStem && item.kind === "function"))
10
+ ? resolveArtifact(builder, target, "function", request.target)
11
+ : await renderFunction(builder, target, request.target);
12
+ const artifact = domainArtifact(target, request.name, "tools", "tool", "tool");
13
+ assertAvailableId(builder, artifact.id);
14
+ await builder.create(artifact.path, toolSource(artifact, functionTarget, sourceModule(functionTarget.path), request.sideEffect, request.approval));
15
+ builder.registerArtifact("tool", {
16
+ domain: target.domain.fileStem,
17
+ path: artifact.path,
18
+ binding: artifact.binding,
19
+ id: artifact.id,
20
+ exportKind: artifact.exportKind,
21
+ });
22
+ return artifact;
23
+ }
24
+ export async function renderAgent(builder, target, request) {
25
+ const artifact = domainArtifact(target, request.name, "agents", "agent", "agent");
26
+ assertAvailableId(builder, artifact.id);
27
+ if (request.model !== undefined) {
28
+ const [profile] = request.model.split(":", 1);
29
+ if (!builder.discovery.profiles.some((item) => item.capability === "model" && item.name === profile)) {
30
+ throw new AddScaffoldError(ADD_FAILURE_CODES.usage, `Model profile ${profile} does not exist; configure a native model profile first.`);
31
+ }
32
+ }
33
+ else {
34
+ builder.dependency("langchain");
35
+ }
36
+ const tools = request.tools.map((value) => {
37
+ const tool = resolveArtifact(builder, target, "tool", value);
38
+ return { binding: tool.binding, module: sourceModule(tool.path), exportKind: tool.exportKind };
39
+ });
40
+ const instructions = request.prompt
41
+ ? promptInstructions(builder, target, request.prompt)
42
+ : { text: request.instructions };
43
+ await builder.create(artifact.path, agentSource(artifact, request.model, tools, instructions));
44
+ builder.registerArtifact("agent", {
45
+ domain: target.domain.fileStem,
46
+ path: artifact.path,
47
+ binding: artifact.binding,
48
+ id: artifact.id,
49
+ exportKind: artifact.exportKind,
50
+ });
51
+ return artifact;
52
+ }
53
+ function promptInstructions(builder, target, value) {
54
+ const prompt = resolveArtifact(builder, target, "prompt", value);
55
+ return {
56
+ binding: prompt.binding,
57
+ module: sourceModule(prompt.path),
58
+ exportKind: prompt.exportKind,
59
+ };
60
+ }
61
+ //# sourceMappingURL=render-ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-ai.js","sourceRoot":"","sources":["../src/render-ai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DatabaseDialect } from "./add-types.js";
2
+ export declare function authSchemaSource(dialect: DatabaseDialect): string;
3
+ //# sourceMappingURL=render-auth-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-auth-schema.d.ts","sourceRoot":"","sources":["../src/render-auth-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAsCtD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAyDjE"}
@@ -0,0 +1,85 @@
1
+ const DIALECTS = {
2
+ sqlite: {
3
+ imports: "integer, sqliteTable, text, uniqueIndex",
4
+ table: "sqliteTable",
5
+ string: "text()",
6
+ token: "text()",
7
+ boolean: `integer({ mode: "boolean" })`,
8
+ timestamp: `integer({ mode: "timestamp" })`,
9
+ },
10
+ postgresql: {
11
+ imports: "boolean, pgTable, text, timestamp, uniqueIndex",
12
+ table: "pgTable",
13
+ string: "text()",
14
+ token: "text()",
15
+ boolean: "boolean()",
16
+ timestamp: `timestamp({ withTimezone: true })`,
17
+ },
18
+ mysql: {
19
+ imports: "boolean, datetime, mysqlTable, text, uniqueIndex, varchar",
20
+ table: "mysqlTable",
21
+ string: "varchar({ length: 255 })",
22
+ token: "text()",
23
+ boolean: "boolean()",
24
+ timestamp: "datetime()",
25
+ },
26
+ };
27
+ export function authSchemaSource(dialect) {
28
+ const value = DIALECTS[dialect];
29
+ const module = dialect === "postgresql" ? "pg" : dialect;
30
+ return `import { ${value.imports} } from "drizzle-orm/${module}-core";
31
+
32
+ const timestamps = {
33
+ createdAt: ${value.timestamp}.notNull(),
34
+ updatedAt: ${value.timestamp}.notNull(),
35
+ };
36
+
37
+ export const user = ${value.table}("user", {
38
+ id: ${value.string}.primaryKey(),
39
+ name: ${value.string}.notNull(),
40
+ email: ${value.string}.notNull().unique(),
41
+ emailVerified: ${value.boolean}.notNull(),
42
+ image: ${value.token},
43
+ ...timestamps,
44
+ });
45
+
46
+ export const session = ${value.table}("session", {
47
+ id: ${value.string}.primaryKey(),
48
+ expiresAt: ${value.timestamp}.notNull(),
49
+ token: ${value.string}.notNull().unique(),
50
+ ipAddress: ${value.string},
51
+ userAgent: ${value.token},
52
+ userId: ${value.string}.notNull(),
53
+ ...timestamps,
54
+ });
55
+
56
+ export const account = ${value.table}(
57
+ "account",
58
+ {
59
+ id: ${value.string}.primaryKey(),
60
+ accountId: ${value.string}.notNull(),
61
+ issuer: ${value.string}.notNull(),
62
+ providerId: ${value.string}.notNull(),
63
+ userId: ${value.string}.notNull(),
64
+ accessToken: ${value.token},
65
+ refreshToken: ${value.token},
66
+ idToken: ${value.token},
67
+ accessTokenExpiresAt: ${value.timestamp},
68
+ refreshTokenExpiresAt: ${value.timestamp},
69
+ scope: ${value.string},
70
+ password: ${value.token},
71
+ ...timestamps,
72
+ },
73
+ (table) => [uniqueIndex("account_issuer_account_id").on(table.issuer, table.accountId)],
74
+ );
75
+
76
+ export const verification = ${value.table}("verification", {
77
+ id: ${value.string}.primaryKey(),
78
+ identifier: ${value.string}.notNull(),
79
+ value: ${value.token}.notNull(),
80
+ expiresAt: ${value.timestamp}.notNull(),
81
+ ...timestamps,
82
+ });
83
+ `;
84
+ }
85
+ //# sourceMappingURL=render-auth-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-auth-schema.js","sourceRoot":"","sources":["../src/render-auth-schema.ts"],"names":[],"mappings":"AAWA,MAAM,QAAQ,GAAmD;IAC/D,MAAM,EAAE;QACN,OAAO,EAAE,yCAAyC;QAClD,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,8BAA8B;QACvC,SAAS,EAAE,gCAAgC;KAC5C;IACD,UAAU,EAAE;QACV,OAAO,EAAE,gDAAgD;QACzD,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,mCAAmC;KAC/C;IACD,KAAK,EAAE;QACL,OAAO,EAAE,2DAA2D;QACpE,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,0BAA0B;QAClC,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,YAAY;KACxB;CACF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,OAAwB;IACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IACzD,OAAO,YAAY,KAAK,CAAC,OAAO,wBAAwB,MAAM;;;eAGjD,KAAK,CAAC,SAAS;eACf,KAAK,CAAC,SAAS;;;sBAGR,KAAK,CAAC,KAAK;QACzB,KAAK,CAAC,MAAM;UACV,KAAK,CAAC,MAAM;WACX,KAAK,CAAC,MAAM;mBACJ,KAAK,CAAC,OAAO;WACrB,KAAK,CAAC,KAAK;;;;yBAIG,KAAK,CAAC,KAAK;QAC5B,KAAK,CAAC,MAAM;eACL,KAAK,CAAC,SAAS;WACnB,KAAK,CAAC,MAAM;eACR,KAAK,CAAC,MAAM;eACZ,KAAK,CAAC,KAAK;YACd,KAAK,CAAC,MAAM;;;;yBAIC,KAAK,CAAC,KAAK;;;UAG1B,KAAK,CAAC,MAAM;iBACL,KAAK,CAAC,MAAM;cACf,KAAK,CAAC,MAAM;kBACR,KAAK,CAAC,MAAM;cAChB,KAAK,CAAC,MAAM;mBACP,KAAK,CAAC,KAAK;oBACV,KAAK,CAAC,KAAK;eAChB,KAAK,CAAC,KAAK;4BACE,KAAK,CAAC,SAAS;6BACd,KAAK,CAAC,SAAS;aAC/B,KAAK,CAAC,MAAM;gBACT,KAAK,CAAC,KAAK;;;;;;8BAMG,KAAK,CAAC,KAAK;QACjC,KAAK,CAAC,MAAM;gBACJ,KAAK,CAAC,MAAM;WACjB,KAAK,CAAC,KAAK;eACP,KAAK,CAAC,SAAS;;;CAG7B,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function authServiceSource(): string;
2
+ export declare function authRouteSource(): string;
3
+ //# sourceMappingURL=render-auth-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-auth-sources.d.ts","sourceRoot":"","sources":["../src/render-auth-sources.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAMxC"}
@@ -0,0 +1,17 @@
1
+ export function authServiceSource() {
2
+ return `import { defineBetterAuthService } from "@relkit/better-auth";
3
+
4
+ export default defineBetterAuthService({
5
+ baseURL: process.env.BETTER_AUTH_URL ?? "http://127.0.0.1:3000",
6
+ emailAndPassword: { enabled: true },
7
+ });
8
+ `;
9
+ }
10
+ export function authRouteSource() {
11
+ return `import { defineRoute } from "@relkit/app/routes";
12
+ import auth from "@app/auth/service.js";
13
+
14
+ export const ALL = defineRoute({ handler: auth.handler });
15
+ `;
16
+ }
17
+ //# sourceMappingURL=render-auth-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-auth-sources.js","sourceRoot":"","sources":["../src/render-auth-sources.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;CAMR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO;;;;CAIR,CAAC;AACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type AddRequest } from "./add-types.js";
2
+ import { PlanBuilder } from "./plan-builder.js";
3
+ export declare function renderAuth(builder: PlanBuilder, request: Extract<AddRequest, {
4
+ kind: "auth";
5
+ }>): Promise<void>;
6
+ //# sourceMappingURL=render-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-auth.d.ts","sourceRoot":"","sources":["../src/render-auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAUhD,wBAAsB,UAAU,CAC9B,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7C,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
@@ -0,0 +1,84 @@
1
+ import { dirname, posix } from "node:path";
2
+ import { routePathToFilePath } from "@relkit/compiler";
3
+ import { ADD_FAILURE_CODES, AddScaffoldError } from "./add-types.js";
4
+ import { PlanBuilder } from "./plan-builder.js";
5
+ import { ensureEnvironment } from "./provider-planning.js";
6
+ import { authSchemaSource } from "./render-auth-schema.js";
7
+ import { authRouteSource, authServiceSource } from "./render-auth-sources.js";
8
+ import { renderDatabase } from "./render-database.js";
9
+ import { addSourceExport } from "./source-edit.js";
10
+ const AUTH_TABLES = ["user", "session", "account", "verification"];
11
+ export async function renderAuth(builder, request) {
12
+ if (builder.discovery.services.some((service) => service.capability === "auth")) {
13
+ collision("An auth service already exists.");
14
+ }
15
+ validateBasePath(request.basePath);
16
+ const existing = builder.discovery.services.filter((service) => service.capability === "database");
17
+ if (existing.length > 1)
18
+ collision("Multiple database services exist.");
19
+ const database = existing[0]
20
+ ? existingDatabase(existing[0], request.databaseDialect)
21
+ : await renderDatabase(builder, {
22
+ kind: "database",
23
+ projectRoot: builder.discovery.projectRoot,
24
+ install: request.install,
25
+ orm: "drizzle",
26
+ dialect: request.databaseDialect,
27
+ authSchema: true,
28
+ });
29
+ if (existing[0])
30
+ await addAuthSchema(builder, database);
31
+ await builder.create("src/auth/service.ts", authServiceSource());
32
+ await builder.create(routePathToFilePath(`${request.basePath}/*auth?`), authRouteSource());
33
+ builder.dependency("@relkit/better-auth");
34
+ builder.dependency("better-auth");
35
+ await ensureEnvironment(builder, "BETTER_AUTH_SECRET", "env.secret()");
36
+ await ensureEnvironment(builder, "BETTER_AUTH_URL", `env.url().default(new URL("http://127.0.0.1:3000"))`, "http://127.0.0.1:3000");
37
+ builder.warning("auth-secret-required", "Populate BETTER_AUTH_SECRET with a strong secret before starting auth.");
38
+ builder.nextStep("Set BETTER_AUTH_SECRET in your environment.");
39
+ builder.registerArtifact("service", {
40
+ domain: "auth",
41
+ path: "src/auth/service.ts",
42
+ binding: "auth",
43
+ id: "auth",
44
+ });
45
+ }
46
+ async function addAuthSchema(builder, database) {
47
+ const directory = dirname(database.schemaPath).replaceAll("\\", "/");
48
+ await assertNoAuthTables(builder.discovery.projectRoot, directory);
49
+ await builder.create(`${directory}/auth.ts`, authSchemaSource(database.dialect));
50
+ await builder.update(database.schemaPath, (source) => addSourceExport(source, database.schemaPath, `export * from "./auth.js";`));
51
+ }
52
+ async function assertNoAuthTables(root, directory) {
53
+ const files = await Array.fromAsync(new Bun.Glob("**/*.ts").scan({ cwd: posix.join(root, directory) }));
54
+ for (const file of files) {
55
+ const source = await Bun.file(posix.join(root, directory, file)).text();
56
+ if (AUTH_TABLES.some((name) => new RegExp(`\\bexport\\s+const\\s+${name}\\b`).test(source))) {
57
+ collision(`The database schema already exports Better Auth table names (${file}).`);
58
+ }
59
+ }
60
+ }
61
+ function existingDatabase(service, requested) {
62
+ if (!service.dialect || !service.schemaPath) {
63
+ unsupported("The existing database service has no statically discoverable dialect or schema import.");
64
+ }
65
+ if (service.dialect !== requested) {
66
+ collision(`The existing database uses ${service.dialect}, not ${requested}.`);
67
+ }
68
+ return { dialect: service.dialect, servicePath: service.path, schemaPath: service.schemaPath };
69
+ }
70
+ function validateBasePath(value) {
71
+ if (!/^\/(?:[A-Za-z0-9._~-]+(?:\/[A-Za-z0-9._~-]+)*)?$/.test(value) || value === "/") {
72
+ usage(`Invalid auth base path: ${value}`);
73
+ }
74
+ }
75
+ function collision(message) {
76
+ throw new AddScaffoldError(ADD_FAILURE_CODES.collision, message);
77
+ }
78
+ function unsupported(message) {
79
+ throw new AddScaffoldError(ADD_FAILURE_CODES.unsupportedSourceShape, message);
80
+ }
81
+ function usage(message) {
82
+ throw new AddScaffoldError(ADD_FAILURE_CODES.usage, message);
83
+ }
84
+ //# sourceMappingURL=render-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-auth.js","sourceRoot":"","sources":["../src/render-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { DatabaseDialect } from "./add-types.js";
2
+ export declare function databaseServiceSource(dialect: DatabaseDialect): string;
3
+ export declare function itemsSchemaSource(dialect: DatabaseDialect): string;
4
+ export declare function drizzleConfigSource(dialect: DatabaseDialect): string;
5
+ //# sourceMappingURL=render-database-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-database-sources.d.ts","sourceRoot":"","sources":["../src/render-database-sources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAiBtE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA0BlE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAkBpE"}
@@ -0,0 +1,65 @@
1
+ export function databaseServiceSource(dialect) {
2
+ const sqlite = dialect === "sqlite";
3
+ const client = sqlite
4
+ ? `const sqlite = new Database(env.DATABASE_PATH);\n return drizzle({ client: sqlite });`
5
+ : `const url = env.DATABASE_URL;\n if (!url) throw new Error("DATABASE_URL is required");\n return drizzle.${dialect === "postgresql" ? "postgres" : "mysql"}(url);`;
6
+ return `${sqlite ? `import { Database } from "bun:sqlite";\n` : ""}import { defineDrizzleService } from "@relkit/drizzle";
7
+ import { drizzle } from "drizzle-orm/${sqlite ? "bun-sqlite" : "bun-sql"}";
8
+ import * as schema from "./schema/index.js";
9
+
10
+ export default defineDrizzleService({
11
+ schema,
12
+ client: ({ env }) => {
13
+ ${client}
14
+ },
15
+ dispose: (database) => database.$client.close(),
16
+ });
17
+ `;
18
+ }
19
+ export function itemsSchemaSource(dialect) {
20
+ if (dialect === "sqlite") {
21
+ return `import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
22
+
23
+ export const items = sqliteTable("items", {
24
+ id: integer().primaryKey({ autoIncrement: true }),
25
+ name: text().notNull(),
26
+ });
27
+ `;
28
+ }
29
+ if (dialect === "postgresql") {
30
+ return `import { pgTable, serial, text } from "drizzle-orm/pg-core";
31
+
32
+ export const items = pgTable("items", {
33
+ id: serial().primaryKey(),
34
+ name: text().notNull(),
35
+ });
36
+ `;
37
+ }
38
+ return `import { int, mysqlTable, varchar } from "drizzle-orm/mysql-core";
39
+
40
+ export const items = mysqlTable("items", {
41
+ id: int().autoincrement().primaryKey(),
42
+ name: varchar({ length: 255 }).notNull(),
43
+ });
44
+ `;
45
+ }
46
+ export function drizzleConfigSource(dialect) {
47
+ const variable = dialect === "sqlite" ? "DATABASE_PATH" : "DATABASE_URL";
48
+ const value = dialect === "sqlite" ? "path" : "url";
49
+ const invalid = dialect === "sqlite" ? ` || path === ":memory:"` : "";
50
+ return `import { defineConfig } from "drizzle-kit";
51
+
52
+ const ${value} = process.env.${variable};
53
+ if (${value} === undefined || ${value}.trim() === ""${invalid}) {
54
+ throw new Error("Set ${variable} to the database you intend to migrate");
55
+ }
56
+
57
+ export default defineConfig({
58
+ schema: "./src/database/schema/index.ts",
59
+ dialect: "${dialect}",
60
+ out: "./drizzle",
61
+ dbCredentials: { url: ${value} },
62
+ });
63
+ `;
64
+ }
65
+ //# sourceMappingURL=render-database-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-database-sources.js","sourceRoot":"","sources":["../src/render-database-sources.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CAAC,OAAwB;IAC5D,MAAM,MAAM,GAAG,OAAO,KAAK,QAAQ,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM;QACnB,CAAC,CAAC,0FAA0F;QAC5F,CAAC,CAAC,iHAAiH,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;IAC7K,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,EAAE;uCAC7B,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;;;;;;MAMlE,MAAM;;;;CAIX,CAAC;AACF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACxD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO;;;;;;CAMV,CAAC;IACA,CAAC;IACD,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;QAC7B,OAAO;;;;;;CAMV,CAAC;IACA,CAAC;IACD,OAAO;;;;;;CAMR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAwB;IAC1D,MAAM,QAAQ,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;IACzE,MAAM,KAAK,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,MAAM,OAAO,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,OAAO;;QAED,KAAK,kBAAkB,QAAQ;MACjC,KAAK,qBAAqB,KAAK,iBAAiB,OAAO;yBACpC,QAAQ;;;;;cAKnB,OAAO;;0BAEK,KAAK;;CAE9B,CAAC;AACF,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type AddRequest } from "./add-types.js";
2
+ import { PlanBuilder } from "./plan-builder.js";
3
+ export interface RenderedDatabase {
4
+ readonly dialect: Extract<AddRequest, {
5
+ kind: "database";
6
+ }>["dialect"];
7
+ readonly servicePath: string;
8
+ readonly schemaPath: string;
9
+ }
10
+ export declare function renderDatabase(builder: PlanBuilder, request: Extract<AddRequest, {
11
+ kind: "database";
12
+ }>): Promise<RenderedDatabase>;
13
+ //# sourceMappingURL=render-database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-database.d.ts","sourceRoot":"","sources":["../src/render-database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAShD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACvE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,GACjD,OAAO,CAAC,gBAAgB,CAAC,CA2C3B"}
@@ -0,0 +1,40 @@
1
+ import { ADD_FAILURE_CODES, AddScaffoldError } from "./add-types.js";
2
+ import { PlanBuilder } from "./plan-builder.js";
3
+ import { ensureEnvironment } from "./provider-planning.js";
4
+ import { authSchemaSource } from "./render-auth-schema.js";
5
+ import { databaseServiceSource, drizzleConfigSource, itemsSchemaSource, } from "./render-database-sources.js";
6
+ export async function renderDatabase(builder, request) {
7
+ if (builder.discovery.services.some((service) => service.capability === "database")) {
8
+ throw new AddScaffoldError(ADD_FAILURE_CODES.collision, "A database service already exists.");
9
+ }
10
+ const servicePath = "src/database/service.ts";
11
+ const schemaPath = "src/database/schema/index.ts";
12
+ await builder.create(servicePath, databaseServiceSource(request.dialect));
13
+ await builder.create(schemaPath, request.authSchema ? authSchemaSource(request.dialect) : itemsSchemaSource(request.dialect));
14
+ await builder.create("drizzle.config.ts", drizzleConfigSource(request.dialect));
15
+ for (const dependency of ["@relkit/drizzle", "drizzle-orm", "drizzle-kit"]) {
16
+ builder.dependency(dependency);
17
+ }
18
+ builder.script("db:generate", "bun --bun drizzle-kit generate");
19
+ builder.script("db:migrate", "bun --bun drizzle-kit migrate");
20
+ await builder.gitignore("/drizzle/");
21
+ if (request.dialect === "sqlite") {
22
+ await ensureEnvironment(builder, "DATABASE_PATH", `env.string().default("./app.sqlite")`, "./app.sqlite");
23
+ await builder.gitignore("*.sqlite");
24
+ await builder.gitignore("*.sqlite-*");
25
+ }
26
+ else {
27
+ await ensureEnvironment(builder, "DATABASE_URL", "env.string()");
28
+ builder.warning("database-url-required", "Populate DATABASE_URL before starting the database service.");
29
+ }
30
+ builder.nextStep("bun run db:generate");
31
+ builder.nextStep("bun run db:migrate");
32
+ builder.registerArtifact("service", {
33
+ domain: "database",
34
+ path: servicePath,
35
+ binding: "database",
36
+ id: "database",
37
+ });
38
+ return { dialect: request.dialect, servicePath, schemaPath };
39
+ }
40
+ //# sourceMappingURL=render-database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-database.js","sourceRoot":"","sources":["../src/render-database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAmB,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AAQtC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAoB,EACpB,OAAkD;IAElD,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,KAAK,UAAU,CAAC,EAAE,CAAC;QACpF,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,WAAW,GAAG,yBAAyB,CAAC;IAC9C,MAAM,UAAU,GAAG,8BAA8B,CAAC;IAClD,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,MAAM,OAAO,CAAC,MAAM,CAClB,UAAU,EACV,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAC5F,CAAC;IACF,MAAM,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAChF,KAAK,MAAM,UAAU,IAAI,CAAC,iBAAiB,EAAE,aAAa,EAAE,aAAa,CAAU,EAAE,CAAC;QACpF,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,gCAAgC,CAAC,CAAC;IAChE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,+BAA+B,CAAC,CAAC;IAC9D,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,iBAAiB,CACrB,OAAO,EACP,eAAe,EACf,sCAAsC,EACtC,cAAc,CACf,CAAC;QACF,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QACjE,OAAO,CAAC,OAAO,CACb,uBAAuB,EACvB,6DAA6D,CAC9D,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACxC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACvC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE;QAClC,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,UAAU;QACnB,EAAE,EAAE,UAAU;KACf,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { DomainTarget, DomainArtifact } from "./domain-planning.js";
2
+ import { PlanBuilder } from "./plan-builder.js";
3
+ export declare function register(builder: PlanBuilder, target: DomainTarget, kind: "function" | "error" | "event" | "task" | "job" | "prompt" | "constants", artifact: DomainArtifact): void;
4
+ //# sourceMappingURL=render-domain-register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-domain-register.d.ts","sourceRoot":"","sources":["../src/render-domain-register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,wBAAgB,QAAQ,CACtB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,EAC9E,QAAQ,EAAE,cAAc,GACvB,IAAI,CAQN"}
@@ -0,0 +1,11 @@
1
+ import { PlanBuilder } from "./plan-builder.js";
2
+ export function register(builder, target, kind, artifact) {
3
+ builder.registerArtifact(kind, {
4
+ domain: target.domain.fileStem,
5
+ path: artifact.path,
6
+ binding: artifact.binding,
7
+ id: artifact.id,
8
+ exportKind: artifact.exportKind,
9
+ });
10
+ }
11
+ //# sourceMappingURL=render-domain-register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-domain-register.js","sourceRoot":"","sources":["../src/render-domain-register.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,UAAU,QAAQ,CACtB,OAAoB,EACpB,MAAoB,EACpB,IAA8E,EAC9E,QAAwB;IAExB,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;QAC9B,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type DomainArtifact } from "./domain-planning.js";
2
+ type ArtifactReference = {
3
+ readonly binding: string;
4
+ readonly exportKind?: "default" | "named" | undefined;
5
+ };
6
+ export declare function functionSource(artifact: DomainArtifact, relationships?: {
7
+ readonly error?: DomainArtifact;
8
+ readonly event?: DomainArtifact;
9
+ }): string;
10
+ export declare function errorSource(artifact: DomainArtifact): string;
11
+ export declare function eventSource(artifact: DomainArtifact, profile?: string): string;
12
+ export declare function eventFunctionSource(artifact: DomainArtifact, eventId: string, delivery: "transient" | "durable", profile?: string): string;
13
+ export declare function jobSource(artifact: DomainArtifact, target: ArtifactReference, targetModule: string, profile?: string): string;
14
+ export declare function taskSource(artifact: DomainArtifact, version: string, execution: "durable" | "retryable"): string;
15
+ export declare function taskJobSource(artifact: DomainArtifact, target: ArtifactReference, targetModule: string, profile?: string, domain?: string): string;
16
+ export declare function promptSource(artifact: DomainArtifact, text: readonly string[]): string;
17
+ export declare function constantsSource(artifact: DomainArtifact): string;
18
+ export {};
19
+ //# sourceMappingURL=render-domain-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-domain-sources.d.ts","sourceRoot":"","sources":["../src/render-domain-sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEvF,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;CACvD,CAAC;AAEF,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,cAAc,EACxB,aAAa,GAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAA;CAAO,GACvF,MAAM,CAyBR;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAa5D;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAoB9E;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,GAAG,SAAS,EACjC,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAcR;AAED,wBAAgB,SAAS,CACvB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,iBAAiB,EACzB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAaR;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,GAAG,WAAW,GACjC,MAAM,CAkBR;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,iBAAiB,EACzB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAgBR;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEtF;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAEhE"}