0pflow 0.1.0-dev.628bd97 → 0.1.0-dev.67aecec

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 (262) hide show
  1. package/dist/__tests__/discover.integration.test.d.ts +2 -0
  2. package/dist/__tests__/discover.integration.test.d.ts.map +1 -0
  3. package/dist/__tests__/discover.integration.test.js +137 -0
  4. package/dist/__tests__/discover.integration.test.js.map +1 -0
  5. package/dist/__tests__/factory.test.js +13 -0
  6. package/dist/__tests__/factory.test.js.map +1 -1
  7. package/dist/__tests__/integration.e2e.test.js +2 -1
  8. package/dist/__tests__/integration.e2e.test.js.map +1 -1
  9. package/dist/__tests__/integration.test.js +87 -82
  10. package/dist/__tests__/integration.test.js.map +1 -1
  11. package/dist/agent.d.ts +7 -0
  12. package/dist/agent.d.ts.map +1 -1
  13. package/dist/agent.js +75 -10
  14. package/dist/agent.js.map +1 -1
  15. package/dist/cli/__tests__/discovery.test.js +1 -1
  16. package/dist/cli/__tests__/discovery.test.js.map +1 -1
  17. package/dist/cli/app.d.ts +6 -0
  18. package/dist/cli/app.d.ts.map +1 -1
  19. package/dist/cli/app.js +31 -0
  20. package/dist/cli/app.js.map +1 -1
  21. package/dist/cli/cloud-dev.d.ts +7 -0
  22. package/dist/cli/cloud-dev.d.ts.map +1 -0
  23. package/dist/cli/cloud-dev.js +570 -0
  24. package/dist/cli/cloud-dev.js.map +1 -0
  25. package/dist/cli/deploy.d.ts +27 -0
  26. package/dist/cli/deploy.d.ts.map +1 -0
  27. package/dist/cli/deploy.js +332 -0
  28. package/dist/cli/deploy.js.map +1 -0
  29. package/dist/cli/discovery.d.ts +10 -0
  30. package/dist/cli/discovery.d.ts.map +1 -1
  31. package/dist/cli/discovery.js +42 -0
  32. package/dist/cli/discovery.js.map +1 -1
  33. package/dist/cli/env.d.ts +3 -1
  34. package/dist/cli/env.d.ts.map +1 -1
  35. package/dist/cli/env.js +9 -4
  36. package/dist/cli/env.js.map +1 -1
  37. package/dist/cli/index.d.ts.map +1 -1
  38. package/dist/cli/index.js +208 -11
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/cli/install.d.ts +4 -0
  41. package/dist/cli/install.d.ts.map +1 -1
  42. package/dist/cli/install.js +63 -32
  43. package/dist/cli/install.js.map +1 -1
  44. package/dist/cli/mcp/config.d.ts +0 -1
  45. package/dist/cli/mcp/config.d.ts.map +1 -1
  46. package/dist/cli/mcp/config.js +2 -4
  47. package/dist/cli/mcp/config.js.map +1 -1
  48. package/dist/cli/mcp/lib/scaffolding.d.ts +33 -0
  49. package/dist/cli/mcp/lib/scaffolding.d.ts.map +1 -0
  50. package/dist/cli/mcp/lib/scaffolding.js +234 -0
  51. package/dist/cli/mcp/lib/scaffolding.js.map +1 -0
  52. package/dist/cli/mcp/lib/templates.d.ts +1 -0
  53. package/dist/cli/mcp/lib/templates.d.ts.map +1 -1
  54. package/dist/cli/mcp/lib/templates.js.map +1 -1
  55. package/dist/cli/mcp/tools/createApp.d.ts +1 -0
  56. package/dist/cli/mcp/tools/createApp.d.ts.map +1 -1
  57. package/dist/cli/mcp/tools/createApp.js +12 -53
  58. package/dist/cli/mcp/tools/createApp.js.map +1 -1
  59. package/dist/cli/mcp/tools/createDatabase.d.ts.map +1 -1
  60. package/dist/cli/mcp/tools/createDatabase.js +2 -41
  61. package/dist/cli/mcp/tools/createDatabase.js.map +1 -1
  62. package/dist/cli/mcp/tools/getConnectionInfo.d.ts +19 -0
  63. package/dist/cli/mcp/tools/getConnectionInfo.d.ts.map +1 -0
  64. package/dist/cli/mcp/tools/getConnectionInfo.js +111 -0
  65. package/dist/cli/mcp/tools/getConnectionInfo.js.map +1 -0
  66. package/dist/cli/mcp/tools/getRun.d.ts +22 -0
  67. package/dist/cli/mcp/tools/getRun.d.ts.map +1 -0
  68. package/dist/cli/mcp/tools/getRun.js +80 -0
  69. package/dist/cli/mcp/tools/getRun.js.map +1 -0
  70. package/dist/cli/mcp/tools/getTrace.d.ts +32 -0
  71. package/dist/cli/mcp/tools/getTrace.d.ts.map +1 -0
  72. package/dist/cli/mcp/tools/getTrace.js +104 -0
  73. package/dist/cli/mcp/tools/getTrace.js.map +1 -0
  74. package/dist/cli/mcp/tools/index.d.ts +94 -1
  75. package/dist/cli/mcp/tools/index.d.ts.map +1 -1
  76. package/dist/cli/mcp/tools/index.js +16 -0
  77. package/dist/cli/mcp/tools/index.js.map +1 -1
  78. package/dist/cli/mcp/tools/listIntegrations.d.ts +14 -0
  79. package/dist/cli/mcp/tools/listIntegrations.d.ts.map +1 -0
  80. package/dist/cli/mcp/tools/listIntegrations.js +53 -0
  81. package/dist/cli/mcp/tools/listIntegrations.js.map +1 -0
  82. package/dist/cli/mcp/tools/listRuns.d.ts +21 -0
  83. package/dist/cli/mcp/tools/listRuns.d.ts.map +1 -0
  84. package/dist/cli/mcp/tools/listRuns.js +72 -0
  85. package/dist/cli/mcp/tools/listRuns.js.map +1 -0
  86. package/dist/cli/mcp/tools/listWorkflows.d.ts +15 -0
  87. package/dist/cli/mcp/tools/listWorkflows.d.ts.map +1 -0
  88. package/dist/cli/mcp/tools/listWorkflows.js +45 -0
  89. package/dist/cli/mcp/tools/listWorkflows.js.map +1 -0
  90. package/dist/cli/mcp/tools/runNode.d.ts +17 -0
  91. package/dist/cli/mcp/tools/runNode.d.ts.map +1 -0
  92. package/dist/cli/mcp/tools/runNode.js +74 -0
  93. package/dist/cli/mcp/tools/runNode.js.map +1 -0
  94. package/dist/cli/mcp/tools/runWorkflow.d.ts +16 -0
  95. package/dist/cli/mcp/tools/runWorkflow.d.ts.map +1 -0
  96. package/dist/cli/mcp/tools/runWorkflow.js +66 -0
  97. package/dist/cli/mcp/tools/runWorkflow.js.map +1 -0
  98. package/dist/cli/mcp/tools/setupAppSchema.d.ts +1 -1
  99. package/dist/cli/mcp/tools/setupAppSchema.d.ts.map +1 -1
  100. package/dist/cli/mcp/tools/setupAppSchema.js +11 -132
  101. package/dist/cli/mcp/tools/setupAppSchema.js.map +1 -1
  102. package/dist/cli/mcp/tools/utils.d.ts +7 -0
  103. package/dist/cli/mcp/tools/utils.d.ts.map +1 -0
  104. package/dist/cli/mcp/tools/utils.js +28 -0
  105. package/dist/cli/mcp/tools/utils.js.map +1 -0
  106. package/dist/cli/run.d.ts +2 -0
  107. package/dist/cli/run.d.ts.map +1 -0
  108. package/dist/cli/run.js +560 -0
  109. package/dist/cli/run.js.map +1 -0
  110. package/dist/cli/trace.d.ts +5 -0
  111. package/dist/cli/trace.d.ts.map +1 -1
  112. package/dist/cli/trace.js +1 -1
  113. package/dist/cli/trace.js.map +1 -1
  114. package/dist/connections/cloud-auth.d.ts +46 -0
  115. package/dist/connections/cloud-auth.d.ts.map +1 -0
  116. package/dist/connections/cloud-auth.js +247 -0
  117. package/dist/connections/cloud-auth.js.map +1 -0
  118. package/dist/connections/cloud-client.d.ts +25 -0
  119. package/dist/connections/cloud-client.d.ts.map +1 -0
  120. package/dist/connections/cloud-client.js +66 -0
  121. package/dist/connections/cloud-client.js.map +1 -0
  122. package/dist/connections/cloud-integration-provider.d.ts +22 -0
  123. package/dist/connections/cloud-integration-provider.d.ts.map +1 -0
  124. package/dist/connections/cloud-integration-provider.js +42 -0
  125. package/dist/connections/cloud-integration-provider.js.map +1 -0
  126. package/dist/connections/connection-labels.d.ts +14 -0
  127. package/dist/connections/connection-labels.d.ts.map +1 -0
  128. package/dist/connections/connection-labels.js +46 -0
  129. package/dist/connections/connection-labels.js.map +1 -0
  130. package/dist/connections/index.d.ts +12 -0
  131. package/dist/connections/index.d.ts.map +1 -0
  132. package/dist/connections/index.js +10 -0
  133. package/dist/connections/index.js.map +1 -0
  134. package/dist/connections/integration-provider.d.ts +39 -0
  135. package/dist/connections/integration-provider.d.ts.map +1 -0
  136. package/dist/connections/integration-provider.js +20 -0
  137. package/dist/connections/integration-provider.js.map +1 -0
  138. package/dist/connections/local-integration-provider.d.ts +29 -0
  139. package/dist/connections/local-integration-provider.d.ts.map +1 -0
  140. package/dist/connections/local-integration-provider.js +71 -0
  141. package/dist/connections/local-integration-provider.js.map +1 -0
  142. package/dist/connections/nango-client.d.ts +14 -0
  143. package/dist/connections/nango-client.d.ts.map +1 -0
  144. package/dist/connections/nango-client.js +51 -0
  145. package/dist/connections/nango-client.js.map +1 -0
  146. package/dist/connections/resolver.d.ts +26 -0
  147. package/dist/connections/resolver.d.ts.map +1 -0
  148. package/dist/connections/resolver.js +48 -0
  149. package/dist/connections/resolver.js.map +1 -0
  150. package/dist/connections/schema.d.ts +8 -0
  151. package/dist/connections/schema.d.ts.map +1 -0
  152. package/dist/connections/schema.js +31 -0
  153. package/dist/connections/schema.js.map +1 -0
  154. package/dist/context.d.ts.map +1 -1
  155. package/dist/context.js +4 -0
  156. package/dist/context.js.map +1 -1
  157. package/dist/dev-ui/api.d.ts +18 -0
  158. package/dist/dev-ui/api.d.ts.map +1 -0
  159. package/dist/dev-ui/api.js +273 -0
  160. package/dist/dev-ui/api.js.map +1 -0
  161. package/dist/dev-ui/dag/extractor.d.ts +19 -0
  162. package/dist/dev-ui/dag/extractor.d.ts.map +1 -0
  163. package/dist/dev-ui/dag/extractor.js +716 -0
  164. package/dist/dev-ui/dag/extractor.js.map +1 -0
  165. package/dist/dev-ui/dag/types.d.ts +42 -0
  166. package/dist/dev-ui/dag/types.d.ts.map +1 -0
  167. package/dist/dev-ui/dag/types.js +2 -0
  168. package/dist/dev-ui/dag/types.js.map +1 -0
  169. package/dist/dev-ui/deploy-api.d.ts +14 -0
  170. package/dist/dev-ui/deploy-api.d.ts.map +1 -0
  171. package/dist/dev-ui/deploy-api.js +112 -0
  172. package/dist/dev-ui/deploy-api.js.map +1 -0
  173. package/dist/dev-ui/dev-server.d.ts +18 -0
  174. package/dist/dev-ui/dev-server.d.ts.map +1 -0
  175. package/dist/dev-ui/dev-server.js +275 -0
  176. package/dist/dev-ui/dev-server.js.map +1 -0
  177. package/dist/dev-ui/index.d.ts +3 -0
  178. package/dist/dev-ui/index.d.ts.map +1 -0
  179. package/dist/dev-ui/index.js +2 -0
  180. package/dist/dev-ui/index.js.map +1 -0
  181. package/dist/dev-ui/pty.d.ts +16 -0
  182. package/dist/dev-ui/pty.d.ts.map +1 -0
  183. package/dist/dev-ui/pty.js +87 -0
  184. package/dist/dev-ui/pty.js.map +1 -0
  185. package/dist/dev-ui/watcher.d.ts +12 -0
  186. package/dist/dev-ui/watcher.d.ts.map +1 -0
  187. package/dist/dev-ui/watcher.js +166 -0
  188. package/dist/dev-ui/watcher.js.map +1 -0
  189. package/dist/dev-ui/ws.d.ts +52 -0
  190. package/dist/dev-ui/ws.d.ts.map +1 -0
  191. package/dist/dev-ui/ws.js +32 -0
  192. package/dist/dev-ui/ws.js.map +1 -0
  193. package/dist/dev-ui-client/assets/index-CNKqwcCH.css +32 -0
  194. package/dist/dev-ui-client/assets/index-Ccj-QknZ.js +179 -0
  195. package/dist/dev-ui-client/assets/index-DAKTQEvj.js +1 -0
  196. package/dist/dev-ui-client/index.html +13 -0
  197. package/dist/discover.d.ts +15 -0
  198. package/dist/discover.d.ts.map +1 -0
  199. package/dist/discover.js +32 -0
  200. package/dist/discover.js.map +1 -0
  201. package/dist/factory.d.ts.map +1 -1
  202. package/dist/factory.js +37 -13
  203. package/dist/factory.js.map +1 -1
  204. package/dist/index.d.ts +6 -0
  205. package/dist/index.d.ts.map +1 -1
  206. package/dist/index.js +7 -0
  207. package/dist/index.js.map +1 -1
  208. package/dist/node.d.ts +1 -0
  209. package/dist/node.d.ts.map +1 -1
  210. package/dist/node.js +1 -0
  211. package/dist/node.js.map +1 -1
  212. package/dist/nodes/agent/executor.d.ts +2 -0
  213. package/dist/nodes/agent/executor.d.ts.map +1 -1
  214. package/dist/nodes/agent/executor.js +11 -1
  215. package/dist/nodes/agent/executor.js.map +1 -1
  216. package/dist/registry-gen.d.ts +6 -0
  217. package/dist/registry-gen.d.ts.map +1 -0
  218. package/dist/registry-gen.js +146 -0
  219. package/dist/registry-gen.js.map +1 -0
  220. package/dist/types.d.ts +28 -3
  221. package/dist/types.d.ts.map +1 -1
  222. package/dist/types.js +18 -1
  223. package/dist/types.js.map +1 -1
  224. package/dist/workflow.d.ts +22 -0
  225. package/dist/workflow.d.ts.map +1 -1
  226. package/dist/workflow.js +113 -3
  227. package/dist/workflow.js.map +1 -1
  228. package/package.json +30 -6
  229. package/templates/app/.dockerignore +6 -0
  230. package/templates/app/.env.example +13 -0
  231. package/templates/app/Dockerfile +34 -0
  232. package/templates/app/README.md +29 -0
  233. package/templates/app/biome.jsonc +81 -0
  234. package/templates/app/dbos-config.yaml +6 -0
  235. package/templates/app/drizzle.config.ts +12 -0
  236. package/templates/app/generated/registry.ts +8 -0
  237. package/templates/app/next.config.js +13 -0
  238. package/templates/app/package.json +57 -0
  239. package/templates/app/postcss.config.js +5 -0
  240. package/templates/app/public/favicon.ico +0 -0
  241. package/templates/app/src/app/_components/.gitkeep +0 -0
  242. package/templates/app/src/app/api/trpc/[trpc]/route.ts +34 -0
  243. package/templates/app/src/app/api/workflow/[name]/route.ts +37 -0
  244. package/templates/app/src/app/layout.tsx +29 -0
  245. package/templates/app/src/app/page.tsx +18 -0
  246. package/templates/app/src/env.js +46 -0
  247. package/templates/app/src/instrumentation.ts +6 -0
  248. package/templates/app/src/lib/pflow.ts +28 -0
  249. package/templates/app/src/server/api/root.ts +21 -0
  250. package/templates/app/src/server/api/routers/.gitkeep +0 -0
  251. package/templates/app/src/server/api/trpc.ts +106 -0
  252. package/templates/app/src/server/db/index.ts +18 -0
  253. package/templates/app/src/server/db/schema.ts +14 -0
  254. package/templates/app/src/styles/globals.css +6 -0
  255. package/templates/app/src/styles/globals.css.orange +126 -0
  256. package/templates/app/src/trpc/query-client.ts +25 -0
  257. package/templates/app/src/trpc/react.tsx +78 -0
  258. package/templates/app/src/trpc/server.ts +30 -0
  259. package/templates/app/tsconfig.check.json +23 -0
  260. package/templates/app/tsconfig.json +42 -0
  261. package/templates/app/tsconfig.server.json +5 -0
  262. package/templates/app/tsconfig.test.json +21 -0
