0pflow 0.1.0-dev.628bd97 → 0.1.0-dev.6ffb0d7

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 (234) 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 +7 -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 +59 -9
  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 +27 -0
  20. package/dist/cli/app.js.map +1 -1
  21. package/dist/cli/discovery.d.ts +10 -0
  22. package/dist/cli/discovery.d.ts.map +1 -1
  23. package/dist/cli/discovery.js +42 -0
  24. package/dist/cli/discovery.js.map +1 -1
  25. package/dist/cli/env.js +1 -1
  26. package/dist/cli/env.js.map +1 -1
  27. package/dist/cli/index.d.ts.map +1 -1
  28. package/dist/cli/index.js +124 -11
  29. package/dist/cli/index.js.map +1 -1
  30. package/dist/cli/install.d.ts.map +1 -1
  31. package/dist/cli/install.js +39 -9
  32. package/dist/cli/install.js.map +1 -1
  33. package/dist/cli/mcp/config.d.ts +0 -1
  34. package/dist/cli/mcp/config.d.ts.map +1 -1
  35. package/dist/cli/mcp/config.js +2 -4
  36. package/dist/cli/mcp/config.js.map +1 -1
  37. package/dist/cli/mcp/lib/scaffolding.d.ts +33 -0
  38. package/dist/cli/mcp/lib/scaffolding.d.ts.map +1 -0
  39. package/dist/cli/mcp/lib/scaffolding.js +219 -0
  40. package/dist/cli/mcp/lib/scaffolding.js.map +1 -0
  41. package/dist/cli/mcp/lib/templates.d.ts +1 -0
  42. package/dist/cli/mcp/lib/templates.d.ts.map +1 -1
  43. package/dist/cli/mcp/lib/templates.js.map +1 -1
  44. package/dist/cli/mcp/tools/createApp.d.ts +1 -0
  45. package/dist/cli/mcp/tools/createApp.d.ts.map +1 -1
  46. package/dist/cli/mcp/tools/createApp.js +12 -53
  47. package/dist/cli/mcp/tools/createApp.js.map +1 -1
  48. package/dist/cli/mcp/tools/createDatabase.d.ts.map +1 -1
  49. package/dist/cli/mcp/tools/createDatabase.js +2 -41
  50. package/dist/cli/mcp/tools/createDatabase.js.map +1 -1
  51. package/dist/cli/mcp/tools/getConnectionInfo.d.ts +19 -0
  52. package/dist/cli/mcp/tools/getConnectionInfo.d.ts.map +1 -0
  53. package/dist/cli/mcp/tools/getConnectionInfo.js +111 -0
  54. package/dist/cli/mcp/tools/getConnectionInfo.js.map +1 -0
  55. package/dist/cli/mcp/tools/getRun.d.ts +22 -0
  56. package/dist/cli/mcp/tools/getRun.d.ts.map +1 -0
  57. package/dist/cli/mcp/tools/getRun.js +80 -0
  58. package/dist/cli/mcp/tools/getRun.js.map +1 -0
  59. package/dist/cli/mcp/tools/getTrace.d.ts +32 -0
  60. package/dist/cli/mcp/tools/getTrace.d.ts.map +1 -0
  61. package/dist/cli/mcp/tools/getTrace.js +104 -0
  62. package/dist/cli/mcp/tools/getTrace.js.map +1 -0
  63. package/dist/cli/mcp/tools/index.d.ts +94 -1
  64. package/dist/cli/mcp/tools/index.d.ts.map +1 -1
  65. package/dist/cli/mcp/tools/index.js +16 -0
  66. package/dist/cli/mcp/tools/index.js.map +1 -1
  67. package/dist/cli/mcp/tools/listIntegrations.d.ts +14 -0
  68. package/dist/cli/mcp/tools/listIntegrations.d.ts.map +1 -0
  69. package/dist/cli/mcp/tools/listIntegrations.js +53 -0
  70. package/dist/cli/mcp/tools/listIntegrations.js.map +1 -0
  71. package/dist/cli/mcp/tools/listRuns.d.ts +21 -0
  72. package/dist/cli/mcp/tools/listRuns.d.ts.map +1 -0
  73. package/dist/cli/mcp/tools/listRuns.js +72 -0
  74. package/dist/cli/mcp/tools/listRuns.js.map +1 -0
  75. package/dist/cli/mcp/tools/listWorkflows.d.ts +15 -0
  76. package/dist/cli/mcp/tools/listWorkflows.d.ts.map +1 -0
  77. package/dist/cli/mcp/tools/listWorkflows.js +45 -0
  78. package/dist/cli/mcp/tools/listWorkflows.js.map +1 -0
  79. package/dist/cli/mcp/tools/runNode.d.ts +17 -0
  80. package/dist/cli/mcp/tools/runNode.d.ts.map +1 -0
  81. package/dist/cli/mcp/tools/runNode.js +74 -0
  82. package/dist/cli/mcp/tools/runNode.js.map +1 -0
  83. package/dist/cli/mcp/tools/runWorkflow.d.ts +16 -0
  84. package/dist/cli/mcp/tools/runWorkflow.d.ts.map +1 -0
  85. package/dist/cli/mcp/tools/runWorkflow.js +66 -0
  86. package/dist/cli/mcp/tools/runWorkflow.js.map +1 -0
  87. package/dist/cli/mcp/tools/setupAppSchema.d.ts +1 -1
  88. package/dist/cli/mcp/tools/setupAppSchema.d.ts.map +1 -1
  89. package/dist/cli/mcp/tools/setupAppSchema.js +11 -132
  90. package/dist/cli/mcp/tools/setupAppSchema.js.map +1 -1
  91. package/dist/cli/mcp/tools/utils.d.ts +7 -0
  92. package/dist/cli/mcp/tools/utils.d.ts.map +1 -0
  93. package/dist/cli/mcp/tools/utils.js +28 -0
  94. package/dist/cli/mcp/tools/utils.js.map +1 -0
  95. package/dist/cli/run.d.ts +2 -0
  96. package/dist/cli/run.d.ts.map +1 -0
  97. package/dist/cli/run.js +389 -0
  98. package/dist/cli/run.js.map +1 -0
  99. package/dist/cli/trace.d.ts +5 -0
  100. package/dist/cli/trace.d.ts.map +1 -1
  101. package/dist/cli/trace.js +1 -1
  102. package/dist/cli/trace.js.map +1 -1
  103. package/dist/connections/cloud-auth.d.ts +46 -0
  104. package/dist/connections/cloud-auth.d.ts.map +1 -0
  105. package/dist/connections/cloud-auth.js +243 -0
  106. package/dist/connections/cloud-auth.js.map +1 -0
  107. package/dist/connections/cloud-client.d.ts +25 -0
  108. package/dist/connections/cloud-client.d.ts.map +1 -0
  109. package/dist/connections/cloud-client.js +59 -0
  110. package/dist/connections/cloud-client.js.map +1 -0
  111. package/dist/connections/cloud-integration-provider.d.ts +21 -0
  112. package/dist/connections/cloud-integration-provider.d.ts.map +1 -0
  113. package/dist/connections/cloud-integration-provider.js +26 -0
  114. package/dist/connections/cloud-integration-provider.js.map +1 -0
  115. package/dist/connections/index.d.ts +11 -0
  116. package/dist/connections/index.d.ts.map +1 -0
  117. package/dist/connections/index.js +9 -0
  118. package/dist/connections/index.js.map +1 -0
  119. package/dist/connections/integration-provider.d.ts +38 -0
  120. package/dist/connections/integration-provider.d.ts.map +1 -0
  121. package/dist/connections/integration-provider.js +20 -0
  122. package/dist/connections/integration-provider.js.map +1 -0
  123. package/dist/connections/local-integration-provider.d.ts +28 -0
  124. package/dist/connections/local-integration-provider.d.ts.map +1 -0
  125. package/dist/connections/local-integration-provider.js +54 -0
  126. package/dist/connections/local-integration-provider.js.map +1 -0
  127. package/dist/connections/nango-client.d.ts +14 -0
  128. package/dist/connections/nango-client.d.ts.map +1 -0
  129. package/dist/connections/nango-client.js +50 -0
  130. package/dist/connections/nango-client.js.map +1 -0
  131. package/dist/connections/resolver.d.ts +26 -0
  132. package/dist/connections/resolver.d.ts.map +1 -0
  133. package/dist/connections/resolver.js +48 -0
  134. package/dist/connections/resolver.js.map +1 -0
  135. package/dist/connections/schema.d.ts +8 -0
  136. package/dist/connections/schema.d.ts.map +1 -0
  137. package/dist/connections/schema.js +31 -0
  138. package/dist/connections/schema.js.map +1 -0
  139. package/dist/context.d.ts.map +1 -1
  140. package/dist/context.js +4 -0
  141. package/dist/context.js.map +1 -1
  142. package/dist/dev-ui/api.d.ts +16 -0
  143. package/dist/dev-ui/api.d.ts.map +1 -0
  144. package/dist/dev-ui/api.js +237 -0
  145. package/dist/dev-ui/api.js.map +1 -0
  146. package/dist/dev-ui/dag/extractor.d.ts +19 -0
  147. package/dist/dev-ui/dag/extractor.d.ts.map +1 -0
  148. package/dist/dev-ui/dag/extractor.js +716 -0
  149. package/dist/dev-ui/dag/extractor.js.map +1 -0
  150. package/dist/dev-ui/dag/types.d.ts +42 -0
  151. package/dist/dev-ui/dag/types.d.ts.map +1 -0
  152. package/dist/dev-ui/dag/types.js +2 -0
  153. package/dist/dev-ui/dag/types.js.map +1 -0
  154. package/dist/dev-ui/dev-server.d.ts +18 -0
  155. package/dist/dev-ui/dev-server.d.ts.map +1 -0
  156. package/dist/dev-ui/dev-server.js +222 -0
  157. package/dist/dev-ui/dev-server.js.map +1 -0
  158. package/dist/dev-ui/index.d.ts +3 -0
  159. package/dist/dev-ui/index.d.ts.map +1 -0
  160. package/dist/dev-ui/index.js +2 -0
  161. package/dist/dev-ui/index.js.map +1 -0
  162. package/dist/dev-ui/pty.d.ts +16 -0
  163. package/dist/dev-ui/pty.d.ts.map +1 -0
  164. package/dist/dev-ui/pty.js +87 -0
  165. package/dist/dev-ui/pty.js.map +1 -0
  166. package/dist/dev-ui/watcher.d.ts +12 -0
  167. package/dist/dev-ui/watcher.d.ts.map +1 -0
  168. package/dist/dev-ui/watcher.js +162 -0
  169. package/dist/dev-ui/watcher.js.map +1 -0
  170. package/dist/dev-ui/ws.d.ts +52 -0
  171. package/dist/dev-ui/ws.d.ts.map +1 -0
  172. package/dist/dev-ui/ws.js +32 -0
  173. package/dist/dev-ui/ws.js.map +1 -0
  174. package/dist/dev-ui-client/assets/index-C-LxzUII.css +32 -0
  175. package/dist/dev-ui-client/assets/index-DAKTQEvj.js +1 -0
  176. package/dist/dev-ui-client/assets/index-aAIwXl4O.js +127 -0
  177. package/dist/dev-ui-client/index.html +13 -0
  178. package/dist/discover.d.ts +15 -0
  179. package/dist/discover.d.ts.map +1 -0
  180. package/dist/discover.js +29 -0
  181. package/dist/discover.js.map +1 -0
  182. package/dist/factory.d.ts.map +1 -1
  183. package/dist/factory.js +25 -12
  184. package/dist/factory.js.map +1 -1
  185. package/dist/index.d.ts +5 -1
  186. package/dist/index.d.ts.map +1 -1
  187. package/dist/index.js +4 -0
  188. package/dist/index.js.map +1 -1
  189. package/dist/node.d.ts +1 -0
  190. package/dist/node.d.ts.map +1 -1
  191. package/dist/node.js +1 -0
  192. package/dist/node.js.map +1 -1
  193. package/dist/nodes/agent/executor.d.ts +2 -0
  194. package/dist/nodes/agent/executor.d.ts.map +1 -1
  195. package/dist/nodes/agent/executor.js +11 -1
  196. package/dist/nodes/agent/executor.js.map +1 -1
  197. package/dist/types.d.ts +21 -3
  198. package/dist/types.d.ts.map +1 -1
  199. package/dist/workflow.d.ts +22 -0
  200. package/dist/workflow.d.ts.map +1 -1
  201. package/dist/workflow.js +97 -2
  202. package/dist/workflow.js.map +1 -1
  203. package/package.json +28 -6
  204. package/templates/app/.env.example +13 -0
  205. package/templates/app/README.md +29 -0
  206. package/templates/app/biome.jsonc +81 -0
  207. package/templates/app/dbos-config.yaml +6 -0
  208. package/templates/app/drizzle.config.ts +12 -0
  209. package/templates/app/next.config.js +10 -0
  210. package/templates/app/package.json +55 -0
  211. package/templates/app/postcss.config.js +5 -0
  212. package/templates/app/public/favicon.ico +0 -0
  213. package/templates/app/src/app/_components/.gitkeep +0 -0
  214. package/templates/app/src/app/api/trpc/[trpc]/route.ts +34 -0
  215. package/templates/app/src/app/api/workflow/[name]/route.ts +37 -0
  216. package/templates/app/src/app/layout.tsx +29 -0
  217. package/templates/app/src/app/page.tsx +18 -0
  218. package/templates/app/src/env.js +46 -0
  219. package/templates/app/src/instrumentation.ts +6 -0
  220. package/templates/app/src/lib/pflow.ts +29 -0
  221. package/templates/app/src/server/api/root.ts +21 -0
  222. package/templates/app/src/server/api/routers/.gitkeep +0 -0
  223. package/templates/app/src/server/api/trpc.ts +106 -0
  224. package/templates/app/src/server/db/index.ts +18 -0
  225. package/templates/app/src/server/db/schema.ts +14 -0
  226. package/templates/app/src/styles/globals.css +6 -0
  227. package/templates/app/src/styles/globals.css.orange +126 -0
  228. package/templates/app/src/trpc/query-client.ts +25 -0
  229. package/templates/app/src/trpc/react.tsx +78 -0
  230. package/templates/app/src/trpc/server.ts +30 -0
  231. package/templates/app/tsconfig.check.json +23 -0
  232. package/templates/app/tsconfig.json +42 -0
  233. package/templates/app/tsconfig.server.json +5 -0
  234. package/templates/app/tsconfig.test.json +21 -0
