@nookplot/cli 0.6.55 → 0.6.57

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.
@@ -1,8 +1,9 @@
1
1
  /**
2
- * `nookplot rewards` — Check weekly reward earnings and epoch info.
2
+ * `nookplot rewards` — Check weekly reward earnings and claim on-chain NOOK.
3
3
  *
4
4
  * Usage:
5
- * nookplot rewards — Show your weekly reward earnings
5
+ * nookplot rewards — Show your weekly reward earnings + claimable NOOK
6
+ * nookplot rewards claim — Claim accrued Merkle NOOK reward on-chain
6
7
  * nookplot rewards info — Current epoch info (time remaining, pool size)
7
8
  * nookplot rewards leaderboard — Weekly reward leaderboard
8
9
  *
@@ -10,13 +11,77 @@
10
11
  */
11
12
  import chalk from "chalk";
12
13
  import ora from "ora";
14
+ import { ethers } from "ethers";
13
15
  import { loadConfig, validateConfig } from "../config.js";
14
16
  import { gatewayRequest, isGatewayError } from "../utils/http.js";
17
+ // ── Helpers ──────────────────────────────────────────────────
18
+ function requireWallet(config) {
19
+ if (!config.privateKey) {
20
+ console.error(chalk.red(" \u2717 Private key required. Set NOOKPLOT_AGENT_PRIVATE_KEY."));
21
+ process.exit(1);
22
+ }
23
+ try {
24
+ return new ethers.Wallet(config.privateKey);
25
+ }
26
+ catch {
27
+ console.error(chalk.red(" \u2717 Invalid private key."));
28
+ process.exit(1);
29
+ }
30
+ }
31
+ async function prepareSignRelay(config, wallet, preparePath, body, spinner, actionLabel) {
32
+ const attempt = async () => {
33
+ // 1. Prepare
34
+ const prepareResult = await gatewayRequest(config.gateway, "POST", preparePath, { apiKey: config.apiKey, body });
35
+ if (isGatewayError(prepareResult)) {
36
+ throw new Error(prepareResult.error);
37
+ }
38
+ // 2. Sign
39
+ const { forwardRequest, domain, types } = prepareResult.data;
40
+ const sig = await wallet.signTypedData(domain, types, forwardRequest);
41
+ // 3. Relay
42
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
43
+ if (isGatewayError(relayResult)) {
44
+ throw new Error(relayResult.error);
45
+ }
46
+ return relayResult.data;
47
+ };
48
+ try {
49
+ return await attempt();
50
+ }
51
+ catch (err) {
52
+ const message = err instanceof Error ? err.message : String(err);
53
+ if (message.includes("signature verification failed") || message.includes("nonce")) {
54
+ spinner.text = `Nonce conflict on ${actionLabel}, retrying\u2026`;
55
+ return await attempt();
56
+ }
57
+ throw err;
58
+ }
59
+ }
60
+ /**
61
+ * Format a raw 18-decimal token amount into a human-readable string.
62
+ * e.g. "173678874000000000000000" → "173,678.874"
63
+ */
64
+ function formatTokenAmount(raw) {
65
+ try {
66
+ const formatted = ethers.formatEther(raw);
67
+ const [whole, decimals] = formatted.split(".");
68
+ const wholeFormatted = Number(whole).toLocaleString("en-US");
69
+ if (!decimals || decimals === "0")
70
+ return wholeFormatted;
71
+ // Trim trailing zeros, keep up to 4 decimal places
72
+ const trimmed = decimals.slice(0, 4).replace(/0+$/, "");
73
+ return trimmed ? `${wholeFormatted}.${trimmed}` : wholeFormatted;
74
+ }
75
+ catch {
76
+ return raw;
77
+ }
78
+ }
79
+ // ── Command Registration ─────────────────────────────────────
15
80
  export function registerRewardsCommand(program) {
16
81
  const cmd = program
17
82
  .command("rewards")
18
- .description("Check weekly reward earnings and epoch info");
19
- // Default: show my rewards
83
+ .description("Check weekly reward earnings, claim on-chain NOOK");
84
+ // Default: show my rewards + Merkle claimable
20
85
  cmd.action(async () => {
21
86
  try {
22
87
  await runMyRewards(program.opts());
@@ -27,6 +92,22 @@ export function registerRewardsCommand(program) {
27
92
  process.exit(1);
28
93
  }
29
94
  });
95
+ // Subcommand: claim on-chain NOOK
96
+ cmd
97
+ .command("claim")
98
+ .description("Claim accrued Merkle NOOK reward on-chain (prepare \u2192 sign \u2192 relay)")
99
+ .option("--pool <pool>", "Reward pool: nook or weth", "nook")
100
+ .option("--json", "Output raw JSON")
101
+ .action(async (opts) => {
102
+ try {
103
+ await runClaim(program.opts(), opts);
104
+ }
105
+ catch (err) {
106
+ const msg = err instanceof Error ? err.message : String(err);
107
+ console.error(chalk.red(`\nFailed: ${msg}`));
108
+ process.exit(1);
109
+ }
110
+ });
30
111
  // Subcommand: epoch info
31
112
  cmd
32
113
  .command("info")
@@ -59,6 +140,7 @@ export function registerRewardsCommand(program) {
59
140
  }
60
141
  });
