@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.
- package/dist/config/mesh-config.d.ts +6 -1
- package/dist/git/git-commands.d.ts +15 -1
- package/dist/index.js +96 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +96 -17
- 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 +14 -4
- package/src/config/mesh-config.ts +12 -0
- 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
|
|
@@ -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";
|
|
@@ -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
|
|
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
|
-
|
|
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
|
|
70997
|
-
//
|
|
70998
|
-
//
|
|
70999
|
-
|
|
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
|
}),
|