@m2015agg/supabase-skill 0.1.1 → 0.2.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.
@@ -12,10 +12,29 @@ function buildEnvSection(config) {
12
12
  const label = env.toUpperCase();
13
13
  lines.push(`- **${label}**: \`${ref}\` (${name})${warning}`);
14
14
  }
15
- // Add safety reminder
15
+ // Add routing rules
16
+ lines.push("");
17
+ lines.push("**Environment routing** (use these refs when user says...):");
18
+ for (const [env, { ref }] of Object.entries(config.environments)) {
19
+ const aliases = env === "prod"
20
+ ? `"prod", "production", "live"`
21
+ : env === "stage"
22
+ ? `"stage", "staging", "test", "preview"`
23
+ : `"dev", "development", "local"`;
24
+ lines.push(`- ${aliases} → \`--project-ref ${ref}\``);
25
+ }
16
26
  if (config.environments["prod"]) {
17
- lines.push(`- **Default**: Use STAGE for testing. PROD requires explicit approval.`);
27
+ lines.push(`- **Default**: Always use STAGE unless user explicitly says "prod". PROD requires approval.`);
28
+ }
29
+ // Add env var instructions for direct API access
30
+ lines.push("");
31
+ lines.push("**Direct API access** (for curl/psql when supabase CLI isn't enough):");
32
+ lines.push("- Read keys from `.env` file — NEVER hardcode keys in commands");
33
+ for (const [env] of Object.entries(config.environments)) {
34
+ const prefix = `SUPABASE_${env.toUpperCase()}`;
35
+ lines.push(`- ${env.toUpperCase()}: \`$${prefix}_URL\`, \`$${prefix}_SERVICE_KEY\`, \`$${prefix}_ANON_KEY\``);
18
36
  }
37
+ lines.push("- Load with: `source .env` or `export $(grep -v '^#' .env | xargs)`");
19
38
  return lines.join("\n");
20
39
  }
