@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,464 @@
1
+ /**
2
+ * Turn-boundary steering values and their source contract.
3
+ *
4
+ * Governing design: `../docs/concepts.md#notification-queue`.
5
+ *
6
+ * @since 0.1.0
7
+ */
8
+ import * as ModelRequest from "@smthrs/model/ModelRequest";
9
+ import { Context, Effect, Layer, Schema } from "effect";
10
+ import type { HarnessError } from "./HarnessError.ts";
11
+ /**
12
+ * The boundary at which a transcript insertion may be promoted.
13
+ *
14
+ * @category models
15
+ * @since 0.1.0
16
+ * @slop
17
+ */
18
+ export type Delivery = "steer" | "queue";
19
+ /**
20
+ * A transcript insertion promoted at the next turn boundary.
21
+ *
22
+ * @category models
23
+ * @since 0.1.0
24
+ * @slop
25
+ */
26
+ export interface SteerInsert {
27
+ readonly _tag: "Insert";
28
+ readonly delivery: "steer";
29
+ readonly admittedAt: number;
30
+ readonly message: ModelRequest.Message;
31
+ }
32
+ /**
33
+ * A transcript insertion promoted only when the run would otherwise go idle.
34
+ *
35
+ * @category models
36
+ * @since 0.1.0
37
+ * @slop
38
+ */
39
+ export interface QueueInsert {
40
+ readonly _tag: "Insert";
41
+ readonly delivery: "queue";
42
+ readonly admittedAt: number;
43
+ readonly message: ModelRequest.Message;
44
+ }
45
+ /**
46
+ * A transcript insertion admitted for a future turn.
47
+ *
48
+ * @category models
49
+ * @since 0.1.0
50
+ * @slop
51
+ */
52
+ export type Insert = SteerInsert | QueueInsert;
53
+ /**
54
+ * A model-seat change that applies only after the current turn closes.
55
+ *
56
+ * @category models
57
+ * @since 0.1.0
58
+ * @slop
59
+ */
60
+ export interface SeatChange {
61
+ readonly _tag: "SeatChange";
62
+ readonly delivery: "steer";
63
+ readonly admittedAt: number;
64
+ readonly seat: string;
65
+ }
66
+ /**
67
+ * A thinking-level change that applies only after the current turn closes.
68
+ *
69
+ * @category models
70
+ * @since 0.1.0
71
+ * @slop
72
+ */
73
+ export interface ThinkingChange {
74
+ readonly _tag: "ThinkingChange";
75
+ readonly delivery: "steer";
76
+ readonly admittedAt: number;
77
+ readonly thinking: ModelRequest.ReasoningEffort;
78
+ }
79
+ /**
80
+ * A serializable steering event.
81
+ *
82
+ * @category models
83
+ * @since 0.1.0
84
+ * @slop
85
+ */
86
+ export type Item = Insert | SeatChange | ThinkingChange;
87
+ /**
88
+ * An immutable, FIFO queue of steering events.
89
+ *
90
+ * @category models
91
+ * @since 0.1.0
92
+ * @slop
93
+ */
94
+ export interface Queue {
95
+ readonly items: ReadonlyArray<Item>;
96
+ }
97
+ /**
98
+ * The values promoted when a turn reaches its close boundary.
99
+ *
100
+ * @category models
101
+ * @since 0.1.0
102
+ * @slop
103
+ */
104
+ export interface Drain {
105
+ readonly inserts: ReadonlyArray<ModelRequest.Message>;
106
+ readonly seatChanges: ReadonlyArray<SeatChange | ThinkingChange>;
107
+ readonly remaining: Queue;
108
+ readonly queued: boolean;
109
+ /**
110
+ * Whether this boundary had already drained, so the answer is the one it gave
111
+ * the first time.
112
+ *
113
+ * This is what makes a parked run answerable. A park resumes by re-executing
114
+ * its own frames, so it reaches the same boundary again and must be told the
115
+ * same thing — and it must also be able to find out that a NEWER boundary is
116
+ * the one an operator's answer is waiting at. A run walks its park's
117
+ * boundaries until one reports `false`, which is the first one this run has
118
+ * not consulted before.
119
+ *
120
+ * Host queue bookkeeping, like {@link Drain.remaining}, and deliberately not
121
+ * part of {@link DrainRecord}: it says which attempt asked, not what the
122
+ * boundary holds, and freezing it in a journaled value would tell every later
123
+ * attempt it was the first.
124
+ */
125
+ readonly duplicate: boolean;
126
+ }
127
+ /**
128
+ * The boundary a drain is being attempted at, and whether the run would go
129
+ * idle if nothing were delivered. Followups are held back until it would.
130
+ *
131
+ * @category models
132
+ * @since 0.1.0
133
+ * @slop
134
+ */
135
+ export interface BoundaryInput {
136
+ readonly boundary: string;
137
+ readonly wouldIdle: boolean;
138
+ /**
139
+ * Set only at an honored park's boundary: why the run parked and what it
140
+ * asked. A source that can reach a person may show them the question and
141
+ * answer the drain with their reply; one that cannot ignores it.
142
+ */
143
+ readonly park?: {
144
+ readonly reason: "waiting-input" | "waiting-event" | "waiting-quota";
145
+ readonly message: string;
146
+ } | undefined;
147
+ }
148
+ /**
149
+ * The journaled record of one turn-boundary drain.
150
+ *
151
+ * A drain consumes host queue state, so it is a nondeterministic read: the
152
+ * controller journals exactly this projection through `EngineLike.record`,
153
+ * keyed on the frame and boundary, and a re-executed frame replays the record
154
+ * instead of draining an already-drained queue. Everything the controller
155
+ * folds into durable state is here; `remaining` is host queue bookkeeping and
156
+ * deliberately is not.
157
+ *
158
+ * @category schemas
159
+ * @since 0.1.0
160
+ * @slop
161
+ */
162
+ export declare const DrainRecord: Schema.Struct<{
163
+ readonly inserts: Schema.$Array<Schema.Union<readonly [typeof ModelRequest.UserMessage, typeof ModelRequest.AssistantMessage, typeof ModelRequest.ToolMessage]> & {
164
+ readonly discriminants: readonly ["user", "assistant", "tool"];
165
+ readonly cases: {
166
+ user: typeof ModelRequest.UserMessage;
167
+ assistant: typeof ModelRequest.AssistantMessage;
168
+ tool: typeof ModelRequest.ToolMessage;
169
+ };
170
+ readonly isAnyOf: <const Keys>(keys: readonly Keys[]) => (value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage) => value is Extract<ModelRequest.UserMessage, {
171
+ readonly role: Keys;
172
+ }> | Extract<ModelRequest.AssistantMessage, {
173
+ readonly role: Keys;
174
+ }> | Extract<ModelRequest.ToolMessage, {
175
+ readonly role: Keys;
176
+ }>;
177
+ readonly guards: {
178
+ user: (u: unknown) => u is ModelRequest.UserMessage;
179
+ assistant: (u: unknown) => u is ModelRequest.AssistantMessage;
180
+ tool: (u: unknown) => u is ModelRequest.ToolMessage;
181
+ };
182
+ readonly match: {
183
+ <Cases extends {
184
+ user: (value: ModelRequest.UserMessage) => any;
185
+ assistant: (value: ModelRequest.AssistantMessage) => any;
186
+ tool: (value: ModelRequest.ToolMessage) => any;
187
+ }>(value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage, cases: Cases): Cases[keyof Cases] extends (value: any) => infer R ? import("effect/Unify").Unify<R> : never;
188
+ <Cases extends {
189
+ user: (value: ModelRequest.UserMessage) => any;
190
+ assistant: (value: ModelRequest.AssistantMessage) => any;
191
+ tool: (value: ModelRequest.ToolMessage) => any;
192
+ }>(cases: Cases): (value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage) => Cases[keyof Cases] extends (value: any) => infer R ? import("effect/Unify").Unify<R> : never;
193
+ };
194
+ readonly matchOrElse: {
195
+ <Cases extends {
196
+ user?: (value: ModelRequest.UserMessage) => any;
197
+ assistant?: (value: ModelRequest.AssistantMessage) => any;
198
+ tool?: (value: ModelRequest.ToolMessage) => any;
199
+ } & { [K in Exclude<keyof Cases, "user" | "assistant" | "tool">]: never; }, OrElse extends (value: Exclude<ModelRequest.UserMessage, {
200
+ readonly role: keyof Cases;
201
+ }> | Exclude<ModelRequest.AssistantMessage, {
202
+ readonly role: keyof Cases;
203
+ }> | Exclude<ModelRequest.ToolMessage, {
204
+ readonly role: keyof Cases;
205
+ }>) => any>(value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage, cases: Cases, orElse: OrElse): import("effect/Unify").Unify<{ [K_1 in keyof Cases]-?: NonNullable<Cases[K_1]> extends (...args: Array<any>) => infer R ? R : never; }[keyof Cases] | ReturnType<OrElse>>;
206
+ <Cases extends {
207
+ user?: (value: ModelRequest.UserMessage) => any;
208
+ assistant?: (value: ModelRequest.AssistantMessage) => any;
209
+ tool?: (value: ModelRequest.ToolMessage) => any;
210
+ } & { [K in Exclude<keyof Cases, "user" | "assistant" | "tool">]: never; }, OrElse extends (value: Exclude<ModelRequest.UserMessage, {
211
+ readonly role: keyof Cases;
212
+ }> | Exclude<ModelRequest.AssistantMessage, {
213
+ readonly role: keyof Cases;
214
+ }> | Exclude<ModelRequest.ToolMessage, {
215
+ readonly role: keyof Cases;
216
+ }>) => any>(cases: Cases, orElse: OrElse): (value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage) => import("effect/Unify").Unify<{ [K_1 in keyof Cases]-?: NonNullable<Cases[K_1]> extends (...args: Array<any>) => infer R ? R : never; }[keyof Cases] | ReturnType<OrElse>>;
217
+ };
218
+ } & {
219
+ make: (message: ModelRequest.Message) => ModelRequest.Message;
220
+ user: (content: string | ModelRequest.TextPart | ReadonlyArray<ModelRequest.TextPart>) => ModelRequest.UserMessage;
221
+ assistant: (content: string | ModelRequest.AssistantContentPart | ReadonlyArray<ModelRequest.AssistantContentPart>, options?: {
222
+ readonly stopReason?: ModelRequest.StopReason | undefined;
223
+ readonly responseId?: string | undefined;
224
+ readonly itemIds?: ReadonlyArray<string> | undefined;
225
+ }) => ModelRequest.AssistantMessage;
226
+ tool: (content: ModelRequest.ToolResultPart | ReadonlyArray<ModelRequest.ToolResultPart>) => ModelRequest.ToolMessage;
227
+ }>;
228
+ readonly seatChanges: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
229
+ readonly _tag: Schema.Literal<"SeatChange">;
230
+ readonly delivery: Schema.Literal<"steer">;
231
+ readonly admittedAt: Schema.Number;
232
+ readonly seat: Schema.String;
233
+ }>, Schema.Struct<{
234
+ readonly _tag: Schema.Literal<"ThinkingChange">;
235
+ readonly delivery: Schema.Literal<"steer">;
236
+ readonly admittedAt: Schema.Number;
237
+ readonly thinking: Schema.Literals<readonly ["none", "minimal", "low", "medium", "high", "xhigh", "max"]>;
238
+ }>]>>;
239
+ readonly queued: Schema.Boolean;
240
+ /**
241
+ * Messages the run's supervisor delivers at this boundary, kept apart from
242
+ * `inserts` because they are not the person's words: the model reads them,
243
+ * and the completion brake's task never does. Absent from records written
244
+ * before the supervisor had a field of its own, and from boundaries it
245
+ * delivered nothing at.
246
+ */
247
+ readonly supervisor: Schema.optional<Schema.$Array<Schema.Union<readonly [typeof ModelRequest.UserMessage, typeof ModelRequest.AssistantMessage, typeof ModelRequest.ToolMessage]> & {
248
+ readonly discriminants: readonly ["user", "assistant", "tool"];
249
+ readonly cases: {
250
+ user: typeof ModelRequest.UserMessage;
251
+ assistant: typeof ModelRequest.AssistantMessage;
252
+ tool: typeof ModelRequest.ToolMessage;
253
+ };
254
+ readonly isAnyOf: <const Keys>(keys: readonly Keys[]) => (value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage) => value is Extract<ModelRequest.UserMessage, {
255
+ readonly role: Keys;
256
+ }> | Extract<ModelRequest.AssistantMessage, {
257
+ readonly role: Keys;
258
+ }> | Extract<ModelRequest.ToolMessage, {
259
+ readonly role: Keys;
260
+ }>;
261
+ readonly guards: {
262
+ user: (u: unknown) => u is ModelRequest.UserMessage;
263
+ assistant: (u: unknown) => u is ModelRequest.AssistantMessage;
264
+ tool: (u: unknown) => u is ModelRequest.ToolMessage;
265
+ };
266
+ readonly match: {
267
+ <Cases extends {
268
+ user: (value: ModelRequest.UserMessage) => any;
269
+ assistant: (value: ModelRequest.AssistantMessage) => any;
270
+ tool: (value: ModelRequest.ToolMessage) => any;
271
+ }>(value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage, cases: Cases): Cases[keyof Cases] extends (value: any) => infer R ? import("effect/Unify").Unify<R> : never;
272
+ <Cases extends {
273
+ user: (value: ModelRequest.UserMessage) => any;
274
+ assistant: (value: ModelRequest.AssistantMessage) => any;
275
+ tool: (value: ModelRequest.ToolMessage) => any;
276
+ }>(cases: Cases): (value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage) => Cases[keyof Cases] extends (value: any) => infer R ? import("effect/Unify").Unify<R> : never;
277
+ };
278
+ readonly matchOrElse: {
279
+ <Cases extends {
280
+ user?: (value: ModelRequest.UserMessage) => any;
281
+ assistant?: (value: ModelRequest.AssistantMessage) => any;
282
+ tool?: (value: ModelRequest.ToolMessage) => any;
283
+ } & { [K in Exclude<keyof Cases, "user" | "assistant" | "tool">]: never; }, OrElse extends (value: Exclude<ModelRequest.UserMessage, {
284
+ readonly role: keyof Cases;
285
+ }> | Exclude<ModelRequest.AssistantMessage, {
286
+ readonly role: keyof Cases;
287
+ }> | Exclude<ModelRequest.ToolMessage, {
288
+ readonly role: keyof Cases;
289
+ }>) => any>(value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage, cases: Cases, orElse: OrElse): import("effect/Unify").Unify<{ [K_1 in keyof Cases]-?: NonNullable<Cases[K_1]> extends (...args: Array<any>) => infer R ? R : never; }[keyof Cases] | ReturnType<OrElse>>;
290
+ <Cases extends {
291
+ user?: (value: ModelRequest.UserMessage) => any;
292
+ assistant?: (value: ModelRequest.AssistantMessage) => any;
293
+ tool?: (value: ModelRequest.ToolMessage) => any;
294
+ } & { [K in Exclude<keyof Cases, "user" | "assistant" | "tool">]: never; }, OrElse extends (value: Exclude<ModelRequest.UserMessage, {
295
+ readonly role: keyof Cases;
296
+ }> | Exclude<ModelRequest.AssistantMessage, {
297
+ readonly role: keyof Cases;
298
+ }> | Exclude<ModelRequest.ToolMessage, {
299
+ readonly role: keyof Cases;
300
+ }>) => any>(cases: Cases, orElse: OrElse): (value: ModelRequest.UserMessage | ModelRequest.AssistantMessage | ModelRequest.ToolMessage) => import("effect/Unify").Unify<{ [K_1 in keyof Cases]-?: NonNullable<Cases[K_1]> extends (...args: Array<any>) => infer R ? R : never; }[keyof Cases] | ReturnType<OrElse>>;
301
+ };
302
+ } & {
303
+ make: (message: ModelRequest.Message) => ModelRequest.Message;
304
+ user: (content: string | ModelRequest.TextPart | ReadonlyArray<ModelRequest.TextPart>) => ModelRequest.UserMessage;
305
+ assistant: (content: string | ModelRequest.AssistantContentPart | ReadonlyArray<ModelRequest.AssistantContentPart>, options?: {
306
+ readonly stopReason?: ModelRequest.StopReason | undefined;
307
+ readonly responseId?: string | undefined;
308
+ readonly itemIds?: ReadonlyArray<string> | undefined;
309
+ }) => ModelRequest.AssistantMessage;
310
+ tool: (content: ModelRequest.ToolResultPart | ReadonlyArray<ModelRequest.ToolResultPart>) => ModelRequest.ToolMessage;
311
+ }>>;
312
+ /**
313
+ * Keys of the memory rows among `supervisor`, which the run has now been
314
+ * shown. Absent from boundaries that delivered none.
315
+ */
316
+ readonly memory: Schema.optional<Schema.$Array<Schema.String>>;
317
+ /** The monitor whose message leads `supervisor`, when one was delivered. */
318
+ readonly monitor: Schema.optional<Schema.String>;
319
+ /** Crossed monitors this boundary withheld, and why. Absent when none was. */
320
+ readonly suppressed: Schema.optional<Schema.$Array<Schema.Struct<{
321
+ readonly id: Schema.String;
322
+ readonly reason: Schema.Literals<readonly ["streak", "cooldown", "limit", "slot"]>;
323
+ }>>>;
324
+ /**
325
+ * The monitor ledger after this boundary gated a reading, which the run
326
+ * carries into its next frame. Absent from boundaries that gated none.
327
+ */
328
+ readonly monitorLedger: Schema.optional<Schema.$Record<Schema.String, Schema.Struct<{
329
+ readonly streak: Schema.Int;
330
+ readonly delivered: Schema.Int;
331
+ readonly lastFrame: Schema.Int;
332
+ }>>>;
333
+ /**
334
+ * Jev's answers about transcript segments, by digest, which the run stores
335
+ * for its next compaction. The model is not sent them. Absent from
336
+ * boundaries that took none.
337
+ */
338
+ readonly marks: Schema.optional<Schema.$Array<Schema.Struct<{
339
+ readonly remove: Schema.Number;
340
+ readonly keep: Schema.Number;
341
+ readonly digest: Schema.String;
342
+ }>>>;
343
+ /**
344
+ * The context triggers the delivered supervisor reading fired, which
345
+ * compact the run at its next frame. Absent from boundaries that took none.
346
+ */
347
+ readonly compact: Schema.optional<Schema.$Array<Schema.Literals<readonly ["budget", "outdated_context", "irrelevant_context"]>>>;
348
+ }>;
349
+ /**
350
+ * The journaled record of one turn-boundary drain.
351
+ *
352
+ * @category models
353
+ * @since 0.1.0
354
+ * @slop
355
+ */
356
+ export type DrainRecord = typeof DrainRecord.Type;
357
+ /**
358
+ * Projects a {@link Drain} into its journaled record.
359
+ *
360
+ * @category conversions
361
+ * @since 0.1.0
362
+ * @slop
363
+ */
364
+ export declare const drainRecord: (drain: Drain) => DrainRecord;
365
+ /**
366
+ * Creates an empty immutable steering queue.
367
+ *
368
+ * @category constructors
369
+ * @since 0.1.0
370
+ * @slop
371
+ */
372
+ export declare const empty: () => Queue;
373
+ /**
374
+ * Appends an item without mutating the prior queue.
375
+ *
376
+ * @category operations
377
+ * @since 0.1.0
378
+ * @slop
379
+ */
380
+ export declare const enqueue: (queue: Queue, item: Item) => Queue;
381
+ /**
382
+ * Drains only items admitted at or before the turn's fixed cutoff.
383
+ *
384
+ * @category operations
385
+ * @since 0.1.0
386
+ * @slop
387
+ */
388
+ export declare const drainAtClose: (queue: Queue, cutoff: number) => Drain;
389
+ /**
390
+ * Source of a serializable steering-queue snapshot. Storage and persistence
391
+ * promotion are deliberately supplied by the host.
392
+ *
393
+ * @category services
394
+ * @since 0.1.0
395
+ * @slop
396
+ */
397
+ export interface Source {
398
+ readonly read: () => Effect.Effect<Queue, HarnessError>;
399
+ /**
400
+ * Promotes what one boundary may deliver.
401
+ *
402
+ * A drain is IDEMPOTENT in its boundary string: a second drain at one
403
+ * boundary promotes nothing and hands back exactly what the first one
404
+ * promoted, with {@link Drain.duplicate} set. That is not an optimization, it
405
+ * is the contract a resumed run depends on — a re-executed frame drains the
406
+ * boundaries it already drained and must be told the same thing, or it
407
+ * rebuilds a different context and re-keys every later sealed step. A source
408
+ * that promotes afresh each time cannot answer a parked run and will deliver
409
+ * one message many times.
410
+ */
411
+ readonly drain: (input: BoundaryInput) => Effect.Effect<Drain, HarnessError>;
412
+ }
413
+ /**
414
+ * The methods {@link make} needs to build a {@link Source}.
415
+ *
416
+ * @category models
417
+ * @since 0.1.0
418
+ * @slop
419
+ */
420
+ export interface SourceInput {
421
+ readonly read: () => Effect.Effect<Queue, HarnessError>;
422
+ readonly drain: (input: BoundaryInput) => Effect.Effect<Drain, HarnessError>;
423
+ }
424
+ /**
425
+ * Service tag for the external steering queue source.
426
+ *
427
+ * @category services
428
+ * @since 0.1.0
429
+ * @slop
430
+ */
431
+ export declare const Source: Context.Service<Source, Source>;
432
+ /**
433
+ * Constructs a steering source service.
434
+ *
435
+ * @category constructors
436
+ * @since 0.1.0
437
+ * @slop
438
+ */
439
+ export declare const make: (implementation: SourceInput) => Source;
440
+ /**
441
+ * Creates a source that always returns an empty queue.
442
+ *
443
+ * @category constructors
444
+ * @since 0.1.0
445
+ * @slop
446
+ */
447
+ export declare const makeNoop: (overrides?: Partial<Source>) => Source;
448
+ /**
449
+ * Provides a steering source as a layer.
450
+ *
451
+ * @category layers
452
+ * @since 0.1.0
453
+ * @slop
454
+ */
455
+ export declare const layer: (implementation: SourceInput) => Layer.Layer<Source>;
456
+ /**
457
+ * Provides an empty steering source as a layer.
458
+ *
459
+ * @category layers
460
+ * @since 0.1.0
461
+ * @slop
462
+ */
463
+ export declare const layerNoop: (overrides?: Partial<Source>) => Layer.Layer<Source>;
464
+ //# sourceMappingURL=Steering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Steering.d.ts","sourceRoot":"","sources":["../../src/Steering.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var Steering_exports = {};
30
+ __export(Steering_exports, {
31
+ DrainRecord: () => DrainRecord,
32
+ Source: () => Source,
33
+ drainAtClose: () => drainAtClose,
34
+ drainRecord: () => drainRecord,
35
+ empty: () => empty,
36
+ enqueue: () => enqueue,
37
+ layer: () => layer,
38
+ layerNoop: () => layerNoop,
39
+ make: () => make,
40
+ makeNoop: () => makeNoop
41
+ });
42
+ module.exports = __toCommonJS(Steering_exports);
43
+ var ModelRequest = __toESM(require("@smthrs/model/ModelRequest"), 1);
44
+ var import_effect = require("effect");
45
+ var AgentEvent = __toESM(require("./AgentEvent.js"), 1);
46
+ var compactionMarks = __toESM(require("./internal/compactionMarks.js"), 1);
47
+ var Monitor = __toESM(require("./Monitor.js"), 1);
48
+ const SeatChangeRecord = import_effect.Schema.Struct({
49
+ _tag: import_effect.Schema.Literal("SeatChange"),
50
+ delivery: import_effect.Schema.Literal("steer"),
51
+ admittedAt: import_effect.Schema.Number,
52
+ seat: import_effect.Schema.String
53
+ });
54
+ const ThinkingChangeRecord = import_effect.Schema.Struct({
55
+ _tag: import_effect.Schema.Literal("ThinkingChange"),
56
+ delivery: import_effect.Schema.Literal("steer"),
57
+ admittedAt: import_effect.Schema.Number,
58
+ thinking: ModelRequest.ReasoningEffort
59
+ });
60
+ const DrainRecord = import_effect.Schema.Struct({
61
+ inserts: import_effect.Schema.Array(ModelRequest.Message),
62
+ seatChanges: import_effect.Schema.Array(import_effect.Schema.Union([SeatChangeRecord, ThinkingChangeRecord])),
63
+ queued: import_effect.Schema.Boolean,
64
+ /**
65
+ * Messages the run's supervisor delivers at this boundary, kept apart from
66
+ * `inserts` because they are not the person's words: the model reads them,
67
+ * and the completion brake's task never does. Absent from records written
68
+ * before the supervisor had a field of its own, and from boundaries it
69
+ * delivered nothing at.
70
+ */
71
+ supervisor: import_effect.Schema.optional(import_effect.Schema.Array(ModelRequest.Message)),
72
+ /**
73
+ * Keys of the memory rows among `supervisor`, which the run has now been
74
+ * shown. Absent from boundaries that delivered none.
75
+ */
76
+ memory: import_effect.Schema.optional(import_effect.Schema.Array(import_effect.Schema.String)),
77
+ /** The monitor whose message leads `supervisor`, when one was delivered. */
78
+ monitor: import_effect.Schema.optional(import_effect.Schema.String),
79
+ /** Crossed monitors this boundary withheld, and why. Absent when none was. */
80
+ suppressed: import_effect.Schema.optional(import_effect.Schema.Array(import_effect.Schema.Struct({ id: import_effect.Schema.String, reason: AgentEvent.Suppression }))),
81
+ /**
82
+ * The monitor ledger after this boundary gated a reading, which the run
83
+ * carries into its next frame. Absent from boundaries that gated none.
84
+ */
85
+ monitorLedger: import_effect.Schema.optional(Monitor.Ledger),
86
+ /**
87
+ * Jev's answers about transcript segments, by digest, which the run stores
88
+ * for its next compaction. The model is not sent them. Absent from
89
+ * boundaries that took none.
90
+ */
91
+ marks: import_effect.Schema.optional(import_effect.Schema.Array(compactionMarks.Marking)),
92
+ /**
93
+ * The context triggers the delivered supervisor reading fired, which
94
+ * compact the run at its next frame. Absent from boundaries that took none.
95
+ */
96
+ compact: import_effect.Schema.optional(import_effect.Schema.Array(AgentEvent.CompactionCause))
97
+ });
98
+ const drainRecord = (drain) => ({
99
+ inserts: drain.inserts,
100
+ seatChanges: drain.seatChanges,
101
+ queued: drain.queued
102
+ });
103
+ const immutable = (items) => Object.freeze({ items: Object.freeze([...items]) });
104
+ const immutableItem = (item) => Object.freeze({ ...item });
105
+ const empty = () => immutable([]);
106
+ const enqueue = (queue, item) => immutable([...queue.items, immutableItem(item)]);
107
+ const drainAtClose = (queue, cutoff) => {
108
+ const inserts = [];
109
+ const seatChanges = [];
110
+ const remaining = [];
111
+ for (const item of queue.items) {
112
+ if (item.delivery === "queue" || item.admittedAt > cutoff) {
113
+ remaining.push(item);
114
+ continue;
115
+ }
116
+ switch (item._tag) {
117
+ case "Insert":
118
+ inserts.push(item.message);
119
+ break;
120
+ case "SeatChange":
121
+ case "ThinkingChange":
122
+ seatChanges.push(item);
123
+ break;
124
+ }
125
+ }
126
+ return {
127
+ inserts: Object.freeze(inserts),
128
+ seatChanges: Object.freeze(seatChanges),
129
+ remaining: immutable(remaining),
130
+ queued: false,
131
+ // An in-memory cutoff drain keeps no boundary ledger, so it can never say
132
+ // it has answered this boundary before.
133
+ duplicate: false
134
+ };
135
+ };
136
+ const Source = import_effect.Context.Service("@smthrs/harness/Steering/Source");
137
+ const make = (implementation) => Source.of(implementation);
138
+ const makeNoop = (overrides = {}) => make({
139
+ read: import_effect.Effect.fn("Steering.Source.read")(() => import_effect.Effect.succeed(empty())),
140
+ drain: import_effect.Effect.fn("Steering.Source.drain")(
141
+ () => import_effect.Effect.succeed({
142
+ inserts: [],
143
+ seatChanges: [],
144
+ remaining: empty(),
145
+ queued: false,
146
+ duplicate: false
147
+ })
148
+ ),
149
+ ...overrides
150
+ });
151
+ const layer = (implementation) => import_effect.Layer.succeed(Source)(make(implementation));
152
+ const layerNoop = (overrides = {}) => import_effect.Layer.succeed(Source)(makeNoop(overrides));
153
+ //# sourceMappingURL=Steering.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/Steering.ts"],
4
+ "sourcesContent": ["/**\n * Turn-boundary steering values and their source contract.\n *\n * Governing design: `../docs/concepts.md#notification-queue`.\n *\n * @since 0.1.0\n */\n\nimport * as ModelRequest from \"@smthrs/model/ModelRequest\"\nimport { Context, Effect, Layer, Schema } from \"effect\"\nimport * as AgentEvent from \"./AgentEvent.ts\"\nimport type { HarnessError } from \"./HarnessError.ts\"\nimport * as compactionMarks from \"./internal/compactionMarks.ts\"\nimport * as Monitor from \"./Monitor.ts\"\n\n/**\n * The boundary at which a transcript insertion may be promoted.\n *\n * @category models\n * @since 0.1.0\n * @slop\n */\nexport type Delivery = \"steer\" | \"queue\"\n\n/**\n * A transcript insertion promoted at the next turn boundary.\n *\n * @category models\n * @since 0.1.0\n * @slop\n */\nexport interface SteerInsert {\n readonly _tag: \"Insert\"\n readonly delivery: \"steer\"\n readonly admittedAt: number\n readonly message: ModelRequest.Message\n}\n\n/**\n * A transcript insertion promoted only when the run would otherwise go idle.\n *\n * @category models\n * @since 0.1.0\n * @slop\n */\nexport interface QueueInsert {\n readonly _tag: \"Insert\"\n readonly delivery: \"queue\"\n readonly admittedAt: number\n readonly message: ModelRequest.Message\n}\n\n/**\n * A transcript insertion admitted for a future turn.\n *\n * @category models\n * @since 0.1.0\n * @slop\n */\nexport type Insert = SteerInsert | QueueInsert\n\n/**\n * A model-seat change that applies only after the current turn closes.\n *\n * @category models\n * @since 0.1.0\n * @slop\n */\nexport interface SeatChange {\n readonly _tag: \"SeatChange\"\n readonly delivery: \"steer\"\n readonly admittedAt: number\n readonly seat: string\n}\n\n/**\n * A thinking-level change that applies only after the current turn closes.\n *\n * @category models\n * @since 0.1.0\n * @slop\n */\nexport interface ThinkingChange {\n readonly _tag: \"ThinkingChange\"\n readonly delivery: \"steer\"\n readonly admittedAt: number\n readonly thinking: ModelRequest.ReasoningEffort\n}\n\n/**\n * A serializable steering event.\n *\n * @category models\n * @since 0.1.0\n * @slop\n */\nexport type Item = Insert | SeatChange | ThinkingChange\n\n/**\n * An immutable, FIFO queue of steering events.\n *\n * @category models\n * @since 0.1.0\n * @slop\n */\nexport interface Queue {\n readonly items: ReadonlyArray<Item>\n}\n\n/**\n * The values promoted when a turn reaches its close boundary.\n *\n * @category models\n * @since 0.1.0\n * @slop\n */\nexport interface Drain {\n readonly inserts: ReadonlyArray<ModelRequest.Message>\n readonly seatChanges: ReadonlyArray<SeatChange | ThinkingChange>\n readonly remaining: Queue\n readonly queued: boolean\n /**\n * Whether this boundary had already drained, so the answer is the one it gave\n * the first time.\n *\n * This is what makes a parked run answerable. A park resumes by re-executing\n * its own frames, so it reaches the same boundary again and must be told the\n * same thing \u2014 and it must also be able to find out that a NEWER boundary is\n * the one an operator's answer is waiting at. A run walks its park's\n * boundaries until one reports `false`, which is the first one this run has\n * not consulted before.\n *\n * Host queue bookkeeping, like {@link Drain.remaining}, and deliberately not\n * part of {@link DrainRecord}: it says which attempt asked, not what the\n * boundary holds, and freezing it in a journaled value would tell every later\n * attempt it was the first.\n */\n readonly duplicate: boolean\n}\n\n/**\n * The boundary a drain is being attempted at, and whether the run would go\n * idle if nothing were delivered. Followups are held back until it would.\n *\n * @category models\n * @since 0.1.0\n * @slop\n */\nexport interface BoundaryInput {\n readonly boundary: string\n readonly wouldIdle: boolean\n /**\n * Set only at an honored park's boundary: why the run parked and what it\n * asked. A source that can reach a person may show them the question and\n * answer the drain with their reply; one that cannot ignores it.\n */\n readonly park?: {\n readonly reason: \"waiting-input\" | \"waiting-event\" | \"waiting-quota\"\n readonly message: string\n } | undefined\n}\n\nconst SeatChangeRecord = Schema.Struct({\n _tag: Schema.Literal(\"SeatChange\"),\n delivery: Schema.Literal(\"steer\"),\n admittedAt: Schema.Number,\n seat: Schema.String\n})\n\nconst ThinkingChangeRecord = Schema.Struct({\n _tag: Schema.Literal(\"ThinkingChange\"),\n delivery: Schema.Literal(\"steer\"),\n admittedAt: Schema.Number,\n thinking: ModelRequest.ReasoningEffort\n})\n\n/**\n * The journaled record of one turn-boundary drain.\n *\n * A drain consumes host queue state, so it is a nondeterministic read: the\n * controller journals exactly this projection through `EngineLike.record`,\n * keyed on the frame and boundary, and a re-executed frame replays the record\n * instead of draining an already-drained queue. Everything the controller\n * folds into durable state is here; `remaining` is host queue bookkeeping and\n * deliberately is not.\n *\n * @category schemas\n * @since 0.1.0\n * @slop\n */\nexport const DrainRecord = Schema.Struct({\n inserts: Schema.Array(ModelRequest.Message),\n seatChanges: Schema.Array(Schema.Union([SeatChangeRecord, ThinkingChangeRecord])),\n queued: Schema.Boolean,\n /**\n * Messages the run's supervisor delivers at this boundary, kept apart from\n * `inserts` because they are not the person's words: the model reads them,\n * and the completion brake's task never does. Absent from records written\n * before the supervisor had a field of its own, and from boundaries it\n * delivered nothing at.\n */\n supervisor: Schema.optional(Schema.Array(ModelRequest.Message)),\n /**\n * Keys of the memory rows among `supervisor`, which the run has now been\n * shown. Absent from boundaries that delivered none.\n */\n memory: Schema.optional(Schema.Array(Schema.String)),\n /** The monitor whose message leads `supervisor`, when one was delivered. */\n monitor: Schema.optional(Schema.String),\n /** Crossed monitors this boundary withheld, and why. Absent when none was. */\n suppressed: Schema.optional(Schema.Array(Schema.Struct({ id: Schema.String, reason: AgentEvent.Suppression }))),\n /**\n * The monitor ledger after this boundary gated a reading, which the run\n * carries into its next frame. Absent from boundaries that gated none.\n */\n monitorLedger: Schema.optional(Monitor.Ledger),\n /**\n * Jev's answers about transcript segments, by digest, which the run stores\n * for its next compaction. The model is not sent them. Absent from\n * boundaries that took none.\n */\n marks: Schema.optional(Schema.Array(compactionMarks.Marking)),\n /**\n * The context triggers the delivered supervisor reading fired, which\n * compact the run at its next frame. Absent from boundaries that took none.\n */\n compact: Schema.optional(Schema.Array(AgentEvent.CompactionCause))\n})\n\n/**\n * The journaled record of one turn-boundary drain.\n *\n * @category models\n * @since 0.1.0\n * @slop\n */\nexport type DrainRecord = typeof DrainRecord.Type\n\n/**\n * Projects a {@link Drain} into its journaled record.\n *\n * @category conversions\n * @since 0.1.0\n * @slop\n */\nexport const drainRecord = (drain: Drain): DrainRecord => ({\n inserts: drain.inserts,\n seatChanges: drain.seatChanges,\n queued: drain.queued\n})\n\nconst immutable = (items: ReadonlyArray<Item>): Queue => Object.freeze({ items: Object.freeze([...items]) })\n\nconst immutableItem = (item: Item): Item => Object.freeze({ ...item })\n\n/**\n * Creates an empty immutable steering queue.\n *\n * @category constructors\n * @since 0.1.0\n * @slop\n */\nexport const empty = (): Queue => immutable([])\n\n/**\n * Appends an item without mutating the prior queue.\n *\n * @category operations\n * @since 0.1.0\n * @slop\n */\nexport const enqueue = (queue: Queue, item: Item): Queue => immutable([...queue.items, immutableItem(item)])\n\n/**\n * Drains only items admitted at or before the turn's fixed cutoff.\n *\n * @category operations\n * @since 0.1.0\n * @slop\n */\nexport const drainAtClose = (queue: Queue, cutoff: number): Drain => {\n const inserts: Array<ModelRequest.Message> = []\n const seatChanges: Array<SeatChange | ThinkingChange> = []\n const remaining: Array<Item> = []\n for (const item of queue.items) {\n if (item.delivery === \"queue\" || item.admittedAt > cutoff) {\n remaining.push(item)\n continue\n }\n switch (item._tag) {\n case \"Insert\":\n inserts.push(item.message)\n break\n case \"SeatChange\":\n case \"ThinkingChange\":\n seatChanges.push(item)\n break\n }\n }\n return {\n inserts: Object.freeze(inserts),\n seatChanges: Object.freeze(seatChanges),\n remaining: immutable(remaining),\n queued: false,\n // An in-memory cutoff drain keeps no boundary ledger, so it can never say\n // it has answered this boundary before.\n duplicate: false\n }\n}\n\n/**\n * Source of a serializable steering-queue snapshot. Storage and persistence\n * promotion are deliberately supplied by the host.\n *\n * @category services\n * @since 0.1.0\n * @slop\n */\nexport interface Source {\n readonly read: () => Effect.Effect<Queue, HarnessError>\n /**\n * Promotes what one boundary may deliver.\n *\n * A drain is IDEMPOTENT in its boundary string: a second drain at one\n * boundary promotes nothing and hands back exactly what the first one\n * promoted, with {@link Drain.duplicate} set. That is not an optimization, it\n * is the contract a resumed run depends on \u2014 a re-executed frame drains the\n * boundaries it already drained and must be told the same thing, or it\n * rebuilds a different context and re-keys every later sealed step. A source\n * that promotes afresh each time cannot answer a parked run and will deliver\n * one message many times.\n */\n readonly drain: (input: BoundaryInput) => Effect.Effect<Drain, HarnessError>\n}\n\n/**\n * The methods {@link make} needs to build a {@link Source}.\n *\n * @category models\n * @since 0.1.0\n * @slop\n */\nexport interface SourceInput {\n readonly read: () => Effect.Effect<Queue, HarnessError>\n readonly drain: (input: BoundaryInput) => Effect.Effect<Drain, HarnessError>\n}\n\n/**\n * Service tag for the external steering queue source.\n *\n * @category services\n * @since 0.1.0\n * @slop\n */\nexport const Source: Context.Service<Source, Source> = Context.Service(\"@smthrs/harness/Steering/Source\")\n\n/**\n * Constructs a steering source service.\n *\n * @category constructors\n * @since 0.1.0\n * @slop\n */\nexport const make = (implementation: SourceInput): Source => Source.of(implementation)\n\n/**\n * Creates a source that always returns an empty queue.\n *\n * @category constructors\n * @since 0.1.0\n * @slop\n */\nexport const makeNoop = (overrides: Partial<Source> = {}): Source =>\n make({\n read: Effect.fn(\"Steering.Source.read\")(() => Effect.succeed(empty())),\n drain: Effect.fn(\"Steering.Source.drain\")(() =>\n Effect.succeed({\n inserts: [],\n seatChanges: [],\n remaining: empty(),\n queued: false,\n duplicate: false\n })\n ),\n ...overrides\n })\n\n/**\n * Provides a steering source as a layer.\n *\n * @category layers\n * @since 0.1.0\n * @slop\n */\nexport const layer = (implementation: SourceInput): Layer.Layer<Source> => Layer.succeed(Source)(make(implementation))\n\n/**\n * Provides an empty steering source as a layer.\n *\n * @category layers\n * @since 0.1.0\n * @slop\n */\nexport const layerNoop = (overrides: Partial<Source> = {}): Layer.Layer<Source> =>\n Layer.succeed(Source)(makeNoop(overrides))\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }