@caupulican/pi-adaptative 0.81.39 → 0.81.41

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 (884) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/README.md +2 -0
  3. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts +2 -0
  4. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +1 -1
  5. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js +3 -0
  6. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +1 -1
  7. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.ts +4 -0
  8. package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts +9 -0
  9. package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
  10. package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +290 -107
  11. package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
  12. package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +357 -122
  13. package/dist/bundled-resources/skills/tool-call-repair/references/repair-catalogue.md +2 -2
  14. package/dist/cli/args.d.ts +4 -0
  15. package/dist/cli/args.d.ts.map +1 -1
  16. package/dist/cli/args.js +31 -1
  17. package/dist/cli/args.js.map +1 -1
  18. package/dist/core/agent-directory-layout.d.ts +15 -0
  19. package/dist/core/agent-directory-layout.d.ts.map +1 -0
  20. package/dist/core/agent-directory-layout.js +72 -0
  21. package/dist/core/agent-directory-layout.js.map +1 -0
  22. package/dist/core/agent-paths.d.ts +25 -2
  23. package/dist/core/agent-paths.d.ts.map +1 -1
  24. package/dist/core/agent-paths.js +79 -4
  25. package/dist/core/agent-paths.js.map +1 -1
  26. package/dist/core/agent-session-contracts.d.ts +293 -0
  27. package/dist/core/agent-session-contracts.d.ts.map +1 -0
  28. package/dist/core/agent-session-contracts.js +26 -0
  29. package/dist/core/agent-session-contracts.js.map +1 -0
  30. package/dist/core/agent-session-runtime.d.ts +52 -8
  31. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  32. package/dist/core/agent-session-runtime.js +400 -79
  33. package/dist/core/agent-session-runtime.js.map +1 -1
  34. package/dist/core/agent-session-services.d.ts +1 -0
  35. package/dist/core/agent-session-services.d.ts.map +1 -1
  36. package/dist/core/agent-session-services.js +1 -0
  37. package/dist/core/agent-session-services.js.map +1 -1
  38. package/dist/core/agent-session.d.ts +74 -518
  39. package/dist/core/agent-session.d.ts.map +1 -1
  40. package/dist/core/agent-session.js +370 -1432
  41. package/dist/core/agent-session.js.map +1 -1
  42. package/dist/core/auth-storage.d.ts.map +1 -1
  43. package/dist/core/auth-storage.js +3 -1
  44. package/dist/core/auth-storage.js.map +1 -1
  45. package/dist/core/autonomy/approval-gate.d.ts +3 -2
  46. package/dist/core/autonomy/approval-gate.d.ts.map +1 -1
  47. package/dist/core/autonomy/approval-gate.js +6 -28
  48. package/dist/core/autonomy/approval-gate.js.map +1 -1
  49. package/dist/core/autonomy/bounded-completion.d.ts +1 -1
  50. package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
  51. package/dist/core/autonomy/bounded-completion.js +1 -1
  52. package/dist/core/autonomy/bounded-completion.js.map +1 -1
  53. package/dist/core/autonomy/contracts.d.ts +20 -12
  54. package/dist/core/autonomy/contracts.d.ts.map +1 -1
  55. package/dist/core/autonomy/contracts.js.map +1 -1
  56. package/dist/core/autonomy/foreground-envelope.d.ts +8 -2
  57. package/dist/core/autonomy/foreground-envelope.d.ts.map +1 -1
  58. package/dist/core/autonomy/foreground-envelope.js +8 -25
  59. package/dist/core/autonomy/foreground-envelope.js.map +1 -1
  60. package/dist/core/autonomy/gates.d.ts.map +1 -1
  61. package/dist/core/autonomy/gates.js +8 -10
  62. package/dist/core/autonomy/gates.js.map +1 -1
  63. package/dist/core/autonomy/lane-private-paths.d.ts +2 -0
  64. package/dist/core/autonomy/lane-private-paths.d.ts.map +1 -0
  65. package/dist/core/autonomy/lane-private-paths.js +16 -0
  66. package/dist/core/autonomy/lane-private-paths.js.map +1 -0
  67. package/dist/core/autonomy/lane-tool-surface.d.ts +10 -0
  68. package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
  69. package/dist/core/autonomy/lane-tool-surface.js +48 -9
  70. package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
  71. package/dist/core/autonomy/lane-tracker.d.ts +14 -0
  72. package/dist/core/autonomy/lane-tracker.d.ts.map +1 -1
  73. package/dist/core/autonomy/lane-tracker.js +38 -0
  74. package/dist/core/autonomy/lane-tracker.js.map +1 -1
  75. package/dist/core/autonomy/risk-assessment.d.ts +1 -2
  76. package/dist/core/autonomy/risk-assessment.d.ts.map +1 -1
  77. package/dist/core/autonomy/risk-assessment.js +1 -123
  78. package/dist/core/autonomy/risk-assessment.js.map +1 -1
  79. package/dist/core/autonomy/session-lane-record.d.ts +4 -4
  80. package/dist/core/autonomy/session-lane-record.d.ts.map +1 -1
  81. package/dist/core/autonomy/session-lane-record.js +16 -29
  82. package/dist/core/autonomy/session-lane-record.js.map +1 -1
  83. package/dist/core/autonomy/telemetry-events.d.ts +1 -1
  84. package/dist/core/autonomy/telemetry-events.d.ts.map +1 -1
  85. package/dist/core/autonomy/telemetry-events.js +1 -1
  86. package/dist/core/autonomy/telemetry-events.js.map +1 -1
  87. package/dist/core/autonomy-telemetry.d.ts +7 -7
  88. package/dist/core/autonomy-telemetry.d.ts.map +1 -1
  89. package/dist/core/autonomy-telemetry.js +9 -9
  90. package/dist/core/autonomy-telemetry.js.map +1 -1
  91. package/dist/core/background-lane-controller.d.ts +56 -236
  92. package/dist/core/background-lane-controller.d.ts.map +1 -1
  93. package/dist/core/background-lane-controller.js +141 -1273
  94. package/dist/core/background-lane-controller.js.map +1 -1
  95. package/dist/core/bedrock-sso-login.d.ts +16 -0
  96. package/dist/core/bedrock-sso-login.d.ts.map +1 -0
  97. package/dist/core/bedrock-sso-login.js +98 -0
  98. package/dist/core/bedrock-sso-login.js.map +1 -0
  99. package/dist/core/capability-contract.d.ts +4 -0
  100. package/dist/core/capability-contract.d.ts.map +1 -0
  101. package/dist/core/capability-contract.js +28 -0
  102. package/dist/core/capability-contract.js.map +1 -0
  103. package/dist/core/compaction-controller.d.ts +90 -0
  104. package/dist/core/compaction-controller.d.ts.map +1 -0
  105. package/dist/core/compaction-controller.js +452 -0
  106. package/dist/core/compaction-controller.js.map +1 -0
  107. package/dist/core/compaction-support.d.ts +13 -17
  108. package/dist/core/compaction-support.d.ts.map +1 -1
  109. package/dist/core/compaction-support.js +3 -3
  110. package/dist/core/compaction-support.js.map +1 -1
  111. package/dist/core/context/context-artifacts.d.ts +6 -2
  112. package/dist/core/context/context-artifacts.d.ts.map +1 -1
  113. package/dist/core/context/context-artifacts.js +34 -2
  114. package/dist/core/context/context-artifacts.js.map +1 -1
  115. package/dist/core/context/context-store-retention.d.ts +8 -2
  116. package/dist/core/context/context-store-retention.d.ts.map +1 -1
  117. package/dist/core/context/context-store-retention.js +158 -35
  118. package/dist/core/context/context-store-retention.js.map +1 -1
  119. package/dist/core/context/okf-memory.d.ts.map +1 -1
  120. package/dist/core/context/okf-memory.js +9 -11
  121. package/dist/core/context/okf-memory.js.map +1 -1
  122. package/dist/core/context/sqlite-runtime-index.d.ts.map +1 -1
  123. package/dist/core/context/sqlite-runtime-index.js +6 -8
  124. package/dist/core/context/sqlite-runtime-index.js.map +1 -1
  125. package/dist/core/context-gc.d.ts +3 -0
  126. package/dist/core/context-gc.d.ts.map +1 -1
  127. package/dist/core/context-gc.js +10 -5
  128. package/dist/core/context-gc.js.map +1 -1
  129. package/dist/core/context-pipeline.d.ts +1 -1
  130. package/dist/core/context-pipeline.d.ts.map +1 -1
  131. package/dist/core/context-pipeline.js +16 -37
  132. package/dist/core/context-pipeline.js.map +1 -1
  133. package/dist/core/cost/cost-summary.d.ts.map +1 -1
  134. package/dist/core/cost/cost-summary.js +5 -3
  135. package/dist/core/cost/cost-summary.js.map +1 -1
  136. package/dist/core/cost/daily-usage.d.ts.map +1 -1
  137. package/dist/core/cost/daily-usage.js +4 -5
  138. package/dist/core/cost/daily-usage.js.map +1 -1
  139. package/dist/core/default-tool-surface.d.ts.map +1 -1
  140. package/dist/core/default-tool-surface.js +2 -0
  141. package/dist/core/default-tool-surface.js.map +1 -1
  142. package/dist/core/delegation/managed-lane-controller.d.ts +34 -0
  143. package/dist/core/delegation/managed-lane-controller.d.ts.map +1 -0
  144. package/dist/core/delegation/managed-lane-controller.js +217 -0
  145. package/dist/core/delegation/managed-lane-controller.js.map +1 -0
  146. package/dist/core/delegation/session-worker-claim.d.ts +44 -0
  147. package/dist/core/delegation/session-worker-claim.d.ts.map +1 -0
  148. package/dist/core/delegation/session-worker-claim.js +98 -0
  149. package/dist/core/delegation/session-worker-claim.js.map +1 -0
  150. package/dist/core/delegation/worker-actions.d.ts +7 -5
  151. package/dist/core/delegation/worker-actions.d.ts.map +1 -1
  152. package/dist/core/delegation/worker-actions.js +20 -4
  153. package/dist/core/delegation/worker-actions.js.map +1 -1
  154. package/dist/core/delegation/{worker-result.d.ts → worker-claim.d.ts} +13 -13
  155. package/dist/core/delegation/worker-claim.d.ts.map +1 -0
  156. package/dist/core/delegation/{worker-result.js → worker-claim.js} +61 -51
  157. package/dist/core/delegation/worker-claim.js.map +1 -0
  158. package/dist/core/delegation/worker-delegation-controller.d.ts +110 -0
  159. package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -0
  160. package/dist/core/delegation/worker-delegation-controller.js +861 -0
  161. package/dist/core/delegation/worker-delegation-controller.js.map +1 -0
  162. package/dist/core/delegation/worker-delegation-request.d.ts +11 -0
  163. package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -0
  164. package/dist/core/delegation/worker-delegation-request.js +2 -0
  165. package/dist/core/delegation/worker-delegation-request.js.map +1 -0
  166. package/dist/core/delegation/worker-dispatch-scheduler.d.ts +40 -0
  167. package/dist/core/delegation/worker-dispatch-scheduler.d.ts.map +1 -0
  168. package/dist/core/delegation/worker-dispatch-scheduler.js +93 -0
  169. package/dist/core/delegation/worker-dispatch-scheduler.js.map +1 -0
  170. package/dist/core/delegation/worker-execution-policy.d.ts +62 -0
  171. package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -0
  172. package/dist/core/delegation/worker-execution-policy.js +160 -0
  173. package/dist/core/delegation/worker-execution-policy.js.map +1 -0
  174. package/dist/core/delegation/worker-lane-projection.d.ts +14 -0
  175. package/dist/core/delegation/worker-lane-projection.d.ts.map +1 -0
  176. package/dist/core/delegation/worker-lane-projection.js +100 -0
  177. package/dist/core/delegation/worker-lane-projection.js.map +1 -0
  178. package/dist/core/delegation/worker-lifecycle.d.ts +97 -0
  179. package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -0
  180. package/dist/core/delegation/worker-lifecycle.js +339 -0
  181. package/dist/core/delegation/worker-lifecycle.js.map +1 -0
  182. package/dist/core/delegation/worker-notification-coordinator.d.ts +36 -0
  183. package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -0
  184. package/dist/core/delegation/worker-notification-coordinator.js +90 -0
  185. package/dist/core/delegation/worker-notification-coordinator.js.map +1 -0
  186. package/dist/core/delegation/worker-profile-resolver.d.ts +55 -0
  187. package/dist/core/delegation/worker-profile-resolver.d.ts.map +1 -0
  188. package/dist/core/delegation/worker-profile-resolver.js +113 -0
  189. package/dist/core/delegation/worker-profile-resolver.js.map +1 -0
  190. package/dist/core/delegation/worker-runner.d.ts +25 -14
  191. package/dist/core/delegation/worker-runner.d.ts.map +1 -1
  192. package/dist/core/delegation/worker-runner.js +122 -53
  193. package/dist/core/delegation/worker-runner.js.map +1 -1
  194. package/dist/core/delegation/worker-task-label.d.ts +3 -0
  195. package/dist/core/delegation/worker-task-label.d.ts.map +1 -0
  196. package/dist/core/delegation/worker-task-label.js +11 -0
  197. package/dist/core/delegation/worker-task-label.js.map +1 -0
  198. package/dist/core/doctor.d.ts +8 -0
  199. package/dist/core/doctor.d.ts.map +1 -1
  200. package/dist/core/doctor.js +32 -1
  201. package/dist/core/doctor.js.map +1 -1
  202. package/dist/core/extension-import-authority.d.ts +6 -0
  203. package/dist/core/extension-import-authority.d.ts.map +1 -0
  204. package/dist/core/extension-import-authority.js +10 -0
  205. package/dist/core/extension-import-authority.js.map +1 -0
  206. package/dist/core/extensions/index.d.ts +1 -1
  207. package/dist/core/extensions/index.d.ts.map +1 -1
  208. package/dist/core/extensions/index.js.map +1 -1
  209. package/dist/core/extensions/loader.d.ts +5 -1
  210. package/dist/core/extensions/loader.d.ts.map +1 -1
  211. package/dist/core/extensions/loader.js +52 -18
  212. package/dist/core/extensions/loader.js.map +1 -1
  213. package/dist/core/extensions/runner.d.ts +3 -0
  214. package/dist/core/extensions/runner.d.ts.map +1 -1
  215. package/dist/core/extensions/runner.js +20 -5
  216. package/dist/core/extensions/runner.js.map +1 -1
  217. package/dist/core/extensions/stale-context.d.ts +2 -0
  218. package/dist/core/extensions/stale-context.d.ts.map +1 -0
  219. package/dist/core/extensions/stale-context.js +2 -0
  220. package/dist/core/extensions/stale-context.js.map +1 -0
  221. package/dist/core/extensions/storage.d.ts +8 -0
  222. package/dist/core/extensions/storage.d.ts.map +1 -0
  223. package/dist/core/extensions/storage.js +28 -0
  224. package/dist/core/extensions/storage.js.map +1 -0
  225. package/dist/core/extensions/types.d.ts +78 -21
  226. package/dist/core/extensions/types.d.ts.map +1 -1
  227. package/dist/core/extensions/types.js.map +1 -1
  228. package/dist/core/failure-corpus.d.ts +1 -15
  229. package/dist/core/failure-corpus.d.ts.map +1 -1
  230. package/dist/core/failure-corpus.js +9 -37
  231. package/dist/core/failure-corpus.js.map +1 -1
  232. package/dist/core/foreground-recovery-controller.d.ts +53 -0
  233. package/dist/core/foreground-recovery-controller.d.ts.map +1 -0
  234. package/dist/core/foreground-recovery-controller.js +111 -0
  235. package/dist/core/foreground-recovery-controller.js.map +1 -0
  236. package/dist/core/gateways/channel-provider.d.ts +3 -0
  237. package/dist/core/gateways/channel-provider.d.ts.map +1 -1
  238. package/dist/core/gateways/channel-provider.js +31 -6
  239. package/dist/core/gateways/channel-provider.js.map +1 -1
  240. package/dist/core/goal-loop-controller.d.ts +14 -9
  241. package/dist/core/goal-loop-controller.d.ts.map +1 -1
  242. package/dist/core/goal-loop-controller.js +47 -75
  243. package/dist/core/goal-loop-controller.js.map +1 -1
  244. package/dist/core/goals/compact-goal-context.d.ts +11 -0
  245. package/dist/core/goals/compact-goal-context.d.ts.map +1 -0
  246. package/dist/core/goals/compact-goal-context.js +59 -0
  247. package/dist/core/goals/compact-goal-context.js.map +1 -0
  248. package/dist/core/goals/goal-acceptance.d.ts +11 -0
  249. package/dist/core/goals/goal-acceptance.d.ts.map +1 -0
  250. package/dist/core/goals/goal-acceptance.js +27 -0
  251. package/dist/core/goals/goal-acceptance.js.map +1 -0
  252. package/dist/core/goals/goal-auto-continue-controller.d.ts +28 -0
  253. package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -0
  254. package/dist/core/goals/goal-auto-continue-controller.js +90 -0
  255. package/dist/core/goals/goal-auto-continue-controller.js.map +1 -0
  256. package/dist/core/goals/goal-continuation-controller.d.ts +2 -2
  257. package/dist/core/goals/goal-continuation-controller.d.ts.map +1 -1
  258. package/dist/core/goals/goal-continuation-controller.js +52 -11
  259. package/dist/core/goals/goal-continuation-controller.js.map +1 -1
  260. package/dist/core/goals/goal-continuation-defaults.d.ts +4 -29
  261. package/dist/core/goals/goal-continuation-defaults.d.ts.map +1 -1
  262. package/dist/core/goals/goal-continuation-defaults.js +4 -32
  263. package/dist/core/goals/goal-continuation-defaults.js.map +1 -1
  264. package/dist/core/goals/goal-continuation-prompt.d.ts +8 -18
  265. package/dist/core/goals/goal-continuation-prompt.d.ts.map +1 -1
  266. package/dist/core/goals/goal-continuation-prompt.js +9 -179
  267. package/dist/core/goals/goal-continuation-prompt.js.map +1 -1
  268. package/dist/core/goals/goal-lifecycle.d.ts +43 -0
  269. package/dist/core/goals/goal-lifecycle.d.ts.map +1 -0
  270. package/dist/core/goals/goal-lifecycle.js +102 -0
  271. package/dist/core/goals/goal-lifecycle.js.map +1 -0
  272. package/dist/core/goals/goal-record.d.ts +17 -0
  273. package/dist/core/goals/goal-record.d.ts.map +1 -0
  274. package/dist/core/goals/goal-record.js +31 -0
  275. package/dist/core/goals/goal-record.js.map +1 -0
  276. package/dist/core/goals/goal-runtime-snapshot.d.ts +11 -9
  277. package/dist/core/goals/goal-runtime-snapshot.d.ts.map +1 -1
  278. package/dist/core/goals/goal-runtime-snapshot.js +10 -8
  279. package/dist/core/goals/goal-runtime-snapshot.js.map +1 -1
  280. package/dist/core/goals/goal-session-controller.d.ts +42 -0
  281. package/dist/core/goals/goal-session-controller.d.ts.map +1 -0
  282. package/dist/core/goals/goal-session-controller.js +128 -0
  283. package/dist/core/goals/goal-session-controller.js.map +1 -0
  284. package/dist/core/goals/goal-state.d.ts +46 -25
  285. package/dist/core/goals/goal-state.d.ts.map +1 -1
  286. package/dist/core/goals/goal-state.js +91 -24
  287. package/dist/core/goals/goal-state.js.map +1 -1
  288. package/dist/core/goals/goal-tool-core.d.ts +9 -10
  289. package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
  290. package/dist/core/goals/goal-tool-core.js +60 -75
  291. package/dist/core/goals/goal-tool-core.js.map +1 -1
  292. package/dist/core/goals/session-goal-state.d.ts +20 -12
  293. package/dist/core/goals/session-goal-state.d.ts.map +1 -1
  294. package/dist/core/goals/session-goal-state.js +133 -33
  295. package/dist/core/goals/session-goal-state.js.map +1 -1
  296. package/dist/core/human-input-controller.d.ts +47 -0
  297. package/dist/core/human-input-controller.d.ts.map +1 -0
  298. package/dist/core/human-input-controller.js +181 -0
  299. package/dist/core/human-input-controller.js.map +1 -0
  300. package/dist/core/human-input.d.ts +100 -0
  301. package/dist/core/human-input.d.ts.map +1 -0
  302. package/dist/core/human-input.js +362 -0
  303. package/dist/core/human-input.js.map +1 -0
  304. package/dist/core/index.d.ts +9 -1
  305. package/dist/core/index.d.ts.map +1 -1
  306. package/dist/core/index.js +9 -1
  307. package/dist/core/index.js.map +1 -1
  308. package/dist/core/{telemetry.d.ts → install-telemetry.d.ts} +1 -1
  309. package/dist/core/install-telemetry.d.ts.map +1 -0
  310. package/dist/core/{telemetry.js → install-telemetry.js} +1 -1
  311. package/dist/core/install-telemetry.js.map +1 -0
  312. package/dist/core/keybindings.d.ts +17 -1
  313. package/dist/core/keybindings.d.ts.map +1 -1
  314. package/dist/core/keybindings.js +24 -6
  315. package/dist/core/keybindings.js.map +1 -1
  316. package/dist/core/learning/learning-audit.d.ts +2 -4
  317. package/dist/core/learning/learning-audit.d.ts.map +1 -1
  318. package/dist/core/learning/learning-audit.js +9 -29
  319. package/dist/core/learning/learning-audit.js.map +1 -1
  320. package/dist/core/learning/learning-gate.d.ts.map +1 -1
  321. package/dist/core/learning/learning-gate.js +1 -6
  322. package/dist/core/learning/learning-gate.js.map +1 -1
  323. package/dist/core/learning/session-learning-decision.d.ts +2 -4
  324. package/dist/core/learning/session-learning-decision.d.ts.map +1 -1
  325. package/dist/core/learning/session-learning-decision.js +9 -29
  326. package/dist/core/learning/session-learning-decision.js.map +1 -1
  327. package/dist/core/local-runtime-controller.d.ts +1 -1
  328. package/dist/core/local-runtime-controller.d.ts.map +1 -1
  329. package/dist/core/local-runtime-controller.js.map +1 -1
  330. package/dist/core/memory-controller.d.ts.map +1 -1
  331. package/dist/core/memory-controller.js +4 -4
  332. package/dist/core/memory-controller.js.map +1 -1
  333. package/dist/core/model-capability.d.ts +0 -19
  334. package/dist/core/model-capability.d.ts.map +1 -1
  335. package/dist/core/model-capability.js +1 -19
  336. package/dist/core/model-capability.js.map +1 -1
  337. package/dist/core/model-registry.d.ts +6 -1
  338. package/dist/core/model-registry.d.ts.map +1 -1
  339. package/dist/core/model-registry.js +13 -5
  340. package/dist/core/model-registry.js.map +1 -1
  341. package/dist/core/model-resolver.d.ts +17 -2
  342. package/dist/core/model-resolver.d.ts.map +1 -1
  343. package/dist/core/model-resolver.js +38 -25
  344. package/dist/core/model-resolver.js.map +1 -1
  345. package/dist/core/model-router/intent-classifier.d.ts +1 -4
  346. package/dist/core/model-router/intent-classifier.d.ts.map +1 -1
  347. package/dist/core/model-router/intent-classifier.js +1 -156
  348. package/dist/core/model-router/intent-classifier.js.map +1 -1
  349. package/dist/core/model-router-controller.d.ts +1 -1
  350. package/dist/core/model-router-controller.d.ts.map +1 -1
  351. package/dist/core/model-router-controller.js +2 -2
  352. package/dist/core/model-router-controller.js.map +1 -1
  353. package/dist/core/model-selection-controller.d.ts +5 -5
  354. package/dist/core/model-selection-controller.d.ts.map +1 -1
  355. package/dist/core/model-selection-controller.js.map +1 -1
  356. package/dist/core/model-tool-protocol.d.ts +23 -0
  357. package/dist/core/model-tool-protocol.d.ts.map +1 -0
  358. package/dist/core/model-tool-protocol.js +43 -0
  359. package/dist/core/model-tool-protocol.js.map +1 -0
  360. package/dist/core/models/adaptation-store.d.ts +4 -6
  361. package/dist/core/models/adaptation-store.d.ts.map +1 -1
  362. package/dist/core/models/adaptation-store.js +95 -83
  363. package/dist/core/models/adaptation-store.js.map +1 -1
  364. package/dist/core/models/fitness-store.d.ts +2 -12
  365. package/dist/core/models/fitness-store.d.ts.map +1 -1
  366. package/dist/core/models/fitness-store.js +84 -57
  367. package/dist/core/models/fitness-store.js.map +1 -1
  368. package/dist/core/models/host-state-store.d.ts +34 -0
  369. package/dist/core/models/host-state-store.d.ts.map +1 -0
  370. package/dist/core/models/host-state-store.js +86 -0
  371. package/dist/core/models/host-state-store.js.map +1 -0
  372. package/dist/core/orchestration/agent-resume.d.ts +24 -0
  373. package/dist/core/orchestration/agent-resume.d.ts.map +1 -0
  374. package/dist/core/orchestration/agent-resume.js +90 -0
  375. package/dist/core/orchestration/agent-resume.js.map +1 -0
  376. package/dist/core/orchestration/capability-gateway.d.ts +61 -0
  377. package/dist/core/orchestration/capability-gateway.d.ts.map +1 -0
  378. package/dist/core/orchestration/capability-gateway.js +152 -0
  379. package/dist/core/orchestration/capability-gateway.js.map +1 -0
  380. package/dist/core/orchestration/contracts.d.ts +343 -0
  381. package/dist/core/orchestration/contracts.d.ts.map +1 -0
  382. package/dist/core/orchestration/contracts.js +135 -0
  383. package/dist/core/orchestration/contracts.js.map +1 -0
  384. package/dist/core/orchestration/delegation-ledger.d.ts +56 -0
  385. package/dist/core/orchestration/delegation-ledger.d.ts.map +1 -0
  386. package/dist/core/orchestration/delegation-ledger.js +200 -0
  387. package/dist/core/orchestration/delegation-ledger.js.map +1 -0
  388. package/dist/core/orchestration/event-store.d.ts +83 -0
  389. package/dist/core/orchestration/event-store.d.ts.map +1 -0
  390. package/dist/core/orchestration/event-store.js +560 -0
  391. package/dist/core/orchestration/event-store.js.map +1 -0
  392. package/dist/core/orchestration/lane-tool-manifests.d.ts +9 -0
  393. package/dist/core/orchestration/lane-tool-manifests.d.ts.map +1 -0
  394. package/dist/core/orchestration/lane-tool-manifests.js +37 -0
  395. package/dist/core/orchestration/lane-tool-manifests.js.map +1 -0
  396. package/dist/core/orchestration/model-binding.d.ts +15 -0
  397. package/dist/core/orchestration/model-binding.d.ts.map +1 -0
  398. package/dist/core/orchestration/model-binding.js +29 -0
  399. package/dist/core/orchestration/model-binding.js.map +1 -0
  400. package/dist/core/orchestration/policy-compiler.d.ts +49 -0
  401. package/dist/core/orchestration/policy-compiler.d.ts.map +1 -0
  402. package/dist/core/orchestration/policy-compiler.js +191 -0
  403. package/dist/core/orchestration/policy-compiler.js.map +1 -0
  404. package/dist/core/orchestration/policy-gate.d.ts +18 -0
  405. package/dist/core/orchestration/policy-gate.d.ts.map +1 -0
  406. package/dist/core/orchestration/policy-gate.js +24 -0
  407. package/dist/core/orchestration/policy-gate.js.map +1 -0
  408. package/dist/core/orchestration/profile-registry.d.ts +51 -0
  409. package/dist/core/orchestration/profile-registry.d.ts.map +1 -0
  410. package/dist/core/orchestration/profile-registry.js +393 -0
  411. package/dist/core/orchestration/profile-registry.js.map +1 -0
  412. package/dist/core/orchestration/profile-store.d.ts +31 -0
  413. package/dist/core/orchestration/profile-store.d.ts.map +1 -0
  414. package/dist/core/orchestration/profile-store.js +136 -0
  415. package/dist/core/orchestration/profile-store.js.map +1 -0
  416. package/dist/core/orchestration/risk-budget.d.ts +9 -0
  417. package/dist/core/orchestration/risk-budget.d.ts.map +1 -0
  418. package/dist/core/orchestration/risk-budget.js +48 -0
  419. package/dist/core/orchestration/risk-budget.js.map +1 -0
  420. package/dist/core/orchestration/task-runtime.d.ts +168 -0
  421. package/dist/core/orchestration/task-runtime.d.ts.map +1 -0
  422. package/dist/core/orchestration/task-runtime.js +1600 -0
  423. package/dist/core/orchestration/task-runtime.js.map +1 -0
  424. package/dist/core/orchestration/work-state-projection.d.ts +32 -0
  425. package/dist/core/orchestration/work-state-projection.d.ts.map +1 -0
  426. package/dist/core/orchestration/work-state-projection.js +116 -0
  427. package/dist/core/orchestration/work-state-projection.js.map +1 -0
  428. package/dist/core/orchestration/worker-execution-contract.d.ts +21 -0
  429. package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -0
  430. package/dist/core/orchestration/worker-execution-contract.js +179 -0
  431. package/dist/core/orchestration/worker-execution-contract.js.map +1 -0
  432. package/dist/core/orchestration/worker-result-adapter.d.ts +21 -0
  433. package/dist/core/orchestration/worker-result-adapter.d.ts.map +1 -0
  434. package/dist/core/orchestration/worker-result-adapter.js +109 -0
  435. package/dist/core/orchestration/worker-result-adapter.js.map +1 -0
  436. package/dist/core/package-manager.d.ts.map +1 -1
  437. package/dist/core/package-manager.js +20 -3
  438. package/dist/core/package-manager.js.map +1 -1
  439. package/dist/core/process-identity.d.ts +11 -0
  440. package/dist/core/process-identity.d.ts.map +1 -0
  441. package/dist/core/process-identity.js +26 -0
  442. package/dist/core/process-identity.js.map +1 -0
  443. package/dist/core/process-matrix/codes.d.ts +14 -3
  444. package/dist/core/process-matrix/codes.d.ts.map +1 -1
  445. package/dist/core/process-matrix/codes.js.map +1 -1
  446. package/dist/core/process-matrix/resume-launcher.d.ts +26 -0
  447. package/dist/core/process-matrix/resume-launcher.d.ts.map +1 -0
  448. package/dist/core/process-matrix/resume-launcher.js +62 -0
  449. package/dist/core/process-matrix/resume-launcher.js.map +1 -0
  450. package/dist/core/process-matrix/runtime.d.ts +37 -22
  451. package/dist/core/process-matrix/runtime.d.ts.map +1 -1
  452. package/dist/core/process-matrix/runtime.js +399 -76
  453. package/dist/core/process-matrix/runtime.js.map +1 -1
  454. package/dist/core/process-matrix/store.d.ts +5 -2
  455. package/dist/core/process-matrix/store.d.ts.map +1 -1
  456. package/dist/core/process-matrix/store.js +123 -14
  457. package/dist/core/process-matrix/store.js.map +1 -1
  458. package/dist/core/process-matrix/supervisor.d.ts +10 -7
  459. package/dist/core/process-matrix/supervisor.d.ts.map +1 -1
  460. package/dist/core/process-matrix/supervisor.js +45 -14
  461. package/dist/core/process-matrix/supervisor.js.map +1 -1
  462. package/dist/core/profile-filter-controller.d.ts +8 -1
  463. package/dist/core/profile-filter-controller.d.ts.map +1 -1
  464. package/dist/core/profile-filter-controller.js +23 -5
  465. package/dist/core/profile-filter-controller.js.map +1 -1
  466. package/dist/core/profile-registry.d.ts.map +1 -1
  467. package/dist/core/profile-registry.js +6 -8
  468. package/dist/core/profile-registry.js.map +1 -1
  469. package/dist/core/prompt-templates.d.ts +1 -0
  470. package/dist/core/prompt-templates.d.ts.map +1 -1
  471. package/dist/core/prompt-templates.js +18 -29
  472. package/dist/core/prompt-templates.js.map +1 -1
  473. package/dist/core/reflection-controller.d.ts +5 -5
  474. package/dist/core/reflection-controller.d.ts.map +1 -1
  475. package/dist/core/reflection-controller.js +5 -2
  476. package/dist/core/reflection-controller.js.map +1 -1
  477. package/dist/core/reload-blockers.d.ts.map +1 -1
  478. package/dist/core/reload-blockers.js +6 -8
  479. package/dist/core/reload-blockers.js.map +1 -1
  480. package/dist/core/request-auth.d.ts +7 -0
  481. package/dist/core/request-auth.d.ts.map +1 -0
  482. package/dist/core/request-auth.js +8 -0
  483. package/dist/core/request-auth.js.map +1 -0
  484. package/dist/core/research/evidence-bundle.d.ts.map +1 -1
  485. package/dist/core/research/evidence-bundle.js +1 -6
  486. package/dist/core/research/evidence-bundle.js.map +1 -1
  487. package/dist/core/research/lane-model-resolver.d.ts +33 -0
  488. package/dist/core/research/lane-model-resolver.d.ts.map +1 -0
  489. package/dist/core/research/lane-model-resolver.js +65 -0
  490. package/dist/core/research/lane-model-resolver.js.map +1 -0
  491. package/dist/core/research/model-fitness-controller.d.ts +38 -0
  492. package/dist/core/research/model-fitness-controller.d.ts.map +1 -0
  493. package/dist/core/research/model-fitness-controller.js +106 -0
  494. package/dist/core/research/model-fitness-controller.js.map +1 -0
  495. package/dist/core/research/model-fitness.d.ts +1 -1
  496. package/dist/core/research/model-fitness.d.ts.map +1 -1
  497. package/dist/core/research/model-fitness.js +4 -4
  498. package/dist/core/research/model-fitness.js.map +1 -1
  499. package/dist/core/research/research-gate.d.ts.map +1 -1
  500. package/dist/core/research/research-gate.js +7 -7
  501. package/dist/core/research/research-gate.js.map +1 -1
  502. package/dist/core/research/research-lane-controller.d.ts +62 -0
  503. package/dist/core/research/research-lane-controller.d.ts.map +1 -0
  504. package/dist/core/research/research-lane-controller.js +292 -0
  505. package/dist/core/research/research-lane-controller.js.map +1 -0
  506. package/dist/core/research/session-evidence-bundle.d.ts +2 -4
  507. package/dist/core/research/session-evidence-bundle.d.ts.map +1 -1
  508. package/dist/core/research/session-evidence-bundle.js +10 -46
  509. package/dist/core/research/session-evidence-bundle.js.map +1 -1
  510. package/dist/core/resource-loader.d.ts.map +1 -1
  511. package/dist/core/resource-loader.js +23 -8
  512. package/dist/core/resource-loader.js.map +1 -1
  513. package/dist/core/risk-classifier.d.ts +6 -0
  514. package/dist/core/risk-classifier.d.ts.map +1 -0
  515. package/dist/core/risk-classifier.js +233 -0
  516. package/dist/core/risk-classifier.js.map +1 -0
  517. package/dist/core/runtime-builder.d.ts +41 -23
  518. package/dist/core/runtime-builder.d.ts.map +1 -1
  519. package/dist/core/runtime-builder.js +365 -253
  520. package/dist/core/runtime-builder.js.map +1 -1
  521. package/dist/core/sdk.d.ts +6 -3
  522. package/dist/core/sdk.d.ts.map +1 -1
  523. package/dist/core/sdk.js +68 -25
  524. package/dist/core/sdk.js.map +1 -1
  525. package/dist/core/secrets/credential-exposure-guard.d.ts +9 -0
  526. package/dist/core/secrets/credential-exposure-guard.d.ts.map +1 -0
  527. package/dist/core/secrets/credential-exposure-guard.js +241 -0
  528. package/dist/core/secrets/credential-exposure-guard.js.map +1 -0
  529. package/dist/core/secrets/secret-dotenv.d.ts +27 -0
  530. package/dist/core/secrets/secret-dotenv.d.ts.map +1 -0
  531. package/dist/core/secrets/secret-dotenv.js +183 -0
  532. package/dist/core/secrets/secret-dotenv.js.map +1 -0
  533. package/dist/core/secrets/secret-vault-format.d.ts +112 -0
  534. package/dist/core/secrets/secret-vault-format.d.ts.map +1 -0
  535. package/dist/core/secrets/secret-vault-format.js +397 -0
  536. package/dist/core/secrets/secret-vault-format.js.map +1 -0
  537. package/dist/core/secrets/secret-vault.d.ts +72 -0
  538. package/dist/core/secrets/secret-vault.d.ts.map +1 -0
  539. package/dist/core/secrets/secret-vault.js +671 -0
  540. package/dist/core/secrets/secret-vault.js.map +1 -0
  541. package/dist/core/session-analytics.d.ts +4 -23
  542. package/dist/core/session-analytics.d.ts.map +1 -1
  543. package/dist/core/session-analytics.js +67 -70
  544. package/dist/core/session-analytics.js.map +1 -1
  545. package/dist/core/session-image-store.d.ts +33 -0
  546. package/dist/core/session-image-store.d.ts.map +1 -0
  547. package/dist/core/session-image-store.js +283 -0
  548. package/dist/core/session-image-store.js.map +1 -0
  549. package/dist/core/session-role.d.ts +11 -4
  550. package/dist/core/session-role.d.ts.map +1 -1
  551. package/dist/core/session-role.js +24 -5
  552. package/dist/core/session-role.js.map +1 -1
  553. package/dist/core/session-snapshot.d.ts +34 -0
  554. package/dist/core/session-snapshot.d.ts.map +1 -0
  555. package/dist/core/session-snapshot.js +68 -0
  556. package/dist/core/session-snapshot.js.map +1 -0
  557. package/dist/core/session-supervision-runtime.d.ts +31 -0
  558. package/dist/core/session-supervision-runtime.d.ts.map +1 -0
  559. package/dist/core/session-supervision-runtime.js +97 -0
  560. package/dist/core/session-supervision-runtime.js.map +1 -0
  561. package/dist/core/session-tree-navigator.d.ts +4 -6
  562. package/dist/core/session-tree-navigator.d.ts.map +1 -1
  563. package/dist/core/session-tree-navigator.js +4 -1
  564. package/dist/core/session-tree-navigator.js.map +1 -1
  565. package/dist/core/settings-manager.d.ts +10 -5
  566. package/dist/core/settings-manager.d.ts.map +1 -1
  567. package/dist/core/settings-manager.js +81 -29
  568. package/dist/core/settings-manager.js.map +1 -1
  569. package/dist/core/slash-commands.d.ts.map +1 -1
  570. package/dist/core/slash-commands.js +2 -2
  571. package/dist/core/slash-commands.js.map +1 -1
  572. package/dist/core/tasks/session-task-state.d.ts +2 -4
  573. package/dist/core/tasks/session-task-state.d.ts.map +1 -1
  574. package/dist/core/tasks/session-task-state.js +10 -28
  575. package/dist/core/tasks/session-task-state.js.map +1 -1
  576. package/dist/core/tasks/task-projection.d.ts +20 -0
  577. package/dist/core/tasks/task-projection.d.ts.map +1 -0
  578. package/dist/core/tasks/task-projection.js +47 -0
  579. package/dist/core/tasks/task-projection.js.map +1 -0
  580. package/dist/core/tasks/task-state.d.ts +4 -0
  581. package/dist/core/tasks/task-state.d.ts.map +1 -1
  582. package/dist/core/tasks/task-state.js +28 -11
  583. package/dist/core/tasks/task-state.js.map +1 -1
  584. package/dist/core/tool-capability-policy.d.ts +13 -0
  585. package/dist/core/tool-capability-policy.d.ts.map +1 -0
  586. package/dist/core/tool-capability-policy.js +86 -0
  587. package/dist/core/tool-capability-policy.js.map +1 -0
  588. package/dist/core/tool-gate-controller.d.ts.map +1 -1
  589. package/dist/core/tool-gate-controller.js +8 -2
  590. package/dist/core/tool-gate-controller.js.map +1 -1
  591. package/dist/core/tool-protocol-controller.d.ts +89 -0
  592. package/dist/core/tool-protocol-controller.d.ts.map +1 -0
  593. package/dist/core/tool-protocol-controller.js +512 -0
  594. package/dist/core/tool-protocol-controller.js.map +1 -0
  595. package/dist/core/tool-recovery-log-records.d.ts +2 -3
  596. package/dist/core/tool-recovery-log-records.d.ts.map +1 -1
  597. package/dist/core/tool-recovery-log-records.js +9 -35
  598. package/dist/core/tool-recovery-log-records.js.map +1 -1
  599. package/dist/core/tool-recovery-stats.d.ts +21 -1
  600. package/dist/core/tool-recovery-stats.d.ts.map +1 -1
  601. package/dist/core/tool-recovery-stats.js.map +1 -1
  602. package/dist/core/tool-selection/tool-performance-store.d.ts +3 -7
  603. package/dist/core/tool-selection/tool-performance-store.d.ts.map +1 -1
  604. package/dist/core/tool-selection/tool-performance-store.js +97 -138
  605. package/dist/core/tool-selection/tool-performance-store.js.map +1 -1
  606. package/dist/core/tools/ask-question.d.ts +124 -0
  607. package/dist/core/tools/ask-question.d.ts.map +1 -0
  608. package/dist/core/tools/ask-question.js +693 -0
  609. package/dist/core/tools/ask-question.js.map +1 -0
  610. package/dist/core/tools/bash.d.ts +5 -0
  611. package/dist/core/tools/bash.d.ts.map +1 -1
  612. package/dist/core/tools/bash.js +59 -5
  613. package/dist/core/tools/bash.js.map +1 -1
  614. package/dist/core/tools/delegate-status.d.ts +31 -3
  615. package/dist/core/tools/delegate-status.d.ts.map +1 -1
  616. package/dist/core/tools/delegate-status.js +148 -29
  617. package/dist/core/tools/delegate-status.js.map +1 -1
  618. package/dist/core/tools/delegate.d.ts +15 -13
  619. package/dist/core/tools/delegate.d.ts.map +1 -1
  620. package/dist/core/tools/delegate.js +106 -23
  621. package/dist/core/tools/delegate.js.map +1 -1
  622. package/dist/core/tools/extensionify.d.ts.map +1 -1
  623. package/dist/core/tools/extensionify.js +1 -0
  624. package/dist/core/tools/extensionify.js.map +1 -1
  625. package/dist/core/tools/git-filter.d.ts +1 -8
  626. package/dist/core/tools/git-filter.d.ts.map +1 -1
  627. package/dist/core/tools/git-filter.js +2 -63
  628. package/dist/core/tools/git-filter.js.map +1 -1
  629. package/dist/core/tools/goal.d.ts +10 -8
  630. package/dist/core/tools/goal.d.ts.map +1 -1
  631. package/dist/core/tools/goal.js +106 -28
  632. package/dist/core/tools/goal.js.map +1 -1
  633. package/dist/core/tools/index.d.ts +1 -0
  634. package/dist/core/tools/index.d.ts.map +1 -1
  635. package/dist/core/tools/index.js +1 -0
  636. package/dist/core/tools/index.js.map +1 -1
  637. package/dist/core/tools/model-fitness.d.ts.map +1 -1
  638. package/dist/core/tools/model-fitness.js +2 -2
  639. package/dist/core/tools/model-fitness.js.map +1 -1
  640. package/dist/core/tools/orchestration-panel.d.ts +40 -0
  641. package/dist/core/tools/orchestration-panel.d.ts.map +1 -0
  642. package/dist/core/tools/orchestration-panel.js +124 -0
  643. package/dist/core/tools/orchestration-panel.js.map +1 -0
  644. package/dist/core/tools/output-accumulator.d.ts +11 -0
  645. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  646. package/dist/core/tools/output-accumulator.js +36 -3
  647. package/dist/core/tools/output-accumulator.js.map +1 -1
  648. package/dist/core/tools/python.d.ts +2 -0
  649. package/dist/core/tools/python.d.ts.map +1 -1
  650. package/dist/core/tools/python.js +3 -1
  651. package/dist/core/tools/python.js.map +1 -1
  652. package/dist/core/tools/read.d.ts.map +1 -1
  653. package/dist/core/tools/read.js +1 -1
  654. package/dist/core/tools/read.js.map +1 -1
  655. package/dist/core/tools/run-process.d.ts +26 -0
  656. package/dist/core/tools/run-process.d.ts.map +1 -0
  657. package/dist/core/tools/run-process.js +138 -0
  658. package/dist/core/tools/run-process.js.map +1 -0
  659. package/dist/core/tools/search-command-guard.d.ts +14 -0
  660. package/dist/core/tools/search-command-guard.d.ts.map +1 -0
  661. package/dist/core/tools/search-command-guard.js +333 -0
  662. package/dist/core/tools/search-command-guard.js.map +1 -0
  663. package/dist/core/tools/secret-store.d.ts +38 -0
  664. package/dist/core/tools/secret-store.d.ts.map +1 -0
  665. package/dist/core/tools/secret-store.js +412 -0
  666. package/dist/core/tools/secret-store.js.map +1 -0
  667. package/dist/core/tools/shell-command-parser.d.ts +16 -0
  668. package/dist/core/tools/shell-command-parser.d.ts.map +1 -0
  669. package/dist/core/tools/shell-command-parser.js +113 -0
  670. package/dist/core/tools/shell-command-parser.js.map +1 -0
  671. package/dist/core/tools/task-steps.d.ts +2 -0
  672. package/dist/core/tools/task-steps.d.ts.map +1 -1
  673. package/dist/core/tools/task-steps.js +99 -0
  674. package/dist/core/tools/task-steps.js.map +1 -1
  675. package/dist/core/tools/tmux-dispatch.d.ts +3 -5
  676. package/dist/core/tools/tmux-dispatch.d.ts.map +1 -1
  677. package/dist/core/tools/tmux-dispatch.js +4 -4
  678. package/dist/core/tools/tmux-dispatch.js.map +1 -1
  679. package/dist/core/tools/windows-shell-engine.d.ts.map +1 -1
  680. package/dist/core/tools/windows-shell-engine.js +4 -6
  681. package/dist/core/tools/windows-shell-engine.js.map +1 -1
  682. package/dist/core/util/atomic-file.d.ts +6 -2
  683. package/dist/core/util/atomic-file.d.ts.map +1 -1
  684. package/dist/core/util/atomic-file.js +4 -4
  685. package/dist/core/util/atomic-file.js.map +1 -1
  686. package/dist/core/util/bounded-jsonl.d.ts +10 -0
  687. package/dist/core/util/bounded-jsonl.d.ts.map +1 -0
  688. package/dist/core/util/bounded-jsonl.js +75 -0
  689. package/dist/core/util/bounded-jsonl.js.map +1 -0
  690. package/dist/core/util/value-guards.d.ts +5 -0
  691. package/dist/core/util/value-guards.d.ts.map +1 -0
  692. package/dist/core/util/value-guards.js +12 -0
  693. package/dist/core/util/value-guards.js.map +1 -0
  694. package/dist/core/worktree-sync/store.d.ts +3 -3
  695. package/dist/core/worktree-sync/store.d.ts.map +1 -1
  696. package/dist/core/worktree-sync/store.js +10 -5
  697. package/dist/core/worktree-sync/store.js.map +1 -1
  698. package/dist/index.d.ts +15 -4
  699. package/dist/index.d.ts.map +1 -1
  700. package/dist/index.js +14 -3
  701. package/dist/index.js.map +1 -1
  702. package/dist/main.d.ts.map +1 -1
  703. package/dist/main.js +149 -51
  704. package/dist/main.js.map +1 -1
  705. package/dist/migrations.d.ts +4 -6
  706. package/dist/migrations.d.ts.map +1 -1
  707. package/dist/migrations.js +186 -28
  708. package/dist/migrations.js.map +1 -1
  709. package/dist/modes/interactive/auth-dialogs-controller.d.ts +4 -0
  710. package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
  711. package/dist/modes/interactive/auth-dialogs-controller.js +60 -1
  712. package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
  713. package/dist/modes/interactive/clipboard-input.d.ts +7 -1
  714. package/dist/modes/interactive/clipboard-input.d.ts.map +1 -1
  715. package/dist/modes/interactive/clipboard-input.js +44 -6
  716. package/dist/modes/interactive/clipboard-input.js.map +1 -1
  717. package/dist/modes/interactive/components/activity-lane.d.ts +55 -0
  718. package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -0
  719. package/dist/modes/interactive/components/activity-lane.js +304 -0
  720. package/dist/modes/interactive/components/activity-lane.js.map +1 -0
  721. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  722. package/dist/modes/interactive/components/assistant-message.js +19 -10
  723. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  724. package/dist/modes/interactive/components/expandable-text.d.ts +12 -0
  725. package/dist/modes/interactive/components/expandable-text.d.ts.map +1 -0
  726. package/dist/modes/interactive/components/expandable-text.js +17 -0
  727. package/dist/modes/interactive/components/expandable-text.js.map +1 -0
  728. package/dist/modes/interactive/components/extension-editor.d.ts +15 -1
  729. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  730. package/dist/modes/interactive/components/extension-editor.js +30 -21
  731. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  732. package/dist/modes/interactive/components/extension-input.d.ts +1 -0
  733. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  734. package/dist/modes/interactive/components/extension-input.js +6 -1
  735. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  736. package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
  737. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  738. package/dist/modes/interactive/components/scoped-models-selector.js +23 -14
  739. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  740. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  741. package/dist/modes/interactive/components/settings-selector.js +6 -6
  742. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  743. package/dist/modes/interactive/components/tool-execution.d.ts +19 -11
  744. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  745. package/dist/modes/interactive/components/tool-execution.js +53 -20
  746. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  747. package/dist/modes/interactive/components/tool-group.d.ts.map +1 -1
  748. package/dist/modes/interactive/components/tool-group.js +3 -0
  749. package/dist/modes/interactive/components/tool-group.js.map +1 -1
  750. package/dist/modes/interactive/components/usage-action-selector.d.ts +16 -0
  751. package/dist/modes/interactive/components/usage-action-selector.d.ts.map +1 -0
  752. package/dist/modes/interactive/components/usage-action-selector.js +46 -0
  753. package/dist/modes/interactive/components/usage-action-selector.js.map +1 -0
  754. package/dist/modes/interactive/config-backup.d.ts.map +1 -1
  755. package/dist/modes/interactive/config-backup.js +5 -4
  756. package/dist/modes/interactive/config-backup.js.map +1 -1
  757. package/dist/modes/interactive/extension-ui-host.d.ts +14 -0
  758. package/dist/modes/interactive/extension-ui-host.d.ts.map +1 -1
  759. package/dist/modes/interactive/extension-ui-host.js +77 -15
  760. package/dist/modes/interactive/extension-ui-host.js.map +1 -1
  761. package/dist/modes/interactive/external-editor.d.ts +15 -0
  762. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  763. package/dist/modes/interactive/external-editor.js +27 -19
  764. package/dist/modes/interactive/external-editor.js.map +1 -1
  765. package/dist/modes/interactive/history-reload-math.d.ts +6 -2
  766. package/dist/modes/interactive/history-reload-math.d.ts.map +1 -1
  767. package/dist/modes/interactive/history-reload-math.js +10 -5
  768. package/dist/modes/interactive/history-reload-math.js.map +1 -1
  769. package/dist/modes/interactive/interactive-event-controller.d.ts +74 -0
  770. package/dist/modes/interactive/interactive-event-controller.d.ts.map +1 -0
  771. package/dist/modes/interactive/interactive-event-controller.js +328 -0
  772. package/dist/modes/interactive/interactive-event-controller.js.map +1 -0
  773. package/dist/modes/interactive/interactive-mode.d.ts +22 -24
  774. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  775. package/dist/modes/interactive/interactive-mode.js +245 -595
  776. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  777. package/dist/modes/interactive/key-handlers.d.ts.map +1 -1
  778. package/dist/modes/interactive/key-handlers.js +1 -1
  779. package/dist/modes/interactive/key-handlers.js.map +1 -1
  780. package/dist/modes/interactive/loaded-resources-view.d.ts +20 -0
  781. package/dist/modes/interactive/loaded-resources-view.d.ts.map +1 -0
  782. package/dist/modes/interactive/loaded-resources-view.js +147 -0
  783. package/dist/modes/interactive/loaded-resources-view.js.map +1 -0
  784. package/dist/modes/interactive/profile-menu-controller.d.ts.map +1 -1
  785. package/dist/modes/interactive/profile-menu-controller.js +7 -7
  786. package/dist/modes/interactive/profile-menu-controller.js.map +1 -1
  787. package/dist/modes/interactive/report-commands.d.ts.map +1 -1
  788. package/dist/modes/interactive/report-commands.js +21 -0
  789. package/dist/modes/interactive/report-commands.js.map +1 -1
  790. package/dist/modes/interactive/resource-display.d.ts.map +1 -1
  791. package/dist/modes/interactive/resource-display.js +8 -2
  792. package/dist/modes/interactive/resource-display.js.map +1 -1
  793. package/dist/modes/interactive/resource-shell-commands.d.ts +1 -5
  794. package/dist/modes/interactive/resource-shell-commands.d.ts.map +1 -1
  795. package/dist/modes/interactive/resource-shell-commands.js +0 -5
  796. package/dist/modes/interactive/resource-shell-commands.js.map +1 -1
  797. package/dist/modes/interactive/session-flow-commands.d.ts +27 -8
  798. package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
  799. package/dist/modes/interactive/session-flow-commands.js +150 -64
  800. package/dist/modes/interactive/session-flow-commands.js.map +1 -1
  801. package/dist/modes/interactive/session-io-commands.d.ts.map +1 -1
  802. package/dist/modes/interactive/session-io-commands.js +16 -6
  803. package/dist/modes/interactive/session-io-commands.js.map +1 -1
  804. package/dist/modes/interactive/session-replacement-errors.d.ts +7 -0
  805. package/dist/modes/interactive/session-replacement-errors.d.ts.map +1 -0
  806. package/dist/modes/interactive/session-replacement-errors.js +15 -0
  807. package/dist/modes/interactive/session-replacement-errors.js.map +1 -0
  808. package/dist/modes/interactive/startup-checks.d.ts.map +1 -1
  809. package/dist/modes/interactive/startup-checks.js +1 -1
  810. package/dist/modes/interactive/startup-checks.js.map +1 -1
  811. package/dist/modes/interactive/usage-commands.d.ts +34 -0
  812. package/dist/modes/interactive/usage-commands.d.ts.map +1 -0
  813. package/dist/modes/interactive/usage-commands.js +225 -0
  814. package/dist/modes/interactive/usage-commands.js.map +1 -0
  815. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  816. package/dist/modes/rpc/rpc-mode.js +82 -23
  817. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  818. package/dist/modes/rpc/rpc-types.d.ts +15 -0
  819. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  820. package/dist/modes/rpc/rpc-types.js +138 -1
  821. package/dist/modes/rpc/rpc-types.js.map +1 -1
  822. package/dist/utils/clipboard-image.d.ts.map +1 -1
  823. package/dist/utils/clipboard-image.js +2 -13
  824. package/dist/utils/clipboard-image.js.map +1 -1
  825. package/dist/utils/clipboard-native.d.ts +1 -0
  826. package/dist/utils/clipboard-native.d.ts.map +1 -1
  827. package/dist/utils/clipboard-native.js.map +1 -1
  828. package/dist/utils/clipboard.d.ts +1 -0
  829. package/dist/utils/clipboard.d.ts.map +1 -1
  830. package/dist/utils/clipboard.js +52 -1
  831. package/dist/utils/clipboard.js.map +1 -1
  832. package/dist/utils/platform.d.ts +3 -0
  833. package/dist/utils/platform.d.ts.map +1 -0
  834. package/dist/utils/platform.js +8 -0
  835. package/dist/utils/platform.js.map +1 -0
  836. package/dist/utils/shell.d.ts.map +1 -1
  837. package/dist/utils/shell.js +5 -3
  838. package/dist/utils/shell.js.map +1 -1
  839. package/dist/utils/version-check.d.ts.map +1 -1
  840. package/dist/utils/version-check.js +3 -1
  841. package/dist/utils/version-check.js.map +1 -1
  842. package/dist/utils/work-directory.d.ts +11 -0
  843. package/dist/utils/work-directory.d.ts.map +1 -1
  844. package/dist/utils/work-directory.js +30 -9
  845. package/dist/utils/work-directory.js.map +1 -1
  846. package/docs/UI_POLISH_ORCHESTRATION.md +38 -0
  847. package/docs/UI_QUALITY_ORCHESTRATION.md +28 -0
  848. package/docs/docs.json +4 -0
  849. package/docs/extensions.md +62 -2
  850. package/docs/harness-architecture.md +156 -0
  851. package/docs/keybindings.md +11 -1
  852. package/docs/process-matrix.md +59 -26
  853. package/docs/providers.md +9 -1
  854. package/docs/rpc.md +45 -2
  855. package/docs/sessions.md +15 -0
  856. package/docs/settings.md +125 -11
  857. package/docs/task-steps.md +8 -0
  858. package/docs/telemetry.md +19 -0
  859. package/docs/tmux-agent-manager.md +10 -3
  860. package/docs/ui-reference/README.md +9 -0
  861. package/docs/ui-reference/orchestration-after.txt +14 -0
  862. package/docs/ui-reference/orchestration-before.txt +13 -0
  863. package/docs/ui-reference/orchestration-reference.txt +16 -0
  864. package/docs/usage.md +22 -2
  865. package/docs/work-directory.md +19 -8
  866. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  867. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  868. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  869. package/examples/extensions/question.ts +34 -245
  870. package/examples/extensions/questionnaire.ts +41 -407
  871. package/examples/extensions/sandbox/package-lock.json +2 -2
  872. package/examples/extensions/sandbox/package.json +1 -1
  873. package/examples/extensions/with-deps/package-lock.json +2 -2
  874. package/examples/extensions/with-deps/package.json +1 -1
  875. package/npm-shrinkwrap.json +13 -13
  876. package/package.json +4 -4
  877. package/dist/core/delegation/session-worker-result.d.ts +0 -46
  878. package/dist/core/delegation/session-worker-result.d.ts.map +0 -1
  879. package/dist/core/delegation/session-worker-result.js +0 -113
  880. package/dist/core/delegation/session-worker-result.js.map +0 -1
  881. package/dist/core/delegation/worker-result.d.ts.map +0 -1
  882. package/dist/core/delegation/worker-result.js.map +0 -1
  883. package/dist/core/telemetry.d.ts.map +0 -1
  884. package/dist/core/telemetry.js.map +0 -1
