@smthrs/harness 0.0.0-stage → 1.0.0-rc.3

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 (476) hide show
  1. package/CHANGELOG.md +387 -0
  2. package/LICENSE +21 -0
  3. package/README.md +138 -2
  4. package/dist/cjs/AgentEvent.d.ts +3092 -0
  5. package/dist/cjs/AgentEvent.d.ts.map +1 -0
  6. package/dist/cjs/AgentEvent.js +1116 -0
  7. package/dist/cjs/AgentEvent.js.map +7 -0
  8. package/dist/cjs/CallLedger.d.ts +378 -0
  9. package/dist/cjs/CallLedger.d.ts.map +1 -0
  10. package/dist/cjs/CallLedger.js +240 -0
  11. package/dist/cjs/CallLedger.js.map +7 -0
  12. package/dist/cjs/Cell.d.ts +774 -0
  13. package/dist/cjs/Cell.d.ts.map +1 -0
  14. package/dist/cjs/Cell.js +431 -0
  15. package/dist/cjs/Cell.js.map +7 -0
  16. package/dist/cjs/CellCalls.d.ts +115 -0
  17. package/dist/cjs/CellCalls.d.ts.map +1 -0
  18. package/dist/cjs/CellCalls.js +98 -0
  19. package/dist/cjs/CellCalls.js.map +7 -0
  20. package/dist/cjs/CellHistory.d.ts +102 -0
  21. package/dist/cjs/CellHistory.d.ts.map +1 -0
  22. package/dist/cjs/CellHistory.js +54 -0
  23. package/dist/cjs/CellHistory.js.map +7 -0
  24. package/dist/cjs/CellTurn.d.ts +1071 -0
  25. package/dist/cjs/CellTurn.d.ts.map +1 -0
  26. package/dist/cjs/CellTurn.js +2618 -0
  27. package/dist/cjs/CellTurn.js.map +7 -0
  28. package/dist/cjs/CellValidation.d.ts +94 -0
  29. package/dist/cjs/CellValidation.d.ts.map +1 -0
  30. package/dist/cjs/CellValidation.js +218 -0
  31. package/dist/cjs/CellValidation.js.map +7 -0
  32. package/dist/cjs/Compaction.d.ts +158 -0
  33. package/dist/cjs/Compaction.d.ts.map +1 -0
  34. package/dist/cjs/Compaction.js +189 -0
  35. package/dist/cjs/Compaction.js.map +7 -0
  36. package/dist/cjs/CompletionClaim.d.ts +801 -0
  37. package/dist/cjs/CompletionClaim.d.ts.map +1 -0
  38. package/dist/cjs/CompletionClaim.js +303 -0
  39. package/dist/cjs/CompletionClaim.js.map +7 -0
  40. package/dist/cjs/ContextWindow.d.ts +435 -0
  41. package/dist/cjs/ContextWindow.d.ts.map +1 -0
  42. package/dist/cjs/ContextWindow.js +319 -0
  43. package/dist/cjs/ContextWindow.js.map +7 -0
  44. package/dist/cjs/EngineLike.d.ts +546 -0
  45. package/dist/cjs/EngineLike.d.ts.map +1 -0
  46. package/dist/cjs/EngineLike.js +114 -0
  47. package/dist/cjs/EngineLike.js.map +7 -0
  48. package/dist/cjs/ExternalTranscript.d.ts +349 -0
  49. package/dist/cjs/ExternalTranscript.d.ts.map +1 -0
  50. package/dist/cjs/ExternalTranscript.js +826 -0
  51. package/dist/cjs/ExternalTranscript.js.map +7 -0
  52. package/dist/cjs/FailedCall.d.ts +132 -0
  53. package/dist/cjs/FailedCall.d.ts.map +1 -0
  54. package/dist/cjs/FailedCall.js +53 -0
  55. package/dist/cjs/FailedCall.js.map +7 -0
  56. package/dist/cjs/FlowBinding.d.ts +289 -0
  57. package/dist/cjs/FlowBinding.d.ts.map +1 -0
  58. package/dist/cjs/FlowBinding.js +251 -0
  59. package/dist/cjs/FlowBinding.js.map +7 -0
  60. package/dist/cjs/HarnessError.d.ts +57 -0
  61. package/dist/cjs/HarnessError.d.ts.map +1 -0
  62. package/dist/cjs/HarnessError.js +75 -0
  63. package/dist/cjs/HarnessError.js.map +7 -0
  64. package/dist/cjs/Judgement.d.ts +289 -0
  65. package/dist/cjs/Judgement.d.ts.map +1 -0
  66. package/dist/cjs/Judgement.js +240 -0
  67. package/dist/cjs/Judgement.js.map +7 -0
  68. package/dist/cjs/Monitor.d.ts +374 -0
  69. package/dist/cjs/Monitor.d.ts.map +1 -0
  70. package/dist/cjs/Monitor.js +233 -0
  71. package/dist/cjs/Monitor.js.map +7 -0
  72. package/dist/cjs/NarrowedCheck.d.ts +523 -0
  73. package/dist/cjs/NarrowedCheck.d.ts.map +1 -0
  74. package/dist/cjs/NarrowedCheck.js +263 -0
  75. package/dist/cjs/NarrowedCheck.js.map +7 -0
  76. package/dist/cjs/Notifications.d.ts +42 -0
  77. package/dist/cjs/Notifications.d.ts.map +1 -0
  78. package/dist/cjs/Notifications.js +177 -0
  79. package/dist/cjs/Notifications.js.map +7 -0
  80. package/dist/cjs/Plan.d.ts +127 -0
  81. package/dist/cjs/Plan.d.ts.map +1 -0
  82. package/dist/cjs/Plan.js +77 -0
  83. package/dist/cjs/Plan.js.map +7 -0
  84. package/dist/cjs/QuickJSSandbox.d.ts +151 -0
  85. package/dist/cjs/QuickJSSandbox.d.ts.map +1 -0
  86. package/dist/cjs/QuickJSSandbox.js +987 -0
  87. package/dist/cjs/QuickJSSandbox.js.map +7 -0
  88. package/dist/cjs/Relevance.d.ts +213 -0
  89. package/dist/cjs/Relevance.d.ts.map +1 -0
  90. package/dist/cjs/Relevance.js +183 -0
  91. package/dist/cjs/Relevance.js.map +7 -0
  92. package/dist/cjs/Sandbox.d.ts +637 -0
  93. package/dist/cjs/Sandbox.d.ts.map +1 -0
  94. package/dist/cjs/Sandbox.js +260 -0
  95. package/dist/cjs/Sandbox.js.map +7 -0
  96. package/dist/cjs/Steering.d.ts +464 -0
  97. package/dist/cjs/Steering.d.ts.map +1 -0
  98. package/dist/cjs/Steering.js +153 -0
  99. package/dist/cjs/Steering.js.map +7 -0
  100. package/dist/cjs/StructuredOutput.d.ts +252 -0
  101. package/dist/cjs/StructuredOutput.d.ts.map +1 -0
  102. package/dist/cjs/StructuredOutput.js +266 -0
  103. package/dist/cjs/StructuredOutput.js.map +7 -0
  104. package/dist/cjs/Sufficiency.d.ts +195 -0
  105. package/dist/cjs/Sufficiency.d.ts.map +1 -0
  106. package/dist/cjs/Sufficiency.js +110 -0
  107. package/dist/cjs/Sufficiency.js.map +7 -0
  108. package/dist/cjs/Supervisor.d.ts +719 -0
  109. package/dist/cjs/Supervisor.d.ts.map +1 -0
  110. package/dist/cjs/Supervisor.js +313 -0
  111. package/dist/cjs/Supervisor.js.map +7 -0
  112. package/dist/cjs/Tokens.d.ts +86 -0
  113. package/dist/cjs/Tokens.d.ts.map +1 -0
  114. package/dist/cjs/Tokens.js +72 -0
  115. package/dist/cjs/Tokens.js.map +7 -0
  116. package/dist/cjs/Transcript.d.ts +171 -0
  117. package/dist/cjs/Transcript.d.ts.map +1 -0
  118. package/dist/cjs/Transcript.js +342 -0
  119. package/dist/cjs/Transcript.js.map +7 -0
  120. package/dist/cjs/TruncatedOutput.d.ts +186 -0
  121. package/dist/cjs/TruncatedOutput.d.ts.map +1 -0
  122. package/dist/cjs/TruncatedOutput.js +143 -0
  123. package/dist/cjs/TruncatedOutput.js.map +7 -0
  124. package/dist/cjs/UnmovedTree.d.ts +113 -0
  125. package/dist/cjs/UnmovedTree.d.ts.map +1 -0
  126. package/dist/cjs/UnmovedTree.js +38 -0
  127. package/dist/cjs/UnmovedTree.js.map +7 -0
  128. package/dist/cjs/UnresolvedFailure.d.ts +196 -0
  129. package/dist/cjs/UnresolvedFailure.d.ts.map +1 -0
  130. package/dist/cjs/UnresolvedFailure.js +77 -0
  131. package/dist/cjs/UnresolvedFailure.js.map +7 -0
  132. package/dist/cjs/VacuousVerification.d.ts +237 -0
  133. package/dist/cjs/VacuousVerification.d.ts.map +1 -0
  134. package/dist/cjs/VacuousVerification.js +91 -0
  135. package/dist/cjs/VacuousVerification.js.map +7 -0
  136. package/dist/cjs/VariablesPanel.d.ts +117 -0
  137. package/dist/cjs/VariablesPanel.d.ts.map +1 -0
  138. package/dist/cjs/VariablesPanel.js +108 -0
  139. package/dist/cjs/VariablesPanel.js.map +7 -0
  140. package/dist/cjs/index.d.ts +172 -0
  141. package/dist/cjs/index.d.ts.map +1 -0
  142. package/dist/cjs/index.js +99 -0
  143. package/dist/cjs/index.js.map +7 -0
  144. package/dist/cjs/internal/bytes.d.ts +36 -0
  145. package/dist/cjs/internal/bytes.d.ts.map +1 -0
  146. package/dist/cjs/internal/bytes.js +57 -0
  147. package/dist/cjs/internal/bytes.js.map +7 -0
  148. package/dist/cjs/internal/cellPrompt.d.ts +122 -0
  149. package/dist/cjs/internal/cellPrompt.d.ts.map +1 -0
  150. package/dist/cjs/internal/cellPrompt.js +146 -0
  151. package/dist/cjs/internal/cellPrompt.js.map +7 -0
  152. package/dist/cjs/internal/compactable.d.ts +44 -0
  153. package/dist/cjs/internal/compactable.d.ts.map +1 -0
  154. package/dist/cjs/internal/compactable.js +56 -0
  155. package/dist/cjs/internal/compactable.js.map +7 -0
  156. package/dist/cjs/internal/compactionMarks.d.ts +278 -0
  157. package/dist/cjs/internal/compactionMarks.d.ts.map +1 -0
  158. package/dist/cjs/internal/compactionMarks.js +212 -0
  159. package/dist/cjs/internal/compactionMarks.js.map +7 -0
  160. package/dist/cjs/internal/demandText.d.ts +95 -0
  161. package/dist/cjs/internal/demandText.d.ts.map +1 -0
  162. package/dist/cjs/internal/demandText.js +70 -0
  163. package/dist/cjs/internal/demandText.js.map +7 -0
  164. package/dist/cjs/internal/elide.d.ts +109 -0
  165. package/dist/cjs/internal/elide.d.ts.map +1 -0
  166. package/dist/cjs/internal/elide.js +59 -0
  167. package/dist/cjs/internal/elide.js.map +7 -0
  168. package/dist/cjs/internal/frame.d.ts +463 -0
  169. package/dist/cjs/internal/frame.d.ts.map +1 -0
  170. package/dist/cjs/internal/frame.js +514 -0
  171. package/dist/cjs/internal/frame.js.map +7 -0
  172. package/dist/cjs/internal/nonNegativeSafeInt.d.ts +20 -0
  173. package/dist/cjs/internal/nonNegativeSafeInt.d.ts.map +1 -0
  174. package/dist/cjs/internal/nonNegativeSafeInt.js +29 -0
  175. package/dist/cjs/internal/nonNegativeSafeInt.js.map +7 -0
  176. package/dist/cjs/internal/paidUsage.d.ts +52 -0
  177. package/dist/cjs/internal/paidUsage.d.ts.map +1 -0
  178. package/dist/cjs/internal/paidUsage.js +70 -0
  179. package/dist/cjs/internal/paidUsage.js.map +7 -0
  180. package/dist/cjs/internal/printChannel.d.ts +233 -0
  181. package/dist/cjs/internal/printChannel.d.ts.map +1 -0
  182. package/dist/cjs/internal/printChannel.js +165 -0
  183. package/dist/cjs/internal/printChannel.js.map +7 -0
  184. package/dist/cjs/internal/printsObservation.d.ts +26 -0
  185. package/dist/cjs/internal/printsObservation.d.ts.map +1 -0
  186. package/dist/cjs/internal/printsObservation.js +27 -0
  187. package/dist/cjs/internal/printsObservation.js.map +7 -0
  188. package/dist/cjs/internal/refusal.d.ts +40 -0
  189. package/dist/cjs/internal/refusal.d.ts.map +1 -0
  190. package/dist/cjs/internal/refusal.js +45 -0
  191. package/dist/cjs/internal/refusal.js.map +7 -0
  192. package/dist/cjs/internal/supervision.d.ts +174 -0
  193. package/dist/cjs/internal/supervision.d.ts.map +1 -0
  194. package/dist/cjs/internal/supervision.js +402 -0
  195. package/dist/cjs/internal/supervision.js.map +7 -0
  196. package/dist/cjs/internal/unfinishedWork.d.ts +99 -0
  197. package/dist/cjs/internal/unfinishedWork.d.ts.map +1 -0
  198. package/dist/cjs/internal/unfinishedWork.js +80 -0
  199. package/dist/cjs/internal/unfinishedWork.js.map +7 -0
  200. package/dist/cjs/internal/unobservedCall.d.ts +112 -0
  201. package/dist/cjs/internal/unobservedCall.d.ts.map +1 -0
  202. package/dist/cjs/internal/unobservedCall.js +345 -0
  203. package/dist/cjs/internal/unobservedCall.js.map +7 -0
  204. package/dist/cjs/internal/untrustedData.d.ts +14 -0
  205. package/dist/cjs/internal/untrustedData.d.ts.map +1 -0
  206. package/dist/cjs/internal/untrustedData.js +30 -0
  207. package/dist/cjs/internal/untrustedData.js.map +7 -0
  208. package/dist/cjs/package.json +1 -0
  209. package/dist/esm/AgentEvent.d.ts +3092 -0
  210. package/dist/esm/AgentEvent.d.ts.map +1 -0
  211. package/dist/esm/AgentEvent.js +1610 -0
  212. package/dist/esm/AgentEvent.js.map +1 -0
  213. package/dist/esm/CallLedger.d.ts +378 -0
  214. package/dist/esm/CallLedger.d.ts.map +1 -0
  215. package/dist/esm/CallLedger.js +506 -0
  216. package/dist/esm/CallLedger.js.map +1 -0
  217. package/dist/esm/Cell.d.ts +774 -0
  218. package/dist/esm/Cell.d.ts.map +1 -0
  219. package/dist/esm/Cell.js +772 -0
  220. package/dist/esm/Cell.js.map +1 -0
  221. package/dist/esm/CellCalls.d.ts +115 -0
  222. package/dist/esm/CellCalls.d.ts.map +1 -0
  223. package/dist/esm/CellCalls.js +97 -0
  224. package/dist/esm/CellCalls.js.map +1 -0
  225. package/dist/esm/CellHistory.d.ts +102 -0
  226. package/dist/esm/CellHistory.d.ts.map +1 -0
  227. package/dist/esm/CellHistory.js +91 -0
  228. package/dist/esm/CellHistory.js.map +1 -0
  229. package/dist/esm/CellTurn.d.ts +1071 -0
  230. package/dist/esm/CellTurn.d.ts.map +1 -0
  231. package/dist/esm/CellTurn.js +3410 -0
  232. package/dist/esm/CellTurn.js.map +1 -0
  233. package/dist/esm/CellValidation.d.ts +94 -0
  234. package/dist/esm/CellValidation.d.ts.map +1 -0
  235. package/dist/esm/CellValidation.js +335 -0
  236. package/dist/esm/CellValidation.js.map +1 -0
  237. package/dist/esm/Compaction.d.ts +158 -0
  238. package/dist/esm/Compaction.d.ts.map +1 -0
  239. package/dist/esm/Compaction.js +216 -0
  240. package/dist/esm/Compaction.js.map +1 -0
  241. package/dist/esm/CompletionClaim.d.ts +801 -0
  242. package/dist/esm/CompletionClaim.d.ts.map +1 -0
  243. package/dist/esm/CompletionClaim.js +833 -0
  244. package/dist/esm/CompletionClaim.js.map +1 -0
  245. package/dist/esm/ContextWindow.d.ts +435 -0
  246. package/dist/esm/ContextWindow.d.ts.map +1 -0
  247. package/dist/esm/ContextWindow.js +427 -0
  248. package/dist/esm/ContextWindow.js.map +1 -0
  249. package/dist/esm/EngineLike.d.ts +546 -0
  250. package/dist/esm/EngineLike.d.ts.map +1 -0
  251. package/dist/esm/EngineLike.js +218 -0
  252. package/dist/esm/EngineLike.js.map +1 -0
  253. package/dist/esm/ExternalTranscript.d.ts +349 -0
  254. package/dist/esm/ExternalTranscript.d.ts.map +1 -0
  255. package/dist/esm/ExternalTranscript.js +987 -0
  256. package/dist/esm/ExternalTranscript.js.map +1 -0
  257. package/dist/esm/FailedCall.d.ts +132 -0
  258. package/dist/esm/FailedCall.d.ts.map +1 -0
  259. package/dist/esm/FailedCall.js +131 -0
  260. package/dist/esm/FailedCall.js.map +1 -0
  261. package/dist/esm/FlowBinding.d.ts +289 -0
  262. package/dist/esm/FlowBinding.d.ts.map +1 -0
  263. package/dist/esm/FlowBinding.js +376 -0
  264. package/dist/esm/FlowBinding.js.map +1 -0
  265. package/dist/esm/HarnessError.d.ts +57 -0
  266. package/dist/esm/HarnessError.d.ts.map +1 -0
  267. package/dist/esm/HarnessError.js +85 -0
  268. package/dist/esm/HarnessError.js.map +1 -0
  269. package/dist/esm/Judgement.d.ts +289 -0
  270. package/dist/esm/Judgement.d.ts.map +1 -0
  271. package/dist/esm/Judgement.js +305 -0
  272. package/dist/esm/Judgement.js.map +1 -0
  273. package/dist/esm/Monitor.d.ts +374 -0
  274. package/dist/esm/Monitor.d.ts.map +1 -0
  275. package/dist/esm/Monitor.js +370 -0
  276. package/dist/esm/Monitor.js.map +1 -0
  277. package/dist/esm/NarrowedCheck.d.ts +523 -0
  278. package/dist/esm/NarrowedCheck.d.ts.map +1 -0
  279. package/dist/esm/NarrowedCheck.js +612 -0
  280. package/dist/esm/NarrowedCheck.js.map +1 -0
  281. package/dist/esm/Notifications.d.ts +42 -0
  282. package/dist/esm/Notifications.d.ts.map +1 -0
  283. package/dist/esm/Notifications.js +215 -0
  284. package/dist/esm/Notifications.js.map +1 -0
  285. package/dist/esm/Plan.d.ts +127 -0
  286. package/dist/esm/Plan.d.ts.map +1 -0
  287. package/dist/esm/Plan.js +97 -0
  288. package/dist/esm/Plan.js.map +1 -0
  289. package/dist/esm/QuickJSSandbox.d.ts +151 -0
  290. package/dist/esm/QuickJSSandbox.d.ts.map +1 -0
  291. package/dist/esm/QuickJSSandbox.js +1364 -0
  292. package/dist/esm/QuickJSSandbox.js.map +1 -0
  293. package/dist/esm/Relevance.d.ts +213 -0
  294. package/dist/esm/Relevance.d.ts.map +1 -0
  295. package/dist/esm/Relevance.js +254 -0
  296. package/dist/esm/Relevance.js.map +1 -0
  297. package/dist/esm/Sandbox.d.ts +637 -0
  298. package/dist/esm/Sandbox.d.ts.map +1 -0
  299. package/dist/esm/Sandbox.js +464 -0
  300. package/dist/esm/Sandbox.js.map +1 -0
  301. package/dist/esm/Steering.d.ts +464 -0
  302. package/dist/esm/Steering.d.ts.map +1 -0
  303. package/dist/esm/Steering.js +193 -0
  304. package/dist/esm/Steering.js.map +1 -0
  305. package/dist/esm/StructuredOutput.d.ts +252 -0
  306. package/dist/esm/StructuredOutput.d.ts.map +1 -0
  307. package/dist/esm/StructuredOutput.js +430 -0
  308. package/dist/esm/StructuredOutput.js.map +1 -0
  309. package/dist/esm/Sufficiency.d.ts +195 -0
  310. package/dist/esm/Sufficiency.d.ts.map +1 -0
  311. package/dist/esm/Sufficiency.js +207 -0
  312. package/dist/esm/Sufficiency.js.map +1 -0
  313. package/dist/esm/Supervisor.d.ts +719 -0
  314. package/dist/esm/Supervisor.d.ts.map +1 -0
  315. package/dist/esm/Supervisor.js +575 -0
  316. package/dist/esm/Supervisor.js.map +1 -0
  317. package/dist/esm/Tokens.d.ts +86 -0
  318. package/dist/esm/Tokens.d.ts.map +1 -0
  319. package/dist/esm/Tokens.js +92 -0
  320. package/dist/esm/Tokens.js.map +1 -0
  321. package/dist/esm/Transcript.d.ts +171 -0
  322. package/dist/esm/Transcript.d.ts.map +1 -0
  323. package/dist/esm/Transcript.js +424 -0
  324. package/dist/esm/Transcript.js.map +1 -0
  325. package/dist/esm/TruncatedOutput.d.ts +186 -0
  326. package/dist/esm/TruncatedOutput.d.ts.map +1 -0
  327. package/dist/esm/TruncatedOutput.js +257 -0
  328. package/dist/esm/TruncatedOutput.js.map +1 -0
  329. package/dist/esm/UnmovedTree.d.ts +113 -0
  330. package/dist/esm/UnmovedTree.d.ts.map +1 -0
  331. package/dist/esm/UnmovedTree.js +90 -0
  332. package/dist/esm/UnmovedTree.js.map +1 -0
  333. package/dist/esm/UnresolvedFailure.d.ts +196 -0
  334. package/dist/esm/UnresolvedFailure.d.ts.map +1 -0
  335. package/dist/esm/UnresolvedFailure.js +218 -0
  336. package/dist/esm/UnresolvedFailure.js.map +1 -0
  337. package/dist/esm/VacuousVerification.d.ts +237 -0
  338. package/dist/esm/VacuousVerification.d.ts.map +1 -0
  339. package/dist/esm/VacuousVerification.js +245 -0
  340. package/dist/esm/VacuousVerification.js.map +1 -0
  341. package/dist/esm/VariablesPanel.d.ts +117 -0
  342. package/dist/esm/VariablesPanel.d.ts.map +1 -0
  343. package/dist/esm/VariablesPanel.js +142 -0
  344. package/dist/esm/VariablesPanel.js.map +1 -0
  345. package/dist/esm/index.d.ts +172 -0
  346. package/dist/esm/index.d.ts.map +1 -0
  347. package/dist/esm/index.js +172 -0
  348. package/dist/esm/index.js.map +1 -0
  349. package/dist/esm/internal/bytes.d.ts +36 -0
  350. package/dist/esm/internal/bytes.d.ts.map +1 -0
  351. package/dist/esm/internal/bytes.js +70 -0
  352. package/dist/esm/internal/bytes.js.map +1 -0
  353. package/dist/esm/internal/cellPrompt.d.ts +122 -0
  354. package/dist/esm/internal/cellPrompt.d.ts.map +1 -0
  355. package/dist/esm/internal/cellPrompt.js +276 -0
  356. package/dist/esm/internal/cellPrompt.js.map +1 -0
  357. package/dist/esm/internal/compactable.d.ts +44 -0
  358. package/dist/esm/internal/compactable.d.ts.map +1 -0
  359. package/dist/esm/internal/compactable.js +71 -0
  360. package/dist/esm/internal/compactable.js.map +1 -0
  361. package/dist/esm/internal/compactionMarks.d.ts +278 -0
  362. package/dist/esm/internal/compactionMarks.d.ts.map +1 -0
  363. package/dist/esm/internal/compactionMarks.js +317 -0
  364. package/dist/esm/internal/compactionMarks.js.map +1 -0
  365. package/dist/esm/internal/demandText.d.ts +95 -0
  366. package/dist/esm/internal/demandText.d.ts.map +1 -0
  367. package/dist/esm/internal/demandText.js +128 -0
  368. package/dist/esm/internal/demandText.js.map +1 -0
  369. package/dist/esm/internal/elide.d.ts +109 -0
  370. package/dist/esm/internal/elide.d.ts.map +1 -0
  371. package/dist/esm/internal/elide.js +123 -0
  372. package/dist/esm/internal/elide.js.map +1 -0
  373. package/dist/esm/internal/frame.d.ts +463 -0
  374. package/dist/esm/internal/frame.d.ts.map +1 -0
  375. package/dist/esm/internal/frame.js +861 -0
  376. package/dist/esm/internal/frame.js.map +1 -0
  377. package/dist/esm/internal/nonNegativeSafeInt.d.ts +20 -0
  378. package/dist/esm/internal/nonNegativeSafeInt.d.ts.map +1 -0
  379. package/dist/esm/internal/nonNegativeSafeInt.js +20 -0
  380. package/dist/esm/internal/nonNegativeSafeInt.js.map +1 -0
  381. package/dist/esm/internal/paidUsage.d.ts +52 -0
  382. package/dist/esm/internal/paidUsage.d.ts.map +1 -0
  383. package/dist/esm/internal/paidUsage.js +72 -0
  384. package/dist/esm/internal/paidUsage.js.map +1 -0
  385. package/dist/esm/internal/printChannel.d.ts +233 -0
  386. package/dist/esm/internal/printChannel.d.ts.map +1 -0
  387. package/dist/esm/internal/printChannel.js +376 -0
  388. package/dist/esm/internal/printChannel.js.map +1 -0
  389. package/dist/esm/internal/printsObservation.d.ts +26 -0
  390. package/dist/esm/internal/printsObservation.d.ts.map +1 -0
  391. package/dist/esm/internal/printsObservation.js +29 -0
  392. package/dist/esm/internal/printsObservation.js.map +1 -0
  393. package/dist/esm/internal/refusal.d.ts +40 -0
  394. package/dist/esm/internal/refusal.d.ts.map +1 -0
  395. package/dist/esm/internal/refusal.js +47 -0
  396. package/dist/esm/internal/refusal.js.map +1 -0
  397. package/dist/esm/internal/supervision.d.ts +174 -0
  398. package/dist/esm/internal/supervision.d.ts.map +1 -0
  399. package/dist/esm/internal/supervision.js +485 -0
  400. package/dist/esm/internal/supervision.js.map +1 -0
  401. package/dist/esm/internal/unfinishedWork.d.ts +99 -0
  402. package/dist/esm/internal/unfinishedWork.d.ts.map +1 -0
  403. package/dist/esm/internal/unfinishedWork.js +85 -0
  404. package/dist/esm/internal/unfinishedWork.js.map +1 -0
  405. package/dist/esm/internal/unobservedCall.d.ts +112 -0
  406. package/dist/esm/internal/unobservedCall.d.ts.map +1 -0
  407. package/dist/esm/internal/unobservedCall.js +501 -0
  408. package/dist/esm/internal/unobservedCall.js.map +1 -0
  409. package/dist/esm/internal/untrustedData.d.ts +14 -0
  410. package/dist/esm/internal/untrustedData.d.ts.map +1 -0
  411. package/dist/esm/internal/untrustedData.js +15 -0
  412. package/dist/esm/internal/untrustedData.js.map +1 -0
  413. package/docs/README.md +129 -0
  414. package/docs/api.md +1869 -0
  415. package/docs/concepts.md +238 -0
  416. package/docs/external-transcripts.md +245 -0
  417. package/docs/guides/bind-flows.md +167 -0
  418. package/docs/guides/drive-the-loop.md +265 -0
  419. package/docs/guides/run-cells.md +262 -0
  420. package/docs/guides/workerd.md +144 -0
  421. package/docs/installation.md +69 -0
  422. package/docs/quickstart.md +121 -0
  423. package/docs/reference.md +954 -0
  424. package/docs/troubleshooting.md +177 -0
  425. package/package.json +463 -3
  426. package/src/AgentEvent.ts +1772 -0
  427. package/src/CallLedger.ts +560 -0
  428. package/src/Cell.ts +926 -0
  429. package/src/CellCalls.ts +198 -0
  430. package/src/CellHistory.ts +128 -0
  431. package/src/CellTurn.ts +4450 -0
  432. package/src/CellValidation.ts +382 -0
  433. package/src/Compaction.ts +330 -0
  434. package/src/CompletionClaim.ts +1013 -0
  435. package/src/ContextWindow.ts +669 -0
  436. package/src/EngineLike.ts +614 -0
  437. package/src/ExternalTranscript.ts +1143 -0
  438. package/src/FailedCall.ts +163 -0
  439. package/src/FlowBinding.ts +603 -0
  440. package/src/HarnessError.ts +98 -0
  441. package/src/Judgement.ts +526 -0
  442. package/src/Monitor.ts +579 -0
  443. package/src/NarrowedCheck.ts +694 -0
  444. package/src/Notifications.ts +262 -0
  445. package/src/Plan.ts +113 -0
  446. package/src/QuickJSSandbox.ts +1557 -0
  447. package/src/Relevance.ts +352 -0
  448. package/src/Sandbox.ts +908 -0
  449. package/src/Steering.ts +405 -0
  450. package/src/StructuredOutput.ts +484 -0
  451. package/src/Sufficiency.ts +247 -0
  452. package/src/Supervisor.ts +798 -0
  453. package/src/Tokens.ts +108 -0
  454. package/src/Transcript.ts +513 -0
  455. package/src/TruncatedOutput.ts +297 -0
  456. package/src/UnmovedTree.ts +121 -0
  457. package/src/UnresolvedFailure.ts +240 -0
  458. package/src/VacuousVerification.ts +280 -0
  459. package/src/VariablesPanel.ts +165 -0
  460. package/src/index.ts +204 -0
  461. package/src/internal/bytes.ts +70 -0
  462. package/src/internal/cellPrompt.ts +337 -0
  463. package/src/internal/compactable.ts +76 -0
  464. package/src/internal/compactionMarks.ts +454 -0
  465. package/src/internal/demandText.ts +145 -0
  466. package/src/internal/elide.ts +130 -0
  467. package/src/internal/frame.ts +1178 -0
  468. package/src/internal/nonNegativeSafeInt.ts +24 -0
  469. package/src/internal/paidUsage.ts +90 -0
  470. package/src/internal/printChannel.ts +434 -0
  471. package/src/internal/printsObservation.ts +31 -0
  472. package/src/internal/refusal.ts +53 -0
  473. package/src/internal/supervision.ts +652 -0
  474. package/src/internal/unfinishedWork.ts +123 -0
  475. package/src/internal/unobservedCall.ts +536 -0
  476. package/src/internal/untrustedData.ts +19 -0