@@ -0,0 +1,45 @@
1
+ import { z } from "zod";
2
+ import { discoverWorkflows } from "../../discovery.js";
3
+ const inputSchema = {};
4
+ const outputSchema = {
5
+ workflows: z
6
+ .array(z.object({
7
+ name: z.string(),
8
+ version: z.number().optional(),
9
+ description: z.string().optional(),
10
+ }))
11
+ .describe("List of available workflows"),
12
+ error: z.string().optional().describe("Error message if discovery failed"),
13
+ };
14
+ export const listWorkflowsFactory = () => {
15
+ return {
16
+ name: "list_workflows",
17
+ config: {
18
+ title: "List Workflows",
19
+ description: "List all available compiled workflows in the project. " +
20
+ "Returns workflow names, versions, and descriptions.",
21
+ inputSchema,
22
+ outputSchema,
23
+ },
24
+ fn: async () => {
25
+ try {
26
+ const { workflows, warnings } = await discoverWorkflows(process.cwd());
27
+ return {
28
+ workflows: workflows.map((w) => ({
29
+ name: w.name,
30
+ version: "version" in w ? w.version : undefined,
31
+ description: w.description || undefined,
32
+ })),
33
+ ...(warnings.length > 0 ? { error: warnings.join("; ") } : {}),
34
+ };
35
+ }
36
+ catch (err) {
37
+ return {
38
+ workflows: [],
39
+ error: err instanceof Error ? err.message : String(err),
40
+ };
41
+ }
42
+ },
43
+ };
44
+ };
45
+ //# sourceMappingURL=listWorkflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listWorkflows.js","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/listWorkflows.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,GAAG,EAAW,CAAC;AAEhC,MAAM,YAAY,GAAG;IACnB,SAAS,EAAE,CAAC;SACT,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC,CACH;SACA,QAAQ,CAAC,6BAA6B,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CAClE,CAAC;AAOX,MAAM,CAAC,MAAM,oBAAoB,GAI7B,GAAG,EAAE;IACP,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE;YACN,KAAK,EAAE,gBAAgB;YACvB,WAAW,EACT,wDAAwD;gBACxD,qDAAqD;YACvD,WAAW;YACX,YAAY;SACb;QACD,EAAE,EAAE,KAAK,IAA2B,EAAE;YACpC,IAAI,CAAC;gBACH,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBAEvE,OAAO;oBACL,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC/B,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC,CAAE,CAA0B,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;wBACzE,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,SAAS;qBACxC,CAAC,CAAC;oBACH,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/D,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO;oBACL,SAAS,EAAE,EAAE;oBACb,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ApiFactory } from "@tigerdata/mcp-boilerplate";
2
+ import { z } from "zod";
3
+ import type { ServerContext } from "../types.js";
4
+ declare const inputSchema: {
5
+ readonly node_name: z.ZodString;
6
+ readonly workflow_name: z.ZodOptional<z.ZodString>;
7
+ readonly input: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
8
+ };
9
+ declare const outputSchema: {
10
+ readonly run_id: z.ZodOptional<z.ZodString>;
11
+ readonly status: z.ZodString;
12
+ readonly result: z.ZodOptional<z.ZodUnknown>;
13
+ readonly error: z.ZodOptional<z.ZodString>;
14
+ };
15
+ export declare const runNodeFactory: ApiFactory<ServerContext, typeof inputSchema, typeof outputSchema>;
16
+ export {};
17
+ //# sourceMappingURL=runNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runNode.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/runNode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAYjD,QAAA,MAAM,WAAW;;;;CAWP,CAAC;AAEX,QAAA,MAAM,YAAY;;;;;CAKR,CAAC;AASX,eAAO,MAAM,cAAc,EAAE,UAAU,CACrC,aAAa,EACb,OAAO,WAAW,EAClB,OAAO,YAAY,CA6CpB,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ import { z } from "zod";
4
+ const execFileAsync = promisify(execFile);
5
+ // We shell out to the CLI instead of running nodes in-process because
6
+ // DBOS doesn't allow re-registering workflows after launch. A subprocess
7
+ // loads fresh code every time, so users can edit node code and re-run
8
+ // through MCP without restarting the server.
9
+ // process.argv gives us the same runtime+script the MCP server was started
10
+ // with (e.g. tsx + .ts in dev, node + .js in prod). process.execArgv
11
+ // forwards loader flags (--import tsx/esm) so .ts files resolve correctly.
12
+ const inputSchema = {
13
+ node_name: z.string().describe("Name of the node to run"),
14
+ workflow_name: z
15
+ .string()
16
+ .optional()
17
+ .describe("Workflow name for connection resolution (uses the workflow's configured connections)"),
18
+ input: z
19
+ .record(z.string(), z.unknown())
20
+ .optional()
21
+ .default({})
22
+ .describe("JSON input for the node (default: {})"),
23
+ };
24
+ const outputSchema = {
25
+ run_id: z.string().optional().describe("Wrapper workflow run UUID (use with get_trace to inspect execution)"),
26
+ status: z.string().describe("Execution status: SUCCESS or ERROR"),
27
+ result: z.unknown().optional().describe("Node return value"),
28
+ error: z.string().optional().describe("Error message if execution failed"),
29
+ };
30
+ export const runNodeFactory = () => {
31
+ return {
32
+ name: "run_node",
33
+ config: {
34
+ title: "Run Node",
35
+ description: "Execute a node by name with JSON input. " +
36
+ "The node is wrapped in a workflow for durability. " +
37
+ "Returns the result and a run_id that can be used with get_trace.",
38
+ inputSchema,
39
+ outputSchema,
40
+ },
41
+ fn: async ({ node_name, workflow_name, input }) => {
42
+ const [runtime, script] = process.argv;
43
+ try {
44
+ const args = [
45
+ ...process.execArgv,
46
+ script,
47
+ "node", "run", node_name,
48
+ "--json",
49
+ "-i", JSON.stringify(input),
50
+ ];
51
+ if (workflow_name) {
52
+ args.push("-w", workflow_name);
53
+ }
54
+ const { stdout } = await execFileAsync(runtime, args, { cwd: process.cwd() });
55
+ return JSON.parse(stdout);
56
+ }
57
+ catch (err) {
58
+ // execFile rejects on non-zero exit — try to parse JSON from stdout
59
+ const execErr = err;
60
+ if (execErr.stdout) {
61
+ try {
62
+ return JSON.parse(execErr.stdout);
63
+ }
64
+ catch { /* fall through */ }
65
+ }
66
+ return {
67
+ status: "ERROR",
68
+ error: execErr.stderr?.trim() || execErr.message || String(err),
69
+ };
70
+ }
71
+ },
72
+ };
73
+ };
74
+ //# sourceMappingURL=runNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runNode.js","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/runNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ApiFactory } from "@tigerdata/mcp-boilerplate";
2
+ import { z } from "zod";
3
+ import type { ServerContext } from "../types.js";
4
+ declare const inputSchema: {
5
+ readonly workflow_name: z.ZodString;
6
+ readonly input: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
7
+ };
8
+ declare const outputSchema: {
9
+ readonly run_id: z.ZodOptional<z.ZodString>;
10
+ readonly status: z.ZodString;
11
+ readonly result: z.ZodOptional<z.ZodUnknown>;
12
+ readonly error: z.ZodOptional<z.ZodString>;
13
+ };
14
+ export declare const runWorkflowFactory: ApiFactory<ServerContext, typeof inputSchema, typeof outputSchema>;
15
+ export {};
16
+ //# sourceMappingURL=runWorkflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runWorkflow.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/runWorkflow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAYjD,QAAA,MAAM,WAAW;;;CAOP,CAAC;AAEX,QAAA,MAAM,YAAY;;;;;CAKR,CAAC;AASX,eAAO,MAAM,kBAAkB,EAAE,UAAU,CACzC,aAAa,EACb,OAAO,WAAW,EAClB,OAAO,YAAY,CAyCpB,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ import { z } from "zod";
4
+ const execFileAsync = promisify(execFile);
5
+ // We shell out to the CLI instead of running workflows in-process because
6
+ // DBOS doesn't allow re-registering workflows after launch. A subprocess
7
+ // loads fresh code every time, so users can edit workflow code and re-run
8
+ // through MCP without restarting the server.
9
+ // process.argv gives us the same runtime+script the MCP server was started
10
+ // with (e.g. tsx + .ts in dev, node + .js in prod). process.execArgv
11
+ // forwards loader flags (--import tsx/esm) so .ts files resolve correctly.
12
+ const inputSchema = {
13
+ workflow_name: z.string().describe("Name of the workflow to run"),
14
+ input: z
15
+ .record(z.string(), z.unknown())
16
+ .optional()
17
+ .default({})
18
+ .describe("JSON input for the workflow (default: {})"),
19
+ };
20
+ const outputSchema = {
21
+ run_id: z.string().optional().describe("Workflow run UUID (use with get_trace to inspect execution)"),
22
+ status: z.string().describe("Execution status: SUCCESS or ERROR"),
23
+ result: z.unknown().optional().describe("Workflow return value"),
24
+ error: z.string().optional().describe("Error message if execution failed"),
25
+ };
26
+ export const runWorkflowFactory = () => {
27
+ return {
28
+ name: "run_workflow",
29
+ config: {
30
+ title: "Run Workflow",
31
+ description: "Execute a compiled workflow by name with JSON input. " +
32
+ "Returns the result and a run_id that can be used with get_trace to inspect execution details. " +
33
+ "Use list_workflows first to see available workflows.",
34
+ inputSchema,
35
+ outputSchema,
36
+ },
37
+ fn: async ({ workflow_name, input }) => {
38
+ const [runtime, script] = process.argv;
39
+ try {
40
+ const { stdout } = await execFileAsync(runtime, [
41
+ ...process.execArgv,
42
+ script,
43
+ "workflow", "run", workflow_name,
44
+ "--json",
45
+ "-i", JSON.stringify(input),
46
+ ], { cwd: process.cwd() });
47
+ return JSON.parse(stdout);
48
+ }
49
+ catch (err) {
50
+ // execFile rejects on non-zero exit — try to parse JSON from stdout
51
+ const execErr = err;
52
+ if (execErr.stdout) {
53
+ try {
54
+ return JSON.parse(execErr.stdout);
55
+ }
56
+ catch { /* fall through */ }
57
+ }
58
+ return {
59
+ status: "ERROR",
60
+ error: execErr.stderr?.trim() || execErr.message || String(err),
61
+ };
62
+ }
63
+ },
64
+ };
65
+ };
66
+ //# sourceMappingURL=runWorkflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runWorkflow.js","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/runWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,0EAA0E;AAC1E,yEAAyE;AACzE,0EAA0E;AAC1E,6CAA6C;AAC7C,2EAA2E;AAC3E,qEAAqE;AACrE,2EAA2E;AAE3E,MAAM,WAAW,GAAG;IAClB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACjE,KAAK,EAAE,CAAC;SACL,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/B,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,2CAA2C,CAAC;CAChD,CAAC;AAEX,MAAM,YAAY,GAAG;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IACrG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACjE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CAClE,CAAC;AASX,MAAM,CAAC,MAAM,kBAAkB,GAI3B,GAAG,EAAE;IACP,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE;YACN,KAAK,EAAE,cAAc;YACrB,WAAW,EACT,uDAAuD;gBACvD,gGAAgG;gBAChG,sDAAsD;YACxD,WAAW;YACX,YAAY;SACb;QACD,EAAE,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,EAAyB,EAAE;YAC5D,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAEvC,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE;oBAC9C,GAAG,OAAO,CAAC,QAAQ;oBACnB,MAAM;oBACN,UAAU,EAAE,KAAK,EAAE,aAAa;oBAChC,QAAQ;oBACR,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;iBAC5B,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAE3B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAiB,CAAC;YAC5C,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,oEAAoE;gBACpE,MAAM,OAAO,GAAG,GAA6D,CAAC;gBAC9E,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,IAAI,CAAC;wBACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAiB,CAAC;oBACpD,CAAC;oBAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;gBAChC,CAAC;gBACD,OAAO;oBACL,MAAM,EAAE,OAAO;oBACf,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;iBAChE,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -2,7 +2,7 @@ import type { ApiFactory } from "@tigerdata/mcp-boilerplate";
2
2
  import { z } from "zod";
