@nookplot/cli 0.6.20 → 0.6.22
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/knowledge.d.ts +12 -0
- package/dist/commands/knowledge.js +151 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/listen.js +132 -40
- package/dist/commands/listen.js.map +1 -1
- package/dist/commands/workspace.d.ts +17 -0
- package/dist/commands/workspace.js +315 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/agentLoop.js +82 -30
- package/dist/utils/agentLoop.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nookplot workspace` — Shared state spaces (workspaces).
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* nookplot workspace — List my workspaces
|
|
6
|
+
* nookplot workspace list — List my workspaces
|
|
7
|
+
* nookplot workspace create <name> [desc] — Create a workspace
|
|
8
|
+
* nookplot workspace get <id> — Get workspace + current state
|
|
9
|
+
* nookplot workspace set <id> <key> <val> — Set key (value parsed as JSON, fallback to string)
|
|
10
|
+
* nookplot workspace snapshot <id> [label] — Create snapshot
|
|
11
|
+
* nookplot workspace members <id> — List members
|
|
12
|
+
* nookplot workspace activity <id> — Activity log
|
|
13
|
+
*
|
|
14
|
+
* @module commands/workspace
|
|
15
|
+
*/
|
|
16
|
+
import chalk from "chalk";
|
|
17
|
+
import ora from "ora";
|
|
18
|
+
import { loadConfig, validateConfig } from "../config.js";
|
|
19
|
+
import { gatewayRequest, isGatewayError } from "../utils/http.js";
|
|
20
|
+
function resolveConfig(globalOpts) {
|
|
21
|
+
const cfg = loadConfig({
|
|
22
|
+
configPath: globalOpts.config,
|
|
23
|
+
gatewayOverride: globalOpts.gateway,
|
|
24
|
+
apiKeyOverride: globalOpts.apiKey,
|
|
25
|
+
});
|
|
26
|
+
const errors = validateConfig(cfg);
|
|
27
|
+
if (errors.length > 0) {
|
|
28
|
+
for (const e of errors)
|
|
29
|
+
console.error(chalk.red(` ✗ ${e}`));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
return cfg;
|
|
33
|
+
}
|
|
34
|
+
async function gw(cfg, method, path, body) {
|
|
35
|
+
const result = await gatewayRequest(cfg.gateway, method, path, { apiKey: cfg.apiKey, body });
|
|
36
|
+
if (isGatewayError(result)) {
|
|
37
|
+
throw result;
|
|
38
|
+
}
|
|
39
|
+
return result.data;
|
|
40
|
+
}
|
|
41
|
+
export function registerWorkspaceCommand(program) {
|
|
42
|
+
const cmd = program
|
|
43
|
+
.command("workspace")
|
|
44
|
+
.description("Manage shared state workspaces")
|
|
45
|
+
.option("--json", "Output JSON");
|
|
46
|
+
// Default action: list workspaces
|
|
47
|
+
cmd.action(async (opts) => {
|
|
48
|
+
await listWorkspaces(program.opts(), opts);
|
|
49
|
+
});
|
|
50
|
+
cmd
|
|
51
|
+
.command("list")
|
|
52
|
+
.description("List my workspaces")
|
|
53
|
+
.option("--json", "Output JSON")
|
|
54
|
+
.action(async (localOpts) => {
|
|
55
|
+
await listWorkspaces(program.opts(), { json: localOpts.json || cmd.opts().json });
|
|
56
|
+
});
|
|
57
|
+
cmd
|
|
58
|
+
.command("create <name> [description]")
|
|
59
|
+
.description("Create a new workspace")
|
|
60
|
+
.option("--source-type <type>", "Source type (standalone|project|guild|bounty)")
|
|
61
|
+
.option("--source-id <id>", "Source entity ID")
|
|
62
|
+
.option("--json", "Output JSON")
|
|
63
|
+
.action(async (name, description, localOpts) => {
|
|
64
|
+
await createWorkspace(program.opts(), name, description, { ...localOpts, json: localOpts.json || cmd.opts().json });
|
|
65
|
+
});
|
|
66
|
+
cmd
|
|
67
|
+
.command("get <id>")
|
|
68
|
+
.description("Get workspace details and current state")
|
|
69
|
+
.option("--json", "Output JSON")
|
|
70
|
+
.action(async (id, localOpts) => {
|
|
71
|
+
await getWorkspace(program.opts(), id, { json: localOpts.json || cmd.opts().json });
|
|
72
|
+
});
|
|
73
|
+
cmd
|
|
74
|
+
.command("set <id> <key> <value>")
|
|
75
|
+
.description("Set a key-value pair (value parsed as JSON, fallback to string)")
|
|
76
|
+
.option("--json", "Output JSON")
|
|
77
|
+
.action(async (id, key, value, localOpts) => {
|
|
78
|
+
await setState(program.opts(), id, key, value, { json: localOpts.json || cmd.opts().json });
|
|
79
|
+
});
|
|
80
|
+
cmd
|
|
81
|
+
.command("snapshot <id> [label]")
|
|
82
|
+
.description("Create a snapshot of current state")
|
|
83
|
+
.option("--json", "Output JSON")
|
|
84
|
+
.action(async (id, label, localOpts) => {
|
|
85
|
+
await createSnapshot(program.opts(), id, label, { json: localOpts.json || cmd.opts().json });
|
|
86
|
+
});
|
|
87
|
+
cmd
|
|
88
|
+
.command("members <id>")
|
|
89
|
+
.description("List workspace members")
|
|
90
|
+
.option("--json", "Output JSON")
|
|
91
|
+
.action(async (id, localOpts) => {
|
|
92
|
+
await listMembers(program.opts(), id, { json: localOpts.json || cmd.opts().json });
|
|
93
|
+
});
|
|
94
|
+
cmd
|
|
95
|
+
.command("activity <id>")
|
|
96
|
+
.description("View workspace activity log")
|
|
97
|
+
.option("--json", "Output JSON")
|
|
98
|
+
.action(async (id, localOpts) => {
|
|
99
|
+
await viewActivity(program.opts(), id, { json: localOpts.json || cmd.opts().json });
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// ─── Implementations ──────────────────────────────────────────────────────────
|
|
103
|
+
async function listWorkspaces(globalOpts, opts) {
|
|
104
|
+
const cfg = resolveConfig(globalOpts);
|
|
105
|
+
const spinner = opts.json ? undefined : ora("Fetching workspaces…").start();
|
|
106
|
+
try {
|
|
107
|
+
const data = await gw(cfg, "GET", "/v1/workspaces");
|
|
108
|
+
spinner?.stop();
|
|
109
|
+
if (opts.json) {
|
|
110
|
+
console.log(JSON.stringify(data, null, 2));
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const workspaces = data.workspaces ?? [];
|
|
114
|
+
if (workspaces.length === 0) {
|
|
115
|
+
console.log(chalk.dim("No workspaces found. Create one with: nookplot workspace create <name>"));
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
console.log(chalk.bold(`\nWorkspaces (${workspaces.length}):\n`));
|
|
119
|
+
for (const ws of workspaces) {
|
|
120
|
+
const archived = ws.is_archived ? chalk.red(" [archived]") : "";
|
|
121
|
+
console.log(` ${chalk.cyan(ws.name)}${archived} ${chalk.dim(ws.id)}`);
|
|
122
|
+
if (ws.description)
|
|
123
|
+
console.log(` ${chalk.dim(ws.description)}`);
|
|
124
|
+
console.log(` source: ${ws.source_type} keys: max ${ws.max_keys}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
spinner?.fail("Failed to list workspaces");
|
|
129
|
+
if (isGatewayError(err))
|
|
130
|
+
console.error(chalk.red(` ${err.error}`));
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async function createWorkspace(globalOpts, name, description, opts) {
|
|
135
|
+
const cfg = resolveConfig(globalOpts);
|
|
136
|
+
const spinner = opts.json ? undefined : ora("Creating workspace…").start();
|
|
137
|
+
try {
|
|
138
|
+
const body = { name };
|
|
139
|
+
if (description)
|
|
140
|
+
body.description = description;
|
|
141
|
+
if (opts.sourceType)
|
|
142
|
+
body.sourceType = opts.sourceType;
|
|
143
|
+
if (opts.sourceId)
|
|
144
|
+
body.sourceId = opts.sourceId;
|
|
145
|
+
const data = await gw(cfg, "POST", "/v1/workspaces", body);
|
|
146
|
+
spinner?.succeed("Workspace created");
|
|
147
|
+
if (opts.json) {
|
|
148
|
+
console.log(JSON.stringify(data, null, 2));
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
console.log(` ID: ${chalk.cyan(data.id)}`);
|
|
152
|
+
console.log(` Name: ${data.name}`);
|
|
153
|
+
if (data.channel_id)
|
|
154
|
+
console.log(` Channel: ${data.channel_id}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
spinner?.fail("Failed to create workspace");
|
|
159
|
+
if (isGatewayError(err))
|
|
160
|
+
console.error(chalk.red(` ${err.error}`));
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async function getWorkspace(globalOpts, id, opts) {
|
|
165
|
+
const cfg = resolveConfig(globalOpts);
|
|
166
|
+
const spinner = opts.json ? undefined : ora("Fetching workspace…").start();
|
|
167
|
+
try {
|
|
168
|
+
const [ws, stateData] = await Promise.all([
|
|
169
|
+
gw(cfg, "GET", `/v1/workspaces/${id}`),
|
|
170
|
+
gw(cfg, "GET", `/v1/workspaces/${id}/state`),
|
|
171
|
+
]);
|
|
172
|
+
spinner?.stop();
|
|
173
|
+
if (opts.json) {
|
|
174
|
+
console.log(JSON.stringify({ workspace: ws, ...stateData }, null, 2));
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const w = ws;
|
|
178
|
+
console.log(chalk.bold(`\n${w.name}`));
|
|
179
|
+
if (w.description)
|
|
180
|
+
console.log(` ${chalk.dim(w.description)}`);
|
|
181
|
+
console.log(` ID: ${chalk.dim(w.id)}`);
|
|
182
|
+
console.log(` Source: ${w.source_type}${w.source_id ? ` (${w.source_id})` : ""}`);
|
|
183
|
+
console.log(` Channel: ${w.channel_id ?? "none"}`);
|
|
184
|
+
console.log(` Archived: ${w.is_archived}`);
|
|
185
|
+
const state = stateData.state ?? [];
|
|
186
|
+
if (state.length > 0) {
|
|
187
|
+
console.log(chalk.bold(`\n State (${state.length} keys):`));
|
|
188
|
+
for (const s of state) {
|
|
189
|
+
const val = typeof s.value === "string" ? s.value : JSON.stringify(s.value);
|
|
190
|
+
const truncated = val.length > 80 ? val.slice(0, 77) + "…" : val;
|
|
191
|
+
console.log(` ${chalk.green(s.key)} = ${truncated} ${chalk.dim(`v${s.version}`)}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
console.log(chalk.dim("\n No state keys set."));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
spinner?.fail("Failed to get workspace");
|
|
200
|
+
if (isGatewayError(err))
|
|
201
|
+
console.error(chalk.red(` ${err.error}`));
|
|
202
|
+
process.exit(1);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
async function setState(globalOpts, id, key, rawValue, opts) {
|
|
206
|
+
const cfg = resolveConfig(globalOpts);
|
|
207
|
+
// Try to parse as JSON, fall back to string
|
|
208
|
+
let value;
|
|
209
|
+
try {
|
|
210
|
+
value = JSON.parse(rawValue);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
value = rawValue;
|
|
214
|
+
}
|
|
215
|
+
const spinner = opts.json ? undefined : ora(`Setting ${key}…`).start();
|
|
216
|
+
try {
|
|
217
|
+
const data = await gw(cfg, "PUT", `/v1/workspaces/${id}/state`, { key, value });
|
|
218
|
+
spinner?.succeed(`Set ${key}`);
|
|
219
|
+
if (opts.json) {
|
|
220
|
+
console.log(JSON.stringify(data, null, 2));
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
const s = data.state;
|
|
224
|
+
console.log(` ${chalk.green(key)} = ${JSON.stringify(s?.value)} ${chalk.dim(`v${s?.version}`)}`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
spinner?.fail(`Failed to set ${key}`);
|
|
229
|
+
if (isGatewayError(err))
|
|
230
|
+
console.error(chalk.red(` ${err.error}`));
|
|
231
|
+
process.exit(1);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async function createSnapshot(globalOpts, id, label, opts) {
|
|
235
|
+
const cfg = resolveConfig(globalOpts);
|
|
236
|
+
const spinner = opts.json ? undefined : ora("Creating snapshot…").start();
|
|
237
|
+
try {
|
|
238
|
+
const body = {};
|
|
239
|
+
if (label)
|
|
240
|
+
body.label = label;
|
|
241
|
+
const data = await gw(cfg, "POST", `/v1/workspaces/${id}/snapshots`, body);
|
|
242
|
+
spinner?.succeed("Snapshot created");
|
|
243
|
+
if (opts.json) {
|
|
244
|
+
console.log(JSON.stringify(data, null, 2));
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
const s = data;
|
|
248
|
+
console.log(` ID: ${chalk.cyan(s.id)}`);
|
|
249
|
+
console.log(` Label: ${s.label ?? "(none)"}`);
|
|
250
|
+
console.log(` Keys: ${s.key_count}`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
spinner?.fail("Failed to create snapshot");
|
|
255
|
+
if (isGatewayError(err))
|
|
256
|
+
console.error(chalk.red(` ${err.error}`));
|
|
257
|
+
process.exit(1);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
async function listMembers(globalOpts, id, opts) {
|
|
261
|
+
const cfg = resolveConfig(globalOpts);
|
|
262
|
+
const spinner = opts.json ? undefined : ora("Fetching members…").start();
|
|
263
|
+
try {
|
|
264
|
+
const data = await gw(cfg, "GET", `/v1/workspaces/${id}/members`);
|
|
265
|
+
spinner?.stop();
|
|
266
|
+
if (opts.json) {
|
|
267
|
+
console.log(JSON.stringify(data, null, 2));
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
const members = data.members ?? [];
|
|
271
|
+
const roleNames = ["viewer", "editor", "admin", "owner"];
|
|
272
|
+
console.log(chalk.bold(`\nMembers (${members.length}):\n`));
|
|
273
|
+
for (const m of members) {
|
|
274
|
+
const name = m.display_name ?? "";
|
|
275
|
+
const role = roleNames[m.role] ?? `role=${m.role}`;
|
|
276
|
+
console.log(` ${name ? chalk.cyan(name) + " " : ""}${chalk.dim(m.address)} ${chalk.yellow(role)}`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
spinner?.fail("Failed to list members");
|
|
281
|
+
if (isGatewayError(err))
|
|
282
|
+
console.error(chalk.red(` ${err.error}`));
|
|
283
|
+
process.exit(1);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
async function viewActivity(globalOpts, id, opts) {
|
|
287
|
+
const cfg = resolveConfig(globalOpts);
|
|
288
|
+
const spinner = opts.json ? undefined : ora("Fetching activity…").start();
|
|
289
|
+
try {
|
|
290
|
+
const data = await gw(cfg, "GET", `/v1/workspaces/${id}/activity?limit=30`);
|
|
291
|
+
spinner?.stop();
|
|
292
|
+
if (opts.json) {
|
|
293
|
+
console.log(JSON.stringify(data, null, 2));
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
const activity = data.activity ?? [];
|
|
297
|
+
if (activity.length === 0) {
|
|
298
|
+
console.log(chalk.dim("No activity yet."));
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
console.log(chalk.bold(`\nRecent activity (${activity.length}):\n`));
|
|
302
|
+
for (const a of activity) {
|
|
303
|
+
const time = new Date(a.created_at).toLocaleString();
|
|
304
|
+
const keyStr = a.key ? ` ${chalk.green(a.key)}` : "";
|
|
305
|
+
console.log(` ${chalk.dim(time)} ${chalk.yellow(a.action)}${keyStr} ${chalk.dim(a.agent_id.slice(0, 8))}`);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
spinner?.fail("Failed to get activity");
|
|
310
|
+
if (isGatewayError(err))
|
|
311
|
+
console.error(chalk.red(` ${err.error}`));
|
|
312
|
+
process.exit(1);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -44,6 +44,8 @@ import { registerSkillCommand } from "./commands/skill.js";
|
|
|
44
44
|
import { registerSkillsCommand } from "./commands/skills.js";
|
|
45
45
|
import { registerUpCommand } from "./commands/up.js";
|
|
46
46
|
import { registerTeamCommand } from "./commands/team.js";
|
|
47
|
+
import { registerKnowledgeCommand } from "./commands/knowledge.js";
|
|
48
|
+
import { registerWorkspaceCommand } from "./commands/workspace.js";
|
|
47
49
|
import { checkForUpdate } from "./utils/updateCheck.js";
|
|
48
50
|
checkForUpdate(pkgJson.version);
|
|
49
51
|
const program = new Command();
|
|
@@ -99,6 +101,8 @@ registerSkillCommand(program);
|
|
|
99
101
|
registerSkillsCommand(program);
|
|
100
102
|
registerUpCommand(program);
|
|
101
103
|
registerTeamCommand(program);
|
|
104
|
+
registerKnowledgeCommand(program);
|
|
105
|
+
registerWorkspaceCommand(program);
|
|
102
106
|
// ── Parse and execute ───────────────────────────────────────
|
|
103
107
|
program.parse();
|
|
104
108
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/agentLoop.js
CHANGED
|
@@ -463,6 +463,13 @@ export function getAvailableActions(signalType) {
|
|
|
463
463
|
}
|
|
464
464
|
}
|
|
465
465
|
// ── Execute agent action ──────────────────────────────────────
|
|
466
|
+
/** Validate an ID before URL interpolation — must be numeric or UUID. */
|
|
467
|
+
function validateId(id, name) {
|
|
468
|
+
const s = String(id ?? "");
|
|
469
|
+
if (/^\d+$/.test(s) || /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(s))
|
|
470
|
+
return s;
|
|
471
|
+
throw new Error(`Invalid ${name}: ${s}`);
|
|
472
|
+
}
|
|
466
473
|
export async function executeAgentAction(runtime, action, signal, log) {
|
|
467
474
|
const target = action.to || signal.senderAddress || "";
|
|
468
475
|
const content = action.content || "";
|
|
@@ -546,8 +553,9 @@ export async function executeAgentAction(runtime, action, signal, log) {
|
|
|
546
553
|
}
|
|
547
554
|
case "claim":
|
|
548
555
|
case "claim_bounty": {
|
|
549
|
-
const
|
|
550
|
-
if (
|
|
556
|
+
const rawBountyId = action.bountyId || signal.bountyId;
|
|
557
|
+
if (rawBountyId) {
|
|
558
|
+
const bountyId = validateId(rawBountyId, "bountyId");
|
|
551
559
|
const relay = await prepareSignRelay(runtime.connection, `/v1/prepare/bounty/${bountyId}/claim`, {});
|
|
552
560
|
log(`[reactive] Bounty claimed: ${bountyId} (tx: ${relay.txHash})`);
|
|
553
561
|
}
|
|
@@ -557,9 +565,10 @@ export async function executeAgentAction(runtime, action, signal, log) {
|
|
|
557
565
|
break;
|
|
558
566
|
}
|
|
559
567
|
case "approve_bounty_claimer": {
|
|
560
|
-
const
|
|
568
|
+
const rawBountyId = action.bountyId || signal.bountyId;
|
|
561
569
|
const claimer = action.claimer;
|
|
562
|
-
if (
|
|
570
|
+
if (rawBountyId && claimer) {
|
|
571
|
+
const bountyId = validateId(rawBountyId, "bountyId");
|
|
563
572
|
const relay = await prepareSignRelay(runtime.connection, `/v1/prepare/bounty/${bountyId}/approve-claimer`, { claimer });
|
|
564
573
|
log(`[reactive] Bounty claimer approved: ${bountyId} → ${claimer} (tx: ${relay.txHash})`);
|
|
565
574
|
}
|
|
@@ -569,17 +578,15 @@ export async function executeAgentAction(runtime, action, signal, log) {
|
|
|
569
578
|
break;
|
|
570
579
|
}
|
|
571
580
|
case "apply_bounty": {
|
|
572
|
-
const bountyId = (action.bountyId || signal.bountyId);
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
log(`[reactive] Applied to bounty: ${bountyId}`);
|
|
577
|
-
}
|
|
581
|
+
const bountyId = validateId(action.bountyId || signal.bountyId, "bountyId");
|
|
582
|
+
const applyMsg = content || action.message || "";
|
|
583
|
+
await runtime.connection.request("POST", `/v1/bounties/${bountyId}/apply`, { message: applyMsg });
|
|
584
|
+
log(`[reactive] Applied to bounty: ${bountyId}`);
|
|
578
585
|
break;
|
|
579
586
|
}
|
|
580
587
|
case "submit_bounty_work": {
|
|
581
|
-
const bountyId = (action.bountyId || signal.bountyId);
|
|
582
|
-
if (
|
|
588
|
+
const bountyId = validateId(action.bountyId || signal.bountyId, "bountyId");
|
|
589
|
+
if (content) {
|
|
583
590
|
const cids = (action.deliverableCids ?? []);
|
|
584
591
|
await runtime.connection.request("POST", `/v1/bounties/${bountyId}/submissions`, { content, deliverableCids: cids });
|
|
585
592
|
log(`[reactive] Submitted work for bounty: ${bountyId}`);
|
|
@@ -587,30 +594,24 @@ export async function executeAgentAction(runtime, action, signal, log) {
|
|
|
587
594
|
break;
|
|
588
595
|
}
|
|
589
596
|
case "approve_bounty_application": {
|
|
590
|
-
const bountyId = (action.bountyId || signal.bountyId);
|
|
591
|
-
const applicationId = action.applicationId;
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
log(`[reactive] Approved bounty application: ${applicationId} on bounty ${bountyId}`);
|
|
595
|
-
}
|
|
597
|
+
const bountyId = validateId(action.bountyId || signal.bountyId, "bountyId");
|
|
598
|
+
const applicationId = validateId(action.applicationId, "applicationId");
|
|
599
|
+
await runtime.connection.request("POST", `/v1/bounties/${bountyId}/applications/${applicationId}/approve`, {});
|
|
600
|
+
log(`[reactive] Approved bounty application: ${applicationId} on bounty ${bountyId}`);
|
|
596
601
|
break;
|
|
597
602
|
}
|
|
598
603
|
case "reject_bounty_application": {
|
|
599
|
-
const bountyId = (action.bountyId || signal.bountyId);
|
|
600
|
-
const applicationId = action.applicationId;
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
log(`[reactive] Rejected bounty application: ${applicationId} on bounty ${bountyId}`);
|
|
604
|
-
}
|
|
604
|
+
const bountyId = validateId(action.bountyId || signal.bountyId, "bountyId");
|
|
605
|
+
const applicationId = validateId(action.applicationId, "applicationId");
|
|
606
|
+
await runtime.connection.request("POST", `/v1/bounties/${bountyId}/applications/${applicationId}/reject`, {});
|
|
607
|
+
log(`[reactive] Rejected bounty application: ${applicationId} on bounty ${bountyId}`);
|
|
605
608
|
break;
|
|
606
609
|
}
|
|
607
610
|
case "select_bounty_submission": {
|
|
608
|
-
const bountyId = (action.bountyId || signal.bountyId);
|
|
609
|
-
const submissionId = action.submissionId;
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
log(`[reactive] Selected bounty submission: ${submissionId} on bounty ${bountyId}`);
|
|
613
|
-
}
|
|
611
|
+
const bountyId = validateId(action.bountyId || signal.bountyId, "bountyId");
|
|
612
|
+
const submissionId = validateId(action.submissionId, "submissionId");
|
|
613
|
+
await runtime.connection.request("POST", `/v1/bounties/${bountyId}/submissions/${submissionId}/select`, {});
|
|
614
|
+
log(`[reactive] Selected bounty submission: ${submissionId} on bounty ${bountyId}`);
|
|
614
615
|
break;
|
|
615
616
|
}
|
|
616
617
|
case "create_community": {
|
|
@@ -688,6 +689,30 @@ export async function executeAgentAction(runtime, action, signal, log) {
|
|
|
688
689
|
}
|
|
689
690
|
break;
|
|
690
691
|
}
|
|
692
|
+
case "approve_guild": {
|
|
693
|
+
const gId = action.guildId;
|
|
694
|
+
if (gId) {
|
|
695
|
+
const relay = await prepareSignRelay(runtime.connection, `/v1/prepare/guild/${gId}/approve`, {});
|
|
696
|
+
log(`[reactive] Approved guild #${gId} membership (tx: ${relay.txHash})`);
|
|
697
|
+
}
|
|
698
|
+
break;
|
|
699
|
+
}
|
|
700
|
+
case "reject_guild": {
|
|
701
|
+
const gId = action.guildId;
|
|
702
|
+
if (gId) {
|
|
703
|
+
const relay = await prepareSignRelay(runtime.connection, `/v1/prepare/guild/${gId}/reject`, {});
|
|
704
|
+
log(`[reactive] Rejected guild #${gId} membership (tx: ${relay.txHash})`);
|
|
705
|
+
}
|
|
706
|
+
break;
|
|
707
|
+
}
|
|
708
|
+
case "leave_guild": {
|
|
709
|
+
const gId = action.guildId;
|
|
710
|
+
if (gId) {
|
|
711
|
+
const relay = await prepareSignRelay(runtime.connection, `/v1/prepare/guild/${gId}/leave`, {});
|
|
712
|
+
log(`[reactive] Left guild #${gId} (tx: ${relay.txHash})`);
|
|
713
|
+
}
|
|
714
|
+
break;
|
|
715
|
+
}
|
|
691
716
|
case "publish":
|
|
692
717
|
case "create_post": {
|
|
693
718
|
const community = action.community || "general";
|
|
@@ -817,6 +842,7 @@ export async function executeAgentAction(runtime, action, signal, log) {
|
|
|
817
842
|
break;
|
|
818
843
|
}
|
|
819
844
|
// ── Marketplace actions ──
|
|
845
|
+
case "create_listing":
|
|
820
846
|
case "list_service": {
|
|
821
847
|
const title = (content || action.title);
|
|
822
848
|
const desc = action.description || "";
|
|
@@ -1017,6 +1043,32 @@ export async function executeAgentAction(runtime, action, signal, log) {
|
|
|
1017
1043
|
}
|
|
1018
1044
|
break;
|
|
1019
1045
|
}
|
|
1046
|
+
case "workspace_create": {
|
|
1047
|
+
const wsName = (action.name || content);
|
|
1048
|
+
if (wsName) {
|
|
1049
|
+
const ws = await runtime.workspaces.create({ name: wsName, description: action.description });
|
|
1050
|
+
log(`[reactive] Created workspace: ${ws.id}`);
|
|
1051
|
+
}
|
|
1052
|
+
break;
|
|
1053
|
+
}
|
|
1054
|
+
case "workspace_set": {
|
|
1055
|
+
const wsId = action.workspaceId;
|
|
1056
|
+
const wsKey = action.key;
|
|
1057
|
+
const wsVal = action.value ?? content;
|
|
1058
|
+
if (wsId && wsKey) {
|
|
1059
|
+
await runtime.workspaces.setState(wsId, wsKey, wsVal);
|
|
1060
|
+
log(`[reactive] Set ${wsKey} in workspace ${wsId}`);
|
|
1061
|
+
}
|
|
1062
|
+
break;
|
|
1063
|
+
}
|
|
1064
|
+
case "workspace_snapshot": {
|
|
1065
|
+
const wsId = action.workspaceId;
|
|
1066
|
+
if (wsId) {
|
|
1067
|
+
await runtime.workspaces.createSnapshot(wsId, action.label);
|
|
1068
|
+
log(`[reactive] Created snapshot in workspace ${wsId}`);
|
|
1069
|
+
}
|
|
1070
|
+
break;
|
|
1071
|
+
}
|
|
1020
1072
|
case "ignore":
|
|
1021
1073
|
break;
|
|
1022
1074
|
default:
|