neon-init 0.13.1 → 0.15.0

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.
Files changed (117) hide show
  1. package/dist/cli.js +368 -33
  2. package/dist/cli.js.map +1 -1
  3. package/dist/index.d.ts +15 -3
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +220 -41
  6. package/dist/index.js.map +1 -1
  7. package/dist/interactive.d.ts +12 -0
  8. package/dist/interactive.d.ts.map +1 -0
  9. package/dist/interactive.js +495 -0
  10. package/dist/interactive.js.map +1 -0
  11. package/dist/lib/agents.d.ts +23 -0
  12. package/dist/lib/agents.d.ts.map +1 -0
  13. package/dist/lib/agents.js +148 -0
  14. package/dist/lib/agents.js.map +1 -0
  15. package/dist/lib/auth.d.ts +10 -3
  16. package/dist/lib/auth.d.ts.map +1 -1
  17. package/dist/lib/auth.js +20 -13
  18. package/dist/lib/auth.js.map +1 -1
  19. package/dist/lib/bootstrap.d.ts +30 -0
  20. package/dist/lib/bootstrap.d.ts.map +1 -0
  21. package/dist/lib/bootstrap.js +61 -0
  22. package/dist/lib/bootstrap.js.map +1 -0
  23. package/dist/lib/build-config.d.ts +5 -0
  24. package/dist/lib/build-config.d.ts.map +1 -0
  25. package/dist/lib/build-config.js +6 -0
  26. package/dist/lib/build-config.js.map +1 -0
  27. package/dist/lib/detect-agent.d.ts +22 -0
  28. package/dist/lib/detect-agent.d.ts.map +1 -0
  29. package/dist/lib/detect-agent.js +65 -0
  30. package/dist/lib/detect-agent.js.map +1 -0
  31. package/dist/lib/editors.d.ts.map +1 -1
  32. package/dist/lib/editors.js +1 -2
  33. package/dist/lib/editors.js.map +1 -1
  34. package/dist/lib/extension.d.ts +11 -3
  35. package/dist/lib/extension.d.ts.map +1 -1
  36. package/dist/lib/extension.js +29 -9
  37. package/dist/lib/extension.js.map +1 -1
  38. package/dist/lib/inspect.d.ts +28 -0
  39. package/dist/lib/inspect.d.ts.map +1 -0
  40. package/dist/lib/inspect.js +190 -0
  41. package/dist/lib/inspect.js.map +1 -0
  42. package/dist/lib/install.d.ts +10 -4
  43. package/dist/lib/install.d.ts.map +1 -1
  44. package/dist/lib/install.js +74 -71
  45. package/dist/lib/install.js.map +1 -1
  46. package/dist/lib/neonctl.d.ts +32 -0
  47. package/dist/lib/neonctl.d.ts.map +1 -0
  48. package/dist/lib/neonctl.js +149 -0
  49. package/dist/lib/neonctl.js.map +1 -0
  50. package/dist/lib/phases/auth.d.ts +12 -0
  51. package/dist/lib/phases/auth.d.ts.map +1 -0
  52. package/dist/lib/phases/auth.js +188 -0
  53. package/dist/lib/phases/auth.js.map +1 -0
  54. package/dist/lib/phases/cleanup.d.ts +12 -0
  55. package/dist/lib/phases/cleanup.d.ts.map +1 -0
  56. package/dist/lib/phases/cleanup.js +29 -0
  57. package/dist/lib/phases/cleanup.js.map +1 -0
  58. package/dist/lib/phases/db.d.ts +17 -0
  59. package/dist/lib/phases/db.d.ts.map +1 -0
  60. package/dist/lib/phases/db.js +258 -0
  61. package/dist/lib/phases/db.js.map +1 -0
  62. package/dist/lib/phases/getting-started.d.ts +26 -0
  63. package/dist/lib/phases/getting-started.d.ts.map +1 -0
  64. package/dist/lib/phases/getting-started.js +195 -0
  65. package/dist/lib/phases/getting-started.js.map +1 -0
  66. package/dist/lib/phases/mcp.d.ts +15 -0
  67. package/dist/lib/phases/mcp.d.ts.map +1 -0
  68. package/dist/lib/phases/mcp.js +179 -0
  69. package/dist/lib/phases/mcp.js.map +1 -0
  70. package/dist/lib/phases/migrations.d.ts +14 -0
  71. package/dist/lib/phases/migrations.d.ts.map +1 -0
  72. package/dist/lib/phases/migrations.js +239 -0
  73. package/dist/lib/phases/migrations.js.map +1 -0
  74. package/dist/lib/phases/neon-auth.d.ts +13 -0
  75. package/dist/lib/phases/neon-auth.d.ts.map +1 -0
  76. package/dist/lib/phases/neon-auth.js +117 -0
  77. package/dist/lib/phases/neon-auth.js.map +1 -0
  78. package/dist/lib/phases/setup.d.ts +41 -0
  79. package/dist/lib/phases/setup.d.ts.map +1 -0
  80. package/dist/lib/phases/setup.js +689 -0
  81. package/dist/lib/phases/setup.js.map +1 -0
  82. package/dist/lib/phases/skills.d.ts +14 -0
  83. package/dist/lib/phases/skills.d.ts.map +1 -0
  84. package/dist/lib/phases/skills.js +80 -0
  85. package/dist/lib/phases/skills.js.map +1 -0
  86. package/dist/lib/phases/status.d.ts +10 -0
  87. package/dist/lib/phases/status.d.ts.map +1 -0
  88. package/dist/lib/phases/status.js +65 -0
  89. package/dist/lib/phases/status.js.map +1 -0
  90. package/dist/lib/resolve-context.d.ts +19 -0
  91. package/dist/lib/resolve-context.d.ts.map +1 -0
  92. package/dist/lib/resolve-context.js +112 -0
  93. package/dist/lib/resolve-context.js.map +1 -0
  94. package/dist/lib/route-command.d.ts +8 -0
  95. package/dist/lib/route-command.d.ts.map +1 -0
  96. package/dist/lib/route-command.js +195 -0
  97. package/dist/lib/route-command.js.map +1 -0
  98. package/dist/lib/skills.d.ts +21 -4
  99. package/dist/lib/skills.d.ts.map +1 -1
  100. package/dist/lib/skills.js +129 -22
  101. package/dist/lib/skills.js.map +1 -1
  102. package/dist/lib/types.d.ts +146 -13
  103. package/dist/lib/types.d.ts.map +1 -1
  104. package/dist/lib/types.js +1 -1
  105. package/dist/lib/vsix.d.ts +15 -0
  106. package/dist/lib/vsix.d.ts.map +1 -0
  107. package/dist/lib/vsix.js +91 -0
  108. package/dist/lib/vsix.js.map +1 -0
  109. package/dist/v2.d.ts +31 -0
  110. package/dist/v2.d.ts.map +1 -0
  111. package/dist/v2.js +147 -0
  112. package/dist/v2.js.map +1 -0
  113. package/package.json +9 -4
  114. package/dist/lib/mcp-config.d.ts +0 -24
  115. package/dist/lib/mcp-config.d.ts.map +0 -1
  116. package/dist/lib/mcp-config.js +0 -51
  117. package/dist/lib/mcp-config.js.map +0 -1
