instar 1.2.82 → 1.3.0

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 (62) hide show
  1. package/dist/commands/init.js +14 -3
  2. package/dist/commands/init.js.map +1 -1
  3. package/dist/commands/server.d.ts.map +1 -1
  4. package/dist/commands/server.js +143 -1
  5. package/dist/commands/server.js.map +1 -1
  6. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  7. package/dist/config/ConfigDefaults.js +23 -0
  8. package/dist/config/ConfigDefaults.js.map +1 -1
  9. package/dist/core/PostUpdateMigrator.d.ts +2 -1
  10. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  11. package/dist/core/PostUpdateMigrator.js +268 -3
  12. package/dist/core/PostUpdateMigrator.js.map +1 -1
  13. package/dist/core/SessionManager.d.ts +43 -0
  14. package/dist/core/SessionManager.d.ts.map +1 -1
  15. package/dist/core/SessionManager.js +123 -24
  16. package/dist/core/SessionManager.js.map +1 -1
  17. package/dist/core/installCodexHooks.d.ts.map +1 -1
  18. package/dist/core/installCodexHooks.js +3 -2
  19. package/dist/core/installCodexHooks.js.map +1 -1
  20. package/dist/core/types.d.ts +26 -0
  21. package/dist/core/types.d.ts.map +1 -1
  22. package/dist/core/types.js.map +1 -1
  23. package/dist/monitoring/SessionReaper.d.ts +153 -0
  24. package/dist/monitoring/SessionReaper.d.ts.map +1 -0
  25. package/dist/monitoring/SessionReaper.js +376 -0
  26. package/dist/monitoring/SessionReaper.js.map +1 -0
  27. package/dist/monitoring/TokenLedger.d.ts +12 -0
  28. package/dist/monitoring/TokenLedger.d.ts.map +1 -1
  29. package/dist/monitoring/TokenLedger.js +22 -0
  30. package/dist/monitoring/TokenLedger.js.map +1 -1
  31. package/dist/monitoring/transcriptProber.d.ts +44 -0
  32. package/dist/monitoring/transcriptProber.d.ts.map +1 -0
  33. package/dist/monitoring/transcriptProber.js +57 -0
  34. package/dist/monitoring/transcriptProber.js.map +1 -0
  35. package/dist/scaffold/templates.d.ts.map +1 -1
  36. package/dist/scaffold/templates.js +6 -0
  37. package/dist/scaffold/templates.js.map +1 -1
  38. package/dist/server/AgentServer.d.ts +3 -0
  39. package/dist/server/AgentServer.d.ts.map +1 -1
  40. package/dist/server/AgentServer.js +1 -0
  41. package/dist/server/AgentServer.js.map +1 -1
  42. package/dist/server/routes.d.ts +3 -0
  43. package/dist/server/routes.d.ts.map +1 -1
  44. package/dist/server/routes.js +20 -2
  45. package/dist/server/routes.js.map +1 -1
  46. package/dist/server/stopGate.d.ts +8 -2
  47. package/dist/server/stopGate.d.ts.map +1 -1
  48. package/dist/server/stopGate.js +42 -2
  49. package/dist/server/stopGate.js.map +1 -1
  50. package/package.json +1 -1
  51. package/playbook-scripts/build-state.py +39 -1
  52. package/scripts/analyze-release.js +16 -8
  53. package/scripts/generate-builtin-manifest.cjs +2 -1
  54. package/src/data/builtin-manifest.json +76 -67
  55. package/src/scaffold/templates.ts +6 -0
  56. package/src/templates/hooks/build-stop-hook.sh +62 -0
  57. package/src/templates/hooks/settings-template.json +10 -0
  58. package/upgrades/1.2.83.md +26 -0
  59. package/upgrades/1.3.0.md +27 -0
  60. package/upgrades/side-effects/build-stop-hook-session-scoping.md +133 -0
  61. package/upgrades/side-effects/fresh-session-stop-gate-shadow-wiring.md +35 -0
  62. package/upgrades/side-effects/session-reaper.md +42 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigDefaults.d.ts","sourceRoot":"","sources":["../../src/config/ConfigDefaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAmNH,MAAM,MAAM,SAAS,GAAG,iBAAiB,GAAG,YAAY,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAO7E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIlF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAuC5D"}
