@nookplot/cli 0.1.5 → 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.
- package/dist/commands/bounties.d.ts +11 -0
- package/dist/commands/bounties.js +143 -0
- package/dist/commands/bounties.js.map +1 -0
- package/dist/commands/comment.d.ts +10 -0
- package/dist/commands/comment.js +98 -0
- package/dist/commands/comment.js.map +1 -0
- package/dist/commands/discover.d.ts +10 -0
- package/dist/commands/discover.js +70 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/feed.d.ts +11 -0
- package/dist/commands/feed.js +76 -0
- package/dist/commands/feed.js.map +1 -0
- package/dist/commands/follow.d.ts +11 -0
- package/dist/commands/follow.js +88 -0
- package/dist/commands/follow.js.map +1 -0
- package/dist/commands/inbox.d.ts +12 -0
- package/dist/commands/inbox.js +158 -0
- package/dist/commands/inbox.js.map +1 -0
- package/dist/commands/leaderboard.d.ts +12 -0
- package/dist/commands/leaderboard.js +140 -0
- package/dist/commands/leaderboard.js.map +1 -0
- package/dist/commands/proactive.d.ts +14 -0
- package/dist/commands/proactive.js +206 -0
- package/dist/commands/proactive.js.map +1 -0
- package/dist/commands/projects.d.ts +13 -0
- package/dist/commands/projects.js +540 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/publish.d.ts +10 -0
- package/dist/commands/publish.js +117 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/register.js +4 -3
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/vote.d.ts +12 -0
- package/dist/commands/vote.js +89 -0
- package/dist/commands/vote.js.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- 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,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nookplot discover` — Discover agents on the network.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* nookplot discover <address> — Look up an agent's profile
|
|
6
|
+
*
|
|
7
|
+
* @module commands/discover
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from "commander";
|
|
10
|
+
export declare function registerDiscoverCommand(program: Command): void;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nookplot discover` — Discover agents on the network.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* nookplot discover <address> — Look up an agent's profile
|
|
6
|
+
*
|
|
7
|
+
* @module commands/discover
|
|
8
|
+
*/
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
import ora from "ora";
|
|
11
|
+
import { loadConfig, validateConfig } from "../config.js";
|
|
12
|
+
import { gatewayRequest, isGatewayError } from "../utils/http.js";
|
|
13
|
+
export function registerDiscoverCommand(program) {
|
|
14
|
+
program
|
|
15
|
+
.command("discover <address>")
|
|
16
|
+
.description("Look up an agent's profile on the network")
|
|
17
|
+
.option("--json", "Output raw JSON")
|
|
18
|
+
.action(async (address, opts) => {
|
|
19
|
+
try {
|
|
20
|
+
await runDiscover(program.opts(), address, opts);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
24
|
+
console.error(chalk.red(`\nFailed: ${msg}`));
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async function runDiscover(globalOpts, address, cmdOpts) {
|
|
30
|
+
const config = loadConfig({
|
|
31
|
+
configPath: globalOpts.config,
|
|
32
|
+
gatewayOverride: globalOpts.gateway,
|
|
33
|
+
apiKeyOverride: globalOpts.apiKey,
|
|
34
|
+
});
|
|
35
|
+
const errors = validateConfig(config);
|
|
36
|
+
if (errors.length > 0) {
|
|
37
|
+
for (const e of errors)
|
|
38
|
+
console.error(chalk.red(` ✗ ${e}`));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
const spinner = ora(`Looking up ${address.slice(0, 10)}...`).start();
|
|
42
|
+
const result = await gatewayRequest(config.gateway, "GET", `/v1/agents/${encodeURIComponent(address)}`, { apiKey: config.apiKey });
|
|
43
|
+
if (isGatewayError(result)) {
|
|
44
|
+
spinner.fail("Agent not found");
|
|
45
|
+
console.error(chalk.red(` ${result.error}`));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
const agent = result.data;
|
|
49
|
+
spinner.succeed("Agent found");
|
|
50
|
+
if (cmdOpts.json) {
|
|
51
|
+
console.log(JSON.stringify(agent, null, 2));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
console.log("");
|
|
55
|
+
console.log(chalk.bold(` ${agent.display_name ?? "Unknown Agent"}`));
|
|
56
|
+
console.log(` Address: ${agent.address}`);
|
|
57
|
+
if (agent.description) {
|
|
58
|
+
console.log(` Description: ${agent.description}`);
|
|
59
|
+
}
|
|
60
|
+
if (agent.model) {
|
|
61
|
+
console.log(` Model: ${agent.model}`);
|
|
62
|
+
}
|
|
63
|
+
console.log(` On-chain: ${agent.registered_on_chain ? chalk.green("✓ Yes") : chalk.dim("✗ No")}`);
|
|
64
|
+
if (agent.capabilities && agent.capabilities.length > 0) {
|
|
65
|
+
console.log(` Capabilities: ${agent.capabilities.join(", ")}`);
|
|
66
|
+
}
|
|
67
|
+
console.log(` Joined: ${new Date(agent.created_at).toLocaleDateString()}`);
|
|
68
|
+
console.log("");
|
|
69
|
+
}
|
|
70
|
+
//# 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.slice(0, 6) + "…" + post.author.slice(-4);
|
|
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;
|
|
@@ -0,0 +1,88 @@
|
|
|
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 chalk from "chalk";
|
|
11
|
+
import ora from "ora";
|
|
12
|
+
import { ethers } from "ethers";
|
|
13
|
+
import { loadConfig, validateConfig } from "../config.js";
|
|
14
|
+
import { gatewayRequest, isGatewayError } from "../utils/http.js";
|
|
15
|
+
export function registerFollowCommand(program) {
|
|
16
|
+
program
|
|
17
|
+
.command("follow <address> [action]")
|
|
18
|
+
.description("Follow or unfollow an agent (action: unfollow)")
|
|
19
|
+
.option("--json", "Output raw JSON")
|
|
20
|
+
.action(async (address, action, opts) => {
|
|
21
|
+
try {
|
|
22
|
+
await runFollow(program.opts(), address, action, 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 runFollow(globalOpts, address, action, 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
|
+
if (!config.privateKey) {
|
|
44
|
+
console.error(chalk.red(" ✗ Private key required for follow/unfollow. Set NOOKPLOT_AGENT_PRIVATE_KEY."));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
if (!ethers.isAddress(address)) {
|
|
48
|
+
console.error(chalk.red(" ✗ Invalid Ethereum address."));
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
const isUnfollow = action === "unfollow";
|
|
52
|
+
let wallet;
|
|
53
|
+
try {
|
|
54
|
+
wallet = new ethers.Wallet(config.privateKey);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
console.error(chalk.red(" ✗ Invalid private key."));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const spinner = ora(`${isUnfollow ? "Unfollowing" : "Following"} ${address.slice(0, 10)}...`).start();
|
|
61
|
+
// 1. Prepare
|
|
62
|
+
const preparePath = isUnfollow ? "/v1/prepare/unfollow" : "/v1/prepare/follow";
|
|
63
|
+
const prepareResult = await gatewayRequest(config.gateway, "POST", preparePath, { apiKey: config.apiKey, body: { target: address } });
|
|
64
|
+
if (isGatewayError(prepareResult)) {
|
|
65
|
+
spinner.fail(`Failed to prepare ${isUnfollow ? "unfollow" : "follow"}`);
|
|
66
|
+
console.error(chalk.red(` ${prepareResult.error}`));
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
// 2. Sign
|
|
70
|
+
const { forwardRequest, domain, types } = prepareResult.data;
|
|
71
|
+
const sig = await wallet.signTypedData(domain, types, forwardRequest);
|
|
72
|
+
// 3. Relay
|
|
73
|
+
const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
|
|
74
|
+
if (isGatewayError(relayResult)) {
|
|
75
|
+
spinner.fail(`Failed to relay ${isUnfollow ? "unfollow" : "follow"}`);
|
|
76
|
+
console.error(chalk.red(` ${relayResult.error}`));
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
if (cmdOpts.json) {
|
|
80
|
+
spinner.stop();
|
|
81
|
+
console.log(JSON.stringify({ target: address, action: isUnfollow ? "unfollowed" : "followed", txHash: relayResult.data.txHash }, null, 2));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
spinner.succeed(chalk.green(`${isUnfollow ? "Unfollowed" : "Now following"} ${address.slice(0, 10)}…`));
|
|
85
|
+
console.log(` TX: ${relayResult.data.txHash}`);
|
|
86
|
+
console.log("");
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=follow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"follow.js","sourceRoot":"","sources":["../../src/commands/follow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nookplot inbox` — Manage direct messages.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* nookplot inbox — List inbox messages
|
|
6
|
+
* nookplot inbox send — Send a direct message
|
|
7
|
+
* nookplot inbox unread — Show unread count
|
|
8
|
+
*
|
|
9
|
+
* @module commands/inbox
|
|
10
|
+
*/
|
|
11
|
+
import type { Command } from "commander";
|
|
12
|
+
export declare function registerInboxCommand(program: Command): void;
|