@shareai-lab/kode 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +649 -25
  3. package/README.zh-CN.md +579 -0
  4. package/cli-acp.js +3 -17
  5. package/cli.js +5 -7
  6. package/dist/chunks/Doctor-M3J7GRTJ.js +12 -0
  7. package/dist/chunks/LogList-ISWZ6DDD.js +121 -0
  8. package/dist/chunks/LogList-ISWZ6DDD.js.map +7 -0
  9. package/dist/chunks/REPL-RQ6LO6S7.js +56 -0
  10. package/dist/chunks/ResumeConversation-6DMVBEGH.js +56 -0
  11. package/dist/chunks/agentLoader-FCRG3TFJ.js +31 -0
  12. package/dist/{agentsValidate-7LH4HTNR.js → chunks/agentsValidate-PEWMYN4Q.js} +97 -69
  13. package/dist/chunks/agentsValidate-PEWMYN4Q.js.map +7 -0
  14. package/dist/{ask-3NHFFUQG.js → chunks/ask-D7SOHJ6Z.js} +36 -44
  15. package/dist/chunks/ask-D7SOHJ6Z.js.map +7 -0
  16. package/dist/chunks/autoUpdater-CNESBOKO.js +19 -0
  17. package/dist/{chunk-AFFSCMYS.js → chunks/chunk-2JN5MY67.js} +12 -14
  18. package/dist/chunks/chunk-2JN5MY67.js.map +7 -0
  19. package/dist/chunks/chunk-2QONJ5MG.js +14 -0
  20. package/dist/chunks/chunk-2QONJ5MG.js.map +7 -0
  21. package/dist/chunks/chunk-2WEXPKHH.js +903 -0
  22. package/dist/chunks/chunk-2WEXPKHH.js.map +7 -0
  23. package/dist/{chunk-ARZSBOAO.js → chunks/chunk-3BYE3ME6.js} +717 -792
  24. package/dist/chunks/chunk-3BYE3ME6.js.map +7 -0
  25. package/dist/chunks/chunk-3JDNWX7W.js +1264 -0
  26. package/dist/chunks/chunk-3JDNWX7W.js.map +7 -0
  27. package/dist/chunks/chunk-3OEJVB5A.js +906 -0
  28. package/dist/chunks/chunk-3OEJVB5A.js.map +7 -0
  29. package/dist/chunks/chunk-3TNIOEBO.js +369 -0
  30. package/dist/chunks/chunk-3TNIOEBO.js.map +7 -0
  31. package/dist/chunks/chunk-4A46ZXMJ.js +67 -0
  32. package/dist/chunks/chunk-4A46ZXMJ.js.map +7 -0
  33. package/dist/{chunk-UHYRLID6.js → chunks/chunk-4ATBQOFO.js} +107 -55
  34. package/dist/chunks/chunk-4ATBQOFO.js.map +7 -0
  35. package/dist/chunks/chunk-4CRUCZR4.js +0 -0
  36. package/dist/{chunk-YC6LJCDE.js → chunks/chunk-4EO6SIQY.js} +32 -75
  37. package/dist/chunks/chunk-4EO6SIQY.js.map +7 -0
  38. package/dist/chunks/chunk-53M46S5I.js +64 -0
  39. package/dist/chunks/chunk-53M46S5I.js.map +7 -0
  40. package/dist/{chunk-JC6NCUG5.js → chunks/chunk-54KOYG5C.js} +0 -2
  41. package/dist/{chunk-EZXMVTDU.js → chunks/chunk-6BAS4WY6.js} +29 -45
  42. package/dist/chunks/chunk-6BAS4WY6.js.map +7 -0
  43. package/dist/{chunk-3IN27HA5.js → chunks/chunk-6KRRFSDN.js} +4 -6
  44. package/dist/chunks/chunk-6KRRFSDN.js.map +7 -0
  45. package/dist/chunks/chunk-6LJNZK4K.js +39 -0
  46. package/dist/chunks/chunk-6LJNZK4K.js.map +7 -0
  47. package/dist/chunks/chunk-6ZWEOSEI.js +666 -0
  48. package/dist/chunks/chunk-6ZWEOSEI.js.map +7 -0
  49. package/dist/chunks/chunk-77XDJMBP.js +3326 -0
  50. package/dist/chunks/chunk-77XDJMBP.js.map +7 -0
  51. package/dist/chunks/chunk-7RRW4NTB.js +6454 -0
  52. package/dist/chunks/chunk-7RRW4NTB.js.map +7 -0
  53. package/dist/chunks/chunk-7X3TW4JB.js +4520 -0
  54. package/dist/chunks/chunk-7X3TW4JB.js.map +7 -0
  55. package/dist/chunks/chunk-B3MW3YGY.js +1409 -0
  56. package/dist/chunks/chunk-B3MW3YGY.js.map +7 -0
  57. package/dist/chunks/chunk-BBJFHTBC.js +28 -0
  58. package/dist/chunks/chunk-BBJFHTBC.js.map +7 -0
  59. package/dist/chunks/chunk-BHDHXOXB.js +24 -0
  60. package/dist/chunks/chunk-BHDHXOXB.js.map +7 -0
  61. package/dist/{chunk-73WGVYLQ.js → chunks/chunk-BTA7SZ26.js} +152 -223
  62. package/dist/chunks/chunk-BTA7SZ26.js.map +7 -0
  63. package/dist/chunks/chunk-CDGRYGPZ.js +103 -0
  64. package/dist/chunks/chunk-CDGRYGPZ.js.map +7 -0
  65. package/dist/{chunk-S6HRABTA.js → chunks/chunk-CP6E5UG6.js} +1 -4
  66. package/dist/chunks/chunk-CP6E5UG6.js.map +7 -0
  67. package/dist/{chunk-QVLYOPO5.js → chunks/chunk-DQ4JHXMT.js} +462 -424
  68. package/dist/chunks/chunk-DQ4JHXMT.js.map +7 -0
  69. package/dist/chunks/chunk-DXD76CMV.js +208 -0
  70. package/dist/chunks/chunk-DXD76CMV.js.map +7 -0
  71. package/dist/chunks/chunk-GCQCAXJZ.js +0 -0
  72. package/dist/chunks/chunk-GELCZWMB.js +42 -0
  73. package/dist/chunks/chunk-GELCZWMB.js.map +7 -0
  74. package/dist/{chunk-K2CWOTI2.js → chunks/chunk-HJYOH4HC.js} +23 -18
  75. package/dist/chunks/chunk-HJYOH4HC.js.map +7 -0
  76. package/dist/chunks/chunk-HPYNW6TT.js +744 -0
  77. package/dist/chunks/chunk-HPYNW6TT.js.map +7 -0
  78. package/dist/{chunk-RZWOUA25.js → chunks/chunk-HRJ3ICQK.js} +59 -55
  79. package/dist/chunks/chunk-HRJ3ICQK.js.map +7 -0
  80. package/dist/{chunk-DZE5YA7L.js → chunks/chunk-IFCIADS3.js} +571 -573
  81. package/dist/chunks/chunk-IFCIADS3.js.map +7 -0
  82. package/dist/chunks/chunk-IN7XZ7BC.js +27 -0
  83. package/dist/chunks/chunk-IN7XZ7BC.js.map +7 -0
  84. package/dist/chunks/chunk-L7P4M4KW.js +193 -0
  85. package/dist/chunks/chunk-L7P4M4KW.js.map +7 -0
  86. package/dist/chunks/chunk-LB6TCPDI.js +0 -0
  87. package/dist/{chunk-3RUXVV4S.js → chunks/chunk-LOCXPQNJ.js} +1 -4
  88. package/dist/{chunk-3RUXVV4S.js.map → chunks/chunk-LOCXPQNJ.js.map} +2 -2
  89. package/dist/{chunk-7M2YN6TU.js → chunks/chunk-LOD5ZHCI.js} +213 -208
  90. package/dist/chunks/chunk-LOD5ZHCI.js.map +7 -0
  91. package/dist/{chunk-S3J2TLV6.js → chunks/chunk-M7P3QNRU.js} +1 -4
  92. package/dist/{chunk-S3J2TLV6.js.map → chunks/chunk-M7P3QNRU.js.map} +2 -2
  93. package/dist/chunks/chunk-PPHLQVL7.js +4234 -0
  94. package/dist/chunks/chunk-PPHLQVL7.js.map +7 -0
  95. package/dist/{chunk-ABLVTESJ.js → chunks/chunk-QAXE37B5.js} +1 -4
  96. package/dist/chunks/chunk-QAXE37B5.js.map +7 -0
  97. package/dist/chunks/chunk-QHQOBUF6.js +60 -0
  98. package/dist/chunks/chunk-QHQOBUF6.js.map +7 -0
  99. package/dist/{chunk-W7GRKO7Q.js → chunks/chunk-RPJXO7GG.js} +241 -214
  100. package/dist/chunks/chunk-RPJXO7GG.js.map +7 -0
  101. package/dist/{chunk-NPFOMITO.js → chunks/chunk-SWQV4KSY.js} +1 -4
  102. package/dist/{chunk-NPFOMITO.js.map → chunks/chunk-SWQV4KSY.js.map} +2 -2
  103. package/dist/chunks/chunk-SZLAPULP.js +28 -0
  104. package/dist/chunks/chunk-SZLAPULP.js.map +7 -0
  105. package/dist/{chunk-7U7L4NMD.js → chunks/chunk-T7RB5V5J.js} +23 -25
  106. package/dist/chunks/chunk-T7RB5V5J.js.map +7 -0
  107. package/dist/{chunk-HN4E4UUQ.js → chunks/chunk-TI2CTTMA.js} +25 -17
  108. package/dist/chunks/chunk-TI2CTTMA.js.map +7 -0
  109. package/dist/{chunk-ZVDRDPII.js → chunks/chunk-TNGVRTO5.js} +45 -20
  110. package/dist/chunks/chunk-TNGVRTO5.js.map +7 -0
  111. package/dist/chunks/chunk-TNWB3U5Y.js +2077 -0
  112. package/dist/chunks/chunk-TNWB3U5Y.js.map +7 -0
  113. package/dist/chunks/chunk-U2IHWPCU.js +12 -0
  114. package/dist/chunks/chunk-U2IHWPCU.js.map +7 -0
  115. package/dist/{chunk-KAA5BGMQ.js → chunks/chunk-UNOY3VJ2.js} +1 -4
  116. package/dist/{chunk-KAA5BGMQ.js.map → chunks/chunk-UNOY3VJ2.js.map} +2 -2
  117. package/dist/{chunk-MWRSY4X6.js → chunks/chunk-UVDJL6ZZ.js} +97 -58
  118. package/dist/chunks/chunk-UVDJL6ZZ.js.map +7 -0
  119. package/dist/chunks/chunk-VNCW4C2Z.js +13452 -0
  120. package/dist/chunks/chunk-VNCW4C2Z.js.map +7 -0
  121. package/dist/chunks/chunk-W5EGGA44.js +15 -0
  122. package/dist/chunks/chunk-W5EGGA44.js.map +7 -0
  123. package/dist/chunks/chunk-XR2W3MAM.js +1533 -0
  124. package/dist/chunks/chunk-XR2W3MAM.js.map +7 -0
  125. package/dist/{chunk-STSX7GIX.js → chunks/chunk-YIO5EBMQ.js} +423 -377
  126. package/dist/chunks/chunk-YIO5EBMQ.js.map +7 -0
  127. package/dist/chunks/chunk-ZBVLKZ5V.js +1062 -0
  128. package/dist/chunks/chunk-ZBVLKZ5V.js.map +7 -0
  129. package/dist/{chunk-E6YNABER.js → chunks/chunk-ZCLTZIVP.js} +1 -4
  130. package/dist/chunks/chunk-ZCLTZIVP.js.map +7 -0
  131. package/dist/chunks/client-SILZNM5N.js +42 -0
  132. package/dist/{config-RUSD6G5Y.js → chunks/config-25HRTPSP.js} +48 -10
  133. package/dist/chunks/cost-tracker-Z2UZT2J5.js +28 -0
  134. package/dist/{customCommands-TOIJFZAL.js → chunks/customCommands-TYMYZRG5.js} +11 -8
  135. package/dist/chunks/engine-MRVF6FK6.js +39 -0
  136. package/dist/{env-XGKBLU3D.js → chunks/env-TJ5NOBEB.js} +7 -5
  137. package/dist/{kodeAgentSessionId-X6XWQW7B.js → chunks/kodeAgentSessionId-VTNISJ2L.js} +2 -4
  138. package/dist/chunks/kodeAgentSessionLoad-YB2RKBGJ.js +15 -0
  139. package/dist/chunks/kodeAgentSessionResume-DZSIVKVA.js +13 -0
  140. package/dist/chunks/kodeAgentStreamJson-X5PLS2S6.js +11 -0
  141. package/dist/{kodeAgentStreamJsonSession-UGEZJJEB.js → chunks/kodeAgentStreamJsonSession-RDXM4XYF.js} +38 -24
  142. package/dist/chunks/kodeAgentStreamJsonSession-RDXM4XYF.js.map +7 -0
  143. package/dist/{chunk-4RTX4AG4.js → chunks/kodeAgentStructuredStdio-SVGDSB4P.js} +14 -9
  144. package/dist/chunks/kodeAgentStructuredStdio-SVGDSB4P.js.map +7 -0
  145. package/dist/{kodeHooks-QWM36A3D.js → chunks/kodeHooks-RVKYRJHG.js} +11 -9
  146. package/dist/{llm-ZUQC4WYM.js → chunks/llm-62N6T5ZT.js} +1734 -1526
  147. package/dist/chunks/llm-62N6T5ZT.js.map +7 -0
  148. package/dist/chunks/llmLazy-ZUSSE3ZA.js +13 -0
  149. package/dist/{mentionProcessor-EE3XFHCJ.js → chunks/mentionProcessor-RJW5UPJD.js} +46 -16
  150. package/dist/chunks/mentionProcessor-RJW5UPJD.js.map +7 -0
  151. package/dist/{messages-EOYQKPGM.js → chunks/messages-EEWWLPHN.js} +2 -6
  152. package/dist/chunks/model-5TIEKQPD.js +37 -0
  153. package/dist/{openai-RRCWW33N.js → chunks/openai-XXK3YZG4.js} +13 -10
  154. package/dist/{outputStyles-62Q3VH2J.js → chunks/outputStyles-FAJTXN2A.js} +6 -9
  155. package/dist/chunks/permissions-HO7INPWM.js +27 -0
  156. package/dist/{pluginRuntime-6ETCZ2LL.js → chunks/pluginRuntime-C7K5ULK2.js} +31 -48
  157. package/dist/chunks/pluginRuntime-C7K5ULK2.js.map +7 -0
  158. package/dist/chunks/pluginValidation-DAM7WRTC.js +20 -0
  159. package/dist/chunks/registry-XYJXMOA5.js +60 -0
  160. package/dist/chunks/responsesStreaming-JNGE2P3D.js +8 -0
  161. package/dist/chunks/runNonTextPrintMode-SVBLCZQX.js +577 -0
  162. package/dist/chunks/runNonTextPrintMode-SVBLCZQX.js.map +7 -0
  163. package/dist/chunks/server-REXXF5IK.js +46 -0
  164. package/dist/{skillMarketplace-3RXQBVOL.js → chunks/skillMarketplace-N4HVHNST.js} +8 -6
  165. package/dist/chunks/src-OROQIWP3.js +44 -0
  166. package/dist/chunks/src-QXLGGMUW.js +1647 -0
  167. package/dist/chunks/src-QXLGGMUW.js.map +7 -0
  168. package/dist/{cli-DOPVY2CW.js → chunks/src-SSDT6MVP.js} +2659 -3384
  169. package/dist/chunks/src-SSDT6MVP.js.map +7 -0
  170. package/dist/chunks/theme-YBJUIMWK.js +10 -0
  171. package/dist/{toolPermissionContext-65L65VEZ.js → chunks/toolPermissionContext-MOCTRR7N.js} +2 -4
  172. package/dist/chunks/toolPermissionSettings-EV2EJAXL.js +18 -0
  173. package/dist/chunks/toolPermissionSettings-EV2EJAXL.js.map +7 -0
  174. package/dist/chunks/uuid-6577SO6X.js +7 -0
  175. package/dist/chunks/uuid-6577SO6X.js.map +7 -0
  176. package/dist/chunks/webOnlyMode-ALXX7UQY.js +66 -0
  177. package/dist/chunks/webOnlyMode-ALXX7UQY.js.map +7 -0
  178. package/dist/entrypoints/cli.js +10 -0
  179. package/dist/entrypoints/cli.js.map +7 -0
  180. package/dist/entrypoints/daemon.js +10 -0
  181. package/dist/entrypoints/daemon.js.map +7 -0
  182. package/dist/entrypoints/mcp.js +71 -0
  183. package/dist/entrypoints/mcp.js.map +7 -0
  184. package/dist/index.js +6 -7
  185. package/dist/index.js.map +3 -3
  186. package/dist/sdk/client.cjs +391 -0
  187. package/dist/sdk/client.cjs.map +7 -0
  188. package/dist/sdk/client.js +364 -0
  189. package/dist/sdk/client.js.map +7 -0
  190. package/dist/sdk/core.cjs +19932 -0
  191. package/dist/sdk/core.cjs.map +7 -0
  192. package/dist/sdk/core.js +19893 -0
  193. package/dist/sdk/core.js.map +7 -0
  194. package/dist/sdk/daemon-client.cjs +257 -0
  195. package/dist/sdk/daemon-client.cjs.map +7 -0
  196. package/dist/sdk/daemon-client.js +221 -0
  197. package/dist/sdk/daemon-client.js.map +7 -0
  198. package/dist/sdk/protocol.cjs +170 -0
  199. package/dist/sdk/protocol.cjs.map +7 -0
  200. package/dist/sdk/protocol.js +140 -0
  201. package/dist/sdk/protocol.js.map +7 -0
  202. package/dist/sdk/runtime-node.cjs +236 -0
  203. package/dist/sdk/runtime-node.cjs.map +7 -0
  204. package/dist/sdk/runtime-node.js +222 -0
  205. package/dist/sdk/runtime-node.js.map +7 -0
  206. package/dist/sdk/runtime.cjs +17 -0
  207. package/dist/sdk/runtime.cjs.map +7 -0
  208. package/dist/sdk/runtime.js +0 -0
  209. package/dist/sdk/runtime.js.map +7 -0
  210. package/dist/sdk/tools.cjs +30300 -0
  211. package/dist/sdk/tools.cjs.map +7 -0
  212. package/dist/sdk/tools.js +30282 -0
  213. package/dist/sdk/tools.js.map +7 -0
  214. package/dist/webui/assets/index-5hlfByVS.css +1 -0
  215. package/dist/webui/assets/index-BR9lm1lA.js +82 -0
  216. package/dist/webui/index.html +28 -0
  217. package/package.json +93 -22
  218. package/scripts/binary-utils.cjs +12 -4
  219. package/scripts/cli-acp-wrapper.cjs +3 -17
  220. package/scripts/cli-wrapper.cjs +5 -7
  221. package/scripts/postinstall.js +8 -4
  222. package/dist/REPL-CW7AYLVL.js +0 -42
  223. package/dist/acp-VEPJ74LT.js +0 -1357
  224. package/dist/acp-VEPJ74LT.js.map +0 -7
  225. package/dist/agentsValidate-7LH4HTNR.js.map +0 -7
  226. package/dist/ask-3NHFFUQG.js.map +0 -7
  227. package/dist/autoUpdater-ITPIHCOI.js +0 -17
  228. package/dist/chunk-3IN27HA5.js.map +0 -7
  229. package/dist/chunk-4FX3IVPT.js +0 -164
  230. package/dist/chunk-4FX3IVPT.js.map +0 -7
  231. package/dist/chunk-4RTX4AG4.js.map +0 -7
  232. package/dist/chunk-5PDP7R6N.js +0 -515
  233. package/dist/chunk-5PDP7R6N.js.map +0 -7
  234. package/dist/chunk-73WGVYLQ.js.map +0 -7
  235. package/dist/chunk-7M2YN6TU.js.map +0 -7
  236. package/dist/chunk-7U7L4NMD.js.map +0 -7
  237. package/dist/chunk-ABLVTESJ.js.map +0 -7
  238. package/dist/chunk-AFFSCMYS.js.map +0 -7
  239. package/dist/chunk-ARZSBOAO.js.map +0 -7
  240. package/dist/chunk-CIG63V4E.js +0 -72
  241. package/dist/chunk-CIG63V4E.js.map +0 -7
  242. package/dist/chunk-CM3EGTG6.js +0 -1609
  243. package/dist/chunk-CM3EGTG6.js.map +0 -7
  244. package/dist/chunk-DZE5YA7L.js.map +0 -7
  245. package/dist/chunk-E6YNABER.js.map +0 -7
  246. package/dist/chunk-EZXMVTDU.js.map +0 -7
  247. package/dist/chunk-F2SJXUDI.js +0 -148
  248. package/dist/chunk-F2SJXUDI.js.map +0 -7
  249. package/dist/chunk-FC5ZCKBI.js +0 -30167
  250. package/dist/chunk-FC5ZCKBI.js.map +0 -7
  251. package/dist/chunk-HCBELH4J.js +0 -145
  252. package/dist/chunk-HCBELH4J.js.map +0 -7
  253. package/dist/chunk-HN4E4UUQ.js.map +0 -7
  254. package/dist/chunk-IZVMU4S2.js +0 -654
  255. package/dist/chunk-IZVMU4S2.js.map +0 -7
  256. package/dist/chunk-K2CWOTI2.js.map +0 -7
  257. package/dist/chunk-LC4TVOCZ.js +0 -835
  258. package/dist/chunk-LC4TVOCZ.js.map +0 -7
  259. package/dist/chunk-MIW7N2MY.js +0 -2613
  260. package/dist/chunk-MIW7N2MY.js.map +0 -7
  261. package/dist/chunk-MWRSY4X6.js.map +0 -7
  262. package/dist/chunk-ND3XWFO6.js +0 -34
  263. package/dist/chunk-ND3XWFO6.js.map +0 -7
  264. package/dist/chunk-QVLYOPO5.js.map +0 -7
  265. package/dist/chunk-RZWOUA25.js.map +0 -7
  266. package/dist/chunk-S6HRABTA.js.map +0 -7
  267. package/dist/chunk-STSX7GIX.js.map +0 -7
  268. package/dist/chunk-UHYRLID6.js.map +0 -7
  269. package/dist/chunk-UKHTVRJM.js +0 -47
  270. package/dist/chunk-UKHTVRJM.js.map +0 -7
  271. package/dist/chunk-UYXEDKOZ.js +0 -24
  272. package/dist/chunk-UYXEDKOZ.js.map +0 -7
  273. package/dist/chunk-W7GRKO7Q.js.map +0 -7
  274. package/dist/chunk-WVHORZQ5.js +0 -17
  275. package/dist/chunk-WVHORZQ5.js.map +0 -7
  276. package/dist/chunk-WWUWDNWW.js +0 -49
  277. package/dist/chunk-WWUWDNWW.js.map +0 -7
  278. package/dist/chunk-YC6LJCDE.js.map +0 -7
  279. package/dist/chunk-YXYYDIMI.js +0 -2931
  280. package/dist/chunk-YXYYDIMI.js.map +0 -7
  281. package/dist/chunk-ZVDRDPII.js.map +0 -7
  282. package/dist/cli-DOPVY2CW.js.map +0 -7
  283. package/dist/commands-2BF2CJ3A.js +0 -46
  284. package/dist/context-6FXPETYH.js +0 -30
  285. package/dist/costTracker-6SL26FDB.js +0 -19
  286. package/dist/kodeAgentSessionLoad-MITZADPB.js +0 -18
  287. package/dist/kodeAgentSessionResume-GVRWB4WO.js +0 -16
  288. package/dist/kodeAgentStreamJson-NXFN7TXH.js +0 -13
  289. package/dist/kodeAgentStreamJsonSession-UGEZJJEB.js.map +0 -7
  290. package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +0 -10
  291. package/dist/llm-ZUQC4WYM.js.map +0 -7
  292. package/dist/llmLazy-54QQHA54.js +0 -15
  293. package/dist/loader-FYHJQES5.js +0 -28
  294. package/dist/mcp-J332IKT3.js +0 -49
  295. package/dist/mentionProcessor-EE3XFHCJ.js.map +0 -7
  296. package/dist/model-FV3JDJKH.js +0 -30
  297. package/dist/pluginRuntime-6ETCZ2LL.js.map +0 -7
  298. package/dist/pluginValidation-I4YKUWGS.js +0 -17
  299. package/dist/prompts-ZLEKDD77.js +0 -48
  300. package/dist/query-VFRJPBGD.js +0 -50
  301. package/dist/responsesStreaming-AW344PQO.js +0 -10
  302. package/dist/ripgrep-3NTIKQYW.js +0 -17
  303. package/dist/state-P5G6CO5V.js +0 -16
  304. package/dist/theme-3LWP3BG7.js +0 -14
  305. package/dist/toolPermissionSettings-3ROBVTUK.js +0 -18
  306. package/dist/tools-RO7HSSE5.js +0 -47
  307. package/dist/userInput-JSBJRFSK.js +0 -311
  308. package/dist/userInput-JSBJRFSK.js.map +0 -7
  309. package/dist/uuid-QN2CNKKN.js +0 -9
  310. /package/dist/{REPL-CW7AYLVL.js.map → chunks/Doctor-M3J7GRTJ.js.map} +0 -0
  311. /package/dist/{autoUpdater-ITPIHCOI.js.map → chunks/REPL-RQ6LO6S7.js.map} +0 -0
  312. /package/dist/{chunk-JC6NCUG5.js.map → chunks/ResumeConversation-6DMVBEGH.js.map} +0 -0
  313. /package/dist/{commands-2BF2CJ3A.js.map → chunks/agentLoader-FCRG3TFJ.js.map} +0 -0
  314. /package/dist/{config-RUSD6G5Y.js.map → chunks/autoUpdater-CNESBOKO.js.map} +0 -0
  315. /package/dist/{context-6FXPETYH.js.map → chunks/chunk-4CRUCZR4.js.map} +0 -0
  316. /package/dist/{costTracker-6SL26FDB.js.map → chunks/chunk-54KOYG5C.js.map} +0 -0
  317. /package/dist/{customCommands-TOIJFZAL.js.map → chunks/chunk-GCQCAXJZ.js.map} +0 -0
  318. /package/dist/{env-XGKBLU3D.js.map → chunks/chunk-LB6TCPDI.js.map} +0 -0
  319. /package/dist/{kodeAgentSessionId-X6XWQW7B.js.map → chunks/client-SILZNM5N.js.map} +0 -0
  320. /package/dist/{kodeAgentSessionLoad-MITZADPB.js.map → chunks/config-25HRTPSP.js.map} +0 -0
  321. /package/dist/{kodeAgentSessionResume-GVRWB4WO.js.map → chunks/cost-tracker-Z2UZT2J5.js.map} +0 -0
  322. /package/dist/{kodeAgentStreamJson-NXFN7TXH.js.map → chunks/customCommands-TYMYZRG5.js.map} +0 -0
  323. /package/dist/{kodeAgentStructuredStdio-HGWJT7CU.js.map → chunks/engine-MRVF6FK6.js.map} +0 -0
  324. /package/dist/{kodeHooks-QWM36A3D.js.map → chunks/env-TJ5NOBEB.js.map} +0 -0
  325. /package/dist/{llmLazy-54QQHA54.js.map → chunks/kodeAgentSessionId-VTNISJ2L.js.map} +0 -0
  326. /package/dist/{loader-FYHJQES5.js.map → chunks/kodeAgentSessionLoad-YB2RKBGJ.js.map} +0 -0
  327. /package/dist/{mcp-J332IKT3.js.map → chunks/kodeAgentSessionResume-DZSIVKVA.js.map} +0 -0
  328. /package/dist/{messages-EOYQKPGM.js.map → chunks/kodeAgentStreamJson-X5PLS2S6.js.map} +0 -0
  329. /package/dist/{model-FV3JDJKH.js.map → chunks/kodeHooks-RVKYRJHG.js.map} +0 -0
  330. /package/dist/{openai-RRCWW33N.js.map → chunks/llmLazy-ZUSSE3ZA.js.map} +0 -0
  331. /package/dist/{outputStyles-62Q3VH2J.js.map → chunks/messages-EEWWLPHN.js.map} +0 -0
  332. /package/dist/{pluginValidation-I4YKUWGS.js.map → chunks/model-5TIEKQPD.js.map} +0 -0
  333. /package/dist/{prompts-ZLEKDD77.js.map → chunks/openai-XXK3YZG4.js.map} +0 -0
  334. /package/dist/{query-VFRJPBGD.js.map → chunks/outputStyles-FAJTXN2A.js.map} +0 -0
  335. /package/dist/{responsesStreaming-AW344PQO.js.map → chunks/permissions-HO7INPWM.js.map} +0 -0
  336. /package/dist/{ripgrep-3NTIKQYW.js.map → chunks/pluginValidation-DAM7WRTC.js.map} +0 -0
  337. /package/dist/{skillMarketplace-3RXQBVOL.js.map → chunks/registry-XYJXMOA5.js.map} +0 -0
  338. /package/dist/{state-P5G6CO5V.js.map → chunks/responsesStreaming-JNGE2P3D.js.map} +0 -0
  339. /package/dist/{theme-3LWP3BG7.js.map → chunks/server-REXXF5IK.js.map} +0 -0
  340. /package/dist/{toolPermissionContext-65L65VEZ.js.map → chunks/skillMarketplace-N4HVHNST.js.map} +0 -0
  341. /package/dist/{toolPermissionSettings-3ROBVTUK.js.map → chunks/src-OROQIWP3.js.map} +0 -0
  342. /package/dist/{tools-RO7HSSE5.js.map → chunks/theme-YBJUIMWK.js.map} +0 -0
  343. /package/dist/{uuid-QN2CNKKN.js.map → chunks/toolPermissionContext-MOCTRR7N.js.map} +0 -0