1
+ {"version":3,"file":"ConfigDefaults.d.ts","sourceRoot":"","sources":["../../src/config/ConfigDefaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0OH,MAAM,MAAM,SAAS,GAAG,iBAAiB,GAAG,YAAY,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAO7E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIlF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAuC5D"}
@@ -39,6 +39,29 @@ const SHARED_DEFAULTS = {
39
39
  activeWorkSilenceSentinel: {
40
40
  enabled: true,
41
41
  },
42
+ // SessionReaper — pressure-aware reaper of idle-but-alive sessions.
43
+ // UNLIKE the sentinels above, default OFF + dry-run: it is the only monitor
44
+ // that *kills* sessions on a heuristic, so it ships dark and must be flipped
45
+ // on by an operator after validating the dry-run log over a real pressure
46
+ // event. enabled:false → never runs; dryRun:true → logs would-reap, kills
47
+ // nothing. See docs/specs/SESSION-REAPER-SPEC.md.
48
+ sessionReaper: {
49
+ enabled: false,
50
+ dryRun: true,
51
+ tickIntervalSec: 120,
52
+ minAgeMinutes: 30,
53
+ confirmObservations: 3,
54
+ confirmWindowMinutes: 10,
55
+ paneCaptureLines: 200,
56
+ recentUserWindowMinutes: 30,
57
+ idleThresholdModerateMinutes: 45,
58
+ idleThresholdCriticalMinutes: 15,
59
+ normalTierReaps: false,
60
+ maxReapsPerTick: 3,
61
+ maxReapsPerHour: 12,
62
+ finalGraceSec: 60,
63
+ protectOpenCommitments: true,
64
+ },
42
65
  // Master gate for Telegram delivery of silently-stopped-sentinel
43
66
  // escalations. Default false → sentinel notices are housekeeping and stay
44
67
  // in the logs (server.log + sentinel-events.jsonl). Set true to receive
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigDefaults.js","sourceRoot":"","sources":["../../src/config/ConfigDefaults.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConfigDefaults.js","sourceRoot":"","sources":["../../src/config/ConfigDefaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,2EAA2E;AAC3E,MAAM,eAAe,GAA4B;IAC/C,UAAU,EAAE;QACV,gBAAgB,EAAE,IAAI;QACtB,qBAAqB,EAAE,KAAK;QAC5B,mEAAmE;QACnE,qDAAqD;QACrD,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI;SACd;QACD,sEAAsE;QACtE,sEAAsE;QACtE,wEAAwE;QACxE,iBAAiB,EAAE;YACjB,OAAO,EAAE,IAAI;SACd;QACD,uEAAuE;QACvE,yEAAyE;QACzE,mEAAmE;QACnE,iEAAiE;QACjE,wBAAwB,EAAE;YACxB,OAAO,EAAE,IAAI;SACd;QACD,yBAAyB,EAAE;YACzB,OAAO,EAAE,IAAI;SACd;QACD,oEAAoE;QACpE,4EAA4E;QAC5E,6EAA6E;QAC7E,0EAA0E;QAC1E,0EAA0E;QAC1E,kDAAkD;QAClD,aAAa,EAAE;YACb,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,GAAG;YACpB,aAAa,EAAE,EAAE;YACjB,mBAAmB,EAAE,CAAC;YACtB,oBAAoB,EAAE,EAAE;YACxB,gBAAgB,EAAE,GAAG;YACrB,uBAAuB,EAAE,EAAE;YAC3B,4BAA4B,EAAE,EAAE;YAChC,4BAA4B,EAAE,EAAE;YAChC,eAAe,EAAE,KAAK;YACtB,eAAe,EAAE,CAAC;YAClB,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,EAAE;YACjB,sBAAsB,EAAE,IAAI;SAC7B;QACD,iEAAiE;QACjE,0EAA0E;QAC1E,wEAAwE;QACxE,wEAAwE;QACxE,mEAAmE;QACnE,wEAAwE;QACxE,0BAA0B,EAAE,KAAK;QACjC,UAAU,EAAE;YACV,OAAO,EAAE,IAAI;YACb,WAAW,EAAE;gBACX,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,IAAI;gBAClB,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,KAAK;aACpB;YACD,MAAM,EAAE,KAAK;SACd;KACF;IACD,UAAU,EAAE;QACV,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,QAAQ;QACpB,YAAY,EAAE,CAAC,MAAM,CAAC;KACvB;IACD,2EAA2E;IAC3E,6EAA6E;IAC7E,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,2EAA2E;IAC3E,gEAAgE;IAChE,+CAA+C;IAC/C,WAAW,EAAE;QACX,OAAO,EAAE;YACP,OAAO,EAAE,IAAI;SACd;KACF;IACD,+EAA+E;IAC/E,0EAA0E;IAC1E,8EAA8E;IAC9E,4EAA4E;IAC5E,UAAU,EAAE;QACV,WAAW,EAAE;YACX,OAAO,EAAE,IAAI;SACd;KACF;IACD,gFAAgF;IAChF,iFAAiF;IACjF,mFAAmF;IACnF,KAAK,EAAE;QACL,OAAO,EAAE,IAAI;KACd;IACD,sEAAsE;IACtE,wEAAwE;IACxE,2EAA2E;IAC3E,oEAAoE;IACpE,qEAAqE;IACrE,kEAAkE;IAClE,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;KACd;IACD,uEAAuE;IACvE,uEAAuE;IACvE,sEAAsE;IACtE,yCAAyC;IACzC,MAAM,EAAE;QACN,YAAY,EAAE,EAAc;KAC7B;IACD,kEAAkE;IAClE,iEAAiE;IACjE,MAAM,EAAE;QACN,KAAK,EAAE,KAAc;KACtB;IACD,0EAA0E;IAC1E,4EAA4E;IAC5E,wEAAwE;IACxE,2EAA2E;IAC3E,sDAAsD;IACtD,OAAO,EAAE;QACP,8BAA8B,EAAE,EAAE,GAAG,MAAM;KAC5C;IACD,qEAAqE;IACrE,2EAA2E;IAC3E,mFAAmF;IACnF,QAAQ,EAAE;QACR,aAAa,EAAE;YACb,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,EAAE;YACb,cAAc,EAAE,MAAM;YACtB,UAAU,EAAE,EAAE,GAAG,MAAM;SACxB;KACF;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,cAAc,GAA4C;IAC9D,iBAAiB,EAAE;QACjB,UAAU,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE;QACpC,kBAAkB,EAAE;YAClB,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YAC3B,QAAQ,EAAE,EAAE;YACZ,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE;gBACL,KAAK,EAAE,eAAe;gBACtB,kBAAkB,EAAE,IAAI;gBACxB,kBAAkB,EAAE,CAAC;aACtB;SACF;QACD,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,OAAO;YACb,yEAAyE;YACzE,qEAAqE;YACrE,8BAA8B;YAC9B,cAAc,EAAE,CAAC,aAAa,CAAC;YAC/B,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,KAAK;YACnB,gBAAgB,EAAE,MAAM;YACxB,WAAW,EAAE,WAAW;SACzB;KACF;IACD,UAAU,EAAE;QACV,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;QACnC,kBAAkB,EAAE;YAClB,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YAC3B,QAAQ,EAAE,EAAE;YACZ,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE;gBACL,KAAK,EAAE,eAAe;gBACtB,kBAAkB,EAAE,IAAI;gBACxB,kBAAkB,EAAE,CAAC;aACtB;SACF;KACF;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,mBAAmB,GAA4B;IACnD,kBAAkB,EAAE;QAClB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC3B,QAAQ,EAAE,EAAE;QACZ,gBAAgB,EAAE,EAAE;QACpB,KAAK,EAAE;YACL,KAAK,EAAE,YAAY,EAAS,gDAAgD;YAC5E,kBAAkB,EAAE,KAAK,EAAI,qCAAqC;YAClE,kBAAkB,EAAE,EAAE,EAAO,mBAAmB;SACjD;KACF;CACF,CAAC;AAEF,2BAA2B;AAE3B;;;GAGG;AACH,SAAS,SAAS,CAAC,MAA+B,EAAE,MAA+B;IACjF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,IACE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtF,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EACtF,CAAC;YACD,SAAS,CAAC,MAAM,CAAC,GAAG,CAA4B,EAAE,MAAM,CAAC,GAAG,CAA4B,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;AACH,CAAC;AAMD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,SAAoB;IAClD,MAAM,IAAI,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAoB;IACvD,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,MAA+B,EAC/B,QAAiC;IAEjC,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC;QACrC,CAAC,CAAC,MAAM,CAAC,iBAA6B;QACtC,CAAC,CAAC,EAAE,CACP,CAAC;IAEF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,SAAS,KAAK,CAAC,MAA+B,EAAE,MAA+B,EAAE,IAAY;QAC3F,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAE/C,+CAA+C;YAC/C,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,oCAAoC,CAAC,CAAC;gBAC9D,SAAS;YACX,CAAC;YAED,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;gBACrB,0BAA0B;gBAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,UAAU,CAAC,CAAC;YACtC,CAAC;iBAAM,IACL,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACtF,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EACtF,CAAC;gBACD,6BAA6B;gBAC7B,KAAK,CAAC,MAAM,CAAC,GAAG,CAA4B,EAAE,MAAM,CAAC,GAAG,CAA4B,EAAE,QAAQ,CAAC,CAAC;YAClG,CAAC;iBAAM,CAAC;gBACN,4EAA4E;gBAC5E,wEAAwE;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC3D,CAAC"}
@@ -474,7 +474,7 @@ export declare class PostUpdateMigrator {
474
474
  * Get the content of a named hook template.
475
475
  * Used by init.ts to share canonical hook content without duplication.
476
476
  */
477
- getHookContent(name: 'session-start' | 'compaction-recovery' | 'external-operation-gate' | 'deferral-detector' | 'slopcheck-guard' | 'post-action-reflection' | 'external-communication-guard' | 'scope-coherence-collector' | 'scope-coherence-checkpoint' | 'claim-intercept' | 'claim-intercept-response' | 'telegram-topic-context' | 'response-review' | 'auto-approve-permissions' | 'skill-usage-telemetry' | 'build-stop-hook'): string;
477
+ getHookContent(name: 'session-start' | 'compaction-recovery' | 'external-operation-gate' | 'deferral-detector' | 'slopcheck-guard' | 'post-action-reflection' | 'external-communication-guard' | 'scope-coherence-collector' | 'scope-coherence-checkpoint' | 'claim-intercept' | 'claim-intercept-response' | 'telegram-topic-context' | 'response-review' | 'stop-gate-router' | 'auto-approve-permissions' | 'skill-usage-telemetry' | 'build-stop-hook'): string;
478
478
  /** Public accessor for grounding-before-messaging hook content (used by init.ts) */
479
479
  getGroundingBeforeMessagingPublic(): string;
480
480
  /** Public accessor for convergence-check script content (used by init.ts) */
@@ -542,6 +542,7 @@ export declare class PostUpdateMigrator {
542
542
  private getFreeTextGuardHook;
543
543
  private getClaimInterceptHook;
544
544
  private getResponseReviewHook;
545
+ private getStopGateRouterHook;
545
546
  private getClaimInterceptResponseHook;
546
547
  private getSkillUsageTelemetryHook;
547
548
  private getBuildStopHook;
@@ -1 +1 @@
1
- {"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"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"}
@@ -1671,6 +1671,13 @@ export class PostUpdateMigrator {
1671
1671
  catch (err) {
1672
1672
  result.errors.push(`response-review.js: ${err instanceof Error ? err.message : String(err)}`);
1673
1673
  }
1674
+ try {
1675
+ fs.writeFileSync(path.join(instarHooksDir, 'stop-gate-router.js'), this.getStopGateRouterHook(), { mode: 0o755 });
1676
+ result.upgraded.push('hooks/instar/stop-gate-router.js (unjustified Stop gate router)');
1677
+ }
1678
+ catch (err) {
1679
+ result.errors.push(`stop-gate-router.js: ${err instanceof Error ? err.message : String(err)}`);
1680
+ }
1674
1681
  try {
1675
1682
  fs.writeFileSync(path.join(instarHooksDir, 'auto-approve-permissions.js'), this.getAutoApprovePermissionsHook(), { mode: 0o755 });
1676
1683
  result.upgraded.push('hooks/instar/auto-approve-permissions.js (subagent permission unblocking)');
@@ -1785,6 +1792,7 @@ export class PostUpdateMigrator {
1785
1792
  'scope-coherence-collector.js', 'scope-coherence-checkpoint.js',
1786
1793
  'instructions-loaded-tracker.js', 'subagent-start-tracker.js',
1787
1794
  'free-text-guard.sh', 'claim-intercept.js', 'claim-intercept-response.js', 'response-review.js',
1795
+ 'stop-gate-router.js',
1788
1796
  'auto-approve-permissions.js',
1789
1797
  ];
1790
1798
  // Check if we're still on the old flat layout (hooks directly in .instar/hooks/)
@@ -2112,15 +2120,23 @@ export class PostUpdateMigrator {
2112
2120
  const stopEntries = hooks.Stop;
2113
2121
  const hasAutonomousHook = stopEntries.some(e => e.hooks?.some(h => h.command?.includes('autonomous-stop-hook')));
2114
2122
  if (!hasAutonomousHook) {
2115
- // Must be first in the Stop chain so it blocks before other hooks run
2116
- hooks.Stop.unshift({
2123
+ // Keep stop-gate-router first when present so shadow telemetry sees every
2124
+ // Stop event before legacy autonomous blocking can short-circuit the chain.
2125
+ const autonomousEntry = {
2117
2126
  matcher: '',
2118
2127
  hooks: [{
2119
2128
  type: 'command',
2120
2129
  command: 'bash ${CLAUDE_PROJECT_DIR}/.claude/skills/autonomous/hooks/autonomous-stop-hook.sh',
2121
2130
  timeout: 10000,
2122
2131
  }],
2123
- });
2132
+ };
2133
+ const stopGateIndex = stopEntries.findIndex(e => e.hooks?.some(h => h.command?.includes('stop-gate-router.js')));
2134
+ if (stopGateIndex >= 0) {
2135
+ stopEntries.splice(stopGateIndex + 1, 0, autonomousEntry);
2136
+ }
2137
+ else {
2138
+ stopEntries.unshift(autonomousEntry);
2139
+ }
2124
2140
  result.upgraded.push('.claude/settings.json: registered autonomous stop hook (structural enforcement)');
2125
2141
  patched = true;
2126
2142
  }
@@ -3544,6 +3560,23 @@ Create worktrees for collaborator repos with \`instar worktree create <branch>\`
3544
3560
  this.migrateSettingsHookPaths(hooks.PostToolUse, result);
3545
3561
  patched = true;
3546
3562
  }
3563
+ {
3564
+ const stopHooks = (hooks.Stop ?? []);
3565
+ const hasStopGateRouter = stopHooks.some(e => e.hooks?.some(h => h.command?.includes('stop-gate-router.js')));
3566
+ if (!hasStopGateRouter) {
3567
+ stopHooks.unshift({
3568
+ matcher: '',
3569
+ hooks: [{
3570
+ type: 'command',
3571
+ command: 'node ${CLAUDE_PROJECT_DIR}/.instar/hooks/instar/stop-gate-router.js',
3572
+ timeout: 5000,
3573
+ }],
3574
+ });
3575
+ hooks.Stop = stopHooks;
3576
+ patched = true;
3577
+ result.upgraded.push('.claude/settings.json: added Stop stop-gate-router hook');
3578
+ }
3579
+ }
3547
3580
  if (hooks.Stop) {
3548
3581
  this.migrateSettingsHookPaths(hooks.Stop, result);
3549
3582
  patched = true;
@@ -4188,6 +4221,7 @@ Create worktrees for collaborator repos with \`instar worktree create <branch>\`
4188
4221
  case 'claim-intercept-response': return this.getClaimInterceptResponseHook();
4189
4222
  case 'telegram-topic-context': return this.getTelegramTopicContextHook();
4190
4223
  case 'response-review': return this.getResponseReviewHook();
4224
+ case 'stop-gate-router': return this.getStopGateRouterHook();
4191
4225
  case 'auto-approve-permissions': return this.getAutoApprovePermissionsHook();
4192
4226
  case 'skill-usage-telemetry': return this.getSkillUsageTelemetryHook();
4193
4227
  case 'build-stop-hook': return this.getBuildStopHook();
@@ -6711,6 +6745,175 @@ process.stdin.on('end', async () => {
6711
6745
  process.exit(0);
6712
6746
  }
6713
6747
  });
6748
+ `;
6749
+ }
6750
+ getStopGateRouterHook() {
6751
+ const port = this.config.port;
6752
+ return `#!/usr/bin/env node
6753
+ // Unjustified Stop Gate router.
6754
+ //
6755
+ // Thin client: reads Stop-hook JSON from stdin, asks the local Instar server
6756
+ // for hot-path state, and in shadow/enforce mode submits trusted evidence
6757
+ // metadata to /internal/stop-gate/evaluate. Shadow mode only records telemetry;
6758
+ // enforce mode blocks only on a server-side "continue" decision.
6759
+
6760
+ const _r = require;
6761
+ const fs = _r('fs');
6762
+ const path = _r('path');
6763
+ const childProcess = _r('child_process');
6764
+
6765
+ const projectDir = process.env.CLAUDE_PROJECT_DIR || process.cwd();
6766
+ const configPath = path.join(projectDir, '.instar', 'config.json');
6767
+ let serverPort = ${port};
6768
+ let authToken = '';
6769
+ try {
6770
+ const cfg = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
6771
+ serverPort = cfg.port || ${port};
6772
+ authToken = cfg.authToken || '';
6773
+ } catch {}
6774
+
6775
+ function postJson(urlPath, payload, timeoutMs) {
6776
+ const controller = new AbortController();
6777
+ const timer = setTimeout(function () { controller.abort(); }, timeoutMs);
6778
+ return fetch('http://127.0.0.1:' + serverPort + urlPath, {
6779
+ method: 'POST',
6780
+ headers: {
6781
+ 'Content-Type': 'application/json',
6782
+ 'Authorization': 'Bearer ' + authToken,
6783
+ },
6784
+ body: JSON.stringify(payload),
6785
+ signal: controller.signal,
6786
+ }).then(async function (res) {
6787
+ clearTimeout(timer);
6788
+ if (!res.ok) throw new Error('http ' + res.status);
6789
+ return res.json();
6790
+ }, function (err) {
6791
+ clearTimeout(timer);
6792
+ throw err;
6793
+ });
6794
+ }
6795
+
6796
+ function getJson(urlPath, timeoutMs) {
6797
+ const controller = new AbortController();
6798
+ const timer = setTimeout(function () { controller.abort(); }, timeoutMs);
6799
+ return fetch('http://127.0.0.1:' + serverPort + urlPath, {
6800
+ headers: { 'Authorization': 'Bearer ' + authToken },
6801
+ signal: controller.signal,
6802
+ }).then(async function (res) {
6803
+ clearTimeout(timer);
6804
+ if (!res.ok) throw new Error('http ' + res.status);
6805
+ return res.json();
6806
+ }, function (err) {
6807
+ clearTimeout(timer);
6808
+ throw err;
6809
+ });
6810
+ }
6811
+
6812
+ function git(args) {
6813
+ try {
6814
+ return childProcess.execFileSync('git', ['-C', projectDir].concat(args), {
6815
+ encoding: 'utf-8',
6816
+ timeout: 800,
6817
+ stdio: ['ignore', 'pipe', 'ignore'],
6818
+ }).trim();
6819
+ } catch {
6820
+ return '';
6821
+ }
6822
+ }
6823
+
6824
+ function firstLine(value) {
6825
+ return String(value || '').split(/\\r?\\n/).filter(Boolean)[0] || null;
6826
+ }
6827
+
6828
+ function listEvidenceArtifacts(sessionStartTs) {
6829
+ const out = git(['ls-files']);
6830
+ if (!out) return [];
6831
+ const files = out.split(/\\r?\\n/).filter(function (file) {
6832
+ if (!file) return false;
6833
+ if (!/\\.(md|markdown|json|jsonl|txt)$/i.test(file)) return false;
6834
+ return /(^|\\/)(docs\\/specs|specs|plans?|tasks?|upgrades|MEMORY\\.md|AGENTS\\.md)|spec|plan|handoff|todo|next|round/i.test(file);
6835
+ }).slice(0, 30);
6836
+ return files.map(function (file) {
6837
+ const introducingCommit = firstLine(git(['log', '--follow', '--format=%H', '--reverse', '--', file]));
6838
+ const latestCommit = firstLine(git(['log', '--format=%H', '-1', '--', file]));
6839
+ let createdThisSession = false;
6840
+ let modifiedThisSession = false;
6841
+ if (sessionStartTs && latestCommit) {
6842
+ const ts = Number(firstLine(git(['show', '-s', '--format=%ct', latestCommit])) || '0') * 1000;
6843
+ modifiedThisSession = ts >= sessionStartTs;
6844
+ if (introducingCommit) {
6845
+ const createdTs = Number(firstLine(git(['show', '-s', '--format=%ct', introducingCommit])) || '0') * 1000;
6846
+ createdThisSession = createdTs >= sessionStartTs;
6847
+ }
6848
+ }
6849
+ return {
6850
+ path: file,
6851
+ introducingCommit: introducingCommit,
6852
+ latestCommit: latestCommit,
6853
+ createdThisSession: createdThisSession,
6854
+ modifiedThisSession: modifiedThisSession,
6855
+ };
6856
+ });
6857
+ }
6858
+
6859
+ function buildSignals(stopReason, message) {
6860
+ const text = String(stopReason || '') + '\\n' + String(message || '');
6861
+ return {
6862
+ mentionsContextLimit: /context|window|token|compact/i.test(text),
6863
+ mentionsFreshSession: /fresh session|new session|restart|continue in a new/i.test(text),
6864
+ claimsShouldStopForContext: /stop|pause|wrap up|hand off/i.test(text) && /context|fresh|compact/i.test(text),
6865
+ };
6866
+ }
6867
+
6868
+ function exitOpen() {
6869
+ process.exit(0);
6870
+ }
6871
+
6872
+ let data = '';
6873
+ process.stdin.on('data', function (chunk) { data += chunk; });
6874
+ process.stdin.on('end', async function () {
6875
+ let input;
6876
+ try {
6877
+ input = data ? JSON.parse(data) : {};
6878
+ } catch {
6879
+ exitOpen();
6880
+ return;
6881
+ }
6882
+
6883
+ if (input.stop_hook_active) exitOpen();
6884
+ const sessionId = String(input.session_id || input.sessionId || process.env.INSTAR_SESSION_ID || 'unknown');
6885
+
6886
+ try {
6887
+ const hot = await getJson('/internal/stop-gate/hot-path?session=' + encodeURIComponent(sessionId), 1500);
6888
+ if (!hot || hot.killSwitch || hot.mode === 'off' || hot.compactionInFlight) exitOpen();
6889
+
6890
+ const message = String(input.last_assistant_message || '');
6891
+ const stopReason = String(input.stop_reason || input.reason || message || '');
6892
+ const evidenceMetadata = {
6893
+ artifacts: listEvidenceArtifacts(hot.sessionStartTs || null),
6894
+ signals: buildSignals(stopReason, message),
6895
+ sessionStartTs: hot.sessionStartTs || null,
6896
+ };
6897
+
6898
+ const result = await postJson('/internal/stop-gate/evaluate', {
6899
+ sessionId: sessionId,
6900
+ evidenceMetadata: evidenceMetadata,
6901
+ untrustedContent: {
6902
+ stopReason: stopReason,
6903
+ recentTurns: message ? [{ source: 'agent', text: message }] : [],
6904
+ },
6905
+ }, 2500);
6906
+
6907
+ if (hot.mode === 'enforce' && result && result.decision === 'continue' && result.reminder) {
6908
+ process.stdout.write(JSON.stringify({ decision: 'block', reason: result.reminder }));
6909
+ process.exit(2);
6910
+ return;
6911
+ }
6912
+ exitOpen();
6913
+ } catch {
6914
+ exitOpen();
6915
+ }
6916
+ });
6714
6917
  `;
6715
6918
  }
6716
6919
  getClaimInterceptResponseHook() {
@@ -6942,6 +7145,68 @@ if [ "\$PHASE" = "complete" ] || [ "\$PHASE" = "failed" ] || [ "\$PHASE" = "esca
6942
7145
  exit 0
6943
7146
  fi
6944
7147
 
7148
+ # ── Session-scope ownership (BUILD-STOP-HOOK-SESSION-SCOPING-SPEC) ───────────
7149
+ # build-state stamps the owning session (tmux name + Claude session UUID) at /build
7150
+ # start. Only the OWNER session's Stop should be blocked; any other concurrent
7151
+ # session of the same agent must approve-exit WITHOUT spending the owner's
7152
+ # reinforcement budget. This closes the cross-session stop-hook leak + budget drain.
7153
+ HOOK_INPUT=\$(cat 2>/dev/null || echo "")
7154
+ HOOK_SESSION=\$(printf '%s' "\$HOOK_INPUT" | python3 -c "import sys,json
7155
+ try: print((json.load(sys.stdin) or {}).get('session_id','') or '')
7156
+ except Exception: print('')" 2>/dev/null)
7157
+
7158
+ # Resolve MY tmux session name (the stable, cwd-independent owner address).
7159
+ # Test seams: INSTAR_HOOK_TMUX_SESSION (if set, even empty, wins);
7160
+ # INSTAR_HOOK_NO_TMUX=1 forces empty.
7161
+ if [ "\${INSTAR_HOOK_NO_TMUX:-}" = "1" ]; then
7162
+ MY_TMUX=""
7163
+ elif [ -n "\${INSTAR_HOOK_TMUX_SESSION+x}" ]; then
7164
+ MY_TMUX="\${INSTAR_HOOK_TMUX_SESSION}"
7165
+ else
7166
+ MY_TMUX=\$(tmux display-message -p '#S' 2>/dev/null || echo "")
7167
+ fi
7168
+
7169
+ OWNERSHIP=\$(STATE_FILE="\$STATE_FILE" MY_TMUX="\$MY_TMUX" HOOK_SESSION="\$HOOK_SESSION" python3 -c "
7170
+ import json, os, sys
7171
+ try:
7172
+ state = json.load(open(os.environ['STATE_FILE']))
7173
+ except Exception:
7174
+ print('approve'); sys.exit(0)
7175
+ owner = state.get('owner') or {}
7176
+ o_tmux = owner.get('tmux') or ''
7177
+ o_sess = owner.get('session') or ''
7178
+ my_tmux = os.environ.get('MY_TMUX', '')
7179
+ my_sess = os.environ.get('HOOK_SESSION', '')
7180
+
7181
+ # (a) No owner stamped -> conservative no-adopt: approve, never claim ownership.
7182
+ if not o_tmux and not o_sess:
7183
+ print('approve'); sys.exit(0)
7184
+
7185
+ # (b)/(c) Owner stamped: block only the proven owner. A session that cannot match
7186
+ # (including one with no resolvable identity) is approved -> never trap, no drain.
7187
+ is_owner = (bool(o_tmux) and o_tmux == my_tmux) or (bool(o_sess) and o_sess == my_sess)
7188
+ if not is_owner:
7189
+ print('approve'); sys.exit(0)
7190
+
7191
+ # Owner confirmed. Restart reconcile: ONLY on a confirmed tmux-owner match whose
7192
+ # session UUID rotated (restart) do we update owner.session. The write is gated
7193
+ # strictly behind the tmux match, so a non-owner can never clobber owner.session.
7194
+ if o_tmux and o_tmux == my_tmux and my_sess and o_sess != my_sess:
7195
+ owner['session'] = my_sess
7196
+ state['owner'] = owner
7197
+ try:
7198
+ with open(os.environ['STATE_FILE'], 'w') as f:
7199
+ json.dump(state, f, indent=2)
7200
+ except Exception:
7201
+ pass
7202
+ print('owner')
7203
+ " 2>/dev/null)
7204
+
7205
+ if [ "\$OWNERSHIP" != "owner" ]; then
7206
+ echo '{"decision":"approve"}'
7207
+ exit 0
7208
+ fi
7209
+
6945
7210
  # Check and update reinforcement counter
6946
7211
  RESULT=\$(python3 -c "
6947
7212
  import json, sys