instar 1.3.66 → 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.
Files changed (32) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +21 -5
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/SessionManager.d.ts +10 -0
  5. package/dist/core/SessionManager.d.ts.map +1 -1
  6. package/dist/core/SessionManager.js +23 -1
  7. package/dist/core/SessionManager.js.map +1 -1
  8. package/dist/core/SleepWakeDetector.d.ts +13 -0
  9. package/dist/core/SleepWakeDetector.d.ts.map +1 -1
  10. package/dist/core/SleepWakeDetector.js +26 -0
  11. package/dist/core/SleepWakeDetector.js.map +1 -1
  12. package/dist/monitoring/OrphanProcessReaper.d.ts +11 -0
  13. package/dist/monitoring/OrphanProcessReaper.d.ts.map +1 -1
  14. package/dist/monitoring/OrphanProcessReaper.js +63 -7
  15. package/dist/monitoring/OrphanProcessReaper.js.map +1 -1
  16. package/dist/monitoring/SessionRecovery.d.ts +31 -2
  17. package/dist/monitoring/SessionRecovery.d.ts.map +1 -1
  18. package/dist/monitoring/SessionRecovery.js +46 -4
  19. package/dist/monitoring/SessionRecovery.js.map +1 -1
  20. package/dist/monitoring/SessionWatchdog.d.ts +0 -1
  21. package/dist/monitoring/SessionWatchdog.d.ts.map +1 -1
  22. package/dist/monitoring/SessionWatchdog.js +36 -12
  23. package/dist/monitoring/SessionWatchdog.js.map +1 -1
  24. package/dist/scheduler/JobScheduler.d.ts +16 -2
  25. package/dist/scheduler/JobScheduler.d.ts.map +1 -1
  26. package/dist/scheduler/JobScheduler.js +50 -5
  27. package/dist/scheduler/JobScheduler.js.map +1 -1
  28. package/package.json +1 -1
  29. package/src/data/builtin-manifest.json +5 -5
  30. package/upgrades/1.3.65.md +97 -0
  31. package/upgrades/1.3.67.md +164 -0
  32. 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,CA69NtE;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"}
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"}
@@ -4487,11 +4487,19 @@ export async function startServer(options) {
4487
4487
  return null;
4488
4488
  }
4489
4489
  },
4490
- killSession: (name) => {
4491
- // Route through SessionManager to fire beforeSessionKill hook
4492
- const session = sessionManager.listRunningSessions().find(s => s.tmuxSession === name);
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.killSession(session.id);
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) {