3
3
  import type { ServerContext } from "../types.js";
4
4
  declare const inputSchema: {
5
- readonly application_directory: z.ZodString;
5
+ readonly directory: z.ZodDefault<z.ZodOptional<z.ZodString>>;
6
6
  readonly service_id: z.ZodString;
7
7
  readonly app_name: z.ZodString;
8
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"setupAppSchema.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/setupAppSchema.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,QAAA,MAAM,WAAW;;;;CAcP,CAAC;AAEX,QAAA,MAAM,YAAY;;;;;CAKR,CAAC;AAiCX,eAAO,MAAM,qBAAqB,EAAE,UAAU,CAC5C,aAAa,EACb,OAAO,WAAW,EAClB,OAAO,YAAY,CAiKpB,CAAC"}
1
+ {"version":3,"file":"setupAppSchema.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/setupAppSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,QAAA,MAAM,WAAW;;;;CAgBP,CAAC;AAEX,QAAA,MAAM,YAAY;;;;;CAKR,CAAC;AASX,eAAO,MAAM,qBAAqB,EAAE,UAAU,CAC5C,aAAa,EACb,OAAO,WAAW,EAClB,OAAO,YAAY,CAuBpB,CAAC"}
@@ -1,16 +1,11 @@
1
- import { exec } from "node:child_process";
2
- import { existsSync } from "node:fs";
3
- import { readFile, writeFile } from "node:fs/promises";
4
- import { join, resolve } from "node:path";
5
- import { promisify } from "node:util";
6
- import * as dotenv from "dotenv";
7
- import postgres from "postgres";
8
1
  import { z } from "zod";
