0pflow 0.1.0-dev.00aaa03 → 0.1.0-dev.303bb09

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 (226) 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/agent.d.ts +6 -0
  6. package/dist/agent.d.ts.map +1 -1
  7. package/dist/agent.js +59 -9
  8. package/dist/agent.js.map +1 -1
  9. package/dist/cli/__tests__/discovery.test.js +1 -1
  10. package/dist/cli/__tests__/discovery.test.js.map +1 -1
  11. package/dist/cli/discovery.d.ts +10 -0
  12. package/dist/cli/discovery.d.ts.map +1 -1
  13. package/dist/cli/discovery.js +42 -0
  14. package/dist/cli/discovery.js.map +1 -1
  15. package/dist/cli/env.js +1 -1
  16. package/dist/cli/env.js.map +1 -1
  17. package/dist/cli/index.d.ts +5 -1
  18. package/dist/cli/index.d.ts.map +1 -1
  19. package/dist/cli/index.js +134 -11
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/cli/init.d.ts +2 -0
  22. package/dist/cli/init.d.ts.map +1 -0
  23. package/dist/cli/init.js +390 -0
  24. package/dist/cli/init.js.map +1 -0
  25. package/dist/cli/install.d.ts +13 -4
  26. package/dist/cli/install.d.ts.map +1 -1
  27. package/dist/cli/install.js +130 -72
  28. package/dist/cli/install.js.map +1 -1
  29. package/dist/cli/mcp/config.d.ts +0 -1
  30. package/dist/cli/mcp/config.d.ts.map +1 -1
  31. package/dist/cli/mcp/config.js +2 -4
  32. package/dist/cli/mcp/config.js.map +1 -1
  33. package/dist/cli/mcp/lib/scaffolding.d.ts +33 -0
  34. package/dist/cli/mcp/lib/scaffolding.d.ts.map +1 -0
  35. package/dist/cli/mcp/lib/scaffolding.js +216 -0
  36. package/dist/cli/mcp/lib/scaffolding.js.map +1 -0
  37. package/dist/cli/mcp/lib/templates.d.ts +1 -0
  38. package/dist/cli/mcp/lib/templates.d.ts.map +1 -1
  39. package/dist/cli/mcp/lib/templates.js.map +1 -1
  40. package/dist/cli/mcp/tools/createApp.d.ts +1 -0
  41. package/dist/cli/mcp/tools/createApp.d.ts.map +1 -1
  42. package/dist/cli/mcp/tools/createApp.js +12 -55
  43. package/dist/cli/mcp/tools/createApp.js.map +1 -1
  44. package/dist/cli/mcp/tools/createDatabase.d.ts.map +1 -1
  45. package/dist/cli/mcp/tools/createDatabase.js +2 -41
  46. package/dist/cli/mcp/tools/createDatabase.js.map +1 -1
  47. package/dist/cli/mcp/tools/getConnectionInfo.d.ts +19 -0
  48. package/dist/cli/mcp/tools/getConnectionInfo.d.ts.map +1 -0
  49. package/dist/cli/mcp/tools/getConnectionInfo.js +117 -0
  50. package/dist/cli/mcp/tools/getConnectionInfo.js.map +1 -0
  51. package/dist/cli/mcp/tools/getRun.d.ts +22 -0
  52. package/dist/cli/mcp/tools/getRun.d.ts.map +1 -0
  53. package/dist/cli/mcp/tools/getRun.js +80 -0
  54. package/dist/cli/mcp/tools/getRun.js.map +1 -0
  55. package/dist/cli/mcp/tools/getTrace.d.ts +32 -0
  56. package/dist/cli/mcp/tools/getTrace.d.ts.map +1 -0
  57. package/dist/cli/mcp/tools/getTrace.js +104 -0
  58. package/dist/cli/mcp/tools/getTrace.js.map +1 -0
  59. package/dist/cli/mcp/tools/index.d.ts +101 -1
  60. package/dist/cli/mcp/tools/index.d.ts.map +1 -1
  61. package/dist/cli/mcp/tools/index.js +18 -0
  62. package/dist/cli/mcp/tools/index.js.map +1 -1
  63. package/dist/cli/mcp/tools/listIntegrations.d.ts +14 -0
  64. package/dist/cli/mcp/tools/listIntegrations.d.ts.map +1 -0
  65. package/dist/cli/mcp/tools/listIntegrations.js +53 -0
  66. package/dist/cli/mcp/tools/listIntegrations.js.map +1 -0
  67. package/dist/cli/mcp/tools/listRuns.d.ts +21 -0
  68. package/dist/cli/mcp/tools/listRuns.d.ts.map +1 -0
  69. package/dist/cli/mcp/tools/listRuns.js +72 -0
  70. package/dist/cli/mcp/tools/listRuns.js.map +1 -0
  71. package/dist/cli/mcp/tools/listWorkflows.d.ts +15 -0
  72. package/dist/cli/mcp/tools/listWorkflows.d.ts.map +1 -0
  73. package/dist/cli/mcp/tools/listWorkflows.js +45 -0
  74. package/dist/cli/mcp/tools/listWorkflows.js.map +1 -0
  75. package/dist/cli/mcp/tools/runNode.d.ts +17 -0
  76. package/dist/cli/mcp/tools/runNode.d.ts.map +1 -0
  77. package/dist/cli/mcp/tools/runNode.js +74 -0
  78. package/dist/cli/mcp/tools/runNode.js.map +1 -0
  79. package/dist/cli/mcp/tools/runWorkflow.d.ts +16 -0
  80. package/dist/cli/mcp/tools/runWorkflow.d.ts.map +1 -0
  81. package/dist/cli/mcp/tools/runWorkflow.js +66 -0
  82. package/dist/cli/mcp/tools/runWorkflow.js.map +1 -0
  83. package/dist/cli/mcp/tools/setupAppSchema.d.ts +1 -1
  84. package/dist/cli/mcp/tools/setupAppSchema.d.ts.map +1 -1
  85. package/dist/cli/mcp/tools/setupAppSchema.js +11 -129
  86. package/dist/cli/mcp/tools/setupAppSchema.js.map +1 -1
  87. package/dist/cli/mcp/tools/startDevUi.d.ts +15 -0
  88. package/dist/cli/mcp/tools/startDevUi.d.ts.map +1 -0
  89. package/dist/cli/mcp/tools/startDevUi.js +92 -0
  90. package/dist/cli/mcp/tools/startDevUi.js.map +1 -0
  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/trace.d.ts +5 -0
  96. package/dist/cli/trace.d.ts.map +1 -1
  97. package/dist/cli/trace.js +1 -1
  98. package/dist/cli/trace.js.map +1 -1
  99. package/dist/connections/cloud-auth.d.ts +46 -0
  100. package/dist/connections/cloud-auth.d.ts.map +1 -0
  101. package/dist/connections/cloud-auth.js +243 -0
  102. package/dist/connections/cloud-auth.js.map +1 -0
  103. package/dist/connections/cloud-client.d.ts +25 -0
  104. package/dist/connections/cloud-client.d.ts.map +1 -0
  105. package/dist/connections/cloud-client.js +59 -0
  106. package/dist/connections/cloud-client.js.map +1 -0
  107. package/dist/connections/cloud-integration-provider.d.ts +21 -0
  108. package/dist/connections/cloud-integration-provider.d.ts.map +1 -0
  109. package/dist/connections/cloud-integration-provider.js +26 -0
  110. package/dist/connections/cloud-integration-provider.js.map +1 -0
  111. package/dist/connections/index.d.ts +11 -0
  112. package/dist/connections/index.d.ts.map +1 -0
  113. package/dist/connections/index.js +9 -0
  114. package/dist/connections/index.js.map +1 -0
  115. package/dist/connections/integration-provider.d.ts +38 -0
  116. package/dist/connections/integration-provider.d.ts.map +1 -0
  117. package/dist/connections/integration-provider.js +20 -0
  118. package/dist/connections/integration-provider.js.map +1 -0
  119. package/dist/connections/local-integration-provider.d.ts +28 -0
  120. package/dist/connections/local-integration-provider.d.ts.map +1 -0
  121. package/dist/connections/local-integration-provider.js +54 -0
  122. package/dist/connections/local-integration-provider.js.map +1 -0
  123. package/dist/connections/nango-client.d.ts +14 -0
  124. package/dist/connections/nango-client.d.ts.map +1 -0
  125. package/dist/connections/nango-client.js +50 -0
  126. package/dist/connections/nango-client.js.map +1 -0
  127. package/dist/connections/resolver.d.ts +26 -0
  128. package/dist/connections/resolver.d.ts.map +1 -0
  129. package/dist/connections/resolver.js +44 -0
  130. package/dist/connections/resolver.js.map +1 -0
  131. package/dist/connections/schema.d.ts +6 -0
  132. package/dist/connections/schema.d.ts.map +1 -0
  133. package/dist/connections/schema.js +25 -0
  134. package/dist/connections/schema.js.map +1 -0
  135. package/dist/context.d.ts.map +1 -1
  136. package/dist/context.js +4 -0
  137. package/dist/context.js.map +1 -1
  138. package/dist/dev-ui/api.d.ts +13 -0
  139. package/dist/dev-ui/api.d.ts.map +1 -0
  140. package/dist/dev-ui/api.js +237 -0
  141. package/dist/dev-ui/api.js.map +1 -0
  142. package/dist/dev-ui/dag/extractor.d.ts +19 -0
  143. package/dist/dev-ui/dag/extractor.d.ts.map +1 -0
  144. package/dist/dev-ui/dag/extractor.js +728 -0
  145. package/dist/dev-ui/dag/extractor.js.map +1 -0
  146. package/dist/dev-ui/dag/types.d.ts +42 -0
  147. package/dist/dev-ui/dag/types.d.ts.map +1 -0
  148. package/dist/dev-ui/dag/types.js +2 -0
  149. package/dist/dev-ui/dag/types.js.map +1 -0
  150. package/dist/dev-ui/dev-server.d.ts +14 -0
  151. package/dist/dev-ui/dev-server.d.ts.map +1 -0
  152. package/dist/dev-ui/dev-server.js +158 -0
  153. package/dist/dev-ui/dev-server.js.map +1 -0
  154. package/dist/dev-ui/index.d.ts +3 -0
  155. package/dist/dev-ui/index.d.ts.map +1 -0
  156. package/dist/dev-ui/index.js +2 -0
  157. package/dist/dev-ui/index.js.map +1 -0
  158. package/dist/dev-ui/watcher.d.ts +12 -0
  159. package/dist/dev-ui/watcher.d.ts.map +1 -0
  160. package/dist/dev-ui/watcher.js +162 -0
  161. package/dist/dev-ui/watcher.js.map +1 -0
  162. package/dist/dev-ui/ws.d.ts +27 -0
  163. package/dist/dev-ui/ws.d.ts.map +1 -0
  164. package/dist/dev-ui/ws.js +19 -0
  165. package/dist/dev-ui/ws.js.map +1 -0
  166. package/dist/dev-ui-client/assets/index-B5wNJx8a.js +77 -0
  167. package/dist/dev-ui-client/assets/index-DAKTQEvj.js +1 -0
  168. package/dist/dev-ui-client/assets/index-DpOZNNnF.css +1 -0
  169. package/dist/dev-ui-client/index.html +13 -0
  170. package/dist/discover.d.ts +15 -0
  171. package/dist/discover.d.ts.map +1 -0
  172. package/dist/discover.js +29 -0
  173. package/dist/discover.js.map +1 -0
  174. package/dist/factory.d.ts.map +1 -1
  175. package/dist/factory.js +25 -12
  176. package/dist/factory.js.map +1 -1
  177. package/dist/index.d.ts +5 -1
  178. package/dist/index.d.ts.map +1 -1
  179. package/dist/index.js +4 -0
  180. package/dist/index.js.map +1 -1
  181. package/dist/node.d.ts +1 -0
  182. package/dist/node.d.ts.map +1 -1
  183. package/dist/node.js +1 -0
  184. package/dist/node.js.map +1 -1
  185. package/dist/nodes/agent/executor.d.ts +2 -0
  186. package/dist/nodes/agent/executor.d.ts.map +1 -1
  187. package/dist/nodes/agent/executor.js +11 -1
  188. package/dist/nodes/agent/executor.js.map +1 -1
  189. package/dist/types.d.ts +19 -1
  190. package/dist/types.d.ts.map +1 -1
  191. package/dist/workflow.d.ts +22 -0
  192. package/dist/workflow.d.ts.map +1 -1
  193. package/dist/workflow.js +90 -2
  194. package/dist/workflow.js.map +1 -1
  195. package/package.json +24 -6
  196. package/templates/app/.env.example +13 -0
  197. package/templates/app/README.md +29 -0
  198. package/templates/app/biome.jsonc +81 -0
  199. package/templates/app/dbos-config.yaml +6 -0
  200. package/templates/app/drizzle.config.ts +12 -0
  201. package/templates/app/next.config.js +10 -0
  202. package/templates/app/package.json +55 -0
  203. package/templates/app/postcss.config.js +5 -0
  204. package/templates/app/public/favicon.ico +0 -0
  205. package/templates/app/src/app/_components/.gitkeep +0 -0
  206. package/templates/app/src/app/api/trpc/[trpc]/route.ts +34 -0
  207. package/templates/app/src/app/api/workflow/[name]/route.ts +37 -0
  208. package/templates/app/src/app/layout.tsx +29 -0
  209. package/templates/app/src/app/page.tsx +18 -0
  210. package/templates/app/src/env.js +46 -0
  211. package/templates/app/src/instrumentation.ts +6 -0
  212. package/templates/app/src/lib/pflow.ts +29 -0
  213. package/templates/app/src/server/api/root.ts +21 -0
  214. package/templates/app/src/server/api/routers/.gitkeep +0 -0
  215. package/templates/app/src/server/api/trpc.ts +106 -0
  216. package/templates/app/src/server/db/index.ts +18 -0
  217. package/templates/app/src/server/db/schema.ts +14 -0
  218. package/templates/app/src/styles/globals.css +6 -0
  219. package/templates/app/src/styles/globals.css.orange +126 -0
  220. package/templates/app/src/trpc/query-client.ts +25 -0
  221. package/templates/app/src/trpc/react.tsx +78 -0
  222. package/templates/app/src/trpc/server.ts +30 -0
  223. package/templates/app/tsconfig.check.json +23 -0
  224. package/templates/app/tsconfig.json +42 -0
  225. package/templates/app/tsconfig.server.json +5 -0
  226. package/templates/app/tsconfig.test.json +21 -0