@@ -36,7 +36,7 @@ import { createHash } from "node:crypto";
36
36
  import { existsSync, readFileSync } from "node:fs";
37
37
  import { isAbsolute, join } from "node:path";
38
38
  import { DEFAULT_ACTIVE_TOOL_NAMES, mapToolNamesForPlatform } from "./default-tool-surface.js";
39
- import { acknowledgeWorkerResultReview } from "./delegation/session-worker-result.js";
39
+ import { acknowledgeWorkerClaimReview } from "./delegation/session-worker-claim.js";
40
40
  import { createCoreDiagnosticsToolDefinitions } from "./extensions/builtin.js";
41
41
  import { ExtensionRunner, wrapRegisteredTools, } from "./extensions/index.js";
42
42
  import { disposeExtensionEventSubscriptions } from "./extensions/loader.js";
@@ -46,25 +46,33 @@ import { evaluateSurfaceFitness } from "./model-router/fitness-gate.js";
46
46
  import { FitnessStore } from "./models/fitness-store.js";
47
47
  import { describeInFlightWorkUnit, getInFlightWorkUnits } from "./reload-blockers.js";
48
48
  import { ScoutController } from "./scout-controller.js";
49
+ import { wrapToolWithCredentialExposureGuard } from "./secrets/credential-exposure-guard.js";
50
+ import { SecretVault } from "./secrets/secret-vault.js";
49
51
  import { getSessionRole, isWorkerSession, WORKER_FORBIDDEN_TOOLS } from "./session-role.js";
