instar 1.3.655 → 1.3.657

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 (40) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +21 -0
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/LiveTestHarness.d.ts +55 -1
  5. package/dist/core/LiveTestHarness.d.ts.map +1 -1
  6. package/dist/core/LiveTestHarness.js +71 -2
  7. package/dist/core/LiveTestHarness.js.map +1 -1
  8. package/dist/core/RealChannelDriver.d.ts +15 -0
  9. package/dist/core/RealChannelDriver.d.ts.map +1 -1
  10. package/dist/core/RealChannelDriver.js +16 -0
  11. package/dist/core/RealChannelDriver.js.map +1 -1
  12. package/dist/core/SlackLiveSender.d.ts +29 -0
  13. package/dist/core/SlackLiveSender.d.ts.map +1 -1
  14. package/dist/core/SlackLiveSender.js +68 -3
  15. package/dist/core/SlackLiveSender.js.map +1 -1
  16. package/dist/core/TelegramLiveSender.d.ts +18 -0
  17. package/dist/core/TelegramLiveSender.d.ts.map +1 -1
  18. package/dist/core/TelegramLiveSender.js +60 -0
  19. package/dist/core/TelegramLiveSender.js.map +1 -1
  20. package/dist/core/rateLimitFalsePositiveMatrix.d.ts +28 -0
  21. package/dist/core/rateLimitFalsePositiveMatrix.d.ts.map +1 -0
  22. package/dist/core/rateLimitFalsePositiveMatrix.js +74 -0
  23. package/dist/core/rateLimitFalsePositiveMatrix.js.map +1 -0
  24. package/dist/monitoring/CompactionSentinel.d.ts +9 -0
  25. package/dist/monitoring/CompactionSentinel.d.ts.map +1 -1
  26. package/dist/monitoring/CompactionSentinel.js +8 -0
  27. package/dist/monitoring/CompactionSentinel.js.map +1 -1
  28. package/dist/monitoring/QuotaCollector.d.ts.map +1 -1
  29. package/dist/monitoring/QuotaCollector.js +21 -8
  30. package/dist/monitoring/QuotaCollector.js.map +1 -1
  31. package/dist/monitoring/RateLimitSentinel.d.ts +25 -0
  32. package/dist/monitoring/RateLimitSentinel.d.ts.map +1 -1
  33. package/dist/monitoring/RateLimitSentinel.js +44 -0
  34. package/dist/monitoring/RateLimitSentinel.js.map +1 -1
  35. package/package.json +1 -1
  36. package/src/data/builtin-manifest.json +2 -2
  37. package/upgrades/1.3.656.md +68 -0
  38. package/upgrades/1.3.657.md +32 -0
  39. package/upgrades/side-effects/false-ratelimit-recovery-completed-sessions.md +113 -0
  40. package/upgrades/side-effects/real-channel-absence-collect.md +73 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2CH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAU3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAwBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAwH7D,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,CA02gBtE;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;AA2CH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAU3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAwBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAwH7D,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,CAi4gBtE;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"}
@@ -9361,9 +9361,16 @@ export async function startServer(options) {
9361
9361
  // calls that used to live here. Dedupes across the three triggers and
9362
9362
  // vetoes zombie cleanup while a recovery is in flight.
9363
9363
  const { CompactionSentinel } = await import('../monitoring/CompactionSentinel.js');
9364
+ // A session is a legitimate recovery target ONLY while it is in the running
9365
+ // set. A finished/failed/killed session drops out of listRunningSessions(),
9366
+ // so this is the structural guard that stops both sentinels from "recovering"
9367
+ // a session that is simply done — the false-positive that spammed the user
9368
+ // with throttle-resume nudges on a finished session (live incident 2026-06-24).
9369
+ const isSessionRecoverable = (sessionName) => sessionManager.listRunningSessions().some(s => s.tmuxSession === sessionName);
9364
9370
  const compactionSentinel = new CompactionSentinel({
9365
9371
  recoverFn: recoverCompactedSession,
9366
9372
  projectDir: config.projectDir,
9373
+ isSessionRecoverable,
9367
9374
  getClaudeSessionId: (sessionName) => {
9368
9375
  const session = sessionManager.listRunningSessions()
9369
9376
  .find(s => s.tmuxSession === sessionName);
@@ -9458,6 +9465,7 @@ export async function startServer(options) {
9458
9465
  notifyFn: rateLimitNotify,
9459
9466
  projectDir: config.projectDir,
9460
9467
  getClaudeSessionId: getClaudeSessionIdForName,
9468
+ isSessionRecoverable,
9461
9469
  // #33 codex parity: for codex sessions, recovery-verification reads the newest
9462
9470
  // codex rollout (account-wide throttle → newest-rollout growth = cleared) and
9463
9471
  // the user-facing messages use OpenAI wording.
@@ -9489,6 +9497,19 @@ export async function startServer(options) {
9489
9497
  sessionManager.on('apiErrorAtIdle', (sessionName) => {
9490
9498
  rateLimitSentinel.report(sessionName, 'idle-error', { errorClass: 'transient-api' });
9491
9499
  });
9500
+ // When a session completes, immediately clear any in-flight recovery for it in
9501
+ // BOTH sentinels. The recoverability guard already blocks NEW recoveries on a
9502
+ // finished session and aborts an in-flight one at its next tick; clearing here
9503
+ // frees the recovery slot (and lifts the zombie-kill veto) immediately instead
9504
+ // of waiting for that tick — and is the explicit completion-cleanup the prior
9505
+ // code lacked (clear() existed but had zero callers). (live incident 2026-06-24)
9506
+ // clear() on both sentinels is a pure synchronous timer-cancel + Map.delete that
9507
+ // cannot throw, so no defensive try/catch is needed here (a wrapper would only be a
9508
+ // silent fallback the no-silent-fallbacks ratchet flags — see the methods).
9509
+ sessionManager.on('sessionComplete', (session) => {
9510
+ rateLimitSentinel.clear(session.tmuxSession);
9511
+ compactionSentinel.clear(session.tmuxSession);
9512
+ });
9492
9513
  // #33 codex parity: the two triggers above read CLAUDE panes / claude-PID watchdog,
9493
9514
  // so a codex session throttled by OpenAI is invisible to them. This poll reads the
9494
9515
  // codex account usage; when codex itself flags a rate-limit hit