@@ -0,0 +1,174 @@
1
+ /**
2
+ * The supervisor's seat beside the cell loop: a one-slot sliding queue the
3
+ * loop offers to, a forked fiber that reads the newest snapshot, scores the
4
+ * run's monitors, judges the rows it recalls and marks the transcript
5
+ * segments not yet marked, and a mailbox the next turn boundary takes a
6
+ * monitor's message, memory and marks from.
7
+ *
8
+ * The loop never awaits any of it. `offer` is a sliding enqueue and returns
9
+ * at once; `take` is a `Ref` swap. Everything Jev is asked, and everything
10
+ * that comes back, happens on the forked fiber. A run that ends with a
11
+ * reading in flight gives it `Supervisor.closeGraceMs` to settle and journal
12
+ * as the scope closes, and no longer: a reading still unanswered then is
13
+ * interrupted and journaled `supervisor-unjudged` with reason `interrupted`,
14
+ * so a Jev call that was made is never missing from the record. A snapshot
15
+ * the fiber never took is dropped and journals nothing: nobody asked.
16
+ *
17
+ * The reading is taken through `EngineLike.record`, keyed on the session,
18
+ * the frame and the cell digest, so a resumed run is handed the reading its
19
+ * original attempt recorded and never asks Jev again. The reading records
20
+ * each monitor's raw value and nothing about delivery: `Monitor.gate` runs at
21
+ * the boundary that takes it, inside that boundary's own recorded drain and
22
+ * against the ledger the run holds there, so streaks, cooldowns and limits
23
+ * count every delivery before it, a replayed boundary delivers exactly what it
24
+ * delivered the first time, and a mailbox left over from a replayed frame is
25
+ * discarded as stale rather than delivered twice. The rows a run has been shown are the boundary's to know:
26
+ * a row shown between the offer and the drain is dropped there, so no row is
27
+ * delivered twice however the readings interleave. Marks name segments by
28
+ * digest and are never stale: a boundary stores them whichever frame's
29
+ * reading they came from, and the model is not sent them.
30
+ *
31
+ * @since 1.0.0-rc.0
32
+ * @private
33
+ */
34
+ import { ModelRequest } from "@smthrs/model";
35
+ import type * as Evaluator from "@smthrs/model/Evaluator";
36
+ import type * as Descriptor from "@smthrs/registry/Descriptor";
37
+ import { Effect, type Scope } from "effect";
38
+ import * as AgentEvent from "../AgentEvent.ts";
39
+ import type { State } from "../CellTurn.ts";
40
+ import type * as EngineLike from "../EngineLike.ts";
41
+ import * as Monitor from "../Monitor.ts";
42
+ import * as Supervisor from "../Supervisor.ts";
43
+ import * as compactionMarks from "./compactionMarks.ts";
44
+ import type * as Frame from "./frame.ts";
45
+ /**
46
+ * What one frame hands the supervisor: the snapshot without its frames,
47
+ * which the handle keeps, and the cell digest the record is keyed on.
48
+ *
49
+ * @since 1.0.0-rc.0
50
+ * @private
51
+ */
52
+ export interface Offer {
53
+ readonly frame: number;
54
+ readonly digest: string;
55
+ /** The frame just closed; the handle keeps the ones before it. */
56
+ readonly current: Supervisor.Frame;
57
+ readonly snapshot: Omit<Supervisor.Snapshot, "frames">;
58
+ /** Keys of the memory rows the run had been shown when the frame closed; never asked about. */
59
+ readonly shown: ReadonlyArray<string>;
60
+ /** The head of the frame's prose, which the relevance reading is told as `recent`. */
61
+ readonly recent: string;
62
+ /** Whether more than `Supervisor.skillLimit` skills could have been offered. */
63
+ readonly skillsCapped: boolean;
64
+ /**
65
+ * The transcript segments the run has no answer about yet, each once by
66
+ * digest; empty unless the host holds a real judge.
67
+ */
68
+ readonly unmarked: ReadonlyArray<{
69
+ readonly digest: string;
70
+ readonly item: compactionMarks.Item;
71
+ }>;
72
+ /** The labels of the checks still failing when the frame closed, which the marks reading is told. */
73
+ readonly failing: ReadonlyArray<string>;
74
+ }
75
+ /**
76
+ * What one boundary takes from the mailbox.
77
+ *
78
+ * @since 1.0.0-rc.0
79
+ * @private
80
+ */
81
+ export interface Taken {
82
+ /** The delivered monitor's message, then each memory row delivered. */
83
+ readonly messages: ReadonlyArray<ModelRequest.Message>;
84
+ /** Keys of the memory rows delivered, in order. */
85
+ readonly memory: ReadonlyArray<string>;
86
+ /** The monitor whose message leads `messages`, when one was delivered. */
87
+ readonly monitor?: string;
88
+ /** Crossed monitors withheld, and why. */
89
+ readonly suppressed: Monitor.Gated["suppressed"];
90
+ /** The ledger after gating a reading; absent when no reading was gated. */
91
+ readonly ledger?: Monitor.Ledger;
92
+ /** Jev's answers about the segments the reading marked. */
93
+ readonly marks: ReadonlyArray<compactionMarks.Marking>;
94
+ /** The context triggers the reading fired, which compact the run at its next frame. */
95
+ readonly compact: ReadonlyArray<Supervisor.ContextTrigger>;
96
+ }
97
+ /**
98
+ * The loop's two calls into the supervisor.
99
+ *
100
+ * @since 1.0.0-rc.0
101
+ * @private
102
+ */
103
+ export interface Handle {
104
+ /** Slides this frame's snapshot into the one-slot queue and returns at once. */
105
+ readonly offer: (offer: Offer) => Effect.Effect<void>;
106
+ /**
107
+ * What the boundary closing `frame` delivers from the newest reading when
108
+ * that reading is of this frame or the one before, nothing otherwise: the
109
+ * one message `Monitor.gate` lets through against `ledger`, the run's
110
+ * ledger as the boundary holds it, then the memory rows. A row whose key is
111
+ * in `shown`, the run's shown set as the boundary holds it, is dropped, and
112
+ * nothing is gated or delivered unless `deliver`. A reading Jev could not
113
+ * take gates nothing. Takes the mailbox either way, so a stale reading is
114
+ * dropped and never delivered later; its marks are taken all the same.
115
+ * A delivered reading's context triggers are taken beside its message.
116
+ */
117
+ readonly take: (frame: number, options: {
118
+ readonly ledger: Monitor.Ledger;
119
+ readonly shown: ReadonlyArray<string>;
120
+ readonly deliver: boolean;
121
+ }) => Effect.Effect<Taken>;
122
+ }
123
+ /**
124
+ * The counts the deterministic controls keep, read off the state the frame
125
+ * closed on. Nothing is re-derived: every field is a state field, a ledger
126
+ * length, or a filter over a ledger the harness already wrote.
127
+ *
128
+ * @since 1.0.0-rc.0
129
+ * @private
130
+ */
131
+ export declare const signals: (state: State, facts: Frame.Accounting["facts"], workspaceDigest: string, paths: number) => Supervisor.Signals;
132
+ /**
133
+ * What a snapshot says about the frame's catalog: the Markdown skills the
134
+ * model may call and has not — neither called by name nor read through a
135
+ * `read` call on the skill's path — sorted by name and at most
136
+ * `Supervisor.skillLimit` of them, offered only when `read` is in the catalog
137
+ * to read them with; the distinct flows the ledger names, newest
138
+ * `Supervisor.calledLimit` of them; and whether `jev` is in the catalog.
139
+ *
140
+ * @since 1.0.0-rc.0
141
+ * @private
142
+ */
143
+ export declare const catalog: (flows: ReadonlyArray<Descriptor.FlowDescriptor>, ledger: ReadonlyArray<{
144
+ readonly flow: string;
145
+ readonly subject: string;
146
+ }>) => Pick<Supervisor.Snapshot, "skills" | "called" | "jevAvailable"> & {
147
+ readonly capped: boolean;
148
+ };
149
+ /**
150
+ * Opens the supervisor beside the loop: the queue, the mailbox, and the
151
+ * forked fiber that serves them. Requires a scope, which is the loop's own,
152
+ * so closing the loop closes the fiber.
153
+ *
154
+ * @since 1.0.0-rc.0
155
+ * @private
156
+ */
157
+ export declare const open: (input: {
158
+ readonly session: string;
159
+ readonly engine: EngineLike.EngineLike;
160
+ readonly emit: (event: AgentEvent.AgentEvent) => Effect.Effect<void>;
161
+ /** The host's monitors; each reading adds `Monitor.skills` of its snapshot and `Monitor.useJev`. */
162
+ readonly monitors: ReadonlyArray<Monitor.Monitor>;
163
+ /** Whether a monitor's message and memory inserts reach the run: the host holds a real judge. */
164
+ readonly deliver: boolean;
165
+ }) => Effect.Effect<Handle, never, Scope.Scope | Evaluator.Evaluator>;
166
+ /**
167
+ * A handle for a loop that supervises nothing: offers are dropped and every
168
+ * boundary takes nothing.
169
+ *
170
+ * @since 1.0.0-rc.0
171
+ * @private
172
+ */
173
+ export declare const none: Handle;
174
+ //# sourceMappingURL=supervision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supervision.d.ts","sourceRoot":"","sources":["../../../src/internal/supervision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,485 @@
1
+ /**
2
+ * The supervisor's seat beside the cell loop: a one-slot sliding queue the
3
+ * loop offers to, a forked fiber that reads the newest snapshot, scores the
4
+ * run's monitors, judges the rows it recalls and marks the transcript
5
+ * segments not yet marked, and a mailbox the next turn boundary takes a
6
+ * monitor's message, memory and marks from.
7
+ *
8
+ * The loop never awaits any of it. `offer` is a sliding enqueue and returns
9
+ * at once; `take` is a `Ref` swap. Everything Jev is asked, and everything
10
+ * that comes back, happens on the forked fiber. A run that ends with a
11
+ * reading in flight gives it `Supervisor.closeGraceMs` to settle and journal
12
+ * as the scope closes, and no longer: a reading still unanswered then is
13
+ * interrupted and journaled `supervisor-unjudged` with reason `interrupted`,
14
+ * so a Jev call that was made is never missing from the record. A snapshot
15
+ * the fiber never took is dropped and journals nothing: nobody asked.
16
+ *
17
+ * The reading is taken through `EngineLike.record`, keyed on the session,
18
+ * the frame and the cell digest, so a resumed run is handed the reading its
19
+ * original attempt recorded and never asks Jev again. The reading records
20
+ * each monitor's raw value and nothing about delivery: `Monitor.gate` runs at
21
+ * the boundary that takes it, inside that boundary's own recorded drain and
22
+ * against the ledger the run holds there, so streaks, cooldowns and limits
23
+ * count every delivery before it, a replayed boundary delivers exactly what it
24
+ * delivered the first time, and a mailbox left over from a replayed frame is
25
+ * discarded as stale rather than delivered twice. The rows a run has been shown are the boundary's to know:
26
+ * a row shown between the offer and the drain is dropped there, so no row is
27
+ * delivered twice however the readings interleave. Marks name segments by
28
+ * digest and are never stale: a boundary stores them whichever frame's
29
+ * reading they came from, and the model is not sent them.
30
+ *
31
+ * @since 1.0.0-rc.0
32
+ * @private
33
+ */
34
+ import { ModelRequest } from "@smthrs/model";
35
+ import { Deferred, Effect, Fiber, Option, Queue, Ref, Schema } from "effect";
36
+ import * as AgentEvent from "../AgentEvent.js";
37
+ import * as Judgement from "../Judgement.js";
38
+ import * as Monitor from "../Monitor.js";
39
+ import * as Relevance from "../Relevance.js";
40
+ import * as Supervisor from "../Supervisor.js";
41
+ import * as UnmovedTree from "../UnmovedTree.js";
42
+ import * as compactionMarks from "./compactionMarks.js";
43
+ import { paidUsage } from "./paidUsage.js";
44
+ const eventType = AgentEvent.eventType;
45
+ const nothing = { messages: [], memory: [], suppressed: [], marks: [], compact: [] };
46
+ const MonitorRow = Schema.Struct({
47
+ id: Schema.String,
48
+ kind: AgentEvent.MonitorKind,
49
+ p: Schema.Number,
50
+ crossed: Schema.Boolean
51
+ });
52
+ const MonitorCandidate = Schema.Struct({
53
+ id: Schema.String,
54
+ kind: AgentEvent.MonitorKind,
55
+ priority: Schema.Number,
56
+ p: Schema.Number,
57
+ text: Schema.String
58
+ });
59
+ /** Everything one recorded reading holds, so a replay re-emits and re-delivers it. */
60
+ const Recorded = Schema.Struct({
61
+ settled: Schema.NullOr(AgentEvent.SupervisorSettled),
62
+ decision: Schema.NullOr(AgentEvent.DecisionSettled),
63
+ unjudged: Schema.NullOr(AgentEvent.SupervisorUnjudged),
64
+ /** The relevance reading of the recalled rows; null when none was asked or it failed. */
65
+ memory: Schema.NullOr(AgentEvent.RelevanceSettled),
66
+ memoryDecisions: Schema.Array(AgentEvent.DecisionSettled),
67
+ memoryUnjudged: Schema.NullOr(AgentEvent.DecisionUnjudged),
68
+ /** The recalled rows not withheld: every row when the reading failed. */
69
+ memoryRows: Schema.Array(Supervisor.Recalled),
70
+ /** Every monitor's value in the reading; empty when the reading failed. */
71
+ monitorRows: Schema.Array(MonitorRow),
72
+ /** The crossed monitors' messages, ungated; the boundary gates them. */
73
+ monitorCandidates: Schema.Array(MonitorCandidate),
74
+ /** The answers of the marks reading; empty when none was asked or it failed. */
75
+ marks: Schema.Array(compactionMarks.Marking),
76
+ marksDecisions: Schema.Array(AgentEvent.DecisionSettled),
77
+ marksUnjudged: Schema.NullOr(AgentEvent.DecisionUnjudged)
78
+ });
79
+ /**
80
+ * The counts the deterministic controls keep, read off the state the frame
81
+ * closed on. Nothing is re-derived: every field is a state field, a ledger
82
+ * length, or a filter over a ledger the harness already wrote.
83
+ *
84
+ * @since 1.0.0-rc.0
85
+ * @private
86
+ */
87
+ export const signals = (state, facts, workspaceDigest, paths) => ({
88
+ frame: state.frame,
89
+ maxFrames: state.maxFrames,
90
+ readOnlyFrames: facts.readOnlyFrames,
91
+ repeatFrames: facts.repeatFrames,
92
+ mutations: facts.mutations,
93
+ remoteMutations: facts.remoteMutations,
94
+ treeMoved: UnmovedTree.find({
95
+ opened: facts.openingDigest,
96
+ digest: workspaceDigest,
97
+ elsewhere: facts.remoteMutations
98
+ }) === undefined,
99
+ paths,
100
+ checksRun: facts.checks.length,
101
+ checksFailing: facts.checks.filter((check) => check.failing).length,
102
+ failuresUnanswered: facts.failures.length,
103
+ callsFailed: facts.callLedger.filter((entry) => !entry.ok).length,
104
+ callsSettled: facts.callLedger.length,
105
+ narrowingDemands: state.narrowingDemands,
106
+ unmovedDemands: state.unmovedDemands,
107
+ unresolvedDemands: state.unresolvedDemands,
108
+ claimDemands: state.claimDemands,
109
+ sufficiencyStated: state.sufficiencyStated
110
+ });
111
+ /**
112
+ * Whether one ledger subject names `path`. The subject is the call's target
113
+ * as `CallLedger.subject` clipped it, so a path longer than `CallLedger.width`
114
+ * survives only as its head and an elision notice, and an input no sole
115
+ * target was lexed from is quoted whole, with the path inside it (#2028).
116
+ *
117
+ * @since 1.0.0-rc.0
118
+ * @private
119
+ */
120
+ const namesPath = (subject, path) => {
121
+ if (subject.includes(path))
122
+ return true;
123
+ const elided = subject.indexOf("… [+");
124
+ return elided > 0 && path.startsWith(subject.slice(0, elided));
125
+ };
126
+ /**
127
+ * What a snapshot says about the frame's catalog: the Markdown skills the
128
+ * model may call and has not — neither called by name nor read through a
129
+ * `read` call on the skill's path — sorted by name and at most
130
+ * `Supervisor.skillLimit` of them, offered only when `read` is in the catalog
131
+ * to read them with; the distinct flows the ledger names, newest
132
+ * `Supervisor.calledLimit` of them; and whether `jev` is in the catalog.
133
+ *
134
+ * @since 1.0.0-rc.0
135
+ * @private
136
+ */
137
+ export const catalog = (flows, ledger) => {
138
+ const called = [...new Set(ledger.map((entry) => entry.flow))];
139
+ const readable = flows.some((descriptor) => descriptor.name === "read");
140
+ // A skill read through `read` is as called as one invoked by name: the
141
+ // reminder says to read it, and the ledger is where that read shows.
142
+ const readSubjects = ledger.flatMap((entry) => entry.flow === "read" ? [entry.subject] : []);
143
+ const skills = readable
144
+ ? flows
145
+ .filter((descriptor) => descriptor.modelInvocable && descriptor.body._tag === "Markdown" && !called.includes(descriptor.name) &&
146
+ !readSubjects.some((subject) => namesPath(subject, descriptor.body.path)))
147
+ .sort((a, b) => a.name < b.name ? -1 : 1)
148
+ : [];
149
+ return {
150
+ skills: skills.slice(0, Supervisor.skillLimit).map((descriptor) => Supervisor.skill(descriptor.name, descriptor.description, descriptor.body.path)),
151
+ called: called.slice(-Supervisor.calledLimit),
152
+ jevAvailable: flows.some((descriptor) => descriptor.name === "jev"),
153
+ capped: skills.length > Supervisor.skillLimit
154
+ };
155
+ };
156
+ /**
157
+ * Opens the supervisor beside the loop: the queue, the mailbox, and the
158
+ * forked fiber that serves them. Requires a scope, which is the loop's own,
159
+ * so closing the loop closes the fiber.
160
+ *
161
+ * @since 1.0.0-rc.0
162
+ * @private
163
+ */
164
+ export const open = (input) => Effect.gen(function* () {
165
+ const { deliver, emit, engine, monitors, session } = input;
166
+ const mailbox = yield* Ref.make(Option.none());
167
+ // The host's monitors, then one per skill the snapshot offers, then the
168
+ // use-jev lint: what one reading asks and scores and its boundary gates.
169
+ const scored = (snapshot) => [
170
+ ...monitors,
171
+ ...Monitor.skills(snapshot),
172
+ Monitor.useJev()
173
+ ];
174
+ const memory = yield* Supervisor.Memory;
175
+ // The evaluator the loop was given, captured once so the fiber asks the
176
+ // same transport the completion brake does.
177
+ const services = yield* Effect.context();
178
+ // The newest frames ahead of the one just closed, kept in memory: they
179
+ // are evidence for a reading nothing replays, so durable state need not
180
+ // carry them. A resumed run's first snapshots see fewer frames, which is
181
+ // the honest reading of a past this process did not witness.
182
+ const recent = [];
183
+ // Digests this fiber has marked. A segment is offered until a boundary
184
+ // stores its answer, and a reading that lags the loop would otherwise
185
+ // ask about it again each frame.
186
+ const marked = new Set();
187
+ // The frame whose reading the fiber is taking, and a latch released when
188
+ // that reading is done, whatever it came to. Read only by the scope's
189
+ // closing grace below.
190
+ const inFlight = yield* Ref.make(Option.none());
191
+ // Which readings last failed for want of a judge. A host with none says so
192
+ // once, not every frame; the next reading still asks, so a judge connected
193
+ // mid-run is used at once, and any other failure is journaled every time.
194
+ const unconfigured = new Set();
195
+ const repeated = (reading, unjudged, answered) => {
196
+ if (unjudged?.reason === "unconfigured") {
197
+ const seen = unconfigured.has(reading);
198
+ unconfigured.add(reading);
199
+ return seen;
200
+ }
201
+ if (unjudged !== null || answered)
202
+ unconfigured.delete(reading);
203
+ return false;
204
+ };
205
+ // A store that refused a read is journaled, typed, and the reading goes
206
+ // on: memory is the supervisor's aid, not its evidence.
207
+ const recallFailed = (frame, failure) => emit(new AgentEvent.SupervisorMemoryFailed({
208
+ eventType: eventType.supervisorMemoryFailed,
209
+ scope: session,
210
+ frame,
211
+ operation: "recall",
212
+ detail: failure.detail
213
+ }));
214
+ const supervise = (offer) => Effect.gen(function* () {
215
+ const snapshot = { ...offer.snapshot, frames: offer.frames };
216
+ const declared = scored(snapshot);
217
+ const unmarked = offer.unmarked.filter(({ digest }) => !marked.has(digest));
218
+ const recorded = yield* engine.record({
219
+ name: "supervisor",
220
+ identity: { session, frame: offer.frame, boundary: `supervisor:${offer.digest}` },
221
+ success: Recorded,
222
+ // This fiber drops a failed record, so a spent budget is applied by
223
+ // the frame's next primary call rather than parked here (#3010).
224
+ advisory: true,
225
+ // The monitors' reading, then each relevance and marks request: every
226
+ // reading the boundary took is one the run paid for.
227
+ usage: (record) => paidUsage([
228
+ record.settled?.usage,
229
+ ...(record.unjudged?.usage ?? []),
230
+ ...record.memoryDecisions.map((settled) => settled.usage),
231
+ ...(record.memoryUnjudged?.usage ?? []),
232
+ ...record.marksDecisions.map((settled) => settled.usage),
233
+ ...(record.marksUnjudged?.usage ?? [])
234
+ ]),
235
+ execute: Effect.gen(function* () {
236
+ // The task does not change between frames, so the store ranks the
237
+ // same rows first each time: it is asked past every row already
238
+ // shown, and a row shown once is never asked about again.
239
+ const recalled = memory.bound
240
+ ? yield* memory.recall([offer.snapshot.task, offer.recent].filter(Boolean).join("\n").slice(-16_384), Supervisor.recalledLimit + offer.shown.length).pipe(Effect.catch((failure) => Effect.as(recallFailed(offer.frame, failure), [])))
241
+ : [];
242
+ const rows = recalled.filter((row) => !offer.shown.includes(row.key)).slice(0, Supervisor.recalledLimit);
243
+ const [result, relevance, marking] = yield* Effect.all([
244
+ Effect.result(Supervisor.read(snapshot, Monitor.questions(declared, snapshot))),
245
+ rows.length === 0 ? Effect.succeed(undefined) : Effect.result(Relevance.judge({ task: snapshot.task, recent: offer.recent }, rows.map((row) => ({ kind: "memory", id: row.key, text: row.text })))),
246
+ unmarked.length === 0 ? Effect.succeed(undefined) : Effect.result(compactionMarks.read({ task: snapshot.task, failing: offer.failing }, unmarked.map(({ item }) => item)))
247
+ ], { concurrency: 3 }).pipe(Effect.provideContext(services));
248
+ const at = { scope: session, frame: offer.frame };
249
+ // Marking changes nothing the model is sent, so no decision acts.
250
+ const marksRecord = marking === undefined
251
+ ? { marks: [], marksDecisions: [], marksUnjudged: null }
252
+ : marking._tag === "Failure"
253
+ ? {
254
+ marks: [],
255
+ marksDecisions: [],
256
+ marksUnjudged: Judgement.unjudgedEvent(marking.failure, {
257
+ ...at,
258
+ classifier: "compaction/marks",
259
+ items: unmarked.length
260
+ })
261
+ }
262
+ : {
263
+ marks: unmarked.map(({ digest }, index) => ({ digest, ...marking.success.answers[index] })),
264
+ marksDecisions: marking.success.asked.map((asked) => Judgement.decision(asked, { ...at, acted: false })),
265
+ marksUnjudged: null
266
+ };
267
+ const memoryRecord = relevance === undefined
268
+ ? { memory: null, memoryDecisions: [], memoryUnjudged: null, memoryRows: [] }
269
+ : relevance._tag === "Failure"
270
+ ? {
271
+ memory: null,
272
+ memoryDecisions: [],
273
+ memoryUnjudged: Judgement.unjudgedEvent(relevance.failure, {
274
+ ...at,
275
+ classifier: "relevance/unnecessary",
276
+ items: rows.length
277
+ }),
278
+ memoryRows: rows
279
+ }
280
+ : {
281
+ memory: Relevance.settled(relevance.success, { ...at, source: "supervisor" }),
282
+ memoryDecisions: relevance.success.asked.map((asked) => Judgement.decision(asked, {
283
+ ...at,
284
+ acted: relevance.success.verdicts.some((verdict) => verdict.withheld)
285
+ })),
286
+ memoryUnjudged: null,
287
+ memoryRows: rows.filter((_, index) => !relevance.success.verdicts[index].withheld)
288
+ };
289
+ if (result._tag === "Failure") {
290
+ const record = {
291
+ settled: null,
292
+ decision: null,
293
+ unjudged: new AgentEvent.SupervisorUnjudged({
294
+ eventType: eventType.supervisorUnjudged,
295
+ ...at,
296
+ reason: result.failure.reason,
297
+ detail: result.failure.detail,
298
+ ...(result.failure.usage === undefined ? {} : { usage: result.failure.usage })
299
+ }),
300
+ ...memoryRecord,
301
+ ...marksRecord,
302
+ monitorRows: [],
303
+ monitorCandidates: []
304
+ };
305
+ return record;
306
+ }
307
+ const reading = result.success;
308
+ const evaluation = Monitor.evaluate({ monitors: declared, reading, snapshot, values: reading.monitors });
309
+ // Whether a monitor's message is handed to the boundary, which may
310
+ // still withhold it for its streak, cooldown, limit or slot.
311
+ const nudged = deliver && evaluation.candidates.length > 0;
312
+ const record = {
313
+ settled: new AgentEvent.SupervisorSettled({
314
+ eventType: eventType.supervisorSettled,
315
+ ...at,
316
+ thrashing: reading.thrashing,
317
+ onTarget: reading.onTarget,
318
+ suspect: reading.suspect,
319
+ outdatedContext: reading.outdatedContext,
320
+ irrelevantContext: reading.irrelevantContext,
321
+ ...reading.emotions,
322
+ needsHelp: reading.needsHelp,
323
+ crossed: evaluation.rows.some((row) => row.crossed),
324
+ nudged,
325
+ steer: deliver,
326
+ latencyMs: reading.latencyMs,
327
+ ...(reading.usage === undefined ? {} : { usage: reading.usage }),
328
+ monitors: evaluation.rows,
329
+ ...(offer.skillsCapped ? { skillsCapped: true } : {})
330
+ }),
331
+ decision: new AgentEvent.DecisionSettled({
332
+ eventType: eventType.decisionSettled,
333
+ ...at,
334
+ classifier: Supervisor.classifier.id,
335
+ digest: reading.asked.digest,
336
+ state: reading.asked.state,
337
+ questions: reading.asked.questions,
338
+ answers: reading.asked.answers,
339
+ latencyMs: reading.latencyMs,
340
+ acted: nudged,
341
+ decidedBy: "jev"
342
+ }),
343
+ unjudged: null,
344
+ ...memoryRecord,
345
+ ...marksRecord,
346
+ monitorRows: evaluation.rows,
347
+ monitorCandidates: evaluation.candidates
348
+ };
349
+ return record;
350
+ })
351
+ });
352
+ // Posted before anything is journaled: an observer's checkpoint sits
353
+ // inside `emit`, and a boundary that wakes on the settled event must
354
+ // find the reading already waiting for it. Every reading Jev took is
355
+ // posted, crossed or not, so the boundary's gate sees each monitor's
356
+ // streak move.
357
+ for (const { digest } of recorded.marks)
358
+ marked.add(digest);
359
+ if (recorded.settled !== null || recorded.memoryRows.length > 0 || recorded.marks.length > 0) {
360
+ // A reading replaces the one no boundary took, but not its marks.
361
+ yield* Ref.update(mailbox, (held) => Option.some({
362
+ frame: offer.frame,
363
+ declared,
364
+ monitors: recorded.settled === null
365
+ ? undefined
366
+ : { rows: recorded.monitorRows, candidates: recorded.monitorCandidates },
367
+ rows: recorded.memoryRows,
368
+ compact: recorded.settled === null ? [] : Supervisor.compacting({
369
+ ...recorded.settled,
370
+ outdatedContext: recorded.settled.outdatedContext ?? 0,
371
+ irrelevantContext: recorded.settled.irrelevantContext ?? 0
372
+ }),
373
+ marks: [...Option.match(held, { onNone: () => [], onSome: (value) => value.marks }), ...recorded.marks]
374
+ }));
375
+ }
376
+ // The verdict is the last thing this fiber does with a reading: the
377
+ // full decisions and the memory reading go ahead of it, so a host that
378
+ // acts on the verdict the moment it is checkpointed never finds the
379
+ // record behind it missing.
380
+ const quiet = {
381
+ memory: repeated("memory", recorded.memoryUnjudged, recorded.memory !== null),
382
+ marks: repeated("marks", recorded.marksUnjudged, recorded.marksDecisions.length > 0),
383
+ supervisor: repeated("supervisor", recorded.unjudged, recorded.settled !== null)
384
+ };
385
+ if (recorded.decision !== null)
386
+ yield* emit(recorded.decision);
387
+ for (const decision of recorded.memoryDecisions)
388
+ yield* emit(decision);
389
+ if (recorded.memory !== null)
390
+ yield* emit(recorded.memory);
391
+ if (recorded.memoryUnjudged !== null && !quiet.memory)
392
+ yield* emit(recorded.memoryUnjudged);
393
+ for (const decision of recorded.marksDecisions)
394
+ yield* emit(decision);
395
+ if (recorded.marksUnjudged !== null && !quiet.marks)
396
+ yield* emit(recorded.marksUnjudged);
397
+ if (recorded.unjudged !== null && !quiet.supervisor)
398
+ yield* emit(recorded.unjudged);
399
+ if (recorded.settled !== null)
400
+ yield* emit(recorded.settled);
401
+ }).pipe(
402
+ // A reading the fiber could not even record is logged and dropped:
403
+ // the supervisor may not fail the run it watches.
404
+ Effect.catchCause((cause) => Effect.annotateLogs(Effect.logWarning("A supervisor reading could not be recorded", cause), {
405
+ frame: offer.frame
406
+ })));
407
+ const offers = yield* Queue.make({
408
+ capacity: 1,
409
+ strategy: "sliding"
410
+ });
411
+ // The reading the fiber was taking when it was interrupted, if it was.
412
+ const cut = yield* Ref.make(Option.none());
413
+ const serve = (offer) => Effect.gen(function* () {
414
+ const done = yield* Deferred.make();
415
+ yield* Ref.set(inFlight, Option.some({ frame: offer.frame, done }));
416
+ yield* supervise(offer).pipe(Effect.onInterrupt(() => Ref.set(cut, Option.some(offer.frame))), Effect.ensuring(Ref.set(inFlight, Option.none()).pipe(Effect.andThen(Deferred.succeed(done, undefined)))));
417
+ });
418
+ const fiber = yield* Effect.forkScoped(Effect.forever(Effect.flatMap(Queue.take(offers), serve)));
419
+ // Registered after the fork, so it runs before the fork's own interruption:
420
+ // a finalizer added later runs earlier. A reading in flight gets the grace
421
+ // to settle and journal itself; one still unanswered after it is
422
+ // interrupted and journaled as such. Nothing here waits past the grace.
423
+ yield* Effect.addFinalizer(() => Effect.gen(function* () {
424
+ const held = yield* Ref.get(inFlight);
425
+ if (Option.isSome(held)) {
426
+ yield* Deferred.await(held.value.done).pipe(Effect.timeoutOption(Supervisor.closeGraceMs));
427
+ }
428
+ yield* Fiber.interrupt(fiber);
429
+ const interrupted = yield* Ref.get(cut);
430
+ if (Option.isNone(interrupted))
431
+ return;
432
+ yield* emit(new AgentEvent.SupervisorUnjudged({
433
+ eventType: eventType.supervisorUnjudged,
434
+ scope: session,
435
+ frame: interrupted.value,
436
+ reason: "interrupted",
437
+ detail: `The run ended with this reading in flight; it was interrupted after a ${Supervisor.closeGraceMs} ms grace.`
438
+ }));
439
+ }));
440
+ return {
441
+ offer: (offer) => Effect.suspend(() => {
442
+ // Fixed at offer time, on the loop's fiber, so the snapshot is of
443
+ // the frames as they stood when this one closed whatever the fiber
444
+ // reaches it.
445
+ const frames = [...recent.slice(-(Supervisor.recentFrames - 1)), offer.current];
446
+ recent.push(offer.current);
447
+ if (recent.length > Supervisor.recentFrames)
448
+ recent.splice(0, recent.length - Supervisor.recentFrames);
449
+ return Effect.asVoid(Queue.offer(offers, { ...offer, frames }));
450
+ }),
451
+ take: (frame, { deliver, ledger, shown }) => Ref.modify(mailbox, (held) => {
452
+ if (Option.isNone(held) || !deliver)
453
+ return [nothing, Option.none()];
454
+ const { marks } = held.value;
455
+ if (held.value.frame < frame - 1)
456
+ return [{ ...nothing, marks }, Option.none()];
457
+ const rows = held.value.rows.filter((row) => !shown.includes(row.key));
458
+ const gated = held.value.monitors === undefined
459
+ ? undefined
460
+ : Monitor.gate({ ...held.value.monitors, monitors: held.value.declared, ledger, frame });
461
+ const message = gated?.message;
462
+ return [{
463
+ messages: [...(message === undefined ? [] : [message.text]), ...rows.map(Supervisor.recalledInsert)].map((text) => ModelRequest.Message.user(text)),
464
+ memory: rows.map((row) => row.key),
465
+ ...(message === undefined ? {} : { monitor: message.id }),
466
+ suppressed: gated?.suppressed ?? [],
467
+ ...(gated === undefined ? {} : { ledger: gated.ledger }),
468
+ marks,
469
+ compact: held.value.compact
470
+ }, Option.none()];
471
+ })
472
+ };
473
+ });
474
+ /**
475
+ * A handle for a loop that supervises nothing: offers are dropped and every
476
+ * boundary takes nothing.
477
+ *
478
+ * @since 1.0.0-rc.0
479
+ * @private
480
+ */
481
+ export const none = {
482
+ offer: () => Effect.void,
483
+ take: () => Effect.succeed(nothing)
484
+ };
485
+ //# sourceMappingURL=supervision.js.map