0pflow 0.1.0-dev.d003224 → 0.1.0-dev.d7ec3ec

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 (46) hide show
  1. package/dist/__tests__/factory.test.js +6 -4
  2. package/dist/__tests__/factory.test.js.map +1 -1
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +16 -1
  5. package/dist/agent.js.map +1 -1
  6. package/dist/cli/app.d.ts +6 -0
  7. package/dist/cli/app.d.ts.map +1 -1
  8. package/dist/cli/app.js +27 -0
  9. package/dist/cli/app.js.map +1 -1
  10. package/dist/cli/index.js +12 -3
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/cli/install.js +5 -5
  13. package/dist/cli/install.js.map +1 -1
  14. package/dist/cli/mcp/lib/scaffolding.d.ts.map +1 -1
  15. package/dist/cli/mcp/lib/scaffolding.js +3 -0
  16. package/dist/cli/mcp/lib/scaffolding.js.map +1 -1
  17. package/dist/cli/mcp/tools/getConnectionInfo.js +2 -2
  18. package/dist/cli/mcp/tools/getConnectionInfo.js.map +1 -1
  19. package/dist/cli/run.d.ts.map +1 -1
  20. package/dist/cli/run.js +260 -104
  21. package/dist/cli/run.js.map +1 -1
  22. package/dist/dev-ui/dev-server.d.ts.map +1 -1
  23. package/dist/dev-ui/dev-server.js +39 -9
  24. package/dist/dev-ui/dev-server.js.map +1 -1
  25. package/dist/discover.d.ts.map +1 -1
  26. package/dist/discover.js +5 -2
  27. package/dist/discover.js.map +1 -1
  28. package/dist/factory.d.ts.map +1 -1
  29. package/dist/factory.js +12 -3
  30. package/dist/factory.js.map +1 -1
  31. package/dist/index.d.ts +2 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +4 -2
  34. package/dist/index.js.map +1 -1
  35. package/dist/registry-gen.d.ts +6 -0
  36. package/dist/registry-gen.d.ts.map +1 -0
  37. package/dist/registry-gen.js +126 -0
  38. package/dist/registry-gen.js.map +1 -0
  39. package/dist/workflow.d.ts.map +1 -1
  40. package/dist/workflow.js +16 -1
  41. package/dist/workflow.js.map +1 -1
  42. package/package.json +1 -1
  43. package/templates/app/generated/registry.ts +8 -0
  44. package/templates/app/next.config.js +3 -1
  45. package/templates/app/package.json +2 -0
  46. package/templates/app/src/lib/pflow.ts +5 -6
package/dist/cli/run.js CHANGED
@@ -1,10 +1,13 @@
1
1
  import { exec, execSync } from "node:child_process";
2
2
  import { existsSync, readFileSync, readdirSync } from "node:fs";
3
+ import { homedir } from "node:os";
3
4
  import { promisify } from "node:util";
4
- import { basename, join, resolve } from "node:path";
5
+ import { join, resolve } from "node:path";
5
6
  import * as p from "@clack/prompts";
6
7
  import pc from "picocolors";
8
+ import * as dotenv from "dotenv";
7
9
  import { scaffoldApp, createDatabase, setupAppSchema, } from "./mcp/lib/scaffolding.js";
