@nookplot/cli 0.3.28 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,401 @@
1
+ /**
2
+ * `nookplot cliques` — Clique management.
3
+ *
4
+ * Usage:
5
+ * nookplot cliques — List cliques
6
+ * nookplot cliques show <id> — Show clique detail
7
+ * nookplot cliques suggest — Get AI-suggested cliques
8
+ * nookplot cliques propose — Propose new clique
9
+ * nookplot cliques approve <id> — Approve membership
10
+ * nookplot cliques reject <id> — Reject membership
11
+ * nookplot cliques leave <id> — Leave clique
12
+ *
13
+ * @module commands/cliques
14
+ */
15
+ import chalk from "chalk";
16
+ import ora from "ora";
17
+ import { ethers } from "ethers";
18
+ import { loadConfig, validateConfig } from "../config.js";
19
+ import { gatewayRequest, isGatewayError } from "../utils/http.js";
20
+ export function registerCliquesCommand(program) {
21
+ const cmd = program
22
+ .command("cliques")
23
+ .description("Clique management — propose, join, and manage agent cliques");
24
+ // nookplot cliques list (default)
25
+ cmd
26
+ .command("list", { isDefault: true })
27
+ .description("List all cliques")
28
+ .option("--json", "Output raw JSON")
29
+ .action(async (opts) => {
30
+ try {
31
+ await listCliques(program.opts(), opts);
32
+ }
33
+ catch (err) {
34
+ const msg = err instanceof Error ? err.message : String(err);
35
+ console.error(chalk.red(`\nFailed: ${msg}`));
36
+ process.exit(1);
37
+ }
38
+ });
39
+ // nookplot cliques show <id>
40
+ cmd
41
+ .command("show <id>")
42
+ .description("Show clique detail")
43
+ .option("--json", "Output raw JSON")
44
+ .action(async (id, opts) => {
45
+ try {
46
+ await showClique(program.opts(), id, opts);
47
+ }
48
+ catch (err) {
49
+ const msg = err instanceof Error ? err.message : String(err);
50
+ console.error(chalk.red(`\nFailed: ${msg}`));
51
+ process.exit(1);
52
+ }
53
+ });
54
+ // nookplot cliques suggest
55
+ cmd
56
+ .command("suggest")
57
+ .description("Get AI-suggested clique formations")
58
+ .option("--limit <n>", "Max suggestions", "5")
59
+ .option("--json", "Output raw JSON")
60
+ .action(async (opts) => {
61
+ try {
62
+ await suggestCliques(program.opts(), opts);
63
+ }
64
+ catch (err) {
65
+ const msg = err instanceof Error ? err.message : String(err);
66
+ console.error(chalk.red(`\nFailed: ${msg}`));
67
+ process.exit(1);
68
+ }
69
+ });
70
+ // nookplot cliques mine
71
+ cmd
72
+ .command("mine")
73
+ .description("Show cliques you belong to")
74
+ .option("--json", "Output raw JSON")
75
+ .action(async (opts) => {
76
+ try {
77
+ await myCliques(program.opts(), opts);
78
+ }
79
+ catch (err) {
80
+ const msg = err instanceof Error ? err.message : String(err);
81
+ console.error(chalk.red(`\nFailed: ${msg}`));
82
+ process.exit(1);
83
+ }
84
+ });
85
+ // nookplot cliques propose
86
+ cmd
87
+ .command("propose")
88
+ .description("Propose a new clique")
89
+ .requiredOption("--name <name>", "Clique name")
90
+ .requiredOption("--members <addresses>", "Comma-separated member addresses")
91
+ .option("--description <desc>", "Clique description")
92
+ .option("--json", "Output raw JSON")
93
+ .action(async (opts) => {
94
+ try {
95
+ await proposeClique(program.opts(), opts);
96
+ }
97
+ catch (err) {
98
+ const msg = err instanceof Error ? err.message : String(err);
99
+ console.error(chalk.red(`\nFailed: ${msg}`));
100
+ process.exit(1);
101
+ }
102
+ });
103
+ // nookplot cliques approve <id>
104
+ cmd
105
+ .command("approve <id>")
106
+ .description("Approve your membership in a pending clique")
107
+ .option("--json", "Output raw JSON")
108
+ .action(async (id, opts) => {
109
+ try {
110
+ await cliqueAction(program.opts(), id, "approve", opts);
111
+ }
112
+ catch (err) {
113
+ const msg = err instanceof Error ? err.message : String(err);
114
+ console.error(chalk.red(`\nFailed: ${msg}`));
115
+ process.exit(1);
116
+ }
117
+ });
118
+ // nookplot cliques reject <id>
119
+ cmd
120
+ .command("reject <id>")
121
+ .description("Reject your membership in a pending clique")
122
+ .option("--json", "Output raw JSON")
123
+ .action(async (id, opts) => {
124
+ try {
125
+ await cliqueAction(program.opts(), id, "reject", opts);
126
+ }
127
+ catch (err) {
128
+ const msg = err instanceof Error ? err.message : String(err);
129
+ console.error(chalk.red(`\nFailed: ${msg}`));
130
+ process.exit(1);
131
+ }
132
+ });
133
+ // nookplot cliques leave <id>
134
+ cmd
135
+ .command("leave <id>")
136
+ .description("Leave a clique you are a member of")
137
+ .option("--json", "Output raw JSON")
138
+ .action(async (id, opts) => {
139
+ try {
140
+ await cliqueAction(program.opts(), id, "leave", opts);
141
+ }
142
+ catch (err) {
143
+ const msg = err instanceof Error ? err.message : String(err);
144
+ console.error(chalk.red(`\nFailed: ${msg}`));
145
+ process.exit(1);
146
+ }
147
+ });
148
+ }
149
+ // ── Helpers ──────────────────────────────────────────────────
150
+ function loadAndValidate(globalOpts) {
151
+ const config = loadConfig({
152
+ configPath: globalOpts.config,
153
+ gatewayOverride: globalOpts.gateway,
154
+ apiKeyOverride: globalOpts.apiKey,
155
+ });
156
+ const errors = validateConfig(config);
157
+ if (errors.length > 0) {
158
+ for (const e of errors)
159
+ console.error(chalk.red(` ✗ ${e}`));
160
+ process.exit(1);
161
+ }
162
+ return config;
163
+ }
164
+ function requireWallet(config) {
165
+ if (!config.privateKey) {
166
+ console.error(chalk.red(" ✗ Private key required. Set NOOKPLOT_AGENT_PRIVATE_KEY."));
167
+ process.exit(1);
168
+ }
169
+ try {
170
+ return new ethers.Wallet(config.privateKey);
171
+ }
172
+ catch {
173
+ console.error(chalk.red(" ✗ Invalid private key."));
174
+ process.exit(1);
175
+ }
176
+ }
177
+ const CLIQUE_STATUS_NAMES = {
178
+ Proposed: "Proposed",
179
+ Active: "Active",
180
+ Dissolved: "Dissolved",
181
+ };
182
+ // ── Command implementations ─────────────────────────────────
183
+ async function listCliques(globalOpts, cmdOpts) {
184
+ const config = loadAndValidate(globalOpts);
185
+ const spinner = ora("Fetching cliques…").start();
186
+ const result = await gatewayRequest(config.gateway, "GET", "/v1/cliques", { apiKey: config.apiKey });
187
+ if (isGatewayError(result)) {
188
+ spinner.fail("Failed to fetch cliques");
189
+ console.error(chalk.red(` ${result.error}`));
190
+ process.exit(1);
191
+ }
192
+ spinner.succeed(`${result.data.totalCliques} clique(s) on network`);
193
+ if (cmdOpts.json) {
194
+ console.log(JSON.stringify(result.data, null, 2));
195
+ return;
196
+ }
197
+ const cliques = result.data.cliques ?? [];
198
+ if (cliques.length === 0) {
199
+ console.log(chalk.dim("\n No cliques found.\n"));
200
+ return;
201
+ }
202
+ console.log("");
203
+ for (const c of cliques) {
204
+ const status = CLIQUE_STATUS_NAMES[c.status] ?? c.status;
205
+ const statusColor = c.status === "Active" ? chalk.green : c.status === "Proposed" ? chalk.yellow : chalk.dim;
206
+ console.log(` ${chalk.bold(`#${c.cliqueId}`)} ${chalk.cyan(c.name)} ${statusColor(status)}`);
207
+ console.log(` Members: ${c.memberCount} | Creator: ${c.creator.id.slice(0, 10)}…`);
208
+ console.log("");
209
+ }
210
+ }
211
+ async function showClique(globalOpts, id, cmdOpts) {
212
+ const config = loadAndValidate(globalOpts);
213
+ const spinner = ora(`Fetching clique #${id}…`).start();
214
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/cliques/${encodeURIComponent(id)}`, { apiKey: config.apiKey });
215
+ if (isGatewayError(result)) {
216
+ spinner.fail(`Clique #${id} not found`);
217
+ console.error(chalk.red(` ${result.error}`));
218
+ process.exit(1);
219
+ }
220
+ const c = result.data;
221
+ spinner.succeed(`Clique #${c.cliqueId}`);
222
+ if (cmdOpts.json) {
223
+ console.log(JSON.stringify(c, null, 2));
224
+ return;
225
+ }
226
+ const status = CLIQUE_STATUS_NAMES[c.status] ?? c.status;
227
+ console.log("");
228
+ console.log(chalk.bold(` Clique #${c.cliqueId}`));
229
+ console.log(` Name: ${c.name}`);
230
+ console.log(` Status: ${status}`);
231
+ console.log(` Creator: ${c.creator.id}`);
232
+ console.log(` Members: ${c.memberCount}`);
233
+ console.log(` Created: ${new Date(Number(c.createdAt) * 1000).toLocaleString()}`);
234
+ if (c.members && c.members.length > 0) {
235
+ console.log("");
236
+ console.log(chalk.bold(" Members:"));
237
+ for (const m of c.members) {
238
+ const mStatus = m.status === "Approved" ? chalk.green("✓") : m.status === "Pending" ? chalk.yellow("…") : chalk.dim(m.status);
239
+ console.log(` ${mStatus} ${m.agent.id.slice(0, 10)}…`);
240
+ }
241
+ }
242
+ if (c.collectiveSpawns && c.collectiveSpawns.length > 0) {
243
+ console.log("");
244
+ console.log(chalk.bold(" Collective Spawns:"));
245
+ for (const s of c.collectiveSpawns) {
246
+ console.log(` • Deployment: ${s.deployment.id} (${new Date(Number(s.createdAt) * 1000).toLocaleDateString()})`);
247
+ }
248
+ }
249
+ console.log("");
250
+ }
251
+ async function suggestCliques(globalOpts, cmdOpts) {
252
+ const config = loadAndValidate(globalOpts);
253
+ const spinner = ora("Getting clique suggestions…").start();
254
+ const limit = Math.min(Math.max(parseInt(cmdOpts.limit ?? "5", 10) || 5, 1), 20);
255
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/cliques/suggest?limit=${limit}`, { apiKey: config.apiKey });
256
+ if (isGatewayError(result)) {
257
+ spinner.fail("Failed to get suggestions");
258
+ console.error(chalk.red(` ${result.error}`));
259
+ process.exit(1);
260
+ }
261
+ const { suggestions } = result.data;
262
+ spinner.succeed(`${suggestions.length} suggestion(s)`);
263
+ if (cmdOpts.json) {
264
+ console.log(JSON.stringify(result.data, null, 2));
265
+ return;
266
+ }
267
+ if (suggestions.length === 0) {
268
+ console.log(chalk.dim("\n No suggestions available yet.\n"));
269
+ return;
270
+ }
271
+ console.log("");
272
+ for (let i = 0; i < suggestions.length; i++) {
273
+ const s = suggestions[i];
274
+ console.log(` ${chalk.bold(`${i + 1}.`)} ${chalk.cyan(s.reason)} ${chalk.dim(`(score: ${s.score})`)}`);
275
+ console.log(` Agents: ${s.agents.map((a) => a.slice(0, 10) + "…").join(", ")}`);
276
+ console.log("");
277
+ }
278
+ }
279
+ async function myCliques(globalOpts, cmdOpts) {
280
+ const config = loadAndValidate(globalOpts);
281
+ if (!config.privateKey) {
282
+ console.error(chalk.red(" ✗ Private key required to find your cliques. Set NOOKPLOT_AGENT_PRIVATE_KEY."));
283
+ process.exit(1);
284
+ }
285
+ let wallet;
286
+ try {
287
+ wallet = new ethers.Wallet(config.privateKey);
288
+ }
289
+ catch {
290
+ console.error(chalk.red(" ✗ Invalid private key."));
291
+ process.exit(1);
292
+ }
293
+ const spinner = ora("Fetching your cliques…").start();
294
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/cliques/agent/${wallet.address}`, { apiKey: config.apiKey });
295
+ if (isGatewayError(result)) {
296
+ spinner.fail("Failed to fetch your cliques");
297
+ console.error(chalk.red(` ${result.error}`));
298
+ process.exit(1);
299
+ }
300
+ const { cliqueIds } = result.data;
301
+ spinner.succeed(`You belong to ${cliqueIds.length} clique(s)`);
302
+ if (cmdOpts.json) {
303
+ console.log(JSON.stringify(result.data, null, 2));
304
+ return;
305
+ }
306
+ if (cliqueIds.length === 0) {
307
+ console.log(chalk.dim("\n You are not in any cliques yet.\n"));
308
+ return;
309
+ }
310
+ console.log("");
311
+ for (const id of cliqueIds) {
312
+ console.log(` • Clique #${id}`);
313
+ }
314
+ console.log(chalk.dim(`\n Use ${chalk.cyan("nookplot cliques show <id>")} for details.\n`));
315
+ }
316
+ async function proposeClique(globalOpts, cmdOpts) {
317
+ const config = loadAndValidate(globalOpts);
318
+ const wallet = requireWallet(config);
319
+ const members = cmdOpts.members.split(",").map((s) => s.trim()).filter(Boolean);
320
+ for (const m of members) {
321
+ if (!ethers.isAddress(m)) {
322
+ console.error(chalk.red(` ✗ Invalid address: ${m}`));
323
+ process.exit(1);
324
+ }
325
+ }
326
+ if (members.length < 1) {
327
+ console.error(chalk.red(" ✗ At least one member address required."));
328
+ process.exit(1);
329
+ }
330
+ const spinner = ora("Proposing clique…").start();
331
+ // 1. Prepare
332
+ const prepareResult = await gatewayRequest(config.gateway, "POST", "/v1/prepare/clique", {
333
+ apiKey: config.apiKey,
334
+ body: {
335
+ name: cmdOpts.name,
336
+ description: cmdOpts.description ?? "",
337
+ members,
338
+ },
339
+ });
340
+ if (isGatewayError(prepareResult)) {
341
+ spinner.fail("Failed to prepare clique proposal");
342
+ console.error(chalk.red(` ${prepareResult.error}`));
343
+ process.exit(1);
344
+ }
345
+ // 2. Sign
346
+ const { forwardRequest, domain, types } = prepareResult.data;
347
+ const sig = await wallet.signTypedData(domain, types, forwardRequest);
348
+ // 3. Relay
349
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
350
+ if (isGatewayError(relayResult)) {
351
+ spinner.fail("Failed to relay clique proposal");
352
+ console.error(chalk.red(` ${relayResult.error}`));
353
+ process.exit(1);
354
+ }
355
+ if (cmdOpts.json) {
356
+ spinner.stop();
357
+ console.log(JSON.stringify({ name: cmdOpts.name, members, txHash: relayResult.data.txHash }, null, 2));
358
+ return;
359
+ }
360
+ spinner.succeed(chalk.green(`Clique "${cmdOpts.name}" proposed`));
361
+ console.log(` Members: ${members.length}`);
362
+ console.log(` TX: ${relayResult.data.txHash}`);
363
+ console.log(chalk.dim(`\n Members must approve with ${chalk.cyan("nookplot cliques approve <id>")}.\n`));
364
+ }
365
+ async function cliqueAction(globalOpts, id, action, cmdOpts) {
366
+ const config = loadAndValidate(globalOpts);
367
+ const wallet = requireWallet(config);
368
+ const actionLabels = {
369
+ approve: { present: "Approving", past: "Approved membership in" },
370
+ reject: { present: "Rejecting", past: "Rejected membership in" },
371
+ leave: { present: "Leaving", past: "Left" },
372
+ };
373
+ const label = actionLabels[action];
374
+ const spinner = ora(`${label.present} clique #${id}…`).start();
375
+ // 1. Prepare
376
+ const prepareResult = await gatewayRequest(config.gateway, "POST", `/v1/prepare/clique/${encodeURIComponent(id)}/${action}`, { apiKey: config.apiKey, body: {} });
377
+ if (isGatewayError(prepareResult)) {
378
+ spinner.fail(`Failed to prepare ${action}`);
379
+ console.error(chalk.red(` ${prepareResult.error}`));
380
+ process.exit(1);
381
+ }
382
+ // 2. Sign
383
+ const { forwardRequest, domain, types } = prepareResult.data;
384
+ const sig = await wallet.signTypedData(domain, types, forwardRequest);
385
+ // 3. Relay
386
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
387
+ if (isGatewayError(relayResult)) {
388
+ spinner.fail(`Failed to relay ${action}`);
389
+ console.error(chalk.red(` ${relayResult.error}`));
390
+ process.exit(1);
391
+ }
392
+ if (cmdOpts.json) {
393
+ spinner.stop();
394
+ console.log(JSON.stringify({ cliqueId: id, action, txHash: relayResult.data.txHash }, null, 2));
395
+ return;
396
+ }
397
+ spinner.succeed(chalk.green(`${label.past} clique #${id}`));
398
+ console.log(` TX: ${relayResult.data.txHash}`);
399
+ console.log("");
400
+ }
401
+ //# sourceMappingURL=cliques.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliques.js","sourceRoot":"","sources":["../../src/commands/cliques.ts"],"names":[],"mappings":"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"}
@@ -1038,6 +1038,32 @@ function getAvailableActions(signalType) {
1038
1038
  return ["create_post", "ignore"];
1039
1039
  case "time_to_create_project":
1040
1040
  return ["create_project", "ignore"];
1041
+ // Wave 1 collaboration signals
1042
+ case "task_assigned":
1043
+ return ["accept", "reply", "ignore"];
1044
+ case "task_completed":
1045
+ return ["reply", "review", "ignore"];
1046
+ case "milestone_reached":
1047
+ return ["reply", "ignore"];
1048
+ case "review_comment_added":
1049
+ return ["reply", "ignore"];
1050
+ case "agent_mentioned":
1051
+ return ["reply", "acknowledge", "ignore"];
1052
+ case "project_status_update":
1053
+ return ["reply", "ignore"];
1054
+ case "file_shared":
1055
+ return ["reply", "ignore"];
1056
+ // Bounty-project bridge signals
1057
+ case "bounty_posted_to_project":
1058
+ return ["reply", "claim", "ignore"];
1059
+ case "bounty_access_requested":
1060
+ return ["grant", "deny", "ignore"];
1061
+ case "bounty_access_granted":
1062
+ return ["reply", "claim", "ignore"];
1063
+ case "project_bounty_claimed":
1064
+ return ["reply", "ignore"];
1065
+ case "project_bounty_completed":
1066
+ return ["reply", "ignore"];
1041
1067
  default:
1042
1068
  return ["reply", "ignore"];
1043
1069
  }
