@caupulican/pi-adaptative 0.81.39 → 0.81.40

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 (667) hide show
  1. package/CHANGELOG.md +52 -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 +2 -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 +3 -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 +2 -0
  15. package/dist/cli/args.d.ts.map +1 -1
  16. package/dist/cli/args.js +9 -0
  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 +19 -2
  23. package/dist/core/agent-paths.d.ts.map +1 -1
  24. package/dist/core/agent-paths.js +67 -4
  25. package/dist/core/agent-paths.js.map +1 -1
  26. package/dist/core/agent-session-runtime.d.ts +52 -8
  27. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  28. package/dist/core/agent-session-runtime.js +397 -79
  29. package/dist/core/agent-session-runtime.js.map +1 -1
  30. package/dist/core/agent-session-services.d.ts +1 -0
  31. package/dist/core/agent-session-services.d.ts.map +1 -1
  32. package/dist/core/agent-session-services.js +1 -0
  33. package/dist/core/agent-session-services.js.map +1 -1
  34. package/dist/core/agent-session.d.ts +71 -136
  35. package/dist/core/agent-session.d.ts.map +1 -1
  36. package/dist/core/agent-session.js +477 -1318
  37. package/dist/core/agent-session.js.map +1 -1
  38. package/dist/core/autonomy/approval-gate.d.ts +3 -2
  39. package/dist/core/autonomy/approval-gate.d.ts.map +1 -1
  40. package/dist/core/autonomy/approval-gate.js +6 -28
  41. package/dist/core/autonomy/approval-gate.js.map +1 -1
  42. package/dist/core/autonomy/bounded-completion.d.ts +1 -1
  43. package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
  44. package/dist/core/autonomy/bounded-completion.js +1 -1
  45. package/dist/core/autonomy/bounded-completion.js.map +1 -1
  46. package/dist/core/autonomy/contracts.d.ts +20 -12
  47. package/dist/core/autonomy/contracts.d.ts.map +1 -1
  48. package/dist/core/autonomy/contracts.js.map +1 -1
  49. package/dist/core/autonomy/foreground-envelope.d.ts +8 -2
  50. package/dist/core/autonomy/foreground-envelope.d.ts.map +1 -1
  51. package/dist/core/autonomy/foreground-envelope.js +8 -25
  52. package/dist/core/autonomy/foreground-envelope.js.map +1 -1
  53. package/dist/core/autonomy/gates.d.ts.map +1 -1
  54. package/dist/core/autonomy/gates.js +8 -10
  55. package/dist/core/autonomy/gates.js.map +1 -1
  56. package/dist/core/autonomy/lane-private-paths.d.ts +2 -0
  57. package/dist/core/autonomy/lane-private-paths.d.ts.map +1 -0
  58. package/dist/core/autonomy/lane-private-paths.js +16 -0
  59. package/dist/core/autonomy/lane-private-paths.js.map +1 -0
  60. package/dist/core/autonomy/lane-tool-surface.d.ts +10 -0
  61. package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
  62. package/dist/core/autonomy/lane-tool-surface.js +46 -8
  63. package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
  64. package/dist/core/autonomy/lane-tracker.d.ts +14 -0
  65. package/dist/core/autonomy/lane-tracker.d.ts.map +1 -1
  66. package/dist/core/autonomy/lane-tracker.js +38 -0
  67. package/dist/core/autonomy/lane-tracker.js.map +1 -1
  68. package/dist/core/autonomy/risk-assessment.d.ts +1 -2
  69. package/dist/core/autonomy/risk-assessment.d.ts.map +1 -1
  70. package/dist/core/autonomy/risk-assessment.js +1 -123
  71. package/dist/core/autonomy/risk-assessment.js.map +1 -1
  72. package/dist/core/autonomy/session-lane-record.d.ts +4 -4
  73. package/dist/core/autonomy/session-lane-record.d.ts.map +1 -1
  74. package/dist/core/autonomy/session-lane-record.js +16 -29
  75. package/dist/core/autonomy/session-lane-record.js.map +1 -1
  76. package/dist/core/autonomy/telemetry-events.d.ts +1 -1
  77. package/dist/core/autonomy/telemetry-events.d.ts.map +1 -1
  78. package/dist/core/autonomy/telemetry-events.js +1 -1
  79. package/dist/core/autonomy/telemetry-events.js.map +1 -1
  80. package/dist/core/autonomy-telemetry.d.ts +7 -7
  81. package/dist/core/autonomy-telemetry.d.ts.map +1 -1
  82. package/dist/core/autonomy-telemetry.js +9 -9
  83. package/dist/core/autonomy-telemetry.js.map +1 -1
  84. package/dist/core/background-lane-controller.d.ts +54 -236
  85. package/dist/core/background-lane-controller.d.ts.map +1 -1
  86. package/dist/core/background-lane-controller.js +140 -1273
  87. package/dist/core/background-lane-controller.js.map +1 -1
  88. package/dist/core/capability-contract.d.ts +4 -0
  89. package/dist/core/capability-contract.d.ts.map +1 -0
  90. package/dist/core/capability-contract.js +28 -0
  91. package/dist/core/capability-contract.js.map +1 -0
  92. package/dist/core/compaction-controller.d.ts +90 -0
  93. package/dist/core/compaction-controller.d.ts.map +1 -0
  94. package/dist/core/compaction-controller.js +452 -0
  95. package/dist/core/compaction-controller.js.map +1 -0
  96. package/dist/core/compaction-support.d.ts +12 -11
  97. package/dist/core/compaction-support.d.ts.map +1 -1
  98. package/dist/core/compaction-support.js.map +1 -1
  99. package/dist/core/context/context-artifacts.d.ts +6 -2
  100. package/dist/core/context/context-artifacts.d.ts.map +1 -1
  101. package/dist/core/context/context-artifacts.js +34 -2
  102. package/dist/core/context/context-artifacts.js.map +1 -1
  103. package/dist/core/context/context-store-retention.d.ts +8 -2
  104. package/dist/core/context/context-store-retention.d.ts.map +1 -1
  105. package/dist/core/context/context-store-retention.js +158 -35
  106. package/dist/core/context/context-store-retention.js.map +1 -1
  107. package/dist/core/context/okf-memory.d.ts.map +1 -1
  108. package/dist/core/context/okf-memory.js +9 -11
  109. package/dist/core/context/okf-memory.js.map +1 -1
  110. package/dist/core/context/sqlite-runtime-index.d.ts.map +1 -1
  111. package/dist/core/context/sqlite-runtime-index.js +6 -8
  112. package/dist/core/context/sqlite-runtime-index.js.map +1 -1
  113. package/dist/core/context-gc.d.ts +3 -0
  114. package/dist/core/context-gc.d.ts.map +1 -1
  115. package/dist/core/context-gc.js +10 -5
  116. package/dist/core/context-gc.js.map +1 -1
  117. package/dist/core/context-pipeline.d.ts.map +1 -1
  118. package/dist/core/context-pipeline.js +9 -4
  119. package/dist/core/context-pipeline.js.map +1 -1
  120. package/dist/core/default-tool-surface.d.ts.map +1 -1
  121. package/dist/core/default-tool-surface.js +1 -0
  122. package/dist/core/default-tool-surface.js.map +1 -1
  123. package/dist/core/delegation/managed-lane-controller.d.ts +34 -0
  124. package/dist/core/delegation/managed-lane-controller.d.ts.map +1 -0
  125. package/dist/core/delegation/managed-lane-controller.js +217 -0
  126. package/dist/core/delegation/managed-lane-controller.js.map +1 -0
  127. package/dist/core/delegation/session-worker-claim.d.ts +44 -0
  128. package/dist/core/delegation/session-worker-claim.d.ts.map +1 -0
  129. package/dist/core/delegation/session-worker-claim.js +98 -0
  130. package/dist/core/delegation/session-worker-claim.js.map +1 -0
  131. package/dist/core/delegation/worker-actions.d.ts +7 -5
  132. package/dist/core/delegation/worker-actions.d.ts.map +1 -1
  133. package/dist/core/delegation/worker-actions.js +20 -4
  134. package/dist/core/delegation/worker-actions.js.map +1 -1
  135. package/dist/core/delegation/{worker-result.d.ts → worker-claim.d.ts} +13 -13
  136. package/dist/core/delegation/worker-claim.d.ts.map +1 -0
  137. package/dist/core/delegation/{worker-result.js → worker-claim.js} +61 -51
  138. package/dist/core/delegation/worker-claim.js.map +1 -0
  139. package/dist/core/delegation/worker-delegation-controller.d.ts +110 -0
  140. package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -0
  141. package/dist/core/delegation/worker-delegation-controller.js +861 -0
  142. package/dist/core/delegation/worker-delegation-controller.js.map +1 -0
  143. package/dist/core/delegation/worker-delegation-request.d.ts +11 -0
  144. package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -0
  145. package/dist/core/delegation/worker-delegation-request.js +2 -0
  146. package/dist/core/delegation/worker-delegation-request.js.map +1 -0
  147. package/dist/core/delegation/worker-dispatch-scheduler.d.ts +40 -0
  148. package/dist/core/delegation/worker-dispatch-scheduler.d.ts.map +1 -0
  149. package/dist/core/delegation/worker-dispatch-scheduler.js +93 -0
  150. package/dist/core/delegation/worker-dispatch-scheduler.js.map +1 -0
  151. package/dist/core/delegation/worker-execution-policy.d.ts +62 -0
  152. package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -0
  153. package/dist/core/delegation/worker-execution-policy.js +160 -0
  154. package/dist/core/delegation/worker-execution-policy.js.map +1 -0
  155. package/dist/core/delegation/worker-lane-projection.d.ts +14 -0
  156. package/dist/core/delegation/worker-lane-projection.d.ts.map +1 -0
  157. package/dist/core/delegation/worker-lane-projection.js +100 -0
  158. package/dist/core/delegation/worker-lane-projection.js.map +1 -0
  159. package/dist/core/delegation/worker-lifecycle.d.ts +97 -0
  160. package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -0
  161. package/dist/core/delegation/worker-lifecycle.js +339 -0
  162. package/dist/core/delegation/worker-lifecycle.js.map +1 -0
  163. package/dist/core/delegation/worker-notification-coordinator.d.ts +36 -0
  164. package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -0
  165. package/dist/core/delegation/worker-notification-coordinator.js +90 -0
  166. package/dist/core/delegation/worker-notification-coordinator.js.map +1 -0
  167. package/dist/core/delegation/worker-profile-resolver.d.ts +55 -0
  168. package/dist/core/delegation/worker-profile-resolver.d.ts.map +1 -0
  169. package/dist/core/delegation/worker-profile-resolver.js +113 -0
  170. package/dist/core/delegation/worker-profile-resolver.js.map +1 -0
  171. package/dist/core/delegation/worker-runner.d.ts +25 -14
  172. package/dist/core/delegation/worker-runner.d.ts.map +1 -1
  173. package/dist/core/delegation/worker-runner.js +122 -53
  174. package/dist/core/delegation/worker-runner.js.map +1 -1
  175. package/dist/core/delegation/worker-task-label.d.ts +3 -0
  176. package/dist/core/delegation/worker-task-label.d.ts.map +1 -0
  177. package/dist/core/delegation/worker-task-label.js +11 -0
  178. package/dist/core/delegation/worker-task-label.js.map +1 -0
  179. package/dist/core/doctor.d.ts +8 -0
  180. package/dist/core/doctor.d.ts.map +1 -1
  181. package/dist/core/doctor.js +32 -1
  182. package/dist/core/doctor.js.map +1 -1
  183. package/dist/core/extensions/index.d.ts +1 -1
  184. package/dist/core/extensions/index.d.ts.map +1 -1
  185. package/dist/core/extensions/index.js.map +1 -1
  186. package/dist/core/extensions/loader.d.ts +5 -1
  187. package/dist/core/extensions/loader.d.ts.map +1 -1
  188. package/dist/core/extensions/loader.js +50 -15
  189. package/dist/core/extensions/loader.js.map +1 -1
  190. package/dist/core/extensions/runner.d.ts.map +1 -1
  191. package/dist/core/extensions/runner.js +6 -0
  192. package/dist/core/extensions/runner.js.map +1 -1
  193. package/dist/core/extensions/storage.d.ts +8 -0
  194. package/dist/core/extensions/storage.d.ts.map +1 -0
  195. package/dist/core/extensions/storage.js +28 -0
  196. package/dist/core/extensions/storage.js.map +1 -0
  197. package/dist/core/extensions/types.d.ts +70 -21
  198. package/dist/core/extensions/types.d.ts.map +1 -1
  199. package/dist/core/extensions/types.js.map +1 -1
  200. package/dist/core/failure-corpus.d.ts +1 -15
  201. package/dist/core/failure-corpus.d.ts.map +1 -1
  202. package/dist/core/failure-corpus.js +9 -37
  203. package/dist/core/failure-corpus.js.map +1 -1
  204. package/dist/core/foreground-recovery-controller.d.ts +52 -0
  205. package/dist/core/foreground-recovery-controller.d.ts.map +1 -0
  206. package/dist/core/foreground-recovery-controller.js +111 -0
  207. package/dist/core/foreground-recovery-controller.js.map +1 -0
  208. package/dist/core/gateways/channel-provider.d.ts +3 -0
  209. package/dist/core/gateways/channel-provider.d.ts.map +1 -1
  210. package/dist/core/gateways/channel-provider.js +31 -6
  211. package/dist/core/gateways/channel-provider.js.map +1 -1
  212. package/dist/core/goals/goal-acceptance.d.ts +11 -0
  213. package/dist/core/goals/goal-acceptance.d.ts.map +1 -0
  214. package/dist/core/goals/goal-acceptance.js +25 -0
  215. package/dist/core/goals/goal-acceptance.js.map +1 -0
  216. package/dist/core/goals/goal-auto-continue-controller.d.ts +27 -0
  217. package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -0
  218. package/dist/core/goals/goal-auto-continue-controller.js +93 -0
  219. package/dist/core/goals/goal-auto-continue-controller.js.map +1 -0
  220. package/dist/core/goals/goal-continuation-controller.d.ts +1 -1
  221. package/dist/core/goals/goal-continuation-controller.d.ts.map +1 -1
  222. package/dist/core/goals/goal-continuation-controller.js +10 -0
  223. package/dist/core/goals/goal-continuation-controller.js.map +1 -1
  224. package/dist/core/goals/goal-continuation-prompt.d.ts +1 -1
  225. package/dist/core/goals/goal-continuation-prompt.d.ts.map +1 -1
  226. package/dist/core/goals/goal-continuation-prompt.js +6 -6
  227. package/dist/core/goals/goal-continuation-prompt.js.map +1 -1
  228. package/dist/core/goals/goal-lifecycle.d.ts +20 -0
  229. package/dist/core/goals/goal-lifecycle.d.ts.map +1 -0
  230. package/dist/core/goals/goal-lifecycle.js +17 -0
  231. package/dist/core/goals/goal-lifecycle.js.map +1 -0
  232. package/dist/core/goals/goal-runtime-snapshot.d.ts +11 -9
  233. package/dist/core/goals/goal-runtime-snapshot.d.ts.map +1 -1
  234. package/dist/core/goals/goal-runtime-snapshot.js +10 -8
  235. package/dist/core/goals/goal-runtime-snapshot.js.map +1 -1
  236. package/dist/core/goals/goal-state.d.ts +1 -0
  237. package/dist/core/goals/goal-state.d.ts.map +1 -1
  238. package/dist/core/goals/goal-state.js +7 -10
  239. package/dist/core/goals/goal-state.js.map +1 -1
  240. package/dist/core/goals/goal-tool-core.d.ts +8 -6
  241. package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
  242. package/dist/core/goals/goal-tool-core.js +11 -41
  243. package/dist/core/goals/goal-tool-core.js.map +1 -1
  244. package/dist/core/goals/session-goal-state.d.ts +2 -4
  245. package/dist/core/goals/session-goal-state.d.ts.map +1 -1
  246. package/dist/core/goals/session-goal-state.js +10 -33
  247. package/dist/core/goals/session-goal-state.js.map +1 -1
  248. package/dist/core/human-input.d.ts +100 -0
  249. package/dist/core/human-input.d.ts.map +1 -0
  250. package/dist/core/human-input.js +362 -0
  251. package/dist/core/human-input.js.map +1 -0
  252. package/dist/core/index.d.ts +9 -1
  253. package/dist/core/index.d.ts.map +1 -1
  254. package/dist/core/index.js +9 -1
  255. package/dist/core/index.js.map +1 -1
  256. package/dist/core/{telemetry.d.ts → install-telemetry.d.ts} +1 -1
  257. package/dist/core/install-telemetry.d.ts.map +1 -0
  258. package/dist/core/{telemetry.js → install-telemetry.js} +1 -1
  259. package/dist/core/install-telemetry.js.map +1 -0
  260. package/dist/core/keybindings.d.ts +17 -1
  261. package/dist/core/keybindings.d.ts.map +1 -1
  262. package/dist/core/keybindings.js +24 -6
  263. package/dist/core/keybindings.js.map +1 -1
  264. package/dist/core/learning/learning-audit.d.ts +2 -4
  265. package/dist/core/learning/learning-audit.d.ts.map +1 -1
  266. package/dist/core/learning/learning-audit.js +9 -29
  267. package/dist/core/learning/learning-audit.js.map +1 -1
  268. package/dist/core/learning/learning-gate.d.ts.map +1 -1
  269. package/dist/core/learning/learning-gate.js +1 -6
  270. package/dist/core/learning/learning-gate.js.map +1 -1
  271. package/dist/core/learning/session-learning-decision.d.ts +2 -4
  272. package/dist/core/learning/session-learning-decision.d.ts.map +1 -1
  273. package/dist/core/learning/session-learning-decision.js +9 -29
  274. package/dist/core/learning/session-learning-decision.js.map +1 -1
  275. package/dist/core/memory-controller.d.ts.map +1 -1
  276. package/dist/core/memory-controller.js +4 -4
  277. package/dist/core/memory-controller.js.map +1 -1
  278. package/dist/core/model-capability.d.ts.map +1 -1
  279. package/dist/core/model-capability.js +1 -0
  280. package/dist/core/model-capability.js.map +1 -1
  281. package/dist/core/model-resolver.d.ts +1 -1
  282. package/dist/core/model-resolver.d.ts.map +1 -1
  283. package/dist/core/model-resolver.js +6 -9
  284. package/dist/core/model-resolver.js.map +1 -1
  285. package/dist/core/model-router/intent-classifier.d.ts +1 -4
  286. package/dist/core/model-router/intent-classifier.d.ts.map +1 -1
  287. package/dist/core/model-router/intent-classifier.js +1 -156
  288. package/dist/core/model-router/intent-classifier.js.map +1 -1
  289. package/dist/core/model-router-controller.d.ts.map +1 -1
  290. package/dist/core/model-router-controller.js +2 -2
  291. package/dist/core/model-router-controller.js.map +1 -1
  292. package/dist/core/model-selection-controller.d.ts +4 -4
  293. package/dist/core/model-selection-controller.d.ts.map +1 -1
  294. package/dist/core/model-selection-controller.js.map +1 -1
  295. package/dist/core/model-tool-protocol.d.ts +23 -0
  296. package/dist/core/model-tool-protocol.d.ts.map +1 -0
  297. package/dist/core/model-tool-protocol.js +43 -0
  298. package/dist/core/model-tool-protocol.js.map +1 -0
  299. package/dist/core/models/adaptation-store.d.ts +4 -6
  300. package/dist/core/models/adaptation-store.d.ts.map +1 -1
  301. package/dist/core/models/adaptation-store.js +95 -83
  302. package/dist/core/models/adaptation-store.js.map +1 -1
  303. package/dist/core/models/fitness-store.d.ts +2 -12
  304. package/dist/core/models/fitness-store.d.ts.map +1 -1
  305. package/dist/core/models/fitness-store.js +84 -57
  306. package/dist/core/models/fitness-store.js.map +1 -1
  307. package/dist/core/models/host-state-store.d.ts +34 -0
  308. package/dist/core/models/host-state-store.d.ts.map +1 -0
  309. package/dist/core/models/host-state-store.js +86 -0
  310. package/dist/core/models/host-state-store.js.map +1 -0
  311. package/dist/core/orchestration/agent-resume.d.ts +24 -0
  312. package/dist/core/orchestration/agent-resume.d.ts.map +1 -0
  313. package/dist/core/orchestration/agent-resume.js +90 -0
  314. package/dist/core/orchestration/agent-resume.js.map +1 -0
  315. package/dist/core/orchestration/capability-gateway.d.ts +61 -0
  316. package/dist/core/orchestration/capability-gateway.d.ts.map +1 -0
  317. package/dist/core/orchestration/capability-gateway.js +152 -0
  318. package/dist/core/orchestration/capability-gateway.js.map +1 -0
  319. package/dist/core/orchestration/contracts.d.ts +343 -0
  320. package/dist/core/orchestration/contracts.d.ts.map +1 -0
  321. package/dist/core/orchestration/contracts.js +135 -0
  322. package/dist/core/orchestration/contracts.js.map +1 -0
  323. package/dist/core/orchestration/delegation-ledger.d.ts +56 -0
  324. package/dist/core/orchestration/delegation-ledger.d.ts.map +1 -0
  325. package/dist/core/orchestration/delegation-ledger.js +197 -0
  326. package/dist/core/orchestration/delegation-ledger.js.map +1 -0
  327. package/dist/core/orchestration/event-store.d.ts +83 -0
  328. package/dist/core/orchestration/event-store.d.ts.map +1 -0
  329. package/dist/core/orchestration/event-store.js +560 -0
  330. package/dist/core/orchestration/event-store.js.map +1 -0
  331. package/dist/core/orchestration/lane-tool-manifests.d.ts +9 -0
  332. package/dist/core/orchestration/lane-tool-manifests.d.ts.map +1 -0
  333. package/dist/core/orchestration/lane-tool-manifests.js +37 -0
  334. package/dist/core/orchestration/lane-tool-manifests.js.map +1 -0
  335. package/dist/core/orchestration/model-binding.d.ts +15 -0
  336. package/dist/core/orchestration/model-binding.d.ts.map +1 -0
  337. package/dist/core/orchestration/model-binding.js +29 -0
  338. package/dist/core/orchestration/model-binding.js.map +1 -0
  339. package/dist/core/orchestration/policy-compiler.d.ts +49 -0
  340. package/dist/core/orchestration/policy-compiler.d.ts.map +1 -0
  341. package/dist/core/orchestration/policy-compiler.js +191 -0
  342. package/dist/core/orchestration/policy-compiler.js.map +1 -0
  343. package/dist/core/orchestration/policy-gate.d.ts +18 -0
  344. package/dist/core/orchestration/policy-gate.d.ts.map +1 -0
  345. package/dist/core/orchestration/policy-gate.js +24 -0
  346. package/dist/core/orchestration/policy-gate.js.map +1 -0
  347. package/dist/core/orchestration/profile-registry.d.ts +51 -0
  348. package/dist/core/orchestration/profile-registry.d.ts.map +1 -0
  349. package/dist/core/orchestration/profile-registry.js +393 -0
  350. package/dist/core/orchestration/profile-registry.js.map +1 -0
  351. package/dist/core/orchestration/profile-store.d.ts +31 -0
  352. package/dist/core/orchestration/profile-store.d.ts.map +1 -0
  353. package/dist/core/orchestration/profile-store.js +136 -0
  354. package/dist/core/orchestration/profile-store.js.map +1 -0
  355. package/dist/core/orchestration/risk-budget.d.ts +9 -0
  356. package/dist/core/orchestration/risk-budget.d.ts.map +1 -0
  357. package/dist/core/orchestration/risk-budget.js +48 -0
  358. package/dist/core/orchestration/risk-budget.js.map +1 -0
  359. package/dist/core/orchestration/task-runtime.d.ts +168 -0
  360. package/dist/core/orchestration/task-runtime.d.ts.map +1 -0
  361. package/dist/core/orchestration/task-runtime.js +1600 -0
  362. package/dist/core/orchestration/task-runtime.js.map +1 -0
  363. package/dist/core/orchestration/work-state-projection.d.ts +32 -0
  364. package/dist/core/orchestration/work-state-projection.d.ts.map +1 -0
  365. package/dist/core/orchestration/work-state-projection.js +116 -0
  366. package/dist/core/orchestration/work-state-projection.js.map +1 -0
  367. package/dist/core/orchestration/worker-execution-contract.d.ts +21 -0
  368. package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -0
  369. package/dist/core/orchestration/worker-execution-contract.js +179 -0
  370. package/dist/core/orchestration/worker-execution-contract.js.map +1 -0
  371. package/dist/core/orchestration/worker-result-adapter.d.ts +21 -0
  372. package/dist/core/orchestration/worker-result-adapter.d.ts.map +1 -0
  373. package/dist/core/orchestration/worker-result-adapter.js +109 -0
  374. package/dist/core/orchestration/worker-result-adapter.js.map +1 -0
  375. package/dist/core/process-identity.d.ts +11 -0
  376. package/dist/core/process-identity.d.ts.map +1 -0
  377. package/dist/core/process-identity.js +26 -0
  378. package/dist/core/process-identity.js.map +1 -0
  379. package/dist/core/process-matrix/codes.d.ts +14 -3
  380. package/dist/core/process-matrix/codes.d.ts.map +1 -1
  381. package/dist/core/process-matrix/codes.js.map +1 -1
  382. package/dist/core/process-matrix/resume-launcher.d.ts +26 -0
  383. package/dist/core/process-matrix/resume-launcher.d.ts.map +1 -0
  384. package/dist/core/process-matrix/resume-launcher.js +62 -0
  385. package/dist/core/process-matrix/resume-launcher.js.map +1 -0
  386. package/dist/core/process-matrix/runtime.d.ts +37 -22
  387. package/dist/core/process-matrix/runtime.d.ts.map +1 -1
  388. package/dist/core/process-matrix/runtime.js +399 -76
  389. package/dist/core/process-matrix/runtime.js.map +1 -1
  390. package/dist/core/process-matrix/store.d.ts +5 -2
  391. package/dist/core/process-matrix/store.d.ts.map +1 -1
  392. package/dist/core/process-matrix/store.js +123 -14
  393. package/dist/core/process-matrix/store.js.map +1 -1
  394. package/dist/core/process-matrix/supervisor.d.ts +10 -7
  395. package/dist/core/process-matrix/supervisor.d.ts.map +1 -1
  396. package/dist/core/process-matrix/supervisor.js +45 -14
  397. package/dist/core/process-matrix/supervisor.js.map +1 -1
  398. package/dist/core/profile-registry.d.ts.map +1 -1
  399. package/dist/core/profile-registry.js +6 -8
  400. package/dist/core/profile-registry.js.map +1 -1
  401. package/dist/core/reflection-controller.d.ts +4 -4
  402. package/dist/core/reflection-controller.d.ts.map +1 -1
  403. package/dist/core/reflection-controller.js +2 -1
  404. package/dist/core/reflection-controller.js.map +1 -1
  405. package/dist/core/reload-blockers.d.ts.map +1 -1
  406. package/dist/core/reload-blockers.js +6 -8
  407. package/dist/core/reload-blockers.js.map +1 -1
  408. package/dist/core/research/evidence-bundle.d.ts.map +1 -1
  409. package/dist/core/research/evidence-bundle.js +1 -6
  410. package/dist/core/research/evidence-bundle.js.map +1 -1
  411. package/dist/core/research/lane-model-resolver.d.ts +33 -0
  412. package/dist/core/research/lane-model-resolver.d.ts.map +1 -0
  413. package/dist/core/research/lane-model-resolver.js +65 -0
  414. package/dist/core/research/lane-model-resolver.js.map +1 -0
  415. package/dist/core/research/model-fitness-controller.d.ts +38 -0
  416. package/dist/core/research/model-fitness-controller.d.ts.map +1 -0
  417. package/dist/core/research/model-fitness-controller.js +106 -0
  418. package/dist/core/research/model-fitness-controller.js.map +1 -0
  419. package/dist/core/research/model-fitness.d.ts +1 -1
  420. package/dist/core/research/model-fitness.d.ts.map +1 -1
  421. package/dist/core/research/model-fitness.js +4 -4
  422. package/dist/core/research/model-fitness.js.map +1 -1
  423. package/dist/core/research/research-gate.d.ts.map +1 -1
  424. package/dist/core/research/research-gate.js +7 -7
  425. package/dist/core/research/research-gate.js.map +1 -1
  426. package/dist/core/research/research-lane-controller.d.ts +62 -0
  427. package/dist/core/research/research-lane-controller.d.ts.map +1 -0
  428. package/dist/core/research/research-lane-controller.js +292 -0
  429. package/dist/core/research/research-lane-controller.js.map +1 -0
  430. package/dist/core/research/session-evidence-bundle.d.ts +2 -4
  431. package/dist/core/research/session-evidence-bundle.d.ts.map +1 -1
  432. package/dist/core/research/session-evidence-bundle.js +10 -46
  433. package/dist/core/research/session-evidence-bundle.js.map +1 -1
  434. package/dist/core/resource-loader.d.ts.map +1 -1
  435. package/dist/core/resource-loader.js +7 -2
  436. package/dist/core/resource-loader.js.map +1 -1
  437. package/dist/core/risk-classifier.d.ts +6 -0
  438. package/dist/core/risk-classifier.d.ts.map +1 -0
  439. package/dist/core/risk-classifier.js +225 -0
  440. package/dist/core/risk-classifier.js.map +1 -0
  441. package/dist/core/runtime-builder.d.ts +26 -20
  442. package/dist/core/runtime-builder.d.ts.map +1 -1
  443. package/dist/core/runtime-builder.js +237 -178
  444. package/dist/core/runtime-builder.js.map +1 -1
  445. package/dist/core/sdk.d.ts +6 -3
  446. package/dist/core/sdk.d.ts.map +1 -1
  447. package/dist/core/sdk.js +61 -24
  448. package/dist/core/sdk.js.map +1 -1
  449. package/dist/core/session-analytics.d.ts.map +1 -1
  450. package/dist/core/session-analytics.js +28 -1
  451. package/dist/core/session-analytics.js.map +1 -1
  452. package/dist/core/session-image-store.d.ts +33 -0
  453. package/dist/core/session-image-store.d.ts.map +1 -0
  454. package/dist/core/session-image-store.js +283 -0
  455. package/dist/core/session-image-store.js.map +1 -0
  456. package/dist/core/session-role.d.ts +6 -4
  457. package/dist/core/session-role.d.ts.map +1 -1
  458. package/dist/core/session-role.js +10 -4
  459. package/dist/core/session-role.js.map +1 -1
  460. package/dist/core/session-snapshot.d.ts +34 -0
  461. package/dist/core/session-snapshot.d.ts.map +1 -0
  462. package/dist/core/session-snapshot.js +68 -0
  463. package/dist/core/session-snapshot.js.map +1 -0
  464. package/dist/core/session-supervision-runtime.d.ts +31 -0
  465. package/dist/core/session-supervision-runtime.d.ts.map +1 -0
  466. package/dist/core/session-supervision-runtime.js +97 -0
  467. package/dist/core/session-supervision-runtime.js.map +1 -0
  468. package/dist/core/settings-manager.d.ts +9 -4
  469. package/dist/core/settings-manager.d.ts.map +1 -1
  470. package/dist/core/settings-manager.js +80 -28
  471. package/dist/core/settings-manager.js.map +1 -1
  472. package/dist/core/tasks/session-task-state.d.ts +2 -4
  473. package/dist/core/tasks/session-task-state.d.ts.map +1 -1
  474. package/dist/core/tasks/session-task-state.js +10 -28
  475. package/dist/core/tasks/session-task-state.js.map +1 -1
  476. package/dist/core/tasks/task-projection.d.ts +20 -0
  477. package/dist/core/tasks/task-projection.d.ts.map +1 -0
  478. package/dist/core/tasks/task-projection.js +47 -0
  479. package/dist/core/tasks/task-projection.js.map +1 -0
  480. package/dist/core/tasks/task-state.d.ts +4 -0
  481. package/dist/core/tasks/task-state.d.ts.map +1 -1
  482. package/dist/core/tasks/task-state.js +28 -11
  483. package/dist/core/tasks/task-state.js.map +1 -1
  484. package/dist/core/tool-capability-policy.d.ts +13 -0
  485. package/dist/core/tool-capability-policy.d.ts.map +1 -0
  486. package/dist/core/tool-capability-policy.js +85 -0
  487. package/dist/core/tool-capability-policy.js.map +1 -0
  488. package/dist/core/tool-protocol-controller.d.ts +91 -0
  489. package/dist/core/tool-protocol-controller.d.ts.map +1 -0
  490. package/dist/core/tool-protocol-controller.js +512 -0
  491. package/dist/core/tool-protocol-controller.js.map +1 -0
  492. package/dist/core/tool-recovery-log-records.d.ts +2 -3
  493. package/dist/core/tool-recovery-log-records.d.ts.map +1 -1
  494. package/dist/core/tool-recovery-log-records.js +9 -35
  495. package/dist/core/tool-recovery-log-records.js.map +1 -1
  496. package/dist/core/tool-selection/tool-performance-store.d.ts +3 -7
  497. package/dist/core/tool-selection/tool-performance-store.d.ts.map +1 -1
  498. package/dist/core/tool-selection/tool-performance-store.js +97 -138
  499. package/dist/core/tool-selection/tool-performance-store.js.map +1 -1
  500. package/dist/core/tools/ask-question.d.ts +124 -0
  501. package/dist/core/tools/ask-question.d.ts.map +1 -0
  502. package/dist/core/tools/ask-question.js +693 -0
  503. package/dist/core/tools/ask-question.js.map +1 -0
  504. package/dist/core/tools/delegate-status.d.ts +31 -3
  505. package/dist/core/tools/delegate-status.d.ts.map +1 -1
  506. package/dist/core/tools/delegate-status.js +149 -29
  507. package/dist/core/tools/delegate-status.js.map +1 -1
  508. package/dist/core/tools/delegate.d.ts +15 -13
  509. package/dist/core/tools/delegate.d.ts.map +1 -1
  510. package/dist/core/tools/delegate.js +108 -23
  511. package/dist/core/tools/delegate.js.map +1 -1
  512. package/dist/core/tools/extensionify.d.ts.map +1 -1
  513. package/dist/core/tools/extensionify.js +1 -0
  514. package/dist/core/tools/extensionify.js.map +1 -1
  515. package/dist/core/tools/goal.d.ts +5 -5
  516. package/dist/core/tools/goal.d.ts.map +1 -1
  517. package/dist/core/tools/goal.js +10 -10
  518. package/dist/core/tools/goal.js.map +1 -1
  519. package/dist/core/tools/model-fitness.d.ts.map +1 -1
  520. package/dist/core/tools/model-fitness.js +2 -2
  521. package/dist/core/tools/model-fitness.js.map +1 -1
  522. package/dist/core/tools/orchestration-panel.d.ts +43 -0
  523. package/dist/core/tools/orchestration-panel.d.ts.map +1 -0
  524. package/dist/core/tools/orchestration-panel.js +168 -0
  525. package/dist/core/tools/orchestration-panel.js.map +1 -0
  526. package/dist/core/tools/run-process.d.ts +26 -0
  527. package/dist/core/tools/run-process.d.ts.map +1 -0
  528. package/dist/core/tools/run-process.js +138 -0
  529. package/dist/core/tools/run-process.js.map +1 -0
  530. package/dist/core/tools/task-steps.d.ts +2 -0
  531. package/dist/core/tools/task-steps.d.ts.map +1 -1
  532. package/dist/core/tools/task-steps.js +102 -0
  533. package/dist/core/tools/task-steps.js.map +1 -1
  534. package/dist/core/tools/tmux-dispatch.d.ts +3 -5
  535. package/dist/core/tools/tmux-dispatch.d.ts.map +1 -1
  536. package/dist/core/tools/tmux-dispatch.js +4 -4
  537. package/dist/core/tools/tmux-dispatch.js.map +1 -1
  538. package/dist/core/tools/windows-shell-engine.d.ts.map +1 -1
  539. package/dist/core/tools/windows-shell-engine.js +4 -6
  540. package/dist/core/tools/windows-shell-engine.js.map +1 -1
  541. package/dist/core/util/bounded-jsonl.d.ts +10 -0
  542. package/dist/core/util/bounded-jsonl.d.ts.map +1 -0
  543. package/dist/core/util/bounded-jsonl.js +75 -0
  544. package/dist/core/util/bounded-jsonl.js.map +1 -0
  545. package/dist/core/util/value-guards.d.ts +5 -0
  546. package/dist/core/util/value-guards.d.ts.map +1 -0
  547. package/dist/core/util/value-guards.js +12 -0
  548. package/dist/core/util/value-guards.js.map +1 -0
  549. package/dist/core/worktree-sync/store.d.ts +3 -3
  550. package/dist/core/worktree-sync/store.d.ts.map +1 -1
  551. package/dist/core/worktree-sync/store.js +10 -5
  552. package/dist/core/worktree-sync/store.js.map +1 -1
  553. package/dist/index.d.ts +13 -3
  554. package/dist/index.d.ts.map +1 -1
  555. package/dist/index.js +12 -2
  556. package/dist/index.js.map +1 -1
  557. package/dist/main.d.ts.map +1 -1
  558. package/dist/main.js +128 -44
  559. package/dist/main.js.map +1 -1
  560. package/dist/migrations.d.ts +4 -6
  561. package/dist/migrations.d.ts.map +1 -1
  562. package/dist/migrations.js +186 -28
  563. package/dist/migrations.js.map +1 -1
  564. package/dist/modes/interactive/clipboard-input.d.ts +7 -1
  565. package/dist/modes/interactive/clipboard-input.d.ts.map +1 -1
  566. package/dist/modes/interactive/clipboard-input.js +44 -6
  567. package/dist/modes/interactive/clipboard-input.js.map +1 -1
  568. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  569. package/dist/modes/interactive/components/settings-selector.js +2 -2
  570. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  571. package/dist/modes/interactive/config-backup.d.ts.map +1 -1
  572. package/dist/modes/interactive/config-backup.js +5 -4
  573. package/dist/modes/interactive/config-backup.js.map +1 -1
  574. package/dist/modes/interactive/extension-ui-host.d.ts +14 -0
  575. package/dist/modes/interactive/extension-ui-host.d.ts.map +1 -1
  576. package/dist/modes/interactive/extension-ui-host.js +76 -15
  577. package/dist/modes/interactive/extension-ui-host.js.map +1 -1
  578. package/dist/modes/interactive/interactive-mode.d.ts +3 -0
  579. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  580. package/dist/modes/interactive/interactive-mode.js +63 -1
  581. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  582. package/dist/modes/interactive/key-handlers.d.ts.map +1 -1
  583. package/dist/modes/interactive/key-handlers.js +1 -1
  584. package/dist/modes/interactive/key-handlers.js.map +1 -1
  585. package/dist/modes/interactive/profile-menu-controller.d.ts.map +1 -1
  586. package/dist/modes/interactive/profile-menu-controller.js +7 -7
  587. package/dist/modes/interactive/profile-menu-controller.js.map +1 -1
  588. package/dist/modes/interactive/report-commands.d.ts.map +1 -1
  589. package/dist/modes/interactive/report-commands.js +21 -0
  590. package/dist/modes/interactive/report-commands.js.map +1 -1
  591. package/dist/modes/interactive/session-flow-commands.d.ts +17 -2
  592. package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
  593. package/dist/modes/interactive/session-flow-commands.js +50 -17
  594. package/dist/modes/interactive/session-flow-commands.js.map +1 -1
  595. package/dist/modes/interactive/session-io-commands.d.ts.map +1 -1
  596. package/dist/modes/interactive/session-io-commands.js +16 -6
  597. package/dist/modes/interactive/session-io-commands.js.map +1 -1
  598. package/dist/modes/interactive/session-replacement-errors.d.ts +7 -0
  599. package/dist/modes/interactive/session-replacement-errors.d.ts.map +1 -0
  600. package/dist/modes/interactive/session-replacement-errors.js +15 -0
  601. package/dist/modes/interactive/session-replacement-errors.js.map +1 -0
  602. package/dist/modes/interactive/startup-checks.d.ts.map +1 -1
  603. package/dist/modes/interactive/startup-checks.js +1 -1
  604. package/dist/modes/interactive/startup-checks.js.map +1 -1
  605. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  606. package/dist/modes/rpc/rpc-mode.js +82 -23
  607. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  608. package/dist/modes/rpc/rpc-types.d.ts +15 -0
  609. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  610. package/dist/modes/rpc/rpc-types.js +138 -1
  611. package/dist/modes/rpc/rpc-types.js.map +1 -1
  612. package/dist/utils/clipboard-image.d.ts.map +1 -1
  613. package/dist/utils/clipboard-image.js +2 -13
  614. package/dist/utils/clipboard-image.js.map +1 -1
  615. package/dist/utils/clipboard-native.d.ts +1 -0
  616. package/dist/utils/clipboard-native.d.ts.map +1 -1
  617. package/dist/utils/clipboard-native.js.map +1 -1
  618. package/dist/utils/clipboard.d.ts +1 -0
  619. package/dist/utils/clipboard.d.ts.map +1 -1
  620. package/dist/utils/clipboard.js +52 -1
  621. package/dist/utils/clipboard.js.map +1 -1
  622. package/dist/utils/platform.d.ts +3 -0
  623. package/dist/utils/platform.d.ts.map +1 -0
  624. package/dist/utils/platform.js +8 -0
  625. package/dist/utils/platform.js.map +1 -0
  626. package/dist/utils/work-directory.d.ts +11 -0
  627. package/dist/utils/work-directory.d.ts.map +1 -1
  628. package/dist/utils/work-directory.js +30 -9
  629. package/dist/utils/work-directory.js.map +1 -1
  630. package/docs/UI_POLISH_ORCHESTRATION.md +44 -0
  631. package/docs/UI_QUALITY_ORCHESTRATION.md +30 -0
  632. package/docs/docs.json +4 -0
  633. package/docs/extensions.md +62 -2
  634. package/docs/harness-architecture.md +156 -0
  635. package/docs/keybindings.md +11 -1
  636. package/docs/process-matrix.md +59 -26
  637. package/docs/rpc.md +45 -2
  638. package/docs/sessions.md +15 -0
  639. package/docs/settings.md +125 -11
  640. package/docs/task-steps.md +8 -0
  641. package/docs/telemetry.md +19 -0
  642. package/docs/tmux-agent-manager.md +10 -3
  643. package/docs/ui-reference/README.md +9 -0
  644. package/docs/ui-reference/orchestration-after.txt +7 -0
  645. package/docs/ui-reference/orchestration-before.txt +7 -0
  646. package/docs/ui-reference/orchestration-reference.txt +6 -0
  647. package/docs/usage.md +14 -2
  648. package/docs/work-directory.md +19 -8
  649. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  650. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  651. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  652. package/examples/extensions/question.ts +34 -245
  653. package/examples/extensions/questionnaire.ts +41 -407
  654. package/examples/extensions/sandbox/package-lock.json +2 -2
  655. package/examples/extensions/sandbox/package.json +1 -1
  656. package/examples/extensions/with-deps/package-lock.json +2 -2
  657. package/examples/extensions/with-deps/package.json +1 -1
  658. package/npm-shrinkwrap.json +12 -12
  659. package/package.json +4 -4
  660. package/dist/core/delegation/session-worker-result.d.ts +0 -46
  661. package/dist/core/delegation/session-worker-result.d.ts.map +0 -1
  662. package/dist/core/delegation/session-worker-result.js +0 -113
  663. package/dist/core/delegation/session-worker-result.js.map +0 -1
  664. package/dist/core/delegation/worker-result.d.ts.map +0 -1
  665. package/dist/core/delegation/worker-result.js.map +0 -1
  666. package/dist/core/telemetry.d.ts.map +0 -1
  667. 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";
