open-multi-agent-kit 0.99.0 → 1.2.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 (464) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/README.md +3 -3
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js +1 -0
  5. package/dist/bun/cli.js.map +1 -1
  6. package/dist/bun/register-bundled-coding-agent.d.ts +10 -0
  7. package/dist/bun/register-bundled-coding-agent.d.ts.map +1 -0
  8. package/dist/bun/register-bundled-coding-agent.js +12 -0
  9. package/dist/bun/register-bundled-coding-agent.js.map +1 -0
  10. package/dist/cli/args.d.ts +1 -1
  11. package/dist/cli/args.d.ts.map +1 -1
  12. package/dist/cli/args.js +1 -1
  13. package/dist/cli/args.js.map +1 -1
  14. package/dist/cli/help.d.ts.map +1 -1
  15. package/dist/cli/help.js +2 -1
  16. package/dist/cli/help.js.map +1 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +14 -2
  19. package/dist/cli.js.map +1 -1
  20. package/dist/commands/neo-cli.d.ts +9 -0
  21. package/dist/commands/neo-cli.d.ts.map +1 -0
  22. package/dist/commands/neo-cli.js +61 -0
  23. package/dist/commands/neo-cli.js.map +1 -0
  24. package/dist/coordination/awareness.d.ts +32 -0
  25. package/dist/coordination/awareness.d.ts.map +1 -0
  26. package/dist/coordination/awareness.js +55 -0
  27. package/dist/coordination/awareness.js.map +1 -0
  28. package/dist/coordination/broker.d.ts +79 -0
  29. package/dist/coordination/broker.d.ts.map +1 -0
  30. package/dist/coordination/broker.js +195 -0
  31. package/dist/coordination/broker.js.map +1 -0
  32. package/dist/coordination/index.d.ts +16 -0
  33. package/dist/coordination/index.d.ts.map +1 -0
  34. package/dist/coordination/index.js +16 -0
  35. package/dist/coordination/index.js.map +1 -0
  36. package/dist/coordination/integration.d.ts +59 -0
  37. package/dist/coordination/integration.d.ts.map +1 -0
  38. package/dist/coordination/integration.js +126 -0
  39. package/dist/coordination/integration.js.map +1 -0
  40. package/dist/coordination/operation.d.ts +106 -0
  41. package/dist/coordination/operation.d.ts.map +1 -0
  42. package/dist/coordination/operation.js +179 -0
  43. package/dist/coordination/operation.js.map +1 -0
  44. package/dist/coordination/resource.d.ts +33 -0
  45. package/dist/coordination/resource.d.ts.map +1 -0
  46. package/dist/coordination/resource.js +89 -0
  47. package/dist/coordination/resource.js.map +1 -0
  48. package/dist/coordination/session.d.ts +74 -0
  49. package/dist/coordination/session.d.ts.map +1 -0
  50. package/dist/coordination/session.js +143 -0
  51. package/dist/coordination/session.js.map +1 -0
  52. package/dist/coordination/types.d.ts +68 -0
  53. package/dist/coordination/types.d.ts.map +1 -0
  54. package/dist/coordination/types.js +26 -0
  55. package/dist/coordination/types.js.map +1 -0
  56. package/dist/core/agent-session.d.ts +29 -2
  57. package/dist/core/agent-session.d.ts.map +1 -1
  58. package/dist/core/agent-session.js +135 -37
  59. package/dist/core/agent-session.js.map +1 -1
  60. package/dist/core/bundled-skills.d.ts +4 -0
  61. package/dist/core/bundled-skills.d.ts.map +1 -0
  62. package/dist/core/bundled-skills.js +32 -0
  63. package/dist/core/bundled-skills.js.map +1 -0
  64. package/dist/core/cli-diagnostics.d.ts +6 -0
  65. package/dist/core/cli-diagnostics.d.ts.map +1 -0
  66. package/dist/core/cli-diagnostics.js +20 -0
  67. package/dist/core/cli-diagnostics.js.map +1 -0
  68. package/dist/core/compaction/control-state.d.ts +41 -0
  69. package/dist/core/compaction/control-state.d.ts.map +1 -0
  70. package/dist/core/compaction/control-state.js +85 -0
  71. package/dist/core/compaction/control-state.js.map +1 -0
  72. package/dist/core/compaction/fallback.d.ts +60 -0
  73. package/dist/core/compaction/fallback.d.ts.map +1 -0
  74. package/dist/core/compaction/fallback.js +117 -0
  75. package/dist/core/compaction/fallback.js.map +1 -0
  76. package/dist/core/compaction/index.d.ts +2 -0
  77. package/dist/core/compaction/index.d.ts.map +1 -1
  78. package/dist/core/compaction/index.js +2 -0
  79. package/dist/core/compaction/index.js.map +1 -1
  80. package/dist/core/context-budget-headroom-candidates.d.ts +16 -1
  81. package/dist/core/context-budget-headroom-candidates.d.ts.map +1 -1
  82. package/dist/core/context-budget-headroom-candidates.js +31 -13
  83. package/dist/core/context-budget-headroom-candidates.js.map +1 -1
  84. package/dist/core/context-budget-headroom-types.d.ts +7 -1
  85. package/dist/core/context-budget-headroom-types.d.ts.map +1 -1
  86. package/dist/core/context-budget-headroom-types.js +0 -1
  87. package/dist/core/context-budget-headroom-types.js.map +1 -1
  88. package/dist/core/context-budget-headroom.d.ts +22 -0
  89. package/dist/core/context-budget-headroom.d.ts.map +1 -1
  90. package/dist/core/context-budget-headroom.js +46 -2
  91. package/dist/core/context-budget-headroom.js.map +1 -1
  92. package/dist/core/context-budget-v2-global-pass.d.ts +21 -0
  93. package/dist/core/context-budget-v2-global-pass.d.ts.map +1 -0
  94. package/dist/core/context-budget-v2-global-pass.js +203 -0
  95. package/dist/core/context-budget-v2-global-pass.js.map +1 -0
  96. package/dist/core/context-budget-v2-input-validation.d.ts +4 -0
  97. package/dist/core/context-budget-v2-input-validation.d.ts.map +1 -0
  98. package/dist/core/context-budget-v2-input-validation.js +79 -0
  99. package/dist/core/context-budget-v2-input-validation.js.map +1 -0
  100. package/dist/core/context-budget-v2-observability.d.ts +15 -0
  101. package/dist/core/context-budget-v2-observability.d.ts.map +1 -0
  102. package/dist/core/context-budget-v2-observability.js +35 -0
  103. package/dist/core/context-budget-v2-observability.js.map +1 -0
  104. package/dist/core/context-budget-v2-planned-items.d.ts +17 -0
  105. package/dist/core/context-budget-v2-planned-items.d.ts.map +1 -0
  106. package/dist/core/context-budget-v2-planned-items.js +59 -0
  107. package/dist/core/context-budget-v2-planned-items.js.map +1 -0
  108. package/dist/core/context-budget-v2-planner.d.ts.map +1 -1
  109. package/dist/core/context-budget-v2-planner.js +69 -51
  110. package/dist/core/context-budget-v2-planner.js.map +1 -1
  111. package/dist/core/context-budget-v2-scoring.d.ts +7 -1
  112. package/dist/core/context-budget-v2-scoring.d.ts.map +1 -1
  113. package/dist/core/context-budget-v2-scoring.js.map +1 -1
  114. package/dist/core/context-budget-v2-selection.d.ts +22 -3
  115. package/dist/core/context-budget-v2-selection.d.ts.map +1 -1
  116. package/dist/core/context-budget-v2-selection.js +41 -59
  117. package/dist/core/context-budget-v2-selection.js.map +1 -1
  118. package/dist/core/context-budget-v2-tiers.d.ts.map +1 -1
  119. package/dist/core/context-budget-v2-tiers.js +9 -42
  120. package/dist/core/context-budget-v2-tiers.js.map +1 -1
  121. package/dist/core/context-budget-v2-types.d.ts +14 -2
  122. package/dist/core/context-budget-v2-types.d.ts.map +1 -1
  123. package/dist/core/context-budget-v2-types.js +6 -1
  124. package/dist/core/context-budget-v2-types.js.map +1 -1
  125. package/dist/core/extensions/bundled-virtual-modules.d.ts +15 -0
  126. package/dist/core/extensions/bundled-virtual-modules.d.ts.map +1 -0
  127. package/dist/core/extensions/bundled-virtual-modules.js +63 -0
  128. package/dist/core/extensions/bundled-virtual-modules.js.map +1 -0
  129. package/dist/core/extensions/loader.d.ts.map +1 -1
  130. package/dist/core/extensions/loader.js +2 -42
  131. package/dist/core/extensions/loader.js.map +1 -1
  132. package/dist/core/extensions/runner.d.ts +1 -0
  133. package/dist/core/extensions/runner.d.ts.map +1 -1
  134. package/dist/core/extensions/runner.js +6 -0
  135. package/dist/core/extensions/runner.js.map +1 -1
  136. package/dist/core/extensions/types.d.ts +10 -0
  137. package/dist/core/extensions/types.d.ts.map +1 -1
  138. package/dist/core/extensions/types.js.map +1 -1
  139. package/dist/core/index.d.ts +2 -1
  140. package/dist/core/index.d.ts.map +1 -1
  141. package/dist/core/index.js +2 -1
  142. package/dist/core/index.js.map +1 -1
  143. package/dist/core/loadout-runtime.d.ts +2 -8
  144. package/dist/core/loadout-runtime.d.ts.map +1 -1
  145. package/dist/core/loadout-runtime.js.map +1 -1
  146. package/dist/core/mcp/client.d.ts +27 -6
  147. package/dist/core/mcp/client.d.ts.map +1 -1
  148. package/dist/core/mcp/client.js +80 -20
  149. package/dist/core/mcp/client.js.map +1 -1
  150. package/dist/core/mcp/manager.d.ts +10 -1
  151. package/dist/core/mcp/manager.d.ts.map +1 -1
  152. package/dist/core/mcp/manager.js +68 -9
  153. package/dist/core/mcp/manager.js.map +1 -1
  154. package/dist/core/mcp/protocol.d.ts +9 -3
  155. package/dist/core/mcp/protocol.d.ts.map +1 -1
  156. package/dist/core/mcp/protocol.js +61 -15
  157. package/dist/core/mcp/protocol.js.map +1 -1
  158. package/dist/core/mcp/stdio-transport.d.ts +12 -1
  159. package/dist/core/mcp/stdio-transport.d.ts.map +1 -1
  160. package/dist/core/mcp/stdio-transport.js +30 -2
  161. package/dist/core/mcp/stdio-transport.js.map +1 -1
  162. package/dist/core/mcp-descriptor-injection.d.ts +26 -0
  163. package/dist/core/mcp-descriptor-injection.d.ts.map +1 -0
  164. package/dist/core/mcp-descriptor-injection.js +25 -0
  165. package/dist/core/mcp-descriptor-injection.js.map +1 -0
  166. package/dist/core/mcp-public-presets.d.ts +1 -3
  167. package/dist/core/mcp-public-presets.d.ts.map +1 -1
  168. package/dist/core/mcp-public-presets.js +3 -15
  169. package/dist/core/mcp-public-presets.js.map +1 -1
  170. package/dist/core/model-registry.d.ts.map +1 -1
  171. package/dist/core/model-registry.js +24 -3
  172. package/dist/core/model-registry.js.map +1 -1
  173. package/dist/core/neo/catalog.d.ts +20 -0
  174. package/dist/core/neo/catalog.d.ts.map +1 -0
  175. package/dist/core/neo/catalog.js +50 -0
  176. package/dist/core/neo/catalog.js.map +1 -0
  177. package/dist/core/neo/setup.d.ts +3 -0
  178. package/dist/core/neo/setup.d.ts.map +1 -0
  179. package/dist/core/neo/setup.js +47 -0
  180. package/dist/core/neo/setup.js.map +1 -0
  181. package/dist/core/provider-default-models.d.ts +2 -0
  182. package/dist/core/provider-default-models.d.ts.map +1 -1
  183. package/dist/core/provider-default-models.js +2 -0
  184. package/dist/core/provider-default-models.js.map +1 -1
  185. package/dist/core/provider-display-names.d.ts.map +1 -1
  186. package/dist/core/provider-display-names.js +2 -0
  187. package/dist/core/provider-display-names.js.map +1 -1
  188. package/dist/core/provider-error-classification.d.ts +57 -0
  189. package/dist/core/provider-error-classification.d.ts.map +1 -0
  190. package/dist/core/provider-error-classification.js +103 -0
  191. package/dist/core/provider-error-classification.js.map +1 -0
  192. package/dist/core/provider-resilience.d.ts +10 -0
  193. package/dist/core/provider-resilience.d.ts.map +1 -1
  194. package/dist/core/provider-resilience.js +36 -3
  195. package/dist/core/provider-resilience.js.map +1 -1
  196. package/dist/core/provider-usage-commandcode.d.ts +9 -0
  197. package/dist/core/provider-usage-commandcode.d.ts.map +1 -0
  198. package/dist/core/provider-usage-commandcode.js +198 -0
  199. package/dist/core/provider-usage-commandcode.js.map +1 -0
  200. package/dist/core/provider-usage-devin.d.ts +5 -3
  201. package/dist/core/provider-usage-devin.d.ts.map +1 -1
  202. package/dist/core/provider-usage-devin.js +15 -5
  203. package/dist/core/provider-usage-devin.js.map +1 -1
  204. package/dist/core/provider-usage-types.d.ts +1 -1
  205. package/dist/core/provider-usage-types.d.ts.map +1 -1
  206. package/dist/core/provider-usage-types.js.map +1 -1
  207. package/dist/core/provider-usage.d.ts.map +1 -1
  208. package/dist/core/provider-usage.js +6 -0
  209. package/dist/core/provider-usage.js.map +1 -1
  210. package/dist/core/reasoning-router-resolver.d.ts +7 -0
  211. package/dist/core/reasoning-router-resolver.d.ts.map +1 -1
  212. package/dist/core/reasoning-router-resolver.js +21 -3
  213. package/dist/core/reasoning-router-resolver.js.map +1 -1
  214. package/dist/core/reasoning-router-v4.d.ts +8 -5
  215. package/dist/core/reasoning-router-v4.d.ts.map +1 -1
  216. package/dist/core/reasoning-router-v4.js +8 -5
  217. package/dist/core/reasoning-router-v4.js.map +1 -1
  218. package/dist/core/resource-admission.d.ts +36 -0
  219. package/dist/core/resource-admission.d.ts.map +1 -1
  220. package/dist/core/resource-admission.js +59 -0
  221. package/dist/core/resource-admission.js.map +1 -1
  222. package/dist/core/resource-loader.d.ts.map +1 -1
  223. package/dist/core/resource-loader.js +2 -2
  224. package/dist/core/resource-loader.js.map +1 -1
  225. package/dist/core/run-usage-ledger.d.ts +47 -0
  226. package/dist/core/run-usage-ledger.d.ts.map +1 -0
  227. package/dist/core/run-usage-ledger.js +162 -0
  228. package/dist/core/run-usage-ledger.js.map +1 -0
  229. package/dist/core/run-usage-operation.d.ts +8 -0
  230. package/dist/core/run-usage-operation.d.ts.map +1 -0
  231. package/dist/core/run-usage-operation.js +12 -0
  232. package/dist/core/run-usage-operation.js.map +1 -0
  233. package/dist/core/sdk.d.ts.map +1 -1
  234. package/dist/core/sdk.js +5 -6
  235. package/dist/core/sdk.js.map +1 -1
  236. package/dist/core/session-compaction-service.d.ts +15 -0
  237. package/dist/core/session-compaction-service.d.ts.map +1 -1
  238. package/dist/core/session-compaction-service.js +17 -4
  239. package/dist/core/session-compaction-service.js.map +1 -1
  240. package/dist/core/session-failure-cause.d.ts.map +1 -1
  241. package/dist/core/session-failure-cause.js +14 -5
  242. package/dist/core/session-failure-cause.js.map +1 -1
  243. package/dist/core/session-prompt-lifecycle.d.ts +6 -0
  244. package/dist/core/session-prompt-lifecycle.d.ts.map +1 -1
  245. package/dist/core/session-prompt-lifecycle.js +47 -2
  246. package/dist/core/session-prompt-lifecycle.js.map +1 -1
  247. package/dist/core/session-termination.d.ts.map +1 -1
  248. package/dist/core/session-termination.js +4 -2
  249. package/dist/core/session-termination.js.map +1 -1
  250. package/dist/core/subagent-lane-authority.d.ts +28 -0
  251. package/dist/core/subagent-lane-authority.d.ts.map +1 -0
  252. package/dist/core/subagent-lane-authority.js +119 -0
  253. package/dist/core/subagent-lane-authority.js.map +1 -0
  254. package/dist/core/subagent-lane-contract.d.ts +114 -0
  255. package/dist/core/subagent-lane-contract.d.ts.map +1 -0
  256. package/dist/core/subagent-lane-contract.js +18 -0
  257. package/dist/core/subagent-lane-contract.js.map +1 -0
  258. package/dist/core/subagent-lane-launcher.d.ts +3 -6
  259. package/dist/core/subagent-lane-launcher.d.ts.map +1 -1
  260. package/dist/core/subagent-lane-launcher.js +53 -12
  261. package/dist/core/subagent-lane-launcher.js.map +1 -1
  262. package/dist/core/subagent-orchestration.d.ts +4 -17
  263. package/dist/core/subagent-orchestration.d.ts.map +1 -1
  264. package/dist/core/subagent-orchestration.js.map +1 -1
  265. package/dist/core/todo-runtime-state.d.ts +12 -0
  266. package/dist/core/todo-runtime-state.d.ts.map +1 -1
  267. package/dist/core/todo-runtime-state.js +23 -0
  268. package/dist/core/todo-runtime-state.js.map +1 -1
  269. package/dist/core/verified-run/broker.d.ts.map +1 -1
  270. package/dist/core/verified-run/broker.js +4 -1
  271. package/dist/core/verified-run/broker.js.map +1 -1
  272. package/dist/core/workload-permit-pool.d.ts +1 -1
  273. package/dist/core/workload-permit-pool.d.ts.map +1 -1
  274. package/dist/core/workload-permit-pool.js +3 -0
  275. package/dist/core/workload-permit-pool.js.map +1 -1
  276. package/dist/guardrails/strict-evidence-approval-adapter.d.ts +34 -0
  277. package/dist/guardrails/strict-evidence-approval-adapter.d.ts.map +1 -0
  278. package/dist/guardrails/strict-evidence-approval-adapter.js +70 -0
  279. package/dist/guardrails/strict-evidence-approval-adapter.js.map +1 -0
  280. package/dist/index.d.ts +5 -0
  281. package/dist/index.d.ts.map +1 -1
  282. package/dist/index.js +3 -0
  283. package/dist/index.js.map +1 -1
  284. package/dist/main.d.ts.map +1 -1
  285. package/dist/main.js +11 -18
  286. package/dist/main.js.map +1 -1
  287. package/dist/metacognition/calibration-selective.d.ts +78 -0
  288. package/dist/metacognition/calibration-selective.d.ts.map +1 -0
  289. package/dist/metacognition/calibration-selective.js +161 -0
  290. package/dist/metacognition/calibration-selective.js.map +1 -0
  291. package/dist/metacognition/calibration.d.ts +62 -0
  292. package/dist/metacognition/calibration.d.ts.map +1 -0
  293. package/dist/metacognition/calibration.js +122 -0
  294. package/dist/metacognition/calibration.js.map +1 -0
  295. package/dist/metacognition/checkpoint.d.ts +60 -0
  296. package/dist/metacognition/checkpoint.d.ts.map +1 -0
  297. package/dist/metacognition/checkpoint.js +57 -0
  298. package/dist/metacognition/checkpoint.js.map +1 -0
  299. package/dist/metacognition/context7.d.ts +48 -0
  300. package/dist/metacognition/context7.d.ts.map +1 -0
  301. package/dist/metacognition/context7.js +154 -0
  302. package/dist/metacognition/context7.js.map +1 -0
  303. package/dist/metacognition/decision.d.ts +44 -0
  304. package/dist/metacognition/decision.d.ts.map +1 -0
  305. package/dist/metacognition/decision.js +111 -0
  306. package/dist/metacognition/decision.js.map +1 -0
  307. package/dist/metacognition/evaluation.d.ts +73 -0
  308. package/dist/metacognition/evaluation.d.ts.map +1 -0
  309. package/dist/metacognition/evaluation.js +97 -0
  310. package/dist/metacognition/evaluation.js.map +1 -0
  311. package/dist/metacognition/index.d.ts +31 -0
  312. package/dist/metacognition/index.d.ts.map +1 -0
  313. package/dist/metacognition/index.js +31 -0
  314. package/dist/metacognition/index.js.map +1 -0
  315. package/dist/metacognition/knowledge-action.d.ts +43 -0
  316. package/dist/metacognition/knowledge-action.d.ts.map +1 -0
  317. package/dist/metacognition/knowledge-action.js +60 -0
  318. package/dist/metacognition/knowledge-action.js.map +1 -0
  319. package/dist/metacognition/knowledge.d.ts +84 -0
  320. package/dist/metacognition/knowledge.d.ts.map +1 -0
  321. package/dist/metacognition/knowledge.js +165 -0
  322. package/dist/metacognition/knowledge.js.map +1 -0
  323. package/dist/metacognition/obligations.d.ts +82 -0
  324. package/dist/metacognition/obligations.d.ts.map +1 -0
  325. package/dist/metacognition/obligations.js +139 -0
  326. package/dist/metacognition/obligations.js.map +1 -0
  327. package/dist/metacognition/observation-validity.d.ts +83 -0
  328. package/dist/metacognition/observation-validity.d.ts.map +1 -0
  329. package/dist/metacognition/observation-validity.js +118 -0
  330. package/dist/metacognition/observation-validity.js.map +1 -0
  331. package/dist/metacognition/observe.d.ts +45 -0
  332. package/dist/metacognition/observe.d.ts.map +1 -0
  333. package/dist/metacognition/observe.js +59 -0
  334. package/dist/metacognition/observe.js.map +1 -0
  335. package/dist/metacognition/policy.d.ts +53 -0
  336. package/dist/metacognition/policy.d.ts.map +1 -0
  337. package/dist/metacognition/policy.js +155 -0
  338. package/dist/metacognition/policy.js.map +1 -0
  339. package/dist/metacognition/predictions.d.ts +78 -0
  340. package/dist/metacognition/predictions.d.ts.map +1 -0
  341. package/dist/metacognition/predictions.js +181 -0
  342. package/dist/metacognition/predictions.js.map +1 -0
  343. package/dist/metacognition/retrieval.d.ts +53 -0
  344. package/dist/metacognition/retrieval.d.ts.map +1 -0
  345. package/dist/metacognition/retrieval.js +170 -0
  346. package/dist/metacognition/retrieval.js.map +1 -0
  347. package/dist/metacognition/risk.d.ts +48 -0
  348. package/dist/metacognition/risk.d.ts.map +1 -0
  349. package/dist/metacognition/risk.js +165 -0
  350. package/dist/metacognition/risk.js.map +1 -0
  351. package/dist/metacognition/route-economics.d.ts +95 -0
  352. package/dist/metacognition/route-economics.d.ts.map +1 -0
  353. package/dist/metacognition/route-economics.js +110 -0
  354. package/dist/metacognition/route-economics.js.map +1 -0
  355. package/dist/metacognition/runtime-bridge.d.ts +54 -0
  356. package/dist/metacognition/runtime-bridge.d.ts.map +1 -0
  357. package/dist/metacognition/runtime-bridge.js +140 -0
  358. package/dist/metacognition/runtime-bridge.js.map +1 -0
  359. package/dist/metacognition/skills.d.ts +42 -0
  360. package/dist/metacognition/skills.d.ts.map +1 -0
  361. package/dist/metacognition/skills.js +220 -0
  362. package/dist/metacognition/skills.js.map +1 -0
  363. package/dist/metacognition/state.d.ts +110 -0
  364. package/dist/metacognition/state.d.ts.map +1 -0
  365. package/dist/metacognition/state.js +52 -0
  366. package/dist/metacognition/state.js.map +1 -0
  367. package/dist/metacognition/validation.d.ts +19 -0
  368. package/dist/metacognition/validation.d.ts.map +1 -0
  369. package/dist/metacognition/validation.js +58 -0
  370. package/dist/metacognition/validation.js.map +1 -0
  371. package/dist/metacognition/verification.d.ts +93 -0
  372. package/dist/metacognition/verification.d.ts.map +1 -0
  373. package/dist/metacognition/verification.js +132 -0
  374. package/dist/metacognition/verification.js.map +1 -0
  375. package/dist/metacognition/verifier.d.ts +49 -0
  376. package/dist/metacognition/verifier.d.ts.map +1 -0
  377. package/dist/metacognition/verifier.js +88 -0
  378. package/dist/metacognition/verifier.js.map +1 -0
  379. package/dist/modes/acp/acp-agent.d.ts +24 -0
  380. package/dist/modes/acp/acp-agent.d.ts.map +1 -0
  381. package/dist/modes/acp/acp-agent.js +133 -0
  382. package/dist/modes/acp/acp-agent.js.map +1 -0
  383. package/dist/modes/acp/acp-mode.d.ts +4 -0
  384. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  385. package/dist/modes/acp/acp-mode.js +34 -0
  386. package/dist/modes/acp/acp-mode.js.map +1 -0
  387. package/dist/modes/acp/acp-session.d.ts +4 -0
  388. package/dist/modes/acp/acp-session.d.ts.map +1 -0
  389. package/dist/modes/acp/acp-session.js +76 -0
  390. package/dist/modes/acp/acp-session.js.map +1 -0
  391. package/dist/modes/acp/acp-transport.d.ts +5 -0
  392. package/dist/modes/acp/acp-transport.d.ts.map +1 -0
  393. package/dist/modes/acp/acp-transport.js +90 -0
  394. package/dist/modes/acp/acp-transport.js.map +1 -0
  395. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  396. package/dist/modes/interactive/interactive-mode.js +1 -0
  397. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  398. package/dist/observation/identity.d.ts +14 -0
  399. package/dist/observation/identity.d.ts.map +1 -0
  400. package/dist/observation/identity.js +29 -0
  401. package/dist/observation/identity.js.map +1 -0
  402. package/dist/observation/index.d.ts +13 -0
  403. package/dist/observation/index.d.ts.map +1 -0
  404. package/dist/observation/index.js +13 -0
  405. package/dist/observation/index.js.map +1 -0
  406. package/dist/observation/observe-mode.d.ts +46 -0
  407. package/dist/observation/observe-mode.d.ts.map +1 -0
  408. package/dist/observation/observe-mode.js +83 -0
  409. package/dist/observation/observe-mode.js.map +1 -0
  410. package/dist/observation/store.d.ts +53 -0
  411. package/dist/observation/store.d.ts.map +1 -0
  412. package/dist/observation/store.js +126 -0
  413. package/dist/observation/store.js.map +1 -0
  414. package/dist/observation/types.d.ts +72 -0
  415. package/dist/observation/types.d.ts.map +1 -0
  416. package/dist/observation/types.js +9 -0
  417. package/dist/observation/types.js.map +1 -0
  418. package/dist/observation/view.d.ts +39 -0
  419. package/dist/observation/view.d.ts.map +1 -0
  420. package/dist/observation/view.js +173 -0
  421. package/dist/observation/view.js.map +1 -0
  422. package/docs/audit-revalidation-2026-09-17.md +77 -0
  423. package/docs/devin-harness.md +33 -4
  424. package/docs/ecraf-normalization.md +83 -0
  425. package/docs/metacognition.md +51 -0
  426. package/docs/model-catalog-refresh.md +110 -1
  427. package/docs/models.md +1 -1
  428. package/docs/neo.md +134 -0
  429. package/docs/providers.md +125 -6
  430. package/docs/run-usage-ledger.md +56 -0
  431. package/docs/runtime-algorithms.md +151 -3
  432. package/docs/skills.md +1 -1
  433. package/docs/usage.md +2 -1
  434. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  435. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  436. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  437. package/examples/extensions/gondolin/package-lock.json +2 -2
  438. package/examples/extensions/gondolin/package.json +1 -1
  439. package/examples/extensions/sandbox/package-lock.json +2 -2
  440. package/examples/extensions/sandbox/package.json +1 -1
  441. package/examples/extensions/subagent/adaptive-agent-runtime.ts +14 -1
  442. package/examples/extensions/subagent/graph-result.ts +48 -0
  443. package/examples/extensions/subagent/index.ts +246 -111
  444. package/examples/extensions/subagent/managed-process-tree.ts +42 -0
  445. package/examples/extensions/subagent/managed-process.test.ts +24 -0
  446. package/examples/extensions/subagent/managed-process.ts +93 -112
  447. package/examples/extensions/subagent/subagent-runtime-types.ts +17 -1
  448. package/examples/extensions/subagent/subagent-stream.ts +161 -0
  449. package/examples/extensions/terminal-browser/README.md +54 -0
  450. package/examples/extensions/terminal-browser/bridge-protocol.ts +29 -0
  451. package/examples/extensions/terminal-browser/bridge.ts +219 -0
  452. package/examples/extensions/terminal-browser/browser-surface.ts +288 -0
  453. package/examples/extensions/terminal-browser/index.ts +215 -0
  454. package/examples/extensions/terminal-browser/placeholders.ts +49 -0
  455. package/examples/extensions/with-deps/package-lock.json +2 -2
  456. package/examples/extensions/with-deps/package.json +1 -1
  457. package/npm-shrinkwrap.json +18 -18
  458. package/package.json +8 -7
  459. package/resources/neo/skills/omk-browser/SKILL.md +32 -0
  460. package/resources/neo/skills/omk-code-review/SKILL.md +24 -0
  461. package/resources/neo/skills/omk-computeruse/SKILL.md +34 -0
  462. package/resources/neo/skills/omk-mcp-setup/SKILL.md +48 -0
  463. package/resources/neo/skills/omk-research/SKILL.md +24 -0
  464. package/resources/neo/skills/omk-site/SKILL.md +28 -0