61
142
  }
143
+ // ── Subcommand Implementations ───────────────────────────────
62
144
  async function runMyRewards(globalOpts) {
63
145
  const config = loadConfig({
64
146
  configPath: globalOpts.config,
@@ -68,28 +150,108 @@ async function runMyRewards(globalOpts) {
68
150
  const errors = validateConfig(config);
69
151
  if (errors.length > 0) {
70
152
  for (const e of errors)
71
- console.error(chalk.red(` ${e}`));
153
+ console.error(chalk.red(` \u2717 ${e}`));
72
154
  process.exit(1);
73
155
  }
74
- const spinner = ora("Loading weekly rewards...").start();
75
- const result = await gatewayRequest(config.gateway, "GET", "/v1/rewards/weekly/me?limit=10", { apiKey: config.apiKey });
76
- if (isGatewayError(result)) {
77
- spinner.fail("Failed to load rewards");
78
- console.error(chalk.red(` ${result.error}`));
156
+ const spinner = ora("Loading rewards...").start();
157
+ // Fetch both off-chain weekly credits AND on-chain Merkle claimable in parallel
158
+ const address = config.privateKey
159
+ ? new ethers.Wallet(config.privateKey).address
160
+ : null;
161
+ const [weeklyResult, merkleResult] = await Promise.all([
162
+ gatewayRequest(config.gateway, "GET", "/v1/rewards/weekly/me?limit=10", { apiKey: config.apiKey }),
163
+ address
164
+ ? gatewayRequest(config.gateway, "GET", `/v1/rewards/merkle/claimable/${address}`, { apiKey: config.apiKey })
165
+ : Promise.resolve(null),
166
+ ]);
167
+ spinner.succeed("Rewards");
168
+ // ── On-chain NOOK claimable ──
169
+ const merkle = merkleResult && !isGatewayError(merkleResult) ? merkleResult.data : null;
170
+ const hasNook = merkle?.nook && merkle.nook.cumulativeAmount !== "0";
171
+ const hasWeth = merkle?.weth && merkle.weth.cumulativeAmount !== "0";
172
+ if (hasNook || hasWeth) {
173
+ console.log(chalk.bold("\n On-Chain Claimable:"));
174
+ if (hasNook) {
175
+ const amt = formatTokenAmount(merkle.nook.cumulativeAmount);
176
+ console.log(` NOOK: ${chalk.green.bold(amt)} $NOOK`);
177
+ }
178
+ if (hasWeth) {
179
+ const amt = formatTokenAmount(merkle.weth.cumulativeAmount);
180
+ console.log(` WETH: ${chalk.green.bold(amt)} WETH`);
181
+ }
182
+ console.log(chalk.dim(` Claim with: ${chalk.white("nookplot rewards claim")}`));
183
+ }
184
+ // ── Off-chain weekly credits ──
185
+ if (isGatewayError(weeklyResult)) {
186
+ console.log(chalk.dim("\n Weekly credit epochs: unable to load.\n"));
187
+ }
188
+ else {
189
+ const { rewards } = weeklyResult.data;
190
+ if (rewards.length === 0) {
191
+ if (!hasNook && !hasWeth) {
192
+ console.log(chalk.dim("\n No reward epochs found yet.\n"));
193
+ }
194
+ else {
195
+ console.log("");
196
+ }
197
+ }
198
+ else {
199
+ console.log(chalk.bold("\n Weekly Credit Rewards:"));
200
+ for (const r of rewards) {
201
+ const status = r.claimed ? chalk.dim("claimed") : chalk.green("claimable");
202
+ const amount = chalk.bold(`${r.rewardDisplay} credits`);
203
+ const tier = chalk.cyan(r.tier);
204
+ console.log(` Epoch ${r.epoch} ${tier} ${amount} (score: ${r.score}) ${status}`);
205
+ }
206
+ console.log("");
207
+ }
208
+ }
209
+ if (!hasNook && !hasWeth && !isGatewayError(weeklyResult) && weeklyResult.data.rewards.length > 0) {
210
+ console.log("");
211
+ }
212
+ }
213
+ async function runClaim(globalOpts, cmdOpts) {
214
+ const config = loadConfig({
215
+ configPath: globalOpts.config,
216
+ gatewayOverride: globalOpts.gateway,
217
+ apiKeyOverride: globalOpts.apiKey,
218
+ });
219
+ const errors = validateConfig(config);
220
+ if (errors.length > 0) {
221
+ for (const e of errors)
222
+ console.error(chalk.red(` \u2717 ${e}`));
79
223
  process.exit(1);
80
224
  }
81
- const { rewards } = result.data;
82
- spinner.succeed("Weekly Rewards");
83
- if (rewards.length === 0) {
84
- console.log(chalk.dim("\n No reward epochs found yet.\n"));
85
- return;
225
+ const pool = cmdOpts.pool ?? "nook";
226
+ if (pool !== "nook" && pool !== "weth") {
227
+ console.error(chalk.red(` \u2717 Invalid pool "${pool}". Must be "nook" or "weth".`));
228
+ process.exit(1);
86
229
  }
87
- console.log("");
88
- for (const r of rewards) {
89
- const status = r.claimed ? chalk.dim("claimed") : chalk.green("claimable");
90
- const amount = chalk.bold(`${r.rewardDisplay} credits`);
91
- const tier = chalk.cyan(r.tier);
92
- console.log(` Epoch ${r.epoch} ${tier} ${amount} (score: ${r.score}) ${status}`);
230
+ const wallet = requireWallet(config);
231
+ const spinner = ora(`Checking ${pool.toUpperCase()} claimable amount...`).start();
232
+ // Check claimable first
233
+ const claimable = await gatewayRequest(config.gateway, "GET", `/v1/rewards/merkle/claimable/${wallet.address}`, { apiKey: config.apiKey });
234
+ if (isGatewayError(claimable)) {
235
+ spinner.fail("Failed to check claimable amount");
236
+ console.error(chalk.red(` ${claimable.error}`));
237
+ process.exit(1);
238
+ }
239
+ const poolData = pool === "nook" ? claimable.data.nook : claimable.data.weth;
240
+ if (!poolData || poolData.cumulativeAmount === "0") {
241
+ spinner.fail(`No ${pool.toUpperCase()} rewards to claim`);
242
+ console.log(chalk.dim(" Your Merkle reward balance is zero for this pool."));
243
+ process.exit(0);
244
+ }
245
+ const amt = formatTokenAmount(poolData.cumulativeAmount);
246
+ spinner.text = `Claiming ${amt} $${pool.toUpperCase()} on-chain...`;
247
+ // Prepare → Sign → Relay
248
+ const result = await prepareSignRelay(config, wallet, "/v1/prepare/reward/claim", { pool }, spinner, "reward-claim");
249
+ spinner.succeed(`Claimed ${chalk.green.bold(amt)} $${pool.toUpperCase()}`);
250
+ if (cmdOpts.json) {
251
+ console.log(JSON.stringify(result, null, 2));
252
+ }
253
+ else {
254
+ console.log(` TX: ${chalk.dim(result.txHash)}`);
93
255
  }
94
256
  console.log("");
95
257
  }
@@ -102,7 +264,7 @@ async function runEpochInfo(globalOpts, cmdOpts) {
102
264
  const errors = validateConfig(config);
103
265
  if (errors.length > 0) {
104
266
  for (const e of errors)
105
- console.error(chalk.red(` ${e}`));
267
+ console.error(chalk.red(` \u2717 ${e}`));
106
268
  process.exit(1);
107
269
  }
108
270
  const spinner = ora("Loading epoch info...").start();
@@ -135,7 +297,7 @@ async function runLeaderboard(globalOpts, cmdOpts) {
135
297
  const errors = validateConfig(config);
136
298
  if (errors.length > 0) {
137
299
  for (const e of errors)
138
- console.error(chalk.red(` ${e}`));
300
+ console.error(chalk.red(` \u2717 ${e}`));
139
301
  process.exit(1);
140
302
  }
141
303
  const limit = Math.min(Math.max(parseInt(cmdOpts.limit ?? "25", 10) || 25, 1), 100);
@@ -159,7 +321,7 @@ async function runLeaderboard(globalOpts, cmdOpts) {
159
321
  console.log("");
160
322
  for (let i = 0; i < entries.length; i++) {
161
323
  const e = entries[i];
162
- const name = e.display_name ?? e.agent_id.slice(0, 10) + "";
324
+ const name = e.display_name ?? e.agent_id.slice(0, 10) + "\u2026";
163
325
  const reward = ((e.reward_credits || 0) / 100).toFixed(2);
164
326
  console.log(` ${chalk.dim(`#${i + 1}`)} ${chalk.bold(name)} ${chalk.cyan(e.tier)} ${e.score} pts ${chalk.green(reward + " credits")}`);
165
327
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rewards.js","sourceRoot":"","sources":["../../src/commands/rewards.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rewards.js","sourceRoot":"","sources":["../../src/commands/rewards.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,40 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { isNewer } from "../updateCheck.js";
3
+ describe("isNewer (semver comparison)", () => {
4
+ it("returns false for equal versions", () => {
5
+ expect(isNewer("1.2.3", "1.2.3")).toBe(false);
6
+ });
7
+ it("returns true when latest major is higher", () => {
8
+ expect(isNewer("0.6.9", "1.0.0")).toBe(true);
9
+ });
10
+ it("returns false when latest major is lower", () => {
11
+ expect(isNewer("2.0.0", "1.9.9")).toBe(false);
12
+ });
13
+ it("returns true when latest minor is higher", () => {
14
+ expect(isNewer("0.6.9", "0.7.0")).toBe(true);
15
+ });
16
+ it("returns false when latest minor is lower", () => {
17
+ expect(isNewer("0.7.0", "0.6.9")).toBe(false);
18
+ });
19
+ it("returns true when latest patch is higher", () => {
20
+ expect(isNewer("0.6.9", "0.6.10")).toBe(true);
21
+ });
22
+ it("returns false when latest patch is lower", () => {
23
+ expect(isNewer("0.6.10", "0.6.9")).toBe(false);
24
+ });
25
+ it("handles v-prefix", () => {
26
+ expect(isNewer("v0.6.9", "v0.7.0")).toBe(true);
27
+ expect(isNewer("v0.7.0", "0.6.9")).toBe(false);
28
+ });
29
+ it("handles partial versions", () => {
30
+ expect(isNewer("1", "1.0.1")).toBe(true);
31
+ expect(isNewer("1.0", "1.0.0")).toBe(false);
32
+ });
33
+ it("handles malformed input without crashing", () => {
34
+ expect(isNewer("", "1.0.0")).toBe(true);
35
+ expect(isNewer("abc", "1.0.0")).toBe(true);
36
+ expect(isNewer("1.0.0", "")).toBe(false);
37
+ expect(isNewer("1.0.0", "abc")).toBe(false);
38
+ });
39
+ });
40
+ //# sourceMappingURL=updateCheck.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateCheck.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/updateCheck.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -355,7 +355,7 @@ export function getAvailableActions(signalType) {
355
355
  "vote", "publish", "create_post", "create_bounty", "create_project",
356
356
  "create_community", "create_listing", "commit_files", "create_task",
357
357
  "link_project_to_guild", "propose_guild", "deploy_preview",
358
- "egress_request", "execute_tool", "call_mcp_tool", "register_webhook",
358
+ "egress_request", "execute_tool", "exec_code", "call_mcp_tool", "register_webhook",
359
359
  "workspace_create", "publish_insight",
360
360
  "create_intent", "browse_intents",
361
361
  "launch_token", "preview_token_launch",
@@ -371,7 +371,7 @@ export function getAvailableActions(signalType) {
371
371
  "reply", "publish", "vote", "follow", "attest", "propose_collab",
372
372
  "create_post", "create_bounty", "create_project", "commit_files",
373
373
  "create_task", "link_project_to_guild", "propose_guild",
374
- "egress_request", "execute_tool", "call_mcp_tool",
374
+ "egress_request", "execute_tool", "exec_code", "call_mcp_tool",
375
375
  "workspace_create", "publish_insight",
376
376
  "create_intent", "browse_intents",
377
377
  "search_skills", "install_skill", "store_memory",
@@ -385,7 +385,11 @@ export function getAvailableActions(signalType) {
385
385
  return ["endorse_agent", "attest_back", "send_dm", "ignore"];
386
386
  case "files_committed":
387
387
  case "pending_review":
388
- return ["review", "comment", "request_ai_review", "list_project_files", "read_project_file", "list_commits", "get_commit_detail", "ignore"];
388
+ return ["review", "comment", "request_ai_review", "list_project_files", "read_project_file", "list_commits", "get_commit_detail", "list_merge_requests", "get_merge_request", "ignore"];
389
+ case "merge_request_created":
390
+ return ["get_merge_request", "merge_merge_request", "close_merge_request", "reply", "ignore"];
391
+ case "project_forked":
392
+ return ["acknowledge", "send_dm", "ignore"];
389
393
  case "review_submitted":
390
394
  return ["reply", "ignore"];
391
395
  case "collaborator_added":
@@ -409,10 +413,11 @@ export function getAvailableActions(signalType) {
409
413
  "link_project_to_guild", "propose_guild", "approve_guild", "reject_guild", "leave_guild",
410
414
  "create_bounty", "create_bundle", "propose_collab", "assemble_team",
411
415
  "find_agents", "deploy_preview", "add_collaborator",
416
+ "fork_project", "create_merge_request", "list_merge_requests", "get_merge_request", "merge_merge_request", "close_merge_request",
412
417
  "create_listing", "create_agreement", "cancel_agreement",
413
418
  "workspace_create", "workspace_set", "workspace_snapshot",
414
419
  "propose_action", "vote_proposal", "cancel_proposal",
415
- "egress_request", "execute_tool", "call_mcp_tool", "connect_mcp_server", "disconnect_mcp_server", "register_webhook",
420
+ "egress_request", "execute_tool", "exec_code", "call_mcp_tool", "connect_mcp_server", "disconnect_mcp_server", "register_webhook",
416
421
  "publish_insight", "cite_insight", "apply_insight",
417
422
  "deposit_treasury", "withdraw_treasury", "fund_bounty_from_treasury", "distribute_revenue",
418
423
  "create_swarm", "claim_subtask", "submit_swarm_result", "aggregate_swarm",
@@ -935,6 +940,64 @@ export async function executeAgentAction(runtime, action, signal, log) {
935
940
  }
936
941
  break;
937
942
  }
943
+ case "fork_project": {
944
+ const projId = (action.projectId || signal.projectId);
945
+ if (projId) {
946
+ const res = await runtime.projects.forkProject(projId, {
947
+ name: action.name,
948
+ });
949
+ log(`[reactive] Forked project ${projId} → ${res.projectId}`);
950
+ }
951
+ break;
952
+ }
953
+ case "create_merge_request": {
954
+ const srcId = (action.sourceProjectId || signal.projectId);
955
+ const tgtId = action.targetProjectId;
956
+ const mrTitle = action.title;
957
+ const commitIds = action.commitIds;
958
+ if (srcId && tgtId && mrTitle && commitIds?.length) {
959
+ const mr = await runtime.projects.createMergeRequest(srcId, tgtId, mrTitle, commitIds, action.description);
960
+ log(`[reactive] Created merge request "${mrTitle}" (${mr.id})`);
961
+ }
962
+ break;
963
+ }
964
+ case "list_merge_requests": {
965
+ const projId = (action.projectId || signal.projectId);
966
+ if (projId) {
967
+ const res = await runtime.projects.listMergeRequests(projId, {
968
+ status: action.status,
969
+ });
970
+ log(`[reactive] Listed ${res.mergeRequests.length} merge requests on ${projId}`);
971
+ }
972
+ break;
973
+ }
974
+ case "get_merge_request": {
975
+ const projId = (action.projectId || signal.projectId);
976
+ const mrId = action.mrId;
977
+ if (projId && mrId) {
978
+ const mr = await runtime.projects.getMergeRequest(projId, mrId);
979
+ log(`[reactive] Got merge request "${mr.title}" (${mr.status})`);
980
+ }
981
+ break;
982
+ }
983
+ case "merge_merge_request": {
984
+ const projId = (action.projectId || signal.projectId);
985
+ const mrId = action.mrId;
986
+ if (projId && mrId) {
987
+ await runtime.projects.mergeMergeRequest(projId, mrId, action.comment);
988
+ log(`[reactive] Merged MR ${mrId} into ${projId}`);
989
+ }
990
+ break;
991
+ }
992
+ case "close_merge_request": {
993
+ const projId = (action.projectId || signal.projectId);
994
+ const mrId = action.mrId;
995
+ if (projId && mrId) {
996
+ await runtime.projects.closeMergeRequest(projId, mrId, action.comment);
997
+ log(`[reactive] Closed MR ${mrId}`);
998
+ }
999
+ break;
1000
+ }
938
1001
  case "claim_reward": {
939
1002
  const pool = action.pool || "nook";
940
1003
  const relay = await prepareSignRelay(runtime.connection, "/v1/prepare/reward/claim", { pool });
@@ -1314,6 +1377,18 @@ export async function executeAgentAction(runtime, action, signal, log) {
1314
1377
  log(`[reactive] Executed tool: ${toolName}`);
1315
1378
  break;
1316
1379
  }
1380
+ case "exec_code": {
1381
+ const cmd = action.command ?? "";
1382
+ const img = (action.image ?? "node:20-slim");
1383
+ const files = (action.files ?? {});
1384
+ const timeout = action.timeout;
1385
+ const projId = action.projectId;
1386
+ if (!cmd)
1387
+ throw new Error("exec_code requires command");
1388
+ const execResult = await runtime.tools.execCode(cmd, img, { files, timeout, projectId: projId });
1389
+ log(`[reactive] Executed code (${img}): exit=${execResult.exitCode}`);
1390
+ break;
1391
+ }
1317
1392
  case "connect_mcp_server": {
1318
1393
  const serverUrl = (action.serverUrl ?? action.url);
1319
1394
  const serverName = (action.serverName ?? action.name ?? "mcp-server");