wildcrane-runner 0.6.21 → 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/launcher.mjs CHANGED
@@ -1,4 +1,4 @@
1
- // wildcrane-runner 0.6.21 — built by runner/scripts/build.mjs. Do not edit.
1
+ // wildcrane-runner 0.6.22 — built by runner/scripts/build.mjs. Do not edit.
2
2
  import { createRequire as __ai4kanbanRequire } from 'node:module'
3
3
  const require = __ai4kanbanRequire(import.meta.url)
4
4
 
@@ -108,7 +108,7 @@ function status(line) {
108
108
  }
109
109
 
110
110
  // src/protocol.ts
111
- var VERSION = true ? "0.6.21" : "0.0.0";
111
+ var VERSION = true ? "0.6.22" : "0.0.0";
112
112
  var EXIT_REFUSED = 10;
113
113
  var EXIT_OUTDATED = 11;
114
114
  var EXIT_UPDATE = 12;
package/dist/runner.mjs CHANGED
@@ -1,4 +1,4 @@
1
- // wildcrane-runner 0.6.21 — built by runner/scripts/build.mjs. Do not edit.
1
+ // wildcrane-runner 0.6.22 — built by runner/scripts/build.mjs. Do not edit.
2
2
  import { createRequire as __ai4kanbanRequire } from 'node:module'
3
3
  const require = __ai4kanbanRequire(import.meta.url)
4
4
  var __create = Object.create;
@@ -84663,7 +84663,7 @@ function status(line) {
84663
84663
  }
84664
84664
 
84665
84665
  // src/protocol.ts
84666
- var VERSION = true ? "0.6.21" : "0.0.0";
84666
+ var VERSION = true ? "0.6.22" : "0.0.0";
84667
84667
  var AKB_VERSION = true ? "0.11.19" : "0.0.0";
84668
84668
  var AKB_CONTRACT = true ? 7 : 0;
84669
84669
  var EXIT_REFUSED = 10;
@@ -93037,7 +93037,10 @@ var assetsText = (assets) => `${JSON.stringify(assets, null, 2)}
93037
93037
  function pull(ws, machineId2) {
93038
93038
  return inFolder(ws.cwd, async () => {
93039
93039
  const sent = await sendBoard(boardFolder(ws), machineId2);
93040
- if (!sent.ok) return { ok: false, error: `This computer's board changes could not be sent: ${sent.error}`, ...sent.offline ? {} : { code: "version_conflict" } };
93040
+ if (!sent.ok) {
93041
+ const refused = sent.tasks ? sent.tasks[ws.cloudTask ?? ""] : sent;
93042
+ if (refused) return { ok: false, error: `This computer's board changes could not be sent: ${refused.error}`, ...refused.offline ? {} : { code: "version_conflict" } };
93043
+ }
93041
93044
  return readCloud(ws);
93042
93045
  });
93043
93046
  }
@@ -93394,7 +93397,7 @@ async function sendBoard(ws, machineId2) {
93394
93397
  }
93395
93398
  async function sendMarked(ws, job) {
93396
93399
  const pushed = await send2(ws, job);
93397
- markUnsent(ws.cwd, !pushed.ok);
93400
+ markUnsent(ws.cwd, !pushed.ok || !!readBase(ws).pendingAssets?.length);
93398
93401
  return pushed;
93399
93402
  }
93400
93403
  async function send2(ws, job) {
@@ -93411,8 +93414,9 @@ async function send2(ws, job) {
93411
93414
  }
93412
93415
  });
93413
93416
  const boardSync = !job.id && !ws.cloudTask;