package/dist/cli.js CHANGED
@@ -1,43 +1,378 @@
1
1
  #!/usr/bin/env node
2
- import { init } from "./index.js";
2
+ import { detectAgent } from "./lib/detect-agent.js";
3
+ import { interactiveInit } from "./interactive.js";
4
+ import { handleAuthPhase } from "./lib/phases/auth.js";
5
+ import { handleDbPhase } from "./lib/phases/db.js";
6
+ import { handleGettingStartedPhase } from "./lib/phases/getting-started.js";
7
+ import { handleMcpPhase } from "./lib/phases/mcp.js";
8
+ import { handleMigrationsPhase } from "./lib/phases/migrations.js";
9
+ import { handleNeonAuthPhase } from "./lib/phases/neon-auth.js";
10
+ import { handleSetupPhase } from "./lib/phases/setup.js";
11
+ import { handleSkillsPhase } from "./lib/phases/skills.js";
12
+ import { handleStatusPhase } from "./lib/phases/status.js";
13
+ import { orchestrate } from "./v2.js";
3
14
  import yargs from "yargs";
4
15
  import { hideBin } from "yargs/helpers";
5
-
6
16
  //#region src/cli.ts
7
- const AGENT_FLAG_VALUES = [
8
- "cursor",
9
- "copilot",
10
- "code"
11
- ];
12
- function parseAgentToEditor(value) {
13
- switch (value.trim().toLowerCase()) {
14
- case "cursor": return "Cursor";
15
- case "github-copilot":
16
- case "copilot":
17
- case "vs code":
18
- case "vscode":
19
- case "vs-code": return "VS Code";
20
- case "claude-code":
21
- case "claude cli":
22
- case "claude-cli":
23
- case "claude": return "Claude CLI";
24
- default: return null;
17
+ const jsonOption = { json: {
18
+ type: "boolean",
19
+ default: false,
20
+ description: "Output structured JSON for agent consumption. Suppresses interactive UI."
21
+ } };
22
+ const agentOption = { agent: {
23
+ alias: "a",
24
+ type: "string",
25
+ description: "Agent to configure (cursor, copilot, claude, etc.)."
26
+ } };
27
+ function outputJson(data) {
28
+ console.log(JSON.stringify(data, null, 2));
29
+ }
30
+ /**
31
+ * Resolve the agent ID: use the explicit --agent value if provided,
32
+ * otherwise auto-detect from the environment.
33
+ */
34
+ function resolveAgent(explicit) {
35
+ return explicit ?? detectAgent() ?? void 0;
36
+ }
37
+ /**
38
+ * Detects if an AI agent is invoking the CLI programmatically.
39
+ *
40
+ * Uses two signals:
41
+ * 1. Agent-specific env vars (CLAUDECODE, CODEX, CLINE) — unambiguous.
42
+ * 2. IDE env vars (TERM_PROGRAM=cursor) + non-TTY stdin — an IDE terminal
43
+ * where stdin is piped means an agent spawned us via execa/subprocess.
44
+ * A human typing in the same terminal would have isTTY=true.
45
+ */
46
+ function detectAgentInvocation() {
47
+ const env = process.env;
48
+ if (env.CLAUDECODE === "1" || env.CLAUDE_CODE === "1" || env.CLAUDE_CLI === "1") return "claude-code";
49
+ if (env.CODEX === "1") return "codex";
50
+ if (env.CLINE === "1") return "cline";
51
+ if (!process.stdin.isTTY) {
52
+ const ide = detectAgent();
53
+ if (ide) return ide;
25
54
  }
55
+ return null;
26
56
  }
27
- const agentArg = yargs(hideBin(process.argv)).scriptName("neon-init").option("agent", {
28
- alias: "a",
57
+ yargs(hideBin(process.argv)).scriptName("neon-init").usage("$0 [command] [options]").command("$0", "Initialize Neon for your project", (y) => y.options(jsonOption).options(agentOption).option("skip-neon-auth", {
58
+ type: "boolean",
59
+ default: false,
60
+ description: "Skip the Neon Auth setup phase."
61
+ }).option("skip-migrations", {
62
+ type: "boolean",
63
+ default: false,
64
+ description: "Skip the migrations phase."
65
+ }).option("preview", {
66
+ type: "boolean",
67
+ default: false,
68
+ description: "Enable preview features (e.g. project bootstrapping from templates)."
69
+ }), async (argv) => {
70
+ const detectedAgent = detectAgentInvocation();
71
+ const agent = resolveAgent(argv.agent ?? detectedAgent ?? void 0);
72
+ if (argv.json || argv.agent !== void 0 || detectedAgent !== null) {
73
+ outputJson(await orchestrate({
74
+ agent,
75
+ skipNeonAuth: argv.skipNeonAuth,
76
+ skipMigrations: argv.skipMigrations,
77
+ preview: argv.preview
78
+ }));
79
+ process.exit(0);
80
+ }
81
+ await interactiveInit({ preview: argv.preview });
82
+ process.exit(0);
83
+ }).command("auth", "Manage Neon platform authentication", (y) => y.options(jsonOption).options(agentOption).option("method", {
84
+ type: "string",
85
+ choices: ["existing", "new"],
86
+ description: "Auth method: \"existing\" for OAuth sign-in, \"new\" for sign-up flow."
87
+ }).option("verify", {
88
+ type: "boolean",
89
+ default: false,
90
+ description: "Just check if authentication is valid, don't initiate a flow."
91
+ }), async (argv) => {
92
+ outputJson(await handleAuthPhase({
93
+ agent: resolveAgent(argv.agent),
94
+ method: argv.method,
95
+ verify: argv.verify
96
+ }));
97
+ process.exit(0);
98
+ }).command("mcp", "Manage the Neon MCP server", (y) => y.options(jsonOption).options(agentOption).option("status", {
99
+ type: "boolean",
100
+ default: false,
101
+ description: "Check if the MCP server is configured."
102
+ }).option("install", {
103
+ type: "boolean",
104
+ default: false,
105
+ description: "Install or update the MCP server."
106
+ }).option("update", {
107
+ type: "boolean",
108
+ default: false,
109
+ description: "Alias for --install."
110
+ }).option("scope", {
111
+ type: "string",
112
+ choices: ["global", "project"],
113
+ default: "global",
114
+ description: "Where to configure the MCP server."
115
+ }).option("mcp-configured", {
116
+ type: "string",
117
+ description: "Agent reports MCP detection result (true|false)."
118
+ }), async (argv) => {
119
+ let mcpConfigured = null;
120
+ if (argv.mcpConfigured === "true") mcpConfigured = true;
121
+ else if (argv.mcpConfigured === "false") mcpConfigured = false;
122
+ outputJson(await handleMcpPhase({
123
+ agent: resolveAgent(argv.agent),
124
+ status: argv.status,
125
+ install: argv.install || argv.update,
126
+ scope: argv.scope,
127
+ mcpConfigured
128
+ }));
129
+ process.exit(0);
130
+ }).command("skills", "Manage Neon agent skills", (y) => y.options(jsonOption).options(agentOption).option("status", {
131
+ type: "boolean",
132
+ default: false,
133
+ description: "Check if skills are installed."
134
+ }).option("install", {
135
+ type: "boolean",
136
+ default: false,
137
+ description: "Install agent skills."
138
+ }).option("update", {
139
+ type: "boolean",
140
+ default: false,
141
+ description: "Update agent skills to latest."
142
+ }), async (argv) => {
143
+ outputJson(await handleSkillsPhase({
144
+ agent: resolveAgent(argv.agent),
145
+ status: argv.status,
146
+ install: argv.install,
147
+ update: argv.update
148
+ }));
149
+ process.exit(0);
150
+ }).command("setup", "Inspect project and batch-install Neon tooling (MCP, skills, extension)", (y) => y.options(jsonOption).options(agentOption).option("data", {
151
+ type: "string",
152
+ description: "JSON object with inspection results and user preferences (replaces individual flags)."
153
+ }).option("mcp-configured", {
154
+ type: "string",
155
+ description: "Agent reports MCP detection result (true|false)."
156
+ }).option("connection-string", {
157
+ type: "string",
158
+ description: "Agent reports if a connection string was found (true|false)."
159
+ }).option("connection-params", {
160
+ type: "string",
161
+ description: "JSON with connection parameters found by agent."
162
+ }).option("framework", {
163
+ type: "string",
164
+ description: "Framework detected by agent."
165
+ }).option("orm", {
166
+ type: "string",
167
+ description: "ORM detected by agent."
168
+ }).option("migration-tool", {
169
+ type: "string",
170
+ description: "Migration tool detected by agent (prisma|drizzle|knex|none)."
171
+ }).option("migration-dir", {
172
+ type: "string",
173
+ description: "Migration directory detected by agent."
174
+ }).option("is-vscode-ide", {
175
+ type: "string",
176
+ description: "Agent reports if user is in a VS Code-based IDE (true|false)."
177
+ }).option("mode", {
178
+ type: "string",
179
+ choices: ["defaults", "customize"],
180
+ description: "Installation mode chosen by user."
181
+ }).option("mcp-scope", {
182
+ type: "string",
183
+ choices: ["global", "project"],
184
+ description: "Where to install MCP server."
185
+ }).option("skills-scope", {
29
186
  type: "string",
30
- description: "Agent to configure (cursor, copilot, code)."
31
- }).help().parseSync().agent;
32
- if (agentArg !== void 0) {
33
- const editor = parseAgentToEditor(agentArg);
34
- if (editor === null) {
35
- console.error(`Invalid --agent value: "${agentArg}". Supported: ${AGENT_FLAG_VALUES.join(", ")}`);
36
- process.exit(1);
187
+ choices: ["global", "project"],
188
+ description: "Where to install skills."
189
+ }).option("install-extension", {
190
+ type: "string",
191
+ description: "Whether to install VS Code extension (true|false)."
192
+ }).option("execute", {
193
+ type: "boolean",
194
+ default: false,
195
+ description: "Execute the batched installation with given options."
196
+ }), async (argv) => {
197
+ if (argv.data) {
198
+ let data;
199
+ try {
200
+ data = JSON.parse(argv.data);
201
+ } catch {
202
+ console.error("Invalid JSON in --data flag. Expected a JSON object.");
203
+ process.exit(1);
204
+ return;
205
+ }
206
+ for (const key of [
207
+ "mcpConfigured",
208
+ "connectionString",
209
+ "isVscodeIde",
210
+ "installExtension",
211
+ "execute"
212
+ ]) if (data[key] === "true") data[key] = true;
213
+ else if (data[key] === "false") data[key] = false;
214
+ outputJson(await handleSetupPhase({
215
+ agent: resolveAgent(argv.agent),
216
+ ...data
217
+ }));
218
+ process.exit(0);
219
+ return;
37
220
  }
38
- await init({ agent: editor });
39
- } else await init();
40
-
221
+ let mcpConfigured = null;
222
+ if (argv.mcpConfigured === "true") mcpConfigured = true;
223
+ else if (argv.mcpConfigured === "false") mcpConfigured = false;
224
+ let connectionString = null;
225
+ if (argv.connectionString === "true") connectionString = true;
226
+ else if (argv.connectionString === "false") connectionString = false;
227
+ let isVscodeIde = null;
228
+ if (argv.isVscodeIde === "true") isVscodeIde = true;
229
+ else if (argv.isVscodeIde === "false") isVscodeIde = false;
230
+ outputJson(await handleSetupPhase({
231
+ agent: resolveAgent(argv.agent),
232
+ mcpConfigured,
233
+ connectionString,
234
+ connectionParams: argv.connectionParams,
235
+ framework: argv.framework,
236
+ orm: argv.orm,
237
+ migrationTool: argv.migrationTool,
238
+ migrationDir: argv.migrationDir,
239
+ isVscodeIde,
240
+ mode: argv.mode,
241
+ mcpScope: argv.mcpScope,
242
+ skillsScope: argv.skillsScope,
243
+ installExtension: argv.installExtension === "true",
244
+ execute: argv.execute
245
+ }));
246
+ process.exit(0);
247
+ }).command("getting-started", "Start the Get Started with Neon workflow", (y) => y.options(jsonOption).options(agentOption).option("data", {
248
+ type: "string",
249
+ description: "JSON object with project context (hasConnectionString, framework, orm, migrationTool, migrationDir)."
250
+ }).option("has-connection-string", {
251
+ type: "boolean",
252
+ default: false,
253
+ description: "Whether a connection string was found."
254
+ }).option("framework", {
255
+ type: "string",
256
+ description: "Framework detected by agent."
257
+ }).option("orm", {
258
+ type: "string",
259
+ description: "ORM detected by agent."
260
+ }).option("migration-tool", {
261
+ type: "string",
262
+ description: "Migration tool in use."
263
+ }).option("migration-dir", {
264
+ type: "string",
265
+ description: "Migration directory path."
266
+ }), async (argv) => {
267
+ if (argv.data) {
268
+ let data;
269
+ try {
270
+ data = JSON.parse(argv.data);
271
+ } catch {
272
+ console.error("Invalid JSON in --data flag.");
273
+ process.exit(1);
274
+ return;
275
+ }
276
+ outputJson(await handleGettingStartedPhase({
277
+ agent: resolveAgent(argv.agent),
278
+ ...data
279
+ }));
280
+ process.exit(0);
281
+ return;
282
+ }
283
+ outputJson(await handleGettingStartedPhase({
284
+ agent: resolveAgent(argv.agent),
285
+ hasConnectionString: argv.hasConnectionString,
286
+ framework: argv.framework,
287
+ orm: argv.orm,
288
+ migrationTool: argv.migrationTool,
289
+ migrationDir: argv.migrationDir
290
+ }));
291
+ process.exit(0);
292
+ }).command("db", "Set up a Neon database project", (y) => y.options(jsonOption).options(agentOption).option("org-id", {
293
+ type: "string",
294
+ description: "Pre-select a Neon organization."
295
+ }).option("project-id", {
296
+ type: "string",
297
+ description: "Pre-select a Neon project."
298
+ }).option("orgs-result", {
299
+ type: "string",
300
+ description: "JSON output from neonctl orgs list (agent passes back)."
301
+ }).option("projects-result", {
302
+ type: "string",
303
+ description: "JSON output from neonctl projects list (agent passes back)."
304
+ }).option("framework", {
305
+ type: "string",
306
+ description: "Framework detected by agent."
307
+ }).option("orm", {
308
+ type: "string",
309
+ description: "ORM detected by agent."
310
+ }).option("error", {
311
+ type: "string",
312
+ description: "Error from a previous step."
313
+ }), async (argv) => {
314
+ outputJson(await handleDbPhase({
315
+ agent: resolveAgent(argv.agent),
316
+ orgId: argv.orgId,
317
+ projectId: argv.projectId,
318
+ orgsResult: argv.orgsResult,
319
+ projectsResult: argv.projectsResult,
320
+ framework: argv.framework,
321
+ orm: argv.orm,
322
+ error: argv.error
323
+ }));
324
+ process.exit(0);
325
+ }).command("neon-auth", "Set up Neon Auth (user authentication for your app)", (y) => y.options(jsonOption).options(agentOption).option("setup", {
326
+ type: "boolean",
327
+ default: false,
328
+ description: "Begin the Neon Auth setup flow."
329
+ }).option("info", {
330
+ type: "boolean",
331
+ default: false,
332
+ description: "Return information about Neon Auth without setting it up."
333
+ }).option("project-id", {
334
+ type: "string",
335
+ description: "Neon project ID to configure."
336
+ }), async (argv) => {
337
+ outputJson(await handleNeonAuthPhase({
338
+ agent: resolveAgent(argv.agent),
339
+ setup: argv.setup,
340
+ info: argv.info,
341
+ projectId: argv.projectId
342
+ }));
343
+ process.exit(0);
344
+ }).command("migrations", "Detect and manage database migrations", (y) => y.options(jsonOption).options(agentOption).option("tool", {
345
+ type: "string",
346
+ description: "Migration tool detected by agent (prisma|drizzle|knex|none)."
347
+ }).option("migration-dir", {
348
+ type: "string",
349
+ description: "Migration directory detected by agent."
350
+ }).option("scaffold", {
351
+ type: "string",
352
+ choices: ["prisma", "drizzle"],
353
+ description: "Scaffold a new migration setup."
354
+ }).option("apply", {
355
+ type: "boolean",
356
+ default: false,
357
+ description: "Apply pending migrations."
358
+ }), async (argv) => {
359
+ outputJson(await handleMigrationsPhase({
360
+ agent: resolveAgent(argv.agent),
361
+ tool: argv.tool,
362
+ migrationDir: argv.migrationDir,
363
+ scaffold: argv.scaffold,
364
+ apply: argv.apply
365
+ }));
366
+ process.exit(0);
367
+ }).command("finalize", false, (y) => y.options(jsonOption).options(agentOption), async () => {
368
+ const { handleCleanup } = await import("./lib/phases/cleanup.js");
369
+ outputJson(handleCleanup());
370
+ process.exit(0);
371
+ }).command("status", "Check the status of your Neon setup", (y) => y.options(jsonOption).options(agentOption), async (argv) => {
372
+ outputJson(await handleStatusPhase({ agent: resolveAgent(argv.agent) }));
373
+ process.exit(0);
374
+ }).help().strict().parse();
41
375
  //#endregion
42
- export { };
376
+ export {};
377
+
43
378
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","names":[],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport yargs from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport { init } from \"./index.js\";\nimport type { Editor } from \"./lib/types.js\";\n\nconst AGENT_FLAG_VALUES = [\"cursor\", \"copilot\", \"code\"] as const;\n\nfunction parseAgentToEditor(value: string): Editor | null {\n\tconst normalized = value.trim().toLowerCase();\n\tswitch (normalized) {\n\t\tcase \"cursor\":\n\t\t\treturn \"Cursor\";\n\t\tcase \"github-copilot\":\n\t\tcase \"copilot\":\n\t\tcase \"vs code\":\n\t\tcase \"vscode\":\n\t\tcase \"vs-code\":\n\t\t\treturn \"VS Code\";\n\t\tcase \"claude-code\":\n\t\tcase \"claude cli\":\n\t\tcase \"claude-cli\":\n\t\tcase \"claude\":\n\t\t\treturn \"Claude CLI\";\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nconst argv = yargs(hideBin(process.argv))\n\t.scriptName(\"neon-init\")\n\t.option(\"agent\", {\n\t\talias: \"a\",\n\t\ttype: \"string\",\n\t\tdescription: \"Agent to configure (cursor, copilot, code).\",\n\t})\n\t.help()\n\t.parseSync();\n\nconst agentArg = argv.agent;\nif (agentArg !== undefined) {\n\tconst editor = parseAgentToEditor(agentArg);\n\tif (editor === null) {\n\t\tconsole.error(\n\t\t\t`Invalid --agent value: \"${agentArg}\". Supported: ${AGENT_FLAG_VALUES.join(\", \")}`,\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\tawait init({ agent: editor });\n} else {\n\tawait init();\n}\n"],"mappings":";;;;;;AAOA,MAAM,oBAAoB;CAAC;CAAU;CAAW;CAAO;AAEvD,SAAS,mBAAmB,OAA8B;AAEzD,SADmB,MAAM,MAAM,CAAC,aAAa,EAC7C;EACC,KAAK,SACJ,QAAO;EACR,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,UACJ,QAAO;EACR,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,SACJ,QAAO;EACR,QACC,QAAO;;;AAcV,MAAM,WAVO,MAAM,QAAQ,QAAQ,KAAK,CAAC,CACvC,WAAW,YAAY,CACvB,OAAO,SAAS;CAChB,OAAO;CACP,MAAM;CACN,aAAa;CACb,CAAC,CACD,MAAM,CACN,WAAW,CAES;AACtB,IAAI,aAAa,QAAW;CAC3B,MAAM,SAAS,mBAAmB,SAAS;AAC3C,KAAI,WAAW,MAAM;AACpB,UAAQ,MACP,2BAA2B,SAAS,gBAAgB,kBAAkB,KAAK,KAAK,GAChF;AACD,UAAQ,KAAK,EAAE;;AAEhB,OAAM,KAAK,EAAE,OAAO,QAAQ,CAAC;MAE7B,OAAM,MAAM"}
1
+ {"version":3,"file":"cli.js","names":[],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport yargs from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport { interactiveInit } from \"./interactive.js\";\nimport { detectAgent } from \"./lib/detect-agent.js\";\nimport { handleAuthPhase } from \"./lib/phases/auth.js\";\nimport { handleDbPhase } from \"./lib/phases/db.js\";\nimport { handleGettingStartedPhase } from \"./lib/phases/getting-started.js\";\nimport { handleMcpPhase } from \"./lib/phases/mcp.js\";\nimport { handleMigrationsPhase } from \"./lib/phases/migrations.js\";\nimport { handleNeonAuthPhase } from \"./lib/phases/neon-auth.js\";\nimport { handleSetupPhase } from \"./lib/phases/setup.js\";\nimport { handleSkillsPhase } from \"./lib/phases/skills.js\";\nimport { handleStatusPhase } from \"./lib/phases/status.js\";\nimport { orchestrate } from \"./v2.js\";\n\n// ---------------------------------------------------------------------------\n// Shared options\n// ---------------------------------------------------------------------------\n\nconst jsonOption = {\n\tjson: {\n\t\ttype: \"boolean\" as const,\n\t\tdefault: false,\n\t\tdescription:\n\t\t\t\"Output structured JSON for agent consumption. Suppresses interactive UI.\",\n\t},\n};\n\nconst agentOption = {\n\tagent: {\n\t\talias: \"a\",\n\t\ttype: \"string\" as const,\n\t\tdescription: \"Agent to configure (cursor, copilot, claude, etc.).\",\n\t},\n};\n\n// ---------------------------------------------------------------------------\n// Output helper\n// ---------------------------------------------------------------------------\n\nfunction outputJson(data: unknown): void {\n\tconsole.log(JSON.stringify(data, null, 2));\n}\n\n/**\n * Resolve the agent ID: use the explicit --agent value if provided,\n * otherwise auto-detect from the environment.\n */\nfunction resolveAgent(explicit: string | undefined): string | undefined {\n\treturn explicit ?? detectAgent() ?? undefined;\n}\n\n/**\n * Detects if an AI agent is invoking the CLI programmatically.\n *\n * Uses two signals:\n * 1. Agent-specific env vars (CLAUDECODE, CODEX, CLINE) — unambiguous.\n * 2. IDE env vars (TERM_PROGRAM=cursor) + non-TTY stdin — an IDE terminal\n * where stdin is piped means an agent spawned us via execa/subprocess.\n * A human typing in the same terminal would have isTTY=true.\n */\nfunction detectAgentInvocation(): string | null {\n\tconst env = process.env;\n\n\t// Agent-specific env vars (always definitive)\n\tif (\n\t\tenv.CLAUDECODE === \"1\" ||\n\t\tenv.CLAUDE_CODE === \"1\" ||\n\t\tenv.CLAUDE_CLI === \"1\"\n\t)\n\t\treturn \"claude-code\";\n\tif (env.CODEX === \"1\") return \"codex\";\n\tif (env.CLINE === \"1\") return \"cline\";\n\n\t// IDE detected + non-interactive stdin = agent spawned us\n\tif (!process.stdin.isTTY) {\n\t\tconst ide = detectAgent();\n\t\tif (ide) return ide;\n\t}\n\n\treturn null;\n}\n\n// ---------------------------------------------------------------------------\n// CLI definition\n// ---------------------------------------------------------------------------\n\nconst cli = yargs(hideBin(process.argv))\n\t.scriptName(\"neon-init\")\n\t.usage(\"$0 [command] [options]\")\n\n\t// -----------------------------------------------------------------------\n\t// Default command: orchestrator (v2 json) or v1 interactive\n\t// -----------------------------------------------------------------------\n\t.command(\n\t\t\"$0\",\n\t\t\"Initialize Neon for your project\",\n\t\t(y) =>\n\t\t\ty\n\t\t\t\t.options(jsonOption)\n\t\t\t\t.options(agentOption)\n\t\t\t\t.option(\"skip-neon-auth\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Skip the Neon Auth setup phase.\",\n\t\t\t\t})\n\t\t\t\t.option(\"skip-migrations\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Skip the migrations phase.\",\n\t\t\t\t})\n\t\t\t\t.option(\"preview\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Enable preview features (e.g. project bootstrapping from templates).\",\n\t\t\t\t}),\n\t\tasync (argv) => {\n\t\t\tconst detectedAgent = detectAgentInvocation();\n\t\t\tconst agent = resolveAgent(\n\t\t\t\targv.agent ?? detectedAgent ?? undefined,\n\t\t\t);\n\t\t\tconst jsonMode =\n\t\t\t\targv.json || argv.agent !== undefined || detectedAgent !== null;\n\n\t\t\tif (jsonMode) {\n\t\t\t\t// v2: agent-driven state machine\n\t\t\t\tconst result = await orchestrate({\n\t\t\t\t\tagent,\n\t\t\t\t\tskipNeonAuth: argv.skipNeonAuth,\n\t\t\t\t\tskipMigrations: argv.skipMigrations,\n\t\t\t\t\tpreview: argv.preview,\n\t\t\t\t});\n\t\t\t\toutputJson(result);\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\t// v2 interactive mode — same phase logic, driven by terminal prompts\n\t\t\tawait interactiveInit({ preview: argv.preview });\n\t\t\tprocess.exit(0);\n\t\t},\n\t)\n\n\t// -----------------------------------------------------------------------\n\t// auth\n\t// -----------------------------------------------------------------------\n\t.command(\n\t\t\"auth\",\n\t\t\"Manage Neon platform authentication\",\n\t\t(y) =>\n\t\t\ty\n\t\t\t\t.options(jsonOption)\n\t\t\t\t.options(agentOption)\n\t\t\t\t.option(\"method\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tchoices: [\"existing\", \"new\"] as const,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'Auth method: \"existing\" for OAuth sign-in, \"new\" for sign-up flow.',\n\t\t\t\t})\n\t\t\t\t.option(\"verify\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Just check if authentication is valid, don't initiate a flow.\",\n\t\t\t\t}),\n\t\tasync (argv) => {\n\t\t\tconst result = await handleAuthPhase({\n\t\t\t\tagent: resolveAgent(argv.agent),\n\t\t\t\tmethod: argv.method as \"existing\" | \"new\" | undefined,\n\t\t\t\tverify: argv.verify,\n\t\t\t});\n\t\t\toutputJson(result);\n\t\t\tprocess.exit(0);\n\t\t},\n\t)\n\n\t// -----------------------------------------------------------------------\n\t// mcp\n\t// -----------------------------------------------------------------------\n\t.command(\n\t\t\"mcp\",\n\t\t\"Manage the Neon MCP server\",\n\t\t(y) =>\n\t\t\ty\n\t\t\t\t.options(jsonOption)\n\t\t\t\t.options(agentOption)\n\t\t\t\t.option(\"status\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Check if the MCP server is configured.\",\n\t\t\t\t})\n\t\t\t\t.option(\"install\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Install or update the MCP server.\",\n\t\t\t\t})\n\t\t\t\t.option(\"update\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Alias for --install.\",\n\t\t\t\t})\n\t\t\t\t.option(\"scope\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tchoices: [\"global\", \"project\"] as const,\n\t\t\t\t\tdefault: \"global\",\n\t\t\t\t\tdescription: \"Where to configure the MCP server.\",\n\t\t\t\t})\n\t\t\t\t.option(\"mcp-configured\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Agent reports MCP detection result (true|false).\",\n\t\t\t\t}),\n\t\tasync (argv) => {\n\t\t\tlet mcpConfigured: boolean | null = null;\n\t\t\tif (argv.mcpConfigured === \"true\") mcpConfigured = true;\n\t\t\telse if (argv.mcpConfigured === \"false\") mcpConfigured = false;\n\n\t\t\tconst result = await handleMcpPhase({\n\t\t\t\tagent: resolveAgent(argv.agent),\n\t\t\t\tstatus: argv.status,\n\t\t\t\tinstall: argv.install || argv.update,\n\t\t\t\tscope: argv.scope as \"global\" | \"project\",\n\t\t\t\tmcpConfigured,\n\t\t\t});\n\t\t\toutputJson(result);\n\t\t\tprocess.exit(0);\n\t\t},\n\t)\n\n\t// -----------------------------------------------------------------------\n\t// skills\n\t// -----------------------------------------------------------------------\n\t.command(\n\t\t\"skills\",\n\t\t\"Manage Neon agent skills\",\n\t\t(y) =>\n\t\t\ty\n\t\t\t\t.options(jsonOption)\n\t\t\t\t.options(agentOption)\n\t\t\t\t.option(\"status\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Check if skills are installed.\",\n\t\t\t\t})\n\t\t\t\t.option(\"install\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Install agent skills.\",\n\t\t\t\t})\n\t\t\t\t.option(\"update\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Update agent skills to latest.\",\n\t\t\t\t}),\n\t\tasync (argv) => {\n\t\t\tconst result = await handleSkillsPhase({\n\t\t\t\tagent: resolveAgent(argv.agent),\n\t\t\t\tstatus: argv.status,\n\t\t\t\tinstall: argv.install,\n\t\t\t\tupdate: argv.update,\n\t\t\t});\n\t\t\toutputJson(result);\n\t\t\tprocess.exit(0);\n\t\t},\n\t)\n\n\t// -----------------------------------------------------------------------\n\t// setup (comprehensive inspection + batched install)\n\t// -----------------------------------------------------------------------\n\t.command(\n\t\t\"setup\",\n\t\t\"Inspect project and batch-install Neon tooling (MCP, skills, extension)\",\n\t\t(y) =>\n\t\t\ty\n\t\t\t\t.options(jsonOption)\n\t\t\t\t.options(agentOption)\n\t\t\t\t.option(\"data\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"JSON object with inspection results and user preferences (replaces individual flags).\",\n\t\t\t\t})\n\t\t\t\t.option(\"mcp-configured\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Agent reports MCP detection result (true|false).\",\n\t\t\t\t})\n\t\t\t\t.option(\"connection-string\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Agent reports if a connection string was found (true|false).\",\n\t\t\t\t})\n\t\t\t\t.option(\"connection-params\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"JSON with connection parameters found by agent.\",\n\t\t\t\t})\n\t\t\t\t.option(\"framework\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"Framework detected by agent.\",\n\t\t\t\t})\n\t\t\t\t.option(\"orm\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"ORM detected by agent.\",\n\t\t\t\t})\n\t\t\t\t.option(\"migration-tool\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Migration tool detected by agent (prisma|drizzle|knex|none).\",\n\t\t\t\t})\n\t\t\t\t.option(\"migration-dir\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"Migration directory detected by agent.\",\n\t\t\t\t})\n\t\t\t\t.option(\"is-vscode-ide\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Agent reports if user is in a VS Code-based IDE (true|false).\",\n\t\t\t\t})\n\t\t\t\t.option(\"mode\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tchoices: [\"defaults\", \"customize\"] as const,\n\t\t\t\t\tdescription: \"Installation mode chosen by user.\",\n\t\t\t\t})\n\t\t\t\t.option(\"mcp-scope\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tchoices: [\"global\", \"project\"] as const,\n\t\t\t\t\tdescription: \"Where to install MCP server.\",\n\t\t\t\t})\n\t\t\t\t.option(\"skills-scope\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tchoices: [\"global\", \"project\"] as const,\n\t\t\t\t\tdescription: \"Where to install skills.\",\n\t\t\t\t})\n\t\t\t\t.option(\"install-extension\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Whether to install VS Code extension (true|false).\",\n\t\t\t\t})\n\t\t\t\t.option(\"execute\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Execute the batched installation with given options.\",\n\t\t\t\t}),\n\t\tasync (argv) => {\n\t\t\t// --data JSON path: parse and pass directly to handleSetupPhase\n\t\t\tif (argv.data) {\n\t\t\t\tlet data: Record<string, unknown>;\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(argv.data);\n\t\t\t\t} catch {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\"Invalid JSON in --data flag. Expected a JSON object.\",\n\t\t\t\t\t);\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Normalize string booleans from preference answers (e.g. \"true\" → true)\n\t\t\t\tfor (const key of [\n\t\t\t\t\t\"mcpConfigured\",\n\t\t\t\t\t\"connectionString\",\n\t\t\t\t\t\"isVscodeIde\",\n\t\t\t\t\t\"installExtension\",\n\t\t\t\t\t\"execute\",\n\t\t\t\t]) {\n\t\t\t\t\tif (data[key] === \"true\") data[key] = true;\n\t\t\t\t\telse if (data[key] === \"false\") data[key] = false;\n\t\t\t\t}\n\n\t\t\t\tconst result = await handleSetupPhase({\n\t\t\t\t\tagent: resolveAgent(argv.agent),\n\t\t\t\t\t...data,\n\t\t\t\t} as import(\"./lib/phases/setup.js\").SetupPhaseOptions);\n\t\t\t\toutputJson(result);\n\t\t\t\tprocess.exit(0);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Legacy individual flags path\n\t\t\tlet mcpConfigured: boolean | null = null;\n\t\t\tif (argv.mcpConfigured === \"true\") mcpConfigured = true;\n\t\t\telse if (argv.mcpConfigured === \"false\") mcpConfigured = false;\n\n\t\t\tlet connectionString: boolean | null = null;\n\t\t\tif (argv.connectionString === \"true\") connectionString = true;\n\t\t\telse if (argv.connectionString === \"false\")\n\t\t\t\tconnectionString = false;\n\n\t\t\tlet isVscodeIde: boolean | null = null;\n\t\t\tif (argv.isVscodeIde === \"true\") isVscodeIde = true;\n\t\t\telse if (argv.isVscodeIde === \"false\") isVscodeIde = false;\n\n\t\t\tconst result = await handleSetupPhase({\n\t\t\t\tagent: resolveAgent(argv.agent),\n\t\t\t\tmcpConfigured,\n\t\t\t\tconnectionString,\n\t\t\t\tconnectionParams: argv.connectionParams,\n\t\t\t\tframework: argv.framework,\n\t\t\t\torm: argv.orm,\n\t\t\t\tmigrationTool: argv.migrationTool,\n\t\t\t\tmigrationDir: argv.migrationDir,\n\t\t\t\tisVscodeIde,\n\t\t\t\tmode: argv.mode as \"defaults\" | \"customize\" | undefined,\n\t\t\t\tmcpScope: argv.mcpScope as \"global\" | \"project\" | undefined,\n\t\t\t\tskillsScope: argv.skillsScope as\n\t\t\t\t\t| \"global\"\n\t\t\t\t\t| \"project\"\n\t\t\t\t\t| undefined,\n\t\t\t\tinstallExtension: argv.installExtension === \"true\",\n\t\t\t\texecute: argv.execute,\n\t\t\t});\n\t\t\toutputJson(result);\n\t\t\tprocess.exit(0);\n\t\t},\n\t)\n\n\t// -----------------------------------------------------------------------\n\t// getting-started\n\t// -----------------------------------------------------------------------\n\t.command(\n\t\t\"getting-started\",\n\t\t\"Start the Get Started with Neon workflow\",\n\t\t(y) =>\n\t\t\ty\n\t\t\t\t.options(jsonOption)\n\t\t\t\t.options(agentOption)\n\t\t\t\t.option(\"data\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"JSON object with project context (hasConnectionString, framework, orm, migrationTool, migrationDir).\",\n\t\t\t\t})\n\t\t\t\t.option(\"has-connection-string\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Whether a connection string was found.\",\n\t\t\t\t})\n\t\t\t\t.option(\"framework\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"Framework detected by agent.\",\n\t\t\t\t})\n\t\t\t\t.option(\"orm\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"ORM detected by agent.\",\n\t\t\t\t})\n\t\t\t\t.option(\"migration-tool\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"Migration tool in use.\",\n\t\t\t\t})\n\t\t\t\t.option(\"migration-dir\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"Migration directory path.\",\n\t\t\t\t}),\n\t\tasync (argv) => {\n\t\t\tif (argv.data) {\n\t\t\t\tlet data: Record<string, unknown>;\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(argv.data);\n\t\t\t\t} catch {\n\t\t\t\t\tconsole.error(\"Invalid JSON in --data flag.\");\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst result = await handleGettingStartedPhase({\n\t\t\t\t\tagent: resolveAgent(argv.agent),\n\t\t\t\t\t...data,\n\t\t\t\t} as import(\"./lib/phases/getting-started.js\").GettingStartedPhaseOptions);\n\t\t\t\toutputJson(result);\n\t\t\t\tprocess.exit(0);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst result = await handleGettingStartedPhase({\n\t\t\t\tagent: resolveAgent(argv.agent),\n\t\t\t\thasConnectionString: argv.hasConnectionString,\n\t\t\t\tframework: argv.framework,\n\t\t\t\torm: argv.orm,\n\t\t\t\tmigrationTool: argv.migrationTool,\n\t\t\t\tmigrationDir: argv.migrationDir,\n\t\t\t});\n\t\t\toutputJson(result);\n\t\t\tprocess.exit(0);\n\t\t},\n\t)\n\n\t// -----------------------------------------------------------------------\n\t// db\n\t// -----------------------------------------------------------------------\n\t.command(\n\t\t\"db\",\n\t\t\"Set up a Neon database project\",\n\t\t(y) =>\n\t\t\ty\n\t\t\t\t.options(jsonOption)\n\t\t\t\t.options(agentOption)\n\t\t\t\t.option(\"org-id\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"Pre-select a Neon organization.\",\n\t\t\t\t})\n\t\t\t\t.option(\"project-id\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"Pre-select a Neon project.\",\n\t\t\t\t})\n\t\t\t\t.option(\"orgs-result\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"JSON output from neonctl orgs list (agent passes back).\",\n\t\t\t\t})\n\t\t\t\t.option(\"projects-result\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"JSON output from neonctl projects list (agent passes back).\",\n\t\t\t\t})\n\t\t\t\t.option(\"framework\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"Framework detected by agent.\",\n\t\t\t\t})\n\t\t\t\t.option(\"orm\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"ORM detected by agent.\",\n\t\t\t\t})\n\t\t\t\t.option(\"error\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"Error from a previous step.\",\n\t\t\t\t}),\n\t\tasync (argv) => {\n\t\t\tconst result = await handleDbPhase({\n\t\t\t\tagent: resolveAgent(argv.agent),\n\t\t\t\torgId: argv.orgId,\n\t\t\t\tprojectId: argv.projectId,\n\t\t\t\torgsResult: argv.orgsResult,\n\t\t\t\tprojectsResult: argv.projectsResult,\n\t\t\t\tframework: argv.framework,\n\t\t\t\torm: argv.orm,\n\t\t\t\terror: argv.error,\n\t\t\t});\n\t\t\toutputJson(result);\n\t\t\tprocess.exit(0);\n\t\t},\n\t)\n\n\t// -----------------------------------------------------------------------\n\t// neon-auth\n\t// -----------------------------------------------------------------------\n\t.command(\n\t\t\"neon-auth\",\n\t\t\"Set up Neon Auth (user authentication for your app)\",\n\t\t(y) =>\n\t\t\ty\n\t\t\t\t.options(jsonOption)\n\t\t\t\t.options(agentOption)\n\t\t\t\t.option(\"setup\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Begin the Neon Auth setup flow.\",\n\t\t\t\t})\n\t\t\t\t.option(\"info\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Return information about Neon Auth without setting it up.\",\n\t\t\t\t})\n\t\t\t\t.option(\"project-id\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"Neon project ID to configure.\",\n\t\t\t\t}),\n\t\tasync (argv) => {\n\t\t\tconst result = await handleNeonAuthPhase({\n\t\t\t\tagent: resolveAgent(argv.agent),\n\t\t\t\tsetup: argv.setup,\n\t\t\t\tinfo: argv.info,\n\t\t\t\tprojectId: argv.projectId,\n\t\t\t});\n\t\t\toutputJson(result);\n\t\t\tprocess.exit(0);\n\t\t},\n\t)\n\n\t// -----------------------------------------------------------------------\n\t// migrations\n\t// -----------------------------------------------------------------------\n\t.command(\n\t\t\"migrations\",\n\t\t\"Detect and manage database migrations\",\n\t\t(y) =>\n\t\t\ty\n\t\t\t\t.options(jsonOption)\n\t\t\t\t.options(agentOption)\n\t\t\t\t.option(\"tool\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Migration tool detected by agent (prisma|drizzle|knex|none).\",\n\t\t\t\t})\n\t\t\t\t.option(\"migration-dir\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tdescription: \"Migration directory detected by agent.\",\n\t\t\t\t})\n\t\t\t\t.option(\"scaffold\", {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tchoices: [\"prisma\", \"drizzle\"] as const,\n\t\t\t\t\tdescription: \"Scaffold a new migration setup.\",\n\t\t\t\t})\n\t\t\t\t.option(\"apply\", {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Apply pending migrations.\",\n\t\t\t\t}),\n\t\tasync (argv) => {\n\t\t\tconst result = await handleMigrationsPhase({\n\t\t\t\tagent: resolveAgent(argv.agent),\n\t\t\t\ttool: argv.tool,\n\t\t\t\tmigrationDir: argv.migrationDir,\n\t\t\t\tscaffold: argv.scaffold as \"prisma\" | \"drizzle\" | undefined,\n\t\t\t\tapply: argv.apply,\n\t\t\t});\n\t\t\toutputJson(result);\n\t\t\tprocess.exit(0);\n\t\t},\n\t)\n\n\t// -----------------------------------------------------------------------\n\t// finalize (internal — called at the end of feature chains)\n\t// -----------------------------------------------------------------------\n\t.command(\n\t\t\"finalize\",\n\t\tfalse, // hidden from help\n\t\t(y) => y.options(jsonOption).options(agentOption),\n\t\tasync () => {\n\t\t\tconst { handleCleanup } = await import(\"./lib/phases/cleanup.js\");\n\t\t\tconst result = handleCleanup();\n\t\t\toutputJson(result);\n\t\t\tprocess.exit(0);\n\t\t},\n\t)\n\n\t// -----------------------------------------------------------------------\n\t// status\n\t// -----------------------------------------------------------------------\n\t.command(\n\t\t\"status\",\n\t\t\"Check the status of your Neon setup\",\n\t\t(y) => y.options(jsonOption).options(agentOption),\n\t\tasync (argv) => {\n\t\t\tconst result = await handleStatusPhase({\n\t\t\t\tagent: resolveAgent(argv.agent),\n\t\t\t});\n\t\t\toutputJson(result);\n\t\t\tprocess.exit(0);\n\t\t},\n\t)\n\n\t.help()\n\t.strict();\n\n// Parse and execute\ncli.parse();\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,14 +1,26 @@
1
- import { Editor } from "./lib/types.js";
1
+ import { AgentActionAction, AgentCheck, AgentCheckAction, AgentStep, AskUserAction, CompleteAction, Editor, InitResult, NextAction, Phase, PhaseResponse, RestartRequiredAction, RunCommandAction, RunNeonInitAction, StatusResponse } from "./lib/types.js";
2
+ import { InteractiveInitOptions, interactiveInit } from "./interactive.js";
3
+ import { handleAuthPhase } from "./lib/phases/auth.js";
4
+ import { handleDbPhase } from "./lib/phases/db.js";
5
+ import { handleMcpPhase } from "./lib/phases/mcp.js";
6
+ import { handleMigrationsPhase } from "./lib/phases/migrations.js";
7
+ import { handleNeonAuthPhase } from "./lib/phases/neon-auth.js";
8
+ import { handleSkillsPhase } from "./lib/phases/skills.js";
9
+ import { handleStatusPhase } from "./lib/phases/status.js";
10
+ import { OrchestratorOptions, orchestrate } from "./v2.js";
2
11
 
3
12
  //#region src/index.d.ts
13
+
4
14
  interface InitOptions {
5
15
  /** When set, configures only this agent and skips the editor selection prompt. */
6
16
  agent?: Editor;
17
+ /** When true, suppresses interactive UI and returns structured JSON-friendly output. */
18
+ json?: boolean;
7
19
  }
8
20
  /**
9
21
  * Initialize Neon projects with MCP Server
10
22
  */
11
- declare function init(options?: InitOptions): Promise<void>;
23
+ declare function init(options?: InitOptions): Promise<InitResult>;
12
24
  //#endregion
13
- export { InitOptions, init };
25
+ export { type AgentActionAction, type AgentCheck, type AgentCheckAction, type AgentStep, type AskUserAction, type CompleteAction, InitOptions, type InitResult, type InteractiveInitOptions, type NextAction, type OrchestratorOptions, type Phase, type PhaseResponse, type RestartRequiredAction, type RunCommandAction, type RunNeonInitAction, type StatusResponse, handleAuthPhase, handleDbPhase, handleMcpPhase, handleMigrationsPhase, handleNeonAuthPhase, handleSkillsPhase, handleStatusPhase, init, interactiveInit, orchestrate };
14
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";;;UAgBiB,WAAA;;EAAA,KAAA,CAAA,EAER,MAFmB;AAQ5B;;;;AAA0D,iBAApC,IAAA,CAAoC,OAAA,CAAA,EAArB,WAAqB,CAAA,EAAP,OAAO,CAAA,IAAA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;;;;;;;AA+HsB,UApFL,WAAA,CAoFS;EAAA;OAAW,CAAA,EAlF5B,MAkF4B;;MAAc,CAAA,EAAA,OAAA;AAAO;;;;iBAApC,IAAA,WAAe,cAAc,QAAQ"}