50
52
  import { matchesResourceProfilePattern, } from "./settings-manager.js";
51
53
  import { createSyntheticSourceInfo } from "./source-info.js";
54
+ import { projectOpenTaskSteps } from "./tasks/task-projection.js";
52
55
  import { buildReflexUserPrompt, parseReflexPlan, REFLEX_INTERPRETER_SYSTEM_PROMPT, } from "./toolkit/reflex-interpreter.js";
53
56
  import { executeToolkitScript } from "./toolkit/script-runner.js";
57
+ import { createAskQuestionToolDefinition } from "./tools/ask-question.js";
54
58
  import { createContextScoutToolDefinition } from "./tools/context-scout.js";
55
59
  import { createDelegateToolDefinition } from "./tools/delegate.js";
56
60
  import { createDelegateStatusToolDefinition } from "./tools/delegate-status.js";
57
61
  import { createFindTool } from "./tools/find.js";
58
62
  import { createGoalToolDefinition } from "./tools/goal.js";
59
63
  import { createGrepTool } from "./tools/grep.js";
60
- import { createAllToolDefinitions } from "./tools/index.js";
64
+ import { allToolNames, createToolDefinition } from "./tools/index.js";
61
65
  import { createModelFitnessToolDefinition } from "./tools/model-fitness.js";