@@ -1,7 +1,18 @@
1
1
  import { execSync } from "node:child_process";
2
2
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
- import { join } from "node:path";
3
+ import { dirname, join, resolve } from "node:path";
4
4
  import pc from "picocolors";
5
+ import { getNpmVersionForMcp } from "./index.js";
6
+ function printBanner() {
7
+ console.log();
8
+ console.log(pc.red(" ___ __ _"));
9
+ console.log(pc.red(" / _ \\ _ __ / _| | _____ __"));
10
+ console.log(pc.red(" | | | | '_ \\ |_| |/ _ \\ \\ /\\ / /"));
11
+ console.log(pc.red(" | |_| | |_) | _| | (_) \\ V V /"));
12
+ console.log(pc.red(" \\___/| .__/|_| |_|\\___/ \\_/\\_/"));
13
+ console.log(pc.red(" |_|"));
14
+ console.log();
15
+ }
5
16
  /**
6
17
  * Build the MCP command by taking the current invocation and replacing "install" with "mcp start"
7
18
  */
@@ -14,21 +25,58 @@ export function buildMcpCommand() {
14
25
  : args;
15
26
  const scriptPath = baseArgs[1] || "";
16
27
  // If we're running a .ts file, tsx hides itself from argv
17
- // so we see "node file.ts" but need "npx tsx file.ts" to actually run it
28
+ // so we see "node file.ts" but need tsx to actually run it.
29
+ // We resolve the full path to tsx because npx spawns via sh which
30
+ // may not have nvm/fnm PATH entries (causes "sh: tsx: command not found").
18
31
  if (scriptPath.endsWith(".ts")) {
19
- return ["npx", "tsx", scriptPath, "mcp", "start"];
32
+ // Script is at packages/core/src/cli/index.ts, repo root is 4 levels up
33
+ const packageRoot = resolve(dirname(scriptPath), "../../../..");
34
+ // Try to find tsx: check npx cache, then fall back to npx -y tsx
35
+ let tsxPath = "tsx";
36
+ try {
37
+ const resolved = execSync("npx -y tsx --which 2>/dev/null || which tsx 2>/dev/null", {
38
+ encoding: "utf-8",
39
+ timeout: 10000,
40
+ }).trim();
41
+ if (resolved)
42
+ tsxPath = resolved;
43
+ }
44
+ catch {
45
+ // If we can't resolve tsx, try the npx cache directly
46
+ const home = process.env.HOME || "~";
47
+ const { readdirSync } = require("node:fs");
48
+ try {
49
+ const npxCacheDir = join(home, ".npm", "_npx");
50
+ for (const entry of readdirSync(npxCacheDir)) {
51
+ const candidate = join(npxCacheDir, entry, "node_modules", ".bin", "tsx");
52
+ if (existsSync(candidate)) {
53
+ tsxPath = candidate;
54
+ break;
55
+ }
56
+ }
57
+ }
58
+ catch {
59
+ // Fall through with bare "tsx"
60
+ }
61
+ }
62
+ return {
63
+ command: [tsxPath, scriptPath, "mcp", "start"],
64
+ isLocal: true,
65
+ packageRoot,
66
+ };
20
67
  }
21
68
  // If running from npx cache or node_modules, use npx 0pflow@version
22
69
  if (scriptPath.includes(".npm/_npx") || scriptPath.includes("node_modules/0pflow")) {
23
- // Try to get version from npm_lifecycle_script (e.g., "0pflow@latest")
24
- const npmScript = process.env.npm_lifecycle_script;
25
- if (npmScript?.startsWith("0pflow")) {
26
- return ["npx", "-y", npmScript, "mcp", "start"];
27
- }
28
- // Fallback to latest
29
- return ["npx", "-y", "0pflow@latest", "mcp", "start"];
70
+ const ver = getNpmVersionForMcp();
71
+ return {
72
+ command: ["npx", "-y", `0pflow@${ver}`, "mcp", "start"],
73
+ isLocal: false,
74
+ };
30
75
  }
31
- return [...baseArgs, "mcp", "start"];
76
+ return {
77
+ command: [...baseArgs, "mcp", "start"],
78
+ isLocal: false,
79
+ };
32
80
  }