@@ -18,7 +18,7 @@ import { basename, dirname, join as joinPath } from "node:path";
18
18
  import { isDeepStrictEqual } from "node:util";
19
19
  import { getVisionRouteModel } from "omk-agent-core";
20
20
  import { clampThinkingLevel, cleanupSessionResources, deriveContextPromptCacheKey, getSupportedThinkingLevels, isBuiltinStreamFn, modelsAreEqual, resetApiProviders, } from "omk-ai";
21
- import { APP_NAME, VERSION } from "../config.js";
21
+ import { APP_NAME, getAgentDir, VERSION } from "../config.js";
22
22
  import { theme } from "../modes/interactive/theme/theme.js";
23
23
  import { stripFrontmatter } from "../utils/frontmatter.js";
24
24
  import { resolvePath } from "../utils/paths.js";
@@ -31,8 +31,9 @@ import { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage } from "./auth
31
31
  import { parseBangInvocation } from "./bang-skill-invocation.js";
32
32
  import { getCompactionHeadroomThreshold } from "./compaction/compaction.js";
33
33
  import { createCompactionHysteresisConfig, createCompactionHysteresisState, stepCompactionHysteresis, } from "./compaction/hysteresis.js";
34
- import { calculateContextTokens, collectEntriesForBranchSummary, compact, estimateContextTokens, estimateProjectedContextTokens, generateBranchSummary, prepareCompaction, resolveCompactionModel, } from "./compaction/index.js";
34
+ import { calculateContextTokens, collectEntriesForBranchSummary, compact, estimateContextTokens, estimateProjectedContextTokens, generateBranchSummary, prepareCompaction, resolveCompactionModel, summarizeWithFallback, } from "./compaction/index.js";
35
35
  import { summarizeWithOAuthRecovery } from "./compaction/oauth-recovery.js";
