neon-init 0.16.3 → 0.17.1

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/v2.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"v2.js","names":[],"sources":["../src/v2.ts"],"sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { isAuthenticated } from \"./lib/auth.js\";\nimport { inspectProject } from \"./lib/inspect.js\";\nimport { handleAuthPhase } from \"./lib/phases/auth.js\";\nimport { handleGettingStartedPhase } from \"./lib/phases/getting-started.js\";\nimport { handleMigrationsPhase } from \"./lib/phases/migrations.js\";\nimport { handleNeonAuthPhase } from \"./lib/phases/neon-auth.js\";\nimport { handleSetupPhase } from \"./lib/phases/setup.js\";\nimport { resolveNeonContext } from \"./lib/resolve-context.js\";\nimport type { PhaseResponse } from \"./lib/types.js\";\n\nexport interface OrchestratorOptions {\n\tagent?: string;\n\tskipNeonAuth?: boolean;\n\tskipMigrations?: boolean;\n\t/** Enable preview features (e.g. project bootstrapping from templates) */\n\tpreview?: boolean;\n}\n\n/**\n * v2 orchestrator: checks phases in order and returns the first that needs attention.\n *\n * Phase order:\n * auth -> setup (if tooling not installed)\n * -> getting-started (if tooling installed but no Neon connection string)\n * -> resolve .neon context (if connection string exists but no .neon file)\n * -> neon_auth (optional) -> complete\n *\n * Each call is stateless — it re-checks everything from the file system and credentials.\n *\n * The orchestrator uses filesystem inspection to decide what to do:\n * - No app detected → bootstrap phase (scaffold from template)\n * - MCP not configured → full setup flow (inspect → install → getting-started)\n * - MCP configured, no connection string → skip install, go to getting-started\n * - MCP configured + connection string → fall through to neon-auth/migrations/complete\n */\nexport async function orchestrate(\n\toptions: OrchestratorOptions,\n): Promise<PhaseResponse> {\n\t// Phase 1: Auth\n\tconst authed = await isAuthenticated();\n\tif (!authed) {\n\t\treturn handleAuthPhase({ agent: options.agent });\n\t}\n\n\tconst cwd = process.cwd();\n\n\t// Phase 2: Inspect what's already in place\n\tconst inspection = await inspectProject([\n\t\t{ id: \"has_app\", description: \"\", lookFor: [] },\n\t\t{ id: \"mcp_server\", description: \"\", lookFor: [] },\n\t\t{ id: \"skills\", description: \"\", lookFor: [] },\n\t\t{ id: \"connection_string\", description: \"\", lookFor: [] },\n\t\t{ id: \"project_stack\", description: \"\", lookFor: [] },\n\t\t{ id: \"migrations\", description: \"\", lookFor: [] },\n\t]);\n\n\t// Only detect empty projects when --preview is enabled\n\tconst hasApp = options.preview ? inspection.hasApp === true : true;\n\tconst toolingInstalled =\n\t\tinspection.mcpConfigured && inspection.skillsInstalled;\n\tconst hasNeonConnection = inspection.connectionString === true;\n\n\t// Phase 3a: No app or tooling not installed → setup flow\n\t// When !hasApp (preview mode), setup will offer template selection before asking about tooling.\n\t// Clean up any stale _init state from a previous run.\n\tif (!hasApp || !toolingInstalled) {\n\t\tcleanupInitState(resolve(cwd, \".neon\"));\n\t\treturn handleSetupPhase({ agent: options.agent, hasApp });\n\t}\n\n\t// Read .neon context early — needed for feature-based routing\n\tconst neonContextPath = resolve(cwd, \".neon\");\n\tconst neonContext = readNeonContext(neonContextPath);\n\tconst initState =\n\t\ttypeof neonContext._init === \"object\" && neonContext._init !== null\n\t\t\t? (neonContext._init as Record<string, unknown>)\n\t\t\t: {};\n\tconst features: string[] = Array.isArray(initState.features)\n\t\t? initState.features\n\t\t: [];\n\n\t// Phase 3b: Tooling installed but no Neon connection string → getting-started\n\tif (!hasNeonConnection) {\n\t\treturn handleGettingStartedPhase({\n\t\t\tagent: options.agent,\n\t\t\thasConnectionString: false,\n\t\t\tframework: inspection.framework as string | undefined,\n\t\t\torm: inspection.orm as string | undefined,\n\t\t\tmigrationTool: inspection.migrationTool as string | undefined,\n\t\t\tmigrationDir: inspection.migrationDir as string | undefined,\n\t\t\tfeatures,\n\t\t\tpreview: options.preview,\n\t\t});\n\t}\n\n\t// Phase 3c: Neon connection exists but no .neon context file → resolve project\n\n\tif (!neonContext.projectId) {\n\t\t// Resolve the project from the connection string and merge into .neon\n\t\ttry {\n\t\t\tconst resolved = await resolveNeonContext(cwd);\n\t\t\tif (resolved) {\n\t\t\t\tconst merged = { ...neonContext };\n\t\t\t\tif (resolved.orgId) merged.orgId = resolved.orgId;\n\t\t\t\tif (resolved.projectId) merged.projectId = resolved.projectId;\n\t\t\t\twriteFileSync(\n\t\t\t\t\tneonContextPath,\n\t\t\t\t\t`${JSON.stringify(merged, null, 2)}\\n`,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch {\n\t\t\t// Continue the flow regardless — missing .neon is not a blocker\n\t\t}\n\t}\n\n\t// Phase 4: Neon Auth — skip if template/user doesn't require it\n\tconst hasFeatureRequirements = features.length > 0;\n\tconst needsAuth = hasFeatureRequirements\n\t\t? features.includes(\"auth\")\n\t\t: !options.skipNeonAuth;\n\tif (needsAuth) {\n\t\tconst hasNeonAuth = checkNeonAuth(cwd);\n\t\tif (!hasNeonAuth) {\n\t\t\t// If auth was already selected via features, go straight to setup\n\t\t\t// (don't re-ask the user)\n\t\t\treturn handleNeonAuthPhase({\n\t\t\t\tagent: options.agent,\n\t\t\t\tsetup: hasFeatureRequirements,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Phase 5: Migrations\n\tif (!options.skipMigrations) {\n\t\treturn handleMigrationsPhase({ agent: options.agent });\n\t}\n\n\t// All done — clean up ephemeral _init state from .neon\n\tcleanupInitState(neonContextPath);\n\n\treturn {\n\t\tphase: \"setup\",\n\t\tstatus: \"complete\",\n\t\tnextAction: {\n\t\t\ttype: \"complete\",\n\t\t\tmessage:\n\t\t\t\t\"Neon setup is complete. Your database is configured and your agent has the Neon MCP server and skills available.\",\n\t\t},\n\t};\n}\n\n/** Remove the ephemeral _init key from .neon, preserving other fields. */\nfunction cleanupInitState(neonContextPath: string): void {\n\tif (!existsSync(neonContextPath)) return;\n\ttry {\n\t\tconst context = JSON.parse(readFileSync(neonContextPath, \"utf-8\"));\n\t\tif (context._init !== undefined) {\n\t\t\tdelete context._init;\n\t\t\twriteFileSync(\n\t\t\t\tneonContextPath,\n\t\t\t\t`${JSON.stringify(context, null, 2)}\\n`,\n\t\t\t);\n\t\t}\n\t} catch {}\n}\n\nfunction readNeonContext(neonContextPath: string): Record<string, unknown> {\n\tif (!existsSync(neonContextPath)) return {};\n\ttry {\n\t\treturn JSON.parse(readFileSync(neonContextPath, \"utf-8\"));\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nfunction checkNeonAuth(cwd: string): boolean {\n\tconst envPath = resolve(cwd, \".env\");\n\tif (!existsSync(envPath)) return false;\n\ttry {\n\t\tconst content = readFileSync(envPath, \"utf-8\");\n\t\treturn /^NEON_AUTH_/m.test(content);\n\t} catch {\n\t\treturn false;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,eAAsB,YACrB,SACyB;CAGzB,IAAI,CAAC,MADgB,gBAAgB,GAEpC,OAAO,gBAAgB,EAAE,OAAO,QAAQ,MAAM,CAAC;CAGhD,MAAM,MAAM,QAAQ,IAAI;CAGxB,MAAM,aAAa,MAAM,eAAe;EACvC;GAAE,IAAI;GAAW,aAAa;GAAI,SAAS,CAAC;EAAE;EAC9C;GAAE,IAAI;GAAc,aAAa;GAAI,SAAS,CAAC;EAAE;EACjD;GAAE,IAAI;GAAU,aAAa;GAAI,SAAS,CAAC;EAAE;EAC7C;GAAE,IAAI;GAAqB,aAAa;GAAI,SAAS,CAAC;EAAE;EACxD;GAAE,IAAI;GAAiB,aAAa;GAAI,SAAS,CAAC;EAAE;EACpD;GAAE,IAAI;GAAc,aAAa;GAAI,SAAS,CAAC;EAAE;CAClD,CAAC;CAGD,MAAM,SAAS,QAAQ,UAAU,WAAW,WAAW,OAAO;CAC9D,MAAM,mBACL,WAAW,iBAAiB,WAAW;CACxC,MAAM,oBAAoB,WAAW,qBAAqB;CAK1D,IAAI,CAAC,UAAU,CAAC,kBAAkB;EACjC,iBAAiB,QAAQ,KAAK,OAAO,CAAC;EACtC,OAAO,iBAAiB;GAAE,OAAO,QAAQ;GAAO;EAAO,CAAC;CACzD;CAGA,MAAM,kBAAkB,QAAQ,KAAK,OAAO;CAC5C,MAAM,cAAc,gBAAgB,eAAe;CACnD,MAAM,YACL,OAAO,YAAY,UAAU,YAAY,YAAY,UAAU,OAC3D,YAAY,QACb,CAAC;CACL,MAAM,WAAqB,MAAM,QAAQ,UAAU,QAAQ,IACxD,UAAU,WACV,CAAC;CAGJ,IAAI,CAAC,mBACJ,OAAO,0BAA0B;EAChC,OAAO,QAAQ;EACf,qBAAqB;EACrB,WAAW,WAAW;EACtB,KAAK,WAAW;EAChB,eAAe,WAAW;EAC1B,cAAc,WAAW;EACzB;EACA,SAAS,QAAQ;CAClB,CAAC;CAKF,IAAI,CAAC,YAAY,WAEhB,IAAI;EACH,MAAM,WAAW,MAAM,mBAAmB,GAAG;EAC7C,IAAI,UAAU;GACb,MAAM,SAAS,EAAE,GAAG,YAAY;GAChC,IAAI,SAAS,OAAO,OAAO,QAAQ,SAAS;GAC5C,IAAI,SAAS,WAAW,OAAO,YAAY,SAAS;GACpD,cACC,iBACA,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,GACpC;EACD;CACD,QAAQ,CAER;CAID,MAAM,yBAAyB,SAAS,SAAS;CAIjD,IAHkB,yBACf,SAAS,SAAS,MAAM,IACxB,CAAC,QAAQ;MAGP,CADgB,cAAc,GACnB,GAGd,OAAO,oBAAoB;GAC1B,OAAO,QAAQ;GACf,OAAO;EACR,CAAC;CAAA;CAKH,IAAI,CAAC,QAAQ,gBACZ,OAAO,sBAAsB,EAAE,OAAO,QAAQ,MAAM,CAAC;CAItD,iBAAiB,eAAe;CAEhC,OAAO;EACN,OAAO;EACP,QAAQ;EACR,YAAY;GACX,MAAM;GACN,SACC;EACF;CACD;AACD;;AAGA,SAAS,iBAAiB,iBAA+B;CACxD,IAAI,CAAC,WAAW,eAAe,GAAG;CAClC,IAAI;EACH,MAAM,UAAU,KAAK,MAAM,aAAa,iBAAiB,OAAO,CAAC;EACjE,IAAI,QAAQ,UAAU,KAAA,GAAW;GAChC,OAAO,QAAQ;GACf,cACC,iBACA,GAAG,KAAK,UAAU,SAAS,MAAM,CAAC,EAAE,GACrC;EACD;CACD,QAAQ,CAAC;AACV;AAEA,SAAS,gBAAgB,iBAAkD;CAC1E,IAAI,CAAC,WAAW,eAAe,GAAG,OAAO,CAAC;CAC1C,IAAI;EACH,OAAO,KAAK,MAAM,aAAa,iBAAiB,OAAO,CAAC;CACzD,QAAQ;EACP,OAAO,CAAC;CACT;AACD;AAEA,SAAS,cAAc,KAAsB;CAC5C,MAAM,UAAU,QAAQ,KAAK,MAAM;CACnC,IAAI,CAAC,WAAW,OAAO,GAAG,OAAO;CACjC,IAAI;EACH,MAAM,UAAU,aAAa,SAAS,OAAO;EAC7C,OAAO,eAAe,KAAK,OAAO;CACnC,QAAQ;EACP,OAAO;CACR;AACD"}
1
+ {"version":3,"file":"v2.js","names":[],"sources":["../src/v2.ts"],"sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { isAuthenticated } from \"./lib/auth.js\";\nimport { inspectProject } from \"./lib/inspect.js\";\nimport { handleAuthPhase } from \"./lib/phases/auth.js\";\nimport { handleGettingStartedPhase } from \"./lib/phases/getting-started.js\";\nimport { handleMigrationsPhase } from \"./lib/phases/migrations.js\";\nimport { handleNeonAuthPhase } from \"./lib/phases/neon-auth.js\";\nimport { handleSetupPhase } from \"./lib/phases/setup.js\";\nimport { resolveNeonContext } from \"./lib/resolve-context.js\";\nimport type { PhaseResponse } from \"./lib/types.js\";\n\nexport interface OrchestratorOptions {\n\tagent?: string;\n\tskipMigrations?: boolean;\n\t/** Enable preview features (e.g. project bootstrapping from templates) */\n\tpreview?: boolean;\n}\n\n/**\n * v2 orchestrator: checks phases in order and returns the first that needs attention.\n *\n * Phase order:\n * auth -> setup (if tooling not installed)\n * -> getting-started (if tooling installed but no Neon connection string)\n * -> resolve .neon context (if connection string exists but no .neon file)\n * -> neon_auth (optional) -> complete\n *\n * Each call is stateless — it re-checks everything from the file system and credentials.\n *\n * The orchestrator uses filesystem inspection to decide what to do:\n * - No app detected → bootstrap phase (scaffold from template)\n * - MCP not configured → full setup flow (inspect → install → getting-started)\n * - MCP configured, no connection string → skip install, go to getting-started\n * - MCP configured + connection string → fall through to neon-auth/migrations/complete\n */\nexport async function orchestrate(\n\toptions: OrchestratorOptions,\n): Promise<PhaseResponse> {\n\t// Phase 1: Auth\n\tconst authed = await isAuthenticated();\n\tif (!authed) {\n\t\treturn handleAuthPhase({ agent: options.agent });\n\t}\n\n\tconst cwd = process.cwd();\n\n\t// Phase 2: Inspect what's already in place\n\tconst inspection = await inspectProject([\n\t\t{ id: \"has_app\", description: \"\", lookFor: [] },\n\t\t{ id: \"mcp_server\", description: \"\", lookFor: [] },\n\t\t{ id: \"skills\", description: \"\", lookFor: [] },\n\t\t{ id: \"connection_string\", description: \"\", lookFor: [] },\n\t\t{ id: \"project_stack\", description: \"\", lookFor: [] },\n\t\t{ id: \"migrations\", description: \"\", lookFor: [] },\n\t]);\n\n\t// Only detect empty projects when --preview is enabled\n\tconst hasApp = options.preview ? inspection.hasApp === true : true;\n\n\t// When preview is enabled, check that all preview skills are installed too\n\tlet skillsInstalled = inspection.skillsInstalled;\n\tif (options.preview && skillsInstalled && inspection.skillsScope) {\n\t\tconst { getSkillList } = await import(\"./lib/skills.js\");\n\t\tconst previewSkills = getSkillList(true);\n\t\tconst { existsSync: exists } = await import(\"node:fs\");\n\t\tconst { resolve: resolvePath } = await import(\"node:path\");\n\t\tconst home = process.env.HOME || process.env.USERPROFILE || \"\";\n\t\tconst scope = inspection.skillsScope;\n\t\tconst dirs =\n\t\t\tscope === \"project\"\n\t\t\t\t? [\n\t\t\t\t\t\tresolvePath(cwd, \".cursor\", \"skills\"),\n\t\t\t\t\t\tresolvePath(cwd, \".claude\", \"skills\"),\n\t\t\t\t\t\tresolvePath(cwd, \".agents\", \"skills\"),\n\t\t\t\t\t]\n\t\t\t\t: [\n\t\t\t\t\t\tresolvePath(home, \".cursor\", \"skills\"),\n\t\t\t\t\t\tresolvePath(home, \".claude\", \"skills\"),\n\t\t\t\t\t\tresolvePath(home, \".agents\", \"skills\"),\n\t\t\t\t\t];\n\t\tconst allPresent = previewSkills.every((skill) =>\n\t\t\tdirs.some((dir) => exists(resolvePath(dir, skill, \"SKILL.md\"))),\n\t\t);\n\t\tif (!allPresent) {\n\t\t\tskillsInstalled = false;\n\t\t\t// Mark as partial so setup auto-completes to the same scope\n\t\t\tinspection.skillsScope =\n\t\t\t\t`${inspection.skillsScope}-partial` as typeof inspection.skillsScope;\n\t\t}\n\t}\n\n\tconst toolingInstalled = inspection.mcpConfigured && skillsInstalled;\n\tconst hasNeonConnection = inspection.connectionString === true;\n\n\t// Phase 3a: No app or tooling not installed → setup flow\n\t// When !hasApp (preview mode), setup will offer template selection before asking about tooling.\n\t// Clean up any stale _init state from a previous run.\n\tif (!hasApp || !toolingInstalled) {\n\t\tcleanupInitState(resolve(cwd, \".neon\"));\n\t\treturn handleSetupPhase({\n\t\t\tagent: options.agent,\n\t\t\tpreview: options.preview,\n\t\t\thasApp,\n\t\t\tmcpConfigured: inspection.mcpConfigured ?? null,\n\t\t\tmcpScope: inspection.mcpScope || undefined,\n\t\t\tskillsInstalled: skillsInstalled ?? null,\n\t\t\tskillsScope: inspection.skillsScope || undefined,\n\t\t});\n\t}\n\n\t// Read .neon context early — needed for feature-based routing\n\tconst neonContextPath = resolve(cwd, \".neon\");\n\tconst neonContext = readNeonContext(neonContextPath);\n\tconst initState =\n\t\ttypeof neonContext._init === \"object\" && neonContext._init !== null\n\t\t\t? (neonContext._init as Record<string, unknown>)\n\t\t\t: {};\n\tconst features: string[] = Array.isArray(initState.features)\n\t\t? initState.features\n\t\t: [];\n\n\t// Phase 3b: Tooling installed but no Neon connection string → getting-started\n\tif (!hasNeonConnection) {\n\t\treturn handleGettingStartedPhase({\n\t\t\tagent: options.agent,\n\t\t\thasConnectionString: false,\n\t\t\tframework: inspection.framework as string | undefined,\n\t\t\torm: inspection.orm as string | undefined,\n\t\t\tmigrationTool: inspection.migrationTool as string | undefined,\n\t\t\tmigrationDir: inspection.migrationDir as string | undefined,\n\t\t\tfeatures,\n\t\t\tpreview: options.preview,\n\t\t});\n\t}\n\n\t// Phase 3c: Neon connection exists but no .neon context file → resolve project\n\n\tif (!neonContext.projectId) {\n\t\t// Resolve the project from the connection string and merge into .neon\n\t\ttry {\n\t\t\tconst resolved = await resolveNeonContext(cwd);\n\t\t\tif (resolved) {\n\t\t\t\tconst merged = { ...neonContext };\n\t\t\t\tif (resolved.orgId) merged.orgId = resolved.orgId;\n\t\t\t\tif (resolved.projectId) merged.projectId = resolved.projectId;\n\t\t\t\twriteFileSync(\n\t\t\t\t\tneonContextPath,\n\t\t\t\t\t`${JSON.stringify(merged, null, 2)}\\n`,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch {\n\t\t\t// Continue the flow regardless — missing .neon is not a blocker\n\t\t}\n\t}\n\n\t// Phase 4: Neon Auth — only if features include \"auth\"\n\tif (features.includes(\"auth\")) {\n\t\tconst hasNeonAuth = checkNeonAuth(cwd);\n\t\tif (!hasNeonAuth) {\n\t\t\treturn handleNeonAuthPhase({\n\t\t\t\tagent: options.agent,\n\t\t\t\tsetup: true,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Phase 5: Migrations\n\tif (!options.skipMigrations) {\n\t\treturn handleMigrationsPhase({ agent: options.agent });\n\t}\n\n\t// All done — clean up ephemeral _init state from .neon\n\tcleanupInitState(neonContextPath);\n\n\treturn {\n\t\tphase: \"setup\",\n\t\tstatus: \"complete\",\n\t\tnextAction: {\n\t\t\ttype: \"complete\",\n\t\t\tmessage:\n\t\t\t\t\"Neon setup is complete. Your database is configured and your agent has the Neon MCP server and skills available.\",\n\t\t},\n\t};\n}\n\n/** Remove the ephemeral _init key from .neon, preserving other fields. */\nfunction cleanupInitState(neonContextPath: string): void {\n\tif (!existsSync(neonContextPath)) return;\n\ttry {\n\t\tconst context = JSON.parse(readFileSync(neonContextPath, \"utf-8\"));\n\t\tif (context._init !== undefined) {\n\t\t\tdelete context._init;\n\t\t\twriteFileSync(\n\t\t\t\tneonContextPath,\n\t\t\t\t`${JSON.stringify(context, null, 2)}\\n`,\n\t\t\t);\n\t\t}\n\t} catch {}\n}\n\nfunction readNeonContext(neonContextPath: string): Record<string, unknown> {\n\tif (!existsSync(neonContextPath)) return {};\n\ttry {\n\t\treturn JSON.parse(readFileSync(neonContextPath, \"utf-8\"));\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nfunction checkNeonAuth(cwd: string): boolean {\n\tconst envPath = resolve(cwd, \".env\");\n\tif (!existsSync(envPath)) return false;\n\ttry {\n\t\tconst content = readFileSync(envPath, \"utf-8\");\n\t\treturn /^NEON_AUTH_/m.test(content);\n\t} catch {\n\t\treturn false;\n\t}\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neon-init",
3
- "version": "0.16.3",
3
+ "version": "0.17.1",
4
4
  "description": "Initialize Neon projects",
5
5
  "keywords": [
6
6
  "neon",