instar 1.3.65 → 1.3.67
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 +66 -5
- package/dist/commands/server.js.map +1 -1
- package/dist/core/SessionManager.d.ts +10 -0
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +23 -1
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/SleepWakeDetector.d.ts +13 -0
- package/dist/core/SleepWakeDetector.d.ts.map +1 -1
- package/dist/core/SleepWakeDetector.js +26 -0
- package/dist/core/SleepWakeDetector.js.map +1 -1
- package/dist/core/types.d.ts +16 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/monitoring/CollaborationRedriveEngine.d.ts +95 -0
- package/dist/monitoring/CollaborationRedriveEngine.d.ts.map +1 -0
- package/dist/monitoring/CollaborationRedriveEngine.js +342 -0
- package/dist/monitoring/CollaborationRedriveEngine.js.map +1 -0
- package/dist/monitoring/CommitmentTracker.d.ts +13 -0
- package/dist/monitoring/CommitmentTracker.d.ts.map +1 -1
- package/dist/monitoring/CommitmentTracker.js +10 -0
- package/dist/monitoring/CommitmentTracker.js.map +1 -1
- package/dist/monitoring/OrphanProcessReaper.d.ts +11 -0
- package/dist/monitoring/OrphanProcessReaper.d.ts.map +1 -1
- package/dist/monitoring/OrphanProcessReaper.js +63 -7
- package/dist/monitoring/OrphanProcessReaper.js.map +1 -1
- package/dist/monitoring/SessionRecovery.d.ts +31 -2
- package/dist/monitoring/SessionRecovery.d.ts.map +1 -1
- package/dist/monitoring/SessionRecovery.js +46 -4
- package/dist/monitoring/SessionRecovery.js.map +1 -1
- package/dist/monitoring/SessionWatchdog.d.ts +0 -1
- package/dist/monitoring/SessionWatchdog.d.ts.map +1 -1
- package/dist/monitoring/SessionWatchdog.js +36 -12
- package/dist/monitoring/SessionWatchdog.js.map +1 -1
- package/dist/scheduler/JobScheduler.d.ts +16 -2
- package/dist/scheduler/JobScheduler.d.ts.map +1 -1
- package/dist/scheduler/JobScheduler.js +50 -5
- package/dist/scheduler/JobScheduler.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +5 -5
- package/upgrades/1.3.65.md +97 -0
- package/upgrades/1.3.66.md +28 -0
- package/upgrades/1.3.67.md +164 -0
- package/upgrades/side-effects/collaboration-redrive-engine.md +36 -0
- package/upgrades/side-effects/unified-session-lifecycle-robustness.md +123 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiSH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAksDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiSH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAksDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAg/NtE;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
|
@@ -4487,11 +4487,19 @@ export async function startServer(options) {
|
|
|
4487
4487
|
return null;
|
|
4488
4488
|
}
|
|
4489
4489
|
},
|
|
4490
|
-
|
|
4491
|
-
|
|
4492
|
-
|
|
4490
|
+
// UNIFIED-SESSION-LIFECYCLE §P0 #8: route the kill-to-respawn through
|
|
4491
|
+
// the ReapAuthority with disposition:'recovery-bounce' (silent §P3
|
|
4492
|
+
// notifier — a bounce is not a disappearance) and bypassRecoveryFlag
|
|
4493
|
+
// (the recovery's own in-flight flag would otherwise refuse its own
|
|
4494
|
+
// kill via the KEEP-guard).
|
|
4495
|
+
killSession: async (name) => {
|
|
4496
|
+
const session = sessionManager.listRunningSessions().find((s) => s.tmuxSession === name);
|
|
4493
4497
|
if (session) {
|
|
4494
|
-
sessionManager.
|
|
4498
|
+
await sessionManager.terminateSession(session.id, 'session-recovery', {
|
|
4499
|
+
disposition: 'recovery-bounce',
|
|
4500
|
+
finalStatus: 'killed',
|
|
4501
|
+
bypassRecoveryFlag: true,
|
|
4502
|
+
});
|
|
4495
4503
|
return;
|
|
4496
4504
|
}
|
|
4497
4505
|
// Fallback: direct tmux kill for untracked sessions
|
|
@@ -4503,6 +4511,8 @@ export async function startServer(options) {
|
|
|
4503
4511
|
}
|
|
4504
4512
|
catch { /* may already be dead */ }
|
|
4505
4513
|
},
|
|
4514
|
+
// P1/P2 cross-check dep — see SessionRecovery.killForRecovery().
|
|
4515
|
+
hasActiveProcesses: (name) => sessionManager.hasActiveProcesses(name),
|
|
4506
4516
|
respawnSession: async (topicId, _sessionName, recoveryPrompt) => {
|
|
4507
4517
|
// Check Slack first (synthetic IDs are negative)
|
|
4508
4518
|
const slackChId = slackProxyChannelMap.get(topicId);
|
|
@@ -6148,6 +6158,12 @@ export async function startServer(options) {
|
|
|
6148
6158
|
// Start SleepWakeDetector (re-validate sessions on wake)
|
|
6149
6159
|
const { SleepWakeDetector } = await import('../core/SleepWakeDetector.js');
|
|
6150
6160
|
const sleepWakeDetector = new SleepWakeDetector();
|
|
6161
|
+
// §P0 #9 (SE-8): give the scheduler's wake-reaper a cumulative-sleep view
|
|
6162
|
+
// (not the single last sleep event) so a job that spanned multiple sleeps
|
|
6163
|
+
// isn't reaped early.
|
|
6164
|
+
if (scheduler) {
|
|
6165
|
+
scheduler.setCumulativeSleepProvider((a, b) => sleepWakeDetector.getCumulativeSleepMsBetween(a, b));
|
|
6166
|
+
}
|
|
6151
6167
|
sleepWakeDetector.on('wake', async (event) => {
|
|
6152
6168
|
console.log(`[SleepWake] Wake detected after ~${event.sleepDurationSeconds}s sleep`);
|
|
6153
6169
|
// Checkpoint SQLite WAL files to flush stale locks from pre-sleep connections
|
|
@@ -6225,7 +6241,7 @@ export async function startServer(options) {
|
|
|
6225
6241
|
let reapResult = { reaped: [], skipped: 0 };
|
|
6226
6242
|
try {
|
|
6227
6243
|
if (scheduler) {
|
|
6228
|
-
reapResult = scheduler.reapStuckRuns(event);
|
|
6244
|
+
reapResult = await scheduler.reapStuckRuns(event);
|
|
6229
6245
|
}
|
|
6230
6246
|
}
|
|
6231
6247
|
catch (err) {
|
|
@@ -7402,6 +7418,51 @@ export async function startServer(options) {
|
|
|
7402
7418
|
completionEvaluator = new CompletionEvaluator({ intelligence: sharedIntelligence });
|
|
7403
7419
|
console.log(pc.green(' Completion evaluator: active (independent /goal-style judge)'));
|
|
7404
7420
|
}
|
|
7421
|
+
// ── CollaborationRedriveEngine ────────────────────────────────────
|
|
7422
|
+
// Proactively re-engage a COUNTERPART that has gone silent on an open
|
|
7423
|
+
// threadline-reply commitment. Bounded peer nudges with a durable,
|
|
7424
|
+
// reply-INDEPENDENT cap; escalates to the Attention queue after the cap
|
|
7425
|
+
// and goes terminal-quiet (never spins). Spec:
|
|
7426
|
+
// docs/specs/collaboration-redrive-on-counterpart-silence.md (approved
|
|
7427
|
+
// by Justin 2026-05-28). Ships OFF.
|
|
7428
|
+
try {
|
|
7429
|
+
const redriveCfg = config.monitoring?.collaborationRedrive ?? {};
|
|
7430
|
+
if (redriveCfg.enabled && completionEvaluator) {
|
|
7431
|
+
const { CollaborationRedriveEngine, DEFAULT_REDRIVE_CONFIG } = await import('../monitoring/CollaborationRedriveEngine.js');
|
|
7432
|
+
const collaborationRedrive = new CollaborationRedriveEngine({
|
|
7433
|
+
commitmentTracker,
|
|
7434
|
+
completionEvaluator,
|
|
7435
|
+
relayClient: threadlineRelayClient ?? undefined,
|
|
7436
|
+
surfacer: collaborationSurfacer ?? undefined,
|
|
7437
|
+
raiseAttention: telegram
|
|
7438
|
+
? async (item) => {
|
|
7439
|
+
const priorityMap = {
|
|
7440
|
+
high: 'HIGH', medium: 'NORMAL', low: 'LOW',
|
|
7441
|
+
};
|
|
7442
|
+
return telegram.createAttentionItem({
|
|
7443
|
+
id: `collab-redrive-${Date.now()}`,
|
|
7444
|
+
title: item.title,
|
|
7445
|
+
summary: item.body.slice(0, 160),
|
|
7446
|
+
description: item.body,
|
|
7447
|
+
category: 'collaboration-redrive',
|
|
7448
|
+
priority: priorityMap[item.priority ?? 'medium'] ?? 'NORMAL',
|
|
7449
|
+
sourceContext: item.source ?? 'collaboration-redrive',
|
|
7450
|
+
});
|
|
7451
|
+
}
|
|
7452
|
+
: undefined,
|
|
7453
|
+
knownAgentsPath: path.join(config.stateDir, 'threadline', 'known-agents.json'),
|
|
7454
|
+
}, { ...DEFAULT_REDRIVE_CONFIG, ...redriveCfg, enabled: true });
|
|
7455
|
+
collaborationRedrive.start();
|
|
7456
|
+
globalThis.__instarCollaborationRedrive = collaborationRedrive;
|
|
7457
|
+
console.log(pc.green(' CollaborationRedriveEngine: armed (proactive peer re-drive on counterpart silence)'));
|
|
7458
|
+
}
|
|
7459
|
+
else {
|
|
7460
|
+
console.log(pc.dim(' CollaborationRedriveEngine: disabled (monitoring.collaborationRedrive.enabled=false; the ship-OFF default)'));
|
|
7461
|
+
}
|
|
7462
|
+
}
|
|
7463
|
+
catch (err) {
|
|
7464
|
+
console.warn('[CollaborationRedrive] init failed:', err.message);
|
|
7465
|
+
}
|
|
7405
7466
|
// Register feature-discovery probe for self-knowledge tree (Phase 4: Agent Integration)
|
|
7406
7467
|
if (selfKnowledgeTree && featureRegistry) {
|
|
7407
7468
|
selfKnowledgeTree.probes.register('feature-discovery', async () => {
|