36
+ import { overflowRetryBlocked } from "./compaction/overflow-retry-guard.js";
36
37
  import { compactionEmitWillRetry } from "./compaction/resume-policy.js";
37
38
  import { isSessionModelOverflow, shouldSkipCompactionCheck } from "./compaction-gate.js";
38
39
  import { estimateToolResultReserve, } from "./context-budget-reserved-tokens.js";
@@ -47,11 +48,14 @@ import { ExtensionRunner, wrapRegisteredTools, } from "./extensions/index.js";
47
48
  import { emitSessionShutdownEvent } from "./extensions/runner.js";
48
49
  import { assertTextChatModelForCompletion, grokHarnessAutoApplyEnabled, isGrokOAuthProvider, selectGrokHarnessSkills, } from "./grok-harness.js";
49
50
  import { grokPlaybookAppendForProvider } from "./grok-playbook.js";
51
+ import { loadHookInventory } from "./hook-inventory.js";
50
52
  import { captureHostResourceSnapshot } from "./host-resource-snapshot.js";
51
53
  import { decideLoadoutAccess } from "./loadout-access-policy.js";
54
+ import { buildCapabilityInventory } from "./loadout-runtime.js";
52
55
  import { loadMcpServerConfigs } from "./mcp/config.js";
53
56
  import { McpManager } from "./mcp/manager.js";
