open-walnut 0.5.0 → 0.5.1

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.
Files changed (38) hide show
  1. package/dist/build-info.json +4 -4
  2. package/dist/cli-fast.js +86 -11
  3. package/dist/cli.js +5435 -4841
  4. package/dist/daemon-binaries/acp-daemon-core.cjs +8 -0
  5. package/dist/daemon-binaries/acp-worker.js.version +1 -1
  6. package/dist/daemon-binaries/dtach-darwin-arm64 +0 -0
  7. package/dist/daemon-binaries/dtach-darwin-x64 +0 -0
  8. package/dist/daemon-binaries/pi-acp.js +69 -69
  9. package/dist/data/skills/walnut/SKILL.md +3 -1
  10. package/dist/data/skills/walnut-session-messaging/SKILL.md +2 -1
  11. package/dist/integrations/mail/index.js +2 -2
  12. package/dist/web/server.js +4498 -3985
  13. package/dist/web/static/assets/{OfficePreview-trkrPgUg.js → OfficePreview-nqaFIIDU.js} +2 -2
  14. package/dist/web/static/assets/{docx-preview-DXuXR6Mm.js → docx-preview-DdtIqTDg.js} +1 -1
  15. package/dist/web/static/assets/{index-CtqOiNs3.js → index-6L4R93nh.js} +368 -363
  16. package/dist/web/static/assets/{index-BCLUpT4d.js → index-6fz2bWC1.js} +1 -1
  17. package/dist/web/static/assets/{index--VxzrqiT.js → index-BG9VR9Vv.js} +1 -1
  18. package/dist/web/static/assets/{index-BycRzqR7.js → index-BK2_zSO2.js} +1 -1
  19. package/dist/web/static/assets/{index-CRyL44ex.js → index-BOPumzo-.js} +1 -1
  20. package/dist/web/static/assets/{index-qA6lI9Z8.js → index-B_qxz22L.js} +1 -1
  21. package/dist/web/static/assets/{index-CWnda_VJ.js → index-BdaE-wVI.js} +1 -1
  22. package/dist/web/static/assets/{index-B3SgAzjA.js → index-BrPomAwK.js} +1 -1
  23. package/dist/web/static/assets/{index-PG3BCRR7.js → index-C5cOO-_d.js} +1 -1
  24. package/dist/web/static/assets/{index-BcOh16aC.js → index-CEHVu7FQ.js} +1 -1
  25. package/dist/web/static/assets/index-CLV-Qzaa.css +32 -0
  26. package/dist/web/static/assets/{index-BqUnbrvU.js → index-CqOrR3-r.js} +1 -1
  27. package/dist/web/static/assets/{index-A4iiilIE.js → index-DOmOQnZ5.js} +1 -1
  28. package/dist/web/static/assets/{index-Dmueypgd.js → index-DPK5Xh5w.js} +1 -1
  29. package/dist/web/static/assets/{index-DbqnfSCN.js → index-Df5lfbl-.js} +1 -1
  30. package/dist/web/static/assets/{index-C0iAAOIU.js → index-DqBhXLnm.js} +1 -1
  31. package/dist/web/static/assets/{index-DU_xugLt.js → index-VeEJA8UK.js} +1 -1
  32. package/dist/web/static/assets/{index-BQ-txaFi.js → index-jZH7Ct8z.js} +1 -1
  33. package/dist/web/static/assets/{index-B5t-NZFs.js → index-z5Y-8yck.js} +1 -1
  34. package/dist/web/static/assets/{jszip.min-Cw001-8g.js → jszip.min-DIXBurLY.js} +1 -1
  35. package/dist/web/static/assets/{pptx-preview.es-C4qHBTXo.js → pptx-preview.es-DWfQguqq.js} +1 -1
  36. package/dist/web/static/index.html +2 -2
  37. package/package.json +1 -1
  38. package/dist/web/static/assets/index-CuCpxOTp.css +0 -32
