0pflow 0.1.0-dev.b4bf1ab → 0.1.0-dev.bdfaa95
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/deploy.d.ts +27 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +332 -0
- package/dist/cli/deploy.js.map +1 -0
- 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 +142 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/install.d.ts +4 -0
- package/dist/cli/install.d.ts.map +1 -1
- package/dist/cli/install.js +63 -32
- package/dist/cli/install.js.map +1 -1
- package/dist/cli/mcp/config.d.ts +0 -1
- package/dist/cli/mcp/config.d.ts.map +1 -1
- package/dist/cli/mcp/config.js +2 -4
- package/dist/cli/mcp/config.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 +231 -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 -129
- 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 +560 -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 +247 -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 +22 -0
- package/dist/connections/cloud-integration-provider.d.ts.map +1 -0
- package/dist/connections/cloud-integration-provider.js +41 -0
- package/dist/connections/cloud-integration-provider.js.map +1 -0
- package/dist/connections/connection-labels.d.ts +14 -0
- package/dist/connections/connection-labels.d.ts.map +1 -0
- package/dist/connections/connection-labels.js +46 -0
- package/dist/connections/connection-labels.js.map +1 -0
- package/dist/connections/index.d.ts +12 -0
- package/dist/connections/index.d.ts.map +1 -0
- package/dist/connections/index.js +10 -0
- package/dist/connections/index.js.map +1 -0
- package/dist/connections/integration-provider.d.ts +39 -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 +29 -0
- package/dist/connections/local-integration-provider.d.ts.map +1 -0
- package/dist/connections/local-integration-provider.js +70 -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 +18 -0
- package/dist/dev-ui/api.d.ts.map +1 -0
- package/dist/dev-ui/api.js +273 -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/deploy-api.d.ts +14 -0
- package/dist/dev-ui/deploy-api.d.ts.map +1 -0
- package/dist/dev-ui/deploy-api.js +112 -0
- package/dist/dev-ui/deploy-api.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 +273 -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 +166 -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-CFhxfKAk.js +176 -0
- package/dist/dev-ui-client/assets/index-D9wFwfPp.css +32 -0
- package/dist/dev-ui-client/assets/index-DAKTQEvj.js +1 -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 +146 -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 +30 -6
- package/templates/app/.dockerignore +6 -0
- package/templates/app/.env.example +13 -0
- package/templates/app/Dockerfile +34 -0
- package/templates/app/README.md +29 -0
- package/templates/app/biome.jsonc +81 -0
- package/templates/app/dbos-config.yaml +6 -0
- package/templates/app/drizzle.config.ts +12 -0
- package/templates/app/generated/registry.ts +8 -0
- package/templates/app/next.config.js +13 -0
- package/templates/app/package.json +57 -0
- package/templates/app/postcss.config.js +5 -0
- package/templates/app/public/favicon.ico +0 -0
- package/templates/app/src/app/_components/.gitkeep +0 -0
- package/templates/app/src/app/api/trpc/[trpc]/route.ts +34 -0
- package/templates/app/src/app/api/workflow/[name]/route.ts +37 -0
- package/templates/app/src/app/layout.tsx +29 -0
- package/templates/app/src/app/page.tsx +18 -0
- package/templates/app/src/env.js +46 -0
- package/templates/app/src/instrumentation.ts +6 -0
- package/templates/app/src/lib/pflow.ts +28 -0
- package/templates/app/src/server/api/root.ts +21 -0
- package/templates/app/src/server/api/routers/.gitkeep +0 -0
- package/templates/app/src/server/api/trpc.ts +106 -0
- package/templates/app/src/server/db/index.ts +18 -0
- package/templates/app/src/server/db/schema.ts +14 -0
- package/templates/app/src/styles/globals.css +6 -0
- package/templates/app/src/styles/globals.css.orange +126 -0
- package/templates/app/src/trpc/query-client.ts +25 -0
- package/templates/app/src/trpc/react.tsx +78 -0
- package/templates/app/src/trpc/server.ts +30 -0
- package/templates/app/tsconfig.check.json +23 -0
- package/templates/app/tsconfig.json +42 -0
- package/templates/app/tsconfig.server.json +5 -0
- package/templates/app/tsconfig.test.json +21 -0
package/dist/agent.js
CHANGED
|
@@ -1,43 +1,100 @@
|
|
|
1
1
|
import { DBOS } from "@dbos-inc/dbos-sdk";
|
|
2
2
|
import { parseAgentSpec } from "./nodes/agent/parser.js";
|
|
3
3
|
import { executeAgent } from "./nodes/agent/executor.js";
|
|
4
|
-
|
|
4
|
+
import { resolveConnectionId } from "./connections/index.js";
|
|
5
|
+
const AGENT_CONFIG_KEY = Symbol.for("opflow.getAgentRuntimeConfig()");
|
|
6
|
+
function getAgentRuntimeConfig() {
|
|
7
|
+
return globalThis[AGENT_CONFIG_KEY] ?? null;
|
|
8
|
+
}
|
|
5
9
|
/**
|
|
6
10
|
* Configure the agent runtime (called by factory)
|
|
7
11
|
* @internal
|
|
8
12
|
*/
|
|
9
13
|
export function configureAgentRuntime(config) {
|
|
10
|
-
|
|
14
|
+
globalThis[AGENT_CONFIG_KEY] = config;
|
|
11
15
|
}
|
|
12
16
|
/**
|
|
13
17
|
* Create a WorkflowContext for agent execution that wraps tool calls in DBOS steps
|
|
18
|
+
*
|
|
19
|
+
* @param agentName - The agent's own name (used as workflowName for DBOS child workflow)
|
|
20
|
+
* @param parentWorkflowName - The parent workflow name (for connection resolution)
|
|
21
|
+
* @param parentNodeName - The agent's node name within the parent workflow (for connection resolution)
|
|
14
22
|
*/
|
|
15
|
-
function createAgentContext() {
|
|
23
|
+
function createAgentContext(agentName, parentWorkflowName, parentNodeName) {
|
|
24
|
+
let _currentNodeName = "*";
|
|
25
|
+
let _currentIntegrations;
|
|
16
26
|
const ctx = {
|
|
27
|
+
workflowName: agentName,
|
|
17
28
|
run: async (executable, inputs) => {
|
|
18
29
|
// Validate inputs against schema
|
|
19
30
|
const validated = executable.inputSchema.parse(inputs);
|
|
31
|
+
// Track current node for connection resolution
|
|
32
|
+
_currentNodeName = executable.name;
|
|
33
|
+
_currentIntegrations = executable.integrations;
|
|
20
34
|
// Wrap execution in DBOS step for durability
|
|
21
35
|
return DBOS.runStep(async () => executable.execute(ctx, validated), { name: executable.name });
|
|
22
36
|
},
|
|
37
|
+
getConnection: async (integrationId) => {
|
|
38
|
+
const runtimeConfig = getAgentRuntimeConfig();
|
|
39
|
+
if (!runtimeConfig?.pool || !runtimeConfig?.integrationProvider) {
|
|
40
|
+
throw new Error("Connection management not configured. Set NANGO_SECRET_KEY and DATABASE_URL.");
|
|
41
|
+
}
|
|
42
|
+
// Validate that the integration was declared on the current node
|
|
43
|
+
if (_currentIntegrations && !_currentIntegrations.includes(integrationId)) {
|
|
44
|
+
const declared = _currentIntegrations.map(i => `"${i}"`).join(", ");
|
|
45
|
+
throw new Error(`Integration "${integrationId}" is not declared on node "${_currentNodeName}". ` +
|
|
46
|
+
`Declared integrations: [${declared}]. ` +
|
|
47
|
+
`Add "${integrationId}" to the node's integrations array.`);
|
|
48
|
+
}
|
|
49
|
+
// If the agent was called from a parent workflow, use the parent's
|
|
50
|
+
// workflow name and the agent's node name within that workflow for
|
|
51
|
+
// connection resolution. This matches how connections are configured
|
|
52
|
+
// in the DB (workflow_name + node_name).
|
|
53
|
+
const resolveWorkflow = parentWorkflowName ?? agentName;
|
|
54
|
+
const resolveNode = parentNodeName ?? _currentNodeName;
|
|
55
|
+
const connectionId = await resolveConnectionId(runtimeConfig.pool, resolveWorkflow, resolveNode, integrationId, runtimeConfig.appSchema);
|
|
56
|
+
if (!connectionId) {
|
|
57
|
+
throw new Error(`No connection configured for integration "${integrationId}" ` +
|
|
58
|
+
`(workflow="${resolveWorkflow}", node="${resolveNode}"). ` +
|
|
59
|
+
`Configure it in the Dev UI or set a global default.`);
|
|
60
|
+
}
|
|
61
|
+
return runtimeConfig.integrationProvider.fetchCredentials(integrationId, connectionId);
|
|
62
|
+
},
|
|
23
63
|
log: (message, level = "info") => {
|
|
24
64
|
DBOS.logger[level](message);
|
|
25
65
|
},
|
|
26
66
|
};
|
|
27
67
|
return ctx;
|
|
28
68
|
}
|
|
69
|
+
// Global cache for agent executables to prevent duplicate DBOS registration
|
|
70
|
+
// when bundlers (Turbopack) re-evaluate the same module in multiple chunks.
|
|
71
|
+
const AGENT_CACHE_KEY = Symbol.for("opflow.agentCache");
|
|
72
|
+
function getAgentCache() {
|
|
73
|
+
const g = globalThis;
|
|
74
|
+
if (!g[AGENT_CACHE_KEY])
|
|
75
|
+
g[AGENT_CACHE_KEY] = new Map();
|
|
76
|
+
return g[AGENT_CACHE_KEY];
|
|
77
|
+
}
|
|
29
78
|
/**
|
|
30
79
|
* Factory for creating agent executables
|
|
31
80
|
*/
|
|
32
81
|
export const Agent = {
|
|
33
82
|
create(definition) {
|
|
83
|
+
// Return cached executable if already registered (bundler re-evaluation)
|
|
84
|
+
const cached = getAgentCache().get(definition.name);
|
|
85
|
+
if (cached)
|
|
86
|
+
return cached;
|
|
34
87
|
const tools = definition.tools ?? {};
|
|
88
|
+
// Parent workflow context info, captured before DBOS child workflow starts
|
|
89
|
+
let _parentWorkflowName;
|
|
90
|
+
let _parentNodeName;
|
|
35
91
|
// Create the DBOS-registered workflow function for this agent
|
|
36
92
|
async function agentWorkflowImpl(inputs) {
|
|
37
|
-
|
|
93
|
+
const runtimeConfig = getAgentRuntimeConfig();
|
|
94
|
+
if (!runtimeConfig) {
|
|
38
95
|
throw new Error("Agent runtime not configured. Make sure to use create0pflow() before executing agents.");
|
|
39
96
|
}
|
|
40
|
-
const ctx = createAgentContext();
|
|
97
|
+
const ctx = createAgentContext(definition.name, _parentWorkflowName, _parentNodeName);
|
|
41
98
|
// Parse the agent spec (for system prompt and model override)
|
|
42
99
|
const spec = await parseAgentSpec(definition.specPath);
|
|
43
100
|
// Convert inputs to a user message string
|
|
@@ -49,9 +106,10 @@ export const Agent = {
|
|
|
49
106
|
spec,
|
|
50
107
|
userMessage,
|
|
51
108
|
tools,
|
|
52
|
-
nodeRegistry:
|
|
53
|
-
modelConfig:
|
|
109
|
+
nodeRegistry: runtimeConfig.nodeRegistry,
|
|
110
|
+
modelConfig: runtimeConfig.modelConfig,
|
|
54
111
|
outputSchema: definition.outputSchema,
|
|
112
|
+
integrations: definition.integrations,
|
|
55
113
|
});
|
|
56
114
|
return result.output;
|
|
57
115
|
}
|
|
@@ -59,7 +117,7 @@ export const Agent = {
|
|
|
59
117
|
const durableAgentWorkflow = DBOS.registerWorkflow(agentWorkflowImpl, {
|
|
60
118
|
name: definition.name,
|
|
61
119
|
});
|
|
62
|
-
|
|
120
|
+
const executable = {
|
|
63
121
|
name: definition.name,
|
|
64
122
|
type: "agent",
|
|
65
123
|
description: definition.description,
|
|
@@ -67,9 +125,16 @@ export const Agent = {
|
|
|
67
125
|
outputSchema: definition.outputSchema,
|
|
68
126
|
specPath: definition.specPath,
|
|
69
127
|
tools,
|
|
70
|
-
|
|
71
|
-
|
|
128
|
+
integrations: definition.integrations,
|
|
129
|
+
// Capture parent workflow context for connection resolution, then run as DBOS child workflow
|
|
130
|
+
execute: (parentCtx, inputs) => {
|
|
131
|
+
_parentWorkflowName = parentCtx.workflowName;
|
|
132
|
+
_parentNodeName = definition.name;
|
|
133
|
+
return durableAgentWorkflow(inputs);
|
|
134
|
+
},
|
|
72
135
|
};
|
|
136
|
+
getAgentCache().set(definition.name, executable);
|
|
137
|
+
return executable;
|
|
73
138
|
},
|
|
74
139
|
};
|
|
75
140
|
//# sourceMappingURL=agent.js.map
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AA2C7D,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AAEtE,SAAS,qBAAqB;IAC5B,OAAQ,UAAwD,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;AAC7F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA0B;IAC7D,UAAwD,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;AACvF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CACzB,SAAiB,EACjB,kBAA2B,EAC3B,cAAuB;IAEvB,IAAI,gBAAgB,GAAG,GAAG,CAAC;IAC3B,IAAI,oBAA0C,CAAC;IAE/C,MAAM,GAAG,GAAoB;QAC3B,YAAY,EAAE,SAAS;QAEvB,GAAG,EAAE,KAAK,EACR,UAAuC,EACvC,MAAc,EACI,EAAE;YACpB,iCAAiC;YACjC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEvD,+CAA+C;YAC/C,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC;YACnC,oBAAoB,GAAG,UAAU,CAAC,YAAY,CAAC;YAE/C,6CAA6C;YAC7C,OAAO,IAAI,CAAC,OAAO,CACjB,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,EAC9C,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAC1B,CAAC;QACJ,CAAC;QAED,aAAa,EAAE,KAAK,EAAE,aAAqB,EAAkC,EAAE;YAC7E,MAAM,aAAa,GAAG,qBAAqB,EAAE,CAAC;YAC9C,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,mBAAmB,EAAE,CAAC;gBAChE,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;YACJ,CAAC;YAED,iEAAiE;YACjE,IAAI,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpE,MAAM,IAAI,KAAK,CACb,gBAAgB,aAAa,8BAA8B,gBAAgB,KAAK;oBAChF,2BAA2B,QAAQ,KAAK;oBACxC,QAAQ,aAAa,qCAAqC,CAC3D,CAAC;YACJ,CAAC;YAED,mEAAmE;YACnE,mEAAmE;YACnE,qEAAqE;YACrE,yCAAyC;YACzC,MAAM,eAAe,GAAG,kBAAkB,IAAI,SAAS,CAAC;YACxD,MAAM,WAAW,GAAG,cAAc,IAAI,gBAAgB,CAAC;YAEvD,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAC5C,aAAa,CAAC,IAAI,EAClB,eAAe,EACf,WAAW,EACX,aAAa,EACb,aAAa,CAAC,SAAS,CACxB,CAAC;YAEF,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CACb,6CAA6C,aAAa,IAAI;oBAC9D,cAAc,eAAe,YAAY,WAAW,MAAM;oBAC1D,qDAAqD,CACtD,CAAC;YACJ,CAAC;YAED,OAAO,aAAa,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QACzF,CAAC;QAED,GAAG,EAAE,CAAC,OAAe,EAAE,QAAkB,MAAM,EAAE,EAAE;YACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACxD,SAAS,aAAa;IACpB,MAAM,CAAC,GAAG,UAA0D,CAAC;IACrE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC;QAAE,CAAC,CAAC,eAAe,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;IACxD,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,MAAM,CACJ,UAA4C;QAE5C,yEAAyE;QACzE,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,MAAM;YAAE,OAAO,MAA0C,CAAC;QAE9D,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;QAErC,2EAA2E;QAC3E,IAAI,mBAAuC,CAAC;QAC5C,IAAI,eAAmC,CAAC;QAExC,8DAA8D;QAC9D,KAAK,UAAU,iBAAiB,CAAC,MAAc;YAC7C,MAAM,aAAa,GAAG,qBAAqB,EAAE,CAAC;YAC9C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAG,kBAAkB,CAC5B,UAAU,CAAC,IAAI,EACf,mBAAmB,EACnB,eAAe,CAChB,CAAC;YAEF,8DAA8D;YAC9D,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAEvD,0CAA0C;YAC1C,gEAAgE;YAChE,MAAM,WAAW,GACf,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAExE,+CAA+C;YAC/C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,GAAG;gBACH,IAAI;gBACJ,WAAW;gBACX,KAAK;gBACL,YAAY,EAAE,aAAa,CAAC,YAAY;gBACxC,WAAW,EAAE,aAAa,CAAC,WAAW;gBACtC,YAAY,EAAE,UAAU,CAAC,YAAY;gBACrC,YAAY,EAAE,UAAU,CAAC,YAAY;aACtC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,MAAiB,CAAC;QAClC,CAAC;QAED,mFAAmF;QACnF,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE;YACpE,IAAI,EAAE,UAAU,CAAC,IAAI;SACtB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAqC;YACnD,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,KAAK;YACL,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,6FAA6F;YAC7F,OAAO,EAAE,CAAC,SAA0B,EAAE,MAAc,EAAE,EAAE;gBACtD,mBAAmB,GAAG,SAAS,CAAC,YAAY,CAAC;gBAC7C,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC;gBAClC,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;SACF,CAAC;QAEF,aAAa,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,UAA6B,CAAC,CAAC;QACpE,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC"}
|
|
@@ -9,7 +9,7 @@ describe("discoverWorkflows", () => {
|
|
|
9
9
|
expect(result.warnings).toEqual([]);
|
|
10
10
|
});
|
|
11
11
|
it("discovers workflow executables from uptime-app", async () => {
|
|
12
|
-
const projectRoot = path.resolve(__dirname, "
|
|
12
|
+
const projectRoot = path.resolve(__dirname, "../../../../..");
|
|
13
13
|
const uptimeApp = path.join(projectRoot, "examples/uptime-app");
|
|
14
14
|
const result = await discoverWorkflows(uptimeApp);
|
|
15
15
|
expect(result.workflows.length).toBeGreaterThan(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/discovery.test.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"discovery.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/discovery.test.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACnD,yDAAyD;QACzD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,uEAAuE;QACvE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/cli/app.d.ts
CHANGED
|
@@ -3,4 +3,10 @@
|
|
|
3
3
|
* Returns undefined if not found
|
|
4
4
|
*/
|
|
5
5
|
export declare function getAppName(): string | undefined;
|
|
6
|
+
/**
|
|
7
|
+
* Get the app schema name from DATABASE_SCHEMA in the project's .env file.
|
|
8
|
+
* This is the canonical source — written by setup_app_schema.
|
|
9
|
+
* @param projectRoot Directory containing the .env file (defaults to cwd)
|
|
10
|
+
*/
|
|
11
|
+
export declare function getAppSchema(projectRoot?: string): string;
|
|
6
12
|
//# sourceMappingURL=app.d.ts.map
|
package/dist/cli/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,SAAS,CAa/C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BzD"}
|
package/dist/cli/app.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// packages/cli/src/app.ts
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
import path from "path";
|
|
4
|
+
import * as dotenv from "dotenv";
|
|
4
5
|
/**
|
|
5
6
|
* Get the app name from package.json in cwd
|
|
6
7
|
* Returns undefined if not found
|
|
@@ -18,4 +19,30 @@ export function getAppName() {
|
|
|
18
19
|
return undefined;
|
|
19
20
|
}
|
|
20
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Get the app schema name from DATABASE_SCHEMA in the project's .env file.
|
|
24
|
+
* This is the canonical source — written by setup_app_schema.
|
|
25
|
+
* @param projectRoot Directory containing the .env file (defaults to cwd)
|
|
26
|
+
*/
|
|
27
|
+
export function getAppSchema(projectRoot) {
|
|
28
|
+
const envPath = path.join(projectRoot ?? process.cwd(), ".env");
|
|
29
|
+
if (!fs.existsSync(envPath)) {
|
|
30
|
+
throw new Error("DATABASE_SCHEMA not found in .env file. " +
|
|
31
|
+
"Run setup_app_schema to configure the database.");
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const env = dotenv.parse(fs.readFileSync(envPath, "utf-8"));
|
|
35
|
+
if (!env.DATABASE_SCHEMA) {
|
|
36
|
+
throw new Error("DATABASE_SCHEMA not found in .env file. " +
|
|
37
|
+
"Run setup_app_schema to configure the database.");
|
|
38
|
+
}
|
|
39
|
+
return env.DATABASE_SCHEMA;
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
if (err instanceof Error && err.message.includes("DATABASE_SCHEMA"))
|
|
43
|
+
throw err;
|
|
44
|
+
throw new Error("DATABASE_SCHEMA not found in .env file. " +
|
|
45
|
+
"Run setup_app_schema to configure the database.");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
21
48
|
//# sourceMappingURL=app.js.map
|
package/dist/cli/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IAEzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,WAAoB;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAEhE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,0CAA0C;YAC1C,iDAAiD,CAClD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,0CAA0C;gBAC1C,iDAAiD,CAClD,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC,eAAe,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAAE,MAAM,GAAG,CAAC;QAC/E,MAAM,IAAI,KAAK,CACb,0CAA0C;YAC1C,iDAAiD,CAClD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type DeployStep = "preflight" | "committing" | "authenticating" | "preparing" | "packaging" | "uploading" | "polling" | "done" | "error";
|
|
2
|
+
export interface DeployProgress {
|
|
3
|
+
step: DeployStep;
|
|
4
|
+
message?: string;
|
|
5
|
+
url?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface DeployOptions {
|
|
8
|
+
verbose?: boolean;
|
|
9
|
+
/** Progress callback for programmatic use (Dev UI SSE). */
|
|
10
|
+
onProgress?: (progress: DeployProgress) => void;
|
|
11
|
+
}
|
|
12
|
+
export interface DeployResult {
|
|
13
|
+
success: boolean;
|
|
14
|
+
url?: string;
|
|
15
|
+
error?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Core deploy logic — usable by both CLI and Dev UI server.
|
|
19
|
+
*/
|
|
20
|
+
export declare function deploy(projectDir: string, options?: DeployOptions): Promise<DeployResult>;
|
|
21
|
+
/**
|
|
22
|
+
* CLI entry point for `0pflow deploy`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function runDeploy(options?: {
|
|
25
|
+
verbose?: boolean;
|
|
26
|
+
}): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/cli/deploy.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,UAAU,GAClB,WAAW,GACX,YAAY,GACZ,gBAAgB,GAChB,WAAW,GACX,WAAW,GACX,WAAW,GACX,SAAS,GACT,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkBD;;GAEG;AACH,wBAAsB,MAAM,CAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAgNvB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,IAAI,CAAC,CA6Cf"}
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
import { readFileSync, existsSync, mkdtempSync, rmSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { execSync } from "node:child_process";
|
|
5
|
+
import * as p from "@clack/prompts";
|
|
6
|
+
import pc from "picocolors";
|
|
7
|
+
import * as dotenv from "dotenv";
|
|
8
|
+
import { apiCall } from "../connections/cloud-client.js";
|
|
9
|
+
import { isAuthenticated, authenticate } from "../connections/cloud-auth.js";
|
|
10
|
+
// Files/directories to exclude from the deployment tarball
|
|
11
|
+
const EXCLUDE_PATTERNS = [
|
|
12
|
+
"node_modules",
|
|
13
|
+
".git",
|
|
14
|
+
"dist",
|
|
15
|
+
".dbos",
|
|
16
|
+
".next",
|
|
17
|
+
"venv",
|
|
18
|
+
".venv",
|
|
19
|
+
".python-version",
|
|
20
|
+
"dbos-config.yaml",
|
|
21
|
+
".env",
|
|
22
|
+
".env.local",
|
|
23
|
+
"package-lock.json",
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Core deploy logic — usable by both CLI and Dev UI server.
|
|
27
|
+
*/
|
|
28
|
+
export async function deploy(projectDir, options = {}) {
|
|
29
|
+
const progress = options.onProgress ?? (() => { });
|
|
30
|
+
// ── Step 1: Pre-flight checks ──────────────────────────────────
|
|
31
|
+
progress({ step: "preflight", message: "Running pre-flight checks..." });
|
|
32
|
+
const pkgPath = join(projectDir, "package.json");
|
|
33
|
+
if (!existsSync(pkgPath)) {
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
error: "No package.json found. Run from a 0pflow app directory.",
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
40
|
+
if (!pkg.dependencies?.["0pflow"]) {
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
error: "Not a 0pflow app (0pflow not in dependencies).",
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (!pkg.name) {
|
|
47
|
+
return { success: false, error: "package.json is missing a name field." };
|
|
48
|
+
}
|
|
49
|
+
const envPath = join(projectDir, ".env");
|
|
50
|
+
if (!existsSync(envPath)) {
|
|
51
|
+
return { success: false, error: ".env file not found. Run setup first." };
|
|
52
|
+
}
|
|
53
|
+
const env = dotenv.parse(readFileSync(envPath, "utf-8"));
|
|
54
|
+
if (!env.DATABASE_URL) {
|
|
55
|
+
return { success: false, error: "DATABASE_URL not found in .env." };
|
|
56
|
+
}
|
|
57
|
+
const appName = pkg.name;
|
|
58
|
+
// ── Step 1b: Auto-commit if working tree is dirty ──────────────
|
|
59
|
+
let commitHash;
|
|
60
|
+
try {
|
|
61
|
+
const isDirty = execSync("git status --porcelain", {
|
|
62
|
+
cwd: projectDir,
|
|
63
|
+
encoding: "utf-8",
|
|
64
|
+
}).trim();
|
|
65
|
+
if (isDirty) {
|
|
66
|
+
progress({ step: "committing", message: "Committing changes..." });
|
|
67
|
+
// generateCommitMessage stages files (git add -A) internally
|
|
68
|
+
const message = generateCommitMessage(projectDir);
|
|
69
|
+
execSync(`git commit -m ${JSON.stringify(message)}`, {
|
|
70
|
+
cwd: projectDir,
|
|
71
|
+
stdio: "pipe",
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
commitHash = execSync("git rev-parse --short HEAD", {
|
|
75
|
+
cwd: projectDir,
|
|
76
|
+
encoding: "utf-8",
|
|
77
|
+
}).trim();
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Not a git repo or git not available — continue without hash
|
|
81
|
+
}
|
|
82
|
+
// ── Step 2: Authenticate ───────────────────────────────────────
|
|
83
|
+
progress({ step: "authenticating", message: "Checking authentication..." });
|
|
84
|
+
if (!isAuthenticated()) {
|
|
85
|
+
await authenticate();
|
|
86
|
+
if (!isAuthenticated()) {
|
|
87
|
+
return {
|
|
88
|
+
success: false,
|
|
89
|
+
error: "Not authenticated. Run `0pflow login` first.",
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// ── Step 3: Prepare (create Fly app) ──────────────────────────
|
|
94
|
+
progress({ step: "preparing", message: "Preparing deployment..." });
|
|
95
|
+
let appUrl;
|
|
96
|
+
try {
|
|
97
|
+
const result = (await apiCall("POST", "/api/deploy/prepare", {
|
|
98
|
+
appName,
|
|
99
|
+
}));
|
|
100
|
+
appUrl = result.appUrl;
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
return {
|
|
104
|
+
success: false,
|
|
105
|
+
error: `Prepare failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// ── Step 4: Package app as tar.gz ──────────────────────────────
|
|
109
|
+
progress({ step: "packaging", message: "Packaging application..." });
|
|
110
|
+
let archive;
|
|
111
|
+
try {
|
|
112
|
+
archive = createDeploymentTarball(projectDir);
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
error: `Packaging failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// ── Step 5: Push (upload + kick off build) ─────────────────────
|
|
121
|
+
progress({ step: "uploading", message: "Uploading and building..." });
|
|
122
|
+
// Filter env vars — exclude setup-only keys
|
|
123
|
+
const envVarsToSync = {};
|
|
124
|
+
const skipKeys = new Set([
|
|
125
|
+
"DBOS_ADMIN_URL",
|
|
126
|
+
"DBOS_SYSTEM_DATABASE_URL",
|
|
127
|
+
"DBOS_CONDUCTOR_KEY",
|
|
128
|
+
]);
|
|
129
|
+
for (const [key, value] of Object.entries(env)) {
|
|
130
|
+
if (!skipKeys.has(key)) {
|
|
131
|
+
envVarsToSync[key] = value;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Include OPFLOW_TOKEN for runtime integration credential fetching
|
|
135
|
+
const { getToken } = await import("../connections/cloud-auth.js");
|
|
136
|
+
const opflowToken = getToken();
|
|
137
|
+
if (opflowToken) {
|
|
138
|
+
envVarsToSync.OPFLOW_TOKEN = opflowToken;
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
await apiCall("POST", "/api/deploy/push", {
|
|
142
|
+
appName,
|
|
143
|
+
archive,
|
|
144
|
+
envVars: envVarsToSync,
|
|
145
|
+
commitHash,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
return {
|
|
150
|
+
success: false,
|
|
151
|
+
error: `Push failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// ── Step 6: Poll for build + service availability ──────────────
|
|
155
|
+
progress({
|
|
156
|
+
step: "polling",
|
|
157
|
+
message: "Building and starting app...",
|
|
158
|
+
});
|
|
159
|
+
const stalledTimeout = 3 * 60 * 1000; // 3 minutes since last status change
|
|
160
|
+
const pollInterval = 3000; // 3 seconds
|
|
161
|
+
let lastStatusKey = "";
|
|
162
|
+
let lastChangeTime = Date.now();
|
|
163
|
+
while (true) {
|
|
164
|
+
await new Promise((r) => setTimeout(r, pollInterval));
|
|
165
|
+
try {
|
|
166
|
+
const status = (await apiCall("GET", `/api/deploy/status?appName=${encodeURIComponent(appName)}`));
|
|
167
|
+
// Track status changes to reset the stalled timer
|
|
168
|
+
const statusKey = `${status.status}:${status.message ?? ""}`;
|
|
169
|
+
if (statusKey !== lastStatusKey) {
|
|
170
|
+
lastStatusKey = statusKey;
|
|
171
|
+
lastChangeTime = Date.now();
|
|
172
|
+
}
|
|
173
|
+
if (status.status === "running") {
|
|
174
|
+
const url = status.url ?? appUrl;
|
|
175
|
+
progress({ step: "done", url });
|
|
176
|
+
return { success: true, url };
|
|
177
|
+
}
|
|
178
|
+
if (status.status === "build_error") {
|
|
179
|
+
return {
|
|
180
|
+
success: false,
|
|
181
|
+
error: `Build failed: ${status.error ?? "Unknown error"}. Check logs with: 0pflow deploy --logs`,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
// Update progress message based on current step
|
|
185
|
+
if (status.status === "building") {
|
|
186
|
+
progress({
|
|
187
|
+
step: "polling",
|
|
188
|
+
message: status.message ?? "Building application...",
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
else if (status.status === "starting") {
|
|
192
|
+
progress({
|
|
193
|
+
step: "polling",
|
|
194
|
+
message: "Starting application...",
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// Continue polling on transient errors
|
|
200
|
+
}
|
|
201
|
+
if (Date.now() - lastChangeTime > stalledTimeout) {
|
|
202
|
+
return {
|
|
203
|
+
success: false,
|
|
204
|
+
error: "Timed out — deploy appears stalled (no progress for 3 minutes).",
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* CLI entry point for `0pflow deploy`.
|
|
211
|
+
*/
|
|
212
|
+
export async function runDeploy(options = {}) {
|
|
213
|
+
p.intro(pc.bold("0pflow deploy"));
|
|
214
|
+
const s = p.spinner();
|
|
215
|
+
let currentStep = "";
|
|
216
|
+
let currentMessage = "";
|
|
217
|
+
const result = await deploy(process.cwd(), {
|
|
218
|
+
verbose: options.verbose,
|
|
219
|
+
onProgress: (prog) => {
|
|
220
|
+
if (prog.step === "done") {
|
|
221
|
+
s.stop(pc.green("App is available!"));
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (prog.step === "error") {
|
|
225
|
+
s.stop(pc.red(prog.message ?? "Error"));
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
if (prog.message) {
|
|
229
|
+
if (prog.step !== currentStep) {
|
|
230
|
+
if (currentStep) {
|
|
231
|
+
s.stop(pc.green("Done"));
|
|
232
|
+
}
|
|
233
|
+
currentStep = prog.step;
|
|
234
|
+
currentMessage = prog.message;
|
|
235
|
+
s.start(prog.message);
|
|
236
|
+
}
|
|
237
|
+
else if (prog.message !== currentMessage) {
|
|
238
|
+
currentMessage = prog.message;
|
|
239
|
+
s.message(prog.message);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
});
|
|
244
|
+
if (result.success) {
|
|
245
|
+
if (result.url) {
|
|
246
|
+
p.log.info(`URL: ${pc.cyan(result.url)}`);
|
|
247
|
+
}
|
|
248
|
+
p.outro(pc.green("Deploy complete!"));
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
p.log.error(result.error ?? "Deploy failed");
|
|
252
|
+
p.outro(pc.red("Deploy failed"));
|
|
253
|
+
process.exit(1);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// ── Auto-Commit ──────────────────────────────────────────────────
|
|
257
|
+
/**
|
|
258
|
+
* Generate a commit message for pre-deploy auto-commit.
|
|
259
|
+
* Tries `claude` CLI for a full message; falls back to a heuristic.
|
|
260
|
+
*/
|
|
261
|
+
function generateCommitMessage(projectDir) {
|
|
262
|
+
// Try claude CLI for a full commit message
|
|
263
|
+
try {
|
|
264
|
+
// Stage everything so we can get the full diff
|
|
265
|
+
execSync("git add -A", { cwd: projectDir, stdio: "pipe" });
|
|
266
|
+
const diffContent = execSync("git diff --cached", {
|
|
267
|
+
cwd: projectDir,
|
|
268
|
+
encoding: "utf-8",
|
|
269
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
270
|
+
maxBuffer: 100_000,
|
|
271
|
+
}).trim();
|
|
272
|
+
if (diffContent) {
|
|
273
|
+
const prompt = `Write a git commit message for these changes. Use conventional commit format (e.g. feat:, fix:, chore:). Include a short subject line and a body with bullet points if there are multiple changes. Do not include any explanation or markdown formatting — just the raw commit message text.\n\n${diffContent.slice(0, 8000)}`;
|
|
274
|
+
const message = execSync(`claude -p ${JSON.stringify(prompt)}`, {
|
|
275
|
+
cwd: projectDir,
|
|
276
|
+
encoding: "utf-8",
|
|
277
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
278
|
+
timeout: 30_000,
|
|
279
|
+
}).trim();
|
|
280
|
+
if (message && message.length > 5 && message.length < 2000) {
|
|
281
|
+
return message;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
// claude CLI not available or failed — fall through to heuristic
|
|
287
|
+
}
|
|
288
|
+
// Heuristic fallback: summarize changed files
|
|
289
|
+
try {
|
|
290
|
+
const stat = execSync("git diff --cached --stat", {
|
|
291
|
+
cwd: projectDir,
|
|
292
|
+
encoding: "utf-8",
|
|
293
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
294
|
+
}).trim();
|
|
295
|
+
const lines = stat.split("\n").filter((l) => l.includes("|"));
|
|
296
|
+
const files = lines.map((l) => l.split("|")[0].trim());
|
|
297
|
+
if (files.length <= 3) {
|
|
298
|
+
return `deploy: update ${files.join(", ")}`;
|
|
299
|
+
}
|
|
300
|
+
return `deploy: update ${files.length} files`;
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
return "deploy: pre-deploy commit";
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
// ── Tarball Packaging ─────────────────────────────────────────────
|
|
307
|
+
/**
|
|
308
|
+
* Create a deployment tar.gz as a base64 string using system tar.
|
|
309
|
+
*/
|
|
310
|
+
function createDeploymentTarball(projectDir) {
|
|
311
|
+
const tmpDir = mkdtempSync(join(tmpdir(), "opflow-deploy-"));
|
|
312
|
+
const tarPath = join(tmpDir, "app.tar.gz");
|
|
313
|
+
try {
|
|
314
|
+
const excludeArgs = EXCLUDE_PATTERNS.map((p) => `--exclude=${p}`).join(" ");
|
|
315
|
+
execSync(`tar czf ${tarPath} ${excludeArgs} .`, {
|
|
316
|
+
cwd: projectDir,
|
|
317
|
+
stdio: "pipe",
|
|
318
|
+
});
|
|
319
|
+
const tarBuffer = readFileSync(tarPath);
|
|
320
|
+
return tarBuffer.toString("base64");
|
|
321
|
+
}
|
|
322
|
+
finally {
|
|
323
|
+
// Clean up temp dir
|
|
324
|
+
try {
|
|
325
|
+
rmSync(tmpDir, { recursive: true });
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
// Ignore cleanup errors
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/cli/deploy.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/discovery.d.ts
CHANGED
|
@@ -8,6 +8,10 @@ export interface NodeDiscoveryResult {
|
|
|
8
8
|
nodes: Record<string, AnyExecutable>;
|
|
9
9
|
warnings: string[];
|
|
10
10
|
}
|
|
11
|
+
export interface AgentDiscoveryResult {
|
|
12
|
+
agents: Record<string, AnyExecutable>;
|
|
13
|
+
warnings: string[];
|
|
14
|
+
}
|
|
11
15
|
/**
|
|
12
16
|
* Discover and load workflow executables from generated/workflows/ directory
|
|
13
17
|
* Uses jiti to load TypeScript files directly without compilation
|
|
@@ -20,5 +24,11 @@ export declare function discoverWorkflows(projectDir: string): Promise<Discovery
|
|
|
20
24
|
* Returns nodes indexed by name and any warnings
|
|
21
25
|
*/
|
|
22
26
|
export declare function discoverNodes(projectDir: string): Promise<NodeDiscoveryResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Discover and load agent executables from agents/ directory
|
|
29
|
+
* Uses jiti to load TypeScript files directly without compilation
|
|
30
|
+
* Returns agents indexed by name and any warnings
|
|
31
|
+
*/
|
|
32
|
+
export declare function discoverAgents(projectDir: string): Promise<AgentDiscoveryResult>;
|
|
23
33
|
export {};
|
|
24
34
|
//# sourceMappingURL=discovery.d.ts.map
|