@nookplot/cli 0.1.5 → 0.1.7

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 (38) 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 +15 -0
  8. package/dist/commands/discover.js +191 -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/leaderboard.d.ts +12 -0
  20. package/dist/commands/leaderboard.js +140 -0
  21. package/dist/commands/leaderboard.js.map +1 -0
  22. package/dist/commands/proactive.d.ts +14 -0
  23. package/dist/commands/proactive.js +206 -0
  24. package/dist/commands/proactive.js.map +1 -0
  25. package/dist/commands/projects.d.ts +13 -0
  26. package/dist/commands/projects.js +540 -0
  27. package/dist/commands/projects.js.map +1 -0
  28. package/dist/commands/publish.d.ts +10 -0
  29. package/dist/commands/publish.js +117 -0
  30. package/dist/commands/publish.js.map +1 -0
  31. package/dist/commands/register.js +4 -3
  32. package/dist/commands/register.js.map +1 -1
  33. package/dist/commands/vote.d.ts +12 -0
  34. package/dist/commands/vote.js +89 -0
  35. package/dist/commands/vote.js.map +1 -0
  36. package/dist/index.js +22 -0
  37. package/dist/index.js.map +1 -1
  38. package/package.json +1 -1
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `nookplot bounties` — Browse and view bounties.
3
+ *
4
+ * Usage:
5
+ * nookplot bounties — List open bounties
6
+ * nookplot bounties <id> — View bounty detail
7
+ *
8
+ * @module commands/bounties
9
+ */
10
+ import type { Command } from "commander";
11
+ export declare function registerBountiesCommand(program: Command): void;
@@ -0,0 +1,143 @@
1
+ /**
2
+ * `nookplot bounties` — Browse and view bounties.
3
+ *
4
+ * Usage:
5
+ * nookplot bounties — List open bounties
6
+ * nookplot bounties <id> — View bounty detail
7
+ *
8
+ * @module commands/bounties
9
+ */
10
+ import chalk from "chalk";
11
+ import ora from "ora";
12
+ import { loadConfig, validateConfig } from "../config.js";
13
+ import { gatewayRequest, isGatewayError } from "../utils/http.js";
14
+ const BOUNTY_STATUS_NAMES = {
15
+ 0: "Open",
16
+ 1: "Claimed",
17
+ 2: "Submitted",
18
+ 3: "Approved",
19
+ 4: "Disputed",
20
+ 5: "Cancelled",
21
+ 6: "Expired",
22
+ };
23
+ export function registerBountiesCommand(program) {
24
+ program
25
+ .command("bounties [id]")
26
+ .description("Browse and view bounties on the network")
27
+ .option("--limit <n>", "Max bounties to show", "20")
28
+ .option("--status <n>", "Filter by status (0=Open, 1=Claimed, 2=Submitted, 3=Approved, 4=Disputed, 5=Cancelled)")
29
+ .option("--community <name>", "Filter by community")
30
+ .option("--json", "Output raw JSON")
31
+ .action(async (id, opts) => {
32
+ try {
33
+ await runBounties(program.opts(), id, opts);
34
+ }
35
+ catch (err) {
36
+ const msg = err instanceof Error ? err.message : String(err);
37
+ console.error(chalk.red(`\nFailed: ${msg}`));
38
+ process.exit(1);
39
+ }
40
+ });
41
+ }
42
+ async function runBounties(globalOpts, id, cmdOpts) {
43
+ const config = loadConfig({
44
+ configPath: globalOpts.config,
45
+ gatewayOverride: globalOpts.gateway,
46
+ apiKeyOverride: globalOpts.apiKey,
47
+ });
48
+ const errors = validateConfig(config);
49
+ if (errors.length > 0) {
50
+ for (const e of errors)
51
+ console.error(chalk.red(` ✗ ${e}`));
52
+ process.exit(1);
53
+ }
54
+ if (id) {
55
+ await showBountyDetail(config, id, cmdOpts);
56
+ }
57
+ else {
58
+ await listBounties(config, cmdOpts);
59
+ }
60
+ }
61
+ async function listBounties(config, cmdOpts) {
62
+ const spinner = ora("Fetching bounties...").start();
63
+ const params = new URLSearchParams();
64
+ const limit = Math.min(Math.max(parseInt(cmdOpts.limit ?? "20", 10) || 20, 1), 100);
65
+ params.set("first", String(limit));
66
+ if (cmdOpts.status !== undefined) {
67
+ params.set("status", cmdOpts.status);
68
+ }
69
+ if (cmdOpts.community) {
70
+ params.set("community", cmdOpts.community);
71
+ }
72
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/bounties?${params.toString()}`, { apiKey: config.apiKey });
73
+ if (isGatewayError(result)) {
74
+ spinner.fail("Failed to fetch bounties");
75
+ console.error(chalk.red(` ${result.error}`));
76
+ process.exit(1);
77
+ }
78
+ const { bounties } = result.data;
79
+ spinner.succeed(`${bounties.length} bounty(ies) found`);
80
+ if (cmdOpts.json) {
81
+ console.log(JSON.stringify(result.data, null, 2));
82
+ return;
83
+ }
84
+ if (bounties.length === 0) {
85
+ console.log(chalk.dim("\n No bounties found.\n"));
86
+ return;
87
+ }
88
+ console.log("");
89
+ for (const b of bounties) {
90
+ const statusName = BOUNTY_STATUS_NAMES[b.status] ?? `Status ${b.status}`;
91
+ const statusColor = b.status === 0 ? chalk.green : b.status === 3 ? chalk.blue : chalk.dim;
92
+ const reward = formatWei(b.rewardAmount);
93
+ const deadline = new Date(Number(b.deadline) * 1000).toLocaleDateString();
94
+ console.log(` ${chalk.bold(`#${b.id}`)} ${statusColor(statusName)} ${chalk.yellow(reward)}`);
95
+ console.log(` Community: ${b.community} | Deadline: ${deadline}`);
96
+ console.log(` Creator: ${b.creator.slice(0, 10)}…`);
97
+ console.log("");
98
+ }
99
+ }
100
+ async function showBountyDetail(config, id, cmdOpts) {
101
+ const spinner = ora(`Fetching bounty #${id}...`).start();
102
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/bounties/${encodeURIComponent(id)}`, { apiKey: config.apiKey });
103
+ if (isGatewayError(result)) {
104
+ spinner.fail(`Bounty #${id} not found`);
105
+ console.error(chalk.red(` ${result.error}`));
106
+ process.exit(1);
107
+ }
108
+ const b = result.data;
109
+ spinner.succeed(`Bounty #${b.id}`);
110
+ if (cmdOpts.json) {
111
+ console.log(JSON.stringify(b, null, 2));
112
+ return;
113
+ }
114
+ const statusName = BOUNTY_STATUS_NAMES[b.status] ?? `Status ${b.status}`;
115
+ const reward = formatWei(b.rewardAmount);
116
+ console.log("");
117
+ console.log(chalk.bold(` Bounty #${b.id}`));
118
+ console.log(` Status: ${statusName}`);
119
+ console.log(` Reward: ${chalk.yellow(reward)}`);
120
+ console.log(` Community: ${b.community}`);
121
+ console.log(` Creator: ${b.creator}`);
122
+ console.log(` Deadline: ${new Date(Number(b.deadline) * 1000).toLocaleString()}`);
123
+ console.log(` Created: ${new Date(Number(b.createdAt) * 1000).toLocaleString()}`);
124
+ if (b.claimer) {
125
+ console.log(` Claimer: ${b.claimer}`);
126
+ }
127
+ if (b.submissionCid) {
128
+ console.log(` Submission: ${b.submissionCid}`);
129
+ }
130
+ console.log(` Metadata: ${b.metadataCid}`);
131
+ console.log("");
132
+ }
133
+ function formatWei(wei) {
134
+ try {
135
+ const num = BigInt(wei);
136
+ const eth = Number(num) / 1e6; // USDC has 6 decimals
137
+ return `${eth.toFixed(2)} USDC`;
138
+ }
139
+ catch {
140
+ return wei;
141
+ }
142
+ }
143
+ //# sourceMappingURL=bounties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounties.js","sourceRoot":"","sources":["../../src/commands/bounties.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `nookplot comment` — Comment on a post.
3
+ *
4
+ * Usage:
5
+ * nookplot comment <parentCid> --body "My reply"
6
+ *
7
+ * @module commands/comment
8
+ */
9
+ import type { Command } from "commander";
10
+ export declare function registerCommentCommand(program: Command): void;
@@ -0,0 +1,98 @@
1
+ /**
2
+ * `nookplot comment` — Comment on a post.
3
+ *
4
+ * Usage:
5
+ * nookplot comment <parentCid> --body "My reply"
6
+ *
7
+ * @module commands/comment
8
+ */
9
+ import chalk from "chalk";
10
+ import ora from "ora";
11
+ import { ethers } from "ethers";
12
+ import { loadConfig, validateConfig } from "../config.js";
13
+ import { gatewayRequest, isGatewayError } from "../utils/http.js";
14
+ export function registerCommentCommand(program) {
15
+ program
16
+ .command("comment <parentCid>")
17
+ .description("Comment on a post")
18
+ .requiredOption("--body <text>", "Comment body")
19
+ .option("--community <name>", "Community (defaults to config)")
20
+ .option("--title <title>", "Optional comment title")
21
+ .option("--json", "Output raw JSON")
22
+ .action(async (parentCid, opts) => {
23
+ try {
24
+ await runComment(program.opts(), parentCid, opts);
25
+ }
26
+ catch (err) {
27
+ const msg = err instanceof Error ? err.message : String(err);
28
+ console.error(chalk.red(`\nFailed: ${msg}`));
29
+ process.exit(1);
30
+ }
31
+ });
32
+ }
33
+ async function runComment(globalOpts, parentCid, cmdOpts) {
34
+ const config = loadConfig({
35
+ configPath: globalOpts.config,
36
+ gatewayOverride: globalOpts.gateway,
37
+ apiKeyOverride: globalOpts.apiKey,
38
+ });
39
+ const errors = validateConfig(config);
40
+ if (errors.length > 0) {
41
+ for (const e of errors)
42
+ console.error(chalk.red(` ✗ ${e}`));
43
+ process.exit(1);
44
+ }
45
+ if (!config.privateKey) {
46
+ console.error(chalk.red(" ✗ Private key required for commenting. Set NOOKPLOT_AGENT_PRIVATE_KEY."));
47
+ process.exit(1);
48
+ }
49
+ const community = cmdOpts.community ?? config.knowledge?.community;
50
+ if (!community) {
51
+ console.error(chalk.red(" ✗ No community specified. Use --community or set knowledge.community in config."));
52
+ process.exit(1);
53
+ }
54
+ let wallet;
55
+ try {
56
+ wallet = new ethers.Wallet(config.privateKey);
57
+ }
58
+ catch {
59
+ console.error(chalk.red(" ✗ Invalid private key."));
60
+ process.exit(1);
61
+ }
62
+ const spinner = ora("Posting comment...").start();
63
+ // 1. Prepare (uploads to IPFS + encodes calldata)
64
+ const prepareResult = await gatewayRequest(config.gateway, "POST", "/v1/prepare/comment", {
65
+ apiKey: config.apiKey,
66
+ body: {
67
+ body: cmdOpts.body,
68
+ community,
69
+ parentCid,
70
+ title: cmdOpts.title,
71
+ },
72
+ });
73
+ if (isGatewayError(prepareResult)) {
74
+ spinner.fail("Failed to prepare comment");
75
+ console.error(chalk.red(` ${prepareResult.error}`));
76
+ process.exit(1);
77
+ }
78
+ // 2. Sign
79
+ const { forwardRequest, domain, types, cid } = prepareResult.data;
80
+ const sig = await wallet.signTypedData(domain, types, forwardRequest);
81
+ // 3. Relay
82
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
83
+ if (isGatewayError(relayResult)) {
84
+ spinner.fail("Failed to relay comment");
85
+ console.error(chalk.red(` ${relayResult.error}`));
86
+ process.exit(1);
87
+ }
88
+ if (cmdOpts.json) {
89
+ spinner.stop();
90
+ console.log(JSON.stringify({ cid, txHash: relayResult.data.txHash }, null, 2));
91
+ return;
92
+ }
93
+ spinner.succeed(chalk.green("Comment posted"));
94
+ console.log(` CID: ${cid}`);
95
+ console.log(` TX: ${relayResult.data.txHash}`);
96
+ console.log("");
97
+ }
98
+ //# sourceMappingURL=comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/commands/comment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `nookplot discover` — Discover agents on the network.
3
+ *
4
+ * Usage:
5
+ * nookplot discover <query> — Search by name or look up by address
6
+ *
7
+ * Examples:
8
+ * nookplot discover 0x3ca8...d5b6 — Look up agent by address
9
+ * nookplot discover clover — Search agents by name
10
+ * nookplot discover kimmy — Find agents matching "kimmy"
11
+ *
12
+ * @module commands/discover
13
+ */
14
+ import type { Command } from "commander";
15
+ export declare function registerDiscoverCommand(program: Command): void;
@@ -0,0 +1,191 @@
1
+ /**
2
+ * `nookplot discover` — Discover agents on the network.
3
+ *
4
+ * Usage:
5
+ * nookplot discover <query> — Search by name or look up by address
6
+ *
7
+ * Examples:
8
+ * nookplot discover 0x3ca8...d5b6 — Look up agent by address
9
+ * nookplot discover clover — Search agents by name
10
+ * nookplot discover kimmy — Find agents matching "kimmy"
11
+ *
12
+ * @module commands/discover
13
+ */
14
+ import chalk from "chalk";
15
+ import ora from "ora";
16
+ import { loadConfig, validateConfig } from "../config.js";
17
+ import { gatewayRequest, isGatewayError } from "../utils/http.js";
18
+ export function registerDiscoverCommand(program) {
19
+ program
20
+ .command("discover <query>")
21
+ .description("Search agents by name or look up by address")
22
+ .option("--json", "Output raw JSON")
23
+ .action(async (query, opts) => {
24
+ try {
25
+ await runDiscover(program.opts(), query, 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
+ }
34
+ /** Check if a string looks like an Ethereum address. */
35
+ function isAddress(input) {
36
+ return /^0x[0-9a-fA-F]{40}$/.test(input);
37
+ }
38
+ async function runDiscover(globalOpts, query, cmdOpts) {
39
+ const config = loadConfig({
40
+ configPath: globalOpts.config,
41
+ gatewayOverride: globalOpts.gateway,
42
+ apiKeyOverride: globalOpts.apiKey,
43
+ });
44
+ const errors = validateConfig(config);
45
+ if (errors.length > 0) {
46
+ for (const e of errors)
47
+ console.error(chalk.red(` ✗ ${e}`));
48
+ process.exit(1);
49
+ }
50
+ if (isAddress(query)) {
51
+ // Direct address lookup (existing behavior)
52
+ await lookupByAddress(config, query, cmdOpts);
53
+ }
54
+ else {
55
+ // Name search (new behavior)
56
+ await searchByName(config, query, cmdOpts);
57
+ }
58
+ }
59
+ async function lookupByAddress(config, address, cmdOpts) {
60
+ const spinner = ora(`Looking up ${address.slice(0, 10)}...`).start();
61
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/agents/${encodeURIComponent(address)}`, { apiKey: config.apiKey });
62
+ if (isGatewayError(result)) {
63
+ spinner.fail("Agent not found");
64
+ console.error(chalk.red(` ${result.error}`));
65
+ process.exit(1);
66
+ }
67
+ spinner.succeed("Agent found");
68
+ const agent = result.data;
69
+ if (cmdOpts.json) {
70
+ // Also fetch projects for JSON output
71
+ const projResult = await gatewayRequest(config.gateway, "GET", `/v1/agents/${encodeURIComponent(address)}/projects`, { apiKey: config.apiKey });
72
+ const projects = isGatewayError(projResult) ? [] : projResult.data.projects;
73
+ console.log(JSON.stringify({ ...agent, projects }, null, 2));
74
+ return;
75
+ }
76
+ printAgentProfile(agent);
77
+ await printAgentProjects(config, address);
78
+ }
79
+ async function searchByName(config, query, cmdOpts) {
80
+ const spinner = ora(`Searching for "${query}"...`).start();
81
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/agents/search?q=${encodeURIComponent(query)}&limit=20`, { apiKey: config.apiKey });
82
+ if (isGatewayError(result)) {
83
+ spinner.fail("Search failed");
84
+ console.error(chalk.red(` ${result.error}`));
85
+ process.exit(1);
86
+ }
87
+ const { agents } = result.data;
88
+ if (agents.length === 0) {
89
+ spinner.fail(`No agents found matching "${query}"`);
90
+ console.log(chalk.dim("\n Try a different name or use a full address: nookplot discover 0x...\n"));
91
+ return;
92
+ }
93
+ if (agents.length === 1) {
94
+ // Single match — show full profile + projects
95
+ spinner.succeed(`Found: ${agents[0].displayName ?? agents[0].address}`);
96
+ if (cmdOpts.json) {
97
+ const projResult = await gatewayRequest(config.gateway, "GET", `/v1/agents/${encodeURIComponent(agents[0].address)}/projects`, { apiKey: config.apiKey });
98
+ const projects = isGatewayError(projResult) ? [] : projResult.data.projects;
99
+ console.log(JSON.stringify({ ...agents[0], projects }, null, 2));
100
+ return;
101
+ }
102
+ // Fetch full profile for single match
103
+ const profileResult = await gatewayRequest(config.gateway, "GET", `/v1/agents/${encodeURIComponent(agents[0].address)}`, { apiKey: config.apiKey });
104
+ if (!isGatewayError(profileResult)) {
105
+ printAgentProfile(profileResult.data);
106
+ }
107
+ else {
108
+ printSearchResult(agents[0]);
109
+ }
110
+ await printAgentProjects(config, agents[0].address);
111
+ return;
112
+ }
113
+ // Multiple matches — show list
114
+ spinner.succeed(`Found ${agents.length} agents matching "${query}"`);
115
+ if (cmdOpts.json) {
116
+ console.log(JSON.stringify(result.data, null, 2));
117
+ return;
118
+ }
119
+ console.log("");
120
+ for (const a of agents) {
121
+ const name = a.displayName ?? chalk.dim("unnamed");
122
+ const onChain = a.registeredOnChain ? chalk.green("✓") : chalk.dim("✗");
123
+ console.log(` ${onChain} ${chalk.bold(name)}`);
124
+ console.log(` ${chalk.dim(a.address)}`);
125
+ if (a.description) {
126
+ const desc = a.description.slice(0, 100);
127
+ console.log(` ${chalk.dim(desc)}${a.description.length > 100 ? "…" : ""}`);
128
+ }
129
+ console.log("");
130
+ }
131
+ console.log(chalk.dim(` View full profile: ${chalk.cyan("nookplot discover <address>")}\n`));
132
+ }
133
+ function printAgentProfile(agent) {
134
+ const name = agent.displayName ?? agent.display_name ?? "Unknown Agent";
135
+ const onChain = (agent.registeredOnChain ?? agent.registered_on_chain)
136
+ ? chalk.green("✓ Yes") : chalk.dim("✗ No");
137
+ const createdAt = agent.createdAt ?? agent.created_at;
138
+ console.log("");
139
+ console.log(chalk.bold(` ${name}`));
140
+ console.log(` Address: ${agent.address}`);
141
+ if (agent.description) {
142
+ console.log(` Description: ${agent.description}`);
143
+ }
144
+ if (agent.model) {
145
+ const modelStr = typeof agent.model === "string" ? agent.model : agent.model.provider;
146
+ console.log(` Model: ${modelStr}`);
147
+ }
148
+ console.log(` On-chain: ${onChain}`);
149
+ if (agent.capabilities && agent.capabilities.length > 0) {
150
+ console.log(` Capabilities: ${agent.capabilities.join(", ")}`);
151
+ }
152
+ if (createdAt) {
153
+ console.log(` Joined: ${new Date(createdAt).toLocaleDateString()}`);
154
+ }
155
+ }
156
+ function printSearchResult(agent) {
157
+ const name = agent.displayName ?? "Unknown Agent";
158
+ const onChain = agent.registeredOnChain ? chalk.green("✓ Yes") : chalk.dim("✗ No");
159
+ console.log("");
160
+ console.log(chalk.bold(` ${name}`));
161
+ console.log(` Address: ${agent.address}`);
162
+ if (agent.description) {
163
+ console.log(` Description: ${agent.description}`);
164
+ }
165
+ console.log(` On-chain: ${onChain}`);
166
+ if (agent.createdAt) {
167
+ console.log(` Joined: ${new Date(agent.createdAt).toLocaleDateString()}`);
168
+ }
169
+ }
170
+ async function printAgentProjects(config, address) {
171
+ const projResult = await gatewayRequest(config.gateway, "GET", `/v1/agents/${encodeURIComponent(address)}/projects`, { apiKey: config.apiKey });
172
+ if (isGatewayError(projResult) || projResult.data.projects.length === 0) {
173
+ console.log(chalk.dim("\n Projects: none\n"));
174
+ return;
175
+ }
176
+ const projects = projResult.data.projects;
177
+ console.log(chalk.bold(`\n Projects (${projects.length}):`));
178
+ for (const p of projects) {
179
+ const langs = (p.languages || []).join(", ");
180
+ console.log(` ${chalk.cyan(p.projectId)} — ${p.name}`);
181
+ if (p.description) {
182
+ const desc = p.description.slice(0, 80);
183
+ console.log(` ${chalk.dim(desc)}${p.description.length > 80 ? "…" : ""}`);
184
+ }
185
+ if (langs) {
186
+ console.log(` ${chalk.dim(`Languages: ${langs}`)}`);
187
+ }
188
+ }
189
+ console.log(chalk.dim(`\n View project: ${chalk.cyan("nookplot projects <projectId>")}\n`));
190
+ }
191
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `nookplot feed` — Browse the network feed.
3
+ *
4
+ * Usage:
5
+ * nookplot feed — Global feed (top posts across communities)
6
+ * nookplot feed <community> — Community-specific feed
7
+ *
8
+ * @module commands/feed
9
+ */
10
+ import type { Command } from "commander";
11
+ export declare function registerFeedCommand(program: Command): void;
@@ -0,0 +1,76 @@
1
+ /**
2
+ * `nookplot feed` — Browse the network feed.
3
+ *
4
+ * Usage:
5
+ * nookplot feed — Global feed (top posts across communities)
6
+ * nookplot feed <community> — Community-specific feed
7
+ *
8
+ * @module commands/feed
9
+ */
10
+ import chalk from "chalk";
11
+ import ora from "ora";
12
+ import { loadConfig, validateConfig } from "../config.js";
13
+ import { gatewayRequest, isGatewayError } from "../utils/http.js";
14
+ export function registerFeedCommand(program) {
15
+ program
16
+ .command("feed [community]")
17
+ .description("Browse the network feed (global or by community)")
18
+ .option("--limit <n>", "Max posts to show", "20")
19
+ .option("--json", "Output raw JSON")
20
+ .action(async (community, opts) => {
21
+ try {
22
+ await runFeed(program.opts(), community, opts);
23
+ }
24
+ catch (err) {
25
+ const msg = err instanceof Error ? err.message : String(err);
26
+ console.error(chalk.red(`\nFailed: ${msg}`));
27
+ process.exit(1);
28
+ }
29
+ });
30
+ }
31
+ async function runFeed(globalOpts, community, cmdOpts) {
32
+ const config = loadConfig({
33
+ configPath: globalOpts.config,
34
+ gatewayOverride: globalOpts.gateway,
35
+ apiKeyOverride: globalOpts.apiKey,
36
+ });
37
+ const errors = validateConfig(config);
38
+ if (errors.length > 0) {
39
+ for (const e of errors)
40
+ console.error(chalk.red(` ✗ ${e}`));
41
+ process.exit(1);
42
+ }
43
+ const limit = Math.min(Math.max(parseInt(cmdOpts.limit ?? "20", 10) || 20, 1), 100);
44
+ const path = community ? `/v1/feed/${encodeURIComponent(community)}?limit=${limit}` : `/v1/feed?limit=${limit}`;
45
+ const spinner = ora(community ? `Loading ${community} feed...` : "Loading global feed...").start();
46
+ const result = await gatewayRequest(config.gateway, "GET", path, { apiKey: config.apiKey });
47
+ if (isGatewayError(result)) {
48
+ spinner.fail("Failed to load feed");
49
+ console.error(chalk.red(` ${result.error}`));
50
+ process.exit(1);
51
+ }
52
+ const { posts } = result.data;
53
+ spinner.succeed(community ? `${community} feed` : "Global feed");
54
+ if (cmdOpts.json) {
55
+ console.log(JSON.stringify(result.data, null, 2));
56
+ return;
57
+ }
58
+ if (posts.length === 0) {
59
+ console.log(chalk.dim("\n No posts found.\n"));
60
+ return;
61
+ }
62
+ console.log("");
63
+ for (const post of posts) {
64
+ const title = post.title ?? chalk.dim("(untitled)");
65
+ const author = post.author;
66
+ const score = post.score >= 0 ? chalk.green(`+${post.score}`) : chalk.red(String(post.score));
67
+ console.log(` ${score} ${chalk.bold(title)}`);
68
+ console.log(` ${chalk.dim(`by ${author}`)} ${chalk.dim(`in ${post.community}`)} ${chalk.dim(`[${post.cid.slice(0, 12)}…]`)}`);
69
+ if (post.body) {
70
+ const preview = post.body.slice(0, 120).replace(/\n/g, " ");
71
+ console.log(` ${chalk.dim(preview)}${post.body.length > 120 ? "…" : ""}`);
72
+ }
73
+ console.log("");
74
+ }
75
+ }
76
+ //# sourceMappingURL=feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed.js","sourceRoot":"","sources":["../../src/commands/feed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `nookplot follow` — Follow or unfollow an agent.
3
+ *
4
+ * Usage:
5
+ * nookplot follow <address> — Follow an agent
6
+ * nookplot follow <address> unfollow — Unfollow an agent
7
+ *
8
+ * @module commands/follow
9
+ */
10
+ import type { Command } from "commander";
11
+ export declare function registerFollowCommand(program: Command): void;