instar 1.3.665 → 1.3.667

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 (48) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +64 -9
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/MessageSentinel.d.ts +62 -1
  5. package/dist/core/MessageSentinel.d.ts.map +1 -1
  6. package/dist/core/MessageSentinel.js +123 -1
  7. package/dist/core/MessageSentinel.js.map +1 -1
  8. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  9. package/dist/core/PostUpdateMigrator.js +9 -0
  10. package/dist/core/PostUpdateMigrator.js.map +1 -1
  11. package/dist/core/SessionManager.d.ts +9 -0
  12. package/dist/core/SessionManager.d.ts.map +1 -1
  13. package/dist/core/SessionManager.js +31 -0
  14. package/dist/core/SessionManager.js.map +1 -1
  15. package/dist/core/paneTail.d.ts +9 -0
  16. package/dist/core/paneTail.d.ts.map +1 -1
  17. package/dist/core/paneTail.js +12 -0
  18. package/dist/core/paneTail.js.map +1 -1
  19. package/dist/core/types.d.ts +11 -0
  20. package/dist/core/types.d.ts.map +1 -1
  21. package/dist/core/types.js.map +1 -1
  22. package/dist/monitoring/PermissionPromptAutoResolver.d.ts +215 -0
  23. package/dist/monitoring/PermissionPromptAutoResolver.d.ts.map +1 -0
  24. package/dist/monitoring/PermissionPromptAutoResolver.js +475 -0
  25. package/dist/monitoring/PermissionPromptAutoResolver.js.map +1 -0
  26. package/dist/monitoring/PresenceProxy.d.ts.map +1 -1
  27. package/dist/monitoring/PresenceProxy.js +18 -0
  28. package/dist/monitoring/PresenceProxy.js.map +1 -1
  29. package/dist/monitoring/StuckSignatureClassifier.d.ts +1 -1
  30. package/dist/monitoring/StuckSignatureClassifier.d.ts.map +1 -1
  31. package/dist/monitoring/StuckSignatureClassifier.js +24 -0
  32. package/dist/monitoring/StuckSignatureClassifier.js.map +1 -1
  33. package/dist/monitoring/guardManifest.d.ts.map +1 -1
  34. package/dist/monitoring/guardManifest.js +15 -0
  35. package/dist/monitoring/guardManifest.js.map +1 -1
  36. package/dist/monitoring/guardPosture.d.ts.map +1 -1
  37. package/dist/monitoring/guardPosture.js +19 -0
  38. package/dist/monitoring/guardPosture.js.map +1 -1
  39. package/dist/server/routes.d.ts.map +1 -1
  40. package/dist/server/routes.js +10 -5
  41. package/dist/server/routes.js.map +1 -1
  42. package/package.json +1 -1
  43. package/scripts/lint-guard-manifest.js +1 -0
  44. package/src/data/builtin-manifest.json +64 -64
  45. package/upgrades/1.3.666.md +131 -0
  46. package/upgrades/1.3.667.md +32 -0
  47. package/upgrades/side-effects/operator-channel-sacred.md +31 -0
  48. package/upgrades/1.3.665.md +0 -68
@@ -14065,8 +14065,13 @@ export function createRoutes(ctx) {
14065
14065
  // check must never block message delivery. Mirrors processUpdate's behavior.
14066
14066
  if (ctx.sentinel) {
14067
14067
  try {
14068
- const classification = await ctx.sentinel.classify(text);
14069
- if (classification.category === 'emergency-stop' || classification.category === 'pause') {
14068
+ // Operator-channel-sacred: the single disposition helper decides — a 'pause'
14069
+ // consumes ONLY on a deterministic match; a bare-LLM/capacity-shed 'pause'
14070
+ // (the 2026-06-25 lockout mechanism) routes THROUGH (falls past this block to
14071
+ // normal routing) instead of consuming the operator's message; a long-form
14072
+ // genuine stop is rescued to a kill.
14073
+ const decision = await ctx.sentinel.decideInboundDisposition(text, Number(topicId));
14074
+ if (decision.disposition === 'kill' || decision.disposition === 'pause') {
14070
14075
  // Resolve the topic's session. Prefer the on-disk registry (the
14071
14076
  // persistent source of truth that both polling modes maintain) since
14072
14077
  // a lifeline-owned adapter's in-memory topicToSession map may be empty;
@@ -14083,7 +14088,7 @@ export function createRoutes(ctx) {
14083
14088
  if (!sessionName) {
14084
14089
  sessionName = ctx.telegram?.getSessionForTopic(Number(topicId)) ?? null;
14085
14090
  }
14086
- if (classification.category === 'emergency-stop') {
14091
+ if (decision.disposition === 'kill') {
14087
14092
  if (sessionName) {
14088
14093
  if (ctx.telegram?.onSentinelKillSession) {
14089
14094
  ctx.telegram.onSentinelKillSession(sessionName); // saves resume UUID + kills
@@ -14111,8 +14116,8 @@ export function createRoutes(ctx) {
14111
14116
  ctx.operatorStopRecorder?.(Number(topicId));
14112
14117
  }
14113
14118
  catch { /* the stop must succeed regardless */ }
14114
- if (classification.reason) {
14115
- console.log(`[telegram-forward] sentinel stop reason: ${classification.reason}`);
14119
+ if (decision.reason) {
14120
+ console.log(`[telegram-forward] sentinel stop reason: ${decision.reason}`);
14116
14121
  }
14117
14122
  ctx.telegram?.sendToTopic(Number(topicId), sessionName
14118
14123
  ? 'Session terminated.\n\nSend a new message to start a fresh session.'