@inhuman.tools/turn 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/LICENSE.md +7 -0
  2. package/dist/agent-calls/acceptance.d.ts +12 -0
  3. package/dist/agent-calls/acceptance.d.ts.map +1 -0
  4. package/dist/agent-calls/acceptance.js +64 -0
  5. package/dist/agent-calls/acceptance.js.map +1 -0
  6. package/dist/agent-calls/callbacks.d.ts +14 -0
  7. package/dist/agent-calls/callbacks.d.ts.map +1 -0
  8. package/dist/agent-calls/callbacks.js +59 -0
  9. package/dist/agent-calls/callbacks.js.map +1 -0
  10. package/dist/agent-calls/delivery.d.ts +7 -0
  11. package/dist/agent-calls/delivery.d.ts.map +1 -0
  12. package/dist/agent-calls/delivery.js +16 -0
  13. package/dist/agent-calls/delivery.js.map +1 -0
  14. package/dist/agent-calls/index.d.ts +7 -0
  15. package/dist/agent-calls/index.d.ts.map +1 -0
  16. package/dist/agent-calls/index.js +6 -0
  17. package/dist/agent-calls/index.js.map +1 -0
  18. package/dist/agent-calls/operator.d.ts +21 -0
  19. package/dist/agent-calls/operator.d.ts.map +1 -0
  20. package/dist/agent-calls/operator.js +78 -0
  21. package/dist/agent-calls/operator.js.map +1 -0
  22. package/dist/agent-calls/runtime.d.ts +99 -0
  23. package/dist/agent-calls/runtime.d.ts.map +1 -0
  24. package/dist/agent-calls/runtime.js +245 -0
  25. package/dist/agent-calls/runtime.js.map +1 -0
  26. package/dist/agent-calls/types.d.ts +31 -0
  27. package/dist/agent-calls/types.d.ts.map +1 -0
  28. package/dist/agent-calls/types.js +2 -0
  29. package/dist/agent-calls/types.js.map +1 -0
  30. package/dist/context/compact-floors.d.ts +43 -0
  31. package/dist/context/compact-floors.d.ts.map +1 -0
  32. package/dist/context/compact-floors.js +52 -0
  33. package/dist/context/compact-floors.js.map +1 -0
  34. package/dist/context/compact.d.ts +42 -0
  35. package/dist/context/compact.d.ts.map +1 -0
  36. package/dist/context/compact.js +155 -0
  37. package/dist/context/compact.js.map +1 -0
  38. package/dist/context/delivery.d.ts +13 -0
  39. package/dist/context/delivery.d.ts.map +1 -0
  40. package/dist/context/delivery.js +6 -0
  41. package/dist/context/delivery.js.map +1 -0
  42. package/dist/context/history.d.ts +66 -0
  43. package/dist/context/history.d.ts.map +1 -0
  44. package/dist/context/history.js +573 -0
  45. package/dist/context/history.js.map +1 -0
  46. package/dist/context/index.d.ts +10 -0
  47. package/dist/context/index.d.ts.map +1 -0
  48. package/dist/context/index.js +10 -0
  49. package/dist/context/index.js.map +1 -0
  50. package/dist/context/observations.d.ts +7 -0
  51. package/dist/context/observations.d.ts.map +1 -0
  52. package/dist/context/observations.js +11 -0
  53. package/dist/context/observations.js.map +1 -0
  54. package/dist/context/retention/defaults.d.ts +10 -0
  55. package/dist/context/retention/defaults.d.ts.map +1 -0
  56. package/dist/context/retention/defaults.js +47 -0
  57. package/dist/context/retention/defaults.js.map +1 -0
  58. package/dist/context/retention/index.d.ts +14 -0
  59. package/dist/context/retention/index.d.ts.map +1 -0
  60. package/dist/context/retention/index.js +21 -0
  61. package/dist/context/retention/index.js.map +1 -0
  62. package/dist/context/retention/narrow.d.ts +22 -0
  63. package/dist/context/retention/narrow.d.ts.map +1 -0
  64. package/dist/context/retention/narrow.js +140 -0
  65. package/dist/context/retention/narrow.js.map +1 -0
  66. package/dist/context/retention/render.d.ts +37 -0
  67. package/dist/context/retention/render.d.ts.map +1 -0
  68. package/dist/context/retention/render.js +149 -0
  69. package/dist/context/retention/render.js.map +1 -0
  70. package/dist/context/retention/resolve.d.ts +51 -0
  71. package/dist/context/retention/resolve.d.ts.map +1 -0
  72. package/dist/context/retention/resolve.js +254 -0
  73. package/dist/context/retention/resolve.js.map +1 -0
  74. package/dist/context/retention/schema.d.ts +345 -0
  75. package/dist/context/retention/schema.d.ts.map +1 -0
  76. package/dist/context/retention/schema.js +149 -0
  77. package/dist/context/retention/schema.js.map +1 -0
  78. package/dist/context/retention/stamp.d.ts +25 -0
  79. package/dist/context/retention/stamp.d.ts.map +1 -0
  80. package/dist/context/retention/stamp.js +103 -0
  81. package/dist/context/retention/stamp.js.map +1 -0
  82. package/dist/context/retention/step.d.ts +33 -0
  83. package/dist/context/retention/step.d.ts.map +1 -0
  84. package/dist/context/retention/step.js +74 -0
  85. package/dist/context/retention/step.js.map +1 -0
  86. package/dist/context/retention/view.d.ts +57 -0
  87. package/dist/context/retention/view.d.ts.map +1 -0
  88. package/dist/context/retention/view.js +121 -0
  89. package/dist/context/retention/view.js.map +1 -0
  90. package/dist/context/squeeze.d.ts +45 -0
  91. package/dist/context/squeeze.d.ts.map +1 -0
  92. package/dist/context/squeeze.js +182 -0
  93. package/dist/context/squeeze.js.map +1 -0
  94. package/dist/context/tools.d.ts +16 -0
  95. package/dist/context/tools.d.ts.map +1 -0
  96. package/dist/context/tools.js +73 -0
  97. package/dist/context/tools.js.map +1 -0
  98. package/dist/context/transcript.d.ts +151 -0
  99. package/dist/context/transcript.d.ts.map +1 -0
  100. package/dist/context/transcript.js +659 -0
  101. package/dist/context/transcript.js.map +1 -0
  102. package/dist/policy-processor/bypass.d.ts +95 -0
  103. package/dist/policy-processor/bypass.d.ts.map +1 -0
  104. package/dist/policy-processor/bypass.js +188 -0
  105. package/dist/policy-processor/bypass.js.map +1 -0
  106. package/dist/policy-processor/classifier.d.ts +47 -0
  107. package/dist/policy-processor/classifier.d.ts.map +1 -0
  108. package/dist/policy-processor/classifier.js +671 -0
  109. package/dist/policy-processor/classifier.js.map +1 -0
  110. package/dist/policy-processor/cluster.d.ts +7 -0
  111. package/dist/policy-processor/cluster.d.ts.map +1 -0
  112. package/dist/policy-processor/cluster.js +32 -0
  113. package/dist/policy-processor/cluster.js.map +1 -0
  114. package/dist/policy-processor/evidence.d.ts +26 -0
  115. package/dist/policy-processor/evidence.d.ts.map +1 -0
  116. package/dist/policy-processor/evidence.js +204 -0
  117. package/dist/policy-processor/evidence.js.map +1 -0
  118. package/dist/policy-processor/explain.d.ts +59 -0
  119. package/dist/policy-processor/explain.d.ts.map +1 -0
  120. package/dist/policy-processor/explain.js +224 -0
  121. package/dist/policy-processor/explain.js.map +1 -0
  122. package/dist/policy-processor/index.d.ts +6 -0
  123. package/dist/policy-processor/index.d.ts.map +1 -0
  124. package/dist/policy-processor/index.js +6 -0
  125. package/dist/policy-processor/index.js.map +1 -0
  126. package/dist/policy-processor/license.d.ts +23 -0
  127. package/dist/policy-processor/license.d.ts.map +1 -0
  128. package/dist/policy-processor/license.js +47 -0
  129. package/dist/policy-processor/license.js.map +1 -0
  130. package/dist/policy-processor/peel-cwd.d.ts +2 -0
  131. package/dist/policy-processor/peel-cwd.d.ts.map +1 -0
  132. package/dist/policy-processor/peel-cwd.js +2 -0
  133. package/dist/policy-processor/peel-cwd.js.map +1 -0
  134. package/dist/policy-processor/real-path.d.ts +7 -0
  135. package/dist/policy-processor/real-path.d.ts.map +1 -0
  136. package/dist/policy-processor/real-path.js +42 -0
  137. package/dist/policy-processor/real-path.js.map +1 -0
  138. package/dist/policy-processor/scope.d.ts +111 -0
  139. package/dist/policy-processor/scope.d.ts.map +1 -0
  140. package/dist/policy-processor/scope.js +629 -0
  141. package/dist/policy-processor/scope.js.map +1 -0
  142. package/dist/policy-processor/self-protect.d.ts +10 -0
  143. package/dist/policy-processor/self-protect.d.ts.map +1 -0
  144. package/dist/policy-processor/self-protect.js +48 -0
  145. package/dist/policy-processor/self-protect.js.map +1 -0
  146. package/dist/policy-processor/soft-deny.d.ts +75 -0
  147. package/dist/policy-processor/soft-deny.d.ts.map +1 -0
  148. package/dist/policy-processor/soft-deny.js +185 -0
  149. package/dist/policy-processor/soft-deny.js.map +1 -0
  150. package/dist/policy-processor/unattended-guard.d.ts +28 -0
  151. package/dist/policy-processor/unattended-guard.d.ts.map +1 -0
  152. package/dist/policy-processor/unattended-guard.js +145 -0
  153. package/dist/policy-processor/unattended-guard.js.map +1 -0
  154. package/dist/session/cancel.d.ts +14 -0
  155. package/dist/session/cancel.d.ts.map +1 -0
  156. package/dist/session/cancel.js +32 -0
  157. package/dist/session/cancel.js.map +1 -0
  158. package/dist/session/commands.d.ts +41 -0
  159. package/dist/session/commands.d.ts.map +1 -0
  160. package/dist/session/commands.js +241 -0
  161. package/dist/session/commands.js.map +1 -0
  162. package/dist/session/compact-actor.d.ts +23 -0
  163. package/dist/session/compact-actor.d.ts.map +1 -0
  164. package/dist/session/compact-actor.js +91 -0
  165. package/dist/session/compact-actor.js.map +1 -0
  166. package/dist/session/compact-env.d.ts +54 -0
  167. package/dist/session/compact-env.d.ts.map +1 -0
  168. package/dist/session/compact-env.js +345 -0
  169. package/dist/session/compact-env.js.map +1 -0
  170. package/dist/session/compact.d.ts +42 -0
  171. package/dist/session/compact.d.ts.map +1 -0
  172. package/dist/session/compact.js +68 -0
  173. package/dist/session/compact.js.map +1 -0
  174. package/dist/session/index.d.ts +9 -0
  175. package/dist/session/index.d.ts.map +1 -0
  176. package/dist/session/index.js +8 -0
  177. package/dist/session/index.js.map +1 -0
  178. package/dist/session/park.d.ts +16 -0
  179. package/dist/session/park.d.ts.map +1 -0
  180. package/dist/session/park.js +73 -0
  181. package/dist/session/park.js.map +1 -0
  182. package/dist/session/side-channel-reminder.d.ts +41 -0
  183. package/dist/session/side-channel-reminder.d.ts.map +1 -0
  184. package/dist/session/side-channel-reminder.js +132 -0
  185. package/dist/session/side-channel-reminder.js.map +1 -0
  186. package/dist/session/types.d.ts +44 -0
  187. package/dist/session/types.d.ts.map +1 -0
  188. package/dist/session/types.js +2 -0
  189. package/dist/session/types.js.map +1 -0
  190. package/dist/tool-catalog/catalog.d.ts +77 -0
  191. package/dist/tool-catalog/catalog.d.ts.map +1 -0
  192. package/dist/tool-catalog/catalog.js +380 -0
  193. package/dist/tool-catalog/catalog.js.map +1 -0
  194. package/dist/tool-catalog/index.d.ts +4 -0
  195. package/dist/tool-catalog/index.d.ts.map +1 -0
  196. package/dist/tool-catalog/index.js +3 -0
  197. package/dist/tool-catalog/index.js.map +1 -0
  198. package/dist/tool-catalog/recipes.d.ts +36 -0
  199. package/dist/tool-catalog/recipes.d.ts.map +1 -0
  200. package/dist/tool-catalog/recipes.js +121 -0
  201. package/dist/tool-catalog/recipes.js.map +1 -0
  202. package/dist/tool-catalog/types.d.ts +103 -0
  203. package/dist/tool-catalog/types.d.ts.map +1 -0
  204. package/dist/tool-catalog/types.js +5 -0
  205. package/dist/tool-catalog/types.js.map +1 -0
  206. package/dist/tool-runtime/approval/approved.d.ts +13 -0
  207. package/dist/tool-runtime/approval/approved.d.ts.map +1 -0
  208. package/dist/tool-runtime/approval/approved.js +20 -0
  209. package/dist/tool-runtime/approval/approved.js.map +1 -0
  210. package/dist/tool-runtime/approval/dist.d.ts +6 -0
  211. package/dist/tool-runtime/approval/dist.d.ts.map +1 -0
  212. package/dist/tool-runtime/approval/dist.js +28 -0
  213. package/dist/tool-runtime/approval/dist.js.map +1 -0
  214. package/dist/tool-runtime/approval/inbound.d.ts +7 -0
  215. package/dist/tool-runtime/approval/inbound.d.ts.map +1 -0
  216. package/dist/tool-runtime/approval/inbound.js +48 -0
  217. package/dist/tool-runtime/approval/inbound.js.map +1 -0
  218. package/dist/tool-runtime/approval/unattended.d.ts +8 -0
  219. package/dist/tool-runtime/approval/unattended.d.ts.map +1 -0
  220. package/dist/tool-runtime/approval/unattended.js +23 -0
  221. package/dist/tool-runtime/approval/unattended.js.map +1 -0
  222. package/dist/tool-runtime/blob-port.d.ts +46 -0
  223. package/dist/tool-runtime/blob-port.d.ts.map +1 -0
  224. package/dist/tool-runtime/blob-port.js +47 -0
  225. package/dist/tool-runtime/blob-port.js.map +1 -0
  226. package/dist/tool-runtime/extra-root.d.ts +3 -0
  227. package/dist/tool-runtime/extra-root.d.ts.map +1 -0
  228. package/dist/tool-runtime/extra-root.js +14 -0
  229. package/dist/tool-runtime/extra-root.js.map +1 -0
  230. package/dist/tool-runtime/handler.d.ts +29 -0
  231. package/dist/tool-runtime/handler.d.ts.map +1 -0
  232. package/dist/tool-runtime/handler.js +460 -0
  233. package/dist/tool-runtime/handler.js.map +1 -0
  234. package/dist/tool-runtime/index.d.ts +14 -0
  235. package/dist/tool-runtime/index.d.ts.map +1 -0
  236. package/dist/tool-runtime/index.js +14 -0
  237. package/dist/tool-runtime/index.js.map +1 -0
  238. package/dist/tool-runtime/peel.d.ts +19 -0
  239. package/dist/tool-runtime/peel.d.ts.map +1 -0
  240. package/dist/tool-runtime/peel.js +74 -0
  241. package/dist/tool-runtime/peel.js.map +1 -0
  242. package/dist/tool-runtime/plugin-context.d.ts +13 -0
  243. package/dist/tool-runtime/plugin-context.d.ts.map +1 -0
  244. package/dist/tool-runtime/plugin-context.js +55 -0
  245. package/dist/tool-runtime/plugin-context.js.map +1 -0
  246. package/dist/tool-runtime/recall.d.ts +18 -0
  247. package/dist/tool-runtime/recall.d.ts.map +1 -0
  248. package/dist/tool-runtime/recall.js +100 -0
  249. package/dist/tool-runtime/recall.js.map +1 -0
  250. package/dist/tool-runtime/run-system-tool.d.ts +13 -0
  251. package/dist/tool-runtime/run-system-tool.d.ts.map +1 -0
  252. package/dist/tool-runtime/run-system-tool.js +230 -0
  253. package/dist/tool-runtime/run-system-tool.js.map +1 -0
  254. package/dist/tool-runtime/tool-error.d.ts +6 -0
  255. package/dist/tool-runtime/tool-error.d.ts.map +1 -0
  256. package/dist/tool-runtime/tool-error.js +6 -0
  257. package/dist/tool-runtime/tool-error.js.map +1 -0
  258. package/dist/tool-runtime/worker-tools.d.ts +8 -0
  259. package/dist/tool-runtime/worker-tools.d.ts.map +1 -0
  260. package/dist/tool-runtime/worker-tools.js +65 -0
  261. package/dist/tool-runtime/worker-tools.js.map +1 -0
  262. package/dist/tool-runtime/write-admit.d.ts +21 -0
  263. package/dist/tool-runtime/write-admit.d.ts.map +1 -0
  264. package/dist/tool-runtime/write-admit.js +89 -0
  265. package/dist/tool-runtime/write-admit.js.map +1 -0
  266. package/package.json +114 -3
  267. package/policy/auto-mode-ask.scm +201 -0
  268. package/policy/bypass-detect.prompt +55 -0
  269. package/policy/classifier-bash-incomplete.prompt +46 -0
  270. package/policy/classifier-bash.prompt +45 -0
  271. package/policy/classifier-mcp.prompt +45 -0
  272. package/policy/classifier-read.prompt +44 -0
  273. package/policy/classifier-write-outside.prompt +46 -0
  274. package/policy/classifier-write-risky.prompt +45 -0
  275. package/policy/classifier-write-workspace.prompt +46 -0
  276. package/policy/classifier-write.prompt +45 -0
  277. package/policy/soft-deny-round1.prompt +51 -0
  278. package/policy/soft-deny-round2.prompt +60 -0
  279. package/src/agent-calls/acceptance.ts +71 -0
  280. package/src/agent-calls/callbacks.ts +75 -0
  281. package/src/agent-calls/delivery.ts +15 -0
  282. package/src/agent-calls/index.ts +16 -0
  283. package/src/agent-calls/operator.ts +99 -0
  284. package/src/agent-calls/runtime.ts +310 -0
  285. package/src/agent-calls/types.ts +33 -0
  286. package/src/context/compact-floors.ts +76 -0
  287. package/src/context/compact.ts +176 -0
  288. package/src/context/delivery.ts +15 -0
  289. package/src/context/history.ts +725 -0
  290. package/src/context/index.ts +35 -0
  291. package/src/context/observations.ts +13 -0
  292. package/src/context/retention/defaults.ts +58 -0
  293. package/src/context/retention/index.ts +45 -0
  294. package/src/context/retention/narrow.ts +123 -0
  295. package/src/context/retention/render.ts +177 -0
  296. package/src/context/retention/resolve.ts +306 -0
  297. package/src/context/retention/schema.ts +173 -0
  298. package/src/context/retention/stamp.ts +121 -0
  299. package/src/context/retention/step.ts +85 -0
  300. package/src/context/retention/view.ts +161 -0
  301. package/src/context/squeeze.ts +218 -0
  302. package/src/context/tools.ts +92 -0
  303. package/src/context/transcript.ts +705 -0
  304. package/src/policy-processor/README.md +43 -0
  305. package/src/policy-processor/bypass.ts +246 -0
  306. package/src/policy-processor/classifier.ts +711 -0
  307. package/src/policy-processor/cluster.ts +31 -0
  308. package/src/policy-processor/evidence.ts +214 -0
  309. package/src/policy-processor/explain.ts +310 -0
  310. package/src/policy-processor/index.ts +6 -0
  311. package/src/policy-processor/license.ts +45 -0
  312. package/src/policy-processor/peel-cwd.ts +1 -0
  313. package/src/policy-processor/real-path.ts +41 -0
  314. package/src/policy-processor/scope.ts +655 -0
  315. package/src/policy-processor/self-protect.ts +46 -0
  316. package/src/policy-processor/soft-deny.ts +225 -0
  317. package/src/policy-processor/unattended-guard.ts +158 -0
  318. package/src/session/cancel.ts +34 -0
  319. package/src/session/commands.ts +292 -0
  320. package/src/session/compact-actor.ts +132 -0
  321. package/src/session/compact-env.ts +539 -0
  322. package/src/session/compact.ts +95 -0
  323. package/src/session/index.ts +18 -0
  324. package/src/session/park.ts +73 -0
  325. package/src/session/side-channel-reminder.ts +148 -0
  326. package/src/session/types.ts +50 -0
  327. package/src/tool-catalog/catalog.ts +282 -0
  328. package/src/tool-catalog/index.ts +26 -0
  329. package/src/tool-catalog/recipes.ts +154 -0
  330. package/src/tool-catalog/types.ts +110 -0
  331. package/src/tool-runtime/approval/approved.ts +20 -0
  332. package/src/tool-runtime/approval/dist.ts +29 -0
  333. package/src/tool-runtime/approval/inbound.ts +50 -0
  334. package/src/tool-runtime/approval/unattended.ts +24 -0
  335. package/src/tool-runtime/blob-port.ts +64 -0
  336. package/src/tool-runtime/extra-root.ts +16 -0
  337. package/src/tool-runtime/handler.ts +576 -0
  338. package/src/tool-runtime/index.ts +21 -0
  339. package/src/tool-runtime/peel.ts +91 -0
  340. package/src/tool-runtime/plugin-context.ts +68 -0
  341. package/src/tool-runtime/recall.ts +104 -0
  342. package/src/tool-runtime/run-system-tool.ts +273 -0
  343. package/src/tool-runtime/tool-error.ts +6 -0
  344. package/src/tool-runtime/worker-tools.ts +76 -0
  345. package/src/tool-runtime/write-admit.ts +90 -0
  346. package/README.md +0 -3
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Build plugin call context from live session entities. Graph objects stay
3
+ * host-side. Storage is the prefix projection; propose is applied onto this job after run.
4
+ */
5
+ import { CompletionExpectation, hostingTurnOf, projectionsOf, reactChunks, SessionTurn, storageBefore, tapeCompletion, } from "@inhuman.tools/harness-model";
6
+ export const pendingPropose = new WeakMap();
7
+ function completionHosting(job) {
8
+ const turn = job.parent instanceof SessionTurn ? job.parent : null;
9
+ if (turn == null)
10
+ return null;
11
+ const tape = reactChunks(turn);
12
+ for (let i = 0; i < tape.length; i += 1) {
13
+ const pew = tapeCompletion(tape[i]);
14
+ if (pew == null)
15
+ continue;
16
+ if (pew.messages.includes(job))
17
+ return pew;
18
+ for (let index = i + 1; index < tape.length; index += 1) {
19
+ const cell = tape[index];
20
+ if (tapeCompletion(cell) != null)
21
+ break;
22
+ if (cell === job)
23
+ return pew;
24
+ }
25
+ }
26
+ return null;
27
+ }
28
+ export function pluginCallContextOf(root, job, signal, pluginId = "") {
29
+ const turn = hostingTurnOf(root, job) ?? (job.parent instanceof SessionTurn ? job.parent : null);
30
+ const completion = completionHosting(job);
31
+ const prefix = storageBefore(root, job);
32
+ const projection = pluginId === "" ? undefined : projectionsOf(root).get(pluginId);
33
+ const initial = projection?.initial() ?? {};
34
+ return {
35
+ root: root.path.trim() === "" ? undefined : root.path,
36
+ callerSessionId: root.sessionId,
37
+ turn,
38
+ completion,
39
+ invocation: job,
40
+ signal,
41
+ storage: {
42
+ session: pluginId === "" ? prefix : (prefix[pluginId] ?? initial),
43
+ invocation: initial,
44
+ propose(action) {
45
+ if (pluginId === "")
46
+ return;
47
+ pendingPropose.set(job, { pluginId, action });
48
+ },
49
+ },
50
+ };
51
+ }
52
+ export function isModelOriginContext(ctx) {
53
+ return ctx.completion instanceof CompletionExpectation;
54
+ }
55
+ //# sourceMappingURL=plugin-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-context.js","sourceRoot":"","sources":["../../src/tool-runtime/plugin-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `context_recall {ref}` — read a sealed result back from the graph, paged.
3
+ *
4
+ * It re-exposes only what the model already saw in this session, so it needs
5
+ * no policy floor beyond read-only. Refs resolve against turns reachable from
6
+ * the live head (`turnTail` chain); an abandoned branch or another session
7
+ * cannot be read.
8
+ */
9
+ import { ProgrammaticJob, SessionRoot, ToolCallJob } from "@inhuman.tools/harness-model";
10
+ import type { ToolOutcomeSnap } from "@inhuman.tools/harness-model/schemas";
11
+ export declare const CONTEXT_RECALL_TOOL_NAME = "context_recall";
12
+ export declare function sealedJobText(job: ToolCallJob | ProgrammaticJob): string;
13
+ export declare function recallContext(root: SessionRoot, args: {
14
+ readonly ref?: unknown;
15
+ readonly offset?: unknown;
16
+ readonly length?: unknown;
17
+ }): ToolOutcomeSnap;
18
+ //# sourceMappingURL=recall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../src/tool-runtime/recall.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAe,WAAW,EAAe,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACnH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAI5E,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AAyBzD,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,eAAe,GAAG,MAAM,CAIxE;AAMD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACrF,eAAe,CAoDjB"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * `context_recall {ref}` — read a sealed result back from the graph, paged.
3
+ *
4
+ * It re-exposes only what the model already saw in this session, so it needs
5
+ * no policy floor beyond read-only. Refs resolve against turns reachable from
6
+ * the live head (`turnTail` chain); an abandoned branch or another session
7
+ * cannot be read.
8
+ */
9
+ import { ProgrammaticJob, reactChunks, SessionTurn, ToolCallJob } from "@inhuman.tools/harness-model";
10
+ import { SQUEEZE_COMPACT_CHARS, liftToolImages, paintObservation } from "../context/squeeze.js";
11
+ export const CONTEXT_RECALL_TOOL_NAME = "context_recall";
12
+ const MIN_PREFIX = 4;
13
+ function reachableTurns(root) {
14
+ const out = [];
15
+ for (let cell = root.head; cell instanceof SessionTurn && !out.includes(cell); cell = cell.turnTail) {
16
+ out.push(cell);
17
+ }
18
+ return out;
19
+ }
20
+ function reachableJobs(root) {
21
+ const out = [];
22
+ for (const turn of reachableTurns(root)) {
23
+ for (const cell of reactChunks(turn)) {
24
+ if (cell instanceof ToolCallJob)
25
+ out.push(cell);
26
+ else if (cell instanceof ProgrammaticJob) {
27
+ out.push(cell, ...cell.toolCalls);
28
+ }
29
+ }
30
+ }
31
+ return out;
32
+ }
33
+ export function sealedJobText(job) {
34
+ if (job instanceof ToolCallJob)
35
+ return paintObservation(liftToolImages(job.observationPayload()).payload);
36
+ const text = job.resultText();
37
+ return text !== "" ? text : (job.receiptJson ?? "");
38
+ }
39
+ function nameOf(job) {
40
+ return job instanceof ToolCallJob ? job.name : job.toolName;
41
+ }
42
+ export function recallContext(root, args) {
43
+ const refused = (text) => ({ ok: false, text: `context_recall: ${text}` });
44
+ let ref = typeof args.ref === "string" ? args.ref.trim() : "";
45
+ if (ref === "")
46
+ return refused("ref is required (job:<id> or visual:<id>)");
47
+ const offset = typeof args.offset === "number" && args.offset > 0 ? Math.floor(args.offset) : 0;
48
+ const length = typeof args.length === "number" && args.length > 0
49
+ ? Math.min(Math.floor(args.length), SQUEEZE_COMPACT_CHARS)
50
+ : SQUEEZE_COMPACT_CHARS;
51
+ if (ref.startsWith("visual:")) {
52
+ const id = ref.slice("visual:".length);
53
+ for (const turn of reachableTurns(root)) {
54
+ const visual = turn.visuals.find((v) => v.id === id);
55
+ if (visual === undefined)
56
+ continue;
57
+ return {
58
+ ok: true,
59
+ value: `[recall ${ref}] [Image attached: ${visual.mime}, ${visual.width}x${visual.height}${visual.sourcePath ? `, ${visual.sourcePath}` : ""}]`,
60
+ json: { visualId: visual.id },
61
+ };
62
+ }
63
+ return refused(`unknown or unreachable ref ${ref}`);
64
+ }
65
+ for (let hop = 0; hop < 4; hop += 1) {
66
+ if (!ref.startsWith("job:"))
67
+ return refused(`unknown ref ${ref} (use job:<id> or visual:<id>)`);
68
+ const wantArgs = ref.endsWith("#args");
69
+ const prefix = ref.slice("job:".length).replace(/#args$/, "");
70
+ if (prefix.length < MIN_PREFIX)
71
+ return refused(`ref ${ref} is too short`);
72
+ const hits = reachableJobs(root).filter((job) => job.uuid.startsWith(prefix));
73
+ if (hits.length === 0)
74
+ return refused(`unknown or unreachable ref ${ref}`);
75
+ if (hits.length > 1)
76
+ return refused(`ref ${ref} is ambiguous`);
77
+ const job = hits[0];
78
+ if (nameOf(job) === CONTEXT_RECALL_TOOL_NAME) {
79
+ // A recall of a recall resolves to the original.
80
+ const inner = job.args?.ref;
81
+ if (typeof inner !== "string")
82
+ return refused(`ref ${ref} names an unreadable recall`);
83
+ ref = inner;
84
+ if (ref.startsWith("visual:"))
85
+ return recallContext(root, { ref, offset, length });
86
+ continue;
87
+ }
88
+ if (!wantArgs && !job.completed)
89
+ return refused(`${ref} has no sealed result yet`);
90
+ const text = wantArgs ? JSON.stringify(job.args ?? {}) : sealedJobText(job);
91
+ const total = text.length;
92
+ const pages = Math.max(1, Math.ceil(total / length));
93
+ const end = Math.min(total, offset + length);
94
+ const note = !wantArgs && job instanceof ToolCallJob && job.regenerateable ? "; as observed, re-read for current" : "";
95
+ const header = `[recall ${ref} ${nameOf(job)}${wantArgs ? " args" : ""}: chars ${offset}-${end} of ${total}, page ${Math.floor(offset / length) + 1}/${pages}${end < total ? `; next offset ${end}` : ""}${note}]`;
96
+ return { ok: true, value: `${header}\n${text.slice(offset, end)}` };
97
+ }
98
+ return refused("ref chain too deep");
99
+ }
100
+ //# sourceMappingURL=recall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.js","sourceRoot":"","sources":["../../src/tool-runtime/recall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * System-tool BODY. Claimed after an allow-side guard. Outcome lives on
3
+ * the job. This run does not vote. Effect bodies are catalog.execute.
4
+ */
5
+ import { type JobStopReport, SystemToolJob } from "@inhuman.tools/harness-model";
6
+ import type { ToolOutcomeSnap } from "@inhuman.tools/harness-model/schemas";
7
+ export declare function sealToolCall(job: SystemToolJob, outcome: ToolOutcomeSnap): void;
8
+ export declare function executeSystemTool(job: SystemToolJob, signal: AbortSignal, opts?: {
9
+ readonly shellTailBytes?: number;
10
+ /** Host list/stop for `job_stop`. The tool body has no job table of its own. */
11
+ readonly stopJob?: (jobId: string) => JobStopReport | Promise<JobStopReport>;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=run-system-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-system-tool.d.ts","sourceRoot":"","sources":["../../src/tool-runtime/run-system-tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAOL,KAAK,aAAa,EASlB,aAAa,EAEd,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAuE5E,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAI/E;AAgCD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE;IACL,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,gFAAgF;IAChF,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC9E,GACA,OAAO,CAAC,IAAI,CAAC,CAsIf"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * System-tool BODY. Claimed after an allow-side guard. Outcome lives on
3
+ * the job. This run does not vote. Effect bodies are catalog.execute.
4
+ */
5
+ import { cancelOutcomeText, DEFAULT_SHELL_TAIL_BYTES, documentRoot, FileMutateToolJob, isAbortError, isTimeoutAbortReason, parseShellTailBytes, outcomeText, projectionsOf, rememberJobResult, RESULT_NOTE_CHARS, reportShellTail, retractShellTail, SessionRoot, writePluginMeta, } from "@inhuman.tools/harness-model";
6
+ import { z } from "zod";
7
+ import { externalizePrior } from "./blob-port.js";
8
+ import { runWithExtraRoot } from "./extra-root.js";
9
+ import { pendingPropose, pluginCallContextOf } from "./plugin-context.js";
10
+ import { CONTEXT_RECALL_TOOL_NAME, recallContext } from "./recall.js";
11
+ import { ToolError } from "./tool-error.js";
12
+ import { workerToolAllowed } from "./worker-tools.js";
13
+ import { lineStartOfSpan } from "./write-admit.js";
14
+ import { behaviorEntriesOf, catalogOf, requireCatalog } from "../tool-catalog/index.js";
15
+ function cancelledSnap(signal) {
16
+ return { ok: false, text: cancelOutcomeText(signal.reason) };
17
+ }
18
+ const TAIL_MS = 50;
19
+ function tailPublisher(job) {
20
+ let lastAt = 0;
21
+ let timer;
22
+ let latest;
23
+ const send = (frame) => {
24
+ if (job.receiptJson != null && job.receiptJson !== "")
25
+ return;
26
+ latest = undefined;
27
+ lastAt = Date.now();
28
+ reportShellTail(job, frame);
29
+ };
30
+ return {
31
+ push(frame) {
32
+ const now = Date.now();
33
+ if (now - lastAt >= TAIL_MS) {
34
+ if (timer !== undefined)
35
+ clearTimeout(timer);
36
+ timer = undefined;
37
+ send(frame);
38
+ return;
39
+ }
40
+ latest = frame;
41
+ timer ??= setTimeout(() => {
42
+ timer = undefined;
43
+ if (latest !== undefined)
44
+ send(latest);
45
+ }, TAIL_MS);
46
+ },
47
+ flush() {
48
+ if (timer !== undefined)
49
+ clearTimeout(timer);
50
+ timer = undefined;
51
+ if (latest !== undefined)
52
+ send(latest);
53
+ },
54
+ };
55
+ }
56
+ /** The captured prior text lands inline or by reference; the other field is cleared, so at most one is set. */
57
+ function stampPrior(job, text) {
58
+ if (text === null) {
59
+ job.priorContent = null;
60
+ job.priorBlobJson = null;
61
+ return;
62
+ }
63
+ const stamp = externalizePrior(text);
64
+ if ("priorBlobJson" in stamp) {
65
+ job.priorContent = null;
66
+ job.priorBlobJson = stamp.priorBlobJson;
67
+ }
68
+ else {
69
+ job.priorContent = stamp.priorContent;
70
+ job.priorBlobJson = null;
71
+ }
72
+ }
73
+ export function sealToolCall(job, outcome) {
74
+ rememberJobResult(job, outcomeText(outcome), RESULT_NOTE_CHARS);
75
+ job.outcomeSnap ??= outcome;
76
+ retractShellTail(job);
77
+ }
78
+ function asToolResult(out) {
79
+ if (out != null && typeof out === "object" && "ok" in out) {
80
+ const row = out;
81
+ if (typeof row.ok === "boolean") {
82
+ return {
83
+ ok: row.ok,
84
+ ...(typeof row.text === "string" ? { text: row.text } : {}),
85
+ ...("value" in row ? { value: row.value } : {}),
86
+ ...(row.truncated === true ? { truncated: true } : {}),
87
+ };
88
+ }
89
+ }
90
+ return { ok: true, value: out };
91
+ }
92
+ function doorText(error) {
93
+ if (error instanceof z.ZodError) {
94
+ const issue = error.issues[0];
95
+ const path = issue.path.map(String).join(".");
96
+ return path === "" ? issue.message : `${path}: ${issue.message}`;
97
+ }
98
+ if (error instanceof Error)
99
+ return error.message;
100
+ return String(error);
101
+ }
102
+ export async function executeSystemTool(job, signal, opts) {
103
+ const seal = (outcome) => {
104
+ sealToolCall(job, outcome);
105
+ };
106
+ try {
107
+ if (signal.aborted) {
108
+ seal(cancelledSnap(signal));
109
+ return;
110
+ }
111
+ const { toolCallId, name } = job;
112
+ if (toolCallId === "") {
113
+ seal({ ok: false, text: "tool_call snapshot missing toolCallId" });
114
+ return;
115
+ }
116
+ const session = documentRoot(job);
117
+ if (!(session instanceof SessionRoot)) {
118
+ seal({ ok: false, text: "tool_call missing session" });
119
+ return;
120
+ }
121
+ const catalog = requireCatalog(catalogOf(session), name);
122
+ const entry = catalog.catalogEntry(name) ?? behaviorEntriesOf(session).find((row) => row.wireName === name);
123
+ if (session.agent.spec.name !== "" && !workerToolAllowed(catalog, session.agent.spec.name, name, session)) {
124
+ seal({ ok: false, text: "outside worker tool ceiling" });
125
+ return;
126
+ }
127
+ job.regenerateable = entry?.class === "read";
128
+ if (signal.aborted) {
129
+ seal(cancelledSnap(signal));
130
+ return;
131
+ }
132
+ const raw = job.invocation();
133
+ const args = job.args ?? (raw === "" ? {} : null);
134
+ if (args == null) {
135
+ seal({
136
+ ok: false,
137
+ text: `${name}: arguments were not valid JSON — ${raw.slice(0, 200)}`,
138
+ });
139
+ return;
140
+ }
141
+ if (name === CONTEXT_RECALL_TOOL_NAME) {
142
+ seal(recallContext(session, args));
143
+ return;
144
+ }
145
+ if (name === "job_stop") {
146
+ const jobIdRaw = args.job_id;
147
+ const jobId = typeof jobIdRaw === "string" ? jobIdRaw : "";
148
+ const report = await (opts?.stopJob?.(jobId) ?? {
149
+ ok: false,
150
+ text: "job_stop is not available on this host",
151
+ });
152
+ seal(report);
153
+ return;
154
+ }
155
+ const root = session.path.trim() === "" ? process.cwd() : session.path;
156
+ // Extra-root follows the license, not the human bit. Yolo and auto
157
+ // remainder leave approved null; writing it here would derive HITL.
158
+ // block never licenses. A folder the human said to treat as part of the session is a floor approve for
159
+ // reads under it (a session read root), so it opens the same door through `licenseAllows`; nothing is remembered
160
+ // from a single outside read.
161
+ const tailBytes = parseShellTailBytes(opts?.shellTailBytes ?? DEFAULT_SHELL_TAIL_BYTES);
162
+ const live = name === "shell" && tailBytes > 0 ? tailPublisher(job) : undefined;
163
+ let dispatched;
164
+ try {
165
+ ToolError.invariant(entry?.execute, () => name.startsWith("mcp__")
166
+ ? `unknown MCP tool "${name}" — connection missing, disabled, or not expanded`
167
+ : `unknown tool "${name}" — available: ${catalog.catalogWireNames().join(", ")}`);
168
+ try {
169
+ dispatched = await runWithExtraRoot(job.licenseAllows, () => entry.execute(args, {
170
+ root,
171
+ catalog,
172
+ signal,
173
+ sessionId: session.sessionId,
174
+ onPriorContent: job instanceof FileMutateToolJob
175
+ ? (text) => {
176
+ stampPrior(job, text);
177
+ if (typeof text === "string" && name === "edit_file") {
178
+ const old = typeof args.old_string === "string" ? args.old_string : "";
179
+ const line = lineStartOfSpan(text, old);
180
+ if (line != null)
181
+ job.priorLineStart = line;
182
+ }
183
+ }
184
+ : undefined,
185
+ shellTailBytes: tailBytes,
186
+ onTail: live?.push,
187
+ ...pluginCallContextOf(session, job, signal, entry.source.kind === "pack" ? entry.source.pluginName : ""),
188
+ }));
189
+ }
190
+ catch (error) {
191
+ if (error instanceof ToolError)
192
+ throw error;
193
+ dispatched = {
194
+ ok: false,
195
+ text: error instanceof z.ZodError ? doorText(error) : `${name}: ${doorText(error)}`,
196
+ };
197
+ }
198
+ }
199
+ finally {
200
+ live?.flush();
201
+ }
202
+ const proposed = pendingPropose.get(job);
203
+ pendingPropose.delete(job);
204
+ if (proposed != null) {
205
+ const projection = projectionsOf(job).get(proposed.pluginId);
206
+ if (projection?.hostOnly?.(proposed.action) === true) {
207
+ seal({ ok: false, text: `${proposed.pluginId}: host-only metadata` });
208
+ return;
209
+ }
210
+ writePluginMeta(job, proposed.pluginId, proposed.action, false);
211
+ }
212
+ seal(asToolResult(dispatched));
213
+ }
214
+ catch (error) {
215
+ if (signal.aborted) {
216
+ seal(cancelledSnap(signal));
217
+ return;
218
+ }
219
+ if (error instanceof ToolError) {
220
+ seal({ ok: false, text: error.message });
221
+ return;
222
+ }
223
+ if (isAbortError(error) && !isTimeoutAbortReason(error)) {
224
+ seal({ ok: false, text: cancelOutcomeText(error) });
225
+ return;
226
+ }
227
+ seal({ ok: false, text: `error: ${error instanceof Error ? error.message : String(error)}` });
228
+ }
229
+ }
230
+ //# sourceMappingURL=run-system-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-system-tool.js","sourceRoot":"","sources":["../../src/tool-runtime/run-system-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ErrorWithInvariant } from "@inhuman.tools/error-with-invariant";
2
+ /** Failure the model is meant to read and correct — never a turn-killer. */
3
+ export declare class ToolError extends ErrorWithInvariant {
4
+ readonly name = "ToolError";
5
+ }
6
+ //# sourceMappingURL=tool-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error.d.ts","sourceRoot":"","sources":["../../src/tool-runtime/tool-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,4EAA4E;AAC5E,qBAAa,SAAU,SAAQ,kBAAkB;IAC/C,QAAQ,CAAC,IAAI,eAAe;CAC7B"}
@@ -0,0 +1,6 @@
1
+ import { ErrorWithInvariant } from "@inhuman.tools/error-with-invariant";
2
+ /** Failure the model is meant to read and correct — never a turn-killer. */
3
+ export class ToolError extends ErrorWithInvariant {
4
+ name = "ToolError";
5
+ }
6
+ //# sourceMappingURL=tool-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error.js","sourceRoot":"","sources":["../../src/tool-runtime/tool-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,4EAA4E;AAC5E,MAAM,OAAO,SAAU,SAAQ,kBAAkB;IACtC,IAAI,GAAG,WAAW,CAAC;CAC7B"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Worker tool ceiling. The one implementation: the session view and admit/execute both call it.
3
+ * Bot-granted MCP and private plugin MCP are answered by the catalog's `workerHost`.
4
+ */
5
+ import { SessionRoot } from "@inhuman.tools/harness-model";
6
+ import { type KernelToolCatalog } from "../tool-catalog/index.js";
7
+ export declare function workerToolAllowed(catalog: KernelToolCatalog, recipeName: string, wire: string, sessionRoot?: SessionRoot): boolean;
8
+ //# sourceMappingURL=worker-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-tools.d.ts","sourceRoot":"","sources":["../../src/tool-runtime/worker-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAUL,WAAW,EACZ,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAA+C,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAuB/G,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CA8BT"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Worker tool ceiling. The one implementation: the session view and admit/execute both call it.
3
+ * Bot-granted MCP and private plugin MCP are answered by the catalog's `workerHost`.
4
+ */
5
+ import { AGENT_ASK, AGENT_MESSAGE, AGENT_NOTIFY, AGENT_RESPOND, AGENT_SEND, AGENT_VOID, AskAgentSpec, SCHEME_REPL_TOOL_NAME, SCHEME_WATCH_TOOL_NAME, } from "@inhuman.tools/harness-model";
6
+ import { behaviorEntriesOf, catalogTriggersReactLoop } from "../tool-catalog/index.js";
7
+ function isAgentComms(wire) {
8
+ return (wire === AGENT_RESPOND ||
9
+ wire === AGENT_VOID ||
10
+ wire === AGENT_NOTIFY ||
11
+ wire === AGENT_MESSAGE ||
12
+ wire === AGENT_SEND ||
13
+ wire === AGENT_ASK);
14
+ }
15
+ function askWorkerToolAllowed(catalog, wire) {
16
+ if (wire === AGENT_VOID)
17
+ return false;
18
+ return (wire === SCHEME_REPL_TOOL_NAME ||
19
+ wire === SCHEME_WATCH_TOOL_NAME ||
20
+ catalog.catalogEntry(wire)?.isSideChannel === true ||
21
+ isAgentComms(wire));
22
+ }
23
+ export function workerToolAllowed(catalog, recipeName, wire, sessionRoot) {
24
+ const spec = sessionRoot?.agent.spec;
25
+ if (spec instanceof AskAgentSpec) {
26
+ if (wire === AGENT_VOID)
27
+ return spec.voidLegal === true;
28
+ if (behaviorEntriesOf(sessionRoot).some((entry) => entry.wireName === wire))
29
+ return true;
30
+ if (spec.inheritCallerTools)
31
+ return true;
32
+ if (askWorkerToolAllowed(catalog, wire))
33
+ return true;
34
+ if (spec.tools?.includes(wire) === true)
35
+ return true;
36
+ if (spec.name === "" || spec.toolsOnly)
37
+ return false;
38
+ const named = catalog.recipe(spec.name);
39
+ if (named == null)
40
+ return false;
41
+ return catalog.workerHost.recipeGrantsWire(catalog, named.spec, wire, sessionRoot?.path ?? "");
42
+ }
43
+ if (wire === AGENT_VOID && spec?.voidLegal === false)
44
+ return false;
45
+ if (recipeName === "")
46
+ return true;
47
+ if (behaviorEntriesOf(sessionRoot).some((entry) => entry.wireName === wire))
48
+ return true;
49
+ const recipe = catalog.recipe(recipeName);
50
+ if (recipe == null)
51
+ return false;
52
+ if (catalog.privateWorkerEntries.some((row) => row.wireName === wire))
53
+ return true;
54
+ const entry = catalog.catalogEntry(wire);
55
+ if (entry == null)
56
+ return catalog.workerHost.privateWireAllowed(recipeName, wire, sessionRoot);
57
+ if (wire === SCHEME_REPL_TOOL_NAME ||
58
+ wire === SCHEME_WATCH_TOOL_NAME ||
59
+ !catalogTriggersReactLoop(catalog, wire) ||
60
+ isAgentComms(wire)) {
61
+ return true;
62
+ }
63
+ return catalog.workerHost.recipeGrantsWire(catalog, recipe.spec, wire, sessionRoot?.path ?? "");
64
+ }
65
+ //# sourceMappingURL=worker-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-tools.js","sourceRoot":"","sources":["../../src/tool-runtime/worker-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare function overwriteExistingDoor(pathText: string): string;
2
+ /** True only for boolean true or the string "true". Missing / false → door on exist. */
3
+ export declare function overwriteExistingOf(args: unknown): boolean;
4
+ /** Tape line annotation. Line 1 is omitted. */
5
+ export declare function lineStartOfSpan(file: string | null | undefined, span: string): number | null;
6
+ /** NUL-free UTF-8 under the read budget. Empty file is "". */
7
+ export declare function priorTextSync(target: string): string | null;
8
+ type WriteAdmitSnap = {
9
+ /** `null` means we could not tell — not a definite miss. */
10
+ readonly existed: boolean | null;
11
+ readonly priorContent: string | null;
12
+ readonly refuse: string | null;
13
+ };
14
+ /**
15
+ * Admit runs before any license. Only a path that stays inside the workspace, links resolved, may
16
+ * be read or probed here; anything else is left to the licensed body, which captures prior content
17
+ * after approval and keeps the overwrite door.
18
+ */
19
+ export declare function writeFileAdmitSnap(root: string, argsJson: string): WriteAdmitSnap;
20
+ export {};
21
+ //# sourceMappingURL=write-admit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-admit.d.ts","sourceRoot":"","sources":["../../src/tool-runtime/write-admit.ts"],"names":[],"mappings":"AAcA,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAK1D;AAED,+CAA+C;AAC/C,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY5F;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU3D;AAED,KAAK,cAAc,GAAG;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAOF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAkBjF"}