@inhuman.tools/turn 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,73 @@
1
+ /**
2
+ * Completion tools[] face: frozen turn.tools when present, else live catalog.
3
+ * Vendor OpenAI wrapping stays in the actor. Live-catalog scheme_repl
4
+ * description overlay is also the actor — frozen ToolSpec text is left as-is.
5
+ */
6
+ import { AGENT_RESPOND, ApprovableJob, owningTurn, SessionRoot, } from "@inhuman.tools/harness-model";
7
+ import invariant from "tiny-invariant";
8
+ import { catalogOf } from "../tool-catalog/index.js";
9
+ export function liveCatalogOf(expectation, catalog) {
10
+ return catalog ?? catalogOf(expectation.plexus?.root);
11
+ }
12
+ /** Frozen turn set wins so MCP churn cannot rewrite the prefix. */
13
+ export function selectCompletionTools(expectation, catalog) {
14
+ const root = expectation.plexus?.root;
15
+ invariant(root instanceof SessionRoot, "selectCompletionTools: expectation must be wired on a SessionRoot");
16
+ if (expectation.completionMode === "isolated")
17
+ return [];
18
+ if (expectation.parent instanceof ApprovableJob)
19
+ return [];
20
+ const turn = owningTurn(expectation);
21
+ const live = liveCatalogOf(expectation, catalog);
22
+ const base = turn != null && turn.tools.entries.length > 0
23
+ ? turn.tools.entries.map((entry) => {
24
+ const parameters = entry.parameters ?? {};
25
+ return {
26
+ name: entry.name,
27
+ description: entry.description,
28
+ parameters,
29
+ };
30
+ })
31
+ : live === undefined
32
+ ? []
33
+ : live
34
+ .catalogEntries()
35
+ .filter((entry) => entry.representation === "tool" || entry.representation === "both")
36
+ .map((entry) => ({
37
+ name: entry.wireName,
38
+ description: entry.description,
39
+ parameters: entry.parameters,
40
+ }));
41
+ const rest = base.filter((tool) => tool.name !== AGENT_RESPOND);
42
+ return receivesCalls(root) ? [...rest, AGENT_RESPOND_TOOL] : rest;
43
+ }
44
+ /**
45
+ * `agent__respond` is in tools[] for every round of a session that has taken a call, with
46
+ * one fixed schema and text. The open request ids are not in it: tools[] is the head of the
47
+ * cached prefix, and a tool that appears with the first open call, lists its ids and vanishes
48
+ * with the last would rewrite the whole prefix each time. The ids reach the model in the
49
+ * round's system note instead (`callbackRequiredNote`), after the cached part.
50
+ */
51
+ const AGENT_RESPOND_TOOL = {
52
+ name: AGENT_RESPOND,
53
+ description: "Complete an open worker call. requestId must be one of the open ids listed in the system note. Not assistant text.",
54
+ parameters: {
55
+ type: "object",
56
+ properties: {
57
+ requestId: { type: "string", description: "Open call to settle" },
58
+ response: { type: "string", description: "Reply that settles the call" },
59
+ },
60
+ required: ["requestId", "response"],
61
+ additionalProperties: false,
62
+ },
63
+ };
64
+ /** The session was ever asked: a call is open now, or an inbound call turn is on the tail. */
65
+ function receivesCalls(root) {
66
+ if (root.openCallbackCount > 0)
67
+ return true;
68
+ for (const turn of root.liveTurns)
69
+ if (turn.inbound || turn.agentRequestId !== "")
70
+ return true;
71
+ return false;
72
+ }
73
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/context/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ import { CompactJob, CompletionExpectation, type CompletionMessage, ProgrammaticJob, SessionTurn, ToolCallJob, type TurnChunk, TurnApprovalNoteChunk, TurnNotificationChunk, TurnSteerChunk } from "@inhuman.tools/harness-model";
2
+ export type MessageRole = "user" | "assistant";
3
+ export declare class MessageChunk {
4
+ readonly role: MessageRole;
5
+ readonly text: string;
6
+ readonly ack: boolean;
7
+ readonly checkIn: boolean;
8
+ constructor(role: MessageRole, text: string, flags?: {
9
+ readonly ack?: boolean;
10
+ readonly checkIn?: boolean;
11
+ });
12
+ asCheckIn(): MessageChunk;
13
+ }
14
+ export type EatCell = CompletionMessage | MessageChunk;
15
+ export type TranscriptEvent = {
16
+ readonly kind: "compact";
17
+ readonly chunk: CompactJob;
18
+ } | {
19
+ readonly kind: "completion";
20
+ readonly chunk: CompletionExpectation;
21
+ } | {
22
+ readonly kind: "tool";
23
+ readonly chunk: ToolCallJob;
24
+ } | {
25
+ readonly kind: "scheme";
26
+ readonly chunk: ProgrammaticJob;
27
+ } | {
28
+ readonly kind: "notify";
29
+ readonly chunk: TurnNotificationChunk;
30
+ } | {
31
+ readonly kind: "steer";
32
+ readonly chunk: TurnSteerChunk;
33
+ } | {
34
+ readonly kind: "approval-note";
35
+ readonly chunk: TurnApprovalNoteChunk;
36
+ } | {
37
+ readonly kind: "cell";
38
+ readonly chunk: MessageChunk | string;
39
+ };
40
+ export declare function turnSpine(turn: SessionTurn): TurnChunk[];
41
+ export type CompactRead = {
42
+ /** `compactKeepTurns` dial. A stamped CompactJob keeps its own reading. */
43
+ readonly configFloor?: number;
44
+ readonly kv?: Readonly<Record<string, string>>;
45
+ };
46
+ /** Compact-dropped `read_file` jobs are not in this projection (compact policy). */
47
+ export declare function historyBehind(turn: SessionTurn, read?: CompactRead): CompletionMessage[];
48
+ /** Eat a successful compact saw: history strictly before the job, tail included. */
49
+ export declare function eatBeforeCompact(turn: SessionTurn, job: CompactJob, read?: CompactRead): CompletionMessage[];
50
+ export declare function walkTranscript(chunks: readonly unknown[]): Generator<TranscriptEvent>;
51
+ export type TranscriptRound = {
52
+ readonly start: number;
53
+ readonly end: number;
54
+ readonly prompt: string;
55
+ readonly response: CompletionExpectation;
56
+ readonly toolCalls: ReadonlyArray<ToolCallJob | ProgrammaticJob>;
57
+ };
58
+ export declare class Transcript {
59
+ readonly cells: readonly EatCell[];
60
+ readonly cap: number;
61
+ static empty(cap?: number): Transcript;
62
+ static fromCells(cells: readonly EatCell[], cap?: number, cards?: Iterable<EatCell>): Transcript;
63
+ static fromWork(work: readonly unknown[], cap?: number): Transcript;
64
+ /** Occupancy window start — see preamble. */
65
+ readonly baseGauge: number;
66
+ private readonly checkIns;
67
+ constructor(cells: readonly EatCell[], cap: number, checkIns?: Iterable<EatCell>, baseGauge?: number);
68
+ isCheckIn(cell: EatCell): boolean;
69
+ checkInCells(): EatCell[];
70
+ /** The transcript without its prior-card cells: what happened since, not what was already folded. */
71
+ withoutCheckIns(): Transcript;
72
+ sliceCells(from: number, to?: number): Transcript;
73
+ /** `sliceRounds(0, …)` includes prior cards — see preamble. */
74
+ sliceRounds(from: number, to: number): Transcript;
75
+ rounds(): TranscriptRound[];
76
+ /** Occupancy — see preamble. */
77
+ tokensUsed(): number;
78
+ /**
79
+ * The frontier is the OLDEST round of this transcript. During the classify
80
+ * walk `preserve-transcript` runs frontier → newest (chronological), so the
81
+ * round being decided is the first one.
82
+ */
83
+ frontierRound(): Transcript;
84
+ /** `transcript/newer`: preserve without the frontier — drop the oldest round. */
85
+ withoutFrontier(): Transcript;
86
+ /** `transcript/older`: compact without the frontier — drop the newest round. */
87
+ withoutNewest(): Transcript;
88
+ completeRounds(): Transcript;
89
+ partialRound(): Transcript | null;
90
+ concat(other: Transcript): Transcript;
91
+ }
92
+ /**
93
+ * Content-token stand-in: `ceil(chars / 4)`. Replace this one function when
94
+ * per-cell prompt/response tokens exist on the model.
95
+ */
96
+ export declare function estimateTokens(text: string): number;
97
+ /** Content meter — see preamble. */
98
+ export declare function contentTokensOf(cells: readonly unknown[]): number;
99
+ export declare function charsOf(cells: readonly unknown[]): number;
100
+ export declare function inferCap(cells: readonly unknown[], fallback?: number): number;
101
+ export declare function payloadSuffix(transcript: Transcript, n: number): EatCell[];
102
+ /** Floors are non-zero by default; a single-round eat legitimately keeps all. */
103
+ export declare function sliceCompactEat(eat: Transcript, floors: {
104
+ readonly userTurns: number;
105
+ readonly rounds: number;
106
+ }): {
107
+ readonly prefix: Transcript;
108
+ readonly keep: Transcript;
109
+ };
110
+ /**
111
+ * Keep is {@link sliceCompactEat}'s suffix. Squeeze is up to `floors.rounds`
112
+ * rounds immediately before that keep, taken from the prefix. If the squeeze
113
+ * would empty the prefix and at least two rounds exist, shrink the squeeze
114
+ * (to zero when the prefix is a single round) so one round stays in it.
115
+ */
116
+ export declare function sliceCompactZones(eat: Transcript, floors: {
117
+ readonly userTurns: number;
118
+ readonly rounds: number;
119
+ }): {
120
+ readonly prefix: Transcript;
121
+ readonly squeeze: Transcript;
122
+ readonly keep: Transcript;
123
+ };
124
+ export type CompactProjectionRow = {
125
+ readonly kind: "user";
126
+ readonly text: string;
127
+ } | {
128
+ readonly kind: "assistant";
129
+ readonly text: string;
130
+ } | {
131
+ readonly kind: "keep";
132
+ readonly cell: CompletionMessage;
133
+ };
134
+ /** Squeeze band as role rows, then keep cells verbatim. The card is separate. */
135
+ export declare function projectCompactRows(eat: Transcript, floors: {
136
+ readonly userTurns: number;
137
+ readonly rounds: number;
138
+ }): {
139
+ readonly zones: ReturnType<typeof sliceCompactZones>;
140
+ readonly rows: CompactProjectionRow[];
141
+ };
142
+ /**
143
+ * The card is the `CompactJob` itself, a typed cell (F10): `Transcript` then
144
+ * knows it is a prior card, and `transcript/compaction-results` is no longer
145
+ * always empty. Its text is `standIn`.
146
+ */
147
+ export declare function projectionMessages(card: CompactJob, rows: readonly CompactProjectionRow[]): CompletionMessage[];
148
+ /** Card, squeeze lines, and verbatim keep cells for the wire and the next eat. */
149
+ export declare function compactLeadRows(turn: SessionTurn, job: CompactJob, read?: CompactRead): CompactProjectionRow[];
150
+ export declare function textOfCell(cell: unknown): string;
151
+ //# sourceMappingURL=transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/context/transcript.ts"],"names":[],"mappings":"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"}