@@ -1,7 +1,7 @@
1
1
  {
2
- "version": "0.5.0",
3
- "commit": "e2b9769e",
4
- "branch": null,
5
- "builtAt": "2026-09-28T17:12:43.018Z",
2
+ "version": "0.5.1",
3
+ "commit": "cb1af703",
4
+ "branch": "main",
5
+ "builtAt": "2026-09-28T22:28:51.736Z",
6
6
  "dirty": false
7
7
  }
package/dist/cli-fast.js CHANGED
@@ -14,8 +14,8 @@ import path from "path";
14
14
  import { fileURLToPath } from "url";
15
15
  function getVersion() {
16
16
  if (cachedVersion) return cachedVersion;
17
- if ("0.5.0") {
18
- cachedVersion = "0.5.0";
17
+ if ("0.5.1") {
18
+ cachedVersion = "0.5.1";
19
19
  versionKnown = true;
20
20
  return cachedVersion;
21
21
  }
@@ -2904,6 +2904,17 @@ var init_tasks = __esm({
2904
2904
  );
2905
2905
  } catch (err) {
2906
2906
  const error = err instanceof Error ? err.message : String(err);
2907
+ if (error.includes("(too_many_running_subtasks)")) {
2908
+ return withOutcome(
2909
+ withRef({ ...view, execution: { state: "not_started", error } }, {
2910
+ ...extra,
2911
+ execution: { state: "not_started", error },
2912
+ start_error: error
2913
+ }),
2914
+ `${where}Task ${id} was created but NOT started: ${error}`,
2915
+ `Start it after one of the running subtasks finishes: walnut tools call task_start '{"id":"${id}"}'`
2916
+ );
2917
+ }
2907
2918
  return withOutcome(
2908
2919
  withRef({ ...view, execution: { state: "unconfirmed", error } }, {
2909
2920
  ...extra,
@@ -5727,6 +5738,7 @@ var init_daemon_service_cli = __esm({
5727
5738
  var wn_cli_exports = {};
5728
5739
  __export(wn_cli_exports, {
5729
5740
  WAIT_DEFAULT_TIMEOUT_SECS: () => WAIT_DEFAULT_TIMEOUT_SECS,
5741
+ WAIT_MAX_IDS: () => WAIT_MAX_IDS,
5730
5742
  WAIT_MAX_TIMEOUT_SECS: () => WAIT_MAX_TIMEOUT_SECS,
5731
5743
  WAIT_POLL_INTERVAL_MS: () => WAIT_POLL_INTERVAL_MS,
5732
5744
  WALNUT_CLI_TIMEOUT_MS: () => WALNUT_CLI_TIMEOUT_MS,
@@ -5738,7 +5750,8 @@ __export(wn_cli_exports, {
5738
5750
  isTrustedGatewaySocket: () => isTrustedGatewaySocket,
5739
5751
  parseWalnutCliArgs: () => parseWalnutCliArgs,
5740
5752
  resolveWalnutCliEndpoint: () => resolveWalnutCliEndpoint,
5741
- runWalnutCli: () => runWalnutCli
5753
+ runWalnutCli: () => runWalnutCli,
5754
+ waitManyVerdict: () => waitManyVerdict
5742
5755
  });
5743
5756
  import fs9 from "fs";
5744
5757
  import net from "net";
@@ -5762,21 +5775,25 @@ function parseWalnutCliArgs(argv2) {
5762
5775
  if (head === "wait") {
5763
5776
  let json2 = false;
5764
5777
  let timeoutSecs = WAIT_DEFAULT_TIMEOUT_SECS;
5765
- let id;
5778
+ let mode = "all";
5779
+ const ids = [];
5766
5780
  for (let i = 0; i < rest2.length; i++) {
5767
5781
  const a = rest2[i];
5768
5782
  if (a === "--json") json2 = true;
5769
5783
  else if (a === "--help" || a === "-h") return { kind: "help", topic: "root" };
5784
+ else if (a === "--any") mode = "any";
5785
+ else if (a === "--all") mode = "all";
5770
5786
  else if (a === "--timeout") {
5771
5787
  const v = Number(rest2[++i]);
5772
5788
  if (!Number.isFinite(v) || v <= 0) return { kind: "usage-error", message: "--timeout needs seconds > 0" };
5773
5789
  timeoutSecs = Math.min(v, WAIT_MAX_TIMEOUT_SECS);
5774
5790
  } else if (a.startsWith("--")) return { kind: "usage-error", message: `unknown flag: ${a}` };
5775
- else if (id === void 0) id = a;
5776
- else return { kind: "usage-error", message: `unexpected argument: ${a}` };
5791
+ else if (!ids.includes(a)) ids.push(a);
5777
5792
  }
5778
- if (!id) return { kind: "usage-error", message: "wait requires <task-id | rq-id>" };
5779
- return { kind: "wait", id, timeoutSecs, json: json2 };
5793
+ if (ids.length === 0) return { kind: "usage-error", message: "wait requires <task-id | rq-id> [...]" };
5794
+ if (ids.length > WAIT_MAX_IDS) return { kind: "usage-error", message: `wait takes at most ${WAIT_MAX_IDS} ids` };
5795
+ if (ids.length === 1) return { kind: "wait", id: ids[0], timeoutSecs, json: json2 };
5796
+ return { kind: "wait", id: ids[0], ids, mode, timeoutSecs, json: json2 };
5780
5797
  }
5781
5798
  return { kind: "usage-error", message: `unknown command: ${head}` };
5782
5799
  }
@@ -6048,7 +6065,9 @@ run \`walnut --help\` for usage
6048
6065
  callArgs = args3.args;
6049
6066
  }
6050
6067
  }
6051
- if (parsed.kind === "wait") return runWait(socketPath, sid, parsed);
6068
+ if (parsed.kind === "wait") {
6069
+ return parsed.ids ? runWaitMany(socketPath, sid, { ...parsed, ids: parsed.ids, mode: parsed.mode ?? "all" }) : runWait(socketPath, sid, parsed);
6070
+ }
6052
6071
  const op = parsed.kind === "tools.help" ? "tools.list" : parsed.kind === "guide" ? "tools.call" : parsed.kind;
6053
6072
  const args2 = parsed.kind === "tools.call" ? {
6054
6073
  name: parsed.name,
@@ -6125,6 +6144,20 @@ function evaluateWaitResult(id, result) {
6125
6144
  summary: { task: task.id ?? id, title: task.title, phase }
6126
6145
  };
6127
6146
  }
6147
+ function waitManyVerdict(ids, latest, settled, mode) {
6148
+ const count = ids.filter((id) => settled.has(id)).length;
6149
+ const done = mode === "any" ? count > 0 : count === ids.length;
6150
+ return {
6151
+ done,
6152
+ body: {
6153
+ done,
6154
+ mode,
6155
+ settled: count,
6156
+ of: ids.length,
6157
+ results: ids.map((id) => ({ ...latest.get(id) ?? (id.startsWith("rq-") ? { request: id } : { task: id }), done: settled.has(id) }))
6158
+ }
6159
+ };
6160
+ }
6128
6161
  function sleep(ms) {
6129
6162
  return new Promise((resolve) => setTimeout(resolve, ms));
6130
6163
  }
@@ -6163,7 +6196,47 @@ async function runWait(socketPath, sid, parsed) {
6163
6196
  await writeStdout(JSON.stringify({ done: false, timeout: true, waitedSecs: parsed.timeoutSecs, ...last }, null, parsed.json ? 0 : 2) + "\n");
6164
6197
  return 7;
6165
6198
  }
6166
- var WALNUT_CLI_TIMEOUT_MS, WAIT_POLL_INTERVAL_MS, WAIT_DEFAULT_TIMEOUT_SECS, WAIT_MAX_TIMEOUT_SECS, HELP_ROOT, HELP_TOOLS, WalnutCliTimeoutError, WALNUT_STDOUT_FLUSH_TIMEOUT_MS, WAIT_DONE_PHASES;
6199
+ async function runWaitMany(socketPath, sid, parsed) {
6200
+ const deadline = Date.now() + parsed.timeoutSecs * 1e3;
6201
+ const latest = /* @__PURE__ */ new Map();
6202
+ const settled = /* @__PURE__ */ new Set();
6203
+ for (; ; ) {
6204
+ for (const id of parsed.ids) {
6205
+ if (settled.has(id)) continue;
6206
+ let resp;
6207
+ try {
6208
+ resp = await requestOverSocket(socketPath, {
6209
+ v: 1,
6210
+ op: "tools.call",
6211
+ sid,
6212
+ args: { name: id.startsWith("rq-") ? "request_get" : "task_get", args: { id } }
6213
+ });
6214
+ } catch (err) {
6215
+ latest.set(id, { ...latest.get(id) ?? {}, transportError: err instanceof Error ? err.message : String(err) });
6216
+ continue;
6217
+ }
6218
+ if (!resp.ok) {
6219
+ process.stderr.write(`walnut: wait ${id}:
6220
+ ` + formatErrorLines(resp.error).join("\n") + "\n");
6221
+ return errorToExitCode(resp.error.code);
6222
+ }
6223
+ const { done, summary } = evaluateWaitResult(id, resp.result);
6224
+ latest.set(id, summary);
6225
+ if (done) settled.add(id);
6226
+ }
6227
+ const verdict = waitManyVerdict(parsed.ids, latest, settled, parsed.mode);
6228
+ if (verdict.done) {
6229
+ await writeStdout(JSON.stringify(verdict.body, null, parsed.json ? 0 : 2) + "\n");
6230
+ return 0;
6231
+ }
6232
+ if (Date.now() >= deadline) {
6233
+ await writeStdout(JSON.stringify({ ...verdict.body, timeout: true, waitedSecs: parsed.timeoutSecs }, null, parsed.json ? 0 : 2) + "\n");
6234
+ return 7;
6235
+ }
6236
+ await sleep(WAIT_POLL_INTERVAL_MS);
6237
+ }
6238
+ }
6239
+ var WALNUT_CLI_TIMEOUT_MS, WAIT_POLL_INTERVAL_MS, WAIT_DEFAULT_TIMEOUT_SECS, WAIT_MAX_TIMEOUT_SECS, WAIT_MAX_IDS, HELP_ROOT, HELP_TOOLS, WalnutCliTimeoutError, WALNUT_STDOUT_FLUSH_TIMEOUT_MS, WAIT_DONE_PHASES;
6167
6240
  var init_wn_cli = __esm({
6168
6241
  "src/providers/wn-cli.ts"() {
6169
6242
  "use strict";
@@ -6174,12 +6247,13 @@ var init_wn_cli = __esm({
6174
6247
  WAIT_POLL_INTERVAL_MS = 5e3;
6175
6248
  WAIT_DEFAULT_TIMEOUT_SECS = 1800;
6176
6249
  WAIT_MAX_TIMEOUT_SECS = 24 * 60 * 60;
6250
+ WAIT_MAX_IDS = 20;
6177
6251
  HELP_ROOT = `walnut \u2014 the Walnut CLI
6178
6252
 
6179
6253
  USAGE
6180
6254
  walnut guide print the full Walnut manual (recipes + safety rules)
6181
6255
  walnut tools list|help|call ... call Walnut operations (see \`walnut tools --help\`)
6182
- walnut wait <id> [--timeout secs] [--json] block until a task settles or a reply request resolves
6256
+ walnut wait <id> [<id>...] [--any] [--timeout secs] [--json] block until tasks settle or reply requests resolve
6183
6257
  walnut --help | walnut tools --help
6184
6258
 
6185
6259
  THE MODEL (one identity: the task)
@@ -6209,6 +6283,7 @@ THE VERBS (keep it simple)
6209
6283
  WAIT
6210
6284
  walnut wait <task-id> returns when the task reaches NEED_ACTION / COMPLETE
6211
6285
  walnut wait <rq-id> returns when the reply request leaves pending
6286
+ walnut wait <id> <id> several ids (up to 20): returns when ALL settled; --any returns at the first
6212
6287
  --timeout secs default 1800, max 86400; exit 7 on timeout
6213
6288
 
6214
6289
  ENVIRONMENT