62
66
  import { resolveToCwd } from "./tools/path-utils.js";
63
67
  import { createReadTool } from "./tools/read.js";
68
+ import { createRunProcessToolDefinition } from "./tools/run-process.js";
64
69
  import { createRunToolkitScriptToolDefinition } from "./tools/run-toolkit-script.js";
70
+ import { createSecretStoreToolDefinition } from "./tools/secret-store.js";
71
+ import { disposePersistentShellSession } from "./tools/shell-session.js";
65
72
  import { createTaskStepsToolDefinition } from "./tools/task-steps.js";
66
73
  import { dispatchTmuxWorker } from "./tools/tmux-dispatch.js";
67
74
  import { createToolDefinitionFromAgentTool } from "./tools/tool-definition-wrapper.js";
75
+ import { disposeWindowsShellState } from "./tools/windows-shell-state.js";
68
76
  import { createWorktreeSyncToolDefinition } from "./tools/worktree-sync.js";
69
77
  import { createLane } from "./worktree-sync/git-engine.js";
70
78
  import { WorktreeLaneGate } from "./worktree-sync/lane-gate.js";
@@ -93,16 +101,15 @@ export function hasAnsweredToolCallOnBranch(sessionManager, toolCallId) {
93
101
  .some((entry) => entry.type === "message" && entry.message.role === "toolResult" && entry.message.toolCallId === toolCallId);
94
102
  }
