@kernel.chat/kbot 3.54.0 → 3.56.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.
@@ -0,0 +1,2 @@
1
+ export declare function registerAdminTools(): number;
2
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/tools/admin.ts"],"names":[],"mappings":"AAmEA,wBAAgB,kBAAkB,IAAI,MAAM,CAyU3C"}
@@ -0,0 +1,422 @@
1
+ // kbot Admin Tools — Manage users, billing, moderation from the terminal
2
+ //
3
+ // Commands:
4
+ // admin_users — List/search users
5
+ // admin_user_detail — Get detailed user info
6
+ // admin_stats — Platform stats (users, revenue, usage)
7
+ // admin_billing — Manage subscriptions, create invoices
8
+ // admin_moderate — Moderation queue management
9
+ // admin_scores — Client scoring/health
10
+ import { execSync } from 'node:child_process';
11
+ import { registerTool } from './index.js';
12
+ // ── Helpers ──────────────────────────────────────────────────────────
13
+ function supabaseRpc(fnName, body = {}) {
14
+ const url = process.env.SUPABASE_URL || process.env.VITE_SUPABASE_URL;
15
+ const key = process.env.SUPABASE_SERVICE_KEY || process.env.SUPABASE_SERVICE_ROLE_KEY;
16
+ if (!url || !key)
17
+ throw new Error('Missing SUPABASE_URL or SUPABASE_SERVICE_KEY — run: kbot env check');
18
+ const res = execSync(`curl -sS -X POST "${url}/rest/v1/rpc/${fnName}" \
19
+ -H "apikey: ${key}" \
20
+ -H "Authorization: Bearer ${key}" \
21
+ -H "Content-Type: application/json" \
22
+ -d '${JSON.stringify(body)}'`, {
23
+ encoding: 'utf-8',
24
+ timeout: 30_000,
25
+ }).trim();
26
+ return res;
27
+ }
28
+ function supabaseQuery(table, query) {
29
+ const url = process.env.SUPABASE_URL || process.env.VITE_SUPABASE_URL;
30
+ const key = process.env.SUPABASE_SERVICE_KEY || process.env.SUPABASE_SERVICE_ROLE_KEY;
31
+ if (!url || !key)
32
+ throw new Error('Missing SUPABASE_URL or SUPABASE_SERVICE_KEY — run: kbot env check');
33
+ const res = execSync(`curl -sS "${url}/rest/v1/${table}?${query}" \
34
+ -H "apikey: ${key}" \
35
+ -H "Authorization: Bearer ${key}" \
36
+ -H "Content-Type: application/json"`, {
37
+ encoding: 'utf-8',
38
+ timeout: 30_000,
39
+ }).trim();
40
+ return res;
41
+ }
42
+ function stripeCmd(args) {
43
+ try {
44
+ return execSync(`stripe ${args}`, { encoding: 'utf-8', timeout: 30_000 }).trim();
45
+ }
46
+ catch (e) {
47
+ throw new Error(`Stripe CLI failed: ${e.message}. Install: brew install stripe/stripe-cli/stripe`);
48
+ }
49
+ }
50
+ function formatTable(rows, columns) {
51
+ if (!rows.length)
52
+ return '(no results)';
53
+ const widths = columns.map(col => Math.max(col.length, ...rows.map(r => String(r[col] ?? '').length)));
54
+ const header = columns.map((col, i) => col.padEnd(widths[i])).join(' ');
55
+ const sep = widths.map(w => '─'.repeat(w)).join('──');
56
+ const body = rows.map(row => columns.map((col, i) => String(row[col] ?? '').padEnd(widths[i])).join(' ')).join('\n');
57
+ return `${header}\n${sep}\n${body}`;
58
+ }
59
+ // ── Tools ────────────────────────────────────────────────────────────
60
+ export function registerAdminTools() {
61
+ let count = 0;
62
+ registerTool({
63
+ name: 'admin_users',
64
+ description: 'List platform users with stats. Filter by plan, status, or search by email.',
65
+ parameters: {
66
+ filter: { type: 'string', description: 'Filter: "all", "free", "pro", "max", "active", "churned"', default: 'all' },
67
+ search: { type: 'string', description: 'Search by email (partial match)' },
68
+ limit: { type: 'string', description: 'Max results (default: 50)', default: '50' },
69
+ },
70
+ tier: 'enterprise',
71
+ execute: async (args) => {
72
+ const filter = String(args.filter || 'all');
73
+ const search = args.search ? String(args.search) : '';
74
+ const limit = parseInt(String(args.limit || '50'));
75
+ let query = `select=id,email,created_at,last_sign_in_at&order=created_at.desc&limit=${limit}`;
76
+ if (search)
77
+ query += `&email=ilike.*${search}*`;
78
+ const usersRaw = supabaseQuery('users_view', query);
79
+ let users;
80
+ try {
81
+ users = JSON.parse(usersRaw);
82
+ }
83
+ catch {
84
+ return `Error parsing users: ${usersRaw}`;
85
+ }
86
+ // Get subscription data
87
+ const subsRaw = supabaseQuery('subscriptions', 'select=user_id,status,plan&status=in.(active,trialing)');
88
+ let subs;
89
+ try {
90
+ subs = JSON.parse(subsRaw);
91
+ }
92
+ catch {
93
+ subs = [];
94
+ }
95
+ const subMap = new Map(subs.map((s) => [s.user_id, s]));
96
+ // Enrich users with plan info
97
+ const enriched = users.map((u) => {
98
+ const sub = subMap.get(u.id);
99
+ return {
100
+ email: u.email,
101
+ plan: sub?.plan || 'free',
102
+ status: sub?.status || 'free',
103
+ created: String(u.created_at || '').slice(0, 10),
104
+ last_active: String(u.last_sign_in_at || '').slice(0, 10),
105
+ };
106
+ });
107
+ // Apply plan filter
108
+ const filtered = filter === 'all' ? enriched
109
+ : enriched.filter(u => {
110
+ if (filter === 'free')
111
+ return u.plan === 'free';
112
+ if (filter === 'pro')
113
+ return String(u.plan).startsWith('pro');
114
+ if (filter === 'max')
115
+ return String(u.plan).startsWith('max');
116
+ if (filter === 'active')
117
+ return u.last_active >= new Date(Date.now() - 7 * 86400000).toISOString().slice(0, 10);
118
+ if (filter === 'churned')
119
+ return u.status === 'canceled';
120
+ return true;
121
+ });
122
+ return `Users (${filtered.length}/${users.length} total, filter: ${filter}):\n\n` +
123
+ formatTable(filtered, ['email', 'plan', 'status', 'created', 'last_active']);
124
+ },
125
+ });
126
+ count++;
127
+ registerTool({
128
+ name: 'admin_user_detail',
129
+ description: 'Get detailed info for a specific user — subscription, usage, message counts, files.',
130
+ parameters: {
131
+ email: { type: 'string', description: 'User email address', required: true },
132
+ },
133
+ tier: 'enterprise',
134
+ execute: async (args) => {
135
+ const email = String(args.email);
136
+ // Get user
137
+ const userRaw = supabaseQuery('users_view', `select=*&email=eq.${encodeURIComponent(email)}&limit=1`);
138
+ let users;
139
+ try {
140
+ users = JSON.parse(userRaw);
141
+ }
142
+ catch {
143
+ return `Error: ${userRaw}`;
144
+ }
145
+ if (!users.length)
146
+ return `User not found: ${email}`;
147
+ const user = users[0];
148
+ // Get subscription
149
+ const subRaw = supabaseQuery('subscriptions', `select=*&user_id=eq.${user.id}&order=created_at.desc&limit=1`);
150
+ let sub = {};
151
+ try {
152
+ const subs = JSON.parse(subRaw);
153
+ sub = subs[0] || {};
154
+ }
155
+ catch { /* no sub */ }
156
+ // Get usage
157
+ const memRaw = supabaseQuery('user_memory', `select=daily_message_count,monthly_message_count,monthly_file_count,monthly_et_count&user_id=eq.${user.id}&limit=1`);
158
+ let mem = {};
159
+ try {
160
+ const mems = JSON.parse(memRaw);
161
+ mem = mems[0] || {};
162
+ }
163
+ catch { /* no mem */ }
164
+ return [
165
+ `── User Detail ──`,
166
+ `Email: ${user.email}`,
167
+ `ID: ${user.id}`,
168
+ `Created: ${String(user.created_at || '').slice(0, 19)}`,
169
+ `Last sign-in: ${String(user.last_sign_in_at || '').slice(0, 19)}`,
170
+ `Provider: ${user.raw_app_meta_data ? user.raw_app_meta_data.provider : 'unknown'}`,
171
+ ``,
172
+ `── Subscription ──`,
173
+ `Plan: ${sub.plan || 'free'}`,
174
+ `Status: ${sub.status || 'none'}`,
175
+ `Stripe ID: ${sub.stripe_customer_id || 'none'}`,
176
+ `Period end: ${sub.current_period_end || 'n/a'}`,
177
+ ``,
178
+ `── Usage (current period) ──`,
179
+ `Messages today: ${mem.daily_message_count ?? 0}`,
180
+ `Messages month: ${mem.monthly_message_count ?? 0}`,
181
+ `Files month: ${mem.monthly_file_count ?? 0}`,
182
+ `ET uses month: ${mem.monthly_et_count ?? 0}`,
183
+ ].join('\n');
184
+ },
185
+ });
186
+ count++;
187
+ registerTool({
188
+ name: 'admin_stats',
189
+ description: 'Platform-wide stats: total users, active users, subscribers, MRR, daily messages, error rate.',
190
+ parameters: {},
191
+ tier: 'enterprise',
192
+ execute: async () => {
193
+ // Total users
194
+ const usersRaw = supabaseQuery('users_view', 'select=id&limit=0&head=true');
195
+ // Count via content-range header workaround — use RPC
196
+ const countRaw = supabaseRpc('admin_platform_stats');
197
+ let stats;
198
+ try {
199
+ stats = JSON.parse(countRaw);
200
+ }
201
+ catch {
202
+ // Fallback: manual queries
203
+ const allUsers = supabaseQuery('users_view', 'select=id');
204
+ const allSubs = supabaseQuery('subscriptions', 'select=id,plan&status=in.(active,trialing)');
205
+ let userCount = 0, subCount = 0;
206
+ try {
207
+ userCount = JSON.parse(allUsers).length;
208
+ }
209
+ catch { /* */ }
210
+ try {
211
+ subCount = JSON.parse(allSubs).length;
212
+ }
213
+ catch { /* */ }
214
+ stats = {
215
+ total_users: userCount,
216
+ active_subscribers: subCount,
217
+ };
218
+ }
219
+ // npm stats
220
+ let npmWeekly = 'unknown';
221
+ try {
222
+ const npm = execSync('curl -sS "https://api.npmjs.org/downloads/point/last-week/@kernel.chat/kbot"', {
223
+ encoding: 'utf-8', timeout: 10_000,
224
+ });
225
+ const d = JSON.parse(npm);
226
+ npmWeekly = String(d.downloads);
227
+ }
228
+ catch { /* */ }
229
+ // GitHub stats
230
+ let ghStars = 'unknown';
231
+ try {
232
+ const gh = execSync('gh api repos/isaacsight/kernel --jq ".stargazers_count"', {
233
+ encoding: 'utf-8', timeout: 10_000,
234
+ });
235
+ ghStars = gh.trim();
236
+ }
237
+ catch { /* */ }
238
+ return [
239
+ `── Platform Stats ──`,
240
+ `Total users: ${stats.total_users ?? 'query failed'}`,
241
+ `Active subscribers: ${stats.active_subscribers ?? 'unknown'}`,
242
+ `MRR: ${stats.mrr ? `$${stats.mrr}` : 'check Stripe dashboard'}`,
243
+ ``,
244
+ `── Distribution ──`,
245
+ `npm downloads/week: ${npmWeekly}`,
246
+ `GitHub stars: ${ghStars}`,
247
+ ``,
248
+ `── Usage (today) ──`,
249
+ `Messages today: ${stats.messages_today ?? 'check logs'}`,
250
+ `Error rate: ${stats.error_rate ?? 'check logs'}`,
251
+ `Active today: ${stats.active_today ?? 'check logs'}`,
252
+ ].join('\n');
253
+ },
254
+ });
255
+ count++;
256
+ registerTool({
257
+ name: 'admin_billing',
258
+ description: 'Manage billing: list invoices, create invoice, change subscription, view MRR. Uses Stripe CLI.',
259
+ parameters: {
260
+ action: { type: 'string', description: 'Action: "invoices", "create-invoice", "change-plan", "mrr", "customer"', required: true },
261
+ email: { type: 'string', description: 'Customer email (for customer-specific actions)' },
262
+ plan: { type: 'string', description: 'Plan ID (for change-plan)' },
263
+ amount: { type: 'string', description: 'Amount in cents (for create-invoice)' },
264
+ description: { type: 'string', description: 'Invoice description' },
265
+ },
266
+ tier: 'enterprise',
267
+ execute: async (args) => {
268
+ const action = String(args.action);
269
+ switch (action) {
270
+ case 'mrr': {
271
+ const out = stripeCmd('mrr');
272
+ return `── Monthly Recurring Revenue ──\n${out}`;
273
+ }
274
+ case 'invoices': {
275
+ const email = args.email ? String(args.email) : '';
276
+ const filter = email ? `--customer-email "${email}"` : '';
277
+ const out = stripeCmd(`invoices list ${filter} --limit 20`);
278
+ return `── Recent Invoices ──\n${out}`;
279
+ }
280
+ case 'customer': {
281
+ const email = String(args.email || '');
282
+ if (!email)
283
+ return 'Error: email required for customer lookup';
284
+ const out = stripeCmd(`customers list --email "${email}" --limit 1`);
285
+ return `── Customer ──\n${out}`;
286
+ }
287
+ case 'create-invoice': {
288
+ const email = String(args.email || '');
289
+ const amount = String(args.amount || '0');
290
+ const desc = String(args.description || 'Custom invoice');
291
+ if (!email)
292
+ return 'Error: email required';
293
+ // Look up customer
294
+ const custRaw = stripeCmd(`customers list --email "${email}" --limit 1 -o json`);
295
+ let custId = '';
296
+ try {
297
+ const custs = JSON.parse(custRaw);
298
+ custId = custs.data?.[0]?.id;
299
+ }
300
+ catch {
301
+ return 'Error: could not find Stripe customer';
302
+ }
303
+ if (!custId)
304
+ return `No Stripe customer found for ${email}`;
305
+ const out = stripeCmd(`invoices create --customer "${custId}" --auto-advance --description "${desc}"`);
306
+ return `Invoice created:\n${out}`;
307
+ }
308
+ case 'change-plan': {
309
+ return 'Plan changes require the web dashboard for safety. Use: kbot admin billing customer --email <email> to get the customer ID, then manage in Stripe dashboard.';
310
+ }
311
+ default:
312
+ return `Unknown action: ${action}. Options: mrr, invoices, customer, create-invoice, change-plan`;
313
+ }
314
+ },
315
+ });
316
+ count++;
317
+ registerTool({
318
+ name: 'admin_moderate',
319
+ description: 'View and manage the moderation queue — flagged content, user reports, pending reviews.',
320
+ parameters: {
321
+ action: { type: 'string', description: 'Action: "queue", "approve", "reject", "flag-user"', default: 'queue' },
322
+ item_id: { type: 'string', description: 'Item ID (for approve/reject)' },
323
+ user_id: { type: 'string', description: 'User ID (for flag-user)' },
324
+ reason: { type: 'string', description: 'Reason (for reject/flag)' },
325
+ },
326
+ tier: 'enterprise',
327
+ execute: async (args) => {
328
+ const action = String(args.action || 'queue');
329
+ switch (action) {
330
+ case 'queue': {
331
+ const raw = supabaseQuery('moderation_queue', 'select=id,user_id,type,status,created_at&status=eq.pending&order=created_at.desc&limit=20');
332
+ let items;
333
+ try {
334
+ items = JSON.parse(raw);
335
+ }
336
+ catch {
337
+ return `No moderation queue table found. Create one with: kbot db migrate`;
338
+ }
339
+ if (!items.length)
340
+ return 'Moderation queue is empty — nothing to review.';
341
+ return `── Moderation Queue (${items.length} pending) ──\n\n` +
342
+ formatTable(items, ['id', 'user_id', 'type', 'status', 'created_at']);
343
+ }
344
+ case 'approve': {
345
+ const id = String(args.item_id || '');
346
+ if (!id)
347
+ return 'Error: item_id required';
348
+ const url = process.env.SUPABASE_URL || process.env.VITE_SUPABASE_URL;
349
+ const key = process.env.SUPABASE_SERVICE_KEY || process.env.SUPABASE_SERVICE_ROLE_KEY;
350
+ execSync(`curl -sS -X PATCH "${url}/rest/v1/moderation_queue?id=eq.${id}" \
351
+ -H "apikey: ${key}" \
352
+ -H "Authorization: Bearer ${key}" \
353
+ -H "Content-Type: application/json" \
354
+ -d '{"status":"approved","resolved_at":"${new Date().toISOString()}"}'`, {
355
+ encoding: 'utf-8', timeout: 10_000,
356
+ });
357
+ return `Approved item ${id}`;
358
+ }
359
+ case 'reject': {
360
+ const id = String(args.item_id || '');
361
+ const reason = String(args.reason || 'rejected by admin');
362
+ if (!id)
363
+ return 'Error: item_id required';
364
+ const url = process.env.SUPABASE_URL || process.env.VITE_SUPABASE_URL;
365
+ const key = process.env.SUPABASE_SERVICE_KEY || process.env.SUPABASE_SERVICE_ROLE_KEY;
366
+ execSync(`curl -sS -X PATCH "${url}/rest/v1/moderation_queue?id=eq.${id}" \
367
+ -H "apikey: ${key}" \
368
+ -H "Authorization: Bearer ${key}" \
369
+ -H "Content-Type: application/json" \
370
+ -d '{"status":"rejected","reason":"${reason}","resolved_at":"${new Date().toISOString()}"}'`, {
371
+ encoding: 'utf-8', timeout: 10_000,
372
+ });
373
+ return `Rejected item ${id}: ${reason}`;
374
+ }
375
+ default:
376
+ return `Unknown action: ${action}. Options: queue, approve, reject, flag-user`;
377
+ }
378
+ },
379
+ });
380
+ count++;
381
+ registerTool({
382
+ name: 'admin_scores',
383
+ description: 'View client engagement scores and health metrics.',
384
+ parameters: {
385
+ sort: { type: 'string', description: 'Sort by: "score", "messages", "last_active"', default: 'score' },
386
+ limit: { type: 'string', description: 'Max results', default: '20' },
387
+ },
388
+ tier: 'enterprise',
389
+ execute: async (args) => {
390
+ const limit = parseInt(String(args.limit || '20'));
391
+ const sort = String(args.sort || 'score');
392
+ const raw = supabaseQuery('user_memory', `select=user_id,daily_message_count,monthly_message_count,updated_at&order=monthly_message_count.desc&limit=${limit}`);
393
+ let rows;
394
+ try {
395
+ rows = JSON.parse(raw);
396
+ }
397
+ catch {
398
+ return `Error: ${raw}`;
399
+ }
400
+ const scored = rows.map((r) => ({
401
+ user_id: String(r.user_id || '').slice(0, 8) + '...',
402
+ msgs_today: r.daily_message_count ?? 0,
403
+ msgs_month: r.monthly_message_count ?? 0,
404
+ last_active: String(r.updated_at || '').slice(0, 10),
405
+ score: Math.min(100, Math.round((Number(r.monthly_message_count || 0) / 200) * 50 +
406
+ (Number(r.daily_message_count || 0) / 10) * 30 +
407
+ (r.updated_at && new Date(r.updated_at) > new Date(Date.now() - 86400000) ? 20 : 0))),
408
+ }));
409
+ if (sort === 'messages')
410
+ scored.sort((a, b) => Number(b.msgs_month) - Number(a.msgs_month));
411
+ else if (sort === 'last_active')
412
+ scored.sort((a, b) => b.last_active.localeCompare(a.last_active));
413
+ else
414
+ scored.sort((a, b) => b.score - a.score);
415
+ return `── Client Scores (top ${scored.length}) ──\n\n` +
416
+ formatTable(scored, ['user_id', 'score', 'msgs_today', 'msgs_month', 'last_active']);
417
+ },
418
+ });
419
+ count++;
420
+ return count;
421
+ }
422
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/tools/admin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function registerAnalyticsTools(): number;
2
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AAqDA,wBAAgB,sBAAsB,IAAI,MAAM,CA8S/C"}