newcraw 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/dist/REPL-DECTPCL5.js +50 -0
  2. package/dist/{acp-J4WDYGRX.js → acp-HA476EHW.js} +69 -40
  3. package/dist/acp-HA476EHW.js.map +7 -0
  4. package/dist/{agentsValidate-UBOER2IN.js → agentsValidate-EDPFUUMG.js} +13 -10
  5. package/dist/{agentsValidate-UBOER2IN.js.map → agentsValidate-EDPFUUMG.js.map} +1 -1
  6. package/dist/{ask-MGUO3L35.js → ask-5SP4YYRD.js} +62 -52
  7. package/dist/ask-5SP4YYRD.js.map +7 -0
  8. package/dist/{autoUpdater-2GS6LRPK.js → autoUpdater-FFMM2DR7.js} +5 -4
  9. package/dist/chunk-2BVCVKKB.js +135 -0
  10. package/dist/chunk-2BVCVKKB.js.map +7 -0
  11. package/dist/{chunk-2C43OXE7.js → chunk-2JCTO2EY.js} +38 -59
  12. package/dist/chunk-2JCTO2EY.js.map +7 -0
  13. package/dist/{chunk-OJIMOLIC.js → chunk-3CKC4ABU.js} +3631 -7464
  14. package/dist/chunk-3CKC4ABU.js.map +7 -0
  15. package/dist/chunk-ARCEUG3V.js +88 -0
  16. package/dist/chunk-ARCEUG3V.js.map +7 -0
  17. package/dist/{chunk-RUXIBQ3B.js → chunk-BJYXLCRS.js} +4 -4
  18. package/dist/{chunk-VKI7ORIO.js → chunk-BMKE6FT5.js} +37 -18
  19. package/dist/{chunk-VKI7ORIO.js.map → chunk-BMKE6FT5.js.map} +1 -1
  20. package/dist/chunk-BQCOSNM3.js +93 -0
  21. package/dist/chunk-BQCOSNM3.js.map +7 -0
  22. package/dist/chunk-CHB5K4GI.js +107 -0
  23. package/dist/chunk-CHB5K4GI.js.map +7 -0
  24. package/dist/chunk-D4OZACS2.js +35 -0
  25. package/dist/chunk-EHQ2M5B4.js +166 -0
  26. package/dist/{chunk-ZYSVG4X3.js.map → chunk-EHQ2M5B4.js.map} +2 -2
  27. package/dist/chunk-EUBZGAIN.js +372 -0
  28. package/dist/chunk-EUBZGAIN.js.map +7 -0
  29. package/dist/{chunk-UYRR6F5S.js → chunk-FIMCETCB.js} +9 -3
  30. package/dist/{chunk-UYRR6F5S.js.map → chunk-FIMCETCB.js.map} +1 -1
  31. package/dist/{chunk-DEF3KFP7.js → chunk-GVLJUD6R.js} +4 -2
  32. package/dist/{chunk-DEF3KFP7.js.map → chunk-GVLJUD6R.js.map} +1 -1
  33. package/dist/chunk-HLBLZKZH.js +45 -0
  34. package/dist/chunk-HLBLZKZH.js.map +7 -0
  35. package/dist/{chunk-XS6PU75S.js → chunk-IVWPPTDM.js} +1 -1
  36. package/dist/{chunk-A7X6OCZE.js → chunk-IXFBUXQW.js} +1 -1
  37. package/dist/{chunk-HSJ6HYAO.js → chunk-IZZTKEZH.js} +18 -10
  38. package/dist/chunk-IZZTKEZH.js.map +7 -0
  39. package/dist/{chunk-2EFL22PV.js → chunk-JI4HCLK7.js} +7 -3
  40. package/dist/chunk-JI4HCLK7.js.map +7 -0
  41. package/dist/chunk-JLVECHVJ.js +36 -0
  42. package/dist/chunk-JLVECHVJ.js.map +7 -0
  43. package/dist/{chunk-XXU2NVOE.js → chunk-KJTPUTU7.js} +30 -6
  44. package/dist/chunk-KJTPUTU7.js.map +7 -0
  45. package/dist/{chunk-V5U6BHT2.js → chunk-KS646CDL.js} +7 -3
  46. package/dist/{chunk-V5U6BHT2.js.map → chunk-KS646CDL.js.map} +1 -1
  47. package/dist/{chunk-53A4JHFW.js → chunk-MJ3MLGVB.js} +23 -4
  48. package/dist/chunk-MJ3MLGVB.js.map +7 -0
  49. package/dist/chunk-MJLWBVZP.js +822 -0
  50. package/dist/chunk-MJLWBVZP.js.map +7 -0
  51. package/dist/chunk-MMF5RMLU.js +65 -0
  52. package/dist/chunk-MMF5RMLU.js.map +7 -0
  53. package/dist/{chunk-QH2M65BR.js → chunk-MUW3J7CP.js} +7 -3
  54. package/dist/{chunk-QH2M65BR.js.map → chunk-MUW3J7CP.js.map} +1 -1
  55. package/dist/{chunk-3LMXSKZ7.js → chunk-NFXLN6FJ.js} +1 -1
  56. package/dist/chunk-NT7RDVDA.js +33 -0
  57. package/dist/{chunk-KQSHIOZK.js.map → chunk-NT7RDVDA.js.map} +1 -1
  58. package/dist/{chunk-OZHBEG7U.js → chunk-O4EKE3YR.js} +15 -5
  59. package/dist/{chunk-OZHBEG7U.js.map → chunk-O4EKE3YR.js.map} +1 -1
  60. package/dist/chunk-Q2OBTLBI.js +5473 -0
  61. package/dist/chunk-Q2OBTLBI.js.map +7 -0
  62. package/dist/{chunk-WWDVA4NV.js → chunk-QJ7MQIHN.js} +22 -6
  63. package/dist/{chunk-WWDVA4NV.js.map → chunk-QJ7MQIHN.js.map} +1 -1
  64. package/dist/{chunk-N5OHRWG2.js → chunk-QSRXXZO7.js} +4 -2
  65. package/dist/{chunk-N5OHRWG2.js.map → chunk-QSRXXZO7.js.map} +1 -1
  66. package/dist/{chunk-GZTCXXSS.js → chunk-QT5GS374.js} +57 -46
  67. package/dist/{chunk-GZTCXXSS.js.map → chunk-QT5GS374.js.map} +1 -1
  68. package/dist/chunk-QX5Y5CE5.js +683 -0
  69. package/dist/{chunk-F3COCCAE.js.map → chunk-QX5Y5CE5.js.map} +1 -1
  70. package/dist/{chunk-IIFUDVGS.js → chunk-U6IF5D3J.js} +310 -177
  71. package/dist/chunk-U6IF5D3J.js.map +7 -0
  72. package/dist/{chunk-VQSCECTS.js → chunk-UPRKGNBR.js} +6 -4
  73. package/dist/{chunk-VQSCECTS.js.map → chunk-UPRKGNBR.js.map} +1 -1
  74. package/dist/chunk-UUCRNFMH.js +62 -0
  75. package/dist/chunk-UUCRNFMH.js.map +7 -0
  76. package/dist/chunk-UYWZQVH5.js +35 -0
  77. package/dist/chunk-UYWZQVH5.js.map +7 -0
  78. package/dist/{chunk-XMGUQHMF.js → chunk-VSSVN6WG.js} +11 -1
  79. package/dist/chunk-VSSVN6WG.js.map +7 -0
  80. package/dist/{chunk-VHS2MZQS.js → chunk-W7Q3VYAB.js} +9 -6
  81. package/dist/{chunk-VHS2MZQS.js.map → chunk-W7Q3VYAB.js.map} +1 -1
  82. package/dist/{chunk-JWXQNBBA.js → chunk-WAXMRSVR.js} +7 -1
  83. package/dist/{chunk-JWXQNBBA.js.map → chunk-WAXMRSVR.js.map} +1 -1
  84. package/dist/{chunk-BWYKUDJR.js → chunk-X3NER6FY.js} +14 -8
  85. package/dist/{chunk-BWYKUDJR.js.map → chunk-X3NER6FY.js.map} +1 -1
  86. package/dist/{chunk-IM33F5CM.js → chunk-XYQZLDRB.js} +1668 -1623
  87. package/dist/chunk-XYQZLDRB.js.map +7 -0
  88. package/dist/{chunk-LOIZNQOU.js → chunk-ZM5FMRLS.js} +9 -3
  89. package/dist/{chunk-LOIZNQOU.js.map → chunk-ZM5FMRLS.js.map} +1 -1
  90. package/dist/{chunk-755HIAI3.js → chunk-ZMO4E7IW.js} +3 -42
  91. package/dist/chunk-ZMO4E7IW.js.map +7 -0
  92. package/dist/{cli-KZGF3FV5.js → cli-4KO6TA5J.js} +251 -485
  93. package/dist/cli-4KO6TA5J.js.map +7 -0
  94. package/dist/commands-JSY7CGSU.js +54 -0
  95. package/dist/{config-GTJWCNPF.js → config-DQEFVW3Y.js} +9 -6
  96. package/dist/{context-WF3TTXQU.js → context-HVQCTO5R.js} +8 -7
  97. package/dist/{costTracker-2G3ZI2JF.js → costTracker-VSWW7SRT.js} +3 -2
  98. package/dist/{customCommands-QOWK57EX.js → customCommands-XCINU5TG.js} +6 -5
  99. package/dist/{env-37BAP7QF.js → env-ZOPEXWMF.js} +10 -7
  100. package/dist/{gateway-IZYO6YFJ.js → gateway-SUXSILQL.js} +542 -96
  101. package/dist/gateway-SUXSILQL.js.map +7 -0
  102. package/dist/identity-3KZQQVBG.js +16 -0
  103. package/dist/index.js +8 -6
  104. package/dist/index.js.map +1 -1
  105. package/dist/{kodeAgentSessionId-KTGFX2BE.js → kodeAgentSessionId-4SH24DVH.js} +1 -1
  106. package/dist/{kodeAgentSessionLoad-6F7SJXBC.js → kodeAgentSessionLoad-HB3BYVNG.js} +6 -5
  107. package/dist/{kodeAgentSessionResume-UEEDRJ3N.js → kodeAgentSessionResume-IGSZZY3G.js} +6 -5
  108. package/dist/{kodeAgentStreamJson-VIXFTYL5.js → kodeAgentStreamJson-4ZKIWKS3.js} +4 -2
  109. package/dist/{kodeAgentStreamJsonSession-XC3IPREZ.js → kodeAgentStreamJsonSession-4L76UC75.js} +15 -4
  110. package/dist/kodeAgentStreamJsonSession-4L76UC75.js.map +7 -0
  111. package/dist/{kodeAgentStructuredStdio-SI5C7AAD.js → kodeAgentStructuredStdio-5DCUC6V6.js} +3 -3
  112. package/dist/{kodeHooks-V36SHCTC.js → kodeHooks-H6DMC3XX.js} +6 -5
  113. package/dist/{llm-CYUDKJNR.js → llm-OJZ6DZVC.js} +306 -60
  114. package/dist/llm-OJZ6DZVC.js.map +7 -0
  115. package/dist/{llmLazy-IXVVBRTN.js → llmLazy-TDLZZDPL.js} +2 -2
  116. package/dist/{loader-OEJ6C3TN.js → loader-MOVYZ76M.js} +6 -5
  117. package/dist/{mcp-KE3SILMX.js → mcp-DUYSIR5L.js} +10 -9
  118. package/dist/{mentionProcessor-GAU2WAYB.js → mentionProcessor-EKVLXJN4.js} +14 -7
  119. package/dist/{mentionProcessor-GAU2WAYB.js.map → mentionProcessor-EKVLXJN4.js.map} +1 -1
  120. package/dist/{messages-WCSGGSEU.js → messages-23ICFVMC.js} +2 -2
  121. package/dist/{model-4TQIV5J2.js → model-FUBCTRTV.js} +10 -7
  122. package/dist/{openai-KTZV6F7N.js → openai-SMYIAIO4.js} +8 -7
  123. package/dist/{outputStyles-WX5RYQOA.js → outputStyles-HBOYJFBE.js} +6 -5
  124. package/dist/{pluginRuntime-JXMJZ2LC.js → pluginRuntime-ATZMDZA7.js} +11 -8
  125. package/dist/{pluginRuntime-JXMJZ2LC.js.map → pluginRuntime-ATZMDZA7.js.map} +1 -1
  126. package/dist/{pluginValidation-JNQZYLUP.js → pluginValidation-7CGOMT6F.js} +8 -7
  127. package/dist/prompts-MFESKNYZ.js +58 -0
  128. package/dist/query-BFEFOX4S.js +58 -0
  129. package/dist/{responsesStreaming-2AIT6GHG.js → responsesStreaming-JORGEFQC.js} +1 -1
  130. package/dist/{ripgrep-KDPQAMB2.js → ripgrep-KNJBCJIQ.js} +5 -4
  131. package/dist/sandbox-P3FR4G4D.js +63 -0
  132. package/dist/{skillMarketplace-IXAGP3Q2.js → skillMarketplace-PCMKVV4O.js} +5 -4
  133. package/dist/{state-MSCYLB6Y.js → state-XBYIQ7R4.js} +6 -3
  134. package/dist/structuredOutput-KAVFUV2Z.js +9 -0
  135. package/dist/theme-4ZSXUILR.js +15 -0
  136. package/dist/thinking-TTNUZUB3.js +18 -0
  137. package/dist/{toolPermissionContext-I3IXPVED.js → toolPermissionContext-JCQ5MFUT.js} +1 -1
  138. package/dist/toolPermissionContext-JCQ5MFUT.js.map +7 -0
  139. package/dist/toolPermissionContextState-R6ZGMKP6.js +24 -0
  140. package/dist/toolPermissionContextState-R6ZGMKP6.js.map +7 -0
  141. package/dist/{toolPermissionSettings-EUZKGZU2.js → toolPermissionSettings-GMEYTJEA.js} +9 -8
  142. package/dist/toolPermissionSettings-GMEYTJEA.js.map +7 -0
  143. package/dist/tools-7FVKB7BG.js +55 -0
  144. package/dist/tools-7FVKB7BG.js.map +7 -0
  145. package/dist/{userInput-LJL4CVOB.js → userInput-SZEUY5J6.js} +49 -34
  146. package/dist/{userInput-LJL4CVOB.js.map → userInput-SZEUY5J6.js.map} +1 -1
  147. package/dist/{uuid-VA3KVASX.js → uuid-RQH3OZ3W.js} +1 -1
  148. package/dist/uuid-RQH3OZ3W.js.map +7 -0
  149. package/dist/workspace-EP63OB5S.js +21 -0
  150. package/dist/workspace-EP63OB5S.js.map +7 -0
  151. package/package.json +2 -2
  152. package/web/dist/assets/index-XuLVvSQF.js +251 -0
  153. package/web/dist/assets/index-pSid9IlY.css +10 -0
  154. package/web/dist/index.html +2 -2
  155. package/dist/REPL-IAK7ZN2Z.js +0 -42
  156. package/dist/acp-J4WDYGRX.js.map +0 -7
  157. package/dist/ask-MGUO3L35.js.map +0 -7
  158. package/dist/chunk-2C43OXE7.js.map +0 -7
  159. package/dist/chunk-2EFL22PV.js.map +0 -7
  160. package/dist/chunk-53A4JHFW.js.map +0 -7
  161. package/dist/chunk-755HIAI3.js.map +0 -7
  162. package/dist/chunk-AXWJI6N5.js +0 -11
  163. package/dist/chunk-F3COCCAE.js +0 -654
  164. package/dist/chunk-HSJ6HYAO.js.map +0 -7
  165. package/dist/chunk-IIFUDVGS.js.map +0 -7
  166. package/dist/chunk-IM33F5CM.js.map +0 -7
  167. package/dist/chunk-KQSHIOZK.js +0 -24
  168. package/dist/chunk-OJIMOLIC.js.map +0 -7
  169. package/dist/chunk-XMGUQHMF.js.map +0 -7
  170. package/dist/chunk-XXU2NVOE.js.map +0 -7
  171. package/dist/chunk-ZYSVG4X3.js +0 -151
  172. package/dist/cli-KZGF3FV5.js.map +0 -7
  173. package/dist/commands-AVEBLFVS.js +0 -46
  174. package/dist/gateway-IZYO6YFJ.js.map +0 -7
  175. package/dist/kodeAgentStreamJsonSession-XC3IPREZ.js.map +0 -7
  176. package/dist/llm-CYUDKJNR.js.map +0 -7
  177. package/dist/prompts-LE6GK75N.js +0 -48
  178. package/dist/query-GGIP6PWG.js +0 -50
  179. package/dist/theme-GAMFOLBW.js +0 -14
  180. package/dist/tools-3HOUIDM3.js +0 -47
  181. package/web/dist/assets/index-COAJqX1Z.css +0 -1
  182. package/web/dist/assets/index-CzS_4LmC.js +0 -179
  183. /package/dist/{REPL-IAK7ZN2Z.js.map → REPL-DECTPCL5.js.map} +0 -0
  184. /package/dist/{autoUpdater-2GS6LRPK.js.map → autoUpdater-FFMM2DR7.js.map} +0 -0
  185. /package/dist/{chunk-RUXIBQ3B.js.map → chunk-BJYXLCRS.js.map} +0 -0
  186. /package/dist/{chunk-AXWJI6N5.js.map → chunk-D4OZACS2.js.map} +0 -0
  187. /package/dist/{chunk-XS6PU75S.js.map → chunk-IVWPPTDM.js.map} +0 -0
  188. /package/dist/{chunk-A7X6OCZE.js.map → chunk-IXFBUXQW.js.map} +0 -0
  189. /package/dist/{chunk-3LMXSKZ7.js.map → chunk-NFXLN6FJ.js.map} +0 -0
  190. /package/dist/{commands-AVEBLFVS.js.map → commands-JSY7CGSU.js.map} +0 -0
  191. /package/dist/{config-GTJWCNPF.js.map → config-DQEFVW3Y.js.map} +0 -0
  192. /package/dist/{context-WF3TTXQU.js.map → context-HVQCTO5R.js.map} +0 -0
  193. /package/dist/{costTracker-2G3ZI2JF.js.map → costTracker-VSWW7SRT.js.map} +0 -0
  194. /package/dist/{customCommands-QOWK57EX.js.map → customCommands-XCINU5TG.js.map} +0 -0
  195. /package/dist/{env-37BAP7QF.js.map → env-ZOPEXWMF.js.map} +0 -0
  196. /package/dist/{kodeAgentSessionId-KTGFX2BE.js.map → identity-3KZQQVBG.js.map} +0 -0
  197. /package/dist/{kodeAgentSessionLoad-6F7SJXBC.js.map → kodeAgentSessionId-4SH24DVH.js.map} +0 -0
  198. /package/dist/{kodeAgentSessionResume-UEEDRJ3N.js.map → kodeAgentSessionLoad-HB3BYVNG.js.map} +0 -0
  199. /package/dist/{kodeAgentStreamJson-VIXFTYL5.js.map → kodeAgentSessionResume-IGSZZY3G.js.map} +0 -0
  200. /package/dist/{kodeAgentStructuredStdio-SI5C7AAD.js.map → kodeAgentStreamJson-4ZKIWKS3.js.map} +0 -0
  201. /package/dist/{kodeHooks-V36SHCTC.js.map → kodeAgentStructuredStdio-5DCUC6V6.js.map} +0 -0
  202. /package/dist/{llmLazy-IXVVBRTN.js.map → kodeHooks-H6DMC3XX.js.map} +0 -0
  203. /package/dist/{loader-OEJ6C3TN.js.map → llmLazy-TDLZZDPL.js.map} +0 -0
  204. /package/dist/{mcp-KE3SILMX.js.map → loader-MOVYZ76M.js.map} +0 -0
  205. /package/dist/{messages-WCSGGSEU.js.map → mcp-DUYSIR5L.js.map} +0 -0
  206. /package/dist/{model-4TQIV5J2.js.map → messages-23ICFVMC.js.map} +0 -0
  207. /package/dist/{openai-KTZV6F7N.js.map → model-FUBCTRTV.js.map} +0 -0
  208. /package/dist/{outputStyles-WX5RYQOA.js.map → openai-SMYIAIO4.js.map} +0 -0
  209. /package/dist/{pluginValidation-JNQZYLUP.js.map → outputStyles-HBOYJFBE.js.map} +0 -0
  210. /package/dist/{prompts-LE6GK75N.js.map → pluginValidation-7CGOMT6F.js.map} +0 -0
  211. /package/dist/{query-GGIP6PWG.js.map → prompts-MFESKNYZ.js.map} +0 -0
  212. /package/dist/{responsesStreaming-2AIT6GHG.js.map → query-BFEFOX4S.js.map} +0 -0
  213. /package/dist/{ripgrep-KDPQAMB2.js.map → responsesStreaming-JORGEFQC.js.map} +0 -0
  214. /package/dist/{skillMarketplace-IXAGP3Q2.js.map → ripgrep-KNJBCJIQ.js.map} +0 -0
  215. /package/dist/{state-MSCYLB6Y.js.map → sandbox-P3FR4G4D.js.map} +0 -0
  216. /package/dist/{theme-GAMFOLBW.js.map → skillMarketplace-PCMKVV4O.js.map} +0 -0
  217. /package/dist/{toolPermissionContext-I3IXPVED.js.map → state-XBYIQ7R4.js.map} +0 -0
  218. /package/dist/{toolPermissionSettings-EUZKGZU2.js.map → structuredOutput-KAVFUV2Z.js.map} +0 -0
  219. /package/dist/{tools-3HOUIDM3.js.map → theme-4ZSXUILR.js.map} +0 -0
  220. /package/dist/{uuid-VA3KVASX.js.map → thinking-TTNUZUB3.js.map} +0 -0