54
57
  import { buildRuntimeProvenance } from "./runtime-provenance.js";
58
+ import { createSubagentLaneAuthority } from "./subagent-lane-authority.js";
55
59
  import { TurnMetricsSink } from "./turn-metrics.js";
56
60
  /** Values that disable a session-level feature through its environment variable. */
57
61
  const DISABLED_ENV_VALUES = new Set(["0", "false", "off", "disable", "disabled"]);
@@ -94,12 +98,12 @@ import { classifyPromptCacheTransition } from "./prompt-cache.js";
94
98
  import * as promptSettlement from "./prompt-settlement.js";
95
99
  import { expandPromptTemplate } from "./prompt-templates.js";
96
100
  import { isQuotaExhaustionMessage, isStickySafetyModel, isUpstreamUnavailableMessage, pickFailoverCandidate, resolveFailoverCandidates, resolveProviderResilience, sameModelRouteCandidates, shouldEjectStickySafetyModel, shouldHonorSafetyFailover, stickySafetyBlockMessage, } from "./provider-resilience.js";
97
- import { computeRetryDelayMs, failoverModelKey, isFailoverTriggerError, isRetryableAssistantError, nextRetryAttempt, retryBudgetForAssistantError, } from "./provider-retry.js";
101
+ import { computeRetryDelayMs, failoverModelKey, isEmptyStreamedCompletion, isFailoverTriggerError, isRetryableAssistantError, nextRetryAttempt, retryBudgetForAssistantError, } from "./provider-retry.js";
98
102
  import { getBiasStepsForCell, parseRouterBiasSnapshot } from "./reasoning-router-bias.js";
99
103
  import { classifyTaskV4, deriveRouterFeedbackFeaturesV4, resolveThinkingLevelV4WithUncertainty, TASK_CLASS_THINKING_LEVELS_V4, } from "./reasoning-router-v4.js";
100
104
  import { redactSensitiveText, redactSensitiveTextForced } from "./redaction.js";
101
105
  import { getRepositoryRouterLearningPaths } from "./repository-learning-scope.js";
102
- import { decideResourceAdmission } from "./resource-admission.js";
106
+ import { createResourcePressureStabilizer, decideResourceAdmission, evaluateResourcePressure, rederiveResourceAdmissionForPressure, } from "./resource-admission.js";
103
107
  import { resolveResourceGovernorSettings } from "./resource-governor-settings.js";
104
108
  import { admissionObservationFacts, classificationObservationFacts, ResourceObservationJournal, settledObservationFacts, snapshotObservationFacts, soundObservationFacts, } from "./resource-observation-journal.js";
105
109
  import { decideResourceSafetyGate, RESOURCE_PRESSURE_REQUIRED_ACTION } from "./resource-safety-gate.js";
@@ -120,6 +124,7 @@ import { assembleSessionSystemPrompt } from "./session-system-prompt.js";
120
124
  import { classifySessionTermination, } from "./session-termination.js";
