@adhdev/daemon-core 0.9.82-rc.513 → 0.9.82-rc.515

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
@@ -412,10 +412,10 @@ function readInjected(value) {
412
412
  }
413
413
  function getDaemonBuildInfo() {
414
414
  if (cached) return cached;
415
- const commit = readInjected(true ? "e32fbf96c63cca603a29156a0f70f41ff8e1b252" : void 0) ?? "unknown";
416
- const commitShort = readInjected(true ? "e32fbf96" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
417
- const version = readInjected(true ? "0.9.82-rc.513" : void 0) ?? readInjected(typeof process !== "undefined" ? process.env?.ADHDEV_PKG_VERSION : void 0) ?? "unknown";
418
- const builtAt = readInjected(true ? "2026-07-13T05:58:35.132Z" : void 0);
415
+ const commit = readInjected(true ? "6dbb06b08d25abd9e91c2f87d5aa3dee08bcc19c" : void 0) ?? "unknown";
416
+ const commitShort = readInjected(true ? "6dbb06b0" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
417
+ const version = readInjected(true ? "0.9.82-rc.515" : void 0) ?? readInjected(typeof process !== "undefined" ? process.env?.ADHDEV_PKG_VERSION : void 0) ?? "unknown";
418
+ const builtAt = readInjected(true ? "2026-07-13T09:44:33.291Z" : void 0);
419
419
  cached = builtAt ? { commit, commitShort, version, builtAt } : { commit, commitShort, version };
420
420
  return cached;
421
421
  }
@@ -3530,6 +3530,9 @@ function updateNode(meshId, nodeId, opts) {
3530
3530
  if (opts.reportedDaemonBuildVersion && opts.reportedDaemonBuildVersion.trim()) {
3531
3531
  node.reportedDaemonBuildVersion = opts.reportedDaemonBuildVersion.trim();
3532
3532
  }
3533
+ if (opts.reportedMemberState) {
3534
+ node.reportedMemberState = opts.reportedMemberState;
3535
+ }
3533
3536
  if (opts.policy) node.policy = { ...node.policy, ...opts.policy };
3534
3537
  if (Object.prototype.hasOwnProperty.call(opts, "capabilities")) {
3535
3538
  const tags = normalizeCapabilityTags(opts.capabilities);
@@ -3666,6 +3669,8 @@ function normalizeProviderPriority(policy) {
3666
3669
  function resolveNodeCapabilitySlots(node) {
3667
3670
  const explicit = normalizeNodeCapabilitySlots(node?.policy?.slots);
3668
3671
  if (explicit.length) return explicit;
3672
+ const mirrored = normalizeNodeCapabilitySlots(node?.reportedMemberState?.slots);
3673
+ if (mirrored.length) return mirrored;
3669
3674
  let difficultyBrains;
3670
3675
  try {
3671
3676
  difficultyBrains = getDifficultyBrains();
@@ -3677,6 +3682,26 @@ function resolveNodeCapabilitySlots(node) {
3677
3682
  difficultyBrains
3678
3683
  });
3679
3684
  }
3685
+ function resolveLocalNodeSlotsForWorkspace(workspace) {
3686
+ const ws = typeof workspace === "string" ? workspace.trim() : "";
3687
+ if (!ws) return [];
3688
+ let meshes;
3689
+ try {
3690
+ meshes = listMeshes();
3691
+ } catch {
3692
+ return [];
3693
+ }
3694
+ for (const mesh of Array.isArray(meshes) ? meshes : []) {
3695
+ for (const node of Array.isArray(mesh?.nodes) ? mesh.nodes : []) {
3696
+ const nodeWs = typeof node?.workspace === "string" ? node.workspace : "";
3697
+ if (nodeWs && meshWorkspacesEquivalent(nodeWs, ws)) {
3698
+ const slots = resolveNodeCapabilitySlots({ policy: node?.policy });
3699
+ if (slots.length) return slots;
3700
+ }
3701
+ }
3702
+ }
3703
+ return [];
3704
+ }
3680
3705
  var init_mesh_node_slots = __esm({
3681
3706
  "src/mesh/mesh-node-slots.ts"() {
3682
3707
  "use strict";
@@ -14179,11 +14204,15 @@ function buildProviderVersions(detected) {
14179
14204
  }
14180
14205
  return out;
14181
14206
  }
14207
+ function setDefaultProviderLoader(providerLoader) {
14208
+ defaultProviderLoader = providerLoader;
14209
+ }
14182
14210
  function refreshProviderVersionsSnapshot(providerLoader) {
14183
14211
  if (providerVersionsRefreshInFlight) return providerVersionsRefreshInFlight;
14212
+ const loader = providerLoader ?? defaultProviderLoader;
14184
14213
  providerVersionsRefreshInFlight = (async () => {
14185
14214
  try {
14186
- const detected = await detectCLIs(providerLoader, { includeVersion: true });
14215
+ const detected = await detectCLIs(loader, { includeVersion: true });
14187
14216
  cachedProviderVersions = buildProviderVersions(detected);
14188
14217
  cachedProviderVersionsAt = Date.now();
14189
14218
  } catch {
@@ -14200,7 +14229,7 @@ function getCachedProviderVersions(providerLoader) {
14200
14229
  }
14201
14230
  return { ...cachedProviderVersions };
14202
14231
  }
14203
- var PROVIDER_VERSIONS_TTL_MS, cachedProviderVersions, cachedProviderVersionsAt, providerVersionsRefreshInFlight;
14232
+ var PROVIDER_VERSIONS_TTL_MS, cachedProviderVersions, cachedProviderVersionsAt, providerVersionsRefreshInFlight, defaultProviderLoader;
14204
14233
  var init_cli_detector = __esm({
14205
14234
  "src/detection/cli-detector.ts"() {
14206
14235
  "use strict";
@@ -14588,7 +14617,8 @@ function recordInlineMeshDirectGitTruth(node, git, source) {
14588
14617
  reporterArch: null,
14589
14618
  reporterMachineNickname: null,
14590
14619
  reporterProviderVersions: null,
14591
- reporterDaemonBuildVersion: null
14620
+ reporterDaemonBuildVersion: null,
14621
+ reportedMemberState: null
14592
14622
  };
14593
14623
  }
14594
14624
  const checkedAt = readNumberValue(git.lastCheckedAt) ?? Date.now();
@@ -14616,16 +14646,47 @@ function recordInlineMeshDirectGitTruth(node, git, source) {
14616
14646
  if (reporterArch) node.reportedArch = reporterArch;
14617
14647
  const reporterMachineNickname = readStringValue(git.reporterMachineNickname) ?? null;
14618
14648
  if (reporterMachineNickname) node.machineNickname = reporterMachineNickname;
14619
- const reporterProviderVersions = readProviderVersionsRecord(git.reporterProviderVersions) ?? (isLocalSource ? readLocalReporterProviderVersions() : null);
14649
+ const unified = normalizeReportedMemberState(git.reporterMemberState);
14650
+ const reporterProviderVersions = (unified?.providerVersions ? readProviderVersionsRecord(unified.providerVersions) : null) ?? readProviderVersionsRecord(git.reporterProviderVersions) ?? (isLocalSource ? readLocalReporterProviderVersions() : null);
14620
14651
  if (reporterProviderVersions) node.reportedProviderVersions = reporterProviderVersions;
14621
- const reporterDaemonBuildVersion = readStringValue(git.reporterDaemonBuildVersion) ?? (isLocalSource ? readLocalReporterDaemonBuildVersion() : null) ?? null;
14652
+ const reporterDaemonBuildVersion = readStringValue(unified?.daemonBuildVersion) ?? readStringValue(git.reporterDaemonBuildVersion) ?? (isLocalSource ? readLocalReporterDaemonBuildVersion() : null) ?? null;
14622
14653
  if (reporterDaemonBuildVersion) node.reportedDaemonBuildVersion = reporterDaemonBuildVersion;
14654
+ if (!isLocalSource) {
14655
+ const reportedSlots = normalizeNodeCapabilitySlots(unified?.slots);
14656
+ const mirrored = {
14657
+ ...reporterProviderVersions ? { providerVersions: reporterProviderVersions } : {},
14658
+ ...reporterDaemonBuildVersion ? { daemonBuildVersion: reporterDaemonBuildVersion } : {},
14659
+ ...reportedSlots.length ? { slots: reportedSlots } : {},
14660
+ lastReportedAt: readNumberValue(unified?.lastReportedAt) ?? checkedAt
14661
+ };
14662
+ if (mirrored.providerVersions || mirrored.daemonBuildVersion || mirrored.slots) {
14663
+ node.reportedMemberState = mirrored;
14664
+ }
14665
+ }
14623
14666
  return {
14624
14667
  reporterPlatform,
14625
14668
  reporterArch,
14626
14669
  reporterMachineNickname,
14627
14670
  reporterProviderVersions,
14628
- reporterDaemonBuildVersion
14671
+ reporterDaemonBuildVersion,
14672
+ reportedMemberState: !isLocalSource ? node.reportedMemberState ?? null : null
14673
+ };
14674
+ }
14675
+ function normalizeReportedMemberState(value) {
14676
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
14677
+ const raw = value;
14678
+ const providerVersions = readProviderVersionsRecord(raw.providerVersions);
14679
+ const daemonBuildVersion = readStringValue(raw.daemonBuildVersion);
14680
+ const slots = normalizeNodeCapabilitySlots(raw.slots);
14681
+ const lastReportedAt = readNumberValue(raw.lastReportedAt);
14682
+ if (!providerVersions && !daemonBuildVersion && !slots.length && lastReportedAt === void 0) {
14683
+ return null;
14684
+ }
14685
+ return {
14686
+ ...providerVersions ? { providerVersions } : {},
14687
+ ...daemonBuildVersion ? { daemonBuildVersion } : {},
14688
+ ...slots.length ? { slots } : {},
14689
+ ...lastReportedAt !== void 0 ? { lastReportedAt } : {}
14629
14690
  };
14630
14691
  }
14631
14692
  function readProviderVersionsRecord(value) {
@@ -14678,7 +14739,8 @@ function persistNodeReporterPlatform(meshSource, mesh, nodeId, reporter) {
14678
14739
  const reportedMachineNickname = reporter.reporterMachineNickname ?? void 0;
14679
14740
  const reportedProviderVersions = reporter.reporterProviderVersions ?? void 0;
14680
14741
  const reportedDaemonBuildVersion = reporter.reporterDaemonBuildVersion ?? void 0;
14681
- if (!reportedPlatform && !reportedArch && !reportedMachineNickname && !reportedProviderVersions && !reportedDaemonBuildVersion) {
14742
+ const reportedMemberState = reporter.reportedMemberState ?? void 0;
14743
+ if (!reportedPlatform && !reportedArch && !reportedMachineNickname && !reportedProviderVersions && !reportedDaemonBuildVersion && !reportedMemberState) {
14682
14744
  return;
14683
14745
  }
14684
14746
  void Promise.resolve().then(() => (init_mesh_config(), mesh_config_exports)).then(({ updateNode: updateNode2 }) => updateNode2(meshId, nodeId, {
@@ -14686,7 +14748,8 @@ function persistNodeReporterPlatform(meshSource, mesh, nodeId, reporter) {
14686
14748
  reportedArch,
14687
14749
  reportedMachineNickname,
14688
14750
  reportedProviderVersions,
14689
- reportedDaemonBuildVersion
14751
+ reportedDaemonBuildVersion,
14752
+ reportedMemberState
14690
14753
  })).catch(() => {
14691
14754
  });
14692
14755
  }
@@ -15292,6 +15355,8 @@ async function probeRemoteMeshGitStatus(args) {
15292
15355
  if (reporterProviderVersions) git.reporterProviderVersions = reporterProviderVersions;
15293
15356
  const reporterDaemonBuildVersion = readStringValue(remoteResult?.reporterDaemonBuildVersion);
15294
15357
  if (reporterDaemonBuildVersion) git.reporterDaemonBuildVersion = reporterDaemonBuildVersion;
15358
+ const reporterMemberState = normalizeReportedMemberState(remoteResult?.reporterMemberState);
15359
+ if (reporterMemberState) git.reporterMemberState = reporterMemberState;
15295
15360
  return git;
15296
15361
  }
15297
15362
  function readMeshConnectionState(connection) {
@@ -29086,13 +29151,20 @@ async function handleGitCommand(command, args, services = defaultGitCommandServi
29086
29151
  })();
29087
29152
  const reporterVersions = (() => {
29088
29153
  try {
29089
- return services.getReporterProviderVersions?.() ?? {};
29154
+ return services.getReporterProviderVersions?.(workspace) ?? {};
29090
29155
  } catch {
29091
29156
  return {};
29092
29157
  }
29093
29158
  })();
29094
29159
  const reporterProviderVersions = reporterVersions.providerVersions && Object.keys(reporterVersions.providerVersions).length > 0 ? reporterVersions.providerVersions : void 0;
29095
29160
  const reporterDaemonBuildVersion = typeof reporterVersions.daemonBuildVersion === "string" && reporterVersions.daemonBuildVersion.trim() ? reporterVersions.daemonBuildVersion.trim() : void 0;
29161
+ const reporterSlots = Array.isArray(reporterVersions.slots) && reporterVersions.slots.length > 0 ? reporterVersions.slots : void 0;
29162
+ const reporterMemberState = reporterProviderVersions || reporterDaemonBuildVersion || reporterSlots ? {
29163
+ ...reporterProviderVersions ? { providerVersions: reporterProviderVersions } : {},
29164
+ ...reporterDaemonBuildVersion ? { daemonBuildVersion: reporterDaemonBuildVersion } : {},
29165
+ ...reporterSlots ? { slots: reporterSlots } : {},
29166
+ lastReportedAt: Date.now()
29167
+ } : void 0;
29096
29168
  return {
29097
29169
  success: true,
29098
29170
  status,
@@ -29100,7 +29172,8 @@ async function handleGitCommand(command, args, services = defaultGitCommandServi
29100
29172
  reporterArch: process.arch,
29101
29173
  ...reporterMachineNickname ? { reporterMachineNickname } : {},
29102
29174
  ...reporterProviderVersions ? { reporterProviderVersions } : {},
29103
- ...reporterDaemonBuildVersion ? { reporterDaemonBuildVersion } : {}
29175
+ ...reporterDaemonBuildVersion ? { reporterDaemonBuildVersion } : {},
29176
+ ...reporterMemberState ? { reporterMemberState } : {}
29104
29177
  };
29105
29178
  }
29106
29179
  case "git_diff_summary": {
@@ -58259,6 +58332,12 @@ var meshStatusHandlers = {
58259
58332
  }
58260
58333
  applyInlineMeshBranchConvergence(mesh, node, status);
58261
58334
  finalizeMeshNodeStatus({ status, node, daemonId, isSelfNode, directTruthUnavailable: directTruthUnavailableNodeIds.has(nodeId) });
58335
+ if (node.reportedProviderVersions && typeof node.reportedProviderVersions === "object") {
58336
+ status.providerVersions = node.reportedProviderVersions;
58337
+ }
58338
+ if (typeof node.reportedDaemonBuildVersion === "string" && node.reportedDaemonBuildVersion) {
58339
+ status.daemonBuildVersion = node.reportedDaemonBuildVersion;
58340
+ }
58262
58341
  return status;
58263
58342
  };
58264
58343
  const meshNodeEntries = [...(mesh.nodes || []).entries()];
@@ -70432,6 +70511,7 @@ var SessionRegistry = class {
70432
70511
  init_logger();
70433
70512
  init_runtime_defaults();
70434
70513
  init_config();
70514
+ init_mesh_node_slots();
70435
70515
  init_mesh_events();
70436
70516
  init_mesh_reconcile_loop();
70437
70517
  init_coordinator_registry();
@@ -70481,6 +70561,7 @@ async function initDaemonComponents(config) {
70481
70561
  });
70482
70562
  providerLoader.loadAll();
70483
70563
  providerLoader.registerToDetector();
70564
+ setDefaultProviderLoader(providerLoader);
70484
70565
  const versionArchive = new VersionArchive();
70485
70566
  providerLoader.setVersionArchive(versionArchive);
70486
70567
  setTimeout(() => {
@@ -70572,15 +70653,24 @@ async function initDaemonComponents(config) {
70572
70653
  instanceManager,
70573
70654
  sessionRegistry,
70574
70655
  gitCommandServices: createDefaultGitCommandServices({
70575
- // T7: fold this daemon's cached provider versions + build version onto the
70576
- // git_status envelope so the mesh coordinator self-heals each node's
70577
- // providerVersions. Non-blocking: reads a TTL cache, lazily refreshed.
70578
- getReporterProviderVersions: () => {
70656
+ // T7 + Direction-B: fold this daemon's cached provider versions + build
70657
+ // version AND its OWN resolved capability slots for the reported workspace
70658
+ // onto the git_status envelope so the mesh coordinator self-heals each
70659
+ // node's providerVersions AND its slot-cap chips (REMOTE-NODE-SLOT-CAP-CHIP
70660
+ // fix). Non-blocking: reads a TTL cache + local meshes.json, lazily
70661
+ // refreshed. The slots the reporter resolves are its LOCAL real policy's
70662
+ // slots — the coordinator mirrors them wholesale for a remote member whose
70663
+ // join-time policy copy is empty. (setDefaultProviderLoader is registered
70664
+ // above so getCachedProviderVersions/slot resolution is not empty — see
70665
+ // the 380556d3 version-chip lesson.)
70666
+ getReporterProviderVersions: (workspace) => {
70579
70667
  const providerVersions = getCachedProviderVersions(providerLoader);
70580
70668
  const daemonBuildVersion = getDaemonBuildInfo().version;
70669
+ const slots = resolveLocalNodeSlotsForWorkspace(workspace);
70581
70670
  return {
70582
70671
  ...Object.keys(providerVersions).length > 0 ? { providerVersions } : {},
70583
- ...daemonBuildVersion && daemonBuildVersion !== "unknown" ? { daemonBuildVersion } : {}
70672
+ ...daemonBuildVersion && daemonBuildVersion !== "unknown" ? { daemonBuildVersion } : {},
70673
+ ...slots.length > 0 ? { slots } : {}
70584
70674
  };
70585
70675
  }
70586
70676
  }),