axgram 0.1.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 (90) hide show
  1. package/README.md +126 -0
  2. package/dist/bin/axgram-hook.js +77 -0
  3. package/dist/bin/axgram-hook.js.map +1 -0
  4. package/dist/bin/axgram.js +386 -0
  5. package/dist/bin/axgram.js.map +1 -0
  6. package/dist/commands/hook-session-start.js +85 -0
  7. package/dist/commands/hook-session-start.js.map +1 -0
  8. package/dist/commands/hook-stop.js +73 -0
  9. package/dist/commands/hook-stop.js.map +1 -0
  10. package/dist/commands/import.js +56 -0
  11. package/dist/commands/import.js.map +1 -0
  12. package/dist/commands/invitations.js +153 -0
  13. package/dist/commands/invitations.js.map +1 -0
  14. package/dist/commands/login.js +125 -0
  15. package/dist/commands/login.js.map +1 -0
  16. package/dist/commands/logout.js +11 -0
  17. package/dist/commands/logout.js.map +1 -0
  18. package/dist/commands/members.js +231 -0
  19. package/dist/commands/members.js.map +1 -0
  20. package/dist/commands/mine.js +78 -0
  21. package/dist/commands/mine.js.map +1 -0
  22. package/dist/commands/orgs.js +153 -0
  23. package/dist/commands/orgs.js.map +1 -0
  24. package/dist/commands/projects.js +285 -0
  25. package/dist/commands/projects.js.map +1 -0
  26. package/dist/commands/teams.js +153 -0
  27. package/dist/commands/teams.js.map +1 -0
  28. package/dist/commands/whoami.js +27 -0
  29. package/dist/commands/whoami.js.map +1 -0
  30. package/dist/lib/auth.js +128 -0
  31. package/dist/lib/auth.js.map +1 -0
  32. package/dist/lib/chunkers/exchange-pair.js +51 -0
  33. package/dist/lib/chunkers/exchange-pair.js.map +1 -0
  34. package/dist/lib/chunkers/index.js +74 -0
  35. package/dist/lib/chunkers/index.js.map +1 -0
  36. package/dist/lib/chunkers/line-group.js +20 -0
  37. package/dist/lib/chunkers/line-group.js.map +1 -0
  38. package/dist/lib/chunkers/paragraph.js +29 -0
  39. package/dist/lib/chunkers/paragraph.js.map +1 -0
  40. package/dist/lib/chunkers/types.js +3 -0
  41. package/dist/lib/chunkers/types.js.map +1 -0
  42. package/dist/lib/config-dir.js +30 -0
  43. package/dist/lib/config-dir.js.map +1 -0
  44. package/dist/lib/destructive-confirm.js +71 -0
  45. package/dist/lib/destructive-confirm.js.map +1 -0
  46. package/dist/lib/entity-extractor.js +182 -0
  47. package/dist/lib/entity-extractor.js.map +1 -0
  48. package/dist/lib/global-config.js +42 -0
  49. package/dist/lib/global-config.js.map +1 -0
  50. package/dist/lib/hook-settings.js +87 -0
  51. package/dist/lib/hook-settings.js.map +1 -0
  52. package/dist/lib/hook-state.js +38 -0
  53. package/dist/lib/hook-state.js.map +1 -0
  54. package/dist/lib/importers/chatgpt.js +89 -0
  55. package/dist/lib/importers/chatgpt.js.map +1 -0
  56. package/dist/lib/importers/claude.js +47 -0
  57. package/dist/lib/importers/claude.js.map +1 -0
  58. package/dist/lib/importers/gemini.js +38 -0
  59. package/dist/lib/importers/gemini.js.map +1 -0
  60. package/dist/lib/importers/markdown.js +47 -0
  61. package/dist/lib/importers/markdown.js.map +1 -0
  62. package/dist/lib/importers/obsidian.js +62 -0
  63. package/dist/lib/importers/obsidian.js.map +1 -0
  64. package/dist/lib/importers/run.js +51 -0
  65. package/dist/lib/importers/run.js.map +1 -0
  66. package/dist/lib/ingest.js +101 -0
  67. package/dist/lib/ingest.js.map +1 -0
  68. package/dist/lib/mcp-client.js +56 -0
  69. package/dist/lib/mcp-client.js.map +1 -0
  70. package/dist/lib/project-resolver.js +42 -0
  71. package/dist/lib/project-resolver.js.map +1 -0
  72. package/dist/lib/remote-url.js +23 -0
  73. package/dist/lib/remote-url.js.map +1 -0
  74. package/dist/lib/repo-bindings.js +52 -0
  75. package/dist/lib/repo-bindings.js.map +1 -0
  76. package/dist/lib/repo.js +72 -0
  77. package/dist/lib/repo.js.map +1 -0
  78. package/dist/lib/room-detector.js +99 -0
  79. package/dist/lib/room-detector.js.map +1 -0
  80. package/dist/lib/slugify.js +17 -0
  81. package/dist/lib/slugify.js.map +1 -0
  82. package/dist/lib/supabase-client.js +35 -0
  83. package/dist/lib/supabase-client.js.map +1 -0
  84. package/dist/lib/tool-vocab.js +114 -0
  85. package/dist/lib/tool-vocab.js.map +1 -0
  86. package/dist/lib/transcript.js +68 -0
  87. package/dist/lib/transcript.js.map +1 -0
  88. package/dist/lib/walker.js +81 -0
  89. package/dist/lib/walker.js.map +1 -0
  90. package/package.json +47 -0
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ // Plan 5 Task 10: `axgram members` subcommands.
3
+ //
4
+ // ls, promote, demote, remove, leave. Email-or-id input resolution; the
5
+ // last-member self-leave routes the user to the explicit `axgram teams
6
+ // delete` flow rather than auto-chaining the destructive op.
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.membersLs = membersLs;
12
+ exports.membersPromote = membersPromote;
13
+ exports.membersDemote = membersDemote;
14
+ exports.membersRemove = membersRemove;
15
+ exports.membersLeave = membersLeave;
16
+ const node_readline_1 = __importDefault(require("node:readline"));
17
+ const supabase_client_1 = require("../lib/supabase-client");
18
+ const defaultLog = (m) => process.stdout.write(`${m}\n`);
19
+ const defaultErr = (m) => process.stderr.write(`${m}\n`);
20
+ const isUuid = (s) => /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(s);
21
+ async function buildSupabase(deps) {
22
+ return deps.supabaseFactory ? deps.supabaseFactory() : (0, supabase_client_1.authenticatedSupabase)();
23
+ }
24
+ async function callerId(deps, s) {
25
+ if (deps.callerUserId)
26
+ return deps.callerUserId;
27
+ const { data } = await s.auth.getUser();
28
+ return data.user?.id ?? null;
29
+ }
30
+ async function resolveTeamId(s, idOrName) {
31
+ const q = s.from("teams").select("id");
32
+ const { data } = isUuid(idOrName)
33
+ ? await q.eq("id", idOrName).maybeSingle()
34
+ : await q.eq("name", idOrName).maybeSingle();
35
+ return data?.id ?? null;
36
+ }
37
+ async function resolveMemberByEmailOrId(s, teamId, emailOrId) {
38
+ const q = s
39
+ .from("team_members_v")
40
+ .select("user_id, email, role")
41
+ .eq("team_id", teamId);
42
+ const matches = isUuid(emailOrId)
43
+ ? await q.eq("user_id", emailOrId)
44
+ : await q.eq("email", emailOrId);
45
+ if (matches.error) {
46
+ throw new Error(`Failed to resolve member: ${matches.error.message}`);
47
+ }
48
+ if ((matches.data ?? []).length === 0)
49
+ return null;
50
+ if ((matches.data ?? []).length > 1) {
51
+ throw new Error(`Ambiguous match for "${emailOrId}" — pass the user_id explicitly.`);
52
+ }
53
+ return matches.data[0];
54
+ }
55
+ async function confirmDestructiveAction(msg, options, deps) {
56
+ if (options.yes)
57
+ return true;
58
+ const tty = deps.isTTY ?? !!process.stdin.isTTY;
59
+ if (!tty && !deps.prompt)
60
+ return false;
61
+ const ask = deps.prompt ??
62
+ ((q) => {
63
+ const rl = node_readline_1.default.createInterface({ input: process.stdin, output: process.stdout });
64
+ return new Promise((res) => {
65
+ rl.question(q, (a) => {
66
+ rl.close();
67
+ res(a.trim());
68
+ });
69
+ });
70
+ });
71
+ const a = await ask(`${msg} [y/N] `);
72
+ return a.toLowerCase() === "y" || a.toLowerCase() === "yes";
73
+ }
74
+ async function membersLs(teamFlag, deps = {}) {
75
+ const log = deps.log ?? defaultLog;
76
+ const errOut = deps.err ?? defaultErr;
77
+ const s = await buildSupabase(deps);
78
+ let q = s
79
+ .from("team_members_v")
80
+ .select("team_id, user_id, email, role, joined_at")
81
+ .order("joined_at", { ascending: true });
82
+ if (teamFlag) {
83
+ const tid = await resolveTeamId(s, teamFlag);
84
+ if (!tid) {
85
+ errOut(`No team found matching "${teamFlag}".`);
86
+ return 1;
87
+ }
88
+ q = q.eq("team_id", tid);
89
+ }
90
+ const { data, error } = await q;
91
+ if (error) {
92
+ errOut(`Failed to list members: ${error.message}`);
93
+ return 1;
94
+ }
95
+ if (!data || data.length === 0) {
96
+ log("No members visible.");
97
+ return 0;
98
+ }
99
+ for (const m of data) {
100
+ log(`${m.user_id} [${m.role}] ${m.email} (team ${m.team_id})`);
101
+ }
102
+ return 0;
103
+ }
104
+ async function changeRole(s, teamId, userId, newRole) {
105
+ const { data, error } = await s.rpc("change_member_role", {
106
+ p_team_id: teamId,
107
+ p_user_id: userId,
108
+ p_new_role: newRole,
109
+ });
110
+ if (error)
111
+ throw error;
112
+ return data[0];
113
+ }
114
+ async function membersPromote(emailOrId, options, deps = {}) {
115
+ const log = deps.log ?? defaultLog;
116
+ const errOut = deps.err ?? defaultErr;
117
+ const s = await buildSupabase(deps);
118
+ if (!options.team) {
119
+ errOut("--team <id-or-name> is required.");
120
+ return 1;
121
+ }
122
+ const tid = await resolveTeamId(s, options.team);
123
+ if (!tid) {
124
+ errOut(`No team found matching "${options.team}".`);
125
+ return 1;
126
+ }
127
+ const target = await resolveMemberByEmailOrId(s, tid, emailOrId);
128
+ if (!target) {
129
+ errOut(`No member found matching "${emailOrId}".`);
130
+ return 1;
131
+ }
132
+ const newRole = target.role === "member" ? "admin" : "owner";
133
+ const r = await changeRole(s, tid, target.user_id, newRole);
134
+ if (!r.ok) {
135
+ errOut(`Promotion blocked: ${r.message ?? r.code}`);
136
+ return 1;
137
+ }
138
+ log(`Promoted ${target.email} → ${newRole}.`);
139
+ return 0;
140
+ }
141
+ async function membersDemote(emailOrId, options, deps = {}) {
142
+ const log = deps.log ?? defaultLog;
143
+ const errOut = deps.err ?? defaultErr;
144
+ const s = await buildSupabase(deps);
145
+ if (!options.team) {
146
+ errOut("--team <id-or-name> is required.");
147
+ return 1;
148
+ }
149
+ const tid = await resolveTeamId(s, options.team);
150
+ if (!tid) {
151
+ errOut(`No team found matching "${options.team}".`);
152
+ return 1;
153
+ }
154
+ const target = await resolveMemberByEmailOrId(s, tid, emailOrId);
155
+ if (!target) {
156
+ errOut(`No member found matching "${emailOrId}".`);
157
+ return 1;
158
+ }
159
+ const newRole = target.role === "owner" ? "admin" : "member";
160
+ const r = await changeRole(s, tid, target.user_id, newRole);
161
+ if (!r.ok) {
162
+ if (r.code === "last_owner") {
163
+ errOut("Cannot demote the only owner. Promote another member first, or use `axgram teams delete` to remove the team.");
164
+ return 1;
165
+ }
166
+ errOut(`Demotion blocked: ${r.message ?? r.code}`);
167
+ return 1;
168
+ }
169
+ log(`Demoted ${target.email} → ${newRole}.`);
170
+ return 0;
171
+ }
172
+ async function membersRemove(emailOrId, options, deps = {}) {
173
+ const log = deps.log ?? defaultLog;
174
+ const errOut = deps.err ?? defaultErr;
175
+ const s = await buildSupabase(deps);
176
+ if (!options.team) {
177
+ errOut("--team <id-or-name> is required.");
178
+ return 1;
179
+ }
180
+ const tid = await resolveTeamId(s, options.team);
181
+ if (!tid) {
182
+ errOut(`No team found matching "${options.team}".`);
183
+ return 1;
184
+ }
185
+ const target = await resolveMemberByEmailOrId(s, tid, emailOrId);
186
+ if (!target) {
187
+ errOut(`No member found matching "${emailOrId}".`);
188
+ return 1;
189
+ }
190
+ const me = await callerId(deps, s);
191
+ const isSelf = me === target.user_id;
192
+ const action = isSelf ? "leave this team" : `remove ${target.email} from this team`;
193
+ const ok = await confirmDestructiveAction(`Confirm: ${action}?`, options, deps);
194
+ if (!ok) {
195
+ errOut("Aborted.");
196
+ return 1;
197
+ }
198
+ const { data, error } = await s.rpc("remove_member", {
199
+ p_team_id: tid,
200
+ p_user_id: target.user_id,
201
+ });
202
+ if (error) {
203
+ errOut(`Failed to remove member: ${error.message}`);
204
+ return 1;
205
+ }
206
+ const row = data[0];
207
+ if (!row.ok && row.code === "last_member_redirect_to_delete") {
208
+ log("");
209
+ log(`You're the only member of "${row.redirect_team_name}".`);
210
+ log("Leaving would orphan the team — delete it instead?");
211
+ log("");
212
+ log(`Run: axgram teams delete ${row.redirect_team_id}`);
213
+ return 1;
214
+ }
215
+ if (!row.ok && row.code === "last_owner") {
216
+ errOut(`Cannot remove the only owner. Promote another member first.`);
217
+ return 1;
218
+ }
219
+ log(isSelf ? "You have left the team." : `Removed ${target.email}.`);
220
+ return 0;
221
+ }
222
+ async function membersLeave(options, deps = {}) {
223
+ const s = await buildSupabase(deps);
224
+ const me = await callerId(deps, s);
225
+ if (!me) {
226
+ (deps.err ?? defaultErr)("Not logged in. Run `axgram login`.");
227
+ return 1;
228
+ }
229
+ return membersRemove(me, options, { ...deps, supabaseFactory: async () => s });
230
+ }
231
+ //# sourceMappingURL=members.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/commands/members.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mineCommand = mineCommand;
4
+ const promises_1 = require("node:fs/promises");
5
+ const node_path_1 = require("node:path");
6
+ const index_1 = require("../lib/chunkers/index");
7
+ const entity_extractor_1 = require("../lib/entity-extractor");
8
+ const ingest_1 = require("../lib/ingest");
9
+ const mcp_client_1 = require("../lib/mcp-client");
10
+ const project_resolver_1 = require("../lib/project-resolver");
11
+ const remote_url_1 = require("../lib/remote-url");
12
+ const room_detector_1 = require("../lib/room-detector");
13
+ const walker_1 = require("../lib/walker");
14
+ const DEFAULT_WORKER_URL = (0, remote_url_1.resolveRemoteUrl)();
15
+ async function mineCommand(opts, deps = {}) {
16
+ const log = deps.log ?? ((m) => process.stdout.write(`${m}\n`));
17
+ const err = deps.err ?? ((m) => process.stderr.write(`${m}\n`));
18
+ const resolved = await (0, project_resolver_1.resolveActiveProject)({ flag: opts.project });
19
+ if (!resolved.projectId) {
20
+ err(resolved.repoKey
21
+ ? `No project bound to ${resolved.repoKey}. Run \`axgram projects link\` to bind one.`
22
+ : "No active project. Pass --project, set AXGRAM_PROJECT_ID, or run `axgram projects use <id>`.");
23
+ return 1;
24
+ }
25
+ const projectId = resolved.projectId;
26
+ const absPath = (0, node_path_1.resolve)(opts.path);
27
+ const wing = opts.wing ?? (0, node_path_1.basename)(absPath);
28
+ if (!wing || wing === ".") {
29
+ err("Could not infer wing name from path. Pass --wing explicitly.");
30
+ return 1;
31
+ }
32
+ log(`Mining ${absPath} → project ${projectId} (wing="${wing}", source=${resolved.source})`);
33
+ const items = [];
34
+ let filesSeen = 0;
35
+ for await (const file of (0, walker_1.walk)(absPath)) {
36
+ filesSeen++;
37
+ let content;
38
+ try {
39
+ content = await (0, promises_1.readFile)(file.path, "utf8");
40
+ }
41
+ catch (e) {
42
+ err(`Skipping ${file.relativePath}: ${e.message}`);
43
+ continue;
44
+ }
45
+ if (content.trim().length === 0)
46
+ continue;
47
+ const { chunks } = (0, index_1.chunk)(file.path, content);
48
+ for (const c of chunks) {
49
+ const room = opts.room ?? (0, room_detector_1.detectRoom)(c.content);
50
+ const entities = opts.noKg ? undefined : (0, entity_extractor_1.extractEntities)(c.content);
51
+ items.push({
52
+ wing,
53
+ room,
54
+ content: c.content,
55
+ ...(file.relativePath ? { source_file: file.relativePath } : {}),
56
+ ...(opts.importance !== undefined ? { importance: opts.importance } : {}),
57
+ ...(entities ? { entities } : {}),
58
+ });
59
+ }
60
+ }
61
+ if (items.length === 0) {
62
+ log("No mineable content found.");
63
+ return 0;
64
+ }
65
+ log(`Walked ${filesSeen} files → ${items.length} chunks.`);
66
+ const factory = deps.mcpClientFactory ?? mcp_client_1.authenticatedMcpClient;
67
+ const client = await factory(opts.workerUrl ?? DEFAULT_WORKER_URL);
68
+ let summary;
69
+ try {
70
+ summary = await (0, ingest_1.ingestDrawers)(client, projectId, items, { log, err });
71
+ }
72
+ finally {
73
+ await client.close();
74
+ }
75
+ log((0, ingest_1.formatSummary)(summary));
76
+ return summary.failed > 0 ? 1 : 0;
77
+ }
78
+ //# sourceMappingURL=mine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mine.js","sourceRoot":"","sources":["../../src/commands/mine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ // Plan 5 Task 9: `axgram orgs` subcommands.
3
+ //
4
+ // ls, create, rename, delete (type-to-confirm). Built on the Plan 5
5
+ // Task 2 RPCs through the user-scoped supabase client.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.orgsLs = orgsLs;
8
+ exports.orgsCreate = orgsCreate;
9
+ exports.orgsRename = orgsRename;
10
+ exports.orgsDelete = orgsDelete;
11
+ const supabase_client_1 = require("../lib/supabase-client");
12
+ const destructive_confirm_1 = require("../lib/destructive-confirm");
13
+ const defaultLog = (m) => process.stdout.write(`${m}\n`);
14
+ const defaultErr = (m) => process.stderr.write(`${m}\n`);
15
+ async function buildSupabase(deps) {
16
+ return deps.supabaseFactory ? deps.supabaseFactory() : (0, supabase_client_1.authenticatedSupabase)();
17
+ }
18
+ async function fetchOrgs(s) {
19
+ const { data, error } = await s
20
+ .from("orgs")
21
+ .select(`id, name,
22
+ teams!inner ( id, name,
23
+ memberships!inner ( role )
24
+ )`)
25
+ .order("name");
26
+ if (error)
27
+ throw new Error(`Failed to list orgs: ${error.message}`);
28
+ return (data ?? []).map((o) => {
29
+ const def = (o.teams ?? []).find((t) => t.name === "default") ?? o.teams?.[0];
30
+ return {
31
+ id: o.id,
32
+ name: o.name,
33
+ default_team_id: def?.id ?? null,
34
+ role: def?.memberships?.[0]?.role ?? null,
35
+ };
36
+ });
37
+ }
38
+ async function resolveOrg(s, idOrName) {
39
+ // UUID → direct lookup; else match by name (case-sensitive).
40
+ const isUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(idOrName);
41
+ const q = s.from("orgs").select("id, name");
42
+ const { data, error } = isUuid
43
+ ? await q.eq("id", idOrName).maybeSingle()
44
+ : await q.eq("name", idOrName).maybeSingle();
45
+ if (error)
46
+ throw new Error(`Failed to resolve org: ${error.message}`);
47
+ if (!data)
48
+ return null;
49
+ return { id: data.id, name: data.name };
50
+ }
51
+ async function orgsLs(deps = {}) {
52
+ const log = deps.log ?? defaultLog;
53
+ const s = await buildSupabase(deps);
54
+ const orgs = await fetchOrgs(s);
55
+ if (orgs.length === 0) {
56
+ log("No orgs accessible. Run `axgram orgs create <name>`.");
57
+ return 0;
58
+ }
59
+ for (const o of orgs) {
60
+ const role = o.role ? `[${o.role}]` : "[—]";
61
+ log(`${o.id} ${role} ${o.name}`);
62
+ }
63
+ return 0;
64
+ }
65
+ async function orgsCreate(name, deps = {}) {
66
+ const log = deps.log ?? defaultLog;
67
+ const errOut = deps.err ?? defaultErr;
68
+ const s = await buildSupabase(deps);
69
+ const { data, error } = await s.rpc("create_org", { p_name: name });
70
+ if (error) {
71
+ if (error.message?.toLowerCase().includes("license")) {
72
+ errOut(`License gate denied org creation: ${error.message}`);
73
+ return 1;
74
+ }
75
+ errOut(`Failed to create org: ${error.message}`);
76
+ return 1;
77
+ }
78
+ const row = data[0];
79
+ log(`Created org "${row.name}" (${row.org_id}).`);
80
+ return 0;
81
+ }
82
+ async function orgsRename(orgIdOrName, newName, deps = {}) {
83
+ const log = deps.log ?? defaultLog;
84
+ const errOut = deps.err ?? defaultErr;
85
+ const s = await buildSupabase(deps);
86
+ const target = await resolveOrg(s, orgIdOrName);
87
+ if (!target) {
88
+ errOut(`No org found matching "${orgIdOrName}".`);
89
+ return 1;
90
+ }
91
+ const { error } = await s.rpc("rename_org", {
92
+ p_org_id: target.id,
93
+ p_new_name: newName,
94
+ });
95
+ if (error) {
96
+ errOut(`Failed to rename org: ${error.message}`);
97
+ return 1;
98
+ }
99
+ log(`Renamed org "${target.name}" → "${newName}".`);
100
+ return 0;
101
+ }
102
+ async function orgsDelete(orgIdOrName, options, deps = {}) {
103
+ const log = deps.log ?? defaultLog;
104
+ const errOut = deps.err ?? defaultErr;
105
+ const s = await buildSupabase(deps);
106
+ const target = await resolveOrg(s, orgIdOrName);
107
+ if (!target) {
108
+ errOut(`No org found matching "${orgIdOrName}".`);
109
+ return 1;
110
+ }
111
+ const { data: counts, error: ce } = await s.rpc("count_org_descendants", {
112
+ p_org_id: target.id,
113
+ });
114
+ if (ce) {
115
+ errOut(`Failed to preview delete: ${ce.message}`);
116
+ return 1;
117
+ }
118
+ const c = counts[0] ?? {};
119
+ const confirmed = await (0, destructive_confirm_1.confirmDestructive)({
120
+ targetKind: "org",
121
+ targetName: target.name,
122
+ counts: {
123
+ teams: c.teams ?? 0,
124
+ projects: c.projects ?? 0,
125
+ drawers: c.drawers ?? 0,
126
+ invitations: c.invitations ?? 0,
127
+ },
128
+ }, options, {
129
+ ...(deps.log ? { log: deps.log } : {}),
130
+ ...(deps.err ? { err: deps.err } : {}),
131
+ ...(deps.prompt ? { prompt: deps.prompt } : {}),
132
+ ...(deps.isTTY !== undefined ? { isTTY: deps.isTTY } : {}),
133
+ });
134
+ if (!confirmed)
135
+ return 1;
136
+ const { data, error } = await s.rpc("delete_org", {
137
+ p_org_id: target.id,
138
+ p_confirm_name: confirmed,
139
+ });
140
+ if (error) {
141
+ errOut(`Failed to delete org: ${error.message}`);
142
+ return 1;
143
+ }
144
+ const result = data[0];
145
+ if (!result.ok && result.code === "name_confirmation_mismatch") {
146
+ errOut("Server rejected confirmation (org may have been renamed). Aborted.");
147
+ return 1;
148
+ }
149
+ log(`Deleted org "${target.name}". ` +
150
+ `Removed ${JSON.stringify(result.deleted_counts)}.`);
151
+ return 0;
152
+ }
153
+ //# sourceMappingURL=orgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../src/commands/orgs.ts"],"names":[],"mappings":"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"}