121
125
  import { createSyntheticSourceInfo } from "./source-info.js";
122
126
  import { buildSystemPromptPlan } from "./system-prompt.js";
127
+ import { todoControlState } from "./todo-runtime-state.js";
123
128
  import { createLocalBashOperations } from "./tools/bash.js";
124
129
  import { createAllToolDefinitions } from "./tools/index.js";
125
130
  import { createToolDefinitionFromAgentTool } from "./tools/tool-definition-wrapper.js";
@@ -289,6 +294,10 @@ export class AgentSession {
289
294
  _resourceObservationJournals = new Map();
290
295
  _latestResourcePromptRunId = null;
291
296
  _lastResourceAdmission = null;
297
+ // Per-session pressure hysteresis (audit §16.1): escalation is immediate,
298
+ // recovery requires consecutive healthier probes so the applied cap does
299
+ // not flap around a threshold between prompts.
300
+ _resourcePressureStabilizer;
292
301
  _workloadPermitPool;
293
302
  _pendingRuntimeTerminationCause;
294
303
  _activeRunToolTermination;
@@ -392,6 +401,10 @@ export class AgentSession {
392
401
  pendingToolCallIds: () => this.agent.state.pendingToolCalls,
393
402
  getUserMessageText: (message) => this._getUserMessageText(message),
394
403
  cwd: this._cwd,
404
+ // Host control authority for preserved provenance: the TODO ledger is
405
+ // the only production producer today; the service binds its snapshot to
406
+ // the compaction commit boundary and discards stale summaries.
407
+ controlState: todoControlState,
395
408
  invalidateContextBudget: () => this._invalidateContextBudgetCache({ type: "transcriptRepair" }),
396
409
  refreshAgentMessages: () => {
397
410
  this.agent.state.messages = this.sessionManager.buildSessionContext().messages;
@@ -861,8 +874,13 @@ export class AgentSession {
861
874
  this._overflowRecoveryAttempts = 0;
862
875
  }
863
876
  // Reset retry counter immediately on successful assistant response
864
- // This prevents accumulation across multiple LLM calls within a turn
865
- if (assistantMsg.stopReason !== "error" && this._retryAttempt > 0) {
877
+ // This prevents accumulation across multiple LLM calls within a turn.
878
+ // An empty streamed completion wears a success shape (stop=stop, zero
879
+ // usable output) but is a dead stream — counting it as success reset
880
+ // the budget every cycle and retried forever (union-alpha relay loop).
881
+ if (assistantMsg.stopReason !== "error" &&
882
+ !isEmptyStreamedCompletion(assistantMsg) &&
883
+ this._retryAttempt > 0) {
866
884
  this._emit({
867
885
  type: "auto_retry_end",
868
886
  success: true,
@@ -1371,16 +1389,19 @@ export class AgentSession {
1371
1389
  * Extract the most recent user query text from conversation messages.
1372
1390
  * Returns undefined when no user message exists or content is empty.
1373
1391
  * Handles both string content and multimodal (array) content.
1392
+ *
1393
+ * The scan walks the whole transcript backwards and stops at the first user
1394
+ * message. A fixed tail window cannot work here: tool results are their own
1395
+ * messages, so a single turn that calls two tools already leaves
1396
+ * `[user, assistant, toolResult, toolResult]` and buries the task four deep.
1397
+ * Losing it mid-turn collapses every skill to the neutral relevance score and
1398
+ * degrades ranking to catalogue order, precisely while tools are running and
1399
+ * a matching skill matters most.
1374
1400
  */
1375
1401
  _extractCurrentQuery() {
1376
1402
  const messages = this.messages;
1377
- if (messages.length === 0) {
1378
- return undefined;
1379
- }
1380
- // Scan recent messages (last 3) for the most recent user message
1381
- const recent = messages.slice(-3);
1382
- for (let i = recent.length - 1; i >= 0; i--) {
1383
- const msg = recent[i];
1403
+ for (let i = messages.length - 1; i >= 0; i--) {
1404
+ const msg = messages[i];
1384
1405
  if (!msg || !("role" in msg) || msg.role !== "user") {
1385
1406
  continue;
1386
1407
  }
@@ -1576,8 +1597,12 @@ export class AgentSession {
1576
1597
  }
1577
1598
  const snapshot = await captureHostResourceSnapshot(probeOptions);
1578
1599
  const decision = decideResourceAdmission({ snapshot, config: resolved.admission, configuredCaps });
1600
+ const stabilized = this._stabilizeResourcePressure(snapshot, resolved);
1601
+ const appliedDecision = stabilized === decision.pressure
1602
+ ? decision
1603
+ : rederiveResourceAdmissionForPressure(decision, resolved.admission.caps, configuredCaps, stabilized);
1579
1604
  if (this._latestResourcePromptRunId === promptRunId) {
1580
- this._lastResourceAdmission = decision;
1605
+ this._lastResourceAdmission = appliedDecision;
1581
1606
  }
1582
1607
  resourceObservations?.record("resource_snapshot_v1", snapshotObservationFacts(snapshot));
1583
1608
  resourceObservations?.record("resource_admission_v1", admissionObservationFacts(decision));
@@ -1587,7 +1612,7 @@ export class AgentSession {
1587
1612
  this.agent.maxToolConcurrency = cap;
1588
1613
  },
1589
1614
  });
1590
- const lease = this._resourceLeaseController.acquire({ promptRunId, decision });
1615
+ const lease = this._resourceLeaseController.acquire({ promptRunId, decision: appliedDecision });
1591
1616
  resourceObservations?.record("resource_lease_acquired_v1", {
1592
1617
  decisionId: decision.decisionId,
1593
1618
  appliedToolCap: decision.maxToolConcurrency,
@@ -1598,6 +1623,15 @@ export class AgentSession {
1598
1623
  return null;
1599
1624
  }
1600
1625
  }
1626
+ /**
1627
+ * Feed one snapshot's raw pressure through the per-session stabilizer.
1628
+ * Created lazily so sessions that never probe carry no state; the first
1629
+ * observation installs its own level directly (no warmup lag).
1630
+ */
1631
+ _stabilizeResourcePressure(snapshot, resolved) {
1632
+ this._resourcePressureStabilizer ??= createResourcePressureStabilizer();
1633
+ return this._resourcePressureStabilizer.observe(evaluateResourcePressure(snapshot, resolved.admission.thresholds));
1634
+ }
1601
1635
  _openResourceObservations(promptRunId) {
1602
1636
  this._latestResourcePromptRunId = promptRunId;
1603
1637
  try {
@@ -1633,6 +1667,30 @@ export class AgentSession {
1633
1667
  getCurrentResourceAdmission() {
1634
1668
  return this._lastResourceAdmission;
1635
1669
  }
1670
+ /**
1671
+ * Spec 020 Req1 — canonical subagent lane authority bound to this session.
1672
+ * Rebuilt on each call so it tracks the live admission decision, shared
1673
+ * permit pool, and open prompt run. Extension tool contexts read it through
1674
+ * `ctx.getSubagentLaneAuthority()`.
1675
+ */
1676
+ _getSubagentLaneAuthority() {
1677
+ const hookInventory = loadHookInventory(getAgentDir());
1678
+ const sessionView = {
1679
+ _baseToolDefinitions: this._baseToolDefinitions,
1680
+ _extensionRunner: this._extensionRunner,
1681
+ _customTools: this._customTools,
1682
+ };
1683
+ const inventory = buildCapabilityInventory(sessionView, this._resourceLoader, this._cwd, hookInventory);
1684
+ return createSubagentLaneAuthority({
1685
+ runId: this._activeRunId ?? `session-${this.sessionManager.getSessionId() ?? "unknown"}`,
1686
+ promptRunId: this._promptLifecycle.activePromptRunId,
1687
+ decision: this._lastResourceAdmission,
1688
+ permitPool: this.workloadPermitPool,
1689
+ inventory,
1690
+ signal: this.agent?.signal,
1691
+ noteDetachedChild: () => this._promptLifecycle.noteDetachedChild(),
1692
+ });
1693
+ }
1636
1694
  /** §19.4 read-only SDK surface: capture a fresh host resource snapshot. */
1637
1695
  async getHostResourceSnapshot() {
1638
1696
  const resolved = resolveResourceGovernorSettings(this.settingsManager.getResourceGovernorSettings());
@@ -1741,12 +1799,15 @@ export class AgentSession {
1741
1799
  if (this._isRetryableError(msg) && (await this._prepareRetry(msg))) {
1742
1800
  return true;
1743
1801
  }
1744
- if (msg.stopReason === "error" && this._retryAttempt > 0) {
1802
+ // The retry budget is exhausted without a real answer. This covers the
1803
+ // empty-streamed-completion path whose success-shaped stopReason
1804
+ // otherwise left the UI pinned in the retrying state forever.
1805
+ if (this._retryAttempt > 0) {
1745
1806
  this._emit({
1746
1807
  type: "auto_retry_end",
1747
1808
  success: false,
1748
1809
  attempt: this._retryAttempt,
1749
- finalError: msg.errorMessage,
1810
+ finalError: msg.errorMessage ?? "The provider returned an empty response.",
1750
1811
  });
1751
1812
  this._retryAttempt = 0;
1752
1813
  this._refusedModels.clear();
@@ -3008,8 +3069,13 @@ export class AgentSession {
3008
3069
  /**
3009
3070
  * Effective context window for the upcoming turn.
3010
3071
  * Image-bearing turns with a text-only session model are auto-routed to the
3011
- * vision model (gpt-5.6-luna, 1M) — that window is the real limit. Text-only
3012
- * turns keep the session model's (typically much larger) window.
3072
+ * vision model (gpt-5.6-luna, 1M), so the request has to fit both windows and
3073
+ * the binding limit is the smaller one. Session windows fall on both sides of
3074
+ * 1M: most catalogued models are smaller (median near 300K) and keep their own
3075
+ * window as the limit, while the larger-than-1M models are the ones the clamp
3076
+ * exists for — without it their threshold is computed against a window the
3077
+ * vision route will not honour, and the request overflows before compaction
3078
+ * fires. Text-only turns keep the session model's window untouched.
3013
3079
  */
3014
3080
  _effectiveTurnContextWindow(pendingMessages, sessionWindow) {
3015
3081
  // Vision routing keys off the full transcript, not just the pending turn:
@@ -3246,13 +3312,29 @@ export class AgentSession {
3246
3312
  details = extensionCompaction.details;
3247
3313
  }
3248
3314
  else {
3249
- const compactResult = await this._summarizeCompaction({
3315
+ // Summarization can fail in a way no retry fixes (quota). The ladder
3316
+ // tries the live session model, then a deterministic trim, because a
3317
+ // failed compaction over the context window strands the whole run.
3318
+ const signal = this._autoCompactionAbortController.signal;
3319
+ const primaryModel = compactionModel;
3320
+ const compactResult = await summarizeWithFallback({
3250
3321
  preparation,
3251
- model: compactionModel,
3252
- apiKey,
3253
- headers,
3254
- signal: this._autoCompactionAbortController.signal,
3255
- reason,
3322
+ primaryModel,
3323
+ sessionModel: this.model,
3324
+ isAborted: () => signal.aborted,
3325
+ summarize: async (model) => {
3326
+ const auth = model.provider === primaryModel.provider && model.id === primaryModel.id
3327
+ ? { apiKey, headers }
3328
+ : await this._getCompactionRequestAuth(model);
3329
+ return this._summarizeCompaction({
3330
+ preparation,
3331
+ model,
3332
+ apiKey: auth.apiKey,
3333
+ headers: auth.headers,
3334
+ signal,
3335
+ reason,
3336
+ });
3337
+ },
3256
3338
  });
3257
3339
  summary = compactResult.summary;
3258
3340
  firstKeptEntryId = compactResult.firstKeptEntryId;
@@ -3288,16 +3370,25 @@ export class AgentSession {
3288
3370
  // the compaction_end event (so the TUI flushes its queued messages
3289
3371
  // correctly) and the return value below.
3290
3372
  const resumeMessages = this.agent.state.messages;
3291
- let lastAssistantMsg;
3292
- for (let i = resumeMessages.length - 1; i >= 0; i--) {
3293
- const candidate = resumeMessages[i];
3294
- if (candidate.role === "assistant") {
3295
- lastAssistantMsg = candidate;
3296
- break;
3297
- }
3298
- }
3373
+ const lastAssistantMsg = this._findLastAssistantMessage();
3299
3374
  const endedCleanly = lastAssistantMsg?.stopReason === "stop";
3300
3375
  const willResume = this.agent.hasQueuedMessages() || !endedCleanly;
3376
+ // overflow-retry-guard 배선: 압축 후 재전송 컨텍스트가 창을 확실히 초과하면
3377
+ // 재시도는 프로바이더 왕복만 소모한다 — 정확한 수치 진단과 함께 차단한다.
3378
+ const overflowBlock = willRetry
3379
+ ? overflowRetryBlocked(resumeMessages, this.model?.contextWindow ?? 0)
3380
+ : undefined;
3381
+ if (overflowBlock !== undefined) {
3382
+ this._emit({
3383
+ type: "compaction_end",
3384
+ reason,
3385
+ result,
3386
+ aborted: false,
3387
+ willRetry: false,
3388
+ errorMessage: overflowBlock,
3389
+ });
3390
+ return false;
3391
+ }
3301
3392
  const emitWillRetry = compactionEmitWillRetry(willRetry, willResume);
3302
3393
  this._emit({ type: "compaction_end", reason, result, aborted: false, willRetry: emitWillRetry });
3303
3394
  if (willRetry) {
@@ -3534,6 +3625,10 @@ export class AgentSession {
3534
3625
  },
3535
3626
  getSystemPrompt: () => this.systemPrompt,
3536
3627
  getSystemPromptOptions: () => this._baseSystemPromptOptions,
3628
+ // Spec 020 Req1 — session-bound lane authority for extension tool
3629
+ // contexts (subagent spawn funnel). Rebuilt on demand so it always
3630
+ // sees the live admission decision, permit pool, and prompt run.
3631
+ getSubagentLaneAuthority: () => this._getSubagentLaneAuthority(),
3537
3632
  }, {
3538
3633
  registerProvider: (name, config) => {
3539
3634
  this._modelRegistry.registerProvider(name, config);
@@ -3965,10 +4060,13 @@ export class AgentSession {
3965
4060
  if (attempt === undefined)
3966
4061
  return false;
3967
4062
  this._retryAttempt = attempt;
3968
- // Upstream-unavailable (gateway 5xx / dropped stream): rotate to another
3969
- // authenticated route of the SAME model family so the retry lands on a
3970
- // live endpoint instead of hammering the dead one.
3971
- const rotatedTo = isUpstreamUnavailableMessage(message.errorMessage)
4063
+ // Upstream-unavailable (gateway 5xx / dropped stream / dead relay stream):
4064
+ // rotate to another authenticated route of the SAME model family so the
4065
+ // retry lands on a live endpoint instead of hammering the dead one. An
4066
+ // empty streamed completion is the same dead-stream signature wearing a
4067
+ // success stopReason, so it rotates too — otherwise the retry re-hits the
4068
+ // route that just returned nothing.
4069
+ const rotatedTo = isUpstreamUnavailableMessage(message.errorMessage) || isEmptyStreamedCompletion(message)
3972
4070
  ? await this._maybeRotateModelRoutes()
3973
4071
  : undefined;
3974
4072
  // Content/safety stop (Fable/Opus/Sonnet): switch model BEFORE delay so retry is not same-model refusal.