adhdev 0.9.82-rc.270 → 0.9.82-rc.272

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.
@@ -1133,10 +1133,10 @@ function readInjected(value) {
1133
1133
  }
1134
1134
  function getDaemonBuildInfo() {
1135
1135
  if (cached) return cached;
1136
- const commit = readInjected(true ? "7004ebf6e270fbcb990f3fd66542fd77db0eeea0" : void 0) ?? "unknown";
1137
- const commitShort = readInjected(true ? "7004ebf6" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
1138
- const version2 = readInjected(true ? "0.9.82-rc.270" : void 0) ?? readInjected(typeof process !== "undefined" ? "0.9.82-rc.270" : void 0) ?? "unknown";
1139
- const builtAt = readInjected(true ? "2026-06-14T23:52:20.280Z" : void 0);
1136
+ const commit = readInjected(true ? "1f169aa4f18b9abeb993f274d84b6a8d0a4dfb13" : void 0) ?? "unknown";
1137
+ const commitShort = readInjected(true ? "1f169aa4" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
1138
+ const version2 = readInjected(true ? "0.9.82-rc.272" : void 0) ?? readInjected(typeof process !== "undefined" ? "0.9.82-rc.272" : void 0) ?? "unknown";
1139
+ const builtAt = readInjected(true ? "2026-06-15T04:21:47.496Z" : void 0);
1140
1140
  cached = builtAt ? { commit, commitShort, version: version2, builtAt } : { commit, commitShort, version: version2 };
1141
1141
  return cached;
1142
1142
  }
@@ -127598,7 +127598,7 @@ var init_adhdev_daemon = __esm({
127598
127598
  init_version();
127599
127599
  init_src();
127600
127600
  init_runtime_defaults();
127601
- pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.82-rc.270" });
127601
+ pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.82-rc.272" });
127602
127602
  LOCAL_DAEMON_HEALTH_TIMEOUT_MS = 8e3;
127603
127603
  AdhdevDaemon = class _AdhdevDaemon {
127604
127604
  localHttpServer = null;
package/dist/cli/index.js CHANGED
@@ -1133,10 +1133,10 @@ function readInjected(value) {
1133
1133
  }
1134
1134
  function getDaemonBuildInfo() {
1135
1135
  if (cached) return cached;
1136
- const commit = readInjected(true ? "7004ebf6e270fbcb990f3fd66542fd77db0eeea0" : void 0) ?? "unknown";
1137
- const commitShort = readInjected(true ? "7004ebf6" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
1138
- const version2 = readInjected(true ? "0.9.82-rc.270" : void 0) ?? readInjected(typeof process !== "undefined" ? "0.9.82-rc.270" : void 0) ?? "unknown";
1139
- const builtAt = readInjected(true ? "2026-06-14T23:52:20.280Z" : void 0);
1136
+ const commit = readInjected(true ? "1f169aa4f18b9abeb993f274d84b6a8d0a4dfb13" : void 0) ?? "unknown";
1137
+ const commitShort = readInjected(true ? "1f169aa4" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
1138
+ const version2 = readInjected(true ? "0.9.82-rc.272" : void 0) ?? readInjected(typeof process !== "undefined" ? "0.9.82-rc.272" : void 0) ?? "unknown";
1139
+ const builtAt = readInjected(true ? "2026-06-15T04:21:47.496Z" : void 0);
1140
1140
  cached = builtAt ? { commit, commitShort, version: version2, builtAt } : { commit, commitShort, version: version2 };
1141
1141
  return cached;
1142
1142
  }
@@ -127568,7 +127568,7 @@ var init_adhdev_daemon = __esm({
127568
127568
  init_version();
127569
127569
  init_src();
127570
127570
  init_runtime_defaults();
127571
- pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.82-rc.270" });
127571
+ pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.82-rc.272" });
127572
127572
  LOCAL_DAEMON_HEALTH_TIMEOUT_MS = 8e3;
127573
127573
  AdhdevDaemon = class _AdhdevDaemon {
127574
127574
  localHttpServer = null;
package/dist/index.js CHANGED
@@ -613,10 +613,10 @@ function readInjected(value) {
613
613
  }
614
614
  function getDaemonBuildInfo() {
615
615
  if (cached) return cached;
616
- const commit = readInjected(true ? "7004ebf6e270fbcb990f3fd66542fd77db0eeea0" : void 0) ?? "unknown";
617
- const commitShort = readInjected(true ? "7004ebf6" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
618
- const version2 = readInjected(true ? "0.9.82-rc.270" : void 0) ?? readInjected(typeof process !== "undefined" ? "0.9.82-rc.270" : void 0) ?? "unknown";
619
- const builtAt = readInjected(true ? "2026-06-14T23:52:20.280Z" : void 0);
616
+ const commit = readInjected(true ? "1f169aa4f18b9abeb993f274d84b6a8d0a4dfb13" : void 0) ?? "unknown";
617
+ const commitShort = readInjected(true ? "1f169aa4" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
618
+ const version2 = readInjected(true ? "0.9.82-rc.272" : void 0) ?? readInjected(typeof process !== "undefined" ? "0.9.82-rc.272" : void 0) ?? "unknown";
619
+ const builtAt = readInjected(true ? "2026-06-15T04:21:47.496Z" : void 0);
620
620
  cached = builtAt ? { commit, commitShort, version: version2, builtAt } : { commit, commitShort, version: version2 };
621
621
  return cached;
622
622
  }
@@ -96390,7 +96390,7 @@ var init_adhdev_daemon = __esm({
96390
96390
  init_version();
96391
96391
  init_src();
96392
96392
  init_runtime_defaults();
96393
- pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.82-rc.270" });
96393
+ pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.82-rc.272" });
96394
96394
  LOCAL_DAEMON_HEALTH_TIMEOUT_MS = 8e3;
96395
96395
  AdhdevDaemon = class _AdhdevDaemon {
96396
96396
  localHttpServer = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adhdev",
3
- "version": "0.9.82-rc.270",
3
+ "version": "0.9.82-rc.272",
4
4
  "description": "ADHDev — Agent Dashboard Hub for Dev. The control hub for your AI coding agents (Claude Code, Codex, Hermes, …).",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -49,9 +49,9 @@
49
49
  "node": ">=18"
50
50
  },
51
51
  "dependencies": {
52
- "@adhdev/daemon-core": "0.9.82-rc.270",
52
+ "@adhdev/daemon-core": "0.9.82-rc.272",
53
53
  "@adhdev/ghostty-vt-node": "*",
54
- "@adhdev/mesh-shared": "0.9.82-rc.270",
54
+ "@adhdev/mesh-shared": "0.9.82-rc.272",
55
55
  "@modelcontextprotocol/sdk": "^1.0.0",
56
56
  "@xterm/addon-serialize": "^0.14.0",
57
57
  "@xterm/xterm": "^6.0.0",
@@ -1049,15 +1049,18 @@ function hasRemoteRelayMetadata(session) {
1049
1049
  readString(session?.settings?.meshCoordinatorDaemonId) || readString(session?.meta?.meshCoordinatorDaemonId) || readString(session?.metadata?.meshCoordinatorDaemonId) || readString(session?.meshCoordinatorDaemonId)
1050
1050
  );
1051
1051
  }
1052
- function isRelaySafeRemoteDelegateSession(session, meshId, nodeId) {
1053
- return isMeshOwnedDelegateSession(session, meshId, nodeId) && hasRemoteRelayMetadata(session);
1052
+ function classifyRemoteDelegateRelaySafety(session, meshId, nodeId, coordinatorDaemonId) {
1053
+ if (!isMeshOwnedDelegateSession(session, meshId, nodeId)) return "unsafe_alias";
1054
+ if (hasRemoteRelayMetadata(session)) return "safe";
1055
+ return coordinatorDaemonId ? "self_heal" : "missing_anchor";
1054
1056
  }
1055
- function chooseDispatchableSession(sessions, providerType, meshId, nodeId) {
1057
+ function chooseDispatchableSession(sessions, providerType, meshId, nodeId, coordinatorDaemonId) {
1056
1058
  const live = sessions.filter((session) => !isTerminalSessionRecord(session));
1057
1059
  const matchingProvider = (session) => !providerType || session?.providerType === providerType || session?.cliType === providerType;
1058
- const meshSessions = live.filter(
1059
- (session) => isRelaySafeRemoteDelegateSession(session, meshId, nodeId)
1060
- );
1060
+ const meshSessions = live.filter((session) => {
1061
+ const safety = classifyRemoteDelegateRelaySafety(session, meshId, nodeId, coordinatorDaemonId);
1062
+ return safety === "safe" || safety === "self_heal";
1063
+ });
1061
1064
  return meshSessions.find((session) => isIdleSessionRecord(session) && matchingProvider(session)) || meshSessions.find(matchingProvider) || void 0;
1062
1065
  }
1063
1066
  function buildRelayUnsafeRemoteSessionFailure(ctx, node, sessionId, providerType) {
@@ -1397,12 +1400,14 @@ function buildCoordinatorP2pRelayFailure(error, context) {
1397
1400
  async function ipcDispatchToRemoteAgent(ctx, node, args) {
1398
1401
  const transport = ctx.transport;
1399
1402
  const daemonId = node.daemonId;
1403
+ const dispatchCoordinatorDaemonId = readString(args.meshContext?.coordinatorDaemonId) || "";
1400
1404
  let sessionId = args.session_id?.trim() || "";
1401
1405
  const providerPriorityList = Array.isArray(node.policy?.providerPriority) ? node.policy.providerPriority : [];
1402
1406
  let resolvedProviderType = args.providerType?.trim() || providerPriorityList[0] || "";
1403
1407
  if (sessionId && args.verifiedSession) {
1404
1408
  const explicitSession = args.verifiedSession;
1405
- if (!isRelaySafeRemoteDelegateSession(explicitSession, ctx.mesh.id, node.id)) {
1409
+ const relaySafety = classifyRemoteDelegateRelaySafety(explicitSession, ctx.mesh.id, node.id, dispatchCoordinatorDaemonId);
1410
+ if (relaySafety === "unsafe_alias") {
1406
1411
  return buildRelayUnsafeRemoteSessionFailure(
1407
1412
  ctx,
1408
1413
  node,
@@ -1410,6 +1415,13 @@ async function ipcDispatchToRemoteAgent(ctx, node, args) {
1410
1415
  resolvedProviderType || resolveSessionProviderType(explicitSession) || void 0
1411
1416
  );
1412
1417
  }
1418
+ if (relaySafety === "missing_anchor") {
1419
+ return buildMissingCoordinatorDaemonIdFailure(
1420
+ ctx,
1421
+ node,
1422
+ resolvedProviderType || resolveSessionProviderType(explicitSession) || void 0
1423
+ );
1424
+ }
1413
1425
  if (!resolvedProviderType) {
1414
1426
  resolvedProviderType = resolveSessionProviderType(explicitSession);
1415
1427
  }
@@ -1437,7 +1449,8 @@ async function ipcDispatchToRemoteAgent(ctx, node, args) {
1437
1449
  nextAction: `Launch a fresh session with mesh_launch_session(node_id: '${node.id}'${resolvedProviderType ? `, type: '${resolvedProviderType}'` : ""}) or retry without session_id so Repo Mesh can target a live delegate session.`
1438
1450
  };
1439
1451
  }
1440
- if (!isRelaySafeRemoteDelegateSession(explicitSession, ctx.mesh.id, node.id)) {
1452
+ const relaySafety = classifyRemoteDelegateRelaySafety(explicitSession, ctx.mesh.id, node.id, dispatchCoordinatorDaemonId);
1453
+ if (relaySafety === "unsafe_alias") {
1441
1454
  return buildRelayUnsafeRemoteSessionFailure(
1442
1455
  ctx,
1443
1456
  node,
@@ -1445,11 +1458,18 @@ async function ipcDispatchToRemoteAgent(ctx, node, args) {
1445
1458
  resolvedProviderType || resolveSessionProviderType(explicitSession) || void 0
1446
1459
  );
1447
1460
  }
1461
+ if (relaySafety === "missing_anchor") {
1462
+ return buildMissingCoordinatorDaemonIdFailure(
1463
+ ctx,
1464
+ node,
1465
+ resolvedProviderType || resolveSessionProviderType(explicitSession) || void 0
1466
+ );
1467
+ }
1448
1468
  if (!resolvedProviderType) {
1449
1469
  resolvedProviderType = resolveSessionProviderType(explicitSession);
1450
1470
  }
1451
1471
  } else {
1452
- const targetSession = chooseDispatchableSession(sessions, resolvedProviderType, ctx.mesh.id, node.id);
1472
+ const targetSession = chooseDispatchableSession(sessions, resolvedProviderType, ctx.mesh.id, node.id, dispatchCoordinatorDaemonId);
1453
1473
  if (targetSession?.id || targetSession?.sessionId) {
1454
1474
  sessionId = targetSession.id || targetSession.sessionId;
1455
1475
  if (!resolvedProviderType) {
@@ -1529,6 +1549,9 @@ function resolveCoordinatorNode(ctx) {
1529
1549
  }
1530
1550
  return void 0;
1531
1551
  }
1552
+ function resolveCoordinatorDaemonId(ctx) {
1553
+ return readString(resolveCoordinatorNode(ctx)?.daemonId) || readString(ctx.localDaemonId) || readString(ctx.localMachineId);
1554
+ }
1532
1555
  function readNodeMachineId(node) {
1533
1556
  return readString(node.machineId) || readString(node.machine_id) || readString(node.machine?.id) || readString(node.machine?.machineId) || readString(node.lastProbe?.machineId) || readString(node.last_probe?.machine_id) || readString(node.lastProbe?.machine?.id) || readString(node.lastProbe?.machine?.machineId) || readString(node.last_probe?.machine?.id) || readString(node.last_probe?.machine?.machine_id);
1534
1557
  }
@@ -3546,7 +3569,7 @@ async function meshSendTask(ctx, args) {
3546
3569
  if (ctx.transport instanceof IpcTransport && node.daemonId && !isLocalNode) {
3547
3570
  const cached = getSessionMetadata(meshSessionCacheKey(args.node_id, args.session_id || ""));
3548
3571
  const taskId = (0, import_node_crypto.randomUUID)();
3549
- const coordinatorDaemonId = resolveCoordinatorNode(ctx)?.daemonId || ctx.localDaemonId;
3572
+ const coordinatorDaemonId = resolveCoordinatorDaemonId(ctx);
3550
3573
  const result2 = await ipcDispatchToRemoteAgent(ctx, node, {
3551
3574
  session_id: args.session_id,
3552
3575
  message: args.message,
@@ -3716,7 +3739,7 @@ async function meshSendTask(ctx, args) {
3716
3739
  const sessionWasIdle = explicitTargetSession ? isIdleSessionRecord(explicitTargetSession) : false;
3717
3740
  const taskId = (0, import_node_crypto.randomUUID)();
3718
3741
  const dispatchedAt = (/* @__PURE__ */ new Date()).toISOString();
3719
- const coordinatorDaemonId = resolveCoordinatorNode(ctx)?.daemonId || ctx.localDaemonId;
3742
+ const coordinatorDaemonId = resolveCoordinatorDaemonId(ctx);
3720
3743
  const dispatchResult = await commandForNode(ctx, node, "agent_command", {
3721
3744
  targetSessionId: args.session_id,
3722
3745
  agentType: resolvedProviderType,
@@ -3927,7 +3950,7 @@ async function meshLaunchSession(ctx, args) {
3927
3950
  }
3928
3951
  }
3929
3952
  const coordinatorNode = resolveCoordinatorNode(ctx);
3930
- const coordinatorDaemonId = coordinatorNode?.daemonId || ctx.localDaemonId;
3953
+ const coordinatorDaemonId = resolveCoordinatorDaemonId(ctx);
3931
3954
  const spawnedSessionVisibility = readSpawnedSessionVisibility(ctx.mesh.policy);
3932
3955
  const delegatedWorkerAutoApprove = (0, import_daemon_core.resolveDelegatedWorkerAutoApprove)(ctx.mesh.policy, node.policy);
3933
3956
  const isLocalNode = isLocalControlPlaneNode(ctx, node);