@@ -49,18 +49,21 @@ import { ScoutController } from "./scout-controller.js";
49
49
  import { getSessionRole, isWorkerSession, WORKER_FORBIDDEN_TOOLS } from "./session-role.js";
50
50
  import { matchesResourceProfilePattern, } from "./settings-manager.js";
51
51
  import { createSyntheticSourceInfo } from "./source-info.js";
52
+ import { projectOpenTaskSteps } from "./tasks/task-projection.js";
52
53
  import { buildReflexUserPrompt, parseReflexPlan, REFLEX_INTERPRETER_SYSTEM_PROMPT, } from "./toolkit/reflex-interpreter.js";
53
54
  import { executeToolkitScript } from "./toolkit/script-runner.js";
55
+ import { createAskQuestionToolDefinition } from "./tools/ask-question.js";
54
56
  import { createContextScoutToolDefinition } from "./tools/context-scout.js";
55
57
  import { createDelegateToolDefinition } from "./tools/delegate.js";
56
58
  import { createDelegateStatusToolDefinition } from "./tools/delegate-status.js";
57
59
  import { createFindTool } from "./tools/find.js";
58
60
  import { createGoalToolDefinition } from "./tools/goal.js";
59
61
  import { createGrepTool } from "./tools/grep.js";
60
- import { createAllToolDefinitions } from "./tools/index.js";
62
+ import { allToolNames, createToolDefinition } from "./tools/index.js";
61
63
  import { createModelFitnessToolDefinition } from "./tools/model-fitness.js";
