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,9 +1,9 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-05-26T06:02:13.395Z",
5
- "instarVersion": "1.2.82",
6
- "entryCount": 191,
4
+ "generatedAt": "2026-05-26T17:58:59.304Z",
5
+ "instarVersion": "1.3.0",
6
+ "entryCount": 192,
7
7
  "entries": {
8
8
  "hook:session-start": {
9
9
  "id": "hook:session-start",
@@ -11,7 +11,7 @@
11
11
  "domain": "identity",
12
12
  "sourcePath": "src/core/PostUpdateMigrator.ts",
13
13
  "installedPath": ".instar/hooks/instar/session-start.sh",
14
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
14
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
15
15
  "since": "2025-01-01"
16
16
  },
17
17
  "hook:dangerous-command-guard": {
@@ -20,7 +20,7 @@
20
20
  "domain": "safety",
21
21
  "sourcePath": "src/core/PostUpdateMigrator.ts",
22
22
  "installedPath": ".instar/hooks/instar/dangerous-command-guard.sh",
23
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
23
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
24
24
  "since": "2025-01-01"
25
25
  },
26
26
  "hook:grounding-before-messaging": {
@@ -29,7 +29,7 @@
29
29
  "domain": "safety",
30
30
  "sourcePath": "src/core/PostUpdateMigrator.ts",
31
31
  "installedPath": ".instar/hooks/instar/grounding-before-messaging.sh",
32
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
32
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
33
33
  "since": "2025-01-01"
34
34
  },
35
35
  "hook:compaction-recovery": {
@@ -38,7 +38,7 @@
38
38
  "domain": "identity",
39
39
  "sourcePath": "src/core/PostUpdateMigrator.ts",
40
40
  "installedPath": ".instar/hooks/instar/compaction-recovery.sh",
41
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
41
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
42
42
  "since": "2025-01-01"
43
43
  },
44
44
  "hook:external-operation-gate": {
@@ -47,7 +47,7 @@
47
47
  "domain": "safety",
48
48
  "sourcePath": "src/core/PostUpdateMigrator.ts",
49
49
  "installedPath": ".instar/hooks/instar/external-operation-gate.js",
50
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
50
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
51
51
  "since": "2025-01-01"
52
52
  },
53
53
  "hook:deferral-detector": {
@@ -56,7 +56,7 @@
56
56
  "domain": "safety",
57
57
  "sourcePath": "src/core/PostUpdateMigrator.ts",
58
58
  "installedPath": ".instar/hooks/instar/deferral-detector.js",
59
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
59
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
60
60
  "since": "2025-01-01"
61
61
  },
62
62
  "hook:post-action-reflection": {
@@ -65,7 +65,7 @@
65
65
  "domain": "evolution",
66
66
  "sourcePath": "src/core/PostUpdateMigrator.ts",
67
67
  "installedPath": ".instar/hooks/instar/post-action-reflection.js",
68
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
68
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
69
69
  "since": "2025-01-01"
70
70
  },
71
71
  "hook:external-communication-guard": {
@@ -74,7 +74,7 @@
74
74
  "domain": "safety",
75
75
  "sourcePath": "src/core/PostUpdateMigrator.ts",
76
76
  "installedPath": ".instar/hooks/instar/external-communication-guard.js",
77
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
77
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
78
78
  "since": "2025-01-01"
79
79
  },
80
80
  "hook:scope-coherence-collector": {
@@ -83,7 +83,7 @@
83
83
  "domain": "coherence",
84
84
  "sourcePath": "src/core/PostUpdateMigrator.ts",
85
85
  "installedPath": ".instar/hooks/instar/scope-coherence-collector.js",
86
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
86
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
87
87
  "since": "2025-01-01"
88
88
  },
89
89
  "hook:scope-coherence-checkpoint": {
@@ -92,7 +92,7 @@
92
92
  "domain": "coherence",
93
93
  "sourcePath": "src/core/PostUpdateMigrator.ts",
94
94
  "installedPath": ".instar/hooks/instar/scope-coherence-checkpoint.js",
95
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
95
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
96
96
  "since": "2025-01-01"
97
97
  },
98
98
  "hook:free-text-guard": {
@@ -101,7 +101,7 @@
101
101
  "domain": "safety",
102
102
  "sourcePath": "src/core/PostUpdateMigrator.ts",
103
103
  "installedPath": ".instar/hooks/instar/free-text-guard.sh",
104
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
104
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
105
105
  "since": "2025-01-01"
106
106
  },
107
107
  "hook:claim-intercept": {
@@ -110,7 +110,7 @@
110
110
  "domain": "coherence",
111
111
  "sourcePath": "src/core/PostUpdateMigrator.ts",
112
112
  "installedPath": ".instar/hooks/instar/claim-intercept.js",
113
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
113
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
114
114
  "since": "2025-01-01"
115
115
  },
116
116
  "hook:claim-intercept-response": {
@@ -119,7 +119,16 @@
119
119
  "domain": "coherence",
120
120
  "sourcePath": "src/core/PostUpdateMigrator.ts",
121
121
  "installedPath": ".instar/hooks/instar/claim-intercept-response.js",
122
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
122
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
123
+ "since": "2025-01-01"
124
+ },
125
+ "hook:stop-gate-router": {
126
+ "id": "hook:stop-gate-router",
127
+ "type": "hook",
128
+ "domain": "safety",
129
+ "sourcePath": "src/core/PostUpdateMigrator.ts",
130
+ "installedPath": ".instar/hooks/instar/stop-gate-router.js",
131
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
123
132
  "since": "2025-01-01"
124
133
  },
125
134
  "hook:auto-approve-permissions": {
@@ -128,7 +137,7 @@
128
137
  "domain": "safety",
129
138
  "sourcePath": "src/core/PostUpdateMigrator.ts",
130
139
  "installedPath": ".instar/hooks/instar/auto-approve-permissions.js",
131
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
140
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
132
141
  "since": "2025-01-01"
133
142
  },
134
143
  "job:health-check": {
@@ -392,7 +401,7 @@
392
401
  "type": "route-group",
393
402
  "domain": "monitoring",
394
403
  "sourcePath": "src/server/routes.ts",
395
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
404
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
396
405
  "since": "2025-01-01"
397
406
  },
398
407
  "route-group:agents": {
@@ -400,7 +409,7 @@
400
409
  "type": "route-group",
401
410
  "domain": "sessions",
402
411
  "sourcePath": "src/server/routes.ts",
403
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
412
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
404
413
  "since": "2025-01-01"
405
414
  },
406
415
  "route-group:backups": {
@@ -408,7 +417,7 @@
408
417
  "type": "route-group",
409
418
  "domain": "operations",
410
419
  "sourcePath": "src/server/routes.ts",
411
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
420
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
412
421
  "since": "2025-01-01"
413
422
  },
414
423
  "route-group:git": {
@@ -416,7 +425,7 @@
416
425
  "type": "route-group",
417
426
  "domain": "coordination",
418
427
  "sourcePath": "src/server/routes.ts",
419
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
428
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
420
429
  "since": "2025-01-01"
421
430
  },
422
431
  "route-group:memory": {
@@ -424,7 +433,7 @@
424
433
  "type": "route-group",
425
434
  "domain": "memory",
426
435
  "sourcePath": "src/server/routes.ts",
427
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
436
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
428
437
  "since": "2025-01-01"
429
438
  },
430
439
  "route-group:semantic": {
@@ -432,7 +441,7 @@
432
441
  "type": "route-group",
433
442
  "domain": "memory",
434
443
  "sourcePath": "src/server/routes.ts",
435
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
444
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
436
445
  "since": "2025-01-01"
437
446
  },
438
447
  "route-group:status": {
@@ -440,7 +449,7 @@
440
449
  "type": "route-group",
441
450
  "domain": "monitoring",
442
451
  "sourcePath": "src/server/routes.ts",
443
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
452
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
444
453
  "since": "2025-01-01"
445
454
  },
446
455
  "route-group:capabilities": {
@@ -448,7 +457,7 @@
448
457
  "type": "route-group",
449
458
  "domain": "mapping",
450
459
  "sourcePath": "src/server/routes.ts",
451
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
460
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
452
461
  "since": "2025-01-01"
453
462
  },
454
463
  "route-group:project-map": {
@@ -456,7 +465,7 @@
456
465
  "type": "route-group",
457
466
  "domain": "mapping",
458
467
  "sourcePath": "src/server/routes.ts",
459
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
468
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
460
469
  "since": "2025-01-01"
461
470
  },
462
471
  "route-group:coherence": {
@@ -464,7 +473,7 @@
464
473
  "type": "route-group",
465
474
  "domain": "coherence",
466
475
  "sourcePath": "src/server/routes.ts",
467
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
476
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
468
477
  "since": "2025-01-01"
469
478
  },
470
479
  "route-group:topic-bindings": {
@@ -472,7 +481,7 @@
472
481
  "type": "route-group",
473
482
  "domain": "sessions",
474
483
  "sourcePath": "src/server/routes.ts",
475
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
484
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
476
485
  "since": "2025-01-01"
477
486
  },
478
487
  "route-group:context": {
@@ -480,7 +489,7 @@
480
489
  "type": "route-group",
481
490
  "domain": "context",
482
491
  "sourcePath": "src/server/routes.ts",
483
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
492
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
484
493
  "since": "2025-01-01"
485
494
  },
486
495
  "route-group:scope-coherence": {
@@ -488,7 +497,7 @@
488
497
  "type": "route-group",
489
498
  "domain": "coherence",
490
499
  "sourcePath": "src/server/routes.ts",
491
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
500
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
492
501
  "since": "2025-01-01"
493
502
  },
494
503
  "route-group:canonical-state": {
@@ -496,7 +505,7 @@
496
505
  "type": "route-group",
497
506
  "domain": "state",
498
507
  "sourcePath": "src/server/routes.ts",
499
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
508
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
500
509
  "since": "2025-01-01"
501
510
  },
502
511
  "route-group:ci": {
@@ -504,7 +513,7 @@
504
513
  "type": "route-group",
505
514
  "domain": "monitoring",
506
515
  "sourcePath": "src/server/routes.ts",
507
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
516
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
508
517
  "since": "2025-01-01"
509
518
  },
510
519
  "route-group:sessions": {
@@ -512,7 +521,7 @@
512
521
  "type": "route-group",
513
522
  "domain": "sessions",
514
523
  "sourcePath": "src/server/routes.ts",
515
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
524
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
516
525
  "since": "2025-01-01"
517
526
  },
518
527
  "route-group:jobs": {
@@ -520,7 +529,7 @@
520
529
  "type": "route-group",
521
530
  "domain": "scheduling",
522
531
  "sourcePath": "src/server/routes.ts",
523
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
532
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
524
533
  "since": "2025-01-01"
525
534
  },
526
535
  "route-group:skip-ledger": {
@@ -528,7 +537,7 @@
528
537
  "type": "route-group",
529
538
  "domain": "scheduling",
530
539
  "sourcePath": "src/server/routes.ts",
531
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
540
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
532
541
  "since": "2025-01-01"
533
542
  },
534
543
  "route-group:telegram": {
@@ -536,7 +545,7 @@
536
545
  "type": "route-group",
537
546
  "domain": "communication",
538
547
  "sourcePath": "src/server/routes.ts",
539
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
548
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
540
549
  "since": "2025-01-01"
541
550
  },
542
551
  "route-group:attention": {
@@ -544,7 +553,7 @@
544
553
  "type": "route-group",
545
554
  "domain": "communication",
546
555
  "sourcePath": "src/server/routes.ts",
547
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
556
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
548
557
  "since": "2025-01-01"
549
558
  },
550
559
  "route-group:relationships": {
@@ -552,7 +561,7 @@
552
561
  "type": "route-group",
553
562
  "domain": "relationships",
554
563
  "sourcePath": "src/server/routes.ts",
555
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
564
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
556
565
  "since": "2025-01-01"
557
566
  },
558
567
  "route-group:feedback": {
@@ -560,7 +569,7 @@
560
569
  "type": "route-group",
561
570
  "domain": "feedback",
562
571
  "sourcePath": "src/server/routes.ts",
563
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
572
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
564
573
  "since": "2025-01-01"
565
574
  },
566
575
  "route-group:updates": {
@@ -568,7 +577,7 @@
568
577
  "type": "route-group",
569
578
  "domain": "updates",
570
579
  "sourcePath": "src/server/routes.ts",
571
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
580
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
572
581
  "since": "2025-01-01"
573
582
  },
574
583
  "route-group:dispatches": {
@@ -576,7 +585,7 @@
576
585
  "type": "route-group",
577
586
  "domain": "dispatches",
578
587
  "sourcePath": "src/server/routes.ts",
579
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
588
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
580
589
  "since": "2025-01-01"
581
590
  },
582
591
  "route-group:quota": {
@@ -584,7 +593,7 @@
584
593
  "type": "route-group",
585
594
  "domain": "monitoring",
586
595
  "sourcePath": "src/server/routes.ts",
587
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
596
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
588
597
  "since": "2025-01-01"
589
598
  },
590
599
  "route-group:publishing": {
@@ -592,7 +601,7 @@
592
601
  "type": "route-group",
593
602
  "domain": "publishing",
594
603
  "sourcePath": "src/server/routes.ts",
595
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
604
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
596
605
  "since": "2025-01-01"
597
606
  },
598
607
  "route-group:private-views": {
@@ -600,7 +609,7 @@
600
609
  "type": "route-group",
601
610
  "domain": "publishing",
602
611
  "sourcePath": "src/server/routes.ts",
603
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
612
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
604
613
  "since": "2025-01-01"
605
614
  },
606
615
  "route-group:tunnel": {
@@ -608,7 +617,7 @@
608
617
  "type": "route-group",
609
618
  "domain": "networking",
610
619
  "sourcePath": "src/server/routes.ts",
611
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
620
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
612
621
  "since": "2025-01-01"
613
622
  },
614
623
  "route-group:events": {
@@ -616,7 +625,7 @@
616
625
  "type": "route-group",
617
626
  "domain": "networking",
618
627
  "sourcePath": "src/server/routes.ts",
619
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
628
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
620
629
  "since": "2025-01-01"
621
630
  },
622
631
  "route-group:evolution": {
@@ -624,7 +633,7 @@
624
633
  "type": "route-group",
625
634
  "domain": "evolution",
626
635
  "sourcePath": "src/server/routes.ts",
627
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
636
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
628
637
  "since": "2025-01-01"
629
638
  },
630
639
  "route-group:watchdog": {
@@ -632,7 +641,7 @@
632
641
  "type": "route-group",
633
642
  "domain": "monitoring",
634
643
  "sourcePath": "src/server/routes.ts",
635
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
644
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
636
645
  "since": "2025-01-01"
637
646
  },
638
647
  "route-group:topic-memory": {
@@ -640,7 +649,7 @@
640
649
  "type": "route-group",
641
650
  "domain": "memory",
642
651
  "sourcePath": "src/server/routes.ts",
643
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
652
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
644
653
  "since": "2025-01-01"
645
654
  },
646
655
  "route-group:state-sync": {
@@ -648,7 +657,7 @@
648
657
  "type": "route-group",
649
658
  "domain": "coordination",
650
659
  "sourcePath": "src/server/routes.ts",
651
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
660
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
652
661
  "since": "2025-01-01"
653
662
  },
654
663
  "route-group:intent": {
@@ -656,7 +665,7 @@
656
665
  "type": "route-group",
657
666
  "domain": "intent",
658
667
  "sourcePath": "src/server/routes.ts",
659
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
668
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
660
669
  "since": "2025-01-01"
661
670
  },
662
671
  "route-group:triage": {
@@ -664,7 +673,7 @@
664
673
  "type": "route-group",
665
674
  "domain": "safety",
666
675
  "sourcePath": "src/server/routes.ts",
667
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
676
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
668
677
  "since": "2025-01-01"
669
678
  },
670
679
  "route-group:operations": {
@@ -672,7 +681,7 @@
672
681
  "type": "route-group",
673
682
  "domain": "safety",
674
683
  "sourcePath": "src/server/routes.ts",
675
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
684
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
676
685
  "since": "2025-01-01"
677
686
  },
678
687
  "route-group:sentinel": {
@@ -680,7 +689,7 @@
680
689
  "type": "route-group",
681
690
  "domain": "safety",
682
691
  "sourcePath": "src/server/routes.ts",
683
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
692
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
684
693
  "since": "2025-01-01"
685
694
  },
686
695
  "route-group:trust": {
@@ -688,7 +697,7 @@
688
697
  "type": "route-group",
689
698
  "domain": "safety",
690
699
  "sourcePath": "src/server/routes.ts",
691
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
700
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
692
701
  "since": "2025-01-01"
693
702
  },
694
703
  "route-group:monitoring": {
@@ -696,7 +705,7 @@
696
705
  "type": "route-group",
697
706
  "domain": "monitoring",
698
707
  "sourcePath": "src/server/routes.ts",
699
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
708
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
700
709
  "since": "2025-01-01"
701
710
  },
702
711
  "route-group:commitments": {
@@ -704,7 +713,7 @@
704
713
  "type": "route-group",
705
714
  "domain": "commitments",
706
715
  "sourcePath": "src/server/routes.ts",
707
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
716
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
708
717
  "since": "2025-01-01"
709
718
  },
710
719
  "route-group:episodes": {
@@ -712,7 +721,7 @@
712
721
  "type": "route-group",
713
722
  "domain": "memory",
714
723
  "sourcePath": "src/server/routes.ts",
715
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
724
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
716
725
  "since": "2025-01-01"
717
726
  },
718
727
  "route-group:messages": {
@@ -720,7 +729,7 @@
720
729
  "type": "route-group",
721
730
  "domain": "coordination",
722
731
  "sourcePath": "src/server/routes.ts",
723
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
732
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
724
733
  "since": "2025-01-01"
725
734
  },
726
735
  "route-group:system-reviews": {
@@ -728,7 +737,7 @@
728
737
  "type": "route-group",
729
738
  "domain": "monitoring",
730
739
  "sourcePath": "src/server/routes.ts",
731
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
740
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
732
741
  "since": "2025-01-01"
733
742
  },
734
743
  "route-group:machine-mesh": {
@@ -744,7 +753,7 @@
744
753
  "type": "route-group",
745
754
  "domain": "security",
746
755
  "sourcePath": "src/server/routes.ts",
747
- "contentHash": "8576d7a2b03dc1c83a9acad4415757299153c44f5bbe2a12f0313b6bc2df2b8e",
756
+ "contentHash": "507d24a18bb6a05f2914ac02cba60174b723d1601c5bad6b170fcf1d7cd3b562",
748
757
  "since": "2025-01-01"
749
758
  },
750
759
  "cli:init": {
@@ -984,7 +993,7 @@
984
993
  "type": "template",
985
994
  "domain": "safety",
986
995
  "sourcePath": "src/templates/hooks/build-stop-hook.sh",
987
- "contentHash": "fec59280a0f8631daee042272bb919747521d1e2a10a93f6883ac6bed81c524b",
996
+ "contentHash": "5af759e07c687b3202dd65a941e1a32b9b53364987f02f0614672f1433b3cd6f",
988
997
  "since": "2025-01-01"
989
998
  },
990
999
  "template:compaction-recovery.sh": {
@@ -1040,7 +1049,7 @@
1040
1049
  "type": "template",
1041
1050
  "domain": "safety",
1042
1051
  "sourcePath": "src/templates/hooks/settings-template.json",
1043
- "contentHash": "2cc950f0635f9c3412b768610f690288b466e7ace280285aee2481fbe514f230",
1052
+ "contentHash": "4c077381e850c60397856fdead3d304da1158cea614207f7dd2b784321faacb7",
1044
1053
  "since": "2025-01-01"
1045
1054
  },
1046
1055
  "template:skill-usage-telemetry.sh": {
@@ -1184,7 +1193,7 @@
1184
1193
  "type": "playbook-script",
1185
1194
  "domain": "context",
1186
1195
  "sourcePath": "playbook-scripts/build-state.py",
1187
- "contentHash": "2fa7c09bfc43abe42a1691877c989058daebc885020688feb6ba399bbf352e74",
1196
+ "contentHash": "1d772501d8179dcbdfafb5da3776ed781ec1302b4c07e80d67c9c7822169dc31",
1188
1197
  "since": "2025-01-01"
1189
1198
  },
1190
1199
  "playbook-script:playbook-annotate-context.py": {
@@ -1440,7 +1449,7 @@
1440
1449
  "type": "subsystem",
1441
1450
  "domain": "server",
1442
1451
  "sourcePath": "src/server/AgentServer.ts",
1443
- "contentHash": "823d36d25490f6afb6968e96d27a538ce031dae7d97a7f2c979ddab707d2918a",
1452
+ "contentHash": "8cd98b665356990ea26c422b9bab3f6aee15ce48798d5fe17fff3757fc617213",
1444
1453
  "since": "2025-01-01"
1445
1454
  },
1446
1455
  "subsystem:session-manager": {
@@ -1448,7 +1457,7 @@
1448
1457
  "type": "subsystem",
1449
1458
  "domain": "sessions",
1450
1459
  "sourcePath": "src/core/SessionManager.ts",
1451
- "contentHash": "b0de35800c7eacf06e520b7224d3169b81e8f0293ce65b69047fae3be1befad4",
1460
+ "contentHash": "a689041288c39070fd0d13362193bd4335367cb5a1db5458e3f73a6295b6e4c7",
1452
1461
  "since": "2025-01-01"
1453
1462
  },
1454
1463
  "subsystem:auto-updater": {
@@ -1472,7 +1481,7 @@
1472
1481
  "type": "subsystem",
1473
1482
  "domain": "updates",
1474
1483
  "sourcePath": "src/core/PostUpdateMigrator.ts",
1475
- "contentHash": "bad77b5bab7acab1f4f10870e0ec2e8cf56004a01ec00a05076159e400419a34",
1484
+ "contentHash": "2e8fcd7b3b103e23e5ec42b844dfd225eed3ecd08e5b29ac19f794f80a2b6138",
1476
1485
  "since": "2025-01-01"
1477
1486
  },
1478
1487
  "subsystem:scheduler": {
@@ -404,6 +404,12 @@ This routes feedback to the Instar maintainers automatically. Valid types: \`bug
404
404
  - List: \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/sessions\`
405
405
  - Spawn: \`curl -X POST -H "Authorization: Bearer $AUTH" http://localhost:${port}/sessions/spawn -d '{"name":"task","prompt":"do something"}'\`
406
406
 
407
+ **SessionReaper** — Pressure-aware cleanup of idle-but-alive sessions (sessions parked at a ready prompt, doing nothing, holding memory). Distinct from the crash/zombie reapers: it only acts when the machine is under memory pressure, and it NEVER reaps a session that might be working — it requires positive proof a session is idle (turn complete + at a ready prompt + screen byte-static across several checks + no running process + no transcript growth), and KEEPs on any ambiguity. Ships OFF + dry-run by default (the only monitor that kills on a heuristic).
408
+ - Why it matters: idle sessions pile up across agents until the machine starves and new sessions get "spawn denied" — silently breaking cross-agent messaging. This sweeps them, but only under real pressure.
409
+ - See current state / why each session is kept or flagged: \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/sessions/reaper\`
410
+ - Enable (after reviewing the dry-run log): in \`.instar/config.json\` set \`{"monitoring": {"sessionReaper": {"enabled": true, "dryRun": false}}}\`. Leave \`dryRun: true\` first to watch what it WOULD reap (logged to \`logs/sentinel-events.jsonl\`) without killing anything.
411
+ - Proactive: user asks "why are sessions piling up?" / "clean up idle sessions" / "are we low on memory?" → GET /sessions/reaper for the pressure tier + per-session verdict.
412
+
407
413
  **Multi-Session Autonomy** — I can run multiple autonomous jobs at once, one per topic (default cap 5, set \`autonomousSessions.maxConcurrent\` in config). Each topic's job is isolated, survives restarts, and is keyed on its topic.
408
414
  - What's running: \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/autonomous/sessions\`
409
415
  - The cap + budget gate is checked automatically when a job starts (\`GET /autonomous/can-start\`); a start is refused when at the cap or under budget pressure.
@@ -25,6 +25,68 @@ if [ "$PHASE" = "complete" ] || [ "$PHASE" = "failed" ] || [ "$PHASE" = "escalat
25
25
  exit 0
26
26
  fi
27
27
 
28
+ # ── Session-scope ownership (BUILD-STOP-HOOK-SESSION-SCOPING-SPEC) ───────────
29
+ # build-state stamps the owning session (tmux name + Claude session UUID) at /build
30
+ # start. Only the OWNER session's Stop should be blocked; any other concurrent
31
+ # session of the same agent must approve-exit WITHOUT spending the owner's
32
+ # reinforcement budget. This closes the cross-session stop-hook leak + budget drain.
33
+ HOOK_INPUT=$(cat 2>/dev/null || echo "")
34
+ HOOK_SESSION=$(printf '%s' "$HOOK_INPUT" | python3 -c "import sys,json
35
+ try: print((json.load(sys.stdin) or {}).get('session_id','') or '')
36
+ except Exception: print('')" 2>/dev/null)
37
+
38
+ # Resolve MY tmux session name (the stable, cwd-independent owner address).
39
+ # Test seams: INSTAR_HOOK_TMUX_SESSION (if set, even empty, wins);
40
+ # INSTAR_HOOK_NO_TMUX=1 forces empty.
41
+ if [ "${INSTAR_HOOK_NO_TMUX:-}" = "1" ]; then
42
+ MY_TMUX=""
43
+ elif [ -n "${INSTAR_HOOK_TMUX_SESSION+x}" ]; then
44
+ MY_TMUX="${INSTAR_HOOK_TMUX_SESSION}"
45
+ else
46
+ MY_TMUX=$(tmux display-message -p '#S' 2>/dev/null || echo "")
47
+ fi
48
+
49
+ OWNERSHIP=$(STATE_FILE="$STATE_FILE" MY_TMUX="$MY_TMUX" HOOK_SESSION="$HOOK_SESSION" python3 -c "
50
+ import json, os, sys
51
+ try:
52
+ state = json.load(open(os.environ['STATE_FILE']))
53
+ except Exception:
54
+ print('approve'); sys.exit(0)
55
+ owner = state.get('owner') or {}
56
+ o_tmux = owner.get('tmux') or ''
57
+ o_sess = owner.get('session') or ''
58
+ my_tmux = os.environ.get('MY_TMUX', '')
59
+ my_sess = os.environ.get('HOOK_SESSION', '')
60
+
61
+ # (a) No owner stamped -> conservative no-adopt: approve, never claim ownership.
62
+ if not o_tmux and not o_sess:
63
+ print('approve'); sys.exit(0)
64
+
65
+ # (b)/(c) Owner stamped: block only the proven owner. A session that cannot match
66
+ # (including one with no resolvable identity) is approved -> never trap, no drain.
67
+ is_owner = (bool(o_tmux) and o_tmux == my_tmux) or (bool(o_sess) and o_sess == my_sess)
68
+ if not is_owner:
69
+ print('approve'); sys.exit(0)
70
+
71
+ # Owner confirmed. Restart reconcile: ONLY on a confirmed tmux-owner match whose
72
+ # session UUID rotated (restart) do we update owner.session. The write is gated
73
+ # strictly behind the tmux match, so a non-owner can never clobber owner.session.
74
+ if o_tmux and o_tmux == my_tmux and my_sess and o_sess != my_sess:
75
+ owner['session'] = my_sess
76
+ state['owner'] = owner
77
+ try:
78
+ with open(os.environ['STATE_FILE'], 'w') as f:
79
+ json.dump(state, f, indent=2)
80
+ except Exception:
81
+ pass
82
+ print('owner')
83
+ " 2>/dev/null)
84
+
85
+ if [ "$OWNERSHIP" != "owner" ]; then
86
+ echo '{"decision":"approve"}'
87
+ exit 0
88
+ fi
89
+
28
90
  # Check and update reinforcement counter
29
91
  RESULT=$(python3 -c "
30
92
  import json, sys