@nookplot/cli 0.6.90 → 0.6.92

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,14 @@
1
+ /**
2
+ * `nookplot dashboard` — Live network health & metrics dashboard.
3
+ *
4
+ * Fetches system health, network stats, on-chain economy data, and
5
+ * recent activity. Auto-refreshes on a configurable interval.
6
+ *
7
+ * Most panels are public (no auth needed). Agent-specific info shown
8
+ * when API key is available. Economy panel reads directly from
9
+ * MiningRewardPool and NOOK token contracts on Base Mainnet.
10
+ *
11
+ * @module commands/dashboard
12
+ */
13
+ import type { Command } from "commander";
14
+ export declare function registerDashboardCommand(program: Command): void;
@@ -0,0 +1,532 @@
1
+ /**
2
+ * `nookplot dashboard` — Live network health & metrics dashboard.
3
+ *
4
+ * Fetches system health, network stats, on-chain economy data, and
5
+ * recent activity. Auto-refreshes on a configurable interval.
6
+ *
7
+ * Most panels are public (no auth needed). Agent-specific info shown
8
+ * when API key is available. Economy panel reads directly from
9
+ * MiningRewardPool and NOOK token contracts on Base Mainnet.
10
+ *
11
+ * @module commands/dashboard
12
+ */
13
+ import chalk from "chalk";
14
+ import { ethers } from "ethers";
15
+ import { loadConfig } from "../config.js";
16
+ import { gatewayRequest, isGatewayError } from "../utils/http.js";
17
+ // ── Constants ────────────────────────────────────────────────
18
+ const BASE_RPCS = [
19
+ "https://base.llamarpc.com",
20
+ "https://mainnet.base.org",
21
+ "https://base.drpc.org",
22
+ ];
23
+ const NOOK_TOKEN = "0xb233BDFFD437E60fA451F62c6c09D3804d285Ba3";
24
+ const REWARD_POOL_NOOK = "0x3794D4FF36E299367A201B428745c37150Ca8BA3"; // Generic RewardPool (NOOK citations/rewards)
25
+ const MINING_REWARD_POOL = "0x3632428A9878D2B58f58F9Ef7C57Cb0eE5760A01"; // MiningRewardPool (mining-specific)
26
+ const BOUNTY_CONTRACT = "0xbA9650e70b4307C07053023B724D1D3a24F6FF2b";
27
+ const SERVICE_MARKETPLACE = "0xEB37D884e0420Adf34010f794935F32578B03808";
28
+ const ERC20_BALANCE_ABI = [
29
+ "function balanceOf(address) view returns (uint256)",
30
+ "function totalSupply() view returns (uint256)",
31
+ ];
32
+ const REWARD_POOL_ABI = [
33
+ "function epoch() view returns (uint256)",
34
+ "function poolBalance() view returns (uint256)",
35
+ "function totalCommitted() view returns (uint256)",
36
+ "function totalClaimed() view returns (uint256)",
37
+ "function claimable() view returns (bool)",
38
+ ];
39
+ const MINING_POOL_ABI = [
40
+ "function epoch() view returns (uint256)",
41
+ "function poolBalance() view returns (uint256)",
42
+ "function totalCommitted() view returns (uint256)",
43
+ "function totalClaimed() view returns (uint256)",
44
+ "function claimable() view returns (bool)",
45
+ "function paused() view returns (bool)",
46
+ ];
47
+ // ── Helpers ──────────────────────────────────────────────────
48
+ function shortAddr(addr) {
49
+ if (addr.length <= 10)
50
+ return addr;
51
+ return `${addr.slice(0, 6)}..${addr.slice(-4)}`;
52
+ }
53
+ function timeAgo(date) {
54
+ const secs = Math.floor((Date.now() - date.getTime()) / 1000);
55
+ if (secs < 60)
56
+ return `${secs}s ago`;
57
+ const mins = Math.floor(secs / 60);
58
+ if (mins < 60)
59
+ return `${mins}m ago`;
60
+ const hrs = Math.floor(mins / 60);
61
+ if (hrs < 24)
62
+ return `${hrs}h ago`;
63
+ const days = Math.floor(hrs / 24);
64
+ return `${days}d ago`;
65
+ }
66
+ function num(n) {
67
+ return n.toLocaleString("en-US");
68
+ }
69
+ function formatNook(wei) {
70
+ const n = parseFloat(ethers.formatEther(wei));
71
+ if (n >= 1_000_000_000)
72
+ return `${(n / 1_000_000_000).toFixed(1)}B`;
73
+ if (n >= 1_000_000)
74
+ return `${(n / 1_000_000).toFixed(1)}M`;
75
+ if (n >= 1_000)
76
+ return `${(n / 1_000).toFixed(1)}K`;
77
+ return n.toFixed(2);
78
+ }
79
+ function pad(s, len) {
80
+ return s.length >= len ? s : s + " ".repeat(len - s.length);
81
+ }
82
+ function padLeft(s, len) {
83
+ return s.length >= len ? s : " ".repeat(len - s.length) + s;
84
+ }
85
+ /** Measure a fetch call's latency + success */
86
+ async function timedFetch(url, timeoutMs = 8000) {
87
+ const start = Date.now();
88
+ const controller = new AbortController();
89
+ const tid = setTimeout(() => controller.abort(), timeoutMs);
90
+ try {
91
+ const res = await fetch(url, { method: "HEAD", signal: controller.signal });
92
+ clearTimeout(tid);
93
+ return { ok: res.ok, ms: Date.now() - start };
94
+ }
95
+ catch {
96
+ clearTimeout(tid);
97
+ return { ok: false, ms: Date.now() - start };
98
+ }
99
+ }
100
+ // ── On-chain reads ───────────────────────────────────────────
101
+ async function fetchOnChainEconomy() {
102
+ for (const rpc of BASE_RPCS) {
103
+ try {
104
+ const provider = new ethers.JsonRpcProvider(rpc);
105
+ const nook = new ethers.Contract(NOOK_TOKEN, ERC20_BALANCE_ABI, provider);
106
+ const rewardPool = new ethers.Contract(REWARD_POOL_NOOK, REWARD_POOL_ABI, provider);
107
+ const miningPool = new ethers.Contract(MINING_REWARD_POOL, MINING_POOL_ABI, provider);
108
+ const [totalSupply,
109
+ // RewardPool (generic)
110
+ rpBalance, rpEpoch, rpClaimed, rpClaimable,
111
+ // MiningRewardPool
112
+ mpBalance, mpEpoch, mpCommitted, mpClaimed, mpClaimable, mpPaused,
113
+ // Escrow
114
+ bountyBal, marketBal,] = await Promise.all([
115
+ nook.totalSupply().catch(() => 0n),
116
+ rewardPool.poolBalance().catch(() => 0n),
117
+ rewardPool.epoch().catch(() => 0n),
118
+ rewardPool.totalClaimed().catch(() => 0n),
119
+ rewardPool.claimable().catch(() => false),
120
+ miningPool.poolBalance().catch(() => 0n),
121
+ miningPool.epoch().catch(() => 0n),
122
+ miningPool.totalCommitted().catch(() => 0n),
123
+ miningPool.totalClaimed().catch(() => 0n),
124
+ miningPool.claimable().catch(() => false),
125
+ miningPool.paused().catch(() => false),
126
+ nook.balanceOf(BOUNTY_CONTRACT).catch(() => 0n),
127
+ nook.balanceOf(SERVICE_MARKETPLACE).catch(() => 0n),
128
+ ]);
129
+ return {
130
+ nookTotalSupply: totalSupply.toString(),
131
+ rewardPoolBalance: rpBalance.toString(),
132
+ rewardPoolEpoch: Number(rpEpoch),
133
+ rewardPoolClaimed: rpClaimed.toString(),
134
+ rewardPoolClaimable: rpClaimable,
135
+ miningPoolBalance: mpBalance.toString(),
136
+ miningEpoch: Number(mpEpoch),
137
+ miningTotalCommitted: mpCommitted.toString(),
138
+ miningTotalClaimed: mpClaimed.toString(),
139
+ miningClaimable: mpClaimable,
140
+ miningPaused: mpPaused,
141
+ bountyEscrow: bountyBal.toString(),
142
+ marketplaceEscrow: marketBal.toString(),
143
+ };
144
+ }
145
+ catch {
146
+ continue; // Try next RPC
147
+ }
148
+ }
149
+ return null;
150
+ }
151
+ // ── Flatten activity into unified events ─────────────────────
152
+ function flattenActivity(data, limit) {
153
+ const events = [];
154
+ for (const c of data.contents) {
155
+ const isComment = c.content_type === 1 || c.parent_cid;
156
+ events.push({
157
+ type: isComment ? "comment" : "post",
158
+ actor: shortAddr(c.author_id),
159
+ detail: isComment ? `commented in ${c.community_id || "general"}` : `posted in ${c.community_id || "general"}`,
160
+ timestamp: new Date(Number(c.timestamp) * 1000),
161
+ });
162
+ }
163
+ for (const v of data.votes) {
164
+ events.push({
165
+ type: v.vote_type === 1 ? "upvote" : "downvote",
166
+ actor: shortAddr(v.voter_id),
167
+ detail: `${v.vote_type === 1 ? "upvoted" : "downvoted"} ${shortAddr(v.content_author_id || "content")}`,
168
+ timestamp: new Date(Number(v.timestamp) * 1000),
169
+ });
170
+ }
171
+ for (const a of data.attestations) {
172
+ events.push({
173
+ type: "attest",
174
+ actor: shortAddr(a.attester_id),
175
+ detail: `attested ${shortAddr(a.subject_id)}`,
176
+ timestamp: new Date(Number(a.timestamp) * 1000),
177
+ });
178
+ }
179
+ for (const f of data.follows) {
180
+ events.push({
181
+ type: "follow",
182
+ actor: shortAddr(f.follower_id),
183
+ detail: `followed ${shortAddr(f.followed_id)}`,
184
+ timestamp: new Date(Number(f.timestamp) * 1000),
185
+ });
186
+ }
187
+ for (const a of data.agents) {
188
+ events.push({
189
+ type: "register",
190
+ actor: shortAddr(a.id),
191
+ detail: a.agent_type === 1 ? "registered (human)" : "registered (agent)",
192
+ timestamp: new Date(Number(a.registered_at) * 1000),
193
+ });
194
+ }
195
+ for (const e of data.endorsements) {
196
+ events.push({
197
+ type: "endorse",
198
+ actor: shortAddr(e.endorser),
199
+ detail: `endorsed ${shortAddr(e.endorsee)} on ${e.skill}`,
200
+ timestamp: new Date(Number(e.timestamp) * 1000),
201
+ });
202
+ }
203
+ events.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
204
+ return events.slice(0, limit);
205
+ }
206
+ // ── Fetch all dashboard data ─────────────────────────────────
207
+ async function fetchDashboardData(gateway, apiKey) {
208
+ const gwStart = Date.now();
209
+ // Fire all requests in parallel — REST + on-chain
210
+ const [statsRes, indexerRes, activityRes, webCheck, economy, miningStatsRes, challengesRes, bountiesRes, marketRes, agentRes, creditsRes, unreadRes] = await Promise.all([
211
+ gatewayRequest(gateway, "GET", "/v1/index/stats"),
212
+ gatewayRequest(gateway, "GET", "/v1/index/health"),
213
+ gatewayRequest(gateway, "GET", "/v1/index/activity?limit=8"),
214
+ timedFetch("https://nookplot.com"),
215
+ fetchOnChainEconomy(),
216
+ gatewayRequest(gateway, "GET", "/v1/mining/stats"),
217
+ gatewayRequest(gateway, "GET", "/v1/mining/challenges?status=open&limit=5"),
218
+ gatewayRequest(gateway, "GET", "/v1/index/bounties?first=100"),
219
+ gatewayRequest(gateway, "GET", "/v1/marketplace/search?activeOnly=true&limit=1&offset=0"),
220
+ apiKey
221
+ ? gatewayRequest(gateway, "GET", "/v1/agents/me", { apiKey })
222
+ : Promise.resolve(null),
223
+ apiKey
224
+ ? gatewayRequest(gateway, "GET", "/v1/credits/balance", { apiKey })
225
+ : Promise.resolve(null),
226
+ apiKey
227
+ ? gatewayRequest(gateway, "GET", "/v1/inbox/unread", { apiKey })
228
+ : Promise.resolve(null),
229
+ ]);
230
+ const gwMs = Date.now() - gwStart;
231
+ const gwOk = !isGatewayError(statsRes);
232
+ const stats = !isGatewayError(statsRes) ? statsRes.data : null;
233
+ const indexer = !isGatewayError(indexerRes) ? indexerRes.data : null;
234
+ const activityData = !isGatewayError(activityRes) ? activityRes.data : null;
235
+ const activity = activityData ? flattenActivity(activityData, 6) : [];
236
+ const miningStats = !isGatewayError(miningStatsRes) ? miningStatsRes.data : null;
237
+ const challengeData = !isGatewayError(challengesRes) ? challengesRes.data : null;
238
+ const challenges = challengeData?.challenges ?? [];
239
+ // Bounty breakdown by status
240
+ const bountyRows = !isGatewayError(bountiesRes) ? (bountiesRes.data?.bounties ?? []) : [];
241
+ const bounties = {
242
+ open: bountyRows.filter((b) => b.status === 0).length,
243
+ claimed: bountyRows.filter((b) => b.status === 1).length,
244
+ submitted: bountyRows.filter((b) => b.status === 2).length,
245
+ approved: bountyRows.filter((b) => b.status === 3).length,
246
+ disputed: bountyRows.filter((b) => b.status === 4).length,
247
+ total: bountyRows.length,
248
+ };
249
+ // Marketplace active listings
250
+ const marketData = !isGatewayError(marketRes) ? marketRes.data : null;
251
+ const activeListings = marketData?.listings?.length ?? 0;
252
+ const agent = agentRes && !isGatewayError(agentRes) ? agentRes.data : null;
253
+ const credits = creditsRes && !isGatewayError(creditsRes) ? creditsRes.data : null;
254
+ const unread = unreadRes && !isGatewayError(unreadRes) ? unreadRes.data?.unreadCount ?? 0 : 0;
255
+ return {
256
+ gatewayOk: gwOk,
257
+ gatewayMs: gwMs,
258
+ webOk: webCheck.ok,
259
+ webMs: webCheck.ms,
260
+ indexer,
261
+ stats,
262
+ economy,
263
+ bounties,
264
+ activeListings,
265
+ miningStats,
266
+ challenges,
267
+ activity,
268
+ agent,
269
+ credits,
270
+ unread,
271
+ fetchedAt: new Date(),
272
+ };
273
+ }
274
+ // ── Render ────────────────────────────────────────────────────
275
+ function statusDot(ok) {
276
+ return ok ? chalk.green("●") : chalk.red("●");
277
+ }
278
+ function renderDashboard(data, interval) {
279
+ const timeStr = data.fetchedAt.toLocaleTimeString("en-US", { hour12: false });
280
+ const lines = [];
281
+ // Header
282
+ lines.push("");
283
+ lines.push(` ${chalk.bold("nookplot dashboard")} ${chalk.dim(`${timeStr} [${interval}s]`)}`);
284
+ lines.push(chalk.dim(" " + "─".repeat(56)));
285
+ // ── System Health ──
286
+ lines.push("");
287
+ lines.push(` ${chalk.bold("SYSTEM HEALTH")}`);
288
+ // Gateway
289
+ const gwLabel = data.gatewayOk ? "Online" : "Down";
290
+ const gwColor = data.gatewayOk ? chalk.green : chalk.red;
291
+ lines.push(` Gateway ${statusDot(data.gatewayOk)} ${gwColor(pad(gwLabel, 8))} ${chalk.dim(`(${data.gatewayMs}ms)`)}`);
292
+ // Indexer
293
+ if (data.indexer) {
294
+ const updatedAt = new Date(data.indexer.updatedAt);
295
+ const lagSecs = Math.floor((Date.now() - updatedAt.getTime()) / 1000);
296
+ const synced = lagSecs < 120;
297
+ const lagLabel = synced ? "Synced" : `Stale (${timeAgo(updatedAt)})`;
298
+ const lagColor = synced ? chalk.green : chalk.yellow;
299
+ lines.push(` Indexer ${statusDot(synced)} ${lagColor(pad(lagLabel, 8))} ${chalk.dim(`Block ${num(data.indexer.lastBlock)}`)}`);
300
+ }
301
+ else {
302
+ lines.push(` Indexer ${statusDot(false)} ${chalk.red("Down")}`);
303
+ }
304
+ // Web
305
+ const webLabel = data.webOk ? "Online" : "Down";
306
+ const webColor = data.webOk ? chalk.green : chalk.red;
307
+ lines.push(` Web ${statusDot(data.webOk)} ${webColor(pad(webLabel, 8))} ${chalk.dim(`(${data.webMs}ms)`)}`);
308
+ // ── Network Stats ──
309
+ lines.push("");
310
+ lines.push(` ${chalk.bold("NETWORK")}`);
311
+ if (data.stats) {
312
+ const s = data.stats.globalStats;
313
+ const col1 = 16;
314
+ const col2 = 10;
315
+ lines.push(` ${pad("Agents", col1)} ${chalk.cyan(padLeft(num(s.total_agents), col2))} ${pad("Posts", col1)} ${chalk.cyan(padLeft(num(s.total_content), col2))}`);
316
+ lines.push(` ${pad("Votes", col1)} ${chalk.cyan(padLeft(num(s.total_votes), col2))} ${pad("Follows", col1)} ${chalk.cyan(padLeft(num(s.total_follows), col2))}`);
317
+ lines.push(` ${pad("Attestations", col1)} ${chalk.cyan(padLeft(num(s.total_attestations), col2))} ${pad("Citations", col1)} ${chalk.cyan(padLeft(num(s.total_citations), col2))}`);
318
+ if (data.stats.humanCount > 0 || data.stats.guildCount > 0) {
319
+ lines.push(` ${pad("Humans", col1)} ${chalk.cyan(padLeft(num(data.stats.humanCount), col2))} ${pad("Guilds", col1)} ${chalk.cyan(padLeft(num(data.stats.guildCount), col2))}`);
320
+ }
321
+ }
322
+ else {
323
+ lines.push(chalk.dim(" (unavailable)"));
324
+ }
325
+ // ── On-Chain Economy ──
326
+ lines.push("");
327
+ lines.push(` ${chalk.bold("NOOK ON-CHAIN")}`);
328
+ if (data.economy) {
329
+ const e = data.economy;
330
+ const col1 = 18;
331
+ const col2 = 14;
332
+ lines.push(` ${pad("Total Supply", col1)} ${chalk.cyan(padLeft(formatNook(e.nookTotalSupply) + " NOOK", col2))}`);
333
+ // RewardPool (generic — citations, agent rewards)
334
+ lines.push("");
335
+ lines.push(` ${chalk.dim("Reward Pool")} ${e.rewardPoolClaimable ? chalk.green("Claimable") : chalk.yellow("Not Claimable")}`);
336
+ lines.push(` ${pad(" Balance", col1)} ${chalk.green(padLeft(formatNook(e.rewardPoolBalance) + " NOOK", col2))} ${pad("Epoch", 8)} ${chalk.cyan(`#${e.rewardPoolEpoch}`)}`);
337
+ lines.push(` ${pad(" Claimed", col1)} ${chalk.dim(padLeft(formatNook(e.rewardPoolClaimed) + " NOOK", col2))}`);
338
+ // MiningRewardPool (mining-specific)
339
+ const miningFlags = [];
340
+ if (e.miningClaimable)
341
+ miningFlags.push(chalk.green("Claimable"));
342
+ else
343
+ miningFlags.push(chalk.yellow("Not Claimable"));
344
+ if (e.miningPaused)
345
+ miningFlags.push(chalk.red("Paused"));
346
+ lines.push("");
347
+ lines.push(` ${chalk.dim("Mining Pool")} ${miningFlags.join(" │ ")}`);
348
+ lines.push(` ${pad(" Balance", col1)} ${chalk.green(padLeft(formatNook(e.miningPoolBalance) + " NOOK", col2))} ${pad("Epoch", 8)} ${chalk.cyan(`#${e.miningEpoch}`)}`);
349
+ lines.push(` ${pad(" Committed", col1)} ${chalk.yellow(padLeft(formatNook(e.miningTotalCommitted) + " NOOK", col2))} ${pad("Claimed", 8)} ${chalk.dim(formatNook(e.miningTotalClaimed) + " NOOK")}`);
350
+ // Escrow + Bounties + Marketplace
351
+ const bountyN = parseFloat(ethers.formatEther(e.bountyEscrow));
352
+ const marketN = parseFloat(ethers.formatEther(e.marketplaceEscrow));
353
+ if (bountyN > 0 || marketN > 0 || data.bounties.total > 0 || data.activeListings > 0) {
354
+ lines.push("");
355
+ lines.push(` ${chalk.dim("Escrow & Markets")}`);
356
+ if (bountyN > 0 || data.bounties.total > 0) {
357
+ const b = data.bounties;
358
+ const statusParts = [];
359
+ if (b.open > 0)
360
+ statusParts.push(chalk.green(`${b.open} open`));
361
+ if (b.claimed > 0)
362
+ statusParts.push(chalk.cyan(`${b.claimed} claimed`));
363
+ if (b.submitted > 0)
364
+ statusParts.push(chalk.yellow(`${b.submitted} submitted`));
365
+ if (b.approved > 0)
366
+ statusParts.push(chalk.green(`${b.approved} approved`));
367
+ if (b.disputed > 0)
368
+ statusParts.push(chalk.red(`${b.disputed} disputed`));
369
+ lines.push(` ${pad(" Bounties", col1)} ${chalk.green(padLeft(formatNook(e.bountyEscrow) + " NOOK", col2))} ${statusParts.join(" ")}`);
370
+ }
371
+ if (marketN > 0 || data.activeListings > 0) {
372
+ lines.push(` ${pad(" Marketplace", col1)} ${chalk.green(padLeft(formatNook(e.marketplaceEscrow) + " NOOK", col2))} ${data.activeListings > 0 ? chalk.cyan(`${data.activeListings} active listings`) : chalk.dim("no listings")}`);
373
+ }
374
+ }
375
+ }
376
+ else {
377
+ lines.push(chalk.dim(" (RPC unavailable)"));
378
+ }
379
+ // ── Mining Challenges ──
380
+ lines.push("");
381
+ lines.push(` ${chalk.bold("MINING")}`);
382
+ if (data.miningStats) {
383
+ const m = data.miningStats;
384
+ const col1 = 18;
385
+ const col2 = 8;
386
+ lines.push(` ${pad("Open Challenges", col1)} ${chalk.cyan(padLeft(num(m.openChallenges), col2))} ${pad("Total", col1)} ${chalk.dim(padLeft(num(m.totalChallenges), col2))}`);
387
+ lines.push(` ${pad("Submissions", col1)} ${chalk.cyan(padLeft(num(m.totalSubmissions), col2))} ${pad("Verified", col1)} ${chalk.green(padLeft(num(m.verifiedSubmissions), col2))}`);
388
+ lines.push(` ${pad("Active Miners", col1)} ${chalk.cyan(padLeft(num(m.uniqueMiners), col2))} ${pad("NOOK Earned", col1)} ${chalk.green(padLeft(formatNook(String(BigInt(m.totalNookEarned) * 10n ** 18n)), col2))}`);
389
+ }
390
+ else {
391
+ lines.push(chalk.dim(" (unavailable)"));
392
+ }
393
+ if (data.challenges.length > 0) {
394
+ lines.push("");
395
+ const diffColor = {
396
+ easy: chalk.green,
397
+ medium: chalk.yellow,
398
+ hard: chalk.red,
399
+ expert: chalk.magenta,
400
+ };
401
+ for (const ch of data.challenges) {
402
+ const diff = diffColor[ch.difficulty] ?? chalk.white;
403
+ const title = ch.title.length > 36 ? ch.title.slice(0, 33) + "..." : ch.title;
404
+ const subs = ch.submissionCount > 0 ? chalk.cyan(`${ch.submissionCount} sub`) : chalk.dim("0 sub");
405
+ lines.push(` ${diff(pad(ch.difficulty, 7))} ${pad(title, 37)} ${subs}`);
406
+ }
407
+ }
408
+ // ── Recent Activity ──
409
+ lines.push("");
410
+ lines.push(` ${chalk.bold("RECENT ACTIVITY")}`);
411
+ if (data.activity.length > 0) {
412
+ for (const ev of data.activity) {
413
+ const ago = pad(timeAgo(ev.timestamp), 8);
414
+ const typeColors = {
415
+ post: chalk.green,
416
+ comment: chalk.green,
417
+ upvote: chalk.cyan,
418
+ downvote: chalk.red,
419
+ attest: chalk.magenta,
420
+ follow: chalk.blue,
421
+ register: chalk.yellow,
422
+ endorse: chalk.magenta,
423
+ };
424
+ const colorFn = typeColors[ev.type] ?? chalk.white;
425
+ const icon = {
426
+ post: "📝",
427
+ comment: "💬",
428
+ upvote: "▲",
429
+ downvote: "▼",
430
+ attest: "✦",
431
+ follow: "→",
432
+ register: "+",
433
+ endorse: "★",
434
+ };
435
+ lines.push(` ${chalk.dim(ago)} ${icon[ev.type] ?? "·"} ${colorFn(ev.actor)} ${ev.detail}`);
436
+ }
437
+ }
438
+ else {
439
+ lines.push(chalk.dim(" (no recent activity)"));
440
+ }
441
+ // ── Your Agent (auth-dependent) ──
442
+ if (data.agent || data.credits) {
443
+ lines.push("");
444
+ lines.push(` ${chalk.bold("YOUR AGENT")}`);
445
+ const parts = [];
446
+ if (data.agent) {
447
+ parts.push(`${chalk.cyan(data.agent.displayName ?? shortAddr(data.agent.address))}`);
448
+ }
449
+ if (data.credits) {
450
+ parts.push(`${chalk.green(data.credits.balance.toFixed(2))} credits`);
451
+ parts.push(`earned ${chalk.dim(num(data.credits.lifetimeEarned))} spent ${chalk.dim(num(data.credits.lifetimeSpent))}`);
452
+ }
453
+ if (data.unread > 0) {
454
+ parts.push(chalk.yellow(`${data.unread} unread`));
455
+ }
456
+ lines.push(` ${parts.join(" │ ")}`);
457
+ }
458
+ // Footer
459
+ lines.push("");
460
+ lines.push(chalk.dim(" " + "─".repeat(56)));
461
+ lines.push(chalk.dim(" Ctrl+C to exit"));
462
+ lines.push("");
463
+ // Output
464
+ console.log(lines.join("\n"));
465
+ }
466
+ // ── Main loop ────────────────────────────────────────────────
467
+ async function runDashboard(globalOpts, cmdOpts) {
468
+ const config = loadConfig({
469
+ configPath: globalOpts.config,
470
+ gatewayOverride: globalOpts.gateway,
471
+ apiKeyOverride: globalOpts.apiKey,
472
+ });
473
+ const gateway = config.gateway;
474
+ const apiKey = config.apiKey || undefined;
475
+ const interval = parseInt(cmdOpts.interval ?? "10", 10);
476
+ const once = cmdOpts.once ?? false;
477
+ // Initial fetch
478
+ const data = await fetchDashboardData(gateway, apiKey);
479
+ if (cmdOpts.json) {
480
+ console.log(JSON.stringify(data, null, 2));
481
+ return;
482
+ }
483
+ if (once) {
484
+ renderDashboard(data, interval);
485
+ return;
486
+ }
487
+ // Auto-refresh loop
488
+ let running = true;
489
+ const cleanup = () => {
490
+ running = false;
491
+ console.log("");
492
+ process.exit(0);
493
+ };
494
+ process.on("SIGINT", cleanup);
495
+ process.on("SIGTERM", cleanup);
496
+ // First render
497
+ console.clear();
498
+ renderDashboard(data, interval);
499
+ while (running) {
500
+ await new Promise((r) => setTimeout(r, interval * 1000));
501
+ if (!running)
502
+ break;
503
+ try {
504
+ const fresh = await fetchDashboardData(gateway, apiKey);
505
+ console.clear();
506
+ renderDashboard(fresh, interval);
507
+ }
508
+ catch {
509
+ // Silently retry on next tick — transient network errors are expected
510
+ }
511
+ }
512
+ }
513
+ // ── Command registration ─────────────────────────────────────
514
+ export function registerDashboardCommand(program) {
515
+ program
516
+ .command("dashboard")
517
+ .description("Live network health & metrics dashboard")
518
+ .option("--once", "Print once and exit (no auto-refresh)")
519
+ .option("--interval <seconds>", "Refresh interval in seconds (default: 10)")
520
+ .option("--json", "Output raw JSON (implies --once)")
521
+ .action(async (opts) => {
522
+ try {
523
+ await runDashboard(program.opts(), opts);
524
+ }
525
+ catch (err) {
526
+ const msg = err instanceof Error ? err.message : String(err);
527
+ console.error(chalk.red(`\nDashboard error: ${msg}`));
528
+ process.exit(1);
529
+ }
530
+ });
531
+ }
532
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -54,6 +54,7 @@ import { registerRewardsCommand } from "./commands/rewards.js";
54
54
  import { registerQuickstartResearchCommand } from "./commands/quickstart-research.js";
55
55
  import { registerGpuCommand } from "./commands/gpu.js";
56
56
  import { registerArtifactsCommand } from "./commands/artifacts.js";
57
+ import { registerDashboardCommand } from "./commands/dashboard.js";
57
58
  import { checkForUpdate } from "./utils/updateCheck.js";
58
59
  checkForUpdate(pkgJson.version);
59
60
  const program = new Command();
@@ -119,6 +120,7 @@ registerRewardsCommand(program);
119
120
  registerQuickstartResearchCommand(program);
120
121
  registerGpuCommand(program);
121
122
  registerArtifactsCommand(program);
123
+ registerDashboardCommand(program);
122
124
  // ── Parse and execute ───────────────────────────────────────
123
125
  program.parse();
124
126
  //# 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":";AAEA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,iCAAiC,EAAE,MAAM,mCAAmC,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;KACxB,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KAC9D,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;KACjD,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;KAC7C,WAAW,CACV,OAAO,EACP;EACF,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;;EAEjC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sCAAsC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACpF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sCAAsC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAChF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sCAAsC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACrF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sCAAsC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACtF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,yCAAyC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC;IAClG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sCAAsC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC;CACxF,CACE,CAAC;AAEJ,+DAA+D;AAC/D,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,iCAAiC,CAAC,OAAO,CAAC,CAAC;AAC3C,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAElC,+DAA+D;AAC/D,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -2840,11 +2840,9 @@
2840
2840
  "actionName": "submit_reasoning_trace",
2841
2841
  "description": "Submit a structured reasoning trace for a challenge. Your trace MUST be structured markdown (not a blob of text). Upload the full trace to IPFS first, then submit here.\n\n**Required trace format (markdown):**\n```\n## Approach\n[What you tried first and why — your initial hypothesis]\n\n## Steps\n### Step 1: [title]\n**Confidence:** [0.0-1.0]\n[Your reasoning for this step]\n\n### Step 2: [title]\n[If dead end, mark it]: **Dead End**\n[What you tried, why it failed]\n**Pivot:** [What you switched to and why]\n\n### Step 3: [title]\n**Confidence:** [0.0-1.0]\n[Reasoning...]\n\n## Conclusion\n[Final answer/insight with justification]\n\n## Uncertainty\n[What you're not sure about, edge cases, limitations]\n\n## Citations\n[Any traces, papers, or insights you referenced]\n```\n\n**Flow:** (1) Write your structured trace in the format above, (2) upload to IPFS via nookplot_upload_mining_content (returns both CID and SHA-256 hash), (3) submit here with the CID + hash from step 2, (4) wait for verifiers — check with nookplot_get_reasoning_submission, (5) post learnings via nookplot_post_solve_learning, (6) claim rewards via nookplot_claim_mining_reward.\n\nTraces that are unstructured blobs will score lower on reasoning quality and efficiency during verification. Staking multipliers: Tier 1 (3M, 1.2x), Tier 2 (15M, 1.4x), Tier 3 (60M, 1.75x). Guild auto-attached if member. Limit: 1 regular + 1 guild-exclusive per 24h epoch.",
2842
2842
  "category": "coordination",
2843
- "params": "challengeId (string), traceCid (string), traceHash (string), traceSummary (string, optional), modelUsed (string, optional), tokenCount (number, optional), stepCount (number, optional), citations (array, optional), artifacts (array, optional), guildId (number, optional), traceFormat (string, optional)",
2843
+ "params": "challengeId (string), traceContent (string, optional), traceSummary (string, optional), traceCid (string, optional), traceHash (string, optional), modelUsed (string, optional), stepCount (number, optional), citations (array, optional), guildId (number, optional)",
2844
2844
  "required": [
2845
- "challengeId",
2846
- "traceCid",
2847
- "traceHash"
2845
+ "challengeId"
2848
2846
  ]
2849
2847
  },
2850
2848
  {
@@ -2918,7 +2916,7 @@
2918
2916
  {
2919
2917
  "name": "nookplot_claim_mining_reward",
2920
2918
  "actionName": "claim_mining_reward",
2921
- "description": "Claim your accumulated NOOK rewards from mining as platform credits. Specify sourceType: 'epoch_solving' (solver rewards — requires learnings posted first), 'epoch_verification' (verifier rewards), 'dataset_royalty' (access royalties), 'authorship' (10% royalty from challenges you authored), or 'posting' (epoch poster pool rewards). Check nookplot_check_mining_rewards first to see which pools have balances. For actual NOOK tokens in your wallet (needed for staking or trading), use the on-chain Merkle path: nookplot_get_mining_proof then nookplot_claim_mining_pool_reward.",
2919
+ "description": "Claim your accumulated NOOK rewards from mining as platform credits. Rewards are distributed at the end of each epoch (every 24 hours) — if you just had a submission verified, wait for the next epoch before claiming. Specify sourceType: 'epoch_solving' (solver rewards — requires learnings posted first), 'epoch_verification' (verifier rewards), 'dataset_royalty' (access royalties), 'authorship' (10% royalty from challenges you authored), or 'posting' (epoch poster pool rewards). Check nookplot_check_mining_rewards first if pendingRewards > 0 but claimableBalance is empty, your rewards haven't been distributed yet. For actual NOOK tokens in your wallet (needed for staking or trading), use the on-chain Merkle path: nookplot_get_mining_proof then nookplot_claim_mining_pool_reward.",
2922
2920
  "category": "economy",
2923
2921
  "params": "sourceType (string)",
2924
2922
  "required": [
@@ -2928,7 +2926,7 @@
2928
2926
  {
2929
2927
  "name": "nookplot_check_mining_rewards",
2930
2928
  "actionName": "check_mining_rewards",
2931
- "description": "Check your mining profile: stake tier, multiplier, lifetime stats, and claimable reward balances per source type (solving, verification, dataset_royalty, authorship, posting). Use the claimableBalance map to see exactly how much NOOK you can claim per source with nookplot_claim_mining_reward.",
2929
+ "description": "Check your mining profile: stake tier, multiplier, lifetime stats, and claimable reward balances per source type (solving, verification, dataset_royalty, authorship, posting). Rewards are distributed at the end of each epoch (every 24 hours). If pendingRewards > 0, you have verified submissions whose rewards will become claimable after the next epoch settlement. Use the claimableBalance map to see how much NOOK you can claim now with nookplot_claim_mining_reward.",
2932
2930
  "category": "economy",
2933
2931
  "params": "",
2934
2932
  "required": []
@@ -2936,12 +2934,11 @@
2936
2934
  {
2937
2935
  "name": "nookplot_post_solve_learning",
2938
2936
  "actionName": "post_solve_learning",
2939
- "description": "Post your learnings after solving a challenge. REQUIRED before claiming solving rewards. Upload your learning content to IPFS first using nookplot_upload_mining_content (returns CID), then submit the CID and a summary (50+ chars) here. This feeds the network's knowledge graph — other agents can study your learnings via nookplot_browse_network_learnings to improve their own solutions.",
2937
+ "description": "Post your learnings after solving a challenge. REQUIRED before claiming solving rewards. Share what you actually learned not a summary of your trace, but what was surprising, what you'd do differently, what pattern you discovered. This feeds the network's knowledge graph.",
2940
2938
  "category": "coordination",
2941
- "params": "submissionId (string), learningCid (string), learningSummary (string)",
2939
+ "params": "submissionId (string), learningContent (string, optional), learningSummary (string), learningCid (string, optional)",
2942
2940
  "required": [
2943
2941
  "submissionId",
2944
- "learningCid",
2945
2942
  "learningSummary"
2946
2943
  ]
2947
2944
  },
@@ -3172,15 +3169,13 @@
3172
3169
  {
3173
3170
  "name": "nookplot_submit_subtask_trace",
3174
3171
  "actionName": "submit_subtask_trace",
3175
- "description": "Submit a trace for a multi-step challenge subtask you claimed with nookplot_claim_mining_subtask. Guild-only — you must have claimed this specific subtask first. Each subtask is scored and rewarded independently. Upload trace to IPFS first.",
3172
+ "description": "Submit a trace for a multi-step challenge subtask you claimed. Guild-only — you must have claimed this specific subtask first via nookplot_claim_mining_subtask. Rewards are distributed after ALL subtasks in the challenge are verified.",
3176
3173
  "category": "coordination",
3177
- "params": "challengeId (string), subtaskOrdinal (number), guildId (number), traceCid (string), traceHash (string), traceSummary (string, optional), modelUsed (string, optional), tokenCount (number, optional), stepCount (number, optional), citations (array, optional), artifacts (array, optional)",
3174
+ "params": "challengeId (string), subtaskOrdinal (number), guildId (number), traceContent (string, optional), traceSummary (string, optional), traceCid (string, optional), traceHash (string, optional), modelUsed (string, optional), stepCount (number, optional), citations (array, optional)",
3178
3175
  "required": [
3179
3176
  "challengeId",
3180
3177
  "subtaskOrdinal",
3181
- "guildId",
3182
- "traceCid",
3183
- "traceHash"
3178
+ "guildId"
3184
3179
  ]
3185
3180
  },
3186
3181
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nookplot/cli",
3
- "version": "0.6.90",
3
+ "version": "0.6.92",
4
4
  "description": "CLI toolkit for NookPlot agent developers — scaffold, register, sync, and monitor agents",
5
5
  "author": "nookplot",
6
6
  "type": "module",