@inhuman.tools/turn 0.1.0 → 0.3.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 (284) hide show
  1. package/README.md +38 -0
  2. package/dist/agent-calls/acceptance.d.ts +1 -1
  3. package/dist/agent-calls/acceptance.d.ts.map +1 -1
  4. package/dist/agent-calls/acceptance.js +1 -1
  5. package/dist/agent-calls/acceptance.js.map +1 -1
  6. package/dist/agent-calls/callbacks.d.ts +1 -1
  7. package/dist/agent-calls/callbacks.d.ts.map +1 -1
  8. package/dist/agent-calls/callbacks.js +1 -1
  9. package/dist/agent-calls/callbacks.js.map +1 -1
  10. package/dist/agent-calls/delivery.d.ts +1 -1
  11. package/dist/agent-calls/delivery.d.ts.map +1 -1
  12. package/dist/agent-calls/delivery.js +1 -1
  13. package/dist/agent-calls/delivery.js.map +1 -1
  14. package/dist/agent-calls/operator.d.ts +1 -1
  15. package/dist/agent-calls/operator.d.ts.map +1 -1
  16. package/dist/agent-calls/operator.js +1 -1
  17. package/dist/agent-calls/operator.js.map +1 -1
  18. package/dist/agent-calls/runtime.d.ts +4 -2
  19. package/dist/agent-calls/runtime.d.ts.map +1 -1
  20. package/dist/agent-calls/runtime.js +17 -11
  21. package/dist/agent-calls/runtime.js.map +1 -1
  22. package/dist/agent-calls/types.d.ts +1 -1
  23. package/dist/agent-calls/types.d.ts.map +1 -1
  24. package/dist/context/compact-floors.d.ts +1 -1
  25. package/dist/context/compact-floors.d.ts.map +1 -1
  26. package/dist/context/compact.d.ts +1 -1
  27. package/dist/context/compact.d.ts.map +1 -1
  28. package/dist/context/compact.js +5 -4
  29. package/dist/context/compact.js.map +1 -1
  30. package/dist/context/history.d.ts +1 -1
  31. package/dist/context/history.d.ts.map +1 -1
  32. package/dist/context/history.js +35 -3
  33. package/dist/context/history.js.map +1 -1
  34. package/dist/context/retention/defaults.js +1 -1
  35. package/dist/context/retention/defaults.js.map +1 -1
  36. package/dist/context/retention/resolve.js +1 -1
  37. package/dist/context/retention/resolve.js.map +1 -1
  38. package/dist/context/retention/schema.js +1 -1
  39. package/dist/context/retention/schema.js.map +1 -1
  40. package/dist/context/retention/stamp.d.ts +1 -1
  41. package/dist/context/retention/stamp.d.ts.map +1 -1
  42. package/dist/context/retention/stamp.js +5 -2
  43. package/dist/context/retention/stamp.js.map +1 -1
  44. package/dist/context/retention/step.d.ts +1 -1
  45. package/dist/context/retention/step.d.ts.map +1 -1
  46. package/dist/context/retention/step.js +7 -4
  47. package/dist/context/retention/step.js.map +1 -1
  48. package/dist/context/retention/view.d.ts +1 -1
  49. package/dist/context/retention/view.d.ts.map +1 -1
  50. package/dist/context/retention/view.js +1 -1
  51. package/dist/context/retention/view.js.map +1 -1
  52. package/dist/context/spawn-history.d.ts +13 -0
  53. package/dist/context/spawn-history.d.ts.map +1 -0
  54. package/dist/context/spawn-history.js +82 -0
  55. package/dist/context/spawn-history.js.map +1 -0
  56. package/dist/context/squeeze.d.ts +1 -1
  57. package/dist/context/squeeze.d.ts.map +1 -1
  58. package/dist/context/squeeze.js +1 -1
  59. package/dist/context/squeeze.js.map +1 -1
  60. package/dist/context/tools.d.ts +2 -2
  61. package/dist/context/tools.d.ts.map +1 -1
  62. package/dist/context/tools.js +2 -2
  63. package/dist/context/tools.js.map +1 -1
  64. package/dist/context/transcript.d.ts +3 -1
  65. package/dist/context/transcript.d.ts.map +1 -1
  66. package/dist/context/transcript.js +17 -4
  67. package/dist/context/transcript.js.map +1 -1
  68. package/dist/policy-processor/classifier.d.ts.map +1 -1
  69. package/dist/policy-processor/classifier.js +3 -1
  70. package/dist/policy-processor/classifier.js.map +1 -1
  71. package/dist/policy-processor/scope.d.ts +1 -0
  72. package/dist/policy-processor/scope.d.ts.map +1 -1
  73. package/dist/policy-processor/scope.js +9 -2
  74. package/dist/policy-processor/scope.js.map +1 -1
  75. package/dist/policy-processor/unattended-guard.js +8 -2
  76. package/dist/policy-processor/unattended-guard.js.map +1 -1
  77. package/dist/resources/compact-assets.d.ts +5 -0
  78. package/dist/resources/compact-assets.d.ts.map +1 -0
  79. package/dist/resources/compact-assets.js +6 -0
  80. package/dist/resources/compact-assets.js.map +1 -0
  81. package/dist/resources/compact-snapshot.d.ts +21 -0
  82. package/dist/resources/compact-snapshot.d.ts.map +1 -0
  83. package/dist/resources/compact-snapshot.js +44 -0
  84. package/dist/resources/compact-snapshot.js.map +1 -0
  85. package/dist/resources/index.d.ts +6 -0
  86. package/dist/resources/index.d.ts.map +1 -0
  87. package/dist/resources/index.js +19 -0
  88. package/dist/resources/index.js.map +1 -0
  89. package/dist/resources/module-bundle.d.ts +16 -0
  90. package/dist/resources/module-bundle.d.ts.map +1 -0
  91. package/dist/resources/module-bundle.js +78 -0
  92. package/dist/resources/module-bundle.js.map +1 -0
  93. package/dist/runtime/ambient-compact.d.ts +38 -0
  94. package/dist/runtime/ambient-compact.d.ts.map +1 -0
  95. package/dist/runtime/ambient-compact.js +123 -0
  96. package/dist/runtime/ambient-compact.js.map +1 -0
  97. package/dist/runtime/index.d.ts +9 -0
  98. package/dist/runtime/index.d.ts.map +1 -0
  99. package/dist/runtime/index.js +8 -0
  100. package/dist/runtime/index.js.map +1 -0
  101. package/dist/runtime/ports.d.ts +33 -0
  102. package/dist/runtime/ports.d.ts.map +1 -0
  103. package/dist/runtime/ports.js +2 -0
  104. package/dist/runtime/ports.js.map +1 -0
  105. package/dist/runtime/prompt-message-of.d.ts +4 -0
  106. package/dist/runtime/prompt-message-of.d.ts.map +1 -0
  107. package/dist/runtime/prompt-message-of.js +8 -0
  108. package/dist/runtime/prompt-message-of.js.map +1 -0
  109. package/dist/runtime/re-act-loop-intent-detected-trigger.d.ts +32 -0
  110. package/dist/runtime/re-act-loop-intent-detected-trigger.d.ts.map +1 -0
  111. package/dist/runtime/re-act-loop-intent-detected-trigger.js +132 -0
  112. package/dist/runtime/re-act-loop-intent-detected-trigger.js.map +1 -0
  113. package/dist/runtime/round-boundary.d.ts +13 -0
  114. package/dist/runtime/round-boundary.d.ts.map +1 -0
  115. package/dist/runtime/round-boundary.js +210 -0
  116. package/dist/runtime/round-boundary.js.map +1 -0
  117. package/dist/runtime/round-stop.d.ts +9 -0
  118. package/dist/runtime/round-stop.d.ts.map +1 -0
  119. package/dist/runtime/round-stop.js +19 -0
  120. package/dist/runtime/round-stop.js.map +1 -0
  121. package/dist/runtime/tool-call.d.ts +4 -0
  122. package/dist/runtime/tool-call.d.ts.map +1 -0
  123. package/dist/runtime/tool-call.js +8 -0
  124. package/dist/runtime/tool-call.js.map +1 -0
  125. package/dist/runtime/turn-iterator.d.ts +32 -0
  126. package/dist/runtime/turn-iterator.d.ts.map +1 -0
  127. package/dist/runtime/turn-iterator.js +251 -0
  128. package/dist/runtime/turn-iterator.js.map +1 -0
  129. package/dist/runtime/turn-resolvers.d.ts +17 -0
  130. package/dist/runtime/turn-resolvers.d.ts.map +1 -0
  131. package/dist/runtime/turn-resolvers.js +29 -0
  132. package/dist/runtime/turn-resolvers.js.map +1 -0
  133. package/dist/session/cancel.d.ts +4 -1
  134. package/dist/session/cancel.d.ts.map +1 -1
  135. package/dist/session/cancel.js +10 -2
  136. package/dist/session/cancel.js.map +1 -1
  137. package/dist/session/commands.d.ts +1 -1
  138. package/dist/session/commands.d.ts.map +1 -1
  139. package/dist/session/commands.js +4 -2
  140. package/dist/session/commands.js.map +1 -1
  141. package/dist/session/compact-actor.d.ts +12 -5
  142. package/dist/session/compact-actor.d.ts.map +1 -1
  143. package/dist/session/compact-actor.js +64 -12
  144. package/dist/session/compact-actor.js.map +1 -1
  145. package/dist/session/compact-env.d.ts +31 -5
  146. package/dist/session/compact-env.d.ts.map +1 -1
  147. package/dist/session/compact-env.js +23 -13
  148. package/dist/session/compact-env.js.map +1 -1
  149. package/dist/session/compact.d.ts +6 -3
  150. package/dist/session/compact.d.ts.map +1 -1
  151. package/dist/session/compact.js.map +1 -1
  152. package/dist/session/index.d.ts +2 -2
  153. package/dist/session/index.d.ts.map +1 -1
  154. package/dist/session/index.js +2 -2
  155. package/dist/session/index.js.map +1 -1
  156. package/dist/session/park.d.ts +1 -1
  157. package/dist/session/park.d.ts.map +1 -1
  158. package/dist/session/park.js +1 -1
  159. package/dist/session/park.js.map +1 -1
  160. package/dist/session/side-channel-reminder.d.ts +1 -1
  161. package/dist/session/side-channel-reminder.d.ts.map +1 -1
  162. package/dist/session/side-channel-reminder.js +1 -1
  163. package/dist/session/side-channel-reminder.js.map +1 -1
  164. package/dist/session/types.d.ts +1 -1
  165. package/dist/session/types.d.ts.map +1 -1
  166. package/dist/session-runtime/ask-line.d.ts +7 -0
  167. package/dist/session-runtime/ask-line.d.ts.map +1 -0
  168. package/dist/session-runtime/ask-line.js +36 -0
  169. package/dist/session-runtime/ask-line.js.map +1 -0
  170. package/dist/session-runtime/durability.d.ts +25 -0
  171. package/dist/session-runtime/durability.d.ts.map +1 -0
  172. package/dist/session-runtime/durability.js +18 -0
  173. package/dist/session-runtime/durability.js.map +1 -0
  174. package/dist/session-runtime/effects.d.ts +53 -0
  175. package/dist/session-runtime/effects.d.ts.map +1 -0
  176. package/dist/session-runtime/effects.js +18 -0
  177. package/dist/session-runtime/effects.js.map +1 -0
  178. package/dist/session-runtime/index.d.ts +8 -0
  179. package/dist/session-runtime/index.d.ts.map +1 -0
  180. package/dist/session-runtime/index.js +8 -0
  181. package/dist/session-runtime/index.js.map +1 -0
  182. package/dist/session-runtime/interrupt.d.ts +3 -0
  183. package/dist/session-runtime/interrupt.d.ts.map +1 -0
  184. package/dist/session-runtime/interrupt.js +33 -0
  185. package/dist/session-runtime/interrupt.js.map +1 -0
  186. package/dist/session-runtime/recovery.d.ts +17 -0
  187. package/dist/session-runtime/recovery.d.ts.map +1 -0
  188. package/dist/session-runtime/recovery.js +119 -0
  189. package/dist/session-runtime/recovery.js.map +1 -0
  190. package/dist/session-runtime/runtime.d.ts +50 -0
  191. package/dist/session-runtime/runtime.d.ts.map +1 -0
  192. package/dist/session-runtime/runtime.js +533 -0
  193. package/dist/session-runtime/runtime.js.map +1 -0
  194. package/dist/session-runtime/summary.d.ts +26 -0
  195. package/dist/session-runtime/summary.d.ts.map +1 -0
  196. package/dist/session-runtime/summary.js +33 -0
  197. package/dist/session-runtime/summary.js.map +1 -0
  198. package/dist/tool-catalog/bindings.d.ts +6 -0
  199. package/dist/tool-catalog/bindings.d.ts.map +1 -0
  200. package/dist/tool-catalog/bindings.js +37 -0
  201. package/dist/tool-catalog/bindings.js.map +1 -0
  202. package/dist/tool-catalog/catalog.d.ts +1 -3
  203. package/dist/tool-catalog/catalog.d.ts.map +1 -1
  204. package/dist/tool-catalog/catalog.js +6 -34
  205. package/dist/tool-catalog/catalog.js.map +1 -1
  206. package/dist/tool-catalog/types.d.ts +8 -0
  207. package/dist/tool-catalog/types.d.ts.map +1 -1
  208. package/dist/tool-catalog/types.js.map +1 -1
  209. package/dist/tool-runtime/approval/approved.d.ts +1 -1
  210. package/dist/tool-runtime/approval/approved.d.ts.map +1 -1
  211. package/dist/tool-runtime/approval/approved.js +1 -1
  212. package/dist/tool-runtime/approval/approved.js.map +1 -1
  213. package/dist/tool-runtime/handler.d.ts.map +1 -1
  214. package/dist/tool-runtime/handler.js +291 -237
  215. package/dist/tool-runtime/handler.js.map +1 -1
  216. package/dist/tool-runtime/run-system-tool.d.ts +1 -0
  217. package/dist/tool-runtime/run-system-tool.d.ts.map +1 -1
  218. package/dist/tool-runtime/run-system-tool.js +30 -10
  219. package/dist/tool-runtime/run-system-tool.js.map +1 -1
  220. package/dist/tool-runtime/worker-tools.d.ts.map +1 -1
  221. package/dist/tool-runtime/worker-tools.js +2 -2
  222. package/dist/tool-runtime/worker-tools.js.map +1 -1
  223. package/package.json +31 -18
  224. package/src/agent-calls/acceptance.ts +1 -1
  225. package/src/agent-calls/callbacks.ts +1 -1
  226. package/src/agent-calls/delivery.ts +1 -1
  227. package/src/agent-calls/operator.ts +7 -1
  228. package/src/agent-calls/runtime.ts +23 -11
  229. package/src/agent-calls/types.ts +1 -1
  230. package/src/context/compact-floors.ts +1 -1
  231. package/src/context/compact.ts +4 -5
  232. package/src/context/history.ts +46 -4
  233. package/src/context/retention/defaults.ts +1 -1
  234. package/src/context/retention/resolve.ts +1 -1
  235. package/src/context/retention/schema.ts +1 -1
  236. package/src/context/retention/stamp.ts +7 -2
  237. package/src/context/retention/step.ts +7 -4
  238. package/src/context/retention/view.ts +1 -1
  239. package/src/context/spawn-history.ts +95 -0
  240. package/src/context/squeeze.ts +1 -1
  241. package/src/context/tools.ts +3 -2
  242. package/src/context/transcript.ts +15 -4
  243. package/src/policy-processor/README.md +1 -1
  244. package/src/policy-processor/classifier.ts +3 -1
  245. package/src/policy-processor/scope.ts +7 -2
  246. package/src/policy-processor/unattended-guard.ts +5 -2
  247. package/src/resources/compact-assets.ts +9 -0
  248. package/src/resources/compact-snapshot.ts +51 -0
  249. package/src/resources/index.ts +27 -0
  250. package/src/resources/module-bundle.ts +90 -0
  251. package/src/runtime/ambient-compact.ts +147 -0
  252. package/src/runtime/index.ts +17 -0
  253. package/src/runtime/ports.ts +28 -0
  254. package/src/runtime/prompt-message-of.ts +14 -0
  255. package/src/runtime/re-act-loop-intent-detected-trigger.ts +177 -0
  256. package/src/runtime/round-boundary.ts +248 -0
  257. package/src/runtime/round-stop.ts +24 -0
  258. package/src/runtime/tool-call.ts +10 -0
  259. package/src/runtime/turn-iterator.ts +312 -0
  260. package/src/runtime/turn-resolvers.ts +43 -0
  261. package/src/session/cancel.ts +11 -3
  262. package/src/session/commands.ts +5 -2
  263. package/src/session/compact-actor.ts +76 -16
  264. package/src/session/compact-env.ts +27 -18
  265. package/src/session/compact.ts +8 -3
  266. package/src/session/index.ts +7 -2
  267. package/src/session/park.ts +7 -1
  268. package/src/session/side-channel-reminder.ts +1 -1
  269. package/src/session/types.ts +1 -1
  270. package/src/session-runtime/ask-line.ts +39 -0
  271. package/src/session-runtime/durability.ts +41 -0
  272. package/src/session-runtime/effects.ts +35 -0
  273. package/src/session-runtime/index.ts +19 -0
  274. package/src/session-runtime/interrupt.ts +34 -0
  275. package/src/session-runtime/recovery.ts +145 -0
  276. package/src/session-runtime/runtime.ts +535 -0
  277. package/src/session-runtime/summary.ts +67 -0
  278. package/src/tool-catalog/bindings.ts +37 -0
  279. package/src/tool-catalog/catalog.ts +6 -31
  280. package/src/tool-catalog/types.ts +9 -0
  281. package/src/tool-runtime/approval/approved.ts +1 -1
  282. package/src/tool-runtime/handler.ts +40 -24
  283. package/src/tool-runtime/run-system-tool.ts +27 -11
  284. package/src/tool-runtime/worker-tools.ts +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-line.d.ts","sourceRoot":"","sources":["../../src/session-runtime/ask-line.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAEL,KAAK,aAAa,EASnB,MAAM,sCAAsC,CAAC;AAE9C,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,CAqBhE"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Glance-sized sitting-ask question. Family + optional description.