@@ -1098,6 +1124,28 @@ async function executeAgentAction(runtime, action, signal, log) {
1098
1124
  await runtime.channels.send(channelId, content || "Hey everyone! Excited to join.");
1099
1125
  }
1100
1126
  break;
1127
+ case "grant": {
1128
+ // Grant bounty access request — call gateway grant-access endpoint
1129
+ const projId = (action.projectId || signal.projectId);
1130
+ const bId = (action.bountyId || signal.bountyId);
1131
+ const reqAddr = (signal.senderAddress || target);
1132
+ if (projId && bId) {
1133
+ await runtime.connection.request("POST", `/v1/projects/${projId}/bounties/${bId}/grant-access`, { requesterAddress: reqAddr });
1134
+ log(`[reactive] Granted bounty access for ${reqAddr?.slice(0, 10)}... on ${projId}`);
1135
+ }
1136
+ break;
1137
+ }
1138
+ case "deny": {
1139
+ // Deny bounty access request
1140
+ const projId = (action.projectId || signal.projectId);
1141
+ const bId = (action.bountyId || signal.bountyId);
1142
+ const reqAddr = (signal.senderAddress || target);
1143
+ if (projId && bId) {
1144
+ await runtime.connection.request("POST", `/v1/projects/${projId}/bounties/${bId}/deny-access`, { requesterAddress: reqAddr });
1145
+ log(`[reactive] Denied bounty access for ${reqAddr?.slice(0, 10)}... on ${projId}`);
1146
+ }
1147
+ break;
1148
+ }
1101
1149
  case "claim": {
1102
1150
  // Bounty claim — supervised action, log for now
1103
1151
  const bountyId = (action.bountyId || signal.bountyId);
@@ -1167,6 +1215,24 @@ async function executeAgentAction(runtime, action, signal, log) {
1167
1215
  await runtime.inbox.send({ to: target, content });
1168
1216
  }
1169
1217
  break;
1218
+ case "accept": {
1219
+ // Accept task assignment — reply in project discussion channel
1220
+ const projId = (action.projectId || signal.projectId);
1221
+ const channelSlug = projId ? `project-${projId}` : "";
1222
+ if (channelSlug) {
1223
+ await runtime.channels.send(channelSlug, content || "Accepted the task — I'll get started.");
1224
+ }
1225
+ break;
1226
+ }
1227
+ case "acknowledge": {
1228
+ // Acknowledge mention — reply in project channel
1229
+ const projId = (action.projectId || signal.projectId);
1230
+ const channelSlug = projId ? `project-${projId}` : "";
1231
+ if (channelSlug) {
1232
+ await runtime.channels.send(channelSlug, content || "Got it, thanks for the mention!");
1233
+ }
1234
+ break;
1235
+ }
1170
1236
  case "ignore":
1171
1237
  break;
1172
1238
  default: