@adhdev/daemon-standalone 1.0.40 → 1.0.41-rc.2

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/index.js CHANGED
@@ -31423,9 +31423,9 @@ var require_streamx = __commonJS({
31423
31423
  }
31424
31424
  });
31425
31425
 
31426
- // ../daemon-core/node_modules/b4a/index.js
31426
+ // ../../node_modules/tar-stream/node_modules/b4a/index.js
31427
31427
  var require_b4a2 = __commonJS({
31428
- "../daemon-core/node_modules/b4a/index.js"(exports2, module2) {
31428
+ "../../node_modules/tar-stream/node_modules/b4a/index.js"(exports2, module2) {
31429
31429
  "use strict";
31430
31430
  function isBuffer(value) {
31431
31431
  return Buffer.isBuffer(value) || value instanceof Uint8Array;
@@ -31581,9 +31581,9 @@ var require_b4a2 = __commonJS({
31581
31581
  }
31582
31582
  });
31583
31583
 
31584
- // ../daemon-core/node_modules/tar-stream/headers.js
31584
+ // ../../node_modules/tar-stream/headers.js
31585
31585
  var require_headers = __commonJS({
31586
- "../daemon-core/node_modules/tar-stream/headers.js"(exports2) {
31586
+ "../../node_modules/tar-stream/headers.js"(exports2) {
31587
31587
  "use strict";
31588
31588
  var b4a = require_b4a2();
31589
31589
  var ZEROS = "0000000000000000000";
@@ -31844,9 +31844,9 @@ var require_headers = __commonJS({
31844
31844
  }
31845
31845
  });
31846
31846
 
31847
- // ../daemon-core/node_modules/tar-stream/extract.js
31847
+ // ../../node_modules/tar-stream/extract.js
31848
31848
  var require_extract = __commonJS({
31849
- "../daemon-core/node_modules/tar-stream/extract.js"(exports2, module2) {
31849
+ "../../node_modules/tar-stream/extract.js"(exports2, module2) {
31850
31850
  "use strict";
31851
31851
  var { Writable, Readable, getStreamError } = require_streamx();
31852
31852
  var FIFO = require_fast_fifo();
@@ -32189,9 +32189,9 @@ var require_extract = __commonJS({
32189
32189
  }
32190
32190
  });
32191
32191
 
32192
- // ../daemon-core/node_modules/tar-stream/constants.js
32192
+ // ../../node_modules/tar-stream/constants.js
32193
32193
  var require_constants = __commonJS({
32194
- "../daemon-core/node_modules/tar-stream/constants.js"(exports2, module2) {
32194
+ "../../node_modules/tar-stream/constants.js"(exports2, module2) {
32195
32195
  "use strict";
32196
32196
  var constants = {
32197
32197
  // just for envs without fs
@@ -32210,9 +32210,9 @@ var require_constants = __commonJS({
32210
32210
  }
32211
32211
  });
32212
32212
 
32213
- // ../daemon-core/node_modules/tar-stream/pack.js
32213
+ // ../../node_modules/tar-stream/pack.js
32214
32214
  var require_pack = __commonJS({
32215
- "../daemon-core/node_modules/tar-stream/pack.js"(exports2, module2) {
32215
+ "../../node_modules/tar-stream/pack.js"(exports2, module2) {
32216
32216
  "use strict";
32217
32217
  var { Readable, Writable, getStreamError } = require_streamx();
32218
32218
  var b4a = require_b4a2();
@@ -32445,9 +32445,9 @@ var require_pack = __commonJS({
32445
32445
  }
32446
32446
  });
32447
32447
 
32448
- // ../daemon-core/node_modules/tar-stream/index.js
32448
+ // ../../node_modules/tar-stream/index.js
32449
32449
  var require_tar_stream = __commonJS({
32450
- "../daemon-core/node_modules/tar-stream/index.js"(exports2) {
32450
+ "../../node_modules/tar-stream/index.js"(exports2) {
32451
32451
  "use strict";
32452
32452
  exports2.extract = require_extract();
32453
32453
  exports2.pack = require_pack();
@@ -32690,9 +32690,9 @@ var require_pump = __commonJS({
32690
32690
  }
32691
32691
  });
32692
32692
 
32693
- // ../daemon-core/node_modules/tar-fs/index.js
32693
+ // ../../node_modules/tar-fs/index.js
32694
32694
  var require_tar_fs = __commonJS({
32695
- "../daemon-core/node_modules/tar-fs/index.js"(exports2) {
32695
+ "../../node_modules/tar-fs/index.js"(exports2) {
32696
32696
  "use strict";
32697
32697
  var tar = require_tar_stream();
32698
32698
  var pump = require_pump();
@@ -36539,10 +36539,10 @@ var require_dist3 = __commonJS({
36539
36539
  }
36540
36540
  function getDaemonBuildInfo() {
36541
36541
  if (cached2) return cached2;
36542
- const commit = readInjected(true ? "b69c800c03574e46aead4f5878b4891592e872e0" : void 0) ?? "unknown";
36543
- const commitShort = readInjected(true ? "b69c800" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
36544
- const version2 = readInjected(true ? "1.0.40" : void 0) ?? readInjected(typeof process !== "undefined" ? process.env?.ADHDEV_PKG_VERSION : void 0) ?? "unknown";
36545
- const builtAt = readInjected(true ? "2026-08-08T11:17:21.191Z" : void 0);
36542
+ const commit = readInjected(true ? "ea178c233410ac9d7352c117eb693cf00b769fdb" : void 0) ?? "unknown";
36543
+ const commitShort = readInjected(true ? "ea178c23" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
36544
+ const version2 = readInjected(true ? "1.0.41-rc.2" : void 0) ?? readInjected(typeof process !== "undefined" ? process.env?.ADHDEV_PKG_VERSION : void 0) ?? "unknown";
36545
+ const builtAt = readInjected(true ? "2026-08-09T04:45:32.399Z" : void 0);
36546
36546
  cached2 = builtAt ? { commit, commitShort, version: version2, builtAt } : { commit, commitShort, version: version2 };
36547
36547
  return cached2;
36548
36548
  }
@@ -37800,7 +37800,7 @@ var require_dist3 = __commonJS({
37800
37800
  }
37801
37801
  });
37802
37802
  function resolveBuildTrack(env2 = process.env) {
37803
- const injected = true ? "" : void 0;
37803
+ const injected = true ? "preview" : void 0;
37804
37804
  const stamped = typeof injected === "string" ? injected.trim() : "";
37805
37805
  const raw = (stamped || (env2[BUILD_CHANNEL_ENV_VAR] ?? "").trim()).toLowerCase();
37806
37806
  return raw === "preview" || raw === "next" ? "preview" : "stable";
@@ -37852,6 +37852,21 @@ var require_dist3 = __commonJS({
37852
37852
  function resolveConfigLogsDir(env2 = process.env, homeDir) {
37853
37853
  return (0, import_path3.join)(resolveConfigDir(env2, homeDir), "logs");
37854
37854
  }
37855
+ function otherTrackConfigDir(env2 = process.env, homeDir) {
37856
+ const ownTrack = resolveBuildTrack(env2);
37857
+ const otherTrack = ownTrack === "preview" ? "stable" : "preview";
37858
+ return (0, import_path3.join)(homeDir ?? (0, import_os2.homedir)(), getTrackIdentity(otherTrack).configDirName);
37859
+ }
37860
+ function isCrossTrackConfigDirOverride(env2 = process.env, homeDir, platform10 = process.platform) {
37861
+ const override = env2.ADHDEV_CONFIG_DIR;
37862
+ if (!override || !override.trim()) return false;
37863
+ const sibling = otherTrackConfigDir(env2, homeDir);
37864
+ const normalize4 = (p) => {
37865
+ const unified = p.trim().replace(/[\\/]+$/, "").replace(/\\/g, "/");
37866
+ return platform10 === "win32" ? unified.toLowerCase() : unified;
37867
+ };
37868
+ return normalize4(override) === normalize4(sibling);
37869
+ }
37855
37870
  var import_os2;
37856
37871
  var import_path3;
37857
37872
  var init_config_dir = __esm2({
@@ -40521,7 +40536,7 @@ child.on('exit', () => process.exit(0));
40521
40536
  const platform10 = os42.platform();
40522
40537
  const whichCmd = platform10 === "win32" ? "where" : "which";
40523
40538
  const includeVersion = options?.includeVersion !== false;
40524
- const cliList = providerLoader ? providerLoader.getCliDetectionList() : [];
40539
+ const cliList = providerLoader ? providerLoader.getCliDetectionList({ includeDisabled: options?.includeDisabled }) : [];
40525
40540
  const results = await Promise.all(
40526
40541
  cliList.map(async (cli) => {
40527
40542
  try {
@@ -60657,6 +60672,10 @@ The mesh has no work in flight. For each mission, decide its outcome: continue i
60657
60672
  summary: "the node's workspace is dirty, so auto-launch is blocked to avoid clobbering uncommitted changes",
60658
60673
  nextAction: "Clean or commit the node's working tree (or fast-forward it); the task will then auto-assign."
60659
60674
  };
60675
+ if (reason === "target_session_pin_expired") return {
60676
+ summary: "it was pinned to a specific session (a follow-up/delta for work already in flight) that never claimed it within the pin TTL, so the pin was cleared and the message will NOT reach the session it was addressed to",
60677
+ nextAction: "Assume the addressed session never received this delta and is still acting on its previous instructions. Re-send it to that session once it is idle (or re-target it), and re-check the work it produced in the meantime."
60678
+ };
60660
60679
  if (reason === SLOT_MODEL_ABSENT_SKIP_REASON) return {
60661
60680
  summary: "no capability slot on the node declares the model this task resolved to (its difficulty\u2192brain preset picked a model the node was never configured to run)",
60662
60681
  nextAction: "Re-enqueue with a difficulty/model the node's slots declare, target a node that declares this model, or add a slot for it. The task is NOT run on a substitute model \u2014 an undeclared model is never launched."
@@ -61946,6 +61965,17 @@ The mesh has no work in flight. For each mission, decide its outcome: continue i
61946
61965
  "provider_priority_unusable",
61947
61966
  "provider_unusable",
61948
61967
  "dirty_workspace",
61968
+ // TARGET-PIN-TTL EXPIRY: the task was pinned to a specific session (a delta —
61969
+ // a correction addressed to work already in flight) and that session never
61970
+ // claimed it within the TTL, so the pin was cleared. Unlike the transient
61971
+ // skips, this does NOT self-resolve into the intended outcome: the delta is
61972
+ // now claimable by ANY compatible session, i.e. it will not reach the session
61973
+ // it was written for. Previously this only bumped a metrics counter and wrote
61974
+ // a log, so the coordinator kept waiting for a delivery that could no longer
61975
+ // happen — measured live as 74min of silence while a worker continued on a
61976
+ // premise the delta was meant to correct. The coordinator must know its
61977
+ // addressed message lost its address.
61978
+ "target_session_pin_expired",
61949
61979
  // SLOT MODEL GUARD (absent): no slot on the node declares the task's model.
61950
61980
  // Permanent — no amount of waiting produces a slot, so the coordinator must
61951
61981
  // re-drive (adjust difficulty, target another node, ask the owner). Its
@@ -67956,7 +67986,7 @@ ${cleanBody}`;
67956
67986
  const evidenceSessionId = resolveTaskEvidenceSessionId(meshId, row.id, row.assignedSessionId);
67957
67987
  const evidenceRow = evidenceSessionId && evidenceSessionId !== row.assignedSessionId ? { ...row, assignedSessionId: evidenceSessionId } : row;
67958
67988
  const verdict = evidenceSessionId ? resolveSessionBusyVerdict(components, evidenceSessionId) : "IDLE_CONFIRMED";
67959
- if (verdict === "GENERATING") {
67989
+ if (verdict === "GENERATING" && !queueHoldHardDeadlineExceeded(meshId, row, "live_generating", dispatchedAtMs, nowMs, "delivered_no_turn")) {
67960
67990
  deliveredNoTurnUnknownStreak.delete(streakKey);
67961
67991
  const gate = gateRedriveForHeldSuspension({ meshId, taskId: row.id, sessionLiveness: "alive", nowMs });
67962
67992
  if (gate.kind === "recovered") {
@@ -77555,6 +77585,7 @@ ${lastSnapshot}`;
77555
77585
  isBuiltinChatMessageKind: () => isBuiltinChatMessageKind,
77556
77586
  isCdpConnected: () => isCdpConnected,
77557
77587
  isCoordinatorSpawnedHiddenWorker: () => isCoordinatorSpawnedHiddenWorker,
77588
+ isCrossTrackConfigDirOverride: () => isCrossTrackConfigDirOverride,
77558
77589
  isEmptyUsage: () => isEmptyUsage,
77559
77590
  isExtensionInstalled: () => isExtensionInstalled,
77560
77591
  isGitCommandName: () => isGitCommandName,
@@ -77638,6 +77669,7 @@ ${lastSnapshot}`;
77638
77669
  normalizeRepoIdentity: () => normalizeRepoIdentity,
77639
77670
  normalizeRepoMeshDeclarativeConfig: () => normalizeRepoMeshDeclarativeConfig,
77640
77671
  normalizeSessionModalFields: () => normalizeSessionModalFields,
77672
+ otherTrackConfigDir: () => otherTrackConfigDir,
77641
77673
  parsePorcelainV2Status: () => parsePorcelainV2Status,
77642
77674
  parseProviderSourceConfigUpdate: () => parseProviderSourceConfigUpdate,
77643
77675
  parseWorktreeListOutput: () => parseWorktreeListOutput,
@@ -79056,6 +79088,7 @@ ${lastSnapshot}`;
79056
79088
  };
79057
79089
  init_git_worktree();
79058
79090
  init_config();
79091
+ init_config_dir();
79059
79092
  var os52 = __toESM2(require("os"));
79060
79093
  var path12 = __toESM2(require("path"));
79061
79094
  var import_session_host_core22 = require_dist();
@@ -105895,11 +105928,24 @@ Run 'adhdev doctor' for detailed diagnostics.`
105895
105928
  /**
105896
105929
  * Build CLI/ACP detection list (replaces cli-detector)
105897
105930
  * Dynamically generated from provider.js spawn.command.
105931
+ *
105932
+ * By default this only returns providers already enabled for this machine
105933
+ * (config.machineProviders[type].enabled === true) — that's the right scope
105934
+ * for `launch`, which must not spawn something the user never opted into.
105935
+ *
105936
+ * `includeDisabled: true` returns every cli/acp provider with a spawn
105937
+ * command regardless of the enabled flag, with `enabled` reporting the REAL
105938
+ * per-provider state instead of the hardcoded `true` the gated list implies.
105939
+ * This exists for first-run setup detection: a fresh machine's
105940
+ * machineProviders is `{}` (nothing enabled yet), so the gated list is always
105941
+ * empty and setup could never show what it actually found on disk — the
105942
+ * wizard needs to see candidates BEFORE anything has been enabled.
105898
105943
  */
105899
- getCliDetectionList() {
105944
+ getCliDetectionList(options) {
105900
105945
  const result = [];
105901
105946
  for (const p of this.providers.values()) {
105902
- if ((p.category === "cli" || p.category === "acp") && p.spawn?.command && this.isMachineProviderEnabled(p.type)) {
105947
+ const enabled = this.isMachineProviderEnabled(p.type);
105948
+ if ((p.category === "cli" || p.category === "acp") && p.spawn?.command && (enabled || options?.includeDisabled)) {
105903
105949
  const versionCommand = this.getPlatformVersionCommand(p.versionCommand);
105904
105950
  const command = this.getSpawnCommand(p.type, p.spawn.command);
105905
105951
  const args = this.getSpawnArgs(p.type, p.spawn.args || []);
@@ -105910,7 +105956,7 @@ Run 'adhdev doctor' for detailed diagnostics.`
105910
105956
  command,
105911
105957
  ...args.length > 0 ? { args } : {},
105912
105958
  category: p.category,
105913
- enabled: true,
105959
+ enabled,
105914
105960
  ...typeof versionCommand === "string" && versionCommand.trim() ? { versionCommand: versionCommand.trim() } : {}
105915
105961
  });
105916
105962
  }
@@ -124779,12 +124825,15 @@ ${upgradeFailureNotice.notice}${supersededHint}`);
124779
124825
  });
124780
124826
  providerLoader.loadAll();
124781
124827
  providerLoader.registerToDetector();
124782
- void providerLoader.maybeFirstSyncVerifiedChannel().then((report) => {
124828
+ void providerLoader.maybeFirstSyncVerifiedChannel().then(async (report) => {
124783
124829
  if (!report) return;
124784
124830
  if (report.status === "error") {
124785
124831
  LOG2.warn("Init", `Verified channel first-sync failed (last-known-good preserved): ${report.errors.map((e) => e.code).join(", ") || "unknown"}`);
124786
124832
  } else if (report.activated.length > 0) {
124787
124833
  LOG2.info("Init", `Verified channel first-sync activated ${report.activated.length} providers (${providerLoader.channel})`);
124834
+ providerLoader.registerToDetector();
124835
+ await refreshProviderAvailability();
124836
+ config2.onStatusChange?.();
124788
124837
  }
124789
124838
  }).catch((e) => LOG2.warn("Init", `Verified channel first-sync error: ${e?.message || e}`));
124790
124839
  setDefaultProviderLoader(providerLoader);