3
+ * Not pretty-mcp interpolation — command/path stay off KernelRoot.
4
+ */
5
+ import { AgentMessageJob, BotCallJob, CallJob, clampChars, flattenOverviewLine, GLANCE_ASK_DESCRIPTION_MAX_CHARS, GLANCE_ASK_LINE_MAX_CHARS, MCPToolJob, ToolCallJob, } from "@inhuman.tools/harness-model/session";
6
+ export function glanceAskLine(head) {
7
+ if (head == null)
8
+ return "";
9
+ if (!(head instanceof ToolCallJob))
10
+ return "";
11
+ const args = head.args;
12
+ const description = args != null && typeof args.description === "string"
13
+ ? flattenOverviewLine(args.description, GLANCE_ASK_DESCRIPTION_MAX_CHARS)
14
+ : "";
15
+ if (description !== "")
16
+ return clampChars(`approve ${description}?`, GLANCE_ASK_LINE_MAX_CHARS);
17
+ if (head instanceof BotCallJob)
18
+ return "confirm bot?";
19
+ if (head instanceof CallJob || head instanceof AgentMessageJob)
20
+ return "confirm agent?";
21
+ if (head instanceof MCPToolJob) {
22
+ const tool = head.serverToolName.trim() || head.name.trim();
23
+ return tool === "" ? "" : clampChars(`confirm ${tool}?`, GLANCE_ASK_LINE_MAX_CHARS);
24
+ }
25
+ const name = head.name.trim();
26
+ if (name === "shell")
27
+ return "confirm shell command?";
28
+ if (name === "edit_file")
29
+ return "confirm edit?";
30
+ if (name === "write_file")
31
+ return "confirm write?";
32
+ if (name === "")
33
+ return "";
34
+ return clampChars(`confirm ${name}?`, GLANCE_ASK_LINE_MAX_CHARS);
35
+ }
36
+ //# sourceMappingURL=ask-line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-line.js","sourceRoot":"","sources":["../../src/session-runtime/ask-line.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,eAAe,EAEf,UAAU,EACV,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,gCAAgC,EAChC,yBAAyB,EACzB,UAAU,EACV,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAE9C,MAAM,UAAU,aAAa,CAAC,IAA0B;IACtD,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,IAAI,YAAY,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,WAAW,GACf,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;QAClD,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,gCAAgC,CAAC;QACzE,CAAC,CAAC,EAAE,CAAC;IACT,IAAI,WAAW,KAAK,EAAE;QAAE,OAAO,UAAU,CAAC,WAAW,WAAW,GAAG,EAAE,yBAAyB,CAAC,CAAC;IAChG,IAAI,IAAI,YAAY,UAAU;QAAE,OAAO,cAAc,CAAC;IACtD,IAAI,IAAI,YAAY,OAAO,IAAI,IAAI,YAAY,eAAe;QAAE,OAAO,gBAAgB,CAAC;IACxF,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5D,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,IAAI,GAAG,EAAE,yBAAyB,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,wBAAwB,CAAC;IACtD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,eAAe,CAAC;IACjD,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,gBAAgB,CAAC;IACnD,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC3B,OAAO,UAAU,CAAC,WAAW,IAAI,GAAG,EAAE,yBAAyB,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,25 @@
1
+ export type SessionCheckpoint = {
2
+ readonly sessionId: string;
3
+ readonly incarnation: string;
4
+ readonly revision: number;
5
+ readonly state: Uint8Array;
6
+ };
7
+ export type SessionReceipt = {
8
+ readonly sessionId: string;
9
+ readonly incarnation: string;
10
+ readonly revision: number;
11
+ };
12
+ export type SessionDurability = {
13
+ readonly kind: "memory";
14
+ } | {
15
+ readonly kind: "durable";
16
+ commit(checkpoint: SessionCheckpoint): Promise<SessionReceipt>;
17
+ };
18
+ export declare function receiptCovers(receipt: SessionReceipt, checkpoint: SessionCheckpoint): boolean;
19
+ export declare class SessionPersistenceError extends Error {
20
+ constructor(message?: string);
21
+ }
22
+ export declare class SessionOwnershipError extends Error {
23
+ constructor(message?: string);
24
+ }
25
+ //# sourceMappingURL=durability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"durability.d.ts","sourceRoot":"","sources":["../../src/session-runtime/durability.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,MAAM,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAChE,CAAC;AAEN,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAM7F;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,SAAoD;CAIxE;AAED,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,SAAmD;CAIvE"}
@@ -0,0 +1,18 @@
1
+ export function receiptCovers(receipt, checkpoint) {
2
+ return (receipt.sessionId === checkpoint.sessionId &&
3
+ receipt.incarnation === checkpoint.incarnation &&
4
+ receipt.revision >= checkpoint.revision);
5
+ }
6
+ export class SessionPersistenceError extends Error {
7
+ constructor(message = "session checkpoint was not durably acknowledged") {
8
+ super(message);
9
+ this.name = "SessionPersistenceError";
10
+ }
11
+ }
12
+ export class SessionOwnershipError extends Error {
13
+ constructor(message = "session execution no longer owns this document") {
14
+ super(message);
15
+ this.name = "SessionOwnershipError";
16
+ }
17
+ }
18
+ //# sourceMappingURL=durability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"durability.js","sourceRoot":"","sources":["../../src/session-runtime/durability.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,aAAa,CAAC,OAAuB,EAAE,UAA6B;IAClF,OAAO,CACL,OAAO,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS;QAC1C,OAAO,CAAC,WAAW,KAAK,UAAU,CAAC,WAAW;QAC9C,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CACxC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,OAAO,GAAG,iDAAiD;QACrE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAO,GAAG,gDAAgD;QACpE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,53 @@
1
+ import { z } from "zod";
2
+ export type SessionEffectRequest = {
3
+ readonly sessionId: string;
4
+ readonly operationId: string;
5
+ readonly incarnation: string;
6
+ readonly method: string;
7
+ readonly payload: string;
8
+ };
9
+ export declare const sessionEffectOutcomeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
10
+ kind: z.ZodLiteral<"success">;
11
+ payload: z.ZodString;
12
+ }, z.core.$strip>, z.ZodObject<{
13
+ kind: z.ZodLiteral<"refused">;
14
+ message: z.ZodString;
15
+ }, z.core.$strip>, z.ZodObject<{
16
+ kind: z.ZodLiteral<"unknown">;
17
+ message: z.ZodString;
18
+ }, z.core.$strip>], "kind">;
19
+ export type SessionEffectOutcome = z.infer<typeof sessionEffectOutcomeSchema>;
20
+ export type SessionEffectPort = {
21
+ invoke(request: SessionEffectRequest, signal: AbortSignal): Promise<SessionEffectOutcome>;
22
+ reconcile?(request: SessionEffectRequest, signal: AbortSignal): Promise<SessionEffectOutcome>;
23
+ };
24
+ export declare const effectRecordSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
25
+ phase: z.ZodLiteral<"intent">;
26
+ request: z.ZodObject<{
27
+ sessionId: z.ZodString;
28
+ operationId: z.ZodString;
29
+ incarnation: z.ZodString;
30
+ method: z.ZodString;
31
+ payload: z.ZodString;
32
+ }, z.core.$strip>;
33
+ }, z.core.$strip>, z.ZodObject<{
34
+ phase: z.ZodLiteral<"result">;
35
+ request: z.ZodObject<{
36
+ sessionId: z.ZodString;
37
+ operationId: z.ZodString;
38
+ incarnation: z.ZodString;
39
+ method: z.ZodString;
40
+ payload: z.ZodString;
41
+ }, z.core.$strip>;
42
+ outcome: z.ZodDiscriminatedUnion<[z.ZodObject<{
43
+ kind: z.ZodLiteral<"success">;
44
+ payload: z.ZodString;
45
+ }, z.core.$strip>, z.ZodObject<{
46
+ kind: z.ZodLiteral<"refused">;
47
+ message: z.ZodString;
48
+ }, z.core.$strip>, z.ZodObject<{
49
+ kind: z.ZodLiteral<"unknown">;
50
+ message: z.ZodString;
51
+ }, z.core.$strip>], "kind">;
52
+ }, z.core.$strip>], "phase">;
53
+ //# sourceMappingURL=effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../src/session-runtime/effects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;2BAIrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC1F,SAAS,CAAC,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC/F,CAAC;AAUF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAG7B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ export const sessionEffectOutcomeSchema = z.discriminatedUnion("kind", [
3
+ z.object({ kind: z.literal("success"), payload: z.string() }),
4
+ z.object({ kind: z.literal("refused"), message: z.string() }),
5
+ z.object({ kind: z.literal("unknown"), message: z.string() }),
6
+ ]);
7
+ const requestSchema = z.object({
8
+ sessionId: z.string(),
9
+ operationId: z.string(),
10
+ incarnation: z.string(),
11
+ method: z.string(),
12
+ payload: z.string(),
13
+ });
14
+ export const effectRecordSchema = z.discriminatedUnion("phase", [
15
+ z.object({ phase: z.literal("intent"), request: requestSchema }),
16
+ z.object({ phase: z.literal("result"), request: requestSchema, outcome: sessionEffectOutcomeSchema }),
17
+ ]);
18
+ //# sourceMappingURL=effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.js","sourceRoot":"","sources":["../../src/session-runtime/effects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACrE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC7D,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC7D,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CAC9D,CAAC,CAAC;AASH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;IAC9D,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAChE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;CACtG,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { SessionRuntime, type SessionRecoveryPolicy } from "./runtime.js";
2
+ export { receiptCovers, SessionOwnershipError, SessionPersistenceError, type SessionCheckpoint, type SessionDurability, type SessionReceipt, } from "./durability.js";
3
+ export { sessionEffectOutcomeSchema, type SessionEffectOutcome, type SessionEffectPort, type SessionEffectRequest, } from "./effects.js";
4
+ export { recoverSessionJobs, type JobRecoveryOptions, type RecoveredJob } from "./recovery.js";
5
+ export { interruptSession } from "./interrupt.js";
6
+ export { sessionSummary, observeSessionSummary, type SessionSummary } from "./summary.js";
7
+ export { glanceAskLine } from "./ask-line.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session-runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { SessionRuntime } from "./runtime.js";
2
+ export { receiptCovers, SessionOwnershipError, SessionPersistenceError, } from "./durability.js";
3
+ export { sessionEffectOutcomeSchema, } from "./effects.js";
4
+ export { recoverSessionJobs } from "./recovery.js";
5
+ export { interruptSession } from "./interrupt.js";
6
+ export { sessionSummary, observeSessionSummary } from "./summary.js";
7
+ export { glanceAskLine } from "./ask-line.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session-runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,uBAAuB,GAIxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,GAI3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAA8C,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAuB,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type SessionRoot } from "@inhuman.tools/harness-model/session";
2
+ export declare function interruptSession(root: SessionRoot, message: string): void;
3
+ //# sourceMappingURL=interrupt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interrupt.d.ts","sourceRoot":"","sources":["../../src/session-runtime/interrupt.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,sCAAsC,CAAC;AAI9C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAsBzE"}
@@ -0,0 +1,33 @@
1
+ import { CallJob, CompactJob, CompletionJob, ProgrammaticJob, ToolCallJob, } from "@inhuman.tools/harness-model/session";
2
+ import { WorkExpectation, walkWork } from "@inhuman.tools/plexus-expectations";
3
+ import { runInAction } from "mobx";
4
+ export function interruptSession(root, message) {
5
+ runInAction(() => {
6
+ for (const turn of root.liveTurns) {
7
+ if (turn.reducerExited)
8
+ continue;
9
+ for (const node of walkWork(turn)) {
10
+ if (node instanceof CallJob)
11
+ continue;
12
+ if (node instanceof WorkExpectation && !node.isDone)
13
+ node.fail("cancel", message, "null");
14
+ if ((node instanceof ToolCallJob || node instanceof ProgrammaticJob) && !node.completed) {
15
+ node.outcomeSnap ??= { ok: false, text: message };
16
+ node.markComplete();
17
+ }
18
+ else if (node instanceof CompactJob && !node.completed) {
19
+ node.failed = true;
20
+ node.notice = message;
21
+ node.markComplete();
22
+ }
23
+ else if (node instanceof CompletionJob && !node.completed)
24
+ node.markComplete();
25
+ }
26
+ turn.cancelRequested = true;
27
+ turn.broke = message;
28
+ turn.reducerExited = true;
29
+ turn.markComplete();
30
+ }
31
+ });
32
+ }
33
+ //# sourceMappingURL=interrupt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interrupt.js","sourceRoot":"","sources":["../../src/session-runtime/interrupt.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,UAAU,EACV,aAAa,EACb,eAAe,EACf,WAAW,GAEZ,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,UAAU,gBAAgB,CAAC,IAAiB,EAAE,OAAe;IACjE,WAAW,CAAC,GAAG,EAAE;QACf,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,aAAa;gBAAE,SAAS;YACjC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,IAAI,IAAI,YAAY,OAAO;oBAAE,SAAS;gBACtC,IAAI,IAAI,YAAY,eAAe,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC1F,IAAI,CAAC,IAAI,YAAY,WAAW,IAAI,IAAI,YAAY,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACxF,IAAI,CAAC,WAAW,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oBAClD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,CAAC;qBAAM,IAAI,IAAI,YAAY,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACzD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBACnB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;oBACtB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,CAAC;qBAAM,IAAI,IAAI,YAAY,aAAa,IAAI,CAAC,IAAI,CAAC,SAAS;oBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;YACnF,CAAC;YACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ /** Session job recovery is shared by local and embedded hosts. */
2
+ import { CallJob, SessionRoot } from "@inhuman.tools/harness-model/session";
3
+ import { Job } from "@inhuman.tools/plexus-expectations";
4
+ import { type CallsCatalog } from "../agent-calls/index.js";
5
+ type JobRecoveryAction = "settled" | "dispatch" | "unknown" | "cancel" | "resume-inner";
6
+ export type RecoveredJob = {
7
+ readonly job: Job;
8
+ readonly kind: string;
9
+ readonly action: JobRecoveryAction;
10
+ };
11
+ export type JobRecoveryOptions = {
12
+ readonly catalog?: CallsCatalog;
13
+ readonly releaseCall?: (call: CallJob) => void;
14
+ };
15
+ export declare function recoverSessionJobs(root: SessionRoot, options?: JobRecoveryOptions): RecoveredJob[];
16
+ export {};
17
+ //# sourceMappingURL=recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/session-runtime/recovery.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EACL,OAAO,EAOP,WAAW,EAKZ,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAmB,MAAM,oCAAoC,CAAC;AAG1E,OAAO,EAA4C,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAItG,KAAK,iBAAiB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAC;AAExF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD,CAAC;AA8FF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE,kBAAuB,GAAG,YAAY,EAAE,CAiBtG"}
@@ -0,0 +1,119 @@
1
+ /** Session job recovery is shared by local and embedded hosts. */
2
+ import { CallJob, ApprovableJob, CompletionJob, FailureOutcome, MCPToolJob, ProgrammaticJob, cancelUnstarted, SessionTurn, ToolCallJob, WebExtractToolJob, WebSearchToolJob, } from "@inhuman.tools/harness-model/session";
3
+ import { Job, WorkExpectation } from "@inhuman.tools/plexus-expectations";
4
+ import { runInAction } from "mobx";
5
+ import { restorePendingRound, settleCancelledTurn } from "../agent-calls/index.js";
6
+ const UNKNOWN_TEXT = "interrupted by restart; execution outcome unknown";
7
+ function hasSettlement(job) {
8
+ if (job.completed)
9
+ return true;
10
+ if (job instanceof ToolCallJob || job instanceof ProgrammaticJob) {
11
+ return job.receiptJson != null && job.receiptJson !== "";
12
+ }
13
+ if (job instanceof CompletionJob)
14
+ return job.expectation.isDone;
15
+ return false;
16
+ }
17
+ function leftoverInFlight(job) {
18
+ if (job instanceof MCPToolJob && job.dispatched)
19
+ return true;
20
+ if (job instanceof MCPToolJob || job instanceof WebSearchToolJob || job instanceof WebExtractToolJob) {
21
+ const attempt = job.expectation;
22
+ return !attempt.isDone && attempt.startedAtMs != null;
23
+ }
24
+ return false;
25
+ }
26
+ function hasRecordedIntent(job) {
27
+ return job.orchestrated || leftoverInFlight(job);
28
+ }
29
+ function failOpen(job, code, text) {
30
+ for (const node of job.work) {
31
+ if (node instanceof WorkExpectation && !node.isDone)
32
+ node.fail(code, text, "null");
33
+ }
34
+ }
35
+ function stampUnknown(job) {
36
+ if (job instanceof CallJob) {
37
+ job.settleResult(new FailureOutcome({ code: "error", message: UNKNOWN_TEXT }));
38
+ return;
39
+ }
40
+ if (job instanceof ToolCallJob || job instanceof ProgrammaticJob) {
41
+ job.outcomeSnap ??= { ok: false, text: UNKNOWN_TEXT };
42
+ }
43
+ failOpen(job, "crash", UNKNOWN_TEXT);
44
+ if (!job.completed)
45
+ job.markComplete();
46
+ }
47
+ /** A cancelled job the crash left open closes with a cancel receipt and no open attempt. */
48
+ function settleCancelled(job) {
49
+ if (job instanceof ApprovableJob)
50
+ cancelUnstarted(job);
51
+ else if (job instanceof ProgrammaticJob)
52
+ job.outcomeSnap ??= { ok: false, text: "cancelled" };
53
+ failOpen(job, "cancel", "terminated by recovery; outcome unknown");
54
+ if (!job.completed)
55
+ job.markComplete();
56
+ }
57
+ /** Classify one job from its effect fields. */
58
+ function classifyJobRecovery(job) {
59
+ // A closed turn whose cancel never landed can still hold an open completion.
60
+ if (job instanceof SessionTurn && job.cancelRequested)
61
+ return "cancel";
62
+ if (job.completed)
63
+ return "settled";
64
+ if (job.cancelled)
65
+ return "cancel";
66
+ switch (job.unknownRecovery) {
67
+ case "unknown-no-replay":
68
+ if (hasSettlement(job))
69
+ return "settled";
70
+ return hasRecordedIntent(job) ? "unknown" : "dispatch";
71
+ case "resume-inner":
72
+ return "resume-inner";
73
+ case "resume-queued":
74
+ return "dispatch";
75
+ default:
76
+ // A contract-less job is not ours to replay.
77
+ return hasRecordedIntent(job) ? "unknown" : "dispatch";
78
+ }
79
+ }
80
+ function applyJobRecovery(job, action, catalog, releaseCall, session) {
81
+ switch (action) {
82
+ case "settled":
83
+ case "dispatch":
84
+ return;
85
+ case "unknown":
86
+ stampUnknown(job);
87
+ return;
88
+ case "cancel":
89
+ if (job instanceof SessionTurn)
90
+ settleCancelledTurn(job, catalog, releaseCall, session);
91
+ else
92
+ settleCancelled(job);
93
+ return;
94
+ case "resume-inner":
95
+ if (job instanceof SessionTurn)
96
+ restorePendingRound(job);
97
+ return;
98
+ }
99
+ }
100
+ export function recoverSessionJobs(root, options = {}) {
101
+ const nodes = [];
102
+ for (const node of root.motionWork()) {
103
+ if (node instanceof Job)
104
+ nodes.push(node);
105
+ }
106
+ // A turn re-enters before its children are classified: it reads the round
107
+ // the interruption left open, and the child's recovery closes that round.
108
+ nodes.sort((a, b) => Number(b instanceof SessionTurn) - Number(a instanceof SessionTurn));
109
+ const recovered = [];
110
+ runInAction(() => {
111
+ for (const job of nodes) {
112
+ const action = classifyJobRecovery(job);
113
+ applyJobRecovery(job, action, options.catalog, options.releaseCall, root);
114
+ recovered.push({ job, kind: job.__type__, action });
115
+ }
116
+ });
117
+ return recovered;
118
+ }
119
+ //# sourceMappingURL=recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/session-runtime/recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { SessionPlexus, SessionTurn, type SessionRoot } from "@inhuman.tools/harness-model/session";
2
+ import { type SessionCheckpoint, type SessionDurability, type SessionReceipt } from "./durability.js";
3
+ import { type SessionEffectOutcome, type SessionEffectPort } from "./effects.js";
4
+ import { type JobRecoveryOptions, type RecoveredJob } from "./recovery.js";
5
+ import { type TurnIteratorHost } from "../runtime/turn-iterator.js";
6
+ import { admitTurn, type CancelTurnArgs, type CompactAdmitResult, type RewindResult, type TurnAdmitResult } from "../session/commands.js";
7
+ import type { SessionCommandHost } from "../session/types.js";
8
+ type RuntimePhase = "hydrated" | "ready" | "active" | "parked" | "disposed";
9
+ export type SessionRecoveryPolicy = {
10
+ readonly kind: "resume";
11
+ } | {
12
+ readonly kind: "interrupt";
13
+ readonly message: string;
14
+ };
15
+ export declare class SessionRuntime implements AsyncDisposable {
16
+ #private;
17
+ readonly session: SessionPlexus;
18
+ readonly incarnation: `${string}-${string}-${string}-${string}-${string}`;
19
+ accessor phase: RuntimePhase;
20
+ constructor(session: SessionPlexus, durability: SessionDurability);
21
+ static create(sessionId: string, durability: SessionDurability, workspacePath?: string): SessionRuntime;
22
+ static restore(sessionId: string, state: Uint8Array, durability: SessionDurability): SessionRuntime;
23
+ get root(): SessionRoot;
24
+ get signal(): AbortSignal;
25
+ get isCurrent(): boolean;
26
+ get ownershipSignal(): AbortSignal;
27
+ get admissionHeld(): boolean;
28
+ recover(policy?: SessionRecoveryPolicy, options?: JobRecoveryOptions): RecoveredJob[];
29
+ activate(): void;
30
+ checkpoint(): SessionCheckpoint;
31
+ flush(): Promise<SessionReceipt>;
32
+ commitMutation(operationId: string, input: string, mutate: () => void, signal?: AbortSignal): Promise<SessionReceipt>;
33
+ admit(host: SessionCommandHost, args: Parameters<typeof admitTurn>[1], commandId?: string): Promise<TurnAdmitResult>;
34
+ compact(host: SessionCommandHost, focus?: string): Promise<CompactAdmitResult>;
35
+ interrupt(operationId: string, message: string): Promise<SessionReceipt>;
36
+ cancel(host: SessionCommandHost, args: CancelTurnArgs): Promise<{
37
+ readonly ok: true;
38
+ }>;
39
+ rewind(host: SessionCommandHost, turnId: string): Promise<RewindResult>;
40
+ retry(host: SessionCommandHost): Promise<{
41
+ readonly ok: true;
42
+ }>;
43
+ drain(host: SessionCommandHost): Promise<void>;
44
+ run(turn: SessionTurn, host: TurnIteratorHost, signal?: AbortSignal): Promise<void>;
45
+ effect(operationId: string, method: string, payload: string, port: SessionEffectPort, apply: (outcome: SessionEffectOutcome) => void, signal?: AbortSignal): Promise<SessionEffectOutcome>;
46
+ park(): void;
47
+ [Symbol.asyncDispose](): Promise<void>;
48
+ }
49
+ export {};
50
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/session-runtime/runtime.ts"],"names":[],"mappings":"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"}