10
+ import { buildMcpCommand, writeSettings, addMarketplace, installPlugin, } from "./install.js";
8
11
  function isClaudeAvailable() {
9
12
  try {
10
13
  execSync("claude --version", { stdio: "ignore" });
@@ -14,19 +17,10 @@ function isClaudeAvailable() {
14
17
  return false;
15
18
  }
16
19
  }
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
20
  /**
28
- * Poll Tiger Cloud until the service is ready (status != "creating").
21
+ * Poll Tiger Cloud until the service is ready (status == "ready").
29
22
  * Returns true if ready, false on timeout.
23
+ * Throws an error if the service is not found or tiger CLI is unavailable.
30
24
  */
31
25
  async function waitForDatabase(serviceId, timeoutMs = 5 * 60 * 1000, intervalMs = 5000) {
32
26
  const start = Date.now();
@@ -38,17 +32,108 @@ async function waitForDatabase(serviceId, timeoutMs = 5 * 60 * 1000, intervalMs
38
32
  stdio: ["pipe", "pipe", "pipe"],
39
33
  });
40
34
  const info = JSON.parse(stdout);
41
- if (info.status && info.status !== "creating") {
35
+ // Only return true when database is actually ready
36
+ if (info.status?.toLowerCase() === "ready") {
42
37
  return true;
43
38
  }
44
39
  }
45
- catch {
46
- // tiger CLI not available or service not found — keep trying
40
+ catch (error) {
41
+ const err = error;
42
+ // Check if it's a "service not found" or "tiger CLI not available" error
43
+ if (err.message?.includes("not found") || err.stderr?.includes("not found")) {
44
+ throw new Error(`Service ${serviceId} not found. Please check the service ID.`);
45
+ }
46
+ if (err.message?.includes("command not found") || err.message?.includes("tiger")) {
47
+ throw new Error("Tiger CLI not available. Please install it from https://tiger.tigerdata.cloud");
48
+ }
49
+ // For other errors (network, etc.), continue retrying
47
50
  }
48
51
  await new Promise((r) => setTimeout(r, intervalMs));
49
52
  }
50
53
  return false;
51
54
  }
