instar 1.3.1118 → 1.3.1119
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 +20 -11
- package/dist/commands/server.js.map +1 -1
- package/dist/core/SessionManager.d.ts +35 -26
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +196 -53
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/StateManager.d.ts +7 -0
- package/dist/core/StateManager.d.ts.map +1 -1
- package/dist/core/StateManager.js +13 -1
- package/dist/core/StateManager.js.map +1 -1
- package/dist/data/standards-guard-index.json +1 -1
- package/dist/data/standards-guard-index.meta.json +2 -2
- package/dist/data/standards-registry.meta.json +1 -1
- package/dist/monitoring/ReapLog.d.ts +3 -0
- package/dist/monitoring/ReapLog.d.ts.map +1 -1
- package/dist/monitoring/ReapLog.js +12 -1
- package/dist/monitoring/ReapLog.js.map +1 -1
- package/dist/monitoring/SessionReaper.d.ts +4 -37
- package/dist/monitoring/SessionReaper.d.ts.map +1 -1
- package/dist/monitoring/SessionReaper.js +61 -65
- package/dist/monitoring/SessionReaper.js.map +1 -1
- package/dist/server/AgentServer.d.ts +2 -1
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +1 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts +5 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +11 -11
- package/dist/server/routes.js.map +1 -1
- package/dist/testing/selfActionRegistry.js +1 -1
- package/dist/testing/selfActionRegistry.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +48 -48
- package/src/data/standards-guard-index.json +1 -1
- package/src/data/standards-guard-index.meta.json +2 -2
- package/src/data/standards-registry.meta.json +1 -1
- package/upgrades/1.3.1119.md +41 -0
- package/upgrades/session-reaper-local-age-owner.eli16.md +50 -0
- package/upgrades/side-effects/session-reaper-local-age-owner.md +249 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA8EH,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA8EH,OAAO,EAAE,cAAc,EAAkC,MAAM,2BAA2B,CAAC;AAU3F,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AA0BjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AA+H7D,OAAO,KAAK,EAAW,oBAAoB,EAAe,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAgFtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AAuID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA+rDD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,oBAAoB,GAAG,IAAI,GACxC;IACD,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAqBA;AAED,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,EAQrD,oBAAoB,CAAC,EAAE,MAAM;IAC3B,YAAY,EAAE,OAAO,kBAAkB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,GACP,IAAI,CAwtBN;AAgmBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAk2qBtE;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
|
@@ -5586,7 +5586,15 @@ export async function startServer(options) {
|
|
|
5586
5586
|
loadPerCore: () => _computeDegradedTmuxLoadPerCore(os.loadavg()[0], _degradedTmuxCores),
|
|
5587
5587
|
now: () => Date.now(),
|
|
5588
5588
|
});
|
|
5589
|
+
let boundTerminateAuthority = null;
|
|
5590
|
+
const terminateWithAuthority = (id, reason, opts) => {
|
|
5591
|
+
if (!boundTerminateAuthority) {
|
|
5592
|
+
throw new Error('Session terminate authority was not bound during manager construction');
|
|
5593
|
+
}
|
|
5594
|
+
return boundTerminateAuthority(id, reason, opts);
|
|
5595
|
+
};
|
|
5589
5596
|
const sessionManager = new SessionManager(sessionManagerConfig, state, {
|
|
5597
|
+
bindTerminateAuthority: (authority) => { boundTerminateAuthority = authority; },
|
|
5590
5598
|
tmuxAsyncEnabled: _tmuxAsyncEnabled,
|
|
5591
5599
|
degradedTmuxGuard,
|
|
5592
5600
|
tmuxCallTimeoutMs: config.monitoring?.tmuxResilience?.asyncHotPath?.timeoutMs,
|
|
@@ -9446,6 +9454,7 @@ export async function startServer(options) {
|
|
|
9446
9454
|
reason: e.reason,
|
|
9447
9455
|
disposition: e.disposition,
|
|
9448
9456
|
origin: e.origin,
|
|
9457
|
+
authorityScope: e.authorityScope,
|
|
9449
9458
|
// Untrusted provenance claim from a relayed close (spec §2.3) — a
|
|
9450
9459
|
// signal in the trail, never an authority input.
|
|
9451
9460
|
...(e.via ? { viaClaim: e.via } : {}),
|
|
@@ -9603,7 +9612,6 @@ export async function startServer(options) {
|
|
|
9603
9612
|
// the health endpoint (synchronous tmux has-session calls) and cause the
|
|
9604
9613
|
// lifeline to restart the server in a tight loop.
|
|
9605
9614
|
await sessionManager.purgeDeadSessions();
|
|
9606
|
-
sessionManager.startMonitoring();
|
|
9607
9615
|
// ── Durable Inbound Message Queue: unconditional boot sweep (§5.3) ──
|
|
9608
9616
|
// MUST run BEFORE recoverPendingInjects (boot ordering, spec §3.4): the
|
|
9609
9617
|
// sweep consults injection receipts and vetoes PIS records for
|
|
@@ -10356,7 +10364,7 @@ export async function startServer(options) {
|
|
|
10356
10364
|
killSession: async (name) => {
|
|
10357
10365
|
const session = sessionManager.listRunningSessions().find((s) => s.tmuxSession === name);
|
|
10358
10366
|
if (session) {
|
|
10359
|
-
await
|
|
10367
|
+
await terminateWithAuthority(session.id, 'session-recovery', {
|
|
10360
10368
|
disposition: 'recovery-bounce',
|
|
10361
10369
|
finalStatus: 'killed',
|
|
10362
10370
|
bypassRecoveryFlag: true,
|
|
@@ -17646,13 +17654,10 @@ export async function startServer(options) {
|
|
|
17646
17654
|
cpuCriticalLoadPerCore: rcfg?.cpuCriticalLoadPerCore ?? 1.5,
|
|
17647
17655
|
});
|
|
17648
17656
|
},
|
|
17649
|
-
terminate: (id, reason, opts) =>
|
|
17657
|
+
terminate: (id, reason, opts) => terminateWithAuthority(id, reason, {
|
|
17650
17658
|
bypassActiveProcessKeep: opts?.bypassActiveProcessKeep,
|
|
17651
17659
|
bypassRecentUserMessageForConfirmedMove: opts?.bypassRecentUserMessageForConfirmedMove,
|
|
17652
|
-
|
|
17653
|
-
// the authority — dropping it here would silently restore the
|
|
17654
|
-
// not-lease-holder veto the carve-out exists to lift.
|
|
17655
|
-
bypassLeaseForTopicMovedCloseout: opts?.bypassLeaseForTopicMovedCloseout,
|
|
17660
|
+
localPostTransferCloseout: opts?.localPostTransferCloseout,
|
|
17656
17661
|
workEvidence: opts?.workEvidence,
|
|
17657
17662
|
}),
|
|
17658
17663
|
markReaping: (id) => sessionManager.markReaping(id),
|
|
@@ -20184,8 +20189,7 @@ export async function startServer(options) {
|
|
|
20184
20189
|
const rec = tmux ? state.listSessions().find((s) => s.tmuxSession === tmux) : undefined;
|
|
20185
20190
|
if (!rec)
|
|
20186
20191
|
return { terminated: false, skipped: 'no-local-session' };
|
|
20187
|
-
return
|
|
20188
|
-
origin: 'autonomous',
|
|
20192
|
+
return terminateWithAuthority(rec.id, reason, {
|
|
20189
20193
|
via: 'ws12-drain',
|
|
20190
20194
|
bypassActiveProcessKeep: opts.force,
|
|
20191
20195
|
workEvidence: opts.force ? ['active-build-or-autonomous-run'] : undefined,
|
|
@@ -23005,7 +23009,7 @@ export async function startServer(options) {
|
|
|
23005
23009
|
const tmuxName = telegram?.getSessionForTopic(topicId);
|
|
23006
23010
|
const rec = tmuxName ? sessionManager.listRunningSessions().find((s) => s.tmuxSession === tmuxName) : undefined;
|
|
23007
23011
|
if (rec && !sessionManager.getProtectedSessions().includes(rec.tmuxSession)) {
|
|
23008
|
-
void
|
|
23012
|
+
void terminateWithAuthority(rec.id, `topic ${topicId} moved to ${cmd.nickname} (user-commanded transfer) — closing the leftover local session`, { origin: 'operator', disposition: 'recovery-bounce' }).then((r) => {
|
|
23009
23013
|
console.log(pc.dim(` [session-pool] post-transfer closeout: ${rec.tmuxSession} → ${r.terminated ? 'closed' : `skipped (${r.skipped})`}`));
|
|
23010
23014
|
});
|
|
23011
23015
|
}
|
|
@@ -23668,7 +23672,7 @@ export async function startServer(options) {
|
|
|
23668
23672
|
userDirected: true, status: 'open', assignee: null, priority: 'medium',
|
|
23669
23673
|
})),
|
|
23670
23674
|
});
|
|
23671
|
-
const server = new AgentServer({ config, subscriptionEmailBinding: credentialLocationLedger, subscriptionEmailBarrier, subscriptionIdentityOracle: credentialIdentityOracle, sessionManager, llmQueue: sharedLlmQueue, state, scheduler, telegram, relationships, feedback, feedbackAnomalyDetector, dispatches, updateChecker, autoUpdater, autoDispatcher, quotaTracker, quotaManager, publisher, viewer, tunnel, evolution, watchdog, topicMemory, triageNurse, projectMapper, cartographerRoots: cartographerRoots ?? 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) {
|
|
23675
|
+
const server = new AgentServer({ config, terminateSessionAuthority: terminateWithAuthority, subscriptionEmailBinding: credentialLocationLedger, subscriptionEmailBarrier, subscriptionIdentityOracle: credentialIdentityOracle, sessionManager, llmQueue: sharedLlmQueue, state, scheduler, telegram, relationships, feedback, feedbackAnomalyDetector, dispatches, updateChecker, autoUpdater, autoDispatcher, quotaTracker, quotaManager, publisher, viewer, tunnel, evolution, watchdog, topicMemory, triageNurse, projectMapper, cartographerRoots: cartographerRoots ?? 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) {
|
|
23672
23676
|
peers = (_listPoolMachines?.() ?? []).filter((m) => m.machineId !== _meshSelfId && !!m.lastKnownUrl).map((m) => ({ machineId: m.machineId, nickname: m.nickname ?? m.machineId, url: m.lastKnownUrl }));
|
|
23673
23677
|
} if (peers.length === 0)
|
|
23674
23678
|
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, peerEndpointRecorder, getSelfMeshEndpoints, 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, conversationRegistry, conversationBindAuth, conversationFollowThrough, whatsappBusinessBackend, messageBridge, hookEventReceiver, worktreeMonitor, subagentTracker, instructionsVerifier, handshakeManager: threadlineHandshake, threadlineRouter, conversationStore, threadLog, threadMessageRecorder, warrantsReplyGate, collaborationSurfacer, threadResumeMap, topicLinkageHandler: topicLinkageHandler ?? undefined, threadlineRelayClient, getLastRelayEvent: threadlineGetLastRelayEvent, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, a2aDeliveryTracker: a2aDeliveryTracker ?? undefined, responseReviewGate, reviewCanaryBattery, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, completionEvaluator, unifiedTrust, liveConfig, sharedStateLedger, ledgerSessionRegistry, worktreeManager, oidcEnrolledRepos: parallelDevConfig?.oidcEnrolledRepos, initiativeTracker, projectRoundRunner, projectDriftChecker, machineHeartbeat, machinePoolRegistry, ropeHealthMonitor, writeAdmission: writeAdmission ?? undefined, getInboundQueue: () => _inboundQueue, getMachineCoherence: () => _machineCoherenceSentinel, getSingleMachineFailoverGap: () => _singleMachineFailoverGap, getMissingLoginSession: () => _missingLoginSession, getSessionPoolFailoverRunner: () => _sessionPoolFailoverRunnerDriver?.status() ?? null, sessionPoolPromotionActivation: _sessionPoolPromotionActivation, meshRpcDispatcher, deliverA2aToMachine: _deliverA2aToMachine ?? undefined, workingSetPullCoordinator, workingSetArtifactManager, orchestratorPoller, commitmentReplicaStore, preferenceReplicaStore, replicatedRecordEmitter, conflictStore, rollbackUnmerge, droppedOriginRegistry, preferencesUnionReader, forwardCommitmentMutate, sessionOwnershipRegistry, sendDrain: _sendDrain ?? undefined, topicPinStore: _topicPinStore ?? undefined, topicPinSkewQuarantine: _topicPinSkewQuarantine ?? undefined, topicPinFoldView: _topicPinFoldView ?? undefined, ownershipReconciler: _ownershipReconciler ?? undefined, staleOwnerEngine: _staleOwnerEngine ?? undefined, duplicateReconciler: _duplicateReconciler ?? undefined, ownerDarkLadder: _ownerDarkLadder ?? undefined, spawnAdmission: _spawnAdmission ?? undefined, judgmentProvenance: _judgmentProvenance ?? undefined, leaseHandback: _leaseHandbackCtx ?? 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, externalHogSentinel, orphanedWorkSentinel, mcpProcessReaper, geminiLoopRunner, sleepController, agentActivityState, reapLog, resumeQueue, resumeDrainer, autonomousLivenessReconciler, enforcedTerminationStatus: () => enforcedTerminationWatchdog?.guardStatus() ?? null, prHandLease: prHandLease ?? undefined, operatorStopRecorder: recordOperatorStop, sleepWakeDetector, unjustifiedStopGate, stopGateDb, stopNotifier, liveTestGate, liveTestGateMode, liveTestRunnerCtx }); // Resolve the late-bound topic-operator getter (increment 2e): routing was
|
|
@@ -24035,6 +24039,11 @@ export async function startServer(options) {
|
|
|
24035
24039
|
// from binding; logged, and the OS releases the listening socket regardless.
|
|
24036
24040
|
console.error(' Boot health beacon stop failed (continuing to bind real server):', err instanceof Error ? err.message : err);
|
|
24037
24041
|
}
|
|
24042
|
+
// Start session maintenance only after every authority dependency and the
|
|
24043
|
+
// session-pool write posture have been installed. Starting this near initial
|
|
24044
|
+
// construction left a first-tick window with no ReapGuard and, on standby,
|
|
24045
|
+
// no per-session write admission.
|
|
24046
|
+
sessionManager.startMonitoring();
|
|
24038
24047
|
await server.start();
|
|
24039
24048
|
// #1425 regression containment: only begin the cooperative witness-index +
|
|
24040
24049
|
// parity scans AFTER the HTTP server is listening. Until publication the
|