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,273 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ import { listConnections, upsertConnection, deleteConnection, } from "../connections/index.js";
4
+ import { parseOutput } from "../cli/trace.js";
5
+ const execFileAsync = promisify(execFile);
6
+ function jsonResponse(res, status, data) {
7
+ res.writeHead(status, {
8
+ "Content-Type": "application/json",
9
+ "Access-Control-Allow-Origin": "*",
10
+ });
11
+ res.end(JSON.stringify(data));
12
+ }
13
+ function parseBody(req) {
14
+ return new Promise((resolve, reject) => {
15
+ const chunks = [];
16
+ req.on("data", (chunk) => chunks.push(chunk));
17
+ req.on("end", () => {
18
+ try {
19
+ const body = Buffer.concat(chunks).toString("utf-8");
20
+ resolve(body ? JSON.parse(body) : {});
21
+ }
22
+ catch (err) {
23
+ reject(err);
24
+ }
25
+ });
26
+ req.on("error", reject);
27
+ });
28
+ }
29
+ /**
30
+ * Handle API requests. Returns true if the request was handled, false otherwise.
31
+ */
32
+ export async function handleApiRequest(req, res, ctx) {
33
+ const url = req.url ?? "";
34
+ const method = req.method ?? "GET";
35
+ // CORS preflight
36
+ if (method === "OPTIONS" && url.startsWith("/api/")) {
37
+ res.writeHead(204, {
38
+ "Access-Control-Allow-Origin": "*",
39
+ "Access-Control-Allow-Methods": "GET, PUT, DELETE, POST, OPTIONS",
40
+ "Access-Control-Allow-Headers": "Content-Type",
41
+ });
42
+ res.end();
43
+ return true;
44
+ }
45
+ // GET /api/connections
46
+ if (url === "/api/connections" && method === "GET") {
47
+ const connections = await listConnections(ctx.pool, ctx.appSchema);
48
+ jsonResponse(res, 200, connections);
49
+ return true;
50
+ }
51
+ // PUT /api/connections
52
+ if (url === "/api/connections" && method === "PUT") {
53
+ const body = (await parseBody(req));
54
+ if (!body.integration_id || !body.connection_id) {
55
+ jsonResponse(res, 400, { error: "integration_id and connection_id are required" });
56
+ return true;
57
+ }
58
+ await upsertConnection(ctx.pool, {
59
+ workflow_name: body.workflow_name ?? "*",
60
+ node_name: body.node_name ?? "*",
61
+ integration_id: body.integration_id,
62
+ connection_id: body.connection_id,
63
+ }, ctx.appSchema);
64
+ jsonResponse(res, 200, { ok: true });
65
+ return true;
66
+ }
67
+ // DELETE /api/connections
68
+ if (url === "/api/connections" && method === "DELETE") {
69
+ const body = (await parseBody(req));
70
+ if (!body.integration_id) {
71
+ jsonResponse(res, 400, { error: "integration_id is required" });
72
+ return true;
73
+ }
74
+ await deleteConnection(ctx.pool, body.workflow_name ?? "*", body.node_name ?? "*", body.integration_id, ctx.appSchema);
75
+ jsonResponse(res, 200, { ok: true });
76
+ return true;
77
+ }
78
+ // GET /api/nango/integrations — list available integrations
79
+ if (url === "/api/nango/integrations" && method === "GET") {
80
+ try {
81
+ const integrations = await ctx.integrationProvider.listIntegrations();
82
+ jsonResponse(res, 200, integrations);
83
+ }
84
+ catch (err) {
85
+ jsonResponse(res, 500, {
86
+ error: err instanceof Error ? err.message : "Failed to list integrations",
87
+ });
88
+ }
89
+ return true;
90
+ }
91
+ // GET /api/nango/connections/:integrationId
92
+ const nangoConnectionsMatch = url.match(/^\/api\/nango\/connections\/([^/]+)$/);
93
+ if (nangoConnectionsMatch && method === "GET") {
94
+ const integrationId = decodeURIComponent(nangoConnectionsMatch[1]);
95
+ try {
96
+ const connections = await ctx.integrationProvider.listConnections(integrationId);
97
+ jsonResponse(res, 200, connections);
98
+ }
99
+ catch (err) {
100
+ jsonResponse(res, 500, {
101
+ error: err instanceof Error ? err.message : "Failed to list connections",
102
+ });
103
+ }
104
+ return true;
105
+ }
106
+ // POST /api/nango/connect-session
107
+ if (url === "/api/nango/connect-session" && method === "POST") {
108
+ const body = (await parseBody(req));
109
+ if (!body.integration_id) {
110
+ jsonResponse(res, 400, { error: "integration_id is required" });
111
+ return true;
112
+ }
113
+ try {
114
+ const session = await ctx.integrationProvider.createConnectSession(body.integration_id);
115
+ jsonResponse(res, 200, session);
116
+ }
117
+ catch (err) {
118
+ jsonResponse(res, 500, {
119
+ error: err instanceof Error ? err.message : "Failed to create connect session",
120
+ });
121
+ }
122
+ return true;
123
+ }
124
+ // ---- Run History endpoints ----
125
+ /** Unwrap a superjson-wrapped error into a clean string (stack trace if available, else message) */
126
+ function parseError(raw) {
127
+ if (!raw)
128
+ return null;
129
+ const parsed = parseOutput(raw);
130
+ if (parsed && typeof parsed === "object") {
131
+ const obj = parsed;
132
+ // Stack already includes the message as its first line
133
+ if (typeof obj.stack === "string")
134
+ return obj.stack;
135
+ if (typeof obj.message === "string")
136
+ return obj.message;
137
+ }
138
+ if (typeof parsed === "string")
139
+ return parsed;
140
+ if (typeof raw === "string")
141
+ return raw;
142
+ return null;
143
+ }
144
+ // GET /api/runs?workflow=NAME&limit=N
145
+ if (url.startsWith("/api/runs") && method === "GET") {
146
+ const fullUrl = req.url ?? "";
147
+ // GET /api/runs/:runId/trace
148
+ const traceMatch = fullUrl.match(/^\/api\/runs\/([^/]+)\/trace/);
149
+ if (traceMatch) {
150
+ const runId = decodeURIComponent(traceMatch[1]);
151
+ try {
152
+ // Get workflow metadata
153
+ const workflowResult = await ctx.pool.query(`SELECT
154
+ workflow_uuid, name, status, created_at, updated_at,
155
+ (updated_at - created_at) as duration_ms,
156
+ output::text, error
157
+ FROM ${ctx.schema}.workflow_status
158
+ WHERE workflow_uuid = $1`, [runId]);
159
+ if (workflowResult.rows.length === 0) {
160
+ jsonResponse(res, 404, { error: "Run not found" });
161
+ return true;
162
+ }
163
+ const workflow = workflowResult.rows[0];
164
+ workflow.output = parseOutput(workflow.output);
165
+ workflow.error = parseError(workflow.error);
166
+ // Get operations with hierarchy using recursive CTE
167
+ const opsResult = await ctx.pool.query(`WITH RECURSIVE workflow_tree AS (
168
+ SELECT workflow_uuid, workflow_uuid as root_uuid, 0 as depth
169
+ FROM ${ctx.schema}.workflow_status
170
+ WHERE workflow_uuid = $1
171
+ UNION
172
+ SELECT ws.workflow_uuid, wt.root_uuid, wt.depth + 1
173
+ FROM ${ctx.schema}.workflow_status ws
174
+ JOIN ${ctx.schema}.operation_outputs oo ON oo.child_workflow_id = ws.workflow_uuid
175
+ JOIN workflow_tree wt ON oo.workflow_uuid = wt.workflow_uuid
176
+ )
177
+ SELECT
178
+ oo.workflow_uuid, wt.depth, oo.function_id, oo.function_name,
179
+ oo.child_workflow_id, oo.started_at_epoch_ms, oo.completed_at_epoch_ms,
180
+ (oo.completed_at_epoch_ms - oo.started_at_epoch_ms) as duration_ms,
181
+ oo.output::text as output_preview, oo.error
182
+ FROM workflow_tree wt
183
+ JOIN ${ctx.schema}.operation_outputs oo ON oo.workflow_uuid = wt.workflow_uuid
184
+ ORDER BY oo.started_at_epoch_ms, wt.depth, oo.function_id`, [runId]);
185
+ // Unwrap superjson in operation output previews and errors
186
+ const operations = opsResult.rows.map((op) => {
187
+ if (op.output_preview) {
188
+ const parsed = parseOutput(op.output_preview);
189
+ op.output_preview = parsed !== null ? JSON.stringify(parsed) : null;
190
+ }
191
+ op.error = parseError(op.error);
192
+ return op;
193
+ });
194
+ jsonResponse(res, 200, { workflow, operations });
195
+ }
196
+ catch (err) {
197
+ jsonResponse(res, 500, {
198
+ error: err instanceof Error ? err.message : "Failed to get trace",
199
+ });
200
+ }
201
+ return true;
202
+ }
203
+ // GET /api/runs (list)
204
+ if (fullUrl.match(/^\/api\/runs(\?|$)/)) {
205
+ try {
206
+ const params = new URL(fullUrl, "http://localhost").searchParams;
207
+ const workflowName = params.get("workflow");
208
+ const limit = Math.min(parseInt(params.get("limit") ?? "50", 10), 200);
209
+ const queryParams = [];
210
+ let query = `
211
+ SELECT workflow_uuid, name, status, created_at, updated_at, output::text, error
212
+ FROM ${ctx.schema}.workflow_status
213
+ WHERE LENGTH(workflow_uuid) = 36
214
+ `;
215
+ if (workflowName) {
216
+ queryParams.push(workflowName);
217
+ query += ` AND name = $${queryParams.length}`;
218
+ }
219
+ queryParams.push(limit);
220
+ query += ` ORDER BY created_at DESC LIMIT $${queryParams.length}`;
221
+ const result = await ctx.pool.query(query, queryParams);
222
+ // Unwrap superjson output and errors for each run
223
+ const runs = result.rows.map((row) => {
224
+ row.output = parseOutput(row.output);
225
+ row.error = parseError(row.error);
226
+ return row;
227
+ });
228
+ jsonResponse(res, 200, runs);
229
+ }
230
+ catch (err) {
231
+ jsonResponse(res, 500, {
232
+ error: err instanceof Error ? err.message : "Failed to list runs",
233
+ });
234
+ }
235
+ return true;
236
+ }
237
+ }
238
+ // POST /api/workflows/:name/run — execute a workflow via subprocess
239
+ const runMatch = url.match(/^\/api\/workflows\/([^/]+)\/run$/);
240
+ if (runMatch && method === "POST") {
241
+ const workflowName = decodeURIComponent(runMatch[1]);
242
+ const body = (await parseBody(req));
243
+ const input = body.input ?? {};
244
+ const [runtime, script] = process.argv;
245
+ try {
246
+ const { stdout } = await execFileAsync(runtime, [
247
+ ...process.execArgv,
248
+ script,
249
+ "workflow", "run", workflowName,
250
+ "--json",
251
+ "-i", JSON.stringify(input),
252
+ ], { cwd: ctx.projectRoot });
253
+ jsonResponse(res, 200, JSON.parse(stdout));
254
+ }
255
+ catch (err) {
256
+ const execErr = err;
257
+ if (execErr.stdout) {
258
+ try {
259
+ jsonResponse(res, 200, JSON.parse(execErr.stdout));
260
+ return true;
261
+ }
262
+ catch { /* fall through */ }
263
+ }
264
+ jsonResponse(res, 500, {
265
+ status: "ERROR",
266
+ error: execErr.stderr?.trim() || execErr.message || String(err),
267
+ });
268
+ }
269
+ return true;
270
+ }
271
+ return false;
272
+ }
273
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/dev-ui/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { WorkflowDAG } from "./types.js";
2
+ /**
3
+ * Parse a node source file and extract the integrations array from its .create() config.
4
+ */
5
+ export declare function extractNodeIntegrations(source: string): Promise<string[] | undefined>;
6
+ /**
7
+ * Parse a node source file and extract the name from its .create() config.
8
+ */
9
+ export declare function extractNodeName(source: string): Promise<string | undefined>;
10
+ /**
11
+ * Parse a node source file and extract the description from its .create() config.
12
+ */
13
+ export declare function extractNodeDescription(source: string): Promise<string | undefined>;
14
+ /**
15
+ * Parse a single TypeScript file and extract workflow DAGs from it.
16
+ * Fault-tolerant: returns whatever it can parse, even from broken files.
17
+ */
18
+ export declare function extractDAGs(filePath: string, source: string): Promise<WorkflowDAG[]>;
19
+ //# sourceMappingURL=extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../../src/dev-ui/dag/extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,WAAW,EAAa,MAAM,YAAY,CAAC;AAgI3E;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAuB3F;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuBjF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwBxF;AAoWD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,EAAE,CAAC,CAoRxB"}