@@ -1,17 +1,15 @@
1
- import { createRequire as __kodeCreateRequire } from "node:module";
2
- const require = __kodeCreateRequire(import.meta.url);
3
1
  import {
4
2
  getSessionState,
5
3
  setSessionState
6
- } from "./chunk-E6YNABER.js";
4
+ } from "./chunk-ZCLTZIVP.js";
7
5
  import {
8
6
  debug
9
- } from "./chunk-STSX7GIX.js";
7
+ } from "./chunk-YIO5EBMQ.js";
10
8
  import {
11
9
  logError
12
- } from "./chunk-YXYYDIMI.js";
10
+ } from "./chunk-3OEJVB5A.js";
13
11
 
14
- // src/utils/agent/storage.ts
12
+ // packages/core/src/utils/agentStorage.ts
15
13
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
16
14
  import { join } from "path";
17
15
  import { homedir } from "os";
@@ -71,7 +69,7 @@ function generateAgentId() {
71
69
  return randomUUID();
72
70
  }
73
71
 
74
- // src/utils/session/todoStorage.ts
72
+ // packages/core/src/todo/storage.ts
75
73
  var TODO_STORAGE_KEY = "todos";
76
74
  var TODO_CONFIG_KEY = "todoConfig";
77
75
  var DEFAULT_CONFIG = {
@@ -83,56 +81,50 @@ var DEFAULT_CONFIG = {
83
81
  var todoCache = null;
84
82
  var cacheTimestamp = 0;
85
83
  var CACHE_TTL = 5e3;
84
+ var metrics = {
85
+ totalOperations: 0,
86
+ cacheHits: 0,
87
+ cacheMisses: 0,
88
+ lastOperation: 0
89
+ };
86
90
  function invalidateCache() {
87
91
  todoCache = null;
88
92
  cacheTimestamp = 0;
89
93
  }
90
- function updateMetrics(operation, cacheHit = false) {
91
- const sessionState = getSessionState();
92
- const metrics = sessionState.todoMetrics || {
93
- totalOperations: 0,
94
- cacheHits: 0,
95
- cacheMisses: 0,
96
- lastOperation: 0
94
+ function updateMetrics(cacheHit = false) {
95
+ metrics = {
96
+ ...metrics,
97
+ totalOperations: metrics.totalOperations + 1,
98
+ lastOperation: Date.now(),
99
+ cacheHits: metrics.cacheHits + (cacheHit ? 1 : 0),
100
+ cacheMisses: metrics.cacheMisses + (cacheHit ? 0 : 1)
101
+ };
102
+ }
103
+ function isTodoArray(value) {
104
+ return Array.isArray(value);
105
+ }
106
+ function normalizeTodo(todo) {
107
+ return {
108
+ ...todo,
109
+ activeForm: todo.activeForm || todo.content
97
110
  };
98
- metrics.totalOperations++;
99
- metrics.lastOperation = Date.now();
100
- if (cacheHit) {
101
- metrics.cacheHits++;
102
- } else {
103
- metrics.cacheMisses++;
104
- }
105
- setSessionState({
106
- ...sessionState,
107
- todoMetrics: metrics
108
- });
109
111
  }
110
112
  function getTodos(agentId) {
111
113
  const resolvedAgentId = resolveAgentId(agentId);
112
114
  const now = Date.now();
113
115
  if (agentId) {
114
- updateMetrics("getTodos", false);
116
+ updateMetrics(false);
115
117
  const agentTodos = readAgentData(resolvedAgentId) || [];
116
- const agentCacheKey = `todoCache_${resolvedAgentId}`;
117
- return agentTodos.map((todo) => ({
118
- ...todo,
119
- activeForm: todo.activeForm || todo.content
120
- }));
118
+ return agentTodos.map(normalizeTodo);
121
119
  }
122
120
  if (todoCache && now - cacheTimestamp < CACHE_TTL) {
123
- updateMetrics("getTodos", true);
124
- return todoCache.map((todo) => ({
125
- ...todo,
126
- activeForm: todo.activeForm || todo.content
127
- }));
121
+ updateMetrics(true);
122
+ return todoCache.map(normalizeTodo);
128
123
  }
129
- updateMetrics("getTodos", false);
130
- const sessionState = getSessionState();
131
- const todos = sessionState[TODO_STORAGE_KEY] || [];
132
- todoCache = [...todos].map((todo) => ({
133
- ...todo,
134
- activeForm: todo.activeForm || todo.content
135
- }));
124
+ updateMetrics(false);
125
+ const sessionTodos = getSessionState(TODO_STORAGE_KEY);
126
+ const todos = isTodoArray(sessionTodos) ? sessionTodos : [];
127
+ todoCache = [...todos].map(normalizeTodo);
136
128
  cacheTimestamp = now;
137
129
  return todoCache;
138
130
  }
@@ -140,32 +132,6 @@ function setTodos(todos, agentId) {
140
132
  const resolvedAgentId = resolveAgentId(agentId);
141
133
  const config = getTodoConfig();
142
134
  const existingTodos = getTodos(agentId);
143
- if (agentId) {
144
- if (todos.length > config.maxTodos) {
145
- throw new Error(
146
- `Todo limit exceeded. Maximum ${config.maxTodos} todos allowed.`
147
- );
148
- }
149
- let processedTodos2 = todos;
150
- if (config.autoArchiveCompleted) {
151
- processedTodos2 = todos.filter((todo) => todo.status !== "completed");
152
- }
153
- const updatedTodos2 = processedTodos2.map((todo) => {
154
- const existingTodo = existingTodos.find(
155
- (existing) => existing.id === todo.id
156
- );
157
- return {
158
- ...todo,
159
- activeForm: todo.activeForm || todo.content,
160
- updatedAt: Date.now(),
161
- createdAt: todo.createdAt || Date.now(),
162
- previousStatus: existingTodo?.status !== todo.status ? existingTodo?.status : todo.previousStatus
163
- };
164
- });
165
- writeAgentData(resolvedAgentId, updatedTodos2);
166
- updateMetrics("setTodos");
167
- return;
168
- }
169
135
  if (todos.length > config.maxTodos) {
170
136
  throw new Error(
171
137
  `Todo limit exceeded. Maximum ${config.maxTodos} todos allowed.`
@@ -185,19 +151,139 @@ function setTodos(todos, agentId) {
185
151
  previousStatus: existingTodo?.status !== todo.status ? existingTodo?.status : todo.previousStatus
186
152
  };
187
153
  });
188
- setSessionState({
189
- ...getSessionState(),
190
- [TODO_STORAGE_KEY]: updatedTodos
191
- });
154
+ if (agentId) {
155
+ writeAgentData(resolvedAgentId, updatedTodos);
156
+ updateMetrics(false);
157
+ return;
158
+ }
159
+ setSessionState(TODO_STORAGE_KEY, updatedTodos);
192
160
  invalidateCache();
193
- updateMetrics("setTodos");
161
+ updateMetrics(false);
162
+ }
163
+ function isRecord(value) {
164
+ return typeof value === "object" && value !== null && !Array.isArray(value);
194
165
  }
195
166
  function getTodoConfig() {
196
- const sessionState = getSessionState();
197
- return { ...DEFAULT_CONFIG, ...sessionState[TODO_CONFIG_KEY] || {} };
167
+ const raw = getSessionState(TODO_CONFIG_KEY);
168
+ const stored = isRecord(raw) ? raw : {};
169
+ return { ...DEFAULT_CONFIG, ...stored };
170
+ }
171
+
172
+ // packages/core/src/services/systemReminder/events.ts
173
+ function registerSystemReminderEvents(service) {
174
+ service.addEventListener("session:startup", (context) => {
175
+ service.resetSession();
176
+ service.sessionState.sessionStartTime = Date.now();
177
+ const ctx = context;
178
+ service.sessionState.contextPresent = Object.keys(ctx?.context ?? {}).length > 0;
179
+ });
180
+ service.addEventListener("todo:changed", (context) => {
181
+ const ctx = context;
182
+ service.sessionState.lastTodoUpdate = Date.now();
183
+ service.clearTodoReminders(ctx?.agentId);
184
+ });
185
+ service.addEventListener("todo:file_changed", (context) => {
186
+ const ctx = context;
187
+ const agentId = ctx?.agentId || "default";
188
+ service.clearTodoReminders(agentId);
189
+ service.sessionState.lastTodoUpdate = Date.now();
190
+ const reminder = service.generateFileChangeReminder(context);
191
+ if (reminder) {
192
+ service.emitEvent("reminder:inject", {
193
+ reminder: reminder.content,
194
+ agentId,
195
+ type: "file_changed",
196
+ timestamp: Date.now()
197
+ });
198
+ }
199
+ });
200
+ service.addEventListener("file:read", () => {
201
+ service.sessionState.lastFileAccess = Date.now();
202
+ });
203
+ service.addEventListener("file:edited", () => {
204
+ });
205
+ service.addEventListener("agent:mentioned", (context) => {
206
+ const ctx = context;
207
+ service.createMentionReminder({
208
+ type: "agent_mention",
209
+ key: `agent_mention_${ctx.agentType}_${ctx.timestamp}`,
210
+ category: "task",
211
+ priority: "high",
212
+ content: `The user mentioned @${ctx.originalMention}. You MUST use the Task tool with subagent_type="${ctx.agentType}" to delegate this task to the specified agent. Provide a detailed, self-contained task description that fully captures the user's intent for the ${ctx.agentType} agent to execute.`,
213
+ timestamp: ctx.timestamp
214
+ });
215
+ });
216
+ service.addEventListener("file:mentioned", (context) => {
217
+ const ctx = context;
218
+ service.createMentionReminder({
219
+ type: "file_mention",
220
+ key: `file_mention_${ctx.filePath}_${ctx.timestamp}`,
221
+ category: "general",
222
+ priority: "high",
223
+ content: `The user mentioned @${ctx.originalMention}. You MUST read the entire content of the file at path: ${ctx.filePath} using the Read tool to understand the full context before proceeding with the user's request.`,
224
+ timestamp: ctx.timestamp
225
+ });
226
+ });
227
+ service.addEventListener("ask-model:mentioned", (context) => {
228
+ const ctx = context;
229
+ service.createMentionReminder({
230
+ type: "ask_model_mention",
231
+ key: `ask_model_mention_${ctx.modelName}_${ctx.timestamp}`,
232
+ category: "task",
233
+ priority: "high",
234
+ content: `The user mentioned @${ctx.modelName}. You MUST use the AskExpertModelTool to consult this specific model for expert opinions and analysis. Provide the user's question or context clearly to get the most relevant response from ${ctx.modelName}.`,
235
+ timestamp: ctx.timestamp
236
+ });
237
+ });
238
+ }
239
+
240
+ // packages/core/src/services/systemReminder/mentions.ts
241
+ var MENTION_TYPES = /* @__PURE__ */ new Set([
242
+ "agent_mention",
243
+ "file_mention",
244
+ "ask_model_mention"
245
+ ]);
246
+ function isMentionReminder(reminder) {
247
+ return MENTION_TYPES.has(reminder.type);
248
+ }
249
+ function collectMentionReminders(args) {
250
+ const currentTime = args.now ?? Date.now();
251
+ const MENTION_FRESHNESS_WINDOW = 5e3;
252
+ const reminders = [];
253
+ const expiredKeys = [];
254
+ for (const [key, reminder] of args.reminderCache.entries()) {
255
+ if (!isMentionReminder(reminder)) continue;
256
+ const age = currentTime - reminder.timestamp;
257
+ if (age <= MENTION_FRESHNESS_WINDOW) {
258
+ reminders.push(reminder);
259
+ } else {
260
+ expiredKeys.push(key);
261
+ }
262
+ }
263
+ for (const key of expiredKeys) {
264
+ args.reminderCache.delete(key);
265
+ }
266
+ return reminders;
267
+ }
268
+ function cacheMentionReminder(args) {
269
+ if (args.sessionState.remindersSent.has(args.params.key)) return;
270
+ args.sessionState.remindersSent.add(args.params.key);
271
+ const reminder = args.createReminderMessage(
272
+ args.params.type,
273
+ args.params.category,
274
+ args.params.priority,
275
+ args.params.content,
276
+ args.params.timestamp
277
+ );
278
+ args.reminderCache.set(args.params.key, reminder);
279
+ }
280
+
281
+ // packages/core/src/services/systemReminder/types.ts
282
+ function getTodoStateHash(todos) {
283
+ return todos.map((t) => `${t.content}:${t.status}:${t.activeForm || t.content}`).sort().join("|");
198
284
  }
199
285
 
200
- // src/services/system/systemReminder.ts
286
+ // packages/core/src/services/systemReminder/service.ts
201
287
  var SystemReminderService = class {
202
288
  sessionState = {
203
289
  lastTodoUpdate: 0,
@@ -216,32 +302,36 @@ var SystemReminderService = class {
216
302
  eventDispatcher = /* @__PURE__ */ new Map();
217
303
  reminderCache = /* @__PURE__ */ new Map();
218
304
  constructor() {
219
- this.setupEventDispatcher();
305
+ registerSystemReminderEvents({
306
+ sessionState: this.sessionState,
307
+ resetSession: () => this.resetSession(),
308
+ clearTodoReminders: (agentId) => this.clearTodoReminders(agentId),
309
+ generateFileChangeReminder: (context) => this.generateFileChangeReminder(context),
310
+ emitEvent: (event, context) => this.emitEvent(event, context),
311
+ addEventListener: (event, cb) => this.addEventListener(event, cb),
312
+ createMentionReminder: (params) => this.createMentionReminder(params)
313
+ });
220
314
  }
221
315
  generateReminders(hasContext = false, agentId) {
222
316
  this.sessionState.contextPresent = hasContext;
223
- if (!hasContext) {
224
- return [];
225
- }
317
+ if (!hasContext) return [];
226
318
  if (this.sessionState.reminderCount >= this.sessionState.config.maxRemindersPerSession) {
227
319
  return [];
228
320
  }
229
321
  const reminders = [];
230
- const currentTime = Date.now();
231
322
  const reminderGenerators = [
232
323
  () => this.dispatchTodoEvent(agentId),
233
324
  () => this.dispatchSecurityEvent(),
234
325
  () => this.dispatchPerformanceEvent(),
235
- () => this.getMentionReminders()
326
+ () => collectMentionReminders({ reminderCache: this.reminderCache })
236
327
  ];
237
328
  for (const generator of reminderGenerators) {
238
329
  if (reminders.length >= 5) break;
239
330
  const result = generator();
240
- if (result) {
241
- const remindersToAdd = Array.isArray(result) ? result : [result];
242
- reminders.push(...remindersToAdd);
243
- this.sessionState.reminderCount += remindersToAdd.length;
244
- }
331
+ if (!result) continue;
332
+ const next = Array.isArray(result) ? result : [result];
333
+ reminders.push(...next);
334
+ this.sessionState.reminderCount += next.length;
245
335
  }
246
336
  return reminders;
247
337
  }
@@ -261,18 +351,17 @@ var SystemReminderService = class {
261
351
  );
262
352
  }
263
353
  if (todos.length > 0) {
264
- const reminderKey = `todo_updated_${agentKey}_${todos.length}_${this.getTodoStateHash(todos)}`;
265
- if (this.reminderCache.has(reminderKey)) {
266
- return this.reminderCache.get(reminderKey);
267
- }
354
+ const reminderKey = `todo_updated_${agentKey}_${todos.length}_${getTodoStateHash(todos)}`;
355
+ const cached = this.reminderCache.get(reminderKey);
356
+ if (cached) return cached;
268
357
  if (!this.sessionState.remindersSent.has(reminderKey)) {
269
358
  this.sessionState.remindersSent.add(reminderKey);
270
359
  this.clearTodoReminders(agentKey);
271
360
  const todoContent = JSON.stringify(
272
361
  todos.map((todo) => ({
273
- content: todo.content.length > 100 ? todo.content.substring(0, 100) + "..." : todo.content,
362
+ content: todo.content.length > 100 ? `${todo.content.substring(0, 100)}...` : todo.content,
274
363
  status: todo.status,
275
- activeForm: todo.activeForm && todo.activeForm.length > 100 ? todo.activeForm.substring(0, 100) + "..." : todo.activeForm || todo.content
364
+ activeForm: todo.activeForm && todo.activeForm.length > 100 ? `${todo.activeForm.substring(0, 100)}...` : todo.activeForm || todo.content
276
365
  }))
277
366
  );
278
367
  const reminder = this.createReminderMessage(
@@ -321,38 +410,15 @@ ${todoContent}. Continue on with the tasks at hand if applicable.`,
321
410
  }
322
411
  return null;
323
412
  }
324
- getMentionReminders() {
325
- const currentTime = Date.now();
326
- const MENTION_FRESHNESS_WINDOW = 5e3;
327
- const reminders = [];
328
- const expiredKeys = [];
329
- for (const [key, reminder] of this.reminderCache.entries()) {
330
- if (this.isMentionReminder(reminder)) {
331
- const age = currentTime - reminder.timestamp;
332
- if (age <= MENTION_FRESHNESS_WINDOW) {
333
- reminders.push(reminder);
334
- } else {
335
- expiredKeys.push(key);
336
- }
337
- }
338
- }
339
- expiredKeys.forEach((key) => this.reminderCache.delete(key));
340
- return reminders;
341
- }
342
- isMentionReminder(reminder) {
343
- const mentionTypes = ["agent_mention", "file_mention", "ask_model_mention"];
344
- return mentionTypes.includes(reminder.type);
345
- }
346
413
  generateFileChangeReminder(context) {
347
- const { agentId, filePath, reminder } = context;
348
- if (!reminder) {
349
- return null;
350
- }
414
+ const ctx = context;
415
+ const agentId = ctx?.agentId;
416
+ const filePath = ctx?.filePath;
417
+ const reminder = ctx?.reminder;
418
+ if (!reminder) return null;
351
419
  const currentTime = Date.now();
352
420
  const reminderKey = `file_changed_${agentId}_${filePath}_${currentTime}`;
353
- if (this.sessionState.remindersSent.has(reminderKey)) {
354
- return null;
355
- }
421
+ if (this.sessionState.remindersSent.has(reminderKey)) return null;
356
422
  this.sessionState.remindersSent.add(reminderKey);
357
423
  return this.createReminderMessage(
358
424
  "file_changed",
@@ -375,9 +441,6 @@ ${content}
375
441
  category
376
442
  };
377
443
  }
378
- getTodoStateHash(todos) {
379
- return todos.map((t) => `${t.content}:${t.status}:${t.activeForm || t.content}`).sort().join("|");
380
- }
381
444
  clearTodoReminders(agentId) {
382
445
  const agentKey = agentId || "default";
383
446
  for (const key of this.sessionState.remindersSent) {
@@ -386,66 +449,6 @@ ${content}
386
449
  }
387
450
  }
388
451
  }
389
- setupEventDispatcher() {
390
- this.addEventListener("session:startup", (context) => {
391
- this.resetSession();
392
- this.sessionState.sessionStartTime = Date.now();
393
- this.sessionState.contextPresent = Object.keys(context.context || {}).length > 0;
394
- });
395
- this.addEventListener("todo:changed", (context) => {
396
- this.sessionState.lastTodoUpdate = Date.now();
397
- this.clearTodoReminders(context.agentId);
398
- });
399
- this.addEventListener("todo:file_changed", (context) => {
400
- const agentId = context.agentId || "default";
401
- this.clearTodoReminders(agentId);
402
- this.sessionState.lastTodoUpdate = Date.now();
403
- const reminder = this.generateFileChangeReminder(context);
404
- if (reminder) {
405
- this.emitEvent("reminder:inject", {
406
- reminder: reminder.content,
407
- agentId,
408
- type: "file_changed",
409
- timestamp: Date.now()
410
- });
411
- }
412
- });
413
- this.addEventListener("file:read", (context) => {
414
- this.sessionState.lastFileAccess = Date.now();
415
- });
416
- this.addEventListener("file:edited", (context) => {
417
- });
418
- this.addEventListener("agent:mentioned", (context) => {
419
- this.createMentionReminder({
420
- type: "agent_mention",
421
- key: `agent_mention_${context.agentType}_${context.timestamp}`,
422
- category: "task",
423
- priority: "high",
424
- content: `The user mentioned @${context.originalMention}. You MUST use the Task tool with subagent_type="${context.agentType}" to delegate this task to the specified agent. Provide a detailed, self-contained task description that fully captures the user's intent for the ${context.agentType} agent to execute.`,
425
- timestamp: context.timestamp
426
- });
427
- });
428
- this.addEventListener("file:mentioned", (context) => {
429
- this.createMentionReminder({
430
- type: "file_mention",
431
- key: `file_mention_${context.filePath}_${context.timestamp}`,
432
- category: "general",
433
- priority: "high",
434
- content: `The user mentioned @${context.originalMention}. You MUST read the entire content of the file at path: ${context.filePath} using the Read tool to understand the full context before proceeding with the user's request.`,
435
- timestamp: context.timestamp
436
- });
437
- });
438
- this.addEventListener("ask-model:mentioned", (context) => {
439
- this.createMentionReminder({
440
- type: "ask_model_mention",
441
- key: `ask_model_mention_${context.modelName}_${context.timestamp}`,
442
- category: "task",
443
- priority: "high",
444
- content: `The user mentioned @${context.modelName}. You MUST use the AskExpertModelTool to consult this specific model for expert opinions and analysis. Provide the user's question or context clearly to get the most relevant response from ${context.modelName}.`,
445
- timestamp: context.timestamp
446
- });
447
- });
448
- }
449
452
  addEventListener(event, callback) {
450
453
  if (!this.eventDispatcher.has(event)) {
451
454
  this.eventDispatcher.set(event, []);
@@ -454,7 +457,7 @@ ${content}
454
457
  }
455
458
  emitEvent(event, context) {
456
459
  const listeners = this.eventDispatcher.get(event) || [];
457
- listeners.forEach((callback) => {
460
+ for (const callback of listeners) {
458
461
  try {
459
462
  callback(context);
460
463
  } catch (error) {
@@ -464,31 +467,31 @@ ${content}
464
467
  error: error instanceof Error ? error.message : String(error)
465
468
  });
466
469
  }
467
- });
470
+ }
468
471
  }
469
472
  createMentionReminder(params) {
470
- if (!this.sessionState.remindersSent.has(params.key)) {
471
- this.sessionState.remindersSent.add(params.key);
472
- const reminder = this.createReminderMessage(
473
- params.type,
474
- params.category,
475
- params.priority,
476
- params.content,
477
- params.timestamp
478
- );
479
- this.reminderCache.set(params.key, reminder);
480
- }
473
+ cacheMentionReminder({
474
+ sessionState: this.sessionState,
475
+ reminderCache: this.reminderCache,
476
+ params,
477
+ createReminderMessage: (type, category, priority, content, timestamp) => this.createReminderMessage(
478
+ type,
479
+ category,
480
+ priority,
481
+ content,
482
+ timestamp
483
+ )
484
+ });
481
485
  }
482
486
  resetSession() {
483
- this.sessionState = {
484
- lastTodoUpdate: 0,
485
- lastFileAccess: 0,
486
- sessionStartTime: Date.now(),
487
- remindersSent: /* @__PURE__ */ new Set(),
488
- contextPresent: false,
489
- reminderCount: 0,
490
- config: { ...this.sessionState.config }
491
- };
487
+ const preservedConfig = { ...this.sessionState.config };
488
+ this.sessionState.lastTodoUpdate = 0;
489
+ this.sessionState.lastFileAccess = 0;
490
+ this.sessionState.sessionStartTime = Date.now();
491
+ this.sessionState.remindersSent = /* @__PURE__ */ new Set();
492
+ this.sessionState.contextPresent = false;
493
+ this.sessionState.reminderCount = 0;
494
+ this.sessionState.config = preservedConfig;
492
495
  this.reminderCache.clear();
493
496
  }
494
497
  updateConfig(config) {
@@ -498,6 +501,8 @@ ${content}
498
501
  return { ...this.sessionState };
499
502
  }
500
503
  };
504
+
505
+ // packages/core/src/services/systemReminder/index.ts
501
506
  var systemReminderService = new SystemReminderService();
502
507
  var generateSystemReminders = (hasContext = false, agentId) => systemReminderService.generateReminders(hasContext, agentId);
503
508
  var emitReminderEvent = (event, context) => systemReminderService.emitEvent(event, context);
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/core/src/utils/agentStorage.ts", "../../packages/core/src/todo/storage.ts", "../../packages/core/src/services/systemReminder/events.ts", "../../packages/core/src/services/systemReminder/mentions.ts", "../../packages/core/src/services/systemReminder/types.ts", "../../packages/core/src/services/systemReminder/service.ts", "../../packages/core/src/services/systemReminder/index.ts"],
4
+ "sourcesContent": ["import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs'\nimport { join } from 'path'\nimport { homedir } from 'os'\nimport { randomUUID } from 'crypto'\nimport { debug as debugLogger } from '#core/utils/debugLogger'\nimport { logError } from '#core/utils/log'\n\n/**\n * Agent Storage Utilities\n * Provides file-based state isolation for different agents\n * Based on Kode's Agent ID architecture\n */\n\n/**\n * Get the kode config directory\n */\nfunction getConfigDirectory(): string {\n return (\n process.env.KODE_CONFIG_DIR ??\n process.env.ANYKODE_CONFIG_DIR ??\n join(homedir(), '.kode')\n )\n}\n\n/**\n * Get the current session ID\n */\nfunction getSessionId(): string {\n // This should be set when the session starts\n return process.env.ANYKODE_SESSION_ID ?? 'default-session'\n}\n\n/**\n * Generate agent-specific file path\n * Pattern: ${sessionId}-agent-${agentId}.json\n * Stored in ~/.kode/ directory\n */\nexport function getAgentFilePath(agentId: string): string {\n const sessionId = getSessionId()\n const filename = `${sessionId}-agent-${agentId}.json`\n const configDir = getConfigDirectory()\n\n // Ensure kode config directory exists\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true })\n }\n\n return join(configDir, filename)\n}\n\n/**\n * Read agent-specific data from storage\n */\nexport function readAgentData<T = any>(agentId: string): T | null {\n const filePath = getAgentFilePath(agentId)\n\n if (!existsSync(filePath)) {\n return null\n }\n\n try {\n const content = readFileSync(filePath, 'utf-8')\n return JSON.parse(content) as T\n } catch (error) {\n logError(error)\n debugLogger.warn('AGENT_STORAGE_READ_FAILED', {\n agentId,\n error: error instanceof Error ? error.message : String(error),\n })\n return null\n }\n}\n\n/**\n * Write agent-specific data to storage\n */\nexport function writeAgentData<T = any>(agentId: string, data: T): void {\n const filePath = getAgentFilePath(agentId)\n\n try {\n writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8')\n } catch (error) {\n logError(error)\n debugLogger.warn('AGENT_STORAGE_WRITE_FAILED', {\n agentId,\n error: error instanceof Error ? error.message : String(error),\n })\n throw error\n }\n}\n\n/**\n * Get default agent ID if none is provided\n */\nexport function getDefaultAgentId(): string {\n return 'default'\n}\n\n/**\n * Resolve agent ID from context\n */\nexport function resolveAgentId(agentId?: string): string {\n return agentId || getDefaultAgentId()\n}\n\n/**\n * Generate a new unique Agent ID\n */\nexport function generateAgentId(): string {\n return randomUUID()\n}\n", "import { getSessionState, setSessionState } from '#core/utils/sessionState'\nimport {\n readAgentData,\n resolveAgentId,\n writeAgentData,\n} from '#core/utils/agentStorage'\nimport type {\n TodoItem,\n TodoQuery,\n TodoStorageConfig,\n TodoMetrics,\n} from './types'\n\nconst TODO_STORAGE_KEY = 'todos'\nconst TODO_CONFIG_KEY = 'todoConfig'\n\nconst DEFAULT_CONFIG: TodoStorageConfig = {\n maxTodos: 100,\n autoArchiveCompleted: false,\n sortBy: 'status',\n sortOrder: 'desc',\n}\n\nlet todoCache: TodoItem[] | null = null\nlet cacheTimestamp = 0\nconst CACHE_TTL = 5000\n\nlet metrics: TodoMetrics = {\n totalOperations: 0,\n cacheHits: 0,\n cacheMisses: 0,\n lastOperation: 0,\n}\n\nfunction invalidateCache(): void {\n todoCache = null\n cacheTimestamp = 0\n}\n\nfunction updateMetrics(cacheHit: boolean = false): void {\n metrics = {\n ...metrics,\n totalOperations: metrics.totalOperations + 1,\n lastOperation: Date.now(),\n cacheHits: metrics.cacheHits + (cacheHit ? 1 : 0),\n cacheMisses: metrics.cacheMisses + (cacheHit ? 0 : 1),\n }\n}\n\nfunction isTodoArray(value: unknown): value is TodoItem[] {\n return Array.isArray(value)\n}\n\nfunction normalizeTodo(todo: TodoItem): TodoItem {\n return {\n ...todo,\n activeForm: todo.activeForm || todo.content,\n }\n}\n\nexport function getTodoMetrics(): TodoMetrics {\n return { ...metrics }\n}\n\nexport function getTodos(agentId?: string): TodoItem[] {\n const resolvedAgentId = resolveAgentId(agentId)\n const now = Date.now()\n\n if (agentId) {\n updateMetrics(false)\n const agentTodos = readAgentData<TodoItem[]>(resolvedAgentId) || []\n return agentTodos.map(normalizeTodo)\n }\n\n if (todoCache && now - cacheTimestamp < CACHE_TTL) {\n updateMetrics(true)\n return todoCache.map(normalizeTodo)\n }\n\n updateMetrics(false)\n const sessionTodos = getSessionState(TODO_STORAGE_KEY)\n const todos = isTodoArray(sessionTodos) ? sessionTodos : []\n\n todoCache = [...todos].map(normalizeTodo)\n cacheTimestamp = now\n\n return todoCache\n}\n\nexport function setTodos(todos: TodoItem[], agentId?: string): void {\n const resolvedAgentId = resolveAgentId(agentId)\n const config = getTodoConfig()\n const existingTodos = getTodos(agentId)\n\n if (todos.length > config.maxTodos) {\n throw new Error(\n `Todo limit exceeded. Maximum ${config.maxTodos} todos allowed.`,\n )\n }\n\n let processedTodos = todos\n if (config.autoArchiveCompleted) {\n processedTodos = todos.filter(todo => todo.status !== 'completed')\n }\n\n const updatedTodos = processedTodos.map(todo => {\n const existingTodo = existingTodos.find(existing => existing.id === todo.id)\n\n return {\n ...todo,\n activeForm: todo.activeForm || todo.content,\n updatedAt: Date.now(),\n createdAt: todo.createdAt || Date.now(),\n previousStatus:\n existingTodo?.status !== todo.status\n ? existingTodo?.status\n : todo.previousStatus,\n }\n })\n\n if (agentId) {\n writeAgentData(resolvedAgentId, updatedTodos)\n updateMetrics(false)\n return\n }\n\n setSessionState(TODO_STORAGE_KEY, updatedTodos)\n invalidateCache()\n updateMetrics(false)\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport function getTodoConfig(): TodoStorageConfig {\n const raw = getSessionState(TODO_CONFIG_KEY)\n const stored = isRecord(raw) ? raw : {}\n return { ...DEFAULT_CONFIG, ...(stored as Partial<TodoStorageConfig>) }\n}\n\nexport function setTodoConfig(config: Partial<TodoStorageConfig>): void {\n const currentConfig = getTodoConfig()\n const newConfig = { ...currentConfig, ...config }\n\n setSessionState(TODO_CONFIG_KEY, newConfig)\n\n if (config.sortBy || config.sortOrder) {\n const todos = getTodos()\n setTodos(todos)\n }\n}\n\nexport function addTodo(\n todo: Omit<TodoItem, 'createdAt' | 'updatedAt'>,\n): TodoItem[] {\n const todos = getTodos()\n if (todos.some(existing => existing.id === todo.id)) {\n throw new Error(`Todo with ID '${todo.id}' already exists`)\n }\n\n const newTodo: TodoItem = {\n ...todo,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n }\n\n const updatedTodos = [...todos, newTodo]\n setTodos(updatedTodos)\n return updatedTodos\n}\n\nexport function updateTodo(id: string, updates: Partial<TodoItem>): TodoItem[] {\n const todos = getTodos()\n const existingTodo = todos.find(todo => todo.id === id)\n if (!existingTodo) {\n throw new Error(`Todo with ID '${id}' not found`)\n }\n\n const updatedTodos = todos.map(todo =>\n todo.id === id ? { ...todo, ...updates, updatedAt: Date.now() } : todo,\n )\n\n setTodos(updatedTodos)\n return updatedTodos\n}\n\nexport function deleteTodo(id: string): TodoItem[] {\n const todos = getTodos()\n const todoExists = todos.some(todo => todo.id === id)\n if (!todoExists) {\n throw new Error(`Todo with ID '${id}' not found`)\n }\n\n const updatedTodos = todos.filter(todo => todo.id !== id)\n setTodos(updatedTodos)\n return updatedTodos\n}\n\nexport function clearTodos(): void {\n setTodos([])\n}\n\nexport function getTodoById(id: string): TodoItem | undefined {\n const todos = getTodos()\n return todos.find(todo => todo.id === id)\n}\n\nexport function getTodosByStatus(status: TodoItem['status']): TodoItem[] {\n const todos = getTodos()\n return todos.filter(todo => todo.status === status)\n}\n\nexport function getTodosByPriority(priority: TodoItem['priority']): TodoItem[] {\n const todos = getTodos()\n return todos.filter(todo => todo.priority === priority)\n}\n\nexport function queryTodos(query: TodoQuery): TodoItem[] {\n const todos = getTodos()\n\n return todos.filter(todo => {\n if (query.status && !query.status.includes(todo.status)) {\n return false\n }\n\n if (query.priority && !query.priority.includes(todo.priority)) {\n return false\n }\n\n if (\n query.contentMatch &&\n !todo.content.toLowerCase().includes(query.contentMatch.toLowerCase())\n ) {\n return false\n }\n\n if (query.tags && todo.tags) {\n const hasMatchingTag = query.tags.some(tag => todo.tags!.includes(tag))\n if (!hasMatchingTag) return false\n }\n\n if (query.dateRange) {\n const todoDate = new Date(todo.createdAt || 0)\n if (query.dateRange.from && todoDate < query.dateRange.from) return false\n if (query.dateRange.to && todoDate > query.dateRange.to) return false\n }\n\n return true\n })\n}\n\nexport function getTodoStatistics() {\n const todos = getTodos()\n const currentMetrics = getTodoMetrics()\n\n return {\n total: todos.length,\n byStatus: {\n pending: todos.filter(t => t.status === 'pending').length,\n in_progress: todos.filter(t => t.status === 'in_progress').length,\n completed: todos.filter(t => t.status === 'completed').length,\n },\n byPriority: {\n high: todos.filter(t => t.priority === 'high').length,\n medium: todos.filter(t => t.priority === 'medium').length,\n low: todos.filter(t => t.priority === 'low').length,\n },\n metrics: currentMetrics,\n cacheEfficiency:\n currentMetrics.totalOperations > 0\n ? Math.round(\n (currentMetrics.cacheHits / currentMetrics.totalOperations) * 100,\n )\n : 0,\n }\n}\n\nexport function optimizeTodoStorage(): void {\n invalidateCache()\n\n const todos = getTodos()\n const validTodos = todos.filter(\n todo =>\n todo.id &&\n todo.content &&\n todo.activeForm &&\n ['pending', 'in_progress', 'completed'].includes(todo.status) &&\n ['high', 'medium', 'low'].includes(todo.priority),\n )\n\n if (validTodos.length !== todos.length) {\n setTodos(validTodos)\n }\n}\n", "import type { ReminderMessage, SessionReminderState } from './types'\nimport type { MentionReminderParams } from './mentions'\n\nexport type SystemReminderEventBindings = {\n sessionState: SessionReminderState\n resetSession: () => void\n clearTodoReminders: (agentId?: string) => void\n generateFileChangeReminder: (context: unknown) => ReminderMessage | null\n emitEvent: (event: string, context: unknown) => void\n addEventListener: (\n event: string,\n callback: (context: unknown) => void,\n ) => void\n createMentionReminder: (params: MentionReminderParams) => void\n}\n\nexport function registerSystemReminderEvents(\n service: SystemReminderEventBindings,\n): void {\n service.addEventListener('session:startup', context => {\n service.resetSession()\n service.sessionState.sessionStartTime = Date.now()\n const ctx = context as { context?: Record<string, unknown> } | null\n service.sessionState.contextPresent =\n Object.keys(ctx?.context ?? {}).length > 0\n })\n\n service.addEventListener('todo:changed', context => {\n const ctx = context as { agentId?: string } | null\n service.sessionState.lastTodoUpdate = Date.now()\n service.clearTodoReminders(ctx?.agentId)\n })\n\n service.addEventListener('todo:file_changed', context => {\n const ctx = context as { agentId?: string; filePath?: string } | null\n const agentId = ctx?.agentId || 'default'\n service.clearTodoReminders(agentId)\n service.sessionState.lastTodoUpdate = Date.now()\n\n const reminder = service.generateFileChangeReminder(context)\n if (reminder) {\n service.emitEvent('reminder:inject', {\n reminder: reminder.content,\n agentId,\n type: 'file_changed',\n timestamp: Date.now(),\n })\n }\n })\n\n service.addEventListener('file:read', () => {\n service.sessionState.lastFileAccess = Date.now()\n })\n\n service.addEventListener('file:edited', () => {\n // intentionally left blank (reserved for freshness detection)\n })\n\n service.addEventListener('agent:mentioned', context => {\n const ctx = context as {\n agentType: string\n originalMention: string\n timestamp: number\n }\n service.createMentionReminder({\n type: 'agent_mention',\n key: `agent_mention_${ctx.agentType}_${ctx.timestamp}`,\n category: 'task',\n priority: 'high',\n content: `The user mentioned @${ctx.originalMention}. You MUST use the Task tool with subagent_type=\"${ctx.agentType}\" to delegate this task to the specified agent. Provide a detailed, self-contained task description that fully captures the user's intent for the ${ctx.agentType} agent to execute.`,\n timestamp: ctx.timestamp,\n })\n })\n\n service.addEventListener('file:mentioned', context => {\n const ctx = context as {\n filePath: string\n originalMention: string\n timestamp: number\n }\n service.createMentionReminder({\n type: 'file_mention',\n key: `file_mention_${ctx.filePath}_${ctx.timestamp}`,\n category: 'general',\n priority: 'high',\n content: `The user mentioned @${ctx.originalMention}. You MUST read the entire content of the file at path: ${ctx.filePath} using the Read tool to understand the full context before proceeding with the user's request.`,\n timestamp: ctx.timestamp,\n })\n })\n\n service.addEventListener('ask-model:mentioned', context => {\n const ctx = context as { modelName: string; timestamp: number }\n service.createMentionReminder({\n type: 'ask_model_mention',\n key: `ask_model_mention_${ctx.modelName}_${ctx.timestamp}`,\n category: 'task',\n priority: 'high',\n content: `The user mentioned @${ctx.modelName}. You MUST use the AskExpertModelTool to consult this specific model for expert opinions and analysis. Provide the user's question or context clearly to get the most relevant response from ${ctx.modelName}.`,\n timestamp: ctx.timestamp,\n })\n })\n}\n", "import type { ReminderMessage, SessionReminderState } from './types'\n\nexport type MentionReminderParams = {\n type: string\n key: string\n category: ReminderMessage['category']\n priority: ReminderMessage['priority']\n content: string\n timestamp: number\n}\n\nconst MENTION_TYPES = new Set([\n 'agent_mention',\n 'file_mention',\n 'ask_model_mention',\n])\n\nfunction isMentionReminder(reminder: ReminderMessage): boolean {\n return MENTION_TYPES.has(reminder.type)\n}\n\nexport function collectMentionReminders(args: {\n reminderCache: Map<string, ReminderMessage>\n now?: number\n}): ReminderMessage[] {\n const currentTime = args.now ?? Date.now()\n const MENTION_FRESHNESS_WINDOW = 5000\n const reminders: ReminderMessage[] = []\n const expiredKeys: string[] = []\n\n for (const [key, reminder] of args.reminderCache.entries()) {\n if (!isMentionReminder(reminder)) continue\n const age = currentTime - reminder.timestamp\n if (age <= MENTION_FRESHNESS_WINDOW) {\n reminders.push(reminder)\n } else {\n expiredKeys.push(key)\n }\n }\n\n for (const key of expiredKeys) {\n args.reminderCache.delete(key)\n }\n\n return reminders\n}\n\nexport function cacheMentionReminder(args: {\n sessionState: SessionReminderState\n reminderCache: Map<string, ReminderMessage>\n params: MentionReminderParams\n createReminderMessage: (\n type: string,\n category: ReminderMessage['category'],\n priority: ReminderMessage['priority'],\n content: string,\n timestamp: number,\n ) => ReminderMessage\n}): void {\n if (args.sessionState.remindersSent.has(args.params.key)) return\n args.sessionState.remindersSent.add(args.params.key)\n\n const reminder = args.createReminderMessage(\n args.params.type,\n args.params.category,\n args.params.priority,\n args.params.content,\n args.params.timestamp,\n )\n args.reminderCache.set(args.params.key, reminder)\n}\n", "import type { TodoItem } from '#core/utils/todoStorage'\n\nexport interface ReminderMessage {\n role: 'system'\n content: string\n isMeta: boolean\n timestamp: number\n type: string\n priority: 'low' | 'medium' | 'high'\n category: 'task' | 'security' | 'performance' | 'general'\n}\n\nexport interface ReminderConfig {\n todoEmptyReminder: boolean\n securityReminder: boolean\n performanceReminder: boolean\n maxRemindersPerSession: number\n}\n\nexport interface SessionReminderState {\n lastTodoUpdate: number\n lastFileAccess: number\n sessionStartTime: number\n remindersSent: Set<string>\n contextPresent: boolean\n reminderCount: number\n config: ReminderConfig\n}\n\nexport type TodoStateHash = string\n\nexport function getTodoStateHash(todos: TodoItem[]): TodoStateHash {\n return todos\n .map(t => `${t.content}:${t.status}:${t.activeForm || t.content}`)\n .sort()\n .join('|')\n}\n", "import { getTodos } from '#core/utils/todoStorage'\nimport { debug as debugLogger } from '#core/utils/debugLogger'\nimport { logError } from '#core/utils/log'\n\nimport { registerSystemReminderEvents } from './events'\nimport { collectMentionReminders, cacheMentionReminder } from './mentions'\nimport type { MentionReminderParams } from './mentions'\nimport type {\n ReminderConfig,\n ReminderMessage,\n SessionReminderState,\n} from './types'\nimport { getTodoStateHash } from './types'\n\nexport class SystemReminderService {\n public sessionState: SessionReminderState = {\n lastTodoUpdate: 0,\n lastFileAccess: 0,\n sessionStartTime: Date.now(),\n remindersSent: new Set(),\n contextPresent: false,\n reminderCount: 0,\n config: {\n todoEmptyReminder: true,\n securityReminder: true,\n performanceReminder: true,\n maxRemindersPerSession: 10,\n },\n }\n\n private readonly eventDispatcher = new Map<\n string,\n Array<(context: unknown) => void>\n >()\n private readonly reminderCache = new Map<string, ReminderMessage>()\n\n constructor() {\n registerSystemReminderEvents({\n sessionState: this.sessionState,\n resetSession: () => this.resetSession(),\n clearTodoReminders: agentId => this.clearTodoReminders(agentId),\n generateFileChangeReminder: context =>\n this.generateFileChangeReminder(context),\n emitEvent: (event, context) => this.emitEvent(event, context),\n addEventListener: (event, cb) => this.addEventListener(event, cb),\n createMentionReminder: params => this.createMentionReminder(params),\n })\n }\n\n public generateReminders(\n hasContext: boolean = false,\n agentId?: string,\n ): ReminderMessage[] {\n this.sessionState.contextPresent = hasContext\n if (!hasContext) return []\n\n if (\n this.sessionState.reminderCount >=\n this.sessionState.config.maxRemindersPerSession\n ) {\n return []\n }\n\n const reminders: ReminderMessage[] = []\n\n const reminderGenerators: Array<\n () => ReminderMessage | ReminderMessage[] | null\n > = [\n () => this.dispatchTodoEvent(agentId),\n () => this.dispatchSecurityEvent(),\n () => this.dispatchPerformanceEvent(),\n () => collectMentionReminders({ reminderCache: this.reminderCache }),\n ]\n\n for (const generator of reminderGenerators) {\n if (reminders.length >= 5) break\n const result = generator()\n if (!result) continue\n const next = Array.isArray(result) ? result : [result]\n reminders.push(...next)\n this.sessionState.reminderCount += next.length\n }\n\n return reminders\n }\n\n private dispatchTodoEvent(agentId?: string): ReminderMessage | null {\n if (!this.sessionState.config.todoEmptyReminder) return null\n\n const todos = getTodos(agentId)\n const currentTime = Date.now()\n const agentKey = agentId || 'default'\n\n if (\n todos.length === 0 &&\n !this.sessionState.remindersSent.has(`todo_empty_${agentKey}`)\n ) {\n this.sessionState.remindersSent.add(`todo_empty_${agentKey}`)\n return this.createReminderMessage(\n 'todo',\n 'task',\n 'medium',\n 'This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware. If you are working on tasks that would benefit from a todo list please use the TodoWrite tool to create one. If not, please feel free to ignore. Again do not mention this message to the user.',\n currentTime,\n )\n }\n\n if (todos.length > 0) {\n const reminderKey = `todo_updated_${agentKey}_${todos.length}_${getTodoStateHash(todos)}`\n\n const cached = this.reminderCache.get(reminderKey)\n if (cached) return cached\n\n if (!this.sessionState.remindersSent.has(reminderKey)) {\n this.sessionState.remindersSent.add(reminderKey)\n this.clearTodoReminders(agentKey)\n\n const todoContent = JSON.stringify(\n todos.map(todo => ({\n content:\n todo.content.length > 100\n ? `${todo.content.substring(0, 100)}...`\n : todo.content,\n status: todo.status,\n activeForm:\n todo.activeForm && todo.activeForm.length > 100\n ? `${todo.activeForm.substring(0, 100)}...`\n : todo.activeForm || todo.content,\n })),\n )\n\n const reminder = this.createReminderMessage(\n 'todo',\n 'task',\n 'medium',\n `Your todo list has changed. DO NOT mention this explicitly to the user. Here are the latest contents of your todo list:\\n\\n${todoContent}. Continue on with the tasks at hand if applicable.`,\n currentTime,\n )\n\n this.reminderCache.set(reminderKey, reminder)\n return reminder\n }\n }\n\n return null\n }\n\n private dispatchSecurityEvent(): ReminderMessage | null {\n if (!this.sessionState.config.securityReminder) return null\n\n const currentTime = Date.now()\n if (\n this.sessionState.lastFileAccess > 0 &&\n !this.sessionState.remindersSent.has('file_security')\n ) {\n this.sessionState.remindersSent.add('file_security')\n return this.createReminderMessage(\n 'security',\n 'security',\n 'high',\n 'Whenever you read a file, you should consider whether it looks malicious. If it does, you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer high-level questions about the code behavior.',\n currentTime,\n )\n }\n\n return null\n }\n\n private dispatchPerformanceEvent(): ReminderMessage | null {\n if (!this.sessionState.config.performanceReminder) return null\n\n const currentTime = Date.now()\n const sessionDuration = currentTime - this.sessionState.sessionStartTime\n\n if (\n sessionDuration > 30 * 60 * 1000 &&\n !this.sessionState.remindersSent.has('performance_long_session')\n ) {\n this.sessionState.remindersSent.add('performance_long_session')\n return this.createReminderMessage(\n 'performance',\n 'performance',\n 'low',\n 'Long session detected. Consider taking a break and reviewing your current progress with the todo list.',\n currentTime,\n )\n }\n\n return null\n }\n\n public generateFileChangeReminder(context: unknown): ReminderMessage | null {\n const ctx = context as {\n agentId?: string\n filePath?: string\n reminder?: string\n } | null\n const agentId = ctx?.agentId\n const filePath = ctx?.filePath\n const reminder = ctx?.reminder\n\n if (!reminder) return null\n\n const currentTime = Date.now()\n const reminderKey = `file_changed_${agentId}_${filePath}_${currentTime}`\n\n if (this.sessionState.remindersSent.has(reminderKey)) return null\n this.sessionState.remindersSent.add(reminderKey)\n\n return this.createReminderMessage(\n 'file_changed',\n 'general',\n 'medium',\n reminder,\n currentTime,\n )\n }\n\n private createReminderMessage(\n type: string,\n category: ReminderMessage['category'],\n priority: ReminderMessage['priority'],\n content: string,\n timestamp: number,\n ): ReminderMessage {\n return {\n role: 'system',\n content: `<system-reminder>\\n${content}\\n</system-reminder>`,\n isMeta: true,\n timestamp,\n type,\n priority,\n category,\n }\n }\n\n public clearTodoReminders(agentId?: string): void {\n const agentKey = agentId || 'default'\n for (const key of this.sessionState.remindersSent) {\n if (key.startsWith(`todo_updated_${agentKey}_`)) {\n this.sessionState.remindersSent.delete(key)\n }\n }\n }\n\n public addEventListener(\n event: string,\n callback: (context: unknown) => void,\n ): void {\n if (!this.eventDispatcher.has(event)) {\n this.eventDispatcher.set(event, [])\n }\n this.eventDispatcher.get(event)!.push(callback)\n }\n\n public emitEvent(event: string, context: unknown): void {\n const listeners = this.eventDispatcher.get(event) || []\n for (const callback of listeners) {\n try {\n callback(context)\n } catch (error) {\n logError(error)\n debugLogger.warn('SYSTEM_REMINDER_LISTENER_ERROR', {\n event,\n error: error instanceof Error ? error.message : String(error),\n })\n }\n }\n }\n\n public createMentionReminder(params: MentionReminderParams): void {\n cacheMentionReminder({\n sessionState: this.sessionState,\n reminderCache: this.reminderCache,\n params,\n createReminderMessage: (type, category, priority, content, timestamp) =>\n this.createReminderMessage(\n type,\n category,\n priority,\n content,\n timestamp,\n ),\n })\n }\n\n public resetSession(): void {\n const preservedConfig = { ...this.sessionState.config }\n this.sessionState.lastTodoUpdate = 0\n this.sessionState.lastFileAccess = 0\n this.sessionState.sessionStartTime = Date.now()\n this.sessionState.remindersSent = new Set()\n this.sessionState.contextPresent = false\n this.sessionState.reminderCount = 0\n this.sessionState.config = preservedConfig\n this.reminderCache.clear()\n }\n\n public updateConfig(config: Partial<ReminderConfig>): void {\n this.sessionState.config = { ...this.sessionState.config, ...config }\n }\n\n public getSessionState(): SessionReminderState {\n return { ...this.sessionState }\n }\n}\n", "import { SystemReminderService } from './service'\n\nexport type {\n ReminderMessage,\n ReminderConfig,\n SessionReminderState,\n} from './types'\n\nexport const systemReminderService = new SystemReminderService()\n\nexport const generateSystemReminders = (\n hasContext: boolean = false,\n agentId?: string,\n) => systemReminderService.generateReminders(hasContext, agentId)\n\nexport const generateFileChangeReminder = (context: unknown) =>\n systemReminderService.generateFileChangeReminder(context)\n\nexport const emitReminderEvent = (event: string, context: unknown) =>\n systemReminderService.emitEvent(event, context)\n\nexport const resetReminderSession = () => systemReminderService.resetSession()\nexport const getReminderSessionState = () =>\n systemReminderService.getSessionState()\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,7 +1,4 @@
1
- import { createRequire as __kodeCreateRequire } from "node:module";
2
- const require = __kodeCreateRequire(import.meta.url);
3
-
4
- // src/utils/session/sessionPlugins.ts
1
+ // packages/core/src/utils/sessionPlugins.ts
5
2
  var sessionPlugins = [];
6
3
  function setSessionPlugins(next) {
7
4
  sessionPlugins = next;