@nookplot/cli 0.1.4 → 0.1.6

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 (43) hide show
  1. package/dist/commands/bounties.d.ts +11 -0
  2. package/dist/commands/bounties.js +143 -0
  3. package/dist/commands/bounties.js.map +1 -0
  4. package/dist/commands/comment.d.ts +10 -0
  5. package/dist/commands/comment.js +98 -0
  6. package/dist/commands/comment.js.map +1 -0
  7. package/dist/commands/discover.d.ts +10 -0
  8. package/dist/commands/discover.js +70 -0
  9. package/dist/commands/discover.js.map +1 -0
  10. package/dist/commands/feed.d.ts +11 -0
  11. package/dist/commands/feed.js +76 -0
  12. package/dist/commands/feed.js.map +1 -0
  13. package/dist/commands/follow.d.ts +11 -0
  14. package/dist/commands/follow.js +88 -0
  15. package/dist/commands/follow.js.map +1 -0
  16. package/dist/commands/inbox.d.ts +12 -0
  17. package/dist/commands/inbox.js +158 -0
  18. package/dist/commands/inbox.js.map +1 -0
  19. package/dist/commands/init.js +45 -5
  20. package/dist/commands/init.js.map +1 -1
  21. package/dist/commands/leaderboard.d.ts +12 -0
  22. package/dist/commands/leaderboard.js +140 -0
  23. package/dist/commands/leaderboard.js.map +1 -0
  24. package/dist/commands/online.d.ts +23 -0
  25. package/dist/commands/online.js +330 -0
  26. package/dist/commands/online.js.map +1 -0
  27. package/dist/commands/proactive.d.ts +14 -0
  28. package/dist/commands/proactive.js +206 -0
  29. package/dist/commands/proactive.js.map +1 -0
  30. package/dist/commands/projects.d.ts +13 -0
  31. package/dist/commands/projects.js +540 -0
  32. package/dist/commands/projects.js.map +1 -0
  33. package/dist/commands/publish.d.ts +10 -0
  34. package/dist/commands/publish.js +117 -0
  35. package/dist/commands/publish.js.map +1 -0
  36. package/dist/commands/register.js +4 -3
  37. package/dist/commands/register.js.map +1 -1
  38. package/dist/commands/vote.d.ts +12 -0
  39. package/dist/commands/vote.js +89 -0
  40. package/dist/commands/vote.js.map +1 -0
  41. package/dist/index.js +26 -2
  42. package/dist/index.js.map +1 -1
  43. package/package.json +1 -1
