@makaio/framework 1.0.0-dev-1779051654000 → 1.0.0-dev-1781023871421

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 (419) hide show
  1. package/LICENSE +1 -1
  2. package/dist/.makaio-build.json +5 -0
  3. package/dist/account-identity-DT5NOtFi.mjs +1 -0
  4. package/dist/adapter-C1eI-fGV.mjs +1 -0
  5. package/dist/adapters/acp-client/index.d.mts +6013 -14
  6. package/dist/adapters/acp-client/index.mjs +3 -1
  7. package/dist/adapters/config/index.d.mts +1 -1
  8. package/dist/adapters/config/index.mjs +1 -1
  9. package/dist/adapters/index.d.mts +47 -20
  10. package/dist/adapters/index.mjs +13 -6
  11. package/dist/adapters/node.d.mts +4 -4
  12. package/dist/adapters/node.mjs +4 -4
  13. package/dist/adapters/stream-session/index.d.mts +30 -0
  14. package/dist/adapters/stream-session/index.mjs +1 -1
  15. package/dist/artifact-B3npq1cy.mjs +1 -0
  16. package/dist/bus/index.d.mts +866 -203
  17. package/dist/bus/index.mjs +1 -1
  18. package/dist/bus-Caz3Jpbc.mjs +1 -0
  19. package/dist/bus-Hb-LGzgb.mjs +2 -0
  20. package/dist/chunk-DTipWd-i.mjs +1 -0
  21. package/dist/client-bx74gm4R.mjs +1 -0
  22. package/dist/clients/index.d.mts +113 -35
  23. package/dist/clients/index.mjs +2 -2
  24. package/dist/{clients-namespace-UHj5wt-l.d.mts → clients-namespace-GmSJpBUV.d.mts} +8 -8
  25. package/dist/{config-namespace-ChZOpi1W.d.mts → config-namespace-CPY9YsR8.d.mts} +4 -4
  26. package/dist/contracts/adapter/index.d.mts +3 -3
  27. package/dist/contracts/adapter/index.mjs +1 -1
  28. package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
  29. package/dist/contracts/artifact/index.d.mts +2 -0
  30. package/dist/contracts/artifact/index.mjs +1 -0
  31. package/dist/contracts/client/index.d.mts +2 -2
  32. package/dist/contracts/client/index.mjs +1 -1
  33. package/dist/contracts/common/index.d.mts +1 -1
  34. package/dist/contracts/config/index.d.mts +8 -8
  35. package/dist/contracts/config/index.mjs +1 -1
  36. package/dist/contracts/extension/index.d.mts +4 -3
  37. package/dist/contracts/extension/index.mjs +1 -1
  38. package/dist/contracts/facet/index.d.mts +2 -0
  39. package/dist/contracts/facet/index.mjs +1 -0
  40. package/dist/contracts/harness/index.d.mts +1 -1
  41. package/dist/contracts/harness/index.mjs +1 -1
  42. package/dist/contracts/host/index.d.mts +1 -1
  43. package/dist/contracts/host/index.mjs +1 -1
  44. package/dist/contracts/index.d.mts +12370 -1990
  45. package/dist/contracts/index.mjs +1 -1
  46. package/dist/contracts/materialization/index.d.mts +4 -0
  47. package/dist/contracts/materialization/index.mjs +1 -0
  48. package/dist/contracts/model-registry/index.d.mts +1 -1
  49. package/dist/contracts/model-registry/index.mjs +1 -1
  50. package/dist/contracts/native-session-supervisor/index.d.mts +1 -1
  51. package/dist/contracts/native-session-supervisor/index.mjs +1 -1
  52. package/dist/contracts/platform/index.d.mts +1 -1
  53. package/dist/contracts/platform/index.mjs +1 -1
  54. package/dist/contracts/provider/index.d.mts +2 -2
  55. package/dist/contracts/provider/index.mjs +1 -1
  56. package/dist/contracts/session/index.d.mts +3 -3
  57. package/dist/contracts/session/index.mjs +1 -1
  58. package/dist/contracts/shared/index.d.mts +2 -2
  59. package/dist/contracts/shared/index.mjs +1 -1
  60. package/dist/contracts/skill/index.d.mts +1 -1
  61. package/dist/contracts/skill/index.mjs +1 -1
  62. package/dist/contracts/telemetry/index.d.mts +2 -0
  63. package/dist/contracts/telemetry/index.mjs +1 -0
  64. package/dist/contracts/timeout/index.d.mts +1 -1
  65. package/dist/contracts/timeout/index.mjs +1 -1
  66. package/dist/contracts/toast/index.d.mts +2 -2
  67. package/dist/contracts/toast/index.mjs +1 -1
  68. package/dist/contracts/variant/index.d.mts +1 -1
  69. package/dist/contracts/variant/index.mjs +1 -1
  70. package/dist/core/index.d.mts +296 -34
  71. package/dist/core/index.mjs +1 -1
  72. package/dist/{credential-ref-DLCsoKVZ.mjs → credential-ref-YWQQENEo.mjs} +1 -1
  73. package/dist/cursor-storage-CtVJ3JzB.mjs +1 -0
  74. package/dist/{definition-DB7bbFSa.d.mts → definition-BLCdXGzh.d.mts} +17 -3
  75. package/dist/definition-CrgHIpTK.d.mts +60 -0
  76. package/dist/{definition-DkYy1PZz.mjs → definition-DZMXOnjX.mjs} +1 -1
  77. package/dist/{definition-DtUNiGom.d.mts → definition-pkJ6szUl.d.mts} +1 -1
  78. package/dist/drizzle-Eq8W1EbD.mjs +1 -0
  79. package/dist/event-Ca2yUf5i.mjs +1 -0
  80. package/dist/execution-target-CRPTfZlc.mjs +1 -0
  81. package/dist/extension-C-4BHMRI.mjs +1 -0
  82. package/dist/extension-CpIUgBKI.mjs +1 -0
  83. package/dist/facet-BuwhrThl.mjs +1 -0
  84. package/dist/filesystem-service-B8rhBRgB.mjs +1 -0
  85. package/dist/filesystem-service-p_iJVHd4.d.mts +66 -0
  86. package/dist/git/index.d.mts +210 -0
  87. package/dist/git/index.mjs +18 -0
  88. package/dist/globby-rtWVaFHv.mjs +41 -0
  89. package/dist/{handlers-DR_4_rAT.mjs → handlers-CkTsQLra.mjs} +3 -3
  90. package/dist/{harness-B6lGP9rm.mjs → harness-BRCMcvQN.mjs} +1 -1
  91. package/dist/{host-CvEht5RT.mjs → host-Br9VuOyr.mjs} +1 -1
  92. package/dist/{index-WKjrpcA_.d.mts → index-472sOmsW.d.mts} +6 -6
  93. package/dist/index-8SZkg7s6.d.mts +353 -0
  94. package/dist/index-B3PK4FIn.d.mts +5116 -0
  95. package/dist/{index-D2jejYlV.d.mts → index-B80L4YqA.d.mts} +3 -3
  96. package/dist/index-BFg9BUpx.d.mts +355 -0
  97. package/dist/index-BGfWS6GE.d.mts +483 -0
  98. package/dist/{index-DQRsGXb5.d.mts → index-BVgfS-AJ.d.mts} +2 -2
  99. package/dist/{index-CnmPtjnA.d.mts → index-B_zQC98V.d.mts} +16 -16
  100. package/dist/{index-DaEp4UWW.d.mts → index-Bh_Ne7LF.d.mts} +54 -42
  101. package/dist/{index-yvN8UcEH.d.mts → index-Bvb2mMH6.d.mts} +109 -109
  102. package/dist/{index-tKvu34DJ2.d.mts → index-CCGVh9BF2.d.mts} +242 -28
  103. package/dist/{index-C-myW_aK.d.mts → index-CGmcS0Ma.d.mts} +2 -2
  104. package/dist/{index-DEw90pa2.d.mts → index-CLpjm52M.d.mts} +3 -3
  105. package/dist/{index-DQWMu5fS.d.mts → index-Caig6TeF.d.mts} +85 -99
  106. package/dist/{index-DwCA1HWa.d.mts → index-CelJCBjk.d.mts} +15 -15
  107. package/dist/{index-ESSDWIB7.d.mts → index-ChunCFu4.d.mts} +1 -1
  108. package/dist/{index-e5C62_M3.d.mts → index-Cm0dUkWL.d.mts} +819 -85
  109. package/dist/{index-N5K1NOYs.d.mts → index-CokQYGVP.d.mts} +4 -4
  110. package/dist/{index-Bigx81Kr.d.mts → index-Cs0kZXIz2.d.mts} +1 -1
  111. package/dist/{index-6lyShOoU.d.mts → index-D5d5HeWI2.d.mts} +34 -0
  112. package/dist/{index-sBob9D25.d.mts → index-D90OmGmV.d.mts} +3 -3
  113. package/dist/{index-D1T-PPqF.d.mts → index-D9MwJ2Q8.d.mts} +3 -3
  114. package/dist/{index-BePI0ckL.d.mts → index-DANINzMu.d.mts} +1 -1
  115. package/dist/{index-BnSQE7z7.d.mts → index-DBw-89vC2.d.mts} +129 -1332
  116. package/dist/{index-C_kS2aqV2.d.mts → index-DGBu6bHi2.d.mts} +14 -14
  117. package/dist/index-DKC62dY5.d.mts +146 -0
  118. package/dist/{index-7sXlairn2.d.mts → index-DKia0MX1.d.mts} +1 -1
  119. package/dist/{index-E8d_RwaF.d.mts → index-DMKnON5s.d.mts} +1 -1
  120. package/dist/{index-Cq8B7cwK.d.mts → index-DUaw0Dw8.d.mts} +1524 -369
  121. package/dist/{index-Dd5s4MSm.d.mts → index-De3kPhlN.d.mts} +2 -2
  122. package/dist/{index-DGTFJB_8.d.mts → index-L4GjJDKb.d.mts} +116 -23
  123. package/dist/{index-iID2R9G1.d.mts → index-U-A8eyGT.d.mts} +7 -7
  124. package/dist/{index-D7T8XCku.d.mts → index-eemAKwsB.d.mts} +23 -2
  125. package/dist/{index-BXP9GK5q.d.mts → index-mNec7V-9.d.mts} +27 -27
  126. package/dist/{index-CnZOKNjU.d.mts → index-soFznFCy2.d.mts} +2 -2
  127. package/dist/{index-Ch3ph52M2.d.mts → index-vtXJuwrz.d.mts} +2 -2
  128. package/dist/{index-BnNqbx2I.d.mts → index-x_lVDp_J.d.mts} +2 -2
  129. package/dist/json-value-CmhSGMLv.mjs +1 -0
  130. package/dist/kernel/cli/index.d.mts +4 -2
  131. package/dist/kernel/cli/index.mjs +1 -1
  132. package/dist/kernel/cli/schemas.d.mts +1 -0
  133. package/dist/kernel/cli/schemas.mjs +1 -1
  134. package/dist/kernel/extension/index.d.mts +1 -1
  135. package/dist/kernel/extension/index.mjs +1 -1
  136. package/dist/kernel/index.d.mts +5 -5
  137. package/dist/kernel/index.mjs +1 -1
  138. package/dist/kernel/namespace/index.d.mts +1 -1
  139. package/dist/kernel/namespace/index.mjs +1 -1
  140. package/dist/kernel/observability/index.d.mts +1 -1
  141. package/dist/kernel/observability/index.mjs +1 -1
  142. package/dist/kernel/providers/index.d.mts +1 -1
  143. package/dist/kernel/providers/index.mjs +1 -1
  144. package/dist/kernel/window/index.d.mts +1 -1
  145. package/dist/kernel/window/index.mjs +1 -1
  146. package/dist/materialization-CuUBu4XI.mjs +1 -0
  147. package/dist/{namespace-BpIE-jQW.d.mts → namespace-5QQqbF-B.d.mts} +1018 -111
  148. package/dist/{namespace-DwCyOaZn2.d.mts → namespace-BM7Djng9.d.mts} +3 -3
  149. package/dist/namespace-BwzZJqTV.mjs +1 -0
  150. package/dist/{namespace-DZcuLwEA.d.mts → namespace-CTm3nEvh.d.mts} +1 -1
  151. package/dist/{namespace-BK2erxpV.d.mts → namespace-CaaNnKcR.d.mts} +3 -3
  152. package/dist/{namespace-GLGGcWPH.d.mts → namespace-CaoZ3S78.d.mts} +1 -1
  153. package/dist/{namespace-DXnMk3U8.d.mts → namespace-CxhsoFUP.d.mts} +27 -31
  154. package/dist/{namespace-B1E57soL.d.mts → namespace-DD8Oiqo7.d.mts} +23 -23
  155. package/dist/{namespace-BCRNwPnw.d.mts → namespace-DLovh2Ws.d.mts} +21 -21
  156. package/dist/{namespace-Ysg1N6rR.d.mts → namespace-DgqkaOVu.d.mts} +26 -25
  157. package/dist/{namespace-B5ZCshBw.d.mts → namespace-Dr8K0MCp.d.mts} +82 -81
  158. package/dist/{namespace-DGMO2E8f.mjs → namespace-DuXK5AYN.mjs} +1 -1
  159. package/dist/{namespace-ZbthBQVt.d.mts → namespace-EQniz-Aw.d.mts} +14 -14
  160. package/dist/{namespace-C54Oj025.d.mts → namespace-IV1QK__V.d.mts} +1 -1
  161. package/dist/{namespace-BKrV_2gZ.d.mts → namespace-TyiTsLFv.d.mts} +46 -45
  162. package/dist/{namespace-OwAf1Brw.mjs → namespace-xcmbQlxh.mjs} +1 -1
  163. package/dist/{native-session-supervisor-zPt624Tp.mjs → native-session-supervisor-B1TnaPUF.mjs} +1 -1
  164. package/dist/node/bus-server/index.d.mts +1 -1
  165. package/dist/node/bus-server/index.mjs +1 -1
  166. package/dist/node/bus-server/server-lifecycle.d.mts +1 -1
  167. package/dist/node/bus-server/server-lifecycle.mjs +1 -1
  168. package/dist/node/machine-identity/index.mjs +2 -2
  169. package/dist/node/transports/index.d.mts +200 -7
  170. package/dist/node/transports/index.mjs +2 -2
  171. package/dist/{orchestrator-shared-D2txLAUs.mjs → orchestrator-shared-CIDiFJMD.mjs} +1 -1
  172. package/dist/{orchestrator-shared-DrjtTXYh.d.mts → orchestrator-shared-Dfa7FMyw.d.mts} +5 -5
  173. package/dist/package-DKVlsMP3.mjs +1 -0
  174. package/dist/{profile-Cq4A7kQa.mjs → profile-6ynCD5k3.mjs} +1 -1
  175. package/dist/{provider-context-BB4eD8ON.mjs → provider-context-CK6B4X_8.mjs} +1 -1
  176. package/dist/providers/index.mjs +1 -1
  177. package/dist/{providers-namespace-CDwxY_DV.d.mts → providers-namespace-DSEpli4A.d.mts} +1 -1
  178. package/dist/{schema-B295yplx.d.mts → schema-M5YTvSAG.d.mts} +114 -2
  179. package/dist/{schema-C4iznV0q.mjs → schema-e0wU_lcV.mjs} +1 -1
  180. package/dist/{schema-introspection-DCYC47_d.mjs → schema-introspection-Dn1jWQs1.mjs} +1 -1
  181. package/dist/{schemas-C5xtVqdb.d.mts → schemas-Bd0OjRQf.d.mts} +1 -1
  182. package/dist/{schemas-Ra8pz5M-.d.mts → schemas-C46QfKzv.d.mts} +24 -28
  183. package/dist/{schemas-sshQEF3l.d.mts → schemas-CDBSjg7o.d.mts} +1 -1
  184. package/dist/schemas-CR1Rripy.mjs +1 -0
  185. package/dist/schemas-CVvwIfG4.mjs +1 -0
  186. package/dist/schemas-CaLhkkLn.mjs +1 -0
  187. package/dist/{schemas-DYqKRNju.d.mts → schemas-ClOOT1W6.d.mts} +4 -4
  188. package/dist/{schemas-BfMZAwff.d.mts → schemas-DATniTHb.d.mts} +8 -8
  189. package/dist/{schemas-BWvuaL0w.d.mts → schemas-DVF1A4DF.d.mts} +4 -4
  190. package/dist/{schemas-Di0XnnMX.d.mts → schemas-DaRSfYLf.d.mts} +1 -1
  191. package/dist/{schemas-C31qbb0s.d.mts → schemas-DiYVzG6e.d.mts} +51 -48
  192. package/dist/{schemas-KMA1efQg.d.mts → schemas-j7ivZ2HI.d.mts} +3 -3
  193. package/dist/schemas-wg_6PAdV.d.mts +153 -0
  194. package/dist/scoped-bus-04pwo1uM.mjs +1 -0
  195. package/dist/service-base/index.d.mts +1 -1
  196. package/dist/services/adapter-runtime/index.d.mts +3 -3
  197. package/dist/services/adapter-runtime/index.mjs +1 -1
  198. package/dist/services/adapter-runtime/namespace.d.mts +1 -1
  199. package/dist/services/adapter-runtime/schemas.d.mts +1 -1
  200. package/dist/services/adapter-subsystem/index.d.mts +2 -2
  201. package/dist/services/adapter-subsystem/index.mjs +1 -1
  202. package/dist/services/adapter-subsystem/namespace.d.mts +1 -1
  203. package/dist/services/adapter-subsystem/namespace.mjs +1 -1
  204. package/dist/services/agent-runtime/index.d.mts +2 -2
  205. package/dist/services/agent-runtime/namespace.d.mts +1 -1
  206. package/dist/services/agent-runtime/schemas.d.mts +1 -1
  207. package/dist/services/capability/index.d.mts +1 -1
  208. package/dist/services/capability/index.mjs +1 -1
  209. package/dist/services/cli-detection/namespace.d.mts +1 -1
  210. package/dist/services/codebase/index.d.mts +2 -2
  211. package/dist/services/codebase/namespace.d.mts +1 -1
  212. package/dist/services/codebase/schemas.d.mts +1 -1
  213. package/dist/services/compression/index.d.mts +2 -2
  214. package/dist/services/compression/namespace.d.mts +1 -1
  215. package/dist/services/compression/schemas.d.mts +1 -1
  216. package/dist/services/context-rules/index.d.mts +4 -4
  217. package/dist/services/context-rules/index.mjs +1 -1
  218. package/dist/services/credential-change/index.d.mts +1 -1
  219. package/dist/services/definition/namespace.d.mts +1 -1
  220. package/dist/services/definition/schemas.d.mts +1 -1
  221. package/dist/services/dialog/namespace.d.mts +1 -1
  222. package/dist/services/dialog/schemas.d.mts +1 -1
  223. package/dist/services/execution-target/index.d.mts +4 -4
  224. package/dist/services/execution-target/index.mjs +1 -1
  225. package/dist/services/execution-target/namespace.d.mts +1 -1
  226. package/dist/services/execution-target/schemas.d.mts +1 -1
  227. package/dist/services/execution-target/schemas.mjs +1 -1
  228. package/dist/services/filesystem/index.d.mts +3 -0
  229. package/dist/services/filesystem/index.mjs +1 -0
  230. package/dist/services/filesystem/namespace.d.mts +7 -7
  231. package/dist/services/filesystem/schemas.d.mts +4 -4
  232. package/dist/services/git/namespace.d.mts +1163 -0
  233. package/dist/services/git/namespace.mjs +1 -0
  234. package/dist/services/git/schemas.d.mts +932 -0
  235. package/dist/services/git/schemas.mjs +1 -0
  236. package/dist/services/harness/index.d.mts +35 -35
  237. package/dist/services/harness/index.mjs +1 -1
  238. package/dist/services/harness/storage/schema.d.mts +5 -5
  239. package/dist/services/index.d.mts +1411 -928
  240. package/dist/services/index.mjs +1 -1
  241. package/dist/services/local-notification/index.d.mts +1 -1
  242. package/dist/services/local-notification/namespace.d.mts +1 -1
  243. package/dist/services/local-notification/schemas.d.mts +1 -1
  244. package/dist/services/log-import/browser.d.mts +2 -2
  245. package/dist/services/log-import/index.d.mts +23 -24
  246. package/dist/services/log-import/index.mjs +2 -2
  247. package/dist/services/log-import/log-import.d.mts +1 -1
  248. package/dist/services/log-import/log-import.mjs +1 -1
  249. package/dist/services/log-import/namespace.d.mts +1 -1
  250. package/dist/services/log-import/namespace.mjs +1 -1
  251. package/dist/services/log-import/schemas.d.mts +1 -1
  252. package/dist/services/log-import/schemas.mjs +1 -1
  253. package/dist/services/model-registry/index.d.mts +1 -1
  254. package/dist/services/model-registry/index.mjs +1 -1
  255. package/dist/services/preferences/index.d.mts +2 -2
  256. package/dist/services/preferences/schemas.d.mts +1 -1
  257. package/dist/services/preferences/storage-namespace.d.mts +2 -2
  258. package/dist/services/provider-context/index.d.mts +1 -1
  259. package/dist/services/provider-context/index.mjs +1 -1
  260. package/dist/services/provider-runtime/index.d.mts +1 -1
  261. package/dist/services/provider-runtime/index.mjs +1 -1
  262. package/dist/services/session/handlers/index.d.mts +1 -1
  263. package/dist/services/session/handlers/index.mjs +1 -1
  264. package/dist/services/session/index.d.mts +10 -10
  265. package/dist/services/session/index.mjs +1 -1
  266. package/dist/services/session/messages/namespace.d.mts +1 -1
  267. package/dist/services/session/messages/namespace.mjs +1 -1
  268. package/dist/services/session/orchestrator-testing/index.d.mts +1 -1
  269. package/dist/services/session/orchestrator-testing/index.mjs +1 -1
  270. package/dist/services/session/session-events/namespace.d.mts +1 -1
  271. package/dist/services/session/session-events/namespace.mjs +1 -1
  272. package/dist/services/session/storage/namespace.d.mts +1 -1
  273. package/dist/services/session/storage/schema.d.mts +1 -1
  274. package/dist/services/session/storage/schema.mjs +1 -1
  275. package/dist/services/session/testing/index.d.mts +2 -2
  276. package/dist/services/session/testing/index.mjs +16 -3
  277. package/dist/services/session/testing/orchestrator-shared.d.mts +1 -1
  278. package/dist/services/session/testing/orchestrator-shared.mjs +1 -1
  279. package/dist/services/session/turns/namespace.d.mts +1 -1
  280. package/dist/services/session/turns/namespace.mjs +1 -1
  281. package/dist/services/session-editor/index.d.mts +3 -3
  282. package/dist/services/session-editor/index.mjs +1 -1
  283. package/dist/services/settings/index.d.mts +4 -4
  284. package/dist/services/settings/index.mjs +1 -1
  285. package/dist/services/settings/namespace.d.mts +19 -18
  286. package/dist/services/settings/namespace.mjs +1 -1
  287. package/dist/services/settings/storage/clients-namespace.d.mts +1 -1
  288. package/dist/services/settings/storage/clients-namespace.mjs +1 -1
  289. package/dist/services/settings/storage/extension-configs/namespace.d.mts +4 -4
  290. package/dist/services/settings/storage/index.d.mts +3 -3
  291. package/dist/services/settings/storage/index.mjs +1 -1
  292. package/dist/services/settings/storage/providers-namespace.d.mts +1 -1
  293. package/dist/services/settings/storage/providers-namespace.mjs +1 -1
  294. package/dist/services/subagent/index.d.mts +2 -0
  295. package/dist/services/subagent/index.mjs +1 -0
  296. package/dist/services/subagent-template/index.d.mts +3 -0
  297. package/dist/services/subagent-template/index.mjs +1 -0
  298. package/dist/services/subagent-template/namespace.d.mts +2 -0
  299. package/dist/services/subagent-template/namespace.mjs +1 -0
  300. package/dist/services/subagent-template/schemas.d.mts +2 -0
  301. package/dist/services/subagent-template/schemas.mjs +1 -0
  302. package/dist/services/tool-approval/index.d.mts +1 -1
  303. package/dist/services/tool-approval/index.mjs +1 -1
  304. package/dist/services/tools/index.d.mts +1 -1
  305. package/dist/services/tools/index.mjs +1 -1
  306. package/dist/services/tray-menu/index.d.mts +3 -3
  307. package/dist/services/tray-menu/index.mjs +1 -1
  308. package/dist/services/tray-menu/namespace.d.mts +1 -1
  309. package/dist/services/tray-menu/schemas.d.mts +1 -1
  310. package/dist/services/turn/index.d.mts +1 -1
  311. package/dist/services/turn/namespace.d.mts +1 -1
  312. package/dist/services/turn/schemas.d.mts +12 -12
  313. package/dist/session-BoldSdNZ2.mjs +134 -0
  314. package/dist/session-DuVOYctZ.mjs +1 -0
  315. package/dist/{session-lineage-B0cpHfuc.d.mts → session-lineage-CRsc9g1x.d.mts} +1 -1
  316. package/dist/shared-DpOEfD8F.mjs +1 -0
  317. package/dist/{skill-20_SBXaI.mjs → skill-CQO4mDqK.mjs} +1 -1
  318. package/dist/storage/drizzle/client.d.mts +2 -2
  319. package/dist/storage/drizzle/client.mjs +1 -1
  320. package/dist/storage/drizzle/index.d.mts +49 -10
  321. package/dist/storage/drizzle/index.mjs +1 -1
  322. package/dist/storage/handlers/drizzle/index.d.mts +1 -1
  323. package/dist/storage/handlers/drizzle/index.mjs +1 -1
  324. package/dist/storage/handlers/index.d.mts +2 -2
  325. package/dist/storage/handlers/index.mjs +1 -1
  326. package/dist/storage/index.d.mts +4 -4
  327. package/dist/{storage-namespace-DoH-Wkjp.d.mts → storage-namespace-BXkoh5Sy.d.mts} +11 -11
  328. package/dist/storage-namespace-DWsYLAXa.mjs +1 -0
  329. package/dist/{storage-namespace-definition-CJgqyXH1.d.mts → storage-namespace-definition-Bkx5rSto.d.mts} +1 -1
  330. package/dist/style.css +540 -540
  331. package/dist/telemetry-CvdLBWuk.mjs +1 -0
  332. package/dist/testing/drizzle-harness.mjs +1 -1
  333. package/dist/testing/index.mjs +1 -1
  334. package/dist/tool-approval-service-BvZWhYZp.mjs +1 -0
  335. package/dist/tools/index.d.mts +20 -10
  336. package/dist/tools/index.mjs +1 -1
  337. package/dist/tools/testing/index.d.mts +1 -1
  338. package/dist/tools-D-luYcDw.mjs +1431 -0
  339. package/dist/{types-C11LvekX.d.mts → types-BCMUtBj1.d.mts} +117 -20
  340. package/dist/{types-vNpkAe4Y.d.mts → types-C2Ob9zz_.d.mts} +1 -1
  341. package/dist/{types-t295YC6T.d.mts → types-CCdqjeuH.d.mts} +2 -2
  342. package/dist/{types-Cvrj2ogm.d.mts → types-DZHvOc_Q.d.mts} +4 -4
  343. package/dist/{types--nrtGZ1V.d.mts → types-Dy3YTcTF.d.mts} +255 -97
  344. package/dist/{types-DYF5LxZY.d.mts → types-MfJZ67e9.d.mts} +91 -9
  345. package/dist/{types-6WxLfoM3.d.mts → types-dyP-bXXE.d.mts} +1 -1
  346. package/dist/ui-components/index.mjs +2 -2
  347. package/dist/ui-hooks/index.d.mts +111 -1
  348. package/dist/ui-hooks/index.mjs +1 -1
  349. package/dist/ui-kernel/index.d.mts +4 -4
  350. package/dist/ui-kernel/pages/namespace.d.mts +4 -4
  351. package/dist/ui-kernel/pages/schemas.d.mts +1 -1
  352. package/dist/ui-views/index.mjs +2 -2
  353. package/dist/utils/index.d.mts +36 -1
  354. package/dist/utils/index.mjs +2 -2
  355. package/dist/utils/project-manifest.d.mts +130 -0
  356. package/dist/utils/project-manifest.mjs +1 -0
  357. package/dist/utils/scope-paths.d.mts +33 -0
  358. package/dist/utils/scope-paths.mjs +1 -0
  359. package/dist/utils/workspace-packages.d.mts +59 -0
  360. package/dist/utils/workspace-packages.mjs +1 -0
  361. package/dist/utils/workspace-root.d.mts +6 -9
  362. package/dist/utils/workspace-root.mjs +1 -1
  363. package/dist/{version-D8S4O22A.mjs → version-BeT3ASEe.mjs} +1 -1
  364. package/package.json +55 -2
  365. package/dist/account-identity-Bg_vKkcs.mjs +0 -1
  366. package/dist/adapter-CpF2aK_-.mjs +0 -1
  367. package/dist/bus-B1seC4M_.mjs +0 -2
  368. package/dist/chunk-Dc06z0qk.mjs +0 -1
  369. package/dist/client-DMWXCWhM.mjs +0 -1
  370. package/dist/cursor-storage-BoNI7OAR.mjs +0 -1
  371. package/dist/drizzle-Bn2GtW8c.mjs +0 -1
  372. package/dist/execution-target-D6MgthYs.mjs +0 -1
  373. package/dist/extension-53GerdGg.mjs +0 -1
  374. package/dist/extension-fJmv8Yri.mjs +0 -1
  375. package/dist/namespace-C_h7scWx2.mjs +0 -1
  376. package/dist/schemas-Bn8aqDIE.mjs +0 -1
  377. package/dist/services/worker/index.d.mts +0 -3
  378. package/dist/services/worker/index.mjs +0 -1
  379. package/dist/services/worker/namespace.d.mts +0 -2
  380. package/dist/services/worker/namespace.mjs +0 -1
  381. package/dist/services/worker/schemas.d.mts +0 -2
  382. package/dist/services/worker/schemas.mjs +0 -1
  383. package/dist/session-BCSf-Fgj.mjs +0 -1
  384. package/dist/session-BNo_cIiz.mjs +0 -123
  385. package/dist/shared-BhuSHZXH.mjs +0 -1
  386. package/dist/storage-namespace-BIDs9LPb.mjs +0 -1
  387. package/dist/tool-approval-service-CZCPfvVy.mjs +0 -1
  388. package/dist/tools-Cid9D99F.mjs +0 -1
  389. /package/dist/{base-orchestrator-BOAPgqF7.d.mts → base-orchestrator-wyumsn3b.d.mts} +0 -0
  390. /package/dist/{capability-service-DV32ecwR.mjs → capability-service-CJbmhfv9.mjs} +0 -0
  391. /package/dist/{cleanEnvForAdapter-hTPNvPU5.mjs → cleanEnvForAdapter-KkYzQa1f.mjs} +0 -0
  392. /package/dist/{config-namespace-wJ2CakDB.mjs → config-namespace-ncYg2ct_.mjs} +0 -0
  393. /package/dist/{extension-namespace-CTd9kOtt.mjs → extension-namespace-cMh_mMiL.mjs} +0 -0
  394. /package/dist/{identity-DBST3-XO.mjs → identity-Cz2IeEtm.mjs} +0 -0
  395. /package/dist/{index-SzSiyG61.d.mts → index-CHQ1SqT0.d.mts} +0 -0
  396. /package/dist/{model-registry-xINyxQUT.mjs → model-registry-CfXytvzx.mjs} +0 -0
  397. /package/dist/{model-registry-Dzpssh9j.mjs → model-registry-Scn_MC2d.mjs} +0 -0
  398. /package/dist/{namespace-DBw9BYr8.mjs → namespace-BoD94mrN.mjs} +0 -0
  399. /package/dist/{namespace-DUVgMfTR.mjs → namespace-CFLAmQfh.mjs} +0 -0
  400. /package/dist/{namespace-aALq9tnE.mjs → namespace-DkRgbZYn.mjs} +0 -0
  401. /package/dist/{namespace-yxIxUsjo.mjs → namespace-LViZ-EQk.mjs} +0 -0
  402. /package/dist/{namespace-Zb8HAbyF.mjs → namespace-Yna5-Pws.mjs} +0 -0
  403. /package/dist/{platform-BMFUpmTA.mjs → platform-DZ7z-wXD.mjs} +0 -0
  404. /package/dist/{providers-DhiW_fx4.mjs → providers-u8i15co9.mjs} +0 -0
  405. /package/dist/{schema-D3ZG13h9.mjs → schema-CoyE6mPt.mjs} +0 -0
  406. /package/dist/{schemas-CEBe89yE.mjs → schemas-DE-GNmSD.mjs} +0 -0
  407. /package/dist/{schemas-COnLJnt_.mjs → schemas-hSrzflwZ.mjs} +0 -0
  408. /package/dist/{schemas-CrnlCRep.mjs → schemas-jFe1AuI-.mjs} +0 -0
  409. /package/dist/{server-lifecycle-Dx5WgfoS.mjs → server-lifecycle-FXTPW39-.mjs} +0 -0
  410. /package/dist/{server-lifecycle-BC6FRn86.d.mts → server-lifecycle-YoSGFGnU.d.mts} +0 -0
  411. /package/dist/{shared-schemas-Byah36lG.mjs → shared-schemas-CPShiLNp.mjs} +0 -0
  412. /package/dist/{storage-namespace-definition-BjK9nZAN.mjs → storage-namespace-definition-CqSdsuCC.mjs} +0 -0
  413. /package/dist/{timeout-D33CUZ0M.mjs → timeout-XsYIOKrc.mjs} +0 -0
  414. /package/dist/{tray-menu-service-BAYtLdAg.mjs → tray-menu-service-DuXq5k22.mjs} +0 -0
  415. /package/dist/{ui-config-zawaoEfB.mjs → ui-config-9bDRwFZr.mjs} +0 -0
  416. /package/dist/{variant-BZWfmS0q.mjs → variant-CT6XBP6T.mjs} +0 -0
  417. /package/dist/{visibility-CZu8ooOA.mjs → visibility-Cb62p9bv.mjs} +0 -0
  418. /package/dist/{window-registry-C_IJmY8_.d.mts → window-registry-CBcrGTv4.d.mts} +0 -0
  419. /package/dist/{window-registry-B_-hBEcV.mjs → window-registry-DW-dKRjQ.mjs} +0 -0
