@adhdev/daemon-core 0.9.82-rc.370 → 0.9.82-rc.372
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/commands/med-family/mesh-restart.d.ts +2 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +126 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +124 -13
- package/dist/index.mjs.map +1 -1
- package/dist/mesh/mesh-events-coordinator.d.ts +1 -0
- package/dist/mesh/mesh-reconcile-loop.d.ts +1 -0
- package/dist/mesh/mesh-runtime-store.d.ts +1 -0
- package/dist/mesh/mesh-work-queue.d.ts +1 -0
- package/package.json +2 -2
- package/src/commands/cli-manager.ts +11 -2
- package/src/commands/med-family/index.ts +2 -0
- package/src/commands/med-family/mesh-restart.ts +92 -0
- package/src/index.ts +1 -1
- package/src/mesh/mesh-events-coordinator.ts +67 -3
- package/src/mesh/mesh-reconcile-loop.ts +58 -6
- package/src/mesh/mesh-runtime-store.ts +26 -1
- package/src/mesh/mesh-work-queue.ts +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -84,7 +84,7 @@ export { DaemonCdpInitializer } from './cdp/initializer.js';
|
|
|
84
84
|
export type { CdpInitializerConfig } from './cdp/initializer.js';
|
|
85
85
|
export { DaemonCommandHandler } from './commands/handler.js';
|
|
86
86
|
export type { CommandResult, CommandContext } from './commands/handler.js';
|
|
87
|
-
export { DaemonCommandRouter, readCachedInlineMeshActiveSessionDetails, resolveMeshNodeAttribution } from './commands/router.js';
|
|
87
|
+
export { DaemonCommandRouter, readCachedInlineMeshActiveSessionDetails, resolveMeshNodeAttribution, buildMeshNodeDataFreshness, MESH_NODE_LIVE_TRUTH_MARKER } from './commands/router.js';
|
|
88
88
|
export type { CommandRouterDeps, CommandRouterResult } from './commands/router.js';
|
|
89
89
|
export { maybeRunDaemonUpgradeHelperFromEnv, spawnDetachedDaemonUpgradeHelper, resolveCurrentGlobalInstallSurface, buildPinnedGlobalInstallCommand, execNpmCommandSync, getNpmExecOptions, } from './commands/upgrade-helper.js';
|
|
90
90
|
export type { DaemonUpgradeHelperPayload, CurrentGlobalInstallSurface, PinnedGlobalInstallCommand, NpmExecOptions, } from './commands/upgrade-helper.js';
|
package/dist/index.js
CHANGED
|
@@ -316,10 +316,10 @@ function readInjected(value) {
|
|
|
316
316
|
}
|
|
317
317
|
function getDaemonBuildInfo() {
|
|
318
318
|
if (cached) return cached;
|
|
319
|
-
const commit = readInjected(true ? "
|
|
320
|
-
const commitShort = readInjected(true ? "
|
|
321
|
-
const version = readInjected(true ? "0.9.82-rc.
|
|
322
|
-
const builtAt = readInjected(true ? "2026-06-
|
|
319
|
+
const commit = readInjected(true ? "376a56400a2a60c210b7d8a2476b5d2a15604c7e" : void 0) ?? "unknown";
|
|
320
|
+
const commitShort = readInjected(true ? "376a5640" : void 0) ?? (commit !== "unknown" ? commit.slice(0, 7) : "unknown");
|
|
321
|
+
const version = readInjected(true ? "0.9.82-rc.372" : void 0) ?? readInjected(typeof process !== "undefined" ? process.env?.ADHDEV_PKG_VERSION : void 0) ?? "unknown";
|
|
322
|
+
const builtAt = readInjected(true ? "2026-06-24T13:46:48.450Z" : void 0);
|
|
323
323
|
cached = builtAt ? { commit, commitShort, version, builtAt } : { commit, commitShort, version };
|
|
324
324
|
return cached;
|
|
325
325
|
}
|
|
@@ -5542,7 +5542,14 @@ var init_mesh_runtime_store = __esm({
|
|
|
5542
5542
|
if (candidate.taskMode === "live_debug_readonly") return true;
|
|
5543
5543
|
return !nodeBusy;
|
|
5544
5544
|
};
|
|
5545
|
-
const
|
|
5545
|
+
const nodeIsWorktree = opts?.nodeIsWorktree === true;
|
|
5546
|
+
const convergenceAllows = (candidate) => candidate.taskMode !== "convergence" || !nodeIsWorktree;
|
|
5547
|
+
const targetMatches = (candidate) => {
|
|
5548
|
+
if (candidate.targetSessionId && candidate.targetSessionId !== sessionId) return false;
|
|
5549
|
+
if (candidate.targetNodeId && candidate.targetNodeId !== nodeId) return false;
|
|
5550
|
+
return true;
|
|
5551
|
+
};
|
|
5552
|
+
const entry = candidates.find((candidate) => nodeSatisfiesRequiredTags(candidate.requiredTags, capabilityTags) && dependenciesSatisfied(candidate) && convergenceAllows(candidate) && targetMatches(candidate) && nodeConflictAllows(candidate));
|
|
5546
5553
|
if (!entry) return null;
|
|
5547
5554
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
5548
5555
|
entry.status = "assigned";
|
|
@@ -12746,6 +12753,31 @@ function recoverMeshIdByNodeId(nodeId) {
|
|
|
12746
12753
|
}
|
|
12747
12754
|
return "";
|
|
12748
12755
|
}
|
|
12756
|
+
function resolveForwardEventMeshId(components, payload) {
|
|
12757
|
+
const direct = readNonEmptyString2(payload.meshId);
|
|
12758
|
+
if (direct) return direct;
|
|
12759
|
+
const workspace = readNonEmptyString2(payload.workspace);
|
|
12760
|
+
const byWorkspace = workspace ? readNonEmptyString2(getCachedMeshByWorkspace(workspace)?.id) : "";
|
|
12761
|
+
if (byWorkspace) return byWorkspace;
|
|
12762
|
+
const byNode = recoverMeshIdByNodeId(readNonEmptyString2(payload.nodeId));
|
|
12763
|
+
if (byNode) return byNode;
|
|
12764
|
+
const sessionId = readNonEmptyString2(payload.targetSessionId) || readNonEmptyString2(payload.sessionId) || readNonEmptyString2(payload.instanceId);
|
|
12765
|
+
if (sessionId) {
|
|
12766
|
+
try {
|
|
12767
|
+
const state = components.instanceManager?.getInstance?.(sessionId)?.getState?.();
|
|
12768
|
+
const settings = state?.settings || {};
|
|
12769
|
+
const meshNodeFor = readNonEmptyString2(settings.meshNodeFor);
|
|
12770
|
+
if (meshNodeFor) return meshNodeFor;
|
|
12771
|
+
const byStamp = recoverMeshIdByNodeId(readNonEmptyString2(settings.meshNodeId));
|
|
12772
|
+
if (byStamp) return byStamp;
|
|
12773
|
+
const sessionWorkspace = readNonEmptyString2(state?.workspace);
|
|
12774
|
+
const bySessionWorkspace = sessionWorkspace ? readNonEmptyString2(getCachedMeshByWorkspace(sessionWorkspace)?.id) : "";
|
|
12775
|
+
if (bySessionWorkspace) return bySessionWorkspace;
|
|
12776
|
+
} catch {
|
|
12777
|
+
}
|
|
12778
|
+
}
|
|
12779
|
+
return "";
|
|
12780
|
+
}
|
|
12749
12781
|
function __resetIdleAutoFastForwardForTests() {
|
|
12750
12782
|
idleAutoFastForwardLastAttempt.clear();
|
|
12751
12783
|
}
|
|
@@ -12992,9 +13024,11 @@ function tryAssignQueueTask(components, meshId, nodeId, sessionId, providerType)
|
|
|
12992
13024
|
}
|
|
12993
13025
|
const capabilityTags = buildMeshNodeCapabilityTags(node, providerType);
|
|
12994
13026
|
const providerMaxParallel = resolveProviderMaxParallel(node?.policy, providerType);
|
|
13027
|
+
const nodeIsWorktree = node?.isLocalWorktree === true;
|
|
12995
13028
|
const task = claimNextTask(meshId, nodeId, sessionId, capabilityTags, {
|
|
12996
13029
|
providerType,
|
|
12997
|
-
...providerMaxParallel !== void 0 ? { providerMaxParallel } : {}
|
|
13030
|
+
...providerMaxParallel !== void 0 ? { providerMaxParallel } : {},
|
|
13031
|
+
nodeIsWorktree
|
|
12998
13032
|
});
|
|
12999
13033
|
if (!task) {
|
|
13000
13034
|
return false;
|
|
@@ -13338,6 +13372,7 @@ async function maybeAutoLaunchOneQueueSession(components, meshId, mesh) {
|
|
|
13338
13372
|
}
|
|
13339
13373
|
const candidateNodes = Array.isArray(mesh?.nodes) ? mesh.nodes.filter((node) => {
|
|
13340
13374
|
if (task.targetNodeId && !meshNodeIdMatches(node, task.targetNodeId)) return false;
|
|
13375
|
+
if (task.taskMode === "convergence" && node?.isLocalWorktree === true) return false;
|
|
13341
13376
|
if (task.requiredTags?.length) {
|
|
13342
13377
|
const priorities = normalizeProviderPriority(node?.policy);
|
|
13343
13378
|
const providerCandidates = priorities.length ? priorities : [void 0];
|
|
@@ -14321,6 +14356,8 @@ function forwardUnresolvedDelegateEvent(components, routing, event) {
|
|
|
14321
14356
|
nodeId: readNonEmptyString2(routing.nodeId) || readNonEmptyString2(event.meshNodeId) || void 0,
|
|
14322
14357
|
workspace: readNonEmptyString2(routing.workspace) || readNonEmptyString2(event.workspace) || void 0
|
|
14323
14358
|
};
|
|
14359
|
+
const resolvedMeshId = resolveForwardEventMeshId(components, payload);
|
|
14360
|
+
if (resolvedMeshId) payload.meshId = resolvedMeshId;
|
|
14324
14361
|
const selfDaemonIds = resolveCoordinatorDrainDaemonIds(components);
|
|
14325
14362
|
if (selfDaemonIds.some((self) => daemonIdsEquivalent(self, coordinatorDaemonId))) {
|
|
14326
14363
|
try {
|
|
@@ -14843,7 +14880,10 @@ async function retryUnresolvedDelegateForwards(components) {
|
|
|
14843
14880
|
if (!dispatchMeshCommand) return;
|
|
14844
14881
|
expireStaleUnresolvedDelegateForwards();
|
|
14845
14882
|
const entries = peekUnresolvedDelegateForwards();
|
|
14846
|
-
if (entries.length === 0)
|
|
14883
|
+
if (entries.length === 0) {
|
|
14884
|
+
if (unresolvedForwardRejectionCounts.size > 0) unresolvedForwardRejectionCounts.clear();
|
|
14885
|
+
return;
|
|
14886
|
+
}
|
|
14847
14887
|
const selfIds = resolveCoordinatorDaemonIds(components);
|
|
14848
14888
|
const isSelfCoordinatorId = (id) => selfIds.some((self) => daemonIdsEquivalent(self, id));
|
|
14849
14889
|
for (const entry of entries) {
|
|
@@ -14862,6 +14902,7 @@ async function retryUnresolvedDelegateForwards(components) {
|
|
|
14862
14902
|
LOG.warn("MeshReconcile", `Local route of self-addressed forward to ${entry.coordinatorDaemonId} threw: ${e?.message || e} \u2014 draining anyway to break the retry loop`);
|
|
14863
14903
|
}
|
|
14864
14904
|
ackUnresolvedDelegateForward(entry.id);
|
|
14905
|
+
unresolvedForwardRejectionCounts.delete(entry.id);
|
|
14865
14906
|
if (localResult && localResult.success === false) {
|
|
14866
14907
|
LOG.warn("MeshReconcile", `Self-addressed unresolved-delegate ${readNonEmptyString2(entry.payload.event)} rejected by local router (${readNonEmptyString2(localResult.error) || "no reason"}) \u2014 drained to break the self-forward retry loop`);
|
|
14867
14908
|
traceMeshEventDrop("self_forward_local_rejected", entryTraceCtx, readNonEmptyString2(localResult.error) || "no reason");
|
|
@@ -14870,21 +14911,40 @@ async function retryUnresolvedDelegateForwards(components) {
|
|
|
14870
14911
|
}
|
|
14871
14912
|
continue;
|
|
14872
14913
|
}
|
|
14914
|
+
let pushPayload = entry.payload;
|
|
14915
|
+
if (!readNonEmptyString2(pushPayload.meshId)) {
|
|
14916
|
+
const recoveredMeshId = resolveForwardEventMeshId(components, pushPayload);
|
|
14917
|
+
if (recoveredMeshId) {
|
|
14918
|
+
pushPayload = { ...pushPayload, meshId: recoveredMeshId };
|
|
14919
|
+
traceMeshEventStage("forward_meshid_recovered", entryTraceCtx, `meshId=${recoveredMeshId}`);
|
|
14920
|
+
}
|
|
14921
|
+
}
|
|
14873
14922
|
let result;
|
|
14874
14923
|
try {
|
|
14875
14924
|
traceMeshEventStage("forward_send", entryTraceCtx, `retry \u2192 ${entry.coordinatorDaemonId}`);
|
|
14876
|
-
result = await dispatchMeshCommand(entry.coordinatorDaemonId, "mesh_forward_event",
|
|
14925
|
+
result = await dispatchMeshCommand(entry.coordinatorDaemonId, "mesh_forward_event", pushPayload);
|
|
14877
14926
|
} catch (e) {
|
|
14878
14927
|
LOG.warn("MeshReconcile", `Retry forward to coordinator ${entry.coordinatorDaemonId} failed: ${e?.message || e} \u2014 left queued`);
|
|
14879
14928
|
traceMeshEventDrop("retry_forward_failed", entryTraceCtx, e?.message || String(e));
|
|
14880
14929
|
continue;
|
|
14881
14930
|
}
|
|
14882
14931
|
if (result && result.success === false) {
|
|
14883
|
-
|
|
14884
|
-
|
|
14932
|
+
const rejections = (unresolvedForwardRejectionCounts.get(entry.id) || 0) + 1;
|
|
14933
|
+
unresolvedForwardRejectionCounts.set(entry.id, rejections);
|
|
14934
|
+
const reason = readNonEmptyString2(result.error) || "no reason";
|
|
14935
|
+
if (rejections >= MAX_FORWARD_REJECTIONS) {
|
|
14936
|
+
ackUnresolvedDelegateForward(entry.id);
|
|
14937
|
+
unresolvedForwardRejectionCounts.delete(entry.id);
|
|
14938
|
+
LOG.warn("MeshReconcile", `Retry forward to coordinator ${entry.coordinatorDaemonId} rejected ${rejections}x (${reason}) \u2014 dropping unresolved-delegate ${readNonEmptyString2(entry.payload.event)} (sess=${readNonEmptyString2(entry.payload.targetSessionId) || readNonEmptyString2(entry.payload.sessionId) || "-"}) to stop the retry loop`);
|
|
14939
|
+
traceMeshEventDrop("retry_forward_exhausted", entryTraceCtx, `${reason} (${rejections} rejections)`);
|
|
14940
|
+
} else {
|
|
14941
|
+
LOG.warn("MeshReconcile", `Retry forward to coordinator ${entry.coordinatorDaemonId} rejected (${reason}) \u2014 left queued (attempt ${rejections}/${MAX_FORWARD_REJECTIONS})`);
|
|
14942
|
+
traceMeshEventDrop("retry_forward_rejected", entryTraceCtx, reason);
|
|
14943
|
+
}
|
|
14885
14944
|
continue;
|
|
14886
14945
|
}
|
|
14887
14946
|
ackUnresolvedDelegateForward(entry.id);
|
|
14947
|
+
unresolvedForwardRejectionCounts.delete(entry.id);
|
|
14888
14948
|
LOG.info("MeshReconcile", `Retried+delivered unresolved-delegate ${readNonEmptyString2(entry.payload.event)} to coordinator ${entry.coordinatorDaemonId}`);
|
|
14889
14949
|
}
|
|
14890
14950
|
}
|
|
@@ -15110,7 +15170,7 @@ function setupMeshReconcileLoop(components) {
|
|
|
15110
15170
|
}
|
|
15111
15171
|
};
|
|
15112
15172
|
}
|
|
15113
|
-
var DEFAULT_RECONCILE_INTERVAL_MS, DEFAULT_AUTO_PRUNE_MIN_AGE_MS, heldEventLedgerRecorded, ASSIGNED_STRANDED_DEADLINE_MS, STRICT_SESSION_MATCH_TTL_MS;
|
|
15173
|
+
var DEFAULT_RECONCILE_INTERVAL_MS, DEFAULT_AUTO_PRUNE_MIN_AGE_MS, heldEventLedgerRecorded, ASSIGNED_STRANDED_DEADLINE_MS, STRICT_SESSION_MATCH_TTL_MS, unresolvedForwardRejectionCounts, MAX_FORWARD_REJECTIONS;
|
|
15114
15174
|
var init_mesh_reconcile_loop = __esm({
|
|
15115
15175
|
"src/mesh/mesh-reconcile-loop.ts"() {
|
|
15116
15176
|
"use strict";
|
|
@@ -15135,6 +15195,8 @@ var init_mesh_reconcile_loop = __esm({
|
|
|
15135
15195
|
heldEventLedgerRecorded = /* @__PURE__ */ new Set();
|
|
15136
15196
|
ASSIGNED_STRANDED_DEADLINE_MS = 5 * 6e4;
|
|
15137
15197
|
STRICT_SESSION_MATCH_TTL_MS = 6e4;
|
|
15198
|
+
unresolvedForwardRejectionCounts = /* @__PURE__ */ new Map();
|
|
15199
|
+
MAX_FORWARD_REJECTIONS = 5;
|
|
15138
15200
|
}
|
|
15139
15201
|
});
|
|
15140
15202
|
|
|
@@ -20712,6 +20774,7 @@ __export(index_exports, {
|
|
|
20712
20774
|
MESH_CONVERGE_FAST_FORWARD_TAG: () => MESH_CONVERGE_FAST_FORWARD_TAG,
|
|
20713
20775
|
MESH_CONVERGE_REFINE_TAG: () => MESH_CONVERGE_REFINE_TAG,
|
|
20714
20776
|
MESH_MISSION_STATUSES: () => MESH_MISSION_STATUSES,
|
|
20777
|
+
MESH_NODE_LIVE_TRUTH_MARKER: () => MESH_NODE_LIVE_TRUTH_MARKER,
|
|
20715
20778
|
MESH_REFINE_CONFIG_LOCATIONS: () => MESH_REFINE_CONFIG_LOCATIONS,
|
|
20716
20779
|
MESH_REFINE_CONFIG_SCHEMA: () => MESH_REFINE_CONFIG_SCHEMA,
|
|
20717
20780
|
MESH_SCHEDULING_STRATEGIES: () => MESH_SCHEDULING_STRATEGIES,
|
|
@@ -20758,6 +20821,7 @@ __export(index_exports, {
|
|
|
20758
20821
|
buildMeshLedgerReconciliationEvidence: () => buildMeshLedgerReconciliationEvidence,
|
|
20759
20822
|
buildMeshLedgerReplicaEvidence: () => buildMeshLedgerReplicaEvidence,
|
|
20760
20823
|
buildMeshNodeCapabilityTags: () => buildMeshNodeCapabilityTags,
|
|
20824
|
+
buildMeshNodeDataFreshness: () => buildMeshNodeDataFreshness,
|
|
20761
20825
|
buildMissionPromptSection: () => buildMissionPromptSection,
|
|
20762
20826
|
buildP2pRelayFailurePayload: () => buildP2pRelayFailurePayload,
|
|
20763
20827
|
buildPinnedGlobalInstallCommand: () => buildPinnedGlobalInstallCommand,
|
|
@@ -42089,7 +42153,7 @@ Run 'adhdev doctor' for detailed diagnostics.`
|
|
|
42089
42153
|
const adapter = this.adapters.get(ik);
|
|
42090
42154
|
if (adapter) return { adapter, key: ik };
|
|
42091
42155
|
}
|
|
42092
|
-
if (opts?.dir) {
|
|
42156
|
+
if (opts?.dir && !opts?.instanceKey) {
|
|
42093
42157
|
for (const [k, a] of this.adapters) {
|
|
42094
42158
|
if (a.cliType === agentType && a.workingDir === opts.dir) {
|
|
42095
42159
|
return { adapter: a, key: k };
|
|
@@ -47696,6 +47760,52 @@ var fastForwardHandlers = {
|
|
|
47696
47760
|
}
|
|
47697
47761
|
};
|
|
47698
47762
|
|
|
47763
|
+
// src/commands/med-family/mesh-restart.ts
|
|
47764
|
+
init_dist();
|
|
47765
|
+
var RESTART_BLOCKING_STATES = /* @__PURE__ */ new Set(["generating", "waiting_approval", "starting"]);
|
|
47766
|
+
function hasBlockingSessions(ctx) {
|
|
47767
|
+
const states = ctx.deps.instanceManager.collectAllStates();
|
|
47768
|
+
for (const state of states) {
|
|
47769
|
+
if (RESTART_BLOCKING_STATES.has(String(state.status || ""))) return true;
|
|
47770
|
+
const childStates = "extensions" in state && Array.isArray(state.extensions) ? state.extensions : [];
|
|
47771
|
+
for (const child of childStates) {
|
|
47772
|
+
if (RESTART_BLOCKING_STATES.has(String(child?.status || ""))) return true;
|
|
47773
|
+
}
|
|
47774
|
+
}
|
|
47775
|
+
return false;
|
|
47776
|
+
}
|
|
47777
|
+
var meshRestartHandlers = {
|
|
47778
|
+
restart_daemon_node: async (ctx, args) => {
|
|
47779
|
+
const meshId = typeof args?.meshId === "string" ? args.meshId.trim() : "";
|
|
47780
|
+
const nodeId = typeof args?.nodeId === "string" ? args.nodeId.trim() : "";
|
|
47781
|
+
let nodeDaemonId;
|
|
47782
|
+
if (meshId && nodeId) {
|
|
47783
|
+
const meshRecord = await ctx.getMeshForCommand(meshId, args?.inlineMesh, { preferInline: true });
|
|
47784
|
+
const node = meshRecord?.mesh?.nodes?.find((n) => meshNodeIdMatches(n, nodeId));
|
|
47785
|
+
nodeDaemonId = typeof node?.daemonId === "string" ? node.daemonId.trim() : void 0;
|
|
47786
|
+
}
|
|
47787
|
+
const selfDaemonId = ctx.deps.statusInstanceId;
|
|
47788
|
+
const isRemote = nodeDaemonId && selfDaemonId && !daemonIdsEquivalent(nodeDaemonId, selfDaemonId);
|
|
47789
|
+
if (isRemote && ctx.deps.dispatchMeshCommand && !args?._meshDirectDispatch) {
|
|
47790
|
+
const forwarded = await ctx.deps.dispatchMeshCommand(nodeDaemonId, "restart_daemon_node", {
|
|
47791
|
+
...typeof args === "object" && args !== null ? args : {},
|
|
47792
|
+
_meshDirectDispatch: true
|
|
47793
|
+
});
|
|
47794
|
+
return forwarded ?? { success: false, error: "no response from remote node" };
|
|
47795
|
+
}
|
|
47796
|
+
if (hasBlockingSessions(ctx)) {
|
|
47797
|
+
return {
|
|
47798
|
+
success: false,
|
|
47799
|
+
restarted: false,
|
|
47800
|
+
code: "blocking_sessions",
|
|
47801
|
+
reason: "Daemon has an active session (generating / waiting_approval / starting); restart refused to avoid interrupting in-flight work. Retry when the node is idle."
|
|
47802
|
+
};
|
|
47803
|
+
}
|
|
47804
|
+
const result = await daemonLifecycleHandlers.daemon_upgrade({ deps: ctx.deps }, args);
|
|
47805
|
+
return { ...result, restarted: result?.restarting === true };
|
|
47806
|
+
}
|
|
47807
|
+
};
|
|
47808
|
+
|
|
47699
47809
|
// src/commands/med-family/index.ts
|
|
47700
47810
|
var medFamilyRegistry = new Map(
|
|
47701
47811
|
Object.entries({
|
|
@@ -47704,7 +47814,8 @@ var medFamilyRegistry = new Map(
|
|
|
47704
47814
|
...meshCrudHandlers,
|
|
47705
47815
|
...meshHostPairingHandlers,
|
|
47706
47816
|
...meshQueueHandlers,
|
|
47707
|
-
...fastForwardHandlers
|
|
47817
|
+
...fastForwardHandlers,
|
|
47818
|
+
...meshRestartHandlers
|
|
47708
47819
|
})
|
|
47709
47820
|
);
|
|
47710
47821
|
|
|
@@ -61910,6 +62021,7 @@ var V1_CONTRACT_VERSION = "1.0.0";
|
|
|
61910
62021
|
MESH_CONVERGE_FAST_FORWARD_TAG,
|
|
61911
62022
|
MESH_CONVERGE_REFINE_TAG,
|
|
61912
62023
|
MESH_MISSION_STATUSES,
|
|
62024
|
+
MESH_NODE_LIVE_TRUTH_MARKER,
|
|
61913
62025
|
MESH_REFINE_CONFIG_LOCATIONS,
|
|
61914
62026
|
MESH_REFINE_CONFIG_SCHEMA,
|
|
61915
62027
|
MESH_SCHEDULING_STRATEGIES,
|
|
@@ -61956,6 +62068,7 @@ var V1_CONTRACT_VERSION = "1.0.0";
|
|
|
61956
62068
|
buildMeshLedgerReconciliationEvidence,
|
|
61957
62069
|
buildMeshLedgerReplicaEvidence,
|
|
61958
62070
|
buildMeshNodeCapabilityTags,
|
|
62071
|
+
buildMeshNodeDataFreshness,
|
|
61959
62072
|
buildMissionPromptSection,
|
|
61960
62073
|
buildP2pRelayFailurePayload,
|
|
61961
62074
|
buildPinnedGlobalInstallCommand,
|