@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,305 @@
1
+ /**
2
+ * The one way this package asks Jev a question.
3
+ *
4
+ * Every reading a control takes — the supervisor's, the completion brake's,
5
+ * and every relevance, compaction, monitor and routing reading after them —
6
+ * goes through here, so each is metered the same way and fails the same way.
7
+ *
8
+ * Two layers. {@link measured} asks through the bound `Evaluator` and keeps
9
+ * what the classifier drops: the transport's usage, the provider's own
10
+ * confidence, the state exactly as it was sent, and the wall-clock latency.
11
+ * Its failure is the transport's own. {@link read} is the fail-closed layer
12
+ * above it: a host with no `Evaluator` and a transport that could not answer
13
+ * both fail as {@link Unjudged}, with a detail that is safe to journal. There
14
+ * is no reading Jev did not make, and nothing here fills one in.
15
+ *
16
+ * {@link perItem} asks one set of questions about each of many items. Items
17
+ * go in as few requests as fit {@link maxStateBytes}, in order, and a reading
18
+ * is whole or it fails: one failed request fails every item, and partial
19
+ * answers are never returned.
20
+ *
21
+ * {@link recorded} is how a reading taken inside a run is journaled: through
22
+ * `EngineLike.record`, so a replayed frame is served what the first attempt
23
+ * read and never asks again, with the `decision-settled` or
24
+ * `decision-unjudged` rows {@link emitRecorded} journals beside it.
25
+ *
26
+ * @since 1.0.0-rc.0
27
+ */
28
+ import * as Classifier from "@smthrs/model/Classifier";
29
+ import * as Evaluator from "@smthrs/model/Evaluator";
30
+ import * as Duration from "effect/Duration";
31
+ import * as Effect from "effect/Effect";
32
+ import * as Option from "effect/Option";
33
+ import * as Schema from "effect/Schema";
34
+ import * as AgentEvent from "./AgentEvent.js";
35
+ import * as bytes from "./internal/bytes.js";
36
+ import * as elide from "./internal/elide.js";
37
+ import { paidUsage } from "./internal/paidUsage.js";
38
+ /**
39
+ * The failure of a reading on a host that binds no `Evaluator`.
40
+ *
41
+ * @category constants
42
+ * @since 1.0.0-rc.0
43
+ */
44
+ export const unconfigured = { reason: "unconfigured", detail: "No evaluator is installed on this host" };
45
+ /**
46
+ * Asks every question of `classifier` about `state` through the bound
47
+ * `Evaluator`, keeping the usage, the provider's confidence, the state as
48
+ * sent and the latency. The transport's failure is kept as it is.
49
+ *
50
+ * @category constructors
51
+ * @since 1.0.0-rc.0
52
+ */
53
+ export const measured = (classifier, state) => Effect.gen(function* () {
54
+ const bound = yield* Evaluator.Evaluator;
55
+ // The classifier returns answers only. The transport's accounting and the
56
+ // provider's confidence are read at the service boundary, and so is the
57
+ // state: a record of what was asked is of the encoding that crossed it.
58
+ let usage;
59
+ let confidence;
60
+ let sent = null;
61
+ const metered = Evaluator.Evaluator.of({
62
+ evaluate: (request) => bound.evaluate(request).pipe(Effect.tap((response) => Effect.sync(() => {
63
+ usage = response.usage;
64
+ confidence = response.confidence;
65
+ // A classifier state is a codec to JSON, so its encoding is JSON.
66
+ sent = request.state;
67
+ })))
68
+ });
69
+ const [elapsed, answers] = yield* classifier.evaluate(state).pipe(Effect.provideService(Evaluator.Evaluator, metered), Effect.timed);
70
+ return {
71
+ answers,
72
+ asked: {
73
+ classifier: classifier.id,
74
+ digest: classifier.digest,
75
+ questions: classifier.questions,
76
+ state: sent,
77
+ answers: AgentEvent.decisionAnswers(answers, confidence),
78
+ latencyMs: Math.round(Duration.toMillis(elapsed)),
79
+ ...(usage === undefined ? {} : { usage })
80
+ }
81
+ };
82
+ });
83
+ /**
84
+ * Asks like {@link measured}, and fails as {@link Unjudged} whenever no
85
+ * answer could be obtained: no `Evaluator` bound, a refusal, a deadline, an
86
+ * answer that does not decode.
87
+ *
88
+ * @category constructors
89
+ * @since 1.0.0-rc.0
90
+ */
91
+ export const read = (classifier, state) => Effect.gen(function* () {
92
+ const bound = yield* Effect.serviceOption(Evaluator.Evaluator);
93
+ if (Option.isNone(bound))
94
+ return yield* Effect.fail(unconfigured);
95
+ return yield* measured(classifier, state).pipe(Effect.provideService(Evaluator.Evaluator, bound.value),
96
+ // An unreachable transport's own message can name hosts and URLs.
97
+ Effect.mapError((error) => ({
98
+ reason: error.code,
99
+ detail: Evaluator.publicMessage(error),
100
+ ...(error.usage === undefined ? {} : { usage: [error.usage] })
101
+ })));
102
+ });
103
+ /**
104
+ * The largest state one reading sends, in UTF-8 bytes of its JSON: the
105
+ * ceiling the `jev` flow applies to a cell's own calls.
106
+ *
107
+ * @category constants
108
+ * @since 1.0.0-rc.0
109
+ */
110
+ export const maxStateBytes = 262_144;
111
+ /**
112
+ * Declares one set of questions asked about each of many items.
113
+ *
114
+ * Items are packed in order, greedily, into requests whose encoded state fits
115
+ * `maxStateBytes`, and each request numbers its items from 0. Requests run at
116
+ * most `concurrency` at once, and the first that fails fails the reading. An
117
+ * item too large to send even alone fails as `invalid_question`, and no items
118
+ * send no request.
119
+ *
120
+ * @category constructors
121
+ * @since 1.0.0-rc.0
122
+ */
123
+ export const perItem = (options) => {
124
+ const limit = options.maxStateBytes ?? maxStateBytes;
125
+ const keys = Object.keys(options.questions);
126
+ const state = Schema.Struct({
127
+ context: options.context,
128
+ items: Schema.Array(options.item)
129
+ });
130
+ const encodeContext = Schema.encodeEffect(options.context);
131
+ const encodeItem = Schema.encodeEffect(options.item);
132
+ const cache = new Map();
133
+ const classifierFor = (n) => {
134
+ const held = cache.get(n);
135
+ if (held !== undefined)
136
+ return held;
137
+ const questions = Object.fromEntries(Array.from({ length: n }, (_, index) => keys.map((key) => [`${key}_${index}`, options.questions[key](index)]))
138
+ .flat());
139
+ const made = Classifier.make(options.id, { description: options.description, state, questions });
140
+ cache.set(n, made);
141
+ return made;
142
+ };
143
+ const size = (value) => bytes.size(JSON.stringify(value));
144
+ const chunk = (context, items) => Effect.gen(function* () {
145
+ const invalid = (error) => ({
146
+ reason: "invalid_question",
147
+ detail: error.message
148
+ });
149
+ const encoded = yield* encodeContext(context).pipe(Effect.mapError(invalid));
150
+ // `{"context":…,"items":[]}`; each item adds its own bytes and, after
151
+ // the first, one comma.
152
+ const base = size({ context: encoded, items: [] });
153
+ const chunks = [];
154
+ let current = [];
155
+ let used = base;
156
+ for (const [index, item] of items.entries()) {
157
+ const width = size(yield* encodeItem(item).pipe(Effect.mapError(invalid)));
158
+ if (base + width > limit) {
159
+ return yield* Effect.fail({
160
+ reason: "invalid_question",
161
+ detail: `Item ${index} alone makes a ${base + width}-byte state; one reading sends at most ${limit} bytes.`
162
+ });
163
+ }
164
+ if (current.length > 0 && used + 1 + width > limit) {
165
+ chunks.push(current);
166
+ current = [];
167
+ }
168
+ used = current.length === 0 ? base + width : used + 1 + width;
169
+ current.push(item);
170
+ }
171
+ // Called with at least one item, so the last request is never empty.
172
+ chunks.push(current);
173
+ return chunks;
174
+ });
175
+ const readItems = (context, items) => Effect.gen(function* () {
176
+ if (items.length === 0)
177
+ return { answers: [], asked: [] };
178
+ const chunks = yield* chunk(context, items);
179
+ // The first request that fails fails the reading, but every request
180
+ // that settled before it was paid for, and so was the failure itself.
181
+ const paid = [];
182
+ const reads = yield* Effect.forEach(chunks, (slice) => read(classifierFor(slice.length), { context, items: slice }).pipe(Effect.tap((reading) => Effect.sync(() => {
183
+ if (reading.asked.usage !== undefined)
184
+ paid.push(reading.asked.usage);
185
+ }))), { concurrency: options.concurrency ?? Classifier.defaultConcurrency }).pipe(Effect.mapError((unjudged) => {
186
+ const usage = [...paid, ...(unjudged.usage ?? [])];
187
+ return usage.length === 0 ? unjudged : { ...unjudged, usage };
188
+ }));
189
+ const answers = reads.flatMap((reading, at) => chunks[at].map((_, index) => Object.fromEntries(keys.map((key) => [key, reading.answers[`${key}_${index}`]]))));
190
+ return { answers, asked: reads.map((reading) => reading.asked) };
191
+ });
192
+ return { classifierFor, read: readItems };
193
+ };
194
+ /**
195
+ * The `decision-settled` row for one request. `decidedBy` is `jev`, and the
196
+ * transport's usage is carried when it reported any.
197
+ *
198
+ * @category conversions
199
+ * @since 1.0.0-rc.0
200
+ */
201
+ export const decision = (asked, at) => new AgentEvent.DecisionSettled({
202
+ eventType: AgentEvent.eventType.decisionSettled,
203
+ scope: at.scope,
204
+ frame: at.frame,
205
+ classifier: asked.classifier,
206
+ digest: asked.digest,
207
+ state: asked.state,
208
+ questions: asked.questions,
209
+ answers: asked.answers,
210
+ latencyMs: asked.latencyMs,
211
+ acted: at.acted,
212
+ decidedBy: "jev",
213
+ ...(asked.usage === undefined ? {} : { usage: asked.usage })
214
+ });
215
+ /**
216
+ * The `decision-unjudged` row for a reading that failed.
217
+ *
218
+ * @category conversions
219
+ * @since 1.0.0-rc.0
220
+ */
221
+ export const unjudgedEvent = (unjudged, at) => new AgentEvent.DecisionUnjudged({
222
+ eventType: AgentEvent.eventType.decisionUnjudged,
223
+ scope: at.scope,
224
+ frame: at.frame,
225
+ classifier: at.classifier,
226
+ reason: unjudged.reason,
227
+ detail: unjudged.detail,
228
+ items: at.items,
229
+ ...(unjudged.usage === undefined ? {} : { usage: unjudged.usage })
230
+ });
231
+ /**
232
+ * The durable schema of {@link Recorded} over the caller's value schema.
233
+ *
234
+ * @category schemas
235
+ * @since 1.0.0-rc.0
236
+ */
237
+ export const Recorded = (value) => Schema.Struct({
238
+ value: Schema.NullOr(value),
239
+ decisions: Schema.Array(AgentEvent.DecisionSettled),
240
+ unjudged: Schema.NullOr(AgentEvent.DecisionUnjudged)
241
+ });
242
+ /**
243
+ * Takes one reading inside a run as a durable boundary.
244
+ *
245
+ * `execute` runs once; its value is recorded with a `decision-settled` row
246
+ * per request, or, when it fails, a `null` value with one `decision-unjudged`
247
+ * row over `items`. A replayed frame is served the record and never asks.
248
+ * `identity.session` is the rows' scope.
249
+ *
250
+ * @category constructors
251
+ * @since 1.0.0-rc.0
252
+ */
253
+ export const recorded = (engine, boundary, execute) => {
254
+ const scope = boundary.identity.session;
255
+ const frame = boundary.identity.frame;
256
+ return engine.record({
257
+ name: boundary.name,
258
+ identity: boundary.identity,
259
+ success: Recorded(boundary.value),
260
+ // Each settled request is one metered reading, and so is each request of
261
+ // a reading that failed after it was metered; see `EngineLike.RecordBoundary.usage`.
262
+ usage: (record) => paidUsage([...record.decisions.map((settled) => settled.usage), ...(record.unjudged?.usage ?? [])]),
263
+ execute: Effect.match(execute, {
264
+ onFailure: (unjudged) => ({
265
+ value: null,
266
+ decisions: [],
267
+ unjudged: unjudgedEvent(unjudged, { scope, frame, classifier: boundary.classifier, items: boundary.items })
268
+ }),
269
+ onSuccess: (settled) => ({
270
+ value: settled.value,
271
+ decisions: settled.asked.map((asked) => decision(asked, { scope, frame, acted: settled.acted })),
272
+ unjudged: null
273
+ })
274
+ })
275
+ });
276
+ };
277
+ /**
278
+ * Journals a {@link Recorded} reading: its decisions in order, then its
279
+ * `decision-unjudged` row.
280
+ *
281
+ * @category conversions
282
+ * @since 1.0.0-rc.0
283
+ */
284
+ export const emitRecorded = (emit, record) => Effect.gen(function* () {
285
+ for (const settled of record.decisions)
286
+ yield* emit(settled);
287
+ if (record.unjudged !== null)
288
+ yield* emit(record.unjudged);
289
+ });
290
+ /**
291
+ * The most of a run's task one reading carries, in UTF-8 bytes; both ends
292
+ * kept, for the reason `CompletionClaim` keeps both.
293
+ *
294
+ * @category constants
295
+ * @since 1.0.0-rc.0
296
+ */
297
+ export const taskBytes = 4096;
298
+ /**
299
+ * The task as a reading carries it, both ends kept.
300
+ *
301
+ * @category conversions
302
+ * @since 1.0.0-rc.0
303
+ */
304
+ export const task = (text) => elide.middle(text.trim(), taskBytes, "the run record has the whole task");
305
+ //# sourceMappingURL=Judgement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Judgement.js","sourceRoot":"","sources":["../../src/Judgement.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The one way this package asks Jev a question.\n *\n * Every reading a control takes — the supervisor's, the completion brake's,\n * and every relevance, compaction, monitor and routing reading after them —\n * goes through here, so each is metered the same way and fails the same way.\n *\n * Two layers. {@link measured} asks through the bound `Evaluator` and keeps\n * what the classifier drops: the transport's usage, the provider's own\n * confidence, the state exactly as it was sent, and the wall-clock latency.\n * Its failure is the transport's own. {@link read} is the fail-closed layer\n * above it: a host with no `Evaluator` and a transport that could not answer\n * both fail as {@link Unjudged}, with a detail that is safe to journal. There\n * is no reading Jev did not make, and nothing here fills one in.\n *\n * {@link perItem} asks one set of questions about each of many items. Items\n * go in as few requests as fit {@link maxStateBytes}, in order, and a reading\n * is whole or it fails: one failed request fails every item, and partial\n * answers are never returned.\n *\n * {@link recorded} is how a reading taken inside a run is journaled: through\n * `EngineLike.record`, so a replayed frame is served what the first attempt\n * read and never asks again, with the `decision-settled` or\n * `decision-unjudged` rows {@link emitRecorded} journals beside it.\n *\n * @since 1.0.0-rc.0\n */\n\nimport * as Classifier from \"@smthrs/model/Classifier\"\nimport * as Evaluator from \"@smthrs/model/Evaluator\"\nimport * as Duration from \"effect/Duration\"\nimport * as Effect from \"effect/Effect\"\nimport * as Option from \"effect/Option\"\nimport * as Schema from \"effect/Schema\"\nimport * as AgentEvent from \"./AgentEvent.ts\"\nimport type * as EngineLike from \"./EngineLike.ts\"\nimport type { HarnessError } from \"./HarnessError.ts\"\nimport * as bytes from \"./internal/bytes.ts\"\nimport * as elide from \"./internal/elide.ts\"\nimport { paidUsage } from \"./internal/paidUsage.ts\"\n\n/**\n * Why a reading could not be judged, and what went wrong in words safe to\n * journal. `reason` is `unconfigured`, `interrupted`, or the transport's own\n * error code; an `unreachable` detail is `Evaluator.unreachableMessage`.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface Unjudged {\n readonly reason: typeof AgentEvent.UnjudgedReason.Type\n readonly detail: string\n /**\n * What each request of the failed reading paid, when the provider metered\n * it before the reading failed: a failed reading is still spend (#3010).\n */\n readonly usage?: ReadonlyArray<Evaluator.Usage> | undefined\n}\n\n/**\n * The failure of a reading on a host that binds no `Evaluator`.\n *\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const unconfigured: Unjudged = { reason: \"unconfigured\", detail: \"No evaluator is installed on this host\" }\n\n/**\n * What one request asked and what came back, in the shape\n * `AgentEvent.DecisionSettled` carries.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface Asked {\n /** The classifier's stable id. */\n readonly classifier: string\n /** `Classifier.digest`. */\n readonly digest: string\n readonly questions: Classifier.Questions\n /** The encoded state, as the transport was sent it. */\n readonly state: Schema.Json\n readonly answers: Readonly<Record<string, AgentEvent.DecisionAnswer>>\n /** Wall-clock milliseconds the evaluation took. */\n readonly latencyMs: number\n /** Token usage the transport reported, absent when it reported none. */\n readonly usage?: Evaluator.Usage | undefined\n}\n\n/**\n * One reading: the decoded answers and the record of asking.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface Read<Qs extends Classifier.Questions> {\n readonly answers: Classifier.AnswersOf<Qs>\n readonly asked: Asked\n}\n\n/**\n * Asks every question of `classifier` about `state` through the bound\n * `Evaluator`, keeping the usage, the provider's confidence, the state as\n * sent and the latency. The transport's failure is kept as it is.\n *\n * @category constructors\n * @since 1.0.0-rc.0\n */\nexport const measured = <Id extends string, S extends Schema.Codec<any, any>, Qs extends Classifier.Questions>(\n classifier: Classifier.Classifier<Id, S, Qs>,\n state: S[\"Type\"]\n): Effect.Effect<Read<Qs>, Classifier.ClassifierError, Evaluator.Evaluator> =>\n Effect.gen(function*() {\n const bound = yield* Evaluator.Evaluator\n // The classifier returns answers only. The transport's accounting and the\n // provider's confidence are read at the service boundary, and so is the\n // state: a record of what was asked is of the encoding that crossed it.\n let usage: Evaluator.Usage | undefined\n let confidence: Readonly<Record<string, number>> | undefined\n let sent: Schema.Json = null\n const metered = Evaluator.Evaluator.of({\n evaluate: (request) =>\n bound.evaluate(request).pipe(Effect.tap((response) =>\n Effect.sync(() => {\n usage = response.usage\n confidence = response.confidence\n // A classifier state is a codec to JSON, so its encoding is JSON.\n sent = request.state as Schema.Json\n })\n ))\n })\n const [elapsed, answers] = yield* classifier.evaluate(state).pipe(\n Effect.provideService(Evaluator.Evaluator, metered),\n Effect.timed\n )\n return {\n answers,\n asked: {\n classifier: classifier.id,\n digest: classifier.digest,\n questions: classifier.questions,\n state: sent,\n answers: AgentEvent.decisionAnswers(answers, confidence),\n latencyMs: Math.round(Duration.toMillis(elapsed)),\n ...(usage === undefined ? {} : { usage })\n }\n }\n })\n\n/**\n * Asks like {@link measured}, and fails as {@link Unjudged} whenever no\n * answer could be obtained: no `Evaluator` bound, a refusal, a deadline, an\n * answer that does not decode.\n *\n * @category constructors\n * @since 1.0.0-rc.0\n */\nexport const read = <Id extends string, S extends Schema.Codec<any, any>, Qs extends Classifier.Questions>(\n classifier: Classifier.Classifier<Id, S, Qs>,\n state: S[\"Type\"]\n): Effect.Effect<Read<Qs>, Unjudged> =>\n Effect.gen(function*() {\n const bound = yield* Effect.serviceOption(Evaluator.Evaluator)\n if (Option.isNone(bound)) return yield* Effect.fail(unconfigured)\n return yield* measured(classifier, state).pipe(\n Effect.provideService(Evaluator.Evaluator, bound.value),\n // An unreachable transport's own message can name hosts and URLs.\n Effect.mapError((error): Unjudged => ({\n reason: error.code,\n detail: Evaluator.publicMessage(error),\n ...(error.usage === undefined ? {} : { usage: [error.usage] })\n }))\n )\n })\n\n/**\n * The largest state one reading sends, in UTF-8 bytes of its JSON: the\n * ceiling the `jev` flow applies to a cell's own calls.\n *\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const maxStateBytes = 262_144\n\n/**\n * The questions {@link perItem} asks about each item, each built for the\n * item's index within its request.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type ItemQuestions = Readonly<Record<string, (index: number) => Classifier.Question>>\n\n/**\n * The answers {@link perItem} reads for one item, keyed as its questions are.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type ItemAnswers<Qs extends ItemQuestions> = {\n readonly [Key in keyof Qs]: Classifier.AnswerOf<ReturnType<Qs[Key]>>\n}\n\n/**\n * What {@link perItem} declares.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface PerItemOptions<Ctx, Item, Qs extends ItemQuestions> {\n /** The classifier's stable id. */\n readonly id: string\n readonly description: string\n /** What every request carries beside its items. */\n readonly context: Schema.Codec<Ctx, any>\n readonly item: Schema.Codec<Item, any>\n /** Asked once per item; the question id is `${key}_${index}`. */\n readonly questions: Qs\n /** Requests in flight at once. Defaults to `Classifier.defaultConcurrency`. */\n readonly concurrency?: number | undefined\n /** The ceiling one request's state is packed under. Defaults to {@link maxStateBytes}. */\n readonly maxStateBytes?: number | undefined\n}\n\n/**\n * The state of one {@link perItem} request.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface ItemState<Ctx, Item> {\n readonly context: Ctx\n readonly items: ReadonlyArray<Item>\n}\n\n/**\n * One per-item reading: an answer record per item, in input order, and the\n * record of every request it took.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface ItemsRead<Qs extends ItemQuestions> {\n readonly answers: ReadonlyArray<ItemAnswers<Qs>>\n readonly asked: ReadonlyArray<Asked>\n}\n\n/**\n * A declared per-item reading.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface PerItem<Ctx, Item, Qs extends ItemQuestions> {\n /** The classifier for a request of `n` items; the same object for the same `n`. */\n readonly classifierFor: (\n n: number\n ) => Classifier.Classifier<string, Schema.Codec<ItemState<Ctx, Item>, any>, Classifier.Questions>\n /** Asks every question about every item; whole or failed. */\n readonly read: (context: Ctx, items: ReadonlyArray<Item>) => Effect.Effect<ItemsRead<Qs>, Unjudged>\n}\n\n/**\n * Declares one set of questions asked about each of many items.\n *\n * Items are packed in order, greedily, into requests whose encoded state fits\n * `maxStateBytes`, and each request numbers its items from 0. Requests run at\n * most `concurrency` at once, and the first that fails fails the reading. An\n * item too large to send even alone fails as `invalid_question`, and no items\n * send no request.\n *\n * @category constructors\n * @since 1.0.0-rc.0\n */\nexport const perItem = <Ctx, Item, const Qs extends ItemQuestions>(\n options: PerItemOptions<Ctx, Item, Qs>\n): PerItem<Ctx, Item, Qs> => {\n const limit = options.maxStateBytes ?? maxStateBytes\n const keys = Object.keys(options.questions)\n const state: Schema.Codec<ItemState<Ctx, Item>, any> = Schema.Struct({\n context: options.context,\n items: Schema.Array(options.item)\n })\n const encodeContext = Schema.encodeEffect(options.context)\n const encodeItem = Schema.encodeEffect(options.item)\n const cache = new Map<number, ReturnType<PerItem<Ctx, Item, Qs>[\"classifierFor\"]>>()\n\n const classifierFor = (n: number): ReturnType<PerItem<Ctx, Item, Qs>[\"classifierFor\"]> => {\n const held = cache.get(n)\n if (held !== undefined) return held\n const questions: Classifier.Questions = Object.fromEntries(\n Array.from({ length: n }, (_, index) => keys.map((key) => [`${key}_${index}`, options.questions[key]!(index)]))\n .flat()\n )\n const made = Classifier.make(options.id, { description: options.description, state, questions })\n cache.set(n, made)\n return made\n }\n\n const size = (value: unknown): number => bytes.size(JSON.stringify(value))\n\n const chunk = (context: Ctx, items: ReadonlyArray<Item>): Effect.Effect<Array<Array<Item>>, Unjudged> =>\n Effect.gen(function*() {\n const invalid = (error: { readonly message: string }): Unjudged => ({\n reason: \"invalid_question\",\n detail: error.message\n })\n const encoded = yield* encodeContext(context).pipe(Effect.mapError(invalid))\n // `{\"context\":…,\"items\":[]}`; each item adds its own bytes and, after\n // the first, one comma.\n const base = size({ context: encoded, items: [] })\n const chunks: Array<Array<Item>> = []\n let current: Array<Item> = []\n let used = base\n for (const [index, item] of items.entries()) {\n const width = size(yield* encodeItem(item).pipe(Effect.mapError(invalid)))\n if (base + width > limit) {\n return yield* Effect.fail<Unjudged>({\n reason: \"invalid_question\",\n detail: `Item ${index} alone makes a ${base + width}-byte state; one reading sends at most ${limit} bytes.`\n })\n }\n if (current.length > 0 && used + 1 + width > limit) {\n chunks.push(current)\n current = []\n }\n used = current.length === 0 ? base + width : used + 1 + width\n current.push(item)\n }\n // Called with at least one item, so the last request is never empty.\n chunks.push(current)\n return chunks\n })\n\n const readItems = (context: Ctx, items: ReadonlyArray<Item>): Effect.Effect<ItemsRead<Qs>, Unjudged> =>\n Effect.gen(function*() {\n if (items.length === 0) return { answers: [], asked: [] }\n const chunks = yield* chunk(context, items)\n // The first request that fails fails the reading, but every request\n // that settled before it was paid for, and so was the failure itself.\n const paid: Array<Evaluator.Usage> = []\n const reads = yield* Effect.forEach(\n chunks,\n (slice) =>\n read(classifierFor(slice.length), { context, items: slice }).pipe(\n Effect.tap((reading) =>\n Effect.sync(() => {\n if (reading.asked.usage !== undefined) paid.push(reading.asked.usage)\n })\n )\n ),\n { concurrency: options.concurrency ?? Classifier.defaultConcurrency }\n ).pipe(\n Effect.mapError((unjudged): Unjudged => {\n const usage = [...paid, ...(unjudged.usage ?? [])]\n return usage.length === 0 ? unjudged : { ...unjudged, usage }\n })\n )\n const answers = reads.flatMap((reading, at) =>\n chunks[at]!.map((_, index) =>\n Object.fromEntries(\n keys.map((key) => [key, (reading.answers as Readonly<Record<string, unknown>>)[`${key}_${index}`]])\n ) as ItemAnswers<Qs>\n )\n )\n return { answers, asked: reads.map((reading) => reading.asked) }\n })\n\n return { classifierFor, read: readItems }\n}\n\n/**\n * The `decision-settled` row for one request. `decidedBy` is `jev`, and the\n * transport's usage is carried when it reported any.\n *\n * @category conversions\n * @since 1.0.0-rc.0\n */\nexport const decision = (\n asked: Asked,\n at: { readonly scope: string; readonly frame: number; readonly acted: boolean }\n): AgentEvent.DecisionSettled =>\n new AgentEvent.DecisionSettled({\n eventType: AgentEvent.eventType.decisionSettled,\n scope: at.scope,\n frame: at.frame,\n classifier: asked.classifier,\n digest: asked.digest,\n state: asked.state,\n questions: asked.questions,\n answers: asked.answers,\n latencyMs: asked.latencyMs,\n acted: at.acted,\n decidedBy: \"jev\",\n ...(asked.usage === undefined ? {} : { usage: asked.usage })\n })\n\n/**\n * The `decision-unjudged` row for a reading that failed.\n *\n * @category conversions\n * @since 1.0.0-rc.0\n */\nexport const unjudgedEvent = (\n unjudged: Unjudged,\n at: { readonly scope: string; readonly frame: number; readonly classifier: string; readonly items: number }\n): AgentEvent.DecisionUnjudged =>\n new AgentEvent.DecisionUnjudged({\n eventType: AgentEvent.eventType.decisionUnjudged,\n scope: at.scope,\n frame: at.frame,\n classifier: at.classifier,\n reason: unjudged.reason,\n detail: unjudged.detail,\n items: at.items,\n ...(unjudged.usage === undefined ? {} : { usage: unjudged.usage })\n })\n\n/**\n * What one {@link recorded} reading holds: the caller's value, or `null`\n * when the reading failed, and the rows to journal for it.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface Recorded<A> {\n readonly value: A | null\n readonly decisions: ReadonlyArray<AgentEvent.DecisionSettled>\n readonly unjudged: AgentEvent.DecisionUnjudged | null\n}\n\n/**\n * The durable schema of {@link Recorded} over the caller's value schema.\n *\n * @category schemas\n * @since 1.0.0-rc.0\n */\nexport const Recorded = <A>(value: EngineLike.DurableSchema<A>): EngineLike.DurableSchema<Recorded<A>> =>\n Schema.Struct({\n value: Schema.NullOr(value),\n decisions: Schema.Array(AgentEvent.DecisionSettled),\n unjudged: Schema.NullOr(AgentEvent.DecisionUnjudged)\n })\n\n/**\n * Takes one reading inside a run as a durable boundary.\n *\n * `execute` runs once; its value is recorded with a `decision-settled` row\n * per request, or, when it fails, a `null` value with one `decision-unjudged`\n * row over `items`. A replayed frame is served the record and never asks.\n * `identity.session` is the rows' scope.\n *\n * @category constructors\n * @since 1.0.0-rc.0\n */\nexport const recorded = <A>(\n engine: EngineLike.EngineLike,\n boundary: {\n readonly name: string\n readonly identity: EngineLike.BoundaryIdentity & { readonly session: string }\n readonly classifier: string\n readonly value: EngineLike.DurableSchema<A>\n readonly items: number\n },\n execute: Effect.Effect<\n { readonly value: A; readonly asked: ReadonlyArray<Asked>; readonly acted: boolean },\n Unjudged\n >\n): Effect.Effect<Recorded<A>, HarnessError> => {\n const scope = boundary.identity.session\n const frame = boundary.identity.frame\n return engine.record({\n name: boundary.name,\n identity: boundary.identity,\n success: Recorded(boundary.value),\n // Each settled request is one metered reading, and so is each request of\n // a reading that failed after it was metered; see `EngineLike.RecordBoundary.usage`.\n usage: (record) =>\n paidUsage([...record.decisions.map((settled) => settled.usage), ...(record.unjudged?.usage ?? [])]),\n execute: Effect.match(execute, {\n onFailure: (unjudged): Recorded<A> => ({\n value: null,\n decisions: [],\n unjudged: unjudgedEvent(unjudged, { scope, frame, classifier: boundary.classifier, items: boundary.items })\n }),\n onSuccess: (settled): Recorded<A> => ({\n value: settled.value,\n decisions: settled.asked.map((asked) => decision(asked, { scope, frame, acted: settled.acted })),\n unjudged: null\n })\n })\n })\n}\n\n/**\n * Journals a {@link Recorded} reading: its decisions in order, then its\n * `decision-unjudged` row.\n *\n * @category conversions\n * @since 1.0.0-rc.0\n */\nexport const emitRecorded = <E, R>(\n emit: (event: AgentEvent.AgentEvent) => Effect.Effect<void, E, R>,\n record: Recorded<unknown>\n): Effect.Effect<void, E, R> =>\n Effect.gen(function*() {\n for (const settled of record.decisions) yield* emit(settled)\n if (record.unjudged !== null) yield* emit(record.unjudged)\n })\n\n/**\n * The most of a run's task one reading carries, in UTF-8 bytes; both ends\n * kept, for the reason `CompletionClaim` keeps both.\n *\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const taskBytes = 4096\n\n/**\n * The task as a reading carries it, both ends kept.\n *\n * @category conversions\n * @since 1.0.0-rc.0\n */\nexport const task = (text: string): string => elide.middle(text.trim(), taskBytes, \"the run record has the whole task\")\n"]}