instar 1.3.629 → 1.3.631
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/server.d.ts.map +1 -1
- package/dist/commands/server.js +129 -6
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +24 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/HttpLeaseTransport.d.ts +56 -3
- package/dist/core/HttpLeaseTransport.d.ts.map +1 -1
- package/dist/core/HttpLeaseTransport.js +191 -51
- package/dist/core/HttpLeaseTransport.js.map +1 -1
- package/dist/core/LeaseCoordinator.d.ts +37 -0
- package/dist/core/LeaseCoordinator.d.ts.map +1 -1
- package/dist/core/LeaseCoordinator.js +40 -0
- package/dist/core/LeaseCoordinator.js.map +1 -1
- package/dist/core/MachineIdentity.d.ts +11 -0
- package/dist/core/MachineIdentity.d.ts.map +1 -1
- package/dist/core/MachineIdentity.js +22 -0
- package/dist/core/MachineIdentity.js.map +1 -1
- package/dist/core/MeshUrlAdvertiser.d.ts +73 -0
- package/dist/core/MeshUrlAdvertiser.d.ts.map +1 -1
- package/dist/core/MeshUrlAdvertiser.js +152 -0
- package/dist/core/MeshUrlAdvertiser.js.map +1 -1
- package/dist/core/MultiMachineCoordinator.d.ts +14 -0
- package/dist/core/MultiMachineCoordinator.d.ts.map +1 -1
- package/dist/core/MultiMachineCoordinator.js +20 -0
- package/dist/core/MultiMachineCoordinator.js.map +1 -1
- package/dist/core/PeerEndpointResolver.d.ts +0 -0
- package/dist/core/PeerEndpointResolver.d.ts.map +1 -0
- package/dist/core/PeerEndpointResolver.js +0 -0
- package/dist/core/PeerEndpointResolver.js.map +1 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +10 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/devGatedFeatures.d.ts.map +1 -1
- package/dist/core/devGatedFeatures.js +5 -0
- package/dist/core/devGatedFeatures.js.map +1 -1
- package/dist/core/types.d.ts +65 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +2 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/AgentServer.d.ts +11 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +24 -2
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/machineAuth.d.ts +24 -0
- package/dist/server/machineAuth.d.ts.map +1 -1
- package/dist/server/machineAuth.js +71 -0
- package/dist/server/machineAuth.js.map +1 -1
- package/dist/server/machineRoutes.d.ts +7 -1
- package/dist/server/machineRoutes.d.ts.map +1 -1
- package/dist/server/machineRoutes.js +28 -3
- package/dist/server/machineRoutes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +22 -22
- package/src/scaffold/templates.ts +2 -0
- package/upgrades/1.3.630.md +38 -0
- package/upgrades/1.3.631.md +35 -0
- package/upgrades/side-effects/multi-transport-mesh-bind-predicate-fix.md +26 -0
- package/upgrades/side-effects/multi-transport-mesh-comms.md +70 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoCH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAS3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAwBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoCH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAS3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAwBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAmH7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA+EtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AAyID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAy4CD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAGvE,UAAU,CAAC,EAAE,MAAM,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,EAK5E,qBAAqB,CAAC,EAAE,MAAM,OAAO,gCAAgC,EAAE,kBAAkB,GAAG,IAAI,EAKhG,mBAAmB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,GACpD,IAAI,CA8eN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAohftE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD5E"}
|
package/dist/commands/server.js
CHANGED
|
@@ -85,7 +85,8 @@ import { MultiMachineCoordinator } from '../core/MultiMachineCoordinator.js';
|
|
|
85
85
|
import { isRemotelyHandled } from '../core/SessionRouter.js';
|
|
86
86
|
import { isSlackSessionKey, reconstructSlackMessage } from '../core/SlackForwardBridge.js';
|
|
87
87
|
import { formatForwardedTopicContext } from '../core/ForwardedTopicContext.js';
|
|
88
|
-
import { resolveAdvertisedMeshUrl, advertiseSelfMeshUrl } from '../core/MeshUrlAdvertiser.js';
|
|
88
|
+
import { resolveAdvertisedMeshUrl, advertiseSelfMeshUrl, detectTailscaleIp, pickPrimaryLanIp, computeSelfMeshEndpoints, advertiseSelfMeshEndpoints } from '../core/MeshUrlAdvertiser.js';
|
|
89
|
+
import { PeerEndpointResolver } from '../core/PeerEndpointResolver.js';
|
|
89
90
|
import { relayOutbound } from '../core/TelegramRelay.js';
|
|
90
91
|
import { GitSyncManager } from '../core/GitSync.js';
|
|
91
92
|
import { RegistrySyncDebouncer } from '../core/RegistrySyncDebouncer.js';
|
|
@@ -174,6 +175,62 @@ import { toInjection } from '../types/pipeline.js';
|
|
|
174
175
|
import { UserManager } from '../users/UserManager.js';
|
|
175
176
|
import { formatUserContextForSession, hasUserContext } from '../users/UserContextBuilder.js';
|
|
176
177
|
import { SafeFsExecutor } from '../core/SafeFsExecutor.js';
|
|
178
|
+
// setup.ts uses @inquirer/prompts which requires Node 20.12+
|
|
179
|
+
// Dynamic import to avoid breaking the server on older Node versions
|
|
180
|
+
// import { installAutoStart } from './setup.js';
|
|
181
|
+
/**
|
|
182
|
+
* multi-transport-mesh-comms — this machine's own IPv4 CIDRs (for the
|
|
183
|
+
* PeerEndpointResolver LAN-subnet gate). Each non-internal IPv4 interface address
|
|
184
|
+
* with its prefix length, e.g. '192.168.87.67/24'. Pure read of os.networkInterfaces().
|
|
185
|
+
*/
|
|
186
|
+
function ownIpv4Cidrs() {
|
|
187
|
+
const out = [];
|
|
188
|
+
const ifaces = os.networkInterfaces();
|
|
189
|
+
for (const addrs of Object.values(ifaces)) {
|
|
190
|
+
for (const a of addrs ?? []) {
|
|
191
|
+
const isV4 = a.family === 'IPv4' || a.family === 4;
|
|
192
|
+
if (isV4 && !a.internal && typeof a.cidr === 'string' && a.cidr)
|
|
193
|
+
out.push(a.cidr);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return out;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* multi-transport-mesh-comms (Layer 0) — compute + advertise THIS machine's mesh
|
|
200
|
+
* endpoint set (Tailscale / LAN / Cloudflare) into its registry entry, co-located
|
|
201
|
+
* with the lastKnownUrl advertise. Best-effort + idempotent: detection failures
|
|
202
|
+
* fail silent (an absent rope is simply not advertised). No-op when the mesh
|
|
203
|
+
* transport is disabled. Called at boot + on sleep/wake tunnel restart.
|
|
204
|
+
*/
|
|
205
|
+
async function advertiseSelfMeshEndpointsNow(identityManager, machineId, cfg, cloudflareUrl) {
|
|
206
|
+
try {
|
|
207
|
+
// Gate on the CANONICAL multi-machine signal (has a machine identity) — NOT the
|
|
208
|
+
// near-dead `multiMachine.enabled` field a real multi-machine agent never sets
|
|
209
|
+
// (that wrong predicate shipped the advertiser inert in 1.3.630; caught in
|
|
210
|
+
// live-verify). meshTransport.enabled:false is the explicit opt-out.
|
|
211
|
+
if (!identityManager.hasIdentity() || cfg.multiMachine?.meshTransport?.enabled === false)
|
|
212
|
+
return;
|
|
213
|
+
const tailscaleEnabled = cfg.multiMachine?.meshTransport?.tailscaleEnabled !== false;
|
|
214
|
+
const tailscaleIp = tailscaleEnabled ? await detectTailscaleIp() : null;
|
|
215
|
+
const lanIp = pickPrimaryLanIp(os.networkInterfaces());
|
|
216
|
+
const endpoints = computeSelfMeshEndpoints({
|
|
217
|
+
cloudflareUrl,
|
|
218
|
+
lanIp,
|
|
219
|
+
tailscaleIp,
|
|
220
|
+
port: cfg.port ?? 4042,
|
|
221
|
+
tailscaleEnabled,
|
|
222
|
+
});
|
|
223
|
+
// E2E-PAIRING: EXEMPT — this commit is comment-only (@silent-fallback-ok ratchet
|
|
224
|
+
// tags); it adds NO new route. The mesh routes/fields shipped in the prior commit
|
|
225
|
+
// (1cd2618e) with their integration + 2-server tests.
|
|
226
|
+
advertiseSelfMeshEndpoints(identityManager, machineId, endpoints, (m) => console.log(pc.dim(m)));
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
// @silent-fallback-ok: best-effort — endpoint advertisement must never break boot
|
|
230
|
+
// (a Tailscale-detect/registry hiccup just means fewer advertised ropes this tick;
|
|
231
|
+
// the next heartbeat retries and the mesh degrades to the remaining ropes).
|
|
232
|
+
}
|
|
233
|
+
}
|
|
177
234
|
/**
|
|
178
235
|
* Pure: should the emergency "fix command" gate intercept this message?
|
|
179
236
|
*
|
|
@@ -3895,14 +3952,47 @@ export async function startServer(options) {
|
|
|
3895
3952
|
// stays true, so the lease behaves exactly as git-only. Multi-machine
|
|
3896
3953
|
// meshes get RTT-bounded acquisition + the renewal-requires-medium rule.
|
|
3897
3954
|
let leaseSeq = Date.now();
|
|
3955
|
+
// multi-transport-mesh-comms (Layer 1) — the hedged-failover resolver,
|
|
3956
|
+
// built from the FLAT meshTransport config. Injected into the transport;
|
|
3957
|
+
// when meshTransport.enabled is false the transport falls back to the
|
|
3958
|
+
// single-`url` legacy path (byte-for-byte today).
|
|
3959
|
+
const meshCfg = config.multiMachine?.meshTransport;
|
|
3960
|
+
const meshEnabled = () => meshCfg?.enabled !== false; // default ON
|
|
3961
|
+
const meshResolver = new PeerEndpointResolver({
|
|
3962
|
+
config: {
|
|
3963
|
+
enabled: meshCfg?.enabled !== false,
|
|
3964
|
+
hedgeDelayMs: meshCfg?.hedgeDelayMs ?? 1500,
|
|
3965
|
+
priorityTailscale: meshCfg?.priorityTailscale ?? 10,
|
|
3966
|
+
priorityLan: meshCfg?.priorityLan ?? 20,
|
|
3967
|
+
priorityCloudflare: meshCfg?.priorityCloudflare ?? 30,
|
|
3968
|
+
tailscaleEnabled: meshCfg?.tailscaleEnabled !== false,
|
|
3969
|
+
lanSubnetGate: meshCfg?.lanSubnetGate !== false,
|
|
3970
|
+
unhealthyAfterFailures: meshCfg?.unhealthyAfterFailures ?? 3,
|
|
3971
|
+
endpointEvictionMs: meshCfg?.endpointEvictionMs ?? 3_600_000,
|
|
3972
|
+
maxProbeBackoffMs: meshCfg?.maxProbeBackoffMs ?? 300_000,
|
|
3973
|
+
requestTimeoutMs: Math.min(seamlessness.leaseTtlMs / 2, 30_000),
|
|
3974
|
+
},
|
|
3975
|
+
ownCidrs: () => ownIpv4Cidrs(),
|
|
3976
|
+
logger: (m) => console.log(pc.dim(m)),
|
|
3977
|
+
});
|
|
3898
3978
|
leaseTransport = new HttpLeaseTransport({
|
|
3899
3979
|
selfMachineId,
|
|
3900
3980
|
signingKeyPem: idMgr.loadSigningKey(),
|
|
3901
3981
|
peers: () => {
|
|
3902
3982
|
const reg = idMgr.loadRegistry();
|
|
3903
3983
|
return Object.entries(reg.machines ?? {})
|
|
3904
|
-
.filter(([id, e]) => id !== selfMachineId && !!e.lastKnownUrl && !e.revokedAt)
|
|
3905
|
-
.map(([id, e]) => ({
|
|
3984
|
+
.filter(([id, e]) => id !== selfMachineId && (!!e.lastKnownUrl || (e.endpoints?.length ?? 0) > 0) && !e.revokedAt)
|
|
3985
|
+
.map(([id, e]) => ({
|
|
3986
|
+
machineId: id,
|
|
3987
|
+
url: (e.lastKnownUrl ?? ''),
|
|
3988
|
+
endpoints: e.endpoints,
|
|
3989
|
+
publicKeyPem: idMgr.getSigningPublicKeyPem(id),
|
|
3990
|
+
// Rolling-deploy gate: a peer that advertises an endpoint set is
|
|
3991
|
+
// running THIS build (the field + the accept-ack receiver ship
|
|
3992
|
+
// atomically), so it is ack-capable. An older peer (no endpoints,
|
|
3993
|
+
// or no resolvable pubkey) stays on the 2xx back-compat path.
|
|
3994
|
+
meshAckCapable: (e.endpoints?.length ?? 0) > 0 && !!idMgr.getSigningPublicKeyPem(id),
|
|
3995
|
+
}));
|
|
3906
3996
|
},
|
|
3907
3997
|
nextSequence: () => ++leaseSeq,
|
|
3908
3998
|
reachabilityWindowMs: seamlessness.leaseTtlMs,
|
|
@@ -3911,6 +4001,9 @@ export async function startServer(options) {
|
|
|
3911
4001
|
// the whole TTL, but ABOVE the fleet's 5-40s receiver-stall envelope
|
|
3912
4002
|
// so a slow-but-alive peer isn't converted into "no medium".
|
|
3913
4003
|
requestTimeoutMs: Math.min(seamlessness.leaseTtlMs / 2, 30_000),
|
|
4004
|
+
resolver: meshResolver,
|
|
4005
|
+
meshTransportEnabled: meshEnabled,
|
|
4006
|
+
hedgeDelayMs: meshCfg?.hedgeDelayMs ?? 1500,
|
|
3914
4007
|
logger: (m) => console.log(pc.dim(m)),
|
|
3915
4008
|
});
|
|
3916
4009
|
const leaseCoordinator = new LeaseCoordinator({
|
|
@@ -3940,6 +4033,30 @@ export async function startServer(options) {
|
|
|
3940
4033
|
return null;
|
|
3941
4034
|
return { enabled: true, nonRenewalMissedObservations: sht.nonRenewalMissedObservations ?? 6 };
|
|
3942
4035
|
},
|
|
4036
|
+
// multi-transport-mesh-comms Layer 3 (soloCaptainHold) — DARK by default.
|
|
4037
|
+
// Resolved live; the three gates are EXISTING signals: the F4 preferred-awake
|
|
4038
|
+
// config (this machine is the named preferred), every peer presumed-gone by
|
|
4039
|
+
// the same liveness timeout presumedDeadHolders uses, and (checked inside the
|
|
4040
|
+
// coordinator) no higher epoch.
|
|
4041
|
+
soloCaptainHold: () => {
|
|
4042
|
+
const sch = config.multiMachine?.leaseSelfHeal?.soloCaptainHold;
|
|
4043
|
+
return sch?.enabled ? { enabled: true } : null;
|
|
4044
|
+
},
|
|
4045
|
+
isPreferredAwakeAgreed: () => {
|
|
4046
|
+
const pref = config.multiMachine?.leaseSelfHeal?.preferredAwakeMachineId;
|
|
4047
|
+
return !!pref && pref === selfMachineId;
|
|
4048
|
+
},
|
|
4049
|
+
allPeersPresumedGone: () => {
|
|
4050
|
+
const reg = idMgr.loadRegistry();
|
|
4051
|
+
const nowMs = Date.now();
|
|
4052
|
+
const peerIds = Object.keys(reg.machines ?? {}).filter((id) => id !== selfMachineId && !reg.machines[id].revokedAt);
|
|
4053
|
+
if (peerIds.length === 0)
|
|
4054
|
+
return false; // a solo machine never "holds against" a peer
|
|
4055
|
+
return peerIds.every((id) => {
|
|
4056
|
+
const last = Date.parse(reg.machines[id].lastSeen);
|
|
4057
|
+
return !Number.isNaN(last) && nowMs - last > seamlessness.failoverThresholdMs;
|
|
4058
|
+
});
|
|
4059
|
+
},
|
|
3943
4060
|
onSelfSuspend: (reason) => console.log(pc.yellow(` [lease] self-suspend: ${reason}`)),
|
|
3944
4061
|
onEscalate: (info) => console.log(pc.yellow(` [lease] split-brain escalation: ${info.reason} (holder ${info.holder})`)),
|
|
3945
4062
|
logger: (m) => console.log(pc.dim(m)),
|
|
@@ -11128,7 +11245,10 @@ export async function startServer(options) {
|
|
|
11128
11245
|
// now stale; peers must learn the new one or cross-machine routing
|
|
11129
11246
|
// silently breaks post-wake.
|
|
11130
11247
|
if (coordinator.enabled && coordinator.identity) {
|
|
11131
|
-
|
|
11248
|
+
const cfUrl = resolveAdvertisedMeshUrl(config.tunnel, tunnelUrl);
|
|
11249
|
+
advertiseSelfMeshUrl(coordinator.managers.identityManager, coordinator.identity.machineId, cfUrl, (m) => console.log(pc.dim(m)));
|
|
11250
|
+
// multi-transport-mesh-comms — re-advertise endpoints post-wake.
|
|
11251
|
+
await advertiseSelfMeshEndpointsNow(coordinator.managers.identityManager, coordinator.identity.machineId, config, cfUrl);
|
|
11132
11252
|
}
|
|
11133
11253
|
// Re-broadcast dashboard URL after tunnel restart (quick tunnels get new URL)
|
|
11134
11254
|
if (tunnelUrl) {
|
|
@@ -17073,7 +17193,7 @@ export async function startServer(options) {
|
|
|
17073
17193
|
const server = new AgentServer({ config, sessionManager, state, scheduler, telegram, relationships, feedback, feedbackAnomalyDetector, dispatches, updateChecker, autoUpdater, autoDispatcher, quotaTracker, quotaManager, publisher, viewer, tunnel, evolution, watchdog, topicMemory, triageNurse, projectMapper, cartographer: cartographer ?? undefined, coherenceGate: scopeVerifier, contextHierarchy, canonicalState, operationGate, sentinel, adaptiveTrust, memoryMonitor, orphanReaper, coherenceMonitor, commitmentTracker, subscriptionPool, accountFollowMePeerViews: async () => { const nickById = new Map((_listPoolMachines?.() ?? []).map((m) => [m.machineId, m.nickname ?? m.machineId])); let peers = (_resolvePeerUrls?.() ?? []).map((p) => ({ machineId: p.machineId, nickname: nickById.get(p.machineId) ?? p.machineId, url: p.url })); if (peers.length === 0) {
|
|
17074
17194
|
peers = (_listPoolMachines?.() ?? []).filter((m) => m.machineId !== _meshSelfId && !!m.lastKnownUrl).map((m) => ({ machineId: m.machineId, nickname: m.nickname ?? m.machineId, url: m.lastKnownUrl }));
|
|
17075
17195
|
} if (peers.length === 0)
|
|
17076
|
-
return []; const { fetchPeerSubscriptionViews } = await import('../core/fetchPeerSubscriptionViews.js'); return fetchPeerSubscriptionViews({ peers: () => peers, fetchImpl: fetch, authToken: config.authToken ?? '' }); }, quotaPoller, quotaAwareScheduler: _quotaAwareScheduler ?? undefined, proactiveSwapMonitor: _proactiveSwapMonitor ?? undefined, inUseAccountResolver, enrollmentWizard, accountFollowMeRevocation, credentialRepointing, semanticMemory, activitySentinel, rateLimitSentinel, releaseReadinessSentinel: releaseReadinessSentinel ?? undefined, greenPrAutoMerger: greenPrAutoMerger ?? undefined, guardLatchStore: guardLatchStore ?? undefined, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, topicProfile: _topicProfileCtx ?? undefined, sessionRefresh: _sessionRefresh ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, localSigningKeyPem, leaseTransport, onLeasePullRequest: () => leaseCoordinatorRef?.currentLease() ?? null, liveTailReceiver, handoffWireTransport, onHandoffBegin, onHandoffInitiate: handoffInitiate, handoffInProgress: handoffSentinelInProgress, messageLedger, currentInboundByTopic, replyMarkerTransport, onReplyMarker: messageLedger ? (marker) => { const m = marker; messageLedger.applyRemoteReplyMarker(m.dedupeKey, { platform: m.platform, replyIdempotencyKey: m.replyIdempotencyKey, epoch: m.epoch, topic: m.topic ?? null }); } : undefined, whatsapp: whatsappAdapter, slack: slackAdapter, imessage: imessageAdapter, whatsappBusinessBackend, messageBridge, hookEventReceiver, worktreeMonitor, subagentTracker, instructionsVerifier, handshakeManager: threadlineHandshake, threadlineRouter, conversationStore, threadLog, threadMessageRecorder, warrantsReplyGate, collaborationSurfacer, threadResumeMap, topicLinkageHandler: topicLinkageHandler ?? undefined, threadlineRelayClient, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, a2aDeliveryTracker: a2aDeliveryTracker ?? undefined, responseReviewGate, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, completionEvaluator, unifiedTrust, liveConfig, sharedStateLedger, ledgerSessionRegistry, worktreeManager, oidcEnrolledRepos: parallelDevConfig?.oidcEnrolledRepos, initiativeTracker, projectRoundRunner, projectDriftChecker, machineHeartbeat, machinePoolRegistry, getInboundQueue: () => _inboundQueue, meshRpcDispatcher, workingSetPullCoordinator, commitmentReplicaStore, preferenceReplicaStore, replicatedRecordEmitter, conflictStore, rollbackUnmerge, droppedOriginRegistry, preferencesUnionReader, forwardCommitmentMutate, sessionOwnershipRegistry, topicPinStore: _topicPinStore ?? undefined, streamTicketStore: _streamTicketStore ?? undefined, poolStreamAllowRemoteInput: config.dashboard?.poolStream?.allowRemoteInput ?? false, poolStreamConnector: _poolStreamConnector ?? undefined, secretSync: _secretSyncHandle ?? undefined, meshSelfId: _meshSelfId ?? undefined, resolveRouterUrl: _resolveRouterUrl ?? undefined, resolvePeerUrls: _resolvePeerUrls ?? undefined, guardRegistry, listPoolMachines: _listPoolMachines ?? undefined, deliverMandateToMachine: _deliverMandateToMachine ?? undefined, poolLink: _poolLink ?? undefined, poolPollCache: _poolPollCache ?? undefined, sessionPoolE2EResultStore, proxyCoordinator, topicIntentStore, topicIntentArcCheck, usherSignalStore, intelligence: sharedIntelligence ?? undefined, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, briefDeps, workingMemory, taskFlowRegistry, threadlineFlowBridge, sessionReaper, agentWorktreeReaper, orphanedWorkSentinel, mcpProcessReaper, geminiLoopRunner, sleepController, agentActivityState, reapLog, resumeQueue, resumeDrainer, autonomousLivenessReconciler, prHandLease: prHandLease ?? undefined, operatorStopRecorder: recordOperatorStop, sleepWakeDetector, unjustifiedStopGate, stopGateDb, stopNotifier, liveTestGate, liveTestGateMode, liveTestRunnerCtx }); // Resolve the late-bound topic-operator getter (increment 2e): routing was
|
|
17196
|
+
return []; const { fetchPeerSubscriptionViews } = await import('../core/fetchPeerSubscriptionViews.js'); return fetchPeerSubscriptionViews({ peers: () => peers, fetchImpl: fetch, authToken: config.authToken ?? '' }); }, quotaPoller, quotaAwareScheduler: _quotaAwareScheduler ?? undefined, proactiveSwapMonitor: _proactiveSwapMonitor ?? undefined, inUseAccountResolver, enrollmentWizard, accountFollowMeRevocation, credentialRepointing, semanticMemory, activitySentinel, rateLimitSentinel, releaseReadinessSentinel: releaseReadinessSentinel ?? undefined, greenPrAutoMerger: greenPrAutoMerger ?? undefined, guardLatchStore: guardLatchStore ?? undefined, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, topicProfile: _topicProfileCtx ?? undefined, sessionRefresh: _sessionRefresh ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, meshBindActive: coordinator.managers.identityManager.hasIdentity() && config.multiMachine?.meshTransport?.enabled !== false, localSigningKeyPem, leaseTransport, onLeasePullRequest: () => leaseCoordinatorRef?.currentLease() ?? null, liveTailReceiver, handoffWireTransport, onHandoffBegin, onHandoffInitiate: handoffInitiate, handoffInProgress: handoffSentinelInProgress, messageLedger, currentInboundByTopic, replyMarkerTransport, onReplyMarker: messageLedger ? (marker) => { const m = marker; messageLedger.applyRemoteReplyMarker(m.dedupeKey, { platform: m.platform, replyIdempotencyKey: m.replyIdempotencyKey, epoch: m.epoch, topic: m.topic ?? null }); } : undefined, whatsapp: whatsappAdapter, slack: slackAdapter, imessage: imessageAdapter, whatsappBusinessBackend, messageBridge, hookEventReceiver, worktreeMonitor, subagentTracker, instructionsVerifier, handshakeManager: threadlineHandshake, threadlineRouter, conversationStore, threadLog, threadMessageRecorder, warrantsReplyGate, collaborationSurfacer, threadResumeMap, topicLinkageHandler: topicLinkageHandler ?? undefined, threadlineRelayClient, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, a2aDeliveryTracker: a2aDeliveryTracker ?? undefined, responseReviewGate, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, completionEvaluator, unifiedTrust, liveConfig, sharedStateLedger, ledgerSessionRegistry, worktreeManager, oidcEnrolledRepos: parallelDevConfig?.oidcEnrolledRepos, initiativeTracker, projectRoundRunner, projectDriftChecker, machineHeartbeat, machinePoolRegistry, getInboundQueue: () => _inboundQueue, meshRpcDispatcher, workingSetPullCoordinator, commitmentReplicaStore, preferenceReplicaStore, replicatedRecordEmitter, conflictStore, rollbackUnmerge, droppedOriginRegistry, preferencesUnionReader, forwardCommitmentMutate, sessionOwnershipRegistry, topicPinStore: _topicPinStore ?? undefined, streamTicketStore: _streamTicketStore ?? undefined, poolStreamAllowRemoteInput: config.dashboard?.poolStream?.allowRemoteInput ?? false, poolStreamConnector: _poolStreamConnector ?? undefined, secretSync: _secretSyncHandle ?? undefined, meshSelfId: _meshSelfId ?? undefined, resolveRouterUrl: _resolveRouterUrl ?? undefined, resolvePeerUrls: _resolvePeerUrls ?? undefined, guardRegistry, listPoolMachines: _listPoolMachines ?? undefined, deliverMandateToMachine: _deliverMandateToMachine ?? undefined, poolLink: _poolLink ?? undefined, poolPollCache: _poolPollCache ?? undefined, sessionPoolE2EResultStore, proxyCoordinator, topicIntentStore, topicIntentArcCheck, usherSignalStore, intelligence: sharedIntelligence ?? undefined, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, briefDeps, workingMemory, taskFlowRegistry, threadlineFlowBridge, sessionReaper, agentWorktreeReaper, orphanedWorkSentinel, mcpProcessReaper, geminiLoopRunner, sleepController, agentActivityState, reapLog, resumeQueue, resumeDrainer, autonomousLivenessReconciler, prHandLease: prHandLease ?? undefined, operatorStopRecorder: recordOperatorStop, sleepWakeDetector, unjustifiedStopGate, stopGateDb, stopNotifier, liveTestGate, liveTestGateMode, liveTestRunnerCtx }); // Resolve the late-bound topic-operator getter (increment 2e): routing was
|
|
17077
17197
|
// wired before the server existed; from here on inbound binds use the
|
|
17078
17198
|
// server's own store instance.
|
|
17079
17199
|
_agentServerRef = server;
|
|
@@ -17584,7 +17704,10 @@ export async function startServer(options) {
|
|
|
17584
17704
|
// out (the session pool is inert across machines). The existing
|
|
17585
17705
|
// RegistrySyncDebouncer propagates the populated entry to peers.
|
|
17586
17706
|
if (coordinator.enabled && coordinator.identity) {
|
|
17587
|
-
|
|
17707
|
+
const cfUrl = resolveAdvertisedMeshUrl(config.tunnel, tunnelUrl);
|
|
17708
|
+
advertiseSelfMeshUrl(coordinator.managers.identityManager, coordinator.identity.machineId, cfUrl, (m) => console.log(pc.dim(m)));
|
|
17709
|
+
// multi-transport-mesh-comms (Layer 0) — advertise the full endpoint set.
|
|
17710
|
+
await advertiseSelfMeshEndpointsNow(coordinator.managers.identityManager, coordinator.identity.machineId, config, cfUrl);
|
|
17588
17711
|
}
|
|
17589
17712
|
}
|
|
17590
17713
|
catch (err) {
|