@@ -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":"AAkHA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAsT5C"}
@@ -0,0 +1,389 @@
1
+ import { exec, execSync } from "node:child_process";
2
+ import { existsSync, readFileSync, readdirSync } from "node:fs";
3
+ import { promisify } from "node:util";
4
+ import { basename, join, resolve } from "node:path";
5
+ import * as p from "@clack/prompts";
6
+ import pc from "picocolors";
7
+ import { scaffoldApp, createDatabase, setupAppSchema, } from "./mcp/lib/scaffolding.js";
8
+ function isClaudeAvailable() {
9
+ try {
10
+ execSync("claude --version", { stdio: "ignore" });
11
+ return true;
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }
17
+ function isCwdEmpty() {
18
+ try {
19
+ const entries = readdirSync(process.cwd());
20
+ // Ignore dotfiles like .git
21
+ return entries.filter((e) => !e.startsWith(".")).length === 0;
22
+ }
23
+ catch {
24
+ return true;
25
+ }
26
+ }
27
+ /**
28
+ * Poll Tiger Cloud until the service is ready (status != "creating").
29
+ * Returns true if ready, false on timeout.
30
+ */
31
+ async function waitForDatabase(serviceId, timeoutMs = 5 * 60 * 1000, intervalMs = 5000) {
32
+ const start = Date.now();
33
+ const { execSync } = await import("node:child_process");
34
+ while (Date.now() - start < timeoutMs) {
35
+ try {
36
+ const stdout = execSync(`tiger service get ${serviceId} -o json`, {
37
+ encoding: "utf-8",
38
+ stdio: ["pipe", "pipe", "pipe"],
39
+ });
40
+ const info = JSON.parse(stdout);
41
+ if (info.status && info.status !== "creating") {
42
+ return true;
43
+ }
44
+ }
45
+ catch {
46
+ // tiger CLI not available or service not found — keep trying
47
+ }
48
+ await new Promise((r) => setTimeout(r, intervalMs));
49
+ }
50
+ return false;
51
+ }
52
+ function isExisting0pflow() {
53
+ try {
54
+ const pkgPath = join(process.cwd(), "package.json");
55
+ if (!existsSync(pkgPath))
56
+ return false;
57
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
58
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
59
+ return "0pflow" in deps;
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ const WELCOME_PROMPT = "Welcome to your 0pflow project! What workflow would you like to create? Here are some ideas:\n\n" +
66
+ '- "Enrich leads from a CSV file with company data"\n' +
67
+ '- "Monitor website uptime and send Slack alerts"\n' +
68
+ '- "Sync Salesforce contacts to our database nightly"\n' +
69
+ '- "Score and route inbound leads based on firmographics"\n\n' +
70
+ "Describe what you'd like to automate and I'll help you build it with /create-workflow.";
71
+ async function launchDevServer(cwd, { yolo = false } = {}) {
72
+ // Load .env for DATABASE_URL and NANGO_SECRET_KEY
73
+ try {
74
+ const { resolveEnv } = await import("./env.js");
75
+ resolveEnv();
76
+ }
77
+ catch {
78
+ // Dev UI can work without env
79
+ }
80
+ // Detect dev mode (running from monorepo source) for --plugin-dir
81
+ const { packageRoot } = await import("./mcp/config.js");
82
+ const monorepoRoot = resolve(packageRoot, "..", "..");
83
+ const pluginDir = existsSync(resolve(monorepoRoot, "packages", "core")) ? monorepoRoot : undefined;
84
+ const { startDevServer } = await import("../dev-ui/index.js");
85
+ const { url } = await startDevServer({
86
+ projectRoot: cwd,
87
+ databaseUrl: process.env.DATABASE_URL,
88
+ nangoSecretKey: process.env.NANGO_SECRET_KEY,
89
+ claudePluginDir: pluginDir,
90
+ claudeSkipPermissions: yolo,
91
+ claudePrompt: WELCOME_PROMPT,
92
+ });
93
+ // Open browser
94
+ try {
95
+ const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
96
+ execSync(`${cmd} ${url}`, { stdio: "ignore" });
97
+ }
98
+ catch {
99
+ // Non-fatal — user can open manually
100
+ }
101
+ }
102
+ export async function runRun() {
103
+ p.intro(pc.red("0pflow"));
104
+ if (!isClaudeAvailable()) {
105
+ p.log.error("Claude Code CLI not found. Install it from https://claude.ai/code");
106
+ process.exit(1);
107
+ }
108
+ // ── Existing project → launch ───────────────────────────────────────
109
+ if (isExisting0pflow()) {
110
+ const mode = await p.select({
111
+ message: "Launch mode",
112
+ options: [
113
+ { value: "normal", label: "Launch" },
114
+ { value: "yolo", label: "Launch with --dangerously-skip-permissions" },
115
+ ],
116
+ });
117
+ if (p.isCancel(mode)) {
118
+ p.cancel("Cancelled.");
119
+ process.exit(0);
120
+ }
121
+ p.outro(pc.green("Launching..."));
122
+ await launchDevServer(process.cwd(), { yolo: mode === "yolo" });
123
+ return;
124
+ }
125
+ const cwdEmpty = isCwdEmpty();
126
+ // ── Project name ────────────────────────────────────────────────────
127
+ // Default to current directory name if it looks like a valid project name
128
+ const dirName = basename(process.cwd()).toLowerCase().replace(/[^a-z0-9-]/g, "-");
129
+ const defaultName = cwdEmpty && /^[a-z][a-z0-9-]*$/.test(dirName) ? dirName : undefined;
130
+ const projectName = await p.text({
131
+ message: "Project name",
132
+ ...(defaultName ? { initialValue: defaultName } : { placeholder: "my-app" }),
133
+ validate(value) {
134
+ if (!value)
135
+ return "Project name is required";
136
+ if (!/^[a-z][a-z0-9-]*$/.test(value)) {
137
+ return "Must be lowercase letters, numbers, and hyphens (start with a letter)";
138
+ }
139
+ },
140
+ });
141
+ if (p.isCancel(projectName)) {
142
+ p.cancel("Cancelled.");
143
+ process.exit(0);
144
+ }
145
+ // ── Directory ───────────────────────────────────────────────────────
146
+ const cwd = process.cwd();
147
+ const defaultDir = cwdEmpty ? "." : `./${projectName}`;
148
+ const defaultLabel = cwdEmpty
149
+ ? `${cwd} (current directory)`
150
+ : `./${projectName}`;
151
+ const useDirectory = await p.select({
152
+ message: "Where should we create it?",
153
+ options: cwdEmpty
154
+ ? [
155
+ { value: "default", label: `Here — ${cwd}` },
156
+ { value: "custom", label: "Other directory" },
157
+ ]
158
+ : [
159
+ { value: "default", label: `./${projectName}` },
160
+ { value: "custom", label: "Other directory" },
161
+ ],
162
+ });
163
+ if (p.isCancel(useDirectory)) {
164
+ p.cancel("Cancelled.");
165
+ process.exit(0);
166
+ }
167
+ let directory;
168
+ if (useDirectory === "custom") {
169
+ const customDir = await p.text({
170
+ message: "Directory path",
171
+ placeholder: `./${projectName}`,
172
+ validate(value) {
173
+ if (!value)
174
+ return "Directory is required";
175
+ },
176
+ });
177
+ if (p.isCancel(customDir)) {
178
+ p.cancel("Cancelled.");
179
+ process.exit(0);
180
+ }
181
+ directory = customDir;
182
+ }
183
+ else {
184
+ directory = defaultDir;
185
+ }
186
+ if (p.isCancel(directory)) {
187
+ p.cancel("Cancelled.");
188
+ process.exit(0);
189
+ }
190
+ // ── Database ────────────────────────────────────────────────────────
191
+ const dbChoice = await p.select({
192
+ message: "Database setup",
193
+ options: [
194
+ {
195
+ value: "new",
196
+ label: "Create new Tiger Cloud database (free)",
197
+ },
198
+ {
199
+ value: "existing",
200
+ label: "Use existing Tiger Cloud database",
201
+ },
202
+ ],
203
+ });
204
+ if (p.isCancel(dbChoice)) {
205
+ p.cancel("Cancelled.");
206
+ process.exit(0);
207
+ }
208
+ let serviceId;
209
+ if (dbChoice === "existing") {
210
+ // Fetch available databases from Tiger Cloud
211
+ let services = [];
212
+ try {
213
+ const stdout = execSync("tiger service list -o json", {
214
+ encoding: "utf-8",
215
+ stdio: ["pipe", "pipe", "pipe"],
216
+ });
217
+ services = JSON.parse(stdout);
218
+ }
219
+ catch {
220
+ // tiger CLI not available or not logged in
221
+ }
222
+ if (services.length > 0) {
223
+ const selected = await p.select({
224
+ message: "Select a database",
225
+ options: [
226
+ ...services.map((s) => ({
227
+ value: s.service_id,
228
+ label: `${s.name} (${s.service_id})`,
229
+ hint: s.status,
230
+ })),
231
+ { value: "__manual__", label: "Enter service ID manually" },
232
+ ],
233
+ });
234
+ if (p.isCancel(selected)) {
235
+ p.cancel("Cancelled.");
236
+ process.exit(0);
237
+ }
238
+ if (selected === "__manual__") {
239
+ const sid = await p.text({
240
+ message: "Tiger Cloud service ID",
241
+ placeholder: "abc123def4",
242
+ validate(value) {
243
+ if (!value)
244
+ return "Service ID is required";
245
+ },
246
+ });
247
+ if (p.isCancel(sid)) {
248
+ p.cancel("Cancelled.");
249
+ process.exit(0);
250
+ }
251
+ serviceId = sid;
252
+ }
253
+ else {
254
+ serviceId = selected;
255
+ }
256
+ }
257
+ else {
258
+ p.log.warn("Could not fetch databases. Enter the service ID manually.");
259
+ const sid = await p.text({
260
+ message: "Tiger Cloud service ID",
261
+ placeholder: "abc123def4",
262
+ validate(value) {
263
+ if (!value)
264
+ return "Service ID is required";
265
+ },
266
+ });
267
+ if (p.isCancel(sid)) {
268
+ p.cancel("Cancelled.");
269
+ process.exit(0);
270
+ }
271
+ serviceId = sid;
272
+ }
273
+ }
274
+ // ── Execute ─────────────────────────────────────────────────────────
275
+ const s = p.spinner();
276
+ // Start database creation first (async) if creating new
277
+ let dbPromise;
278
+ if (dbChoice === "new") {
279
+ s.start("Creating Tiger Cloud database...");
280
+ dbPromise = createDatabase({ name: projectName }).then((result) => {
281
+ if (!result.success) {
282
+ throw new Error(result.error || "Failed to create database");
283
+ }
284
+ return result;
285
+ });
286
+ }
287
+ // Scaffold app (parallel with db provisioning)
288
+ if (!dbPromise) {
289
+ s.start("Scaffolding project...");
290
+ }
291
+ const scaffoldResult = await scaffoldApp({
292
+ appName: projectName,
293
+ directory,
294
+ installDeps: false,
295
+ });
296
+ if (!scaffoldResult.success) {
297
+ s.stop(pc.red("Failed to scaffold project"));
298
+ p.log.error(scaffoldResult.message);
299
+ process.exit(1);
300
+ }
301
+ s.stop(pc.green("Scaffolded project"));
302
+ // Install dependencies
303
+ const appPath = scaffoldResult.path;
304
+ s.start("Installing dependencies...");
305
+ try {
306
+ const execAsync = promisify(exec);
307
+ await execAsync("npm install", { cwd: appPath });
308
+ s.stop(pc.green("Installed dependencies"));
309
+ }
310
+ catch (err) {
311
+ s.stop(pc.yellow("npm install failed (you can retry manually)"));
312
+ }
313
+ // Wait for database and setup schema
314
+ if (dbChoice === "new" && dbPromise) {
315
+ s.start("Waiting for database to be ready...");
316
+ try {
317
+ const dbResult = await dbPromise;
318
+ serviceId = dbResult.service_id;
319
+ s.stop(pc.green(`Database created (${serviceId})`));
320
+ }
321
+ catch (err) {
322
+ s.stop(pc.yellow("Database creation failed"));
323
+ p.log.warn(`You can create one later with: tiger service create --name ${projectName}`);
324
+ }
325
+ }
326
+ if (serviceId) {
327
+ s.start("Configuring database schema...");
328
+ const schemaName = projectName.replace(/-/g, "_");
329
+ const schemaResult = await setupAppSchema({
330
+ directory: appPath,
331
+ serviceId,
332
+ appName: schemaName,
333
+ });
334
+ if (schemaResult.success) {
335
+ s.stop(pc.green("Database schema configured"));
336
+ }
337
+ else {
338
+ // Database might still be provisioning — try waiting
339
+ if (dbChoice === "new") {
340
+ s.message("Database still provisioning, waiting...");
341
+ const ready = await waitForDatabase(serviceId);
342
+ if (ready) {
343
+ const retry = await setupAppSchema({
344
+ directory: appPath,
345
+ serviceId,
346
+ appName: schemaName,
347
+ });
348
+ if (retry.success) {
349
+ s.stop(pc.green("Database schema configured"));
350
+ }
351
+ else {
352
+ s.stop(pc.yellow("Schema setup failed"));
353
+ p.log.warn(retry.message);
354
+ }
355
+ }
356
+ else {
357
+ s.stop(pc.yellow("Database not ready yet"));
358
+ p.log.warn(`Run later: 0pflow run won't retry. Use the MCP tools or set up manually.`);
359
+ }
360
+ }
361
+ else {
362
+ s.stop(pc.yellow("Schema setup failed"));
363
+ p.log.warn(schemaResult.message);
364
+ }
365
+ }
366
+ }
367
+ // ── Launch? ─────────────────────────────────────────────────────────
368
+ const launchChoice = await p.select({
369
+ message: "Launch now?",
370
+ options: [
371
+ { value: "normal", label: "Yes" },
372
+ { value: "yolo", label: "Yes, with --dangerously-skip-permissions" },
373
+ { value: "no", label: "No, I'll do it later" },
374
+ ],
375
+ });
376
+ if (!p.isCancel(launchChoice) && launchChoice !== "no") {
377
+ p.outro(pc.green("Launching..."));
378
+ await launchDevServer(resolve(appPath), { yolo: launchChoice === "yolo" });
379
+ return;
380
+ }
381
+ // ── Done ────────────────────────────────────────────────────────────
382
+ const cdCmd = directory === "." ? "" : `cd ${directory} && `;
383
+ p.outro(pc.green("Project created!"));
384
+ console.log();
385
+ console.log(pc.bold(" To launch later:"));
386
+ console.log(pc.cyan(` ${cdCmd}0pflow run`));
387
+ console.log();
388
+ }
389
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,11 @@ export interface TraceResult {
24
24
  * Get workflow trace including all operations and child workflows
25
25
  */
26
26
  export declare function getTrace(databaseUrl: string, runId: string, schemaOverride?: string): Promise<TraceResult>;
27
+ /**
28
+ * Parse and unwrap DBOS/superjson output format
29
+ * Handles: raw values, JSON strings, and {"json": ..., "__dbos_serializer": "superjson"} wrappers
30
+ */
31
+ export declare function parseOutput(output: unknown): unknown;
27
32
  /**
28
33
  * Print a workflow trace as a tree to stdout
29
34
  */