@@ -1,4 +1,4 @@
1
- import { g as LogImporter, i as LogFileChangeEvent, n as LogOrchestratorConfig, t as BaseLogOrchestrator } from "../base-orchestrator-BOAPgqF7.mjs";
1
+ import { g as LogImporter, i as LogFileChangeEvent, n as LogOrchestratorConfig, t as BaseLogOrchestrator } from "../base-orchestrator-wyumsn3b.mjs";
2
2
 
3
3
  //#region adapters/core/src/log-importer/jsonl-parser.d.ts
4
4
  /**
@@ -170,7 +170,7 @@ declare function someJsonlRecord<T>(filePath: string, predicate: (record: T) =>
170
170
  */
171
171
  declare abstract class DiscoveryOrchestrator<TRecord, TState = unknown> extends BaseLogOrchestrator<TRecord, TState> {
172
172
  /**
173
- * Paths of files whose adapter sessions are currently in `'tracking'` status.
173
+ * Paths of files whose sessions are currently in `'tracking'` import status.
174
174
  * Maintained locally to avoid per-poll DB lookups.
175
175
  */
176
176
  protected readonly trackingFilePaths: Set<string>;
@@ -218,9 +218,9 @@ declare abstract class DiscoveryOrchestrator<TRecord, TState = unknown> extends
218
218
  */
219
219
  protected handleFileChange(event: LogFileChangeEvent): Promise<void>;
220
220
  /**
221
- * Rehydrate `tracking` file state from persisted adapter-session rows after startup.
221
+ * Rehydrate `tracking` file state from persisted session rows after startup.
222
222
  *
223
- * The watcher state is process-local, but adapter-session status is persisted.
223
+ * The watcher state is process-local, but import status is persisted.
224
224
  * Without this rehydration, a restart can strand sessions in `'tracking'` forever
225
225
  * because no in-memory file state exists to drive the inactivity timeout.
226
226
  */
@@ -1,4 +1,4 @@
1
- import{r as e}from"../cursor-storage-BoNI7OAR.mjs";import*as t from"node:path";import{MakaioBus as n}from"@makaio/framework/bus";import{AdapterSubjects as r,SessionSubjects as i}from"@makaio/framework/contracts";import*as a from"node:fs/promises";import{AdapterSessionStorageSubjects as o}from"@makaio/framework/services/session";import s from"emittery";import c from"p-queue";import{globby as l}from"globby";const u=65536;async function d(e){let{filePath:t,startOffset:n=0}=e,r=[],i=[],o=n,s;try{s=await a.open(t,`r`);let e=await s.stat();if(n>=e.size)return{records:r,bytesRead:n,errors:i};let c=Buffer.alloc(u),l=``,d=n,f=0;for(n>0&&(f=await g(s,n));d<e.size;){let{bytesRead:e}=await s.read(c,0,u,d);if(e===0)break;l+=c.toString(`utf8`,0,e),d+=e;let t=l.split(`
2
- `),n=t.pop();for(let e of t){if(f++,e.trim()===``){o+=Buffer.byteLength(e,`utf8`)+1;continue}let t=m(e,f);t.success?r.push(t.record):i.push(t.error),o+=Buffer.byteLength(e,`utf8`)+1}l=n??``}return{records:r,bytesRead:o,errors:i}}finally{s&&await s.close()}}async function f(e,t){let n=[],r;try{r=await a.open(e,`r`);let i=Buffer.alloc(u),o=``,s=0;for(;n.length<t;){let{bytesRead:e}=await r.read(i,0,u,s);if(e===0)break;o+=i.toString(`utf8`,0,e),s+=e;let a=o.split(`
3
- `);o=a.pop()??``;for(let e of a){if(n.length>=t)break;let r=e.trim();if(r!==``)try{n.push(JSON.parse(r))}catch{}}}return n}finally{r&&await r.close()}}async function p(e,t){let n;try{n=await a.open(e,`r`);let r=Buffer.alloc(u),i=``,o=0;for(;;){let{bytesRead:e}=await n.read(r,0,u,o);if(e===0)break;i+=r.toString(`utf8`,0,e),o+=e;let a=i.split(`
4
- `);i=a.pop()??``;for(let e of a){let n=e.trim();if(n!==``)try{if(t(JSON.parse(n)))return!0}catch{}}}return!1}finally{n&&await n.close()}}function m(e,t){try{return{success:!0,record:JSON.parse(e)}}catch(n){return{success:!1,error:{line:t,error:n instanceof Error?n.message:String(n),content:h(e)}}}}function h(e){return e.length<=200?e:e.slice(0,200)+`...`}async function g(e,t){let n=0,r=Buffer.alloc(u),i=0;for(;i<t;){let a=Math.min(u,t-i),{bytesRead:o}=await e.read(r,0,a,i);if(o===0)break;for(let e=0;e<o;e++)r[e]===10&&n++;i+=o}return n}var _=class{eventQueue;cursorQueue;onEventEmitted;constructor(e){this.onEventEmitted=e.onEventEmitted,this.eventQueue=new c({concurrency:1,interval:1e3,intervalCap:e.eventsPerSecond}),this.cursorQueue=new c({concurrency:1})}queueEvent(e){return this.eventQueue.add(async()=>{await n.emit(e.subject,e.payload),this.onEventEmitted()})}queueAfterEvents(e,t=[]){let n=Promise.all(t);return n.catch(()=>void 0),this.cursorQueue.add(async()=>{await n,await e()})}async drain(){await Promise.all([this.eventQueue.onIdle(),this.cursorQueue.onIdle()])}async onIdle(){await this.drain()}},v=class{options;emittery=new s;trackedFiles=new Map;pollTimer;isPolling=!1;isDisposed=!1;inFlightChecks=new Map;constructor(e){if(!t.isAbsolute(e.directory))throw Error(`Directory must be an absolute path: ${e.directory}`);this.options={directory:e.directory,pattern:e.pattern,pollIntervalMs:e.pollIntervalMs??1e4}}on(e,t){return this.emittery.on(e,t)}once(e,t){return this.emittery.once(e,t)}async start(){this.isDisposed||this.pollTimer===void 0&&(await this.poll(),this.pollTimer=setInterval(()=>{this.poll()},this.options.pollIntervalMs))}stop(){this.pollTimer!==void 0&&(clearInterval(this.pollTimer),this.pollTimer=void 0)}dispose(){this.isDisposed=!0,this.stop(),this.emittery.clearListeners(),this.trackedFiles.clear(),this.inFlightChecks.clear()}isRunning(){return this.pollTimer!==void 0}getTrackedFiles(){return this.trackedFiles}seedFromCursors(e){for(let t of e)this.trackedFiles.set(t.filePath,{size:t.bytesRead,mtimeMs:new Date(t.lastModified).getTime()})}async poll(){if(!this.isDisposed&&!this.isPolling){this.isPolling=!0;try{let e=await this.discoverFiles(),t=new Set(e);for(let e of this.trackedFiles.keys())if(!t.has(e)){if(this.isDisposed)return;this.trackedFiles.delete(e),await this.emittery.emit(`deleted`,{filePath:e})}for(let t of e)try{await this.runFileCheck(t)}catch(e){await this.emitWatcherError(e,t)}if(this.isDisposed)return;await this.emittery.emit(`polled`,{trackedFilePaths:new Set(this.trackedFiles.keys())})}catch(e){await this.emitWatcherError(e)}finally{this.isPolling=!1}}}async discoverFiles(){return l(this.options.pattern,{cwd:this.options.directory,absolute:!0,onlyFiles:!0})}async checkFile(e){if(this.isDisposed)return;let t=await a.stat(e);if(this.isDisposed)return;let n={size:t.size,mtimeMs:t.mtimeMs},r=this.trackedFiles.get(e);if(!r){if(this.trackedFiles.set(e,n),this.isDisposed){this.trackedFiles.delete(e);return}await this.emittery.emit(`change`,{filePath:e,stat:{size:t.size,mtime:t.mtime},changeType:`created`});return}if(n.mtimeMs!==r.mtimeMs){let i=n.size<r.size?`rotated`:`modified`;if(this.trackedFiles.set(e,n),this.isDisposed)return;await this.emittery.emit(`change`,{filePath:e,stat:{size:t.size,mtime:t.mtime},changeType:i})}}clearTrackedFile(e){return this.trackedFiles.delete(e)}clearAllTrackedFiles(){this.trackedFiles.clear()}triggerImmediatePoll(e){this.runFileCheck(e).catch(t=>{this.emitWatcherError(t,e)})}async runFileCheck(e){if(this.isDisposed)return;let t=this.inFlightChecks.get(e);if(t){await t;return}let n=(async()=>{try{await this.checkFile(e)}finally{this.inFlightChecks.delete(e)}})();this.inFlightChecks.set(e,n),await n}async emitWatcherError(e,t){let n=e instanceof Error?e:Error(String(e));try{await this.emittery.emit(`error`,{error:n,filePath:t})}catch(e){console.error(`[LogFileWatcher] Error listener failed:`,e instanceof Error?e.message:String(e))}}},y=class{watcher;constructor(e){this.watcher=new v(e)}isRunning(){return this.watcher.isRunning()}async start(){await this.watcher.start()}stop(){this.watcher.stop()}dispose(){this.watcher.dispose()}onChange(e){return this.watcher.on(`change`,e)}onError(e){return this.watcher.on(`error`,e)}onDeleted(e){return this.watcher.on(`deleted`,e)}onPolled(e){return this.watcher.on(`polled`,({trackedFilePaths:t})=>e(t))}getTrackedFileMtimeMs(e){return this.watcher.getTrackedFiles().get(e)?.mtimeMs}triggerImmediatePoll(e){this.watcher.triggerImmediatePoll(e)}seedFromCursors(e){this.watcher.seedFromCursors(e)}},b=class{filesProcessed=0;eventsEmitted=0;sessionsImported=new Set;sessionsSkipped=new Set;lastLoggedEventCount=0;lastLoggedSnapshot=``;reset(){this.filesProcessed=0,this.eventsEmitted=0,this.sessionsImported.clear(),this.sessionsSkipped.clear(),this.lastLoggedEventCount=0,this.lastLoggedSnapshot=``}recordFileProcessed(){this.filesProcessed++}recordEventEmitted(e){this.eventsEmitted++,!(this.eventsEmitted-this.lastLoggedEventCount<1e3)&&(console.info(`${e} Imported ${this.eventsEmitted} events (${this.sessionsImported.size} sessions)...`),this.lastLoggedEventCount=this.eventsEmitted)}recordSessionImported(e){this.sessionsImported.add(e)}recordSessionSkipped(e){this.sessionsSkipped.add(e)}hasActivity(){return this.eventsEmitted>0||this.filesProcessed>0}stoppedMessage(e){return`${e} Stopped - ${this.eventsEmitted} events from ${this.sessionsImported.size} sessions (${this.sessionsSkipped.size} skipped)`}logProgress(e){if(!this.hasActivity())return;let t=JSON.stringify({eventsEmitted:this.eventsEmitted,filesProcessed:this.filesProcessed,sessionsImported:this.sessionsImported.size,sessionsSkipped:this.sessionsSkipped.size});t!==this.lastLoggedSnapshot&&(this.lastLoggedSnapshot=t,console.info(`${e} Progress: ${this.eventsEmitted} events, ${this.sessionsImported.size} sessions, ${this.filesProcessed} files, ${this.sessionsSkipped.size} skipped`))}};function x(){return async e=>{try{let t=await n.request(i.getByAdapterSessionId,{adapterSessionId:e});return t.session!==null&&!t.session.isImported}catch{return!1}}}var S=class{checkedSessions=new Map;inFlight=new Map;async isSkipped(e,t,n){let r=this.checkedSessions.get(e);if(r!==void 0)return r;let i=this.inFlight.get(e);return i||(i=t(e).then(t=>(this.checkedSessions.set(e,t),t&&n(e),t)).finally(()=>{this.inFlight.delete(e)}),this.inFlight.set(e,i)),i}clear(){this.checkedSessions.clear(),this.inFlight.clear()}};function C(e,t,n,r){return!n||!e||r===`rotated`?!1:new Date(e)>=t}function w(e,t,n){for(let r of n??[]){let n=r.line===void 0?``:` at line ${r.line}`;console.warn(`${e} Parse error in ${t}${n}: ${r.error}`)}}async function T(t,r,i,a){let{cursor:o}=await n.request(e.get,{filePath:t});return o&&o.bytesRead>0&&!o.sessionContext&&!r?(await n.request(e.delete,{filePath:t}).catch(()=>{}),a(i),`retry`):o}async function E(e,t,n,r,i,a){let o=await a.parseFile(e,0);w(i,e,o.errors);let s=a.validateRecords(o.records);s.length>0&&await a.handleFirstRead(e,s,o.bytesRead??0,t,n,0,r)}function D(e,t,n,r,i){let a=[];n&&(a.push(i(t.sessionEvent)),a.push(i(t.startedEvent)));let o=r(e,t);for(let e of o)a.push(i(e));return a}function O(e,t){let n=[];for(let r of e)n.push(t(r));return n}function k(e){return typeof e==`object`&&!!e&&`compactionDetected`in e&&e.compactionDetected===!0}function A(e,t,n){return{...e,state:n(t)}}var j=class{tasks=new Set;track(e){this.tasks.add(e),e.finally(()=>{this.tasks.delete(e)})}async drain(){for(;this.tasks.size>0;)await Promise.allSettled([...this.tasks])}},M=class{config;watcher;eventQueue;importer;managedSessionCache=new S;unsubscribeChange;unsubscribeError;unsubscribeDeleted;stats=new b;watcherTasks=new j;progressTimer;constructor(e,t){this.importer=t;let n=e.directory??t.getLogDirectory();this.config={enabled:e.enabled,directory:e.directory,pollIntervalMs:e.pollIntervalMs??1e4,eventsPerSecond:e.eventsPerSecond??100,adapterId:e.adapterId,adapterName:e.adapterName,checkMakaioManaged:e.checkMakaioManaged},this.watcher=new y({directory:n,pattern:this.getLogFilePattern(),pollIntervalMs:this.config.pollIntervalMs}),this.eventQueue=new _({eventsPerSecond:this.config.eventsPerSecond,onEventEmitted:()=>{this.stats.recordEventEmitted(this.logPrefix)}})}shouldSkipFile(e){return!1}validateRecords(e){return e}getMaxRecords(){}buildCursorSessionContext(e){let{adapterSessionId:t,sessionEvent:n,startedEvent:r,state:i,...a}=e;return{...a,adapterSessionId:t,sessionEvent:n,startedEvent:r,state:this.importer.serializeState(i)}}usesJsonFormat(){let e=this.getLogFilePattern();return e.includes(`.json`)&&!e.includes(`.jsonl`)}isEnabled(){return this.config.enabled}isRunning(){return this.watcher.isRunning()}async start(){if(!this.config.enabled||this.isRunning())return;let t=this.config.directory??this.importer.getLogDirectory();console.info(`${this.logPrefix} Starting - watching ${t}`),this.stats.reset(),this.managedSessionCache.clear(),this.progressTimer=setInterval(()=>this.stats.logProgress(this.logPrefix),1e4),this.unsubscribeChange=this.watcher.onChange(e=>{this.trackFileChange(e)}),this.unsubscribeError=this.watcher.onError(({error:e,filePath:t})=>{console.warn(`${this.logPrefix} Error${t?` for ${t}`:``}: ${e.message}`)}),this.unsubscribeDeleted=this.watcher.onDeleted(({filePath:t})=>{this.watcherTasks.track(n.request(e.delete,{filePath:t}).then(()=>void 0).catch(()=>{}))}),await this.watcher.start()}async stop(){this.progressTimer&&=(clearInterval(this.progressTimer),void 0),this.unsubscribeChange?.(),this.unsubscribeError?.(),this.unsubscribeDeleted?.(),this.unsubscribeChange=void 0,this.unsubscribeError=void 0,this.unsubscribeDeleted=void 0,this.watcher.stop(),await this.watcherTasks.drain(),await this.eventQueue.drain(),this.stats.hasActivity()&&console.info(this.stats.stoppedMessage(this.logPrefix))}async dispose(){await this.stop(),this.watcher.dispose(),this.managedSessionCache.clear()}static createDefaultCheckMakaioManaged(){return x()}async updateCursor(t,r,i,a){await n.request(e.set,{filePath:t,bytesRead:r,lastModified:i.toISOString(),sessionContext:a})}async handleFileChange(t){let{filePath:r,changeType:i,stat:a}=t;if(this.shouldSkipFile(r))return;let o=this.usesJsonFormat();i===`rotated`&&await n.request(e.delete,{filePath:r}).catch(()=>{});let s=await T(r,o,t,e=>this.trackFileChange(e));if(s===`retry`)return;let c=s?.sessionContext!==void 0,l=c?s?.bytesRead??0:0;if(C(s?.lastModified,a.mtime,o,i))return;let u=await this.parseFile(r,o?0:l,this.getMaxRecords());w(this.logPrefix,r,u.errors),this.stats.recordFileProcessed();let d=this.validateRecords(u.records),f=u.bytesRead??0;if(d.length===0){await this.maybeUpdateCursor(r,f,l,a.mtime,o,s?.sessionContext);return}c&&s?.sessionContext?await this.handleIncrementalRead(r,d,s.sessionContext,f,a.mtime,o,l):await this.handleFirstRead(r,d,f,a.mtime,o,l)}trackFileChange(e){let t=this.handleFileChange(e).catch(e=>{console.error(`${this.logPrefix} Error handling file change:`,e instanceof Error?e.message:String(e))});this.watcherTasks.track(t)}async handleFirstRead(e,t,n,r,i,a,o=!0){let s=this.importer.extractSessionContext(t);if(await this.isSessionSkipped(s.adapterSessionId)){await this.maybeUpdateCursor(e,n,a,r,i,this.buildCursorSessionContext(s));return}let c=D(t,s,o,(e,t)=>this.importer.processRecords(e,t),e=>this.queueEvent(e));this.trackImportedSession(s.adapterSessionId),await this.queueCursorUpdate(e,n,a,r,i,this.buildCursorSessionContext(s),c)}trackImportedSession(e){this.stats.recordSessionImported(e)}async handleIncrementalRead(t,r,i,a,o,s,c){if(await this.isSessionSkipped(i.adapterSessionId)){await this.maybeUpdateCursor(t,a,c,o,s,i);return}let l;try{l=this.importer.deserializeState(i.state)}catch(r){console.warn(`${this.logPrefix} Corrupted cursor state for ${t}, deleting cursor and re-importing.`,r instanceof Error?r.message:String(r)),await n.request(e.delete,{filePath:t}).catch(e=>{console.warn(`${this.logPrefix} Failed to delete corrupted cursor for ${t}.`,e instanceof Error?e.message:String(e))}),await E(t,o,s,!0,this.logPrefix,{parseFile:(e,t)=>this.parseFile(e,t),validateRecords:e=>this.validateRecords(e),handleFirstRead:(e,t,n,r,i,a,o)=>this.handleFirstRead(e,t,n,r,i,a,o)});return}let u={adapterSessionId:i.adapterSessionId,model:i.model,cwd:i.cwd,sessionEvent:i.sessionEvent,startedEvent:i.startedEvent,state:l},d=this.importer.processRecords(r,u);if(k(u.state)){await E(t,o,s,!1,this.logPrefix,{parseFile:(e,t)=>this.parseFile(e,t),validateRecords:e=>this.validateRecords(e),handleFirstRead:(e,t,n,r,i,a,o)=>this.handleFirstRead(e,t,n,r,i,a,o)});return}let f=O(d,e=>this.queueEvent(e)),p=A(i,u.state,e=>this.importer.serializeState(e));await this.queueCursorUpdate(t,a,c,o,s,p,f)}async maybeUpdateCursor(e,t,n,r,i,a){(t>n||i)&&await this.updateCursor(e,t,r,a)}async isSessionSkipped(e){return this.managedSessionCache.isSkipped(e,e=>this.importer.isMakaioManaged(e),e=>this.stats.recordSessionSkipped(e))}queueEvent(e){return this.eventQueue.queueEvent(e)}queueCursorUpdate(e,t,n,r,i,a,o=[]){return this.eventQueue.queueAfterEvents(()=>this.maybeUpdateCursor(e,t,n,r,i,a),o)}},N=class extends M{trackingFilePaths=new Set;trackingInactiveCount=new Map;lastSeenMtimeMs=new Map;unsubscribePolled;constructor(e,t){super(e,t)}clearTrackingState(e){this.trackingFilePaths.delete(e),this.trackingInactiveCount.delete(e),this.lastSeenMtimeMs.delete(e)}async persistImportedStatus(e){let{session:t}=await n.request(o.getByLogFilePath,{logFilePath:e});return!t||t.status!==`tracking`||(await n.request(o.updateStatus,{adapterSessionId:t.adapterSessionId,status:`imported`})).success?!0:(console.warn(`${this.logPrefix} Failed to persist imported status for ${e}`),!1)}async start(){!this.isEnabled()||this.isRunning()||(await super.start(),this.unsubscribePolled=this.watcher.onPolled(e=>{this.onPollCycle(e).catch(e=>{console.error(`${this.logPrefix} Error handling poll cycle:`,e instanceof Error?e.message:String(e))})}),await this.restorePersistedTrackingState())}async stop(){this.unsubscribePolled?.(),this.unsubscribePolled=void 0,await super.stop()}async dispose(){this.trackingFilePaths.clear(),this.trackingInactiveCount.clear(),this.lastSeenMtimeMs.clear(),await super.dispose()}async handleFileChange(t){let{filePath:r,changeType:i,stat:a}=t;if(this.shouldSkipFile(r))return;let{cursor:o}=await n.request(e.get,{filePath:r});if(!o){await this.discoverNewFile(t);return}i===`modified`&&await this.handleModifiedImportedFile(r,t,a.mtime)}async restorePersistedTrackingState(){this.trackingFilePaths.clear(),this.trackingInactiveCount.clear(),this.lastSeenMtimeMs.clear();try{let{sessions:e}=await n.request(o.list,{});for(let t of e){if(t.status!==`tracking`||!t.logFilePath)continue;let e=this.watcher.getTrackedFileMtimeMs(t.logFilePath);e!==void 0&&(this.trackingFilePaths.add(t.logFilePath),this.trackingInactiveCount.set(t.logFilePath,0),this.lastSeenMtimeMs.set(t.logFilePath,e))}}catch(e){console.warn(`[DiscoveryOrchestrator] Failed to restore persisted tracking state:`,e instanceof Error?e.message:String(e))}}async discoverNewFile(e){let{filePath:t,stat:n}=e,i=await this.importer.extractDiscoveryMetadata(t);if(!(i.hasMessages??!1)){await this.updateCursor(t,0,n.mtime);return}if(await this.isSessionSkipped(i.adapterSessionId)){await this.updateCursor(t,0,n.mtime);return}let a=this.queueEvent({subject:r.session.discovered,payload:{adapterId:this.config.adapterId,adapterName:this.config.adapterName,adapterSessionId:i.adapterSessionId,model:i.model??null,cwd:i.cwd??null,title:i.title,parentAdapterSessionId:i.parentAdapterSessionId??null,forkPointMessageId:i.forkPointMessageId??null,kind:i.kind??`root`,startedAt:i.startedAt,logFilePath:t}});await this.eventQueue.queueAfterEvents(()=>this.updateCursor(t,0,n.mtime),[a])}async handleModifiedImportedFile(e,t,r){let{session:i}=await n.request(o.getByLogFilePath,{logFilePath:e});if(!i){await this.discoverNewFile(t);return}if(!(i.status!==`imported`&&i.status!==`tracking`)){if(await super.handleFileChange(t),i.status===`imported`&&!(await n.request(o.updateStatus,{adapterSessionId:i.adapterSessionId,status:`tracking`})).success){console.warn(`${this.logPrefix} Failed to persist tracking status for ${e}`);return}this.trackingFilePaths.add(e),this.lastSeenMtimeMs.set(e,r.getTime()),this.trackingInactiveCount.delete(e),this.watcher.triggerImmediatePoll(e)}}async onPollCycle(e){for(let t of[...this.trackingFilePaths]){if(!e.has(t)){await this.persistImportedStatus(t)&&this.clearTrackingState(t);continue}let n=this.watcher.getTrackedFileMtimeMs(t),r=this.lastSeenMtimeMs.get(t);if(!(n===void 0||r===void 0))try{if(n===r){let e=(this.trackingInactiveCount.get(t)??0)+1;e>=3?await this.persistImportedStatus(t)&&this.clearTrackingState(t):this.trackingInactiveCount.set(t,e)}else this.lastSeenMtimeMs.set(t,n),this.trackingInactiveCount.delete(t)}catch(e){console.warn(`${this.logPrefix} Failed to process tracked file ${t}:`,e instanceof Error?e.message:String(e))}}}};export{M as BaseLogOrchestrator,N as DiscoveryOrchestrator,d as parseJsonlFile,f as readFirstJsonlRecords,p as someJsonlRecord};
1
+ import{o as e,t}from"../chunk-DTipWd-i.mjs";import{i as n,r}from"../cursor-storage-CtVJ3JzB.mjs";import{t as i}from"../globby-rtWVaFHv.mjs";import*as a from"node:fs/promises";import*as o from"node:path";import{MakaioBus as s}from"@makaio/framework/bus";import{AdapterSubjects as c,SessionStorageSubjects as l,SessionSubjects as u}from"@makaio/framework/contracts";const d=65536;async function f(e){let{filePath:t,startOffset:n=0}=e,r=[],i=[],o=n,s;try{s=await a.open(t,`r`);let e=await s.stat();if(n>=e.size)return{records:r,bytesRead:n,errors:i};let c=Buffer.alloc(d),l=``,u=n,f=0;for(n>0&&(f=await _(s,n));u<e.size;){let{bytesRead:e}=await s.read(c,0,d,u);if(e===0)break;l+=c.toString(`utf8`,0,e),u+=e;let t=l.split(`
2
+ `),n=t.pop();for(let e of t){if(f++,e.trim()===``){o+=Buffer.byteLength(e,`utf8`)+1;continue}let t=h(e,f);t.success?r.push(t.record):i.push(t.error),o+=Buffer.byteLength(e,`utf8`)+1}l=n??``}return{records:r,bytesRead:o,errors:i}}finally{s&&await s.close()}}async function p(e,t){let n=[],r;try{r=await a.open(e,`r`);let i=Buffer.alloc(d),o=``,s=0;for(;n.length<t;){let{bytesRead:e}=await r.read(i,0,d,s);if(e===0)break;o+=i.toString(`utf8`,0,e),s+=e;let a=o.split(`
3
+ `);o=a.pop()??``;for(let e of a){if(n.length>=t)break;let r=e.trim();if(r!==``)try{n.push(JSON.parse(r))}catch{}}}return n}finally{r&&await r.close()}}async function m(e,t){let n;try{n=await a.open(e,`r`);let r=Buffer.alloc(d),i=``,o=0;for(;;){let{bytesRead:e}=await n.read(r,0,d,o);if(e===0)break;i+=r.toString(`utf8`,0,e),o+=e;let a=i.split(`
4
+ `);i=a.pop()??``;for(let e of a){let n=e.trim();if(n!==``)try{if(t(JSON.parse(n)))return!0}catch{}}}return!1}finally{n&&await n.close()}}function h(e,t){try{return{success:!0,record:JSON.parse(e)}}catch(n){return{success:!1,error:{line:t,error:n instanceof Error?n.message:String(n),content:g(e)}}}}function g(e){return e.length<=200?e:e.slice(0,200)+`...`}async function _(e,t){let n=0,r=Buffer.alloc(d),i=0;for(;i<t;){let a=Math.min(d,t-i),{bytesRead:o}=await e.read(r,0,a,i);if(o===0)break;for(let e=0;e<o;e++)r[e]===10&&n++;i+=o}return n}var v=e(t(((e,t)=>{var n=Object.prototype.hasOwnProperty,r=`~`;function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(r=!1));function a(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function o(e,t,n,i,o){if(typeof n!=`function`)throw TypeError(`The listener must be a function`);var s=new a(n,i||e,o),c=r?r+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],s]:e._events[c].push(s):(e._events[c]=s,e._eventsCount++),e}function s(e,t){--e._eventsCount===0?e._events=new i:delete e._events[t]}function c(){this._events=new i,this._eventsCount=0}c.prototype.eventNames=function(){var e=[],t,i;if(this._eventsCount===0)return e;for(i in t=this._events)n.call(t,i)&&e.push(r?i.slice(1):i);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e},c.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,a=n.length,o=Array(a);i<a;i++)o[i]=n[i].fn;return o},c.prototype.listenerCount=function(e){var t=r?r+e:e,n=this._events[t];return n?n.fn?1:n.length:0},c.prototype.emit=function(e,t,n,i,a,o){var s=r?r+e:e;if(!this._events[s])return!1;var c=this._events[s],l=arguments.length,u,d;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,i),!0;case 5:return c.fn.call(c.context,t,n,i,a),!0;case 6:return c.fn.call(c.context,t,n,i,a,o),!0}for(d=1,u=Array(l-1);d<l;d++)u[d-1]=arguments[d];c.fn.apply(c.context,u)}else{var f=c.length,p;for(d=0;d<f;d++)switch(c[d].once&&this.removeListener(e,c[d].fn,void 0,!0),l){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,t);break;case 3:c[d].fn.call(c[d].context,t,n);break;case 4:c[d].fn.call(c[d].context,t,n,i);break;default:if(!u)for(p=1,u=Array(l-1);p<l;p++)u[p-1]=arguments[p];c[d].fn.apply(c[d].context,u)}}return!0},c.prototype.on=function(e,t,n){return o(this,e,t,n,!1)},c.prototype.once=function(e,t,n){return o(this,e,t,n,!0)},c.prototype.removeListener=function(e,t,n,i){var a=r?r+e:e;if(!this._events[a])return this;if(!t)return s(this,a),this;var o=this._events[a];if(o.fn)o.fn===t&&(!i||o.once)&&(!n||o.context===n)&&s(this,a);else{for(var c=0,l=[],u=o.length;c<u;c++)(o[c].fn!==t||i&&!o[c].once||n&&o[c].context!==n)&&l.push(o[c]);l.length?this._events[a]=l.length===1?l[0]:l:s(this,a)}return this},c.prototype.removeAllListeners=function(e){var t;return e?(t=r?r+e:e,this._events[t]&&s(this,t)):(this._events=new i,this._eventsCount=0),this},c.prototype.off=c.prototype.removeListener,c.prototype.addListener=c.prototype.on,c.prefixed=r,c.EventEmitter=c,t!==void 0&&(t.exports=c)}))(),1),y=class e extends Error{name=`TimeoutError`;constructor(t,n){super(t,n),Error.captureStackTrace?.(this,e)}};const b=e=>e.reason??new DOMException(`This operation was aborted.`,`AbortError`);function x(e,t){let{milliseconds:n,fallback:r,message:i,customTimers:a={setTimeout,clearTimeout},signal:o}=t,s,c,l=new Promise((t,l)=>{if(typeof n!=`number`||Math.sign(n)!==1)throw TypeError(`Expected \`milliseconds\` to be a positive number, got \`${n}\``);if(o?.aborted){l(b(o));return}if(o&&(c=()=>{l(b(o))},o.addEventListener(`abort`,c,{once:!0})),e.then(t,l),n===1/0)return;let u=new y;s=a.setTimeout.call(void 0,()=>{if(r){try{t(r())}catch(e){l(e)}return}typeof e.cancel==`function`&&e.cancel(),i===!1?t():i instanceof Error?l(i):(u.message=i??`Promise timed out after ${n} milliseconds`,l(u))},n)}).finally(()=>{l.clear(),c&&o&&o.removeEventListener(`abort`,c)});return l.clear=()=>{a.clearTimeout.call(void 0,s),s=void 0},l}function S(e,t,n){let r=0,i=e.length;for(;i>0;){let a=Math.trunc(i/2),o=r+a;n(e[o],t)<=0?(r=++o,i-=a+1):i=a}return r}var C=class{#e=[];#t=0;enqueue(e,t){let{priority:n=0,id:r}=t??{},{size:i}=this,a={priority:n,id:r,run:e};if(i===0){this.#e.length=0,this.#t=0,this.#e.push(a);return}if(this.#e.at(-1).priority>=n){this.#e.push(a);return}this.#n();let o=S(this.#e,a,(e,t)=>t.priority-e.priority);this.#e.splice(o,0,a)}setPriority(e,t){let n=this.#e.findIndex((t,n)=>n>=this.#t&&t.id===e);if(n===-1)throw ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[r]=this.#e.splice(n,1);this.enqueue(r.run,{priority:t,id:e})}remove(e){let t=this.#e.findIndex((t,n)=>n<this.#t?!1:typeof e==`string`?t.id===e:t.run===e);t!==-1&&this.#e.splice(t,1)}dequeue(){if(this.#t===this.#e.length)return;let e=this.#e[this.#t];return this.#t++,this.#t===this.#e.length?(this.#e.length=0,this.#t=0):this.#t>100&&this.#t>this.#e.length/2&&this.#n(),e?.run}filter(e){let t=[];for(let n=this.#t;n<this.#e.length;n++){let r=this.#e[n];r.priority===e.priority&&t.push(r.run)}return t}get size(){return this.#e.length-this.#t}#n(){this.#t!==0&&(this.#e.splice(0,this.#t),this.#t=0)}},w=class extends v.default{#e;#t;#n=0;#r;#i=!1;#a=!1;#o;#s=0;#c=0;#l;#u;#d;#f=[];#p=0;#m;#h;#g=0;#_;#v;#y=1n;#b=new Map;#x=new Set;timeout;constructor(e){if(super(),e={carryoverIntervalCount:!1,intervalCap:1/0,interval:0,concurrency:1/0,autoStart:!0,queueClass:C,strict:!1,...e},!(typeof e.intervalCap==`number`&&e.intervalCap>=1))throw TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??``}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??``}\` (${typeof e.interval})`);if(e.strict&&e.interval===0)throw TypeError("The `strict` option requires a non-zero `interval`");if(e.strict&&e.intervalCap===1/0)throw TypeError("The `strict` option requires a finite `intervalCap`");if(this.#e=e.carryoverIntervalCount??e.carryoverConcurrencyCount??!1,this.#t=e.intervalCap===1/0||e.interval===0,this.#r=e.intervalCap,this.#o=e.interval,this.#d=e.strict,this.#m=new e.queueClass,this.#h=e.queueClass,this.concurrency=e.concurrency,e.timeout!==void 0&&!(Number.isFinite(e.timeout)&&e.timeout>0))throw TypeError(`Expected \`timeout\` to be a positive finite number, got \`${e.timeout}\` (${typeof e.timeout})`);this.timeout=e.timeout,this.#v=e.autoStart===!1,this.#z()}#S(e){for(;this.#p<this.#f.length;){let t=this.#f[this.#p];if(t!==void 0&&e-t>=this.#o)this.#p++;else break}(this.#p>100&&this.#p>this.#f.length/2||this.#p===this.#f.length)&&(this.#f=this.#f.slice(this.#p),this.#p=0)}#C(e){this.#d?this.#f.push(e):this.#n++}#w(){this.#d?this.#f.length>this.#p&&this.#f.pop():this.#n>0&&this.#n--}#T(){return this.#f.length-this.#p}get#E(){return this.#t?!0:this.#d?this.#T()<this.#r:this.#n<this.#r}get#D(){return this.#g<this.#_}#O(){this.#g--,this.#g===0&&this.emit(`pendingZero`),this.#P(),this.emit(`next`)}#k(){this.#u=void 0,this.#I(),this.#F()}#A(e){if(this.#d){if(this.#S(e),this.#T()>=this.#r){let t=this.#f[this.#p],n=this.#o-(e-t);return this.#j(n),!0}return!1}if(this.#l===void 0){let t=this.#s-e;if(t<0){if(this.#c>0){let t=e-this.#c;if(t<this.#o)return this.#j(this.#o-t),!0}this.#n=this.#e?this.#g:0}else return this.#j(t),!0}return!1}#j(e){this.#u===void 0&&(this.#u=setTimeout(()=>{this.#k()},e))}#M(){this.#l&&=(clearInterval(this.#l),void 0)}#N(){this.#u&&=(clearTimeout(this.#u),void 0)}#P(){if(this.#m.size===0){if(this.#M(),this.emit(`empty`),this.#g===0){if(this.#N(),this.#d&&this.#p>0){let e=Date.now();this.#S(e)}this.emit(`idle`)}return!1}let e=!1;if(!this.#v){let t=Date.now(),n=!this.#A(t);if(this.#E&&this.#D){let r=this.#m.dequeue();this.#t||(this.#C(t),this.#B()),this.emit(`active`),r(),n&&this.#F(),e=!0}}return e}#F(){this.#t||this.#l!==void 0||this.#d||(this.#l=setInterval(()=>{this.#I()},this.#o),this.#s=Date.now()+this.#o)}#I(){this.#d||(this.#n===0&&this.#g===0&&this.#l&&this.#M(),this.#n=this.#e?this.#g:0),this.#L(),this.#B()}#L(){for(;this.#P(););}get concurrency(){return this.#_}set concurrency(e){if(!(typeof e==`number`&&e>=1))throw TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#_=e,this.#L()}setPriority(e,t){if(typeof t!=`number`||!Number.isFinite(t))throw TypeError(`Expected \`priority\` to be a finite number, got \`${t}\` (${typeof t})`);this.#m.setPriority(e,t)}async add(e,t={}){return t={timeout:this.timeout,...t,id:t.id??(this.#y++).toString()},new Promise((n,r)=>{let i=Symbol(`task-${t.id}`),a=()=>void 0,o=async()=>{a(),this.#g++,this.#b.set(i,{id:t.id,priority:t.priority??0,startTime:Date.now(),timeout:t.timeout});let o;try{try{t.signal?.throwIfAborted()}catch(e){throw this.#V(),this.#b.delete(i),e}this.#c=Date.now();let r=e({signal:t.signal});if(t.timeout&&(r=x(Promise.resolve(r),{milliseconds:t.timeout,message:`Task timed out after ${t.timeout}ms (queue has ${this.#g} running, ${this.#m.size} waiting)`})),t.signal){let{signal:e}=t;r=Promise.race([r,new Promise((t,n)=>{o=()=>{n(e.reason)},e.addEventListener(`abort`,o,{once:!0})})])}let a=await r;n(a),this.emit(`completed`,a)}catch(e){r(e),this.emit(`error`,e)}finally{o&&t.signal?.removeEventListener(`abort`,o),this.#b.delete(i),queueMicrotask(()=>{this.#O()})}};this.#m.enqueue(o,t);let s=()=>{if(this.#m instanceof C){this.#m.remove(o);return}this.#m.remove?.(t.id)};if(t.signal){let{signal:e}=t,n=()=>{a(),s(),r(e.reason),this.#P(),this.emit(`next`)};if(a=()=>{e.removeEventListener(`abort`,n),this.#x.delete(a)},e.aborted){n();return}e.addEventListener(`abort`,n,{once:!0}),this.#x.add(a)}this.emit(`add`),this.#P()})}async addAll(e,t){return Promise.all(e.map(async e=>this.add(e,t)))}start(){return this.#v?(this.#v=!1,this.#L(),this):this}pause(){this.#v=!0}clear(){for(let e of this.#x)e();this.#m=new this.#h,this.#M(),this.#H(),this.emit(`empty`),this.#g===0&&(this.#N(),this.emit(`idle`)),this.emit(`next`)}async onEmpty(){this.#m.size!==0&&await this.#R(`empty`)}async onSizeLessThan(e){this.#m.size<e||await this.#R(`next`,()=>this.#m.size<e)}async onIdle(){this.#g===0&&this.#m.size===0||await this.#R(`idle`)}async onPendingZero(){this.#g!==0&&await this.#R(`pendingZero`)}async onRateLimit(){this.isRateLimited||await this.#R(`rateLimit`)}async onRateLimitCleared(){this.isRateLimited&&await this.#R(`rateLimitCleared`)}onError(){return new Promise((e,t)=>{let n=e=>{this.off(`error`,n),t(e)};this.on(`error`,n)})}async#R(e,t){return new Promise(n=>{let r=()=>{t&&!t()||(this.off(e,r),n())};this.on(e,r)})}get size(){return this.#m.size}sizeBy(e){return this.#m.filter(e).length}get pending(){return this.#g}get isPaused(){return this.#v}#z(){this.#t||(this.on(`add`,()=>{this.#m.size>0&&this.#B()}),this.on(`next`,()=>{this.#B()}))}#B(){this.#t||this.#a||(this.#a=!0,queueMicrotask(()=>{this.#a=!1,this.#H()}))}#V(){this.#t||(this.#w(),this.#B())}#H(){let e=this.#i;if(this.#t||this.#m.size===0){e&&(this.#i=!1,this.emit(`rateLimitCleared`));return}let t;if(this.#d){let e=Date.now();this.#S(e),t=this.#T()}else t=this.#n;let n=t>=this.#r;n!==e&&(this.#i=n,this.emit(n?`rateLimit`:`rateLimitCleared`))}get isRateLimited(){return this.#i}get isSaturated(){return this.#g===this.#_&&this.#m.size>0||this.isRateLimited&&this.#m.size>0}get runningTasks(){return[...this.#b.values()].map(e=>({...e,timeoutRemaining:e.timeout?Math.max(0,e.startTime+e.timeout-Date.now()):void 0}))}},T=class{eventQueue;cursorQueue;onEventEmitted;constructor(e){this.onEventEmitted=e.onEventEmitted,this.eventQueue=new w({concurrency:1,interval:1e3,intervalCap:e.eventsPerSecond}),this.cursorQueue=new w({concurrency:1})}queueEvent(e){return this.eventQueue.add(async()=>{await s.emit(e.subject,e.payload),this.onEventEmitted()})}queueAfterEvents(e,t=[]){let n=Promise.all(t);return n.catch(()=>void 0),this.cursorQueue.add(async()=>{await n,await e()})}async drain(){await Promise.all([this.eventQueue.onIdle(),this.cursorQueue.onIdle()])}async onIdle(){await this.drain()}},E=class{options;emittery=new n;trackedFiles=new Map;pollTimer;isPolling=!1;isDisposed=!1;inFlightChecks=new Map;constructor(e){if(!o.isAbsolute(e.directory))throw Error(`Directory must be an absolute path: ${e.directory}`);this.options={directory:e.directory,pattern:e.pattern,pollIntervalMs:e.pollIntervalMs??1e4}}on(e,t){return this.emittery.on(e,t)}once(e,t){return this.emittery.once(e,t)}async start(){this.isDisposed||this.pollTimer===void 0&&(await this.poll(),this.pollTimer=setInterval(()=>{this.poll()},this.options.pollIntervalMs))}stop(){this.pollTimer!==void 0&&(clearInterval(this.pollTimer),this.pollTimer=void 0)}dispose(){this.isDisposed=!0,this.stop(),this.emittery.clearListeners(),this.trackedFiles.clear(),this.inFlightChecks.clear()}isRunning(){return this.pollTimer!==void 0}getTrackedFiles(){return this.trackedFiles}seedFromCursors(e){for(let t of e)this.trackedFiles.set(t.filePath,{size:t.bytesRead,mtimeMs:new Date(t.lastModified).getTime()})}async poll(){if(!this.isDisposed&&!this.isPolling){this.isPolling=!0;try{let e=await this.discoverFiles(),t=new Set(e);for(let e of this.trackedFiles.keys())if(!t.has(e)){if(this.isDisposed)return;this.trackedFiles.delete(e),await this.emittery.emit(`deleted`,{filePath:e})}for(let t of e)try{await this.runFileCheck(t)}catch(e){await this.emitWatcherError(e,t)}if(this.isDisposed)return;await this.emittery.emit(`polled`,{trackedFilePaths:new Set(this.trackedFiles.keys())})}catch(e){await this.emitWatcherError(e)}finally{this.isPolling=!1}}}async discoverFiles(){return i(this.options.pattern,{cwd:this.options.directory,absolute:!0,onlyFiles:!0})}async checkFile(e){if(this.isDisposed)return;let t=await a.stat(e);if(this.isDisposed)return;let n={size:t.size,mtimeMs:t.mtimeMs},r=this.trackedFiles.get(e);if(!r){if(this.trackedFiles.set(e,n),this.isDisposed){this.trackedFiles.delete(e);return}await this.emittery.emit(`change`,{filePath:e,stat:{size:t.size,mtime:t.mtime},changeType:`created`});return}if(n.mtimeMs!==r.mtimeMs){let i=n.size<r.size?`rotated`:`modified`;if(this.trackedFiles.set(e,n),this.isDisposed)return;await this.emittery.emit(`change`,{filePath:e,stat:{size:t.size,mtime:t.mtime},changeType:i})}}clearTrackedFile(e){return this.trackedFiles.delete(e)}clearAllTrackedFiles(){this.trackedFiles.clear()}triggerImmediatePoll(e){this.runFileCheck(e).catch(t=>{this.emitWatcherError(t,e)})}async runFileCheck(e){if(this.isDisposed)return;let t=this.inFlightChecks.get(e);if(t){await t;return}let n=(async()=>{try{await this.checkFile(e)}finally{this.inFlightChecks.delete(e)}})();this.inFlightChecks.set(e,n),await n}async emitWatcherError(e,t){let n=e instanceof Error?e:Error(String(e));try{await this.emittery.emit(`error`,{error:n,filePath:t})}catch(e){console.error(`[LogFileWatcher] Error listener failed:`,e instanceof Error?e.message:String(e))}}},D=class{watcher;constructor(e){this.watcher=new E(e)}isRunning(){return this.watcher.isRunning()}async start(){await this.watcher.start()}stop(){this.watcher.stop()}dispose(){this.watcher.dispose()}onChange(e){return this.watcher.on(`change`,e)}onError(e){return this.watcher.on(`error`,e)}onDeleted(e){return this.watcher.on(`deleted`,e)}onPolled(e){return this.watcher.on(`polled`,({trackedFilePaths:t})=>e(t))}getTrackedFileMtimeMs(e){return this.watcher.getTrackedFiles().get(e)?.mtimeMs}triggerImmediatePoll(e){this.watcher.triggerImmediatePoll(e)}seedFromCursors(e){this.watcher.seedFromCursors(e)}},O=class{filesProcessed=0;eventsEmitted=0;sessionsImported=new Set;sessionsSkipped=new Set;lastLoggedEventCount=0;lastLoggedSnapshot=``;reset(){this.filesProcessed=0,this.eventsEmitted=0,this.sessionsImported.clear(),this.sessionsSkipped.clear(),this.lastLoggedEventCount=0,this.lastLoggedSnapshot=``}recordFileProcessed(){this.filesProcessed++}recordEventEmitted(e){this.eventsEmitted++,!(this.eventsEmitted-this.lastLoggedEventCount<1e3)&&(console.info(`${e} Imported ${this.eventsEmitted} events (${this.sessionsImported.size} sessions)...`),this.lastLoggedEventCount=this.eventsEmitted)}recordSessionImported(e){this.sessionsImported.add(e)}recordSessionSkipped(e){this.sessionsSkipped.add(e)}hasActivity(){return this.eventsEmitted>0||this.filesProcessed>0}stoppedMessage(e){return`${e} Stopped - ${this.eventsEmitted} events from ${this.sessionsImported.size} sessions (${this.sessionsSkipped.size} skipped)`}logProgress(e){if(!this.hasActivity())return;let t=JSON.stringify({eventsEmitted:this.eventsEmitted,filesProcessed:this.filesProcessed,sessionsImported:this.sessionsImported.size,sessionsSkipped:this.sessionsSkipped.size});t!==this.lastLoggedSnapshot&&(this.lastLoggedSnapshot=t,console.info(`${e} Progress: ${this.eventsEmitted} events, ${this.sessionsImported.size} sessions, ${this.filesProcessed} files, ${this.sessionsSkipped.size} skipped`))}};function k(){return async e=>{try{let t=await s.request(u.getByAdapterSessionId,{adapterSessionId:e});return t.session!==null&&!t.session.isImported}catch{return!1}}}var A=class{checkedSessions=new Map;inFlight=new Map;async isSkipped(e,t,n){let r=this.checkedSessions.get(e);if(r!==void 0)return r;let i=this.inFlight.get(e);return i||(i=t(e).then(t=>(this.checkedSessions.set(e,t),t&&n(e),t)).finally(()=>{this.inFlight.delete(e)}),this.inFlight.set(e,i)),i}clear(){this.checkedSessions.clear(),this.inFlight.clear()}};function j(e,t,n,r){return!n||!e||r===`rotated`?!1:new Date(e)>=t}function M(e,t,n){for(let r of n??[]){let n=r.line===void 0?``:` at line ${r.line}`;console.warn(`${e} Parse error in ${t}${n}: ${r.error}`)}}async function N(e,t,n,i){let{cursor:a}=await s.request(r.get,{filePath:e});return a&&a.bytesRead>0&&!a.sessionContext&&!t?(await s.request(r.delete,{filePath:e}).catch(()=>{}),i(n),`retry`):a}async function P(e,t,n,r,i,a){let o=await a.parseFile(e,0);M(i,e,o.errors);let s=a.validateRecords(o.records);s.length>0&&await a.handleFirstRead(e,s,o.bytesRead??0,t,n,0,r)}function F(e,t,n,r,i){let a=[];n&&(a.push(i(t.sessionEvent)),a.push(i(t.startedEvent)));let o=r(e,t);for(let e of o)a.push(i(e));return a}function I(e,t){let n=[];for(let r of e)n.push(t(r));return n}function L(e){return typeof e==`object`&&!!e&&`compactionDetected`in e&&e.compactionDetected===!0}function R(e,t,n){return{...e,state:n(t)}}var z=class{tasks=new Set;track(e){this.tasks.add(e),e.finally(()=>{this.tasks.delete(e)})}async drain(){for(;this.tasks.size>0;)await Promise.allSettled([...this.tasks])}},B=class{config;watcher;eventQueue;importer;managedSessionCache=new A;unsubscribeChange;unsubscribeError;unsubscribeDeleted;stats=new O;watcherTasks=new z;progressTimer;constructor(e,t){this.importer=t;let n=e.directory??t.getLogDirectory();this.config={enabled:e.enabled,directory:e.directory,pollIntervalMs:e.pollIntervalMs??1e4,eventsPerSecond:e.eventsPerSecond??100,adapterId:e.adapterId,adapterName:e.adapterName,checkMakaioManaged:e.checkMakaioManaged},this.watcher=new D({directory:n,pattern:this.getLogFilePattern(),pollIntervalMs:this.config.pollIntervalMs}),this.eventQueue=new T({eventsPerSecond:this.config.eventsPerSecond,onEventEmitted:()=>{this.stats.recordEventEmitted(this.logPrefix)}})}shouldSkipFile(e){return!1}validateRecords(e){return e}getMaxRecords(){}buildCursorSessionContext(e){let{adapterSessionId:t,sessionEvent:n,startedEvent:r,state:i,...a}=e;return{...a,adapterSessionId:t,sessionEvent:n,startedEvent:r,state:this.importer.serializeState(i)}}usesJsonFormat(){let e=this.getLogFilePattern();return e.includes(`.json`)&&!e.includes(`.jsonl`)}isEnabled(){return this.config.enabled}isRunning(){return this.watcher.isRunning()}async start(){if(!this.config.enabled||this.isRunning())return;let e=this.config.directory??this.importer.getLogDirectory();console.info(`${this.logPrefix} Starting - watching ${e}`),this.stats.reset(),this.managedSessionCache.clear(),this.progressTimer=setInterval(()=>this.stats.logProgress(this.logPrefix),1e4),this.unsubscribeChange=this.watcher.onChange(e=>{this.trackFileChange(e)}),this.unsubscribeError=this.watcher.onError(({error:e,filePath:t})=>{console.warn(`${this.logPrefix} Error${t?` for ${t}`:``}: ${e.message}`)}),this.unsubscribeDeleted=this.watcher.onDeleted(({filePath:e})=>{this.watcherTasks.track(s.request(r.delete,{filePath:e}).then(()=>void 0).catch(()=>{}))}),await this.watcher.start()}async stop(){this.progressTimer&&=(clearInterval(this.progressTimer),void 0),this.unsubscribeChange?.(),this.unsubscribeError?.(),this.unsubscribeDeleted?.(),this.unsubscribeChange=void 0,this.unsubscribeError=void 0,this.unsubscribeDeleted=void 0,this.watcher.stop(),await this.watcherTasks.drain(),await this.eventQueue.drain(),this.stats.hasActivity()&&console.info(this.stats.stoppedMessage(this.logPrefix))}async dispose(){await this.stop(),this.watcher.dispose(),this.managedSessionCache.clear()}static createDefaultCheckMakaioManaged(){return k()}async updateCursor(e,t,n,i){await s.request(r.set,{filePath:e,bytesRead:t,lastModified:n.toISOString(),sessionContext:i})}async handleFileChange(e){let{filePath:t,changeType:n,stat:i}=e;if(this.shouldSkipFile(t))return;let a=this.usesJsonFormat();n===`rotated`&&await s.request(r.delete,{filePath:t}).catch(()=>{});let o=await N(t,a,e,e=>this.trackFileChange(e));if(o===`retry`)return;let c=o?.sessionContext!==void 0,l=c?o?.bytesRead??0:0;if(j(o?.lastModified,i.mtime,a,n))return;let u=await this.parseFile(t,a?0:l,this.getMaxRecords());M(this.logPrefix,t,u.errors),this.stats.recordFileProcessed();let d=this.validateRecords(u.records),f=u.bytesRead??0;if(d.length===0){await this.maybeUpdateCursor(t,f,l,i.mtime,a,o?.sessionContext);return}c&&o?.sessionContext?await this.handleIncrementalRead(t,d,o.sessionContext,f,i.mtime,a,l):await this.handleFirstRead(t,d,f,i.mtime,a,l)}trackFileChange(e){let t=this.handleFileChange(e).catch(e=>{console.error(`${this.logPrefix} Error handling file change:`,e instanceof Error?e.message:String(e))});this.watcherTasks.track(t)}async handleFirstRead(e,t,n,r,i,a,o=!0){let s=this.importer.extractSessionContext(t);if(await this.isSessionSkipped(s.adapterSessionId)){await this.maybeUpdateCursor(e,n,a,r,i,this.buildCursorSessionContext(s));return}let c=F(t,s,o,(e,t)=>this.importer.processRecords(e,t),e=>this.queueEvent(e));this.trackImportedSession(s.adapterSessionId),await this.queueCursorUpdate(e,n,a,r,i,this.buildCursorSessionContext(s),c)}trackImportedSession(e){this.stats.recordSessionImported(e)}async handleIncrementalRead(e,t,n,i,a,o,c){if(await this.isSessionSkipped(n.adapterSessionId)){await this.maybeUpdateCursor(e,i,c,a,o,n);return}let l;try{l=this.importer.deserializeState(n.state)}catch(t){console.warn(`${this.logPrefix} Corrupted cursor state for ${e}, deleting cursor and re-importing.`,t instanceof Error?t.message:String(t)),await s.request(r.delete,{filePath:e}).catch(t=>{console.warn(`${this.logPrefix} Failed to delete corrupted cursor for ${e}.`,t instanceof Error?t.message:String(t))}),await P(e,a,o,!0,this.logPrefix,{parseFile:(e,t)=>this.parseFile(e,t),validateRecords:e=>this.validateRecords(e),handleFirstRead:(e,t,n,r,i,a,o)=>this.handleFirstRead(e,t,n,r,i,a,o)});return}let u={adapterSessionId:n.adapterSessionId,model:n.model,cwd:n.cwd,sessionEvent:n.sessionEvent,startedEvent:n.startedEvent,state:l},d=this.importer.processRecords(t,u);if(L(u.state)){await P(e,a,o,!1,this.logPrefix,{parseFile:(e,t)=>this.parseFile(e,t),validateRecords:e=>this.validateRecords(e),handleFirstRead:(e,t,n,r,i,a,o)=>this.handleFirstRead(e,t,n,r,i,a,o)});return}let f=I(d,e=>this.queueEvent(e)),p=R(n,u.state,e=>this.importer.serializeState(e));await this.queueCursorUpdate(e,i,c,a,o,p,f)}async maybeUpdateCursor(e,t,n,r,i,a){(t>n||i)&&await this.updateCursor(e,t,r,a)}async isSessionSkipped(e){return this.managedSessionCache.isSkipped(e,e=>this.importer.isMakaioManaged(e),e=>this.stats.recordSessionSkipped(e))}queueEvent(e){return this.eventQueue.queueEvent(e)}queueCursorUpdate(e,t,n,r,i,a,o=[]){return this.eventQueue.queueAfterEvents(()=>this.maybeUpdateCursor(e,t,n,r,i,a),o)}},V=class extends B{trackingFilePaths=new Set;trackingInactiveCount=new Map;lastSeenMtimeMs=new Map;unsubscribePolled;constructor(e,t){super(e,t)}clearTrackingState(e){this.trackingFilePaths.delete(e),this.trackingInactiveCount.delete(e),this.lastSeenMtimeMs.delete(e)}async persistImportedStatus(e){let{session:t}=await s.request(l.getByLogFilePath,{logFilePath:e});return!t||t.importStatus!==`tracking`||(await s.request(l.updateImportStatus,{sessionId:t.sessionId,importStatus:`imported`})).success?!0:(console.warn(`${this.logPrefix} Failed to persist imported status for ${e}`),!1)}async start(){!this.isEnabled()||this.isRunning()||(await super.start(),this.unsubscribePolled=this.watcher.onPolled(e=>{this.onPollCycle(e).catch(e=>{console.error(`${this.logPrefix} Error handling poll cycle:`,e instanceof Error?e.message:String(e))})}),await this.restorePersistedTrackingState())}async stop(){this.unsubscribePolled?.(),this.unsubscribePolled=void 0,await super.stop()}async dispose(){this.trackingFilePaths.clear(),this.trackingInactiveCount.clear(),this.lastSeenMtimeMs.clear(),await super.dispose()}async handleFileChange(e){let{filePath:t,changeType:n,stat:i}=e;if(this.shouldSkipFile(t))return;let{cursor:a}=await s.request(r.get,{filePath:t});if(!a){await this.discoverNewFile(e);return}n===`modified`&&await this.handleModifiedImportedFile(t,e,i.mtime)}async restorePersistedTrackingState(){this.trackingFilePaths.clear(),this.trackingInactiveCount.clear(),this.lastSeenMtimeMs.clear();try{let{sessions:e}=await s.request(l.listImported,{source:this.config.adapterName,importStatus:`tracking`});for(let t of e){if(t.source!==this.config.adapterName)continue;if(!t.logFilePath){(await s.request(l.updateImportStatus,{sessionId:t.sessionId,importStatus:`imported`})).success||console.warn(`${this.logPrefix} Failed to reset tracking status for session ${t.sessionId}`);continue}let e=this.watcher.getTrackedFileMtimeMs(t.logFilePath);if(e===void 0){(await s.request(l.updateImportStatus,{sessionId:t.sessionId,importStatus:`imported`})).success||console.warn(`${this.logPrefix} Failed to reset tracking status for ${t.logFilePath}`);continue}this.trackingFilePaths.add(t.logFilePath),this.trackingInactiveCount.set(t.logFilePath,0),this.lastSeenMtimeMs.set(t.logFilePath,e)}}catch(e){console.warn(`[DiscoveryOrchestrator] Failed to restore persisted tracking state:`,e instanceof Error?e.message:String(e))}}async discoverNewFile(e){let{filePath:t,stat:n}=e,r=await this.importer.extractDiscoveryMetadata(t);if(!(r.hasMessages??!1)){await this.updateCursor(t,0,n.mtime);return}if(await this.isSessionSkipped(r.adapterSessionId)){await this.updateCursor(t,0,n.mtime);return}let i=this.queueEvent({subject:c.session.discovered,payload:{adapterId:this.config.adapterId,adapterName:this.config.adapterName,adapterSessionId:r.adapterSessionId,model:r.model??null,cwd:r.cwd??null,title:r.title,parentAdapterSessionId:r.parentAdapterSessionId??null,forkPointMessageId:r.forkPointMessageId??null,kind:r.kind??`root`,startedAt:r.startedAt,logFilePath:t}});await this.eventQueue.queueAfterEvents(()=>this.updateCursor(t,0,n.mtime),[i])}async handleModifiedImportedFile(e,t,n){let{session:r}=await s.request(l.getByLogFilePath,{logFilePath:e});if(!r){await this.discoverNewFile(t);return}if(r.source===this.config.adapterName&&!(r.importStatus!==`imported`&&r.importStatus!==`tracking`)){if(await super.handleFileChange(t),r.importStatus===`imported`&&!(await s.request(l.updateImportStatus,{sessionId:r.sessionId,importStatus:`tracking`})).success){console.warn(`${this.logPrefix} Failed to persist tracking status for ${e}`);return}this.trackingFilePaths.add(e),this.lastSeenMtimeMs.set(e,n.getTime()),this.trackingInactiveCount.delete(e),this.watcher.triggerImmediatePoll(e)}}async onPollCycle(e){for(let t of[...this.trackingFilePaths]){if(!e.has(t)){await this.persistImportedStatus(t)&&this.clearTrackingState(t);continue}let n=this.watcher.getTrackedFileMtimeMs(t),r=this.lastSeenMtimeMs.get(t);if(!(n===void 0||r===void 0))try{if(n===r){let e=(this.trackingInactiveCount.get(t)??0)+1;e>=3?await this.persistImportedStatus(t)&&this.clearTrackingState(t):this.trackingInactiveCount.set(t,e)}else this.lastSeenMtimeMs.set(t,n),this.trackingInactiveCount.delete(t)}catch(e){console.warn(`${this.logPrefix} Failed to process tracked file ${t}:`,e instanceof Error?e.message:String(e))}}}};export{B as BaseLogOrchestrator,V as DiscoveryOrchestrator,f as parseJsonlFile,p as readFirstJsonlRecords,m as someJsonlRecord};
@@ -547,6 +547,8 @@ declare abstract class BaseStreamSession<TConfig extends StreamSessionConfig<Sco
547
547
  protected currentModel: string;
548
548
  /** Runtime working directory for tool execution; set from config.cwd. */
549
549
  protected currentCwd: string;
550
+ /** Pending public-turn history compactions waiting for canonical completion. */
551
+ private readonly pendingAssistantHistoryCompactions;
550
552
  /**
551
553
  * Initialize a stream session with connector runtime config.
552
554
  * @param config - Session configuration (bus identity, model/cwd defaults, and adapter hooks).
@@ -565,6 +567,23 @@ declare abstract class BaseStreamSession<TConfig extends StreamSessionConfig<Sco
565
567
  * @param mergedContent - Text content from superseded/merged messages
566
568
  */
567
569
  protected abstract buildMessages(handle: MessageHandle, mergedContent?: string[]): void;
570
+ /**
571
+ * Return the current adapter-specific conversation history length.
572
+ *
573
+ * Used to checkpoint the boundary immediately after a user turn has been
574
+ * materialized, so structured-output retries can later compact provisional
575
+ * assistant/retry blocks back to the canonical public completion.
576
+ * @returns Number of provider-native messages currently in history
577
+ */
578
+ protected abstract getConversationHistoryLength(): number;
579
+ /**
580
+ * Replace all assistant-side history for a turn with the canonical assistant
581
+ * message emitted by the `MessageHandle`.
582
+ * @param startIndex - History index immediately after the user turn input
583
+ * @param endIndex - Exclusive history boundary for provisional assistant/retry blocks
584
+ * @param assistantMessage - Canonical assistant message for that turn
585
+ */
586
+ protected abstract replaceAssistantTurnHistory(startIndex: number, endIndex: number, assistantMessage: string): void;
568
587
  /**
569
588
  * Execute the adapter-specific streaming API call.
570
589
  *
@@ -727,6 +746,17 @@ declare abstract class BaseStreamSession<TConfig extends StreamSessionConfig<Sco
727
746
  * @returns True when iteration must stop
728
747
  */
729
748
  protected shouldAbortTurnProcessing(turn: TTurn, currentHandle: MessageHandle): boolean;
749
+ /**
750
+ * Close any unresolved public-turn history compactions before a new public
751
+ * turn appends its user message.
752
+ * @param endIndex - Exclusive boundary before the new public turn starts
753
+ */
754
+ private closePendingAssistantHistoryCompactions;
755
+ /**
756
+ * Remove a completed history compaction from the pending set.
757
+ * @param compaction - Pending compaction handle to remove
758
+ */
759
+ private removePendingAssistantHistoryCompaction;
730
760
  }
