@theokit/sdk 4.35.0 → 4.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/agent-K5LYVJGJ.cjs +51 -0
  3. package/dist/{agent-P77NPBF4.cjs.map → agent-K5LYVJGJ.cjs.map} +1 -1
  4. package/dist/agent-ODWMOAEC.js +42 -0
  5. package/dist/{agent-H6HL5ITH.js.map → agent-ODWMOAEC.js.map} +1 -1
  6. package/dist/agent.d.ts +2 -1
  7. package/dist/auth/index.cjs +15 -15
  8. package/dist/auth/index.js +4 -4
  9. package/dist/{batch-2FSD2UNL.cjs → batch-3SEPDXCU.cjs} +23 -23
  10. package/dist/{batch-2FSD2UNL.cjs.map → batch-3SEPDXCU.cjs.map} +1 -1
  11. package/dist/{batch-MR2HKYMS.js → batch-SY5GZLFD.js} +9 -9
  12. package/dist/{batch-MR2HKYMS.js.map → batch-SY5GZLFD.js.map} +1 -1
  13. package/dist/{chunk-JLMXKTBX.cjs → chunk-2423XDPT.cjs} +26 -26
  14. package/dist/{chunk-JLMXKTBX.cjs.map → chunk-2423XDPT.cjs.map} +1 -1
  15. package/dist/{chunk-5IB2UKSN.js → chunk-2WFB5ZOX.js} +5 -5
  16. package/dist/{chunk-5IB2UKSN.js.map → chunk-2WFB5ZOX.js.map} +1 -1
  17. package/dist/{chunk-EPYZOCOL.cjs → chunk-3ILFUXNE.cjs} +5 -5
  18. package/dist/{chunk-EPYZOCOL.cjs.map → chunk-3ILFUXNE.cjs.map} +1 -1
  19. package/dist/{chunk-KSKU6JY6.cjs → chunk-3O2ELBST.cjs} +5 -5
  20. package/dist/{chunk-KSKU6JY6.cjs.map → chunk-3O2ELBST.cjs.map} +1 -1
  21. package/dist/{chunk-M2PU44HP.cjs → chunk-4YB7B3RP.cjs} +8 -8
  22. package/dist/{chunk-M2PU44HP.cjs.map → chunk-4YB7B3RP.cjs.map} +1 -1
  23. package/dist/{chunk-S2BBRVQX.js → chunk-56OXYUZE.js} +8 -7
  24. package/dist/chunk-56OXYUZE.js.map +1 -0
  25. package/dist/{chunk-D42XHI4O.cjs → chunk-56ZM6P7Z.cjs} +13 -14
  26. package/dist/chunk-56ZM6P7Z.cjs.map +1 -0
  27. package/dist/{chunk-7BTE3RXJ.js → chunk-5SB4V74H.js} +7 -8
  28. package/dist/chunk-5SB4V74H.js.map +1 -0
  29. package/dist/{chunk-MZ5ZRORA.cjs → chunk-6EDQBX7U.cjs} +17 -16
  30. package/dist/chunk-6EDQBX7U.cjs.map +1 -0
  31. package/dist/{chunk-RKG6QFCJ.js → chunk-6VP3XGEK.js} +4 -4
  32. package/dist/{chunk-RKG6QFCJ.js.map → chunk-6VP3XGEK.js.map} +1 -1
  33. package/dist/{chunk-KAP4GJHO.js → chunk-77WHPVXE.js} +10 -11
  34. package/dist/chunk-77WHPVXE.js.map +1 -0
  35. package/dist/{chunk-LALRCFSN.cjs → chunk-7DXLNNKH.cjs} +4 -4
  36. package/dist/{chunk-LALRCFSN.cjs.map → chunk-7DXLNNKH.cjs.map} +1 -1
  37. package/dist/{chunk-WEHUJ7ZS.cjs → chunk-ALU3KC4G.cjs} +267 -120
  38. package/dist/chunk-ALU3KC4G.cjs.map +1 -0
  39. package/dist/{chunk-Z2OC3UIW.cjs → chunk-BJMKQOY2.cjs} +11 -11
  40. package/dist/{chunk-Z2OC3UIW.cjs.map → chunk-BJMKQOY2.cjs.map} +1 -1
  41. package/dist/{chunk-WLKFWQSJ.js → chunk-CD73YHEH.js} +3 -3
  42. package/dist/{chunk-WLKFWQSJ.js.map → chunk-CD73YHEH.js.map} +1 -1
  43. package/dist/{chunk-BXV2QUIC.js → chunk-CSZRJ4RE.js} +6 -5
  44. package/dist/chunk-CSZRJ4RE.js.map +1 -0
  45. package/dist/{chunk-6M6A6WWW.cjs → chunk-D4ZUJTFB.cjs} +9 -10
  46. package/dist/chunk-D4ZUJTFB.cjs.map +1 -0
  47. package/dist/{chunk-XAUBQMQU.js → chunk-DCJ5MCJ3.js} +7 -7
  48. package/dist/{chunk-XAUBQMQU.js.map → chunk-DCJ5MCJ3.js.map} +1 -1
  49. package/dist/{chunk-Y66627E4.cjs → chunk-E7X2B66S.cjs} +24 -24
  50. package/dist/{chunk-Y66627E4.cjs.map → chunk-E7X2B66S.cjs.map} +1 -1
  51. package/dist/{chunk-6CLRANZA.js → chunk-EXQV452X.js} +3 -3
  52. package/dist/{chunk-6CLRANZA.js.map → chunk-EXQV452X.js.map} +1 -1
  53. package/dist/{chunk-EKFA76N4.js → chunk-F3X7Q4BF.js} +344 -453
  54. package/dist/chunk-F3X7Q4BF.js.map +1 -0
  55. package/dist/{chunk-XIG2IE3L.js → chunk-F6Y4IEQM.js} +5 -4
  56. package/dist/chunk-F6Y4IEQM.js.map +1 -0
  57. package/dist/{chunk-N24XBYNX.cjs → chunk-FAY3QDGC.cjs} +11 -10
  58. package/dist/chunk-FAY3QDGC.cjs.map +1 -0
  59. package/dist/{chunk-JD74LN7R.cjs → chunk-FK4EJD2I.cjs} +7 -6
  60. package/dist/chunk-FK4EJD2I.cjs.map +1 -0
  61. package/dist/{chunk-IX2LKBCD.js → chunk-GL7CFBVC.js} +176 -35
  62. package/dist/chunk-GL7CFBVC.js.map +1 -0
  63. package/dist/{chunk-77FOZCOT.js → chunk-GLUWH6JO.js} +6 -5
  64. package/dist/chunk-GLUWH6JO.js.map +1 -0
  65. package/dist/{chunk-RZQ6E5YZ.cjs → chunk-GM7QDQ24.cjs} +11 -11
  66. package/dist/{chunk-RZQ6E5YZ.cjs.map → chunk-GM7QDQ24.cjs.map} +1 -1
  67. package/dist/{chunk-G4WI3VW2.cjs → chunk-H5YVJB4K.cjs} +9 -10
  68. package/dist/chunk-H5YVJB4K.cjs.map +1 -0
  69. package/dist/{chunk-HRA3CPGG.js → chunk-HEN5WXXI.js} +9 -8
  70. package/dist/chunk-HEN5WXXI.js.map +1 -0
  71. package/dist/{chunk-LU7VALW5.js → chunk-I35DI7ES.js} +3 -3
  72. package/dist/{chunk-LU7VALW5.js.map → chunk-I35DI7ES.js.map} +1 -1
  73. package/dist/{chunk-TIZ4TS5V.cjs → chunk-ICYBIC6N.cjs} +8 -7
  74. package/dist/chunk-ICYBIC6N.cjs.map +1 -0
  75. package/dist/{chunk-2DYI7MIF.cjs → chunk-IEUDKUPM.cjs} +8 -8
  76. package/dist/{chunk-2DYI7MIF.cjs.map → chunk-IEUDKUPM.cjs.map} +1 -1
  77. package/dist/{chunk-AIDNODHJ.cjs → chunk-ITLS5LRF.cjs} +11 -11
  78. package/dist/{chunk-AIDNODHJ.cjs.map → chunk-ITLS5LRF.cjs.map} +1 -1
  79. package/dist/{chunk-M72RJVPC.js → chunk-JNIWFCKI.js} +3 -3
  80. package/dist/{chunk-M72RJVPC.js.map → chunk-JNIWFCKI.js.map} +1 -1
  81. package/dist/{chunk-LEJXBUBD.js → chunk-LISL36B6.js} +5 -5
  82. package/dist/{chunk-LEJXBUBD.js.map → chunk-LISL36B6.js.map} +1 -1
  83. package/dist/{chunk-3XJ7CS2C.cjs → chunk-LMWXF4LL.cjs} +554 -666
  84. package/dist/chunk-LMWXF4LL.cjs.map +1 -0
  85. package/dist/{chunk-BEURCLDV.cjs → chunk-LTCOPATU.cjs} +9 -3
  86. package/dist/chunk-LTCOPATU.cjs.map +1 -0
  87. package/dist/{chunk-TQKCU7CL.js → chunk-M5ZQBOIZ.js} +3 -3
  88. package/dist/{chunk-TQKCU7CL.js.map → chunk-M5ZQBOIZ.js.map} +1 -1
  89. package/dist/{chunk-A44COQJJ.cjs → chunk-MHCKWQR3.cjs} +8 -8
  90. package/dist/{chunk-A44COQJJ.cjs.map → chunk-MHCKWQR3.cjs.map} +1 -1
  91. package/dist/{chunk-7S7KKUO6.cjs → chunk-MRODLUGY.cjs} +4 -4
  92. package/dist/{chunk-7S7KKUO6.cjs.map → chunk-MRODLUGY.cjs.map} +1 -1
  93. package/dist/{chunk-BOTK6ZUP.js → chunk-MXSMAGDU.js} +3 -3
  94. package/dist/{chunk-BOTK6ZUP.js.map → chunk-MXSMAGDU.js.map} +1 -1
  95. package/dist/{chunk-5PZMMF4H.js → chunk-NFCKEBHI.js} +3 -3
  96. package/dist/{chunk-5PZMMF4H.js.map → chunk-NFCKEBHI.js.map} +1 -1
  97. package/dist/{chunk-6M4ODB2V.cjs → chunk-NNSKJCBM.cjs} +10 -10
  98. package/dist/{chunk-6M4ODB2V.cjs.map → chunk-NNSKJCBM.cjs.map} +1 -1
  99. package/dist/{chunk-4WL52CXU.cjs → chunk-NQ4AC2U4.cjs} +9 -9
  100. package/dist/{chunk-4WL52CXU.cjs.map → chunk-NQ4AC2U4.cjs.map} +1 -1
  101. package/dist/{chunk-YRXTIESB.cjs → chunk-P34DHHYQ.cjs} +4 -4
  102. package/dist/{chunk-YRXTIESB.cjs.map → chunk-P34DHHYQ.cjs.map} +1 -1
  103. package/dist/{chunk-HFPGOTVF.cjs → chunk-PAEJPLVN.cjs} +4 -4
  104. package/dist/{chunk-HFPGOTVF.cjs.map → chunk-PAEJPLVN.cjs.map} +1 -1
  105. package/dist/{chunk-S5RCBTSF.js → chunk-QFMXXUUT.js} +3 -3
  106. package/dist/{chunk-S5RCBTSF.js.map → chunk-QFMXXUUT.js.map} +1 -1
  107. package/dist/{chunk-V4XRLPEF.js → chunk-QGDKZDPN.js} +3 -3
  108. package/dist/{chunk-V4XRLPEF.js.map → chunk-QGDKZDPN.js.map} +1 -1
  109. package/dist/{chunk-DHLZIMP6.cjs → chunk-QUFSDDNU.cjs} +15 -15
  110. package/dist/{chunk-DHLZIMP6.cjs.map → chunk-QUFSDDNU.cjs.map} +1 -1
  111. package/dist/{chunk-BFWPZMG7.js → chunk-SDIBMLL5.js} +8 -8
  112. package/dist/{chunk-BFWPZMG7.js.map → chunk-SDIBMLL5.js.map} +1 -1
  113. package/dist/{chunk-GIW4L6HY.cjs → chunk-SWIBQFPH.cjs} +4 -4
  114. package/dist/{chunk-GIW4L6HY.cjs.map → chunk-SWIBQFPH.cjs.map} +1 -1
  115. package/dist/{chunk-JTFYYKDT.js → chunk-TAPQWDW2.js} +9 -4
  116. package/dist/chunk-TAPQWDW2.js.map +1 -0
  117. package/dist/{chunk-4GTXATWK.cjs → chunk-THEYGCYS.cjs} +4 -4
  118. package/dist/{chunk-4GTXATWK.cjs.map → chunk-THEYGCYS.cjs.map} +1 -1
  119. package/dist/{chunk-CJVMDRQB.cjs → chunk-TQI3KRXZ.cjs} +5 -4
  120. package/dist/chunk-TQI3KRXZ.cjs.map +1 -0
  121. package/dist/{chunk-LUSXDZPV.cjs → chunk-U2WLFOA3.cjs} +4 -4
  122. package/dist/{chunk-LUSXDZPV.cjs.map → chunk-U2WLFOA3.cjs.map} +1 -1
  123. package/dist/{chunk-FKCC2MED.js → chunk-UQPDFW4E.js} +3 -3
  124. package/dist/{chunk-FKCC2MED.js.map → chunk-UQPDFW4E.js.map} +1 -1
  125. package/dist/{chunk-CR3DGWUQ.js → chunk-VNNK6AKU.js} +3 -3
  126. package/dist/{chunk-CR3DGWUQ.js.map → chunk-VNNK6AKU.js.map} +1 -1
  127. package/dist/{chunk-ANIZEWTU.cjs → chunk-W4QN5CMG.cjs} +9 -8
  128. package/dist/chunk-W4QN5CMG.cjs.map +1 -0
  129. package/dist/{chunk-POQT2OIF.js → chunk-WDGCZDRG.js} +3 -3
  130. package/dist/{chunk-POQT2OIF.js.map → chunk-WDGCZDRG.js.map} +1 -1
  131. package/dist/{chunk-Q56IYTBZ.js → chunk-XAEAMI5H.js} +4 -4
  132. package/dist/{chunk-Q56IYTBZ.js.map → chunk-XAEAMI5H.js.map} +1 -1
  133. package/dist/{chunk-BWT67BI4.cjs → chunk-XAYVHS2B.cjs} +4 -4
  134. package/dist/{chunk-BWT67BI4.cjs.map → chunk-XAYVHS2B.cjs.map} +1 -1
  135. package/dist/{chunk-KIO7QFIV.cjs → chunk-YBFDBOUN.cjs} +8 -8
  136. package/dist/{chunk-KIO7QFIV.cjs.map → chunk-YBFDBOUN.cjs.map} +1 -1
  137. package/dist/{chunk-BNIFFFH3.js → chunk-YCXMSDSP.js} +4 -4
  138. package/dist/{chunk-BNIFFFH3.js.map → chunk-YCXMSDSP.js.map} +1 -1
  139. package/dist/{chunk-UVNG67DG.js → chunk-YDLNI7J6.js} +3 -3
  140. package/dist/{chunk-UVNG67DG.js.map → chunk-YDLNI7J6.js.map} +1 -1
  141. package/dist/{chunk-UAYYNWYJ.js → chunk-YHZXBDAW.js} +5 -4
  142. package/dist/chunk-YHZXBDAW.js.map +1 -0
  143. package/dist/{chunk-OKXUMCGM.js → chunk-YVTNFKZO.js} +5 -5
  144. package/dist/{chunk-OKXUMCGM.js.map → chunk-YVTNFKZO.js.map} +1 -1
  145. package/dist/{chunk-GJAGKFTR.js → chunk-ZJN6NTHE.js} +3 -3
  146. package/dist/{chunk-GJAGKFTR.js.map → chunk-ZJN6NTHE.js.map} +1 -1
  147. package/dist/{chunk-XV2RBL6D.js → chunk-ZW345YOI.js} +8 -9
  148. package/dist/chunk-ZW345YOI.js.map +1 -0
  149. package/dist/compact-session-H5TKLD55.cjs +54 -0
  150. package/dist/{compact-session-BEA3IOON.cjs.map → compact-session-H5TKLD55.cjs.map} +1 -1
  151. package/dist/compact-session-WNKKIIDW.js +17 -0
  152. package/dist/{compact-session-5BDD4HIB.js.map → compact-session-WNKKIIDW.js.map} +1 -1
  153. package/dist/compaction.cjs +16 -16
  154. package/dist/compaction.js +3 -3
  155. package/dist/concurrency.cjs +6 -6
  156. package/dist/concurrency.js +4 -4
  157. package/dist/context-VAYLPT4O.js +5 -0
  158. package/dist/{context-GWANQLX4.js.map → context-VAYLPT4O.js.map} +1 -1
  159. package/dist/context-ZV33V4DC.cjs +22 -0
  160. package/dist/{context-KNWVTZSY.cjs.map → context-ZV33V4DC.cjs.map} +1 -1
  161. package/dist/cron.cjs +28 -28
  162. package/dist/cron.js +27 -27
  163. package/dist/errors.cjs +21 -21
  164. package/dist/errors.js +2 -2
  165. package/dist/eval.cjs +31 -31
  166. package/dist/eval.js +27 -27
  167. package/dist/{executor-Y4MKPIUD.cjs → executor-OZSYXDKF.cjs} +23 -23
  168. package/dist/{executor-Y4MKPIUD.cjs.map → executor-OZSYXDKF.cjs.map} +1 -1
  169. package/dist/{executor-ORJS5GV2.js → executor-PAH72CB5.js} +7 -7
  170. package/dist/{executor-ORJS5GV2.js.map → executor-PAH72CB5.js.map} +1 -1
  171. package/dist/filesystem/index.cjs +7 -7
  172. package/dist/filesystem/index.js +3 -3
  173. package/dist/fs-session-store-6MY7PNI2.js +10 -0
  174. package/dist/{fs-session-store-4ALCDU3K.js.map → fs-session-store-6MY7PNI2.js.map} +1 -1
  175. package/dist/fs-session-store-7E7UPLF2.cjs +19 -0
  176. package/dist/{fs-session-store-IQYE35HX.cjs.map → fs-session-store-7E7UPLF2.cjs.map} +1 -1
  177. package/dist/generate-object-5SCEH2EE.cjs +20 -0
  178. package/dist/{generate-object-H3RNAM6S.cjs.map → generate-object-5SCEH2EE.cjs.map} +1 -1
  179. package/dist/generate-object-I7UD4NWN.js +7 -0
  180. package/dist/{generate-object-YJPDV5BS.js.map → generate-object-I7UD4NWN.js.map} +1 -1
  181. package/dist/index-manager-KKAK7NT3.js +10 -0
  182. package/dist/{index-manager-P7ZUX2RG.js.map → index-manager-KKAK7NT3.js.map} +1 -1
  183. package/dist/index-manager-R6ZJFEZF.cjs +19 -0
  184. package/dist/{index-manager-H7HUMW52.cjs.map → index-manager-R6ZJFEZF.cjs.map} +1 -1
  185. package/dist/index.cjs +124 -129
  186. package/dist/index.cjs.map +1 -1
  187. package/dist/index.d.cts +2 -1
  188. package/dist/index.d.ts +2 -1
  189. package/dist/index.js +45 -50
  190. package/dist/index.js.map +1 -1
  191. package/dist/{inject-session-SMH56NXP.cjs → inject-session-DM4SKTZO.cjs} +8 -8
  192. package/dist/{inject-session-SMH56NXP.cjs.map → inject-session-DM4SKTZO.cjs.map} +1 -1
  193. package/dist/{inject-session-V5FTK72N.js → inject-session-UXNJQTZ6.js} +6 -6
  194. package/dist/{inject-session-V5FTK72N.js.map → inject-session-UXNJQTZ6.js.map} +1 -1
  195. package/dist/internal/diagnostics.d.ts +54 -0
  196. package/dist/internal/local-agent/local-agent-invalidate.d.ts +0 -7
  197. package/dist/internal/local-agent/local-agent-lifecycle.d.ts +13 -0
  198. package/dist/internal/local-agent/local-agent.d.ts +1 -93
  199. package/dist/internal/persistence/index.cjs +25 -25
  200. package/dist/internal/persistence/index.js +6 -6
  201. package/dist/internal/persistence/sqlite-wal.d.cts +0 -9
  202. package/dist/internal/persistence/sqlite-wal.d.ts +0 -9
  203. package/dist/internal/persistence/transcript-ops.d.cts +14 -0
  204. package/dist/internal/persistence/transcript-ops.d.ts +14 -0
  205. package/dist/internal/plugins/lifecycle.d.cts +1 -0
  206. package/dist/internal/plugins/lifecycle.d.ts +1 -0
  207. package/dist/internal/runtime/fixtures/fixture-run-base.d.ts +19 -0
  208. package/dist/internal/runtime/registry/agent-registry.d.ts +0 -1
  209. package/dist/internal/security/index.cjs +13 -13
  210. package/dist/internal/security/index.js +3 -3
  211. package/dist/internal/security/redact.d.cts +0 -18
  212. package/dist/internal/security/redact.d.ts +0 -18
  213. package/dist/judge-call-SP3G3X2Y.cjs +22 -0
  214. package/dist/{judge-call-2FULQ6KL.cjs.map → judge-call-SP3G3X2Y.cjs.map} +1 -1
  215. package/dist/judge-call-TAEIXMYG.js +5 -0
  216. package/dist/{judge-call-D7R3ZTZS.js.map → judge-call-TAEIXMYG.js.map} +1 -1
  217. package/dist/models.cjs +22 -26
  218. package/dist/models.cjs.map +1 -1
  219. package/dist/models.js +13 -17
  220. package/dist/models.js.map +1 -1
  221. package/dist/path-safety.cjs +10 -10
  222. package/dist/path-safety.js +3 -3
  223. package/dist/persistence.cjs +27 -27
  224. package/dist/persistence.cjs.map +1 -1
  225. package/dist/persistence.js +8 -8
  226. package/dist/persistence.js.map +1 -1
  227. package/dist/project.cjs +5 -5
  228. package/dist/project.js +3 -3
  229. package/dist/registry-N3GTKYCI.cjs +46 -0
  230. package/dist/{registry-APYDISL6.cjs.map → registry-N3GTKYCI.cjs.map} +1 -1
  231. package/dist/registry-SOXE4RY6.js +9 -0
  232. package/dist/{registry-34IWWDQQ.js.map → registry-SOXE4RY6.js.map} +1 -1
  233. package/dist/retry.cjs +4 -4
  234. package/dist/retry.js +3 -3
  235. package/dist/sandbox/index.cjs +6 -6
  236. package/dist/sandbox/index.js +2 -2
  237. package/dist/server/errors-envelope.cjs +14 -14
  238. package/dist/server/errors-envelope.js +3 -3
  239. package/dist/session-transcript-6WKLYIN4.js +5 -0
  240. package/dist/{session-transcript-F2ANTA2M.js.map → session-transcript-6WKLYIN4.js.map} +1 -1
  241. package/dist/session-transcript-EAKR4D2W.cjs +50 -0
  242. package/dist/{session-transcript-JXFMPLOT.cjs.map → session-transcript-EAKR4D2W.cjs.map} +1 -1
  243. package/dist/skills.cjs +7 -7
  244. package/dist/skills.js +5 -5
  245. package/dist/stream-object-OFM66VUT.js +7 -0
  246. package/dist/{stream-object-WUQSSRY2.js.map → stream-object-OFM66VUT.js.map} +1 -1
  247. package/dist/stream-object-Y7YCX3BI.cjs +20 -0
  248. package/dist/{stream-object-QEQJJDTI.cjs.map → stream-object-Y7YCX3BI.cjs.map} +1 -1
  249. package/dist/subagents-loader.cjs +23 -8
  250. package/dist/subagents-loader.cjs.map +1 -1
  251. package/dist/subagents-loader.d.cts +18 -3
  252. package/dist/subagents-loader.d.ts +18 -3
  253. package/dist/subagents-loader.js +23 -8
  254. package/dist/subagents-loader.js.map +1 -1
  255. package/dist/subscription/index.cjs +3 -3
  256. package/dist/subscription/index.js +2 -2
  257. package/dist/task-store.cjs +7 -7
  258. package/dist/task-store.js +4 -4
  259. package/dist/workflow.cjs +27 -27
  260. package/dist/workflow.js +6 -6
  261. package/package.json +1 -1
  262. package/dist/agent-H6HL5ITH.js +0 -42
  263. package/dist/agent-P77NPBF4.cjs +0 -51
  264. package/dist/chunk-3XJ7CS2C.cjs.map +0 -1
  265. package/dist/chunk-6M6A6WWW.cjs.map +0 -1
  266. package/dist/chunk-77FOZCOT.js.map +0 -1
  267. package/dist/chunk-7BTE3RXJ.js.map +0 -1
  268. package/dist/chunk-ANIZEWTU.cjs.map +0 -1
  269. package/dist/chunk-BEURCLDV.cjs.map +0 -1
  270. package/dist/chunk-BXV2QUIC.js.map +0 -1
  271. package/dist/chunk-CJVMDRQB.cjs.map +0 -1
  272. package/dist/chunk-D42XHI4O.cjs.map +0 -1
  273. package/dist/chunk-EKFA76N4.js.map +0 -1
  274. package/dist/chunk-G4WI3VW2.cjs.map +0 -1
  275. package/dist/chunk-HRA3CPGG.js.map +0 -1
  276. package/dist/chunk-IX2LKBCD.js.map +0 -1
  277. package/dist/chunk-JD74LN7R.cjs.map +0 -1
  278. package/dist/chunk-JTFYYKDT.js.map +0 -1
  279. package/dist/chunk-KAP4GJHO.js.map +0 -1
  280. package/dist/chunk-MZ5ZRORA.cjs.map +0 -1
  281. package/dist/chunk-N24XBYNX.cjs.map +0 -1
  282. package/dist/chunk-S2BBRVQX.js.map +0 -1
  283. package/dist/chunk-TIZ4TS5V.cjs.map +0 -1
  284. package/dist/chunk-UAYYNWYJ.js.map +0 -1
  285. package/dist/chunk-WEHUJ7ZS.cjs.map +0 -1
  286. package/dist/chunk-XIG2IE3L.js.map +0 -1
  287. package/dist/chunk-XV2RBL6D.js.map +0 -1
  288. package/dist/compact-session-5BDD4HIB.js +0 -17
  289. package/dist/compact-session-BEA3IOON.cjs +0 -54
  290. package/dist/context-GWANQLX4.js +0 -5
  291. package/dist/context-KNWVTZSY.cjs +0 -22
  292. package/dist/fs-session-store-4ALCDU3K.js +0 -10
  293. package/dist/fs-session-store-IQYE35HX.cjs +0 -19
  294. package/dist/generate-object-H3RNAM6S.cjs +0 -20
  295. package/dist/generate-object-YJPDV5BS.js +0 -7
  296. package/dist/index-manager-H7HUMW52.cjs +0 -19
  297. package/dist/index-manager-P7ZUX2RG.js +0 -10
  298. package/dist/judge-call-2FULQ6KL.cjs +0 -22
  299. package/dist/judge-call-D7R3ZTZS.js +0 -5
  300. package/dist/registry-34IWWDQQ.js +0 -9
  301. package/dist/registry-APYDISL6.cjs +0 -46
  302. package/dist/session-transcript-F2ANTA2M.js +0 -5
  303. package/dist/session-transcript-JXFMPLOT.cjs +0 -50
  304. package/dist/stream-object-QEQJJDTI.cjs +0 -20
  305. package/dist/stream-object-WUQSSRY2.js +0 -7
