@adhdev/daemon-core 0.9.82-rc.95 → 0.9.82-rc.97

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.mjs CHANGED
@@ -1253,7 +1253,7 @@ Before doing any coordinator work, confirm that the actual callable tool list in
1253
1253
  c. **Targeted Tasks**: Use \`mesh_send_task\` only when you need to bypass the queue and force a specific node to execute a task immediately.
1254
1254
  d. For the first dispatch of a new task, provide a **complete, self-contained** instruction that includes all context the agent needs (file paths, line numbers, what to change, why). Do not send partial instructions expecting future follow-up.
1255
1255
  e. For a continuation of the same issue in an existing session, send a concise **delta instruction**: current verified state, the exact failed/blocked step, the newly approved action, and final reporting requirements. Do not resend the full original task or open a new chat solely to continue the same work; that wastes coordinator and worker context.
1256
- 4. **Monitor** \u2014 Prefer event-driven completion/status notifications. Do **not** poll \`mesh_read_chat\` repeatedly. Use \`mesh_view_queue\` to see the status of all pending, assigned, completed, and failed tasks. Do not call \`mesh_read_chat\` again within a few seconds for the same generating session. Use at most one compact \`mesh_read_chat\` check after a completion/approval signal. Handle approvals via \`mesh_approve\`.
1256
+ 4. **Monitor** \u2014 Prefer event-driven completion/status notifications. Do **not** poll \`mesh_read_chat\` repeatedly. Do **not** repeatedly call \`mesh_status\` or \`mesh_view_queue\` just to wait for assigned/generating work. After dispatching a direct or queued task, send one progress update with the task/session handle, then stop. Wait for \`pendingCoordinatorEvents\` or another completion/approval/status signal, an explicit user status request, or a real timeout/stall signal before reading status/chat/queue again. Use at most one compact \`mesh_read_chat\` check after a terminal signal. Handle approvals via \`mesh_approve\`.
1257
1257
  5. **Verify** \u2014 When a task reports completion or git work is visible, call \`mesh_git_status\` to verify changes were made.
1258
1258
  6. **Checkpoint** \u2014 Call \`mesh_checkpoint\` to save the work.
1259
1259
  7. **Converge branches** \u2014 Before marking any task complete, classify every touched node/branch into exactly one final state: \`merged_to_main\`, \`pushed_feature_branch_needs_merge\`, \`blocked_review\`, \`cleanup_candidate\`, or \`not_mergeable\`. Use \`mesh_status\` branchConvergenceSummary. For obvious clean branch catch-up (ahead 0, behind > 0, upstream fresh, no dirty/stash/submodule issues), use \`mesh_fast_forward_node\` dry-run first and execute only when explicitly safe/approved; this avoids consuming an agent session. Use \`mesh_refine_node\` for clean worktree branches when safe. Before/refine merging root commits that contain submodule gitlink changes, require each submodule commit to be reachable from the configured submodule remote main branch, not merely present on a feature ref or local checkout. If \`mesh_refine_node\` returns \`submodule_reachability_failed\` or publish-required evidence, keep the public convergence bucket as \`blocked_review\`; unless \`allowAutoPublishSubmoduleMainCommits\` is explicitly enabled and Refinery reports successful non-force publish plus post-publish verification, ask the user for explicit approval to push/publish the unreachable submodule commit(s) to submodule main, then rerun \`mesh_refine_node\`. Do not merge the root branch until the submodule commit(s) are reachable from submodule origin/main. A task that remains on a non-main branch is not fully complete unless the final report names the follow-up state and next step.
@@ -15865,7 +15865,7 @@ var RECENT_SEND_WINDOW_MS = 1200;
15865
15865
  var READ_CHAT_PROVIDER_EVAL_TIMEOUT_MS = 25e3;
15866
15866
  var HERMES_CLI_STARTING_SEND_SETTLE_MS = 2e3;
15867
15867
  var CLI_NATIVE_HISTORY_FRESH_MS = 5 * 6e4;
15868
- var CLI_NATIVE_TRANSCRIPT_PROVIDERS = /* @__PURE__ */ new Set(["codex-cli", "claude-cli", "hermes-cli"]);
15868
+ var CLI_NATIVE_TRANSCRIPT_PROVIDERS = /* @__PURE__ */ new Set(["codex-cli", "claude-cli", "hermes-cli", "antigravity-cli"]);
15869
15869
  var recentSendByTarget = /* @__PURE__ */ new Map();
15870
15870
  function getCurrentProviderType(h, fallback = "") {
15871
15871
  return h.currentSession?.providerType || h.currentProviderType || fallback;
@@ -26096,7 +26096,7 @@ async function maybeRunDaemonUpgradeHelperFromEnv() {
26096
26096
 
26097
26097
  // src/commands/router.ts
26098
26098
  init_mesh_work_queue();
26099
- import { homedir as homedir19 } from "os";
26099
+ import { homedir as homedir19, hostname as osHostname } from "os";
26100
26100
  import { basename as pathBasename, join as pathJoin, resolve as pathResolve } from "path";
26101
26101
  import * as fs11 from "fs";
26102
26102
  var CHANNEL_NPM_TAG = { stable: "latest", preview: "next" };
@@ -26245,12 +26245,114 @@ function buildMeshNodeDisplayLabel(node, nodeId, providerPriority) {
26245
26245
  if (explicit) return explicit;
26246
26246
  const workspace = readStringValue(node.workspace, node.repoRoot, node.repo_root);
26247
26247
  const workspaceName = workspace ? pathBasename(workspace) : void 0;
26248
- const host = readStringValue(node.hostname, node.host, node.daemonId, node.daemon_id, node.machineId, node.machine_id);
26248
+ const host = readStringValue(node.machineName, node.machine_name, node.hostname, node.host, node.daemonId, node.daemon_id, node.machineId, node.machine_id);
26249
26249
  const provider = providerPriority[0] || (Array.isArray(node.providers) ? readStringValue(...node.providers) : void 0);
26250
26250
  const parts = [workspaceName, host, provider].filter(Boolean);
26251
26251
  if (parts.length > 0) return parts.join(" \xB7 ");
26252
26252
  return nodeId || "unidentified mesh node";
26253
26253
  }
26254
+ function normalizeMeshHostname(value) {
26255
+ const hostname2 = readStringValue(value);
26256
+ if (!hostname2) return void 0;
26257
+ return hostname2.toLowerCase().replace(/\.$/, "");
26258
+ }
26259
+ function readMeshNodeMachineId(node) {
26260
+ return readStringValue(
26261
+ node.machineId,
26262
+ node.machine_id,
26263
+ readObjectRecord(node.machine)?.id,
26264
+ readObjectRecord(node.machine)?.machineId,
26265
+ readObjectRecord(node.lastProbe)?.machineId,
26266
+ readObjectRecord(node.last_probe)?.machine_id,
26267
+ readObjectRecord(readObjectRecord(node.lastProbe)?.machine)?.id,
26268
+ readObjectRecord(readObjectRecord(node.lastProbe)?.machine)?.machineId,
26269
+ readObjectRecord(readObjectRecord(node.last_probe)?.machine)?.id,
26270
+ readObjectRecord(readObjectRecord(node.last_probe)?.machine)?.machine_id
26271
+ );
26272
+ }
26273
+ function readMeshNodeDaemonId(node) {
26274
+ return readStringValue(
26275
+ node.daemonId,
26276
+ node.daemon_id,
26277
+ readObjectRecord(node.machine)?.daemonId,
26278
+ readObjectRecord(node.machine)?.daemon_id,
26279
+ readObjectRecord(node.lastProbe)?.daemonId,
26280
+ readObjectRecord(node.last_probe)?.daemon_id,
26281
+ readObjectRecord(readObjectRecord(node.lastProbe)?.machine)?.daemonId,
26282
+ readObjectRecord(readObjectRecord(node.lastProbe)?.machine)?.daemon_id,
26283
+ readObjectRecord(readObjectRecord(node.last_probe)?.machine)?.daemonId,
26284
+ readObjectRecord(readObjectRecord(node.last_probe)?.machine)?.daemon_id
26285
+ );
26286
+ }
26287
+ function readMeshNodeHostname(node) {
26288
+ return readStringValue(
26289
+ node.hostname,
26290
+ node.host,
26291
+ node.machineHostname,
26292
+ node.machine_hostname,
26293
+ readObjectRecord(node.machine)?.hostname,
26294
+ readObjectRecord(node.machine)?.host,
26295
+ readObjectRecord(node.lastProbe)?.hostname,
26296
+ readObjectRecord(node.last_probe)?.hostname,
26297
+ readObjectRecord(readObjectRecord(node.lastProbe)?.machine)?.hostname,
26298
+ readObjectRecord(readObjectRecord(node.last_probe)?.machine)?.hostname
26299
+ );
26300
+ }
26301
+ function readMeshNodeDisplayMachineName(node) {
26302
+ return readStringValue(
26303
+ node.machineName,
26304
+ node.machine_name,
26305
+ node.machineLabel,
26306
+ node.machine_label,
26307
+ node.machineNickname,
26308
+ node.machine_nickname,
26309
+ node.alias,
26310
+ readObjectRecord(node.machine)?.name,
26311
+ readObjectRecord(node.machine)?.displayName,
26312
+ readObjectRecord(node.machine)?.display_name,
26313
+ readObjectRecord(node.lastProbe)?.machineName,
26314
+ readObjectRecord(node.last_probe)?.machine_name,
26315
+ readObjectRecord(readObjectRecord(node.lastProbe)?.machine)?.name,
26316
+ readObjectRecord(readObjectRecord(node.last_probe)?.machine)?.name,
26317
+ readMeshNodeHostname(node)
26318
+ );
26319
+ }
26320
+ function compactMeshIdentityEvidence(value) {
26321
+ if (!value) return void 0;
26322
+ return value.length > 24 ? `${value.slice(0, 12)}\u2026${value.slice(-8)}` : value;
26323
+ }
26324
+ function buildMeshNodeMachineIdentity(node, opts) {
26325
+ const machineId = readMeshNodeMachineId(node);
26326
+ const daemonId = readMeshNodeDaemonId(node);
26327
+ const hostname2 = readMeshNodeHostname(node);
26328
+ const machineName = readMeshNodeDisplayMachineName(node);
26329
+ const coordinatorHostname = readStringValue(opts.coordinatorHostname);
26330
+ const machineIdMatches = Boolean(opts.localMachineId && machineId && opts.localMachineId === machineId);
26331
+ const daemonIdMatches = Boolean(opts.localDaemonId && daemonId && opts.localDaemonId === daemonId);
26332
+ const hostnameMatches = Boolean(
26333
+ normalizeMeshHostname(hostname2) && normalizeMeshHostname(coordinatorHostname) && normalizeMeshHostname(hostname2) === normalizeMeshHostname(coordinatorHostname)
26334
+ );
26335
+ const sameMachine = opts.isSelfNode === true || machineIdMatches || daemonIdMatches || hostnameMatches;
26336
+ const evidence = [];
26337
+ for (const [label, value] of [["machineName", machineName], ["hostname", hostname2], ["machineId", machineId], ["daemonId", daemonId]]) {
26338
+ const compact = compactMeshIdentityEvidence(value);
26339
+ if (compact) evidence.push(`${label}:${compact}`);
26340
+ }
26341
+ const locality = sameMachine ? "same_machine" : evidence.length > 0 ? "remote_known" : "remote_or_unknown";
26342
+ const localityReason = sameMachine ? machineIdMatches ? "matched coordinator machine id" : daemonIdMatches ? "matched coordinator daemon id" : hostnameMatches ? "matched coordinator hostname" : "selected coordinator node" : evidence.length > 0 ? `known remote/other machine identity; no local coordinator match (${evidence.join(", ")})` : "no useful machine identity evidence available";
26343
+ return {
26344
+ daemonId,
26345
+ machineId,
26346
+ hostname: hostname2,
26347
+ machineName,
26348
+ displayName: machineName || hostname2 || daemonId || machineId,
26349
+ coordinatorHostname,
26350
+ sameMachine,
26351
+ locality,
26352
+ localityReason,
26353
+ identityEvidence: evidence
26354
+ };
26355
+ }
26254
26356
  function normalizeInlineMeshGitStatus(status, node, options) {
26255
26357
  const isGitRepo = readBooleanValue(status.isGitRepo);
26256
26358
  if (!Object.keys(status).length || isGitRepo === void 0) return void 0;
@@ -30309,6 +30411,7 @@ ${block2}`);
30309
30411
  return failureResult;
