@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,338 @@
1
+ // kbot Analytics — npm, GitHub, user, and revenue metrics from the terminal
2
+ //
3
+ // Commands:
4
+ // analytics_overview — Full dashboard: downloads, stars, users, revenue
5
+ // analytics_npm — npm download stats and trends
6
+ // analytics_github — GitHub stars, clones, traffic, issues
7
+ // analytics_users — User growth, signups, churn
8
+ // analytics_revenue — MRR, subscription breakdown, cost tracking
9
+ import { execSync } from 'node:child_process';
10
+ import { registerTool } from './index.js';
11
+ // ── Helpers ──────────────────────────────────────────────────────────
12
+ function fetchJSON(url, headers) {
13
+ const headerArgs = headers
14
+ ? Object.entries(headers).map(([k, v]) => `-H "${k}: ${v}"`).join(' ')
15
+ : '';
16
+ const raw = execSync(`curl -sS ${headerArgs} "${url}"`, {
17
+ encoding: 'utf-8', timeout: 15_000,
18
+ }).trim();
19
+ return JSON.parse(raw);
20
+ }
21
+ function supabaseQuery(table, query) {
22
+ const url = process.env.SUPABASE_URL || process.env.VITE_SUPABASE_URL;
23
+ const key = process.env.SUPABASE_SERVICE_KEY || process.env.SUPABASE_SERVICE_ROLE_KEY;
24
+ if (!url || !key)
25
+ return [];
26
+ const raw = execSync(`curl -sS "${url}/rest/v1/${table}?${query}" \
27
+ -H "apikey: ${key}" \
28
+ -H "Authorization: Bearer ${key}" \
29
+ -H "Content-Type: application/json"`, {
30
+ encoding: 'utf-8', timeout: 15_000,
31
+ }).trim();
32
+ try {
33
+ return JSON.parse(raw);
34
+ }
35
+ catch {
36
+ return [];
37
+ }
38
+ }
39
+ function sparkline(values) {
40
+ if (!values.length)
41
+ return '';
42
+ const min = Math.min(...values);
43
+ const max = Math.max(...values);
44
+ const range = max - min || 1;
45
+ const bars = '▁▂▃▄▅▆▇█';
46
+ return values.map(v => bars[Math.round(((v - min) / range) * 7)]).join('');
47
+ }
48
+ function ghApi(endpoint) {
49
+ const raw = execSync(`gh api ${endpoint}`, { encoding: 'utf-8', timeout: 15_000 }).trim();
50
+ return JSON.parse(raw);
51
+ }
52
+ // ── Tools ────────────────────────────────────────────────────────────
53
+ export function registerAnalyticsTools() {
54
+ let count = 0;
55
+ registerTool({
56
+ name: 'analytics_overview',
57
+ description: 'Full analytics dashboard: npm downloads, GitHub stars, users, revenue — all in one view.',
58
+ parameters: {},
59
+ tier: 'pro',
60
+ execute: async () => {
61
+ const sections = [];
62
+ // npm
63
+ try {
64
+ const weekly = fetchJSON('https://api.npmjs.org/downloads/point/last-week/@kernel.chat/kbot');
65
+ const monthly = fetchJSON('https://api.npmjs.org/downloads/point/last-month/@kernel.chat/kbot');
66
+ const daily = fetchJSON('https://api.npmjs.org/downloads/range/last-week/@kernel.chat/kbot');
67
+ const downloads = (daily.downloads || []).map(d => d.downloads);
68
+ sections.push([
69
+ `── npm (@kernel.chat/kbot) ──`,
70
+ ` Weekly: ${weekly.downloads} ${sparkline(downloads)}`,
71
+ ` Monthly: ${monthly.downloads}`,
72
+ ].join('\n'));
73
+ }
74
+ catch (e) {
75
+ sections.push(`── npm ──\n Error: ${e.message}`);
76
+ }
77
+ // GitHub
78
+ try {
79
+ const repo = ghApi('repos/isaacsight/kernel');
80
+ sections.push([
81
+ `── GitHub (isaacsight/kernel) ──`,
82
+ ` Stars: ${repo.stargazers_count}`,
83
+ ` Forks: ${repo.forks_count}`,
84
+ ` Watchers: ${repo.subscribers_count}`,
85
+ ` Open issues: ${repo.open_issues_count}`,
86
+ ].join('\n'));
87
+ }
88
+ catch {
89
+ sections.push('── GitHub ──\n Error: gh CLI not available');
90
+ }
91
+ // GitHub traffic
92
+ try {
93
+ const clones = ghApi('repos/isaacsight/kernel/traffic/clones');
94
+ const views = ghApi('repos/isaacsight/kernel/traffic/views');
95
+ const cloneDaily = (clones.clones || []).map(d => d.count);
96
+ const viewDaily = (views.views || []).map(d => d.count);
97
+ sections.push([
98
+ `── Traffic (14d) ──`,
99
+ ` Clones: ${clones.count} unique / ${clones.uniques} cloners ${sparkline(cloneDaily)}`,
100
+ ` Views: ${views.count} total / ${views.uniques} unique ${sparkline(viewDaily)}`,
101
+ ].join('\n'));
102
+ }
103
+ catch { /* traffic may require push access */ }
104
+ // Users
105
+ try {
106
+ const users = supabaseQuery('users_view', 'select=id&limit=0');
107
+ const subs = supabaseQuery('subscriptions', 'select=id,plan&status=in.(active,trialing)');
108
+ const proCount = subs.filter(s => String(s.plan).startsWith('pro')).length;
109
+ const maxCount = subs.filter(s => String(s.plan).startsWith('max')).length;
110
+ sections.push([
111
+ `── Users ──`,
112
+ ` Total: ${users.length || 'query failed'}`,
113
+ ` Pro: ${proCount}`,
114
+ ` Max: ${maxCount}`,
115
+ ` Free: ${Math.max(0, (users.length || 0) - proCount - maxCount)}`,
116
+ ].join('\n'));
117
+ }
118
+ catch {
119
+ sections.push('── Users ──\n Requires SUPABASE_SERVICE_KEY');
120
+ }
121
+ return `╔══════════════════════════════════════╗\n` +
122
+ `║ KERNEL ANALYTICS DASHBOARD ║\n` +
123
+ `╚══════════════════════════════════════╝\n\n` +
124
+ sections.join('\n\n');
125
+ },
126
+ });
127
+ count++;
128
+ registerTool({
129
+ name: 'analytics_npm',
130
+ description: 'Detailed npm download stats with daily breakdown and trends.',
131
+ parameters: {
132
+ period: { type: 'string', description: 'Period: "week", "month", "year"', default: 'month' },
133
+ compare: { type: 'string', description: 'Compare against package (e.g. "@anthropics/claude-code")' },
134
+ },
135
+ tier: 'free',
136
+ execute: async (args) => {
137
+ const period = String(args.period || 'month');
138
+ const rangeName = period === 'week' ? 'last-week' : period === 'year' ? 'last-year' : 'last-month';
139
+ const point = fetchJSON(`https://api.npmjs.org/downloads/point/${rangeName}/@kernel.chat/kbot`);
140
+ const range = fetchJSON(`https://api.npmjs.org/downloads/range/${rangeName}/@kernel.chat/kbot`);
141
+ const dailyData = range.downloads || [];
142
+ const values = dailyData.map(d => d.downloads);
143
+ let output = [
144
+ `── npm Downloads (@kernel.chat/kbot) ──`,
145
+ ` Total (${period}): ${point.downloads}`,
146
+ ` Daily avg: ${values.length ? Math.round(values.reduce((a, b) => a + b, 0) / values.length) : 0}`,
147
+ ` Peak: ${values.length ? Math.max(...values) : 0}`,
148
+ ` Trend: ${sparkline(values)}`,
149
+ ``,
150
+ ` Daily:`,
151
+ ].join('\n');
152
+ // Show last 14 days max
153
+ const recent = dailyData.slice(-14);
154
+ for (const d of recent) {
155
+ const bar = '█'.repeat(Math.round((d.downloads / (Math.max(...values) || 1)) * 30));
156
+ output += `\n ${d.day.slice(5)} ${String(d.downloads).padStart(5)} ${bar}`;
157
+ }
158
+ // Compare
159
+ if (args.compare) {
160
+ const comp = String(args.compare);
161
+ try {
162
+ const compData = fetchJSON(`https://api.npmjs.org/downloads/point/${rangeName}/${comp}`);
163
+ output += `\n\n Comparison: ${comp}\n Downloads (${period}): ${compData.downloads}`;
164
+ }
165
+ catch {
166
+ output += `\n\n Could not fetch data for ${comp}`;
167
+ }
168
+ }
169
+ return output;
170
+ },
171
+ });
172
+ count++;
173
+ registerTool({
174
+ name: 'analytics_github',
175
+ description: 'GitHub repo stats: stars, forks, traffic, clones, top referrers, popular content.',
176
+ parameters: {},
177
+ tier: 'free',
178
+ execute: async () => {
179
+ const sections = [];
180
+ try {
181
+ const repo = ghApi('repos/isaacsight/kernel');
182
+ sections.push([
183
+ `── Repository ──`,
184
+ ` Stars: ${repo.stargazers_count}`,
185
+ ` Forks: ${repo.forks_count}`,
186
+ ` Watchers: ${repo.subscribers_count}`,
187
+ ` Open issues: ${repo.open_issues_count}`,
188
+ ` Size: ${Math.round(Number(repo.size) / 1024)}MB`,
189
+ ` Language: ${repo.language}`,
190
+ ` Created: ${String(repo.created_at || '').slice(0, 10)}`,
191
+ ` Updated: ${String(repo.updated_at || '').slice(0, 10)}`,
192
+ ].join('\n'));
193
+ }
194
+ catch (e) {
195
+ return `Error: ${e.message}`;
196
+ }
197
+ try {
198
+ const clones = ghApi('repos/isaacsight/kernel/traffic/clones');
199
+ const views = ghApi('repos/isaacsight/kernel/traffic/views');
200
+ sections.push([
201
+ `── Traffic (14d) ──`,
202
+ ` Views: ${views.count} total / ${views.uniques} unique`,
203
+ ` Clones: ${clones.count} total / ${clones.uniques} unique`,
204
+ ].join('\n'));
205
+ }
206
+ catch { /* requires push */ }
207
+ try {
208
+ const referrers = ghApi('repos/isaacsight/kernel/traffic/popular/referrers');
209
+ if (referrers.length) {
210
+ sections.push(`── Top Referrers ──\n` +
211
+ referrers.slice(0, 5).map(r => ` ${String(r.referrer).padEnd(25)} ${r.count} views / ${r.uniques} unique`).join('\n'));
212
+ }
213
+ }
214
+ catch { /* */ }
215
+ try {
216
+ const paths = ghApi('repos/isaacsight/kernel/traffic/popular/paths');
217
+ if (paths.length) {
218
+ sections.push(`── Popular Content ──\n` +
219
+ paths.slice(0, 5).map(p => ` ${String(p.path).padEnd(40)} ${p.count} views`).join('\n'));
220
+ }
221
+ }
222
+ catch { /* */ }
223
+ return sections.join('\n\n');
224
+ },
225
+ });
226
+ count++;
227
+ registerTool({
228
+ name: 'analytics_users',
229
+ description: 'User growth metrics: signups over time, active users, churn rate.',
230
+ parameters: {
231
+ period: { type: 'string', description: 'Period: "7d", "30d", "90d"', default: '30d' },
232
+ },
233
+ tier: 'enterprise',
234
+ execute: async (args) => {
235
+ const days = String(args.period) === '7d' ? 7 : String(args.period) === '90d' ? 90 : 30;
236
+ const since = new Date(Date.now() - days * 86400_000).toISOString();
237
+ const allUsers = supabaseQuery('users_view', `select=id,created_at&order=created_at.desc`);
238
+ const newUsers = allUsers.filter(u => String(u.created_at) >= since);
239
+ // Group by day
240
+ const byDay = new Map();
241
+ for (const u of newUsers) {
242
+ const day = String(u.created_at || '').slice(0, 10);
243
+ byDay.set(day, (byDay.get(day) || 0) + 1);
244
+ }
245
+ const dailyCounts = Array.from(byDay.entries()).sort().slice(-14);
246
+ // Active users (had messages in period)
247
+ const activeRaw = supabaseQuery('message_states', `select=user_id&created_at=gte.${since}&limit=5000`);
248
+ const activeUsers = new Set(activeRaw.map(m => m.user_id).filter(Boolean)).size;
249
+ // Subscriptions
250
+ const subs = supabaseQuery('subscriptions', 'select=status,plan');
251
+ const activeSubs = subs.filter(s => s.status === 'active' || s.status === 'trialing');
252
+ const canceled = subs.filter(s => s.status === 'canceled');
253
+ const churnRate = (activeSubs.length + canceled.length) > 0
254
+ ? ((canceled.length / (activeSubs.length + canceled.length)) * 100).toFixed(1)
255
+ : '0';
256
+ let output = [
257
+ `── User Analytics (${days}d) ──`,
258
+ ` Total users: ${allUsers.length}`,
259
+ ` New (${days}d): ${newUsers.length}`,
260
+ ` Active (${days}d): ${activeUsers}`,
261
+ ` Subscribers: ${activeSubs.length}`,
262
+ ` Churned: ${canceled.length}`,
263
+ ` Churn rate: ${churnRate}%`,
264
+ ``,
265
+ `── Signups (daily) ──`,
266
+ ].join('\n');
267
+ for (const [day, count] of dailyCounts) {
268
+ const bar = '█'.repeat(Math.min(count * 3, 30));
269
+ output += `\n ${day.slice(5)} ${String(count).padStart(3)} ${bar}`;
270
+ }
271
+ if (dailyCounts.length) {
272
+ output += `\n Trend: ${sparkline(dailyCounts.map(([, c]) => c))}`;
273
+ }
274
+ return output;
275
+ },
276
+ });
277
+ count++;
278
+ registerTool({
279
+ name: 'analytics_revenue',
280
+ description: 'Revenue analytics: MRR, subscription tiers, cost tracking.',
281
+ parameters: {},
282
+ tier: 'enterprise',
283
+ execute: async () => {
284
+ const sections = [];
285
+ // Subscription breakdown
286
+ const subs = supabaseQuery('subscriptions', 'select=plan,status&status=in.(active,trialing)');
287
+ const planCounts = new Map();
288
+ for (const s of subs) {
289
+ const plan = String(s.plan || 'unknown');
290
+ planCounts.set(plan, (planCounts.get(plan) || 0) + 1);
291
+ }
292
+ sections.push([
293
+ `── Subscription Breakdown ──`,
294
+ ...Array.from(planCounts.entries()).map(([plan, count]) => ` ${plan.padEnd(20)} ${count} subscribers`),
295
+ ` ${'─'.repeat(35)}`,
296
+ ` Total active: ${subs.length}`,
297
+ ].join('\n'));
298
+ // MRR estimate (basic)
299
+ const PLAN_PRICES = {
300
+ pro_monthly: 12, pro_annual: 8, // per month
301
+ max_monthly: 29, max_annual: 20,
302
+ };
303
+ let mrr = 0;
304
+ for (const [plan, count] of planCounts) {
305
+ mrr += (PLAN_PRICES[plan] || 0) * count;
306
+ }
307
+ sections.push([
308
+ `── Revenue ──`,
309
+ ` Estimated MRR: $${mrr.toFixed(2)}`,
310
+ ` Estimated ARR: $${(mrr * 12).toFixed(2)}`,
311
+ ].join('\n'));
312
+ // Cost tracking
313
+ try {
314
+ const costs = supabaseQuery('usage_costs', `select=cost_usd,provider&created_at=gte.${new Date(Date.now() - 30 * 86400_000).toISOString()}`);
315
+ const totalCost = costs.reduce((sum, c) => sum + Number(c.cost_usd || 0), 0);
316
+ const byProvider = new Map();
317
+ for (const c of costs) {
318
+ const p = String(c.provider || 'unknown');
319
+ byProvider.set(p, (byProvider.get(p) || 0) + Number(c.cost_usd || 0));
320
+ }
321
+ sections.push([
322
+ `── API Costs (30d) ──`,
323
+ ` Total: $${totalCost.toFixed(2)}`,
324
+ ...Array.from(byProvider.entries()).sort((a, b) => b[1] - a[1]).map(([p, cost]) => ` ${p.padEnd(15)} $${cost.toFixed(2)}`),
325
+ ``,
326
+ ` Margin: ${mrr > 0 ? ((1 - totalCost / mrr) * 100).toFixed(0) + '%' : 'n/a (no revenue)'}`,
327
+ ].join('\n'));
328
+ }
329
+ catch {
330
+ sections.push('── Costs ──\n Requires usage_costs table');
331
+ }
332
+ return sections.join('\n\n');
333
+ },
334
+ });
335
+ count++;
336
+ return count;
337
+ }
338
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function registerDbAdminTools(): number;
2
+ //# sourceMappingURL=db-admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-admin.d.ts","sourceRoot":"","sources":["../../src/tools/db-admin.ts"],"names":[],"mappings":"AAsEA,wBAAgB,oBAAoB,IAAI,MAAM,CAiU7C"}