0pflow 0.1.0-dev.b4bf1ab → 0.1.0-dev.b8b505d
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 +7 -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 +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/app.d.ts +6 -0
- package/dist/cli/app.d.ts.map +1 -1
- package/dist/cli/app.js +27 -0
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/discovery.d.ts +10 -0
- package/dist/cli/discovery.d.ts.map +1 -1
- package/dist/cli/discovery.js +42 -0
- package/dist/cli/discovery.js.map +1 -1
- package/dist/cli/env.js +1 -1
- package/dist/cli/env.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +120 -24
- package/dist/cli/index.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 +254 -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 +391 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/trace.d.ts +5 -0
- package/dist/cli/trace.d.ts.map +1 -1
- package/dist/cli/trace.js +1 -1
- package/dist/cli/trace.js.map +1 -1
- package/dist/connections/cloud-auth.d.ts +46 -0
- package/dist/connections/cloud-auth.d.ts.map +1 -0
- package/dist/connections/cloud-auth.js +243 -0
- package/dist/connections/cloud-auth.js.map +1 -0
- package/dist/connections/cloud-client.d.ts +25 -0
- package/dist/connections/cloud-client.d.ts.map +1 -0
- package/dist/connections/cloud-client.js +59 -0
- package/dist/connections/cloud-client.js.map +1 -0
- package/dist/connections/cloud-integration-provider.d.ts +21 -0
- package/dist/connections/cloud-integration-provider.d.ts.map +1 -0
- package/dist/connections/cloud-integration-provider.js +26 -0
- package/dist/connections/cloud-integration-provider.js.map +1 -0
- package/dist/connections/index.d.ts +11 -0
- package/dist/connections/index.d.ts.map +1 -0
- package/dist/connections/index.js +9 -0
- package/dist/connections/index.js.map +1 -0
- package/dist/connections/integration-provider.d.ts +38 -0
- package/dist/connections/integration-provider.d.ts.map +1 -0
- package/dist/connections/integration-provider.js +20 -0
- package/dist/connections/integration-provider.js.map +1 -0
- package/dist/connections/local-integration-provider.d.ts +28 -0
- package/dist/connections/local-integration-provider.d.ts.map +1 -0
- package/dist/connections/local-integration-provider.js +54 -0
- package/dist/connections/local-integration-provider.js.map +1 -0
- package/dist/connections/nango-client.d.ts +14 -0
- package/dist/connections/nango-client.d.ts.map +1 -0
- package/dist/connections/nango-client.js +50 -0
- package/dist/connections/nango-client.js.map +1 -0
- package/dist/connections/resolver.d.ts +26 -0
- package/dist/connections/resolver.d.ts.map +1 -0
- package/dist/connections/resolver.js +48 -0
- package/dist/connections/resolver.js.map +1 -0
- package/dist/connections/schema.d.ts +8 -0
- package/dist/connections/schema.d.ts.map +1 -0
- package/dist/connections/schema.js +31 -0
- package/dist/connections/schema.js.map +1 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +4 -0
- package/dist/context.js.map +1 -1
- package/dist/dev-ui/api.d.ts +16 -0
- package/dist/dev-ui/api.d.ts.map +1 -0
- package/dist/dev-ui/api.js +237 -0
- package/dist/dev-ui/api.js.map +1 -0
- package/dist/dev-ui/dag/extractor.d.ts +19 -0
- package/dist/dev-ui/dag/extractor.d.ts.map +1 -0
- package/dist/dev-ui/dag/extractor.js +716 -0
- package/dist/dev-ui/dag/extractor.js.map +1 -0
- package/dist/dev-ui/dag/types.d.ts +42 -0
- package/dist/dev-ui/dag/types.d.ts.map +1 -0
- package/dist/dev-ui/dag/types.js +2 -0
- package/dist/dev-ui/dag/types.js.map +1 -0
- package/dist/dev-ui/dev-server.d.ts +18 -0
- package/dist/dev-ui/dev-server.d.ts.map +1 -0
- package/dist/dev-ui/dev-server.js +222 -0
- package/dist/dev-ui/dev-server.js.map +1 -0
- package/dist/dev-ui/index.d.ts +3 -0
- package/dist/dev-ui/index.d.ts.map +1 -0
- package/dist/dev-ui/index.js +2 -0
- package/dist/dev-ui/index.js.map +1 -0
- package/dist/dev-ui/pty.d.ts +16 -0
- package/dist/dev-ui/pty.d.ts.map +1 -0
- package/dist/dev-ui/pty.js +87 -0
- package/dist/dev-ui/pty.js.map +1 -0
- package/dist/dev-ui/watcher.d.ts +12 -0
- package/dist/dev-ui/watcher.d.ts.map +1 -0
- package/dist/dev-ui/watcher.js +162 -0
- package/dist/dev-ui/watcher.js.map +1 -0
- package/dist/dev-ui/ws.d.ts +52 -0
- package/dist/dev-ui/ws.d.ts.map +1 -0
- package/dist/dev-ui/ws.js +32 -0
- package/dist/dev-ui/ws.js.map +1 -0
- package/dist/dev-ui-client/assets/index-C-LxzUII.css +32 -0
- package/dist/dev-ui-client/assets/index-DAKTQEvj.js +1 -0
- package/dist/dev-ui-client/assets/index-aAIwXl4O.js +127 -0
- package/dist/dev-ui-client/index.html +13 -0
- package/dist/discover.d.ts +15 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +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 +21 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +6 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +1 -0
- package/dist/workflow.d.ts +22 -0
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +97 -2
- package/dist/workflow.js.map +1 -1
- package/package.json +28 -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.d.ts +0 -63
- package/dist/cli/install.d.ts.map +0 -1
- package/dist/cli/install.js +0 -239
- package/dist/cli/install.js.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { pgSchema } from "drizzle-orm/pg-core";
|
|
2
|
+
import { env } from "~/env";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Use a dedicated PostgreSQL schema for this app's tables.
|
|
6
|
+
* @see https://orm.drizzle.team/docs/schemas
|
|
7
|
+
*/
|
|
8
|
+
export const schema = pgSchema(env.DATABASE_SCHEMA);
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Helper to create tables in the app's schema.
|
|
12
|
+
* Always use this instead of pgTable to ensure tables are in the correct schema.
|
|
13
|
+
*/
|
|
14
|
+
const createTable = schema.table;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
@import "tailwindcss";
|
|
2
|
+
@import "tw-animate-css";
|
|
3
|
+
|
|
4
|
+
@custom-variant dark (&:is(.dark *));
|
|
5
|
+
|
|
6
|
+
@theme {
|
|
7
|
+
--font-sans: var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif,
|
|
8
|
+
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@theme inline {
|
|
12
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
13
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
14
|
+
--radius-lg: var(--radius);
|
|
15
|
+
--radius-xl: calc(var(--radius) + 4px);
|
|
16
|
+
--color-background: var(--background);
|
|
17
|
+
--color-foreground: var(--foreground);
|
|
18
|
+
--color-card: var(--card);
|
|
19
|
+
--color-card-foreground: var(--card-foreground);
|
|
20
|
+
--color-popover: var(--popover);
|
|
21
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
22
|
+
--color-primary: var(--primary);
|
|
23
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
24
|
+
--color-secondary: var(--secondary);
|
|
25
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
26
|
+
--color-muted: var(--muted);
|
|
27
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
28
|
+
--color-accent: var(--accent);
|
|
29
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
30
|
+
--color-destructive: var(--destructive);
|
|
31
|
+
--color-border: var(--border);
|
|
32
|
+
--color-input: var(--input);
|
|
33
|
+
--color-ring: var(--ring);
|
|
34
|
+
--color-chart-1: var(--chart-1);
|
|
35
|
+
--color-chart-2: var(--chart-2);
|
|
36
|
+
--color-chart-3: var(--chart-3);
|
|
37
|
+
--color-chart-4: var(--chart-4);
|
|
38
|
+
--color-chart-5: var(--chart-5);
|
|
39
|
+
--color-sidebar: var(--sidebar);
|
|
40
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
41
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
42
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
43
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
44
|
+
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
45
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
46
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
:root {
|
|
50
|
+
--radius: 0.65rem;
|
|
51
|
+
--background: oklch(1 0 0);
|
|
52
|
+
--foreground: oklch(0.141 0.005 285.823);
|
|
53
|
+
--card: oklch(1 0 0);
|
|
54
|
+
--card-foreground: oklch(0.141 0.005 285.823);
|
|
55
|
+
--popover: oklch(1 0 0);
|
|
56
|
+
--popover-foreground: oklch(0.141 0.005 285.823);
|
|
57
|
+
--primary: oklch(0.646 0.222 41.116);
|
|
58
|
+
--primary-foreground: oklch(0.98 0.016 73.684);
|
|
59
|
+
--secondary: oklch(0.967 0.001 286.375);
|
|
60
|
+
--secondary-foreground: oklch(0.21 0.006 285.885);
|
|
61
|
+
--muted: oklch(0.967 0.001 286.375);
|
|
62
|
+
--muted-foreground: oklch(0.552 0.016 285.938);
|
|
63
|
+
--accent: oklch(0.967 0.001 286.375);
|
|
64
|
+
--accent-foreground: oklch(0.21 0.006 285.885);
|
|
65
|
+
--destructive: oklch(0.577 0.245 27.325);
|
|
66
|
+
--border: oklch(0.92 0.004 286.32);
|
|
67
|
+
--input: oklch(0.92 0.004 286.32);
|
|
68
|
+
--ring: oklch(0.75 0.183 55.934);
|
|
69
|
+
--chart-1: oklch(0.837 0.128 66.29);
|
|
70
|
+
--chart-2: oklch(0.705 0.213 47.604);
|
|
71
|
+
--chart-3: oklch(0.646 0.222 41.116);
|
|
72
|
+
--chart-4: oklch(0.553 0.195 38.402);
|
|
73
|
+
--chart-5: oklch(0.47 0.157 37.304);
|
|
74
|
+
--sidebar: oklch(0.985 0 0);
|
|
75
|
+
--sidebar-foreground: oklch(0.141 0.005 285.823);
|
|
76
|
+
--sidebar-primary: oklch(0.646 0.222 41.116);
|
|
77
|
+
--sidebar-primary-foreground: oklch(0.98 0.016 73.684);
|
|
78
|
+
--sidebar-accent: oklch(0.967 0.001 286.375);
|
|
79
|
+
--sidebar-accent-foreground: oklch(0.21 0.006 285.885);
|
|
80
|
+
--sidebar-border: oklch(0.92 0.004 286.32);
|
|
81
|
+
--sidebar-ring: oklch(0.75 0.183 55.934);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.dark {
|
|
85
|
+
--background: oklch(0.141 0.005 285.823);
|
|
86
|
+
--foreground: oklch(0.985 0 0);
|
|
87
|
+
--card: oklch(0.21 0.006 285.885);
|
|
88
|
+
--card-foreground: oklch(0.985 0 0);
|
|
89
|
+
--popover: oklch(0.21 0.006 285.885);
|
|
90
|
+
--popover-foreground: oklch(0.985 0 0);
|
|
91
|
+
--primary: oklch(0.705 0.213 47.604);
|
|
92
|
+
--primary-foreground: oklch(0.98 0.016 73.684);
|
|
93
|
+
--secondary: oklch(0.274 0.006 286.033);
|
|
94
|
+
--secondary-foreground: oklch(0.985 0 0);
|
|
95
|
+
--muted: oklch(0.274 0.006 286.033);
|
|
96
|
+
--muted-foreground: oklch(0.705 0.015 286.067);
|
|
97
|
+
--accent: oklch(0.274 0.006 286.033);
|
|
98
|
+
--accent-foreground: oklch(0.985 0 0);
|
|
99
|
+
--destructive: oklch(0.704 0.191 22.216);
|
|
100
|
+
--border: oklch(1 0 0 / 10%);
|
|
101
|
+
--input: oklch(1 0 0 / 15%);
|
|
102
|
+
--ring: oklch(0.408 0.123 38.172);
|
|
103
|
+
--chart-1: oklch(0.837 0.128 66.29);
|
|
104
|
+
--chart-2: oklch(0.705 0.213 47.604);
|
|
105
|
+
--chart-3: oklch(0.646 0.222 41.116);
|
|
106
|
+
--chart-4: oklch(0.553 0.195 38.402);
|
|
107
|
+
--chart-5: oklch(0.47 0.157 37.304);
|
|
108
|
+
--sidebar: oklch(0.21 0.006 285.885);
|
|
109
|
+
--sidebar-foreground: oklch(0.985 0 0);
|
|
110
|
+
--sidebar-primary: oklch(0.705 0.213 47.604);
|
|
111
|
+
--sidebar-primary-foreground: oklch(0.98 0.016 73.684);
|
|
112
|
+
--sidebar-accent: oklch(0.274 0.006 286.033);
|
|
113
|
+
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
114
|
+
--sidebar-border: oklch(1 0 0 / 10%);
|
|
115
|
+
--sidebar-ring: oklch(0.408 0.123 38.172);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@layer base {
|
|
119
|
+
* {
|
|
120
|
+
@apply border-border outline-ring/50;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
body {
|
|
124
|
+
@apply bg-background text-foreground;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defaultShouldDehydrateQuery,
|
|
3
|
+
QueryClient,
|
|
4
|
+
} from "@tanstack/react-query";
|
|
5
|
+
import SuperJSON from "superjson";
|
|
6
|
+
|
|
7
|
+
export const createQueryClient = () =>
|
|
8
|
+
new QueryClient({
|
|
9
|
+
defaultOptions: {
|
|
10
|
+
queries: {
|
|
11
|
+
// With SSR, we usually want to set some default staleTime
|
|
12
|
+
// above 0 to avoid refetching immediately on the client
|
|
13
|
+
staleTime: 30 * 1000,
|
|
14
|
+
},
|
|
15
|
+
dehydrate: {
|
|
16
|
+
serializeData: SuperJSON.serialize,
|
|
17
|
+
shouldDehydrateQuery: (query) =>
|
|
18
|
+
defaultShouldDehydrateQuery(query) ||
|
|
19
|
+
query.state.status === "pending",
|
|
20
|
+
},
|
|
21
|
+
hydrate: {
|
|
22
|
+
deserializeData: SuperJSON.deserialize,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { QueryClientProvider, type QueryClient } from "@tanstack/react-query";
|
|
4
|
+
import { httpBatchStreamLink, loggerLink } from "@trpc/client";
|
|
5
|
+
import { createTRPCReact } from "@trpc/react-query";
|
|
6
|
+
import { type inferRouterInputs, type inferRouterOutputs } from "@trpc/server";
|
|
7
|
+
import { useState } from "react";
|
|
8
|
+
import SuperJSON from "superjson";
|
|
9
|
+
|
|
10
|
+
import { type AppRouter } from "~/server/api/root";
|
|
11
|
+
import { createQueryClient } from "./query-client";
|
|
12
|
+
|
|
13
|
+
let clientQueryClientSingleton: QueryClient | undefined = undefined;
|
|
14
|
+
const getQueryClient = () => {
|
|
15
|
+
if (typeof window === "undefined") {
|
|
16
|
+
// Server: always make a new query client
|
|
17
|
+
return createQueryClient();
|
|
18
|
+
}
|
|
19
|
+
// Browser: use singleton pattern to keep the same query client
|
|
20
|
+
clientQueryClientSingleton ??= createQueryClient();
|
|
21
|
+
|
|
22
|
+
return clientQueryClientSingleton;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const api = createTRPCReact<AppRouter>();
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Inference helper for inputs.
|
|
29
|
+
*
|
|
30
|
+
* @example type HelloInput = RouterInputs['example']['hello']
|
|
31
|
+
*/
|
|
32
|
+
export type RouterInputs = inferRouterInputs<AppRouter>;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Inference helper for outputs.
|
|
36
|
+
*
|
|
37
|
+
* @example type HelloOutput = RouterOutputs['example']['hello']
|
|
38
|
+
*/
|
|
39
|
+
export type RouterOutputs = inferRouterOutputs<AppRouter>;
|
|
40
|
+
|
|
41
|
+
export function TRPCReactProvider(props: { children: React.ReactNode }) {
|
|
42
|
+
const queryClient = getQueryClient();
|
|
43
|
+
|
|
44
|
+
const [trpcClient] = useState(() =>
|
|
45
|
+
api.createClient({
|
|
46
|
+
links: [
|
|
47
|
+
loggerLink({
|
|
48
|
+
enabled: (op) =>
|
|
49
|
+
process.env.NODE_ENV === "development" ||
|
|
50
|
+
(op.direction === "down" && op.result instanceof Error),
|
|
51
|
+
}),
|
|
52
|
+
httpBatchStreamLink({
|
|
53
|
+
transformer: SuperJSON,
|
|
54
|
+
url: `${getBaseUrl()}/api/trpc`,
|
|
55
|
+
headers: () => {
|
|
56
|
+
const headers = new Headers();
|
|
57
|
+
headers.set("x-trpc-source", "nextjs-react");
|
|
58
|
+
return headers;
|
|
59
|
+
},
|
|
60
|
+
}),
|
|
61
|
+
],
|
|
62
|
+
})
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
return (
|
|
66
|
+
<QueryClientProvider client={queryClient}>
|
|
67
|
+
<api.Provider client={trpcClient} queryClient={queryClient}>
|
|
68
|
+
{props.children}
|
|
69
|
+
</api.Provider>
|
|
70
|
+
</QueryClientProvider>
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function getBaseUrl() {
|
|
75
|
+
if (typeof window !== "undefined") return window.location.origin;
|
|
76
|
+
if (process.env.VERCEL_URL) return `https://${process.env.VERCEL_URL}`;
|
|
77
|
+
return `http://localhost:${process.env.PORT ?? 3000}`;
|
|
78
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
|
|
3
|
+
import { createHydrationHelpers } from "@trpc/react-query/rsc";
|
|
4
|
+
import { headers } from "next/headers";
|
|
5
|
+
import { cache } from "react";
|
|
6
|
+
|
|
7
|
+
import { createCaller, type AppRouter } from "~/server/api/root";
|
|
8
|
+
import { createTRPCContext } from "~/server/api/trpc";
|
|
9
|
+
import { createQueryClient } from "./query-client";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* This wraps the `createTRPCContext` helper and provides the required context for the tRPC API when
|
|
13
|
+
* handling a tRPC call from a React Server Component.
|
|
14
|
+
*/
|
|
15
|
+
const createContext = cache(async () => {
|
|
16
|
+
const heads = new Headers(await headers());
|
|
17
|
+
heads.set("x-trpc-source", "rsc");
|
|
18
|
+
|
|
19
|
+
return createTRPCContext({
|
|
20
|
+
headers: heads,
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const getQueryClient = cache(createQueryClient);
|
|
25
|
+
const caller = createCaller(createContext);
|
|
26
|
+
|
|
27
|
+
export const { trpc: api, HydrateClient } = createHydrationHelpers<AppRouter>(
|
|
28
|
+
caller,
|
|
29
|
+
getQueryClient
|
|
30
|
+
);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"noUnusedLocals": true,
|
|
5
|
+
"noUnusedParameters": true,
|
|
6
|
+
"allowUnreachableCode": false,
|
|
7
|
+
"allowUnusedLabels": false
|
|
8
|
+
},
|
|
9
|
+
"exclude": [
|
|
10
|
+
"node_modules",
|
|
11
|
+
".next",
|
|
12
|
+
"dist",
|
|
13
|
+
"coverage",
|
|
14
|
+
"**/*.test.ts",
|
|
15
|
+
"**/*.test.tsx",
|
|
16
|
+
"**/*.spec.ts",
|
|
17
|
+
"**/*.spec.tsx",
|
|
18
|
+
"src/**/__tests__/**",
|
|
19
|
+
"tests/**",
|
|
20
|
+
"vitest.config.*",
|
|
21
|
+
"vitest.setup.*"
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
/* Base Options: */
|
|
4
|
+
"esModuleInterop": true,
|
|
5
|
+
"skipLibCheck": true,
|
|
6
|
+
"target": "es2022",
|
|
7
|
+
"allowJs": true,
|
|
8
|
+
"resolveJsonModule": true,
|
|
9
|
+
"moduleDetection": "force",
|
|
10
|
+
"isolatedModules": true,
|
|
11
|
+
"verbatimModuleSyntax": true,
|
|
12
|
+
|
|
13
|
+
/* Strictness */
|
|
14
|
+
"strict": true,
|
|
15
|
+
"noUncheckedIndexedAccess": true,
|
|
16
|
+
"checkJs": true,
|
|
17
|
+
|
|
18
|
+
/* Bundled projects */
|
|
19
|
+
"lib": ["dom", "dom.iterable", "ES2022"],
|
|
20
|
+
"noEmit": true,
|
|
21
|
+
"module": "ESNext",
|
|
22
|
+
"moduleResolution": "Bundler",
|
|
23
|
+
"jsx": "preserve",
|
|
24
|
+
"plugins": [{ "name": "next" }],
|
|
25
|
+
"incremental": true,
|
|
26
|
+
|
|
27
|
+
/* Path Aliases */
|
|
28
|
+
"baseUrl": ".",
|
|
29
|
+
"paths": {
|
|
30
|
+
"~/*": ["./src/*"]
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"include": [
|
|
34
|
+
"next-env.d.ts",
|
|
35
|
+
"**/*.ts",
|
|
36
|
+
"**/*.tsx",
|
|
37
|
+
"**/*.cjs",
|
|
38
|
+
"**/*.js",
|
|
39
|
+
".next/types/**/*.ts"
|
|
40
|
+
],
|
|
41
|
+
"exclude": ["node_modules", "generated"]
|
|
42
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"noUnusedLocals": true,
|
|
5
|
+
"noUnusedParameters": true,
|
|
6
|
+
"allowUnreachableCode": false,
|
|
7
|
+
},
|
|
8
|
+
"include": [
|
|
9
|
+
"**/*.test.ts",
|
|
10
|
+
"**/*.test.tsx",
|
|
11
|
+
"**/*.spec.ts",
|
|
12
|
+
"**/*.spec.tsx",
|
|
13
|
+
"src/**/__tests__/*.ts",
|
|
14
|
+
"src/**/__tests__/*.tsx",
|
|
15
|
+
"src/tests/**/*.ts",
|
|
16
|
+
"tests/**/*.ts",
|
|
17
|
+
"tests/**/*.tsx",
|
|
18
|
+
"vitest.config.*",
|
|
19
|
+
"vitest.setup.*"
|
|
20
|
+
]
|
|
21
|
+
}
|
package/dist/cli/install.d.ts
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
export interface McpCommandResult {
|
|
2
|
-
command: string[];
|
|
3
|
-
isLocal: boolean;
|
|
4
|
-
packageRoot?: string;
|
|
5
|
-
}
|
|
6
|
-
export interface InstallSettings {
|
|
7
|
-
mcpCommand: string[];
|
|
8
|
-
installedAt: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Build the MCP command by taking the current invocation and replacing "install" with "mcp start"
|
|
12
|
-
*/
|
|
13
|
-
export declare function buildMcpCommand(): McpCommandResult;
|
|
14
|
-
/**
|
|
15
|
-
* Get the settings directory path
|
|
16
|
-
*/
|
|
17
|
-
export declare function getSettingsDir(): string;
|
|
18
|
-
/**
|
|
19
|
-
* Get the settings file path
|
|
20
|
-
*/
|
|
21
|
-
export declare function getSettingsPath(): string;
|
|
22
|
-
/**
|
|
23
|
-
* Read current settings
|
|
24
|
-
*/
|
|
25
|
-
export declare function readSettings(): InstallSettings | null;
|
|
26
|
-
/**
|
|
27
|
-
* Write settings to disk
|
|
28
|
-
*/
|
|
29
|
-
export declare function writeSettings(settings: InstallSettings): void;
|
|
30
|
-
/**
|
|
31
|
-
* Check if Claude Code CLI is available
|
|
32
|
-
*/
|
|
33
|
-
export declare function isClaudeCliAvailable(): boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Add the 0pflow marketplace to Claude Code
|
|
36
|
-
*/
|
|
37
|
-
export declare function addMarketplace(mcpResult: McpCommandResult, stdio?: "inherit" | "ignore"): {
|
|
38
|
-
success: boolean;
|
|
39
|
-
error?: string;
|
|
40
|
-
};
|
|
41
|
-
/**
|
|
42
|
-
* Install the 0pflow plugin to Claude Code
|
|
43
|
-
*/
|
|
44
|
-
export declare function installPlugin(stdio?: "inherit" | "ignore"): {
|
|
45
|
-
success: boolean;
|
|
46
|
-
error?: string;
|
|
47
|
-
};
|
|
48
|
-
export interface InstallOptions {
|
|
49
|
-
force?: boolean;
|
|
50
|
-
verbose?: boolean;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Run the install command
|
|
54
|
-
*/
|
|
55
|
-
export declare function runInstall(options?: InstallOptions): Promise<void>;
|
|
56
|
-
export interface UninstallOptions {
|
|
57
|
-
verbose?: boolean;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Run the uninstall command
|
|
61
|
-
*/
|
|
62
|
-
export declare function runUninstall(options?: UninstallOptions): Promise<void>;
|
|
63
|
-
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,gBAAgB,CAoClD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,eAAe,GAAG,IAAI,CAUrD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAM7D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAO9C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,gBAAgB,EAAE,KAAK,GAAE,SAAS,GAAG,QAAoB,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAazI;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,GAAE,SAAS,GAAG,QAAoB,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAU3G;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE5E;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgChF"}
|
package/dist/cli/install.js
DELETED
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
import { execSync } from "node:child_process";
|
|
2
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { dirname, join, resolve } from "node:path";
|
|
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
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Build the MCP command by taking the current invocation and replacing "install" with "mcp start"
|
|
18
|
-
*/
|
|
19
|
-
export function buildMcpCommand() {
|
|
20
|
-
const args = [...process.argv];
|
|
21
|
-
// Find and replace "install" with "mcp", "start"
|
|
22
|
-
const installIndex = args.findIndex(arg => arg === "install");
|
|
23
|
-
const baseArgs = installIndex !== -1
|
|
24
|
-
? args.slice(0, installIndex)
|
|
25
|
-
: args;
|
|
26
|
-
const scriptPath = baseArgs[1] || "";
|
|
27
|
-
// If we're running a .ts file, tsx hides itself from argv
|
|
28
|
-
// so we see "node file.ts" but need "npx tsx file.ts" to actually run it
|
|
29
|
-
if (scriptPath.endsWith(".ts")) {
|
|
30
|
-
// Script is at packages/core/src/cli/index.ts, repo root is 4 levels up
|
|
31
|
-
const packageRoot = resolve(dirname(scriptPath), "../../../..");
|
|
32
|
-
return {
|
|
33
|
-
command: ["npx", "tsx", scriptPath, "mcp", "start"],
|
|
34
|
-
isLocal: true,
|
|
35
|
-
packageRoot,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
// If running from npx cache or node_modules, use npx 0pflow@version
|
|
39
|
-
if (scriptPath.includes(".npm/_npx") || scriptPath.includes("node_modules/0pflow")) {
|
|
40
|
-
const ver = getNpmVersionForMcp();
|
|
41
|
-
return {
|
|
42
|
-
command: ["npx", "-y", `0pflow@${ver}`, "mcp", "start"],
|
|
43
|
-
isLocal: false,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
return {
|
|
47
|
-
command: [...baseArgs, "mcp", "start"],
|
|
48
|
-
isLocal: false,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Get the settings directory path
|
|
53
|
-
*/
|
|
54
|
-
export function getSettingsDir() {
|
|
55
|
-
const home = process.env.HOME || process.env.USERPROFILE || "~";
|
|
56
|
-
return join(home, ".config", "0pflow");
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Get the settings file path
|
|
60
|
-
*/
|
|
61
|
-
export function getSettingsPath() {
|
|
62
|
-
return join(getSettingsDir(), "settings.json");
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Read current settings
|
|
66
|
-
*/
|
|
67
|
-
export function readSettings() {
|
|
68
|
-
const settingsPath = getSettingsPath();
|
|
69
|
-
if (!existsSync(settingsPath)) {
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
try {
|
|
73
|
-
return JSON.parse(readFileSync(settingsPath, "utf-8"));
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Write settings to disk
|
|
81
|
-
*/
|
|
82
|
-
export function writeSettings(settings) {
|
|
83
|
-
const settingsDir = getSettingsDir();
|
|
84
|
-
if (!existsSync(settingsDir)) {
|
|
85
|
-
mkdirSync(settingsDir, { recursive: true });
|
|
86
|
-
}
|
|
87
|
-
writeFileSync(getSettingsPath(), JSON.stringify(settings, null, 2) + "\n");
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Check if Claude Code CLI is available
|
|
91
|
-
*/
|
|
92
|
-
export function isClaudeCliAvailable() {
|
|
93
|
-
try {
|
|
94
|
-
execSync("claude --version", { stdio: "ignore" });
|
|
95
|
-
return true;
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Add the 0pflow marketplace to Claude Code
|
|
103
|
-
*/
|
|
104
|
-
export function addMarketplace(mcpResult, stdio = "inherit") {
|
|
105
|
-
try {
|
|
106
|
-
const marketplaceSource = mcpResult.isLocal && mcpResult.packageRoot
|
|
107
|
-
? mcpResult.packageRoot
|
|
108
|
-
: "timescale/0pflow";
|
|
109
|
-
execSync(`claude plugin marketplace add ${marketplaceSource}`, { stdio });
|
|
110
|
-
return { success: true };
|
|
111
|
-
}
|
|
112
|
-
catch (err) {
|
|
113
|
-
return {
|
|
114
|
-
success: false,
|
|
115
|
-
error: err instanceof Error ? err.message : String(err)
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Install the 0pflow plugin to Claude Code
|
|
121
|
-
*/
|
|
122
|
-
export function installPlugin(stdio = "inherit") {
|
|
123
|
-
try {
|
|
124
|
-
execSync("claude plugin install 0pflow", { stdio });
|
|
125
|
-
return { success: true };
|
|
126
|
-
}
|
|
127
|
-
catch (err) {
|
|
128
|
-
return {
|
|
129
|
-
success: false,
|
|
130
|
-
error: err instanceof Error ? err.message : String(err)
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Run the install command
|
|
136
|
-
*/
|
|
137
|
-
export async function runInstall(options = {}) {
|
|
138
|
-
const { verbose = false } = options;
|
|
139
|
-
// Check if Claude CLI is available
|
|
140
|
-
if (!isClaudeCliAvailable()) {
|
|
141
|
-
console.log(pc.red("Error: Claude Code CLI not found."));
|
|
142
|
-
console.log(pc.dim("Install Claude Code first: https://claude.ai/code"));
|
|
143
|
-
process.exit(1);
|
|
144
|
-
}
|
|
145
|
-
// Build MCP command from current invocation
|
|
146
|
-
const mcpResult = buildMcpCommand();
|
|
147
|
-
if (verbose) {
|
|
148
|
-
console.log(pc.dim("MCP command:"), mcpResult.command.join(" "));
|
|
149
|
-
}
|
|
150
|
-
// Check for existing installation
|
|
151
|
-
const existingSettings = readSettings();
|
|
152
|
-
if (existingSettings && !options.force) {
|
|
153
|
-
console.log(pc.yellow("Already installed."), pc.dim("Use --force to reinstall."));
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
if (existingSettings) {
|
|
157
|
-
console.log(pc.dim("Existing installation found, reinstalling (--force)..."));
|
|
158
|
-
await runUninstall({ verbose });
|
|
159
|
-
}
|
|
160
|
-
// Write settings
|
|
161
|
-
const settings = {
|
|
162
|
-
mcpCommand: mcpResult.command,
|
|
163
|
-
installedAt: new Date().toISOString(),
|
|
164
|
-
};
|
|
165
|
-
writeSettings(settings);
|
|
166
|
-
// Development mode: just show the command to use
|
|
167
|
-
if (mcpResult.isLocal) {
|
|
168
|
-
printBanner();
|
|
169
|
-
console.log(pc.yellow("Development mode detected"));
|
|
170
|
-
console.log();
|
|
171
|
-
console.log(pc.bold("To use the plugin, run Claude Code with:"));
|
|
172
|
-
console.log();
|
|
173
|
-
console.log(pc.cyan(` claude --plugin-dir ${mcpResult.packageRoot}`));
|
|
174
|
-
console.log();
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
// Add marketplace (suppress claude CLI output in non-verbose mode)
|
|
178
|
-
const stdio = verbose ? "inherit" : "ignore";
|
|
179
|
-
const marketplaceResult = addMarketplace(mcpResult, stdio);
|
|
180
|
-
const pluginResult = installPlugin(stdio);
|
|
181
|
-
if (verbose) {
|
|
182
|
-
console.log(marketplaceResult.success ? pc.green("✓ Marketplace added") : pc.yellow("⚠ Marketplace may already exist"));
|
|
183
|
-
console.log(pluginResult.success ? pc.green("✓ Plugin installed") : pc.red("✗ Plugin install failed"));
|
|
184
|
-
}
|
|
185
|
-
if (pluginResult.success) {
|
|
186
|
-
printBanner();
|
|
187
|
-
console.log(pc.green("✓"), "Installed successfully");
|
|
188
|
-
console.log();
|
|
189
|
-
console.log(pc.bold("Next steps:"));
|
|
190
|
-
console.log(pc.dim(" 1. Restart Claude Code in a new project folder"));
|
|
191
|
-
console.log(pc.dim(" 2. Ask Claude to create a workflow, e.g.:"));
|
|
192
|
-
console.log(pc.cyan(' "Create a workflow that enriches leads from a CSV file"'));
|
|
193
|
-
console.log();
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
console.log(pc.red("✗"), "Installation failed");
|
|
197
|
-
process.exit(1);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Run the uninstall command
|
|
202
|
-
*/
|
|
203
|
-
export async function runUninstall(options = {}) {
|
|
204
|
-
const { verbose = false } = options;
|
|
205
|
-
const stdio = verbose ? "inherit" : "ignore";
|
|
206
|
-
// Uninstall plugin and marketplace from Claude
|
|
207
|
-
if (isClaudeCliAvailable()) {
|
|
208
|
-
try {
|
|
209
|
-
execSync("claude plugin uninstall 0pflow", { stdio });
|
|
210
|
-
if (verbose)
|
|
211
|
-
console.log(pc.green("✓"), "Plugin uninstalled");
|
|
212
|
-
}
|
|
213
|
-
catch {
|
|
214
|
-
if (verbose)
|
|
215
|
-
console.log(pc.yellow("⚠"), "Could not uninstall plugin");
|
|
216
|
-
}
|
|
217
|
-
try {
|
|
218
|
-
execSync("claude plugin marketplace remove 0pflow", { stdio });
|
|
219
|
-
if (verbose)
|
|
220
|
-
console.log(pc.green("✓"), "Marketplace removed");
|
|
221
|
-
}
|
|
222
|
-
catch {
|
|
223
|
-
if (verbose)
|
|
224
|
-
console.log(pc.yellow("⚠"), "Could not remove marketplace");
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
// Remove settings file
|
|
228
|
-
const settingsPath = getSettingsPath();
|
|
229
|
-
if (existsSync(settingsPath)) {
|
|
230
|
-
const { unlinkSync } = await import("node:fs");
|
|
231
|
-
unlinkSync(settingsPath);
|
|
232
|
-
if (verbose)
|
|
233
|
-
console.log(pc.green("✓"), "Settings file removed");
|
|
234
|
-
}
|
|
235
|
-
if (verbose) {
|
|
236
|
-
console.log(pc.green("Uninstalled."));
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
//# sourceMappingURL=install.js.map
|