55
+ /**
56
+ * Extract the service ID from a Tiger Cloud DATABASE_URL.
57
+ * Tiger Cloud hostnames follow the pattern: <service_id>.<region>.aws.tsdb.cloud
58
+ */
59
+ function extractServiceIdFromUrl(databaseUrl) {
60
+ try {
61
+ const url = new URL(databaseUrl);
62
+ const hostname = url.hostname;
63
+ // Match Tiger Cloud hostname patterns like: abc123def4.us-east-1.aws.tsdb.cloud
64
+ const match = hostname.match(/^([a-z0-9]{10})\./);
65
+ return match ? match[1] : null;
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ /**
72
+ * Check database status and start it if paused/stopped.
73
+ * Returns the status: "started", "already_running", "not_found", or "creating"
74
+ */
75
+ function startDatabaseIfNeeded(serviceId, noWait = false) {
76
+ try {
77
+ const stdout = execSync(`tiger service get ${serviceId} -o json`, {
78
+ encoding: "utf-8",
79
+ stdio: ["pipe", "pipe", "pipe"],
80
+ });
81
+ const info = JSON.parse(stdout);
82
+ if (!info.status) {
83
+ return "not_found";
84
+ }
85
+ const status = info.status.toLowerCase();
86
+ // If database is paused or stopped, start it
87
+ if (status === "paused" || status === "stopped") {
88
+ execSync(`tiger service start ${serviceId}${noWait ? " --no-wait" : ""}`, {
89
+ encoding: "utf-8",
90
+ stdio: ["pipe", "pipe", "pipe"],
91
+ });
92
+ return "started";
93
+ }
94
+ if (status === "creating") {
95
+ return "creating";
96
+ }
97
+ // Already running
98
+ return "already_running";
99
+ }
100
+ catch {
101
+ // tiger CLI not available or service not found
102
+ return "not_found";
103
+ }
104
+ }
105
+ /**
106
+ * Check if Tiger CLI is installed and authenticated.
107
+ * If not authenticated, triggers interactive login (opens browser).
108
+ */
109
+ function ensureTigerAuth() {
110
+ // Check if tiger CLI is available
111
+ try {
112
+ execSync("tiger version", { stdio: "ignore" });
113
+ }
114
+ catch {
115
+ p.log.error("Tiger CLI not found. Install it: curl -fsSL https://cli.tigerdata.com | sh");
116
+ process.exit(1);
117
+ }
118
+ // Check if authenticated
119
+ try {
120
+ const stdout = execSync("tiger auth status -o json", {
121
+ encoding: "utf-8",
122
+ stdio: ["pipe", "pipe", "pipe"],
123
+ });
124
+ JSON.parse(stdout); // Will throw if not valid JSON (not authenticated)
125
+ }
126
+ catch {
127
+ p.log.info("Tiger Cloud authentication required. Opening browser...");
128
+ try {
129
+ execSync("tiger auth login", { stdio: "inherit" });
130
+ }
131
+ catch {
132
+ p.log.error("Tiger Cloud login failed. Try running 'tiger auth login' manually.");
133
+ process.exit(1);
134
+ }
135
+ }
136
+ }
52
137
  function isExisting0pflow() {
53
138
  try {
54
139
  const pkgPath = join(process.cwd(), "package.json");
@@ -62,17 +147,97 @@ function isExisting0pflow() {
62
147
  return false;
63
148
  }
64
149
  }
150
+ /**
151
+ * Scan ~/0pflow/ for directories that contain a package.json with 0pflow as a dependency.
152
+ */
153
+ function discoverProjects() {
154
+ const baseDir = join(homedir(), "0pflow");
155
+ if (!existsSync(baseDir))
156
+ return [];
157
+ const projects = [];
158
+ let entries;
159
+ try {
160
+ entries = readdirSync(baseDir);
161
+ }
162
+ catch {
163
+ return [];
164
+ }
165
+ for (const entry of entries) {
166
+ const projectDir = join(baseDir, entry);
167
+ const pkgPath = join(projectDir, "package.json");
168
+ try {
169
+ if (!existsSync(pkgPath))
170
+ continue;
171
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
172
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
173
+ if ("0pflow" in deps) {
174
+ projects.push({ name: entry, path: projectDir });
175
+ }
176
+ }
177
+ catch {
178
+ continue;
179
+ }
180
+ }
181
+ projects.sort((a, b) => a.name.localeCompare(b.name));
182
+ return projects;
183
+ }
65
184
  const WELCOME_PROMPT = "Welcome to your 0pflow project! What workflow would you like to create? Here are some ideas:\n\n" +
66
185
  '- "Enrich leads from a CSV file with company data"\n' +
67
186
  '- "Monitor website uptime and send Slack alerts"\n' +
68
187
  '- "Sync Salesforce contacts to our database nightly"\n' +
69
188
  '- "Score and route inbound leads based on firmographics"\n\n' +
70
189
  "Describe what you'd like to automate and I'll help you build it with /create-workflow.";
190
+ async function launchExistingProject(projectPath) {
191
+ // Check if database is paused and start it if needed
192
+ try {
193
+ const { findEnvFile } = await import("./env.js");
194
+ const envPath = findEnvFile(projectPath);
195
+ if (envPath) {
196
+ const envContent = readFileSync(envPath, "utf-8");
197
+ const parsed = dotenv.parse(envContent);
198
+ if (parsed.DATABASE_URL) {
199
+ const serviceId = extractServiceIdFromUrl(parsed.DATABASE_URL);
200
+ if (serviceId) {
201
+ const status = startDatabaseIfNeeded(serviceId, false);
202
+ if (status === "started") {
203
+ const s = p.spinner();
204
+ s.start("Database was paused, waiting for it to start...");
205
+ const ready = await waitForDatabase(serviceId, 3 * 60 * 1000);
206
+ if (ready) {
207
+ s.stop(pc.green("Database is ready"));
208
+ }
209
+ else {
210
+ s.stop(pc.yellow("Database is starting (taking longer than expected)"));
211
+ }
212
+ }
213
+ }
214
+ }
215
+ }
216
+ }
217
+ catch {
218
+ // Continue without database check if env loading fails
219
+ }
220
+ const mode = await p.select({
221
+ message: "Launch mode",
222
+ options: [
223
+ { value: "normal", label: "Launch" },
224
+ { value: "yolo", label: "Launch with --dangerously-skip-permissions" },
225
+ ],
226
+ });
227
+ if (p.isCancel(mode)) {
228
+ p.cancel("Cancelled.");
229
+ process.exit(0);
230
+ }
231
+ p.outro(pc.green("Launching..."));
232
+ await launchDevServer(projectPath, { yolo: mode === "yolo" });
233
+ }
71
234
  async function launchDevServer(cwd, { yolo = false } = {}) {
72
- // Load .env for DATABASE_URL and NANGO_SECRET_KEY
235
+ // Load .env from the app directory (not process.cwd(), which may be a parent)
73
236
  try {
74
- const { resolveEnv } = await import("./env.js");
75
- resolveEnv();
237
+ const { findEnvFile, loadEnv } = await import("./env.js");
238
+ const envPath = findEnvFile(cwd);
239
+ if (envPath)
240
+ loadEnv(envPath);
76
241
  }
77
242
  catch {
78
243
  // Dev UI can work without env
@@ -105,31 +270,60 @@ export async function runRun() {
105
270
  p.log.error("Claude Code CLI not found. Install it from https://claude.ai/code");
106
271
  process.exit(1);
107
272
  }
108
- // ── Existing project launch ───────────────────────────────────────
273
+ // ── Always install/update plugin ────────────────────────────────────
274
+ {
275
+ const s = p.spinner();
276
+ s.start("Updating 0pflow plugin...");
277
+ const mcpResult = buildMcpCommand();
278
+ writeSettings({
279
+ mcpCommand: mcpResult.command,
280
+ installedAt: new Date().toISOString(),
281
+ });
282
+ addMarketplace(mcpResult, "ignore");
283
+ const result = installPlugin("ignore");
284
+ if (result.success) {
285
+ s.stop(pc.green("Plugin up to date"));
286
+ }
287
+ else {
288
+ s.stop(pc.yellow("Plugin update skipped (can retry with '0pflow install --force')"));
289
+ }
290
+ }
291
+ // ── Existing project (CWD) → launch directly ───────────────────────
109
292
  if (isExisting0pflow()) {
110
- const mode = await p.select({
111
- message: "Launch mode",
293
+ await launchExistingProject(process.cwd());
294
+ return;
295
+ }
296
+ // ── Discover existing projects in ~/0pflow/ ───────────────────────
297
+ const projects = discoverProjects();
298
+ if (projects.length > 0) {
299
+ const CREATE_NEW = "__create_new__";
300
+ const projectChoice = await p.select({
301
+ message: "Select a project",
112
302
  options: [
113
- { value: "normal", label: "Launch" },
114
- { value: "yolo", label: "Launch with --dangerously-skip-permissions" },
303
+ ...projects.map((proj) => ({
304
+ value: proj.path,
305
+ label: proj.name,
306
+ hint: proj.path,
307
+ })),
308
+ {
309
+ value: CREATE_NEW,
310
+ label: pc.green("+ Create new project"),
311
+ },
115
312
  ],
116
313
  });
117
- if (p.isCancel(mode)) {
314
+ if (p.isCancel(projectChoice)) {
118
315
  p.cancel("Cancelled.");
119
316
  process.exit(0);
120
317
  }
121
- p.outro(pc.green("Launching..."));
122
- await launchDevServer(process.cwd(), { yolo: mode === "yolo" });
123
- return;
318
+ if (projectChoice !== CREATE_NEW) {
319
+ await launchExistingProject(projectChoice);
320
+ return;
321
+ }
124
322
  }
125
- const cwdEmpty = isCwdEmpty();
126
323
  // ── 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
324
  const projectName = await p.text({
131
325
  message: "Project name",
132
- ...(defaultName ? { initialValue: defaultName } : { placeholder: "my-app" }),
326
+ placeholder: "my-app",
133
327
  validate(value) {
134
328
  if (!value)
135
329
  return "Project name is required";
@@ -142,51 +336,10 @@ export async function runRun() {
142
336
  p.cancel("Cancelled.");
143
337
  process.exit(0);
144
338
  }
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
- }
339
+ // ── Directory (always ~/0pflow/<name>) ────────────────────────────
340
+ const directory = join(homedir(), "0pflow", projectName);
341
+ // ── Tiger auth ────────────────────────────────────────────────────
342
+ ensureTigerAuth();
190
343
  // ── Database ────────────────────────────────────────────────────────
191
344
  const dbChoice = await p.select({
192
345
  message: "Database setup",
@@ -270,24 +423,30 @@ export async function runRun() {
270
423
  }
271
424
  serviceId = sid;
272
425
  }
426
+ // Start database if paused (async, don't wait)
427
+ if (serviceId) {
428
+ const status = startDatabaseIfNeeded(serviceId, true);
429
+ if (status === "started") {
430
+ p.log.info("Database was paused, starting it in the background...");
431
+ }
432
+ }
273
433
  }
274
434
  // ── Execute ─────────────────────────────────────────────────────────
275
435
  const s = p.spinner();
276
- // Start database creation first (async) if creating new
277
- let dbPromise;
436
+ // Create database if needed (returns immediately with --no-wait)
278
437
  if (dbChoice === "new") {
279
438
  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...");
439
+ const dbResult = await createDatabase({ name: projectName });
440
+ if (!dbResult.success) {
441
+ s.stop(pc.red("Database creation failed"));
442
+ p.log.error(dbResult.error || "Failed to create database");
443
+ process.exit(1);
444
+ }
445
+ serviceId = dbResult.service_id;
446
+ s.stop(pc.green(`Database creation initiated (${serviceId})`));
290
447
  }
448
+ // Scaffold app
449
+ s.start("Scaffolding project...");
291
450
  const scaffoldResult = await scaffoldApp({
292
451
  appName: projectName,
293
452
  directory,
@@ -304,24 +463,22 @@ export async function runRun() {
304
463
  s.start("Installing dependencies...");
305
464
  try {
306
465
  const execAsync = promisify(exec);
307
- await execAsync("npm install", { cwd: appPath });
466
+ await execAsync("npm install --loglevel=error", { cwd: appPath });
308
467
  s.stop(pc.green("Installed dependencies"));
309
468
  }
310
469
  catch (err) {
311
470
  s.stop(pc.yellow("npm install failed (you can retry manually)"));
312
471
  }
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}`);
472
+ // Wait for database to be ready (whether new or existing that was started)
473
+ if (serviceId) {
474
+ s.start("Checking database status...");
475
+ const ready = await waitForDatabase(serviceId, 3 * 60 * 1000);
476
+ if (!ready) {
477
+ s.stop(pc.red("Database failed to start"));
478
+ p.log.error("Database did not become ready in time. Please check Tiger Cloud dashboard.");
479
+ process.exit(1);
324
480
  }
481
+ s.stop(pc.green("Database is ready"));
325
482
  }
326
483
  if (serviceId) {
327
484
  s.start("Configuring database schema...");
@@ -379,11 +536,10 @@ export async function runRun() {
379
536
  return;
380
537
  }
381
538
  // ── Done ────────────────────────────────────────────────────────────
382
- const cdCmd = directory === "." ? "" : `cd ${directory} && `;
383
- p.outro(pc.green("Project created!"));
539
+ p.outro(pc.green(`Project created at ${directory}`));
384
540
  console.log();
385
541
  console.log(pc.bold(" To launch later:"));
386
- console.log(pc.cyan(` ${cdCmd}0pflow run`));
542
+ console.log(pc.cyan(` cd ${directory} && 0pflow run`));
387
543
  console.log();
388
544
  }
389
545
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/dev-ui/dev-server.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB;;;;GAmN7D"}
1
+ {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/dev-ui/dev-server.ts"],"names":[],"mappings":"AA4CA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB;;;;GAgO7D"}
@@ -1,15 +1,33 @@
1
1
  import { createServer as createHttpServer } from "node:http";
2
+ import { execSync } from "node:child_process";
2
3
  import { existsSync, readFileSync } from "node:fs";
3
4
  import { readFile } from "node:fs/promises";
4
5
  import { resolve, dirname, extname } from "node:path";
5
6
  import { fileURLToPath } from "node:url";
7
+ import * as p from "@clack/prompts";
6
8
  import { createWSServer } from "./ws.js";
7
9
  import { createWatcher } from "./watcher.js";
8
10
  import { handleApiRequest } from "./api.js";
9
- import { ensureConnectionsTable } from "../connections/index.js";
10
11
  import { createIntegrationProvider } from "../connections/integration-provider.js";
11
12
  import { getSchemaName } from "../dbos.js";
13
+ import { getAppSchema } from "../cli/app.js";
12
14
  import pg from "pg";
15
+ async function killPortHolder(port) {
16
+ try {
17
+ const pids = execSync(`lsof -ti :${port}`, { encoding: "utf-8" }).trim();
18
+ if (pids) {
19
+ for (const pid of pids.split("\n")) {
20
+ process.kill(parseInt(pid, 10), "SIGTERM");
21
+ }
22
+ await new Promise((r) => setTimeout(r, 500));
23
+ return true;
24
+ }
25
+ }
26
+ catch {
27
+ // no process on port or kill failed
28
+ }
29
+ return false;
30
+ }
13
31
  const MIME = {
14
32
  ".html": "text/html; charset=utf-8",
15
33
  ".js": "text/javascript; charset=utf-8",
@@ -32,19 +50,19 @@ export async function startDevServer(options) {
32
50
  pkgRoot = parent;
33
51
  }
34
52
  const clientDir = resolve(pkgRoot, "dist/dev-ui-client");
35
- // Resolve DBOS schema name from project's package.json
53
+ // Read app schema from project's .env (DATABASE_SCHEMA, written by setup_app_schema)
36
54
  const projectPkgPath = resolve(projectRoot, "package.json");
37
- let appName;
55
+ let pkgName;
38
56
  try {
39
- appName = JSON.parse(readFileSync(projectPkgPath, "utf-8")).name;
57
+ pkgName = JSON.parse(readFileSync(projectPkgPath, "utf-8")).name;
40
58
  }
41
59
  catch { /* use default */ }
42
- const dbosSchema = getSchemaName(appName);
60
+ const appSchema = getAppSchema(projectRoot);
61
+ const dbosSchema = getSchemaName(pkgName);
43
62
  // Set up API context if database is configured
44
63
  const hasApi = !!(options.databaseUrl);
45
64
  let pool = null;
46
65
  if (hasApi) {
47
- await ensureConnectionsTable(options.databaseUrl, appName ?? "opflow");
48
66
  pool = new pg.Pool({ connectionString: options.databaseUrl });
49
67
  }
50
68
  // Integration provider auto-detects: NANGO_SECRET_KEY → local, otherwise → cloud
@@ -61,7 +79,7 @@ export async function startDevServer(options) {
61
79
  pool,
62
80
  integrationProvider: integrationProvider,
63
81
  schema: dbosSchema,
64
- appSchema: appName ?? "opflow",
82
+ appSchema,
65
83
  });
66
84
  if (handled)
67
85
  return;
@@ -114,6 +132,7 @@ export async function startDevServer(options) {
114
132
  }
115
133
  };
116
134
  const { broadcast, sendTo, wss } = createWSServer(httpServer, onClientMessage);
135
+ wss.on("error", () => { }); // errors handled on httpServer
117
136
  try {
118
137
  const { createPtyManager } = await import("./pty.js");
119
138
  ptyManager = createPtyManager({
@@ -166,10 +185,21 @@ export async function startDevServer(options) {
166
185
  }
167
186
  });
168
187
  const hostname = host ? "0.0.0.0" : "localhost";
169
- // Try the requested port; fall back to OS-assigned port if taken
188
+ // Try the requested port; offer to kill existing instance if taken
170
189
  const actualPort = await new Promise((resolvePromise, rejectPromise) => {
171
- httpServer.once("error", (err) => {
190
+ httpServer.once("error", async (err) => {
172
191
  if (err.code === "EADDRINUSE") {
192
+ const shouldKill = await p.confirm({
193
+ message: "0pflow is likely already running. Kill it and restart?",
194
+ });
195
+ if (!p.isCancel(shouldKill) && shouldKill) {
196
+ const killed = await killPortHolder(port);
197
+ if (killed) {
198
+ httpServer.listen(port, hostname, () => resolvePromise(port));
199
+ return;
200
+ }
201
+ }
202
+ // Fall back to OS-assigned port
173
203
  httpServer.listen(0, hostname, () => {
174
204
  const addr = httpServer.address();
175
205
  resolvePromise(typeof addr === "object" && addr ? addr.port : 0);