0pflow 0.1.0-dev.00aaa03 → 0.1.0-dev.303bb09
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/agent.d.ts +6 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +59 -9
- 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/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 +5 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +134 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +390 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/install.d.ts +13 -4
- package/dist/cli/install.d.ts.map +1 -1
- package/dist/cli/install.js +130 -72
- 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 +216 -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 +117 -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 +101 -1
- package/dist/cli/mcp/tools/index.d.ts.map +1 -1
- package/dist/cli/mcp/tools/index.js +18 -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/startDevUi.d.ts +15 -0
- package/dist/cli/mcp/tools/startDevUi.d.ts.map +1 -0
- package/dist/cli/mcp/tools/startDevUi.js +92 -0
- package/dist/cli/mcp/tools/startDevUi.js.map +1 -0
- 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/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 +44 -0
- package/dist/connections/resolver.js.map +1 -0
- package/dist/connections/schema.d.ts +6 -0
- package/dist/connections/schema.d.ts.map +1 -0
- package/dist/connections/schema.js +25 -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 +13 -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 +728 -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 +14 -0
- package/dist/dev-ui/dev-server.d.ts.map +1 -0
- package/dist/dev-ui/dev-server.js +158 -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/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 +27 -0
- package/dist/dev-ui/ws.d.ts.map +1 -0
- package/dist/dev-ui/ws.js +19 -0
- package/dist/dev-ui/ws.js.map +1 -0
- package/dist/dev-ui-client/assets/index-B5wNJx8a.js +77 -0
- package/dist/dev-ui-client/assets/index-DAKTQEvj.js +1 -0
- package/dist/dev-ui-client/assets/index-DpOZNNnF.css +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 +29 -0
- package/dist/discover.js.map +1 -0
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +25 -12
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -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/types.d.ts +19 -1
- 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 +90 -2
- package/dist/workflow.js.map +1 -1
- package/package.json +24 -6
- package/templates/app/.env.example +13 -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/next.config.js +10 -0
- package/templates/app/package.json +55 -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 +29 -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/cli/install.js
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import { execSync } from "node:child_process";
|
|
2
2
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
4
|
import pc from "picocolors";
|
|
5
|
+
import { getNpmVersionForMcp } from "./index.js";
|
|
6
|
+
function printBanner() {
|
|
7
|
+
console.log();
|
|
8
|
+
console.log(pc.red(" ___ __ _"));
|
|
9
|
+
console.log(pc.red(" / _ \\ _ __ / _| | _____ __"));
|
|
10
|
+
console.log(pc.red(" | | | | '_ \\ |_| |/ _ \\ \\ /\\ / /"));
|
|
11
|
+
console.log(pc.red(" | |_| | |_) | _| | (_) \\ V V /"));
|
|
12
|
+
console.log(pc.red(" \\___/| .__/|_| |_|\\___/ \\_/\\_/"));
|
|
13
|
+
console.log(pc.red(" |_|"));
|
|
14
|
+
console.log();
|
|
15
|
+
}
|
|
5
16
|
/**
|
|
6
17
|
* Build the MCP command by taking the current invocation and replacing "install" with "mcp start"
|
|
7
18
|
*/
|
|
@@ -14,21 +25,58 @@ export function buildMcpCommand() {
|
|
|
14
25
|
: args;
|
|
15
26
|
const scriptPath = baseArgs[1] || "";
|
|
16
27
|
// If we're running a .ts file, tsx hides itself from argv
|
|
17
|
-
// so we see "node file.ts" but need
|
|
28
|
+
// so we see "node file.ts" but need tsx to actually run it.
|
|
29
|
+
// We resolve the full path to tsx because npx spawns via sh which
|
|
30
|
+
// may not have nvm/fnm PATH entries (causes "sh: tsx: command not found").
|
|
18
31
|
if (scriptPath.endsWith(".ts")) {
|
|
19
|
-
|
|
32
|
+
// Script is at packages/core/src/cli/index.ts, repo root is 4 levels up
|
|
33
|
+
const packageRoot = resolve(dirname(scriptPath), "../../../..");
|
|
34
|
+
// Try to find tsx: check npx cache, then fall back to npx -y tsx
|
|
35
|
+
let tsxPath = "tsx";
|
|
36
|
+
try {
|
|
37
|
+
const resolved = execSync("npx -y tsx --which 2>/dev/null || which tsx 2>/dev/null", {
|
|
38
|
+
encoding: "utf-8",
|
|
39
|
+
timeout: 10000,
|
|
40
|
+
}).trim();
|
|
41
|
+
if (resolved)
|
|
42
|
+
tsxPath = resolved;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// If we can't resolve tsx, try the npx cache directly
|
|
46
|
+
const home = process.env.HOME || "~";
|
|
47
|
+
const { readdirSync } = require("node:fs");
|
|
48
|
+
try {
|
|
49
|
+
const npxCacheDir = join(home, ".npm", "_npx");
|
|
50
|
+
for (const entry of readdirSync(npxCacheDir)) {
|
|
51
|
+
const candidate = join(npxCacheDir, entry, "node_modules", ".bin", "tsx");
|
|
52
|
+
if (existsSync(candidate)) {
|
|
53
|
+
tsxPath = candidate;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Fall through with bare "tsx"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
command: [tsxPath, scriptPath, "mcp", "start"],
|
|
64
|
+
isLocal: true,
|
|
65
|
+
packageRoot,
|
|
66
|
+
};
|
|
20
67
|
}
|
|
21
68
|
// If running from npx cache or node_modules, use npx 0pflow@version
|
|
22
69
|
if (scriptPath.includes(".npm/_npx") || scriptPath.includes("node_modules/0pflow")) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
// Fallback to latest
|
|
29
|
-
return ["npx", "-y", "0pflow@latest", "mcp", "start"];
|
|
70
|
+
const ver = getNpmVersionForMcp();
|
|
71
|
+
return {
|
|
72
|
+
command: ["npx", "-y", `0pflow@${ver}`, "mcp", "start"],
|
|
73
|
+
isLocal: false,
|
|
74
|
+
};
|
|
30
75
|
}
|
|
31
|
-
return
|
|
76
|
+
return {
|
|
77
|
+
command: [...baseArgs, "mcp", "start"],
|
|
78
|
+
isLocal: false,
|
|
79
|
+
};
|
|
32
80
|
}
|
|
33
81
|
/**
|
|
34
82
|
* Get the settings directory path
|
|
@@ -83,9 +131,12 @@ export function isClaudeCliAvailable() {
|
|
|
83
131
|
/**
|
|
84
132
|
* Add the 0pflow marketplace to Claude Code
|
|
85
133
|
*/
|
|
86
|
-
export function addMarketplace() {
|
|
134
|
+
export function addMarketplace(mcpResult, stdio = "inherit") {
|
|
87
135
|
try {
|
|
88
|
-
|
|
136
|
+
const marketplaceSource = mcpResult.isLocal && mcpResult.packageRoot
|
|
137
|
+
? mcpResult.packageRoot
|
|
138
|
+
: "timescale/0pflow";
|
|
139
|
+
execSync(`claude plugin marketplace add ${marketplaceSource}`, { stdio });
|
|
89
140
|
return { success: true };
|
|
90
141
|
}
|
|
91
142
|
catch (err) {
|
|
@@ -98,9 +149,9 @@ export function addMarketplace() {
|
|
|
98
149
|
/**
|
|
99
150
|
* Install the 0pflow plugin to Claude Code
|
|
100
151
|
*/
|
|
101
|
-
export function installPlugin() {
|
|
152
|
+
export function installPlugin(stdio = "inherit") {
|
|
102
153
|
try {
|
|
103
|
-
execSync("claude plugin install 0pflow", { stdio
|
|
154
|
+
execSync("claude plugin install 0pflow", { stdio });
|
|
104
155
|
return { success: true };
|
|
105
156
|
}
|
|
106
157
|
catch (err) {
|
|
@@ -114,93 +165,99 @@ export function installPlugin() {
|
|
|
114
165
|
* Run the install command
|
|
115
166
|
*/
|
|
116
167
|
export async function runInstall(options = {}) {
|
|
117
|
-
|
|
118
|
-
console.log(pc.bold("0pflow Install"));
|
|
119
|
-
console.log();
|
|
168
|
+
const { verbose = false } = options;
|
|
120
169
|
// Check if Claude CLI is available
|
|
121
170
|
if (!isClaudeCliAvailable()) {
|
|
122
171
|
console.log(pc.red("Error: Claude Code CLI not found."));
|
|
123
|
-
console.log(pc.dim("
|
|
172
|
+
console.log(pc.dim("Install Claude Code first: https://claude.ai/code"));
|
|
124
173
|
process.exit(1);
|
|
125
174
|
}
|
|
126
175
|
// Build MCP command from current invocation
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
176
|
+
const mcpResult = buildMcpCommand();
|
|
177
|
+
if (verbose) {
|
|
178
|
+
console.log(pc.dim("MCP command:"), mcpResult.command.join(" "));
|
|
179
|
+
}
|
|
130
180
|
// Check for existing installation
|
|
131
181
|
const existingSettings = readSettings();
|
|
182
|
+
if (existingSettings && !options.force) {
|
|
183
|
+
console.log(pc.yellow("Already installed."), pc.dim("Use --force to reinstall."));
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
132
186
|
if (existingSettings) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
console.log(pc.dim("Current MCP command:"), existingSettings.mcpCommand.join(" "));
|
|
136
|
-
console.log();
|
|
137
|
-
console.log(pc.dim("Use --force to reinstall."));
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
// Force reinstall - uninstall first
|
|
141
|
-
console.log(pc.dim("Uninstalling existing installation..."));
|
|
142
|
-
await runUninstall();
|
|
143
|
-
console.log();
|
|
144
|
-
console.log(pc.bold("Reinstalling 0pflow..."));
|
|
145
|
-
console.log();
|
|
187
|
+
console.log(pc.dim("Existing installation found, reinstalling (--force)..."));
|
|
188
|
+
await runUninstall({ verbose });
|
|
146
189
|
}
|
|
147
190
|
// Write settings
|
|
148
191
|
const settings = {
|
|
149
|
-
mcpCommand,
|
|
192
|
+
mcpCommand: mcpResult.command,
|
|
150
193
|
installedAt: new Date().toISOString(),
|
|
151
194
|
};
|
|
152
|
-
console.log(pc.dim("Writing settings to:"), getSettingsPath());
|
|
153
195
|
writeSettings(settings);
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
console.log(
|
|
196
|
+
// Development mode: just show the command to use
|
|
197
|
+
if (mcpResult.isLocal) {
|
|
198
|
+
// Build the init command from the MCP command (same tsx + script, different subcommand)
|
|
199
|
+
const initCmd = mcpResult.command.slice(0, -2).concat("init").join(" ");
|
|
200
|
+
printBanner();
|
|
201
|
+
console.log(pc.yellow("Development mode detected"));
|
|
202
|
+
console.log();
|
|
203
|
+
console.log(pc.bold("Next steps:"));
|
|
204
|
+
console.log(pc.dim(" 1. Create a new project:"));
|
|
205
|
+
console.log(pc.cyan(` ${initCmd}`));
|
|
206
|
+
console.log(pc.dim(" 2. Run Claude Code with:"));
|
|
207
|
+
console.log(pc.cyan(` claude --plugin-dir ${mcpResult.packageRoot}`));
|
|
208
|
+
console.log(pc.dim(" 3. Use"), pc.cyan("/create-workflow"), pc.dim("to design your first workflow"));
|
|
209
|
+
console.log();
|
|
210
|
+
return;
|
|
161
211
|
}
|
|
162
|
-
|
|
163
|
-
|
|
212
|
+
// Add marketplace (suppress claude CLI output in non-verbose mode)
|
|
213
|
+
const stdio = verbose ? "inherit" : "ignore";
|
|
214
|
+
const marketplaceResult = addMarketplace(mcpResult, stdio);
|
|
215
|
+
const pluginResult = installPlugin(stdio);
|
|
216
|
+
if (verbose) {
|
|
217
|
+
console.log(marketplaceResult.success ? pc.green("✓ Marketplace added") : pc.yellow("⚠ Marketplace may already exist"));
|
|
218
|
+
console.log(pluginResult.success ? pc.green("✓ Plugin installed") : pc.red("✗ Plugin install failed"));
|
|
164
219
|
}
|
|
165
|
-
// Install plugin
|
|
166
|
-
console.log(pc.dim("Installing 0pflow plugin..."));
|
|
167
|
-
const pluginResult = installPlugin();
|
|
168
220
|
if (pluginResult.success) {
|
|
169
|
-
|
|
221
|
+
const initCmd = `npx 0pflow@${getNpmVersionForMcp()} init`;
|
|
222
|
+
printBanner();
|
|
223
|
+
console.log(pc.green("✓"), "Installed successfully");
|
|
224
|
+
console.log();
|
|
225
|
+
console.log(pc.bold("Next steps:"));
|
|
226
|
+
console.log(pc.dim(" 1. Create a new project:"));
|
|
227
|
+
console.log(pc.cyan(` ${initCmd}`));
|
|
228
|
+
console.log(pc.dim(" 2. Use"), pc.cyan("/create-workflow"), pc.dim("to design your first workflow"));
|
|
229
|
+
console.log();
|
|
170
230
|
}
|
|
171
231
|
else {
|
|
172
|
-
console.log(pc.red("✗"), "
|
|
232
|
+
console.log(pc.red("✗"), "Installation failed");
|
|
233
|
+
process.exit(1);
|
|
173
234
|
}
|
|
174
|
-
console.log();
|
|
175
|
-
console.log(pc.green(pc.bold("Installation complete!")));
|
|
176
|
-
console.log();
|
|
177
|
-
console.log("You can now use 0pflow in Claude Code.");
|
|
178
|
-
console.log();
|
|
179
235
|
}
|
|
180
236
|
/**
|
|
181
237
|
* Run the uninstall command
|
|
182
238
|
*/
|
|
183
|
-
export async function runUninstall() {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
console.log();
|
|
239
|
+
export async function runUninstall(options = {}) {
|
|
240
|
+
const { verbose = false } = options;
|
|
241
|
+
const stdio = verbose ? "inherit" : "ignore";
|
|
187
242
|
// Uninstall plugin and marketplace from Claude
|
|
188
243
|
if (isClaudeCliAvailable()) {
|
|
189
|
-
console.log(pc.dim("Uninstalling plugin from Claude Code..."));
|
|
190
244
|
try {
|
|
191
|
-
execSync("claude plugin uninstall 0pflow", { stdio
|
|
192
|
-
|
|
245
|
+
execSync("claude plugin uninstall 0pflow", { stdio });
|
|
246
|
+
if (verbose)
|
|
247
|
+
console.log(pc.green("✓"), "Plugin uninstalled");
|
|
193
248
|
}
|
|
194
249
|
catch {
|
|
195
|
-
|
|
250
|
+
if (verbose)
|
|
251
|
+
console.log(pc.yellow("⚠"), "Could not uninstall plugin");
|
|
196
252
|
}
|
|
197
|
-
console.log(pc.dim("Removing marketplace..."));
|
|
198
253
|
try {
|
|
199
|
-
execSync("claude plugin marketplace remove 0pflow", { stdio
|
|
200
|
-
|
|
254
|
+
execSync("claude plugin marketplace remove 0pflow", { stdio });
|
|
255
|
+
if (verbose)
|
|
256
|
+
console.log(pc.green("✓"), "Marketplace removed");
|
|
201
257
|
}
|
|
202
258
|
catch {
|
|
203
|
-
|
|
259
|
+
if (verbose)
|
|
260
|
+
console.log(pc.yellow("⚠"), "Could not remove marketplace");
|
|
204
261
|
}
|
|
205
262
|
}
|
|
206
263
|
// Remove settings file
|
|
@@ -208,10 +265,11 @@ export async function runUninstall() {
|
|
|
208
265
|
if (existsSync(settingsPath)) {
|
|
209
266
|
const { unlinkSync } = await import("node:fs");
|
|
210
267
|
unlinkSync(settingsPath);
|
|
211
|
-
|
|
268
|
+
if (verbose)
|
|
269
|
+
console.log(pc.green("✓"), "Settings file removed");
|
|
270
|
+
}
|
|
271
|
+
if (verbose) {
|
|
272
|
+
console.log(pc.green("Uninstalled."));
|
|
212
273
|
}
|
|
213
|
-
console.log();
|
|
214
|
-
console.log(pc.green("Uninstallation complete."));
|
|
215
|
-
console.log();
|
|
216
274
|
}
|
|
217
275
|
//# sourceMappingURL=install.js.map
|
package/dist/cli/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/mcp/config.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/config.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,QAAoC,CAAC;AAG7D,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/config.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,QAAoC,CAAC;AAG7D,eAAO,MAAM,YAAY,QAAiC,CAAC;AAM3D,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC"}
|
package/dist/cli/mcp/config.js
CHANGED
|
@@ -4,10 +4,8 @@ import { fileURLToPath } from "node:url";
|
|
|
4
4
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
5
5
|
// Package root directory (relative to dist/cli/mcp/)
|
|
6
6
|
export const packageRoot = join(__dirname, "..", "..", "..");
|
|
7
|
-
//
|
|
8
|
-
export const
|
|
9
|
-
// Templates directory at monorepo root level
|
|
10
|
-
export const templatesDir = join(monorepoRoot, "templates");
|
|
7
|
+
// Templates directory (bundled with the package)
|
|
8
|
+
export const templatesDir = join(packageRoot, "templates");
|
|
11
9
|
// Read version from package.json
|
|
12
10
|
const pkg = JSON.parse(readFileSync(join(packageRoot, "package.json"), "utf-8"));
|
|
13
11
|
export const version = pkg.version;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/mcp/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,qDAAqD;AACrD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE7D,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/mcp/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,qDAAqD;AACrD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE7D,iDAAiD;AACjD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAE3D,iCAAiC;AACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CACzD,CAAC;AACF,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface ScaffoldAppOpts {
|
|
2
|
+
appName: string;
|
|
3
|
+
directory: string;
|
|
4
|
+
installDeps?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface ScaffoldAppResult {
|
|
7
|
+
success: boolean;
|
|
8
|
+
message: string;
|
|
9
|
+
path?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function scaffoldApp({ appName, directory, installDeps, }: ScaffoldAppOpts): Promise<ScaffoldAppResult>;
|
|
12
|
+
export interface CreateDatabaseOpts {
|
|
13
|
+
name?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface CreateDatabaseResult {
|
|
16
|
+
success: boolean;
|
|
17
|
+
service_id?: string;
|
|
18
|
+
error?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function createDatabase({ name, }?: CreateDatabaseOpts): Promise<CreateDatabaseResult>;
|
|
21
|
+
export interface SetupAppSchemaOpts {
|
|
22
|
+
directory: string;
|
|
23
|
+
serviceId: string;
|
|
24
|
+
appName: string;
|
|
25
|
+
}
|
|
26
|
+
export interface SetupAppSchemaResult {
|
|
27
|
+
success: boolean;
|
|
28
|
+
message: string;
|
|
29
|
+
schema_name?: string;
|
|
30
|
+
user_name?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function setupAppSchema({ directory, serviceId, appName, }: SetupAppSchemaOpts): Promise<SetupAppSchemaResult>;
|
|
33
|
+
//# sourceMappingURL=scaffolding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffolding.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/lib/scaffolding.ts"],"names":[],"mappings":"AAoDA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,SAAS,EACT,WAAkB,GACnB,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsC9C;AAID,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAAC,EACnC,IAAI,GACL,GAAE,kBAAuB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0CzD;AAID,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,cAAc,CAAC,EACnC,SAAS,EACT,SAAS,EACT,OAAO,GACR,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAwJpD"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { exec } from "node:child_process";
|
|
2
|
+
import { existsSync, mkdirSync } from "node:fs";
|
|
3
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
4
|
+
import { join, resolve } from "node:path";
|
|
5
|
+
import * as dotenv from "dotenv";
|
|
6
|
+
import pg from "pg";
|
|
7
|
+
import { packageRoot, version } from "../config.js";
|
|
8
|
+
import { writeAppTemplates, create0pflowDirectories } from "../lib/templates.js";
|
|
9
|
+
const execAsync = (cmd, cwd) => new Promise((resolve, reject) => {
|
|
10
|
+
exec(cmd, { cwd }, (error, stdout, stderr) => {
|
|
11
|
+
if (error)
|
|
12
|
+
reject(Object.assign(error, { stderr }));
|
|
13
|
+
else
|
|
14
|
+
resolve({ stdout, stderr });
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
// Monorepo root (only valid in dev mode when running from packages/core)
|
|
18
|
+
const monorepoRoot = join(packageRoot, "..", "..");
|
|
19
|
+
function isDevMode() {
|
|
20
|
+
const corePath = join(monorepoRoot, "packages", "core");
|
|
21
|
+
return existsSync(corePath);
|
|
22
|
+
}
|
|
23
|
+
function generatePassword(length = 24) {
|
|
24
|
+
const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
25
|
+
let password = "";
|
|
26
|
+
for (let i = 0; i < length; i++) {
|
|
27
|
+
password += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
28
|
+
}
|
|
29
|
+
return password;
|
|
30
|
+
}
|
|
31
|
+
function buildConnectionString(originalUrl, user, password) {
|
|
32
|
+
const parsed = new URL(originalUrl);
|
|
33
|
+
parsed.username = user;
|
|
34
|
+
parsed.password = encodeURIComponent(password);
|
|
35
|
+
if (!parsed.searchParams.has("uselibpqcompat")) {
|
|
36
|
+
parsed.searchParams.set("uselibpqcompat", "true");
|
|
37
|
+
}
|
|
38
|
+
return parsed.toString();
|
|
39
|
+
}
|
|
40
|
+
export async function scaffoldApp({ appName, directory, installDeps = true, }) {
|
|
41
|
+
const appPath = resolve(process.cwd(), directory);
|
|
42
|
+
if (!existsSync(appPath)) {
|
|
43
|
+
mkdirSync(appPath, { recursive: true });
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
await writeAppTemplates(appPath, {
|
|
47
|
+
app_name: appName,
|
|
48
|
+
opflow_version: version,
|
|
49
|
+
});
|
|
50
|
+
await create0pflowDirectories(appPath);
|
|
51
|
+
// In dev mode, link local 0pflow packages
|
|
52
|
+
if (isDevMode()) {
|
|
53
|
+
const corePath = join(monorepoRoot, "packages", "core");
|
|
54
|
+
await execAsync("npm link", corePath);
|
|
55
|
+
await execAsync("npm link 0pflow", appPath);
|
|
56
|
+
}
|
|
57
|
+
if (installDeps) {
|
|
58
|
+
await execAsync("npm install", appPath);
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
success: true,
|
|
62
|
+
message: `Created 0pflow app '${appName}' in ${appPath}`,
|
|
63
|
+
path: appPath,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
const error = err;
|
|
68
|
+
return {
|
|
69
|
+
success: false,
|
|
70
|
+
message: `Failed to create app: ${error.message}\n${error.stderr || ""}`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export async function createDatabase({ name, } = {}) {
|
|
75
|
+
const dbName = name || "app-db";
|
|
76
|
+
const cmdArgs = [
|
|
77
|
+
"tiger",
|
|
78
|
+
"service",
|
|
79
|
+
"create",
|
|
80
|
+
"--name",
|
|
81
|
+
dbName,
|
|
82
|
+
"--cpu",
|
|
83
|
+
"shared",
|
|
84
|
+
"--memory",
|
|
85
|
+
"shared",
|
|
86
|
+
"--addons",
|
|
87
|
+
"time-series,ai",
|
|
88
|
+
"--no-wait",
|
|
89
|
+
"-o",
|
|
90
|
+
"json",
|
|
91
|
+
];
|
|
92
|
+
try {
|
|
93
|
+
const { stdout, stderr } = await execAsync(cmdArgs.join(" "));
|
|
94
|
+
const result = JSON.parse(stdout);
|
|
95
|
+
if (!result.service_id) {
|
|
96
|
+
return {
|
|
97
|
+
success: false,
|
|
98
|
+
error: `No service_id in response: ${stdout}${stderr}`,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
success: true,
|
|
103
|
+
service_id: result.service_id,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
const error = err;
|
|
108
|
+
return {
|
|
109
|
+
success: false,
|
|
110
|
+
error: `Failed to create database: ${error.message}\n${error.stdout || ""}${error.stderr || ""}`,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export async function setupAppSchema({ directory, serviceId, appName, }) {
|
|
115
|
+
const appDir = resolve(process.cwd(), directory);
|
|
116
|
+
const envPath = join(appDir, ".env");
|
|
117
|
+
// Check if already run
|
|
118
|
+
if (existsSync(envPath)) {
|
|
119
|
+
const envContent = await readFile(envPath, "utf-8");
|
|
120
|
+
const env = dotenv.parse(envContent);
|
|
121
|
+
if (env.DATABASE_SCHEMA) {
|
|
122
|
+
return {
|
|
123
|
+
success: true,
|
|
124
|
+
message: "DATABASE_SCHEMA already set in .env. Delete it and re-run if you need to regenerate.",
|
|
125
|
+
schema_name: appName,
|
|
126
|
+
user_name: appName,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Get database connection string from Tiger
|
|
131
|
+
let adminConnectionString;
|
|
132
|
+
try {
|
|
133
|
+
const { stdout: serviceJson } = await execAsync(`tiger service get ${serviceId} --with-password -o json`);
|
|
134
|
+
const serviceDetails = JSON.parse(serviceJson);
|
|
135
|
+
if (!serviceDetails.connection_string) {
|
|
136
|
+
return {
|
|
137
|
+
success: false,
|
|
138
|
+
message: "connection_string not found in service details",
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const parsed = new URL(serviceDetails.connection_string);
|
|
142
|
+
if (!parsed.searchParams.has("uselibpqcompat")) {
|
|
143
|
+
parsed.searchParams.set("uselibpqcompat", "true");
|
|
144
|
+
}
|
|
145
|
+
adminConnectionString = parsed.toString();
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
const error = err;
|
|
149
|
+
return {
|
|
150
|
+
success: false,
|
|
151
|
+
message: `Failed to get service details: ${error.message}`,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
const pool = new pg.Pool({ connectionString: adminConnectionString, max: 1 });
|
|
155
|
+
try {
|
|
156
|
+
const existingUser = await pool.query(`SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = $1`, [appName]);
|
|
157
|
+
if (existingUser.rows.length > 0) {
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
message: `User '${appName}' already exists. Choose a different app name or delete the existing user.`,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
const appPassword = generatePassword();
|
|
164
|
+
await pool.query(`CREATE ROLE ${appName} WITH LOGIN PASSWORD '${appPassword}'`);
|
|
165
|
+
await pool.query(`GRANT ${appName} TO tsdbadmin WITH INHERIT TRUE`);
|
|
166
|
+
await pool.query(`CREATE SCHEMA IF NOT EXISTS ${appName} AUTHORIZATION ${appName}`);
|
|
167
|
+
await pool.query(`CREATE SCHEMA IF NOT EXISTS ${appName}_dbos AUTHORIZATION ${appName}`);
|
|
168
|
+
await pool.query(`GRANT CREATE ON DATABASE tsdb TO ${appName}`);
|
|
169
|
+
await pool.query(`REVOKE CREATE ON SCHEMA public FROM ${appName}`);
|
|
170
|
+
await pool.query(`GRANT USAGE ON SCHEMA public TO ${appName}`);
|
|
171
|
+
await pool.query(`ALTER ROLE ${appName} SET search_path TO ${appName}, ${appName}_dbos, public`);
|
|
172
|
+
const currentPath = await pool.query(`SELECT setting FROM pg_settings WHERE name = 'search_path'`);
|
|
173
|
+
const existingPath = currentPath.rows[0]?.setting ?? "public";
|
|
174
|
+
if (!existingPath.includes(appName)) {
|
|
175
|
+
await pool.query(`ALTER ROLE tsdbadmin SET search_path TO ${existingPath}, ${appName}, ${appName}_dbos`);
|
|
176
|
+
}
|
|
177
|
+
const existingAdmin = await pool.query(`SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = 'dbosadmin'`);
|
|
178
|
+
let dbosAdminPassword;
|
|
179
|
+
if (existingAdmin.rows.length === 0) {
|
|
180
|
+
dbosAdminPassword = generatePassword();
|
|
181
|
+
await pool.query(`CREATE ROLE dbosadmin WITH LOGIN CREATEDB PASSWORD '${dbosAdminPassword}'`);
|
|
182
|
+
}
|
|
183
|
+
const appDatabaseUrl = buildConnectionString(adminConnectionString, appName, appPassword);
|
|
184
|
+
let envContent = "";
|
|
185
|
+
if (existsSync(envPath)) {
|
|
186
|
+
envContent = await readFile(envPath, "utf-8");
|
|
187
|
+
}
|
|
188
|
+
const env = dotenv.parse(envContent);
|
|
189
|
+
env.DATABASE_URL = appDatabaseUrl;
|
|
190
|
+
env.DATABASE_SCHEMA = appName;
|
|
191
|
+
if (dbosAdminPassword) {
|
|
192
|
+
env.DBOS_ADMIN_URL = buildConnectionString(adminConnectionString, "dbosadmin", dbosAdminPassword);
|
|
193
|
+
}
|
|
194
|
+
const newEnvContent = Object.entries(env)
|
|
195
|
+
.map(([key, value]) => `${key}="${value}"`)
|
|
196
|
+
.join("\n");
|
|
197
|
+
await writeFile(envPath, `${newEnvContent}\n`);
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
const error = err;
|
|
201
|
+
return {
|
|
202
|
+
success: false,
|
|
203
|
+
message: `Failed to set up app schema: ${error.message}`,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
await pool.end();
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
success: true,
|
|
211
|
+
message: `Created schema '${appName}' and user '${appName}'. DATABASE_URL and DATABASE_SCHEMA written to .env.`,
|
|
212
|
+
schema_name: appName,
|
|
213
|
+
user_name: appName,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=scaffolding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffolding.js","sourceRoot":"","sources":["../../../../src/cli/mcp/lib/scaffolding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,GAAY,EAAE,EAAE,CAC9C,IAAI,OAAO,CAAqC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAClE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,KAAK;YAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;;YAC/C,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,yEAAyE;AACzE,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEnD,SAAS,SAAS;IAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACxD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAM,GAAG,EAAE;IACnC,MAAM,KAAK,GACT,gEAAgE,CAAC;IACnE,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAC5B,WAAmB,EACnB,IAAY,EACZ,QAAgB;IAEhB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAChC,OAAO,EACP,SAAS,EACT,WAAW,GAAG,IAAI,GACF;IAChB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,OAAO,EAAE;YAC/B,QAAQ,EAAE,OAAO;YACjB,cAAc,EAAE,OAAO;SACxB,CAAC,CAAC;QAEH,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAEvC,0CAA0C;QAC1C,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YACxD,MAAM,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACtC,MAAM,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,uBAAuB,OAAO,QAAQ,OAAO,EAAE;YACxD,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAAkC,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,yBAAyB,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE;SACzE,CAAC;IACJ,CAAC;AACH,CAAC;AAcD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,IAAI,MACkB,EAAE;IACxB,MAAM,MAAM,GAAG,IAAI,IAAI,QAAQ,CAAC;IAEhC,MAAM,OAAO,GAAG;QACd,OAAO;QACP,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,OAAO;QACP,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,UAAU;QACV,gBAAgB;QAChB,WAAW;QACX,IAAI;QACJ,MAAM;KACP,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAA4B,CAAC;QAE7D,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,8BAA8B,MAAM,GAAG,MAAM,EAAE;aACvD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAAmD,CAAC;QAClE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,8BAA8B,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE;SACjG,CAAC;IACJ,CAAC;AACH,CAAC;AAiBD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,SAAS,EACT,SAAS,EACT,OAAO,GACY;IACnB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,uBAAuB;IACvB,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EACL,sFAAsF;gBACxF,WAAW,EAAE,OAAO;gBACpB,SAAS,EAAE,OAAO;aACnB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,qBAA6B,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAC7C,qBAAqB,SAAS,0BAA0B,CACzD,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAE5C,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;YACtC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,gDAAgD;aAC1D,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QACD,qBAAqB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAAY,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,kCAAkC,KAAK,CAAC,OAAO,EAAE;SAC3D,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAE9E,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CACnC,sDAAsD,EACtD,CAAC,OAAO,CAAC,CACV,CAAC;QAEF,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,SAAS,OAAO,4EAA4E;aACtG,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAC;QACvC,MAAM,IAAI,CAAC,KAAK,CACd,eAAe,OAAO,yBAAyB,WAAW,GAAG,CAC9D,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,OAAO,iCAAiC,CAAC,CAAC;QAEpE,MAAM,IAAI,CAAC,KAAK,CACd,+BAA+B,OAAO,kBAAkB,OAAO,EAAE,CAClE,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CACd,+BAA+B,OAAO,uBAAuB,OAAO,EAAE,CACvE,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CACd,oCAAoC,OAAO,EAAE,CAC9C,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,CAAC,KAAK,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;QAE/D,MAAM,IAAI,CAAC,KAAK,CACd,cAAc,OAAO,uBAAuB,OAAO,KAAK,OAAO,eAAe,CAC/E,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAClC,4DAA4D,CAC7D,CAAC;QACF,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,QAAQ,CAAC;QAC9D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,CAAC,KAAK,CACd,2CAA2C,YAAY,KAAK,OAAO,KAAK,OAAO,OAAO,CACvF,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CACpC,+DAA+D,CAChE,CAAC;QACF,IAAI,iBAAqC,CAAC;QAC1C,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,iBAAiB,GAAG,gBAAgB,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,KAAK,CACd,uDAAuD,iBAAiB,GAAG,CAC5E,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,qBAAqB,CAC1C,qBAAqB,EACrB,OAAO,EACP,WAAW,CACZ,CAAC;QAEF,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrC,GAAG,CAAC,YAAY,GAAG,cAAc,CAAC;QAClC,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC;QAC9B,IAAI,iBAAiB,EAAE,CAAC;YACtB,GAAG,CAAC,cAAc,GAAG,qBAAqB,CACxC,qBAAqB,EACrB,WAAW,EACX,iBAAiB,CAClB,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC;aAC1C,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,aAAa,IAAI,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAAY,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,gCAAgC,KAAK,CAAC,OAAO,EAAE;SACzD,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,mBAAmB,OAAO,eAAe,OAAO,sDAAsD;QAC/G,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,OAAO;KACnB,CAAC;AACJ,CAAC"}
|