@@ -0,0 +1,372 @@
1
+ import { createRequire as __newcrawCreateRequire } from "node:module";
2
+ const require = __newcrawCreateRequire(import.meta.url);
3
+ import {
4
+ Onboarding,
5
+ Select,
6
+ clearTerminal,
7
+ grantReadPermissionForOriginalDir,
8
+ useExitOnCtrlCD
9
+ } from "./chunk-Q2OBTLBI.js";
10
+ import {
11
+ getMcprcServerStatus
12
+ } from "./chunk-QJ7MQIHN.js";
13
+ import {
14
+ getTheme
15
+ } from "./chunk-GVLJUD6R.js";
16
+ import {
17
+ checkHasTrustDialogAccepted,
18
+ getCurrentProjectConfig,
19
+ getGlobalConfig,
20
+ getProjectMcpServerDefinitions,
21
+ init_config,
22
+ saveCurrentProjectConfig,
23
+ saveGlobalConfig
24
+ } from "./chunk-U6IF5D3J.js";
25
+ import {
26
+ getCwd,
27
+ init_state
28
+ } from "./chunk-XYQZLDRB.js";
29
+ import {
30
+ PRODUCT_COMMAND,
31
+ PRODUCT_NAME,
32
+ init_product
33
+ } from "./chunk-UYWZQVH5.js";
34
+ import {
35
+ MACRO,
36
+ init_macros
37
+ } from "./chunk-EHQ2M5B4.js";
38
+
39
+ // src/entrypoints/cli/setupScreens.tsx
40
+ init_macros();
41
+ import React6 from "react";
42
+
43
+ // src/ui/components/TrustDialog.tsx
44
+ import React from "react";
45
+ import { Box, Text, useInput } from "ink";
46
+ init_config();
47
+ init_product();
48
+ init_state();
49
+ import { homedir } from "os";
50
+ function TrustDialog({ onDone }) {
51
+ const theme = getTheme();
52
+ React.useEffect(() => {
53
+ }, []);
54
+ function onChange(value) {
55
+ const config = getCurrentProjectConfig();
56
+ switch (value) {
57
+ case "yes": {
58
+ const isHomeDir = homedir() === getCwd();
59
+ if (!isHomeDir) {
60
+ saveCurrentProjectConfig({
61
+ ...config,
62
+ hasTrustDialogAccepted: true
63
+ });
64
+ }
65
+ onDone();
66
+ break;
67
+ }
68
+ case "no": {
69
+ process.exit(1);
70
+ break;
71
+ }
72
+ }
73
+ }
74
+ const exitState = useExitOnCtrlCD(() => process.exit(0));
75
+ useInput((_input, key) => {
76
+ if (key.escape) {
77
+ process.exit(0);
78
+ return;
79
+ }
80
+ });
81
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
82
+ Box,
83
+ {
84
+ flexDirection: "column",
85
+ gap: 1,
86
+ padding: 1,
87
+ borderStyle: "round",
88
+ borderColor: theme.warning
89
+ },
90
+ /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.warning }, "Do you trust the files in this folder?"),
91
+ /* @__PURE__ */ React.createElement(Text, { bold: true }, process.cwd()),
92
+ /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", gap: 1 }, /* @__PURE__ */ React.createElement(Text, null, PRODUCT_NAME, " may read files in this folder. Reading untrusted files may lead to ", PRODUCT_NAME, " to behave in an unexpected ways."), /* @__PURE__ */ React.createElement(Text, null, "With your permission ", PRODUCT_NAME, " may execute files in this folder. Executing untrusted code is unsafe.")),
93
+ /* @__PURE__ */ React.createElement(
94
+ Select,
95
+ {
96
+ options: [
97
+ { label: "Yes, proceed", value: "yes" },
98
+ { label: "No, exit", value: "no" }
99
+ ],
100
+ onChange: (value) => onChange(value)
101
+ }
102
+ )
103
+ ), /* @__PURE__ */ React.createElement(Box, { marginLeft: 3 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, exitState.pending ? /* @__PURE__ */ React.createElement(React.Fragment, null, "Press ", exitState.keyName, " again to exit") : /* @__PURE__ */ React.createElement(React.Fragment, null, "Enter to confirm \xB7 Esc to exit"))));
104
+ }
105
+
106
+ // src/entrypoints/cli/setupScreens.tsx
107
+ init_config();
108
+
109
+ // src/ui/screens/MCPServerApproval.tsx
110
+ import React5 from "react";
111
+ import { render } from "ink";
112
+
113
+ // src/ui/components/MCPServerMultiselectDialog.tsx
114
+ import React3 from "react";
115
+ import { Box as Box2, Text as Text3, useInput as useInput2 } from "ink";
116
+ init_config();
117
+ import { MultiSelect } from "@inkjs/ui";
118
+ import { partition } from "lodash-es";
119
+
120
+ // src/ui/components/MCPServerDialogCopy.tsx
121
+ init_product();
122
+ import React2 from "react";
123
+ import { Text as Text2 } from "ink";
124
+ import Link from "ink-link";
125
+ function MCPServerDialogCopy() {
126
+ return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(Text2, null, "MCP servers provide additional functionality to ", PRODUCT_NAME, ". They may execute code, make network requests, or access system resources via tool calls. All tool calls will require your explicit approval before execution. For more information, see", " ", /* @__PURE__ */ React2.createElement(Link, { url: "https://github.com/YOUR_USERNAME/newcraw/blob/main/docs/mcp.md" }, "MCP documentation")), /* @__PURE__ */ React2.createElement(Text2, { dimColor: true }, "Remember: You can always change these choices later by running `", PRODUCT_COMMAND, " mcp reset-project-choices`"));
127
+ }
128
+
129
+ // src/ui/components/MCPServerMultiselectDialog.tsx
130
+ function MCPServerMultiselectDialog({
131
+ serverNames,
132
+ onDone
133
+ }) {
134
+ const theme = getTheme();
135
+ function onSubmit(selectedServers) {
136
+ const config = getCurrentProjectConfig();
137
+ if (!config.approvedMcprcServers) {
138
+ config.approvedMcprcServers = [];
139
+ }
140
+ if (!config.rejectedMcprcServers) {
141
+ config.rejectedMcprcServers = [];
142
+ }
143
+ const [approvedServers, rejectedServers] = partition(
144
+ serverNames,
145
+ (server) => selectedServers.includes(server)
146
+ );
147
+ config.approvedMcprcServers.push(...approvedServers);
148
+ config.rejectedMcprcServers.push(...rejectedServers);
149
+ saveCurrentProjectConfig(config);
150
+ onDone();
151
+ }
152
+ const exitState = useExitOnCtrlCD(() => process.exit());
153
+ useInput2((_input, key) => {
154
+ if (key.escape) {
155
+ const config = getCurrentProjectConfig();
156
+ if (!config.rejectedMcprcServers) {
157
+ config.rejectedMcprcServers = [];
158
+ }
159
+ for (const server of serverNames) {
160
+ if (!config.rejectedMcprcServers.includes(server)) {
161
+ config.rejectedMcprcServers.push(server);
162
+ }
163
+ }
164
+ saveCurrentProjectConfig(config);
165
+ onDone();
166
+ return;
167
+ }
168
+ });
169
+ return /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(
170
+ Box2,
171
+ {
172
+ flexDirection: "column",
173
+ gap: 1,
174
+ padding: 1,
175
+ borderStyle: "round",
176
+ borderColor: theme.warning
177
+ },
178
+ /* @__PURE__ */ React3.createElement(Text3, { bold: true, color: theme.warning }, "New MCP Servers Detected"),
179
+ /* @__PURE__ */ React3.createElement(Text3, null, "This project contains an MCP config file (.mcp.json or .mcprc) with", " ", serverNames.length, " MCP servers that require your approval."),
180
+ /* @__PURE__ */ React3.createElement(MCPServerDialogCopy, null),
181
+ /* @__PURE__ */ React3.createElement(Text3, null, "Please select the servers you want to enable:"),
182
+ /* @__PURE__ */ React3.createElement(
183
+ MultiSelect,
184
+ {
185
+ options: serverNames.map((server) => ({
186
+ label: server,
187
+ value: server
188
+ })),
189
+ defaultValue: serverNames,
190
+ onSubmit
191
+ }
192
+ )
193
+ ), /* @__PURE__ */ React3.createElement(Box2, { marginLeft: 3 }, /* @__PURE__ */ React3.createElement(Text3, { dimColor: true }, exitState.pending ? /* @__PURE__ */ React3.createElement(React3.Fragment, null, "Press ", exitState.keyName, " again to exit") : /* @__PURE__ */ React3.createElement(React3.Fragment, null, "Space to select \xB7 Enter to confirm \xB7 Esc to reject all"))));
194
+ }
195
+
196
+ // src/ui/components/MCPServerApprovalDialog.tsx
197
+ import React4 from "react";
198
+ import { Box as Box3, Text as Text4, useInput as useInput3 } from "ink";
199
+ init_config();
200
+ function MCPServerApprovalDialog({
201
+ serverName,
202
+ onDone
203
+ }) {
204
+ const theme = getTheme();
205
+ function onChange(value) {
206
+ const config = getCurrentProjectConfig();
207
+ switch (value) {
208
+ case "yes": {
209
+ if (!config.approvedMcprcServers) {
210
+ config.approvedMcprcServers = [];
211
+ }
212
+ if (!config.approvedMcprcServers.includes(serverName)) {
213
+ config.approvedMcprcServers.push(serverName);
214
+ }
215
+ saveCurrentProjectConfig(config);
216
+ onDone();
217
+ break;
218
+ }
219
+ case "no": {
220
+ if (!config.rejectedMcprcServers) {
221
+ config.rejectedMcprcServers = [];
222
+ }
223
+ if (!config.rejectedMcprcServers.includes(serverName)) {
224
+ config.rejectedMcprcServers.push(serverName);
225
+ }
226
+ saveCurrentProjectConfig(config);
227
+ onDone();
228
+ break;
229
+ }
230
+ }
231
+ }
232
+ const exitState = useExitOnCtrlCD(() => process.exit(0));
233
+ useInput3((_input, key) => {
234
+ if (key.escape) {
235
+ onDone();
236
+ return;
237
+ }
238
+ });
239
+ return /* @__PURE__ */ React4.createElement(React4.Fragment, null, /* @__PURE__ */ React4.createElement(
240
+ Box3,
241
+ {
242
+ flexDirection: "column",
243
+ gap: 1,
244
+ padding: 1,
245
+ borderStyle: "round",
246
+ borderColor: theme.warning
247
+ },
248
+ /* @__PURE__ */ React4.createElement(Text4, { bold: true, color: theme.warning }, "New MCP Server Detected"),
249
+ /* @__PURE__ */ React4.createElement(Text4, null, "This project contains an MCP config file (.mcp.json or .mcprc) with an MCP server that requires your approval:"),
250
+ /* @__PURE__ */ React4.createElement(Text4, { bold: true }, serverName),
251
+ /* @__PURE__ */ React4.createElement(MCPServerDialogCopy, null),
252
+ /* @__PURE__ */ React4.createElement(Text4, null, "Do you want to approve this MCP server?"),
253
+ /* @__PURE__ */ React4.createElement(
254
+ Select,
255
+ {
256
+ options: [
257
+ { label: "Yes, approve this server", value: "yes" },
258
+ { label: "No, reject this server", value: "no" }
259
+ ],
260
+ onChange: (value) => onChange(value)
261
+ }
262
+ )
263
+ ), /* @__PURE__ */ React4.createElement(Box3, { marginLeft: 3 }, /* @__PURE__ */ React4.createElement(Text4, { dimColor: true }, exitState.pending ? /* @__PURE__ */ React4.createElement(React4.Fragment, null, "Press ", exitState.keyName, " again to exit") : /* @__PURE__ */ React4.createElement(React4.Fragment, null, "Enter to confirm \xB7 Esc to reject"))));
264
+ }
265
+
266
+ // src/ui/screens/MCPServerApproval.tsx
267
+ init_config();
268
+ async function handleMcprcServerApprovals() {
269
+ const { servers } = getProjectMcpServerDefinitions();
270
+ const pendingServers = Object.keys(servers).filter(
271
+ (serverName) => getMcprcServerStatus(serverName) === "pending"
272
+ );
273
+ if (pendingServers.length === 0) {
274
+ return;
275
+ }
276
+ await new Promise((resolve) => {
277
+ const clearScreenAndResolve = () => {
278
+ process.stdout.write("\x1B[2J\x1B[3J\x1B[H", () => {
279
+ resolve();
280
+ });
281
+ };
282
+ if (pendingServers.length === 1 && pendingServers[0] !== void 0) {
283
+ const result = render(
284
+ /* @__PURE__ */ React5.createElement(
285
+ MCPServerApprovalDialog,
286
+ {
287
+ serverName: pendingServers[0],
288
+ onDone: () => {
289
+ result.unmount?.();
290
+ clearScreenAndResolve();
291
+ }
292
+ }
293
+ ),
294
+ { exitOnCtrlC: false }
295
+ );
296
+ } else {
297
+ const result = render(
298
+ /* @__PURE__ */ React5.createElement(
299
+ MCPServerMultiselectDialog,
300
+ {
301
+ serverNames: pendingServers,
302
+ onDone: () => {
303
+ result.unmount?.();
304
+ clearScreenAndResolve();
305
+ }
306
+ }
307
+ ),
308
+ { exitOnCtrlC: false }
309
+ );
310
+ }
311
+ });
312
+ }
313
+
314
+ // src/entrypoints/cli/setupScreens.tsx
315
+ function completeOnboarding() {
316
+ const config = getGlobalConfig();
317
+ saveGlobalConfig({
318
+ ...config,
319
+ hasCompletedOnboarding: true,
320
+ lastOnboardingVersion: MACRO.VERSION
321
+ });
322
+ }
323
+ async function showSetupScreens(safeMode, print) {
324
+ if (process.env.NODE_ENV === "test") {
325
+ return;
326
+ }
327
+ const config = getGlobalConfig();
328
+ if (!config.theme || !config.hasCompletedOnboarding) {
329
+ await clearTerminal();
330
+ const { render: render2 } = await import("ink");
331
+ await new Promise((resolve) => {
332
+ render2(
333
+ /* @__PURE__ */ React6.createElement(
334
+ Onboarding,
335
+ {
336
+ onDone: async () => {
337
+ completeOnboarding();
338
+ await clearTerminal();
339
+ resolve();
340
+ }
341
+ }
342
+ ),
343
+ {
344
+ exitOnCtrlC: false
345
+ }
346
+ );
347
+ });
348
+ }
349
+ if (!print) {
350
+ if (safeMode) {
351
+ if (!checkHasTrustDialogAccepted()) {
352
+ await new Promise((resolve) => {
353
+ const onDone = () => {
354
+ grantReadPermissionForOriginalDir();
355
+ resolve();
356
+ };
357
+ (async () => {
358
+ const { render: render2 } = await import("ink");
359
+ render2(/* @__PURE__ */ React6.createElement(TrustDialog, { onDone }), {
360
+ exitOnCtrlC: false
361
+ });
362
+ })();
363
+ });
364
+ }
365
+ }
366
+ await handleMcprcServerApprovals();
367
+ }
368
+ }
369
+
370
+ export {
371
+ showSetupScreens
372
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/entrypoints/cli/setupScreens.tsx", "../src/ui/components/TrustDialog.tsx", "../src/ui/screens/MCPServerApproval.tsx", "../src/ui/components/MCPServerMultiselectDialog.tsx", "../src/ui/components/MCPServerDialogCopy.tsx", "../src/ui/components/MCPServerApprovalDialog.tsx"],
4
+ "sourcesContent": ["import React from 'react'\r\n\r\nimport { MACRO } from '@constants/macros'\r\nimport { Onboarding } from '@components/Onboarding'\r\nimport { TrustDialog } from '@components/TrustDialog'\r\nimport {\r\n checkHasTrustDialogAccepted,\r\n getGlobalConfig,\r\n saveGlobalConfig,\r\n} from '@utils/config'\r\nimport { clearTerminal } from '@utils/terminal'\r\nimport { grantReadPermissionForOriginalDir } from '@utils/permissions/filesystem'\r\nimport { handleMcprcServerApprovals } from '@screens/MCPServerApproval'\r\n\r\nexport function completeOnboarding(): void {\r\n const config = getGlobalConfig()\r\n saveGlobalConfig({\r\n ...config,\r\n hasCompletedOnboarding: true,\r\n lastOnboardingVersion: MACRO.VERSION,\r\n })\r\n}\r\n\r\nexport async function showSetupScreens(\r\n safeMode?: boolean,\r\n print?: boolean,\r\n): Promise<void> {\r\n if (process.env.NODE_ENV === 'test') {\r\n return\r\n }\r\n\r\n const config = getGlobalConfig()\r\n if (!config.theme || !config.hasCompletedOnboarding) {\r\n await clearTerminal()\r\n const { render } = await import('ink')\r\n await new Promise<void>(resolve => {\r\n render(\r\n <Onboarding\r\n onDone={async () => {\r\n completeOnboarding()\r\n await clearTerminal()\r\n resolve()\r\n }}\r\n />,\r\n {\r\n exitOnCtrlC: false,\r\n },\r\n )\r\n })\r\n }\r\n\r\n if (!print) {\r\n if (safeMode) {\r\n if (!checkHasTrustDialogAccepted()) {\r\n await new Promise<void>(resolve => {\r\n const onDone = () => {\r\n grantReadPermissionForOriginalDir()\r\n resolve()\r\n }\r\n ;(async () => {\r\n const { render } = await import('ink')\r\n render(<TrustDialog onDone={onDone} />, {\r\n exitOnCtrlC: false,\r\n })\r\n })()\r\n })\r\n }\r\n }\r\n\r\n await handleMcprcServerApprovals()\r\n }\r\n}\r\n", "import React from 'react'\r\nimport { Box, Text, useInput } from 'ink'\r\nimport { getTheme } from '@utils/theme'\r\nimport { Select } from './custom-select/select'\r\nimport {\r\n saveCurrentProjectConfig,\r\n getCurrentProjectConfig,\r\n} from '@utils/config'\r\nimport { PRODUCT_NAME } from '@constants/product'\r\nimport { useExitOnCtrlCD } from '@hooks/useExitOnCtrlCD'\r\nimport { homedir } from 'os'\r\nimport { getCwd } from '@utils/state'\r\nimport Link from './Link'\r\n\r\ntype Props = {\r\n onDone(): void\r\n}\r\n\r\nexport function TrustDialog({ onDone }: Props): React.ReactNode {\r\n const theme = getTheme()\r\n React.useEffect(() => {}, [])\r\n\r\n function onChange(value: 'yes' | 'no') {\r\n const config = getCurrentProjectConfig()\r\n switch (value) {\r\n case 'yes': {\r\n const isHomeDir = homedir() === getCwd()\r\n\r\n if (!isHomeDir) {\r\n saveCurrentProjectConfig({\r\n ...config,\r\n hasTrustDialogAccepted: true,\r\n })\r\n }\r\n onDone()\r\n break\r\n }\r\n case 'no': {\r\n process.exit(1)\r\n break\r\n }\r\n }\r\n }\r\n\r\n const exitState = useExitOnCtrlCD(() => process.exit(0))\r\n\r\n useInput((_input, key) => {\r\n if (key.escape) {\r\n process.exit(0)\r\n return\r\n }\r\n })\r\n\r\n return (\r\n <>\r\n <Box\r\n flexDirection=\"column\"\r\n gap={1}\r\n padding={1}\r\n borderStyle=\"round\"\r\n borderColor={theme.warning}\r\n >\r\n <Text bold color={theme.warning}>\r\n Do you trust the files in this folder?\r\n </Text>\r\n <Text bold>{process.cwd()}</Text>\r\n\r\n <Box flexDirection=\"column\" gap={1}>\r\n <Text>\r\n {PRODUCT_NAME} may read files in this folder. Reading untrusted\r\n files may lead to {PRODUCT_NAME} to behave in an unexpected ways.\r\n </Text>\r\n <Text>\r\n With your permission {PRODUCT_NAME} may execute files in this\r\n folder. Executing untrusted code is unsafe.\r\n </Text>\r\n </Box>\r\n\r\n <Select\r\n options={[\r\n { label: 'Yes, proceed', value: 'yes' },\r\n { label: 'No, exit', value: 'no' },\r\n ]}\r\n onChange={value => onChange(value as 'yes' | 'no')}\r\n />\r\n </Box>\r\n <Box marginLeft={3}>\r\n <Text dimColor>\r\n {exitState.pending ? (\r\n <>Press {exitState.keyName} again to exit</>\r\n ) : (\r\n <>Enter to confirm \u00B7 Esc to exit</>\r\n )}\r\n </Text>\r\n </Box>\r\n </>\r\n )\r\n}\r\n", "import React from 'react'\r\nimport { render } from 'ink'\r\nimport { MCPServerMultiselectDialog } from '@components/MCPServerMultiselectDialog'\r\nimport { MCPServerApprovalDialog } from '@components/MCPServerApprovalDialog'\r\nimport { getMcprcServerStatus } from '@services/mcpClient'\r\nimport { getProjectMcpServerDefinitions } from '@utils/config'\r\n\r\nexport async function handleMcprcServerApprovals(): Promise<void> {\r\n const { servers } = getProjectMcpServerDefinitions()\r\n const pendingServers = Object.keys(servers).filter(\r\n serverName => getMcprcServerStatus(serverName) === 'pending',\r\n )\r\n\r\n if (pendingServers.length === 0) {\r\n return\r\n }\r\n\r\n await new Promise<void>(resolve => {\r\n const clearScreenAndResolve = () => {\r\n process.stdout.write('\\x1b[2J\\x1b[3J\\x1b[H', () => {\r\n resolve()\r\n })\r\n }\r\n\r\n if (pendingServers.length === 1 && pendingServers[0] !== undefined) {\r\n const result = render(\r\n <MCPServerApprovalDialog\r\n serverName={pendingServers[0]}\r\n onDone={() => {\r\n result.unmount?.()\r\n clearScreenAndResolve()\r\n }}\r\n />,\r\n { exitOnCtrlC: false },\r\n )\r\n } else {\r\n const result = render(\r\n <MCPServerMultiselectDialog\r\n serverNames={pendingServers}\r\n onDone={() => {\r\n result.unmount?.()\r\n clearScreenAndResolve()\r\n }}\r\n />,\r\n { exitOnCtrlC: false },\r\n )\r\n }\r\n })\r\n}\r\n\r\n", "import React from 'react'\r\nimport { Box, Text, useInput } from 'ink'\r\nimport { getTheme } from '@utils/theme'\r\nimport { MultiSelect } from '@inkjs/ui'\r\nimport {\r\n saveCurrentProjectConfig,\r\n getCurrentProjectConfig,\r\n} from '@utils/config'\r\nimport { partition } from 'lodash-es'\r\nimport { MCPServerDialogCopy } from './MCPServerDialogCopy'\r\nimport { useExitOnCtrlCD } from '@hooks/useExitOnCtrlCD'\r\n\r\ntype Props = {\r\n serverNames: string[]\r\n onDone(): void\r\n}\r\n\r\nexport function MCPServerMultiselectDialog({\r\n serverNames,\r\n onDone,\r\n}: Props): React.ReactNode {\r\n const theme = getTheme()\r\n function onSubmit(selectedServers: string[]) {\r\n const config = getCurrentProjectConfig()\r\n\r\n if (!config.approvedMcprcServers) {\r\n config.approvedMcprcServers = []\r\n }\r\n if (!config.rejectedMcprcServers) {\r\n config.rejectedMcprcServers = []\r\n }\r\n\r\n const [approvedServers, rejectedServers] = partition(serverNames, server =>\r\n selectedServers.includes(server),\r\n )\r\n\r\n config.approvedMcprcServers.push(...approvedServers)\r\n config.rejectedMcprcServers.push(...rejectedServers)\r\n\r\n saveCurrentProjectConfig(config)\r\n onDone()\r\n }\r\n\r\n const exitState = useExitOnCtrlCD(() => process.exit())\r\n\r\n useInput((_input, key) => {\r\n if (key.escape) {\r\n const config = getCurrentProjectConfig()\r\n if (!config.rejectedMcprcServers) {\r\n config.rejectedMcprcServers = []\r\n }\r\n\r\n for (const server of serverNames) {\r\n if (!config.rejectedMcprcServers.includes(server)) {\r\n config.rejectedMcprcServers.push(server)\r\n }\r\n }\r\n\r\n saveCurrentProjectConfig(config)\r\n onDone()\r\n return\r\n }\r\n })\r\n\r\n return (\r\n <>\r\n <Box\r\n flexDirection=\"column\"\r\n gap={1}\r\n padding={1}\r\n borderStyle=\"round\"\r\n borderColor={theme.warning}\r\n >\r\n <Text bold color={theme.warning}>\r\n New MCP Servers Detected\r\n </Text>\r\n <Text>\r\n This project contains an MCP config file (.mcp.json or .mcprc) with{' '}\r\n {serverNames.length} MCP servers that require your approval.\r\n </Text>\r\n <MCPServerDialogCopy />\r\n\r\n <Text>Please select the servers you want to enable:</Text>\r\n\r\n <MultiSelect\r\n options={serverNames.map(server => ({\r\n label: server,\r\n value: server,\r\n }))}\r\n defaultValue={serverNames}\r\n onSubmit={onSubmit}\r\n />\r\n </Box>\r\n <Box marginLeft={3}>\r\n <Text dimColor>\r\n {exitState.pending ? (\r\n <>Press {exitState.keyName} again to exit</>\r\n ) : (\r\n <>Space to select \u00B7 Enter to confirm \u00B7 Esc to reject all</>\r\n )}\r\n </Text>\r\n </Box>\r\n </>\r\n )\r\n}\r\n", "import React from 'react'\r\nimport { Text } from 'ink'\r\nimport Link from 'ink-link'\r\nimport { PRODUCT_NAME, PRODUCT_COMMAND } from '@constants/product'\r\n\r\nexport function MCPServerDialogCopy(): React.ReactNode {\r\n return (\r\n <>\r\n <Text>\r\n MCP servers provide additional functionality to {PRODUCT_NAME}. They may\r\n execute code, make network requests, or access system resources via tool\r\n calls. All tool calls will require your explicit approval before\r\n execution. For more information, see{' '}\r\n <Link url=\"https://github.com/YOUR_USERNAME/newcraw/blob/main/docs/mcp.md\">\r\n MCP documentation\r\n </Link>\r\n </Text>\r\n\r\n <Text dimColor>\r\n Remember: You can always change these choices later by running `\r\n {PRODUCT_COMMAND} mcp reset-project-choices`\r\n </Text>\r\n </>\r\n )\r\n}\r\n", "import React from 'react'\r\nimport { Box, Text, useInput } from 'ink'\r\nimport { getTheme } from '@utils/theme'\r\nimport { Select } from './custom-select/select'\r\nimport {\r\n saveCurrentProjectConfig,\r\n getCurrentProjectConfig,\r\n} from '@utils/config'\r\nimport { MCPServerDialogCopy } from './MCPServerDialogCopy'\r\nimport { useExitOnCtrlCD } from '@hooks/useExitOnCtrlCD'\r\n\r\ntype Props = {\r\n serverName: string\r\n onDone(): void\r\n}\r\n\r\nexport function MCPServerApprovalDialog({\r\n serverName,\r\n onDone,\r\n}: Props): React.ReactNode {\r\n const theme = getTheme()\r\n function onChange(value: 'yes' | 'no') {\r\n const config = getCurrentProjectConfig()\r\n switch (value) {\r\n case 'yes': {\r\n if (!config.approvedMcprcServers) {\r\n config.approvedMcprcServers = []\r\n }\r\n if (!config.approvedMcprcServers.includes(serverName)) {\r\n config.approvedMcprcServers.push(serverName)\r\n }\r\n saveCurrentProjectConfig(config)\r\n onDone()\r\n break\r\n }\r\n case 'no': {\r\n if (!config.rejectedMcprcServers) {\r\n config.rejectedMcprcServers = []\r\n }\r\n if (!config.rejectedMcprcServers.includes(serverName)) {\r\n config.rejectedMcprcServers.push(serverName)\r\n }\r\n saveCurrentProjectConfig(config)\r\n onDone()\r\n break\r\n }\r\n }\r\n }\r\n\r\n const exitState = useExitOnCtrlCD(() => process.exit(0))\r\n\r\n useInput((_input, key) => {\r\n if (key.escape) {\r\n onDone()\r\n return\r\n }\r\n })\r\n\r\n return (\r\n <>\r\n <Box\r\n flexDirection=\"column\"\r\n gap={1}\r\n padding={1}\r\n borderStyle=\"round\"\r\n borderColor={theme.warning}\r\n >\r\n <Text bold color={theme.warning}>\r\n New MCP Server Detected\r\n </Text>\r\n <Text>\r\n This project contains an MCP config file (.mcp.json or .mcprc) with an\r\n MCP server that requires your approval:\r\n </Text>\r\n <Text bold>{serverName}</Text>\r\n\r\n <MCPServerDialogCopy />\r\n\r\n <Text>Do you want to approve this MCP server?</Text>\r\n\r\n <Select\r\n options={[\r\n { label: 'Yes, approve this server', value: 'yes' },\r\n { label: 'No, reject this server', value: 'no' },\r\n ]}\r\n onChange={value => onChange(value as 'yes' | 'no')}\r\n />\r\n </Box>\r\n <Box marginLeft={3}>\r\n <Text dimColor>\r\n {exitState.pending ? (\r\n <>Press {exitState.keyName} again to exit</>\r\n ) : (\r\n <>Enter to confirm \u00B7 Esc to reject</>\r\n )}\r\n </Text>\r\n </Box>\r\n </>\r\n )\r\n}\r\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AAFA,OAAOA,YAAW;;;ACAlB,OAAO,WAAW;AAClB,SAAS,KAAK,MAAM,gBAAgB;AAGpC;AAIA;AAGA;AADA,SAAS,eAAe;AAQjB,SAAS,YAAY,EAAE,OAAO,GAA2B;AAC9D,QAAM,QAAQ,SAAS;AACvB,QAAM,UAAU,MAAM;AAAA,EAAC,GAAG,CAAC,CAAC;AAE5B,WAAS,SAAS,OAAqB;AACrC,UAAM,SAAS,wBAAwB;AACvC,YAAQ,OAAO;AAAA,MACb,KAAK,OAAO;AACV,cAAM,YAAY,QAAQ,MAAM,OAAO;AAEvC,YAAI,CAAC,WAAW;AACd,mCAAyB;AAAA,YACvB,GAAG;AAAA,YACH,wBAAwB;AAAA,UAC1B,CAAC;AAAA,QACH;AACA,eAAO;AACP;AAAA,MACF;AAAA,MACA,KAAK,MAAM;AACT,gBAAQ,KAAK,CAAC;AACd;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,gBAAgB,MAAM,QAAQ,KAAK,CAAC,CAAC;AAEvD,WAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,IAAI,QAAQ;AACd,cAAQ,KAAK,CAAC;AACd;AAAA,IACF;AAAA,EACF,CAAC;AAED,SACE,0DACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,KAAK;AAAA,MACL,SAAS;AAAA,MACT,aAAY;AAAA,MACZ,aAAa,MAAM;AAAA;AAAA,IAEnB,oCAAC,QAAK,MAAI,MAAC,OAAO,MAAM,WAAS,wCAEjC;AAAA,IACA,oCAAC,QAAK,MAAI,QAAE,QAAQ,IAAI,CAAE;AAAA,IAE1B,oCAAC,OAAI,eAAc,UAAS,KAAK,KAC/B,oCAAC,YACE,cAAa,wEACK,cAAa,mCAClC,GACA,oCAAC,YAAK,yBACkB,cAAa,wEAErC,CACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,UACP,EAAE,OAAO,gBAAgB,OAAO,MAAM;AAAA,UACtC,EAAE,OAAO,YAAY,OAAO,KAAK;AAAA,QACnC;AAAA,QACA,UAAU,WAAS,SAAS,KAAqB;AAAA;AAAA,IACnD;AAAA,EACF,GACA,oCAAC,OAAI,YAAY,KACf,oCAAC,QAAK,UAAQ,QACX,UAAU,UACT,0DAAE,UAAO,UAAU,SAAQ,gBAAc,IAEzC,0DAAE,mCAA8B,CAEpC,CACF,CACF;AAEJ;;;AD5FA;;;AELA,OAAOC,YAAW;AAClB,SAAS,cAAc;;;ACDvB,OAAOC,YAAW;AAClB,SAAS,OAAAC,MAAK,QAAAC,OAAM,YAAAC,iBAAgB;AAGpC;AADA,SAAS,mBAAmB;AAK5B,SAAS,iBAAiB;;;ACL1B;AAHA,OAAOC,YAAW;AAClB,SAAS,QAAAC,aAAY;AACrB,OAAO,UAAU;AAGV,SAAS,sBAAuC;AACrD,SACE,gBAAAD,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAACC,OAAA,MAAK,oDAC6C,cAAa,6LAGzB,KACrC,gBAAAD,OAAA,cAAC,QAAK,KAAI,oEAAiE,mBAE3E,CACF,GAEA,gBAAAA,OAAA,cAACC,OAAA,EAAK,UAAQ,QAAC,oEAEZ,iBAAgB,6BACnB,CACF;AAEJ;;;ADPO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,QAAQ,SAAS;AACvB,WAAS,SAAS,iBAA2B;AAC3C,UAAM,SAAS,wBAAwB;AAEvC,QAAI,CAAC,OAAO,sBAAsB;AAChC,aAAO,uBAAuB,CAAC;AAAA,IACjC;AACA,QAAI,CAAC,OAAO,sBAAsB;AAChC,aAAO,uBAAuB,CAAC;AAAA,IACjC;AAEA,UAAM,CAAC,iBAAiB,eAAe,IAAI;AAAA,MAAU;AAAA,MAAa,YAChE,gBAAgB,SAAS,MAAM;AAAA,IACjC;AAEA,WAAO,qBAAqB,KAAK,GAAG,eAAe;AACnD,WAAO,qBAAqB,KAAK,GAAG,eAAe;AAEnD,6BAAyB,MAAM;AAC/B,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,gBAAgB,MAAM,QAAQ,KAAK,CAAC;AAEtD,EAAAC,UAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,IAAI,QAAQ;AACd,YAAM,SAAS,wBAAwB;AACvC,UAAI,CAAC,OAAO,sBAAsB;AAChC,eAAO,uBAAuB,CAAC;AAAA,MACjC;AAEA,iBAAW,UAAU,aAAa;AAChC,YAAI,CAAC,OAAO,qBAAqB,SAAS,MAAM,GAAG;AACjD,iBAAO,qBAAqB,KAAK,MAAM;AAAA,QACzC;AAAA,MACF;AAEA,+BAAyB,MAAM;AAC/B,aAAO;AACP;AAAA,IACF;AAAA,EACF,CAAC;AAED,SACE,gBAAAC,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,eAAc;AAAA,MACd,KAAK;AAAA,MACL,SAAS;AAAA,MACT,aAAY;AAAA,MACZ,aAAa,MAAM;AAAA;AAAA,IAEnB,gBAAAD,OAAA,cAACE,OAAA,EAAK,MAAI,MAAC,OAAO,MAAM,WAAS,0BAEjC;AAAA,IACA,gBAAAF,OAAA,cAACE,OAAA,MAAK,uEACgE,KACnE,YAAY,QAAO,0CACtB;AAAA,IACA,gBAAAF,OAAA,cAAC,yBAAoB;AAAA,IAErB,gBAAAA,OAAA,cAACE,OAAA,MAAK,+CAA6C;AAAA,IAEnD,gBAAAF,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,YAAY,IAAI,aAAW;AAAA,UAClC,OAAO;AAAA,UACP,OAAO;AAAA,QACT,EAAE;AAAA,QACF,cAAc;AAAA,QACd;AAAA;AAAA,IACF;AAAA,EACF,GACA,gBAAAA,OAAA,cAACC,MAAA,EAAI,YAAY,KACf,gBAAAD,OAAA,cAACE,OAAA,EAAK,UAAQ,QACX,UAAU,UACT,gBAAAF,OAAA,cAAAA,OAAA,gBAAE,UAAO,UAAU,SAAQ,gBAAc,IAEzC,gBAAAA,OAAA,cAAAA,OAAA,gBAAE,8DAAsD,CAE5D,CACF,CACF;AAEJ;;;AExGA,OAAOG,YAAW;AAClB,SAAS,OAAAC,MAAK,QAAAC,OAAM,YAAAC,iBAAgB;AAGpC;AAYO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,QAAQ,SAAS;AACvB,WAAS,SAAS,OAAqB;AACrC,UAAM,SAAS,wBAAwB;AACvC,YAAQ,OAAO;AAAA,MACb,KAAK,OAAO;AACV,YAAI,CAAC,OAAO,sBAAsB;AAChC,iBAAO,uBAAuB,CAAC;AAAA,QACjC;AACA,YAAI,CAAC,OAAO,qBAAqB,SAAS,UAAU,GAAG;AACrD,iBAAO,qBAAqB,KAAK,UAAU;AAAA,QAC7C;AACA,iCAAyB,MAAM;AAC/B,eAAO;AACP;AAAA,MACF;AAAA,MACA,KAAK,MAAM;AACT,YAAI,CAAC,OAAO,sBAAsB;AAChC,iBAAO,uBAAuB,CAAC;AAAA,QACjC;AACA,YAAI,CAAC,OAAO,qBAAqB,SAAS,UAAU,GAAG;AACrD,iBAAO,qBAAqB,KAAK,UAAU;AAAA,QAC7C;AACA,iCAAyB,MAAM;AAC/B,eAAO;AACP;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,gBAAgB,MAAM,QAAQ,KAAK,CAAC,CAAC;AAEvD,EAAAC,UAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,IAAI,QAAQ;AACd,aAAO;AACP;AAAA,IACF;AAAA,EACF,CAAC;AAED,SACE,gBAAAC,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,eAAc;AAAA,MACd,KAAK;AAAA,MACL,SAAS;AAAA,MACT,aAAY;AAAA,MACZ,aAAa,MAAM;AAAA;AAAA,IAEnB,gBAAAD,OAAA,cAACE,OAAA,EAAK,MAAI,MAAC,OAAO,MAAM,WAAS,yBAEjC;AAAA,IACA,gBAAAF,OAAA,cAACE,OAAA,MAAK,gHAGN;AAAA,IACA,gBAAAF,OAAA,cAACE,OAAA,EAAK,MAAI,QAAE,UAAW;AAAA,IAEvB,gBAAAF,OAAA,cAAC,yBAAoB;AAAA,IAErB,gBAAAA,OAAA,cAACE,OAAA,MAAK,yCAAuC;AAAA,IAE7C,gBAAAF,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,UACP,EAAE,OAAO,4BAA4B,OAAO,MAAM;AAAA,UAClD,EAAE,OAAO,0BAA0B,OAAO,KAAK;AAAA,QACjD;AAAA,QACA,UAAU,WAAS,SAAS,KAAqB;AAAA;AAAA,IACnD;AAAA,EACF,GACA,gBAAAA,OAAA,cAACC,MAAA,EAAI,YAAY,KACf,gBAAAD,OAAA,cAACE,OAAA,EAAK,UAAQ,QACX,UAAU,UACT,gBAAAF,OAAA,cAAAA,OAAA,gBAAE,UAAO,UAAU,SAAQ,gBAAc,IAEzC,gBAAAA,OAAA,cAAAA,OAAA,gBAAE,qCAAgC,CAEtC,CACF,CACF;AAEJ;;;AH9FA;AAEA,eAAsB,6BAA4C;AAChE,QAAM,EAAE,QAAQ,IAAI,+BAA+B;AACnD,QAAM,iBAAiB,OAAO,KAAK,OAAO,EAAE;AAAA,IAC1C,gBAAc,qBAAqB,UAAU,MAAM;AAAA,EACrD;AAEA,MAAI,eAAe,WAAW,GAAG;AAC/B;AAAA,EACF;AAEA,QAAM,IAAI,QAAc,aAAW;AACjC,UAAM,wBAAwB,MAAM;AAClC,cAAQ,OAAO,MAAM,wBAAwB,MAAM;AACjD,gBAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAEA,QAAI,eAAe,WAAW,KAAK,eAAe,CAAC,MAAM,QAAW;AAClE,YAAM,SAAS;AAAA,QACb,gBAAAG,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,YAAY,eAAe,CAAC;AAAA,YAC5B,QAAQ,MAAM;AACZ,qBAAO,UAAU;AACjB,oCAAsB;AAAA,YACxB;AAAA;AAAA,QACF;AAAA,QACA,EAAE,aAAa,MAAM;AAAA,MACvB;AAAA,IACF,OAAO;AACL,YAAM,SAAS;AAAA,QACb,gBAAAA,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,aAAa;AAAA,YACb,QAAQ,MAAM;AACZ,qBAAO,UAAU;AACjB,oCAAsB;AAAA,YACxB;AAAA;AAAA,QACF;AAAA,QACA,EAAE,aAAa,MAAM;AAAA,MACvB;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AFlCO,SAAS,qBAA2B;AACzC,QAAM,SAAS,gBAAgB;AAC/B,mBAAiB;AAAA,IACf,GAAG;AAAA,IACH,wBAAwB;AAAA,IACxB,uBAAuB,MAAM;AAAA,EAC/B,CAAC;AACH;AAEA,eAAsB,iBACpB,UACA,OACe;AACf,MAAI,QAAQ,IAAI,aAAa,QAAQ;AACnC;AAAA,EACF;AAEA,QAAM,SAAS,gBAAgB;AAC/B,MAAI,CAAC,OAAO,SAAS,CAAC,OAAO,wBAAwB;AACnD,UAAM,cAAc;AACpB,UAAM,EAAE,QAAAC,QAAO,IAAI,MAAM,OAAO,KAAK;AACrC,UAAM,IAAI,QAAc,aAAW;AACjC,MAAAA;AAAA,QACE,gBAAAC,OAAA;AAAA,UAAC;AAAA;AAAA,YACC,QAAQ,YAAY;AAClB,iCAAmB;AACnB,oBAAM,cAAc;AACpB,sBAAQ;AAAA,YACV;AAAA;AAAA,QACF;AAAA,QACA;AAAA,UACE,aAAa;AAAA,QACf;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,OAAO;AACV,QAAI,UAAU;AACZ,UAAI,CAAC,4BAA4B,GAAG;AAClC,cAAM,IAAI,QAAc,aAAW;AACjC,gBAAM,SAAS,MAAM;AACnB,8CAAkC;AAClC,oBAAQ;AAAA,UACV;AACC,WAAC,YAAY;AACZ,kBAAM,EAAE,QAAAD,QAAO,IAAI,MAAM,OAAO,KAAK;AACrC,YAAAA,QAAO,gBAAAC,OAAA,cAAC,eAAY,QAAgB,GAAI;AAAA,cACtC,aAAa;AAAA,YACf,CAAC;AAAA,UACH,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,2BAA2B;AAAA,EACnC;AACF;",
6
+ "names": ["React", "React", "React", "Box", "Text", "useInput", "React", "Text", "useInput", "React", "Box", "Text", "React", "Box", "Text", "useInput", "useInput", "React", "Box", "Text", "React", "render", "React"]
7
+ }
@@ -5,13 +5,17 @@ import {
5
5
  setSessionState
6
6
  } from "./chunk-TY3CCSAT.js";
7
7
  import {
8
- debug
9
- } from "./chunk-GZTCXXSS.js";
8
+ debug,
9
+ init_debugLogger
10
+ } from "./chunk-QT5GS374.js";
10
11
  import {
12
+ init_log,
11
13
  logError
12
- } from "./chunk-IM33F5CM.js";
14
+ } from "./chunk-XYQZLDRB.js";
13
15
 