21
40
  export function getSkillDoc(config = null) {
@@ -1 +1 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ function write(msg) {
9
9
  }
10
10
  export function initCommand() {
11
11
  return new Command("init")
12
- .description("Initialize supabase-skill in the current project (CLAUDE.md + .env + .gitignore)")
12
+ .description("Initialize supabase-skill in the current project (CLAUDE.md + .env with keys + .gitignore)")
13
13
  .action(() => {
14
14
  const cwd = process.cwd();
15
15
  const results = [];
@@ -19,7 +19,7 @@ export function initCommand() {
19
19
  write(" Proceeding with generic skill doc (no environment refs).\n\n");
20
20
  }
21
21
  const skillDoc = getSkillDoc(config);
22
- // 1. Upsert into project CLAUDE.md
22
+ // 1. Upsert into project CLAUDE.md (NO secrets — only refs + commands)
23
23
  const claudeMd = join(cwd, "CLAUDE.md");
24
24
  const claudeResult = upsertSection(claudeMd, skillDoc);
25
25
  results.push(`CLAUDE.md: ${claudeResult}`);
@@ -30,56 +30,83 @@ export function initCommand() {
30
30
  const dotResult = upsertSection(dotClaudeMd, skillDoc);
31
31
  results.push(`.claude/CLAUDE.md: ${dotResult}`);
32
32
  }
33
- // 2. .env — add project ref placeholders
33
+ // 2. .env — write refs + API keys (secrets go here, NOT in CLAUDE.md)
34
34
  const envPath = join(cwd, ".env");
35
- const envVars = [];
35
+ const envLines = ["", "# supabase-skill environments"];
36
36
  if (config && Object.keys(config.environments).length > 0) {
37
- for (const [env, { ref }] of Object.entries(config.environments)) {
38
- envVars.push(`SUPABASE_${env.toUpperCase()}_REF=${ref}`);
37
+ for (const [env, envConfig] of Object.entries(config.environments)) {
38
+ const prefix = `SUPABASE_${env.toUpperCase()}`;
39
+ envLines.push(`${prefix}_REF=${envConfig.ref}`);
40
+ envLines.push(`${prefix}_URL=${envConfig.dbUrl || `https://${envConfig.ref}.supabase.co`}`);
41
+ if (envConfig.anonKey) {
42
+ envLines.push(`${prefix}_ANON_KEY=${envConfig.anonKey}`);
43
+ }
44
+ if (envConfig.serviceKey) {
45
+ envLines.push(`${prefix}_SERVICE_KEY=${envConfig.serviceKey}`);
46
+ }
47
+ envLines.push("");
39
48
  }
40
49
  }
41
50
  else {
42
- envVars.push("SUPABASE_STAGE_REF=");
43
- envVars.push("SUPABASE_PROD_REF=");
51
+ envLines.push("SUPABASE_STAGE_REF=");
52
+ envLines.push("SUPABASE_STAGE_URL=");
53
+ envLines.push("SUPABASE_STAGE_ANON_KEY=");
54
+ envLines.push("SUPABASE_STAGE_SERVICE_KEY=");
55
+ envLines.push("");
56
+ envLines.push("SUPABASE_PROD_REF=");
57
+ envLines.push("SUPABASE_PROD_URL=");
58
+ envLines.push("SUPABASE_PROD_ANON_KEY=");
59
+ envLines.push("SUPABASE_PROD_SERVICE_KEY=");
60
+ envLines.push("");
44
61
  }
45
62
  if (!existsSync(envPath)) {
46
- writeFileSync(envPath, envVars.join("\n") + "\n");
47
- results.push(".env: created with project refs");
63
+ writeFileSync(envPath, envLines.join("\n") + "\n", { mode: 0o600 });
64
+ results.push(".env: created with project refs + API keys (mode 600)");
48
65
  }
49
66
  else {
50
67
  const envContent = readFileSync(envPath, "utf-8");
51
- const missing = envVars.filter((v) => {
52
- const key = v.split("=")[0];
53
- return !envContent.includes(key);
54
- });
55
- if (missing.length > 0) {
56
- appendFileSync(envPath, "\n# supabase-skill\n" + missing.join("\n") + "\n");
57
- results.push(`.env: appended ${missing.length} project ref(s)`);
68
+ // Check if we already have supabase-skill section
69
+ if (envContent.includes("# supabase-skill environments")) {
70
+ results.push(".env: supabase-skill section already present (not overwriting)");
58
71
  }
59
72
  else {
60
- results.push(".env: project refs already present");
73
+ appendFileSync(envPath, envLines.join("\n") + "\n");
74
+ const keyCount = envLines.filter((l) => l.includes("_SERVICE_KEY=") && !l.endsWith("=")).length;
75
+ results.push(`.env: appended refs + ${keyCount} service key(s)`);
61
76
  }
62
77
  }
63
- // 3. .gitignore
78
+ // 3. .gitignore — ensure .env is listed
64
79
  const gitignorePath = join(cwd, ".gitignore");
65
80
  if (!existsSync(gitignorePath)) {
66
- writeFileSync(gitignorePath, ".env\n");
67
- results.push(".gitignore: created with .env");
81
+ writeFileSync(gitignorePath, ".env\n.supabase-schema/\n");
82
+ results.push(".gitignore: created with .env + .supabase-schema/");
68
83
  }
69
84
  else {
70
85
  const giContent = readFileSync(gitignorePath, "utf-8");
71
- if (giContent.includes(".env")) {
72
- results.push(".gitignore: .env already listed");
86
+ const additions = [];
87
+ if (!giContent.includes(".env"))
88
+ additions.push(".env");
89
+ if (!giContent.includes(".supabase-schema"))
90
+ additions.push(".supabase-schema/");
91
+ if (additions.length > 0) {
92
+ appendFileSync(gitignorePath, additions.join("\n") + "\n");
93
+ results.push(`.gitignore: appended ${additions.join(", ")}`);
73
94
  }
74
95
  else {
75
- appendFileSync(gitignorePath, ".env\n");
76
- results.push(".gitignore: appended .env");
96
+ results.push(".gitignore: .env + .supabase-schema/ already listed");
77
97
  }
78
98
  }
79
- write("supabase-skill init complete:\n");
99
+ write("\nsupabase-skill init complete:\n");
80
100
  for (const r of results) {
81
101
  write(` ${r}\n`);
82
102
  }
103
+ write("\nSecurity:\n");
104
+ write(" ✓ API keys in .env only (never in CLAUDE.md)\n");
105
+ write(" ✓ .env is gitignored\n");
106
+ write(" ✓ Claude reads keys from .env when it needs direct API access\n");
107
+ write("\nNext:\n");
108
+ write(" supabase-skill snapshot # cache your schema locally\n");
109
+ write(" supabase-skill cron # set up nightly refresh\n\n");
83
110
  });
84
111
  }
85
112
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,10 @@ import { homedir } from "node:os";
3
3
  import { join } from "node:path";
4
4
  import { readFileSync, writeFileSync, existsSync, appendFileSync } from "node:fs";
5
5
  import { createInterface } from "node:readline";
6
+ import { execSync } from "node:child_process";
6
7
  import { upsertSection } from "../util/claude-md.js";
7
8
  import { writeConfig, getDefaultConfig } from "../util/config.js";
8
- import { isSupabaseCLIInstalled, isLoggedIn, listProjects } from "../util/detect.js";
9
+ import { isSupabaseCLIInstalled, isLoggedIn, listProjects, listBranches, fetchApiKeys, installSupabaseCLI, } from "../util/detect.js";
9
10
  import { getSkillDoc } from "./docs.js";
10
11
  function prompt(question) {
11
12
  const rl = createInterface({ input: process.stdin, output: process.stdout });
@@ -21,78 +22,167 @@ function write(msg) {
21
22
  }
22
23
  export function installCommand() {
23
24
  return new Command("install")
24
- .description("Set up supabase-skill globally (checks CLI, configures environments, updates ~/.claude/CLAUDE.md)")
25
+ .description("Guided setup: install CLI, login, configure environments, fetch API keys, update CLAUDE.md")
25
26
  .option("--skip-shell", "Skip shell profile modification")
26
- .option("--non-interactive", "Skip interactive prompts (use existing config or defaults)")
27
+ .option("--ci", "Non-interactive mode for CI/automation (skips prompts)")
27
28
  .action(async (opts) => {
28
29
  const home = homedir();
29
30
  const results = [];
30
- // 1. Check supabase CLI
31
- write("\n Checking supabase CLI... ");
32
- const { installed, version } = isSupabaseCLIInstalled();
33
- if (!installed) {
34
- write("NOT FOUND\n\n");
35
- write(" Supabase CLI is required. Install it:\n");
36
- write(" brew install supabase/tap/supabase\n");
37
- write(" # or: npm install -g supabase\n");
38
- write(" # or: https://supabase.com/docs/guides/cli/getting-started\n\n");
39
- process.exit(1);
31
+ const isInteractive = !opts.ci;
32
+ write("\n ╔══════════════════════════════════════╗\n");
33
+ write(" ║ supabase-skill setup wizard ║\n");
34
+ write(" ╚══════════════════════════════════════╝\n\n");
35
+ // ─── Step 1: Supabase CLI ───
36
+ write(" Step 1/5: Supabase CLI\n");
37
+ let { installed, version } = isSupabaseCLIInstalled();
38
+ if (installed) {
39
+ write(` Found v${version}\n\n`);
40
40
  }
41
- write(`\u2713 v${version}\n`);
42
- // 2. Check login
43
- write(" Checking login status... ");
44
- const loggedIn = isLoggedIn();
45
- if (!loggedIn) {
46
- write("NOT LOGGED IN\n\n");
47
- write(" Run: supabase login\n");
48
- write(" Then re-run: supabase-skill install\n\n");
49
- process.exit(1);
41
+ else {
42
+ write(" ✗ Not installed\n");
43
+ const answer = isInteractive ? await prompt(" Install now via npm? (y/n) → ") : "n";
44
+ if (answer.toLowerCase() === "y") {
45
+ write(" Installing supabase CLI...\n");
46
+ const ok = installSupabaseCLI();
47
+ if (ok) {
48
+ const check = isSupabaseCLIInstalled();
49
+ write(` ✓ Installed v${check.version}\n\n`);
50
+ installed = true;
51
+ version = check.version;
52
+ }
53
+ else {
54
+ write(" ✗ Install failed. Try manually:\n");
55
+ write(" brew install supabase/tap/supabase\n");
56
+ write(" # or: npm install -g supabase\n\n");
57
+ process.exit(1);
58
+ }
59
+ }
60
+ else {
61
+ write(" Install it manually, then re-run: supabase-skill install\n\n");
62
+ process.exit(1);
63
+ }
50
64
  }
51
- write("\u2713 logged in\n");
52
- // 3. List projects and tag environments
53
- const config = getDefaultConfig();
54
- if (!opts.nonInteractive && process.stdin.isTTY) {
55
- const projects = listProjects();
56
- if (projects.length > 0) {
57
- write(`\n Found ${projects.length} project(s):\n`);
58
- projects.forEach((p, i) => {
59
- write(` ${i + 1}. ${p.name} (${p.id})\n`);
60
- });
61
- write("\n Tag each project (prod/stage/dev/skip):\n");
62
- for (const project of projects) {
63
- const answer = await prompt(` ${project.name} (${project.id}) \u2192 `);
64
- const env = answer.toLowerCase();
65
- if (env === "prod" || env === "stage" || env === "dev") {
66
- config.environments[env] = { ref: project.id, name: project.name };
65
+ // ─── Step 2: Login ───
66
+ write(" Step 2/5: Authentication\n");
67
+ let loggedIn = isLoggedIn();
68
+ if (loggedIn) {
69
+ write(" ✓ Logged in\n\n");
70
+ }
71
+ else {
72
+ write(" ✗ Not logged in\n");
73
+ const answer = isInteractive ? await prompt(" Open browser to login now? (y/n) → ") : "n";
74
+ if (answer.toLowerCase() === "y") {
75
+ write(" Opening browser for Supabase login...\n\n");
76
+ try {
77
+ execSync("supabase login", { stdio: "inherit", timeout: 120000 });
78
+ loggedIn = isLoggedIn();
79
+ if (loggedIn) {
80
+ write("\n ✓ Logged in\n\n");
81
+ }
82
+ else {
83
+ write("\n ✗ Login may have failed. Re-run: supabase-skill install\n\n");
84
+ process.exit(1);
67
85
  }
68
86
  }
69
- // Set default env
70
- if (config.environments["stage"]) {
71
- config.defaultEnv = "stage";
87
+ catch {
88
+ write(" ✗ Login failed. Run `supabase login` manually, then re-run install.\n\n");
89
+ process.exit(1);
72
90
  }
73
- else if (config.environments["dev"]) {
74
- config.defaultEnv = "dev";
91
+ }
92
+ else {
93
+ write(" Run `supabase login` first, then re-run: supabase-skill install\n\n");
94
+ process.exit(1);
95
+ }
96
+ }
97
+ // ─── Step 3: Discover Projects + Branches ───
98
+ write(" Step 3/5: Discovering projects & branches\n");
99
+ const config = getDefaultConfig();
100
+ const projects = listProjects();
101
+ if (projects.length === 0) {
102
+ write(" No projects found. Create a project at supabase.com first.\n\n");
103
+ }
104
+ else {
105
+ const items = [];
106
+ for (const p of projects) {
107
+ const ref = p.ref || p.id;
108
+ const status = p.status || "";
109
+ const statusTag = status === "ACTIVE_HEALTHY" ? " ✓" : status === "INACTIVE" ? " (inactive)" : "";
110
+ write(` ${items.length + 1}. ${p.name} (${ref})${statusTag}\n`);
111
+ items.push({ ref, name: p.name, type: "project" });
112
+ // Fetch branches for active projects
113
+ if (status === "ACTIVE_HEALTHY") {
114
+ write(` Checking branches... `);
115
+ const branches = listBranches(ref);
116
+ const nonDefault = branches.filter((b) => !b.is_default && b.project_ref !== ref);
117
+ if (nonDefault.length > 0) {
118
+ write(`${nonDefault.length} found\n`);
119
+ for (const b of nonDefault) {
120
+ const bStatus = b.preview_project_status === "ACTIVE_HEALTHY" ? " ✓" : "";
121
+ write(` └─ ${b.name} (${b.project_ref})${bStatus}\n`);
122
+ items.push({ ref: b.project_ref, name: `${p.name} [${b.name}]`, type: "branch", parentRef: ref });
123
+ }
124
+ }
125
+ else {
126
+ write("none\n");
127
+ }
75
128
  }
76
- else {
77
- const envKeys = Object.keys(config.environments);
78
- if (envKeys.length > 0)
79
- config.defaultEnv = envKeys[0];
129
+ }
130
+ if (isInteractive) {
131
+ write("\n Tag each environment (prod/stage/dev/skip):\n");
132
+ for (const item of items) {
133
+ const indent = item.type === "branch" ? " " : " ";
134
+ const answer = await prompt(`${indent}${item.name} (${item.ref}) → `);
135
+ const env = answer.toLowerCase();
136
+ if (env === "prod" || env === "stage" || env === "dev") {
137
+ config.environments[env] = { ref: item.ref, name: item.name };
138
+ }
80
139
  }
81
140
  }
141
+ // Set default env
142
+ if (config.environments["stage"]) {
143
+ config.defaultEnv = "stage";
144
+ }
145
+ else if (config.environments["dev"]) {
146
+ config.defaultEnv = "dev";
147
+ }
148
+ else {
149
+ const envKeys = Object.keys(config.environments);
150
+ if (envKeys.length > 0)
151
+ config.defaultEnv = envKeys[0];
152
+ }
153
+ }
154
+ write("\n");
155
+ // ─── Step 4: Fetch API Keys ───
156
+ write(" Step 4/5: Fetching API keys\n");
157
+ for (const env of Object.keys(config.environments)) {
158
+ const envConfig = config.environments[env];
159
+ write(` ${env.toUpperCase()} (${envConfig.ref})... `);
160
+ const keys = fetchApiKeys(envConfig.ref);
161
+ if (keys) {
162
+ config.environments[env] = {
163
+ ...envConfig,
164
+ anonKey: keys.anonKey,
165
+ serviceKey: keys.serviceKey,
166
+ dbUrl: `https://${envConfig.ref}.supabase.co`,
167
+ };
168
+ write(`✓ anon + service_role keys saved\n`);
169
+ }
82
170
  else {
83
- write("\n No projects found. You can configure environments later with:\n");
84
- write(" supabase-skill install\n");
171
+ write(" could not fetch (will need manual setup)\n");
85
172
  }
86
173
  }
87
- // 4. Write config
174
+ write("\n");
175
+ // ─── Step 5: Write Everything ───
176
+ write(" Step 5/5: Writing configuration\n");
177
+ // Config file (contains secrets — restrictive permissions)
88
178
  writeConfig(config);
89
- results.push("~/.config/supabase-skill/config.json: created");
90
- // 5. Upsert into global CLAUDE.md
179
+ results.push("~/.config/supabase-skill/config.json: created (mode 600)");
180
+ // CLAUDE.md (NO secrets only refs, names, CLI commands)
91
181
  const claudeMd = join(home, ".claude", "CLAUDE.md");
92
182
  const skillDoc = getSkillDoc(config);
93
183
  const claudeResult = upsertSection(claudeMd, skillDoc);
94
184
  results.push(`~/.claude/CLAUDE.md: ${claudeResult}`);
95
- // 6. Shell profile — ensure SUPABASE_ACCESS_TOKEN
185
+ // Shell profile
96
186
  if (!opts.skipShell) {
97
187
  const shell = process.env.SHELL || "/bin/bash";
98
188
  const profileName = shell.includes("zsh") ? ".zshrc" : ".bashrc";
@@ -112,18 +202,24 @@ export function installCommand() {
112
202
  results.push(`~/${profileName}: created with SUPABASE_ACCESS_TOKEN placeholder`);
113
203
  }
114
204
  }
115
- // Output results
116
- write("\n supabase-skill install complete:\n");
205
+ // Output summary
206
+ write("\n ── Setup Complete ──\n\n");
117
207
  for (const r of results) {
118
208
  write(` ${r}\n`);
119
209
  }
120
210
  if (Object.keys(config.environments).length > 0) {
121
- write("\n Configured environments:\n");
122
- for (const [env, { ref, name }] of Object.entries(config.environments)) {
123
- write(` ${env.toUpperCase()}: ${ref} (${name})\n`);
211
+ write("\n Environments:\n");
212
+ for (const [env, { ref, name, serviceKey }] of Object.entries(config.environments)) {
213
+ const keyStatus = serviceKey ? "✓ keys" : "✗ no keys";
214
+ const warning = env === "prod" ? " ⚠️" : "";
215
+ write(` ${env.toUpperCase()}: ${ref} (${name}) [${keyStatus}]${warning}\n`);
124
216
  }
217
+ write("\n Security:\n");
218
+ write(" ✓ API keys stored in ~/.config/supabase-skill/config.json (mode 600)\n");
219
+ write(" ✓ CLAUDE.md contains only project refs (not secrets)\n");
220
+ write(" ✓ `supabase-skill init` writes service keys to .env (gitignored)\n");
125
221
  }
126
- write("\n Next: run `supabase-skill init` in any project directory.\n\n");
222
+ write("\n Next: cd into your project and run `supabase-skill init`\n\n");
127
223
  });
128
224
  }
129
225
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ const program = new Command();
15
15
  program
16
16
  .name("supabase-skill")
17
17
  .description("Supabase CLI skill for AI agents. Installs comprehensive CLI instructions into CLAUDE.md with multi-environment support.")
18
- .version("0.1.1");
18
+ .version("0.2.1");
19
19
  program.addCommand(installCommand());
20
20
  program.addCommand(initCommand());
21
21
  program.addCommand(docsCommand());
@@ -1,6 +1,9 @@
1
1
  export interface Environment {
2
2
  ref: string;
3
3
  name: string;
4
+ anonKey?: string;
5
+ serviceKey?: string;
6
+ dbUrl?: string;
4
7
  }
5
8
  export interface SkillConfig {
6
9
  environments: Record<string, Environment>;
@@ -22,7 +22,7 @@ export function writeConfig(config) {
22
22
  const dir = getConfigDir();
23
23
  if (!existsSync(dir))
24
24
  mkdirSync(dir, { recursive: true });
25
- writeFileSync(getConfigPath(), JSON.stringify(config, null, 2) + "\n");
25
+ writeFileSync(getConfigPath(), JSON.stringify(config, null, 2) + "\n", { mode: 0o600 });
26
26
  }
27
27
  export function getDefaultConfig() {
28
28
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/util/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAgBlC,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAgB,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAmB;IAC7C,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,aAAa,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,OAAO;QACnB,WAAW,EAAE;YACX,oBAAoB,EAAE,IAAI;YAC1B,gBAAgB,EAAE,IAAI;SACvB;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/util/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAmBlC,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAgB,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAmB;IAC7C,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,aAAa,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,OAAO;QACnB,WAAW,EAAE;YACX,oBAAoB,EAAE,IAAI;YAC1B,gBAAgB,EAAE,IAAI;SACvB;KACF,CAAC;AACJ,CAAC"}
@@ -4,6 +4,17 @@ export interface SupabaseProject {
4
4
  organization_id: string;
5
5
  region: string;
6
6
  created_at: string;
7
+ status?: string;
8
+ ref?: string;
9
+ }
10
+ export interface SupabaseBranch {
11
+ id: string;
12
+ name: string;
13
+ project_ref: string;
14
+ parent_project_ref: string;
15
+ is_default: boolean;
16
+ status: string;
17
+ preview_project_status: string;
7
18
  }
8
19
  export declare function isSupabaseCLIInstalled(): {
9
20
  installed: boolean;
@@ -11,3 +22,11 @@ export declare function isSupabaseCLIInstalled(): {
11
22
  };
12
23
  export declare function isLoggedIn(): boolean;
13
24
  export declare function listProjects(): SupabaseProject[];
25
+ export declare function listBranches(projectRef: string): SupabaseBranch[];
26
+ export interface ApiKeys {
27
+ anonKey: string;
28
+ serviceKey: string;
29
+ }
30
+ export declare function fetchApiKeys(projectRef: string): ApiKeys | null;
31
+ export declare function installSupabaseCLI(): boolean;
32
+ export declare function loginSupabase(): boolean;
@@ -1,4 +1,16 @@
1
1
  import { execSync } from "node:child_process";
2
+ function parseJsonArray(output) {
3
+ const jsonMatch = output.match(/\[[\s\S]*\]/);
4
+ if (!jsonMatch)
5
+ return [];
6
+ try {
7
+ const parsed = JSON.parse(jsonMatch[0]);
8
+ return Array.isArray(parsed) ? parsed : [];
9
+ }
10
+ catch {
11
+ return [];
12
+ }
13
+ }
2
14
  export function isSupabaseCLIInstalled() {
3
15
  try {
4
16
  const output = execSync("supabase --version 2>&1", { encoding: "utf-8" }).trim();
@@ -24,15 +36,51 @@ export function listProjects() {
24
36
  encoding: "utf-8",
25
37
  timeout: 15000,
26
38
  });
27
- // Extract JSON array from output (CLI may prepend warnings and append update notices)
28
- const jsonMatch = output.match(/\[[\s\S]*\]/);
29
- if (!jsonMatch)
30
- return [];
31
- const parsed = JSON.parse(jsonMatch[0]);
32
- return Array.isArray(parsed) ? parsed : [];
39
+ return parseJsonArray(output);
33
40
  }
34
41
  catch {
35
42
  return [];
36
43
  }
37
44
  }
45
+ export function listBranches(projectRef) {
46
+ try {
47
+ const output = execSync(`supabase branches list --project-ref ${projectRef} -o json 2>&1`, { encoding: "utf-8", timeout: 15000 });
48
+ return parseJsonArray(output);
49
+ }
50
+ catch {
51
+ return [];
52
+ }
53
+ }
54
+ export function fetchApiKeys(projectRef) {
55
+ try {
56
+ const output = execSync(`supabase projects api-keys --project-ref ${projectRef} -o json 2>&1`, { encoding: "utf-8", timeout: 15000 });
57
+ const keys = parseJsonArray(output);
58
+ const anon = keys.find((k) => k.name === "anon")?.api_key || "";
59
+ const service = keys.find((k) => k.name === "service_role")?.api_key || "";
60
+ if (!anon && !service)
61
+ return null;
62
+ return { anonKey: anon, serviceKey: service };
63
+ }
64
+ catch {
65
+ return null;
66
+ }
67
+ }
68
+ export function installSupabaseCLI() {
69
+ try {
70
+ execSync("npm install -g supabase 2>&1", { encoding: "utf-8", timeout: 120000 });
71
+ return true;
72
+ }
73
+ catch {
74
+ return false;
75
+ }
76
+ }
77
+ export function loginSupabase() {
78
+ try {
79
+ execSync("supabase login", { encoding: "utf-8", timeout: 120000, stdio: "inherit" });
80
+ return true;
81
+ }
82
+ catch {
83
+ return false;
84
+ }
85
+ }
38
86
  //# sourceMappingURL=detect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/util/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAU9C,MAAM,UAAU,sBAAsB;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC9C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,QAAQ,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,qCAAqC,EAAE;YAC7D,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,sFAAsF;QACtF,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/util/detect.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m2015agg/supabase-skill",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "Supabase CLI skill for AI agents. Installs comprehensive CLI instructions into CLAUDE.md, AGENTS.md, or .cursorrules with multi-environment support.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",