@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.
@@ -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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"}
@@ -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 bountyId = (action.bountyId || signal.bountyId);
550
- if (bountyId) {
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 bountyId = (action.bountyId || signal.bountyId);
568
+ const rawBountyId = action.bountyId || signal.bountyId;
561
569
  const claimer = action.claimer;
562
- if (bountyId && claimer) {
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
- if (bountyId) {
574
- const applyMsg = content || action.message || "";
575
- await runtime.connection.request("POST", `/v1/bounties/${bountyId}/apply`, { message: applyMsg });
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 (bountyId && content) {
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
- if (bountyId && applicationId) {
593
- await runtime.connection.request("POST", `/v1/bounties/${bountyId}/applications/${applicationId}/approve`, {});
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
- if (bountyId && applicationId) {
602
- await runtime.connection.request("POST", `/v1/bounties/${bountyId}/applications/${applicationId}/reject`, {});
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
- if (bountyId && submissionId) {
611
- await runtime.connection.request("POST", `/v1/bounties/${bountyId}/submissions/${submissionId}/select`, {});
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: