0pflow 0.1.0-dev.303bb09 → 0.1.0-dev.3666a4d
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__/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 +1 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +17 -2
- package/dist/agent.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 +31 -0
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/cloud-dev.d.ts +7 -0
- package/dist/cli/cloud-dev.d.ts.map +1 -0
- package/dist/cli/cloud-dev.js +571 -0
- package/dist/cli/cloud-dev.js.map +1 -0
- 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.map +1 -1
- package/dist/cli/discovery.js +14 -1
- package/dist/cli/discovery.js.map +1 -1
- package/dist/cli/env.d.ts +3 -1
- package/dist/cli/env.d.ts.map +1 -1
- package/dist/cli/env.js +8 -3
- package/dist/cli/env.js.map +1 -1
- package/dist/cli/index.js +103 -7
- 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 +32 -37
- package/dist/cli/install.js.map +1 -1
- package/dist/cli/mcp/lib/scaffolding.d.ts.map +1 -1
- package/dist/cli/mcp/lib/scaffolding.js +38 -20
- package/dist/cli/mcp/lib/scaffolding.js.map +1 -1
- package/dist/cli/mcp/tools/getConnectionInfo.d.ts.map +1 -1
- package/dist/cli/mcp/tools/getConnectionInfo.js +4 -10
- package/dist/cli/mcp/tools/getConnectionInfo.js.map +1 -1
- package/dist/cli/mcp/tools/index.d.ts +0 -7
- package/dist/cli/mcp/tools/index.d.ts.map +1 -1
- package/dist/cli/mcp/tools/index.js +0 -2
- package/dist/cli/mcp/tools/index.js.map +1 -1
- 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/connections/cloud-auth.d.ts.map +1 -1
- package/dist/connections/cloud-auth.js +5 -1
- package/dist/connections/cloud-auth.js.map +1 -1
- package/dist/connections/cloud-client.d.ts.map +1 -1
- package/dist/connections/cloud-client.js +10 -3
- package/dist/connections/cloud-client.js.map +1 -1
- package/dist/connections/cloud-integration-provider.d.ts +2 -1
- package/dist/connections/cloud-integration-provider.d.ts.map +1 -1
- package/dist/connections/cloud-integration-provider.js +18 -2
- package/dist/connections/cloud-integration-provider.js.map +1 -1
- 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 +1 -0
- package/dist/connections/index.d.ts.map +1 -1
- package/dist/connections/index.js +1 -0
- package/dist/connections/index.js.map +1 -1
- package/dist/connections/integration-provider.d.ts +1 -0
- package/dist/connections/integration-provider.d.ts.map +1 -1
- package/dist/connections/local-integration-provider.d.ts +2 -1
- package/dist/connections/local-integration-provider.d.ts.map +1 -1
- package/dist/connections/local-integration-provider.js +20 -3
- package/dist/connections/local-integration-provider.js.map +1 -1
- package/dist/connections/nango-client.d.ts +1 -1
- package/dist/connections/nango-client.d.ts.map +1 -1
- package/dist/connections/nango-client.js +3 -2
- package/dist/connections/nango-client.js.map +1 -1
- package/dist/connections/resolver.d.ts +4 -4
- package/dist/connections/resolver.d.ts.map +1 -1
- package/dist/connections/resolver.js +12 -8
- package/dist/connections/resolver.js.map +1 -1
- package/dist/connections/schema.d.ts +3 -1
- package/dist/connections/schema.d.ts.map +1 -1
- package/dist/connections/schema.js +10 -4
- package/dist/connections/schema.js.map +1 -1
- package/dist/dev-ui/api.d.ts +5 -0
- package/dist/dev-ui/api.d.ts.map +1 -1
- package/dist/dev-ui/api.js +39 -3
- package/dist/dev-ui/api.js.map +1 -1
- package/dist/dev-ui/dag/extractor.d.ts.map +1 -1
- package/dist/dev-ui/dag/extractor.js +7 -19
- package/dist/dev-ui/dag/extractor.js.map +1 -1
- 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 +4 -0
- package/dist/dev-ui/dev-server.d.ts.map +1 -1
- package/dist/dev-ui/dev-server.js +140 -20
- package/dist/dev-ui/dev-server.js.map +1 -1
- 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.map +1 -1
- package/dist/dev-ui/watcher.js +6 -2
- package/dist/dev-ui/watcher.js.map +1 -1
- package/dist/dev-ui/ws.d.ts +26 -1
- package/dist/dev-ui/ws.d.ts.map +1 -1
- package/dist/dev-ui/ws.js +14 -1
- package/dist/dev-ui/ws.js.map +1 -1
- package/dist/dev-ui-client/assets/index-D-r3q63O.js +172 -0
- package/dist/dev-ui-client/assets/index-Dj9V5GJF.css +32 -0
- package/dist/dev-ui-client/index.html +3 -3
- package/dist/discover.d.ts.map +1 -1
- package/dist/discover.js +5 -2
- package/dist/discover.js.map +1 -1
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +15 -4
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.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 +14 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +18 -1
- package/dist/types.js.map +1 -1
- package/dist/workflow.d.ts +1 -1
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +25 -3
- package/dist/workflow.js.map +1 -1
- package/package.json +7 -1
- package/templates/app/.dockerignore +6 -0
- package/templates/app/Dockerfile +34 -0
- package/templates/app/generated/registry.ts +8 -0
- package/templates/app/next.config.js +4 -1
- package/templates/app/package.json +4 -0
- package/templates/app/src/lib/pflow.ts +5 -6
- package/dist/cli/init.d.ts +0 -2
- package/dist/cli/init.d.ts.map +0 -1
- package/dist/cli/init.js +0 -390
- package/dist/cli/init.js.map +0 -1
- package/dist/cli/mcp/tools/startDevUi.d.ts +0 -15
- package/dist/cli/mcp/tools/startDevUi.d.ts.map +0 -1
- package/dist/cli/mcp/tools/startDevUi.js +0 -92
- package/dist/cli/mcp/tools/startDevUi.js.map +0 -1
- package/dist/dev-ui-client/assets/index-B5wNJx8a.js +0 -77
- package/dist/dev-ui-client/assets/index-DpOZNNnF.css +0 -1
|
@@ -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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/cli/discovery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/cli/discovery.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,KAAK,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAiB1C,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAcD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CA8B1B;AAcD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAgC9B;AAcD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAgC/B"}
|
package/dist/cli/discovery.js
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
// packages/cli/src/discovery.ts
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
import path from "path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
4
5
|
import { createJiti } from "jiti";
|
|
5
|
-
|
|
6
|
+
// Alias '0pflow' to the same dist/index.js that the running CLI loaded.
|
|
7
|
+
// Without this, jiti resolves 'import { Workflow } from "0pflow"' from the
|
|
8
|
+
// project's local node_modules, creating a separate module instance with its
|
|
9
|
+
// own DBOS singleton that is never launched — causing
|
|
10
|
+
// "DBOS.launch() must be called before running workflows" errors.
|
|
11
|
+
//
|
|
12
|
+
// This file lives at dist/cli/discovery.js in the installed package;
|
|
13
|
+
// the package main entry is dist/index.js (one level up from dist/cli/).
|
|
14
|
+
const _thisDir = path.dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
const _opflowMain = path.resolve(_thisDir, "..", "index.js");
|
|
16
|
+
const jiti = createJiti(import.meta.url, {
|
|
17
|
+
alias: { "0pflow": _opflowMain },
|
|
18
|
+
});
|
|
6
19
|
/**
|
|
7
20
|
* Check if a value is a workflow executable
|
|
8
21
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/cli/discovery.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAMlC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/cli/discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/env.d.ts
CHANGED
|
@@ -9,7 +9,9 @@ export declare function findEnvFile(startDir: string): string | null;
|
|
|
9
9
|
*/
|
|
10
10
|
export declare function loadEnv(envPath: string): void;
|
|
11
11
|
/**
|
|
12
|
-
* Find .env starting from cwd and load it into process.env
|
|
12
|
+
* Find .env starting from cwd and load it into process.env.
|
|
13
|
+
* If DATABASE_URL is already set (e.g. from cloud env vars), .env is optional —
|
|
14
|
+
* load it if it exists (local overrides) but don't throw if it's missing.
|
|
13
15
|
*/
|
|
14
16
|
export declare function resolveEnv(): void;
|
|
15
17
|
//# sourceMappingURL=env.d.ts.map
|
package/dist/cli/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/cli/env.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmB3D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAe7C;AAED
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/cli/env.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmB3D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAe7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAajC"}
|
package/dist/cli/env.js
CHANGED
|
@@ -40,15 +40,20 @@ export function loadEnv(envPath) {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
|
-
* Find .env starting from cwd and load it into process.env
|
|
43
|
+
* Find .env starting from cwd and load it into process.env.
|
|
44
|
+
* If DATABASE_URL is already set (e.g. from cloud env vars), .env is optional —
|
|
45
|
+
* load it if it exists (local overrides) but don't throw if it's missing.
|
|
44
46
|
*/
|
|
45
47
|
export function resolveEnv() {
|
|
46
48
|
const envPath = findEnvFile(process.cwd());
|
|
47
|
-
if (
|
|
49
|
+
if (envPath) {
|
|
50
|
+
loadEnv(envPath);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!process.env.DATABASE_URL) {
|
|
48
54
|
throw new Error("No .env file found in current directory or parents\n" +
|
|
49
55
|
"Create a .env file with at least:\n" +
|
|
50
56
|
" DATABASE_URL=postgresql://user:pass@localhost:5432/dbname");
|
|
51
57
|
}
|
|
52
|
-
loadEnv(envPath);
|
|
53
58
|
}
|
|
54
59
|
//# sourceMappingURL=env.js.map
|
package/dist/cli/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/cli/env.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAElC,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,2BAA2B;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,kCAAkC;YAClC,6CAA6C;YAC7C,6DAA6D,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/cli/env.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAElC,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,2BAA2B;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,kCAAkC;YAClC,6CAA6C;YAC7C,6DAA6D,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,sDAAsD;YACtD,qCAAqC;YACrC,6DAA6D,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -12,10 +12,10 @@ import { discoverWorkflows, discoverNodes } from "./discovery.js";
|
|
|
12
12
|
import { resolveEnv } from "./env.js";
|
|
13
13
|
import { listRuns, getRun } from "./runs.js";
|
|
14
14
|
import { getTrace, printTrace } from "./trace.js";
|
|
15
|
-
import {
|
|
15
|
+
import { getAppSchema } from "./app.js";
|
|
16
16
|
import { startMcpServer } from "./mcp/server.js";
|
|
17
17
|
import { runInstall, runUninstall } from "./install.js";
|
|
18
|
-
import {
|
|
18
|
+
import { runRun } from "./run.js";
|
|
19
19
|
// Read version from package.json
|
|
20
20
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
21
21
|
const pkgJsonPath = resolve(__dirname, "../../package.json");
|
|
@@ -81,12 +81,96 @@ program
|
|
|
81
81
|
.name("0pflow")
|
|
82
82
|
.description("CLI for 0pflow workflow engine")
|
|
83
83
|
.version(version);
|
|
84
|
+
// ============ Run command ============
|
|
85
|
+
program
|
|
86
|
+
.command("run")
|
|
87
|
+
.description("Create a new project or launch an existing one")
|
|
88
|
+
.action(async () => {
|
|
89
|
+
await runRun();
|
|
90
|
+
});
|
|
91
|
+
// ============ Build command ============
|
|
92
|
+
program
|
|
93
|
+
.command("build")
|
|
94
|
+
.description("Generate registry.ts with static imports (for Next.js / bundled builds)")
|
|
95
|
+
.action(async () => {
|
|
96
|
+
const { generateRegistry } = await import("../registry-gen.js");
|
|
97
|
+
const outPath = generateRegistry(process.cwd());
|
|
98
|
+
console.log(pc.green(`Registry generated: ${outPath}`));
|
|
99
|
+
});
|
|
100
|
+
// ============ Deploy command ============
|
|
101
|
+
program
|
|
102
|
+
.command("deploy")
|
|
103
|
+
.description("Deploy app to the cloud")
|
|
104
|
+
.option("--verbose", "Show detailed output")
|
|
105
|
+
.action(async (options) => {
|
|
106
|
+
const { runDeploy } = await import("./deploy.js");
|
|
107
|
+
await runDeploy(options);
|
|
108
|
+
});
|
|
84
109
|
// ============ Init command ============
|
|
85
110
|
program
|
|
86
|
-
.command("init")
|
|
87
|
-
.description("
|
|
111
|
+
.command("init <name>")
|
|
112
|
+
.description("Scaffold a new 0pflow project (non-interactive)")
|
|
113
|
+
.option("-d, --dir <path>", "Directory to scaffold in", ".")
|
|
114
|
+
.option("--no-install", "Skip npm install")
|
|
115
|
+
.action(async (name, options) => {
|
|
116
|
+
const { scaffoldApp } = await import("./mcp/lib/scaffolding.js");
|
|
117
|
+
const result = await scaffoldApp({
|
|
118
|
+
appName: name,
|
|
119
|
+
directory: options.dir,
|
|
120
|
+
installDeps: options.install,
|
|
121
|
+
});
|
|
122
|
+
if (!result.success) {
|
|
123
|
+
console.error(result.message);
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
console.log(result.message);
|
|
127
|
+
});
|
|
128
|
+
// ============ Cloud commands ============
|
|
129
|
+
const cloud = program.command("cloud").description("Cloud dev environment commands").enablePositionalOptions();
|
|
130
|
+
cloud
|
|
131
|
+
.command("run")
|
|
132
|
+
.description("Create a cloud dev environment on Fly.io")
|
|
133
|
+
.action(async () => {
|
|
134
|
+
const { runCloudRun } = await import("./cloud-dev.js");
|
|
135
|
+
await runCloudRun();
|
|
136
|
+
});
|
|
137
|
+
cloud
|
|
138
|
+
.command("status")
|
|
139
|
+
.description("Check cloud dev machine status")
|
|
140
|
+
.action(async () => {
|
|
141
|
+
const { handleStatus } = await import("./cloud-dev.js");
|
|
142
|
+
await handleStatus();
|
|
143
|
+
});
|
|
144
|
+
cloud
|
|
145
|
+
.command("stop")
|
|
146
|
+
.description("Stop the cloud dev machine")
|
|
147
|
+
.action(async () => {
|
|
148
|
+
const { handleStop } = await import("./cloud-dev.js");
|
|
149
|
+
await handleStop();
|
|
150
|
+
});
|
|
151
|
+
cloud
|
|
152
|
+
.command("destroy")
|
|
153
|
+
.description("Destroy the cloud dev machine and its volume")
|
|
154
|
+
.action(async () => {
|
|
155
|
+
const { handleDestroy } = await import("./cloud-dev.js");
|
|
156
|
+
await handleDestroy();
|
|
157
|
+
});
|
|
158
|
+
cloud
|
|
159
|
+
.command("claude")
|
|
160
|
+
.description("SSH into a cloud workspace and start a Claude Code session")
|
|
161
|
+
.allowUnknownOption()
|
|
162
|
+
.allowExcessArguments(true)
|
|
163
|
+
.passThroughOptions()
|
|
164
|
+
.action(async (_opts, cmd) => {
|
|
165
|
+
const { handleClaude } = await import("./cloud-dev.js");
|
|
166
|
+
await handleClaude(cmd.args);
|
|
167
|
+
});
|
|
168
|
+
cloud
|
|
169
|
+
.command("ssh")
|
|
170
|
+
.description("SSH into a cloud workspace")
|
|
88
171
|
.action(async () => {
|
|
89
|
-
await
|
|
172
|
+
const { handleSSH } = await import("./cloud-dev.js");
|
|
173
|
+
await handleSSH();
|
|
90
174
|
});
|
|
91
175
|
// ============ Workflow commands ============
|
|
92
176
|
const workflow = program.command("workflow").description("Workflow commands");
|
|
@@ -187,7 +271,7 @@ workflow
|
|
|
187
271
|
}
|
|
188
272
|
const pflow = await create0pflow({
|
|
189
273
|
databaseUrl: process.env.DATABASE_URL,
|
|
190
|
-
appName:
|
|
274
|
+
appName: getAppSchema(),
|
|
191
275
|
workflows: workflowRegistry,
|
|
192
276
|
nodes,
|
|
193
277
|
});
|
|
@@ -314,7 +398,7 @@ node
|
|
|
314
398
|
}
|
|
315
399
|
const pflow = await create0pflow({
|
|
316
400
|
databaseUrl: process.env.DATABASE_URL,
|
|
317
|
-
appName:
|
|
401
|
+
appName: getAppSchema(),
|
|
318
402
|
nodes,
|
|
319
403
|
});
|
|
320
404
|
try {
|
|
@@ -462,6 +546,9 @@ program
|
|
|
462
546
|
.description("Start the Dev UI (visual workflow DAG viewer)")
|
|
463
547
|
.option("-p, --port <number>", "Port to serve on", "4173")
|
|
464
548
|
.option("--host", "Expose to network")
|
|
549
|
+
.option("--dangerously-skip-permissions", "Pass --dangerously-skip-permissions to Claude Code")
|
|
550
|
+
.option("--claude-prompt <text>", "Initial prompt to send to Claude Code")
|
|
551
|
+
.option("--verbose", "Show detailed startup information")
|
|
465
552
|
.action(async (options) => {
|
|
466
553
|
// Load .env for DATABASE_URL and NANGO_SECRET_KEY
|
|
467
554
|
try {
|
|
@@ -470,6 +557,11 @@ program
|
|
|
470
557
|
catch {
|
|
471
558
|
// Dev UI can work without env (connections API just won't be available)
|
|
472
559
|
}
|
|
560
|
+
// Detect dev mode (running from monorepo source) for --plugin-dir
|
|
561
|
+
const { packageRoot } = await import("./mcp/config.js");
|
|
562
|
+
const monorepoRoot = resolve(packageRoot, "..", "..");
|
|
563
|
+
const { existsSync } = await import("node:fs");
|
|
564
|
+
const pluginDir = existsSync(resolve(monorepoRoot, "packages", "core")) ? monorepoRoot : undefined;
|
|
473
565
|
const { startDevServer } = await import("../dev-ui/index.js");
|
|
474
566
|
await startDevServer({
|
|
475
567
|
projectRoot: process.cwd(),
|
|
@@ -477,6 +569,10 @@ program
|
|
|
477
569
|
host: options.host,
|
|
478
570
|
databaseUrl: process.env.DATABASE_URL,
|
|
479
571
|
nangoSecretKey: process.env.NANGO_SECRET_KEY,
|
|
572
|
+
claudePluginDir: pluginDir,
|
|
573
|
+
claudeSkipPermissions: options.dangerouslySkipPermissions,
|
|
574
|
+
claudePrompt: options.claudePrompt,
|
|
575
|
+
verbose: options.verbose,
|
|
480
576
|
});
|
|
481
577
|
});
|
|
482
578
|
// ============ MCP commands ============
|