93414
- const closedCards = /* @__PURE__ */ new Set();
93415
- const closedLists = /* @__PURE__ */ new Set();
93417
+ const deferredCards = /* @__PURE__ */ new Set();
93418
+ const deferredLists = /* @__PURE__ */ new Set();
93419
+ const assetErrors = {};
93416
93420
  for (const item of tasks) {
93417
93421
  const card = path32.relative(ws.board, cardFile(item.folder)).split(path32.sep).join("/");
93418
93422
  const archived = boardSync && card.startsWith(".archive/") && base.files[rootOf(ws) + card];
@@ -93422,26 +93426,32 @@ async function send2(ws, job) {
93422
93426
  writeRecord(item.folder, item.record);
93423
93427
  continue;
93424
93428
  }
93425
- if (!boardSync || assets.code !== "conflict" || !assets.error.endsWith(": This task has finished.")) {
93426
- return fail(assets.error, false, assets.code);
93429
+ if (!boardSync) return fail(assets.error, false, assets.code);
93430
+ if (assets.code !== "conflict" || !assets.error.endsWith(": This task has finished.")) {
93431
+ assetErrors[item.folder.task] = { error: assets.error, ...assets.code ? {} : { offline: true } };
93427
93432
  }
93428
93433
  }
93429
- closedCards.add(item.folder.number);
93430
- closedLists.add(assetsFile(item.folder.task));
93434
+ deferredCards.add(item.folder.number);
93435
+ deferredLists.add(assetsFile(item.folder.task));
93431
93436
  }
93432
93437
  proposeItems(ws, base);
93433
93438
  const shared = sharedMemory(ws.board);
93434
93439
  const deferred = new Set(boardSync ? [] : base.deferred);
93435
- const closed = (p2) => {
93440
+ const defer = (p2) => {
93436
93441
  if (!boardSync) return deferred.has(p2);
93437
- if (!closedLists.has(p2) && !closedCards.has(numberOfCard(p2) ?? 0)) return false;
93442
+ if (!deferredLists.has(p2) && !deferredCards.has(numberOfCard(p2) ?? 0)) return false;
93438
93443
  deferred.add(p2);
93439
93444
  return true;
93440
93445
  };
93441
93446
  const success = (changed) => {
93442
93447
  const refreshDeferred = boardSync && (deferred.size !== (base.deferred?.length ?? 0) || base.deferred?.some((p2) => !deferred.has(p2)));
93448
+ const pendingAssets = Object.keys(assetErrors);
93449
+ const refreshPending = boardSync && JSON.stringify(pendingAssets) !== JSON.stringify(base.pendingAssets ?? []);
93443
93450
  if (refreshDeferred) base.deferred = [...deferred];
93444
- if (changed || refreshDeferred) writeBase(ws, base);
93451
+ if (refreshPending) base.pendingAssets = pendingAssets;
93452
+ if (changed || refreshDeferred || refreshPending) writeBase(ws, base);
93453
+ const firstError = Object.values(assetErrors)[0];
93454
+ if (firstError) return { ok: false, conflict: false, ...firstError, tasks: assetErrors };
93445
93455
  return { ok: true, changed };
93446
93456
  };
93447
93457
  const local = localFiles(ws, base);
@@ -93449,7 +93459,7 @@ async function send2(ws, job) {
93449
93459
  const changes = [];
93450
93460
  const owed = (p2) => !job.id && busy(ws.cwd) && itemAt(p2)?.state === "open" && !base.files[rootOf(ws) + p2];
93451
93461
  for (const p2 of local) {
93452
- if (closed(p2) || owed(p2)) continue;
93462
+ if (defer(p2) || owed(p2)) continue;
93453
93463
  const content = fs28.readFileSync(path32.join(ws.board, p2), "utf8");
93454
93464
  const remote = remoteOf(ws, shared, p2);
93455
93465
  localOf.set(remote, p2);
@@ -93460,7 +93470,7 @@ async function send2(ws, job) {
93460
93470
  }
93461
93471
  for (const p2 of viewOf(ws, base, shared).keys()) {
93462
93472
  const remote = remoteOf(ws, shared, p2);
93463
- if (!closed(p2) && kept3(p2) && !localOf.has(remote) && base.files[remote]) {
93473
+ if (!defer(p2) && kept3(p2) && !localOf.has(remote) && base.files[remote]) {
93464
93474
  localOf.set(remote, p2);
93465
93475
  changes.push({ path: remote, content: null, base_seq: base.files[remote].seq });
93466
93476
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wildcrane-runner",
3
- "version": "0.6.21",
3
+ "version": "0.6.22",
4
4
  "description": "WildCrane's Local Runner — connects this computer to WildCrane and runs its jobs on your local Claude Code, Codex, OpenCode or Cursor.",
5
5
  "license": "FSL-1.1-ALv2",
6
6
  "homepage": "https://wildcrane.ai/",