33
81
  /**
34
82
  * Get the settings directory path
@@ -83,9 +131,12 @@ export function isClaudeCliAvailable() {
83
131
  /**
84
132
  * Add the 0pflow marketplace to Claude Code
85
133
  */
86
- export function addMarketplace() {
134
+ export function addMarketplace(mcpResult, stdio = "inherit") {
87
135
  try {
88
- execSync("claude plugin marketplace add timescale/0pflow", { stdio: "inherit" });
136
+ const marketplaceSource = mcpResult.isLocal && mcpResult.packageRoot
137
+ ? mcpResult.packageRoot
138
+ : "timescale/0pflow";
139
+ execSync(`claude plugin marketplace add ${marketplaceSource}`, { stdio });
89
140
  return { success: true };
90
141
  }
91
142
  catch (err) {
@@ -98,9 +149,9 @@ export function addMarketplace() {
98
149
  /**
99
150
  * Install the 0pflow plugin to Claude Code
100
151
  */
101
- export function installPlugin() {
152
+ export function installPlugin(stdio = "inherit") {
102
153
  try {
103
- execSync("claude plugin install 0pflow", { stdio: "inherit" });
154
+ execSync("claude plugin install 0pflow", { stdio });
104
155
  return { success: true };
105
156
  }
106
157
  catch (err) {
@@ -114,93 +165,99 @@ export function installPlugin() {
114
165
  * Run the install command
115
166
  */
116
167
  export async function runInstall(options = {}) {
117
- console.log();
118
- console.log(pc.bold("0pflow Install"));
119
- console.log();
168
+ const { verbose = false } = options;
120
169
  // Check if Claude CLI is available
121
170
  if (!isClaudeCliAvailable()) {
122
171
  console.log(pc.red("Error: Claude Code CLI not found."));
123
- console.log(pc.dim("Please install Claude Code first: https://claude.ai/code"));
172
+ console.log(pc.dim("Install Claude Code first: https://claude.ai/code"));
124
173
  process.exit(1);
125
174
  }
126
175
  // Build MCP command from current invocation
127
- const mcpCommand = buildMcpCommand();
128
- console.log(pc.dim("MCP command:"), mcpCommand.join(" "));
129
- console.log();
176
+ const mcpResult = buildMcpCommand();
177
+ if (verbose) {
178
+ console.log(pc.dim("MCP command:"), mcpResult.command.join(" "));
179
+ }
130
180
  // Check for existing installation
131
181
  const existingSettings = readSettings();
182
+ if (existingSettings && !options.force) {
183
+ console.log(pc.yellow("Already installed."), pc.dim("Use --force to reinstall."));
184
+ return;
185
+ }
132
186
  if (existingSettings) {
133
- if (!options.force) {
134
- console.log(pc.yellow("0pflow is already installed."));
135
- console.log(pc.dim("Current MCP command:"), existingSettings.mcpCommand.join(" "));
136
- console.log();
137
- console.log(pc.dim("Use --force to reinstall."));
138
- return;
139
- }
140
- // Force reinstall - uninstall first
141
- console.log(pc.dim("Uninstalling existing installation..."));
142
- await runUninstall();
143
- console.log();
144
- console.log(pc.bold("Reinstalling 0pflow..."));
145
- console.log();
187
+ console.log(pc.dim("Existing installation found, reinstalling (--force)..."));
188
+ await runUninstall({ verbose });
146
189
  }
147
190
  // Write settings
148
191
  const settings = {
149
- mcpCommand,
192
+ mcpCommand: mcpResult.command,
150
193
  installedAt: new Date().toISOString(),
151
194
  };
152
- console.log(pc.dim("Writing settings to:"), getSettingsPath());
153
195
  writeSettings(settings);
154
- console.log(pc.green("✓"), "Settings saved");
155
- console.log();
156
- // Add marketplace
157
- console.log(pc.dim("Adding 0pflow marketplace..."));
158
- const marketplaceResult = addMarketplace();
159
- if (marketplaceResult.success) {
160
- console.log(pc.green("✓"), "Marketplace added");
196
+ // Development mode: just show the command to use
197
+ if (mcpResult.isLocal) {
198
+ // Build the init command from the MCP command (same tsx + script, different subcommand)
199
+ const initCmd = mcpResult.command.slice(0, -2).concat("init").join(" ");
200
+ printBanner();
201
+ console.log(pc.yellow("Development mode detected"));
202
+ console.log();
203
+ console.log(pc.bold("Next steps:"));
204
+ console.log(pc.dim(" 1. Create a new project:"));
205
+ console.log(pc.cyan(` ${initCmd}`));
206
+ console.log(pc.dim(" 2. Run Claude Code with:"));
207
+ console.log(pc.cyan(` claude --plugin-dir ${mcpResult.packageRoot}`));
208
+ console.log(pc.dim(" 3. Use"), pc.cyan("/create-workflow"), pc.dim("to design your first workflow"));
209
+ console.log();
210
+ return;
161
211
  }
162
- else {
163
- console.log(pc.yellow("⚠"), "Could not add marketplace (may already exist)");
212
+ // Add marketplace (suppress claude CLI output in non-verbose mode)
213
+ const stdio = verbose ? "inherit" : "ignore";
214
+ const marketplaceResult = addMarketplace(mcpResult, stdio);
215
+ const pluginResult = installPlugin(stdio);
216
+ if (verbose) {
217
+ console.log(marketplaceResult.success ? pc.green("✓ Marketplace added") : pc.yellow("⚠ Marketplace may already exist"));
218
+ console.log(pluginResult.success ? pc.green("✓ Plugin installed") : pc.red("✗ Plugin install failed"));
164
219
  }
165
- // Install plugin
166
- console.log(pc.dim("Installing 0pflow plugin..."));
167
- const pluginResult = installPlugin();
168
220
  if (pluginResult.success) {
169
- console.log(pc.green("✓"), "Plugin installed");
221
+ const initCmd = `npx 0pflow@${getNpmVersionForMcp()} init`;
222
+ printBanner();
223
+ console.log(pc.green("✓"), "Installed successfully");
224
+ console.log();
225
+ console.log(pc.bold("Next steps:"));
226
+ console.log(pc.dim(" 1. Create a new project:"));
227
+ console.log(pc.cyan(` ${initCmd}`));
228
+ console.log(pc.dim(" 2. Use"), pc.cyan("/create-workflow"), pc.dim("to design your first workflow"));
229
+ console.log();
170
230
  }
171
231
  else {
172
- console.log(pc.red("✗"), "Failed to install plugin:", pluginResult.error);
232
+ console.log(pc.red("✗"), "Installation failed");
233
+ process.exit(1);
173
234
  }
174
- console.log();
175
- console.log(pc.green(pc.bold("Installation complete!")));
176
- console.log();
177
- console.log("You can now use 0pflow in Claude Code.");
178
- console.log();
179
235
  }
180
236
  /**
181
237
  * Run the uninstall command
182
238
  */
183
- export async function runUninstall() {
184
- console.log();
185
- console.log(pc.bold("0pflow Uninstall"));
186
- console.log();
239
+ export async function runUninstall(options = {}) {
240
+ const { verbose = false } = options;
241
+ const stdio = verbose ? "inherit" : "ignore";
187
242
  // Uninstall plugin and marketplace from Claude
188
243
  if (isClaudeCliAvailable()) {
189
- console.log(pc.dim("Uninstalling plugin from Claude Code..."));
190
244
  try {
191
- execSync("claude plugin uninstall 0pflow", { stdio: "inherit" });
192
- console.log(pc.green("✓"), "Plugin uninstalled");
245
+ execSync("claude plugin uninstall 0pflow", { stdio });
246
+ if (verbose)
247
+ console.log(pc.green("✓"), "Plugin uninstalled");
193
248
  }
194
249
  catch {
195
- console.log(pc.yellow("⚠"), "Could not uninstall plugin (may not exist)");
250
+ if (verbose)
251
+ console.log(pc.yellow("⚠"), "Could not uninstall plugin");
196
252
  }
197
- console.log(pc.dim("Removing marketplace..."));
198
253
  try {
199
- execSync("claude plugin marketplace remove 0pflow", { stdio: "inherit" });
200
- console.log(pc.green("✓"), "Marketplace removed");
254
+ execSync("claude plugin marketplace remove 0pflow", { stdio });
255
+ if (verbose)
256
+ console.log(pc.green("✓"), "Marketplace removed");
201
257
  }
202
258
  catch {
203
- console.log(pc.yellow("⚠"), "Could not remove marketplace (may not exist)");
259
+ if (verbose)
260
+ console.log(pc.yellow("⚠"), "Could not remove marketplace");
204
261
  }
205
262
  }
206
263
  // Remove settings file
@@ -208,10 +265,11 @@ export async function runUninstall() {
208
265
  if (existsSync(settingsPath)) {
209
266
  const { unlinkSync } = await import("node:fs");
210
267
  unlinkSync(settingsPath);
211
- console.log(pc.green("✓"), "Settings file removed");
268
+ if (verbose)
269
+ console.log(pc.green("✓"), "Settings file removed");
270
+ }
271
+ if (verbose) {
272
+ console.log(pc.green("Uninstalled."));
212
273
  }
213
- console.log();
214
- console.log(pc.green("Uninstallation complete."));
215
- console.log();
216
274
  }
217
275
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  export declare const packageRoot: string;
2
- export declare const monorepoRoot: string;
3
2
  export declare const templatesDir: string;
4
3
  export declare const version: string;
5
4
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/config.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,QAAoC,CAAC;AAG7D,eAAO,MAAM,YAAY,QAAgC,CAAC;AAG1D,eAAO,MAAM,YAAY,QAAkC,CAAC;AAM5D,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/config.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,QAAoC,CAAC;AAG7D,eAAO,MAAM,YAAY,QAAiC,CAAC;AAM3D,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC"}
@@ -4,10 +4,8 @@ import { fileURLToPath } from "node:url";
4
4
  const __dirname = dirname(fileURLToPath(import.meta.url));
5
5
  // Package root directory (relative to dist/cli/mcp/)
6
6
  export const packageRoot = join(__dirname, "..", "..", "..");
7
- // Monorepo root (up from packages/core)
8
- export const monorepoRoot = join(packageRoot, "..", "..");
9
- // Templates directory at monorepo root level
10
- export const templatesDir = join(monorepoRoot, "templates");
7
+ // Templates directory (bundled with the package)
8
+ export const templatesDir = join(packageRoot, "templates");
11
9
  // Read version from package.json
12
10
  const pkg = JSON.parse(readFileSync(join(packageRoot, "package.json"), "utf-8"));
13
11
  export const version = pkg.version;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/mcp/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,qDAAqD;AACrD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE7D,wCAAwC;AACxC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE1D,6CAA6C;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAE5D,iCAAiC;AACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CACzD,CAAC;AACF,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/mcp/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,qDAAqD;AACrD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE7D,iDAAiD;AACjD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAE3D,iCAAiC;AACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CACzD,CAAC;AACF,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC"}
@@ -0,0 +1,33 @@
1
+ export interface ScaffoldAppOpts {
2
+ appName: string;
3
+ directory: string;
4
+ installDeps?: boolean;
5
+ }
6
+ export interface ScaffoldAppResult {
7
+ success: boolean;
8
+ message: string;
9
+ path?: string;
10
+ }
11
+ export declare function scaffoldApp({ appName, directory, installDeps, }: ScaffoldAppOpts): Promise<ScaffoldAppResult>;
12
+ export interface CreateDatabaseOpts {
13
+ name?: string;
14
+ }
15
+ export interface CreateDatabaseResult {
16
+ success: boolean;
17
+ service_id?: string;
18
+ error?: string;
19
+ }
20
+ export declare function createDatabase({ name, }?: CreateDatabaseOpts): Promise<CreateDatabaseResult>;
21
+ export interface SetupAppSchemaOpts {
22
+ directory: string;
23
+ serviceId: string;
24
+ appName: string;
25
+ }
26
+ export interface SetupAppSchemaResult {
27
+ success: boolean;
28
+ message: string;
29
+ schema_name?: string;
30
+ user_name?: string;
31
+ }
32
+ export declare function setupAppSchema({ directory, serviceId, appName, }: SetupAppSchemaOpts): Promise<SetupAppSchemaResult>;
33
+ //# sourceMappingURL=scaffolding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolding.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/lib/scaffolding.ts"],"names":[],"mappings":"AAoDA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,SAAS,EACT,WAAkB,GACnB,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsC9C;AAID,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAAC,EACnC,IAAI,GACL,GAAE,kBAAuB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0CzD;AAID,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,cAAc,CAAC,EACnC,SAAS,EACT,SAAS,EACT,OAAO,GACR,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAwJpD"}
@@ -0,0 +1,216 @@
1
+ import { exec } from "node:child_process";
2
+ import { existsSync, mkdirSync } from "node:fs";
3
+ import { readFile, writeFile } from "node:fs/promises";
4
+ import { join, resolve } from "node:path";
5
+ import * as dotenv from "dotenv";
6
+ import pg from "pg";
7
+ import { packageRoot, version } from "../config.js";
8
+ import { writeAppTemplates, create0pflowDirectories } from "../lib/templates.js";
9
+ const execAsync = (cmd, cwd) => new Promise((resolve, reject) => {
10
+ exec(cmd, { cwd }, (error, stdout, stderr) => {
11
+ if (error)
12
+ reject(Object.assign(error, { stderr }));
13
+ else
14
+ resolve({ stdout, stderr });
15
+ });
16
+ });
17
+ // Monorepo root (only valid in dev mode when running from packages/core)
18
+ const monorepoRoot = join(packageRoot, "..", "..");
19
+ function isDevMode() {
20
+ const corePath = join(monorepoRoot, "packages", "core");
21
+ return existsSync(corePath);
22
+ }
23
+ function generatePassword(length = 24) {
24
+ const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
25
+ let password = "";
26
+ for (let i = 0; i < length; i++) {
27
+ password += chars.charAt(Math.floor(Math.random() * chars.length));
28
+ }
29
+ return password;
30
+ }
31
+ function buildConnectionString(originalUrl, user, password) {
32
+ const parsed = new URL(originalUrl);
33
+ parsed.username = user;
34
+ parsed.password = encodeURIComponent(password);
35
+ if (!parsed.searchParams.has("uselibpqcompat")) {
36
+ parsed.searchParams.set("uselibpqcompat", "true");
37
+ }
38
+ return parsed.toString();
39
+ }
40
+ export async function scaffoldApp({ appName, directory, installDeps = true, }) {
41
+ const appPath = resolve(process.cwd(), directory);
42
+ if (!existsSync(appPath)) {
43
+ mkdirSync(appPath, { recursive: true });
44
+ }
45
+ try {
46
+ await writeAppTemplates(appPath, {
47
+ app_name: appName,
48
+ opflow_version: version,
49
+ });
50
+ await create0pflowDirectories(appPath);
51
+ // In dev mode, link local 0pflow packages
52
+ if (isDevMode()) {
53
+ const corePath = join(monorepoRoot, "packages", "core");
54
+ await execAsync("npm link", corePath);
55
+ await execAsync("npm link 0pflow", appPath);
56
+ }
57
+ if (installDeps) {
58
+ await execAsync("npm install", appPath);
59
+ }
60
+ return {
61
+ success: true,
62
+ message: `Created 0pflow app '${appName}' in ${appPath}`,
63
+ path: appPath,
64
+ };
65
+ }
66
+ catch (err) {
67
+ const error = err;
68
+ return {
69
+ success: false,
70
+ message: `Failed to create app: ${error.message}\n${error.stderr || ""}`,
71
+ };
72
+ }
73
+ }
74
+ export async function createDatabase({ name, } = {}) {
75
+ const dbName = name || "app-db";
76
+ const cmdArgs = [
77
+ "tiger",
78
+ "service",
79
+ "create",
80
+ "--name",
81
+ dbName,
82
+ "--cpu",
83
+ "shared",
84
+ "--memory",
85
+ "shared",
86
+ "--addons",
87
+ "time-series,ai",
88
+ "--no-wait",
89
+ "-o",
90
+ "json",
91
+ ];
92
+ try {
93
+ const { stdout, stderr } = await execAsync(cmdArgs.join(" "));
94
+ const result = JSON.parse(stdout);
95
+ if (!result.service_id) {
96
+ return {
97
+ success: false,
98
+ error: `No service_id in response: ${stdout}${stderr}`,
99
+ };
100
+ }
101
+ return {
102
+ success: true,
103
+ service_id: result.service_id,
104
+ };
105
+ }
106
+ catch (err) {
107
+ const error = err;
108
+ return {
109
+ success: false,
110
+ error: `Failed to create database: ${error.message}\n${error.stdout || ""}${error.stderr || ""}`,
111
+ };
112
+ }
113
+ }
114
+ export async function setupAppSchema({ directory, serviceId, appName, }) {
115
+ const appDir = resolve(process.cwd(), directory);
116
+ const envPath = join(appDir, ".env");
117
+ // Check if already run
118
+ if (existsSync(envPath)) {
119
+ const envContent = await readFile(envPath, "utf-8");
120
+ const env = dotenv.parse(envContent);
121
+ if (env.DATABASE_SCHEMA) {
122
+ return {
123
+ success: true,
124
+ message: "DATABASE_SCHEMA already set in .env. Delete it and re-run if you need to regenerate.",
125
+ schema_name: appName,
126
+ user_name: appName,
127
+ };
128
+ }
129
+ }
130
+ // Get database connection string from Tiger
131
+ let adminConnectionString;
132
+ try {
133
+ const { stdout: serviceJson } = await execAsync(`tiger service get ${serviceId} --with-password -o json`);
134
+ const serviceDetails = JSON.parse(serviceJson);
135
+ if (!serviceDetails.connection_string) {
136
+ return {
137
+ success: false,
138
+ message: "connection_string not found in service details",
139
+ };
140
+ }
141
+ const parsed = new URL(serviceDetails.connection_string);
142
+ if (!parsed.searchParams.has("uselibpqcompat")) {
143
+ parsed.searchParams.set("uselibpqcompat", "true");
144
+ }
145
+ adminConnectionString = parsed.toString();
146
+ }
147
+ catch (err) {
148
+ const error = err;
149
+ return {
150
+ success: false,
151
+ message: `Failed to get service details: ${error.message}`,
152
+ };
153
+ }
154
+ const pool = new pg.Pool({ connectionString: adminConnectionString, max: 1 });
155
+ try {
156
+ const existingUser = await pool.query(`SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = $1`, [appName]);
157
+ if (existingUser.rows.length > 0) {
158
+ return {
159
+ success: false,
160
+ message: `User '${appName}' already exists. Choose a different app name or delete the existing user.`,
161
+ };
162
+ }
163
+ const appPassword = generatePassword();
164
+ await pool.query(`CREATE ROLE ${appName} WITH LOGIN PASSWORD '${appPassword}'`);
165
+ await pool.query(`GRANT ${appName} TO tsdbadmin WITH INHERIT TRUE`);
166
+ await pool.query(`CREATE SCHEMA IF NOT EXISTS ${appName} AUTHORIZATION ${appName}`);
167
+ await pool.query(`CREATE SCHEMA IF NOT EXISTS ${appName}_dbos AUTHORIZATION ${appName}`);
168
+ await pool.query(`GRANT CREATE ON DATABASE tsdb TO ${appName}`);
169
+ await pool.query(`REVOKE CREATE ON SCHEMA public FROM ${appName}`);
170
+ await pool.query(`GRANT USAGE ON SCHEMA public TO ${appName}`);
171
+ await pool.query(`ALTER ROLE ${appName} SET search_path TO ${appName}, ${appName}_dbos, public`);
172
+ const currentPath = await pool.query(`SELECT setting FROM pg_settings WHERE name = 'search_path'`);
173
+ const existingPath = currentPath.rows[0]?.setting ?? "public";
174
+ if (!existingPath.includes(appName)) {
175
+ await pool.query(`ALTER ROLE tsdbadmin SET search_path TO ${existingPath}, ${appName}, ${appName}_dbos`);
176
+ }
177
+ const existingAdmin = await pool.query(`SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = 'dbosadmin'`);
178
+ let dbosAdminPassword;
179
+ if (existingAdmin.rows.length === 0) {
180
+ dbosAdminPassword = generatePassword();
181
+ await pool.query(`CREATE ROLE dbosadmin WITH LOGIN CREATEDB PASSWORD '${dbosAdminPassword}'`);
182
+ }
183
+ const appDatabaseUrl = buildConnectionString(adminConnectionString, appName, appPassword);
184
+ let envContent = "";
185
+ if (existsSync(envPath)) {
186
+ envContent = await readFile(envPath, "utf-8");
187
+ }
188
+ const env = dotenv.parse(envContent);
189
+ env.DATABASE_URL = appDatabaseUrl;
190
+ env.DATABASE_SCHEMA = appName;
191
+ if (dbosAdminPassword) {
192
+ env.DBOS_ADMIN_URL = buildConnectionString(adminConnectionString, "dbosadmin", dbosAdminPassword);
193
+ }
194
+ const newEnvContent = Object.entries(env)
195
+ .map(([key, value]) => `${key}="${value}"`)
196
+ .join("\n");
197
+ await writeFile(envPath, `${newEnvContent}\n`);
198
+ }
199
+ catch (err) {
200
+ const error = err;
201
+ return {
202
+ success: false,
203
+ message: `Failed to set up app schema: ${error.message}`,
204
+ };
205
+ }
206
+ finally {
207
+ await pool.end();
208
+ }
209
+ return {
210
+ success: true,
211
+ message: `Created schema '${appName}' and user '${appName}'. DATABASE_URL and DATABASE_SCHEMA written to .env.`,
212
+ schema_name: appName,
213
+ user_name: appName,
214
+ };
215
+ }
216
+ //# sourceMappingURL=scaffolding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolding.js","sourceRoot":"","sources":["../../../../src/cli/mcp/lib/scaffolding.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export interface AppTemplateVars {
2
2
  app_name: string;
3
+ opflow_version: string;
3
4
  }
4
5
  /**
5
6
  * Write app templates with Handlebars templating