@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/config/mesh-config.d.ts +6 -1
- package/dist/detection/cli-detector.d.ts +7 -0
- package/dist/git/git-commands.d.ts +15 -1
- package/dist/index.js +109 -19
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +109 -19
- package/dist/index.mjs.map +1 -1
- package/dist/mesh/mesh-node-identity.d.ts +3 -0
- package/dist/mesh/mesh-node-slots.d.ts +29 -2
- package/dist/repo-mesh-types.d.ts +51 -0
- package/package.json +3 -3
- package/src/boot/daemon-lifecycle.ts +21 -5
- package/src/commands/high-family/mesh-status.ts +12 -0
- package/src/config/mesh-config.ts +12 -0
- package/src/detection/cli-detector.ts +21 -1
- package/src/git/git-commands.ts +36 -3
- package/src/mesh/mesh-node-identity.ts +79 -4
- package/src/mesh/mesh-node-slots.ts +56 -3
- package/src/repo-mesh-types.ts +52 -0
|
@@ -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
|
|
@@ -38,6 +38,13 @@ export declare function detectCLI(cliId: string, providerLoader?: ProviderLoader
|
|
|
38
38
|
* what the git_status envelope carries and the mesh_status skew check compares.
|
|
39
39
|
*/
|
|
40
40
|
export declare function buildProviderVersions(detected: CLIInfo[]): Record<string, string>;
|
|
41
|
+
/**
|
|
42
|
+
* Register this daemon's ProviderLoader as the fallback used by loader-less
|
|
43
|
+
* provider-version reads (getCachedProviderVersions() with no argument). Called
|
|
44
|
+
* once at boot. Without it the coordinator's self node never resolves a CLI list,
|
|
45
|
+
* so its provider-version chips stay empty even though remote nodes populate.
|
|
46
|
+
*/
|
|
47
|
+
export declare function setDefaultProviderLoader(providerLoader: ProviderLoader): void;
|
|
41
48
|
/**
|
|
42
49
|
* Return the current cached provider-versions map for this daemon, triggering a
|
|
43
50
|
* lazy background refresh when the snapshot is stale/cold. Never blocks: returns
|
|
@@ -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 ? "
|
|
421
|
-
const commitShort = readInjected(true ? "
|
|
422
|
-
const version = readInjected(true ? "0.9.82-rc.
|
|
423
|
-
const builtAt = readInjected(true ? "2026-07-
|
|
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";
|
|
@@ -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(
|
|
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 import_child_process2, os6, path12, import_fs12, PROVIDER_VERSIONS_TTL_MS, cachedProviderVersions, cachedProviderVersionsAt, providerVersionsRefreshInFlight;
|
|
14232
|
+
var import_child_process2, os6, path12, import_fs12, 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";
|
|
@@ -14585,7 +14614,8 @@ function recordInlineMeshDirectGitTruth(node, git, source) {
|
|
|
14585
14614
|
reporterArch: null,
|
|
14586
14615
|
reporterMachineNickname: null,
|
|
14587
14616
|
reporterProviderVersions: null,
|
|
14588
|
-
reporterDaemonBuildVersion: null
|
|
14617
|
+
reporterDaemonBuildVersion: null,
|
|
14618
|
+
reportedMemberState: null
|
|
14589
14619
|
};
|
|
14590
14620
|
}
|
|
14591
14621
|
const checkedAt = readNumberValue(git.lastCheckedAt) ?? Date.now();
|
|
@@ -14613,16 +14643,47 @@ function recordInlineMeshDirectGitTruth(node, git, source) {
|
|
|
14613
14643
|
if (reporterArch) node.reportedArch = reporterArch;
|
|
14614
14644
|
const reporterMachineNickname = readStringValue(git.reporterMachineNickname) ?? null;
|
|
14615
14645
|
if (reporterMachineNickname) node.machineNickname = reporterMachineNickname;
|
|
14616
|
-
const
|
|
14646
|
+
const unified = normalizeReportedMemberState(git.reporterMemberState);
|
|
14647
|
+
const reporterProviderVersions = (unified?.providerVersions ? readProviderVersionsRecord(unified.providerVersions) : null) ?? readProviderVersionsRecord(git.reporterProviderVersions) ?? (isLocalSource ? readLocalReporterProviderVersions() : null);
|
|
14617
14648
|
if (reporterProviderVersions) node.reportedProviderVersions = reporterProviderVersions;
|
|
14618
|
-
const reporterDaemonBuildVersion = readStringValue(git.reporterDaemonBuildVersion) ?? (isLocalSource ? readLocalReporterDaemonBuildVersion() : null) ?? null;
|
|
14649
|
+
const reporterDaemonBuildVersion = readStringValue(unified?.daemonBuildVersion) ?? readStringValue(git.reporterDaemonBuildVersion) ?? (isLocalSource ? readLocalReporterDaemonBuildVersion() : null) ?? null;
|
|
14619
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
|
+
}
|
|
14620
14663
|
return {
|
|
14621
14664
|
reporterPlatform,
|
|
14622
14665
|
reporterArch,
|
|
14623
14666
|
reporterMachineNickname,
|
|
14624
14667
|
reporterProviderVersions,
|
|
14625
|
-
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 } : {}
|
|
14626
14687
|
};
|
|
14627
14688
|
}
|
|
14628
14689
|
function readProviderVersionsRecord(value) {
|
|
@@ -14675,7 +14736,8 @@ function persistNodeReporterPlatform(meshSource, mesh, nodeId, reporter) {
|
|
|
14675
14736
|
const reportedMachineNickname = reporter.reporterMachineNickname ?? void 0;
|
|
14676
14737
|
const reportedProviderVersions = reporter.reporterProviderVersions ?? void 0;
|
|
14677
14738
|
const reportedDaemonBuildVersion = reporter.reporterDaemonBuildVersion ?? void 0;
|
|
14678
|
-
|
|
14739
|
+
const reportedMemberState = reporter.reportedMemberState ?? void 0;
|
|
14740
|
+
if (!reportedPlatform && !reportedArch && !reportedMachineNickname && !reportedProviderVersions && !reportedDaemonBuildVersion && !reportedMemberState) {
|
|
14679
14741
|
return;
|
|
14680
14742
|
}
|
|
14681
14743
|
void Promise.resolve().then(() => (init_mesh_config(), mesh_config_exports)).then(({ updateNode: updateNode2 }) => updateNode2(meshId, nodeId, {
|
|
@@ -14683,7 +14745,8 @@ function persistNodeReporterPlatform(meshSource, mesh, nodeId, reporter) {
|
|
|
14683
14745
|
reportedArch,
|
|
14684
14746
|
reportedMachineNickname,
|
|
14685
14747
|
reportedProviderVersions,
|
|
14686
|
-
reportedDaemonBuildVersion
|
|
14748
|
+
reportedDaemonBuildVersion,
|
|
14749
|
+
reportedMemberState
|
|
14687
14750
|
})).catch(() => {
|
|
14688
14751
|
});
|
|
14689
14752
|
}
|
|
@@ -15289,6 +15352,8 @@ async function probeRemoteMeshGitStatus(args) {
|
|
|
15289
15352
|
if (reporterProviderVersions) git.reporterProviderVersions = reporterProviderVersions;
|
|
15290
15353
|
const reporterDaemonBuildVersion = readStringValue(remoteResult?.reporterDaemonBuildVersion);
|
|
15291
15354
|
if (reporterDaemonBuildVersion) git.reporterDaemonBuildVersion = reporterDaemonBuildVersion;
|
|
15355
|
+
const reporterMemberState = normalizeReportedMemberState(remoteResult?.reporterMemberState);
|
|
15356
|
+
if (reporterMemberState) git.reporterMemberState = reporterMemberState;
|
|
15292
15357
|
return git;
|
|
15293
15358
|
}
|
|
15294
15359
|
function readMeshConnectionState(connection) {
|
|
@@ -29511,13 +29576,20 @@ async function handleGitCommand(command, args, services = defaultGitCommandServi
|
|
|
29511
29576
|
})();
|
|
29512
29577
|
const reporterVersions = (() => {
|
|
29513
29578
|
try {
|
|
29514
|
-
return services.getReporterProviderVersions?.() ?? {};
|
|
29579
|
+
return services.getReporterProviderVersions?.(workspace) ?? {};
|
|
29515
29580
|
} catch {
|
|
29516
29581
|
return {};
|
|
29517
29582
|
}
|
|
29518
29583
|
})();
|
|
29519
29584
|
const reporterProviderVersions = reporterVersions.providerVersions && Object.keys(reporterVersions.providerVersions).length > 0 ? reporterVersions.providerVersions : void 0;
|
|
29520
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;
|
|
29521
29593
|
return {
|
|
29522
29594
|
success: true,
|
|
29523
29595
|
status,
|
|
@@ -29525,7 +29597,8 @@ async function handleGitCommand(command, args, services = defaultGitCommandServi
|
|
|
29525
29597
|
reporterArch: process.arch,
|
|
29526
29598
|
...reporterMachineNickname ? { reporterMachineNickname } : {},
|
|
29527
29599
|
...reporterProviderVersions ? { reporterProviderVersions } : {},
|
|
29528
|
-
...reporterDaemonBuildVersion ? { reporterDaemonBuildVersion } : {}
|
|
29600
|
+
...reporterDaemonBuildVersion ? { reporterDaemonBuildVersion } : {},
|
|
29601
|
+
...reporterMemberState ? { reporterMemberState } : {}
|
|
29529
29602
|
};
|
|
29530
29603
|
}
|
|
29531
29604
|
case "git_diff_summary": {
|
|
@@ -58679,6 +58752,12 @@ var meshStatusHandlers = {
|
|
|
58679
58752
|
}
|
|
58680
58753
|
applyInlineMeshBranchConvergence(mesh, node, status);
|
|
58681
58754
|
finalizeMeshNodeStatus({ status, node, daemonId, isSelfNode, directTruthUnavailable: directTruthUnavailableNodeIds.has(nodeId) });
|
|
58755
|
+
if (node.reportedProviderVersions && typeof node.reportedProviderVersions === "object") {
|
|
58756
|
+
status.providerVersions = node.reportedProviderVersions;
|
|
58757
|
+
}
|
|
58758
|
+
if (typeof node.reportedDaemonBuildVersion === "string" && node.reportedDaemonBuildVersion) {
|
|
58759
|
+
status.daemonBuildVersion = node.reportedDaemonBuildVersion;
|
|
58760
|
+
}
|
|
58682
58761
|
return status;
|
|
58683
58762
|
};
|
|
58684
58763
|
const meshNodeEntries = [...(mesh.nodes || []).entries()];
|
|
@@ -70842,6 +70921,7 @@ var SessionRegistry = class {
|
|
|
70842
70921
|
init_logger();
|
|
70843
70922
|
init_runtime_defaults();
|
|
70844
70923
|
init_config();
|
|
70924
|
+
init_mesh_node_slots();
|
|
70845
70925
|
init_mesh_events();
|
|
70846
70926
|
init_mesh_reconcile_loop();
|
|
70847
70927
|
init_coordinator_registry();
|
|
@@ -70891,6 +70971,7 @@ async function initDaemonComponents(config) {
|
|
|
70891
70971
|
});
|
|
70892
70972
|
providerLoader.loadAll();
|
|
70893
70973
|
providerLoader.registerToDetector();
|
|
70974
|
+
setDefaultProviderLoader(providerLoader);
|
|
70894
70975
|
const versionArchive = new VersionArchive();
|
|
70895
70976
|
providerLoader.setVersionArchive(versionArchive);
|
|
70896
70977
|
setTimeout(() => {
|
|
@@ -70982,15 +71063,24 @@ async function initDaemonComponents(config) {
|
|
|
70982
71063
|
instanceManager,
|
|
70983
71064
|
sessionRegistry,
|
|
70984
71065
|
gitCommandServices: createDefaultGitCommandServices({
|
|
70985
|
-
// T7: fold this daemon's cached provider versions + build
|
|
70986
|
-
//
|
|
70987
|
-
//
|
|
70988
|
-
|
|
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) => {
|
|
70989
71077
|
const providerVersions = getCachedProviderVersions(providerLoader);
|
|
70990
71078
|
const daemonBuildVersion = getDaemonBuildInfo().version;
|
|
71079
|
+
const slots = resolveLocalNodeSlotsForWorkspace(workspace);
|
|
70991
71080
|
return {
|
|
70992
71081
|
...Object.keys(providerVersions).length > 0 ? { providerVersions } : {},
|
|
70993
|
-
...daemonBuildVersion && daemonBuildVersion !== "unknown" ? { daemonBuildVersion } : {}
|
|
71082
|
+
...daemonBuildVersion && daemonBuildVersion !== "unknown" ? { daemonBuildVersion } : {},
|
|
71083
|
+
...slots.length > 0 ? { slots } : {}
|
|
70994
71084
|
};
|
|
70995
71085
|
}
|
|
70996
71086
|
}),
|