@theokit/sdk 4.36.0 → 4.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/agent-K5LYVJGJ.cjs +51 -0
  3. package/dist/{agent-P77NPBF4.cjs.map → agent-K5LYVJGJ.cjs.map} +1 -1
  4. package/dist/agent-ODWMOAEC.js +42 -0
  5. package/dist/{agent-H6HL5ITH.js.map → agent-ODWMOAEC.js.map} +1 -1
  6. package/dist/agent.d.ts +2 -1
  7. package/dist/auth/index.cjs +15 -15
  8. package/dist/auth/index.js +4 -4
  9. package/dist/{batch-2FSD2UNL.cjs → batch-3SEPDXCU.cjs} +23 -23
  10. package/dist/{batch-2FSD2UNL.cjs.map → batch-3SEPDXCU.cjs.map} +1 -1
  11. package/dist/{batch-MR2HKYMS.js → batch-SY5GZLFD.js} +9 -9
  12. package/dist/{batch-MR2HKYMS.js.map → batch-SY5GZLFD.js.map} +1 -1
  13. package/dist/{chunk-JLMXKTBX.cjs → chunk-2423XDPT.cjs} +26 -26
  14. package/dist/{chunk-JLMXKTBX.cjs.map → chunk-2423XDPT.cjs.map} +1 -1
  15. package/dist/{chunk-5IB2UKSN.js → chunk-2WFB5ZOX.js} +5 -5
  16. package/dist/{chunk-5IB2UKSN.js.map → chunk-2WFB5ZOX.js.map} +1 -1
  17. package/dist/{chunk-EPYZOCOL.cjs → chunk-3ILFUXNE.cjs} +5 -5
  18. package/dist/{chunk-EPYZOCOL.cjs.map → chunk-3ILFUXNE.cjs.map} +1 -1
  19. package/dist/{chunk-KSKU6JY6.cjs → chunk-3O2ELBST.cjs} +5 -5
  20. package/dist/{chunk-KSKU6JY6.cjs.map → chunk-3O2ELBST.cjs.map} +1 -1
  21. package/dist/{chunk-M2PU44HP.cjs → chunk-4YB7B3RP.cjs} +8 -8
  22. package/dist/{chunk-M2PU44HP.cjs.map → chunk-4YB7B3RP.cjs.map} +1 -1
  23. package/dist/{chunk-S2BBRVQX.js → chunk-56OXYUZE.js} +8 -7
  24. package/dist/chunk-56OXYUZE.js.map +1 -0
  25. package/dist/{chunk-D42XHI4O.cjs → chunk-56ZM6P7Z.cjs} +13 -14
  26. package/dist/chunk-56ZM6P7Z.cjs.map +1 -0
  27. package/dist/{chunk-7BTE3RXJ.js → chunk-5SB4V74H.js} +7 -8
  28. package/dist/chunk-5SB4V74H.js.map +1 -0
  29. package/dist/{chunk-MZ5ZRORA.cjs → chunk-6EDQBX7U.cjs} +17 -16
  30. package/dist/chunk-6EDQBX7U.cjs.map +1 -0
  31. package/dist/{chunk-RKG6QFCJ.js → chunk-6VP3XGEK.js} +4 -4
  32. package/dist/{chunk-RKG6QFCJ.js.map → chunk-6VP3XGEK.js.map} +1 -1
  33. package/dist/{chunk-KAP4GJHO.js → chunk-77WHPVXE.js} +10 -11
  34. package/dist/chunk-77WHPVXE.js.map +1 -0
  35. package/dist/{chunk-LALRCFSN.cjs → chunk-7DXLNNKH.cjs} +4 -4
  36. package/dist/{chunk-LALRCFSN.cjs.map → chunk-7DXLNNKH.cjs.map} +1 -1
  37. package/dist/{chunk-WEHUJ7ZS.cjs → chunk-ALU3KC4G.cjs} +267 -120
  38. package/dist/chunk-ALU3KC4G.cjs.map +1 -0
  39. package/dist/{chunk-Z2OC3UIW.cjs → chunk-BJMKQOY2.cjs} +11 -11
  40. package/dist/{chunk-Z2OC3UIW.cjs.map → chunk-BJMKQOY2.cjs.map} +1 -1
  41. package/dist/{chunk-WLKFWQSJ.js → chunk-CD73YHEH.js} +3 -3
  42. package/dist/{chunk-WLKFWQSJ.js.map → chunk-CD73YHEH.js.map} +1 -1
  43. package/dist/{chunk-BXV2QUIC.js → chunk-CSZRJ4RE.js} +6 -5
  44. package/dist/chunk-CSZRJ4RE.js.map +1 -0
  45. package/dist/{chunk-6M6A6WWW.cjs → chunk-D4ZUJTFB.cjs} +9 -10
  46. package/dist/chunk-D4ZUJTFB.cjs.map +1 -0
  47. package/dist/{chunk-XAUBQMQU.js → chunk-DCJ5MCJ3.js} +7 -7
  48. package/dist/{chunk-XAUBQMQU.js.map → chunk-DCJ5MCJ3.js.map} +1 -1
  49. package/dist/{chunk-Y66627E4.cjs → chunk-E7X2B66S.cjs} +24 -24
  50. package/dist/{chunk-Y66627E4.cjs.map → chunk-E7X2B66S.cjs.map} +1 -1
  51. package/dist/{chunk-6CLRANZA.js → chunk-EXQV452X.js} +3 -3
  52. package/dist/{chunk-6CLRANZA.js.map → chunk-EXQV452X.js.map} +1 -1
  53. package/dist/{chunk-EKFA76N4.js → chunk-F3X7Q4BF.js} +344 -453
  54. package/dist/chunk-F3X7Q4BF.js.map +1 -0
  55. package/dist/{chunk-XIG2IE3L.js → chunk-F6Y4IEQM.js} +5 -4
  56. package/dist/chunk-F6Y4IEQM.js.map +1 -0
  57. package/dist/{chunk-N24XBYNX.cjs → chunk-FAY3QDGC.cjs} +11 -10
  58. package/dist/chunk-FAY3QDGC.cjs.map +1 -0
  59. package/dist/{chunk-JD74LN7R.cjs → chunk-FK4EJD2I.cjs} +7 -6
  60. package/dist/chunk-FK4EJD2I.cjs.map +1 -0
  61. package/dist/{chunk-IX2LKBCD.js → chunk-GL7CFBVC.js} +176 -35
  62. package/dist/chunk-GL7CFBVC.js.map +1 -0
  63. package/dist/{chunk-77FOZCOT.js → chunk-GLUWH6JO.js} +6 -5
  64. package/dist/chunk-GLUWH6JO.js.map +1 -0
  65. package/dist/{chunk-RZQ6E5YZ.cjs → chunk-GM7QDQ24.cjs} +11 -11
  66. package/dist/{chunk-RZQ6E5YZ.cjs.map → chunk-GM7QDQ24.cjs.map} +1 -1
  67. package/dist/{chunk-G4WI3VW2.cjs → chunk-H5YVJB4K.cjs} +9 -10
  68. package/dist/chunk-H5YVJB4K.cjs.map +1 -0
  69. package/dist/{chunk-HRA3CPGG.js → chunk-HEN5WXXI.js} +9 -8
  70. package/dist/chunk-HEN5WXXI.js.map +1 -0
  71. package/dist/{chunk-LU7VALW5.js → chunk-I35DI7ES.js} +3 -3
  72. package/dist/{chunk-LU7VALW5.js.map → chunk-I35DI7ES.js.map} +1 -1
  73. package/dist/{chunk-TIZ4TS5V.cjs → chunk-ICYBIC6N.cjs} +8 -7
  74. package/dist/chunk-ICYBIC6N.cjs.map +1 -0
  75. package/dist/{chunk-2DYI7MIF.cjs → chunk-IEUDKUPM.cjs} +8 -8
  76. package/dist/{chunk-2DYI7MIF.cjs.map → chunk-IEUDKUPM.cjs.map} +1 -1
  77. package/dist/{chunk-AIDNODHJ.cjs → chunk-ITLS5LRF.cjs} +11 -11
  78. package/dist/{chunk-AIDNODHJ.cjs.map → chunk-ITLS5LRF.cjs.map} +1 -1
  79. package/dist/{chunk-M72RJVPC.js → chunk-JNIWFCKI.js} +3 -3
  80. package/dist/{chunk-M72RJVPC.js.map → chunk-JNIWFCKI.js.map} +1 -1
  81. package/dist/{chunk-LEJXBUBD.js → chunk-LISL36B6.js} +5 -5
  82. package/dist/{chunk-LEJXBUBD.js.map → chunk-LISL36B6.js.map} +1 -1
  83. package/dist/{chunk-3XJ7CS2C.cjs → chunk-LMWXF4LL.cjs} +554 -666
  84. package/dist/chunk-LMWXF4LL.cjs.map +1 -0
  85. package/dist/{chunk-BEURCLDV.cjs → chunk-LTCOPATU.cjs} +9 -3
  86. package/dist/chunk-LTCOPATU.cjs.map +1 -0
  87. package/dist/{chunk-TQKCU7CL.js → chunk-M5ZQBOIZ.js} +3 -3
  88. package/dist/{chunk-TQKCU7CL.js.map → chunk-M5ZQBOIZ.js.map} +1 -1
  89. package/dist/{chunk-A44COQJJ.cjs → chunk-MHCKWQR3.cjs} +8 -8
  90. package/dist/{chunk-A44COQJJ.cjs.map → chunk-MHCKWQR3.cjs.map} +1 -1
  91. package/dist/{chunk-7S7KKUO6.cjs → chunk-MRODLUGY.cjs} +4 -4
  92. package/dist/{chunk-7S7KKUO6.cjs.map → chunk-MRODLUGY.cjs.map} +1 -1
  93. package/dist/{chunk-BOTK6ZUP.js → chunk-MXSMAGDU.js} +3 -3
  94. package/dist/{chunk-BOTK6ZUP.js.map → chunk-MXSMAGDU.js.map} +1 -1
  95. package/dist/{chunk-5PZMMF4H.js → chunk-NFCKEBHI.js} +3 -3
  96. package/dist/{chunk-5PZMMF4H.js.map → chunk-NFCKEBHI.js.map} +1 -1
  97. package/dist/{chunk-6M4ODB2V.cjs → chunk-NNSKJCBM.cjs} +10 -10
  98. package/dist/{chunk-6M4ODB2V.cjs.map → chunk-NNSKJCBM.cjs.map} +1 -1
  99. package/dist/{chunk-4WL52CXU.cjs → chunk-NQ4AC2U4.cjs} +9 -9
  100. package/dist/{chunk-4WL52CXU.cjs.map → chunk-NQ4AC2U4.cjs.map} +1 -1
  101. package/dist/{chunk-YRXTIESB.cjs → chunk-P34DHHYQ.cjs} +4 -4
  102. package/dist/{chunk-YRXTIESB.cjs.map → chunk-P34DHHYQ.cjs.map} +1 -1
  103. package/dist/{chunk-HFPGOTVF.cjs → chunk-PAEJPLVN.cjs} +4 -4
  104. package/dist/{chunk-HFPGOTVF.cjs.map → chunk-PAEJPLVN.cjs.map} +1 -1
  105. package/dist/{chunk-S5RCBTSF.js → chunk-QFMXXUUT.js} +3 -3
  106. package/dist/{chunk-S5RCBTSF.js.map → chunk-QFMXXUUT.js.map} +1 -1
  107. package/dist/{chunk-V4XRLPEF.js → chunk-QGDKZDPN.js} +3 -3
  108. package/dist/{chunk-V4XRLPEF.js.map → chunk-QGDKZDPN.js.map} +1 -1
  109. package/dist/{chunk-DHLZIMP6.cjs → chunk-QUFSDDNU.cjs} +15 -15
  110. package/dist/{chunk-DHLZIMP6.cjs.map → chunk-QUFSDDNU.cjs.map} +1 -1
  111. package/dist/{chunk-BFWPZMG7.js → chunk-SDIBMLL5.js} +8 -8
  112. package/dist/{chunk-BFWPZMG7.js.map → chunk-SDIBMLL5.js.map} +1 -1
  113. package/dist/{chunk-GIW4L6HY.cjs → chunk-SWIBQFPH.cjs} +4 -4
  114. package/dist/{chunk-GIW4L6HY.cjs.map → chunk-SWIBQFPH.cjs.map} +1 -1
  115. package/dist/{chunk-JTFYYKDT.js → chunk-TAPQWDW2.js} +9 -4
  116. package/dist/chunk-TAPQWDW2.js.map +1 -0
  117. package/dist/{chunk-4GTXATWK.cjs → chunk-THEYGCYS.cjs} +4 -4
  118. package/dist/{chunk-4GTXATWK.cjs.map → chunk-THEYGCYS.cjs.map} +1 -1
  119. package/dist/{chunk-CJVMDRQB.cjs → chunk-TQI3KRXZ.cjs} +5 -4
  120. package/dist/chunk-TQI3KRXZ.cjs.map +1 -0
  121. package/dist/{chunk-LUSXDZPV.cjs → chunk-U2WLFOA3.cjs} +4 -4
  122. package/dist/{chunk-LUSXDZPV.cjs.map → chunk-U2WLFOA3.cjs.map} +1 -1
  123. package/dist/{chunk-FKCC2MED.js → chunk-UQPDFW4E.js} +3 -3
  124. package/dist/{chunk-FKCC2MED.js.map → chunk-UQPDFW4E.js.map} +1 -1
  125. package/dist/{chunk-CR3DGWUQ.js → chunk-VNNK6AKU.js} +3 -3
  126. package/dist/{chunk-CR3DGWUQ.js.map → chunk-VNNK6AKU.js.map} +1 -1
  127. package/dist/{chunk-ANIZEWTU.cjs → chunk-W4QN5CMG.cjs} +9 -8
  128. package/dist/chunk-W4QN5CMG.cjs.map +1 -0
  129. package/dist/{chunk-POQT2OIF.js → chunk-WDGCZDRG.js} +3 -3
  130. package/dist/{chunk-POQT2OIF.js.map → chunk-WDGCZDRG.js.map} +1 -1
  131. package/dist/{chunk-Q56IYTBZ.js → chunk-XAEAMI5H.js} +4 -4
  132. package/dist/{chunk-Q56IYTBZ.js.map → chunk-XAEAMI5H.js.map} +1 -1
  133. package/dist/{chunk-BWT67BI4.cjs → chunk-XAYVHS2B.cjs} +4 -4
  134. package/dist/{chunk-BWT67BI4.cjs.map → chunk-XAYVHS2B.cjs.map} +1 -1
  135. package/dist/{chunk-KIO7QFIV.cjs → chunk-YBFDBOUN.cjs} +8 -8
  136. package/dist/{chunk-KIO7QFIV.cjs.map → chunk-YBFDBOUN.cjs.map} +1 -1
  137. package/dist/{chunk-BNIFFFH3.js → chunk-YCXMSDSP.js} +4 -4
  138. package/dist/{chunk-BNIFFFH3.js.map → chunk-YCXMSDSP.js.map} +1 -1
  139. package/dist/{chunk-UVNG67DG.js → chunk-YDLNI7J6.js} +3 -3
  140. package/dist/{chunk-UVNG67DG.js.map → chunk-YDLNI7J6.js.map} +1 -1
  141. package/dist/{chunk-UAYYNWYJ.js → chunk-YHZXBDAW.js} +5 -4
  142. package/dist/chunk-YHZXBDAW.js.map +1 -0
  143. package/dist/{chunk-OKXUMCGM.js → chunk-YVTNFKZO.js} +5 -5
  144. package/dist/{chunk-OKXUMCGM.js.map → chunk-YVTNFKZO.js.map} +1 -1
  145. package/dist/{chunk-GJAGKFTR.js → chunk-ZJN6NTHE.js} +3 -3
  146. package/dist/{chunk-GJAGKFTR.js.map → chunk-ZJN6NTHE.js.map} +1 -1
  147. package/dist/{chunk-XV2RBL6D.js → chunk-ZW345YOI.js} +8 -9
  148. package/dist/chunk-ZW345YOI.js.map +1 -0
  149. package/dist/compact-session-H5TKLD55.cjs +54 -0
  150. package/dist/{compact-session-BEA3IOON.cjs.map → compact-session-H5TKLD55.cjs.map} +1 -1
  151. package/dist/compact-session-WNKKIIDW.js +17 -0
  152. package/dist/{compact-session-5BDD4HIB.js.map → compact-session-WNKKIIDW.js.map} +1 -1
  153. package/dist/compaction.cjs +16 -16
  154. package/dist/compaction.js +3 -3
  155. package/dist/concurrency.cjs +6 -6
  156. package/dist/concurrency.js +4 -4
  157. package/dist/context-VAYLPT4O.js +5 -0
  158. package/dist/{context-GWANQLX4.js.map → context-VAYLPT4O.js.map} +1 -1
  159. package/dist/context-ZV33V4DC.cjs +22 -0
  160. package/dist/{context-KNWVTZSY.cjs.map → context-ZV33V4DC.cjs.map} +1 -1
  161. package/dist/cron.cjs +28 -28
  162. package/dist/cron.js +27 -27
  163. package/dist/errors.cjs +21 -21
  164. package/dist/errors.js +2 -2
  165. package/dist/eval.cjs +31 -31
  166. package/dist/eval.js +27 -27
  167. package/dist/{executor-Y4MKPIUD.cjs → executor-OZSYXDKF.cjs} +23 -23
  168. package/dist/{executor-Y4MKPIUD.cjs.map → executor-OZSYXDKF.cjs.map} +1 -1
  169. package/dist/{executor-ORJS5GV2.js → executor-PAH72CB5.js} +7 -7
  170. package/dist/{executor-ORJS5GV2.js.map → executor-PAH72CB5.js.map} +1 -1
  171. package/dist/filesystem/index.cjs +7 -7
  172. package/dist/filesystem/index.js +3 -3
  173. package/dist/fs-session-store-6MY7PNI2.js +10 -0
  174. package/dist/{fs-session-store-4ALCDU3K.js.map → fs-session-store-6MY7PNI2.js.map} +1 -1
  175. package/dist/fs-session-store-7E7UPLF2.cjs +19 -0
  176. package/dist/{fs-session-store-IQYE35HX.cjs.map → fs-session-store-7E7UPLF2.cjs.map} +1 -1
  177. package/dist/generate-object-5SCEH2EE.cjs +20 -0
  178. package/dist/{generate-object-H3RNAM6S.cjs.map → generate-object-5SCEH2EE.cjs.map} +1 -1
  179. package/dist/generate-object-I7UD4NWN.js +7 -0
  180. package/dist/{generate-object-YJPDV5BS.js.map → generate-object-I7UD4NWN.js.map} +1 -1
  181. package/dist/index-manager-KKAK7NT3.js +10 -0
  182. package/dist/{index-manager-P7ZUX2RG.js.map → index-manager-KKAK7NT3.js.map} +1 -1
  183. package/dist/index-manager-R6ZJFEZF.cjs +19 -0
  184. package/dist/{index-manager-H7HUMW52.cjs.map → index-manager-R6ZJFEZF.cjs.map} +1 -1
  185. package/dist/index.cjs +124 -129
  186. package/dist/index.cjs.map +1 -1
  187. package/dist/index.d.cts +2 -1
  188. package/dist/index.d.ts +2 -1
  189. package/dist/index.js +45 -50
  190. package/dist/index.js.map +1 -1
  191. package/dist/{inject-session-SMH56NXP.cjs → inject-session-DM4SKTZO.cjs} +8 -8
  192. package/dist/{inject-session-SMH56NXP.cjs.map → inject-session-DM4SKTZO.cjs.map} +1 -1
  193. package/dist/{inject-session-V5FTK72N.js → inject-session-UXNJQTZ6.js} +6 -6
  194. package/dist/{inject-session-V5FTK72N.js.map → inject-session-UXNJQTZ6.js.map} +1 -1
  195. package/dist/internal/diagnostics.d.ts +54 -0
  196. package/dist/internal/local-agent/local-agent-invalidate.d.ts +0 -7
  197. package/dist/internal/local-agent/local-agent-lifecycle.d.ts +13 -0
  198. package/dist/internal/local-agent/local-agent.d.ts +1 -93
  199. package/dist/internal/persistence/index.cjs +25 -25
  200. package/dist/internal/persistence/index.js +6 -6
  201. package/dist/internal/persistence/sqlite-wal.d.cts +0 -9
  202. package/dist/internal/persistence/sqlite-wal.d.ts +0 -9
  203. package/dist/internal/persistence/transcript-ops.d.cts +14 -0
  204. package/dist/internal/persistence/transcript-ops.d.ts +14 -0
  205. package/dist/internal/plugins/lifecycle.d.cts +1 -0
  206. package/dist/internal/plugins/lifecycle.d.ts +1 -0
  207. package/dist/internal/runtime/fixtures/fixture-run-base.d.ts +19 -0
  208. package/dist/internal/runtime/registry/agent-registry.d.ts +0 -1
  209. package/dist/internal/security/index.cjs +13 -13
  210. package/dist/internal/security/index.js +3 -3
  211. package/dist/internal/security/redact.d.cts +0 -18
  212. package/dist/internal/security/redact.d.ts +0 -18
  213. package/dist/judge-call-SP3G3X2Y.cjs +22 -0
  214. package/dist/{judge-call-2FULQ6KL.cjs.map → judge-call-SP3G3X2Y.cjs.map} +1 -1
  215. package/dist/judge-call-TAEIXMYG.js +5 -0
  216. package/dist/{judge-call-D7R3ZTZS.js.map → judge-call-TAEIXMYG.js.map} +1 -1
  217. package/dist/models.cjs +22 -26
  218. package/dist/models.cjs.map +1 -1
  219. package/dist/models.js +13 -17
  220. package/dist/models.js.map +1 -1
  221. package/dist/path-safety.cjs +10 -10
  222. package/dist/path-safety.js +3 -3
  223. package/dist/persistence.cjs +27 -27
  224. package/dist/persistence.cjs.map +1 -1
  225. package/dist/persistence.js +8 -8
  226. package/dist/persistence.js.map +1 -1
  227. package/dist/project.cjs +5 -5
  228. package/dist/project.js +3 -3
  229. package/dist/registry-N3GTKYCI.cjs +46 -0
  230. package/dist/{registry-APYDISL6.cjs.map → registry-N3GTKYCI.cjs.map} +1 -1
  231. package/dist/registry-SOXE4RY6.js +9 -0
  232. package/dist/{registry-34IWWDQQ.js.map → registry-SOXE4RY6.js.map} +1 -1
  233. package/dist/retry.cjs +4 -4
  234. package/dist/retry.js +3 -3
  235. package/dist/sandbox/index.cjs +6 -6
  236. package/dist/sandbox/index.js +2 -2
  237. package/dist/server/errors-envelope.cjs +14 -14
  238. package/dist/server/errors-envelope.js +3 -3
  239. package/dist/session-transcript-6WKLYIN4.js +5 -0
  240. package/dist/{session-transcript-F2ANTA2M.js.map → session-transcript-6WKLYIN4.js.map} +1 -1
  241. package/dist/session-transcript-EAKR4D2W.cjs +50 -0
  242. package/dist/{session-transcript-JXFMPLOT.cjs.map → session-transcript-EAKR4D2W.cjs.map} +1 -1
  243. package/dist/skills.cjs +7 -7
  244. package/dist/skills.js +5 -5
  245. package/dist/stream-object-OFM66VUT.js +7 -0
  246. package/dist/{stream-object-WUQSSRY2.js.map → stream-object-OFM66VUT.js.map} +1 -1
  247. package/dist/stream-object-Y7YCX3BI.cjs +20 -0
  248. package/dist/{stream-object-QEQJJDTI.cjs.map → stream-object-Y7YCX3BI.cjs.map} +1 -1
  249. package/dist/subagents-loader.cjs +6 -6
  250. package/dist/subagents-loader.js +4 -4
  251. package/dist/subscription/index.cjs +3 -3
  252. package/dist/subscription/index.js +2 -2
  253. package/dist/task-store.cjs +7 -7
  254. package/dist/task-store.js +4 -4
  255. package/dist/workflow.cjs +27 -27
  256. package/dist/workflow.js +6 -6
  257. package/package.json +13 -12
  258. package/dist/agent-H6HL5ITH.js +0 -42
  259. package/dist/agent-P77NPBF4.cjs +0 -51
  260. package/dist/chunk-3XJ7CS2C.cjs.map +0 -1
  261. package/dist/chunk-6M6A6WWW.cjs.map +0 -1
  262. package/dist/chunk-77FOZCOT.js.map +0 -1
  263. package/dist/chunk-7BTE3RXJ.js.map +0 -1
  264. package/dist/chunk-ANIZEWTU.cjs.map +0 -1
  265. package/dist/chunk-BEURCLDV.cjs.map +0 -1
  266. package/dist/chunk-BXV2QUIC.js.map +0 -1
  267. package/dist/chunk-CJVMDRQB.cjs.map +0 -1
  268. package/dist/chunk-D42XHI4O.cjs.map +0 -1
  269. package/dist/chunk-EKFA76N4.js.map +0 -1
  270. package/dist/chunk-G4WI3VW2.cjs.map +0 -1
  271. package/dist/chunk-HRA3CPGG.js.map +0 -1
  272. package/dist/chunk-IX2LKBCD.js.map +0 -1
  273. package/dist/chunk-JD74LN7R.cjs.map +0 -1
  274. package/dist/chunk-JTFYYKDT.js.map +0 -1
  275. package/dist/chunk-KAP4GJHO.js.map +0 -1
  276. package/dist/chunk-MZ5ZRORA.cjs.map +0 -1
  277. package/dist/chunk-N24XBYNX.cjs.map +0 -1
  278. package/dist/chunk-S2BBRVQX.js.map +0 -1
  279. package/dist/chunk-TIZ4TS5V.cjs.map +0 -1
  280. package/dist/chunk-UAYYNWYJ.js.map +0 -1
  281. package/dist/chunk-WEHUJ7ZS.cjs.map +0 -1
  282. package/dist/chunk-XIG2IE3L.js.map +0 -1
  283. package/dist/chunk-XV2RBL6D.js.map +0 -1
  284. package/dist/compact-session-5BDD4HIB.js +0 -17
  285. package/dist/compact-session-BEA3IOON.cjs +0 -54
  286. package/dist/context-GWANQLX4.js +0 -5
  287. package/dist/context-KNWVTZSY.cjs +0 -22
  288. package/dist/fs-session-store-4ALCDU3K.js +0 -10
  289. package/dist/fs-session-store-IQYE35HX.cjs +0 -19
  290. package/dist/generate-object-H3RNAM6S.cjs +0 -20
  291. package/dist/generate-object-YJPDV5BS.js +0 -7
  292. package/dist/index-manager-H7HUMW52.cjs +0 -19
  293. package/dist/index-manager-P7ZUX2RG.js +0 -10
  294. package/dist/judge-call-2FULQ6KL.cjs +0 -22
  295. package/dist/judge-call-D7R3ZTZS.js +0 -5
  296. package/dist/registry-34IWWDQQ.js +0 -9
  297. package/dist/registry-APYDISL6.cjs +0 -46
  298. package/dist/session-transcript-F2ANTA2M.js +0 -5
  299. package/dist/session-transcript-JXFMPLOT.cjs +0 -50
  300. package/dist/stream-object-QEQJJDTI.cjs +0 -20
  301. package/dist/stream-object-WUQSSRY2.js +0 -7
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal/session/agent-session-store.ts","../src/internal/session/agent-session.ts"],"names":["SessionTranscript","reconstructMessages","sessions","transcriptKey","hydratedKeys"],"mappings":"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","file":"chunk-G4WI3VW2.cjs","sourcesContent":["/**\n * SE40 — native session store over the Claude-shaped `.jsonl` transcript.\n *\n * The theokit session format IS the Claude Code record shape (see\n * `../../persistence/session-transcript.ts`). This module owns the FS lifecycle:\n * read existing records, seed a {@link SessionTranscript}'s parent chain, append\n * the new turn (user + assistant/tool blocks), and write append-only. Compaction\n * appends a `compact_boundary` record (a new root) — it NEVER shrinks the line\n * set (that would break the DAG). Reads reconstruct `LlmMessage[]` via\n * {@link reconstructMessages}, narrowed to the in-memory {@link SessionMessage}.\n *\n * @internal\n */\n\nimport type { ConversationStep, ConversationTurn } from \"../../types/conversation.js\";\nimport type { SessionStore } from \"../../types/session-store.js\";\nimport {\n type AssistantTurn,\n reconstructMessages,\n type SessionRecord,\n SessionTranscript,\n} from \"../persistence/session-transcript.js\";\nimport type { SessionMessage } from \"./session-types.js\";\n\n/**\n * Seed a {@link SessionTranscript} from the already-on-disk records so a new\n * append parents correctly on the existing DAG leaf. The transcript re-emits the\n * seeded records verbatim before the new turn, so the whole file rewrites atomically\n * as one append-only line set. Returns the transcript primed with the prior records.\n */\nfunction seedTranscript(\n prior: readonly SessionRecord[],\n opts: { cwd: string; sessionId: string; model: string },\n): SessionTranscript {\n return SessionTranscript.fromRecords(prior, opts);\n}\n\n/** The turn to persist: the user's text plus the rich per-turn conversation view. */\nexport interface PersistTurnInput {\n userText: string;\n conversation: readonly ConversationTurn[];\n /**\n * M50 — when supplied, size-driven auto-compaction runs in the SAME write chain after the turn\n * persists (usage real vs the model's context window; summarizer injected by the caller).\n */\n autoCompact?: {\n usageTotal?: number | undefined;\n contextWindow?: number | undefined;\n summarize: (\n messages: readonly import(\"../../compaction.js\").CompressibleMessage[],\n ) => Promise<string>;\n };\n}\n\ninterface MappedTurn {\n assistant: AssistantTurn;\n toolResults: Array<{ toolUseId: string; content: string; isError?: boolean }>;\n}\n\n/** Fold one agent turn's steps into an assistant record + paired tool results. */\nfunction mapAgentTurn(steps: readonly ConversationStep[]): MappedTurn {\n const assistant: AssistantTurn = {};\n const toolResults: MappedTurn[\"toolResults\"] = [];\n const toolCalls: NonNullable<AssistantTurn[\"toolCalls\"]> = [];\n for (const step of steps) {\n if (step.type === \"thinkingMessage\") assistant.thinking = step.message.text;\n else if (step.type === \"assistantMessage\") assistant.text = step.message.text;\n else if (step.type === \"toolCall\")\n toolCalls.push({\n id: step.message.callId,\n name: step.message.name,\n input: (step.message.args as Record<string, unknown> | undefined) ?? {},\n });\n else\n toolResults.push({\n toolUseId: step.message.callId,\n content: step.message.result,\n isError: step.message.isError,\n });\n }\n if (toolCalls.length > 0) assistant.toolCalls = toolCalls;\n return { assistant, toolResults };\n}\n\n/** True when the assistant record carries any content worth emitting. */\nfunction hasAssistantContent(a: AssistantTurn): boolean {\n return a.text !== undefined || a.thinking !== undefined || (a.toolCalls?.length ?? 0) > 0;\n}\n\n/**\n * Map the rich `ConversationTurn[]` (from `run.conversation()`) into the native\n * assistant/tool records. One transcript turn is: an `assistant` record carrying\n * thinking + text + tool_use blocks, then (when present) a `user` record carrying\n * the paired tool_result blocks. Tool results pair with tool_use by `callId`.\n */\nfunction appendConversation(\n transcript: SessionTranscript,\n conversation: readonly ConversationTurn[],\n): void {\n for (const ct of conversation) {\n if (ct.type !== \"agentConversationTurn\") continue;\n const { assistant, toolResults } = mapAgentTurn(ct.turn.steps);\n if (hasAssistantContent(assistant)) transcript.appendAssistantTurn(assistant);\n if (toolResults.length > 0) transcript.appendToolResults(toolResults);\n }\n}\n\n/**\n * The per-agent transcript metadata used to seed a {@link SessionTranscript}. The\n * actual record I/O goes through the injected {@link SessionStore} (SE41), so this\n * no longer carries a `baseDir` — the store is already bound to its location.\n */\nexport interface TranscriptLocation {\n cwd: string;\n agentId: string;\n model: string;\n}\n\n/**\n * Read the session's records via the {@link SessionStore} and reconstruct the\n * resumable history, narrowed to the in-memory {@link SessionMessage} shape\n * (user/assistant text). Tool turns fold into assistant-role context so resume\n * keeps tool history. Works identically for the FS default and an external store.\n */\nexport async function readSessionMessages(\n store: SessionStore,\n agentId: string,\n): Promise<SessionMessage[]> {\n const records = await store.readRecords(agentId);\n return reconstructMessages(records).map(narrowToSessionMessage);\n}\n\ntype NarrowPart = { type: string; text?: string; content?: unknown; name?: string };\n\n/** Render one reconstructed content part as folded session text. */\nfunction partToText(p: NarrowPart): string {\n if (p.type === \"text\") return p.text ?? \"\";\n if (p.type === \"tool_use\") return `[tool call] ${p.name ?? \"\"}`;\n if (p.type === \"tool_result\") {\n const body = typeof p.content === \"string\" ? p.content : JSON.stringify(p.content);\n return `[tool result] ${body}`;\n }\n return \"\";\n}\n\n/** Flatten a reconstructed `LlmMessage` to the narrowed in-memory `SessionMessage`. */\nfunction narrowToSessionMessage(m: {\n role: \"system\" | \"user\" | \"assistant\";\n content: NarrowPart[];\n}): SessionMessage {\n const role = m.role === \"user\" ? \"user\" : \"assistant\";\n const text = m.content\n .map(partToText)\n .filter((s) => s.length > 0)\n .join(\"\\n\");\n return { role, text };\n}\n\n/** The records appended by the last turn (the delta beyond the seeded prior). */\nfunction deltaRecords(\n transcript: SessionTranscript,\n priorLength: number,\n): readonly SessionRecord[] {\n return transcript.records().slice(priorLength);\n}\n\n/**\n * Persist one conversation turn (user + assistant/tool records) to the session\n * store, append-only. Reads the prior records to seed the parent chain, folds the\n * new turn, and appends ONLY the delta via {@link SessionStore.appendRecords}\n * (the store owns the append atomicity — the FS default serializes under a file\n * lock). Within one process, turns for an agent are already chained upstream, so\n * the read→append is ordered; cross-host ordering is the external store's contract.\n */\nexport async function persistTurn(\n store: SessionStore,\n loc: TranscriptLocation,\n sessionId: string,\n turn: PersistTurnInput,\n): Promise<void> {\n const prior = await store.readRecords(loc.agentId);\n const transcript = seedTranscript(prior, { cwd: loc.cwd, sessionId, model: loc.model });\n transcript.appendUserTurn(turn.userText);\n appendConversation(transcript, turn.conversation);\n await store.appendRecords(loc.agentId, deltaRecords(transcript, prior.length));\n}\n\n/**\n * Append-only compaction: add a `compact_boundary` system record (a new root) so\n * resume replays only the post-boundary continuation. Appends only the boundary\n * record via the store — NEVER rewrites or shrinks the prior records.\n */\nexport async function appendCompactBoundaryRecord(\n store: SessionStore,\n loc: TranscriptLocation,\n sessionId: string,\n meta: { preTokens: number; trigger: string },\n): Promise<void> {\n const prior = await store.readRecords(loc.agentId);\n const transcript = seedTranscript(prior, { cwd: loc.cwd, sessionId, model: loc.model });\n transcript.appendCompactBoundary(meta);\n await store.appendRecords(loc.agentId, deltaRecords(transcript, prior.length));\n}\n","import type { SessionStore } from \"../../types/session-store.js\";\nimport {\n type PersistTurnInput,\n persistTurn,\n readSessionMessages,\n type TranscriptLocation,\n} from \"./agent-session-store.js\";\n\n/**\n * Per-agent conversation history kept across runs (and across `Agent.resume()`\n * within the same process). Lets the fixture responder recall prior facts when\n * the user asks a follow-up question.\n *\n * SE40 — disk persistence IS the native Claude-shaped `.jsonl` transcript. The\n * in-memory cache holds the narrowed `SessionMessage[]` (user/assistant text) so\n * a send can read `priorMessages` synchronously; the whole rich turn (user +\n * assistant + tool blocks) lands on disk once per send via {@link persistTurnToTranscript}\n * (fed by `run.conversation()`). Hydration on resume reconstructs the session by\n * walking the transcript DAG (`readSessionMessages`).\n *\n * @internal\n */\n\n// `SessionMessage` lives in `./session-types.ts` (leaf types file). Re-exported\n// for back-compat with downstream importers that pulled it from here.\nexport type { SessionMessage } from \"./session-types.js\";\n\nimport type { SessionMessage } from \"./session-types.js\";\n\n// M75 — o cache mora numa folha; ver session-cache.ts para a razao (quebra de ciclo por extracao).\nexport {\n hydratedKeys,\n invalidateSessionCache,\n sessions,\n transcriptKey,\n} from \"./session-cache.js\";\n\nimport { hydratedKeys, sessions, transcriptKey } from \"./session-cache.js\";\n\nconst pendingWrites = new Map<string, Promise<void>>();\nconst recordCounts = new Map<string, number>();\n\n/**\n * Append a session message to the in-memory cache only. Disk persistence for the\n * whole turn happens once per send via {@link persistTurnToTranscript}; the cache\n * feeds `priorMessages` / `onBeforeSend.previousMessageCount` synchronously.\n *\n * @internal\n */\nexport function appendSessionMessage(agentId: string, message: SessionMessage): void {\n const existing = sessions.get(agentId) ?? [];\n existing.push(message);\n // `delete` + `set` reinsere no FIM: `Map` do JS preserva ordem de inserção, então a primeira\n // chave é sempre a menos recentemente tocada. É o LRU inteiro, sem estrutura nova (rung 2/5 da\n // parcimônia — a ordenação que precisamos já é garantia da linguagem).\n sessions.delete(agentId);\n sessions.set(agentId, existing);\n aplicarTeto();\n}\n\n/**\n * Teto de sessões mantidas em memória.\n *\n * O runtime só lê a sessão **ativa**; o resto é cache puro, reconstruível do transcript em disco.\n * 32 é folgado de propósito — o caminho primário de remoção é o `descartarSessao()` explícito no\n * fim da vida do agente, e este teto é rede de segurança contra um processo de vida longa que roda\n * centenas de sessões (risco #2 do plano: um teto apertado poderia evictar sessão ainda referenciada\n * por um fluxo assíncrono em voo).\n */\nexport const TETO_DE_SESSOES_EM_CACHE = 32;\n\nfunction aplicarTeto(): void {\n while (sessions.size > TETO_DE_SESSOES_EM_CACHE) {\n const maisAntiga = sessions.keys().next().value;\n if (maisAntiga === undefined) return;\n sessions.delete(maisAntiga);\n esquecerEscrituracao(maisAntiga);\n }\n}\n\n/**\n * Apaga a escrituração de um `agentId` em TODOS os `cwd` onde ele aparece.\n *\n * Os três mapas são chaveados por `transcriptKey(cwd, agentId)`; `sessions` é o único chaveado pelo\n * `agentId` cru. A primeira versão do teto apagava os três com a chave de `sessions` — isto é, não\n * apagava nada — e deixava `hydratedKeys` **órfã**. Como `hydrateSession` retorna cedo quando a\n * marca está lá, uma sessão evictada voltava **vazia** em vez de reidratar do disco: amnésia\n * silenciosa, e regressão nova do M95, porque antes dele nada evictava.\n *\n * O teto só conhece o `agentId`, não o `cwd`, então varre pelo sufixo — que é o formato que\n * `transcriptKey` produz. Varredura em vez de índice porque estes mapas têm dezenas de entradas,\n * não milhares: um índice inverso aqui seria estrutura nova para um problema que não existe.\n */\nfunction esquecerEscrituracao(agentId: string): void {\n const sufixo = transcriptKey(\"\", agentId).slice(0 - agentId.length - 2);\n for (const k of [...hydratedKeys]) if (k.endsWith(sufixo)) hydratedKeys.delete(k);\n for (const k of [...pendingWrites.keys()]) if (k.endsWith(sufixo)) pendingWrites.delete(k);\n for (const k of [...recordCounts.keys()]) if (k.endsWith(sufixo)) recordCounts.delete(k);\n}\n\n/**\n * Apaga a escrituração de módulo do agente e devolve quantas entradas saíram.\n *\n * M95 — `invalidateSessionCache` limpava **dois** dos quatro mapas (`sessions`, `hydratedKeys`);\n * `pendingWrites` e `recordCounts` nunca eram tocados por id, então cresciam pela vida do processo.\n * Nenhum dos dois é grande por entrada — o vazamento é de contagem, não de volume — mas cache sem\n * dono da remoção é cache que só cresce.\n *\n * Devolve a contagem para que o chamador possa provar a remoção; um segundo descarte devolve 0,\n * que é o que torna o teste de idempotência possível sem expor os mapas.\n */\nexport function descartarSessao(cwd: string, agentId: string): number {\n const chave = transcriptKey(cwd, agentId);\n let removidas = 0;\n // `sessions` NÃO é apagado aqui — e a distinção é medida, não estética. Ele é a conversa\n // legível, e há leitor legítimo DEPOIS do dispose: o golden `two-concurrent-sends-serialize`\n // chama `getSessionMessages(agentId)` após `agent.dispose()`. Apagá-lo aqui devolvia lista vazia\n // e quebrava dois goldens. Quem o limita é o teto LRU acima; os três abaixo são escrituração\n // pura, sem leitor pós-dispose.\n //\n // A chave é `transcriptKey(cwd, agentId)` nos TRÊS — não o `agentId` cru. A primeira versão\n // apagava dois deles pelo `agentId` e portanto **nunca apagava nada**; o teste não pegava porque\n // afirmava apenas que a SEGUNDA chamada devolve 0, o que é verdade mesmo assim.\n if (hydratedKeys.delete(chave)) removidas++;\n if (pendingWrites.delete(chave)) removidas++;\n if (recordCounts.delete(chave)) removidas++;\n return removidas;\n}\n\nexport function getSessionMessages(agentId: string): SessionMessage[] {\n return sessions.get(agentId) ?? [];\n}\n\n/**\n * Persist a full conversation turn (user + assistant + tool blocks) to the native\n * transcript. Chained per-(agent, transcript) so on-disk order matches send order,\n * and fire-and-forget so `send()` is not blocked by disk I/O. Every\n * M50 — when the caller supplies `turn.autoCompact`, size-driven auto-compaction (usage real vs\n * the model's context window) runs in this same chain, surfaced via the optional `onCompact` observer.\n *\n * @internal\n */\nexport function persistTurnToTranscript(\n store: SessionStore,\n loc: TranscriptLocation,\n sessionId: string,\n turn: PersistTurnInput,\n onCompact?: () => void,\n): void {\n const key = transcriptKey(loc.cwd, loc.agentId);\n // Divida PRE-EXISTENTE, exposta quando o M75 consertou a config Biome que abortava antes\n // de varrer estes arquivos (raiz aninhada em refactor/). Nao e codigo novo e nao foi tocado\n // pelo M75; refatorar internals do SDK sem revisao trocaria um problema visivel por um diff\n // arriscado. Rastreado em usetheodev/theokit-sdk#151.\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: ver a razao logo acima\n const chained = (pendingWrites.get(key) ?? Promise.resolve()).then(async () => {\n try {\n await persistTurn(store, loc, sessionId, turn);\n const count = (recordCounts.get(key) ?? 0) + 1;\n recordCounts.set(key, count);\n // M50 — the 50-turn no-summary boundary stub is GONE (it silently amnesia'd the session).\n // Auto-compaction is now size-driven with a real summary: see `maybeAutoCompact` below,\n // invoked in this same write chain by the post-run lifecycle when usage is known.\n if (turn.autoCompact !== undefined) {\n const { autoCompactIfNeeded } = await import(\"./compact-session.js\");\n const fired = await autoCompactIfNeeded({\n store,\n loc,\n sessionId,\n usageTotal: turn.autoCompact.usageTotal,\n contextWindow: turn.autoCompact.contextWindow,\n turnCount: count,\n summarize: turn.autoCompact.summarize,\n });\n if (fired) onCompact?.();\n }\n } catch (cause) {\n const msg = cause instanceof Error ? cause.message : String(cause);\n process.stderr.write(\n `[theokit-sdk] session transcript write failed (${loc.agentId}): ${msg}\\n`,\n );\n }\n });\n pendingWrites.set(\n key,\n chained.then(\n () => undefined,\n () => undefined,\n ),\n );\n}\n\n/**\n * Load the persisted transcript into the in-memory cache. Idempotent per\n * (baseDir, cwd, agentId). Call once per agent lifecycle before the first read.\n *\n * @internal\n */\nexport async function hydrateSession(\n agentId: string,\n loc: { store: SessionStore; cwd: string },\n): Promise<void> {\n const key = transcriptKey(loc.cwd, agentId);\n if (hydratedKeys.has(key)) return;\n hydratedKeys.add(key);\n\n const persisted = await readSessionMessages(loc.store, agentId);\n if (persisted.length === 0) return;\n // M51 review F4 — the DISK is the source of truth at hydration time: after an invalidation\n // (compact/inject), an in-flight turn may have repopulated the cache with a SINGLE message before\n // this hydrate ran; the old \"skip when non-empty\" guard then pinned the parent to a 1-message\n // context (history + injected pair lost until restart). The persist chain serializes writes, so\n // the disk already contains that in-flight turn — replacing is always correct.\n sessions.set(agentId, persisted);\n}\n\n/**\n * Wait for all pending transcript writes to settle. Used by tests and by the\n * agent dispose path so on-disk state matches in-memory before the caller proceeds.\n *\n * @internal\n */\nexport async function flushSessionWrites(): Promise<void> {\n while (pendingWrites.size > 0) {\n const all = Array.from(pendingWrites.values());\n pendingWrites.clear();\n await Promise.all(all);\n }\n}\n\nexport function clearSession(agentId: string): void {\n sessions.delete(agentId);\n}\n\n/**\n * M50 review F1 — drop BOTH the message cache and the hydration marker so the NEXT send re-hydrates\n * from disk. Without this, a compaction only helps after a process restart: the live process keeps\n * sending the full pre-compact history (the cache is read synchronously by every send).\n */\n/**\n * M50 review F5 — run `fn` serialized on the SAME per-(cwd,agentId) write chain the per-turn\n * persistence uses, so a manual `Agent.compact` can never interleave with an in-flight turn's\n * writes (boundary landing mid-turn would orphan the turn from the replay).\n */\nexport function enqueueSessionWrite<T>(\n cwd: string,\n agentId: string,\n fn: () => Promise<T>,\n): Promise<T> {\n const key = transcriptKey(cwd, agentId);\n const prior = pendingWrites.get(key) ?? Promise.resolve();\n const result = prior.then(fn);\n pendingWrites.set(\n key,\n result.then(\n () => undefined,\n () => undefined,\n ),\n );\n return result;\n}\n\n/** Test-only: drop every cached session and hydration marker. @internal */\nexport function clearAllSessions(): void {\n sessions.clear();\n hydratedKeys.clear();\n recordCounts.clear();\n // M50 review F11 — the auto-compact attempt marks live on globalThis; tests reset them here.\n const g = globalThis as unknown as Record<symbol, Map<string, number>>;\n const sym = Symbol.for(\"theokit-sdk.session.auto-compact-attempts\");\n g[sym]?.clear();\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/types/run-events.ts","../src/internal/task/ring-buffer.ts","../src/internal/task/subscribe.ts","../src/internal/task/task-run-event-bridge.ts","../src/internal/task/telemetry.ts","../src/internal/task/registry.ts"],"names":["subscribe"],"mappings":"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","file":"chunk-HRA3CPGG.js","sourcesContent":["/**\n * SE2 — typed runtime EVENT stream, ADDITIVE to the `SDKMessage` content stream.\n *\n * `Run.stream()` yields `SDKMessage`s (the conversation content). `RunEvent`s are\n * out-of-band runtime-OBSERVABILITY signals — the model's content is unaffected —\n * delivered opt-in via `SendOptions.onRunEvent`. Discriminate on `type`. Mirrors\n * the Anthropic `SDKMessage`-union approach (rate-limit, permission-denied, task\n * lifecycle, compaction boundary).\n *\n * The union is the forward-compatible CONTRACT (discriminate exhaustively). The\n * runtime EMITS every variant end-to-end: `tool_progress` + `permission_denied`\n * (agent-loop tool-dispatch seam), `rate_limit` (pool-aware LLM client 429 retry),\n * `compact_boundary` (session auto-compaction), and `task_*` (opt-in bridge from a\n * `Task.submit({ onRunEvent })` task's lifecycle). A consumer switching on `type`\n * sees the real signal.\n *\n * @public\n */\nexport type RunEvent =\n | RunToolProgressEvent\n | RunRateLimitEvent\n | RunPermissionDeniedEvent\n | RunTaskStartedEvent\n | RunTaskUpdatedEvent\n | RunTaskCompletedEvent\n | RunCompactBoundaryEvent\n | RunCompactionFallbackEvent\n | RunTripwireEvent\n | RunCompletionCheckEvent;\n\n/**\n * SE24 — a guardrail processor called `abort()`; the run stops with a tripwire.\n * Delivered via {@link SendOptions.onRunEvent} (mirrors the `RunResult.tripwire`\n * surfaced on `wait()`).\n */\nexport interface RunTripwireEvent {\n readonly type: \"tripwire\";\n readonly reason: string;\n readonly processorId: string;\n}\n\n/** A tool call is being dispatched (before its result). */\nexport interface RunToolProgressEvent {\n readonly type: \"tool_progress\";\n readonly toolName: string;\n readonly toolCallId: string;\n}\n\n/** The provider returned a rate-limit (HTTP 429); the loop will back off + retry. */\nexport interface RunRateLimitEvent {\n readonly type: \"rate_limit\";\n /** Retry attempt number (1-based) about to be delayed. */\n readonly attempt: number;\n /** Delay in ms before the retry, when the provider/policy supplied one. */\n readonly retryAfterMs?: number;\n}\n\n/**\n * A tool call was DENIED before dispatch — by the permission gate/plugin (SE1),\n * an operator file-hook `preToolUse`, or the fork tool-whitelist. `source`\n * discriminates which. `toolCallId` joins the event to the tool-call log.\n */\nexport interface RunPermissionDeniedEvent {\n readonly type: \"permission_denied\";\n readonly toolName: string;\n readonly toolCallId: string;\n /** Which layer blocked the call. */\n readonly source: \"plugin\" | \"file_hook\" | \"fork_whitelist\";\n /** The rejection message surfaced to the model. */\n readonly message: string;\n}\n\n/** A background task/subagent started. */\nexport interface RunTaskStartedEvent {\n readonly type: \"task_started\";\n readonly taskId: string;\n readonly description?: string;\n}\n\n/** A background task/subagent changed state. */\nexport interface RunTaskUpdatedEvent {\n readonly type: \"task_updated\";\n readonly taskId: string;\n readonly status: string;\n}\n\n/** A background task/subagent finished. */\nexport interface RunTaskCompletedEvent {\n readonly type: \"task_completed\";\n readonly taskId: string;\n readonly status: \"completed\" | \"failed\" | \"stopped\";\n}\n\n/**\n * SE34 — the per-send completion check (`isTaskComplete`) produced a verdict.\n * Emitted once, after a finished run's reply is judged against\n * {@link SendOptions.completionCheck}. Distinct from `task_completed` (which is\n * background-task/subagent lifecycle). Mirrors {@link RunResult.completionCheck}.\n */\nexport interface RunCompletionCheckEvent {\n readonly type: \"completion_check\";\n readonly complete: boolean;\n readonly reason: string;\n}\n\n/** The conversation crossed a compaction boundary (history was summarized). */\nexport interface RunCompactBoundaryEvent {\n readonly type: \"compact_boundary\";\n readonly trigger: \"manual\" | \"auto\";\n /** Token count before compaction, when known. */\n readonly preTokens?: number;\n}\n\n/**\n * M77 — auto-compaction is budgeting against a FLOOR, because neither the catalog nor the caller\n * supplied a context window for this model.\n *\n * The prior behaviour was to disable auto-compaction entirely and write one line to stderr per\n * process. That is fail-OPEN: the conversation grows until the provider rejects it. This event exists\n * so a surface can say \"I am running without a real budget\" instead of the user discovering it at the\n * moment of failure.\n *\n * Not emitted when the window came from the catalog (the normal path) or from an explicit caller\n * override (the caller already knows).\n */\nexport interface RunCompactionFallbackEvent {\n readonly type: \"compaction_fallback\";\n /** The model whose window is unknown — what the user needs to fix in configuration. */\n readonly model: string;\n /** The floor being budgeted against, after the safety margin. */\n readonly window: number;\n}\n\n/**\n * SE2 — the opt-in sink for {@link RunEvent}s. Supplied via `SendOptions.onRunEvent`.\n * Synchronous + best-effort: a throwing sink must never break the run (the emitter\n * try-catches it), so keep it fast (push to a queue, don't await).\n */\nexport type RunEventSink = (event: RunEvent) => void;\n\n/**\n * SE2 — emit a {@link RunEvent} to an optional sink, swallowing any sink error so\n * observability can never break the run (fail-safe, mirrors the EventBus EC-2\n * contract). No-op when the sink is absent.\n */\nexport function emitRunEvent(sink: RunEventSink | undefined, event: RunEvent): void {\n if (sink === undefined) return;\n try {\n sink(event);\n } catch {\n // best-effort: an observability sink must never break the run.\n }\n}\n","/**\n * Bounded FIFO ring buffer for late-attach replay (ADR D372).\n *\n * Push always succeeds; when the buffer is at capacity the oldest\n * entry is dropped and the `truncated` flag flips to `true`. Drain\n * returns a snapshot + the current truncated flag.\n *\n * @internal\n */\n\nexport class RingBuffer<T> {\n private readonly buf: T[] = [];\n private truncated = false;\n\n constructor(private readonly cap: number) {\n if (!Number.isInteger(cap) || cap < 1) {\n throw new Error(`RingBuffer capacity must be a positive integer, got ${cap}`);\n }\n }\n\n push(item: T): void {\n if (this.buf.length >= this.cap) {\n this.buf.shift();\n this.truncated = true;\n }\n this.buf.push(item);\n }\n\n drain(): { readonly items: readonly T[]; readonly truncated: boolean } {\n return { items: this.buf.slice(), truncated: this.truncated };\n }\n\n size(): number {\n return this.buf.length;\n }\n\n wasTruncated(): boolean {\n return this.truncated;\n }\n}\n","/**\n * `subscribe(id)` — emits the per-task event stream (D372 ring buffer\n * + live tail). The returned AsyncIterable implements `return()` for\n * leak-free cleanup (EC-10).\n *\n * @internal\n */\n\nimport { TaskNotFoundError } from \"../../errors.js\";\nimport { isValidTaskId, type TaskEvent } from \"../../types/task.js\";\nimport type { RingBuffer } from \"./ring-buffer.js\";\n\nexport interface SubscribeDeps {\n getBuffer(id: string): RingBuffer<TaskEvent> | undefined;\n getOrCreateSubscriberSet(id: string): Set<(e: TaskEvent) => void>;\n removeSubscriber(id: string, cb: (e: TaskEvent) => void): void;\n}\n\nfunction isTerminalEvent(event: TaskEvent): boolean {\n return event.type === \"finished\" || event.type === \"errored\" || event.type === \"cancelled\";\n}\n\nfunction drainBuffered(buffer: RingBuffer<TaskEvent>): TaskEvent[] {\n const { items, truncated } = buffer.drain();\n const queue = items.slice();\n if (truncated && queue.length > 0) {\n const first = queue[0];\n if (first !== undefined && first.type === \"submitted\") {\n queue[0] = { ...first, truncated: true } satisfies TaskEvent;\n }\n }\n return queue;\n}\n\nclass TaskIterator implements AsyncIterator<TaskEvent> {\n private readonly queue: TaskEvent[];\n private pendingResolve?: (v: IteratorResult<TaskEvent>) => void;\n private done = false;\n private readonly callback: (e: TaskEvent) => void;\n\n constructor(\n buffer: RingBuffer<TaskEvent>,\n private readonly id: string,\n private readonly deps: SubscribeDeps,\n ) {\n this.queue = drainBuffered(buffer);\n this.callback = (e) => this.deliver(e);\n deps.getOrCreateSubscriberSet(id).add(this.callback);\n }\n\n private deliver(e: TaskEvent): void {\n if (this.done) return;\n if (this.pendingResolve !== undefined) {\n const r = this.pendingResolve;\n this.pendingResolve = undefined;\n r({ value: e, done: false });\n } else {\n this.queue.push(e);\n }\n }\n\n private cleanup(): void {\n if (this.done) return;\n this.done = true;\n this.deps.removeSubscriber(this.id, this.callback);\n if (this.pendingResolve !== undefined) {\n const r = this.pendingResolve;\n this.pendingResolve = undefined;\n r({ value: undefined, done: true });\n }\n }\n\n private dequeue(): IteratorResult<TaskEvent> | undefined {\n const event = this.queue.shift();\n if (event === undefined) return undefined;\n if (isTerminalEvent(event)) queueMicrotask(() => this.cleanup());\n return { value: event, done: false };\n }\n\n next(): Promise<IteratorResult<TaskEvent>> {\n if (this.done) return Promise.resolve({ value: undefined, done: true });\n const queued = this.dequeue();\n if (queued !== undefined) return Promise.resolve(queued);\n return new Promise((resolve) => {\n this.pendingResolve = resolve;\n });\n }\n\n return(): Promise<IteratorResult<TaskEvent>> {\n this.cleanup();\n return Promise.resolve({ value: undefined, done: true });\n }\n}\n\nexport function buildSubscribe(deps: SubscribeDeps) {\n return function subscribe(id: string): AsyncIterable<TaskEvent> {\n if (!isValidTaskId(id, true)) throw new TaskNotFoundError(id);\n const buffer = deps.getBuffer(id);\n if (buffer === undefined) throw new TaskNotFoundError(id);\n\n return {\n [Symbol.asyncIterator](): AsyncIterator<TaskEvent> {\n return new TaskIterator(buffer, id, deps);\n },\n };\n };\n}\n","/**\n * SE2 — the `TaskEvent` → `task_*` RunEvent bridge for the opt-in `onRunEvent`\n * sink. Extracted from `registry.ts` (a pure, self-contained mapping) to keep\n * the registry within the G8 LoC budget and give the bridge one home.\n *\n * @internal\n */\n\nimport type { RunEvent } from \"../../types/run-events.js\";\nimport type { TaskEvent, TaskKind } from \"../../types/task.js\";\n\n/** Map a `TaskEvent` to a `task_*` RunEvent, or `undefined` when it has no counterpart. */\nexport function taskEventToRunEvent(\n event: TaskEvent,\n taskId: string,\n kind: TaskKind,\n): RunEvent | undefined {\n switch (event.type) {\n case \"started\":\n return { type: \"task_started\", taskId, description: kind };\n case \"progress\":\n return { type: \"task_updated\", taskId, status: \"progress\" };\n case \"finished\":\n return { type: \"task_completed\", taskId, status: \"completed\" };\n case \"errored\":\n return { type: \"task_completed\", taskId, status: \"failed\" };\n case \"cancelled\":\n return { type: \"task_completed\", taskId, status: \"stopped\" };\n default:\n return undefined; // `submitted` (queued) has no RunEvent counterpart\n }\n}\n","/**\n * OTel telemetry for the Task registry (ADR D371).\n *\n * Spans:\n * - `task.submit` — short-lived span around the submit + insert.\n * - `task.transition` — per state transition (attrs: from / to).\n * - `task.cancel` — invoked from `Task.cancel` or via cancelRequested honor.\n *\n * Uses the existing tracer seam (D34); when OTel is absent, every helper\n * returns the shared no-op span. No new peer deps.\n *\n * @internal\n */\n\nimport { getTracer, noopSpan, type SpanLike } from \"../telemetry/tracer-loader.js\";\n\nconst TRACER_NAME = \"@theokit/sdk/task\";\n\nexport function startTaskSubmitSpan(info: { taskId: string; kind: string }): SpanLike {\n const tracer = getTracer(TRACER_NAME);\n if (tracer === undefined) return noopSpan;\n return tracer.startSpan(\"task.submit\", {\n attributes: {\n \"task.id\": info.taskId,\n \"task.kind\": info.kind,\n },\n });\n}\n\nexport function startTaskTransitionSpan(info: {\n taskId: string;\n from: string;\n to: string;\n}): SpanLike {\n const tracer = getTracer(TRACER_NAME);\n if (tracer === undefined) return noopSpan;\n return tracer.startSpan(\"task.transition\", {\n attributes: {\n \"task.id\": info.taskId,\n \"task.state.from\": info.from,\n \"task.state.to\": info.to,\n },\n });\n}\n\nexport function startTaskCancelSpan(info: {\n taskId: string;\n reason?: string;\n via: \"api\" | \"cancelRequested\";\n}): SpanLike {\n const tracer = getTracer(TRACER_NAME);\n if (tracer === undefined) return noopSpan;\n return tracer.startSpan(\"task.cancel\", {\n attributes: {\n \"task.id\": info.taskId,\n \"task.cancel.via\": info.via,\n ...(info.reason !== undefined ? { \"task.cancel.reason\": info.reason } : {}),\n },\n });\n}\n","/**\n * `TaskRegistry` — the singleton coordinating Task submit/list/get/cancel/\n * subscribe. Wraps the pluggable `TaskStore` (D364), the `AsyncSemaphore`\n * (D135 / D369) and a per-task `RingBuffer<TaskEvent>` (D372) for\n * late-attach replay.\n *\n * Edge cases absorbed:\n * - EC-3: work-fn invocation goes through `Promise.resolve().then(...)`\n * so synchronous throws become rejected promises.\n * - EC-4: pre-aborted signal short-circuits to `cancelled` without\n * acquiring a semaphore slot.\n * - EC-7: cross-process cancel via the `cancelRequested` flag on\n * `TaskHandle`. Registry polls at start + each progress event.\n * - EC-9: store-update failures are caught + logged; the event is\n * still emitted so subscribers always observe a terminal event.\n * - EC-10: subscribe iterator implements `return()` for leak-free\n * cleanup.\n * - EC-11: reentrant submit (work-fn calling `Task.submit`) uses an\n * ALS marker to bypass the semaphore queue, avoiding deadlock under\n * low concurrency caps.\n *\n * @internal\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { randomUUID } from \"node:crypto\";\n\nimport { InvalidTaskIdError } from \"../../errors.js\";\nimport { emitRunEvent } from \"../../types/run-events.js\";\nimport {\n isValidTaskId,\n type TaskCancelResult,\n type TaskEvent,\n type TaskFilter,\n type TaskHandle,\n type TaskKind,\n type TaskState,\n type TaskStoreOptions,\n} from \"../../types/task.js\";\nimport { type AsyncSemaphore, createSemaphore } from \"../runtime/concurrency/async-semaphore.js\";\nimport { RingBuffer } from \"./ring-buffer.js\";\nimport { getTaskStoreFor, InMemoryTaskStore, type TaskStore } from \"./store.js\";\nimport { buildSubscribe } from \"./subscribe.js\";\nimport { taskEventToRunEvent } from \"./task-run-event-bridge.js\";\nimport { startTaskCancelSpan, startTaskSubmitSpan, startTaskTransitionSpan } from \"./telemetry.js\";\n\nconst DEFAULT_CONCURRENCY = 8;\nconst DEFAULT_RETENTION_MS = 60 * 60 * 1000;\nconst EVICTION_INTERVAL_MS = 5 * 60 * 1000;\nconst RING_CAP = 64;\n\n/** EC-11 — ALS flag indicating we are inside a task work-fn. Reentrant submits bypass the semaphore. */\nconst reentryAls = new AsyncLocalStorage<boolean>();\n\nexport interface TaskRegistryOptions {\n readonly store?: TaskStoreOptions;\n readonly maxConcurrent?: number;\n readonly retentionMs?: number;\n}\n\nexport interface TaskWorkContext {\n readonly signal: AbortSignal;\n emit(payload: unknown): void;\n}\n\ntype WorkFn<T> = (ctx: TaskWorkContext) => Promise<T> | T;\n\ninterface InternalState {\n readonly store: TaskStore;\n readonly semaphore: AsyncSemaphore;\n readonly aborters: Map<string, AbortController>;\n readonly buffers: Map<string, RingBuffer<TaskEvent>>;\n readonly subscribers: Map<string, Set<(e: TaskEvent) => void>>;\n retentionMs: number;\n evictTimer?: NodeJS.Timeout;\n firstSubmitSeen: boolean;\n}\n\nfunction buildState(opts: TaskRegistryOptions): InternalState {\n const store = opts.store === undefined ? new InMemoryTaskStore() : getTaskStoreFor(opts.store);\n return {\n store,\n semaphore: createSemaphore(opts.maxConcurrent ?? DEFAULT_CONCURRENCY),\n aborters: new Map(),\n buffers: new Map(),\n subscribers: new Map(),\n retentionMs: opts.retentionMs ?? DEFAULT_RETENTION_MS,\n firstSubmitSeen: false,\n };\n}\n\nlet state: InternalState = buildState({});\n\nexport function __resetTaskRegistryForTests(): void {\n if (state.evictTimer !== undefined) clearInterval(state.evictTimer);\n state = buildState({});\n}\n\nexport function __getSubscribersCountForTests(taskId: string): number {\n return state.subscribers.get(taskId)?.size ?? 0;\n}\n\nexport function configure(opts: TaskRegistryOptions): void {\n if (state.firstSubmitSeen) {\n process.stderr.write(\n \"[task] configure() ignored — registry already in use; reset via __resetTaskRegistryForTests()\\n\",\n );\n return;\n }\n if (state.evictTimer !== undefined) clearInterval(state.evictTimer);\n state = buildState(opts);\n}\n\nfunction emitToSubscribers(taskId: string, event: TaskEvent): void {\n const buffer = state.buffers.get(taskId);\n if (buffer !== undefined) buffer.push(event);\n const subs = state.subscribers.get(taskId);\n if (subs === undefined) return;\n for (const cb of subs) {\n try {\n cb(event);\n } catch (err) {\n process.stderr.write(`[task] subscriber threw: ${(err as Error).message}\\n`);\n }\n }\n}\n\nasync function safeUpdate(\n taskId: string,\n mutate: (h: TaskHandle) => TaskHandle,\n): Promise<TaskHandle | undefined> {\n try {\n return await state.store.update(taskId, mutate);\n } catch (err) {\n // EC-9: store failure should not swallow the event.\n process.stderr.write(`[task] store.update failed for ${taskId}: ${(err as Error).message}\\n`);\n return undefined;\n }\n}\n\nfunction startEvictTimerIfNeeded(): void {\n if (state.evictTimer !== undefined) return;\n state.evictTimer = setInterval(() => {\n const cutoff = Date.now() - state.retentionMs;\n void state.store\n .evictTerminalOlderThan(cutoff)\n .then((count) => {\n if (count === 0) return;\n // Also drop buffers + subscribers for evicted tasks. We don't\n // know which ones were dropped — clean up any task whose store\n // entry is gone.\n for (const id of state.buffers.keys()) {\n void state.store.get(id).then((h) => {\n if (h === undefined) {\n state.buffers.delete(id);\n state.subscribers.delete(id);\n state.aborters.delete(id);\n }\n });\n }\n })\n .catch(() => {\n /* swallow timer errors */\n });\n }, EVICTION_INTERVAL_MS).unref();\n}\n\nfunction buildSubmittedEvent(handle: TaskHandle): TaskEvent {\n return {\n type: \"submitted\",\n taskId: handle.id,\n kind: handle.kind,\n submittedAt: handle.submittedAt,\n ...(handle.meta !== undefined ? { meta: handle.meta } : {}),\n };\n}\n\nasync function shortCircuitAborted(handle: TaskHandle, signal: AbortSignal): Promise<TaskHandle> {\n // EC-4: pre-aborted signal — skip queue/semaphore.\n const cancelled: TaskHandle = {\n ...handle,\n state: \"cancelled\",\n cancelledAt: Date.now(),\n };\n await state.store.insert(cancelled);\n state.buffers.set(handle.id, new RingBuffer(RING_CAP));\n emitToSubscribers(handle.id, buildSubmittedEvent(cancelled));\n emitToSubscribers(handle.id, {\n type: \"cancelled\",\n taskId: handle.id,\n cancelledAt: cancelled.cancelledAt ?? Date.now(),\n reason: signal.reason instanceof Error ? signal.reason.message : \"pre-aborted\",\n });\n return cancelled;\n}\n\nasync function transition<T extends TaskState>(\n taskId: string,\n next: T,\n patch: Partial<TaskHandle>,\n): Promise<void> {\n const before = await state.store.get(taskId);\n const span = startTaskTransitionSpan({\n taskId,\n from: before?.state ?? \"unknown\",\n to: next,\n });\n try {\n await safeUpdate(taskId, (h) => ({ ...h, state: next, ...patch }));\n } finally {\n span.end();\n }\n}\n\ninterface SubmitInternal<T> {\n readonly kind: TaskKind;\n readonly work: WorkFn<T>;\n readonly id?: string;\n readonly meta?: Record<string, unknown>;\n readonly signal?: AbortSignal;\n /** When true (adapter-internal), the validator allows reserved prefixes. */\n readonly allowReservedPrefix?: boolean;\n /** SE2 — forward this task's lifecycle to the run-event sink as `task_*` RunEvents. */\n readonly onRunEvent?: import(\"../../types/run-events.js\").RunEventSink;\n}\n\nasync function buildAndInsertQueued(\n internal: SubmitInternal<unknown>,\n resolvedId: string,\n): Promise<TaskHandle> {\n const submittedAt = Date.now();\n const handle: TaskHandle = {\n id: resolvedId,\n kind: internal.kind,\n state: \"queued\",\n submittedAt,\n ...(internal.meta !== undefined ? { meta: internal.meta } : {}),\n };\n await state.store.insert(handle);\n state.buffers.set(resolvedId, new RingBuffer(RING_CAP));\n emitToSubscribers(resolvedId, buildSubmittedEvent(handle));\n return handle;\n}\n\nfunction resolveIdInternal(internal: SubmitInternal<unknown>): string {\n if (internal.id === undefined) return randomUUID();\n if (!isValidTaskId(internal.id, internal.allowReservedPrefix ?? false)) {\n throw new InvalidTaskIdError(`invalid task id: ${internal.id}`, internal.id);\n }\n return internal.id;\n}\n\nasync function runWorkAndFinalize<T>(\n taskId: string,\n aborter: AbortController,\n work: WorkFn<T>,\n): Promise<void> {\n const ctx: TaskWorkContext = {\n signal: aborter.signal,\n emit(payload) {\n // EC-7: check cancelRequested at every progress checkpoint.\n void checkCancelRequestedAt(taskId, aborter);\n emitToSubscribers(taskId, {\n type: \"progress\",\n taskId,\n at: Date.now(),\n payload,\n });\n },\n };\n\n try {\n const result = await reentryAls.run(true, () => Promise.resolve().then(() => work(ctx)));\n if (aborter.signal.aborted) {\n const cancelledAt = Date.now();\n await transition(taskId, \"cancelled\", { cancelledAt });\n emitToSubscribers(taskId, { type: \"cancelled\", taskId, cancelledAt });\n return;\n }\n const finishedAt = Date.now();\n await transition(taskId, \"finished\", { finishedAt, result });\n emitToSubscribers(taskId, { type: \"finished\", taskId, finishedAt, result });\n } catch (err) {\n if (aborter.signal.aborted) {\n const cancelledAt = Date.now();\n await transition(taskId, \"cancelled\", { cancelledAt });\n emitToSubscribers(taskId, { type: \"cancelled\", taskId, cancelledAt });\n return;\n }\n const erroredAt = Date.now();\n const error =\n err instanceof Error\n ? { code: (err as { code?: string }).code ?? \"work_threw\", message: err.message }\n : { code: \"work_threw\", message: String(err) };\n await transition(taskId, \"error\", { erroredAt, error });\n emitToSubscribers(taskId, { type: \"errored\", taskId, erroredAt, error });\n }\n}\n\nasync function checkCancelRequestedAt(taskId: string, aborter: AbortController): Promise<void> {\n if (aborter.signal.aborted) return;\n try {\n const handle = await state.store.get(taskId);\n if (handle?.cancelRequested === true) {\n aborter.abort(\"cancelRequested\");\n }\n } catch {\n /* ignore — best-effort poll */\n }\n}\n\nasync function acquireSlot(): Promise<() => void> {\n if (reentryAls.getStore() === true) {\n // EC-11: reentrant submit bypasses the queue.\n return () => {\n /* no-op */\n };\n }\n return state.semaphore.acquire();\n}\n\n/**\n * Submit a task. Validates id (D368, EC-5 via allowReservedPrefix),\n * handles pre-aborted signals (EC-4), enforces single-flight by id\n * (D367), runs work under semaphore (D369/EC-11 reentrant bypass),\n * and produces the canonical event stream (D366).\n */\nexport async function submit<T>(internal: SubmitInternal<T>): Promise<TaskHandle> {\n state.firstSubmitSeen = true;\n startEvictTimerIfNeeded();\n\n const resolvedId = resolveIdInternal(internal);\n // SE2 — bridge the task lifecycle to the caller's run-event sink (opt-in).\n if (internal.onRunEvent !== undefined) {\n const sink = internal.onRunEvent;\n const kind = internal.kind;\n const subs = state.subscribers.get(resolvedId) ?? new Set();\n subs.add((e: TaskEvent) => {\n const runEvent = taskEventToRunEvent(e, resolvedId, kind);\n if (runEvent !== undefined) emitRunEvent(sink, runEvent);\n });\n state.subscribers.set(resolvedId, subs);\n }\n const submitSpan = startTaskSubmitSpan({ taskId: resolvedId, kind: internal.kind });\n\n // D367 single-flight.\n const existing = await state.store.get(resolvedId);\n if (existing !== undefined) {\n submitSpan.end();\n return existing;\n }\n\n const queuedHandle = await buildAndInsertQueued(internal, resolvedId);\n submitSpan.end();\n\n // EC-4: pre-aborted signal — short-circuit.\n if (internal.signal?.aborted === true) {\n return shortCircuitAborted(queuedHandle, internal.signal);\n }\n\n const aborter = new AbortController();\n state.aborters.set(resolvedId, aborter);\n if (internal.signal !== undefined) {\n internal.signal.addEventListener(\"abort\", () => aborter.abort(internal.signal?.reason), {\n once: true,\n });\n }\n\n // Fire and forget the actual run; the returned handle is the queued one.\n const release = await acquireSlot();\n void (async () => {\n try {\n // Check cancelRequested before starting (EC-7).\n await checkCancelRequestedAt(resolvedId, aborter);\n if (aborter.signal.aborted) {\n const cancelledAt = Date.now();\n await transition(resolvedId, \"cancelled\", { cancelledAt });\n emitToSubscribers(resolvedId, { type: \"cancelled\", taskId: resolvedId, cancelledAt });\n return;\n }\n const startedAt = Date.now();\n await transition(resolvedId, \"running\", { startedAt });\n emitToSubscribers(resolvedId, { type: \"started\", taskId: resolvedId, startedAt });\n await runWorkAndFinalize(resolvedId, aborter, internal.work as WorkFn<unknown>);\n } finally {\n release();\n state.aborters.delete(resolvedId);\n }\n })();\n\n return queuedHandle;\n}\n\nexport async function list(filter: TaskFilter = {}): Promise<TaskHandle[]> {\n return state.store.list(filter);\n}\n\nexport async function get(id: string): Promise<TaskHandle | undefined> {\n if (!isValidTaskId(id, true)) return undefined;\n return state.store.get(id);\n}\n\nexport async function cancel(id: string, reason?: string): Promise<TaskCancelResult> {\n if (!isValidTaskId(id, true)) return { cancelled: false, alreadyTerminal: false };\n const handle = await state.store.get(id);\n if (handle === undefined) return { cancelled: false, alreadyTerminal: false };\n if (handle.state === \"finished\" || handle.state === \"error\" || handle.state === \"cancelled\") {\n return { cancelled: false, alreadyTerminal: true };\n }\n const span = startTaskCancelSpan({\n taskId: id,\n ...(reason !== undefined ? { reason } : {}),\n via: \"api\",\n });\n try {\n return await cancelInternal(id, handle.state, reason);\n } finally {\n span.end();\n }\n}\n\nasync function cancelInternal(\n id: string,\n currentState: TaskState,\n reason?: string,\n): Promise<TaskCancelResult> {\n if (currentState === \"queued\") {\n const cancelledAt = Date.now();\n await transition(id, \"cancelled\", { cancelledAt });\n emitToSubscribers(id, {\n type: \"cancelled\",\n taskId: id,\n cancelledAt,\n ...(reason !== undefined ? { reason } : {}),\n });\n state.aborters.delete(id);\n return { cancelled: true, alreadyTerminal: false };\n }\n // running: trigger AbortController; runWorkAndFinalize handles the transition.\n const aborter = state.aborters.get(id);\n if (aborter !== undefined) aborter.abort(reason ?? \"cancelled\");\n return { cancelled: true, alreadyTerminal: false };\n}\n\nexport const subscribe = buildSubscribe({\n getBuffer: (id) => state.buffers.get(id),\n getOrCreateSubscriberSet: (id) => {\n let subs = state.subscribers.get(id);\n if (subs === undefined) {\n subs = new Set();\n state.subscribers.set(id, subs);\n }\n return subs;\n },\n removeSubscriber: (id, cb) => {\n const set = state.subscribers.get(id);\n set?.delete(cb);\n if (set !== undefined && set.size === 0) state.subscribers.delete(id);\n },\n});\n"]}