30310
30412
  }
30311
30413
  const directTruthUnavailableNodeIds = new Set(effectiveDirectTruth.unavailableNodeIds);
30414
+ const coordinatorHostname = osHostname();
30312
30415
  const selectedCoordinatorNodeId = readStringValue(
30313
30416
  mesh.coordinator?.preferredNodeId,
30314
30417
  mesh.nodes?.[0]?.id,
@@ -30326,6 +30429,12 @@ ${block2}`);
30326
30429
  ) || Boolean(
30327
30430
  daemonId && (daemonId === localMachineId || daemonId === this.deps.statusInstanceId)
30328
30431
  ) || Boolean(meshRecord?.inline && nodeIndex === 0);
30432
+ const machineIdentity = buildMeshNodeMachineIdentity(node, {
30433
+ localMachineId,
30434
+ localDaemonId: this.deps.statusInstanceId,
30435
+ coordinatorHostname,
30436
+ isSelfNode
30437
+ });
30329
30438
  const status = {
30330
30439
  nodeId,
30331
30440
  machineLabel: buildMeshNodeDisplayLabel(node, nodeId, providerPriority),
@@ -30336,7 +30445,8 @@ ${block2}`);
30336
30445
  worktreeBranch: node.worktreeBranch,
30337
30446
  role: normalizeMeshDaemonRole(node.role) || (meshHost.hostNodeId && nodeId === meshHost.hostNodeId ? "host" : void 0),
30338
30447
  daemonId,
30339
- machineId: node.machineId,
30448
+ machineId: readMeshNodeMachineId(node) || node.machineId,
30449
+ machine: machineIdentity,
30340
30450
  machineStatus: node.machineStatus,
30341
30451
  health: "unknown",
30342
30452
  providers: node.providers || [],