@adhdev/daemon-core 0.9.82-rc.514 → 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.
@@ -5,7 +5,7 @@
5
5
  * Cloud mode syncs these to D1 via server routes; standalone mode
6
6
  * uses this file as the single source of truth.
7
7
  */
8
- import type { LocalMeshEntry, LocalMeshNodeEntry, RepoMeshPolicy, RepoMeshNodePolicy, RepoMeshNodeCapabilities, RepoMeshCoordinatorConfig, RepoMeshHostMetadata, RepoMeshDaemonRole } from '../repo-mesh-types.js';
8
+ import type { LocalMeshEntry, LocalMeshNodeEntry, RepoMeshPolicy, RepoMeshNodePolicy, RepoMeshNodeCapabilities, RepoMeshCoordinatorConfig, RepoMeshHostMetadata, RepoMeshDaemonRole, MeshReportedMemberState } from '../repo-mesh-types.js';
9
9
  import type { MagiKindPanelMap, MagiSlot, DifficultyBrainMap } from '@adhdev/mesh-shared';
10
10
  /**
11
11
  * Migrate a node policy's legacy `providerRoles` cap onto `slots[].maxParallel`,
@@ -159,6 +159,11 @@ export declare function updateNode(meshId: string, nodeId: string, opts: {
159
159
  * is overwritten by the next report. */
160
160
  reportedProviderVersions?: Record<string, string>;
161
161
  reportedDaemonBuildVersion?: string;
162
+ /** Direction-B unified mirrored member state (versions + build + own resolved
163
+ * slots + lastReportedAt) self-reported by the owning daemon on the git_status
164
+ * envelope. Persisted wholesale so a remote node's slot-cap chips survive a
165
+ * coordinator restart, mirroring the per-field reported* self-heal. */
166
+ reportedMemberState?: MeshReportedMemberState;
162
167
  }): LocalMeshNodeEntry | undefined;
163
168
  /**
164
169
  * Validate + normalize a kind-panel's slots (the SOLE MAGI slot normalizer): provider
@@ -119,9 +119,17 @@ export interface GitCommandServices {
119
119
  * same way it does platform/arch. Wired at daemon boot from the cached CLI
120
120
  * detection snapshot; omitted (⇒ versions not reported) when unavailable.
121
121
  */
122
- getReporterProviderVersions?: () => {
122
+ getReporterProviderVersions?: (workspace?: string) => {
123
123
  providerVersions?: Record<string, string>;
124
124
  daemonBuildVersion?: string;
125
+ /**
126
+ * Direction-B: the reporter node's OWN resolved capability slots
127
+ * (resolveNodeCapabilitySlots over its LOCAL policy for this workspace). Carried
128
+ * inside the unified reporterMemberState so a remote node's slot-cap chips
129
+ * self-heal on the coordinator the same way versions do. Best-effort; omitted
130
+ * when the reporter cannot resolve slots for the workspace.
131
+ */
132
+ slots?: unknown[];
125
133
  };
126
134
  }