62
64
  import { resolveToCwd } from "./tools/path-utils.js";
63
65
  import { createReadTool } from "./tools/read.js";
66
+ import { createRunProcessToolDefinition } from "./tools/run-process.js";
64
67
  import { createRunToolkitScriptToolDefinition } from "./tools/run-toolkit-script.js";
65
68
  import { createTaskStepsToolDefinition } from "./tools/task-steps.js";
66
69
  import { dispatchTmuxWorker } from "./tools/tmux-dispatch.js";
@@ -93,16 +96,15 @@ export function hasAnsweredToolCallOnBranch(sessionManager, toolCallId) {
93
96
  .some((entry) => entry.type === "message" && entry.message.role === "toolResult" && entry.message.toolCallId === toolCallId);
94
97
  }
95
98
  /**
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.
99
+ * Goal-tool adapter over the canonical open-task projection. Exported (pure, no `this`) so the
100
+ * production `getOpenTaskSteps` wiring below remains directly testable without another filter.
101
101
  */
102
102
  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 }));
103
+ return projectOpenTaskSteps(taskStepsState).map((step) => ({
104
+ id: step.id,
105
+ content: step.content,
106
+ ...(step.requirementIds?.length ? { requirementIds: step.requirementIds } : {}),
107
+ }));
106
108
  }
