@m2015agg/supabase-skill 0.5.0 → 0.5.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.
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function approveCommand(): Command;
@@ -0,0 +1,123 @@
1
+ import { Command } from "commander";
2
+ import { join } from "node:path";
3
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
4
+ import { homedir } from "node:os";
5
+ function write(msg) {
6
+ process.stdout.write(msg);
7
+ }
8
+ // All supabase-skill commands that Claude should run without prompting
9
+ const SKILL_PERMISSIONS = [
10
+ // Read-only local commands (query SQLite/markdown)
11
+ "Bash(supabase-skill search:*)",
12
+ "Bash(supabase-skill context:*)",
13
+ "Bash(supabase-skill table:*)",
14
+ "Bash(supabase-skill columns:*)",
15
+ "Bash(supabase-skill envs:*)",
16
+ "Bash(supabase-skill docs:*)",
17
+ "Bash(supabase-skill cron --status:*)",
18
+ // Snapshot (fetches from API but writes locally)
19
+ "Bash(supabase-skill snapshot:*)",
20
+ // Supabase CLI read-only commands
21
+ "Bash(supabase projects list:*)",
22
+ "Bash(supabase projects api-keys:*)",
23
+ "Bash(supabase branches list:*)",
24
+ "Bash(supabase functions list:*)",
25
+ "Bash(supabase secrets list:*)",
26
+ "Bash(supabase snippets list:*)",
27
+ "Bash(supabase snippets download:*)",
28
+ "Bash(supabase migration list:*)",
29
+ "Bash(supabase inspect:*)",
30
+ "Bash(supabase backups list:*)",
31
+ "Bash(supabase db dump:*)",
32
+ "Bash(supabase db diff:*)",
33
+ "Bash(supabase db lint:*)",
34
+ "Bash(supabase gen types:*)",
35
+ "Bash(supabase status:*)",
36
+ ];
37
+ function updateSettings(filePath, permissions) {
38
+ const dir = filePath.substring(0, filePath.lastIndexOf("/"));
39
+ if (!existsSync(dir))
40
+ mkdirSync(dir, { recursive: true });
41
+ let settings = {};
42
+ if (existsSync(filePath)) {
43
+ try {
44
+ settings = JSON.parse(readFileSync(filePath, "utf-8"));
45
+ }
46
+ catch {
47
+ // Corrupted file, start fresh
48
+ }
49
+ }
50
+ if (!settings.permissions)
51
+ settings.permissions = {};
52
+ const perms = settings.permissions;
53
+ if (!Array.isArray(perms.allow))
54
+ perms.allow = [];
55
+ const allow = perms.allow;
56
+ let added = 0;
57
+ let existing = 0;
58
+ for (const perm of permissions) {
59
+ if (allow.includes(perm)) {
60
+ existing++;
61
+ }
62
+ else {
63
+ allow.push(perm);
64
+ added++;
65
+ }
66
+ }
67
+ writeFileSync(filePath, JSON.stringify(settings, null, 2) + "\n");
68
+ return { added, existing };
69
+ }
70
+ export function approveCommand() {
71
+ return new Command("approve")
72
+ .description("Pre-approve supabase-skill + supabase CLI read commands in Claude Code (no more permission prompts)")
73
+ .option("--global", "Add to global ~/.claude/settings.json (applies to all projects)")
74
+ .option("--remove", "Remove pre-approved permissions")
75
+ .action((opts) => {
76
+ const targets = [];
77
+ if (opts.global) {
78
+ targets.push({
79
+ path: join(homedir(), ".claude", "settings.json"),
80
+ label: "~/.claude/settings.json (global)",
81
+ });
82
+ }
83
+ else {
84
+ const cwd = process.cwd();
85
+ targets.push({
86
+ path: join(cwd, ".claude", "settings.json"),
87
+ label: ".claude/settings.json (project)",
88
+ });
89
+ }
90
+ if (opts.remove) {
91
+ for (const target of targets) {
92
+ if (!existsSync(target.path)) {
93
+ write(` ${target.label}: not found\n`);
94
+ continue;
95
+ }
96
+ const settings = JSON.parse(readFileSync(target.path, "utf-8"));
97
+ const perms = settings.permissions;
98
+ if (perms && Array.isArray(perms.allow)) {
99
+ const before = perms.allow.length;
100
+ perms.allow = perms.allow.filter((p) => !SKILL_PERMISSIONS.includes(p));
101
+ const removed = before - perms.allow.length;
102
+ writeFileSync(target.path, JSON.stringify(settings, null, 2) + "\n");
103
+ write(` ${target.label}: removed ${removed} permissions\n`);
104
+ }
105
+ }
106
+ return;
107
+ }
108
+ write("\n Pre-approving supabase-skill commands for Claude Code:\n\n");
109
+ for (const target of targets) {
110
+ const { added, existing } = updateSettings(target.path, SKILL_PERMISSIONS);
111
+ write(` ${target.label}:\n`);
112
+ write(` ${added} permissions added, ${existing} already present\n\n`);
113
+ }
114
+ write(" Approved commands (Claude won't prompt for these):\n");
115
+ write(" supabase-skill: search, context, table, columns, envs, docs, snapshot\n");
116
+ write(" supabase CLI: projects list, branches list, functions list, inspect,\n");
117
+ write(" migration list, db dump/diff/lint, backups list, gen types\n");
118
+ write("\n NOT approved (Claude will still ask — these modify data):\n");
119
+ write(" supabase migration up/down/repair, db push, functions deploy,\n");
120
+ write(" secrets set, REST API mutations (POST/PATCH/DELETE)\n\n");
121
+ });
122
+ }
123
+ //# sourceMappingURL=approve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -11,11 +11,12 @@ import { contextCommand } from "./commands/context.js";
11
11
  import { columnsCommand } from "./commands/columns.js";
12
12
  import { tableCommand } from "./commands/table.js";
13
13
  import { cronCommand } from "./commands/cron.js";
14
+ import { approveCommand } from "./commands/approve.js";
14
15
  const program = new Command();
15
16
  program
16
17
  .name("supabase-skill")
17
18
  .description("Supabase CLI skill for AI agents. Installs comprehensive CLI instructions into CLAUDE.md with multi-environment support.")
18
- .version("0.5.0");
19
+ .version("0.5.1");
19
20
  program.addCommand(installCommand());
20
21
  program.addCommand(initCommand());
21
22
  program.addCommand(docsCommand());
@@ -27,5 +28,6 @@ program.addCommand(contextCommand());
27
28
  program.addCommand(columnsCommand());
28
29
  program.addCommand(tableCommand());
29
30
  program.addCommand(cronCommand());
31
+ program.addCommand(approveCommand());
30
32
  program.parse();
31
33
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,0HAA0H,CAAC;KACvI,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,0HAA0H,CAAC;KACvI,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;AAErC,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m2015agg/supabase-skill",
3
- "version": "0.5.0",
3
+ "version": "0.5.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",