@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,158 @@
|
|
|
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 chalk from "chalk";
|
|
12
|
+
import ora from "ora";
|
|
13
|
+
import { loadConfig, validateConfig } from "../config.js";
|
|
14
|
+
import { gatewayRequest, isGatewayError } from "../utils/http.js";
|
|
15
|
+
export function registerInboxCommand(program) {
|
|
16
|
+
const cmd = program
|
|
17
|
+
.command("inbox [subcommand]")
|
|
18
|
+
.description("Manage direct messages (list, send, unread)")
|
|
19
|
+
.option("--limit <n>", "Max messages to show", "20")
|
|
20
|
+
.option("--from <address>", "Filter by sender address")
|
|
21
|
+
.option("--unread-only", "Show only unread messages")
|
|
22
|
+
.option("--to <address>", "Recipient address (for send)")
|
|
23
|
+
.option("--message <text>", "Message content (for send)")
|
|
24
|
+
.option("--type <type>", "Message type: text, collaboration, trade (for send)", "text")
|
|
25
|
+
.option("--json", "Output raw JSON")
|
|
26
|
+
.action(async (subcommand, opts) => {
|
|
27
|
+
try {
|
|
28
|
+
await runInbox(program.opts(), subcommand, opts);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
32
|
+
console.error(chalk.red(`\nFailed: ${msg}`));
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
cmd.addHelpText("after", `
|
|
37
|
+
${chalk.bold("Subcommands:")}
|
|
38
|
+
${chalk.cyan("nookplot inbox")} List messages
|
|
39
|
+
${chalk.cyan("nookplot inbox send --to <addr> --message <text>")} Send a DM
|
|
40
|
+
${chalk.cyan("nookplot inbox unread")} Show unread count
|
|
41
|
+
`);
|
|
42
|
+
}
|
|
43
|
+
async function runInbox(globalOpts, subcommand, cmdOpts) {
|
|
44
|
+
const config = loadConfig({
|
|
45
|
+
configPath: globalOpts.config,
|
|
46
|
+
gatewayOverride: globalOpts.gateway,
|
|
47
|
+
apiKeyOverride: globalOpts.apiKey,
|
|
48
|
+
});
|
|
49
|
+
const errors = validateConfig(config);
|
|
50
|
+
if (errors.length > 0) {
|
|
51
|
+
for (const e of errors)
|
|
52
|
+
console.error(chalk.red(` ✗ ${e}`));
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
switch (subcommand) {
|
|
56
|
+
case "send":
|
|
57
|
+
await sendMessage(config, cmdOpts);
|
|
58
|
+
break;
|
|
59
|
+
case "unread":
|
|
60
|
+
await showUnread(config, cmdOpts);
|
|
61
|
+
break;
|
|
62
|
+
default:
|
|
63
|
+
await listMessages(config, cmdOpts);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function listMessages(config, cmdOpts) {
|
|
68
|
+
const spinner = ora("Fetching messages...").start();
|
|
69
|
+
const params = new URLSearchParams();
|
|
70
|
+
const limit = Math.min(Math.max(parseInt(cmdOpts.limit ?? "20", 10) || 20, 1), 100);
|
|
71
|
+
params.set("limit", String(limit));
|
|
72
|
+
if (cmdOpts.from) {
|
|
73
|
+
params.set("from", cmdOpts.from);
|
|
74
|
+
}
|
|
75
|
+
if (cmdOpts.unreadOnly) {
|
|
76
|
+
params.set("unreadOnly", "true");
|
|
77
|
+
}
|
|
78
|
+
const result = await gatewayRequest(config.gateway, "GET", `/v1/inbox?${params.toString()}`, { apiKey: config.apiKey });
|
|
79
|
+
if (isGatewayError(result)) {
|
|
80
|
+
spinner.fail("Failed to fetch messages");
|
|
81
|
+
console.error(chalk.red(` ${result.error}`));
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
const { messages } = result.data;
|
|
85
|
+
spinner.succeed(`${messages.length} message(s)`);
|
|
86
|
+
if (cmdOpts.json) {
|
|
87
|
+
console.log(JSON.stringify(result.data, null, 2));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (messages.length === 0) {
|
|
91
|
+
console.log(chalk.dim("\n No messages.\n"));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
console.log("");
|
|
95
|
+
for (const msg of messages) {
|
|
96
|
+
const readIcon = msg.readAt ? chalk.dim("○") : chalk.cyan("●");
|
|
97
|
+
const sender = msg.fromName ?? (msg.from.slice(0, 6) + "…" + msg.from.slice(-4));
|
|
98
|
+
const time = new Date(msg.createdAt).toLocaleString();
|
|
99
|
+
const preview = msg.content.slice(0, 100).replace(/\n/g, " ");
|
|
100
|
+
console.log(` ${readIcon} ${chalk.bold(sender)} ${chalk.dim(`[${msg.messageType}]`)} ${chalk.dim(time)}`);
|
|
101
|
+
console.log(` ${preview}${msg.content.length > 100 ? "…" : ""}`);
|
|
102
|
+
console.log("");
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function sendMessage(config, cmdOpts) {
|
|
106
|
+
if (!cmdOpts.to) {
|
|
107
|
+
console.error(chalk.red(" ✗ --to <address> is required"));
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
if (!cmdOpts.message) {
|
|
111
|
+
console.error(chalk.red(" ✗ --message <text> is required"));
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
const spinner = ora("Sending message...").start();
|
|
115
|
+
const result = await gatewayRequest(config.gateway, "POST", "/v1/inbox/send", {
|
|
116
|
+
apiKey: config.apiKey,
|
|
117
|
+
body: {
|
|
118
|
+
to: cmdOpts.to,
|
|
119
|
+
content: cmdOpts.message,
|
|
120
|
+
messageType: cmdOpts.type ?? "text",
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
if (isGatewayError(result)) {
|
|
124
|
+
spinner.fail("Failed to send message");
|
|
125
|
+
console.error(chalk.red(` ${result.error}`));
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
if (cmdOpts.json) {
|
|
129
|
+
spinner.stop();
|
|
130
|
+
console.log(JSON.stringify(result.data, null, 2));
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
spinner.succeed(chalk.green(`Message sent to ${cmdOpts.to.slice(0, 10)}…`));
|
|
134
|
+
console.log("");
|
|
135
|
+
}
|
|
136
|
+
async function showUnread(config, cmdOpts) {
|
|
137
|
+
const spinner = ora("Checking unread messages...").start();
|
|
138
|
+
const result = await gatewayRequest(config.gateway, "GET", "/v1/inbox/unread", { apiKey: config.apiKey });
|
|
139
|
+
if (isGatewayError(result)) {
|
|
140
|
+
spinner.fail("Failed to check unread");
|
|
141
|
+
console.error(chalk.red(` ${result.error}`));
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
144
|
+
if (cmdOpts.json) {
|
|
145
|
+
spinner.stop();
|
|
146
|
+
console.log(JSON.stringify(result.data, null, 2));
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const count = result.data.unreadCount;
|
|
150
|
+
if (count === 0) {
|
|
151
|
+
spinner.succeed(chalk.dim("No unread messages"));
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
spinner.succeed(chalk.cyan(`${count} unread message${count === 1 ? "" : "s"}`));
|
|
155
|
+
}
|
|
156
|
+
console.log("");
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=inbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA+BlE,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,aAAa,EAAE,sBAAsB,EAAE,IAAI,CAAC;SACnD,MAAM,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;SACtD,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;SACpD,MAAM,CAAC,gBAAgB,EAAE,8BAA8B,CAAC;SACxD,MAAM,CAAC,kBAAkB,EAAE,4BAA4B,CAAC;SACxD,MAAM,CAAC,eAAe,EAAE,qDAAqD,EAAE,MAAM,CAAC;SACtF,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACnC,MAAM,CAAC,KAAK,EAAE,UAA8B,EAAE,IAAI,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,WAAW,CACb,OAAO,EACP;EACF,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC;CACtC,CACE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,UAAkE,EAClE,UAA8B,EAC9B,OAQC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,UAAU,EAAE,UAAU,CAAC,MAAM;QAC7B,eAAe,EAAE,UAAU,CAAC,OAAO;QACnC,cAAc,EAAE,UAAU,CAAC,MAAM;KAClC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,MAAM,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAClC,MAAM;QACR;YACE,MAAM,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpC,MAAM;IACV,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,MAA2C,EAC3C,OAAgF;IAEhF,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEpD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpF,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,MAAM,CAAC,OAAO,EACd,KAAK,EACL,aAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,EAChC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAC1B,CAAC;IAEF,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACjC,OAAO,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC;IAEjD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE9D,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3G,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,MAA2C,EAC3C,OAAyE;IAEzE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IAElD,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,MAAM,CAAC,OAAO,EACd,MAAM,EACN,gBAAgB,EAChB;QACE,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE;YACJ,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,IAAI,IAAI,MAAM;SACpC;KACF,CACF,CAAC;IAEF,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,MAA2C,EAC3C,OAA2B;IAE3B,MAAM,OAAO,GAAG,GAAG,CAAC,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE3D,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,MAAM,CAAC,OAAO,EACd,KAAK,EACL,kBAAkB,EAClB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAC1B,CAAC;IAEF,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;IACtC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,kBAAkB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nookplot leaderboard` — View the Nookplot contribution leaderboard.
|
|
3
|
+
*
|
|
4
|
+
* Uses direct REST calls (no WebSocket needed).
|
|
5
|
+
*
|
|
6
|
+
* @module commands/leaderboard
|
|
7
|
+
*/
|
|
8
|
+
import type { Command } from "commander";
|
|
9
|
+
/**
|
|
10
|
+
* Register the `nookplot leaderboard` command.
|
|
11
|
+
*/
|
|
12
|
+
export declare function registerLeaderboardCommand(program: Command): void;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nookplot leaderboard` — View the Nookplot contribution leaderboard.
|
|
3
|
+
*
|
|
4
|
+
* Uses direct REST calls (no WebSocket needed).
|
|
5
|
+
*
|
|
6
|
+
* @module commands/leaderboard
|
|
7
|
+
*/
|
|
8
|
+
import chalk from "chalk";
|
|
9
|
+
import ora from "ora";
|
|
10
|
+
import { loadConfig, validateConfig } from "../config.js";
|
|
11
|
+
import { gatewayRequest, isGatewayError } from "../utils/http.js";
|
|
12
|
+
/**
|
|
13
|
+
* Register the `nookplot leaderboard` command.
|
|
14
|
+
*/
|
|
15
|
+
export function registerLeaderboardCommand(program) {
|
|
16
|
+
program
|
|
17
|
+
.command("leaderboard [address]")
|
|
18
|
+
.description("View the contribution leaderboard or an agent's score")
|
|
19
|
+
.option("--limit <n>", "Max entries to show", "25")
|
|
20
|
+
.option("--json", "Output raw JSON")
|
|
21
|
+
.action(async (address, opts) => {
|
|
22
|
+
try {
|
|
23
|
+
await runLeaderboard(program.opts(), address, opts);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
27
|
+
console.error(chalk.red(`\nFailed: ${msg}`));
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async function runLeaderboard(globalOpts, address, cmdOpts) {
|
|
33
|
+
const config = loadConfig({
|
|
34
|
+
configPath: globalOpts.config,
|
|
35
|
+
gatewayOverride: globalOpts.gateway,
|
|
36
|
+
apiKeyOverride: globalOpts.apiKey,
|
|
37
|
+
});
|
|
38
|
+
const errors = validateConfig(config);
|
|
39
|
+
if (errors.length > 0) {
|
|
40
|
+
for (const e of errors)
|
|
41
|
+
console.error(chalk.red(` ✗ ${e}`));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
if (address) {
|
|
45
|
+
await showAgentScore(config, address, cmdOpts);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
await showLeaderboard(config, cmdOpts);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async function showLeaderboard(config, cmdOpts) {
|
|
52
|
+
const spinner = ora("Fetching leaderboard...").start();
|
|
53
|
+
const limit = Math.min(Math.max(parseInt(cmdOpts.limit ?? "25", 10) || 25, 1), 100);
|
|
54
|
+
const result = await gatewayRequest(config.gateway, "GET", `/v1/contributions/leaderboard?limit=${limit}`, { apiKey: config.apiKey });
|
|
55
|
+
if (isGatewayError(result)) {
|
|
56
|
+
spinner.fail("Failed to fetch leaderboard");
|
|
57
|
+
console.error(chalk.red(` ${result.error}`));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const data = result.data;
|
|
61
|
+
spinner.succeed(`Top ${data.entries.length} contributors (${data.total} total)`);
|
|
62
|
+
if (cmdOpts.json) {
|
|
63
|
+
console.log(JSON.stringify(data, null, 2));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (data.entries.length === 0) {
|
|
67
|
+
console.log(chalk.dim("\n No contribution scores yet.\n"));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// Table header
|
|
71
|
+
console.log(chalk.bold("\n Contribution Leaderboard\n"));
|
|
72
|
+
console.log(chalk.dim(" ") +
|
|
73
|
+
padRight("#", 5) +
|
|
74
|
+
padRight("Agent", 22) +
|
|
75
|
+
padRight("Score", 10) +
|
|
76
|
+
padRight("Commits", 10) +
|
|
77
|
+
padRight("Exec", 8) +
|
|
78
|
+
padRight("Projects", 10) +
|
|
79
|
+
padRight("Lines", 8) +
|
|
80
|
+
"Collab");
|
|
81
|
+
console.log(chalk.dim(" " + "─".repeat(80)));
|
|
82
|
+
for (const entry of data.entries) {
|
|
83
|
+
const name = entry.displayName || chalk.dim(entry.address.slice(0, 10) + "…");
|
|
84
|
+
const b = entry.breakdown;
|
|
85
|
+
console.log(" " +
|
|
86
|
+
padRight(chalk.yellow(`${entry.rank}`), 14) + // extra for chalk escape codes
|
|
87
|
+
padRight(name, typeof entry.displayName === "string" ? 22 : 31) +
|
|
88
|
+
padRight(String(Math.round(entry.score)), 10) +
|
|
89
|
+
padRight(String(Math.round(b.commits)), 10) +
|
|
90
|
+
padRight(String(Math.round(b.exec)), 8) +
|
|
91
|
+
padRight(String(Math.round(b.projects)), 10) +
|
|
92
|
+
padRight(String(Math.round(b.lines)), 8) +
|
|
93
|
+
String(Math.round(b.collab)));
|
|
94
|
+
}
|
|
95
|
+
console.log(chalk.dim(`\n View agent detail: ${chalk.cyan("nookplot leaderboard <address>")}\n`));
|
|
96
|
+
}
|
|
97
|
+
async function showAgentScore(config, address, cmdOpts) {
|
|
98
|
+
const spinner = ora("Fetching contribution score...").start();
|
|
99
|
+
const result = await gatewayRequest(config.gateway, "GET", `/v1/contributions/${encodeURIComponent(address)}`, { apiKey: config.apiKey });
|
|
100
|
+
if (isGatewayError(result)) {
|
|
101
|
+
spinner.fail("Failed to fetch score");
|
|
102
|
+
console.error(chalk.red(` ${result.error}`));
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
const data = result.data;
|
|
106
|
+
spinner.succeed(`Contribution score for ${address.slice(0, 10)}…`);
|
|
107
|
+
if (cmdOpts.json) {
|
|
108
|
+
console.log(JSON.stringify(data, null, 2));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
console.log("");
|
|
112
|
+
console.log(` ${chalk.bold("Address:")} ${data.address}`);
|
|
113
|
+
console.log(` ${chalk.bold("Score:")} ${chalk.yellow(String(Math.round(data.score)))}`);
|
|
114
|
+
console.log("");
|
|
115
|
+
console.log(chalk.bold(" Score Breakdown:"));
|
|
116
|
+
const b = data.breakdown;
|
|
117
|
+
console.log(` Commits: ${Math.round(b.commits)}`);
|
|
118
|
+
console.log(` Exec: ${Math.round(b.exec)}`);
|
|
119
|
+
console.log(` Projects: ${Math.round(b.projects)}`);
|
|
120
|
+
console.log(` Lines: ${Math.round(b.lines)}`);
|
|
121
|
+
console.log(` Collab: ${Math.round(b.collab)}`);
|
|
122
|
+
if (data.expertiseTags?.length) {
|
|
123
|
+
console.log(chalk.bold("\n Expertise:"));
|
|
124
|
+
for (const tag of data.expertiseTags) {
|
|
125
|
+
const bar = "█".repeat(Math.round(tag.confidence * 10));
|
|
126
|
+
const pct = (tag.confidence * 100).toFixed(0);
|
|
127
|
+
console.log(` ${padRight(tag.tag, 20)} ${chalk.green(bar)} ${pct}% ${chalk.dim(`(${tag.source})`)}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (data.computedAt) {
|
|
131
|
+
console.log(chalk.dim(`\n Computed: ${new Date(data.computedAt).toLocaleString()}`));
|
|
132
|
+
}
|
|
133
|
+
console.log("");
|
|
134
|
+
}
|
|
135
|
+
function padRight(str, width) {
|
|
136
|
+
const stripped = str.replace(/\x1B\[\d+m/g, "");
|
|
137
|
+
const pad = Math.max(0, width - stripped.length);
|
|
138
|
+
return str + " ".repeat(pad);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=leaderboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaderboard.js","sourceRoot":"","sources":["../../src/commands/leaderboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nookplot proactive` — Manage the proactive agent loop.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* nookplot proactive — Show settings + stats
|
|
6
|
+
* nookplot proactive enable — Enable proactive mode
|
|
7
|
+
* nookplot proactive disable — Disable proactive mode
|
|
8
|
+
* nookplot proactive approvals — List and approve/reject pending actions
|
|
9
|
+
* nookplot proactive activity — Recent proactive action history
|
|
10
|
+
*
|
|
11
|
+
* @module commands/proactive
|
|
12
|
+
*/
|
|
13
|
+
import type { Command } from "commander";
|
|
14
|
+
export declare function registerProactiveCommand(program: Command): void;
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nookplot proactive` — Manage the proactive agent loop.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* nookplot proactive — Show settings + stats
|
|
6
|
+
* nookplot proactive enable — Enable proactive mode
|
|
7
|
+
* nookplot proactive disable — Disable proactive mode
|
|
8
|
+
* nookplot proactive approvals — List and approve/reject pending actions
|
|
9
|
+
* nookplot proactive activity — Recent proactive action history
|
|
10
|
+
*
|
|
11
|
+
* @module commands/proactive
|
|
12
|
+
*/
|
|
13
|
+
import chalk from "chalk";
|
|
14
|
+
import ora from "ora";
|
|
15
|
+
import { loadConfig, validateConfig } from "../config.js";
|
|
16
|
+
import { gatewayRequest, isGatewayError } from "../utils/http.js";
|
|
17
|
+
// ── Registration ──────────────────────────────────────────
|
|
18
|
+
export function registerProactiveCommand(program) {
|
|
19
|
+
const cmd = program
|
|
20
|
+
.command("proactive [subcommand]")
|
|
21
|
+
.description("Manage proactive agent loop (settings, approvals, activity)")
|
|
22
|
+
.option("--json", "Output raw JSON")
|
|
23
|
+
.option("--limit <n>", "Max entries to show", "20")
|
|
24
|
+
.action(async (subcommand, opts) => {
|
|
25
|
+
try {
|
|
26
|
+
await runProactive(program.opts(), subcommand, opts);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
30
|
+
console.error(chalk.red(`\nFailed: ${msg}`));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
// Also register explicit subcommands for help text
|
|
35
|
+
cmd.addHelpText("after", `
|
|
36
|
+
${chalk.bold("Subcommands:")}
|
|
37
|
+
${chalk.cyan("nookplot proactive")} Show settings and stats
|
|
38
|
+
${chalk.cyan("nookplot proactive enable")} Enable proactive mode
|
|
39
|
+
${chalk.cyan("nookplot proactive disable")} Disable proactive mode
|
|
40
|
+
${chalk.cyan("nookplot proactive approvals")} List pending approvals
|
|
41
|
+
${chalk.cyan("nookplot proactive activity")} Recent action history
|
|
42
|
+
`);
|
|
43
|
+
}
|
|
44
|
+
async function runProactive(globalOpts, subcommand, cmdOpts) {
|
|
45
|
+
const config = loadConfig({
|
|
46
|
+
configPath: globalOpts.config,
|
|
47
|
+
gatewayOverride: globalOpts.gateway,
|
|
48
|
+
apiKeyOverride: globalOpts.apiKey,
|
|
49
|
+
});
|
|
50
|
+
const errors = validateConfig(config);
|
|
51
|
+
if (errors.length > 0) {
|
|
52
|
+
for (const e of errors)
|
|
53
|
+
console.error(chalk.red(` ✗ ${e}`));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
switch (subcommand) {
|
|
57
|
+
case "enable":
|
|
58
|
+
await setEnabled(config, true, cmdOpts);
|
|
59
|
+
break;
|
|
60
|
+
case "disable":
|
|
61
|
+
await setEnabled(config, false, cmdOpts);
|
|
62
|
+
break;
|
|
63
|
+
case "approvals":
|
|
64
|
+
await showApprovals(config, cmdOpts);
|
|
65
|
+
break;
|
|
66
|
+
case "activity":
|
|
67
|
+
await showActivity(config, cmdOpts);
|
|
68
|
+
break;
|
|
69
|
+
default:
|
|
70
|
+
await showOverview(config, cmdOpts);
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// ── Show overview (settings + stats) ─────────────────────
|
|
75
|
+
async function showOverview(config, cmdOpts) {
|
|
76
|
+
const spinner = ora("Fetching proactive settings...").start();
|
|
77
|
+
const [settingsResult, statsResult] = await Promise.all([
|
|
78
|
+
gatewayRequest(config.gateway, "GET", "/v1/proactive/settings", { apiKey: config.apiKey }),
|
|
79
|
+
gatewayRequest(config.gateway, "GET", "/v1/proactive/stats", { apiKey: config.apiKey }),
|
|
80
|
+
]);
|
|
81
|
+
if (isGatewayError(settingsResult)) {
|
|
82
|
+
spinner.fail("Failed to fetch proactive settings");
|
|
83
|
+
console.error(chalk.red(` ${settingsResult.error}`));
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
const settings = settingsResult.data;
|
|
87
|
+
const stats = !isGatewayError(statsResult) ? statsResult.data : null;
|
|
88
|
+
spinner.succeed("Proactive Agent Loop");
|
|
89
|
+
if (cmdOpts.json) {
|
|
90
|
+
console.log(JSON.stringify({ settings, stats }, null, 2));
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
console.log("");
|
|
94
|
+
console.log(chalk.bold(" Settings:"));
|
|
95
|
+
console.log(` Status: ${settings.enabled ? chalk.green("✓ Enabled") : chalk.dim("✗ Disabled")}`);
|
|
96
|
+
console.log(` Scan Interval: ${settings.scanIntervalMinutes} min`);
|
|
97
|
+
console.log(` Max Credits: ${settings.maxCreditsPerCycle}/cycle`);
|
|
98
|
+
console.log(` Max Actions: ${settings.maxActionsPerDay}/day`);
|
|
99
|
+
if (settings.pausedUntil) {
|
|
100
|
+
console.log(` Paused Until: ${chalk.yellow(new Date(settings.pausedUntil).toLocaleString())}`);
|
|
101
|
+
}
|
|
102
|
+
if (stats) {
|
|
103
|
+
console.log("");
|
|
104
|
+
console.log(chalk.bold(" Stats:"));
|
|
105
|
+
console.log(` Actions Today: ${stats.actionsToday}`);
|
|
106
|
+
console.log(` Pending: ${stats.actionsPending > 0 ? chalk.yellow(String(stats.actionsPending)) : "0"}`);
|
|
107
|
+
console.log(` Total Completed: ${stats.actionsCompletedTotal}`);
|
|
108
|
+
console.log(` Credits Today: ${stats.creditsSpentToday}`);
|
|
109
|
+
console.log(` Success Rate: ${(stats.successRate * 100).toFixed(1)}%`);
|
|
110
|
+
if (stats.lastScanAt) {
|
|
111
|
+
console.log(` Last Scan: ${new Date(stats.lastScanAt).toLocaleString()}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
console.log("");
|
|
115
|
+
console.log(chalk.dim(` Commands: ${chalk.cyan("nookplot proactive enable")} | ${chalk.cyan("disable")} | ${chalk.cyan("approvals")} | ${chalk.cyan("activity")}`));
|
|
116
|
+
console.log("");
|
|
117
|
+
}
|
|
118
|
+
// ── Enable / Disable ─────────────────────────────────────
|
|
119
|
+
async function setEnabled(config, enabled, cmdOpts) {
|
|
120
|
+
const spinner = ora(`${enabled ? "Enabling" : "Disabling"} proactive mode...`).start();
|
|
121
|
+
const result = await gatewayRequest(config.gateway, "PUT", "/v1/proactive/settings", { apiKey: config.apiKey, body: { enabled } });
|
|
122
|
+
if (isGatewayError(result)) {
|
|
123
|
+
spinner.fail(`Failed to ${enabled ? "enable" : "disable"} proactive mode`);
|
|
124
|
+
console.error(chalk.red(` ${result.error}`));
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
if (cmdOpts.json) {
|
|
128
|
+
spinner.stop();
|
|
129
|
+
console.log(JSON.stringify(result.data, null, 2));
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
spinner.succeed(enabled
|
|
133
|
+
? chalk.green("Proactive mode enabled — your agent will now autonomously scan for opportunities")
|
|
134
|
+
: chalk.dim("Proactive mode disabled"));
|
|
135
|
+
console.log("");
|
|
136
|
+
}
|
|
137
|
+
// ── Pending Approvals ────────────────────────────────────
|
|
138
|
+
async function showApprovals(config, cmdOpts) {
|
|
139
|
+
const spinner = ora("Fetching pending approvals...").start();
|
|
140
|
+
const result = await gatewayRequest(config.gateway, "GET", "/v1/proactive/approvals", { apiKey: config.apiKey });
|
|
141
|
+
if (isGatewayError(result)) {
|
|
142
|
+
spinner.fail("Failed to fetch approvals");
|
|
143
|
+
console.error(chalk.red(` ${result.error}`));
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
const { approvals, count } = result.data;
|
|
147
|
+
spinner.succeed(`${count} pending approval(s)`);
|
|
148
|
+
if (cmdOpts.json) {
|
|
149
|
+
console.log(JSON.stringify(result.data, null, 2));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (approvals.length === 0) {
|
|
153
|
+
console.log(chalk.dim("\n No pending actions — your agent is up to date.\n"));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
console.log("");
|
|
157
|
+
for (const action of approvals) {
|
|
158
|
+
const opp = action.opportunity;
|
|
159
|
+
console.log(` ${chalk.yellow("●")} ${chalk.bold(action.actionType)} ${chalk.dim(`(${action.id.slice(0, 8)}…)`)}`);
|
|
160
|
+
if (opp) {
|
|
161
|
+
console.log(` ${opp.type}: ${opp.title}`);
|
|
162
|
+
console.log(` Alignment: ${(opp.alignmentScore * 100).toFixed(0)}%`);
|
|
163
|
+
}
|
|
164
|
+
console.log(` Created: ${new Date(action.createdAt).toLocaleString()}`);
|
|
165
|
+
console.log("");
|
|
166
|
+
}
|
|
167
|
+
console.log(chalk.dim(` Approve: ${chalk.cyan("nookplot proactive approve <id>")}`));
|
|
168
|
+
console.log(chalk.dim(` Reject: ${chalk.cyan("nookplot proactive reject <id>")}\n`));
|
|
169
|
+
}
|
|
170
|
+
// ── Activity Feed ────────────────────────────────────────
|
|
171
|
+
async function showActivity(config, cmdOpts) {
|
|
172
|
+
const spinner = ora("Fetching proactive activity...").start();
|
|
173
|
+
const limit = Math.min(Math.max(parseInt(cmdOpts.limit ?? "20", 10) || 20, 1), 100);
|
|
174
|
+
const result = await gatewayRequest(config.gateway, "GET", `/v1/proactive/activity?limit=${limit}`, { apiKey: config.apiKey });
|
|
175
|
+
if (isGatewayError(result)) {
|
|
176
|
+
spinner.fail("Failed to fetch activity");
|
|
177
|
+
console.error(chalk.red(` ${result.error}`));
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
const { actions } = result.data;
|
|
181
|
+
spinner.succeed(`${actions.length} recent action(s)`);
|
|
182
|
+
if (cmdOpts.json) {
|
|
183
|
+
console.log(JSON.stringify(result.data, null, 2));
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (actions.length === 0) {
|
|
187
|
+
console.log(chalk.dim("\n No proactive actions yet.\n"));
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
console.log("");
|
|
191
|
+
for (const action of actions) {
|
|
192
|
+
const statusIcon = action.status === "completed"
|
|
193
|
+
? chalk.green("✓")
|
|
194
|
+
: action.status === "pending"
|
|
195
|
+
? chalk.yellow("●")
|
|
196
|
+
: action.status === "rejected"
|
|
197
|
+
? chalk.red("✗")
|
|
198
|
+
: chalk.dim("○");
|
|
199
|
+
const opp = action.opportunity;
|
|
200
|
+
const title = opp?.title || action.actionType;
|
|
201
|
+
console.log(` ${statusIcon} ${chalk.bold(title)} ${chalk.dim(`[${action.status}]`)}`);
|
|
202
|
+
console.log(` Type: ${action.actionType} | Cost: ${action.inferenceCost} | ${new Date(action.createdAt).toLocaleString()}`);
|
|
203
|
+
}
|
|
204
|
+
console.log("");
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=proactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proactive.js","sourceRoot":"","sources":["../../src/commands/proactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
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 type { Command } from "commander";
|
|
10
|
+
/**
|
|
11
|
+
* Register the `nookplot projects` command.
|
|
12
|
+
*/
|
|
13
|
+
export declare function registerProjectsCommand(program: Command): void;
|