731
761
  //#endregion
732
762
  //#region adapters/shared/stream-session/src/connector/base-stream-connector.d.ts
@@ -1 +1 @@
1
- import{z as e}from"zod";import{MakaioBus as t,OnceAbortError as n}from"@makaio/framework/bus";import{AgentSubjects as r,McpSubjects as i,ToolSubjects as a}from"@makaio/framework/contracts";import{AIAgent as o,AgentCompleteEventSchema as s,AgentStartedEventSchema as c,BaseConnectorSession as l,ErrorEventSchema as u,ProceduralAgentConnector as d,ToolCompletedEventSchema as f,ToolStartedEventSchema as p,UserMessageQueue as m,extractMcpCallTarget as h,isMcpCallTool as g,processQueueMessages as _}from"@makaio/framework/adapters";const v=8e3;function y(e){if(e.length<=8e3)return e;let t=v,n=``;for(;;){let r=`\n...[truncated ${e.length-t} chars]`,i=v-r.length;if(i<0)return r.slice(0,v);if(i===t&&r===n)break;t=i,n=r}return`${e.slice(0,t)}${n}`}function b(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function x(e,t=`Adapter`){let n;try{n=JSON.parse(e.function.arguments)}catch{let n=e.function.arguments.length;throw console.error(`[${t}] Failed to parse tool arguments for "${e.function.name}" (argsLength=${n})`),Error(`Failed to parse tool arguments for "${e.function.name}"`)}if(!b(n)){let r=n===null?`null`:Array.isArray(n)?`array`:typeof n;throw console.error(`[${t}] Parsed tool arguments for "${e.function.name}" must be a JSON object (received ${r})`,n),Error(`Tool arguments for "${e.function.name}" must be a JSON object`)}return{toolName:e.function.name,args:n,toolCallId:e.id}}function S(e,t,n=`Adapter`){return{...x(e,n),agentId:t.agentId,adapterId:t.adapterId,adapterName:t.adapterName,adapterSessionId:t.adapterSessionId,sessionId:t.sessionId}}function C(e,t){t.updatedInput!==void 0&&(e.function.arguments=JSON.stringify(t.updatedInput))}async function w(e,n){try{return(await t.request(a.list,{adapterId:e,adapterName:n})).tools}catch(e){return console.warn(`[${n}] Failed to fetch tools from bus:`,e),[]}}function T(e){return e.filter(e=>e.inputSchema!==void 0)}async function E(e,n,r){await n({eventType:`tool_started`,toolName:e.function.name,toolCallId:e.id});try{let i=JSON.parse(e.function.arguments),o=await t.request(a.execute,{toolName:e.function.name,input:i,adapterId:r.adapterId,adapterName:r.adapterName,contextOverrides:{...r,toolCallId:e.id}});return n({eventType:`tool_completed`,toolName:e.function.name,toolCallId:e.id,result:o.success?JSON.stringify(o.data):JSON.stringify(o.error),success:o.success}).then(()=>o)}catch(t){let r=t instanceof Error?{message:t.message,name:t.name}:{message:String(t),name:`UnknownError`};throw await n({eventType:`tool_completed`,toolName:e.function.name,toolCallId:e.id,result:JSON.stringify(r),success:!1}),t}}async function D(e,t,n,r,i){let a=[];for(let o of e){let e=x(o,i),s=await t.requestToolApproval({...e,reasoning:n.reasoning});if(s.action===`deny`){if(s.shouldAbort)throw Error(`Tool use denied by approval handler: ${o.function.name}`);let e=y(JSON.stringify({error:s.message}));a.push(r(o.id,e,!0));continue}C(o,s);let c=await E(o,t.emitSdkEvent,n);if(c.success&&t.recordMcpCall&&g(e.toolName)){let n=h(s.updatedInput??e.args);n!==void 0&&t.recordMcpCall(n)}let l=c.success?typeof c.data==`string`?c.data:JSON.stringify(c.data??null):JSON.stringify({error:c.error.message,code:c.error.code});a.push(r(o.id,y(l),!c.success))}return a}const O=e.enum([`idle`,`turn_started`,`step_started`,`step_finished`,`turn_finished`]),k=e.object({adapterId:e.string(),agentId:e.string(),oldState:O,newState:O,timestamp:e.number()}),A=e.object({eventType:e.literal(`reasoning_delta`),content:e.string()}),j=e.object({eventType:e.literal(`reasoning_complete`),content:e.string()}),M=e.object({name:e.string(),arguments:e.string()}),N=e.object({id:e.string(),type:e.literal(`function`),function:M}),P=e.object({eventType:e.literal(`tool_calls`),toolCalls:e.array(N)}),F=e.object({id:e.string(),type:e.literal(`function`),function:M}),I=e.object({eventType:e.literal(`message_complete`),content:e.string().nullable(),reasoning:e.string().optional(),tool_calls:e.array(F).optional(),finish_reason:e.string().nullable()}),L=`stream_start_timeout`;var R=class extends l{static MAX_TOOL_CALL_ITERATIONS=8;lastAssistantMessage;currentModel;currentCwd;constructor(e){super(e),this.sessionId=crypto.randomUUID(),this.currentModel=e.model,this.currentCwd=e.cwd}async processQueue(e){await _(e,{getCurrentTurn:()=>this.currentTurn,startNewTurn:(e,t)=>this.startNewTurn(e,t)})}async startNewTurn(e,t){this.config.onTurnStart?.(e),this.sessionId=crypto.randomUUID(),e.adapterSessionId=this.sessionId,this.buildMessages(e,t),this.currentTurn=this.createTurn(e),this.lastAssistantMessage=void 0,e.markAcknowledged(),await this.config.emitSdkEvent({eventType:`agent_started`,model:this.currentModel});let n=this.currentTurn;queueMicrotask(async()=>{try{if(!n||(await this.runTurn(n,e),e.isProcessed||this.isTurnSuperseded(n)))return;let t={outcome:`completed`,result:{message:this.lastAssistantMessage||``}};e.markCompleted(t),this.config.onTurnComplete?.(e,t)}catch(t){this.handleTurnError(t,n,e)}finally{n&&(!n.isPaused()||e.deliveryMode!==`immediate`)&&(await n.markTurnFinished(),this.currentTurn===n&&(this.currentTurn=void 0))}})}handleTurnError(e,t,n){if(t?.isPaused()&&n.deliveryMode===`immediate`)return;let r=e instanceof Error?e:Error(String(e));if(t?.isPaused()){if(!n.isProcessed){let e={outcome:`error`,error:r};n.markCompleted(e),this.config.onTurnComplete?.(n,e)}return}if(console.error(`[${this.config.adapterName}] Turn error:`,e),!n.isProcessed){let e={outcome:`error`,error:r};n.markCompleted(e),this.config.onTurnComplete?.(n,e)}this.config.handleError(r,!1)}async runTurn(e,t){this.isTurnSuperseded(e)||(await e.start(),await this.runTurnIteration(e,t))}createMessageCompletePromise(e,t){return this.bus.once(this.getSdkEventSubject(),{timeoutMs:3e5,filter:{"event.eventType":`message_complete`,agentId:this.config.agentId,adapterId:this.config.adapterId,adapterSessionId:t},signal:e})}async executeStreamingStep(e,t,n){let r=this.config.streamStartTimeoutMs??3e4,i=new AbortController,a=setTimeout(()=>{i.abort()},r);try{await this.executeApiCall(e,AbortSignal.any([t,i.signal]),n)}catch(e){throw!t.aborted&&i.signal.aborted?Error(L,{cause:e}):e}finally{clearTimeout(a)}}async runTurnIteration(e,t,r=0){if(this.isTurnSuperseded(e))return;let i=e.getAbortSignal(),a=0,o;for(;;){if(this.shouldAbortTurnProcessing(e,t))return;try{let n=t.adapterSessionId??this.sessionId;if(!n)throw Error(`adapterSessionId must be set before waiting for message_complete`);if(o=this.createMessageCompletePromise(i,n),await this.executeStreamingStep(e,i,n),this.shouldAbortTurnProcessing(e,t)){o.catch(()=>{});return}let{payload:a}=await o,s=a.event;if(s.eventType!==`message_complete`)throw Error(`Expected message_complete event, got ${s.eventType}`);if(this.shouldAbortTurnProcessing(e,t))return;await this.applyMessageComplete(s,t,r,e);return}catch(e){if(o?.catch(()=>{}),e instanceof Error&&e.message===L&&!i.aborted&&a===0){a++;continue}if(i.aborted||e.name===`AbortError`||e instanceof n)return;let t=this.classifyError(e);throw r===0&&await this.config.emitSdkEvent({eventType:`error`,message:t.message,code:e?.code,type:e?.type}),t}}}buildToolConstraints(){if(this.config.allowedDirectories!==void 0)return{allowedDirectories:this.config.allowedDirectories}}updateModel(e){this.currentModel=e}updateCwd(e){this.currentCwd=e}getCurrentTurn(){return this.currentTurn}isTurnSuperseded(e){return this.currentTurn!==e}shouldAbortTurnProcessing(e,t){return t.isProcessed||e.isPaused()||this.isTurnSuperseded(e)}},z=class extends d{session;userMessageQueue=new m;mcpDirectTools=[];mcpSessionContextCache;hasPendingToolRefresh=!1;hasPendingLedgerInjection=!1;markToolRefreshPending(){this.hasPendingToolRefresh=!0}afterSessionCreated(e){}getSession(){return this.session}async ensureSession(){return this.session||await this.initializeSession(),this.session}getSessionQueue(){return this.userMessageQueue}async initializeSession(){await this.fetchToolsViaBus(),this.prepareMcpDirectTools(),this.session=this.createSession(),this.afterSessionCreated(this.session),this.wireSessionEvents(),this.mcpDirectTools.length>0&&this.session.updateTools?.(this.mcpDirectTools);let e=(this.pendingTurnNumber??this.currentTurnNumber)||1;this.config.toolLedger?.recordInjection(this.mcpDirectTools,e)}prepareMcpDirectTools(){let e=this.mcpSessionContextCache??this.config.mcpSessionContext;e&&(this.mcpDirectTools=e.directTools.map(e=>({name:e.fullName,description:e.description??``,toolsetName:e.serverName,inputSchema:e.inputSchema})))}async fetchToolsViaBus(){this.session||await this.fetchTools()}async refreshTools(){await this.resolveAndCacheMcpContext(),this.prepareMcpDirectTools(),this.hasPendingLedgerInjection=!0}async resolveAndCacheMcpContext(){let e=this.config.mcpSessionContext;if(!(!e||!(`sessionId`in e)))try{this.mcpSessionContextCache=await t.request(i.session.resolve,{sessionId:e.sessionId,profileId:e.profileId,projectId:e.projectId})}catch(e){console.warn(`[${this.config.adapterName}] MCP session re-resolve failed; using previous tool snapshot.`,e)}}getWireSessionConfig(){return{onTurnStarted:async()=>{if(this.consumeTurnNumber(),this.hasPendingToolRefresh)try{await this.refreshTools()}catch(e){console.warn(`[${this.config.adapterName}] Tool refresh failed at turn start; continuing with stale tools.`,e)}finally{this.hasPendingToolRefresh=!1}this.hasPendingLedgerInjection&&=(this.config.toolLedger?.recordInjection(this.mcpDirectTools,this.currentTurnNumber),!1)},onTurnFinished:async e=>{if(this.hasPendingToolRefresh)try{await this.refreshTools()}catch(e){console.warn(`[${this.config.adapterName}] Tool refresh failed; continuing with stale tools.`,e)}finally{this.hasPendingToolRefresh=!1}await e()}}}resolveSystemPrompt(){if(this.systemPrompt!==void 0)return typeof this.systemPrompt==`string`?this.systemPrompt:this.systemPrompt.content}async sendMessage(e,t){let n=this.createMessageHandle(e,t);return await this.processUserMessages([n]),n}abort(){this.session?.abort()}async close(){await this.session?.abort()}async changeModelInPlace(e){return this.session?.updateModel(e),!0}async changeCwdInPlace(e){return this.session?.updateCwd(e),!0}async changeReasoningInPlace(e){return this.session?.updateReasoning?.(e),!0}async interrupt(){await this.session?.abort()}async getAdapterSessionId(){if(this.adapterSessionId||this.initAdapterSessionId(),!this.adapterSessionId)throw Error(`Adapter session ID is missing in getAdapterSessionId(); ensure initAdapterSessionId() ran during connector initialization.`);return this.adapterSessionId}initAdapterSessionId(){this.adapterSessionId??=crypto.randomUUID()}};function B(e){try{let t=JSON.parse(e);return typeof t==`object`&&t&&!Array.isArray(t)?t:{}}catch{return{}}}var V=class extends o{toolBlockIndexMap=new Map;completedToolIds=new Set;toolCallArgsMap=new Map;resetPerTurnToolTracking(){this.toolBlockIndexMap.clear(),this.completedToolIds.clear(),this.toolCallArgsMap.clear()}wireEvents(e){this.wireSdkEvents(),this.wireSemanticEvents(e,this.getConnectorSubjects()),this.wireToolApprovalRpc(e)}wireSemanticEvents(e,t){this.wireMessageEvents(e,t),this.wireUsageEvents(e,t),this.wireToolEvents(e,t),this.wireReasoningEvents(e,t),this.wireLifecycleEvents(e,t)}wireMessageEvents(e,t){this.subscribeConnector(e,t.chunk,async e=>{let t=this.extractChunkText(e.payload);t&&await this.emitGlobal(r.message_delta,{text:t})}),this.subscribeConnector(e,t.messageComplete,async e=>{let{content:t}=e.payload;t&&(await this.emitStepStarted(`text`),await this.emitStepFinished(`text`,{type:`text`,content:t})),await this.emitGlobal(r.message,{content:t??``})})}wireUsageEvents(e,t){this.subscribeConnector(e,t.usage,async e=>{let t=this.extractUsagePayload(e.payload);await this.trackUsage(t),await this.emitUsageContextWindowUpdate(e.payload)})}wireToolEvents(e,t){this.subscribeConnector(e,t.toolCalls,async e=>{let{toolCalls:t}=e.payload;for(let e of t){if(this.completedToolIds.has(e.id)){console.warn(`[BaseStreamAgent] Ignoring late tool_calls for completed toolCallId ${e.id}`);continue}let t=B(e.function.arguments);this.toolCallArgsMap.set(e.id,t);let n=this.reserveToolCallBlockIndex(e);this.toolBlockIndexMap.set(e.id,n),await this.emitGlobal(r.step.started,{stepType:`tool_use`,blockIndex:n,blockData:{type:`tool_use`,toolName:e.function.name,toolCallId:e.id},content:{type:`tool_call`,toolCallId:e.id,name:e.function.name,args:t}}),this.afterToolCallStepEmitted(n),await this.emitGlobal(r.tool.use,{toolName:e.function.name,args:t,toolCallId:e.id})}}),this.subscribeConnector(e,t.toolStarted,async e=>{let{toolName:t,toolCallId:n}=e.payload;await this.emitGlobal(r.tool.started,{toolName:t,toolCallId:n})}),this.subscribeConnector(e,t.toolCompleted,async e=>{let{toolCallId:t,toolName:n,result:i,success:a}=e.payload;this.completedToolIds.add(t);let o=this.toolBlockIndexMap.get(t);o===void 0&&console.warn(`[BaseStreamAgent] toolCallId ${t} missing from toolBlockIndexMap; using fallback`);let s=o??this.getFallbackToolCompletedBlockIndex();this.toolBlockIndexMap.delete(t),await this.emitGlobal(r.step.finished,{stepType:`tool_use`,blockIndex:s,content:{type:`tool_output`,toolCallId:t,output:i,isError:!a}}),this.afterToolCompletedStepEmitted(s);let c=this.toolCallArgsMap.get(t);this.toolCallArgsMap.delete(t),c===void 0&&console.warn(`[BaseStreamAgent] toolCallId ${t} missing args for tool ${n}`),await this.emitGlobal(r.tool.completed,{toolName:n,args:c,result:{output:i},success:a,toolCallId:t})})}wireReasoningEvents(e,t){this.subscribeConnector(e,t.reasoningDelta,async e=>{let{content:t}=e.payload;await this.emitGlobal(r.reasoning_delta,{content:t})}),this.subscribeConnector(e,t.reasoningComplete,async e=>{let t=e.payload.content;if(t){let t=this.buildReasoningBlock(e.payload);await this.emitStepStarted(`reasoning`),await this.emitStepFinished(`reasoning`,t)}await this.emitGlobal(r.reasoning,{content:t??``})})}wireLifecycleEvents(e,t){this.subscribeConnector(e,t.agentStarted,async e=>{e.payload,this.resetPerTurnToolTracking(),await this.emitStart()}),this.subscribeConnector(e,t.agentComplete,async e=>{e.payload,this.resetPerTurnToolTracking()}),this.subscribeConnector(e,t.error,async e=>{let{message:t}=e.payload;this.emitError({error:t})})}};export{s as AgentCompleteEventSchema,c as AgentStartedEventSchema,V as BaseStreamAgent,z as BaseStreamConnector,R as BaseStreamSession,u as ErrorEventSchema,v as MAX_TOOL_RESULT_CONTENT_CHARS,I as MessageCompleteEventSchema,F as MessageToolCallSchema,j as ReasoningCompleteEventSchema,A as ReasoningDeltaEventSchema,O as StreamSessionTurnStateSchema,M as ToolCallFunctionSchema,N as ToolCallSchema,P as ToolCallsEventSchema,f as ToolCompletedEventSchema,p as ToolStartedEventSchema,k as TurnStateChangedSchema,C as applyApprovedArgs,y as boundToolResultContent,E as executeTool,x as extractToolCallPayload,T as filterToolsWithSchema,D as handleToolCalls,w as loadToolsFromRegistry,S as toGlobalToolApproval};
1
+ import{z as e}from"zod";import{MakaioBus as t,OnceAbortError as n}from"@makaio/framework/bus";import{AgentSubjects as r,McpSubjects as i,ToolSubjects as a}from"@makaio/framework/contracts";import{AIAgent as o,AgentCompleteEventSchema as s,AgentStartedEventSchema as c,BaseConnectorSession as l,ErrorEventSchema as u,ProceduralAgentConnector as d,ToolCompletedEventSchema as f,ToolStartedEventSchema as p,UserMessageQueue as m,extractMcpCallTarget as h,isMcpCallTool as g,markCompletedWithFinalResult as _,processQueueMessages as v}from"@makaio/framework/adapters";const y=8e3;function b(e){if(e.length<=8e3)return e;let t=y,n=``;for(;;){let r=`\n...[truncated ${e.length-t} chars]`,i=y-r.length;if(i<0)return r.slice(0,y);if(i===t&&r===n)break;t=i,n=r}return`${e.slice(0,t)}${n}`}function x(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function S(e,t=`Adapter`){let n;try{n=JSON.parse(e.function.arguments)}catch{let n=e.function.arguments.length;throw console.error(`[${t}] Failed to parse tool arguments for "${e.function.name}" (argsLength=${n})`),Error(`Failed to parse tool arguments for "${e.function.name}"`)}if(!x(n)){let r=n===null?`null`:Array.isArray(n)?`array`:typeof n;throw console.error(`[${t}] Parsed tool arguments for "${e.function.name}" must be a JSON object (received ${r})`,n),Error(`Tool arguments for "${e.function.name}" must be a JSON object`)}return{toolName:e.function.name,args:n,toolCallId:e.id}}function C(e,t,n=`Adapter`){return{...S(e,n),agentId:t.agentId,adapterId:t.adapterId,adapterName:t.adapterName,adapterSessionId:t.adapterSessionId,sessionId:t.sessionId}}function w(e,t){t.updatedInput!==void 0&&(e.function.arguments=JSON.stringify(t.updatedInput))}async function T(e,n){try{return(await t.request(a.list,{adapterId:e,adapterName:n})).tools}catch(e){return console.warn(`[${n}] Failed to fetch tools from bus:`,e),[]}}function E(e){return e.filter(e=>e.inputSchema!==void 0)}async function D(e,n,r){await n({eventType:`tool_started`,toolName:e.function.name,toolCallId:e.id});try{let i=JSON.parse(e.function.arguments),o=await t.request(a.execute,{toolName:e.function.name,input:i,adapterId:r.adapterId,adapterName:r.adapterName,contextOverrides:{...r,toolCallId:e.id}});return n({eventType:`tool_completed`,toolName:e.function.name,toolCallId:e.id,result:o.success?JSON.stringify(o.data):JSON.stringify(o.error),success:o.success}).then(()=>o)}catch(t){let r=t instanceof Error?{message:t.message,name:t.name}:{message:String(t),name:`UnknownError`};throw await n({eventType:`tool_completed`,toolName:e.function.name,toolCallId:e.id,result:JSON.stringify(r),success:!1}),t}}async function O(e,t,n,r,i){let a=[];for(let o of e){let e=S(o,i),s=await t.requestToolApproval({...e,reasoning:n.reasoning});if(s.action===`deny`){if(s.shouldAbort)throw Error(`Tool use denied by approval handler: ${o.function.name}`);let e=b(JSON.stringify({error:s.message}));a.push(r(o.id,e,!0));continue}w(o,s);let c=await D(o,t.emitSdkEvent,n);if(c.success&&t.recordMcpCall&&g(e.toolName)){let n=h(s.updatedInput??e.args);n!==void 0&&t.recordMcpCall(n)}let l=c.success?typeof c.data==`string`?c.data:JSON.stringify(c.data??null):JSON.stringify({error:c.error.message,code:c.error.code});a.push(r(o.id,b(l),!c.success))}return a}const k=e.enum([`idle`,`turn_started`,`step_started`,`step_finished`,`turn_finished`]),A=e.object({adapterId:e.string(),agentId:e.string(),oldState:k,newState:k,timestamp:e.number()}),j=e.object({eventType:e.literal(`reasoning_delta`),content:e.string()}),M=e.object({eventType:e.literal(`reasoning_complete`),content:e.string()}),N=e.object({name:e.string(),arguments:e.string()}),P=e.object({id:e.string(),type:e.literal(`function`),function:N}),F=e.object({eventType:e.literal(`tool_calls`),toolCalls:e.array(P)}),I=e.object({id:e.string(),type:e.literal(`function`),function:N}),L=e.object({eventType:e.literal(`message_complete`),content:e.string().nullable(),reasoning:e.string().optional(),tool_calls:e.array(I).optional(),finish_reason:e.string().nullable()}),R=`stream_start_timeout`;var z=class extends l{static MAX_TOOL_CALL_ITERATIONS=8;lastAssistantMessage;currentModel;currentCwd;pendingAssistantHistoryCompactions=[];constructor(e){super(e),this.sessionId=crypto.randomUUID(),this.currentModel=e.model,this.currentCwd=e.cwd}async processQueue(e){await v(e,{getCurrentTurn:()=>this.currentTurn,startNewTurn:(e,t)=>this.startNewTurn(e,t)})}async startNewTurn(e,t){this.config.onTurnStart?.(e),this.sessionId=crypto.randomUUID(),e.adapterSessionId=this.sessionId,e.internalRetry||this.closePendingAssistantHistoryCompactions(this.getConversationHistoryLength()),this.buildMessages(e,t);let n=this.getConversationHistoryLength(),r;if(!e.isProcessed&&!e.internalRetry){let t,i={setEndIndex:e=>{t??=e}};this.pendingAssistantHistoryCompactions.push(i),e.addCompletionObserver(e=>{try{let i=e.outcome===`completed`?e.result?.message:void 0;if(i===void 0||r===void 0||i===r)return;let a=t??this.getConversationHistoryLength();this.replaceAssistantTurnHistory(n,a,i),this.lastAssistantMessage=i}finally{this.removePendingAssistantHistoryCompaction(i)}})}this.currentTurn=this.createTurn(e),this.lastAssistantMessage=void 0,e.markAcknowledged(),await this.config.emitSdkEvent({eventType:`agent_started`,model:this.currentModel});let i=this.currentTurn;queueMicrotask(async()=>{try{if(!i||(await this.runTurn(i,e),e.isProcessed||this.isTurnSuperseded(i)))return;r=this.lastAssistantMessage||``,await _(e,{outcome:`completed`,result:{message:r}},this.config.onTurnComplete)}catch(t){await this.handleTurnError(t,i,e)}finally{i&&(!i.isPaused()||e.deliveryMode!==`immediate`)&&(await i.markTurnFinished(),this.currentTurn===i&&(this.currentTurn=void 0))}})}async handleTurnError(e,t,n){if(t?.isPaused()&&n.deliveryMode===`immediate`)return;let r=e instanceof Error?e:Error(String(e));if(t?.isPaused()){n.isProcessed||await _(n,{outcome:`error`,error:r},this.config.onTurnComplete);return}console.error(`[${this.config.adapterName}] Turn error:`,e),n.isProcessed||await _(n,{outcome:`error`,error:r},this.config.onTurnComplete),this.config.handleError(r,!1)}async runTurn(e,t){this.isTurnSuperseded(e)||(await e.start(),await this.runTurnIteration(e,t))}createMessageCompletePromise(e,t){return this.bus.once(this.getSdkEventSubject(),{timeoutMs:3e5,filter:{"event.eventType":`message_complete`,agentId:this.config.agentId,adapterId:this.config.adapterId,adapterSessionId:t},signal:e})}async executeStreamingStep(e,t,n){let r=this.config.streamStartTimeoutMs??3e4,i=new AbortController,a=setTimeout(()=>{i.abort()},r);try{await this.executeApiCall(e,AbortSignal.any([t,i.signal]),n)}catch(e){throw!t.aborted&&i.signal.aborted?Error(R,{cause:e}):e}finally{clearTimeout(a)}}async runTurnIteration(e,t,r=0){if(this.isTurnSuperseded(e))return;let i=e.getAbortSignal(),a=0,o;for(;;){if(this.shouldAbortTurnProcessing(e,t))return;try{let n=t.adapterSessionId??this.sessionId;if(!n)throw Error(`adapterSessionId must be set before waiting for message_complete`);if(o=this.createMessageCompletePromise(i,n),await this.executeStreamingStep(e,i,n),this.shouldAbortTurnProcessing(e,t)){o.catch(()=>{});return}let{payload:a}=await o,s=a.event;if(s.eventType!==`message_complete`)throw Error(`Expected message_complete event, got ${s.eventType}`);if(this.shouldAbortTurnProcessing(e,t))return;await this.applyMessageComplete(s,t,r,e);return}catch(e){if(o?.catch(()=>{}),e instanceof Error&&e.message===R&&!i.aborted&&a===0){a++;continue}if(i.aborted||e.name===`AbortError`||e instanceof n)return;let t=this.classifyError(e);throw r===0&&await this.config.emitSdkEvent({eventType:`error`,message:t.message,code:e?.code,type:e?.type}),t}}}buildToolConstraints(){if(this.config.allowedDirectories!==void 0)return{allowedDirectories:this.config.allowedDirectories}}updateModel(e){this.currentModel=e}updateCwd(e){this.currentCwd=e}getCurrentTurn(){return this.currentTurn}isTurnSuperseded(e){return this.currentTurn!==e}shouldAbortTurnProcessing(e,t){return t.isProcessed||e.isPaused()||this.isTurnSuperseded(e)}closePendingAssistantHistoryCompactions(e){for(let t of this.pendingAssistantHistoryCompactions)t.setEndIndex(e)}removePendingAssistantHistoryCompaction(e){let t=this.pendingAssistantHistoryCompactions.indexOf(e);t>=0&&this.pendingAssistantHistoryCompactions.splice(t,1)}},B=class extends d{session;userMessageQueue=new m;mcpDirectTools=[];mcpSessionContextCache;hasPendingToolRefresh=!1;hasPendingLedgerInjection=!1;markToolRefreshPending(){this.hasPendingToolRefresh=!0}afterSessionCreated(e){}getSession(){return this.session}async ensureSession(){return this.session||await this.initializeSession(),this.session}getSessionQueue(){return this.userMessageQueue}async initializeSession(){await this.fetchToolsViaBus(),this.prepareMcpDirectTools(),this.session=this.createSession(),this.afterSessionCreated(this.session),this.wireSessionEvents(),this.mcpDirectTools.length>0&&this.session.updateTools?.(this.mcpDirectTools);let e=(this.pendingTurnNumber??this.currentTurnNumber)||1;this.config.toolLedger?.recordInjection(this.mcpDirectTools,e)}prepareMcpDirectTools(){let e=this.mcpSessionContextCache??this.config.mcpSessionContext;e&&(this.mcpDirectTools=e.directTools.map(e=>({name:e.fullName,description:e.description??``,toolsetName:e.serverName,inputSchema:e.inputSchema})))}async fetchToolsViaBus(){this.session||await this.fetchTools()}async refreshTools(){await this.resolveAndCacheMcpContext(),this.prepareMcpDirectTools(),this.hasPendingLedgerInjection=!0}async resolveAndCacheMcpContext(){let e=this.config.mcpSessionContext;if(!(!e||!(`sessionId`in e)))try{this.mcpSessionContextCache=await t.request(i.session.resolve,{sessionId:e.sessionId,profileId:e.profileId,projectId:e.projectId})}catch(e){console.warn(`[${this.config.adapterName}] MCP session re-resolve failed; using previous tool snapshot.`,e)}}getWireSessionConfig(){return{onTurnStarted:async()=>{if(this.consumeTurnNumber(),this.hasPendingToolRefresh)try{await this.refreshTools()}catch(e){console.warn(`[${this.config.adapterName}] Tool refresh failed at turn start; continuing with stale tools.`,e)}finally{this.hasPendingToolRefresh=!1}this.hasPendingLedgerInjection&&=(this.config.toolLedger?.recordInjection(this.mcpDirectTools,this.currentTurnNumber),!1)},onTurnFinished:async e=>{if(this.hasPendingToolRefresh)try{await this.refreshTools()}catch(e){console.warn(`[${this.config.adapterName}] Tool refresh failed; continuing with stale tools.`,e)}finally{this.hasPendingToolRefresh=!1}await e()}}}resolveSystemPrompt(){if(this.systemPrompt!==void 0)return typeof this.systemPrompt==`string`?this.systemPrompt:this.systemPrompt.content}async sendMessage(e,t){let n=this.createMessageHandle(e,t);return await this.processUserMessages([n]),n}abort(){this.session?.abort()}async close(){await this.session?.abort()}async changeModelInPlace(e){return this.session?.updateModel(e),!0}async changeCwdInPlace(e){return this.session?.updateCwd(e),!0}async changeReasoningInPlace(e){return this.session?.updateReasoning?.(e),!0}async interrupt(){await this.session?.abort()}async getAdapterSessionId(){if(this.adapterSessionId||this.initAdapterSessionId(),!this.adapterSessionId)throw Error(`Adapter session ID is missing in getAdapterSessionId(); ensure initAdapterSessionId() ran during connector initialization.`);return this.adapterSessionId}initAdapterSessionId(){this.adapterSessionId??=crypto.randomUUID()}};function V(e){try{let t=JSON.parse(e);return typeof t==`object`&&t&&!Array.isArray(t)?t:{}}catch{return{}}}var H=class extends o{toolBlockIndexMap=new Map;completedToolIds=new Set;toolCallArgsMap=new Map;resetPerTurnToolTracking(){this.toolBlockIndexMap.clear(),this.completedToolIds.clear(),this.toolCallArgsMap.clear()}wireEvents(e){this.wireSdkEvents(),this.wireSemanticEvents(e,this.getConnectorSubjects()),this.wireToolApprovalRpc(e)}wireSemanticEvents(e,t){this.wireMessageEvents(e,t),this.wireUsageEvents(e,t),this.wireToolEvents(e,t),this.wireReasoningEvents(e,t),this.wireLifecycleEvents(e,t)}wireMessageEvents(e,t){this.subscribeConnector(e,t.chunk,async e=>{let t=this.extractChunkText(e.payload);t&&await this.emitGlobal(r.message_delta,{text:t})}),this.subscribeConnector(e,t.messageComplete,async e=>{let{content:t}=e.payload;t&&(await this.emitStepStarted(`text`),await this.emitStepFinished(`text`,{type:`text`,content:t})),await this.emitGlobal(r.message,{content:t??``})})}wireUsageEvents(e,t){this.subscribeConnector(e,t.usage,async e=>{let t=this.extractUsagePayload(e.payload);await this.trackUsage(t),await this.emitUsageContextWindowUpdate(e.payload)})}wireToolEvents(e,t){this.subscribeConnector(e,t.toolCalls,async e=>{let{toolCalls:t}=e.payload;for(let e of t){if(this.completedToolIds.has(e.id)){console.warn(`[BaseStreamAgent] Ignoring late tool_calls for completed toolCallId ${e.id}`);continue}let t=V(e.function.arguments);this.toolCallArgsMap.set(e.id,t);let n=this.reserveToolCallBlockIndex(e);this.toolBlockIndexMap.set(e.id,n),await this.emitGlobal(r.step.started,{stepType:`tool_use`,blockIndex:n,blockData:{type:`tool_use`,toolName:e.function.name,toolCallId:e.id},content:{type:`tool_call`,toolCallId:e.id,name:e.function.name,args:t}}),this.afterToolCallStepEmitted(n),await this.emitGlobal(r.tool.use,{toolName:e.function.name,args:t,toolCallId:e.id})}}),this.subscribeConnector(e,t.toolStarted,async e=>{let{toolName:t,toolCallId:n}=e.payload;await this.emitGlobal(r.tool.started,{toolName:t,toolCallId:n})}),this.subscribeConnector(e,t.toolCompleted,async e=>{let{toolCallId:t,toolName:n,result:i,success:a}=e.payload;this.completedToolIds.add(t);let o=this.toolBlockIndexMap.get(t);o===void 0&&console.warn(`[BaseStreamAgent] toolCallId ${t} missing from toolBlockIndexMap; using fallback`);let s=o??this.getFallbackToolCompletedBlockIndex();this.toolBlockIndexMap.delete(t),await this.emitGlobal(r.step.finished,{stepType:`tool_use`,blockIndex:s,content:{type:`tool_output`,toolCallId:t,output:i,isError:!a}}),this.afterToolCompletedStepEmitted(s);let c=this.toolCallArgsMap.get(t);this.toolCallArgsMap.delete(t),c===void 0&&console.warn(`[BaseStreamAgent] toolCallId ${t} missing args for tool ${n}`),await this.emitGlobal(r.tool.completed,{toolName:n,args:c,result:{output:i},success:a,toolCallId:t})})}wireReasoningEvents(e,t){this.subscribeConnector(e,t.reasoningDelta,async e=>{let{content:t}=e.payload;await this.emitGlobal(r.reasoning_delta,{content:t})}),this.subscribeConnector(e,t.reasoningComplete,async e=>{let t=e.payload.content;if(t){let t=this.buildReasoningBlock(e.payload);await this.emitStepStarted(`reasoning`),await this.emitStepFinished(`reasoning`,t)}await this.emitGlobal(r.reasoning,{content:t??``})})}wireLifecycleEvents(e,t){this.subscribeConnector(e,t.agentStarted,async e=>{e.payload,this.resetPerTurnToolTracking(),await this.emitStart()}),this.subscribeConnector(e,t.agentComplete,async e=>{e.payload,this.resetPerTurnToolTracking()}),this.subscribeConnector(e,t.error,async e=>{let{message:t}=e.payload;this.emitError({error:t})})}};export{s as AgentCompleteEventSchema,c as AgentStartedEventSchema,H as BaseStreamAgent,B as BaseStreamConnector,z as BaseStreamSession,u as ErrorEventSchema,y as MAX_TOOL_RESULT_CONTENT_CHARS,L as MessageCompleteEventSchema,I as MessageToolCallSchema,M as ReasoningCompleteEventSchema,j as ReasoningDeltaEventSchema,k as StreamSessionTurnStateSchema,N as ToolCallFunctionSchema,P as ToolCallSchema,F as ToolCallsEventSchema,f as ToolCompletedEventSchema,p as ToolStartedEventSchema,A as TurnStateChangedSchema,w as applyApprovedArgs,b as boundToolResultContent,D as executeTool,S as extractToolCallPayload,E as filterToolsWithSchema,O as handleToolCalls,T as loadToolsFromRegistry,C as toGlobalToolApproval};
@@ -0,0 +1 @@
1
+ import{i as e,t}from"./json-value-CmhSGMLv.mjs";import{n}from"./schemas-CR1Rripy.mjs";import{z as r}from"zod";import{createBusNamespace as i}from"@makaio/framework/core";const a=r.object({kind:r.string().min(1),id:r.string().min(1),displayName:r.string().optional()}),o=r.object({level:r.string().min(1),ids:r.record(r.string().min(1),r.string().min(1)).optional()}).superRefine((e,t)=>{e.level!==`global`&&(!e.ids||Object.keys(e.ids).length===0)&&t.addIssue({code:r.ZodIssueCode.custom,path:[`ids`],message:`ids is required when scope level is not 'global'`})}),s=r.object({level:r.string().min(1),ids:r.record(r.string().min(1),r.string().min(1)).optional()}),c=r.object({refClass:r.literal(`artifact`).default(`artifact`),kind:r.string().min(1),id:r.string().min(1),revision:r.string().min(1)}),l=r.object({refClass:r.literal(`local`).default(`local`),artifact:c,localId:r.string().min(1)}),u=r.object({refClass:r.literal(`evidence`).default(`evidence`),kind:r.string().min(1),id:r.string().min(1),revision:r.string().min(1).optional(),locator:r.string().min(1).optional()}),d=r.discriminatedUnion(`refClass`,[c,l,u]);function f(e){return!e||typeof e!=`object`||Array.isArray(e)||`refClass`in e?e:`artifact`in e&&`localId`in e?{...e,refClass:`local`}:`locator`in e||!(`revision`in e)?{...e,refClass:`evidence`}:{...e,refClass:`artifact`}}const p=r.preprocess(f,d),m=r.discriminatedUnion(`refClass`,[c.extend({revision:r.string().min(1).optional()}),l,u]);function h(e){return!e||typeof e!=`object`||Array.isArray(e)||`refClass`in e?e:`artifact`in e&&`localId`in e?{...e,refClass:`local`}:`locator`in e?{...e,refClass:`evidence`}:{...e,refClass:`artifact`}}const g=r.preprocess(h,m),_=r.object({type:r.string().min(1),target:p}),v=r.enum([`assumed`,`inferred`,`stated`,`confirmed`,`verified`]),y=r.object({kind:r.string().min(1),actor:a,timestamp:r.number().int().nonnegative(),detail:r.string().optional(),evidenceRef:p.optional()}),b=r.object({level:v,basis:r.array(y)}),x=r.object({id:r.string().min(1),kind:r.string().min(1),summary:r.string().min(1),detail:r.string().optional(),severity:r.enum([`info`,`warning`,`blocker`]).optional(),tags:r.array(r.string().min(1)).optional(),regarding:r.union([c,l]).optional(),evidence:r.union([c,u]).optional(),actor:a,timestamp:r.number().int().nonnegative()}),S=r.object({markdown:r.string().optional(),summary:r.string().optional(),plaintext:r.string().optional()}),C=r.object({kind:r.string().min(1),id:r.string().min(1),revision:r.string().min(1),scope:o,schemaVersion:r.string().min(1),data:t,relations:r.array(_),confidence:b.optional(),representations:S.optional(),actor:a,timestamp:r.number().int().nonnegative(),createdAt:r.number().int().nonnegative().optional()}),w=r.enum([`supersedes`,`manual`,`coexist`]),T=r.object({kind:r.string().min(1),description:r.string().trim().min(1),schemaVersion:r.string().min(1),dataSchema:t,scopeSchema:t.optional(),observationSchema:t.optional(),discriminator:r.union([r.string().min(1),r.array(r.string().min(1))]).optional(),conflictPolicy:w,status:r.object({path:r.string().min(1),values:r.array(r.string().min(1)).optional()}).optional(),lifecycle:r.object({defaultRelevance:r.enum([`active`,`fading`,`retired`,`archived`]).optional(),decayPolicy:r.string().min(1).optional()}).optional(),indexedFields:r.array(r.string().min(1)).optional(),searchableFields:r.array(r.string().min(1)).optional(),projection:n.optional()}),E=r.object({type:r.string().min(1),symmetry:r.enum([`asymmetric`,`symmetric`]),implication:r.string().min(1).optional(),sourceKinds:r.array(r.string().min(1)).optional(),targetKinds:r.array(r.string().min(1)).optional(),targetRefClasses:r.array(r.enum([`artifact`,`local`,`evidence`])).optional()}),D=r.object({kind:r.string().min(1).optional(),scope:s.optional(),ids:r.array(r.string().min(1)).optional(),currentOnly:r.boolean().optional(),search:r.string().optional(),relation:r.object({type:r.string().min(1).optional(),target:g.optional()}).optional(),confidence:r.object({maxLevel:v.optional(),minLevel:v.optional()}).optional(),indexed:r.record(r.string(),e).optional(),limit:r.number().int().min(1).optional()}),O=r.object({base:c,target:c}),k=r.object({base:C,target:C,changedPaths:r.array(r.string())});function A(e){let{$schema:t,...n}=r.toJSONSchema(e);return n}function j(e){return{...e,toRegistration:()=>({kind:e.kind,description:e.description,schemaVersion:e.schemaVersion,dataSchema:A(e.dataSchema),...e.scopeSchema?{scopeSchema:A(e.scopeSchema)}:{},...e.observationSchema?{observationSchema:A(e.observationSchema)}:{},...e.discriminator===void 0?{}:{discriminator:typeof e.discriminator==`string`?e.discriminator:Array.from(e.discriminator)},conflictPolicy:e.conflictPolicy,...e.status?{status:{...e.status,...e.status.values?{values:[...e.status.values]}:{}}}:{},...e.lifecycle?{lifecycle:e.lifecycle}:{},...e.indexedFields?{indexedFields:[...e.indexedFields]}:{},...e.searchableFields?{searchableFields:[...e.searchableFields]}:{},...e.projection?{projection:{...e.projection,...e.projection.semanticEvents?{semanticEvents:[...e.projection.semanticEvents]}:{},...e.projection.projectedFields?{projectedFields:e.projection.projectedFields.map(e=>({...e}))}:{}}}:{}})}}function M(e){return{hooks:[...e.hooks]}}const N={"kind.register":{request:T,response:r.object({registered:r.boolean()})},"kind.list":{request:r.object({kind:r.string().min(1).optional()}),response:r.object({kinds:r.array(T)})},"relation-type.register":{request:E,response:r.object({registered:r.boolean()})},"relation-type.list":{request:r.object({type:r.string().min(1).optional()}),response:r.object({relationTypes:r.array(E)})},create:{request:C.omit({id:!0,revision:!0,timestamp:!0}),response:r.object({artifact:C})},revise:{request:r.object({previous:c,revision:C.omit({id:!0,revision:!0,timestamp:!0})}),response:r.object({artifact:C})},resolve:{request:r.object({ref:c}),response:r.object({artifact:C.nullable()})},query:{request:D,response:r.object({artifacts:r.array(C)})},compare:{request:O,response:k},created:r.object({artifact:C}),revised:r.object({previous:c,artifact:C}),"relation.added":r.object({artifact:c,relation:_}),"observation.added":r.object({artifact:c,observation:x}),"status.changed":r.object({artifact:c,path:r.string().min(1),previous:r.unknown().optional(),current:r.unknown().optional()}),"kind.changed":r.object({kind:r.string().min(1),schemaVersion:r.string().min(1)})},P=i(`artifact`,N),F=P.subjects;export{b as C,E,v as S,l as T,p as _,j as a,o as b,k as c,x as d,D as f,_ as g,g as h,M as i,w as l,c as m,N as n,a as o,s as p,F as r,O as s,P as t,T as u,S as v,u as w,y as x,C as y};