14
16
  // src/utils/agent/storage.ts
17
+ init_debugLogger();
18
+ init_log();
15
19
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
16
20
  import { join } from "path";
17
21
  import { homedir } from "os";
@@ -198,6 +202,8 @@ function getTodoConfig() {
198
202
  }
199
203
 
200
204
  // src/services/system/systemReminder.ts
205
+ init_debugLogger();
206
+ init_log();
201
207
  var SystemReminderService = class {
202
208
  sessionState = {
203
209
  lastTodoUpdate: 0,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/utils/agent/storage.ts", "../src/utils/session/todoStorage.ts", "../src/services/system/systemReminder.ts"],
4
4
  "sourcesContent": ["import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs'\r\nimport { join } from 'path'\r\nimport { homedir } from 'os'\r\nimport { randomUUID } from 'crypto'\r\nimport { debug as debugLogger } from '@utils/log/debugLogger'\r\nimport { logError } from '@utils/log'\r\n\r\n\r\nfunction getConfigDirectory(): string {\r\n return (\r\n process.env.NEWCRAW_CONFIG_DIR ??\r\n process.env.NEWCRAW_CONFIG_DIR ??\r\n join(homedir(), '.newcraw')\r\n )\r\n}\r\n\r\nfunction getSessionId(): string {\r\n return process.env.NEWCRAW_SESSION_ID ?? 'default-session'\r\n}\r\n\r\nexport function getAgentFilePath(agentId: string): string {\r\n const sessionId = getSessionId()\r\n const filename = `${sessionId}-agent-${agentId}.json`\r\n const configDir = getConfigDirectory()\r\n\r\n if (!existsSync(configDir)) {\r\n mkdirSync(configDir, { recursive: true })\r\n }\r\n\r\n return join(configDir, filename)\r\n}\r\n\r\nexport function readAgentData<T = any>(agentId: string): T | null {\r\n const filePath = getAgentFilePath(agentId)\r\n\r\n if (!existsSync(filePath)) {\r\n return null\r\n }\r\n\r\n try {\r\n const content = readFileSync(filePath, 'utf-8')\r\n return JSON.parse(content) as T\r\n } catch (error) {\r\n logError(error)\r\n debugLogger.warn('AGENT_STORAGE_READ_FAILED', {\r\n agentId,\r\n error: error instanceof Error ? error.message : String(error),\r\n })\r\n return null\r\n }\r\n}\r\n\r\nexport function writeAgentData<T = any>(agentId: string, data: T): void {\r\n const filePath = getAgentFilePath(agentId)\r\n\r\n try {\r\n writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8')\r\n } catch (error) {\r\n logError(error)\r\n debugLogger.warn('AGENT_STORAGE_WRITE_FAILED', {\r\n agentId,\r\n error: error instanceof Error ? error.message : String(error),\r\n })\r\n throw error\r\n }\r\n}\r\n\r\nexport function getDefaultAgentId(): string {\r\n return 'default'\r\n}\r\n\r\nexport function resolveAgentId(agentId?: string): string {\r\n return agentId || getDefaultAgentId()\r\n}\r\n\r\nexport function generateAgentId(): string {\r\n return randomUUID()\r\n}\r\n", "import { setSessionState, getSessionState } from './sessionState'\r\nimport { readAgentData, writeAgentData, resolveAgentId } from '@utils/agent/storage'\r\n\r\nexport interface TodoItem {\r\n id: string\r\n content: string\r\n status: 'pending' | 'in_progress' | 'completed'\r\n activeForm: string\r\n priority: 'high' | 'medium' | 'low'\r\n createdAt?: number\r\n updatedAt?: number\r\n tags?: string[]\r\n estimatedHours?: number\r\n previousStatus?: 'pending' | 'in_progress' | 'completed'\r\n}\r\n\r\nexport interface TodoQuery {\r\n status?: TodoItem['status'][]\r\n priority?: TodoItem['priority'][]\r\n contentMatch?: string\r\n tags?: string[]\r\n dateRange?: { from?: Date; to?: Date }\r\n}\r\n\r\nexport interface TodoStorageConfig {\r\n maxTodos: number\r\n autoArchiveCompleted: boolean\r\n sortBy: 'createdAt' | 'updatedAt' | 'priority' | 'status'\r\n sortOrder: 'asc' | 'desc'\r\n}\r\n\r\nconst TODO_STORAGE_KEY = 'todos'\r\nconst TODO_CONFIG_KEY = 'todoConfig'\r\nconst TODO_CACHE_KEY = 'todoCache'\r\n\r\nconst DEFAULT_CONFIG: TodoStorageConfig = {\r\n maxTodos: 100,\r\n autoArchiveCompleted: false,\r\n sortBy: 'status',\r\n sortOrder: 'desc',\r\n}\r\n\r\nlet todoCache: TodoItem[] | null = null\r\nlet cacheTimestamp = 0\r\nconst CACHE_TTL = 5000\r\n\r\nexport interface TodoMetrics {\r\n totalOperations: number\r\n cacheHits: number\r\n cacheMisses: number\r\n lastOperation: number\r\n}\r\n\r\nfunction invalidateCache(): void {\r\n todoCache = null\r\n cacheTimestamp = 0\r\n}\r\n\r\nfunction updateMetrics(operation: string, cacheHit: boolean = false): void {\r\n const sessionState = getSessionState() as any\r\n const metrics = sessionState.todoMetrics || {\r\n totalOperations: 0,\r\n cacheHits: 0,\r\n cacheMisses: 0,\r\n lastOperation: 0,\r\n }\r\n\r\n metrics.totalOperations++\r\n metrics.lastOperation = Date.now()\r\n\r\n if (cacheHit) {\r\n metrics.cacheHits++\r\n } else {\r\n metrics.cacheMisses++\r\n }\r\n\r\n setSessionState({\r\n ...sessionState,\r\n todoMetrics: metrics,\r\n })\r\n}\r\n\r\nexport function getTodoMetrics(): TodoMetrics {\r\n const sessionState = getSessionState() as any\r\n return (\r\n sessionState.todoMetrics || {\r\n totalOperations: 0,\r\n cacheHits: 0,\r\n cacheMisses: 0,\r\n lastOperation: 0,\r\n }\r\n )\r\n}\r\n\r\nexport function getTodos(agentId?: string): TodoItem[] {\r\n const resolvedAgentId = resolveAgentId(agentId)\r\n const now = Date.now()\r\n\r\n if (agentId) {\r\n updateMetrics('getTodos', false)\r\n const agentTodos = readAgentData<TodoItem[]>(resolvedAgentId) || []\r\n\r\n const agentCacheKey = `todoCache_${resolvedAgentId}`\r\n\r\n return agentTodos.map(todo => ({\r\n ...todo,\r\n activeForm: todo.activeForm || todo.content,\r\n }))\r\n }\r\n\r\n if (todoCache && now - cacheTimestamp < CACHE_TTL) {\r\n updateMetrics('getTodos', true)\r\n return todoCache.map(todo => ({\r\n ...todo,\r\n activeForm: todo.activeForm || todo.content,\r\n }))\r\n }\r\n\r\n updateMetrics('getTodos', false)\r\n const sessionState = getSessionState()\r\n const todos = (sessionState as any)[TODO_STORAGE_KEY] || []\r\n\r\n todoCache = [...todos].map((todo: TodoItem) => ({\r\n ...todo,\r\n activeForm: todo.activeForm || todo.content,\r\n }))\r\n cacheTimestamp = now\r\n\r\n return todoCache\r\n}\r\n\r\nexport function setTodos(todos: TodoItem[], agentId?: string): void {\r\n const resolvedAgentId = resolveAgentId(agentId)\r\n const config = getTodoConfig()\r\n const existingTodos = getTodos(agentId)\r\n\r\n if (agentId) {\r\n if (todos.length > config.maxTodos) {\r\n throw new Error(\r\n `Todo limit exceeded. Maximum ${config.maxTodos} todos allowed.`,\r\n )\r\n }\r\n\r\n let processedTodos = todos\r\n if (config.autoArchiveCompleted) {\r\n processedTodos = todos.filter(todo => todo.status !== 'completed')\r\n }\r\n\r\n const updatedTodos = processedTodos.map(todo => {\r\n const existingTodo = existingTodos.find(\r\n existing => existing.id === todo.id,\r\n )\r\n\r\n return {\r\n ...todo,\r\n activeForm: todo.activeForm || todo.content,\r\n updatedAt: Date.now(),\r\n createdAt: todo.createdAt || Date.now(),\r\n previousStatus:\r\n existingTodo?.status !== todo.status\r\n ? existingTodo?.status\r\n : todo.previousStatus,\r\n }\r\n })\r\n\r\n writeAgentData(resolvedAgentId, updatedTodos)\r\n updateMetrics('setTodos')\r\n return\r\n }\r\n\r\n if (todos.length > config.maxTodos) {\r\n throw new Error(\r\n `Todo limit exceeded. Maximum ${config.maxTodos} todos allowed.`,\r\n )\r\n }\r\n\r\n let processedTodos = todos\r\n if (config.autoArchiveCompleted) {\r\n processedTodos = todos.filter(todo => todo.status !== 'completed')\r\n }\r\n\r\n const updatedTodos = processedTodos.map(todo => {\r\n const existingTodo = existingTodos.find(existing => existing.id === todo.id)\r\n\r\n return {\r\n ...todo,\r\n activeForm: todo.activeForm || todo.content,\r\n updatedAt: Date.now(),\r\n createdAt: todo.createdAt || Date.now(),\r\n previousStatus:\r\n existingTodo?.status !== todo.status\r\n ? existingTodo?.status\r\n : todo.previousStatus,\r\n }\r\n })\r\n\r\n setSessionState({\r\n ...getSessionState(),\r\n [TODO_STORAGE_KEY]: updatedTodos,\r\n } as any)\r\n\r\n invalidateCache()\r\n updateMetrics('setTodos')\r\n}\r\n\r\nexport function getTodoConfig(): TodoStorageConfig {\r\n const sessionState = getSessionState() as any\r\n return { ...DEFAULT_CONFIG, ...(sessionState[TODO_CONFIG_KEY] || {}) }\r\n}\r\n\r\nexport function setTodoConfig(config: Partial<TodoStorageConfig>): void {\r\n const currentConfig = getTodoConfig()\r\n const newConfig = { ...currentConfig, ...config }\r\n\r\n setSessionState({\r\n ...getSessionState(),\r\n [TODO_CONFIG_KEY]: newConfig,\r\n } as any)\r\n\r\n if (config.sortBy || config.sortOrder) {\r\n const todos = getTodos()\r\n setTodos(todos)\r\n }\r\n}\r\n\r\nexport function addTodo(\r\n todo: Omit<TodoItem, 'createdAt' | 'updatedAt'>,\r\n): TodoItem[] {\r\n const todos = getTodos()\r\n\r\n if (todos.some(existing => existing.id === todo.id)) {\r\n throw new Error(`Todo with ID '${todo.id}' already exists`)\r\n }\r\n\r\n const newTodo: TodoItem = {\r\n ...todo,\r\n createdAt: Date.now(),\r\n updatedAt: Date.now(),\r\n }\r\n\r\n const updatedTodos = [...todos, newTodo]\r\n setTodos(updatedTodos)\r\n updateMetrics('addTodo')\r\n return updatedTodos\r\n}\r\n\r\nexport function updateTodo(id: string, updates: Partial<TodoItem>): TodoItem[] {\r\n const todos = getTodos()\r\n const existingTodo = todos.find(todo => todo.id === id)\r\n\r\n if (!existingTodo) {\r\n throw new Error(`Todo with ID '${id}' not found`)\r\n }\r\n\r\n const updatedTodos = todos.map(todo =>\r\n todo.id === id ? { ...todo, ...updates, updatedAt: Date.now() } : todo,\r\n )\r\n\r\n setTodos(updatedTodos)\r\n updateMetrics('updateTodo')\r\n return updatedTodos\r\n}\r\n\r\nexport function deleteTodo(id: string): TodoItem[] {\r\n const todos = getTodos()\r\n const todoExists = todos.some(todo => todo.id === id)\r\n\r\n if (!todoExists) {\r\n throw new Error(`Todo with ID '${id}' not found`)\r\n }\r\n\r\n const updatedTodos = todos.filter(todo => todo.id !== id)\r\n setTodos(updatedTodos)\r\n updateMetrics('deleteTodo')\r\n return updatedTodos\r\n}\r\n\r\nexport function clearTodos(): void {\r\n setTodos([])\r\n updateMetrics('clearTodos')\r\n}\r\n\r\nexport function getTodoById(id: string): TodoItem | undefined {\r\n const todos = getTodos()\r\n updateMetrics('getTodoById')\r\n return todos.find(todo => todo.id === id)\r\n}\r\n\r\nexport function getTodosByStatus(status: TodoItem['status']): TodoItem[] {\r\n const todos = getTodos()\r\n updateMetrics('getTodosByStatus')\r\n return todos.filter(todo => todo.status === status)\r\n}\r\n\r\nexport function getTodosByPriority(priority: TodoItem['priority']): TodoItem[] {\r\n const todos = getTodos()\r\n updateMetrics('getTodosByPriority')\r\n return todos.filter(todo => todo.priority === priority)\r\n}\r\n\r\nexport function queryTodos(query: TodoQuery): TodoItem[] {\r\n const todos = getTodos()\r\n updateMetrics('queryTodos')\r\n\r\n return todos.filter(todo => {\r\n if (query.status && !query.status.includes(todo.status)) {\r\n return false\r\n }\r\n\r\n if (query.priority && !query.priority.includes(todo.priority)) {\r\n return false\r\n }\r\n\r\n if (\r\n query.contentMatch &&\r\n !todo.content.toLowerCase().includes(query.contentMatch.toLowerCase())\r\n ) {\r\n return false\r\n }\r\n\r\n if (query.tags && todo.tags) {\r\n const hasMatchingTag = query.tags.some(tag => todo.tags!.includes(tag))\r\n if (!hasMatchingTag) return false\r\n }\r\n\r\n if (query.dateRange) {\r\n const todoDate = new Date(todo.createdAt || 0)\r\n if (query.dateRange.from && todoDate < query.dateRange.from) return false\r\n if (query.dateRange.to && todoDate > query.dateRange.to) return false\r\n }\r\n\r\n return true\r\n })\r\n}\r\n\r\nexport function getTodoStatistics() {\r\n const todos = getTodos()\r\n const metrics = getTodoMetrics()\r\n\r\n return {\r\n total: todos.length,\r\n byStatus: {\r\n pending: todos.filter(t => t.status === 'pending').length,\r\n in_progress: todos.filter(t => t.status === 'in_progress').length,\r\n completed: todos.filter(t => t.status === 'completed').length,\r\n },\r\n byPriority: {\r\n high: todos.filter(t => t.priority === 'high').length,\r\n medium: todos.filter(t => t.priority === 'medium').length,\r\n low: todos.filter(t => t.priority === 'low').length,\r\n },\r\n metrics,\r\n cacheEfficiency:\r\n metrics.totalOperations > 0\r\n ? Math.round((metrics.cacheHits / metrics.totalOperations) * 100)\r\n : 0,\r\n }\r\n}\r\n\r\nexport function optimizeTodoStorage(): void {\r\n invalidateCache()\r\n\r\n const todos = getTodos()\r\n const validTodos = todos.filter(\r\n todo =>\r\n todo.id &&\r\n todo.content &&\r\n todo.activeForm &&\r\n ['pending', 'in_progress', 'completed'].includes(todo.status) &&\r\n ['high', 'medium', 'low'].includes(todo.priority),\r\n )\r\n\r\n if (validTodos.length !== todos.length) {\r\n setTodos(validTodos)\r\n }\r\n\r\n updateMetrics('optimizeTodoStorage')\r\n}\r\n", "import { getTodos, TodoItem } from '@utils/session/todoStorage'\r\nimport { debug as debugLogger } from '@utils/log/debugLogger'\r\nimport { logError } from '@utils/log'\r\n\r\nexport interface ReminderMessage {\r\n role: 'system'\r\n content: string\r\n isMeta: boolean\r\n timestamp: number\r\n type: string\r\n priority: 'low' | 'medium' | 'high'\r\n category: 'task' | 'security' | 'performance' | 'general'\r\n}\r\n\r\ninterface ReminderConfig {\r\n todoEmptyReminder: boolean\r\n securityReminder: boolean\r\n performanceReminder: boolean\r\n maxRemindersPerSession: number\r\n}\r\n\r\ninterface SessionReminderState {\r\n lastTodoUpdate: number\r\n lastFileAccess: number\r\n sessionStartTime: number\r\n remindersSent: Set<string>\r\n contextPresent: boolean\r\n reminderCount: number\r\n config: ReminderConfig\r\n}\r\n\r\nclass SystemReminderService {\r\n private sessionState: SessionReminderState = {\r\n lastTodoUpdate: 0,\r\n lastFileAccess: 0,\r\n sessionStartTime: Date.now(),\r\n remindersSent: new Set(),\r\n contextPresent: false,\r\n reminderCount: 0,\r\n config: {\r\n todoEmptyReminder: true,\r\n securityReminder: true,\r\n performanceReminder: true,\r\n maxRemindersPerSession: 10,\r\n },\r\n }\r\n\r\n private eventDispatcher = new Map<string, Array<(context: any) => void>>()\r\n private reminderCache = new Map<string, ReminderMessage>()\r\n\r\n constructor() {\r\n this.setupEventDispatcher()\r\n }\r\n\r\n public generateReminders(\r\n hasContext: boolean = false,\r\n agentId?: string,\r\n ): ReminderMessage[] {\r\n this.sessionState.contextPresent = hasContext\r\n\r\n if (!hasContext) {\r\n return []\r\n }\r\n\r\n if (\r\n this.sessionState.reminderCount >=\r\n this.sessionState.config.maxRemindersPerSession\r\n ) {\r\n return []\r\n }\r\n\r\n const reminders: ReminderMessage[] = []\r\n const currentTime = Date.now()\r\n\r\n const reminderGenerators = [\r\n () => this.dispatchTodoEvent(agentId),\r\n () => this.dispatchSecurityEvent(),\r\n () => this.dispatchPerformanceEvent(),\r\n () => this.getMentionReminders(),\r\n ]\r\n\r\n for (const generator of reminderGenerators) {\r\n if (reminders.length >= 5) break\r\n\r\n const result = generator()\r\n if (result) {\r\n const remindersToAdd = Array.isArray(result) ? result : [result]\r\n reminders.push(...remindersToAdd)\r\n this.sessionState.reminderCount += remindersToAdd.length\r\n }\r\n }\r\n\r\n return reminders\r\n }\r\n\r\n private dispatchTodoEvent(agentId?: string): ReminderMessage | null {\r\n if (!this.sessionState.config.todoEmptyReminder) return null\r\n\r\n const todos = getTodos(agentId)\r\n const currentTime = Date.now()\r\n const agentKey = agentId || 'default'\r\n\r\n if (\r\n todos.length === 0 &&\r\n !this.sessionState.remindersSent.has(`todo_empty_${agentKey}`)\r\n ) {\r\n this.sessionState.remindersSent.add(`todo_empty_${agentKey}`)\r\n return this.createReminderMessage(\r\n 'todo',\r\n 'task',\r\n 'medium',\r\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.',\r\n currentTime,\r\n )\r\n }\r\n\r\n if (todos.length > 0) {\r\n const reminderKey = `todo_updated_${agentKey}_${todos.length}_${this.getTodoStateHash(todos)}`\r\n\r\n if (this.reminderCache.has(reminderKey)) {\r\n return this.reminderCache.get(reminderKey)!\r\n }\r\n\r\n if (!this.sessionState.remindersSent.has(reminderKey)) {\r\n this.sessionState.remindersSent.add(reminderKey)\r\n this.clearTodoReminders(agentKey)\r\n\r\n const todoContent = JSON.stringify(\r\n todos.map(todo => ({\r\n content:\r\n todo.content.length > 100\r\n ? todo.content.substring(0, 100) + '...'\r\n : todo.content,\r\n status: todo.status,\r\n activeForm:\r\n todo.activeForm && todo.activeForm.length > 100\r\n ? todo.activeForm.substring(0, 100) + '...'\r\n : todo.activeForm || todo.content,\r\n })),\r\n )\r\n\r\n const reminder = this.createReminderMessage(\r\n 'todo',\r\n 'task',\r\n 'medium',\r\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.`,\r\n currentTime,\r\n )\r\n\r\n this.reminderCache.set(reminderKey, reminder)\r\n return reminder\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n private dispatchSecurityEvent(): ReminderMessage | null {\r\n if (!this.sessionState.config.securityReminder) return null\r\n\r\n const currentTime = Date.now()\r\n\r\n if (\r\n this.sessionState.lastFileAccess > 0 &&\r\n !this.sessionState.remindersSent.has('file_security')\r\n ) {\r\n this.sessionState.remindersSent.add('file_security')\r\n return this.createReminderMessage(\r\n 'security',\r\n 'security',\r\n 'high',\r\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.',\r\n currentTime,\r\n )\r\n }\r\n\r\n return null\r\n }\r\n\r\n private dispatchPerformanceEvent(): ReminderMessage | null {\r\n if (!this.sessionState.config.performanceReminder) return null\r\n\r\n const currentTime = Date.now()\r\n const sessionDuration = currentTime - this.sessionState.sessionStartTime\r\n\r\n if (\r\n sessionDuration > 30 * 60 * 1000 &&\r\n !this.sessionState.remindersSent.has('performance_long_session')\r\n ) {\r\n this.sessionState.remindersSent.add('performance_long_session')\r\n return this.createReminderMessage(\r\n 'performance',\r\n 'performance',\r\n 'low',\r\n 'Long session detected. Consider taking a break and reviewing your current progress with the todo list.',\r\n currentTime,\r\n )\r\n }\r\n\r\n return null\r\n }\r\n\r\n private getMentionReminders(): ReminderMessage[] {\r\n const currentTime = Date.now()\r\n const MENTION_FRESHNESS_WINDOW = 5000\r\n const reminders: ReminderMessage[] = []\r\n const expiredKeys: string[] = []\r\n\r\n for (const [key, reminder] of this.reminderCache.entries()) {\r\n if (this.isMentionReminder(reminder)) {\r\n const age = currentTime - reminder.timestamp\r\n if (age <= MENTION_FRESHNESS_WINDOW) {\r\n reminders.push(reminder)\r\n } else {\r\n expiredKeys.push(key)\r\n }\r\n }\r\n }\r\n\r\n expiredKeys.forEach(key => this.reminderCache.delete(key))\r\n\r\n return reminders\r\n }\r\n\r\n private isMentionReminder(reminder: ReminderMessage): boolean {\r\n const mentionTypes = ['agent_mention', 'file_mention', 'ask_model_mention']\r\n return mentionTypes.includes(reminder.type)\r\n }\r\n\r\n public generateFileChangeReminder(context: any): ReminderMessage | null {\r\n const { agentId, filePath, reminder } = context\r\n\r\n if (!reminder) {\r\n return null\r\n }\r\n\r\n const currentTime = Date.now()\r\n const reminderKey = `file_changed_${agentId}_${filePath}_${currentTime}`\r\n\r\n if (this.sessionState.remindersSent.has(reminderKey)) {\r\n return null\r\n }\r\n\r\n this.sessionState.remindersSent.add(reminderKey)\r\n\r\n return this.createReminderMessage(\r\n 'file_changed',\r\n 'general',\r\n 'medium',\r\n reminder,\r\n currentTime,\r\n )\r\n }\r\n\r\n private createReminderMessage(\r\n type: string,\r\n category: ReminderMessage['category'],\r\n priority: ReminderMessage['priority'],\r\n content: string,\r\n timestamp: number,\r\n ): ReminderMessage {\r\n return {\r\n role: 'system',\r\n content: `<system-reminder>\\n${content}\\n</system-reminder>`,\r\n isMeta: true,\r\n timestamp,\r\n type,\r\n priority,\r\n category,\r\n }\r\n }\r\n\r\n private getTodoStateHash(todos: TodoItem[]): string {\r\n return todos\r\n .map(t => `${t.content}:${t.status}:${t.activeForm || t.content}`)\r\n .sort()\r\n .join('|')\r\n }\r\n\r\n private clearTodoReminders(agentId?: string): void {\r\n const agentKey = agentId || 'default'\r\n for (const key of this.sessionState.remindersSent) {\r\n if (key.startsWith(`todo_updated_${agentKey}_`)) {\r\n this.sessionState.remindersSent.delete(key)\r\n }\r\n }\r\n }\r\n\r\n private setupEventDispatcher(): void {\r\n this.addEventListener('session:startup', context => {\r\n this.resetSession()\r\n\r\n this.sessionState.sessionStartTime = Date.now()\r\n this.sessionState.contextPresent =\r\n Object.keys(context.context || {}).length > 0\r\n })\r\n\r\n this.addEventListener('todo:changed', context => {\r\n this.sessionState.lastTodoUpdate = Date.now()\r\n this.clearTodoReminders(context.agentId)\r\n })\r\n\r\n this.addEventListener('todo:file_changed', context => {\r\n const agentId = context.agentId || 'default'\r\n this.clearTodoReminders(agentId)\r\n this.sessionState.lastTodoUpdate = Date.now()\r\n\r\n const reminder = this.generateFileChangeReminder(context)\r\n if (reminder) {\r\n this.emitEvent('reminder:inject', {\r\n reminder: reminder.content,\r\n agentId,\r\n type: 'file_changed',\r\n timestamp: Date.now(),\r\n })\r\n }\r\n })\r\n\r\n this.addEventListener('file:read', context => {\r\n this.sessionState.lastFileAccess = Date.now()\r\n })\r\n\r\n this.addEventListener('file:edited', context => {\r\n })\r\n\r\n this.addEventListener('agent:mentioned', context => {\r\n this.createMentionReminder({\r\n type: 'agent_mention',\r\n key: `agent_mention_${context.agentType}_${context.timestamp}`,\r\n category: 'task',\r\n priority: 'high',\r\n 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.`,\r\n timestamp: context.timestamp,\r\n })\r\n })\r\n\r\n this.addEventListener('file:mentioned', context => {\r\n this.createMentionReminder({\r\n type: 'file_mention',\r\n key: `file_mention_${context.filePath}_${context.timestamp}`,\r\n category: 'general',\r\n priority: 'high',\r\n 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.`,\r\n timestamp: context.timestamp,\r\n })\r\n })\r\n\r\n this.addEventListener('ask-model:mentioned', context => {\r\n this.createMentionReminder({\r\n type: 'ask_model_mention',\r\n key: `ask_model_mention_${context.modelName}_${context.timestamp}`,\r\n category: 'task',\r\n priority: 'high',\r\n 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}.`,\r\n timestamp: context.timestamp,\r\n })\r\n })\r\n }\r\n\r\n public addEventListener(\r\n event: string,\r\n callback: (context: any) => void,\r\n ): void {\r\n if (!this.eventDispatcher.has(event)) {\r\n this.eventDispatcher.set(event, [])\r\n }\r\n this.eventDispatcher.get(event)!.push(callback)\r\n }\r\n\r\n public emitEvent(event: string, context: any): void {\r\n const listeners = this.eventDispatcher.get(event) || []\r\n listeners.forEach(callback => {\r\n try {\r\n callback(context)\r\n } catch (error) {\r\n logError(error)\r\n debugLogger.warn('SYSTEM_REMINDER_LISTENER_ERROR', {\r\n event,\r\n error: error instanceof Error ? error.message : String(error),\r\n })\r\n }\r\n })\r\n }\r\n\r\n private createMentionReminder(params: {\r\n type: string\r\n key: string\r\n category: ReminderMessage['category']\r\n priority: ReminderMessage['priority']\r\n content: string\r\n timestamp: number\r\n }): void {\r\n if (!this.sessionState.remindersSent.has(params.key)) {\r\n this.sessionState.remindersSent.add(params.key)\r\n\r\n const reminder = this.createReminderMessage(\r\n params.type,\r\n params.category,\r\n params.priority,\r\n params.content,\r\n params.timestamp,\r\n )\r\n\r\n this.reminderCache.set(params.key, reminder)\r\n }\r\n }\r\n\r\n public resetSession(): void {\r\n this.sessionState = {\r\n lastTodoUpdate: 0,\r\n lastFileAccess: 0,\r\n sessionStartTime: Date.now(),\r\n remindersSent: new Set(),\r\n contextPresent: false,\r\n reminderCount: 0,\r\n config: { ...this.sessionState.config },\r\n }\r\n this.reminderCache.clear()\r\n }\r\n\r\n public updateConfig(config: Partial<ReminderConfig>): void {\r\n this.sessionState.config = { ...this.sessionState.config, ...config }\r\n }\r\n\r\n public getSessionState(): SessionReminderState {\r\n return { ...this.sessionState }\r\n }\r\n}\r\n\r\nexport const systemReminderService = new SystemReminderService()\r\n\r\nexport const generateSystemReminders = (\r\n hasContext: boolean = false,\r\n agentId?: string,\r\n) => systemReminderService.generateReminders(hasContext, agentId)\r\n\r\nexport const generateFileChangeReminder = (context: any) =>\r\n systemReminderService.generateFileChangeReminder(context)\r\n\r\nexport const emitReminderEvent = (event: string, context: any) =>\r\n systemReminderService.emitEvent(event, context)\r\n\r\nexport const resetReminderSession = () => systemReminderService.resetSession()\r\nexport const getReminderSessionState = () =>\r\n systemReminderService.getSessionState()\r\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["processedTodos", "updatedTodos"]
7
7
  }
@@ -1,10 +1,12 @@
1
1
  import { createRequire as __newcrawCreateRequire } from "node:module";
2
2
  const require = __newcrawCreateRequire(import.meta.url);
3
3
  import {
4
- getGlobalConfig
5
- } from "./chunk-IIFUDVGS.js";
4
+ getGlobalConfig,
5
+ init_config
6
+ } from "./chunk-U6IF5D3J.js";
6
7
 
7
8
  // src/utils/theme/index.ts
9
+ init_config();
8
10
  var lightTheme = {
9
11
  bashBorder: "#FF6E57",
10
12
  newcraw: "#FFC233",
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/utils/theme/index.ts"],
4
4
  "sourcesContent": ["import { getGlobalConfig } from '@utils/config'\r\n\r\nexport interface Theme {\r\n bashBorder: string\r\n newcraw: string\r\n noting: string\r\n notingBorder: string\r\n permission: string\r\n autoAccept: string\r\n planMode: string\r\n secondaryBorder: string\r\n inputBorder: string\r\n text: string\r\n secondaryText: string\r\n suggestion: string\r\n success: string\r\n error: string\r\n warning: string\r\n primary: string\r\n secondary: string\r\n diff: {\r\n added: string\r\n removed: string\r\n addedDimmed: string\r\n removedDimmed: string\r\n }\r\n}\r\n\r\nconst lightTheme: Theme = {\r\n bashBorder: '#FF6E57',\r\n newcraw: '#FFC233',\r\n noting: '#222222',\r\n notingBorder: '#10b981',\r\n permission: '#e9c61aff',\r\n autoAccept: '#8700ff',\r\n planMode: '#006666',\r\n secondaryBorder: '#999',\r\n inputBorder: '#a5b4fc',\r\n text: '#000',\r\n secondaryText: '#666',\r\n suggestion: '#32e98aff',\r\n success: '#2c7a39',\r\n error: '#ab2b3f',\r\n warning: '#966c1e',\r\n primary: '#000',\r\n secondary: '#666',\r\n diff: {\r\n added: '#69db7c',\r\n removed: '#ffa8b4',\r\n addedDimmed: '#c7e1cb',\r\n removedDimmed: '#fdd2d8',\r\n },\r\n}\r\n\r\nconst lightDaltonizedTheme: Theme = {\r\n bashBorder: '#FF6E57',\r\n newcraw: '#FFC233',\r\n noting: '#222222',\r\n notingBorder: '#059669',\r\n permission: '#3366ff',\r\n autoAccept: '#8700ff',\r\n planMode: '#006666',\r\n secondaryBorder: '#999',\r\n inputBorder: '#93a5f5',\r\n text: '#000',\r\n secondaryText: '#666',\r\n suggestion: '#3366ff',\r\n success: '#006699',\r\n error: '#cc0000',\r\n warning: '#ff9900',\r\n primary: '#000',\r\n secondary: '#666',\r\n diff: {\r\n added: '#99ccff',\r\n removed: '#ffcccc',\r\n addedDimmed: '#d1e7fd',\r\n removedDimmed: '#ffe9e9',\r\n },\r\n}\r\n\r\nconst darkTheme: Theme = {\r\n bashBorder: '#FF6E57',\r\n newcraw: '#FFC233',\r\n noting: '#222222',\r\n notingBorder: '#34d399',\r\n permission: '#b1b9f9',\r\n autoAccept: '#af87ff',\r\n planMode: '#48968c',\r\n secondaryBorder: '#888',\r\n inputBorder: '#818cf8',\r\n text: '#fff',\r\n secondaryText: '#999',\r\n suggestion: '#b1b9f9',\r\n success: '#4eba65',\r\n error: '#ff6b80',\r\n warning: '#ffc107',\r\n primary: '#fff',\r\n secondary: '#999',\r\n diff: {\r\n added: '#225c2b',\r\n removed: '#7a2936',\r\n addedDimmed: '#47584a',\r\n removedDimmed: '#69484d',\r\n },\r\n}\r\n\r\nconst darkDaltonizedTheme: Theme = {\r\n bashBorder: '#FF6E57',\r\n newcraw: '#FFC233',\r\n noting: '#222222',\r\n notingBorder: '#10b981',\r\n permission: '#99ccff',\r\n autoAccept: '#af87ff',\r\n planMode: '#48968c',\r\n secondaryBorder: '#888',\r\n inputBorder: '#7c8ff5',\r\n text: '#fff',\r\n secondaryText: '#999',\r\n suggestion: '#99ccff',\r\n success: '#3399ff',\r\n error: '#ff6666',\r\n warning: '#ffcc00',\r\n primary: '#fff',\r\n secondary: '#999',\r\n diff: {\r\n added: '#004466',\r\n removed: '#660000',\r\n addedDimmed: '#3e515b',\r\n removedDimmed: '#3e2c2c',\r\n },\r\n}\r\n\r\nexport type ThemeNames =\r\n | 'dark'\r\n | 'light'\r\n | 'light-daltonized'\r\n | 'dark-daltonized'\r\n\r\nexport function getTheme(overrideTheme?: ThemeNames): Theme {\r\n const config = getGlobalConfig()\r\n switch (overrideTheme ?? config.theme) {\r\n case 'light':\r\n return lightTheme\r\n case 'light-daltonized':\r\n return lightDaltonizedTheme\r\n case 'dark-daltonized':\r\n return darkDaltonizedTheme\r\n default:\r\n return darkTheme\r\n }\r\n}\r\n"],
5
- "mappings": ";;;;;;;AA4BA,IAAM,aAAoB;AAAA,EACxB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AACF;AAEA,IAAM,uBAA8B;AAAA,EAClC,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AACF;AAEA,IAAM,YAAmB;AAAA,EACvB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AACF;AAEA,IAAM,sBAA6B;AAAA,EACjC,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AACF;AAQO,SAAS,SAAS,eAAmC;AAC1D,QAAM,SAAS,gBAAgB;AAC/B,UAAQ,iBAAiB,OAAO,OAAO;AAAA,IACrC,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;",
5
+ "mappings": ";;;;;;;;AAAA;AA4BA,IAAM,aAAoB;AAAA,EACxB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AACF;AAEA,IAAM,uBAA8B;AAAA,EAClC,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AACF;AAEA,IAAM,YAAmB;AAAA,EACvB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AACF;AAEA,IAAM,sBAA6B;AAAA,EACjC,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AACF;AAQO,SAAS,SAAS,eAAmC;AAC1D,QAAM,SAAS,gBAAgB;AAC/B,UAAQ,iBAAiB,OAAO,OAAO;AAAA,IACrC,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;",
6
6
  "names": []
7
7
  }