9
- const execAsync = promisify(exec);
2
+ import { setupAppSchema } from "../lib/scaffolding.js";
10
3
  const inputSchema = {
11
- application_directory: z
4
+ directory: z
12
5
  .string()
13
- .describe("Path to the application directory"),
6
+ .optional()
7
+ .default(".")
8
+ .describe("Directory of the application, relative to cwd (default: current working directory)"),
14
9
  service_id: z.string().describe("Tiger Cloud service ID for the database"),
15
10
  app_name: z
16
11
  .string()
@@ -23,23 +18,6 @@ const outputSchema = {
23
18
  schema_name: z.string().optional().describe("Name of the created schema"),
24
19
  user_name: z.string().optional().describe("Name of the created user"),
25
20
  };
26
- function generatePassword(length = 24) {
27
- const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
28
- let password = "";
29
- for (let i = 0; i < length; i++) {
30
- password += chars.charAt(Math.floor(Math.random() * chars.length));
31
- }
32
- return password;
33
- }
34
- function buildConnectionString(originalUrl, user, password) {
35
- const parsed = new URL(originalUrl);
36
- parsed.username = user;
37
- parsed.password = encodeURIComponent(password);
38
- if (!parsed.searchParams.has("uselibpqcompat")) {
39
- parsed.searchParams.set("uselibpqcompat", "true");
40
- }
41
- return parsed.toString();
42
- }
43
21
  export const setupAppSchemaFactory = () => {
44
22
  return {
45
23
  name: "setup_app_schema",
@@ -49,111 +27,12 @@ export const setupAppSchemaFactory = () => {
49
27
  inputSchema,
50
28
  outputSchema,
51
29
  },
52
- fn: async ({ application_directory, service_id, app_name, }) => {
53
- const appDir = resolve(process.cwd(), application_directory);
54
- const envPath = join(appDir, ".env");
55
- // Check if we've already run this tool (DATABASE_SCHEMA is only set by us)
56
- if (existsSync(envPath)) {
57
- const envContent = await readFile(envPath, "utf-8");
58
- const env = dotenv.parse(envContent);
59
- if (env.DATABASE_SCHEMA) {
60
- return {
61
- success: true,
62
- message: "DATABASE_SCHEMA already set in .env. Delete it and re-run if you need to regenerate.",
63
- schema_name: app_name,
64
- user_name: app_name,
65
- };
66
- }
67
- }
68
- // Get database connection string from Tiger
69
- let adminConnectionString;
70
- try {
71
- const { stdout: serviceJson } = await execAsync(`tiger service get ${service_id} --with-password -o json`);
72
- const serviceDetails = JSON.parse(serviceJson);
73
- if (!serviceDetails.connection_string) {
74
- return {
75
- success: false,
76
- message: "connection_string not found in service details",
77
- };
78
- }
79
- adminConnectionString = serviceDetails.connection_string;
80
- }
81
- catch (err) {
82
- const error = err;
83
- return {
84
- success: false,
85
- message: `Failed to get service details: ${error.message}`,
86
- };
87
- }
88
- // Connect using postgres.js as admin
89
- const sql = postgres(adminConnectionString);
90
- try {
91
- // Check if user already exists
92
- const existingUser = await sql `
93
- SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = ${app_name}
94
- `;
95
- if (existingUser.length > 0) {
96
- await sql.end();
97
- return {
98
- success: false,
99
- message: `User '${app_name}' already exists. Choose a different app name or delete the existing user.`,
100
- };
101
- }
102
- // Create new user
103
- const appPassword = generatePassword();
104
- await sql.unsafe(`CREATE ROLE ${app_name} WITH LOGIN PASSWORD '${appPassword}'`);
105
- // Grant app role to tsdbadmin so admin can access app objects
106
- await sql.unsafe(`GRANT ${app_name} TO tsdbadmin WITH INHERIT TRUE`);
107
- // Create app schema owned by the app user
108
- await sql.unsafe(`CREATE SCHEMA IF NOT EXISTS ${app_name} AUTHORIZATION ${app_name}`);
109
- await sql.unsafe(`CREATE SCHEMA IF NOT EXISTS ${app_name}_dbos AUTHORIZATION ${app_name}`);
110
- //annoyingly, dbos seems to need this. TODO: find a better way to do this.
111
- await sql.unsafe(`GRANT CREATE ON DATABASE tsdb TO ${app_name}`);
112
- // Allow using extensions in public schema, but not creating objects there
113
- await sql.unsafe(`REVOKE CREATE ON SCHEMA public FROM ${app_name}`);
114
- await sql.unsafe(`GRANT USAGE ON SCHEMA public TO ${app_name}`);
115
- // Set search_path for app user (app schema first, then public for extensions)
116
- await sql.unsafe(`ALTER ROLE ${app_name} SET search_path TO ${app_name}, ${app_name}_dbos, public`);
117
- // Append app schema to tsdbadmin's search_path
118
- const currentPath = await sql `
119
- SELECT setting FROM pg_settings WHERE name = 'search_path'
120
- `;
121
- const existingPath = currentPath[0]?.setting ?? "public";
122
- if (!existingPath.includes(app_name)) {
123
- await sql.unsafe(`ALTER ROLE tsdbadmin SET search_path TO ${existingPath}, ${app_name}, ${app_name}_dbos`);
124
- }
125
- await sql.end();
126
- // Build app connection string
127
- const appDatabaseUrl = buildConnectionString(adminConnectionString, app_name, appPassword);
128
- // Write or update .env file
129
- let envContent = "";
130
- if (existsSync(envPath)) {
131
- envContent = await readFile(envPath, "utf-8");
132
- }
133
- // Update or add DATABASE_URL and DATABASE_SCHEMA
134
- const env = dotenv.parse(envContent);
135
- env.DATABASE_URL = appDatabaseUrl;
136
- env.DATABASE_SCHEMA = app_name;
137
- // Rebuild .env content
138
- const newEnvContent = Object.entries(env)
139
- .map(([key, value]) => `${key}="${value}"`)
140
- .join("\n");
141
- await writeFile(envPath, `${newEnvContent}\n`);
142
- }
143
- catch (err) {
144
- await sql.end();
145
- const error = err;
146
- return {
147
- success: false,
148
- message: `Failed to set up app schema: ${error.message}`,
149
- };
150
- }
151
- return {
152
- success: true,
153
- message: `Created schema '${app_name}' and user '${app_name}'. DATABASE_URL and DATABASE_SCHEMA written to .env.`,
154
- schema_name: app_name,
155
- user_name: app_name,
156
- };
30
+ fn: async ({ directory, service_id, app_name, }) => {
31
+ return setupAppSchema({
32
+ directory,
33
+ serviceId: service_id,
34
+ appName: app_name,
35
+ });
157
36
  },
158
37
  };
159
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"setupAppSchema.js","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/setupAppSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setupAppSchema.js","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/setupAppSchema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,MAAM,WAAW,GAAG;IAClB,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,GAAG,CAAC;SACZ,QAAQ,CAAC,oFAAoF,CAAC;IACjG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC1E,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,KAAK,CACJ,mBAAmB,EACnB,kFAAkF,CACnF;SACA,QAAQ,CACP,sFAAsF,CACvF;CACK,CAAC;AAEX,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACnE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACzE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAC7D,CAAC;AASX,MAAM,CAAC,MAAM,qBAAqB,GAI9B,GAAG,EAAE;IACP,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE;YACN,KAAK,EAAE,kBAAkB;YACzB,WAAW,EACT,+KAA+K;YACjL,WAAW;YACX,YAAY;SACb;QACD,EAAE,EAAE,KAAK,EAAE,EACT,SAAS,EACT,UAAU,EACV,QAAQ,GACT,EAAyB,EAAE;YAC1B,OAAO,cAAc,CAAC;gBACpB,SAAS;gBACT,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,QAAQ;aAClB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Load .env from cwd and return DATABASE_URL.
3
+ * Throws with a helpful message if not found.
4
+ */
5
+ export declare function requireDatabaseUrl(): string;
6
+ export { parseOutput } from "../../trace.js";
7
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/utils.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAK3C;AAGD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import dotenv from "dotenv";
4
+ /**
5
+ * Load .env directly from cwd — NOT via resolveEnv() which walks up
6
+ * the directory tree and may find a parent .env instead of the app's.
7
+ * Uses override: true so the app's values always win.
8
+ */
9
+ function loadProjectEnv() {
10
+ const envPath = join(process.cwd(), ".env");
11
+ if (existsSync(envPath)) {
12
+ dotenv.config({ path: envPath, override: true, quiet: true });
13
+ }
14
+ }
15
+ /**
16
+ * Load .env from cwd and return DATABASE_URL.
17
+ * Throws with a helpful message if not found.
18
+ */
19
+ export function requireDatabaseUrl() {
20
+ loadProjectEnv();
21
+ const url = process.env.DATABASE_URL;
22
+ if (!url)
23
+ throw new Error("DATABASE_URL not set in .env");
24
+ return url;
25
+ }
26
+ // Re-export parseOutput for MCP tools to unwrap superjson DB rows
27
+ export { parseOutput } from "../../trace.js";
28
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;;;GAIG;AACH,SAAS,cAAc;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,cAAc,EAAE,CAAC;IACjB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACrC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC1D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kEAAkE;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runRun(): Promise<void>;
2
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AA0SA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAwT5C"}