@@ -1,4 +1,5 @@
1
- import { ConfigurationError } from './chunk-WLKFWQSJ.js';
1
+ import { ConfigurationError } from './chunk-CD73YHEH.js';
2
+ import { diag } from './chunk-TAPQWDW2.js';
2
3
  import { AsyncLocalStorage } from 'async_hooks';
3
4
  import { existsSync } from 'fs';
4
5
  import { readFile } from 'fs/promises';
@@ -14,7 +15,7 @@ var warned = /* @__PURE__ */ new Set();
14
15
  function warnOnce(key, message) {
15
16
  if (warned.has(key)) return;
16
17
  warned.add(key);
17
- process.stderr.write(`${message}
18
+ diag(`${message}
18
19
  `);
19
20
  }
20
21
  async function loadHookConfig(cwd) {
@@ -130,5 +131,5 @@ function warnPersonalitySwitchInsideFork(agentId) {
130
131
  }
131
132
 
132
133
  export { currentPersonalityContext, loadHookConfig, warnOnce, warnPersonalitySwitchInsideFork, withPersonalityContext };
133
- //# sourceMappingURL=chunk-XIG2IE3L.js.map
134
- //# sourceMappingURL=chunk-XIG2IE3L.js.map
134
+ //# sourceMappingURL=chunk-F6Y4IEQM.js.map
135
+ //# sourceMappingURL=chunk-F6Y4IEQM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/runtime/hooks/hooks-source.ts","../src/internal/personality/context.ts"],"names":[],"mappings":"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","file":"chunk-F6Y4IEQM.js","sourcesContent":["/**\n * Single source of truth for loading the hooks config (ADR 0016 — reverses\n * D74/D77 for hooks: JSON is canonical again, in the Claude Code shape).\n *\n * `.theokit/hooks.json` (Claude-Code-shaped JSON) is the only supported form.\n * A stray legacy `.theokit/hooks/*.md` dir (no hooks.json) is NOT loaded — it\n * warns to migrate and yields no hooks. Absent both → empty config.\n *\n * Consumed by `hooks-executor.ts` (runtime dispatch).\n *\n * Config shape (identical to Claude Code's `settings.json` hooks):\n * { \"hooks\": { \"PreToolUse\": [ { \"matcher\": \"shell\",\n * \"hooks\": [ { \"type\": \"command\", \"command\": \"…\", \"timeout\": 30 } ] } ] } }\n *\n * @internal\n */\n\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport { ConfigurationError } from \"../../../errors.js\";\nimport { diag } from \"../../diagnostics.js\";\n\n/** The five lifecycle events the SDK runtime actually fires. */\nexport type HookEvent = \"preRun\" | \"postRun\" | \"preToolUse\" | \"postToolUse\" | \"stop\";\n\n/**\n * Claude Code event name → the SDK firing event. Only events the runtime\n * genuinely emits are mapped; a Claude Code event with no SDK firing point\n * (SessionStart / SubagentStop / PreCompact / Notification / SessionEnd) is\n * skipped with a warn rather than silently accepted (it would never run).\n */\nconst CLAUDE_CODE_EVENT_MAP: Readonly<Record<string, HookEvent>> = {\n PreToolUse: \"preToolUse\",\n PostToolUse: \"postToolUse\",\n UserPromptSubmit: \"preRun\",\n Stop: \"stop\",\n};\n\nexport interface HookCommand {\n command: string;\n matcher?: string;\n timeoutMs?: number;\n}\n\nexport interface HookConfig {\n hooks?: Partial<Record<HookEvent, HookCommand[]>>;\n}\n\nconst warned = new Set<string>();\n\n/**\n * Emit a stderr warn once per process per unique key. Helps surface the\n * deprecation path without spamming when the loader is called many times\n * during a session (cron + send + skills all hit this).\n *\n * Note: spawned workers (cron, subagent) start fresh processes — warn\n * re-emits there, by design (1 per process boot, not per call).\n *\n * @internal\n */\nexport function warnOnce(key: string, message: string): void {\n if (warned.has(key)) return;\n warned.add(key);\n diag(`${message}\\n`);\n}\n\n/** Reset for tests; not exported via barrel. @internal */\nexport function _resetWarnOnceForTests(): void {\n warned.clear();\n}\n\n/**\n * Load hooks from `.theokit/hooks.json` (Claude-Code-shaped — the only supported\n * form). A stray legacy `.theokit/hooks/*.md` markdown dir (no `hooks.json`) is\n * NOT loaded — it emits a one-time migration warn and yields no hooks.\n *\n * @internal\n */\nexport async function loadHookConfig(cwd: string): Promise<HookConfig> {\n const jsonPath = join(cwd, \".theokit\", \"hooks.json\");\n\n if (!existsSync(jsonPath)) {\n if (existsSync(join(cwd, \".theokit\", \"hooks\"))) {\n warnOnce(\n \"hooks-md-unsupported\",\n \"[theokit-sdk] .theokit/hooks/*.md hooks are no longer supported (ADR 0016) — migrate to a Claude-Code-shaped .theokit/hooks.json\",\n );\n }\n return {};\n }\n\n let raw: string;\n try {\n raw = await readFile(jsonPath, \"utf8\");\n } catch (cause) {\n throw new ConfigurationError(`Failed to read hooks config: ${jsonPath}`, {\n code: \"hooks_read_error\",\n cause,\n });\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (cause) {\n throw new ConfigurationError(`Invalid JSON in hooks config: ${jsonPath}`, {\n code: \"hooks_json_invalid\",\n cause,\n });\n }\n return parseClaudeCodeConfig(parsed, jsonPath);\n}\n\n/** Narrow an unknown to a record, or throw a typed config error. */\nfunction asRecord(value: unknown, path: string, where: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new ConfigurationError(`hooks: expected an object at ${where} in ${path}`, {\n code: \"hooks_json_invalid\",\n });\n }\n return value as Record<string, unknown>;\n}\n\n/** Narrow an unknown to an array, or throw a typed config error. */\nfunction asArray(value: unknown, path: string, where: string): unknown[] {\n if (!Array.isArray(value)) {\n throw new ConfigurationError(`hooks: expected an array at ${where} in ${path}`, {\n code: \"hooks_json_invalid\",\n });\n }\n return value;\n}\n\n/**\n * Parse Claude Code's nested hooks config into the SDK's flat internal shape:\n * `{ hooks: { PreToolUse: [{ matcher?, hooks: [{ type:\"command\", command, timeout? }] }] } }`\n * → `{ hooks: { preToolUse: [{ command, matcher?, timeoutMs? }] } }`. Each group's\n * `matcher` applies to every command it wraps; `timeout` (seconds) → `timeoutMs`.\n */\nfunction parseClaudeCodeConfig(raw: unknown, path: string): HookConfig {\n const root = asRecord(raw, path, \"the root\");\n if (root.hooks === undefined) return {};\n const hooksRec = asRecord(root.hooks, path, `\"hooks\"`);\n const grouped: Partial<Record<HookEvent, HookCommand[]>> = {};\n\n for (const [ccEvent, groups] of Object.entries(hooksRec)) {\n const event = CLAUDE_CODE_EVENT_MAP[ccEvent];\n if (event === undefined) {\n warnOnce(\n `hooks-event-${ccEvent}`,\n `[theokit-sdk] hooks: event \"${ccEvent}\" is not fired by the SDK runtime (supported: ${Object.keys(CLAUDE_CODE_EVENT_MAP).join(\", \")}) — skipping`,\n );\n continue;\n }\n grouped[event] = [...(grouped[event] ?? []), ...flattenEventGroups(groups, path, ccEvent)];\n }\n return { hooks: grouped };\n}\n\n/** Flatten one Claude Code event's matcher-groups into internal HookCommands. */\nfunction flattenEventGroups(groups: unknown, path: string, ccEvent: string): HookCommand[] {\n const commands: HookCommand[] = [];\n for (const rawGroup of asArray(groups, path, `hooks.${ccEvent}`)) {\n const group = asRecord(rawGroup, path, `hooks.${ccEvent}[]`);\n const matcher = group.matcher === undefined ? undefined : String(group.matcher);\n for (const rawCmd of asArray(group.hooks, path, `hooks.${ccEvent}[].hooks`)) {\n commands.push(parseClaudeCodeCommand(rawCmd, matcher, path, ccEvent));\n }\n }\n return commands;\n}\n\n/** One `{ type:\"command\", command, timeout? }` entry → an internal HookCommand. */\nfunction parseClaudeCodeCommand(\n raw: unknown,\n matcher: string | undefined,\n path: string,\n ccEvent: string,\n): HookCommand {\n const cmd = asRecord(raw, path, `hooks.${ccEvent}[].hooks[]`);\n if (cmd.type !== \"command\") {\n throw new ConfigurationError(\n `hooks: only { \"type\": \"command\" } is supported (got ${JSON.stringify(cmd.type)}) in ${path}`,\n { code: \"hooks_unsupported_type\" },\n );\n }\n if (typeof cmd.command !== \"string\" || cmd.command.length === 0) {\n throw new ConfigurationError(`hooks: \"command\" must be a non-empty string in ${path}`, {\n code: \"hooks_invalid_command\",\n });\n }\n const hc: HookCommand = { command: cmd.command };\n if (matcher !== undefined) hc.matcher = matcher;\n if (typeof cmd.timeout === \"number\" && cmd.timeout > 0) {\n hc.timeoutMs = Math.round(cmd.timeout * 1000);\n }\n return hc;\n}\n","/**\n * Personality fork-context (ADR D168 + EC-A snapshot semantic).\n *\n * Uses Node's `AsyncLocalStorage` so a fork's execution chain can know\n * that it is running inside a fork AND can see the slug that was active\n * on the parent **at fork-construction time**.\n *\n * **EC-A:** The slug stored here is captured ONCE at the wrap site\n * (`localAgentFork`) — passing `parentStore.active(parentAgentId)`\n * returns a primitive `string | undefined`, which is then frozen\n * inside the ALS context object. Subsequent `usePersonality` calls on\n * the parent do NOT mutate the fork's view, because the fork reads from\n * its own ALS frame, not from the parent's store.\n *\n * @internal\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { warnOnce } from \"../runtime/hooks/hooks-source.js\";\n\n/**\n * Snapshot data carried into a fork's async context.\n *\n * @internal\n */\nexport interface PersonalityForkContext {\n /** Parent's active personality slug at fork-construction time. */\n readonly slug: string | undefined;\n /** Always `true` inside this scope (used by guards). */\n readonly isFork: true;\n}\n\nconst storage = new AsyncLocalStorage<PersonalityForkContext>();\n\n/**\n * Run `fn` with `ctx` bound as the active fork context. Nested calls\n * shadow the outer context (EC-22).\n *\n * @internal\n */\nexport function withPersonalityContext<T>(\n ctx: PersonalityForkContext,\n fn: () => Promise<T>,\n): Promise<T> {\n return storage.run(ctx, fn);\n}\n\n/**\n * Return the active fork context, or `undefined` when called outside a\n * fork scope.\n *\n * @internal\n */\nexport function currentPersonalityContext(): PersonalityForkContext | undefined {\n return storage.getStore();\n}\n\n/**\n * Emit one warning per agentId stating that personality switches inside\n * a fork are no-ops. The fork inherits the parent snapshot — runtime\n * mutation is intentionally rejected to keep fork voice deterministic.\n *\n * @internal\n */\nexport function warnPersonalitySwitchInsideFork(agentId: string): void {\n warnOnce(\n `personality-switch-in-fork-${agentId}`,\n `[theokit-sdk] usePersonality is a no-op inside a fork (D168). Subagents inherit the parent's active personality at fork-construction time.`,\n );\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkA44COQJJ_cjs = require('./chunk-A44COQJJ.cjs');
3
+ var chunkMHCKWQR3_cjs = require('./chunk-MHCKWQR3.cjs');
4
+ var chunkLTCOPATU_cjs = require('./chunk-LTCOPATU.cjs');
4
5
  var async_hooks = require('async_hooks');
5
6
  var fs = require('fs');
6
7
  var promises = require('fs/promises');
@@ -16,7 +17,7 @@ var warned = /* @__PURE__ */ new Set();
16
17
  function warnOnce(key, message) {
17
18
  if (warned.has(key)) return;
18
19
  warned.add(key);
19
- process.stderr.write(`${message}
20
+ chunkLTCOPATU_cjs.diag(`${message}
20
21
  `);
21
22
  }
22
23
  async function loadHookConfig(cwd) {
@@ -34,7 +35,7 @@ async function loadHookConfig(cwd) {
34
35
  try {
35
36
  raw = await promises.readFile(jsonPath, "utf8");
36
37
  } catch (cause) {
37
- throw new chunkA44COQJJ_cjs.ConfigurationError(`Failed to read hooks config: ${jsonPath}`, {
38
+ throw new chunkMHCKWQR3_cjs.ConfigurationError(`Failed to read hooks config: ${jsonPath}`, {
38
39
  code: "hooks_read_error",
39
40
  cause
40
41
  });
@@ -43,7 +44,7 @@ async function loadHookConfig(cwd) {
43
44
  try {
44
45
  parsed = JSON.parse(raw);
45
46
  } catch (cause) {
46
- throw new chunkA44COQJJ_cjs.ConfigurationError(`Invalid JSON in hooks config: ${jsonPath}`, {
47
+ throw new chunkMHCKWQR3_cjs.ConfigurationError(`Invalid JSON in hooks config: ${jsonPath}`, {
47
48
  code: "hooks_json_invalid",
48
49
  cause
49
50
  });
@@ -52,7 +53,7 @@ async function loadHookConfig(cwd) {
52
53
  }
53
54
  function asRecord(value, path, where) {
54
55
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
55
- throw new chunkA44COQJJ_cjs.ConfigurationError(`hooks: expected an object at ${where} in ${path}`, {
56
+ throw new chunkMHCKWQR3_cjs.ConfigurationError(`hooks: expected an object at ${where} in ${path}`, {
56
57
  code: "hooks_json_invalid"
57
58
  });
58
59
  }
@@ -60,7 +61,7 @@ function asRecord(value, path, where) {
60
61
  }
61
62
  function asArray(value, path, where) {
62
63
  if (!Array.isArray(value)) {
63
- throw new chunkA44COQJJ_cjs.ConfigurationError(`hooks: expected an array at ${where} in ${path}`, {
64
+ throw new chunkMHCKWQR3_cjs.ConfigurationError(`hooks: expected an array at ${where} in ${path}`, {
64
65
  code: "hooks_json_invalid"
65
66
  });
66
67
  }
@@ -98,13 +99,13 @@ function flattenEventGroups(groups, path, ccEvent) {
98
99
  function parseClaudeCodeCommand(raw, matcher, path, ccEvent) {
99
100
  const cmd = asRecord(raw, path, `hooks.${ccEvent}[].hooks[]`);
100
101
  if (cmd.type !== "command") {
101
- throw new chunkA44COQJJ_cjs.ConfigurationError(
102
+ throw new chunkMHCKWQR3_cjs.ConfigurationError(
102
103
  `hooks: only { "type": "command" } is supported (got ${JSON.stringify(cmd.type)}) in ${path}`,
103
104
  { code: "hooks_unsupported_type" }
104
105
  );
105
106
  }
106
107
  if (typeof cmd.command !== "string" || cmd.command.length === 0) {
107
- throw new chunkA44COQJJ_cjs.ConfigurationError(`hooks: "command" must be a non-empty string in ${path}`, {
108
+ throw new chunkMHCKWQR3_cjs.ConfigurationError(`hooks: "command" must be a non-empty string in ${path}`, {
108
109
  code: "hooks_invalid_command"
109
110
  });
110
111
  }
@@ -136,5 +137,5 @@ exports.loadHookConfig = loadHookConfig;
136
137
  exports.warnOnce = warnOnce;
137
138
  exports.warnPersonalitySwitchInsideFork = warnPersonalitySwitchInsideFork;
138
139
  exports.withPersonalityContext = withPersonalityContext;
139
- //# sourceMappingURL=chunk-N24XBYNX.cjs.map
140
- //# sourceMappingURL=chunk-N24XBYNX.cjs.map
140
+ //# sourceMappingURL=chunk-FAY3QDGC.cjs.map
141
+ //# sourceMappingURL=chunk-FAY3QDGC.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/runtime/hooks/hooks-source.ts","../src/internal/personality/context.ts"],"names":["diag","join","existsSync","readFile","ConfigurationError","AsyncLocalStorage"],"mappings":"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","file":"chunk-FAY3QDGC.cjs","sourcesContent":["/**\n * Single source of truth for loading the hooks config (ADR 0016 — reverses\n * D74/D77 for hooks: JSON is canonical again, in the Claude Code shape).\n *\n * `.theokit/hooks.json` (Claude-Code-shaped JSON) is the only supported form.\n * A stray legacy `.theokit/hooks/*.md` dir (no hooks.json) is NOT loaded — it\n * warns to migrate and yields no hooks. Absent both → empty config.\n *\n * Consumed by `hooks-executor.ts` (runtime dispatch).\n *\n * Config shape (identical to Claude Code's `settings.json` hooks):\n * { \"hooks\": { \"PreToolUse\": [ { \"matcher\": \"shell\",\n * \"hooks\": [ { \"type\": \"command\", \"command\": \"…\", \"timeout\": 30 } ] } ] } }\n *\n * @internal\n */\n\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport { ConfigurationError } from \"../../../errors.js\";\nimport { diag } from \"../../diagnostics.js\";\n\n/** The five lifecycle events the SDK runtime actually fires. */\nexport type HookEvent = \"preRun\" | \"postRun\" | \"preToolUse\" | \"postToolUse\" | \"stop\";\n\n/**\n * Claude Code event name → the SDK firing event. Only events the runtime\n * genuinely emits are mapped; a Claude Code event with no SDK firing point\n * (SessionStart / SubagentStop / PreCompact / Notification / SessionEnd) is\n * skipped with a warn rather than silently accepted (it would never run).\n */\nconst CLAUDE_CODE_EVENT_MAP: Readonly<Record<string, HookEvent>> = {\n PreToolUse: \"preToolUse\",\n PostToolUse: \"postToolUse\",\n UserPromptSubmit: \"preRun\",\n Stop: \"stop\",\n};\n\nexport interface HookCommand {\n command: string;\n matcher?: string;\n timeoutMs?: number;\n}\n\nexport interface HookConfig {\n hooks?: Partial<Record<HookEvent, HookCommand[]>>;\n}\n\nconst warned = new Set<string>();\n\n/**\n * Emit a stderr warn once per process per unique key. Helps surface the\n * deprecation path without spamming when the loader is called many times\n * during a session (cron + send + skills all hit this).\n *\n * Note: spawned workers (cron, subagent) start fresh processes — warn\n * re-emits there, by design (1 per process boot, not per call).\n *\n * @internal\n */\nexport function warnOnce(key: string, message: string): void {\n if (warned.has(key)) return;\n warned.add(key);\n diag(`${message}\\n`);\n}\n\n/** Reset for tests; not exported via barrel. @internal */\nexport function _resetWarnOnceForTests(): void {\n warned.clear();\n}\n\n/**\n * Load hooks from `.theokit/hooks.json` (Claude-Code-shaped — the only supported\n * form). A stray legacy `.theokit/hooks/*.md` markdown dir (no `hooks.json`) is\n * NOT loaded — it emits a one-time migration warn and yields no hooks.\n *\n * @internal\n */\nexport async function loadHookConfig(cwd: string): Promise<HookConfig> {\n const jsonPath = join(cwd, \".theokit\", \"hooks.json\");\n\n if (!existsSync(jsonPath)) {\n if (existsSync(join(cwd, \".theokit\", \"hooks\"))) {\n warnOnce(\n \"hooks-md-unsupported\",\n \"[theokit-sdk] .theokit/hooks/*.md hooks are no longer supported (ADR 0016) — migrate to a Claude-Code-shaped .theokit/hooks.json\",\n );\n }\n return {};\n }\n\n let raw: string;\n try {\n raw = await readFile(jsonPath, \"utf8\");\n } catch (cause) {\n throw new ConfigurationError(`Failed to read hooks config: ${jsonPath}`, {\n code: \"hooks_read_error\",\n cause,\n });\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (cause) {\n throw new ConfigurationError(`Invalid JSON in hooks config: ${jsonPath}`, {\n code: \"hooks_json_invalid\",\n cause,\n });\n }\n return parseClaudeCodeConfig(parsed, jsonPath);\n}\n\n/** Narrow an unknown to a record, or throw a typed config error. */\nfunction asRecord(value: unknown, path: string, where: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new ConfigurationError(`hooks: expected an object at ${where} in ${path}`, {\n code: \"hooks_json_invalid\",\n });\n }\n return value as Record<string, unknown>;\n}\n\n/** Narrow an unknown to an array, or throw a typed config error. */\nfunction asArray(value: unknown, path: string, where: string): unknown[] {\n if (!Array.isArray(value)) {\n throw new ConfigurationError(`hooks: expected an array at ${where} in ${path}`, {\n code: \"hooks_json_invalid\",\n });\n }\n return value;\n}\n\n/**\n * Parse Claude Code's nested hooks config into the SDK's flat internal shape:\n * `{ hooks: { PreToolUse: [{ matcher?, hooks: [{ type:\"command\", command, timeout? }] }] } }`\n * → `{ hooks: { preToolUse: [{ command, matcher?, timeoutMs? }] } }`. Each group's\n * `matcher` applies to every command it wraps; `timeout` (seconds) → `timeoutMs`.\n */\nfunction parseClaudeCodeConfig(raw: unknown, path: string): HookConfig {\n const root = asRecord(raw, path, \"the root\");\n if (root.hooks === undefined) return {};\n const hooksRec = asRecord(root.hooks, path, `\"hooks\"`);\n const grouped: Partial<Record<HookEvent, HookCommand[]>> = {};\n\n for (const [ccEvent, groups] of Object.entries(hooksRec)) {\n const event = CLAUDE_CODE_EVENT_MAP[ccEvent];\n if (event === undefined) {\n warnOnce(\n `hooks-event-${ccEvent}`,\n `[theokit-sdk] hooks: event \"${ccEvent}\" is not fired by the SDK runtime (supported: ${Object.keys(CLAUDE_CODE_EVENT_MAP).join(\", \")}) — skipping`,\n );\n continue;\n }\n grouped[event] = [...(grouped[event] ?? []), ...flattenEventGroups(groups, path, ccEvent)];\n }\n return { hooks: grouped };\n}\n\n/** Flatten one Claude Code event's matcher-groups into internal HookCommands. */\nfunction flattenEventGroups(groups: unknown, path: string, ccEvent: string): HookCommand[] {\n const commands: HookCommand[] = [];\n for (const rawGroup of asArray(groups, path, `hooks.${ccEvent}`)) {\n const group = asRecord(rawGroup, path, `hooks.${ccEvent}[]`);\n const matcher = group.matcher === undefined ? undefined : String(group.matcher);\n for (const rawCmd of asArray(group.hooks, path, `hooks.${ccEvent}[].hooks`)) {\n commands.push(parseClaudeCodeCommand(rawCmd, matcher, path, ccEvent));\n }\n }\n return commands;\n}\n\n/** One `{ type:\"command\", command, timeout? }` entry → an internal HookCommand. */\nfunction parseClaudeCodeCommand(\n raw: unknown,\n matcher: string | undefined,\n path: string,\n ccEvent: string,\n): HookCommand {\n const cmd = asRecord(raw, path, `hooks.${ccEvent}[].hooks[]`);\n if (cmd.type !== \"command\") {\n throw new ConfigurationError(\n `hooks: only { \"type\": \"command\" } is supported (got ${JSON.stringify(cmd.type)}) in ${path}`,\n { code: \"hooks_unsupported_type\" },\n );\n }\n if (typeof cmd.command !== \"string\" || cmd.command.length === 0) {\n throw new ConfigurationError(`hooks: \"command\" must be a non-empty string in ${path}`, {\n code: \"hooks_invalid_command\",\n });\n }\n const hc: HookCommand = { command: cmd.command };\n if (matcher !== undefined) hc.matcher = matcher;\n if (typeof cmd.timeout === \"number\" && cmd.timeout > 0) {\n hc.timeoutMs = Math.round(cmd.timeout * 1000);\n }\n return hc;\n}\n","/**\n * Personality fork-context (ADR D168 + EC-A snapshot semantic).\n *\n * Uses Node's `AsyncLocalStorage` so a fork's execution chain can know\n * that it is running inside a fork AND can see the slug that was active\n * on the parent **at fork-construction time**.\n *\n * **EC-A:** The slug stored here is captured ONCE at the wrap site\n * (`localAgentFork`) — passing `parentStore.active(parentAgentId)`\n * returns a primitive `string | undefined`, which is then frozen\n * inside the ALS context object. Subsequent `usePersonality` calls on\n * the parent do NOT mutate the fork's view, because the fork reads from\n * its own ALS frame, not from the parent's store.\n *\n * @internal\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { warnOnce } from \"../runtime/hooks/hooks-source.js\";\n\n/**\n * Snapshot data carried into a fork's async context.\n *\n * @internal\n */\nexport interface PersonalityForkContext {\n /** Parent's active personality slug at fork-construction time. */\n readonly slug: string | undefined;\n /** Always `true` inside this scope (used by guards). */\n readonly isFork: true;\n}\n\nconst storage = new AsyncLocalStorage<PersonalityForkContext>();\n\n/**\n * Run `fn` with `ctx` bound as the active fork context. Nested calls\n * shadow the outer context (EC-22).\n *\n * @internal\n */\nexport function withPersonalityContext<T>(\n ctx: PersonalityForkContext,\n fn: () => Promise<T>,\n): Promise<T> {\n return storage.run(ctx, fn);\n}\n\n/**\n * Return the active fork context, or `undefined` when called outside a\n * fork scope.\n *\n * @internal\n */\nexport function currentPersonalityContext(): PersonalityForkContext | undefined {\n return storage.getStore();\n}\n\n/**\n * Emit one warning per agentId stating that personality switches inside\n * a fork are no-ops. The fork inherits the parent snapshot — runtime\n * mutation is intentionally rejected to keep fork voice deterministic.\n *\n * @internal\n */\nexport function warnPersonalitySwitchInsideFork(agentId: string): void {\n warnOnce(\n `personality-switch-in-fork-${agentId}`,\n `[theokit-sdk] usePersonality is a no-op inside a fork (D168). Subagents inherit the parent's active personality at fork-construction time.`,\n );\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkA44COQJJ_cjs = require('./chunk-A44COQJJ.cjs');
3
+ var chunkMHCKWQR3_cjs = require('./chunk-MHCKWQR3.cjs');
4
+ var chunkLTCOPATU_cjs = require('./chunk-LTCOPATU.cjs');
4
5
  var promises = require('fs/promises');
5
6
  var path = require('path');
6
7
 
@@ -68,7 +69,7 @@ function applyWalWithFallback(db, label) {
68
69
  function logFallback(label, reason) {
69
70
  if (warnedLabels.has(label)) return;
70
71
  warnedLabels.add(label);
71
- process.stderr.write(
72
+ chunkLTCOPATU_cjs.diag(
72
73
  `[theokit-sdk] ${label}: WAL unavailable (${reason}); using DELETE journal mode. This is normal on NFS/SMB/FUSE; expect slightly slower concurrent access.
73
74
  `
74
75
  );
@@ -140,7 +141,7 @@ async function loadDriver(filePath) {
140
141
  } catch (nodeSqliteCause) {
141
142
  const b = betterSqliteCause instanceof Error ? betterSqliteCause.message : String(betterSqliteCause);
142
143
  const n = nodeSqliteCause instanceof Error ? nodeSqliteCause.message : String(nodeSqliteCause);
143
- throw new chunkA44COQJJ_cjs.ConfigurationError(
144
+ throw new chunkMHCKWQR3_cjs.ConfigurationError(
144
145
  `Failed to load SQLite driver. Install \`better-sqlite3\` or run on Node 22.5+ for built-in \`node:sqlite\`. better-sqlite3: ${b}; node:sqlite: ${n}`,
145
146
  { code: "sqlite_driver_unavailable", cause: nodeSqliteCause }
146
147
  );
@@ -156,7 +157,7 @@ async function renameAside(filePath, label) {
156
157
  await promises.rename(filePath, asidePath).catch(() => void 0);
157
158
  await promises.rename(`${filePath}-wal`, `${asidePath}-wal`).catch(() => void 0);
158
159
  await promises.rename(`${filePath}-shm`, `${asidePath}-shm`).catch(() => void 0);
159
- process.stderr.write(
160
+ chunkLTCOPATU_cjs.diag(
160
161
  `[theokit-sdk] ${label} database corrupt; renamed aside to ${asidePath} and rebuilt schema
161
162
  `
162
163
  );
@@ -167,5 +168,5 @@ exports.containsCjk = containsCjk;
167
168
  exports.isCorruptionError = isCorruptionError;
168
169
  exports.openSqliteResilient = openSqliteResilient;
169
170
  exports.sanitizeFts5Query = sanitizeFts5Query;
170
- //# sourceMappingURL=chunk-JD74LN7R.cjs.map
171
- //# sourceMappingURL=chunk-JD74LN7R.cjs.map
171
+ //# sourceMappingURL=chunk-FK4EJD2I.cjs.map
172
+ //# sourceMappingURL=chunk-FK4EJD2I.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/persistence/fts5-sanitize.ts","../src/internal/persistence/sqlite-wal.ts","../src/internal/persistence/sqlite-open.ts"],"names":["diag","mkdir","dirname","ConfigurationError","rename"],"mappings":"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","file":"chunk-FK4EJD2I.cjs","sourcesContent":["/**\n * FTS5 query sanitization + CJK detection (ADR D64).\n *\n * Port of Hermes' 6-step sanitizer (`hermes_state.py:1797-1847`). Prevents\n * crashes on user inputs with hyphens, dots, underscores, and unmatched\n * specials. Auto-quotes identifier-shaped tokens so `error-code` finds\n * literal `error-code` instead of `error AND code`.\n *\n * CJK detection returns true for inputs containing characters in the main\n * CJK Unicode ranges (Chinese, Japanese, Korean). CJK trigram routing is\n * deferred to v1.4 — callers receiving `containsCjk === true` should\n * short-circuit to an empty result or LIKE fallback for v1.3.\n *\n * @internal\n */\n\n// Control-char sentinels for the phrase-preservation placeholder. U+0001\n// and U+0002 are essentially never present in real user queries, and\n// crucially do NOT form word boundaries / `\\w` characters, so Step 5's\n// auto-quote regex (`\\b\\w+[-._]\\w[\\w\\-._]*\\b`) cannot match them.\n// Choosing `__PHRASE_N__` instead would re-trigger Step 5 on the second\n// sanitize pass and break idempotence.\nconst PHRASE_OPEN = \"\u0001\";\nconst PHRASE_CLOSE = \"\u0002\";\n\n/**\n * Six-step FTS5 query sanitizer. Returns a query string safe for passing\n * to `WHERE <fts5_table> MATCH ?` as a parameter.\n *\n * Returns empty string when the input contains only specials (caller MUST\n * short-circuit to avoid runtime SQL error — EC-3).\n *\n * @internal\n */\nexport function sanitizeFts5Query(query: string): string {\n if (query.length === 0) return query;\n\n // Step 1: preserve \"quoted phrases\" via control-char placeholders.\n const phrases: string[] = [];\n let text = query.replace(/\"[^\"]+\"/g, (match) => {\n phrases.push(match);\n return `${PHRASE_OPEN}${phrases.length - 1}${PHRASE_CLOSE}`;\n });\n\n // Step 2: strip unmatched specials (brackets, braces, parens, double quotes, caret).\n text = text.replace(/[[\\]{}()\"^]/g, \" \");\n\n // Step 3: collapse repeated asterisks (FTS5 prefix operator is single `*`).\n text = text.replace(/\\*+/g, \"*\");\n\n // Step 4: strip dangling boolean operators (AND/OR/NOT) at start/end.\n text = text.replace(/^\\s*(AND|OR|NOT)\\s+/i, \"\");\n text = text.replace(/\\s+(AND|OR|NOT)\\s*$/i, \"\");\n\n // Step 5: auto-quote identifier-shaped tokens that contain `-`, `.`, or `_`.\n // FTS5 tokenizer would otherwise split them as boolean conjunctions.\n text = text.replace(/\\b\\w+[-._]\\w[\\w\\-._]*\\b/g, (match) => `\"${match}\"`);\n\n // Step 6: restore preserved phrases.\n for (let i = 0; i < phrases.length; i += 1) {\n text = text.replace(`${PHRASE_OPEN}${i}${PHRASE_CLOSE}`, phrases[i] ?? \"\");\n }\n\n return text.trim();\n}\n\n// CJK code-point ranges. Coverage matches Hermes' coarse detection for v1.3;\n// fine-grained trigram routing comes in v1.4.\nconst CJK_RANGES: ReadonlyArray<readonly [number, number]> = [\n [0x3000, 0x303f], // CJK Symbols and Punctuation\n [0x3040, 0x309f], // Hiragana\n [0x30a0, 0x30ff], // Katakana\n [0x3400, 0x4dbf], // CJK Unified Ideographs Extension A\n [0x4e00, 0x9fff], // CJK Unified Ideographs\n [0xac00, 0xd7af], // Hangul Syllables\n];\n\n/**\n * Returns true if `text` contains at least one character in the main CJK\n * Unicode ranges.\n *\n * @internal\n */\nexport function containsCjk(text: string): boolean {\n for (const char of text) {\n const cp = char.codePointAt(0);\n if (cp === undefined) continue;\n for (const [lo, hi] of CJK_RANGES) {\n if (cp >= lo && cp <= hi) return true;\n }\n }\n return false;\n}\n","import { diag } from \"../diagnostics.js\";\n\n/**\n * SQLite WAL mode helper with NFS/SMB/FUSE fallback to DELETE (ADR D63).\n *\n * WAL is faster (concurrent readers + one writer) but unsupported on some\n * network/FUSE filesystems. Try WAL; if the pragma returns something else\n * or throws, fall back to DELETE journal mode. Warn one time per label.\n *\n * @internal\n */\n\ninterface PragmaCapable {\n pragma: (statement: string, options?: { simple?: boolean }) => unknown;\n}\n\n/**\n * Result of `applyWalWithFallback`.\n *\n * @internal\n */\nexport interface WalApplyResult {\n /** Final journal_mode actually in effect. */\n mode: \"wal\" | \"delete\";\n /** True if we wanted WAL but the filesystem refused. */\n fellBack: boolean;\n}\n\nconst warnedLabels = new Set<string>();\n\n/**\n * Apply WAL mode with DELETE fallback. Idempotent — safe to call multiple\n * times on the same connection.\n *\n * @param db any `pragma()`-capable SQLite handle (e.g., `better-sqlite3`)\n * @param label short identifier used in the warning (e.g., \"memory-index\")\n *\n * @internal\n */\nexport function applyWalWithFallback(db: PragmaCapable, label: string): WalApplyResult {\n try {\n const result = db.pragma(\"journal_mode = WAL\", { simple: true });\n if (typeof result === \"string\" && result.toLowerCase() === \"wal\") {\n return { mode: \"wal\", fellBack: false };\n }\n logFallback(label, `got \"${String(result)}\" instead of \"wal\"`);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n logFallback(label, msg);\n }\n\n db.pragma(\"journal_mode = DELETE\");\n return { mode: \"delete\", fellBack: true };\n}\n\nfunction logFallback(label: string, reason: string): void {\n if (warnedLabels.has(label)) return;\n warnedLabels.add(label);\n diag(\n `[theokit-sdk] ${label}: WAL unavailable (${reason}); using DELETE journal mode. ` +\n \"This is normal on NFS/SMB/FUSE; expect slightly slower concurrent access.\\n\",\n );\n}\n\n/**\n * Test helper — clears the warn-once registry.\n *\n * @internal\n */\nexport function _resetWalWarnings(): void {\n warnedLabels.clear();\n}\n","/**\n * Resilient SQLite open (plan m0-foundation-expose-primitives, M0-5).\n *\n * Generalizes the driver-load + WAL-apply + corruption-recovery logic that was\n * duplicated (byte-identical) across `sdk/internal/memory/index-db.ts` and\n * `sdk-memory/internal/index/index-db.ts`. Schema-agnostic: the caller applies\n * its own PRAGMA/SCHEMA via the `onOpen` callback.\n *\n * Corruption recovery (EC-7): when opening fails with a \"malformed\" / \"not a\n * database\" / \"encrypted\" error and `recoverCorrupt` is not false, the file is\n * renamed aside to `<path>.corrupt-<ts>` (plus its WAL/SHM siblings) and a fresh\n * DB is opened. The corrupt file is renamed, NOT backed up — the timestamped\n * `.corrupt-*` file is kept for manual recovery.\n *\n * @internal — public via `@theokit/sdk/internal/persistence` (semver-exempt)\n */\n\nimport { mkdir, rename } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nimport { ConfigurationError } from \"../../errors.js\";\nimport { diag } from \"../diagnostics.js\";\nimport { applyWalWithFallback } from \"./sqlite-wal.js\";\n\n/** Minimal SQLite handle surface every driver (`better-sqlite3`) exposes. */\nexport interface ResilientSqliteDb {\n /** SQLite `pragma()` access (used by `applyWalWithFallback`). */\n pragma(statement: string, options?: { simple?: boolean }): unknown;\n exec(sql: string): void;\n close(): void;\n}\n\nexport interface OpenSqliteResilientOptions<T extends ResilientSqliteDb> {\n /** Absolute path to the SQLite file. Parent directories are created. */\n filePath: string;\n /**\n * Called after the driver is open and WAL is applied, before the handle is\n * returned. Apply PRAGMA/SCHEMA statements here. Errors propagate.\n */\n onOpen?: (db: T) => void | Promise<void>;\n /** Label used in the WAL-fallback warning and corruption-recovery log. Default \"sqlite\". */\n label?: string;\n /** When true (default) a corruption error renames the file aside and rebuilds. */\n recoverCorrupt?: boolean;\n}\n\n/**\n * Open a SQLite file with WAL (+ DELETE fallback) and corruption recovery.\n *\n * @typeParam T - the concrete DB handle type the driver returns (defaults to the\n * minimal {@link ResilientSqliteDb} surface)\n */\nexport async function openSqliteResilient<T extends ResilientSqliteDb = ResilientSqliteDb>(\n options: OpenSqliteResilientOptions<T>,\n): Promise<T> {\n await mkdir(dirname(options.filePath), { recursive: true });\n try {\n return await openConcrete(options);\n } catch (cause) {\n if (options.recoverCorrupt !== false && isCorruptionError(cause)) {\n await renameAside(options.filePath, options.label ?? \"sqlite\");\n return await openConcrete(options);\n }\n throw cause;\n }\n}\n\nasync function openConcrete<T extends ResilientSqliteDb>(\n options: OpenSqliteResilientOptions<T>,\n): Promise<T> {\n const db = await loadDriver<T>(options.filePath);\n // Apply WAL with NFS/SMB/FUSE fallback BEFORE schema so the journal mode is\n // set for the whole session.\n applyWalWithFallback(db, options.label ?? \"sqlite\");\n await options.onOpen?.(db);\n return db;\n}\n\n/** Injectable driver loaders (tests simulate a consumer env without better-sqlite3). */\ninterface DriverLoaders {\n betterSqlite3?: () => Promise<unknown>;\n nodeSqlite?: () => Promise<unknown>;\n}\nlet driverLoaderOverrides: DriverLoaders | undefined;\n\n/** Test-only. @internal */\nexport function _setDriverLoadersForTests(overrides: DriverLoaders | undefined): void {\n driverLoaderOverrides = overrides;\n}\n\n/**\n * Adapt `node:sqlite`'s `DatabaseSync` to the better-sqlite3 surface this module's callers use\n * (`prepare/get/all/run`, `exec`, `close`, `pragma`, `loadExtension`). The error message below has\n * ALWAYS promised this fallback (\"or run on Node 22.5+ for built-in node:sqlite\") — before the\n * flicker-bug fix the promise was fabricated: only better-sqlite3 was ever tried, so every consumer\n * without the optional native dep lost memory tools AND got a per-turn stderr WARN.\n */\nfunction adaptNodeSqlite(db: {\n prepare(sql: string): unknown;\n exec(sql: string): void;\n close(): void;\n loadExtension?: (path: string) => void;\n}): ResilientSqliteDb {\n const pragma = (statement: string, options?: { simple?: boolean }): unknown => {\n const stmt = db.prepare(`PRAGMA ${statement}`) as {\n get(): Record<string, unknown> | undefined;\n };\n const row = stmt.get();\n if (options?.simple === true) {\n return row === undefined ? undefined : Object.values(row)[0];\n }\n return row === undefined ? [] : [row];\n };\n return new Proxy(db as unknown as ResilientSqliteDb, {\n get(target, prop, receiver) {\n if (prop === \"pragma\") return pragma;\n if (prop === \"loadExtension\" && typeof db.loadExtension !== \"function\") {\n return () => {\n throw new Error(\n \"SQLite extension loading is unavailable on the node:sqlite fallback — install better-sqlite3 for sqlite-vec\",\n );\n };\n }\n const value = Reflect.get(target, prop, receiver) as unknown;\n return typeof value === \"function\"\n ? (value as (...a: unknown[]) => unknown).bind(target)\n : value;\n },\n });\n}\n\n// Divida PRE-EXISTENTE, exposta quando o M75 consertou a config Biome que abortava antes\n// de varrer estes arquivos (raiz aninhada em refactor/). Nao e codigo novo e nao foi tocado\n// pelo M75; refatorar internals do SDK sem revisao trocaria um problema visivel por um diff\n// arriscado. Rastreado em usetheodev/theokit-sdk#151.\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: ver a razao logo acima\nasync function loadDriver<T extends ResilientSqliteDb>(filePath: string): Promise<T> {\n let betterSqliteCause: unknown;\n try {\n const mod = (await (driverLoaderOverrides?.betterSqlite3?.() ?? import(\"better-sqlite3\"))) as {\n default?: unknown;\n };\n const Ctor = mod.default ?? mod;\n if (typeof Ctor !== \"function\") {\n throw new Error(`better-sqlite3 export is not a constructor (got ${typeof Ctor})`);\n }\n return new (Ctor as new (path: string) => unknown)(filePath) as T;\n } catch (cause) {\n betterSqliteCause = cause;\n }\n // Fallback: the Node 22.5+ built-in driver (the path the error message documents).\n // `process.getBuiltinModule` (Node 22.3+) instead of `import(\"node:sqlite\")` — bundlers that\n // predate the sqlite builtin rewrite the import specifier to a bare \"sqlite\" package (proven in\n // the published dist: \"Cannot find package 'sqlite'\"), while getBuiltinModule is opaque to them.\n try {\n const mod = (await (driverLoaderOverrides?.nodeSqlite?.() ??\n Promise.resolve(\n (process as { getBuiltinModule?: (id: string) => unknown }).getBuiltinModule?.(\n \"node:sqlite\",\n ) ??\n (() => {\n throw new Error(\"node:sqlite built-in unavailable (Node < 22.3)\");\n })(),\n ))) as {\n DatabaseSync: new (\n path: string,\n ) => {\n prepare(sql: string): unknown;\n exec(sql: string): void;\n close(): void;\n };\n };\n return adaptNodeSqlite(new mod.DatabaseSync(filePath)) as T;\n } catch (nodeSqliteCause) {\n const b =\n betterSqliteCause instanceof Error ? betterSqliteCause.message : String(betterSqliteCause);\n const n = nodeSqliteCause instanceof Error ? nodeSqliteCause.message : String(nodeSqliteCause);\n throw new ConfigurationError(\n `Failed to load SQLite driver. Install \\`better-sqlite3\\` or run on Node 22.5+ for built-in \\`node:sqlite\\`. better-sqlite3: ${b}; node:sqlite: ${n}`,\n { code: \"sqlite_driver_unavailable\", cause: nodeSqliteCause },\n );\n }\n}\n\n/** True when an open error indicates an unreadable / corrupt database file. */\nexport function isCorruptionError(cause: unknown): boolean {\n if (!(cause instanceof Error)) return false;\n const msg = cause.message.toLowerCase();\n return (\n msg.includes(\"malformed\") ||\n msg.includes(\"not a database\") ||\n msg.includes(\"encrypted\") ||\n msg.includes(\"disk image is malformed\")\n );\n}\n\nasync function renameAside(filePath: string, label: string): Promise<void> {\n const asidePath = `${filePath}.corrupt-${Date.now()}`;\n await rename(filePath, asidePath).catch(() => undefined);\n await rename(`${filePath}-wal`, `${asidePath}-wal`).catch(() => undefined);\n await rename(`${filePath}-shm`, `${asidePath}-shm`).catch(() => undefined);\n diag(\n `[theokit-sdk] ${label} database corrupt; renamed aside to ${asidePath} and rebuilt schema\\n`,\n );\n}\n"]}
@@ -1,11 +1,11 @@
1
- import { currentCredentialPool, computeBackoffMs, sleepWithAbort, newPooledCredential, CredentialPool } from './chunk-6CLRANZA.js';
1
+ import { currentCredentialPool, computeBackoffMs, sleepWithAbort, newPooledCredential, CredentialPool } from './chunk-EXQV452X.js';
2
2
  import { invalidateSessionCache } from './chunk-EEZ7CFMM.js';
3
3
  import { tryJson, isPlainObject, sanitizeToolInput } from './chunk-U54XCYG3.js';
4
- import { reconstructMessages, SessionTranscript } from './chunk-Q56IYTBZ.js';
5
- import { estimateTokens } from './chunk-RKG6QFCJ.js';
6
- import { globalSingleton, registerProvider, registerBuiltins, getProviderProfile, inferModelDialect, inferRegionFromModelId, stripBedrockPrefix, resolveBedrockBaseUrl, resolveVertexBaseUrl, stripVertexPrefix } from './chunk-KAP4GJHO.js';
7
- import { NetworkError, AuthenticationError, RateLimitError, ConfigurationError, UnknownAgentError, CredentialPoolExhaustedError, isTransientError, TheokitAgentError } from './chunk-WLKFWQSJ.js';
8
- import { redactSecrets } from './chunk-JTFYYKDT.js';
4
+ import { reconstructMessages, SessionTranscript } from './chunk-XAEAMI5H.js';
5
+ import { estimateTokens } from './chunk-6VP3XGEK.js';
6
+ import { globalSingleton, registerProvider, registerBuiltins, getProviderProfile, inferModelDialect, inferRegionFromModelId, stripBedrockPrefix, resolveBedrockBaseUrl, resolveVertexBaseUrl, stripVertexPrefix } from './chunk-77WHPVXE.js';
7
+ import { NetworkError, AuthenticationError, RateLimitError, ConfigurationError, UnknownAgentError, IntegrationNotConnectedError, CredentialPoolExhaustedError, isTransientError, TheokitAgentError } from './chunk-CD73YHEH.js';
8
+ import { diag, redactSecrets } from './chunk-TAPQWDW2.js';
9
9
  import { existsSync, readFileSync } from 'fs';
10
10
  import { readdir } from 'fs/promises';
11
11
  import { homedir } from 'os';
@@ -35,19 +35,19 @@ function loadTrustedNames() {
35
35
  else discarded += 1;
36
36
  }
37
37
  if (discarded > 0) {
38
- process.stderr.write(
38
+ diag(
39
39
  `[theokit-sdk] WARN: ${path} contains ${discarded} non-string entr${discarded === 1 ? "y" : "ies"} \u2014 discarded (entries must be plugin-name strings)
40
40
  `
41
41
  );
42
42
  }
43
43
  } else {
44
- process.stderr.write(
44
+ diag(
45
45
  `[theokit-sdk] WARN: ${path} is not a JSON array \u2014 trusting NO provider plugins (fail-closed)
46
46
  `
47
47
  );
48
48
  }
49
49
  } catch {
50
- process.stderr.write(
50
+ diag(
51
51
  `[theokit-sdk] WARN: ${path} is not valid JSON \u2014 trusting NO provider plugins (fail-closed)
52
52
  `
53
53
  );
@@ -73,7 +73,7 @@ async function discoverProviderPlugins() {
73
73
  const trusted = loadTrustedNames();
74
74
  for (const entry of entries) {
75
75
  if (!trusted.has(entry)) {
76
- process.stderr.write(
76
+ diag(
77
77
  `[theokit-sdk] WARN: provider plugin "${entry}" is present but NOT trusted \u2014 skipped. To trust it, add "${entry}" to ${trustFilePath()} (JSON array of names) or THEOKIT_TRUSTED_PROVIDERS (comma-separated), then restart the process.
78
78
  `
79
79
  );
@@ -98,7 +98,7 @@ async function loadOne(dir, entryName) {
98
98
  return;
99
99
  } catch (err) {
100
100
  const msg = err instanceof Error ? err.message : String(err);
101
- process.stderr.write(`[theokit-sdk] failed to load provider plugin "${entryName}": ${msg}
101
+ diag(`[theokit-sdk] failed to load provider plugin "${entryName}": ${msg}
102
102
  `);
103
103
  return;
104
104
  }
@@ -926,7 +926,7 @@ function parseOverrideOrWarnOnce() {
926
926
  function warnInvalidJsonOnce(_raw) {
927
927
  if (warnedInvalidJson) return;
928
928
  warnedInvalidJson = true;
929
- process.stderr.write(
929
+ diag(
930
930
  `[theokit-sdk] ${ENV_OVERRIDE_KEY} is set but value is not valid JSON of shape \`{"status": number, "body": object | string}\`. Falling back to real LLM call. This warning is shown once per process.
931
931
  `
932
932
  );
@@ -1263,6 +1263,156 @@ function toOllamaTools(tools) {
1263
1263
  }
1264
1264
  }));
1265
1265
  }
1266
+ var FIXTURE_API_KEY_PREFIX = "theo_test_";
1267
+ function isFixtureApiKey(apiKey) {
1268
+ if (apiKey === void 0) return false;
1269
+ return apiKey.startsWith(FIXTURE_API_KEY_PREFIX);
1270
+ }
1271
+ function getConfiguredBaseUrl() {
1272
+ const value = process.env.THEOKIT_API_BASE_URL;
1273
+ if (value === void 0 || value.length === 0) return void 0;
1274
+ return value;
1275
+ }
1276
+ function shouldUseFixtureMode(apiKey) {
1277
+ if (getConfiguredBaseUrl() !== void 0) return false;
1278
+ return isFixtureApiKey(apiKey);
1279
+ }
1280
+ function shouldUseRealLocalRuntime(apiKey) {
1281
+ if (isFixtureApiKey(apiKey)) return false;
1282
+ if (apiKey === void 0 || apiKey.length === 0) return false;
1283
+ return typeof process.env.ANTHROPIC_API_KEY === "string" && process.env.ANTHROPIC_API_KEY.length > 0 || typeof process.env.OPENAI_API_KEY === "string" && process.env.OPENAI_API_KEY.length > 0 || typeof process.env.OPENROUTER_API_KEY === "string" && process.env.OPENROUTER_API_KEY.length > 0 || isAwsBedrockAuthAvailable() || isGcpVertexAuthAvailable() || isLocalNoAuthProviderAvailable();
1284
+ }
1285
+ function isAwsBedrockAuthAvailable() {
1286
+ if (typeof process.env.AWS_BEARER_TOKEN_BEDROCK === "string" && process.env.AWS_BEARER_TOKEN_BEDROCK.length > 0) {
1287
+ return true;
1288
+ }
1289
+ if (typeof process.env.AWS_ACCESS_KEY_ID === "string" && process.env.AWS_ACCESS_KEY_ID.length > 0) {
1290
+ return true;
1291
+ }
1292
+ if (typeof process.env.AWS_PROFILE === "string" && process.env.AWS_PROFILE.length > 0) {
1293
+ return true;
1294
+ }
1295
+ return awsCredentialsFileExists();
1296
+ }
1297
+ function awsCredentialsFileExists() {
1298
+ try {
1299
+ const home = process.env.HOME ?? process.env.USERPROFILE;
1300
+ if (home === void 0 || home.length === 0) return false;
1301
+ return existsSync(`${home}/.aws/credentials`) || existsSync(`${home}/.aws/config`);
1302
+ } catch {
1303
+ return false;
1304
+ }
1305
+ }
1306
+ function isGcpVertexAuthAvailable() {
1307
+ if (typeof process.env.GOOGLE_APPLICATION_CREDENTIALS === "string" && process.env.GOOGLE_APPLICATION_CREDENTIALS.length > 0) {
1308
+ return true;
1309
+ }
1310
+ if (typeof process.env.GOOGLE_CLOUD_PROJECT === "string" && process.env.GOOGLE_CLOUD_PROJECT.length > 0) {
1311
+ return true;
1312
+ }
1313
+ return false;
1314
+ }
1315
+ function isLocalNoAuthProviderAvailable() {
1316
+ return true;
1317
+ }
1318
+
1319
+ // src/internal/http.ts
1320
+ var DEFAULT_BASE_URL = "https://api.usetheo.dev";
1321
+ function resolveBaseUrl() {
1322
+ return getConfiguredBaseUrl() ?? DEFAULT_BASE_URL;
1323
+ }
1324
+ async function httpRequest(path, options) {
1325
+ const url = `${resolveBaseUrl()}${path}`;
1326
+ const fetchFn = options.fetchFn ?? globalThis.fetch;
1327
+ const headers = {
1328
+ "content-type": "application/json",
1329
+ authorization: `Bearer ${options.apiKey}`,
1330
+ ...options.headers ?? {}
1331
+ };
1332
+ const body = options.body !== void 0 ? JSON.stringify(options.body) : void 0;
1333
+ const response = await safeFetch(fetchFn, url, {
1334
+ method: options.method ?? "GET",
1335
+ headers,
1336
+ body
1337
+ });
1338
+ if (!response.ok) {
1339
+ const parsed = await safeParseJsonResponse(response);
1340
+ throw mapHttpStatusToError(response.status, parsed);
1341
+ }
1342
+ return await safeParseJsonResponse(response);
1343
+ }
1344
+ async function safeFetch(fetchFn, url, init) {
1345
+ try {
1346
+ return await fetchFn(url, init);
1347
+ } catch (cause) {
1348
+ throw new NetworkError("HTTP request failed", { code: "network_error", cause });
1349
+ }
1350
+ }
1351
+ async function safeParseJsonResponse(response) {
1352
+ try {
1353
+ return await response.json();
1354
+ } catch {
1355
+ return void 0;
1356
+ }
1357
+ }
1358
+ async function readErrorResponseBody(response) {
1359
+ const text = await response.text().catch(() => "");
1360
+ try {
1361
+ return JSON.parse(text);
1362
+ } catch {
1363
+ return text;
1364
+ }
1365
+ }
1366
+ function mapHttpStatusToError(status, body) {
1367
+ const envelope = extractErrorEnvelope(body);
1368
+ const message = envelope.message ?? `HTTP ${status}`;
1369
+ const errorOptions = {
1370
+ code: envelope.code,
1371
+ protoErrorCode: envelope.protoErrorCode,
1372
+ cause: body
1373
+ };
1374
+ if (envelope.code === "integration_not_connected") {
1375
+ return new IntegrationNotConnectedError(message, {
1376
+ provider: envelope.provider ?? "unknown",
1377
+ helpUrl: envelope.helpUrl ?? "",
1378
+ code: envelope.code,
1379
+ cause: body
1380
+ });
1381
+ }
1382
+ if (status === 401 || status === 403) {
1383
+ return new AuthenticationError(message, errorOptions);
1384
+ }
1385
+ if (status === 429) {
1386
+ return new RateLimitError(message, errorOptions);
1387
+ }
1388
+ if (status >= 400 && status < 500) {
1389
+ return new ConfigurationError(message, errorOptions);
1390
+ }
1391
+ if (status >= 500) {
1392
+ return new NetworkError(message, errorOptions);
1393
+ }
1394
+ return new UnknownAgentError(message, errorOptions);
1395
+ }
1396
+ function extractErrorEnvelope(body) {
1397
+ if (!body || typeof body !== "object") return {};
1398
+ const record = body;
1399
+ const inner = record.error;
1400
+ const source = inner && typeof inner === "object" ? inner : record;
1401
+ return readEnvelopeFields(source);
1402
+ }
1403
+ function readEnvelopeFields(record) {
1404
+ return {
1405
+ code: pickString(record, "code"),
1406
+ message: pickString(record, "message"),
1407
+ protoErrorCode: pickString(record, "protoErrorCode"),
1408
+ provider: pickString(record, "provider"),
1409
+ helpUrl: pickString(record, "helpUrl")
1410
+ };
1411
+ }
1412
+ function pickString(record, key) {
1413
+ const value = record[key];
1414
+ return typeof value === "string" ? value : void 0;
1415
+ }
1266
1416
 
1267
1417
  // src/internal/llm/hermes-tool-extract.ts
1268
1418
  var HERMES_BLOCK = /<function=\s*([^>\s]+)\s*>([\s\S]*?)<\/tool_call>/g;
@@ -1486,12 +1636,7 @@ var OpenAIClient = class {
1486
1636
  throw wrapTransportError(fetchErr, { providerId, endpoint: "/v1/chat/completions" });
1487
1637
  }
1488
1638
  if (!response.ok) {
1489
- const text = await response.text().catch(() => "");
1490
- let body = text;
1491
- try {
1492
- body = JSON.parse(text);
1493
- } catch {
1494
- }
1639
+ const body = await readErrorResponseBody(response);
1495
1640
  const ollamaMapped = mapOllamaHttpError({
1496
1641
  providerId,
1497
1642
  status: response.status,
@@ -1673,13 +1818,13 @@ var OpenAIStreamAccumulator = class {
1673
1818
  toolCalls.push(...recovered.toolCalls);
1674
1819
  text = recovered.residualText;
1675
1820
  stopReason = "tool_use";
1676
- process.stderr.write(
1821
+ diag(
1677
1822
  `[theokit-sdk] recovered ${recovered.toolCalls.length} leaked tool call(s) from assistant content (provider="${this.providerName}", names=${recovered.toolCalls.map((c) => c.name).join(",")})
1678
1823
  `
1679
1824
  );
1680
1825
  }
1681
1826
  if (recovered.droppedNames.length > 0) {
1682
- process.stderr.write(
1827
+ diag(
1683
1828
  `[theokit-sdk] dropped ${recovered.droppedNames.length} leaked block(s) whose name is not a tool in the request (provider="${this.providerName}", names=${recovered.droppedNames.join(",")})
1684
1829
  `
1685
1830
  );
@@ -1804,10 +1949,8 @@ async function tryFirstEvent(client, request, signal, logFallback = false) {
1804
1949
  if (cause instanceof NetworkError || cause instanceof RateLimitError || cause instanceof AuthenticationError) {
1805
1950
  if (logFallback) {
1806
1951
  const errCode = cause.metadata?.code ?? cause.code ?? "unknown";
1807
- process.stderr.write(
1808
- `[theokit-sdk] provider ${client.name} failed (${errCode}): falling back
1809
- `
1810
- );
1952
+ diag(`[theokit-sdk] provider ${client.name} failed (${errCode}): falling back
1953
+ `);
1811
1954
  }
1812
1955
  return { kind: "handshake_error", error: cause };
1813
1956
  }
@@ -1899,7 +2042,7 @@ var PoolAwareLlmClient = class {
1899
2042
  ...parseRetryAfterMs(attempt.error) !== void 0 ? { resetAtMs: parseRetryAfterMs(attempt.error) } : {}
1900
2043
  });
1901
2044
  } catch (persistErr) {
1902
- process.stderr.write(
2045
+ diag(
1903
2046
  `[theokit-sdk] credential-pool: persist failed during rotate; continuing in-memory: ${persistErr instanceof Error ? persistErr.message : String(persistErr)}
1904
2047
  `
1905
2048
  );
@@ -2322,7 +2465,7 @@ async function getAuthClientOrThrow() {
2322
2465
  const auth = new mod.GoogleAuth({ scopes: [SCOPE_CLOUD_PLATFORM] });
2323
2466
  return await auth.getClient();
2324
2467
  } catch (err) {
2325
- process.stderr.write(
2468
+ diag(
2326
2469
  `[theokit-sdk] Vertex ADC initialization failed: ${err instanceof Error ? err.message : String(err)}
2327
2470
  `
2328
2471
  );
@@ -2551,7 +2694,7 @@ var warnedNoAuthApiKeys = /* @__PURE__ */ new Set();
2551
2694
  function warnNoAuthApiKeysIgnoredOnce(provider) {
2552
2695
  if (warnedNoAuthApiKeys.has(provider)) return;
2553
2696
  warnedNoAuthApiKeys.add(provider);
2554
- process.stderr.write(
2697
+ diag(
2555
2698
  `[theokit-sdk] provider "${provider}" has authType: "none" \u2014 apiKeys ignored (no auth required for local runtime).
2556
2699
  `
2557
2700
  );
@@ -2580,7 +2723,7 @@ function warnUnknownProvidersInApiKeys(apiKeys) {
2580
2723
  const profile = getProviderProfile(name);
2581
2724
  if (profile === void 0) {
2582
2725
  warnedProviders.add(name);
2583
- process.stderr.write(
2726
+ diag(
2584
2727
  `[theokit-sdk] credential-pool: unknown provider "${name}" in apiKeys (no profile registered)
2585
2728
  `
2586
2729
  );
@@ -2939,14 +3082,12 @@ async function autoCompactIfNeeded(opts) {
2939
3082
  return true;
2940
3083
  } catch (cause) {
2941
3084
  const msg = cause instanceof Error ? cause.message : String(cause);
2942
- process.stderr.write(
2943
- `[theokit-sdk] auto-compaction failed (left transcript untouched): ${msg}
2944
- `
2945
- );
3085
+ diag(`[theokit-sdk] auto-compaction failed (left transcript untouched): ${msg}
3086
+ `);
2946
3087
  return false;
2947
3088
  }
2948
3089
  }
2949
3090
 
2950
- export { COMPACT_SUMMARY_MARKER, COMPACT_USER_MESSAGE_MAX_TOKENS, CircuitBreaker, autoCompactIfNeeded, buildDefaultSummarizer, compactSessionTranscript, detectPrimaryProvider, discoverProviderPlugins, inferProviderFromApiKey, isCompactSummary, mapOllamaHttpError, mapOllamaTransportError, mapOpenAICompatibleError, parseSseStream, relayStream, renderToolResultContentText, resolveProviderChain, resolveSummarizerRoute, shouldAutoCompact, tryFirstEvent };
2951
- //# sourceMappingURL=chunk-IX2LKBCD.js.map
2952
- //# sourceMappingURL=chunk-IX2LKBCD.js.map
3091
+ export { COMPACT_SUMMARY_MARKER, COMPACT_USER_MESSAGE_MAX_TOKENS, CircuitBreaker, autoCompactIfNeeded, buildDefaultSummarizer, compactSessionTranscript, detectPrimaryProvider, discoverProviderPlugins, getConfiguredBaseUrl, httpRequest, inferProviderFromApiKey, isCompactSummary, isFixtureApiKey, mapOllamaHttpError, mapOllamaTransportError, mapOpenAICompatibleError, parseSseStream, readErrorResponseBody, relayStream, renderToolResultContentText, resolveProviderChain, resolveSummarizerRoute, shouldAutoCompact, shouldUseFixtureMode, shouldUseRealLocalRuntime, tryFirstEvent };
3092
+ //# sourceMappingURL=chunk-GL7CFBVC.js.map
3093
+ //# sourceMappingURL=chunk-GL7CFBVC.js.map