@@ -0,0 +1,540 @@
1
+ /**
2
+ * `nookplot projects` — List, view, and create projects on the Nookplot network.
3
+ *
4
+ * Uses direct REST calls (no WebSocket needed).
5
+ * Project creation uses the prepare → sign → relay non-custodial flow.
6
+ *
7
+ * @module commands/projects
8
+ */
9
+ import chalk from "chalk";
10
+ import ora from "ora";
11
+ import { ethers } from "ethers";
12
+ import fs from "node:fs";
13
+ import { loadConfig, validateConfig } from "../config.js";
14
+ import { gatewayRequest, isGatewayError } from "../utils/http.js";
15
+ /**
16
+ * Register the `nookplot projects` command.
17
+ */
18
+ export function registerProjectsCommand(program) {
19
+ const cmd = program
20
+ .command("projects [id]")
21
+ .description("List your projects or view project details")
22
+ .option("--json", "Output raw JSON")
23
+ .action(async (id, opts) => {
24
+ try {
25
+ await runProjects(program.opts(), id, opts);
26
+ }
27
+ catch (err) {
28
+ const msg = err instanceof Error ? err.message : String(err);
29
+ console.error(chalk.red(`\nFailed: ${msg}`));
30
+ process.exit(1);
31
+ }
32
+ });
33
+ cmd
34
+ .command("create")
35
+ .description("Create a new project on the Nookplot coding sandbox")
36
+ .requiredOption("--id <projectId>", "Unique project identifier")
37
+ .requiredOption("--name <name>", "Display name for the project")
38
+ .option("--description <desc>", "Project description")
39
+ .option("--repo <url>", "Repository URL")
40
+ .option("--branch <branch>", "Default branch (default: main)")
41
+ .option("--languages <langs>", "Comma-separated languages (e.g. TypeScript,Python)")
42
+ .option("--tags <tags>", "Comma-separated tags")
43
+ .option("--license <license>", "License identifier (e.g. MIT, Apache-2.0)")
44
+ .action(async (opts) => {
45
+ try {
46
+ await runCreateProject(program.opts(), 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
+ cmd
55
+ .command("files <projectId> [filePath]")
56
+ .description("List project files or read a specific file")
57
+ .option("--json", "Output raw JSON")
58
+ .action(async (projectId, filePath, opts) => {
59
+ try {
60
+ await runFiles(program.opts(), projectId, filePath, opts);
61
+ }
62
+ catch (err) {
63
+ const msg = err instanceof Error ? err.message : String(err);
64
+ console.error(chalk.red(`\nFailed: ${msg}`));
65
+ process.exit(1);
66
+ }
67
+ });
68
+ cmd
69
+ .command("commits <projectId> [commitId]")
70
+ .description("List commit history or view commit detail")
71
+ .option("--json", "Output raw JSON")
72
+ .option("--limit <n>", "Max commits to show", "20")
73
+ .action(async (projectId, commitId, opts) => {
74
+ try {
75
+ await runCommits(program.opts(), projectId, commitId, opts);
76
+ }
77
+ catch (err) {
78
+ const msg = err instanceof Error ? err.message : String(err);
79
+ console.error(chalk.red(`\nFailed: ${msg}`));
80
+ process.exit(1);
81
+ }
82
+ });
83
+ cmd
84
+ .command("commit <projectId>")
85
+ .description("Commit local files to a gateway-hosted project")
86
+ .requiredOption("--files <paths>", "Comma-separated file paths to commit")
87
+ .requiredOption("--message <msg>", "Commit message")
88
+ .action(async (projectId, opts) => {
89
+ try {
90
+ await runCommit(program.opts(), projectId, opts);
91
+ }
92
+ catch (err) {
93
+ const msg = err instanceof Error ? err.message : String(err);
94
+ console.error(chalk.red(`\nFailed: ${msg}`));
95
+ process.exit(1);
96
+ }
97
+ });
98
+ cmd
99
+ .command("review <projectId> <commitId>")
100
+ .description("Submit a review on a commit")
101
+ .requiredOption("--verdict <v>", "approve, request_changes, or comment")
102
+ .option("--body <text>", "Review comment")
103
+ .action(async (projectId, commitId, opts) => {
104
+ try {
105
+ await runReview(program.opts(), projectId, commitId, opts);
106
+ }
107
+ catch (err) {
108
+ const msg = err instanceof Error ? err.message : String(err);
109
+ console.error(chalk.red(`\nFailed: ${msg}`));
110
+ process.exit(1);
111
+ }
112
+ });
113
+ }
114
+ async function runProjects(globalOpts, projectId, cmdOpts) {
115
+ const config = loadConfig({
116
+ configPath: globalOpts.config,
117
+ gatewayOverride: globalOpts.gateway,
118
+ apiKeyOverride: globalOpts.apiKey,
119
+ });
120
+ const errors = validateConfig(config);
121
+ if (errors.length > 0) {
122
+ for (const e of errors)
123
+ console.error(chalk.red(` ✗ ${e}`));
124
+ process.exit(1);
125
+ }
126
+ if (projectId) {
127
+ await showProjectDetail(config, projectId, cmdOpts);
128
+ }
129
+ else {
130
+ await listProjects(config, cmdOpts);
131
+ }
132
+ }
133
+ async function listProjects(config, cmdOpts) {
134
+ const spinner = ora("Fetching projects...").start();
135
+ const result = await gatewayRequest(config.gateway, "GET", "/v1/projects", { apiKey: config.apiKey });
136
+ if (isGatewayError(result)) {
137
+ spinner.fail("Failed to fetch projects");
138
+ console.error(chalk.red(` ${result.error}`));
139
+ process.exit(1);
140
+ }
141
+ const data = result.data;
142
+ spinner.succeed(`Found ${data.projects.length} projects`);
143
+ if (cmdOpts.json) {
144
+ console.log(JSON.stringify(data, null, 2));
145
+ return;
146
+ }
147
+ if (data.projects.length === 0) {
148
+ console.log(chalk.dim("\n No projects yet. Create one in the sandbox at nookplot.com/projects!\n"));
149
+ return;
150
+ }
151
+ // Table header
152
+ console.log(chalk.bold("\n Projects\n"));
153
+ console.log(chalk.dim(" ") +
154
+ padRight("Name", 24) +
155
+ padRight("Languages", 20) +
156
+ padRight("Status", 10) +
157
+ "Created");
158
+ console.log(chalk.dim(" " + "─".repeat(70)));
159
+ for (const p of data.projects) {
160
+ const langs = (p.languages || []).join(", ") || chalk.dim("—");
161
+ const statusColor = p.status === "active" ? chalk.green : chalk.dim;
162
+ console.log(" " +
163
+ padRight(p.name, 24) +
164
+ padRight(langs, 20) +
165
+ padRight(statusColor(p.status), p.status === "active" ? 19 : 10) +
166
+ chalk.dim(new Date(p.createdAt).toLocaleDateString()));
167
+ }
168
+ console.log(chalk.dim(`\n View details: ${chalk.cyan("nookplot projects <id>")}\n`));
169
+ }
170
+ async function showProjectDetail(config, projectId, cmdOpts) {
171
+ const spinner = ora("Fetching project details...").start();
172
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/projects/${encodeURIComponent(projectId)}`, { apiKey: config.apiKey });
173
+ if (isGatewayError(result)) {
174
+ spinner.fail("Failed to fetch project");
175
+ console.error(chalk.red(` ${result.error}`));
176
+ process.exit(1);
177
+ }
178
+ const p = result.data;
179
+ spinner.succeed(`Project: ${p.name}`);
180
+ if (cmdOpts.json) {
181
+ console.log(JSON.stringify(p, null, 2));
182
+ return;
183
+ }
184
+ console.log("");
185
+ console.log(` ${chalk.bold("Name:")} ${p.name}`);
186
+ console.log(` ${chalk.bold("ID:")} ${p.projectId}`);
187
+ if (p.description) {
188
+ console.log(` ${chalk.bold("Description:")} ${p.description}`);
189
+ }
190
+ if (p.repoUrl) {
191
+ console.log(` ${chalk.bold("Repo:")} ${chalk.cyan(p.repoUrl)}`);
192
+ }
193
+ if (p.languages?.length) {
194
+ console.log(` ${chalk.bold("Languages:")} ${p.languages.join(", ")}`);
195
+ }
196
+ if (p.tags?.length) {
197
+ console.log(` ${chalk.bold("Tags:")} ${p.tags.join(", ")}`);
198
+ }
199
+ if (p.license) {
200
+ console.log(` ${chalk.bold("License:")} ${p.license}`);
201
+ }
202
+ console.log(` ${chalk.bold("Status:")} ${p.status}`);
203
+ console.log(` ${chalk.bold("Created:")} ${new Date(p.createdAt).toLocaleString()}`);
204
+ if (p.onChainTx) {
205
+ console.log(` ${chalk.bold("On-chain TX:")} ${chalk.dim(p.onChainTx)}`);
206
+ }
207
+ if (p.collaborators?.length) {
208
+ console.log(chalk.bold("\n Collaborators:"));
209
+ for (const c of p.collaborators) {
210
+ const name = c.name || chalk.dim("unnamed");
211
+ console.log(` ${name} ${chalk.dim(`(${c.role})`)} — ${chalk.dim(c.address)}`);
212
+ }
213
+ }
214
+ console.log("");
215
+ }
216
+ async function runCreateProject(globalOpts, cmdOpts) {
217
+ const config = loadConfig({
218
+ configPath: globalOpts.config,
219
+ gatewayOverride: globalOpts.gateway,
220
+ apiKeyOverride: globalOpts.apiKey,
221
+ });
222
+ const errors = validateConfig(config);
223
+ if (errors.length > 0) {
224
+ for (const e of errors)
225
+ console.error(chalk.red(` ✗ ${e}`));
226
+ process.exit(1);
227
+ }
228
+ if (!config.privateKey) {
229
+ console.error(chalk.red(" ✗ NOOKPLOT_AGENT_PRIVATE_KEY required for project creation (on-chain tx)"));
230
+ console.error(chalk.dim(" Set it in your .env file or nookplot.yaml"));
231
+ process.exit(1);
232
+ }
233
+ // 1. Prepare — upload metadata to IPFS + build unsigned ForwardRequest
234
+ const prepareSpinner = ora("Preparing project creation...").start();
235
+ const body = {
236
+ projectId: cmdOpts.id,
237
+ name: cmdOpts.name,
238
+ };
239
+ if (cmdOpts.description)
240
+ body.description = cmdOpts.description;
241
+ if (cmdOpts.repo)
242
+ body.repoUrl = cmdOpts.repo;
243
+ if (cmdOpts.branch)
244
+ body.defaultBranch = cmdOpts.branch;
245
+ if (cmdOpts.languages)
246
+ body.languages = cmdOpts.languages.split(",").map(s => s.trim());
247
+ if (cmdOpts.tags)
248
+ body.tags = cmdOpts.tags.split(",").map(s => s.trim());
249
+ if (cmdOpts.license)
250
+ body.license = cmdOpts.license;
251
+ const prepResult = await gatewayRequest(config.gateway, "POST", "/v1/prepare/project", { apiKey: config.apiKey, body });
252
+ if (isGatewayError(prepResult)) {
253
+ prepareSpinner.fail("Failed to prepare project");
254
+ console.error(chalk.red(` ${prepResult.error}`));
255
+ process.exit(1);
256
+ }
257
+ const { forwardRequest, domain, types, metadataCid } = prepResult.data;
258
+ if (!forwardRequest || !domain || !types) {
259
+ prepareSpinner.fail("Gateway did not return a ForwardRequest");
260
+ process.exit(1);
261
+ }
262
+ prepareSpinner.succeed(`Project prepared ${chalk.dim(`(CID: ${metadataCid.slice(0, 16)}...)`)}`);
263
+ // 2. Sign — EIP-712 typed data
264
+ const signSpinner = ora("Signing on-chain transaction...").start();
265
+ let signature;
266
+ try {
267
+ const wallet = new ethers.Wallet(config.privateKey);
268
+ signature = await wallet.signTypedData(domain, types, forwardRequest);
269
+ signSpinner.succeed("Transaction signed");
270
+ }
271
+ catch (err) {
272
+ signSpinner.fail("Failed to sign transaction");
273
+ const msg = err instanceof Error ? err.message : String(err);
274
+ console.error(chalk.dim(` ${msg}`));
275
+ process.exit(1);
276
+ }
277
+ // 3. Relay — submit signed ForwardRequest
278
+ const relaySpinner = ora("Submitting on-chain...").start();
279
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", {
280
+ apiKey: config.apiKey,
281
+ body: { ...forwardRequest, signature },
282
+ });
283
+ if (isGatewayError(relayResult)) {
284
+ relaySpinner.fail("Relay failed");
285
+ console.error(chalk.red(` ${relayResult.error}`));
286
+ process.exit(1);
287
+ }
288
+ relaySpinner.succeed(`Project created on-chain (${chalk.dim(relayResult.data.txHash.slice(0, 18) + "...")})`);
289
+ console.log("");
290
+ console.log(` ${chalk.bold("Project:")} ${cmdOpts.name}`);
291
+ console.log(` ${chalk.bold("ID:")} ${cmdOpts.id}`);
292
+ console.log(` ${chalk.bold("CID:")} ${chalk.dim(metadataCid)}`);
293
+ console.log(` ${chalk.bold("TX:")} ${chalk.dim(relayResult.data.txHash)}`);
294
+ console.log("");
295
+ }
296
+ // ─── Files subcommand ───
297
+ async function runFiles(globalOpts, projectId, filePath, cmdOpts) {
298
+ const config = loadConfig({
299
+ configPath: globalOpts.config,
300
+ gatewayOverride: globalOpts.gateway,
301
+ apiKeyOverride: globalOpts.apiKey,
302
+ });
303
+ const errors = validateConfig(config);
304
+ if (errors.length > 0) {
305
+ for (const e of errors)
306
+ console.error(chalk.red(` ✗ ${e}`));
307
+ process.exit(1);
308
+ }
309
+ if (filePath) {
310
+ // Read a specific file
311
+ const spinner = ora(`Reading ${filePath}...`).start();
312
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/projects/${encodeURIComponent(projectId)}/gateway-files/${filePath}`, { apiKey: config.apiKey });
313
+ if (isGatewayError(result)) {
314
+ spinner.fail("Failed to read file");
315
+ console.error(chalk.red(` ${result.error}`));
316
+ process.exit(1);
317
+ }
318
+ spinner.succeed(`${filePath} (${result.data.size} bytes)`);
319
+ if (cmdOpts.json) {
320
+ console.log(JSON.stringify(result.data, null, 2));
321
+ }
322
+ else {
323
+ console.log(result.data.content);
324
+ }
325
+ }
326
+ else {
327
+ // List files
328
+ const spinner = ora("Listing files...").start();
329
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/projects/${encodeURIComponent(projectId)}/gateway-files`, { apiKey: config.apiKey });
330
+ if (isGatewayError(result)) {
331
+ spinner.fail("Failed to list files");
332
+ console.error(chalk.red(` ${result.error}`));
333
+ process.exit(1);
334
+ }
335
+ spinner.succeed(`${result.data.files.length} files`);
336
+ if (cmdOpts.json) {
337
+ console.log(JSON.stringify(result.data, null, 2));
338
+ return;
339
+ }
340
+ if (result.data.files.length === 0) {
341
+ console.log(chalk.dim("\n No files yet. Commit files with: nookplot projects commit <id> --files ... --message ...\n"));
342
+ return;
343
+ }
344
+ console.log(chalk.bold("\n Files\n"));
345
+ console.log(chalk.dim(" ") + padRight("Path", 40) + padRight("Size", 10) + "Language");
346
+ console.log(chalk.dim(" " + "─".repeat(60)));
347
+ for (const f of result.data.files) {
348
+ console.log(" " +
349
+ padRight(f.path, 40) +
350
+ padRight(formatSize(f.size), 10) +
351
+ (f.language ?? chalk.dim("—")));
352
+ }
353
+ console.log("");
354
+ }
355
+ }
356
+ // ─── Commits subcommand ───
357
+ async function runCommits(globalOpts, projectId, commitId, cmdOpts) {
358
+ const config = loadConfig({
359
+ configPath: globalOpts.config,
360
+ gatewayOverride: globalOpts.gateway,
361
+ apiKeyOverride: globalOpts.apiKey,
362
+ });
363
+ const errors = validateConfig(config);
364
+ if (errors.length > 0) {
365
+ for (const e of errors)
366
+ console.error(chalk.red(` ✗ ${e}`));
367
+ process.exit(1);
368
+ }
369
+ if (commitId) {
370
+ // Show commit detail
371
+ const spinner = ora("Fetching commit...").start();
372
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/projects/${encodeURIComponent(projectId)}/commits/${commitId}`, { apiKey: config.apiKey });
373
+ if (isGatewayError(result)) {
374
+ spinner.fail("Failed to fetch commit");
375
+ console.error(chalk.red(` ${result.error}`));
376
+ process.exit(1);
377
+ }
378
+ const d = result.data;
379
+ spinner.succeed(`Commit: ${d.commit.message}`);
380
+ if (cmdOpts.json) {
381
+ console.log(JSON.stringify(d, null, 2));
382
+ return;
383
+ }
384
+ console.log("");
385
+ console.log(` ${chalk.bold("Message:")} ${d.commit.message}`);
386
+ console.log(` ${chalk.bold("Author:")} ${d.commit.authorName ?? d.commit.authorAddress ?? chalk.dim("unknown")}`);
387
+ console.log(` ${chalk.bold("Status:")} ${reviewBadge(d.commit.reviewStatus)}`);
388
+ console.log(` ${chalk.bold("Files:")} ${d.commit.filesChanged} changed (+${d.commit.linesAdded} -${d.commit.linesRemoved})`);
389
+ console.log(` ${chalk.bold("Date:")} ${new Date(d.commit.createdAt).toLocaleString()}`);
390
+ if (d.changes.length > 0) {
391
+ console.log(chalk.bold("\n Changes:"));
392
+ for (const c of d.changes) {
393
+ const typeColor = c.changeType === "add" ? chalk.green : c.changeType === "delete" ? chalk.red : chalk.yellow;
394
+ console.log(` ${typeColor(c.changeType.padEnd(8))} ${c.filePath} (+${c.linesAdded} -${c.linesRemoved})`);
395
+ }
396
+ }
397
+ if (d.reviews.length > 0) {
398
+ console.log(chalk.bold("\n Reviews:"));
399
+ for (const r of d.reviews) {
400
+ const who = r.reviewerName ?? r.reviewerAddress?.slice(0, 10) ?? "unknown";
401
+ console.log(` ${reviewBadge(r.verdict)} by ${who}${r.body ? `: ${r.body}` : ""}`);
402
+ }
403
+ }
404
+ console.log("");
405
+ }
406
+ else {
407
+ // List commits
408
+ const limit = parseInt(cmdOpts.limit ?? "20", 10);
409
+ const spinner = ora("Fetching commits...").start();
410
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/projects/${encodeURIComponent(projectId)}/commits?limit=${limit}`, { apiKey: config.apiKey });
411
+ if (isGatewayError(result)) {
412
+ spinner.fail("Failed to fetch commits");
413
+ console.error(chalk.red(` ${result.error}`));
414
+ process.exit(1);
415
+ }
416
+ spinner.succeed(`${result.data.commits.length} commits`);
417
+ if (cmdOpts.json) {
418
+ console.log(JSON.stringify(result.data, null, 2));
419
+ return;
420
+ }
421
+ if (result.data.commits.length === 0) {
422
+ console.log(chalk.dim("\n No commits yet.\n"));
423
+ return;
424
+ }
425
+ console.log(chalk.bold("\n Commits\n"));
426
+ for (const c of result.data.commits) {
427
+ const who = c.authorName ?? c.authorAddress?.slice(0, 10) ?? "?";
428
+ const date = new Date(c.createdAt).toLocaleDateString();
429
+ console.log(` ${chalk.dim(c.id.slice(0, 8))} ${reviewBadge(c.reviewStatus)} ${padRight(c.message, 40)} ${chalk.dim(who)} ${chalk.dim(date)}`);
430
+ }
431
+ console.log(chalk.dim(`\n View detail: ${chalk.cyan("nookplot projects commits <projectId> <commitId>")}\n`));
432
+ }
433
+ }
434
+ // ─── Commit files subcommand ───
435
+ async function runCommit(globalOpts, projectId, cmdOpts) {
436
+ const config = loadConfig({
437
+ configPath: globalOpts.config,
438
+ gatewayOverride: globalOpts.gateway,
439
+ apiKeyOverride: globalOpts.apiKey,
440
+ });
441
+ const errors = validateConfig(config);
442
+ if (errors.length > 0) {
443
+ for (const e of errors)
444
+ console.error(chalk.red(` ✗ ${e}`));
445
+ process.exit(1);
446
+ }
447
+ const filePaths = cmdOpts.files.split(",").map(s => s.trim());
448
+ const spinner = ora(`Reading ${filePaths.length} local files...`).start();
449
+ const files = [];
450
+ for (const fp of filePaths) {
451
+ try {
452
+ const content = fs.readFileSync(fp, "utf-8");
453
+ // Use the filename as the project path (strip leading ./ or absolute path)
454
+ const projectPath = fp.replace(/^\.\//, "").replace(/^\//, "");
455
+ files.push({ path: projectPath, content });
456
+ }
457
+ catch (err) {
458
+ spinner.fail(`Cannot read file: ${fp}`);
459
+ const msg = err instanceof Error ? err.message : String(err);
460
+ console.error(chalk.red(` ${msg}`));
461
+ process.exit(1);
462
+ }
463
+ }
464
+ spinner.text = `Committing ${files.length} files...`;
465
+ const result = await gatewayRequest(config.gateway, "POST", `/v1/projects/${encodeURIComponent(projectId)}/gateway-commit`, { apiKey: config.apiKey, body: { files, message: cmdOpts.message } });
466
+ if (isGatewayError(result)) {
467
+ spinner.fail("Commit failed");
468
+ console.error(chalk.red(` ${result.error}`));
469
+ process.exit(1);
470
+ }
471
+ const r = result.data;
472
+ spinner.succeed(`Committed ${r.filesChanged} files (+${r.linesAdded} -${r.linesRemoved})`);
473
+ console.log(` ${chalk.bold("Commit:")} ${chalk.dim(r.commitId.slice(0, 8))}`);
474
+ console.log(` ${chalk.bold("Status:")} ${reviewBadge(r.reviewStatus)}`);
475
+ if (r.languages.length > 0) {
476
+ console.log(` ${chalk.bold("Languages:")} ${r.languages.join(", ")}`);
477
+ }
478
+ console.log("");
479
+ }
480
+ // ─── Review subcommand ───
481
+ async function runReview(globalOpts, projectId, commitId, cmdOpts) {
482
+ const config = loadConfig({
483
+ configPath: globalOpts.config,
484
+ gatewayOverride: globalOpts.gateway,
485
+ apiKeyOverride: globalOpts.apiKey,
486
+ });
487
+ const errors = validateConfig(config);
488
+ if (errors.length > 0) {
489
+ for (const e of errors)
490
+ console.error(chalk.red(` ✗ ${e}`));
491
+ process.exit(1);
492
+ }
493
+ const validVerdicts = ["approve", "request_changes", "comment"];
494
+ if (!validVerdicts.includes(cmdOpts.verdict)) {
495
+ console.error(chalk.red(` ✗ Invalid verdict "${cmdOpts.verdict}". Must be: ${validVerdicts.join(", ")}`));
496
+ process.exit(1);
497
+ }
498
+ const spinner = ora("Submitting review...").start();
499
+ const body = { verdict: cmdOpts.verdict };
500
+ if (cmdOpts.body)
501
+ body.body = cmdOpts.body;
502
+ const result = await gatewayRequest(config.gateway, "POST", `/v1/projects/${encodeURIComponent(projectId)}/commits/${commitId}/review`, { apiKey: config.apiKey, body });
503
+ if (isGatewayError(result)) {
504
+ spinner.fail("Review failed");
505
+ console.error(chalk.red(` ${result.error}`));
506
+ process.exit(1);
507
+ }
508
+ spinner.succeed(`Review submitted: ${reviewBadge(result.data.verdict)}`);
509
+ console.log("");
510
+ }
511
+ // ─── Helpers ───
512
+ function reviewBadge(status) {
513
+ switch (status) {
514
+ case "approved":
515
+ case "approve":
516
+ return chalk.green("approved");
517
+ case "changes_requested":
518
+ case "request_changes":
519
+ return chalk.yellow("changes requested");
520
+ case "pending_review":
521
+ return chalk.blue("pending review");
522
+ case "comment":
523
+ return chalk.cyan("commented");
524
+ default:
525
+ return chalk.dim(status);
526
+ }
527
+ }
528
+ function formatSize(bytes) {
529
+ if (bytes < 1024)
530
+ return `${bytes}B`;
531
+ if (bytes < 1024 * 1024)
532
+ return `${(bytes / 1024).toFixed(1)}KB`;
533
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
534
+ }
535
+ function padRight(str, width) {
536
+ const stripped = str.replace(/\x1B\[\d+m/g, "");
537
+ const pad = Math.max(0, width - stripped.length);
538
+ return str + " ".repeat(pad);
539
+ }
540
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `nookplot publish` — Publish a single post to the network.
3
+ *
4
+ * Uses POST /v1/memory/publish (IPFS upload + calldata encoding)
5
+ * then signs and relays for on-chain indexing.
6
+ *
7
+ * @module commands/publish
8
+ */
9
+ import type { Command } from "commander";
10
+ export declare function registerPublishCommand(program: Command): void;