95
103
  /**
96
- * Project a task-steps snapshot down to the OPEN (non-terminal) steps the goal tool's
97
- * cross-visibility nudge needs. Mirrors `goal-runtime-snapshot.ts`'s `openTaskSteps` filter
98
- * (status not "completed"/"cancelled", `activeForm || content`) so the two read the same
99
- * "open" definition, narrowed to `OpenTaskStepRef`'s id+content shape. Exported (pure, no
100
- * `this`) so the goal tool's `getOpenTaskSteps` wiring below is directly testable.
104
+ * Goal-tool adapter over the canonical open-task projection. Exported (pure, no `this`) so the
105
+ * production `getOpenTaskSteps` wiring below remains directly testable without another filter.
101
106
  */
102
107
  export function deriveOpenTaskStepRefs(taskStepsState) {
103
- return (taskStepsState?.steps ?? [])
104
- .filter((step) => step.status !== "completed" && step.status !== "cancelled")
105
- .map((step) => ({ id: step.id, content: step.activeForm || step.content }));
108
+ return projectOpenTaskSteps(taskStepsState).map((step) => ({
109
+ id: step.id,
110
+ content: step.content,
111
+ ...(step.requirementIds?.length ? { requirementIds: step.requirementIds } : {}),
112
+ }));
106
113
  }
107
114
  /**
108
115
  * Owns the tool-registry build and the self-modification-safe extension reload extracted from
@@ -115,11 +122,66 @@ export class RuntimeBuilder {
115
122
  _toolPromptSnippets = new Map();
116
123
  _toolPromptGuidelines = new Map();
117
124
  _baseToolDefinitions = new Map();
125
+ /** Exact extensions the owner approved through the live-load API. Discovery never populates this set. */
126
+ _explicitLiveExtensionPaths = new Set();
118
127
  _reloadPromise;
119
128
  _reloadRequested = false;
129
+ _secretVault;
120
130
  deps;
121
131
  constructor(deps) {
122
132
  this.deps = deps;
133
+ this._secretVault = new SecretVault({
134
+ agentDir: deps.getAgentDir(),
135
+ onEnvironmentChanged: () => {
136
+ const sessionKey = deps.getShellSessionKey();
137
+ disposePersistentShellSession(sessionKey);
138
+ disposeWindowsShellState(sessionKey);
139
+ },
140
+ });
141
+ }
142
+ /**
143
+ * Resolve the construction and activation policy once for a runtime generation. This is the
144
+ * UAC choke point: callers must consult it before invoking a tool factory, not merely before
145
+ * placing an already-created definition in the live registry.
146
+ */
147
+ _createToolAccessPolicy() {
148
+ const role = getSessionRole();
149
+ const configuredAllowedToolNames = this.deps.getAllowedToolNames();
150
+ const allowedToolNames = configuredAllowedToolNames
151
+ ? new Set(mapToolNamesForPlatform([...configuredAllowedToolNames]))
152
+ : undefined;
153
+ const configuredExcludedToolNames = this.deps.getExcludedToolNames();
154
+ const excludedToolNames = configuredExcludedToolNames
155
+ ? new Set(mapToolNamesForPlatform([...configuredExcludedToolNames]))
156
+ : undefined;
157
+ const configuredToolProfileFilter = this.deps.getToolProfileFilter();
158
+ const toolProfileFilter = configuredToolProfileFilter
159
+ ? {
160
+ allow: mapToolNamesForPlatform(configuredToolProfileFilter.allow),
161
+ block: mapToolNamesForPlatform(configuredToolProfileFilter.block),
162
+ }
163
+ : undefined;
164
+ return {
165
+ allowedToolNames,
166
+ toolProfileFilter,
167
+ allows: (name) => {
168
+ // Strict worker UAC ceiling wins over every explicit grant.
169
+ if (role === "worker" && WORKER_FORBIDDEN_TOOLS.has(name))
170
+ return false;
171
+ if (allowedToolNames && !allowedToolNames.has(name))
172
+ return false;
173
+ if (excludedToolNames?.has(name))
174
+ return false;
175
+ if (!toolProfileFilter)
176
+ return true;
177
+ if (toolProfileFilter.allow.length > 0 && !matchesResourceProfilePattern(name, toolProfileFilter.allow)) {
178
+ return false;
179
+ }
180
+ if (matchesResourceProfilePattern(name, toolProfileFilter.block))
181
+ return false;
182
+ return true;
183
+ },
184
+ };
123
185
  }
