@m2015agg/supabase-skill 0.1.0 → 0.2.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.
@@ -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,173 @@ 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
27
  .option("--non-interactive", "Skip interactive prompts (use existing config or defaults)")
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.nonInteractive && process.stdin.isTTY;
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);
50
- }
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 };
41
+ else {
42
+ write(" ✗ Not installed\n");
43
+ if (isInteractive) {
44
+ const answer = await prompt(" Install now via npm? (y/n) → ");
45
+ if (answer.toLowerCase() === "y") {
46
+ write(" Installing supabase CLI...\n");
47
+ const ok = installSupabaseCLI();
48
+ if (ok) {
49
+ const check = isSupabaseCLIInstalled();
50
+ write(` ✓ Installed v${check.version}\n\n`);
51
+ installed = true;
52
+ version = check.version;
53
+ }
54
+ else {
55
+ write(" ✗ Install failed. Try manually:\n");
56
+ write(" brew install supabase/tap/supabase\n");
57
+ write(" # or: npm install -g supabase\n\n");
58
+ process.exit(1);
67
59
  }
68
60
  }
69
- // Set default env
70
- if (config.environments["stage"]) {
71
- config.defaultEnv = "stage";
61
+ else {
62
+ write(" Install it manually, then re-run: supabase-skill install\n\n");
63
+ process.exit(1);
72
64
  }
73
- else if (config.environments["dev"]) {
74
- config.defaultEnv = "dev";
65
+ }
66
+ else {
67
+ process.exit(1);
68
+ }
69
+ }
70
+ // ─── Step 2: Login ───
71
+ write(" Step 2/5: Authentication\n");
72
+ let loggedIn = isLoggedIn();
73
+ if (loggedIn) {
74
+ write(" ✓ Logged in\n\n");
75
+ }
76
+ else {
77
+ write(" ✗ Not logged in\n");
78
+ if (isInteractive) {
79
+ const answer = await prompt(" Open browser to login now? (y/n) → ");
80
+ if (answer.toLowerCase() === "y") {
81
+ write(" Opening browser for Supabase login...\n\n");
82
+ try {
83
+ execSync("supabase login", { stdio: "inherit", timeout: 120000 });
84
+ loggedIn = isLoggedIn();
85
+ if (loggedIn) {
86
+ write("\n ✓ Logged in\n\n");
87
+ }
88
+ else {
89
+ write("\n ✗ Login may have failed. Re-run: supabase-skill install\n\n");
90
+ process.exit(1);
91
+ }
92
+ }
93
+ catch {
94
+ write(" ✗ Login failed. Run `supabase login` manually, then re-run install.\n\n");
95
+ process.exit(1);
96
+ }
75
97
  }
76
98
  else {
77
- const envKeys = Object.keys(config.environments);
78
- if (envKeys.length > 0)
79
- config.defaultEnv = envKeys[0];
99
+ write(" Run `supabase login` first, then re-run: supabase-skill install\n\n");
100
+ process.exit(1);
80
101
  }
81
102
  }
82
103
  else {
83
- write("\n No projects found. You can configure environments later with:\n");
84
- write(" supabase-skill install\n");
104
+ process.exit(1);
105
+ }
106
+ }
107
+ // ─── Step 3: Discover Projects + Branches ───
108
+ write(" Step 3/5: Discovering projects & branches\n");
109
+ const config = getDefaultConfig();
110
+ const projects = listProjects();
111
+ if (projects.length === 0) {
112
+ write(" No projects found. Create a project at supabase.com first.\n\n");
113
+ }
114
+ else {
115
+ const items = [];
116
+ for (const p of projects) {
117
+ const ref = p.ref || p.id;
118
+ const status = p.status || "";
119
+ const statusTag = status === "ACTIVE_HEALTHY" ? " ✓" : status === "INACTIVE" ? " (inactive)" : "";
120
+ write(` ${items.length + 1}. ${p.name} (${ref})${statusTag}\n`);
121
+ items.push({ ref, name: p.name, type: "project" });
122
+ // Fetch branches for active projects
123
+ if (status === "ACTIVE_HEALTHY") {
124
+ write(` Checking branches... `);
125
+ const branches = listBranches(ref);
126
+ const nonDefault = branches.filter((b) => !b.is_default && b.project_ref !== ref);
127
+ if (nonDefault.length > 0) {
128
+ write(`${nonDefault.length} found\n`);
129
+ for (const b of nonDefault) {
130
+ const bStatus = b.preview_project_status === "ACTIVE_HEALTHY" ? " ✓" : "";
131
+ write(` └─ ${b.name} (${b.project_ref})${bStatus}\n`);
132
+ items.push({ ref: b.project_ref, name: `${p.name} [${b.name}]`, type: "branch", parentRef: ref });
133
+ }
134
+ }
135
+ else {
136
+ write("none\n");
137
+ }
138
+ }
139
+ }
140
+ if (isInteractive) {
141
+ write("\n Tag each environment (prod/stage/dev/skip):\n");
142
+ for (const item of items) {
143
+ const indent = item.type === "branch" ? " " : " ";
144
+ const answer = await prompt(`${indent}${item.name} (${item.ref}) → `);
145
+ const env = answer.toLowerCase();
146
+ if (env === "prod" || env === "stage" || env === "dev") {
147
+ config.environments[env] = { ref: item.ref, name: item.name };
148
+ }
149
+ }
150
+ }
151
+ // Set default env
152
+ if (config.environments["stage"]) {
153
+ config.defaultEnv = "stage";
154
+ }
155
+ else if (config.environments["dev"]) {
156
+ config.defaultEnv = "dev";
157
+ }
158
+ else {
159
+ const envKeys = Object.keys(config.environments);
160
+ if (envKeys.length > 0)
161
+ config.defaultEnv = envKeys[0];
162
+ }
163
+ }
164
+ write("\n");
165
+ // ─── Step 4: Fetch API Keys ───
166
+ write(" Step 4/5: Fetching API keys\n");
167
+ for (const [env, envConfig] of Object.entries(config.environments)) {
168
+ write(` ${env.toUpperCase()} (${envConfig.ref})... `);
169
+ const keys = fetchApiKeys(envConfig.ref);
170
+ if (keys) {
171
+ envConfig.anonKey = keys.anonKey;
172
+ envConfig.serviceKey = keys.serviceKey;
173
+ envConfig.dbUrl = `https://${envConfig.ref}.supabase.co`;
174
+ write(`✓ anon + service_role keys saved\n`);
175
+ }
176
+ else {
177
+ write("✗ could not fetch (will need manual setup)\n");
85
178
  }
86
179
  }
87
- // 4. Write config
180
+ write("\n");
181
+ // ─── Step 5: Write Everything ───
182
+ write(" Step 5/5: Writing configuration\n");
183
+ // Config file (contains secrets — restrictive permissions)
88
184
  writeConfig(config);
89
- results.push("~/.config/supabase-skill/config.json: created");
90
- // 5. Upsert into global CLAUDE.md
185
+ results.push("~/.config/supabase-skill/config.json: created (mode 600)");
186
+ // CLAUDE.md (NO secrets only refs, names, CLI commands)
91
187
  const claudeMd = join(home, ".claude", "CLAUDE.md");
92
188
  const skillDoc = getSkillDoc(config);
93
189
  const claudeResult = upsertSection(claudeMd, skillDoc);
94
190
  results.push(`~/.claude/CLAUDE.md: ${claudeResult}`);
95
- // 6. Shell profile — ensure SUPABASE_ACCESS_TOKEN
191
+ // Shell profile
96
192
  if (!opts.skipShell) {
97
193
  const shell = process.env.SHELL || "/bin/bash";
98
194
  const profileName = shell.includes("zsh") ? ".zshrc" : ".bashrc";
@@ -112,18 +208,24 @@ export function installCommand() {
112
208
  results.push(`~/${profileName}: created with SUPABASE_ACCESS_TOKEN placeholder`);
113
209
  }
114
210
  }
115
- // Output results
116
- write("\n supabase-skill install complete:\n");
211
+ // Output summary
212
+ write("\n ── Setup Complete ──\n\n");
117
213
  for (const r of results) {
118
214
  write(` ${r}\n`);
119
215
  }
120
216
  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`);
217
+ write("\n Environments:\n");
218
+ for (const [env, { ref, name, serviceKey }] of Object.entries(config.environments)) {
219
+ const keyStatus = serviceKey ? "✓ keys" : "✗ no keys";
220
+ const warning = env === "prod" ? " ⚠️" : "";
221
+ write(` ${env.toUpperCase()}: ${ref} (${name}) [${keyStatus}]${warning}\n`);
124
222
  }
223
+ write("\n Security:\n");
224
+ write(" ✓ API keys stored in ~/.config/supabase-skill/config.json (mode 600)\n");
225
+ write(" ✓ CLAUDE.md contains only project refs (not secrets)\n");
226
+ write(" ✓ `supabase-skill init` writes service keys to .env (gitignored)\n");
125
227
  }
126
- write("\n Next: run `supabase-skill init` in any project directory.\n\n");
228
+ write("\n Next: cd into your project and run `supabase-skill init`\n\n");
127
229
  });
128
230
  }
129
231
  //# 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.0");
18
+ .version("0.2.0");
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,11 +36,51 @@ export function listProjects() {
24
36
  encoding: "utf-8",
25
37
  timeout: 15000,
26
38
  });
27
- const parsed = JSON.parse(output);
28
- return Array.isArray(parsed) ? parsed : [];
39
+ return parseJsonArray(output);
29
40
  }
30
41
  catch {
31
42
  return [];
32
43
  }
33
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
+ }
34
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,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,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.0",
3
+ "version": "0.2.0",
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",