107
109
  /**
108
110
  * Owns the tool-registry build and the self-modification-safe extension reload extracted from
@@ -121,6 +123,50 @@ export class RuntimeBuilder {
121
123
  constructor(deps) {
122
124
  this.deps = deps;
123
125
  }
126
+ /**
127
+ * Resolve the construction and activation policy once for a runtime generation. This is the
128
+ * UAC choke point: callers must consult it before invoking a tool factory, not merely before
129
+ * placing an already-created definition in the live registry.
130
+ */
131
+ _createToolAccessPolicy() {
132
+ const role = getSessionRole();
133
+ const configuredAllowedToolNames = this.deps.getAllowedToolNames();
134
+ const allowedToolNames = configuredAllowedToolNames
135
+ ? new Set(mapToolNamesForPlatform([...configuredAllowedToolNames]))
136
+ : undefined;
137
+ const configuredExcludedToolNames = this.deps.getExcludedToolNames();
138
+ const excludedToolNames = configuredExcludedToolNames
139
+ ? new Set(mapToolNamesForPlatform([...configuredExcludedToolNames]))
140
+ : undefined;
141
+ const configuredToolProfileFilter = this.deps.getToolProfileFilter();
142
+ const toolProfileFilter = configuredToolProfileFilter
143
+ ? {
144
+ allow: mapToolNamesForPlatform(configuredToolProfileFilter.allow),
145
+ block: mapToolNamesForPlatform(configuredToolProfileFilter.block),
146
+ }
147
+ : undefined;
148
+ return {
149
+ allowedToolNames,
150
+ toolProfileFilter,
151
+ allows: (name) => {
152
+ // Strict worker UAC ceiling wins over every explicit grant.
153
+ if (role === "worker" && WORKER_FORBIDDEN_TOOLS.has(name))
154
+ return false;
155
+ if (allowedToolNames && !allowedToolNames.has(name))
156
+ return false;
157
+ if (excludedToolNames?.has(name))
158
+ return false;
159
+ if (!toolProfileFilter)
160
+ return true;
161
+ if (toolProfileFilter.allow.length > 0 && !matchesResourceProfilePattern(name, toolProfileFilter.allow)) {
162
+ return false;
163
+ }
164
+ if (matchesResourceProfilePattern(name, toolProfileFilter.block))
165
+ return false;
166
+ return true;
167
+ },
168
+ };
169
+ }
124
170
  async _runContextScout(query, maxTurns, artifactStore) {
125
171
  const cwd = this.deps.getCwd();
126
172
  const controller = new ScoutController({
@@ -172,46 +218,14 @@ export class RuntimeBuilder {
172
218
  return this._toolDefinitions.get(name)?.definition;
173
219
  }
174
220
  refreshToolRegistry(options) {
175
- const role = getSessionRole();
176
221
  const previousRegistryNames = new Set(this._toolRegistry.keys());
177
222
  // Re-derive from the pre-filter REQUEST, never from agent.state.tools: the active set is
178
223
  // capability/profile-filtered, so feeding it back through setActiveToolsByName would
179
224
  // permanently shrink what a later switch to a larger model (or permissive profile) restores.
180
225
  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
- };
226
+ const toolAccess = this._createToolAccessPolicy();
227
+ const { allowedToolNames, toolProfileFilter } = toolAccess;
228
+ const isAllowedTool = toolAccess.allows;
215
229
  const registeredTools = this.deps.getExtensionRunner().getAllRegisteredTools();
216
230
  const allCustomTools = [
217
231
  ...registeredTools,
@@ -425,169 +439,211 @@ export class RuntimeBuilder {
425
439
  const shellCommandPrefix = settingsManager.getShellCommandPrefix();
426
440
  const shellPath = settingsManager.getShellPath();
427
441
  const baseToolsOverride = this.deps.getBaseToolsOverride();
442
+ const toolAccess = this._createToolAccessPolicy();
428
443
  // Artifact-producing tools must not emit a "Full output: artifact tool-output:<id>" handle
429
444
  // that nothing can resolve. If artifact_retrieve is explicitly excluded/blocked/outside
430
445
  // an active allowlist, don't hand grep/find/run_toolkit_script an artifact store at all:
431
446
  // they fall back to their bounded preview/truncation behavior, with no payload/meta files
432
447
  // 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]));
448
+ const toolArtifactStore = !baseToolsOverride && toolAccess.allows("artifact_retrieve") ? this.deps.getToolArtifactStore() : undefined;
449
+ const toolOptions = {
450
+ read: { autoResizeImages },
451
+ bash: {
452
+ commandPrefix: shellCommandPrefix,
453
+ shellPath,
454
+ sessionKey: this.deps.getShellSessionKey(),
455
+ platform: process.platform,
456
+ },
457
+ grep: { artifactStore: toolArtifactStore },
458
+ find: { artifactStore: toolArtifactStore },
459
+ artifact_retrieve: { artifactStore: toolArtifactStore },
460
+ };
461
+ this._baseToolDefinitions = baseToolsOverride
462
+ ? new Map(Object.entries(baseToolsOverride)
463
+ .filter(([name]) => toolAccess.allows(name))
464
+ .map(([name, tool]) => [name, createToolDefinitionFromAgentTool(tool)]))
465
+ : new Map([...allToolNames]
466
+ .filter((name) => toolAccess.allows(name))
467
+ .map((name) => [name, createToolDefinition(name, this.deps.getCwd(), toolOptions)]));
446
468
  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);
469
+ if (toolAccess.allows("run_process")) {
470
+ const orchestrationProfile = this.deps.getOrchestrationProfile?.();
471
+ if (orchestrationProfile?.executionPolicy) {
472
+ this._baseToolDefinitions.set("run_process", createRunProcessToolDefinition(this.deps.getCwd(), {
473
+ policy: orchestrationProfile.executionPolicy,
474
+ maxWallClockMs: orchestrationProfile.budget.maxWallClockMs ?? 0,
475
+ }));
476
+ }
477
+ }
478
+ if (toolAccess.allows("context_audit")) {
479
+ for (const definition of createCoreDiagnosticsToolDefinitions(() => this.deps.getActiveToolNames(), () => this.getAllTools(), (messages) => this.deps.getContextGcReport(messages), () => this.deps.getMemoryAuditDiagnostics())) {
480
+ this._baseToolDefinitions.set(definition.name, definition);
481
+ }
449
482
  }
450
483
  // Hoisted above the goal-tool registration (rather than declared only inside the
451
484
  // worktreeSync-enabled block further below) so the SAME settings/deps factory backs both
452
485
  // the goal->tmux lane-first dispatch dep (`createLaneWorktree`, immediately below) and the
453
486
  // `worktree_sync` tool registration later in this method -- one source of truth, no drift.
454
- const worktreeSyncSettings = settingsManager.getWorktreeSyncSettings();
487
+ const worktreeSyncSettings = toolAccess.allows("goal") || toolAccess.allows("worktree_sync")
488
+ ? settingsManager.getWorktreeSyncSettings()
489
+ : undefined;
455
490
  const worktreeSyncEngineDeps = () => buildWorktreeSyncEngineDeps({
456
491
  cwd: this.deps.getCwd(),
457
492
  agentDir: this.deps.getAgentDir(),
458
493
  settingsManager: this.deps.getSettingsManager(),
459
494
  sessionId: this.deps.getSessionManager().getSessionId(),
460
495
  });
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);
496
+ if (toolAccess.allows("goal")) {
497
+ const goalToolDefinition = createGoalToolDefinition({
498
+ getGoalState: () => this.deps.getGoalStateSnapshot(),
499
+ saveGoalState: (state) => {
500
+ this.deps.saveGoalStateSnapshot(state);
501
+ },
502
+ // kind:"tool" evidence refs verify against real session records.
503
+ hasToolCallId: (toolCallId) => hasAnsweredToolCallOnBranch(this.deps.getSessionManager(), toolCallId),
504
+ // kind:"worker" evidence refs verify against the SAME live lane/claim accessors the
505
+ // delegate_status tool already uses below -- live wiring (these were declared optional
506
+ // and read-defensive on the goal-tool deps type).
507
+ getLaneRecords: () => this.deps.getWorkerLaneRecords(),
508
+ getWorkerClaimSnapshots: () => this.deps.getWorkerClaimSnapshots(),
509
+ // dispatch_worker's tool-layer side effect for the default (in_process) route: starts a
510
+ // real in-process worker lane through the SAME starter the delegate tool uses (below),
511
+ // adapted from its `{started:true;record}|{started:false;skipReason}` shape onto this
512
+ // tool's narrower `{laneId}|{skipReason}` shape.
513
+ startWorkerDelegation: (args) => {
514
+ const outcome = this.deps.startWorkerDelegation({ instructions: args.instructions });
515
+ return outcome.started ? { laneId: outcome.record.laneId } : { skipReason: outcome.skipReason };
516
+ },
517
+ // dispatch_worker's tool-layer side effect for `dispatchTarget:"tmux"`: core structurally
518
+ // invokes the SAME tmux_agent_manager fire_task call the model itself would make (no
519
+ // extension change, no faked launch/laneId) -- see tmux-dispatch.ts's doc comment.
520
+ dispatchTmuxWorker: (args) => dispatchTmuxWorker({
521
+ getToolDefinition: (name) => this.getToolDefinition(name),
522
+ createExtensionContext: () => this.deps.getExtensionRunner().createContext(),
523
+ resolveManagedLaneId: (id) => this.deps.resolveManagedLaneId(id),
524
+ getGoalId: () => this.deps.getGoalStateSnapshot()?.goalId,
525
+ evaluateWorkerLaneRefusal: () => this.deps.getLaneWorkerRefusal(),
526
+ // Lane-first dispatch, wired ONLY when worktree-sync is enabled -- absent otherwise,
527
+ // so a disabled/default session gets the existing byte-identical fire_task params.
528
+ createLaneWorktree: worktreeSyncSettings?.enabled
529
+ ? async (laneArgs) => {
530
+ const created = await createLane(worktreeSyncEngineDeps(), {
531
+ ...(laneArgs.goalId !== undefined ? { goalId: laneArgs.goalId } : {}),
532
+ requirementId: laneArgs.requirementId,
533
+ });
534
+ // Never fake a lane: any non-"ok" engine code (max lanes, invalid key, git
535
+ // error, ...) is refused, mapped by the caller onto the stable
536
+ // "worktree_create_failed" skip reason before any fire_task call runs.
537
+ if (created.code !== "ok")
538
+ return { skipReason: created.code };
539
+ return { laneKey: created.lane.laneKey, worktreePath: created.lane.worktreePath };
540
+ }
541
+ : undefined,
542
+ }, args),
543
+ cwd: () => this.deps.getCwd(),
544
+ // Reuses the already branch-scoped getTaskStepsStateSnapshot dep -- no new
545
+ // SessionManager access needed for the cross-visibility nudge.
546
+ getOpenTaskSteps: () => deriveOpenTaskStepRefs(this.deps.getTaskStepsStateSnapshot()),
547
+ });
548
+ this._baseToolDefinitions.set(goalToolDefinition.name, goalToolDefinition);
549
+ }
550
+ if (toolAccess.allows("task_steps")) {
551
+ const taskStepsToolDefinition = createTaskStepsToolDefinition({
552
+ getTaskStepsState: () => this.deps.getTaskStepsStateSnapshot(),
553
+ saveTaskStepsState: (state) => {
554
+ this.deps.saveTaskStepsStateSnapshot(state);
555
+ },
556
+ });
557
+ this._baseToolDefinitions.set(taskStepsToolDefinition.name, taskStepsToolDefinition);
558
+ }
559
+ if (toolAccess.allows("ask_question")) {
560
+ const askQuestionToolDefinition = createAskQuestionToolDefinition({
561
+ sessionManager: this.deps.getSessionManager(),
562
+ artifactStore: toolArtifactStore,
563
+ getImageStore: () => this.deps.getSessionImageStore(),
564
+ });
565
+ this._baseToolDefinitions.set(askQuestionToolDefinition.name, askQuestionToolDefinition);
566
+ }
567
+ if (toolAccess.allows("delegate")) {
568
+ const delegateToolDefinition = createDelegateToolDefinition({
569
+ startWorkerDelegation: (args) => this.deps.startWorkerDelegation(args),
570
+ runWorkerDelegation: (args) => this.deps.runWorkerDelegationOnce(args),
571
+ orchestrationProfiles: this.deps.getOrchestrationProfileCatalog(),
572
+ });
573
+ this._baseToolDefinitions.set(delegateToolDefinition.name, delegateToolDefinition);
574
+ }
575
+ if (toolAccess.allows("delegate_status")) {
576
+ const delegateStatusToolDefinition = createDelegateStatusToolDefinition({
577
+ getLaneRecords: () => this.deps.getWorkerLaneRecords(),
578
+ getWorkerClaimSnapshots: () => this.deps.getWorkerClaimSnapshots(),
579
+ // Durable ack persists straight through the session log; routed here (rather than
580
+ // a new agent-session dep) because getSessionManager() is already a stable, generic
581
+ // passthrough dep, so no other package needs to change for this to work.
582
+ acknowledgeWorkerReview: (requestId) => acknowledgeWorkerClaimReview(this.deps.getSessionManager(), requestId),
583
+ });
584
+ this._baseToolDefinitions.set(delegateStatusToolDefinition.name, delegateStatusToolDefinition);
585
+ }
534
586
  // Registered but not default-active: probes spend tokens on the probed model, so
535
587
  // 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) {
588
+ if (toolAccess.allows("model_fitness")) {
589
+ const modelFitnessToolDefinition = createModelFitnessToolDefinition({
590
+ runProbe: (args) => this.deps.runModelFitness(args),
591
+ });
592
+ this._baseToolDefinitions.set(modelFitnessToolDefinition.name, modelFitnessToolDefinition);
593
+ }
594
+ if (toolAccess.allows("context_scout") && settingsManager.getScoutSettings().enabled) {
541
595
  const contextScoutToolDefinition = createContextScoutToolDefinition({
542
596
  runScout: (input) => this._runContextScout(input.query, input.maxTurns, toolArtifactStore),
543
597
  });
544
598
  this._baseToolDefinitions.set(contextScoutToolDefinition.name, contextScoutToolDefinition);
545
599
  }
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);
600
+ if (toolAccess.allows("run_toolkit_script")) {
601
+ const runToolkitScriptToolDefinition = createRunToolkitScriptToolDefinition({
602
+ getScripts: () => this.deps.getSettingsManager().getToolkitScripts(),
603
+ execute: (script, scriptArgs) => executeToolkitScript({ script, scriptArgs, cwd: this.deps.getCwd() }),
604
+ artifactStore: toolArtifactStore,
605
+ // Reflex brain (fitness-gated local model): resolves ambiguous requests into a
606
+ // registry pick. Best-effort absent/unfit brain keeps the shortlist behavior.
607
+ interpret: async (request, scripts) => {
608
+ const model = this.deps.resolveCurationModelIfFit();
609
+ if (!model)
610
+ return undefined;
611
+ const completion = await this.deps.runIsolatedCompletion({
612
+ systemPrompt: REFLEX_INTERPRETER_SYSTEM_PROMPT,
613
+ messages: [
614
+ {
615
+ role: "user",
616
+ content: [{ type: "text", text: buildReflexUserPrompt(request, scripts) }],
617
+ timestamp: Date.now(),
618
+ },
619
+ ],
620
+ model,
621
+ thinkingLevel: "off",
622
+ maxTokens: 256,
623
+ cacheRetention: "short",
624
+ // Stable per-lane synthetic affinity key so repeat ambiguous-request
625
+ // interpretations hit the same cache-warm backend.
626
+ laneKind: "toolkit-brain",
627
+ });
628
+ if (completion.usage.cost.total > 0 || completion.usage.totalTokens > 0) {
629
+ // `reportId` keyed on the ambiguous request text driving THIS interpretation
630
+ // stable across a retry of the same tool call, distinct across genuinely
631
+ // different requests.
632
+ const reportId = deriveSpawnedUsageReportId("toolkit-brain", this.deps.getSessionManager().getSessionId(), request);
633
+ this.deps.addSpawnedUsage(completion.usage, { label: "toolkit-brain", reportId });
634
+ }
635
+ return parseReflexPlan(completion.text);
636
+ },
637
+ });
638
+ this._baseToolDefinitions.set(runToolkitScriptToolDefinition.name, runToolkitScriptToolDefinition);
639
+ }
584
640
  // Worktree-sync (opt-in): the closed-action lane workflow tool, plus -- for a session
585
641
  // launched lane-bound (PI_WORKTREE_LANE) -- the G8/G10 lane gate wrapped UNDER the
586
642
  // file-mutation tools (edit/write, plus cooperative bash only for interactive lanes), so a sync_required lane fails closed with the
587
643
  // exact recovery step rather than relying on prompt compliance. `worktreeSyncSettings` /
588
644
  // `worktreeSyncEngineDeps` are hoisted above (declared before the goal-tool registration)
589
645
  // so the goal->tmux lane-first dispatch dep and this tool share one settings/deps source.
590
- if (worktreeSyncSettings.enabled) {
646
+ if (toolAccess.allows("worktree_sync") && worktreeSyncSettings?.enabled) {
591
647
  const worktreeSyncToolDefinition = createWorktreeSyncToolDefinition({
592
648
  engineDeps: worktreeSyncEngineDeps,
593
649
  settings: () => this.deps.getSettingsManager().getWorktreeSyncSettings(),
@@ -877,6 +933,9 @@ export class RuntimeBuilder {
877
933
  */
878
934
  async loadExtensionLive(extensionPath) {
879
935
  this._assertReloadQuiescent("load extension");
936
+ if (!this.deps.getSettingsManager().isResourceAllowedByProfile("extensions", extensionPath)) {
937
+ throw new Error(`Cannot load extension outside the active resource profile: ${extensionPath}`);
938
+ }
880
939
  const previousRunner = this.deps.getExtensionRunner();
881
940
  try {
882
941
  // Load the extension with fresh import