124
186
  async _runContextScout(query, maxTurns, artifactStore) {
125
187
  const cwd = this.deps.getCwd();
@@ -127,9 +189,9 @@ export class RuntimeBuilder {
127
189
  resolveScoutModel: async () => resolveScoutModel(this.deps.getModelRegistry(), this.deps.getSettingsManager().getScoutSettings().model, this.deps.getAgentDir(), (model) => this.deps.isModelExhausted(model)),
128
190
  getCwd: () => cwd,
129
191
  buildReadOnlyTools: (toolCwd) => [
130
- createReadTool(toolCwd),
131
- createGrepTool(toolCwd, { artifactStore }),
132
- createFindTool(toolCwd, { artifactStore }),
192
+ wrapToolWithCredentialExposureGuard(createReadTool(toolCwd), toolCwd, this._secretVault),
193
+ wrapToolWithCredentialExposureGuard(createGrepTool(toolCwd, { artifactStore }), toolCwd, this._secretVault),
194
+ wrapToolWithCredentialExposureGuard(createFindTool(toolCwd, { artifactStore }), toolCwd, this._secretVault),
133
195
  ],
134
196
  streamFn: this.deps.getAgent().streamFn,
135
197
  fileExists: (path) => existsSync(resolveCwdPath(cwd, path)),
@@ -172,46 +234,14 @@ export class RuntimeBuilder {
172
234
  return this._toolDefinitions.get(name)?.definition;
173
235
  }
174
236
  refreshToolRegistry(options) {
175
- const role = getSessionRole();
176
237
  const previousRegistryNames = new Set(this._toolRegistry.keys());
177
238
  // Re-derive from the pre-filter REQUEST, never from agent.state.tools: the active set is
178
239
  // capability/profile-filtered, so feeding it back through setActiveToolsByName would
179
240
  // permanently shrink what a later switch to a larger model (or permissive profile) restores.
180
241
  const previousActiveToolNames = mapToolNamesForPlatform(this.deps.getRequestedActiveToolNames() ?? this.deps.getActiveToolNames());
181
- const configuredAllowedToolNames = this.deps.getAllowedToolNames();
182
- const allowedToolNames = configuredAllowedToolNames
183
- ? new Set(mapToolNamesForPlatform([...configuredAllowedToolNames]))
184
- : undefined;
185
- const configuredExcludedToolNames = this.deps.getExcludedToolNames();
186
- const excludedToolNames = configuredExcludedToolNames
187
- ? new Set(mapToolNamesForPlatform([...configuredExcludedToolNames]))
188
- : undefined;
189
- const configuredToolProfileFilter = this.deps.getToolProfileFilter();
190
- const toolProfileFilter = configuredToolProfileFilter
191
- ? {
192
- allow: mapToolNamesForPlatform(configuredToolProfileFilter.allow),
193
- block: mapToolNamesForPlatform(configuredToolProfileFilter.block),
194
- }
195
- : undefined;
196
- const isAllowedTool = (name) => {
197
- // Strict worker UAC ceiling: wins over allow-list/exclude/profile -- a worker session
198
- // (lane-bound or dispatched) can never activate this tool no matter how permissively the
199
- // active profile or an explicit request names it. See session-role.ts.
200
- if (role === "worker" && WORKER_FORBIDDEN_TOOLS.has(name))
201
- return false;
202
- if (allowedToolNames && !allowedToolNames.has(name))
203
- return false;
204
- if (excludedToolNames?.has(name))
205
- return false;
206
- if (!toolProfileFilter)
207
- return true;
208
- if (toolProfileFilter.allow.length > 0 && !matchesResourceProfilePattern(name, toolProfileFilter.allow)) {
209
- return false;
210
- }
211
- if (matchesResourceProfilePattern(name, toolProfileFilter.block))
212
- return false;
213
- return true;
214
- };
242
+ const toolAccess = this._createToolAccessPolicy();
243
+ const { allowedToolNames, toolProfileFilter } = toolAccess;
244
+ const isAllowedTool = toolAccess.allows;
215
245
  const registeredTools = this.deps.getExtensionRunner().getAllRegisteredTools();
216
246
  const allCustomTools = [
217
247
  ...registeredTools,
@@ -264,9 +294,13 @@ export class RuntimeBuilder {
264
294
  definition,
265
295
  sourceInfo: createSyntheticSourceInfo(`<builtin:${definition.name}>`, { source: "builtin" }),
266
296
  })), runner);
267
- const toolRegistry = new Map(wrappedBuiltInTools.map((tool) => [tool.name, tool]));
297
+ const toolRegistry = new Map(wrappedBuiltInTools.map((tool) => {
298
+ const guarded = wrapToolWithCredentialExposureGuard(tool, this.deps.getCwd(), this._secretVault);
299
+ return [guarded.name, guarded];
300
+ }));
268
301
  for (const tool of wrappedExtensionTools) {
269
- toolRegistry.set(tool.name, tool);
302
+ const guarded = wrapToolWithCredentialExposureGuard(tool, this.deps.getCwd(), this._secretVault);
303
+ toolRegistry.set(guarded.name, guarded);
270
304
  }
271
305
  this._toolRegistry = toolRegistry;
272
306
  const requestedBase = options?.activeToolNames
@@ -425,169 +459,220 @@ export class RuntimeBuilder {
425
459
  const shellCommandPrefix = settingsManager.getShellCommandPrefix();
426
460
  const shellPath = settingsManager.getShellPath();
427
461
  const baseToolsOverride = this.deps.getBaseToolsOverride();
462
+ const toolAccess = this._createToolAccessPolicy();
428
463
  // Artifact-producing tools must not emit a "Full output: artifact tool-output:<id>" handle
429
464
  // that nothing can resolve. If artifact_retrieve is explicitly excluded/blocked/outside
430
465
  // an active allowlist, don't hand grep/find/run_toolkit_script an artifact store at all:
431
466
  // they fall back to their bounded preview/truncation behavior, with no payload/meta files
432
467
  // ever written and no retrieval promise made.
433
- const toolArtifactStore = this.deps.isToolOrCommandAllowedByProfile("artifact_retrieve")
434
- ? this.deps.getToolArtifactStore()
435
- : undefined;
436
- const baseToolDefinitions = baseToolsOverride
437
- ? Object.fromEntries(Object.entries(baseToolsOverride).map(([name, tool]) => [name, createToolDefinitionFromAgentTool(tool)]))
438
- : createAllToolDefinitions(this.deps.getCwd(), {
439
- read: { autoResizeImages },
440
- bash: { commandPrefix: shellCommandPrefix, shellPath, sessionKey: this.deps.getShellSessionKey() },
441
- grep: { artifactStore: toolArtifactStore },
442
- find: { artifactStore: toolArtifactStore },
443
- artifact_retrieve: { artifactStore: toolArtifactStore },
444
- });
445
- this._baseToolDefinitions = new Map(Object.entries(baseToolDefinitions).map(([name, tool]) => [name, tool]));
468
+ const toolArtifactStore = !baseToolsOverride && toolAccess.allows("artifact_retrieve") ? this.deps.getToolArtifactStore() : undefined;
469
+ const toolOptions = {
470
+ read: { autoResizeImages },
471
+ bash: {
472
+ commandPrefix: shellCommandPrefix,
473
+ shellPath,
474
+ sessionKey: this.deps.getShellSessionKey(),
475
+ platform: process.platform,
476
+ spawnHook: (context) => ({
477
+ ...context,
478
+ env: { ...context.env, ...this._secretVault.getEnvironmentForCwd(context.cwd) },
479
+ }),
480
+ },
481
+ python: { environment: (cwd) => this._secretVault.getEnvironmentForCwd(cwd) },
482
+ grep: { artifactStore: toolArtifactStore },
483
+ find: { artifactStore: toolArtifactStore },
484
+ artifact_retrieve: { artifactStore: toolArtifactStore },
485
+ };
486
+ this._baseToolDefinitions = baseToolsOverride
487
+ ? new Map(Object.entries(baseToolsOverride)
488
+ .filter(([name]) => toolAccess.allows(name))
489
+ .map(([name, tool]) => [name, createToolDefinitionFromAgentTool(tool)]))
490
+ : new Map([...allToolNames]
491
+ .filter((name) => toolAccess.allows(name))
492
+ .map((name) => [name, createToolDefinition(name, this.deps.getCwd(), toolOptions)]));
446
493
  if (!baseToolsOverride) {
447
- for (const definition of createCoreDiagnosticsToolDefinitions(() => this.deps.getActiveToolNames(), () => this.getAllTools(), (messages) => this.deps.getContextGcReport(messages), () => this.deps.getMemoryAuditDiagnostics())) {
448
- this._baseToolDefinitions.set(definition.name, definition);
494
+ if (toolAccess.allows("run_process")) {
495
+ const orchestrationProfile = this.deps.getOrchestrationProfile?.();
496
+ if (orchestrationProfile?.executionPolicy) {
497
+ this._baseToolDefinitions.set("run_process", createRunProcessToolDefinition(this.deps.getCwd(), {
498
+ policy: orchestrationProfile.executionPolicy,
499
+ maxWallClockMs: orchestrationProfile.budget.maxWallClockMs ?? 0,
500
+ }));
501
+ }
502
+ }
503
+ if (toolAccess.allows("context_audit")) {
504
+ for (const definition of createCoreDiagnosticsToolDefinitions(() => this.deps.getActiveToolNames(), () => this.getAllTools(), (messages) => this.deps.getContextGcReport(messages), () => this.deps.getMemoryAuditDiagnostics())) {
505
+ this._baseToolDefinitions.set(definition.name, definition);
506
+ }
449
507
  }
450
508
  // Hoisted above the goal-tool registration (rather than declared only inside the
451
509
  // worktreeSync-enabled block further below) so the SAME settings/deps factory backs both
452
510
  // the goal->tmux lane-first dispatch dep (`createLaneWorktree`, immediately below) and the
453
511
  // `worktree_sync` tool registration later in this method -- one source of truth, no drift.
454
- const worktreeSyncSettings = settingsManager.getWorktreeSyncSettings();
512
+ const worktreeSyncSettings = toolAccess.allows("goal") || toolAccess.allows("worktree_sync")
513
+ ? settingsManager.getWorktreeSyncSettings()
514
+ : undefined;
455
515
  const worktreeSyncEngineDeps = () => buildWorktreeSyncEngineDeps({
456
516
  cwd: this.deps.getCwd(),
457
517
  agentDir: this.deps.getAgentDir(),
458
518
  settingsManager: this.deps.getSettingsManager(),
459
519
  sessionId: this.deps.getSessionManager().getSessionId(),
460
520
  });
461
- const goalToolDefinition = createGoalToolDefinition({
462
- getGoalState: () => this.deps.getGoalStateSnapshot(),
463
- saveGoalState: (state) => {
464
- this.deps.saveGoalStateSnapshot(state);
465
- },
466
- // kind:"tool" evidence refs verify against real session records.
467
- hasToolCallId: (toolCallId) => hasAnsweredToolCallOnBranch(this.deps.getSessionManager(), toolCallId),
468
- // kind:"worker" evidence refs verify against the SAME live lane/result accessors the
469
- // delegate_status tool already uses below -- live wiring (these were declared optional
470
- // and read-defensive on the goal-tool deps type).
471
- getLaneRecords: () => this.deps.getWorkerLaneRecords(),
472
- getWorkerResultSnapshots: () => this.deps.getWorkerResultSnapshots(),
473
- // dispatch_worker's tool-layer side effect for the default (in_process) route: starts a
474
- // real in-process worker lane through the SAME starter the delegate tool uses (below),
475
- // adapted from its `{started:true;record}|{started:false;skipReason}` shape onto this
476
- // tool's narrower `{laneId}|{skipReason}` shape.
477
- startWorkerDelegation: (args) => {
478
- const outcome = this.deps.startWorkerDelegation({ instructions: args.instructions });
479
- return outcome.started ? { laneId: outcome.record.laneId } : { skipReason: outcome.skipReason };
480
- },
481
- // dispatch_worker's tool-layer side effect for `dispatchTarget:"tmux"`: core structurally
482
- // invokes the SAME tmux_agent_manager fire_task call the model itself would make (no
483
- // extension change, no faked launch/laneId) -- see tmux-dispatch.ts's doc comment.
484
- dispatchTmuxWorker: (args) => dispatchTmuxWorker({
485
- getToolDefinition: (name) => this.getToolDefinition(name),
486
- createExtensionContext: () => this.deps.getExtensionRunner().createContext(),
487
- resolveManagedLaneId: (id) => this.deps.resolveManagedLaneId(id),
488
- getGoalId: () => this.deps.getGoalStateSnapshot()?.goalId,
489
- evaluateWorkerLaneRefusal: () => this.deps.getLaneWorkerRefusal(),
490
- // Lane-first dispatch, wired ONLY when worktree-sync is enabled -- absent otherwise,
491
- // so a disabled/default session gets the existing byte-identical fire_task params.
492
- createLaneWorktree: worktreeSyncSettings.enabled
493
- ? async (laneArgs) => {
494
- const created = await createLane(worktreeSyncEngineDeps(), {
495
- ...(laneArgs.goalId !== undefined ? { goalId: laneArgs.goalId } : {}),
496
- requirementId: laneArgs.requirementId,
497
- });
498
- // Never fake a lane: any non-"ok" engine code (max lanes, invalid key, git
499
- // error, ...) is refused, mapped by the caller onto the stable
500
- // "worktree_create_failed" skip reason before any fire_task call runs.
501
- if (created.code !== "ok")
502
- return { skipReason: created.code };
503
- return { laneKey: created.lane.laneKey, worktreePath: created.lane.worktreePath };
504
- }
505
- : undefined,
506
- }, args),
507
- cwd: () => this.deps.getCwd(),
508
- // Reuses the already branch-scoped getTaskStepsStateSnapshot dep -- no new
509
- // SessionManager access needed for the cross-visibility nudge.
510
- getOpenTaskSteps: () => deriveOpenTaskStepRefs(this.deps.getTaskStepsStateSnapshot()),
511
- });
512
- this._baseToolDefinitions.set(goalToolDefinition.name, goalToolDefinition);
513
- const taskStepsToolDefinition = createTaskStepsToolDefinition({
514
- getTaskStepsState: () => this.deps.getTaskStepsStateSnapshot(),
515
- saveTaskStepsState: (state) => {
516
- this.deps.saveTaskStepsStateSnapshot(state);
517
- },
518
- });
519
- this._baseToolDefinitions.set(taskStepsToolDefinition.name, taskStepsToolDefinition);
520
- const delegateToolDefinition = createDelegateToolDefinition({
521
- startWorkerDelegation: (args) => this.deps.startWorkerDelegation(args),
522
- runWorkerDelegation: (args) => this.deps.runWorkerDelegationOnce(args),
523
- });
524
- const delegateStatusToolDefinition = createDelegateStatusToolDefinition({
525
- getLaneRecords: () => this.deps.getWorkerLaneRecords(),
526
- getWorkerResultSnapshots: () => this.deps.getWorkerResultSnapshots(),
527
- // Durable ack persists straight through the session log; routed here (rather than
528
- // a new agent-session dep) because getSessionManager() is already a stable, generic
529
- // passthrough dep, so no other package needs to change for this to work.
530
- acknowledgeWorkerReview: (requestId) => acknowledgeWorkerResultReview(this.deps.getSessionManager(), requestId),
531
- });
532
- this._baseToolDefinitions.set(delegateToolDefinition.name, delegateToolDefinition);
533
- this._baseToolDefinitions.set(delegateStatusToolDefinition.name, delegateStatusToolDefinition);
521
+ if (toolAccess.allows("goal")) {
522
+ const goalToolDefinition = createGoalToolDefinition({
523
+ getGoalState: () => this.deps.getGoalStateSnapshot(),
524
+ saveGoalState: (state, expected) => {
525
+ this.deps.saveGoalStateSnapshot(state, expected);
526
+ },
527
+ // kind:"tool" evidence refs verify against real session records.
528
+ hasToolCallId: (toolCallId) => hasAnsweredToolCallOnBranch(this.deps.getSessionManager(), toolCallId),
529
+ // kind:"worker" evidence refs verify against the SAME live lane/claim accessors the
530
+ // delegate_status tool already uses below -- live wiring (these were declared optional
531
+ // and read-defensive on the goal-tool deps type).
532
+ getLaneRecords: () => this.deps.getWorkerLaneRecords(),
533
+ getWorkerClaimSnapshots: () => this.deps.getWorkerClaimSnapshots(),
534
+ // dispatch_worker's tool-layer side effect for the default (in_process) route: starts a
535
+ // real in-process worker lane through the SAME starter the delegate tool uses (below),
536
+ // adapted from its `{started:true;record}|{started:false;skipReason}` shape onto this
537
+ // tool's narrower `{laneId}|{skipReason}` shape.
538
+ startWorkerDelegation: (args) => {
539
+ const outcome = this.deps.startWorkerDelegation({ instructions: args.instructions });
540
+ return outcome.started ? { laneId: outcome.record.laneId } : { skipReason: outcome.skipReason };
541
+ },
542
+ // dispatch_worker's tool-layer side effect for `dispatchTarget:"tmux"`: core structurally
543
+ // invokes the SAME tmux_agent_manager fire_task call the model itself would make (no
544
+ // extension change, no faked launch/laneId) -- see tmux-dispatch.ts's doc comment.
545
+ dispatchTmuxWorker: (args) => dispatchTmuxWorker({
546
+ getToolDefinition: (name) => this.getToolDefinition(name),
547
+ createExtensionContext: () => this.deps.getExtensionRunner().createContext(),
548
+ resolveManagedLaneId: (id) => this.deps.resolveManagedLaneId(id),
549
+ getGoalId: () => this.deps.getGoalStateSnapshot()?.goalId,
550
+ evaluateWorkerLaneRefusal: () => this.deps.getLaneWorkerRefusal(),
551
+ // Lane-first dispatch, wired ONLY when worktree-sync is enabled -- absent otherwise,
552
+ // so a disabled/default session gets the existing byte-identical fire_task params.
553
+ createLaneWorktree: worktreeSyncSettings?.enabled
554
+ ? async (laneArgs) => {
555
+ const created = await createLane(worktreeSyncEngineDeps(), {
556
+ ...(laneArgs.goalId !== undefined ? { goalId: laneArgs.goalId } : {}),
557
+ requirementId: laneArgs.requirementId,
558
+ });
559
+ // Never fake a lane: any non-"ok" engine code (max lanes, invalid key, git
560
+ // error, ...) is refused, mapped by the caller onto the stable
561
+ // "worktree_create_failed" skip reason before any fire_task call runs.
562
+ if (created.code !== "ok")
563
+ return { skipReason: created.code };
564
+ return { laneKey: created.lane.laneKey, worktreePath: created.lane.worktreePath };
565
+ }
566
+ : undefined,
567
+ }, args),
568
+ cwd: () => this.deps.getCwd(),
569
+ // Reuses the already branch-scoped getTaskStepsStateSnapshot dep -- no new
570
+ // SessionManager access needed for the cross-visibility nudge.
571
+ getOpenTaskSteps: () => deriveOpenTaskStepRefs(this.deps.getTaskStepsStateSnapshot()),
572
+ });
573
+ this._baseToolDefinitions.set(goalToolDefinition.name, goalToolDefinition);
574
+ }
575
+ if (toolAccess.allows("task_steps")) {
576
+ const taskStepsToolDefinition = createTaskStepsToolDefinition({
577
+ getTaskStepsState: () => this.deps.getTaskStepsStateSnapshot(),
578
+ saveTaskStepsState: (state) => {
579
+ this.deps.saveTaskStepsStateSnapshot(state);
580
+ },
581
+ });
582
+ this._baseToolDefinitions.set(taskStepsToolDefinition.name, taskStepsToolDefinition);
583
+ }
584
+ if (toolAccess.allows("ask_question")) {
585
+ const askQuestionToolDefinition = createAskQuestionToolDefinition({
586
+ sessionManager: this.deps.getSessionManager(),
587
+ artifactStore: toolArtifactStore,
588
+ getImageStore: () => this.deps.getSessionImageStore(),
589
+ });
590
+ this._baseToolDefinitions.set(askQuestionToolDefinition.name, askQuestionToolDefinition);
591
+ }
592
+ if (toolAccess.allows("secret_store")) {
593
+ const secretStoreToolDefinition = createSecretStoreToolDefinition({ vault: this._secretVault });
594
+ this._baseToolDefinitions.set(secretStoreToolDefinition.name, secretStoreToolDefinition);
595
+ }
596
+ if (toolAccess.allows("delegate")) {
597
+ const delegateToolDefinition = createDelegateToolDefinition({
598
+ startWorkerDelegation: (args) => this.deps.startWorkerDelegation(args),
599
+ runWorkerDelegation: (args) => this.deps.runWorkerDelegationOnce(args),
600
+ orchestrationProfiles: this.deps.getOrchestrationProfileCatalog(),
601
+ });
602
+ this._baseToolDefinitions.set(delegateToolDefinition.name, delegateToolDefinition);
603
+ }
604
+ if (toolAccess.allows("delegate_status")) {
605
+ const delegateStatusToolDefinition = createDelegateStatusToolDefinition({
606
+ getLaneRecords: () => this.deps.getWorkerLaneRecords(),
607
+ getWorkerClaimSnapshots: () => this.deps.getWorkerClaimSnapshots(),
608
+ // Durable ack persists straight through the session log; routed here (rather than
609
+ // a new agent-session dep) because getSessionManager() is already a stable, generic
610
+ // passthrough dep, so no other package needs to change for this to work.
611
+ acknowledgeWorkerReview: (requestId) => acknowledgeWorkerClaimReview(this.deps.getSessionManager(), requestId),
612
+ });
613
+ this._baseToolDefinitions.set(delegateStatusToolDefinition.name, delegateStatusToolDefinition);
614
+ }
534
615
  // Registered but not default-active: probes spend tokens on the probed model, so
535
616
  // activation is an explicit choice (settings/profile/setActiveTools or /autonomy fitness).
536
- const modelFitnessToolDefinition = createModelFitnessToolDefinition({
537
- runProbe: (args) => this.deps.runModelFitness(args),
538
- });
539
- this._baseToolDefinitions.set(modelFitnessToolDefinition.name, modelFitnessToolDefinition);
540
- if (settingsManager.getScoutSettings().enabled) {
617
+ if (toolAccess.allows("model_fitness")) {
618
+ const modelFitnessToolDefinition = createModelFitnessToolDefinition({
619
+ runProbe: (args) => this.deps.runModelFitness(args),
620
+ });
621
+ this._baseToolDefinitions.set(modelFitnessToolDefinition.name, modelFitnessToolDefinition);
622
+ }
623
+ if (toolAccess.allows("context_scout") && settingsManager.getScoutSettings().enabled) {
541
624
  const contextScoutToolDefinition = createContextScoutToolDefinition({
542
625
  runScout: (input) => this._runContextScout(input.query, input.maxTurns, toolArtifactStore),
543
626
  });
544
627
  this._baseToolDefinitions.set(contextScoutToolDefinition.name, contextScoutToolDefinition);
545
628
  }
546
- const runToolkitScriptToolDefinition = createRunToolkitScriptToolDefinition({
547
- getScripts: () => this.deps.getSettingsManager().getToolkitScripts(),
548
- execute: (script, scriptArgs) => executeToolkitScript({ script, scriptArgs, cwd: this.deps.getCwd() }),
549
- artifactStore: toolArtifactStore,
550
- // Reflex brain (fitness-gated local model): resolves ambiguous requests into a
551
- // registry pick. Best-effort — absent/unfit brain keeps the shortlist behavior.
552
- interpret: async (request, scripts) => {
553
- const model = this.deps.resolveCurationModelIfFit();
554
- if (!model)
555
- return undefined;
556
- const completion = await this.deps.runIsolatedCompletion({
557
- systemPrompt: REFLEX_INTERPRETER_SYSTEM_PROMPT,
558
- messages: [
559
- {
560
- role: "user",
561
- content: [{ type: "text", text: buildReflexUserPrompt(request, scripts) }],
562
- timestamp: Date.now(),
563
- },
564
- ],
565
- model,
566
- thinkingLevel: "off",
567
- maxTokens: 256,
568
- cacheRetention: "short",
569
- // Stable per-lane synthetic affinity key so repeat ambiguous-request
570
- // interpretations hit the same cache-warm backend.
571
- laneKind: "toolkit-brain",
572
- });
573
- if (completion.usage.cost.total > 0 || completion.usage.totalTokens > 0) {
574
- // `reportId` keyed on the ambiguous request text driving THIS interpretation —
575
- // stable across a retry of the same tool call, distinct across genuinely
576
- // different requests.
577
- const reportId = deriveSpawnedUsageReportId("toolkit-brain", this.deps.getSessionManager().getSessionId(), request);
578
- this.deps.addSpawnedUsage(completion.usage, { label: "toolkit-brain", reportId });
579
- }
580
- return parseReflexPlan(completion.text);
581
- },
582
- });
583
- this._baseToolDefinitions.set(runToolkitScriptToolDefinition.name, runToolkitScriptToolDefinition);
629
+ if (toolAccess.allows("run_toolkit_script")) {
630
+ const runToolkitScriptToolDefinition = createRunToolkitScriptToolDefinition({
631
+ getScripts: () => this.deps.getSettingsManager().getToolkitScripts(),
632
+ execute: (script, scriptArgs) => executeToolkitScript({ script, scriptArgs, cwd: this.deps.getCwd() }),
633
+ artifactStore: toolArtifactStore,
634
+ // Reflex brain (fitness-gated local model): resolves ambiguous requests into a
635
+ // registry pick. Best-effort — absent/unfit brain keeps the shortlist behavior.
636
+ interpret: async (request, scripts) => {
637
+ const model = this.deps.resolveCurationModelIfFit();
638
+ if (!model)
639
+ return undefined;
640
+ const completion = await this.deps.runIsolatedCompletion({
641
+ systemPrompt: REFLEX_INTERPRETER_SYSTEM_PROMPT,
642
+ messages: [
643
+ {
644
+ role: "user",
645
+ content: [{ type: "text", text: buildReflexUserPrompt(request, scripts) }],
646
+ timestamp: Date.now(),
647
+ },
648
+ ],
649
+ model,
650
+ thinkingLevel: "off",
651
+ maxTokens: 256,
652
+ cacheRetention: "short",
653
+ // Stable per-lane synthetic affinity key so repeat ambiguous-request
654
+ // interpretations hit the same cache-warm backend.
655
+ laneKind: "toolkit-brain",
656
+ });
657
+ if (completion.usage.cost.total > 0 || completion.usage.totalTokens > 0) {
658
+ // `reportId` keyed on the ambiguous request text driving THIS interpretation —
659
+ // stable across a retry of the same tool call, distinct across genuinely
660
+ // different requests.
661
+ const reportId = deriveSpawnedUsageReportId("toolkit-brain", this.deps.getSessionManager().getSessionId(), request);
662
+ this.deps.addSpawnedUsage(completion.usage, { label: "toolkit-brain", reportId });
663
+ }
664
+ return parseReflexPlan(completion.text);
665
+ },
666
+ });
667
+ this._baseToolDefinitions.set(runToolkitScriptToolDefinition.name, runToolkitScriptToolDefinition);
668
+ }
584
669
  // Worktree-sync (opt-in): the closed-action lane workflow tool, plus -- for a session
585
670
  // launched lane-bound (PI_WORKTREE_LANE) -- the G8/G10 lane gate wrapped UNDER the
586
671
  // file-mutation tools (edit/write, plus cooperative bash only for interactive lanes), so a sync_required lane fails closed with the
587
672
  // exact recovery step rather than relying on prompt compliance. `worktreeSyncSettings` /
588
673
  // `worktreeSyncEngineDeps` are hoisted above (declared before the goal-tool registration)
589
674
  // so the goal->tmux lane-first dispatch dep and this tool share one settings/deps source.
590
- if (worktreeSyncSettings.enabled) {
675
+ if (toolAccess.allows("worktree_sync") && worktreeSyncSettings?.enabled) {
591
676
  const worktreeSyncToolDefinition = createWorktreeSyncToolDefinition({
592
677
  engineDeps: worktreeSyncEngineDeps,
593
678
  settings: () => this.deps.getSettingsManager().getWorktreeSyncSettings(),
@@ -636,7 +721,7 @@ export class RuntimeBuilder {
636
721
  extensionsResult.runtime.flagValues.set(name, value);
637
722
  }
638
723
  }
639
- const extensions = this.deps.filterExtensionsForRuntime(extensionsResult.extensions);
724
+ const extensions = this.deps.filterExtensionsForRuntime(extensionsResult.extensions, this._explicitLiveExtensionPaths);
640
725
  const runtimeExtensionPaths = new Set(extensions.map((extension) => extension.path));
641
726
  extensionsResult.runtime.pendingProviderRegistrations =
642
727
  extensionsResult.runtime.pendingProviderRegistrations.filter((registration) => runtimeExtensionPaths.has(registration.extensionPath));
@@ -753,6 +838,15 @@ export class RuntimeBuilder {
753
838
  deferExtensionDispose: true,
754
839
  skipSettingsReload: true,
755
840
  });
841
+ // A live-load call is an exact session-owned grant. Resource discovery deliberately cannot
842
+ // recreate it without a profile, so restore only those approved paths into the new runtime
843
+ // generation before binding it.
844
+ for (const extensionPath of this._explicitLiveExtensionPaths) {
845
+ if (this.deps.isExtensionPathAllowed(extensionPath, "explicit") &&
846
+ !this.deps.getResourceLoader().getLoadedExtension(extensionPath)) {
847
+ await this._importExtension(extensionPath);
848
+ }
849
+ }
756
850
  // Replace the previous extension-owned provider generation before binding the new one. The
757
851
  // bulk refresh also preserves API/OAuth streams for surviving non-extension providers.
758
852
  this.deps.getModelRegistry().unregisterProviders(previousExtensionProviderNames);
@@ -818,9 +912,23 @@ export class RuntimeBuilder {
818
912
  */
819
913
  async unloadExtensionLive(extensionPath) {
820
914
  this._assertReloadQuiescent("unload extension");
915
+ try {
916
+ await this._unloadExtensionLive(extensionPath, true, true);
917
+ }
918
+ catch (error) {
919
+ await this._recoverLiveExtensionFailure();
920
+ throw error;
921
+ }
922
+ }
923
+ async _unloadExtensionLive(extensionPath, revokeExplicitGrant, notify) {
821
924
  const ext = this.deps.getResourceLoader().getLoadedExtension(extensionPath);
925
+ const explicitGrantPath = ext?.path ?? extensionPath;
926
+ const hadExplicitGrant = this._explicitLiveExtensionPaths.has(explicitGrantPath);
927
+ if (revokeExplicitGrant) {
928
+ this._explicitLiveExtensionPaths.delete(explicitGrantPath);
929
+ }
822
930
  if (!ext) {
823
- return; // Nothing to unload
931
+ return;
824
932
  }
825
933
  const previousRunner = this.deps.getExtensionRunner();
826
934
  try {
@@ -845,7 +953,7 @@ export class RuntimeBuilder {
845
953
  flagValues: previousFlagValues,
846
954
  includeAllExtensionTools: true,
847
955
  });
848
- previousRunner.invalidate();
956
+ previousRunner.retire();
849
957
  const memorySnapshot = this.deps.createMemoryReloadSnapshot();
850
958
  this.deps.restoreMemoryReloadSnapshot({
851
959
  ...memorySnapshot,
@@ -855,16 +963,13 @@ export class RuntimeBuilder {
855
963
  runtime.memoryProvidersByExtension.delete(ext.path);
856
964
  runtime.contextMemoryProvidersByExtension.delete(ext.path);
857
965
  await this.deps.initializeMemory();
858
- // Notify extensions-changed listeners
859
- this.deps.notifyExtensionsChanged();
966
+ if (notify) {
967
+ this.deps.notifyExtensionsChanged();
968
+ }
860
969
  }
861
970
  catch (error) {
862
- // Fall back to full reload on error
863
- try {
864
- await this.reload();
865
- }
866
- catch {
867
- // Suppress nested error; original error will be thrown below
971
+ if (revokeExplicitGrant && hadExplicitGrant) {
972
+ this._explicitLiveExtensionPaths.add(explicitGrantPath);
868
973
  }
869
974
  throw error;
870
975
  }
@@ -877,12 +982,26 @@ export class RuntimeBuilder {
877
982
  */
878
983
  async loadExtensionLive(extensionPath) {
879
984
  this._assertReloadQuiescent("load extension");
985
+ this._assertExtensionLoadAllowed(extensionPath, "explicit");
986
+ try {
987
+ await this._loadExtensionLive(extensionPath, "explicit", true);
988
+ }
989
+ catch (error) {
990
+ await this._recoverLiveExtensionFailure();
991
+ throw error;
992
+ }
993
+ }
994
+ async _loadExtensionLive(extensionPath, authority, notify) {
880
995
  const previousRunner = this.deps.getExtensionRunner();
996
+ let explicitGrantPath;
997
+ let hadExplicitGrant = false;
881
998
  try {
882
999
  // Load the extension with fresh import
883
- const { extension, error } = await this.deps.getResourceLoader().loadSingleExtension(extensionPath);
884
- if (error || !extension) {
885
- throw new Error(error || `Failed to load extension: ${extensionPath}`);
1000
+ const extension = await this._importExtension(extensionPath);
1001
+ if (authority === "explicit") {
1002
+ explicitGrantPath = extension.path;
1003
+ hadExplicitGrant = this._explicitLiveExtensionPaths.has(explicitGrantPath);
1004
+ this._explicitLiveExtensionPaths.add(explicitGrantPath);
886
1005
  }
887
1006
  // Rebuild runtime to aggregate tools/commands/handlers/providers
888
1007
  const activeToolNames = this.deps.getRequestedActiveToolNames() ?? this.deps.getActiveToolNames();
@@ -897,20 +1016,38 @@ export class RuntimeBuilder {
897
1016
  // Activate newly registered legacy/context providers immediately. Reinitialization also
898
1017
  // refreshes provider tools and preserves all providers owned by existing extensions.
899
1018
  await this.deps.initializeMemory();
900
- // Notify extensions-changed listeners
901
- this.deps.notifyExtensionsChanged();
1019
+ previousRunner.retire();
1020
+ if (notify) {
1021
+ this.deps.notifyExtensionsChanged();
1022
+ }
902
1023
  }
903
1024
  catch (error) {
904
- // Fall back to full reload on error
905
- try {
906
- await this.reload();
907
- }
908
- catch {
909
- // Suppress nested error; original error will be thrown below
1025
+ if (explicitGrantPath && !hadExplicitGrant) {
1026
+ this._explicitLiveExtensionPaths.delete(explicitGrantPath);
910
1027
  }
911
1028
  throw error;
912
1029
  }
913
1030
  }
1031
+ async _importExtension(extensionPath) {
1032
+ const { extension, error } = await this.deps.getResourceLoader().loadSingleExtension(extensionPath);
1033
+ if (error || !extension) {
1034
+ throw new Error(error || `Failed to load extension: ${extensionPath}`);
1035
+ }
1036
+ return extension;
1037
+ }
1038
+ _assertExtensionLoadAllowed(extensionPath, authority) {
1039
+ if (!this.deps.isExtensionPathAllowed(extensionPath, authority)) {
1040
+ throw new Error(`Cannot load extension outside the active resource profile: ${extensionPath}`);
1041
+ }
1042
+ }
1043
+ async _recoverLiveExtensionFailure() {
1044
+ try {
1045
+ await this.reload();
1046
+ }
1047
+ catch {
1048
+ // Preserve the original live-operation error; recovery is best effort.
1049
+ }
1050
+ }
914
1051
  /**
915
1052
  * Reconcile loaded extensions with the active profile.
916
1053
  * Loads extensions that should be enabled but aren't, and unloads extensions that shouldn't be.
@@ -921,66 +1058,41 @@ export class RuntimeBuilder {
921
1058
  try {
922
1059
  // Get all discoverable extension paths
923
1060
  const allDiscoverablePaths = await this.deps.getResourceLoader().getDiscoverableExtensionPaths();
924
- // Get the target enabled set based on profile filters
925
- const targetEnabledSet = new Set();
926
- for (const path of allDiscoverablePaths) {
927
- if (this.deps.getSettingsManager().isResourceAllowedByProfile("extensions", path)) {
928
- targetEnabledSet.add(path);
929
- }
930
- }
931
- // Get currently loaded set
932
1061
  const loadedExtensions = this.deps.getResourceLoader().getExtensions().extensions;
933
- const loadedSet = new Set();
934
- for (const ext of loadedExtensions) {
935
- loadedSet.add(ext.path);
936
- }
937
- // Collect unloads and loads
938
- const toUnload = [];
939
- const toLoad = [];
940
- for (const path of loadedSet) {
941
- if (!targetEnabledSet.has(path)) {
942
- toUnload.push(path);
943
- }
1062
+ const targetAuthorities = new Map();
1063
+ for (const extension of this.deps.filterExtensionsForRuntime(loadedExtensions, this._explicitLiveExtensionPaths)) {
1064
+ targetAuthorities.set(extension.path, "loaded");
944
1065
  }
945
- for (const path of targetEnabledSet) {
946
- if (!loadedSet.has(path)) {
947
- toLoad.push(path);
1066
+ for (const path of this._explicitLiveExtensionPaths) {
1067
+ if (this.deps.isExtensionPathAllowed(path, "explicit")) {
1068
+ targetAuthorities.set(path, "explicit");
948
1069
  }
949
1070
  }
950
- // Apply unloads first, then loads, to minimize churn
951
- // Collect errors but continue through all operations
952
- const errors = [];
953
- for (const path of toUnload) {
954
- try {
955
- await this.unloadExtensionLive(path);
956
- }
957
- catch (error) {
958
- errors.push(error instanceof Error ? error : new Error(String(error)));
1071
+ for (const path of allDiscoverablePaths) {
1072
+ if (this.deps.isExtensionPathAllowed(path, "profile") && !targetAuthorities.has(path)) {
1073
+ targetAuthorities.set(path, "profile");
959
1074
  }
960
1075
  }
961
- for (const path of toLoad) {
962
- try {
963
- await this.loadExtensionLive(path);
964
- }
965
- catch (error) {
966
- errors.push(error instanceof Error ? error : new Error(String(error)));
967
- }
1076
+ // Apply unloads first, then loads. A failed mutation stops the generation immediately; the
1077
+ // outer recovery reload restores one coherent runtime instead of compounding partial changes.
1078
+ for (const extension of [...loadedExtensions]) {
1079
+ if (targetAuthorities.has(extension.path) || targetAuthorities.has(extension.resolvedPath))
1080
+ continue;
1081
+ this._assertReloadQuiescent("reconcile extensions");
1082
+ await this._unloadExtensionLive(extension.path, false, false);
968
1083
  }
969
- // If any errors occurred, throw the first one (already fell back to full reload in load/unload)
970
- if (errors.length > 0) {
971
- throw errors[0];
1084
+ for (const [path, authority] of targetAuthorities) {
1085
+ if (authority === "loaded" || this.deps.getResourceLoader().getLoadedExtension(path))
1086
+ continue;
1087
+ this._assertReloadQuiescent("reconcile extensions");
1088
+ this._assertExtensionLoadAllowed(path, authority);
1089
+ await this._loadExtensionLive(path, authority, false);
972
1090
  }
973
1091
  // Single notification at the end
974
1092
  this.deps.notifyExtensionsChanged();
975
1093
  }
976
1094
  catch (error) {
977
- // Fall back to full reload on error
978
- try {
979
- await this.reload();
980
- }
981
- catch {
982
- // Suppress nested error; original error will be thrown below
983
- }
1095
+ await this._recoverLiveExtensionFailure();
984
1096
  throw error;
985
1097
  }
986
1098
  }