127
135
  type GitCommandFailure = {
@@ -137,6 +145,12 @@ type GitCommandSuccess = {
137
145
  reporterMachineNickname?: string;
138
146
  reporterProviderVersions?: Record<string, string>;
139
147
  reporterDaemonBuildVersion?: string;
148
+ reporterMemberState?: {
149
+ providerVersions?: Record<string, string>;
150
+ daemonBuildVersion?: string;
151
+ slots?: unknown[];
152
+ lastReportedAt?: number;
153
+ };
140
154
  } | {
141
155
  success: true;
142
156
  diffSummary: GitDiffSummary;
package/dist/index.js CHANGED
@@ -417,10 +417,10 @@ function readInjected(value) {
417
417
  }
418
418
  function getDaemonBuildInfo() {
419
419
  if (cached) return cached;
420
- const commit = readInjected(true ? "380556d36ec79e6fb92d2323b43226d45f8239a6" : void 0) ?? "unknown";
421
- const commitShort = readInjected(true ? "380556d3" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
422
- const version = readInjected(true ? "0.9.82-rc.514" : void 0) ?? readInjected(typeof process !== "undefined" ? process.env?.ADHDEV_PKG_VERSION : void 0) ?? "unknown";
423
- const builtAt = readInjected(true ? "2026-07-13T06:16:17.656Z" : void 0);
420
+ const commit = readInjected(true ? "6dbb06b08d25abd9e91c2f87d5aa3dee08bcc19c" : void 0) ?? "unknown";
421
+ const commitShort = readInjected(true ? "6dbb06b0" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
422
+ const version = readInjected(true ? "0.9.82-rc.515" : void 0) ?? readInjected(typeof process !== "undefined" ? process.env?.ADHDEV_PKG_VERSION : void 0) ?? "unknown";
423
+ const builtAt = readInjected(true ? "2026-07-13T09:44:33.291Z" : void 0);
424
424
  cached = builtAt ? { commit, commitShort, version, builtAt } : { commit, commitShort, version };
425
425
  return cached;
426
426
  }
@@ -3533,6 +3533,9 @@ function updateNode(meshId, nodeId, opts) {
3533
3533
  if (opts.reportedDaemonBuildVersion && opts.reportedDaemonBuildVersion.trim()) {
3534
3534
  node.reportedDaemonBuildVersion = opts.reportedDaemonBuildVersion.trim();
3535
3535
  }
3536
+ if (opts.reportedMemberState) {
3537
+ node.reportedMemberState = opts.reportedMemberState;
3538
+ }
3536
3539
  if (opts.policy) node.policy = { ...node.policy, ...opts.policy };
3537
3540
  if (Object.prototype.hasOwnProperty.call(opts, "capabilities")) {
3538
3541
  const tags = normalizeCapabilityTags(opts.capabilities);
@@ -3672,6 +3675,8 @@ function normalizeProviderPriority(policy) {
3672
3675
  function resolveNodeCapabilitySlots(node) {
3673
3676
  const explicit = normalizeNodeCapabilitySlots(node?.policy?.slots);
3674
3677
  if (explicit.length) return explicit;
3678
+ const mirrored = normalizeNodeCapabilitySlots(node?.reportedMemberState?.slots);
3679
+ if (mirrored.length) return mirrored;
3675
3680
  let difficultyBrains;
3676
3681
  try {
3677
3682
  difficultyBrains = getDifficultyBrains();
@@ -3683,6 +3688,26 @@ function resolveNodeCapabilitySlots(node) {
3683
3688
  difficultyBrains
3684
3689
  });
3685
3690
  }
3691
+ function resolveLocalNodeSlotsForWorkspace(workspace) {
3692
+ const ws = typeof workspace === "string" ? workspace.trim() : "";
3693
+ if (!ws) return [];
3694
+ let meshes;
3695
+ try {
3696
+ meshes = listMeshes();
3697
+ } catch {
3698
+ return [];
3699
+ }
3700
+ for (const mesh of Array.isArray(meshes) ? meshes : []) {
3701
+ for (const node of Array.isArray(mesh?.nodes) ? mesh.nodes : []) {
3702
+ const nodeWs = typeof node?.workspace === "string" ? node.workspace : "";
3703
+ if (nodeWs && meshWorkspacesEquivalent(nodeWs, ws)) {
3704
+ const slots = resolveNodeCapabilitySlots({ policy: node?.policy });
3705
+ if (slots.length) return slots;
3706
+ }
3707
+ }
3708
+ }
3709
+ return [];
3710
+ }
3686
3711
  var init_mesh_node_slots = __esm({
3687
3712
  "src/mesh/mesh-node-slots.ts"() {
3688
3713
  "use strict";
@@ -14589,7 +14614,8 @@ function recordInlineMeshDirectGitTruth(node, git, source) {
14589
14614
  reporterArch: null,
14590
14615
  reporterMachineNickname: null,
14591
14616
  reporterProviderVersions: null,
14592
- reporterDaemonBuildVersion: null
14617
+ reporterDaemonBuildVersion: null,
14618
+ reportedMemberState: null
14593
14619
  };
14594
14620
  }
14595
14621
  const checkedAt = readNumberValue(git.lastCheckedAt) ?? Date.now();
@@ -14617,16 +14643,47 @@ function recordInlineMeshDirectGitTruth(node, git, source) {
14617
14643
  if (reporterArch) node.reportedArch = reporterArch;
14618
14644
  const reporterMachineNickname = readStringValue(git.reporterMachineNickname) ?? null;
14619
14645
  if (reporterMachineNickname) node.machineNickname = reporterMachineNickname;
14620
- const reporterProviderVersions = readProviderVersionsRecord(git.reporterProviderVersions) ?? (isLocalSource ? readLocalReporterProviderVersions() : null);
14646
+ const unified = normalizeReportedMemberState(git.reporterMemberState);
14647
+ const reporterProviderVersions = (unified?.providerVersions ? readProviderVersionsRecord(unified.providerVersions) : null) ?? readProviderVersionsRecord(git.reporterProviderVersions) ?? (isLocalSource ? readLocalReporterProviderVersions() : null);
14621
14648
  if (reporterProviderVersions) node.reportedProviderVersions = reporterProviderVersions;
14622
- const reporterDaemonBuildVersion = readStringValue(git.reporterDaemonBuildVersion) ?? (isLocalSource ? readLocalReporterDaemonBuildVersion() : null) ?? null;
14649
+ const reporterDaemonBuildVersion = readStringValue(unified?.daemonBuildVersion) ?? readStringValue(git.reporterDaemonBuildVersion) ?? (isLocalSource ? readLocalReporterDaemonBuildVersion() : null) ?? null;
14623
14650
  if (reporterDaemonBuildVersion) node.reportedDaemonBuildVersion = reporterDaemonBuildVersion;
14651
+ if (!isLocalSource) {
14652
+ const reportedSlots = normalizeNodeCapabilitySlots(unified?.slots);
14653
+ const mirrored = {
14654
+ ...reporterProviderVersions ? { providerVersions: reporterProviderVersions } : {},
14655
+ ...reporterDaemonBuildVersion ? { daemonBuildVersion: reporterDaemonBuildVersion } : {},
14656
+ ...reportedSlots.length ? { slots: reportedSlots } : {},
14657
+ lastReportedAt: readNumberValue(unified?.lastReportedAt) ?? checkedAt
14658
+ };
14659
+ if (mirrored.providerVersions || mirrored.daemonBuildVersion || mirrored.slots) {
14660
+ node.reportedMemberState = mirrored;
14661
+ }
14662
+ }
14624
14663
  return {
14625
14664
  reporterPlatform,
14626
14665
  reporterArch,
14627
14666
  reporterMachineNickname,
14628
14667
  reporterProviderVersions,
14629
- reporterDaemonBuildVersion
14668
+ reporterDaemonBuildVersion,
14669
+ reportedMemberState: !isLocalSource ? node.reportedMemberState ?? null : null
14670
+ };
14671
+ }
14672
+ function normalizeReportedMemberState(value) {
14673
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
14674
+ const raw = value;
14675
+ const providerVersions = readProviderVersionsRecord(raw.providerVersions);
14676
+ const daemonBuildVersion = readStringValue(raw.daemonBuildVersion);
14677
+ const slots = normalizeNodeCapabilitySlots(raw.slots);
14678
+ const lastReportedAt = readNumberValue(raw.lastReportedAt);
14679
+ if (!providerVersions && !daemonBuildVersion && !slots.length && lastReportedAt === void 0) {
14680
+ return null;
14681
+ }
14682
+ return {
14683
+ ...providerVersions ? { providerVersions } : {},
14684
+ ...daemonBuildVersion ? { daemonBuildVersion } : {},
14685
+ ...slots.length ? { slots } : {},
14686
+ ...lastReportedAt !== void 0 ? { lastReportedAt } : {}
14630
14687
  };
14631
14688
  }
14632
14689
  function readProviderVersionsRecord(value) {
@@ -14679,7 +14736,8 @@ function persistNodeReporterPlatform(meshSource, mesh, nodeId, reporter) {
14679
14736
  const reportedMachineNickname = reporter.reporterMachineNickname ?? void 0;
14680
14737
  const reportedProviderVersions = reporter.reporterProviderVersions ?? void 0;
14681
14738
  const reportedDaemonBuildVersion = reporter.reporterDaemonBuildVersion ?? void 0;
14682
- if (!reportedPlatform && !reportedArch && !reportedMachineNickname && !reportedProviderVersions && !reportedDaemonBuildVersion) {
14739
+ const reportedMemberState = reporter.reportedMemberState ?? void 0;
14740
+ if (!reportedPlatform && !reportedArch && !reportedMachineNickname && !reportedProviderVersions && !reportedDaemonBuildVersion && !reportedMemberState) {
14683
14741
  return;
14684
14742
  }
14685
14743
  void Promise.resolve().then(() => (init_mesh_config(), mesh_config_exports)).then(({ updateNode: updateNode2 }) => updateNode2(meshId, nodeId, {
@@ -14687,7 +14745,8 @@ function persistNodeReporterPlatform(meshSource, mesh, nodeId, reporter) {
14687
14745
  reportedArch,
14688
14746
  reportedMachineNickname,
14689
14747
  reportedProviderVersions,
14690
- reportedDaemonBuildVersion
14748
+ reportedDaemonBuildVersion,
14749
+ reportedMemberState
14691
14750
  })).catch(() => {
14692
14751
  });
14693
14752
  }
@@ -15293,6 +15352,8 @@ async function probeRemoteMeshGitStatus(args) {
15293
15352
  if (reporterProviderVersions) git.reporterProviderVersions = reporterProviderVersions;
15294
15353
  const reporterDaemonBuildVersion = readStringValue(remoteResult?.reporterDaemonBuildVersion);
15295
15354
  if (reporterDaemonBuildVersion) git.reporterDaemonBuildVersion = reporterDaemonBuildVersion;
15355
+ const reporterMemberState = normalizeReportedMemberState(remoteResult?.reporterMemberState);
15356
+ if (reporterMemberState) git.reporterMemberState = reporterMemberState;
15296
15357
  return git;
15297
15358
  }
15298
15359
  function readMeshConnectionState(connection) {
@@ -29515,13 +29576,20 @@ async function handleGitCommand(command, args, services = defaultGitCommandServi
29515
29576
  })();
29516
29577
  const reporterVersions = (() => {
29517
29578
  try {
29518
- return services.getReporterProviderVersions?.() ?? {};
29579
+ return services.getReporterProviderVersions?.(workspace) ?? {};
29519
29580
  } catch {
29520
29581
  return {};
29521
29582
  }
29522
29583
  })();
29523
29584
  const reporterProviderVersions = reporterVersions.providerVersions && Object.keys(reporterVersions.providerVersions).length > 0 ? reporterVersions.providerVersions : void 0;
29524
29585
  const reporterDaemonBuildVersion = typeof reporterVersions.daemonBuildVersion === "string" && reporterVersions.daemonBuildVersion.trim() ? reporterVersions.daemonBuildVersion.trim() : void 0;
29586
+ const reporterSlots = Array.isArray(reporterVersions.slots) && reporterVersions.slots.length > 0 ? reporterVersions.slots : void 0;
29587
+ const reporterMemberState = reporterProviderVersions || reporterDaemonBuildVersion || reporterSlots ? {
29588
+ ...reporterProviderVersions ? { providerVersions: reporterProviderVersions } : {},
29589
+ ...reporterDaemonBuildVersion ? { daemonBuildVersion: reporterDaemonBuildVersion } : {},
29590
+ ...reporterSlots ? { slots: reporterSlots } : {},
29591
+ lastReportedAt: Date.now()
29592
+ } : void 0;
29525
29593
  return {
29526
29594
  success: true,
29527
29595
  status,
@@ -29529,7 +29597,8 @@ async function handleGitCommand(command, args, services = defaultGitCommandServi
29529
29597
  reporterArch: process.arch,
29530
29598
  ...reporterMachineNickname ? { reporterMachineNickname } : {},
29531
29599
  ...reporterProviderVersions ? { reporterProviderVersions } : {},
29532
- ...reporterDaemonBuildVersion ? { reporterDaemonBuildVersion } : {}
29600
+ ...reporterDaemonBuildVersion ? { reporterDaemonBuildVersion } : {},
29601
+ ...reporterMemberState ? { reporterMemberState } : {}
29533
29602
  };
29534
29603
  }
29535
29604
  case "git_diff_summary": {
@@ -70852,6 +70921,7 @@ var SessionRegistry = class {
70852
70921
  init_logger();
70853
70922
  init_runtime_defaults();
70854
70923
  init_config();
70924
+ init_mesh_node_slots();
70855
70925
  init_mesh_events();
70856
70926
  init_mesh_reconcile_loop();
70857
70927
  init_coordinator_registry();
@@ -70993,15 +71063,24 @@ async function initDaemonComponents(config) {
70993
71063
  instanceManager,
70994
71064
  sessionRegistry,
70995
71065
  gitCommandServices: createDefaultGitCommandServices({
70996
- // T7: fold this daemon's cached provider versions + build version onto the
70997
- // git_status envelope so the mesh coordinator self-heals each node's
70998
- // providerVersions. Non-blocking: reads a TTL cache, lazily refreshed.
70999
- getReporterProviderVersions: () => {
71066
+ // T7 + Direction-B: fold this daemon's cached provider versions + build
71067
+ // version AND its OWN resolved capability slots for the reported workspace
71068
+ // onto the git_status envelope so the mesh coordinator self-heals each
71069
+ // node's providerVersions AND its slot-cap chips (REMOTE-NODE-SLOT-CAP-CHIP
71070
+ // fix). Non-blocking: reads a TTL cache + local meshes.json, lazily
71071
+ // refreshed. The slots the reporter resolves are its LOCAL real policy's
71072
+ // slots — the coordinator mirrors them wholesale for a remote member whose
71073
+ // join-time policy copy is empty. (setDefaultProviderLoader is registered
71074
+ // above so getCachedProviderVersions/slot resolution is not empty — see
71075
+ // the 380556d3 version-chip lesson.)
71076
+ getReporterProviderVersions: (workspace) => {
71000
71077
  const providerVersions = getCachedProviderVersions(providerLoader);
71001
71078
  const daemonBuildVersion = getDaemonBuildInfo().version;
71079
+ const slots = resolveLocalNodeSlotsForWorkspace(workspace);
71002
71080
  return {
71003
71081
  ...Object.keys(providerVersions).length > 0 ? { providerVersions } : {},
71004
- ...daemonBuildVersion && daemonBuildVersion !== "unknown" ? { daemonBuildVersion } : {}
71082
+ ...daemonBuildVersion && daemonBuildVersion !== "unknown" ? { daemonBuildVersion } : {},
71083
+ ...slots.length > 0 ? { slots } : {}
71005
71084
  };
71006
71085
  }
71007
71086
  }),