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

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 +985 -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 +1142 -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,370 @@
1
+ /**
2
+ * Declarative supervisor monitors: what one reading can put in front of the
3
+ * run, and when.
4
+ *
5
+ * A monitor turns one {@link Supervisor.Reading} into a probability `p` and a
6
+ * sentence. A {@link Questioned} monitor adds one boolean question to the
7
+ * supervisor's single Jev call; a {@link Derived} monitor scores answers the
8
+ * supervisor already asks and costs nothing. {@link evaluate} runs at reading
9
+ * time and renders every crossed monitor's text against the reading's own
10
+ * snapshot. {@link gate} runs later, at the recorded steering drain, against
11
+ * the durable {@link Ledger}: it applies each monitor's streak, cooldown and
12
+ * limit and delivers at most one message.
13
+ *
14
+ * Both halves are pure. Nothing here asks Jev, journals, or steers.
15
+ *
16
+ * @since 1.0.0-rc.0
17
+ */
18
+ import * as Digest from "@smthrs/core/Digest";
19
+ import * as Fault from "@smthrs/flow/Fault";
20
+ import * as Classifier from "@smthrs/model/Classifier";
21
+ import * as Effect from "effect/Effect";
22
+ import * as Schema from "effect/Schema";
23
+ import { NonNegativeSafeInt } from "./internal/nonNegativeSafeInt.js";
24
+ import * as Supervisor from "./Supervisor.js";
25
+ /**
26
+ * The budget each kind starts from.
27
+ *
28
+ * @category constants
29
+ * @since 1.0.0-rc.0
30
+ */
31
+ export const budgets = {
32
+ lint: { at: 0.8, consecutive: 1, cooldownFrames: 6, limit: 2, priority: 30 },
33
+ mood: { at: 0.8, consecutive: 2, cooldownFrames: 6, limit: 2, priority: 20 },
34
+ skill: { at: 0.85, consecutive: 1, cooldownFrames: 6, limit: 1, priority: 10 }
35
+ };
36
+ /**
37
+ * The ids a monitor may take.
38
+ *
39
+ * @category constants
40
+ * @since 1.0.0-rc.0
41
+ */
42
+ export const idPattern = /^[a-z][a-z0-9_]{0,47}$/;
43
+ /**
44
+ * The classifier question id of one monitor.
45
+ *
46
+ * @category conversions
47
+ * @since 1.0.0-rc.0
48
+ */
49
+ export const questionId = (id) => `${Supervisor.monitorPrefix}${id}`;
50
+ /**
51
+ * Declares one monitor, filling any budget field from its kind's
52
+ * {@link budgets}.
53
+ *
54
+ * @category constructors
55
+ * @since 1.0.0-rc.0
56
+ */
57
+ export const make = (input) => ({ ...budgets[input.kind], ...input });
58
+ /**
59
+ * A monitor declaration that cannot be run.
60
+ *
61
+ * @category errors
62
+ * @since 1.0.0-rc.0
63
+ */
64
+ export class InvalidMonitor extends Schema.TaggedError()("@smthrs/harness/Monitor/InvalidMonitor", {
65
+ id: Schema.String,
66
+ message: Schema.String
67
+ }) {
68
+ }
69
+ Fault.register("@smthrs/harness/Monitor/InvalidMonitor", "bug");
70
+ const count = (value) => Number.isSafeInteger(value) && value >= 0;
71
+ /** Ids each supervisor reading declares itself: its skill monitors and the use-jev lint. */
72
+ const reserved = /^(?:skill_|use_jev$)/;
73
+ const invalid = (monitor, seen) => {
74
+ if (!idPattern.test(monitor.id))
75
+ return `id must match ${idPattern.source}`;
76
+ if (reserved.test(monitor.id))
77
+ return "id is reserved";
78
+ if (seen.has(monitor.id))
79
+ return "id is declared twice";
80
+ if (!(monitor.at > 0 && monitor.at <= 1))
81
+ return `at ${monitor.at} is outside (0, 1]`;
82
+ for (const field of ["consecutive", "cooldownFrames", "limit"]) {
83
+ if (!count(monitor[field]))
84
+ return `${field} ${monitor[field]} is not a non-negative integer`;
85
+ }
86
+ return undefined;
87
+ };
88
+ /**
89
+ * Admits a set of host monitors, or names the first one that cannot be run.
90
+ * The ids each reading adds (`skill_*`, `use_jev`) are reserved.
91
+ *
92
+ * @category validation
93
+ * @since 1.0.0-rc.0
94
+ */
95
+ export const validate = (monitors) => Effect.suspend(() => {
96
+ const seen = new Set();
97
+ for (const monitor of monitors) {
98
+ const message = invalid(monitor, seen);
99
+ if (message !== undefined)
100
+ return Effect.fail(new InvalidMonitor({ id: monitor.id, message }));
101
+ seen.add(monitor.id);
102
+ }
103
+ return Effect.succeed(monitors);
104
+ });
105
+ /**
106
+ * The supervisor's own nudge as a monitor: it crosses exactly when
107
+ * {@link Supervisor.crosses} does and says {@link Supervisor.nudge}, with no
108
+ * streak, cooldown or limit.
109
+ *
110
+ * @category constructors
111
+ * @since 1.0.0-rc.0
112
+ */
113
+ export const lint = () => [
114
+ make({
115
+ _tag: "Derived",
116
+ id: "supervisor",
117
+ kind: "lint",
118
+ at: 0.5,
119
+ consecutive: 1,
120
+ cooldownFrames: 0,
121
+ limit: Number.MAX_SAFE_INTEGER,
122
+ priority: 30,
123
+ score: (reading) => Supervisor.crosses(reading) ? 1 : 0,
124
+ say: Supervisor.nudge
125
+ })
126
+ ];
127
+ /**
128
+ * What the `paranoid` monitor says.
129
+ *
130
+ * @category constants
131
+ * @since 1.0.0-rc.0
132
+ */
133
+ export const paranoidText = "Stance: paranoid. Treat your last result as wrong until a printed check shows it.";
134
+ /**
135
+ * What the `careful` monitor says.
136
+ *
137
+ * @category constants
138
+ * @since 1.0.0-rc.0
139
+ */
140
+ export const carefulText = "Stance: careful. No destructive or out-of-scope call; ask with ctx.park if unsure.";
141
+ /**
142
+ * What the `step_back` monitor says.
143
+ *
144
+ * @category constants
145
+ * @since 1.0.0-rc.0
146
+ */
147
+ export const stepBackText = "Stance: step back. Name the wrong assumption before the next edit.";
148
+ /**
149
+ * What the `clarify` monitor says.
150
+ *
151
+ * @category constants
152
+ * @since 1.0.0-rc.0
153
+ */
154
+ export const clarifyText = "Stance: unsure of the task. Restate it in one line and check it against the files.";
155
+ const mood = (id, text, fires, budget = {}) => make({
156
+ _tag: "Derived",
157
+ id,
158
+ kind: "mood",
159
+ ...budget,
160
+ score: (reading, snapshot) => fires(reading, snapshot) ? 1 : 0,
161
+ say: () => text
162
+ });
163
+ /**
164
+ * Stance monitors over the emotions and help the supervisor already reads.
165
+ *
166
+ * `paranoid` scores on a signal the `supervisor` lint does not own: a demand
167
+ * counter increased. A completion the run survived is a bounced one — a
168
+ * standing completion ends the run, so no reading ever follows it — and a
169
+ * bounce is what spends a narrowing, unmoved, unresolved or claim demand, so
170
+ * a frame whose transition is `complete` in the snapshot is the increase.
171
+ * Scoring it on `suspect` instead crossed exactly when the priority-30 lint
172
+ * did, and the mood never won the slot (#2028).
173
+ *
174
+ * @category constructors
175
+ * @since 1.0.0-rc.0
176
+ */
177
+ export const moods = () => [
178
+ mood("paranoid", paranoidText, (reading, snapshot) => reading.emotions.confident === "strong" &&
179
+ snapshot.frames.some((frame) => frame.transition === "complete")),
180
+ mood("careful", carefulText, (reading) => reading.emotions.scared === "strong" || reading.needsHelp === "risky_action"),
181
+ mood("step_back", stepBackText, (reading) => reading.emotions.frustrated === "strong", { consecutive: 2 }),
182
+ mood("clarify", clarifyText, (reading) => reading.emotions.confused === "strong")
183
+ ];
184
+ /**
185
+ * The built-in monitors: {@link lint} then {@link moods}.
186
+ *
187
+ * @category constructors
188
+ * @since 1.0.0-rc.0
189
+ */
190
+ export const defaults = () => [...lint(), ...moods()];
191
+ const skillQuestions = [];
192
+ /** The question about `skills[index]`, one object per index so the classifier is declared once. */
193
+ const skillQuestion = (index) => skillQuestions[index] ??= Classifier.boolean({
194
+ instructions: `Would reading skills[${index}] now change what the run does next for the task as stated?`,
195
+ criteria: {
196
+ true: `the newest frames do the work skills[${index}] describes without having read it, or violate what it prescribes`,
197
+ false: "unrelated, or the run already follows it"
198
+ }
199
+ });
200
+ const skillId = (name) => `skill_${name.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "")}`.slice(0, 48);
201
+ /**
202
+ * What the skill monitor for `name` says.
203
+ *
204
+ * @category conversions
205
+ * @since 1.0.0-rc.0
206
+ */
207
+ export const skillText = (name, path) => `Read skill \`${name}\` first: await ctx.call("read", { path: ${JSON.stringify(path)} })`;
208
+ /**
209
+ * One monitor per skill the snapshot offers, asking whether reading it now
210
+ * would change what the run does next. Its id is `skill_` and the name made
211
+ * safe, with a digest of the name after it when two names make the same id.
212
+ * It says only the skill's name and path, never its description.
213
+ *
214
+ * @category constructors
215
+ * @since 1.0.0-rc.0
216
+ */
217
+ export const skills = (snapshot) => {
218
+ const seen = new Set();
219
+ return snapshot.skills.map((skill, index) => {
220
+ const plain = skillId(skill.name);
221
+ const id = seen.has(plain) ? `${plain.slice(0, 39)}_${Digest.digest(skill.name).slice(0, 8)}` : plain;
222
+ seen.add(id);
223
+ const text = skillText(skill.name, skill.path);
224
+ return make({ _tag: "Questioned", id, kind: "skill", question: skillQuestion(index), say: () => text });
225
+ });
226
+ };
227
+ /**
228
+ * What the `use_jev` monitor says.
229
+ *
230
+ * @category constants
231
+ * @since 1.0.0-rc.0
232
+ */
233
+ export const useJevText = "Judge those items with one jev call, one question per item.";
234
+ const useJevQuestion = Classifier.boolean({
235
+ instructions: "Do the newest frames print lists of items (files, hits, failures, candidates) and then choose among them by hand?",
236
+ criteria: {
237
+ true: "a frame prints several items and a later cell or its prose picks among them without a jev call",
238
+ false: "no list is chosen from by hand, or the choice was a jev call"
239
+ }
240
+ });
241
+ /**
242
+ * The lint that nudges a run choosing among printed items by hand toward one
243
+ * `jev` call, asked only while the run can call `jev`.
244
+ *
245
+ * @category constructors
246
+ * @since 1.0.0-rc.0
247
+ */
248
+ export const useJev = () => make({
249
+ _tag: "Questioned",
250
+ id: "use_jev",
251
+ kind: "lint",
252
+ at: 0.85,
253
+ limit: 2,
254
+ question: useJevQuestion,
255
+ applies: (snapshot) => snapshot.jevAvailable,
256
+ say: () => useJevText
257
+ });
258
+ /**
259
+ * The questions one snapshot adds to the supervisor's call, by
260
+ * {@link questionId}: every {@link Questioned} monitor whose `applies` holds.
261
+ *
262
+ * @category conversions
263
+ * @since 1.0.0-rc.0
264
+ */
265
+ export const questions = (monitors, snapshot) => Object.fromEntries(monitors.flatMap((monitor) => monitor._tag === "Questioned" && (monitor.applies === undefined || monitor.applies(snapshot))
266
+ ? [[questionId(monitor.id), monitor.question]]
267
+ : []));
268
+ /**
269
+ * Scores every monitor against one reading. A {@link Derived} monitor scores
270
+ * itself; a {@link Questioned} monitor reads `values` by monitor id and has no
271
+ * row when it was not asked.
272
+ *
273
+ * @category conversions
274
+ * @since 1.0.0-rc.0
275
+ */
276
+ export const evaluate = (input) => {
277
+ const rows = [];
278
+ const candidates = [];
279
+ for (const monitor of input.monitors) {
280
+ const p = monitor._tag === "Derived" ? monitor.score(input.reading, input.snapshot) : input.values[monitor.id];
281
+ if (p === undefined)
282
+ continue;
283
+ const crossed = p >= monitor.at;
284
+ rows.push({ id: monitor.id, kind: monitor.kind, p, crossed });
285
+ if (crossed) {
286
+ candidates.push({
287
+ id: monitor.id,
288
+ kind: monitor.kind,
289
+ priority: monitor.priority,
290
+ p,
291
+ text: monitor.say(input.snapshot, input.reading)
292
+ });
293
+ }
294
+ }
295
+ return { rows, candidates };
296
+ };
297
+ /**
298
+ * One monitor's durable delivery state.
299
+ *
300
+ * @category schemas
301
+ * @since 1.0.0-rc.0
302
+ */
303
+ export const Entry = Schema.Struct({
304
+ streak: NonNegativeSafeInt.annotate({ description: "Consecutive readings that crossed" }),
305
+ delivered: NonNegativeSafeInt.annotate({ description: "Deliveries so far" }),
306
+ lastFrame: Schema.Int.annotate({ description: "The frame of the last delivery; -1 never" })
307
+ });
308
+ /**
309
+ * Every monitor's delivery state, by monitor id.
310
+ *
311
+ * @category schemas
312
+ * @since 1.0.0-rc.0
313
+ */
314
+ export const Ledger = Schema.Record(Schema.String, Entry);
315
+ /**
316
+ * The state of a monitor with no entry.
317
+ *
318
+ * @category constants
319
+ * @since 1.0.0-rc.0
320
+ */
321
+ export const fresh = { streak: 0, delivered: 0, lastFrame: -1 };
322
+ /**
323
+ * Decides, at the steering drain, which one crossed monitor is delivered.
324
+ *
325
+ * Each row moves its monitor's streak: up on a crossing, to zero otherwise; a
326
+ * monitor with no row keeps it. Each candidate is then withheld for its
327
+ * `streak`, its `cooldown` since the last delivery, or its `limit`, in that
328
+ * order. Of the rest the highest priority, then the lower id, takes the one
329
+ * slot and the others are withheld for `slot`. A candidate no monitor
330
+ * declares is ignored.
331
+ *
332
+ * @category conversions
333
+ * @since 1.0.0-rc.0
334
+ */
335
+ export const gate = (input) => {
336
+ const ledger = { ...input.ledger };
337
+ for (const row of input.rows) {
338
+ const entry = ledger[row.id] ?? fresh;
339
+ ledger[row.id] = { ...entry, streak: row.crossed ? entry.streak + 1 : 0 };
340
+ }
341
+ const declared = new Map(input.monitors.map((monitor) => [monitor.id, monitor]));
342
+ const suppressed = [];
343
+ const eligible = [];
344
+ for (const candidate of input.candidates) {
345
+ const monitor = declared.get(candidate.id);
346
+ if (monitor === undefined)
347
+ continue;
348
+ const entry = ledger[candidate.id] ?? fresh;
349
+ const reason = entry.streak < monitor.consecutive
350
+ ? "streak"
351
+ : entry.lastFrame >= 0 && input.frame - entry.lastFrame < monitor.cooldownFrames
352
+ ? "cooldown"
353
+ : entry.delivered >= monitor.limit
354
+ ? "limit"
355
+ : undefined;
356
+ if (reason === undefined)
357
+ eligible.push(candidate);
358
+ else
359
+ suppressed.push({ id: candidate.id, reason });
360
+ }
361
+ const [winner, ...losers] = [...eligible].sort((a, b) => b.priority - a.priority || (a.id < b.id ? -1 : 1));
362
+ for (const loser of losers)
363
+ suppressed.push({ id: loser.id, reason: "slot" });
364
+ if (winner === undefined)
365
+ return { suppressed, ledger };
366
+ const entry = ledger[winner.id] ?? fresh;
367
+ ledger[winner.id] = { ...entry, delivered: entry.delivered + 1, lastFrame: input.frame };
368
+ return { message: { id: winner.id, text: winner.text }, suppressed, ledger };
369
+ };
370
+ //# sourceMappingURL=Monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Monitor.js","sourceRoot":"","sources":["../../src/Monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAiF7C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAmC;IACrD,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5E,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5E,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;CAC/E,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,wBAAwB,CAAA;AAEjD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAqC,EAAE,CAAC,GAAG,UAAU,CAAC,aAAa,GAAG,EAAE,EAAE,CAAA;AAE/G;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAY,EAAW,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAA;AAErF;;;;;GAKG;AACH,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,WAAW,EAAkB,CAAC,wCAAwC,EAAE;IACjH,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AACL,KAAK,CAAC,QAAQ,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAA;AAI/D,MAAM,KAAK,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AAEnF,4FAA4F;AAC5F,MAAM,QAAQ,GAAG,sBAAsB,CAAA;AAEvC,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,IAAyB,EAAsB,EAAE;IAClF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAAE,OAAO,iBAAiB,SAAS,CAAC,MAAM,EAAE,CAAA;IAC3E,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAAE,OAAO,gBAAgB,CAAA;IACtD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAAE,OAAO,sBAAsB,CAAA;IACvD,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;QAAE,OAAO,MAAM,OAAO,CAAC,EAAE,oBAAoB,CAAA;IACrF,KAAK,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE,gBAAgB,EAAE,OAAO,CAAU,EAAE,CAAC;QACxE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAA;IAC/F,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,QAAgC,EACuB,EAAE,CACzD,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;IAClB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACtC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;QAC9F,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;AACjC,CAAC,CAAC,CAAA;AAEJ;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,GAA2B,EAAE,CAAC;IAChD,IAAI,CAAC;QACH,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,GAAG;QACP,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC,gBAAgB;QAC9B,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,GAAG,EAAE,UAAU,CAAC,KAAK;KACtB,CAAC;CACH,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,mFAAmF,CAAA;AAE/G;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,oFAAoF,CAAA;AAE/G;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,oEAAoE,CAAA;AAEhG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,oFAAoF,CAAA;AAE/G,MAAM,IAAI,GAAG,CACX,EAAU,EACV,IAAY,EACZ,KAA8E,EAC9E,SAA0B,EAAE,EACnB,EAAE,CACX,IAAI,CAAC;IACH,IAAI,EAAE,SAAS;IACf,EAAE;IACF,IAAI,EAAE,MAAM;IACZ,GAAG,MAAM;IACT,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI;CAChB,CAAC,CAAA;AAEJ;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,GAA2B,EAAE,CAAC;IACjD,IAAI,CACF,UAAU,EACV,YAAY,EACZ,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,KAAK,QAAQ;QACvC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC,CACnE;IACD,IAAI,CACF,SAAS,EACT,WAAW,EACX,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,cAAc,CAC1F;IACD,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAC1G,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC;CAClF,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,GAA2B,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAA;AAE7E,MAAM,cAAc,GAAsC,EAAE,CAAA;AAE5D,mGAAmG;AACnG,MAAM,aAAa,GAAG,CAAC,KAAa,EAA8B,EAAE,CAClE,cAAc,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC;IAC3C,YAAY,EAAE,wBAAwB,KAAK,6DAA6D;IACxG,QAAQ,EAAE;QACR,IAAI,EACF,wCAAwC,KAAK,mEAAmE;QAClH,KAAK,EAAE,0CAA0C;KAClD;CACF,CAAC,CAAA;AAEJ,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE,CACvC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAEhG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CAC9D,gBAAgB,IAAI,4CAA4C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAA;AAE3F;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,QAA6B,EAA0B,EAAE;IAC9E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;QACrG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACZ,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC9C,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;IACzG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,6DAA6D,CAAA;AAEvF,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC;IACxC,YAAY,EACV,mHAAmH;IACrH,QAAQ,EAAE;QACR,IAAI,EAAE,gGAAgG;QACtG,KAAK,EAAE,8DAA8D;KACtE;CACF,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,GAAY,EAAE,CAClC,IAAI,CAAC;IACH,IAAI,EAAE,YAAY;IAClB,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY;IAC5C,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU;CACtB,CAAC,CAAA;AAEJ;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAAgC,EAChC,QAA6B,EACA,EAAE,CAC/B,MAAM,CAAC,WAAW,CAChB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC3B,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAU,CAAC;IACvD,CAAC,CAAC,EAAE,CACP,CACF,CAAA;AAwCH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAKxB,EAAc,EAAE;IACf,MAAM,IAAI,GAAe,EAAE,CAAA;IAC3B,MAAM,UAAU,GAAqB,EAAE,CAAA;IACvC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC9G,IAAI,CAAC,KAAK,SAAS;YAAE,SAAQ;QAC7B,MAAM,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,EAAE,CAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;QAC7D,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,IAAI,CAAC;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,CAAC;gBACD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;aACjD,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;AAC7B,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC;IACzF,SAAS,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;IAC5E,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,0CAA0C,EAAE,CAAC;CAC5F,CAAC,CAAA;AAUF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AAUzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAAU,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAA;AActE;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAMpB,EAAS,EAAE;IACV,MAAM,MAAM,GAA0B,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;IACzD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAA;QACrC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3E,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAU,CAAC,CAAC,CAAA;IACzF,MAAM,UAAU,GAA+C,EAAE,CAAA;IACjE,MAAM,QAAQ,GAAqB,EAAE,CAAA;IACrC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAC1C,IAAI,OAAO,KAAK,SAAS;YAAE,SAAQ;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,KAAK,CAAA;QAC3C,MAAM,MAAM,GAA4B,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW;YACxE,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,cAAc;gBAChF,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK;oBAClC,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,SAAS,CAAA;QACb,IAAI,MAAM,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;;YAC7C,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IACpD,CAAC;IACD,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3G,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC7E,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAA;IACxC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,CAAA;IACxF,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;AAC9E,CAAC,CAAA","sourcesContent":["/**\n * Declarative supervisor monitors: what one reading can put in front of the\n * run, and when.\n *\n * A monitor turns one {@link Supervisor.Reading} into a probability `p` and a\n * sentence. A {@link Questioned} monitor adds one boolean question to the\n * supervisor's single Jev call; a {@link Derived} monitor scores answers the\n * supervisor already asks and costs nothing. {@link evaluate} runs at reading\n * time and renders every crossed monitor's text against the reading's own\n * snapshot. {@link gate} runs later, at the recorded steering drain, against\n * the durable {@link Ledger}: it applies each monitor's streak, cooldown and\n * limit and delivers at most one message.\n *\n * Both halves are pure. Nothing here asks Jev, journals, or steers.\n *\n * @since 1.0.0-rc.0\n */\n\nimport * as Digest from \"@smthrs/core/Digest\"\nimport * as Fault from \"@smthrs/flow/Fault\"\nimport * as Classifier from \"@smthrs/model/Classifier\"\nimport * as Effect from \"effect/Effect\"\nimport * as Schema from \"effect/Schema\"\nimport type * as AgentEvent from \"./AgentEvent.ts\"\nimport { NonNegativeSafeInt } from \"./internal/nonNegativeSafeInt.ts\"\nimport * as Supervisor from \"./Supervisor.ts\"\n\n/**\n * What a monitor watches for.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type Kind = typeof AgentEvent.MonitorKind.Type\n\n/**\n * The fields every monitor declares.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface Common {\n /** Matches {@link idPattern}; the question id is {@link questionId}. */\n readonly id: string\n readonly kind: Kind\n /** Crosses when `p >= at`; in `(0, 1]`. */\n readonly at: number\n /** Consecutive crossed readings before delivery. */\n readonly consecutive: number\n /** Frames after a delivery before the next one. */\n readonly cooldownFrames: number\n /** Deliveries per run. */\n readonly limit: number\n /** The higher priority takes the one slot. */\n readonly priority: number\n readonly say: (snapshot: Supervisor.Snapshot, reading: Supervisor.Reading) => string\n}\n\n/**\n * A monitor that adds one boolean question to the supervisor's Jev call.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface Questioned extends Common {\n readonly _tag: \"Questioned\"\n readonly question: Classifier.BooleanQuestion\n /** Whether the question is asked of this snapshot; always when absent. */\n readonly applies?: (snapshot: Supervisor.Snapshot) => boolean\n}\n\n/**\n * A monitor scored from answers the supervisor already asks.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface Derived extends Common {\n readonly _tag: \"Derived\"\n readonly score: (reading: Supervisor.Reading, snapshot: Supervisor.Snapshot) => number\n}\n\n/**\n * One declared monitor.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type Monitor = Questioned | Derived\n\n/**\n * The fields {@link make} fills from {@link budgets}.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type Budget = Pick<Common, \"at\" | \"consecutive\" | \"cooldownFrames\" | \"limit\" | \"priority\">\n\n/**\n * A monitor as declared, with its budget optional.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type Input = (Omit<Questioned, keyof Budget> | Omit<Derived, keyof Budget>) & Partial<Budget>\n\n/**\n * The budget each kind starts from.\n *\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const budgets: Readonly<Record<Kind, Budget>> = {\n lint: { at: 0.8, consecutive: 1, cooldownFrames: 6, limit: 2, priority: 30 },\n mood: { at: 0.8, consecutive: 2, cooldownFrames: 6, limit: 2, priority: 20 },\n skill: { at: 0.85, consecutive: 1, cooldownFrames: 6, limit: 1, priority: 10 }\n}\n\n/**\n * The ids a monitor may take.\n *\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const idPattern = /^[a-z][a-z0-9_]{0,47}$/\n\n/**\n * The classifier question id of one monitor.\n *\n * @category conversions\n * @since 1.0.0-rc.0\n */\nexport const questionId = (id: string): keyof Supervisor.MonitorQuestions => `${Supervisor.monitorPrefix}${id}`\n\n/**\n * Declares one monitor, filling any budget field from its kind's\n * {@link budgets}.\n *\n * @category constructors\n * @since 1.0.0-rc.0\n */\nexport const make = (input: Input): Monitor => ({ ...budgets[input.kind], ...input })\n\n/**\n * A monitor declaration that cannot be run.\n *\n * @category errors\n * @since 1.0.0-rc.0\n */\nexport class InvalidMonitor extends Schema.TaggedError<InvalidMonitor>()(\"@smthrs/harness/Monitor/InvalidMonitor\", {\n id: Schema.String,\n message: Schema.String\n}) {}\nFault.register(\"@smthrs/harness/Monitor/InvalidMonitor\", \"bug\")\n\ntype Suppression = typeof AgentEvent.Suppression.Type\n\nconst count = (value: number): boolean => Number.isSafeInteger(value) && value >= 0\n\n/** Ids each supervisor reading declares itself: its skill monitors and the use-jev lint. */\nconst reserved = /^(?:skill_|use_jev$)/\n\nconst invalid = (monitor: Monitor, seen: ReadonlySet<string>): string | undefined => {\n if (!idPattern.test(monitor.id)) return `id must match ${idPattern.source}`\n if (reserved.test(monitor.id)) return \"id is reserved\"\n if (seen.has(monitor.id)) return \"id is declared twice\"\n if (!(monitor.at > 0 && monitor.at <= 1)) return `at ${monitor.at} is outside (0, 1]`\n for (const field of [\"consecutive\", \"cooldownFrames\", \"limit\"] as const) {\n if (!count(monitor[field])) return `${field} ${monitor[field]} is not a non-negative integer`\n }\n return undefined\n}\n\n/**\n * Admits a set of host monitors, or names the first one that cannot be run.\n * The ids each reading adds (`skill_*`, `use_jev`) are reserved.\n *\n * @category validation\n * @since 1.0.0-rc.0\n */\nexport const validate = (\n monitors: ReadonlyArray<Monitor>\n): Effect.Effect<ReadonlyArray<Monitor>, InvalidMonitor> =>\n Effect.suspend(() => {\n const seen = new Set<string>()\n for (const monitor of monitors) {\n const message = invalid(monitor, seen)\n if (message !== undefined) return Effect.fail(new InvalidMonitor({ id: monitor.id, message }))\n seen.add(monitor.id)\n }\n return Effect.succeed(monitors)\n })\n\n/**\n * The supervisor's own nudge as a monitor: it crosses exactly when\n * {@link Supervisor.crosses} does and says {@link Supervisor.nudge}, with no\n * streak, cooldown or limit.\n *\n * @category constructors\n * @since 1.0.0-rc.0\n */\nexport const lint = (): ReadonlyArray<Monitor> => [\n make({\n _tag: \"Derived\",\n id: \"supervisor\",\n kind: \"lint\",\n at: 0.5,\n consecutive: 1,\n cooldownFrames: 0,\n limit: Number.MAX_SAFE_INTEGER,\n priority: 30,\n score: (reading) => Supervisor.crosses(reading) ? 1 : 0,\n say: Supervisor.nudge\n })\n]\n\n/**\n * What the `paranoid` monitor says.\n *\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const paranoidText = \"Stance: paranoid. Treat your last result as wrong until a printed check shows it.\"\n\n/**\n * What the `careful` monitor says.\n *\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const carefulText = \"Stance: careful. No destructive or out-of-scope call; ask with ctx.park if unsure.\"\n\n/**\n * What the `step_back` monitor says.\n *\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const stepBackText = \"Stance: step back. Name the wrong assumption before the next edit.\"\n\n/**\n * What the `clarify` monitor says.\n *\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const clarifyText = \"Stance: unsure of the task. Restate it in one line and check it against the files.\"\n\nconst mood = (\n id: string,\n text: string,\n fires: (reading: Supervisor.Reading, snapshot: Supervisor.Snapshot) => boolean,\n budget: Partial<Budget> = {}\n): Monitor =>\n make({\n _tag: \"Derived\",\n id,\n kind: \"mood\",\n ...budget,\n score: (reading, snapshot) => fires(reading, snapshot) ? 1 : 0,\n say: () => text\n })\n\n/**\n * Stance monitors over the emotions and help the supervisor already reads.\n *\n * `paranoid` scores on a signal the `supervisor` lint does not own: a demand\n * counter increased. A completion the run survived is a bounced one — a\n * standing completion ends the run, so no reading ever follows it — and a\n * bounce is what spends a narrowing, unmoved, unresolved or claim demand, so\n * a frame whose transition is `complete` in the snapshot is the increase.\n * Scoring it on `suspect` instead crossed exactly when the priority-30 lint\n * did, and the mood never won the slot (#2028).\n *\n * @category constructors\n * @since 1.0.0-rc.0\n */\nexport const moods = (): ReadonlyArray<Monitor> => [\n mood(\n \"paranoid\",\n paranoidText,\n (reading, snapshot) =>\n reading.emotions.confident === \"strong\" &&\n snapshot.frames.some((frame) => frame.transition === \"complete\")\n ),\n mood(\n \"careful\",\n carefulText,\n (reading) => reading.emotions.scared === \"strong\" || reading.needsHelp === \"risky_action\"\n ),\n mood(\"step_back\", stepBackText, (reading) => reading.emotions.frustrated === \"strong\", { consecutive: 2 }),\n mood(\"clarify\", clarifyText, (reading) => reading.emotions.confused === \"strong\")\n]\n\n/**\n * The built-in monitors: {@link lint} then {@link moods}.\n *\n * @category constructors\n * @since 1.0.0-rc.0\n */\nexport const defaults = (): ReadonlyArray<Monitor> => [...lint(), ...moods()]\n\nconst skillQuestions: Array<Classifier.BooleanQuestion> = []\n\n/** The question about `skills[index]`, one object per index so the classifier is declared once. */\nconst skillQuestion = (index: number): Classifier.BooleanQuestion =>\n skillQuestions[index] ??= Classifier.boolean({\n instructions: `Would reading skills[${index}] now change what the run does next for the task as stated?`,\n criteria: {\n true:\n `the newest frames do the work skills[${index}] describes without having read it, or violate what it prescribes`,\n false: \"unrelated, or the run already follows it\"\n }\n })\n\nconst skillId = (name: string): string =>\n `skill_${name.toLowerCase().replace(/[^a-z0-9]+/g, \"_\").replace(/^_+|_+$/g, \"\")}`.slice(0, 48)\n\n/**\n * What the skill monitor for `name` says.\n *\n * @category conversions\n * @since 1.0.0-rc.0\n */\nexport const skillText = (name: string, path: string): string =>\n `Read skill \\`${name}\\` first: await ctx.call(\"read\", { path: ${JSON.stringify(path)} })`\n\n/**\n * One monitor per skill the snapshot offers, asking whether reading it now\n * would change what the run does next. Its id is `skill_` and the name made\n * safe, with a digest of the name after it when two names make the same id.\n * It says only the skill's name and path, never its description.\n *\n * @category constructors\n * @since 1.0.0-rc.0\n */\nexport const skills = (snapshot: Supervisor.Snapshot): ReadonlyArray<Monitor> => {\n const seen = new Set<string>()\n return snapshot.skills.map((skill, index) => {\n const plain = skillId(skill.name)\n const id = seen.has(plain) ? `${plain.slice(0, 39)}_${Digest.digest(skill.name).slice(0, 8)}` : plain\n seen.add(id)\n const text = skillText(skill.name, skill.path)\n return make({ _tag: \"Questioned\", id, kind: \"skill\", question: skillQuestion(index), say: () => text })\n })\n}\n\n/**\n * What the `use_jev` monitor says.\n *\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const useJevText = \"Judge those items with one jev call, one question per item.\"\n\nconst useJevQuestion = Classifier.boolean({\n instructions:\n \"Do the newest frames print lists of items (files, hits, failures, candidates) and then choose among them by hand?\",\n criteria: {\n true: \"a frame prints several items and a later cell or its prose picks among them without a jev call\",\n false: \"no list is chosen from by hand, or the choice was a jev call\"\n }\n})\n\n/**\n * The lint that nudges a run choosing among printed items by hand toward one\n * `jev` call, asked only while the run can call `jev`.\n *\n * @category constructors\n * @since 1.0.0-rc.0\n */\nexport const useJev = (): Monitor =>\n make({\n _tag: \"Questioned\",\n id: \"use_jev\",\n kind: \"lint\",\n at: 0.85,\n limit: 2,\n question: useJevQuestion,\n applies: (snapshot) => snapshot.jevAvailable,\n say: () => useJevText\n })\n\n/**\n * The questions one snapshot adds to the supervisor's call, by\n * {@link questionId}: every {@link Questioned} monitor whose `applies` holds.\n *\n * @category conversions\n * @since 1.0.0-rc.0\n */\nexport const questions = (\n monitors: ReadonlyArray<Monitor>,\n snapshot: Supervisor.Snapshot\n): Supervisor.MonitorQuestions =>\n Object.fromEntries(\n monitors.flatMap((monitor) =>\n monitor._tag === \"Questioned\" && (monitor.applies === undefined || monitor.applies(snapshot))\n ? [[questionId(monitor.id), monitor.question] as const]\n : []\n )\n )\n\n/**\n * One monitor's value in one reading.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface Row {\n readonly id: string\n readonly kind: Kind\n readonly p: number\n readonly crossed: boolean\n}\n\n/**\n * A crossed monitor's message, rendered against the reading it crossed on.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface Candidate {\n readonly id: string\n readonly kind: Kind\n readonly priority: number\n readonly p: number\n readonly text: string\n}\n\n/**\n * What one reading says about every monitor.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface Evaluation {\n readonly rows: ReadonlyArray<Row>\n readonly candidates: ReadonlyArray<Candidate>\n}\n\n/**\n * Scores every monitor against one reading. A {@link Derived} monitor scores\n * itself; a {@link Questioned} monitor reads `values` by monitor id and has no\n * row when it was not asked.\n *\n * @category conversions\n * @since 1.0.0-rc.0\n */\nexport const evaluate = (input: {\n readonly monitors: ReadonlyArray<Monitor>\n readonly reading: Supervisor.Reading\n readonly snapshot: Supervisor.Snapshot\n readonly values: Readonly<Record<string, number>>\n}): Evaluation => {\n const rows: Array<Row> = []\n const candidates: Array<Candidate> = []\n for (const monitor of input.monitors) {\n const p = monitor._tag === \"Derived\" ? monitor.score(input.reading, input.snapshot) : input.values[monitor.id]\n if (p === undefined) continue\n const crossed = p >= monitor.at\n rows.push({ id: monitor.id, kind: monitor.kind, p, crossed })\n if (crossed) {\n candidates.push({\n id: monitor.id,\n kind: monitor.kind,\n priority: monitor.priority,\n p,\n text: monitor.say(input.snapshot, input.reading)\n })\n }\n }\n return { rows, candidates }\n}\n\n/**\n * One monitor's durable delivery state.\n *\n * @category schemas\n * @since 1.0.0-rc.0\n */\nexport const Entry = Schema.Struct({\n streak: NonNegativeSafeInt.annotate({ description: \"Consecutive readings that crossed\" }),\n delivered: NonNegativeSafeInt.annotate({ description: \"Deliveries so far\" }),\n lastFrame: Schema.Int.annotate({ description: \"The frame of the last delivery; -1 never\" })\n})\n\n/**\n * The decoded form of {@link Entry}.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type Entry = typeof Entry.Type\n\n/**\n * Every monitor's delivery state, by monitor id.\n *\n * @category schemas\n * @since 1.0.0-rc.0\n */\nexport const Ledger = Schema.Record(Schema.String, Entry)\n\n/**\n * The decoded form of {@link Ledger}.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type Ledger = typeof Ledger.Type\n\n/**\n * The state of a monitor with no entry.\n *\n * @category constants\n * @since 1.0.0-rc.0\n */\nexport const fresh: Entry = { streak: 0, delivered: 0, lastFrame: -1 }\n\n/**\n * What one drain delivers and withholds.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport interface Gated {\n readonly message?: { readonly id: string; readonly text: string }\n readonly suppressed: ReadonlyArray<{ readonly id: string; readonly reason: Suppression }>\n readonly ledger: Ledger\n}\n\n/**\n * Decides, at the steering drain, which one crossed monitor is delivered.\n *\n * Each row moves its monitor's streak: up on a crossing, to zero otherwise; a\n * monitor with no row keeps it. Each candidate is then withheld for its\n * `streak`, its `cooldown` since the last delivery, or its `limit`, in that\n * order. Of the rest the highest priority, then the lower id, takes the one\n * slot and the others are withheld for `slot`. A candidate no monitor\n * declares is ignored.\n *\n * @category conversions\n * @since 1.0.0-rc.0\n */\nexport const gate = (input: {\n readonly rows: ReadonlyArray<Row>\n readonly candidates: ReadonlyArray<Candidate>\n readonly monitors: ReadonlyArray<Monitor>\n readonly ledger: Ledger\n readonly frame: number\n}): Gated => {\n const ledger: Record<string, Entry> = { ...input.ledger }\n for (const row of input.rows) {\n const entry = ledger[row.id] ?? fresh\n ledger[row.id] = { ...entry, streak: row.crossed ? entry.streak + 1 : 0 }\n }\n const declared = new Map(input.monitors.map((monitor) => [monitor.id, monitor] as const))\n const suppressed: Array<{ id: string; reason: Suppression }> = []\n const eligible: Array<Candidate> = []\n for (const candidate of input.candidates) {\n const monitor = declared.get(candidate.id)\n if (monitor === undefined) continue\n const entry = ledger[candidate.id] ?? fresh\n const reason: Suppression | undefined = entry.streak < monitor.consecutive\n ? \"streak\"\n : entry.lastFrame >= 0 && input.frame - entry.lastFrame < monitor.cooldownFrames\n ? \"cooldown\"\n : entry.delivered >= monitor.limit\n ? \"limit\"\n : undefined\n if (reason === undefined) eligible.push(candidate)\n else suppressed.push({ id: candidate.id, reason })\n }\n const [winner, ...losers] = [...eligible].sort((a, b) => b.priority - a.priority || (a.id < b.id ? -1 : 1))\n for (const loser of losers) suppressed.push({ id: loser.id, reason: \"slot\" })\n if (winner === undefined) return { suppressed, ledger }\n const entry = ledger[winner.id] ?? fresh\n ledger[winner.id] = { ...entry, delivered: entry.delivered + 1, lastFrame: input.frame }\n return { message: { id: winner.id, text: winner.text }, suppressed, ledger }\n}\n"]}