0pflow 0.1.0-dev.06e289c → 0.1.0-dev.0de2bc6
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.
- package/dist/__tests__/discover.integration.test.d.ts +2 -0
- package/dist/__tests__/discover.integration.test.d.ts.map +1 -0
- package/dist/__tests__/discover.integration.test.js +137 -0
- package/dist/__tests__/discover.integration.test.js.map +1 -0
- package/dist/__tests__/factory.test.js +13 -0
- package/dist/__tests__/factory.test.js.map +1 -1
- package/dist/__tests__/integration.e2e.test.js +2 -1
- package/dist/__tests__/integration.e2e.test.js.map +1 -1
- package/dist/__tests__/integration.test.js +87 -82
- package/dist/__tests__/integration.test.js.map +1 -1
- package/dist/agent.d.ts +7 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +75 -10
- package/dist/agent.js.map +1 -1
- package/dist/cli/__tests__/discovery.test.js +1 -1
- package/dist/cli/__tests__/discovery.test.js.map +1 -1
- package/dist/cli/app.d.ts +6 -0
- package/dist/cli/app.d.ts.map +1 -1
- package/dist/cli/app.js +27 -0
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/discovery.d.ts +10 -0
- package/dist/cli/discovery.d.ts.map +1 -1
- package/dist/cli/discovery.js +42 -0
- package/dist/cli/discovery.js.map +1 -1
- package/dist/cli/env.js +1 -1
- package/dist/cli/env.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +133 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/install.d.ts.map +1 -1
- package/dist/cli/install.js +39 -9
- package/dist/cli/install.js.map +1 -1
- package/dist/cli/mcp/lib/scaffolding.d.ts +33 -0
- package/dist/cli/mcp/lib/scaffolding.d.ts.map +1 -0
- package/dist/cli/mcp/lib/scaffolding.js +219 -0
- package/dist/cli/mcp/lib/scaffolding.js.map +1 -0
- package/dist/cli/mcp/lib/templates.d.ts +1 -0
- package/dist/cli/mcp/lib/templates.d.ts.map +1 -1
- package/dist/cli/mcp/lib/templates.js.map +1 -1
- package/dist/cli/mcp/tools/createApp.d.ts +1 -0
- package/dist/cli/mcp/tools/createApp.d.ts.map +1 -1
- package/dist/cli/mcp/tools/createApp.js +12 -55
- package/dist/cli/mcp/tools/createApp.js.map +1 -1
- package/dist/cli/mcp/tools/createDatabase.d.ts.map +1 -1
- package/dist/cli/mcp/tools/createDatabase.js +2 -41
- package/dist/cli/mcp/tools/createDatabase.js.map +1 -1
- package/dist/cli/mcp/tools/getConnectionInfo.d.ts +19 -0
- package/dist/cli/mcp/tools/getConnectionInfo.d.ts.map +1 -0
- package/dist/cli/mcp/tools/getConnectionInfo.js +111 -0
- package/dist/cli/mcp/tools/getConnectionInfo.js.map +1 -0
- package/dist/cli/mcp/tools/getRun.d.ts +22 -0
- package/dist/cli/mcp/tools/getRun.d.ts.map +1 -0
- package/dist/cli/mcp/tools/getRun.js +80 -0
- package/dist/cli/mcp/tools/getRun.js.map +1 -0
- package/dist/cli/mcp/tools/getTrace.d.ts +32 -0
- package/dist/cli/mcp/tools/getTrace.d.ts.map +1 -0
- package/dist/cli/mcp/tools/getTrace.js +104 -0
- package/dist/cli/mcp/tools/getTrace.js.map +1 -0
- package/dist/cli/mcp/tools/index.d.ts +94 -1
- package/dist/cli/mcp/tools/index.d.ts.map +1 -1
- package/dist/cli/mcp/tools/index.js +16 -0
- package/dist/cli/mcp/tools/index.js.map +1 -1
- package/dist/cli/mcp/tools/listIntegrations.d.ts +14 -0
- package/dist/cli/mcp/tools/listIntegrations.d.ts.map +1 -0
- package/dist/cli/mcp/tools/listIntegrations.js +53 -0
- package/dist/cli/mcp/tools/listIntegrations.js.map +1 -0
- package/dist/cli/mcp/tools/listRuns.d.ts +21 -0
- package/dist/cli/mcp/tools/listRuns.d.ts.map +1 -0
- package/dist/cli/mcp/tools/listRuns.js +72 -0
- package/dist/cli/mcp/tools/listRuns.js.map +1 -0
- package/dist/cli/mcp/tools/listWorkflows.d.ts +15 -0
- package/dist/cli/mcp/tools/listWorkflows.d.ts.map +1 -0
- package/dist/cli/mcp/tools/listWorkflows.js +45 -0
- package/dist/cli/mcp/tools/listWorkflows.js.map +1 -0
- package/dist/cli/mcp/tools/runNode.d.ts +17 -0
- package/dist/cli/mcp/tools/runNode.d.ts.map +1 -0
- package/dist/cli/mcp/tools/runNode.js +74 -0
- package/dist/cli/mcp/tools/runNode.js.map +1 -0
- package/dist/cli/mcp/tools/runWorkflow.d.ts +16 -0
- package/dist/cli/mcp/tools/runWorkflow.d.ts.map +1 -0
- package/dist/cli/mcp/tools/runWorkflow.js +66 -0
- package/dist/cli/mcp/tools/runWorkflow.js.map +1 -0
- package/dist/cli/mcp/tools/setupAppSchema.d.ts +1 -1
- package/dist/cli/mcp/tools/setupAppSchema.d.ts.map +1 -1
- package/dist/cli/mcp/tools/setupAppSchema.js +11 -132
- package/dist/cli/mcp/tools/setupAppSchema.js.map +1 -1
- package/dist/cli/mcp/tools/utils.d.ts +7 -0
- package/dist/cli/mcp/tools/utils.d.ts.map +1 -0
- package/dist/cli/mcp/tools/utils.js +28 -0
- package/dist/cli/mcp/tools/utils.js.map +1 -0
- package/dist/cli/run.d.ts +2 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +545 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/trace.d.ts +5 -0
- package/dist/cli/trace.d.ts.map +1 -1
- package/dist/cli/trace.js +1 -1
- package/dist/cli/trace.js.map +1 -1
- package/dist/connections/cloud-auth.d.ts +46 -0
- package/dist/connections/cloud-auth.d.ts.map +1 -0
- package/dist/connections/cloud-auth.js +243 -0
- package/dist/connections/cloud-auth.js.map +1 -0
- package/dist/connections/cloud-client.d.ts +25 -0
- package/dist/connections/cloud-client.d.ts.map +1 -0
- package/dist/connections/cloud-client.js +59 -0
- package/dist/connections/cloud-client.js.map +1 -0
- package/dist/connections/cloud-integration-provider.d.ts +21 -0
- package/dist/connections/cloud-integration-provider.d.ts.map +1 -0
- package/dist/connections/cloud-integration-provider.js +26 -0
- package/dist/connections/cloud-integration-provider.js.map +1 -0
- package/dist/connections/index.d.ts +11 -0
- package/dist/connections/index.d.ts.map +1 -0
- package/dist/connections/index.js +9 -0
- package/dist/connections/index.js.map +1 -0
- package/dist/connections/integration-provider.d.ts +38 -0
- package/dist/connections/integration-provider.d.ts.map +1 -0
- package/dist/connections/integration-provider.js +20 -0
- package/dist/connections/integration-provider.js.map +1 -0
- package/dist/connections/local-integration-provider.d.ts +28 -0
- package/dist/connections/local-integration-provider.d.ts.map +1 -0
- package/dist/connections/local-integration-provider.js +54 -0
- package/dist/connections/local-integration-provider.js.map +1 -0
- package/dist/connections/nango-client.d.ts +14 -0
- package/dist/connections/nango-client.d.ts.map +1 -0
- package/dist/connections/nango-client.js +50 -0
- package/dist/connections/nango-client.js.map +1 -0
- package/dist/connections/resolver.d.ts +26 -0
- package/dist/connections/resolver.d.ts.map +1 -0
- package/dist/connections/resolver.js +48 -0
- package/dist/connections/resolver.js.map +1 -0
- package/dist/connections/schema.d.ts +8 -0
- package/dist/connections/schema.d.ts.map +1 -0
- package/dist/connections/schema.js +31 -0
- package/dist/connections/schema.js.map +1 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +4 -0
- package/dist/context.js.map +1 -1
- package/dist/dev-ui/api.d.ts +16 -0
- package/dist/dev-ui/api.d.ts.map +1 -0
- package/dist/dev-ui/api.js +237 -0
- package/dist/dev-ui/api.js.map +1 -0
- package/dist/dev-ui/dag/extractor.d.ts +19 -0
- package/dist/dev-ui/dag/extractor.d.ts.map +1 -0
- package/dist/dev-ui/dag/extractor.js +716 -0
- package/dist/dev-ui/dag/extractor.js.map +1 -0
- package/dist/dev-ui/dag/types.d.ts +42 -0
- package/dist/dev-ui/dag/types.d.ts.map +1 -0
- package/dist/dev-ui/dag/types.js +2 -0
- package/dist/dev-ui/dag/types.js.map +1 -0
- package/dist/dev-ui/dev-server.d.ts +18 -0
- package/dist/dev-ui/dev-server.d.ts.map +1 -0
- package/dist/dev-ui/dev-server.js +222 -0
- package/dist/dev-ui/dev-server.js.map +1 -0
- package/dist/dev-ui/index.d.ts +3 -0
- package/dist/dev-ui/index.d.ts.map +1 -0
- package/dist/dev-ui/index.js +2 -0
- package/dist/dev-ui/index.js.map +1 -0
- package/dist/dev-ui/pty.d.ts +16 -0
- package/dist/dev-ui/pty.d.ts.map +1 -0
- package/dist/dev-ui/pty.js +87 -0
- package/dist/dev-ui/pty.js.map +1 -0
- package/dist/dev-ui/watcher.d.ts +12 -0
- package/dist/dev-ui/watcher.d.ts.map +1 -0
- package/dist/dev-ui/watcher.js +162 -0
- package/dist/dev-ui/watcher.js.map +1 -0
- package/dist/dev-ui/ws.d.ts +52 -0
- package/dist/dev-ui/ws.d.ts.map +1 -0
- package/dist/dev-ui/ws.js +32 -0
- package/dist/dev-ui/ws.js.map +1 -0
- package/dist/dev-ui-client/assets/index-C-LxzUII.css +32 -0
- package/dist/dev-ui-client/assets/index-DAKTQEvj.js +1 -0
- package/dist/dev-ui-client/assets/index-aAIwXl4O.js +127 -0
- package/dist/dev-ui-client/index.html +13 -0
- package/dist/discover.d.ts +15 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +32 -0
- package/dist/discover.js.map +1 -0
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +37 -13
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +1 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +1 -0
- package/dist/node.js.map +1 -1
- package/dist/nodes/agent/executor.d.ts +2 -0
- package/dist/nodes/agent/executor.d.ts.map +1 -1
- package/dist/nodes/agent/executor.js +11 -1
- package/dist/nodes/agent/executor.js.map +1 -1
- package/dist/registry-gen.d.ts +6 -0
- package/dist/registry-gen.d.ts.map +1 -0
- package/dist/registry-gen.js +126 -0
- package/dist/registry-gen.js.map +1 -0
- package/dist/types.d.ts +21 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/workflow.d.ts +22 -0
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +113 -3
- package/dist/workflow.js.map +1 -1
- package/package.json +26 -5
- package/templates/app/dbos-config.yaml +6 -0
- package/templates/app/generated/registry.ts +8 -0
- package/templates/app/next.config.js +3 -1
- package/templates/app/package.json +6 -1
- package/templates/app/src/app/api/workflow/[name]/route.ts +37 -0
- package/templates/app/src/instrumentation.ts +6 -0
- package/templates/app/src/lib/pflow.ts +28 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupAppSchema.js","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/setupAppSchema.ts"],"names":[],"mappings":"
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAySA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CA2S5C"}
|
package/dist/cli/run.js
ADDED
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
import { exec, execSync } from "node:child_process";
|
|
2
|
+
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { join, resolve } from "node:path";
|
|
6
|
+
import * as p from "@clack/prompts";
|
|
7
|
+
import pc from "picocolors";
|
|
8
|
+
import * as dotenv from "dotenv";
|
|
9
|
+
import { scaffoldApp, createDatabase, setupAppSchema, } from "./mcp/lib/scaffolding.js";
|
|
10
|
+
import { buildMcpCommand, writeSettings, addMarketplace, installPlugin, } from "./install.js";
|
|
11
|
+
function isClaudeAvailable() {
|
|
12
|
+
try {
|
|
13
|
+
execSync("claude --version", { stdio: "ignore" });
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Poll Tiger Cloud until the service is ready (status == "ready").
|
|
22
|
+
* Returns true if ready, false on timeout.
|
|
23
|
+
* Throws an error if the service is not found or tiger CLI is unavailable.
|
|
24
|
+
*/
|
|
25
|
+
async function waitForDatabase(serviceId, timeoutMs = 5 * 60 * 1000, intervalMs = 5000) {
|
|
26
|
+
const start = Date.now();
|
|
27
|
+
const { execSync } = await import("node:child_process");
|
|
28
|
+
while (Date.now() - start < timeoutMs) {
|
|
29
|
+
try {
|
|
30
|
+
const stdout = execSync(`tiger service get ${serviceId} -o json`, {
|
|
31
|
+
encoding: "utf-8",
|
|
32
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
33
|
+
});
|
|
34
|
+
const info = JSON.parse(stdout);
|
|
35
|
+
// Only return true when database is actually ready
|
|
36
|
+
if (info.status?.toLowerCase() === "ready") {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
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
|
|
50
|
+
}
|
|
51
|
+
await new Promise((r) => setTimeout(r, intervalMs));
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
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
|
+
}
|
|
137
|
+
function isExisting0pflow() {
|
|
138
|
+
try {
|
|
139
|
+
const pkgPath = join(process.cwd(), "package.json");
|
|
140
|
+
if (!existsSync(pkgPath))
|
|
141
|
+
return false;
|
|
142
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
143
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
144
|
+
return "0pflow" in deps;
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
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
|
+
}
|
|
184
|
+
const WELCOME_PROMPT = "Welcome to your 0pflow project! What workflow would you like to create? Here are some ideas:\n\n" +
|
|
185
|
+
'- "Enrich leads from a CSV file with company data"\n' +
|
|
186
|
+
'- "Monitor website uptime and send Slack alerts"\n' +
|
|
187
|
+
'- "Sync Salesforce contacts to our database nightly"\n' +
|
|
188
|
+
'- "Score and route inbound leads based on firmographics"\n\n' +
|
|
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
|
+
}
|
|
234
|
+
async function launchDevServer(cwd, { yolo = false } = {}) {
|
|
235
|
+
// Load .env from the app directory (not process.cwd(), which may be a parent)
|
|
236
|
+
try {
|
|
237
|
+
const { findEnvFile, loadEnv } = await import("./env.js");
|
|
238
|
+
const envPath = findEnvFile(cwd);
|
|
239
|
+
if (envPath)
|
|
240
|
+
loadEnv(envPath);
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
// Dev UI can work without env
|
|
244
|
+
}
|
|
245
|
+
// Detect dev mode (running from monorepo source) for --plugin-dir
|
|
246
|
+
const { packageRoot } = await import("./mcp/config.js");
|
|
247
|
+
const monorepoRoot = resolve(packageRoot, "..", "..");
|
|
248
|
+
const pluginDir = existsSync(resolve(monorepoRoot, "packages", "core")) ? monorepoRoot : undefined;
|
|
249
|
+
const { startDevServer } = await import("../dev-ui/index.js");
|
|
250
|
+
const { url } = await startDevServer({
|
|
251
|
+
projectRoot: cwd,
|
|
252
|
+
databaseUrl: process.env.DATABASE_URL,
|
|
253
|
+
nangoSecretKey: process.env.NANGO_SECRET_KEY,
|
|
254
|
+
claudePluginDir: pluginDir,
|
|
255
|
+
claudeSkipPermissions: yolo,
|
|
256
|
+
claudePrompt: WELCOME_PROMPT,
|
|
257
|
+
});
|
|
258
|
+
// Open browser
|
|
259
|
+
try {
|
|
260
|
+
const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
|
|
261
|
+
execSync(`${cmd} ${url}`, { stdio: "ignore" });
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
// Non-fatal — user can open manually
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
export async function runRun() {
|
|
268
|
+
p.intro(pc.red("0pflow"));
|
|
269
|
+
if (!isClaudeAvailable()) {
|
|
270
|
+
p.log.error("Claude Code CLI not found. Install it from https://claude.ai/code");
|
|
271
|
+
process.exit(1);
|
|
272
|
+
}
|
|
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 ───────────────────────
|
|
292
|
+
if (isExisting0pflow()) {
|
|
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",
|
|
302
|
+
options: [
|
|
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
|
+
},
|
|
312
|
+
],
|
|
313
|
+
});
|
|
314
|
+
if (p.isCancel(projectChoice)) {
|
|
315
|
+
p.cancel("Cancelled.");
|
|
316
|
+
process.exit(0);
|
|
317
|
+
}
|
|
318
|
+
if (projectChoice !== CREATE_NEW) {
|
|
319
|
+
await launchExistingProject(projectChoice);
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// ── Project name ────────────────────────────────────────────────────
|
|
324
|
+
const projectName = await p.text({
|
|
325
|
+
message: "Project name",
|
|
326
|
+
placeholder: "my-app",
|
|
327
|
+
validate(value) {
|
|
328
|
+
if (!value)
|
|
329
|
+
return "Project name is required";
|
|
330
|
+
if (!/^[a-z][a-z0-9-]*$/.test(value)) {
|
|
331
|
+
return "Must be lowercase letters, numbers, and hyphens (start with a letter)";
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
});
|
|
335
|
+
if (p.isCancel(projectName)) {
|
|
336
|
+
p.cancel("Cancelled.");
|
|
337
|
+
process.exit(0);
|
|
338
|
+
}
|
|
339
|
+
// ── Directory (always ~/0pflow/<name>) ────────────────────────────
|
|
340
|
+
const directory = join(homedir(), "0pflow", projectName);
|
|
341
|
+
// ── Tiger auth ────────────────────────────────────────────────────
|
|
342
|
+
ensureTigerAuth();
|
|
343
|
+
// ── Database ────────────────────────────────────────────────────────
|
|
344
|
+
const dbChoice = await p.select({
|
|
345
|
+
message: "Database setup",
|
|
346
|
+
options: [
|
|
347
|
+
{
|
|
348
|
+
value: "new",
|
|
349
|
+
label: "Create new Tiger Cloud database (free)",
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
value: "existing",
|
|
353
|
+
label: "Use existing Tiger Cloud database",
|
|
354
|
+
},
|
|
355
|
+
],
|
|
356
|
+
});
|
|
357
|
+
if (p.isCancel(dbChoice)) {
|
|
358
|
+
p.cancel("Cancelled.");
|
|
359
|
+
process.exit(0);
|
|
360
|
+
}
|
|
361
|
+
let serviceId;
|
|
362
|
+
if (dbChoice === "existing") {
|
|
363
|
+
// Fetch available databases from Tiger Cloud
|
|
364
|
+
let services = [];
|
|
365
|
+
try {
|
|
366
|
+
const stdout = execSync("tiger service list -o json", {
|
|
367
|
+
encoding: "utf-8",
|
|
368
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
369
|
+
});
|
|
370
|
+
services = JSON.parse(stdout);
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
// tiger CLI not available or not logged in
|
|
374
|
+
}
|
|
375
|
+
if (services.length > 0) {
|
|
376
|
+
const selected = await p.select({
|
|
377
|
+
message: "Select a database",
|
|
378
|
+
options: [
|
|
379
|
+
...services.map((s) => ({
|
|
380
|
+
value: s.service_id,
|
|
381
|
+
label: `${s.name} (${s.service_id})`,
|
|
382
|
+
hint: s.status,
|
|
383
|
+
})),
|
|
384
|
+
{ value: "__manual__", label: "Enter service ID manually" },
|
|
385
|
+
],
|
|
386
|
+
});
|
|
387
|
+
if (p.isCancel(selected)) {
|
|
388
|
+
p.cancel("Cancelled.");
|
|
389
|
+
process.exit(0);
|
|
390
|
+
}
|
|
391
|
+
if (selected === "__manual__") {
|
|
392
|
+
const sid = await p.text({
|
|
393
|
+
message: "Tiger Cloud service ID",
|
|
394
|
+
placeholder: "abc123def4",
|
|
395
|
+
validate(value) {
|
|
396
|
+
if (!value)
|
|
397
|
+
return "Service ID is required";
|
|
398
|
+
},
|
|
399
|
+
});
|
|
400
|
+
if (p.isCancel(sid)) {
|
|
401
|
+
p.cancel("Cancelled.");
|
|
402
|
+
process.exit(0);
|
|
403
|
+
}
|
|
404
|
+
serviceId = sid;
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
serviceId = selected;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
else {
|
|
411
|
+
p.log.warn("Could not fetch databases. Enter the service ID manually.");
|
|
412
|
+
const sid = await p.text({
|
|
413
|
+
message: "Tiger Cloud service ID",
|
|
414
|
+
placeholder: "abc123def4",
|
|
415
|
+
validate(value) {
|
|
416
|
+
if (!value)
|
|
417
|
+
return "Service ID is required";
|
|
418
|
+
},
|
|
419
|
+
});
|
|
420
|
+
if (p.isCancel(sid)) {
|
|
421
|
+
p.cancel("Cancelled.");
|
|
422
|
+
process.exit(0);
|
|
423
|
+
}
|
|
424
|
+
serviceId = sid;
|
|
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
|
+
}
|
|
433
|
+
}
|
|
434
|
+
// ── Execute ─────────────────────────────────────────────────────────
|
|
435
|
+
const s = p.spinner();
|
|
436
|
+
// Create database if needed (returns immediately with --no-wait)
|
|
437
|
+
if (dbChoice === "new") {
|
|
438
|
+
s.start("Creating Tiger Cloud database...");
|
|
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})`));
|
|
447
|
+
}
|
|
448
|
+
// Scaffold app
|
|
449
|
+
s.start("Scaffolding project...");
|
|
450
|
+
const scaffoldResult = await scaffoldApp({
|
|
451
|
+
appName: projectName,
|
|
452
|
+
directory,
|
|
453
|
+
installDeps: false,
|
|
454
|
+
});
|
|
455
|
+
if (!scaffoldResult.success) {
|
|
456
|
+
s.stop(pc.red("Failed to scaffold project"));
|
|
457
|
+
p.log.error(scaffoldResult.message);
|
|
458
|
+
process.exit(1);
|
|
459
|
+
}
|
|
460
|
+
s.stop(pc.green("Scaffolded project"));
|
|
461
|
+
// Install dependencies
|
|
462
|
+
const appPath = scaffoldResult.path;
|
|
463
|
+
s.start("Installing dependencies...");
|
|
464
|
+
try {
|
|
465
|
+
const execAsync = promisify(exec);
|
|
466
|
+
await execAsync("npm install --loglevel=error", { cwd: appPath });
|
|
467
|
+
s.stop(pc.green("Installed dependencies"));
|
|
468
|
+
}
|
|
469
|
+
catch (err) {
|
|
470
|
+
s.stop(pc.yellow("npm install failed (you can retry manually)"));
|
|
471
|
+
}
|
|
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);
|
|
480
|
+
}
|
|
481
|
+
s.stop(pc.green("Database is ready"));
|
|
482
|
+
}
|
|
483
|
+
if (serviceId) {
|
|
484
|
+
s.start("Configuring database schema...");
|
|
485
|
+
const schemaName = projectName.replace(/-/g, "_");
|
|
486
|
+
const schemaResult = await setupAppSchema({
|
|
487
|
+
directory: appPath,
|
|
488
|
+
serviceId,
|
|
489
|
+
appName: schemaName,
|
|
490
|
+
});
|
|
491
|
+
if (schemaResult.success) {
|
|
492
|
+
s.stop(pc.green("Database schema configured"));
|
|
493
|
+
}
|
|
494
|
+
else {
|
|
495
|
+
// Database might still be provisioning — try waiting
|
|
496
|
+
if (dbChoice === "new") {
|
|
497
|
+
s.message("Database still provisioning, waiting...");
|
|
498
|
+
const ready = await waitForDatabase(serviceId);
|
|
499
|
+
if (ready) {
|
|
500
|
+
const retry = await setupAppSchema({
|
|
501
|
+
directory: appPath,
|
|
502
|
+
serviceId,
|
|
503
|
+
appName: schemaName,
|
|
504
|
+
});
|
|
505
|
+
if (retry.success) {
|
|
506
|
+
s.stop(pc.green("Database schema configured"));
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
s.stop(pc.yellow("Schema setup failed"));
|
|
510
|
+
p.log.warn(retry.message);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
else {
|
|
514
|
+
s.stop(pc.yellow("Database not ready yet"));
|
|
515
|
+
p.log.warn(`Run later: 0pflow run won't retry. Use the MCP tools or set up manually.`);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
s.stop(pc.yellow("Schema setup failed"));
|
|
520
|
+
p.log.warn(schemaResult.message);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
// ── Launch? ─────────────────────────────────────────────────────────
|
|
525
|
+
const launchChoice = await p.select({
|
|
526
|
+
message: "Launch now?",
|
|
527
|
+
options: [
|
|
528
|
+
{ value: "normal", label: "Yes" },
|
|
529
|
+
{ value: "yolo", label: "Yes, with --dangerously-skip-permissions" },
|
|
530
|
+
{ value: "no", label: "No, I'll do it later" },
|
|
531
|
+
],
|
|
532
|
+
});
|
|
533
|
+
if (!p.isCancel(launchChoice) && launchChoice !== "no") {
|
|
534
|
+
p.outro(pc.green("Launching..."));
|
|
535
|
+
await launchDevServer(resolve(appPath), { yolo: launchChoice === "yolo" });
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
// ── Done ────────────────────────────────────────────────────────────
|
|
539
|
+
p.outro(pc.green(`Project created at ${directory}`));
|
|
540
|
+
console.log();
|
|
541
|
+
console.log(pc.bold(" To launch later:"));
|
|
542
|
+
console.log(pc.cyan(` cd ${directory} && 0pflow run`));
|
|
543
|
+
console.log();
|
|
544
|
+
}
|
|
545
|
+
//# 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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"}
|
package/dist/cli/trace.d.ts
CHANGED
|
@@ -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
|
*/
|