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,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/services/telemetry/sentry.ts", "../src/utils/system/execFileNoThrow.ts", "../src/utils/config/env.ts", "../src/utils/plan/planSlugWords.ts", "../src/utils/plan/planMode.ts", "../src/utils/log/index.ts", "../src/utils/log/taskOutputStore.ts", "../src/utils/bun/shell.ts", "../src/utils/state/index.ts"],
4
+ "sourcesContent": ["export function initSentry(): void {}\r\n\r\nexport async function captureException(error: unknown): Promise<void> {}\r\n", "import { execFile } from 'child_process'\r\nimport { getCwd } from '@utils/state'\r\nimport { logError } from '@utils/log'\r\n\r\nconst MS_IN_SECOND = 1000\r\nconst SECONDS_IN_MINUTE = 60\r\n\r\nexport function execFileNoThrow(\r\n file: string,\r\n args: string[],\r\n abortSignal?: AbortSignal,\r\n timeout = 10 * SECONDS_IN_MINUTE * MS_IN_SECOND,\r\n preserveOutputOnError = true,\r\n): Promise<{ stdout: string; stderr: string; code: number }> {\r\n return new Promise(resolve => {\r\n try {\r\n execFile(\r\n file,\r\n args,\r\n {\r\n maxBuffer: 1_000_000,\r\n signal: abortSignal,\r\n timeout,\r\n cwd: getCwd(),\r\n },\r\n (error, stdout, stderr) => {\r\n if (error) {\r\n if (preserveOutputOnError) {\r\n const errorCode = typeof error.code === 'number' ? error.code : 1\r\n resolve({\r\n stdout: stdout || '',\r\n stderr: stderr || '',\r\n code: errorCode,\r\n })\r\n } else {\r\n resolve({ stdout: '', stderr: '', code: 1 })\r\n }\r\n } else {\r\n resolve({ stdout, stderr, code: 0 })\r\n }\r\n },\r\n )\r\n } catch (error) {\r\n logError(error)\r\n resolve({ stdout: '', stderr: '', code: 1 })\r\n }\r\n })\r\n}\r\n", "import { execFileNoThrow } from '@utils/system/execFileNoThrow'\r\nimport { memoize } from 'lodash-es'\r\nimport { join } from 'path'\r\nimport { homedir } from 'os'\r\nimport { CONFIG_BASE_DIR } from '@constants/product'\r\nexport function getNewcrawBaseDir(): string {\r\n return (\r\n process.env.NEWCRAW_CONFIG_DIR ??\r\n process.env.CLAUDE_CONFIG_DIR ??\r\n join(homedir(), CONFIG_BASE_DIR)\r\n )\r\n}\r\n\r\nexport function getGlobalConfigFilePath(): string {\r\n return join(getNewcrawBaseDir(), 'config.json')\r\n}\r\n\r\nexport function getMemoryDir(): string {\r\n return join(getNewcrawBaseDir(), 'memory')\r\n}\r\n\r\nexport const NEWCRAW_BASE_DIR = getNewcrawBaseDir()\r\nexport const GLOBAL_CONFIG_FILE = getGlobalConfigFilePath()\r\nexport const MEMORY_DIR = getMemoryDir()\r\n\r\nconst getIsDocker = memoize(async (): Promise<boolean> => {\r\n const { code } = await execFileNoThrow('test', ['-f', '/.dockerenv'])\r\n if (code !== 0) {\r\n return false\r\n }\r\n return process.platform === 'linux'\r\n})\r\n\r\nconst hasInternetAccess = memoize(async (): Promise<boolean> => {\r\n const offline =\r\n process.env.NEWCRAW_OFFLINE ??\r\n process.env.OFFLINE ??\r\n process.env.NO_NETWORK ??\r\n ''\r\n const normalized = String(offline).trim().toLowerCase()\r\n if (['1', 'true', 'yes', 'on'].includes(normalized)) return false\r\n return true\r\n})\r\n\r\nexport const env = {\r\n getIsDocker,\r\n hasInternetAccess,\r\n isCI: Boolean(process.env.CI),\r\n platform:\r\n process.platform === 'win32'\r\n ? 'windows'\r\n : process.platform === 'darwin'\r\n ? 'macos'\r\n : 'linux',\r\n nodeVersion: process.version,\r\n terminal: process.env.TERM_PROGRAM,\r\n}\r\n", "export const PLAN_SLUG_ADJECTIVES = [\r\n 'abundant',\r\n 'ancient',\r\n 'bright',\r\n 'calm',\r\n 'cheerful',\r\n 'clever',\r\n 'cozy',\r\n 'curious',\r\n 'dapper',\r\n 'dazzling',\r\n 'deep',\r\n 'delightful',\r\n 'eager',\r\n 'elegant',\r\n 'enchanted',\r\n 'fancy',\r\n 'fluffy',\r\n 'gentle',\r\n 'gleaming',\r\n 'golden',\r\n 'graceful',\r\n 'happy',\r\n 'hidden',\r\n 'humble',\r\n 'jolly',\r\n 'joyful',\r\n 'keen',\r\n 'kind',\r\n 'lively',\r\n 'lovely',\r\n 'lucky',\r\n 'luminous',\r\n 'magical',\r\n 'majestic',\r\n 'mellow',\r\n 'merry',\r\n 'mighty',\r\n 'misty',\r\n 'noble',\r\n 'peaceful',\r\n 'playful',\r\n 'polished',\r\n 'precious',\r\n 'proud',\r\n 'quiet',\r\n 'quirky',\r\n 'radiant',\r\n 'rosy',\r\n 'serene',\r\n 'shiny',\r\n 'silly',\r\n 'sleepy',\r\n 'smooth',\r\n 'snazzy',\r\n 'snug',\r\n 'snuggly',\r\n 'soft',\r\n 'sparkling',\r\n 'spicy',\r\n 'splendid',\r\n 'sprightly',\r\n 'starry',\r\n 'steady',\r\n 'sunny',\r\n 'swift',\r\n 'tender',\r\n 'tidy',\r\n 'toasty',\r\n 'tranquil',\r\n 'twinkly',\r\n 'valiant',\r\n 'vast',\r\n 'velvet',\r\n 'vivid',\r\n 'warm',\r\n 'whimsical',\r\n 'wild',\r\n 'wise',\r\n 'witty',\r\n 'wondrous',\r\n 'zany',\r\n 'zesty',\r\n 'zippy',\r\n 'breezy',\r\n 'bubbly',\r\n 'buzzing',\r\n 'cheeky',\r\n 'cosmic',\r\n 'cozy',\r\n 'crispy',\r\n 'crystalline',\r\n 'cuddly',\r\n 'drifting',\r\n 'dreamy',\r\n 'effervescent',\r\n 'ethereal',\r\n 'fizzy',\r\n 'flickering',\r\n 'floating',\r\n 'floofy',\r\n 'fluttering',\r\n 'foamy',\r\n 'frolicking',\r\n 'fuzzy',\r\n 'giggly',\r\n 'glimmering',\r\n 'glistening',\r\n 'glittery',\r\n 'glowing',\r\n 'goofy',\r\n 'groovy',\r\n 'harmonic',\r\n 'hazy',\r\n 'humming',\r\n 'iridescent',\r\n 'jaunty',\r\n 'jazzy',\r\n 'jiggly',\r\n 'melodic',\r\n 'moonlit',\r\n 'mossy',\r\n 'nifty',\r\n 'peppy',\r\n 'prancy',\r\n 'purrfect',\r\n 'purring',\r\n 'quizzical',\r\n 'rippling',\r\n 'rustling',\r\n 'shimmering',\r\n 'shimmying',\r\n 'snappy',\r\n 'snoopy',\r\n 'squishy',\r\n 'swirling',\r\n 'ticklish',\r\n 'tingly',\r\n 'twinkling',\r\n 'velvety',\r\n 'wiggly',\r\n 'wobbly',\r\n 'woolly',\r\n 'zazzy',\r\n 'abstract',\r\n 'adaptive',\r\n 'agile',\r\n 'async',\r\n 'atomic',\r\n 'binary',\r\n 'cached',\r\n 'compiled',\r\n 'composed',\r\n 'compressed',\r\n 'concurrent',\r\n 'cryptic',\r\n 'curried',\r\n 'declarative',\r\n 'delegated',\r\n 'distributed',\r\n 'dynamic',\r\n 'eager',\r\n 'elegant',\r\n 'encapsulated',\r\n 'enumerated',\r\n 'eventual',\r\n 'expressive',\r\n 'federated',\r\n 'functional',\r\n 'generic',\r\n 'greedy',\r\n 'hashed',\r\n 'idempotent',\r\n 'immutable',\r\n 'imperative',\r\n 'indexed',\r\n 'inherited',\r\n 'iterative',\r\n 'lazy',\r\n 'lexical',\r\n 'linear',\r\n 'linked',\r\n 'logical',\r\n 'memoized',\r\n 'modular',\r\n 'mutable',\r\n 'nested',\r\n 'optimized',\r\n 'parallel',\r\n 'parsed',\r\n 'partitioned',\r\n 'piped',\r\n 'polymorphic',\r\n 'pure',\r\n 'reactive',\r\n 'recursive',\r\n 'refactored',\r\n 'reflective',\r\n 'replicated',\r\n 'resilient',\r\n 'robust',\r\n 'scalable',\r\n 'sequential',\r\n 'serialized',\r\n 'sharded',\r\n 'sorted',\r\n 'staged',\r\n 'stateful',\r\n 'stateless',\r\n 'streamed',\r\n 'structured',\r\n 'synchronous',\r\n 'synthetic',\r\n 'temporal',\r\n 'transient',\r\n 'typed',\r\n 'unified',\r\n 'validated',\r\n 'vectorized',\r\n 'virtual',\r\n] as const\r\n\r\nexport const PLAN_SLUG_VERBS = [\r\n 'baking',\r\n 'beaming',\r\n 'booping',\r\n 'bouncing',\r\n 'brewing',\r\n 'bubbling',\r\n 'chasing',\r\n 'churning',\r\n 'coalescing',\r\n 'conjuring',\r\n 'cooking',\r\n 'crafting',\r\n 'crunching',\r\n 'cuddling',\r\n 'dancing',\r\n 'dazzling',\r\n 'discovering',\r\n 'doodling',\r\n 'dreaming',\r\n 'drifting',\r\n 'enchanting',\r\n 'exploring',\r\n 'finding',\r\n 'floating',\r\n 'fluttering',\r\n 'foraging',\r\n 'forging',\r\n 'frolicking',\r\n 'gathering',\r\n 'giggling',\r\n 'gliding',\r\n 'greeting',\r\n 'growing',\r\n 'hatching',\r\n 'herding',\r\n 'honking',\r\n 'hopping',\r\n 'hugging',\r\n 'humming',\r\n 'imagining',\r\n 'inventing',\r\n 'jingling',\r\n 'juggling',\r\n 'jumping',\r\n 'kindling',\r\n 'knitting',\r\n 'launching',\r\n 'leaping',\r\n 'mapping',\r\n 'marinating',\r\n 'meandering',\r\n 'mixing',\r\n 'moseying',\r\n 'munching',\r\n 'napping',\r\n 'nibbling',\r\n 'noodling',\r\n 'orbiting',\r\n 'painting',\r\n 'percolating',\r\n 'petting',\r\n 'plotting',\r\n 'pondering',\r\n 'popping',\r\n 'prancing',\r\n 'purring',\r\n 'puzzling',\r\n 'questing',\r\n 'riding',\r\n 'roaming',\r\n 'rolling',\r\n 'sauteeing',\r\n 'scribbling',\r\n 'seeking',\r\n 'shimmying',\r\n 'singing',\r\n 'skipping',\r\n 'sleeping',\r\n 'snacking',\r\n 'sniffing',\r\n 'snuggling',\r\n 'soaring',\r\n 'sparking',\r\n 'spinning',\r\n 'splashing',\r\n 'sprouting',\r\n 'squishing',\r\n 'stargazing',\r\n 'stirring',\r\n 'strolling',\r\n 'swimming',\r\n 'swinging',\r\n 'tickling',\r\n 'tinkering',\r\n 'toasting',\r\n 'tumbling',\r\n 'twirling',\r\n 'waddling',\r\n 'wandering',\r\n 'watching',\r\n 'weaving',\r\n 'whistling',\r\n 'wibbling',\r\n 'wiggling',\r\n 'wishing',\r\n 'wobbling',\r\n 'wondering',\r\n 'yawning',\r\n 'zooming',\r\n] as const\r\n\r\nexport const PLAN_SLUG_NOUNS = [\r\n 'aurora',\r\n 'avalanche',\r\n 'blossom',\r\n 'breeze',\r\n 'brook',\r\n 'bubble',\r\n 'canyon',\r\n 'cascade',\r\n 'cloud',\r\n 'clover',\r\n 'comet',\r\n 'coral',\r\n 'cosmos',\r\n 'creek',\r\n 'crescent',\r\n 'crystal',\r\n 'dawn',\r\n 'dewdrop',\r\n 'dusk',\r\n 'eclipse',\r\n 'ember',\r\n 'feather',\r\n 'fern',\r\n 'firefly',\r\n 'flame',\r\n 'flurry',\r\n 'fog',\r\n 'forest',\r\n 'frost',\r\n 'galaxy',\r\n 'garden',\r\n 'glacier',\r\n 'glade',\r\n 'grove',\r\n 'harbor',\r\n 'horizon',\r\n 'island',\r\n 'lagoon',\r\n 'lake',\r\n 'leaf',\r\n 'lightning',\r\n 'meadow',\r\n 'meteor',\r\n 'mist',\r\n 'moon',\r\n 'moonbeam',\r\n 'mountain',\r\n 'nebula',\r\n 'nova',\r\n 'ocean',\r\n 'orbit',\r\n 'pebble',\r\n 'petal',\r\n 'pine',\r\n 'planet',\r\n 'pond',\r\n 'puddle',\r\n 'quasar',\r\n 'rain',\r\n 'rainbow',\r\n 'reef',\r\n 'ripple',\r\n 'river',\r\n 'shore',\r\n 'sky',\r\n 'snowflake',\r\n 'spark',\r\n 'spring',\r\n 'star',\r\n 'stardust',\r\n 'starlight',\r\n 'storm',\r\n 'stream',\r\n 'summit',\r\n 'sun',\r\n 'sunbeam',\r\n 'sunrise',\r\n 'sunset',\r\n 'thunder',\r\n 'tide',\r\n 'twilight',\r\n 'valley',\r\n 'volcano',\r\n 'waterfall',\r\n 'wave',\r\n 'willow',\r\n 'wind',\r\n 'alpaca',\r\n 'axolotl',\r\n 'badger',\r\n 'bear',\r\n 'beaver',\r\n 'bee',\r\n 'bird',\r\n 'bumblebee',\r\n 'bunny',\r\n 'cat',\r\n 'chipmunk',\r\n 'crab',\r\n 'crane',\r\n 'deer',\r\n 'dolphin',\r\n 'dove',\r\n 'dragon',\r\n 'dragonfly',\r\n 'duckling',\r\n 'eagle',\r\n 'elephant',\r\n 'falcon',\r\n 'finch',\r\n 'flamingo',\r\n 'fox',\r\n 'frog',\r\n 'giraffe',\r\n 'goose',\r\n 'hamster',\r\n 'hare',\r\n 'hedgehog',\r\n 'hippo',\r\n 'hummingbird',\r\n 'jellyfish',\r\n 'kitten',\r\n 'koala',\r\n 'ladybug',\r\n 'lark',\r\n 'lemur',\r\n 'llama',\r\n 'lobster',\r\n 'lynx',\r\n 'manatee',\r\n 'meerkat',\r\n 'moth',\r\n 'narwhal',\r\n 'newt',\r\n 'octopus',\r\n 'otter',\r\n 'owl',\r\n 'panda',\r\n 'parrot',\r\n 'peacock',\r\n 'pelican',\r\n 'penguin',\r\n 'phoenix',\r\n 'piglet',\r\n 'platypus',\r\n 'pony',\r\n 'porcupine',\r\n 'puffin',\r\n 'puppy',\r\n 'quail',\r\n 'quokka',\r\n 'rabbit',\r\n 'raccoon',\r\n 'raven',\r\n 'robin',\r\n 'salamander',\r\n 'seahorse',\r\n 'seal',\r\n 'sloth',\r\n 'snail',\r\n 'sparrow',\r\n 'sphinx',\r\n 'squid',\r\n 'squirrel',\r\n 'starfish',\r\n 'swan',\r\n 'tiger',\r\n 'toucan',\r\n 'turtle',\r\n 'unicorn',\r\n 'walrus',\r\n 'whale',\r\n 'wolf',\r\n 'wombat',\r\n 'wren',\r\n 'yeti',\r\n 'zebra',\r\n 'acorn',\r\n 'anchor',\r\n 'balloon',\r\n 'beacon',\r\n 'biscuit',\r\n 'blanket',\r\n 'bonbon',\r\n 'book',\r\n 'boot',\r\n 'cake',\r\n 'candle',\r\n 'candy',\r\n 'castle',\r\n 'charm',\r\n 'clock',\r\n 'cocoa',\r\n 'cookie',\r\n 'crayon',\r\n 'crown',\r\n 'cupcake',\r\n 'donut',\r\n 'dream',\r\n 'fairy',\r\n 'fiddle',\r\n 'flask',\r\n 'flute',\r\n 'fountain',\r\n 'gadget',\r\n 'gem',\r\n 'gizmo',\r\n 'globe',\r\n 'goblet',\r\n 'hammock',\r\n 'harp',\r\n 'haven',\r\n 'hearth',\r\n 'honey',\r\n 'journal',\r\n 'kazoo',\r\n 'kettle',\r\n 'key',\r\n 'kite',\r\n 'lantern',\r\n 'lemon',\r\n 'lighthouse',\r\n 'locket',\r\n 'lollipop',\r\n 'mango',\r\n 'map',\r\n 'marble',\r\n 'marshmallow',\r\n 'melody',\r\n 'mitten',\r\n 'mochi',\r\n 'muffin',\r\n 'music',\r\n 'nest',\r\n 'noodle',\r\n 'oasis',\r\n 'origami',\r\n 'pancake',\r\n 'parasol',\r\n 'peach',\r\n 'pearl',\r\n 'pebble',\r\n 'pie',\r\n 'pillow',\r\n 'pinwheel',\r\n 'pixel',\r\n 'pizza',\r\n 'plum',\r\n 'popcorn',\r\n 'pretzel',\r\n 'prism',\r\n 'pudding',\r\n 'pumpkin',\r\n 'puzzle',\r\n 'quiche',\r\n 'quill',\r\n 'quilt',\r\n 'riddle',\r\n 'rocket',\r\n 'rose',\r\n 'scone',\r\n 'scroll',\r\n 'shell',\r\n 'sketch',\r\n 'snowglobe',\r\n 'sonnet',\r\n 'sparkle',\r\n 'spindle',\r\n 'sprout',\r\n 'sundae',\r\n 'swing',\r\n 'taco',\r\n 'teacup',\r\n 'teapot',\r\n 'thimble',\r\n 'toast',\r\n 'token',\r\n 'tome',\r\n 'tower',\r\n 'treasure',\r\n 'treehouse',\r\n 'trinket',\r\n 'truffle',\r\n 'tulip',\r\n 'umbrella',\r\n 'waffle',\r\n 'wand',\r\n 'whisper',\r\n 'whistle',\r\n 'widget',\r\n 'wreath',\r\n 'zephyr',\r\n 'abelson',\r\n 'adleman',\r\n 'aho',\r\n 'allen',\r\n 'babbage',\r\n 'bachman',\r\n 'backus',\r\n 'barto',\r\n 'bengio',\r\n 'bentley',\r\n 'blum',\r\n 'boole',\r\n 'brooks',\r\n 'catmull',\r\n 'cerf',\r\n 'cherny',\r\n 'church',\r\n 'clarke',\r\n 'cocke',\r\n 'codd',\r\n 'conway',\r\n 'cook',\r\n 'corbato',\r\n 'cray',\r\n 'curry',\r\n 'dahl',\r\n 'diffie',\r\n 'dijkstra',\r\n 'dongarra',\r\n 'eich',\r\n 'emerson',\r\n 'engelbart',\r\n 'feigenbaum',\r\n 'floyd',\r\n 'gosling',\r\n 'graham',\r\n 'gray',\r\n 'hamming',\r\n 'hanrahan',\r\n 'hartmanis',\r\n 'hejlsberg',\r\n 'hellman',\r\n 'hennessy',\r\n 'hickey',\r\n 'hinton',\r\n 'hoare',\r\n 'hollerith',\r\n 'hopcroft',\r\n 'hopper',\r\n 'iverson',\r\n 'kahan',\r\n 'kahn',\r\n 'karp',\r\n 'kay',\r\n 'kernighan',\r\n 'knuth',\r\n 'kurzweil',\r\n 'lamport',\r\n 'lampson',\r\n 'lecun',\r\n 'lerdorf',\r\n 'liskov',\r\n 'lovelace',\r\n 'matsumoto',\r\n 'mccarthy',\r\n 'metcalfe',\r\n 'micali',\r\n 'milner',\r\n 'minsky',\r\n 'moler',\r\n 'moore',\r\n 'naur',\r\n 'neumann',\r\n 'newell',\r\n 'nygaard',\r\n 'papert',\r\n 'parnas',\r\n 'pascal',\r\n 'patterson',\r\n 'pearl',\r\n 'perlis',\r\n 'pike',\r\n 'pnueli',\r\n 'rabin',\r\n 'reddy',\r\n 'ritchie',\r\n 'rivest',\r\n 'rossum',\r\n 'russell',\r\n 'scott',\r\n 'sedgewick',\r\n 'shamir',\r\n 'shannon',\r\n 'sifakis',\r\n 'simon',\r\n 'stallman',\r\n 'stearns',\r\n 'steele',\r\n 'stonebraker',\r\n 'stroustrup',\r\n 'sutherland',\r\n 'sutton',\r\n 'tarjan',\r\n 'thacker',\r\n 'thompson',\r\n 'torvalds',\r\n 'turing',\r\n 'ullman',\r\n 'valiant',\r\n 'wadler',\r\n 'wall',\r\n 'wigderson',\r\n 'wilkes',\r\n 'wilkinson',\r\n 'wirth',\r\n 'wozniak',\r\n 'yao',\r\n] as const\r\n", "import { existsSync, mkdirSync, readFileSync, realpathSync } from 'fs'\r\nimport { randomBytes } from 'crypto'\r\nimport { isAbsolute, join, relative, resolve, parse } from 'path'\r\nimport type { ToolUseContext } from '@tool'\r\nimport { getNewcrawBaseDir } from '@utils/config/env'\r\nimport {\r\n PLAN_SLUG_ADJECTIVES,\r\n PLAN_SLUG_NOUNS,\r\n PLAN_SLUG_VERBS,\r\n} from './planSlugWords'\r\n\r\nconst DEFAULT_CONVERSATION_KEY = 'default'\r\nconst MAX_SLUG_ATTEMPTS = 10\r\nconst TURNS_BETWEEN_ATTACHMENTS = 5\r\n\r\ntype PlanModeFlags = {\r\n hasExitedPlanMode: boolean\r\n needsPlanModeExitAttachment: boolean\r\n}\r\n\r\ntype PlanModeAttachmentState = {\r\n hasInjected: boolean\r\n lastInjectedAssistantTurn: number\r\n}\r\n\r\nconst planModeEnabledByConversationKey = new Map<string, boolean>()\r\nconst planSlugCache = new Map<string, string>()\r\nconst planModeFlagsByConversationKey = new Map<string, PlanModeFlags>()\r\nconst planModeAttachmentStateByAgentKey = new Map<\r\n string,\r\n PlanModeAttachmentState\r\n>()\r\nlet activePlanConversationKey: string | null = null\r\n\r\nfunction getConversationKey(context?: Pick<ToolUseContext, 'options'>): string {\r\n const messageLogName =\r\n context?.options?.messageLogName ?? DEFAULT_CONVERSATION_KEY\r\n const forkNumber = context?.options?.forkNumber ?? 0\r\n return `${messageLogName}:${forkNumber}`\r\n}\r\n\r\nexport function getPlanConversationKey(\r\n context?: Pick<ToolUseContext, 'options'>,\r\n): string {\r\n return getConversationKey(context)\r\n}\r\n\r\nexport function setActivePlanConversationKey(conversationKey: string): void {\r\n activePlanConversationKey = conversationKey\r\n}\r\n\r\nexport function getActivePlanConversationKey(): string | null {\r\n return activePlanConversationKey\r\n}\r\n\r\nfunction getAgentKey(\r\n context?: Pick<ToolUseContext, 'options' | 'agentId'>,\r\n): string {\r\n const conversationKey = getConversationKey(context)\r\n const agentId = context?.agentId ?? 'main'\r\n return `${conversationKey}:${agentId}`\r\n}\r\n\r\nfunction pickIndex(length: number): number {\r\n return randomBytes(4).readUInt32BE(0) % length\r\n}\r\n\r\nfunction pickWord(words: readonly string[]): string {\r\n return words[pickIndex(words.length)]!\r\n}\r\n\r\nfunction generateSlug(): string {\r\n const adjective = pickWord(PLAN_SLUG_ADJECTIVES)\r\n const verb = pickWord(PLAN_SLUG_VERBS)\r\n const noun = pickWord(PLAN_SLUG_NOUNS)\r\n return `${adjective}-${verb}-${noun}`\r\n}\r\n\r\nfunction getOrCreatePlanSlug(conversationKey: string): string {\r\n const existing = planSlugCache.get(conversationKey)\r\n if (existing) return existing\r\n\r\n const dir = getPlanDirectory()\r\n\r\n let slug: string | null = null\r\n for (let attempt = 0; attempt < MAX_SLUG_ATTEMPTS; attempt++) {\r\n slug = generateSlug()\r\n const path = join(dir, `${slug}.md`)\r\n if (!existsSync(path)) break\r\n }\r\n\r\n if (!slug) slug = generateSlug()\r\n\r\n planSlugCache.set(conversationKey, slug)\r\n return slug\r\n}\r\n\r\nfunction extractSlugFromPlanFilePath(planFilePath: string): string | null {\r\n if (!planFilePath) return null\r\n const baseName = parse(planFilePath).name\r\n if (!baseName) return null\r\n\r\n const agentMarker = '-agent-'\r\n const idx = baseName.lastIndexOf(agentMarker)\r\n if (idx === -1) return baseName\r\n if (idx === 0) return null\r\n return baseName.slice(0, idx)\r\n}\r\n\r\nfunction getOrCreatePlanModeFlags(conversationKey: string): PlanModeFlags {\r\n const existing = planModeFlagsByConversationKey.get(conversationKey)\r\n if (existing) return existing\r\n const created: PlanModeFlags = {\r\n hasExitedPlanMode: false,\r\n needsPlanModeExitAttachment: false,\r\n }\r\n planModeFlagsByConversationKey.set(conversationKey, created)\r\n return created\r\n}\r\n\r\nfunction getMaxParallelExploreAgents(): number {\r\n const raw =\r\n process.env.NEWCRAW_PLAN_V2_EXPLORE_AGENT_COUNT ??\r\n process.env.CLAUDE_CODE_PLAN_V2_EXPLORE_AGENT_COUNT\r\n if (raw) {\r\n const parsed = Number.parseInt(raw, 10)\r\n if (Number.isFinite(parsed) && parsed > 0 && parsed <= 10) return parsed\r\n }\r\n return 3\r\n}\r\n\r\nfunction getMaxParallelPlanAgents(): number {\r\n const raw =\r\n process.env.NEWCRAW_PLAN_V2_AGENT_COUNT ??\r\n process.env.CLAUDE_CODE_PLAN_V2_AGENT_COUNT\r\n if (raw) {\r\n const parsed = Number.parseInt(raw, 10)\r\n if (Number.isFinite(parsed) && parsed > 0 && parsed <= 10) return parsed\r\n }\r\n return 1\r\n}\r\n\r\nfunction buildPlanModeMainReminder(args: {\r\n planExists: boolean\r\n planFilePath: string\r\n maxParallelExploreAgents: number\r\n maxParallelPlanAgents: number\r\n}): string {\r\n const {\r\n planExists,\r\n planFilePath,\r\n maxParallelExploreAgents,\r\n maxParallelPlanAgents,\r\n } = args\r\n\r\n const writeToolName = 'Write'\r\n const editToolName = 'Edit'\r\n const askUserToolName = 'AskUserQuestion'\r\n const exploreAgentType = 'Explore'\r\n const planAgentType = 'Plan'\r\n const exitPlanModeToolName = 'ExitPlanMode'\r\n\r\n return `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. This supercedes any other instructions you have received.\r\n\r\n## Plan File Info:\r\n${planExists ? `A plan file already exists at ${planFilePath}. You can read it and make incremental edits using the ${editToolName} tool.` : `No plan file exists yet. You should create your plan at ${planFilePath} using the ${writeToolName} tool.`}\r\nYou should build your plan incrementally by writing to or editing this file. NOTE that this is the only file you are allowed to edit - other than this you are only allowed to take READ-ONLY actions.\r\n\r\n## Plan Workflow\r\n\r\n### Phase 1: Initial Understanding\r\nGoal: Gain a comprehensive understanding of the user's request by reading through code and asking them questions. Critical: In this phase you should only use the ${exploreAgentType} subagent type.\r\n\r\n1. Focus on understanding the user's request and the code associated with their request\r\n\r\n2. **Launch up to ${maxParallelExploreAgents} ${exploreAgentType} agents IN PARALLEL** (single message, multiple tool calls) to efficiently explore the codebase.\r\n - Use 1 agent when the task is isolated to known files, the user provided specific file paths, or you're making a small targeted change.\r\n - Use multiple agents when: the scope is uncertain, multiple areas of the codebase are involved, or you need to understand existing patterns before planning.\r\n - Quality over quantity - ${maxParallelExploreAgents} agents maximum, but you should try to use the minimum number of agents necessary (usually just 1)\r\n - If using multiple agents: Provide each agent with a specific search focus or area to explore. Example: One agent searches for existing implementations, another explores related components, a third investigates testing patterns\r\n\r\n3. After exploring the code, use the ${askUserToolName} tool to clarify ambiguities in the user request up front.\r\n\r\n### Phase 2: Design\r\nGoal: Design an implementation approach.\r\n\r\nLaunch ${planAgentType} agent(s) to design the implementation based on the user's intent and your exploration results from Phase 1.\r\n\r\nYou can launch up to ${maxParallelPlanAgents} agent(s) in parallel.\r\n\r\n**Guidelines:**\r\n- **Default**: Launch at least 1 Plan agent for most tasks - it helps validate your understanding and consider alternatives\r\n- **Skip agents**: Only for truly trivial tasks (typo fixes, single-line changes, simple renames)\r\n${\r\n maxParallelPlanAgents > 1\r\n ? `- **Multiple agents**: Use up to ${maxParallelPlanAgents} agents for complex tasks that benefit from different perspectives\r\n\r\nExamples of when to use multiple agents:\r\n- The task touches multiple parts of the codebase\r\n- It's a large refactor or architectural change\r\n- There are many edge cases to consider\r\n- You'd benefit from exploring different approaches\r\n\r\nExample perspectives by task type:\r\n- New feature: simplicity vs performance vs maintainability\r\n- Bug fix: root cause vs workaround vs prevention\r\n- Refactoring: minimal change vs clean architecture\r\n`\r\n : ''\r\n}\r\nIn the agent prompt:\r\n- Provide comprehensive background context from Phase 1 exploration including filenames and code path traces\r\n- Describe requirements and constraints\r\n- Request a detailed implementation plan\r\n\r\n### Phase 3: Review\r\nGoal: Review the plan(s) from Phase 2 and ensure alignment with the user's intentions.\r\n1. Read the critical files identified by agents to deepen your understanding\r\n2. Ensure that the plans align with the user's original request\r\n3. Use ${askUserToolName} to clarify any remaining questions with the user\r\n\r\n### Phase 4: Final Plan\r\nGoal: Write your final plan to the plan file (the only file you can edit).\r\n- Include only your recommended approach, not all alternatives\r\n- Ensure that the plan file is concise enough to scan quickly, but detailed enough to execute effectively\r\n- Include the paths of critical files to be modified\r\n\r\n### Phase 5: Call ${exitPlanModeToolName}\r\nAt the very end of your turn, once you have asked the user questions and are happy with your final plan file - you should always call ${exitPlanModeToolName} to indicate to the user that you are done planning.\r\nThis is critical - your turn should only end with either asking the user a question or calling ${exitPlanModeToolName}. Do not stop unless it's for these 2 reasons.\r\n\r\nNOTE: At any point in time through this workflow you should feel free to ask the user questions or clarifications. Don't make large assumptions about user intent. The goal is to present a well researched plan to the user, and tie any loose ends before implementation begins.`\r\n}\r\n\r\nfunction buildPlanModeSubAgentReminder(args: {\r\n planExists: boolean\r\n planFilePath: string\r\n}): string {\r\n const { planExists, planFilePath } = args\r\n\r\n const writeToolName = 'Write'\r\n const editToolName = 'Edit'\r\n const askUserToolName = 'AskUserQuestion'\r\n\r\n return `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits, run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. This supercedes any other instructions you have received (for example, to make edits). Instead, you should:\r\n\r\n## Plan File Info:\r\n${planExists ? `A plan file already exists at ${planFilePath}. You can read it and make incremental edits using the ${editToolName} tool if you need to.` : `No plan file exists yet. You should create your plan at ${planFilePath} using the ${writeToolName} tool if you need to.`}\r\nYou should build your plan incrementally by writing to or editing this file. NOTE that this is the only file you are allowed to edit - other than this you are only allowed to take READ-ONLY actions.\r\nAnswer the user's query comprehensively, using the ${askUserToolName} tool if you need to ask the user clarifying questions. If you do use the ${askUserToolName}, make sure to ask all clarifying questions you need to fully understand the user's intent before proceeding.`\r\n}\r\n\r\nfunction buildPlanModeReentryReminder(planFilePath: string): string {\r\n const exitPlanModeToolName = 'ExitPlanMode'\r\n\r\n return `## Re-entering Plan Mode\r\n\r\nYou are returning to plan mode after having previously exited it. A plan file exists at ${planFilePath} from your previous planning session.\r\n\r\n**Before proceeding with any new planning, you should:**\r\n1. Read the existing plan file to understand what was previously planned\r\n2. Evaluate the user's current request against that plan\r\n3. Decide how to proceed:\r\n - **Different task**: If the user's request is for a different task\u2014even if it's similar or related\u2014start fresh by overwriting the existing plan\r\n - **Same task, continuing**: If this is explicitly a continuation or refinement of the exact same task, modify the existing plan while cleaning up outdated or irrelevant sections\r\n4. Continue on with the plan process and most importantly you should always edit the plan file one way or the other before calling ${exitPlanModeToolName}\r\n\r\nTreat this as a fresh planning session. Do not assume the existing plan is relevant without evaluating it first.`\r\n}\r\n\r\nfunction buildPlanModeExitReminder(planFilePath: string): string {\r\n return `## Exited Plan Mode\r\n\r\nYou have exited plan mode. You can now make edits, run tools, and take actions. The plan file is located at ${planFilePath} if you need to reference it.`\r\n}\r\n\r\nfunction wrapSystemReminder(text: string): string {\r\n return `<system-reminder>\\n${text}\\n</system-reminder>`\r\n}\r\n\r\nexport function getPlanModeSystemPromptAdditions(\r\n messages: Array<{ type?: string }>,\r\n context: ToolUseContext,\r\n): string[] {\r\n const conversationKey = getConversationKey(context)\r\n const agentKey = getAgentKey(context)\r\n const flags = getOrCreatePlanModeFlags(conversationKey)\r\n const additions: string[] = []\r\n\r\n const assistantTurns = messages.filter(m => m?.type === 'assistant').length\r\n\r\n if (isPlanModeEnabled(context)) {\r\n const previous =\r\n planModeAttachmentStateByAgentKey.get(agentKey) ??\r\n ({\r\n hasInjected: false,\r\n lastInjectedAssistantTurn: -Infinity,\r\n } satisfies PlanModeAttachmentState)\r\n\r\n if (\r\n previous.hasInjected &&\r\n assistantTurns - previous.lastInjectedAssistantTurn <\r\n TURNS_BETWEEN_ATTACHMENTS\r\n ) {\r\n return []\r\n }\r\n\r\n const planFilePath = getPlanFilePath(context.agentId, conversationKey)\r\n const planExists = existsSync(planFilePath)\r\n\r\n if (flags.hasExitedPlanMode && planExists) {\r\n additions.push(\r\n wrapSystemReminder(buildPlanModeReentryReminder(planFilePath)),\r\n )\r\n flags.hasExitedPlanMode = false\r\n }\r\n\r\n const isSubAgent = !!context.agentId\r\n additions.push(\r\n wrapSystemReminder(\r\n isSubAgent\r\n ? buildPlanModeSubAgentReminder({ planExists, planFilePath })\r\n : buildPlanModeMainReminder({\r\n planExists,\r\n planFilePath,\r\n maxParallelExploreAgents: getMaxParallelExploreAgents(),\r\n maxParallelPlanAgents: getMaxParallelPlanAgents(),\r\n }),\r\n ),\r\n )\r\n\r\n planModeFlagsByConversationKey.set(conversationKey, flags)\r\n planModeAttachmentStateByAgentKey.set(agentKey, {\r\n hasInjected: true,\r\n lastInjectedAssistantTurn: assistantTurns,\r\n })\r\n\r\n return additions\r\n }\r\n\r\n if (flags.needsPlanModeExitAttachment) {\r\n const planFilePath = getPlanFilePath(context.agentId, conversationKey)\r\n additions.push(wrapSystemReminder(buildPlanModeExitReminder(planFilePath)))\r\n flags.needsPlanModeExitAttachment = false\r\n planModeFlagsByConversationKey.set(conversationKey, flags)\r\n }\r\n\r\n return additions\r\n}\r\n\r\nexport function isPlanModeEnabled(context?: ToolUseContext): boolean {\r\n const key = getConversationKey(context)\r\n return planModeEnabledByConversationKey.get(key) ?? false\r\n}\r\n\r\nexport function enterPlanMode(context?: ToolUseContext): {\r\n planFilePath: string\r\n} {\r\n const key = getConversationKey(context)\r\n planModeEnabledByConversationKey.set(key, true)\r\n return { planFilePath: getPlanFilePath(context?.agentId, key) }\r\n}\r\n\r\nexport function enterPlanModeForConversationKey(conversationKey: string): void {\r\n planModeEnabledByConversationKey.set(conversationKey, true)\r\n}\r\n\r\nexport function exitPlanMode(context?: ToolUseContext): {\r\n planFilePath: string\r\n} {\r\n const key = getConversationKey(context)\r\n planModeEnabledByConversationKey.set(key, false)\r\n\r\n const flags = getOrCreatePlanModeFlags(key)\r\n flags.hasExitedPlanMode = true\r\n flags.needsPlanModeExitAttachment = true\r\n planModeFlagsByConversationKey.set(key, flags)\r\n\r\n return { planFilePath: getPlanFilePath(context?.agentId, key) }\r\n}\r\n\r\nexport function exitPlanModeForConversationKey(conversationKey: string): void {\r\n planModeEnabledByConversationKey.set(conversationKey, false)\r\n const flags = getOrCreatePlanModeFlags(conversationKey)\r\n flags.hasExitedPlanMode = true\r\n flags.needsPlanModeExitAttachment = true\r\n planModeFlagsByConversationKey.set(conversationKey, flags)\r\n}\r\n\r\nexport function setPlanSlug(conversationKey: string, slug: string): void {\r\n planSlugCache.set(conversationKey, slug)\r\n}\r\n\r\nexport function getPlanSlugForConversationKey(\r\n conversationKey: string,\r\n): string | null {\r\n return planSlugCache.get(conversationKey) ?? null\r\n}\r\n\r\nexport function hydratePlanSlugFromMessages(\r\n messages: unknown[],\r\n context?: ToolUseContext,\r\n): boolean {\r\n const conversationKey = getConversationKey(context)\r\n if (planSlugCache.has(conversationKey)) return true\r\n\r\n for (let i = messages.length - 1; i >= 0; i--) {\r\n const msg: any = (messages as any[])[i]\r\n const directSlug = typeof msg?.slug === 'string' ? msg.slug.trim() : ''\r\n if (directSlug) {\r\n planSlugCache.set(conversationKey, directSlug)\r\n return true\r\n }\r\n\r\n const data = msg?.toolUseResult?.data\r\n if (!data || typeof data !== 'object') continue\r\n\r\n const planFilePath =\r\n typeof (data as any).planFilePath === 'string'\r\n ? (data as any).planFilePath\r\n : typeof (data as any).filePath === 'string'\r\n ? (data as any).filePath\r\n : null\r\n\r\n if (!planFilePath) continue\r\n\r\n const slug = extractSlugFromPlanFilePath(planFilePath)\r\n if (!slug) continue\r\n\r\n planSlugCache.set(conversationKey, slug)\r\n return true\r\n }\r\n\r\n return false\r\n}\r\n\r\nexport function getPlanDirectory(): string {\r\n const dir = join(getNewcrawBaseDir(), 'plans')\r\n if (!existsSync(dir)) {\r\n mkdirSync(dir, { recursive: true })\r\n }\r\n return dir\r\n}\r\n\r\nexport function getPlanFilePath(\r\n agentId?: string,\r\n conversationKey?: string,\r\n): string {\r\n const dir = getPlanDirectory()\r\n const key = conversationKey ?? DEFAULT_CONVERSATION_KEY\r\n const slug = getOrCreatePlanSlug(key)\r\n\r\n if (!agentId) return join(dir, `${slug}.md`)\r\n return join(dir, `${slug}-agent-${agentId}.md`)\r\n}\r\n\r\nfunction resolveExistingPath(path: string): string {\r\n const resolved = resolve(path)\r\n try {\r\n return realpathSync(resolved)\r\n } catch {\r\n return resolved\r\n }\r\n}\r\n\r\nexport function isPlanFilePathForActiveConversation(path: string): boolean {\r\n const key = activePlanConversationKey ?? DEFAULT_CONVERSATION_KEY\r\n const planDir = resolveExistingPath(getPlanDirectory())\r\n const expectedMainPlanPath = resolveExistingPath(\r\n getPlanFilePath(undefined, key),\r\n )\r\n const target = resolveExistingPath(path)\r\n\r\n const rel = relative(planDir, target)\r\n if (!rel || rel === '') return false\r\n if (rel.startsWith('..')) return false\r\n if (isAbsolute(rel)) return false\r\n\r\n const expectedSlug = parse(expectedMainPlanPath).name\r\n const targetName = parse(target).name\r\n return (\r\n targetName === expectedSlug ||\r\n targetName.startsWith(`${expectedSlug}-agent-`)\r\n )\r\n}\r\n\r\nexport function isMainPlanFilePathForActiveConversation(path: string): boolean {\r\n const key = activePlanConversationKey ?? DEFAULT_CONVERSATION_KEY\r\n const expected = resolveExistingPath(getPlanFilePath(undefined, key))\r\n const target = resolveExistingPath(path)\r\n return target === expected\r\n}\r\n\r\nexport function isPathInPlanDirectory(path: string): boolean {\r\n const dir = resolve(getPlanDirectory())\r\n const target = resolve(path)\r\n const rel = relative(dir, target)\r\n if (!rel || rel === '') return true\r\n if (rel.startsWith('..')) return false\r\n if (isAbsolute(rel)) return false\r\n return true\r\n}\r\n\r\nexport function readPlanFile(\r\n agentId?: string,\r\n conversationKey?: string,\r\n): { content: string; exists: boolean; planFilePath: string } {\r\n const planFilePath = getPlanFilePath(agentId, conversationKey)\r\n if (!existsSync(planFilePath)) {\r\n return { content: '', exists: false, planFilePath }\r\n }\r\n return {\r\n content: readFileSync(planFilePath, 'utf8'),\r\n exists: true,\r\n planFilePath,\r\n }\r\n}\r\n\r\nexport function __resetPlanModeForTests(): void {\r\n planModeEnabledByConversationKey.clear()\r\n planSlugCache.clear()\r\n planModeFlagsByConversationKey.clear()\r\n planModeAttachmentStateByAgentKey.clear()\r\n activePlanConversationKey = null\r\n}\r\n", "import {\r\n existsSync,\r\n mkdirSync,\r\n writeFileSync,\r\n readFileSync,\r\n readdirSync,\r\n statSync,\r\n copyFileSync,\r\n promises as fsPromises,\r\n} from 'fs'\r\nimport { dirname, join } from 'path'\r\nimport { captureException } from '@services/sentry'\r\nimport { randomUUID } from 'crypto'\r\nimport envPaths from 'env-paths'\r\nimport type { LogOption, SerializedMessage } from '@newcraw-types/logs'\r\nimport { MACRO } from '@constants/macros'\r\nimport { PRODUCT_COMMAND } from '@constants/product'\r\nimport { getPlanSlugForConversationKey } from '@utils/plan/planMode'\r\nimport { getNewcrawBaseDir } from '@utils/config/env'\r\n\r\nconst IN_MEMORY_ERROR_LOG: Array<{ error: string; timestamp: string }> = []\r\nconst MAX_IN_MEMORY_ERRORS = 100\r\n\r\nconst PERMISSION_ERROR_CODES = new Set(['EACCES', 'EPERM', 'EROFS'])\r\n\r\nfunction isPermissionError(error: unknown): error is NodeJS.ErrnoException {\r\n return (\r\n typeof error === 'object' &&\r\n error !== null &&\r\n 'code' in error &&\r\n PERMISSION_ERROR_CODES.has((error as NodeJS.ErrnoException).code ?? '')\r\n )\r\n}\r\n\r\nfunction safeMkdir(dir: string): boolean {\r\n if (existsSync(dir)) return true\r\n try {\r\n mkdirSync(dir, { recursive: true })\r\n return true\r\n } catch (error) {\r\n if (isPermissionError(error)) {\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n\r\nfunction safeWriteFile(\r\n path: string,\r\n data: string,\r\n encoding: BufferEncoding = 'utf8',\r\n): boolean {\r\n try {\r\n writeFileSync(path, data, encoding)\r\n return true\r\n } catch (error) {\r\n if (isPermissionError(error)) {\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n\r\nexport const SESSION_ID = randomUUID()\r\n\r\nconst paths = envPaths(PRODUCT_COMMAND)\r\n\r\nfunction getProjectDir(cwd: string): string {\r\n return cwd.replace(/[^a-zA-Z0-9]/g, '-')\r\n}\r\n\r\nfunction getLegacyCacheRoot(): string {\r\n return process.env.NEWCRAW_LEGACY_CACHE_ROOT ?? paths.cache\r\n}\r\n\r\nfunction getNewLogRoot(): string {\r\n return process.env.NEWCRAW_LOG_ROOT ?? getNewcrawBaseDir()\r\n}\r\n\r\nexport const CACHE_PATHS = {\r\n errors: () => join(getNewLogRoot(), getProjectDir(process.cwd()), 'errors'),\r\n messages: () =>\r\n join(getNewLogRoot(), getProjectDir(process.cwd()), 'messages'),\r\n mcpLogs: (serverName: string) =>\r\n join(\r\n getLegacyCacheRoot(),\r\n getProjectDir(process.cwd()),\r\n `mcp-logs-${serverName}`,\r\n ),\r\n}\r\n\r\nexport const LEGACY_CACHE_PATHS = {\r\n errors: () =>\r\n join(getLegacyCacheRoot(), getProjectDir(process.cwd()), 'errors'),\r\n messages: () =>\r\n join(getLegacyCacheRoot(), getProjectDir(process.cwd()), 'messages'),\r\n mcpLogs: (serverName: string) =>\r\n join(\r\n getLegacyCacheRoot(),\r\n getProjectDir(process.cwd()),\r\n `mcp-logs-${serverName}`,\r\n ),\r\n}\r\n\r\nexport function dateToFilename(date: Date): string {\r\n return date.toISOString().replace(/[:.]/g, '-')\r\n}\r\n\r\nconst DATE = dateToFilename(new Date())\r\n\r\nfunction getErrorsPath(): string {\r\n return join(CACHE_PATHS.errors(), DATE + '.txt')\r\n}\r\n\r\nexport function getMessagesPath(\r\n messageLogName: string,\r\n forkNumber: number,\r\n sidechainNumber: number,\r\n): string {\r\n return join(\r\n CACHE_PATHS.messages(),\r\n `${messageLogName}${forkNumber > 0 ? `-${forkNumber}` : ''}${\r\n sidechainNumber > 0 ? `-sidechain-${sidechainNumber}` : ''\r\n }.json`,\r\n )\r\n}\r\n\r\nconst MIGRATION_MESSAGE_LOG_LIMIT = 50\r\nlet didMigrateMessageLogs = false\r\n\r\nfunction migrateLegacyMessageLogsIfNeeded() {\r\n if (didMigrateMessageLogs) return\r\n didMigrateMessageLogs = true\r\n\r\n const legacyDir = LEGACY_CACHE_PATHS.messages()\r\n const newDir = CACHE_PATHS.messages()\r\n\r\n if (!existsSync(legacyDir)) return\r\n\r\n const newHasAny =\r\n existsSync(newDir) &&\r\n readdirSync(newDir).some(file => file.endsWith('.json'))\r\n if (newHasAny) return\r\n\r\n try {\r\n mkdirSync(newDir, { recursive: true })\r\n } catch {\r\n return\r\n }\r\n\r\n let legacyFiles: string[] = []\r\n try {\r\n legacyFiles = readdirSync(legacyDir).filter(file => file.endsWith('.json'))\r\n } catch {\r\n return\r\n }\r\n\r\n const sorted = legacyFiles\r\n .map(file => {\r\n try {\r\n const stats = statSync(join(legacyDir, file))\r\n return { file, mtimeMs: stats.mtimeMs }\r\n } catch {\r\n return { file, mtimeMs: 0 }\r\n }\r\n })\r\n .sort((a, b) => b.mtimeMs - a.mtimeMs)\r\n .slice(0, MIGRATION_MESSAGE_LOG_LIMIT)\r\n\r\n for (const { file } of sorted) {\r\n const src = join(legacyDir, file)\r\n const dest = join(newDir, file)\r\n if (existsSync(dest)) continue\r\n try {\r\n copyFileSync(src, dest)\r\n } catch {\r\n }\r\n }\r\n}\r\n\r\nexport function logError(error: unknown): void {\r\n try {\r\n if (process.env.NODE_ENV === 'test') {\r\n console.error(error)\r\n }\r\n\r\n const errorStr =\r\n error instanceof Error ? error.stack || error.message : String(error)\r\n\r\n const errorInfo = {\r\n error: errorStr,\r\n timestamp: new Date().toISOString(),\r\n }\r\n\r\n if (IN_MEMORY_ERROR_LOG.length >= MAX_IN_MEMORY_ERRORS) {\r\n IN_MEMORY_ERROR_LOG.shift()\r\n }\r\n IN_MEMORY_ERROR_LOG.push(errorInfo)\r\n\r\n appendToLog(getErrorsPath(), {\r\n error: errorStr,\r\n })\r\n } catch {\r\n }\r\n captureException(error)\r\n}\r\n\r\nexport function getErrorsLog(): object[] {\r\n return readLog(getErrorsPath())\r\n}\r\n\r\nexport function getInMemoryErrors(): object[] {\r\n return [...IN_MEMORY_ERROR_LOG]\r\n}\r\n\r\nfunction readLog(path: string): object[] {\r\n if (!existsSync(path)) {\r\n return []\r\n }\r\n try {\r\n return JSON.parse(readFileSync(path, 'utf8'))\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\nfunction appendToLog(path: string, message: object): void {\r\n if (process.env.USER_TYPE === 'external') {\r\n return\r\n }\r\n\r\n const dir = dirname(path)\r\n if (!safeMkdir(dir)) {\r\n return\r\n }\r\n\r\n if (!existsSync(path) && !safeWriteFile(path, '[]')) {\r\n return\r\n }\r\n\r\n const messages = readLog(path)\r\n const messageWithTimestamp = {\r\n ...message,\r\n cwd: process.cwd(),\r\n userType: process.env.USER_TYPE,\r\n sessionId: SESSION_ID,\r\n timestamp: new Date().toISOString(),\r\n version: MACRO.VERSION,\r\n }\r\n messages.push(messageWithTimestamp)\r\n\r\n safeWriteFile(path, JSON.stringify(messages, null, 2))\r\n}\r\n\r\nexport function overwriteLog(\r\n path: string,\r\n messages: object[],\r\n options?: { conversationKey?: string },\r\n): void {\r\n if (process.env.USER_TYPE === 'external') {\r\n return\r\n }\r\n\r\n if (!messages.length) {\r\n return\r\n }\r\n\r\n const dir = dirname(path)\r\n if (!safeMkdir(dir)) {\r\n return\r\n }\r\n\r\n const slug = options?.conversationKey\r\n ? getPlanSlugForConversationKey(options.conversationKey)\r\n : null\r\n\r\n const messagesWithMetadata = messages.map(message => ({\r\n ...message,\r\n ...(slug ? { slug } : {}),\r\n cwd: process.cwd(),\r\n userType: process.env.USER_TYPE,\r\n sessionId: SESSION_ID,\r\n timestamp: new Date().toISOString(),\r\n version: MACRO.VERSION,\r\n }))\r\n\r\n safeWriteFile(path, JSON.stringify(messagesWithMetadata, null, 2))\r\n}\r\n\r\nexport async function loadLogList(\r\n path = CACHE_PATHS.messages(),\r\n): Promise<LogOption[]> {\r\n if (path === CACHE_PATHS.messages()) {\r\n migrateLegacyMessageLogsIfNeeded()\r\n }\r\n\r\n const searchPaths =\r\n path === CACHE_PATHS.messages()\r\n ? [CACHE_PATHS.messages(), LEGACY_CACHE_PATHS.messages()]\r\n : [path]\r\n\r\n const existingPaths = searchPaths.filter(p => existsSync(p))\r\n if (existingPaths.length === 0) {\r\n logError(`No logs found at ${path}`)\r\n return []\r\n }\r\n\r\n const filesWithDir = (\r\n await Promise.all(\r\n existingPaths.map(async dirPath => {\r\n const dirFiles = await fsPromises.readdir(dirPath)\r\n return dirFiles.map(file => ({ file, dirPath }))\r\n }),\r\n )\r\n ).flat()\r\n\r\n const seen = new Set<string>()\r\n const uniqueFiles = filesWithDir.filter(({ file }) => {\r\n if (seen.has(file)) return false\r\n seen.add(file)\r\n return true\r\n })\r\n\r\n const logData = await Promise.all(\r\n uniqueFiles.map(async ({ file, dirPath }, i) => {\r\n const fullPath = join(dirPath, file)\r\n const content = await fsPromises.readFile(fullPath, 'utf8')\r\n const messages = JSON.parse(content) as SerializedMessage[]\r\n const firstMessage = messages[0]\r\n const lastMessage = messages[messages.length - 1]\r\n const firstPrompt =\r\n firstMessage?.type === 'user' &&\r\n typeof firstMessage?.message?.content === 'string'\r\n ? firstMessage?.message?.content\r\n : 'No prompt'\r\n\r\n const { date, forkNumber, sidechainNumber } = parseLogFilename(file)\r\n return {\r\n date,\r\n forkNumber,\r\n fullPath,\r\n messages,\r\n value: i,\r\n created: parseISOString(firstMessage?.timestamp || date),\r\n modified: lastMessage?.timestamp\r\n ? parseISOString(lastMessage.timestamp)\r\n : parseISOString(date),\r\n firstPrompt:\r\n firstPrompt.split('\\n')[0]?.slice(0, 50) +\r\n (firstPrompt.length > 50 ? '\u2026' : '') || 'No prompt',\r\n messageCount: messages.length,\r\n sidechainNumber,\r\n }\r\n }),\r\n )\r\n\r\n return sortLogs(logData.filter(_ => _.messages.length)).map((_, i) => ({\r\n ..._,\r\n value: i,\r\n }))\r\n}\r\n\r\nexport function parseLogFilename(filename: string): {\r\n date: string\r\n forkNumber: number | undefined\r\n sidechainNumber: number | undefined\r\n} {\r\n const base = filename.split('.')[0]!\r\n const segments = base.split('-')\r\n const hasSidechain = base.includes('-sidechain-')\r\n\r\n let date = base\r\n let forkNumber: number | undefined = undefined\r\n let sidechainNumber: number | undefined = undefined\r\n\r\n if (hasSidechain) {\r\n const sidechainIndex = segments.indexOf('sidechain')\r\n sidechainNumber = Number(segments[sidechainIndex + 1])\r\n if (sidechainIndex > 6) {\r\n forkNumber = Number(segments[sidechainIndex - 1])\r\n date = segments.slice(0, 6).join('-')\r\n } else {\r\n date = segments.slice(0, 6).join('-')\r\n }\r\n } else if (segments.length > 6) {\r\n const lastSegment = Number(segments[segments.length - 1])\r\n forkNumber = lastSegment >= 0 ? lastSegment : undefined\r\n date = segments.slice(0, 6).join('-')\r\n } else {\r\n date = base\r\n }\r\n\r\n return { date, forkNumber, sidechainNumber }\r\n}\r\n\r\nexport function getNextAvailableLogForkNumber(\r\n date: string,\r\n forkNumber: number,\r\n sidechainNumber: number,\r\n): number {\r\n while (existsSync(getMessagesPath(date, forkNumber, sidechainNumber))) {\r\n forkNumber++\r\n }\r\n return forkNumber\r\n}\r\n\r\nexport function getNextAvailableLogSidechainNumber(\r\n date: string,\r\n forkNumber: number,\r\n): number {\r\n let sidechainNumber = 1\r\n while (existsSync(getMessagesPath(date, forkNumber, sidechainNumber))) {\r\n sidechainNumber++\r\n }\r\n return sidechainNumber\r\n}\r\n\r\nexport function getForkNumberFromFilename(\r\n filename: string,\r\n): number | undefined {\r\n const base = filename.split('.')[0]!\r\n const segments = base.split('-')\r\n const hasSidechain = base.includes('-sidechain-')\r\n\r\n if (hasSidechain) {\r\n const sidechainIndex = segments.indexOf('sidechain')\r\n if (sidechainIndex > 6) {\r\n return Number(segments[sidechainIndex - 1])\r\n }\r\n return undefined\r\n }\r\n\r\n if (segments.length > 6) {\r\n const lastNumber = Number(segments[segments.length - 1])\r\n return lastNumber >= 0 ? lastNumber : undefined\r\n }\r\n return undefined\r\n}\r\n\r\nexport function sortLogs(logs: LogOption[]): LogOption[] {\r\n return logs.sort((a, b) => {\r\n const modifiedDiff = b.modified.getTime() - a.modified.getTime()\r\n if (modifiedDiff !== 0) {\r\n return modifiedDiff\r\n }\r\n\r\n const createdDiff = b.created.getTime() - a.created.getTime()\r\n if (createdDiff !== 0) {\r\n return createdDiff\r\n }\r\n\r\n return (b.forkNumber ?? 0) - (a.forkNumber ?? 0)\r\n })\r\n}\r\n\r\nexport function formatDate(date: Date): string {\r\n const now = new Date()\r\n const yesterday = new Date(now)\r\n yesterday.setDate(yesterday.getDate() - 1)\r\n\r\n const isToday = date.toDateString() === now.toDateString()\r\n const isYesterday = date.toDateString() === yesterday.toDateString()\r\n\r\n const timeStr = date\r\n .toLocaleTimeString('en-US', {\r\n hour: 'numeric',\r\n minute: '2-digit',\r\n hour12: true,\r\n })\r\n .toLowerCase()\r\n\r\n if (isToday) {\r\n return `Today at ${timeStr}`\r\n } else if (isYesterday) {\r\n return `Yesterday at ${timeStr}`\r\n } else {\r\n return (\r\n date.toLocaleDateString('en-US', {\r\n month: 'short',\r\n day: 'numeric',\r\n }) + ` at ${timeStr}`\r\n )\r\n }\r\n}\r\n\r\nexport function parseISOString(s: string): Date {\r\n const b = s.split(/\\D+/)\r\n return new Date(\r\n Date.UTC(\r\n parseInt(b[0]!, 10),\r\n parseInt(b[1]!, 10) - 1,\r\n parseInt(b[2]!, 10),\r\n parseInt(b[3]!, 10),\r\n parseInt(b[4]!, 10),\r\n parseInt(b[5]!, 10),\r\n parseInt(b[6]!, 10),\r\n ),\r\n )\r\n}\r\n\r\nexport function logMCPError(serverName: string, error: unknown): void {\r\n try {\r\n const logDir = CACHE_PATHS.mcpLogs(serverName)\r\n const errorStr =\r\n error instanceof Error ? error.stack || error.message : String(error)\r\n const timestamp = new Date().toISOString()\r\n\r\n const logFile = join(logDir, DATE + '.txt')\r\n\r\n if (!existsSync(logDir)) {\r\n mkdirSync(logDir, { recursive: true })\r\n }\r\n\r\n if (!existsSync(logFile)) {\r\n writeFileSync(logFile, '[]', 'utf8')\r\n }\r\n\r\n const errorInfo = {\r\n error: errorStr,\r\n timestamp,\r\n sessionId: SESSION_ID,\r\n cwd: process.cwd(),\r\n }\r\n\r\n const messages = readLog(logFile)\r\n messages.push(errorInfo)\r\n writeFileSync(logFile, JSON.stringify(messages, null, 2), 'utf8')\r\n } catch {\r\n }\r\n}\r\n", "import {\r\n appendFileSync,\r\n existsSync,\r\n mkdirSync,\r\n readFileSync,\r\n statSync,\r\n writeFileSync,\r\n} from 'fs'\r\nimport { dirname, join } from 'path'\r\nimport { getNewcrawBaseDir } from '@utils/config/env'\r\n\r\nfunction getProjectDir(cwd: string): string {\r\n return cwd.replace(/[^a-zA-Z0-9]/g, '-')\r\n}\r\n\r\nconst PROJECT_ROOT = process.cwd()\r\n\r\nexport function getTaskOutputsDir(): string {\r\n return join(getNewcrawBaseDir(), getProjectDir(PROJECT_ROOT), 'tasks')\r\n}\r\n\r\nexport function getTaskOutputFilePath(taskId: string): string {\r\n return join(getTaskOutputsDir(), `${taskId}.output`)\r\n}\r\n\r\nexport function ensureTaskOutputsDirExists(): void {\r\n const dir = getTaskOutputsDir()\r\n if (existsSync(dir)) return\r\n mkdirSync(dir, { recursive: true })\r\n}\r\n\r\nexport function touchTaskOutputFile(taskId: string): string {\r\n ensureTaskOutputsDirExists()\r\n const filePath = getTaskOutputFilePath(taskId)\r\n if (!existsSync(filePath)) {\r\n const parent = dirname(filePath)\r\n if (!existsSync(parent)) mkdirSync(parent, { recursive: true })\r\n writeFileSync(filePath, '', 'utf8')\r\n }\r\n return filePath\r\n}\r\n\r\nexport function appendTaskOutput(taskId: string, chunk: string): void {\r\n try {\r\n ensureTaskOutputsDirExists()\r\n appendFileSync(getTaskOutputFilePath(taskId), chunk, 'utf8')\r\n } catch {\r\n }\r\n}\r\n\r\nexport function readTaskOutputDelta(\r\n taskId: string,\r\n offset: number,\r\n): {\r\n content: string\r\n newOffset: number\r\n} {\r\n try {\r\n const filePath = getTaskOutputFilePath(taskId)\r\n if (!existsSync(filePath)) return { content: '', newOffset: offset }\r\n const size = statSync(filePath).size\r\n if (size <= offset) return { content: '', newOffset: offset }\r\n return {\r\n content: readFileSync(filePath, 'utf8').slice(offset),\r\n newOffset: size,\r\n }\r\n } catch {\r\n return { content: '', newOffset: offset }\r\n }\r\n}\r\n\r\nexport function readTaskOutput(taskId: string): string {\r\n try {\r\n const filePath = getTaskOutputFilePath(taskId)\r\n if (!existsSync(filePath)) return ''\r\n return readFileSync(filePath, 'utf8')\r\n } catch {\r\n return ''\r\n }\r\n}\r\n", "import { spawn, type ChildProcess } from 'child_process'\r\nimport { existsSync, mkdirSync, realpathSync, statSync } from 'fs'\r\nimport { randomUUID } from 'crypto'\r\nimport { homedir } from 'os'\r\nimport { basename, dirname, isAbsolute, join, resolve } from 'path'\r\nimport which from 'which'\r\nimport { logError } from '@utils/log'\r\nimport {\r\n appendTaskOutput,\r\n getTaskOutputFilePath,\r\n touchTaskOutputFile,\r\n} from '@utils/log/taskOutputStore'\r\n\r\ntype ShellChildProcess = ChildProcess & { exited: Promise<void> }\r\n\r\nfunction whichSync(bin: string): string | null {\r\n try {\r\n return which.sync(bin, { nothrow: true }) ?? null\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nfunction whichOrSelf(bin: string): string {\r\n return whichSync(bin) ?? bin\r\n}\r\n\r\nfunction resolvePowerShellPath(): string {\r\n const programFiles =\r\n process.env.ProgramFiles || process.env.PROGRAMFILES || 'C:\\\\Program Files'\r\n const pwsh7 = join(programFiles, 'PowerShell', '7', 'pwsh.exe')\r\n if (existsSync(pwsh7)) return pwsh7\r\n\r\n const programW6432 = process.env.ProgramW6432\r\n if (programW6432 && programW6432 !== programFiles) {\r\n const pwsh7Alt = join(programW6432, 'PowerShell', '7', 'pwsh.exe')\r\n if (existsSync(pwsh7Alt)) return pwsh7Alt\r\n }\r\n\r\n const pwshInPath = whichSync('pwsh')\r\n if (pwshInPath) return pwshInPath\r\n\r\n const systemRoot = process.env.SystemRoot || process.env.WINDIR\r\n if (systemRoot) {\r\n const candidate = join(\r\n systemRoot,\r\n 'System32',\r\n 'WindowsPowerShell',\r\n 'v1.0',\r\n 'powershell.exe',\r\n )\r\n if (existsSync(candidate)) return candidate\r\n }\r\n return 'powershell.exe'\r\n}\r\n\r\nexport function detectRuntimeShell(): string {\r\n if (process.platform === 'win32') {\r\n const resolved = resolvePowerShellPath()\r\n const name = basename(resolved)\r\n .replace(/\\.(exe|cmd|bat)$/i, '')\r\n .toLowerCase()\r\n return name === 'pwsh' ? 'pwsh' : 'powershell'\r\n }\r\n const envShell = process.env.SHELL?.trim()\r\n if (envShell) {\r\n const name = basename(envShell)\r\n .replace(/\\.(exe|cmd|bat)$/i, '')\r\n .toLowerCase()\r\n if (name) return name\r\n }\r\n if (process.env.BASH_VERSION) return 'bash'\r\n if (process.env.ZSH_VERSION) return 'zsh'\r\n return 'sh'\r\n}\r\n\r\nfunction spawnWithExited(options: {\r\n cmd: string[]\r\n cwd: string\r\n env?: NodeJS.ProcessEnv\r\n}): ShellChildProcess {\r\n const child = spawn(options.cmd[0], options.cmd.slice(1), {\r\n cwd: options.cwd,\r\n env: options.env ?? process.env,\r\n stdio: ['inherit', 'pipe', 'pipe'],\r\n windowsHide: true,\r\n }) as ShellChildProcess\r\n\r\n child.exited = new Promise(resolve => {\r\n const done = () => resolve()\r\n child.once('exit', done)\r\n child.once('error', done)\r\n })\r\n\r\n return child\r\n}\r\n\r\ntype ExecResult = {\r\n stdout: string\r\n stderr: string\r\n code: number\r\n interrupted: boolean\r\n}\r\n\r\nexport type BunShellPromotableExecStatus =\r\n | 'running'\r\n | 'backgrounded'\r\n | 'completed'\r\n | 'killed'\r\n\r\nexport type BunShellPromotableExec = {\r\n get status(): BunShellPromotableExecStatus\r\n background: (bashId?: string) => { bashId: string } | null\r\n kill: () => void\r\n result: Promise<ExecResult>\r\n onTimeout?: (\r\n cb: (background: (bashId?: string) => { bashId: string } | null) => void,\r\n ) => void\r\n}\r\n\r\nexport type BunShellSandboxReadConfig = {\r\n denyOnly: string[]\r\n}\r\n\r\nexport type BunShellSandboxWriteConfig = {\r\n allowOnly: string[]\r\n denyWithinAllow?: string[]\r\n}\r\n\r\nfunction maybeAnnotateMacosSandboxStderr(\r\n stderr: string,\r\n sandbox: BunShellSandboxOptions | undefined,\r\n): string {\r\n if (!stderr) return stderr\r\n if (!sandbox || sandbox.enabled !== true) return stderr\r\n const platform = sandbox.__platformOverride ?? process.platform\r\n if (platform !== 'darwin') return stderr\r\n if (stderr.includes('[sandbox]')) return stderr\r\n\r\n const lower = stderr.toLowerCase()\r\n const looksLikeSandboxViolation =\r\n stderr.includes('NEWCRAW_SANDBOX') ||\r\n (lower.includes('sandbox-exec') &&\r\n (lower.includes('deny') || lower.includes('operation not permitted'))) ||\r\n (lower.includes('operation not permitted') && lower.includes('sandbox'))\r\n\r\n if (!looksLikeSandboxViolation) return stderr\r\n\r\n return [\r\n stderr.trimEnd(),\r\n '',\r\n '[sandbox] This failure looks like a macOS sandbox denial. Adjust sandbox settings (e.g. /sandbox or .newcraw/settings.json) to grant the minimal required access.',\r\n ].join('\\n')\r\n}\r\n\r\nfunction hasGlobPattern(value: string): boolean {\r\n return (\r\n value.includes('*') ||\r\n value.includes('?') ||\r\n value.includes('[') ||\r\n value.includes(']')\r\n )\r\n}\r\n\r\nexport function normalizeLinuxSandboxPath(\r\n input: string,\r\n options?: { cwd?: string; homeDir?: string },\r\n): string {\r\n const cwd = options?.cwd ?? process.cwd()\r\n const homeDir = options?.homeDir ?? homedir()\r\n\r\n let resolved = input\r\n if (input === '~') resolved = homeDir\r\n else if (input.startsWith('~/')) resolved = homeDir + input.slice(1)\r\n else if (input.startsWith('./') || input.startsWith('../'))\r\n resolved = resolve(cwd, input)\r\n else if (!isAbsolute(input)) resolved = resolve(cwd, input)\r\n\r\n if (hasGlobPattern(resolved)) {\r\n const prefix = resolved.split(/[*?[\\]]/)[0]\r\n if (prefix && prefix !== '/') {\r\n const dir = prefix.endsWith('/') ? prefix.slice(0, -1) : dirname(prefix)\r\n try {\r\n const real = realpathSync(dir)\r\n const suffix = resolved.slice(dir.length)\r\n return real + suffix\r\n } catch {\r\n }\r\n }\r\n return resolved\r\n }\r\n\r\n try {\r\n resolved = realpathSync(resolved)\r\n } catch {\r\n }\r\n\r\n return resolved\r\n}\r\n\r\nexport function buildLinuxBwrapFilesystemArgs(options: {\r\n cwd?: string\r\n homeDir?: string\r\n readConfig?: BunShellSandboxReadConfig\r\n writeConfig?: BunShellSandboxWriteConfig\r\n extraDenyWithinAllow?: string[]\r\n}): string[] {\r\n const cwd = options.cwd ?? process.cwd()\r\n const homeDir = options.homeDir ?? homedir()\r\n\r\n const args: string[] = []\r\n\r\n const writeConfig = options.writeConfig\r\n if (writeConfig) {\r\n args.push('--ro-bind', '/', '/')\r\n\r\n const allowedRoots: string[] = []\r\n\r\n if (existsSync('/tmp/newcraw')) {\r\n args.push('--bind', '/tmp/newcraw', '/tmp/newcraw')\r\n allowedRoots.push('/tmp/newcraw')\r\n }\r\n for (const raw of writeConfig.allowOnly ?? []) {\r\n const resolved = normalizeLinuxSandboxPath(raw, { cwd, homeDir })\r\n if (resolved.startsWith('/dev/')) continue\r\n if (!existsSync(resolved)) continue\r\n args.push('--bind', resolved, resolved)\r\n allowedRoots.push(resolved)\r\n }\r\n\r\n const denyWithinAllow = [\r\n ...(writeConfig.denyWithinAllow ?? []),\r\n ...(options.extraDenyWithinAllow ?? []),\r\n ]\r\n for (const raw of denyWithinAllow) {\r\n const resolved = normalizeLinuxSandboxPath(raw, { cwd, homeDir })\r\n if (resolved.startsWith('/dev/')) continue\r\n if (!existsSync(resolved)) continue\r\n const withinAllowed = allowedRoots.some(\r\n root => resolved === root || resolved.startsWith(root + '/'),\r\n )\r\n if (!withinAllowed) continue\r\n args.push('--ro-bind', resolved, resolved)\r\n }\r\n } else {\r\n args.push('--bind', '/', '/')\r\n }\r\n\r\n const denyRead = [...(options.readConfig?.denyOnly ?? [])]\r\n if (existsSync('/etc/ssh/ssh_config.d'))\r\n denyRead.push('/etc/ssh/ssh_config.d')\r\n\r\n for (const raw of denyRead) {\r\n const resolved = normalizeLinuxSandboxPath(raw, { cwd, homeDir })\r\n if (resolved.startsWith('/dev/')) continue\r\n if (!existsSync(resolved)) continue\r\n if (statSync(resolved).isDirectory()) args.push('--tmpfs', resolved)\r\n else args.push('--ro-bind', '/dev/null', resolved)\r\n }\r\n\r\n return args\r\n}\r\n\r\nexport function buildLinuxBwrapCommand(options: {\r\n bwrapPath: string\r\n command: string\r\n needsNetworkRestriction?: boolean\r\n readConfig?: BunShellSandboxReadConfig\r\n writeConfig?: BunShellSandboxWriteConfig\r\n enableWeakerNestedSandbox?: boolean\r\n binShellPath: string\r\n cwd?: string\r\n homeDir?: string\r\n}): string[] {\r\n const args: string[] = []\r\n\r\n args.push(\r\n '--die-with-parent',\r\n '--new-session',\r\n '--unshare-pid',\r\n '--unshare-uts',\r\n '--unshare-ipc',\r\n )\r\n if (options.needsNetworkRestriction) args.push('--unshare-net')\r\n\r\n args.push(\r\n ...buildLinuxBwrapFilesystemArgs({\r\n cwd: options.cwd,\r\n homeDir: options.homeDir,\r\n readConfig: options.readConfig,\r\n writeConfig: options.writeConfig,\r\n }),\r\n )\r\n\r\n args.push(\r\n '--dev',\r\n '/dev',\r\n '--setenv',\r\n 'SANDBOX_RUNTIME',\r\n '1',\r\n '--setenv',\r\n 'TMPDIR',\r\n '/tmp/newcraw',\r\n )\r\n if (!options.enableWeakerNestedSandbox) args.push('--proc', '/proc')\r\n\r\n args.push('--', options.binShellPath, '-c', options.command)\r\n\r\n return [options.bwrapPath, ...args]\r\n}\r\n\r\nfunction buildSandboxEnvAssignments(options?: {\r\n httpProxyPort?: number\r\n socksProxyPort?: number\r\n platform?: NodeJS.Platform\r\n}): string[] {\r\n const httpProxyPort = options?.httpProxyPort\r\n const socksProxyPort = options?.socksProxyPort\r\n const platform = options?.platform ?? process.platform\r\n\r\n const env: string[] = ['SANDBOX_RUNTIME=1', 'TMPDIR=/tmp/newcraw']\r\n if (!httpProxyPort && !socksProxyPort) return env\r\n\r\n const noProxy = [\r\n 'localhost',\r\n '127.0.0.1',\r\n '::1',\r\n '*.local',\r\n '.local',\r\n '169.254.0.0/16',\r\n '10.0.0.0/8',\r\n '172.16.0.0/12',\r\n '192.168.0.0/16',\r\n ].join(',')\r\n env.push(`NO_PROXY=${noProxy}`)\r\n env.push(`no_proxy=${noProxy}`)\r\n\r\n if (httpProxyPort) {\r\n env.push(`HTTP_PROXY=http://localhost:${httpProxyPort}`)\r\n env.push(`HTTPS_PROXY=http://localhost:${httpProxyPort}`)\r\n env.push(`http_proxy=http://localhost:${httpProxyPort}`)\r\n env.push(`https_proxy=http://localhost:${httpProxyPort}`)\r\n }\r\n\r\n if (socksProxyPort) {\r\n env.push(`ALL_PROXY=socks5h://localhost:${socksProxyPort}`)\r\n env.push(`all_proxy=socks5h://localhost:${socksProxyPort}`)\r\n if (platform === 'darwin') {\r\n env.push(\r\n `GIT_SSH_COMMAND=\"ssh -o ProxyCommand='nc -X 5 -x localhost:${socksProxyPort} %h %p'\"`,\r\n )\r\n }\r\n env.push(`FTP_PROXY=socks5h://localhost:${socksProxyPort}`)\r\n env.push(`ftp_proxy=socks5h://localhost:${socksProxyPort}`)\r\n env.push(`RSYNC_PROXY=localhost:${socksProxyPort}`)\r\n env.push(\r\n `DOCKER_HTTP_PROXY=http://localhost:${httpProxyPort || socksProxyPort}`,\r\n )\r\n env.push(\r\n `DOCKER_HTTPS_PROXY=http://localhost:${httpProxyPort || socksProxyPort}`,\r\n )\r\n if (httpProxyPort) {\r\n env.push('CLOUDSDK_PROXY_TYPE=https')\r\n env.push('CLOUDSDK_PROXY_ADDRESS=localhost')\r\n env.push(`CLOUDSDK_PROXY_PORT=${httpProxyPort}`)\r\n }\r\n env.push(`GRPC_PROXY=socks5h://localhost:${socksProxyPort}`)\r\n env.push(`grpc_proxy=socks5h://localhost:${socksProxyPort}`)\r\n }\r\n\r\n return env\r\n}\r\n\r\nfunction escapeRegexForSandboxGlobPattern(pattern: string): string {\r\n return (\r\n '^' +\r\n pattern\r\n .replace(/[.^$+{}()|\\\\]/g, '\\\\$&')\r\n .replace(/\\[([^\\]]*?)$/g, '\\\\[$1')\r\n .replace(/\\*\\*\\//g, '__GLOBSTAR_SLASH__')\r\n .replace(/\\*\\*/g, '__GLOBSTAR__')\r\n .replace(/\\*/g, '[^/]*')\r\n .replace(/\\?/g, '[^/]')\r\n .replace(/__GLOBSTAR_SLASH__/g, '(.*/)?')\r\n .replace(/__GLOBSTAR__/g, '.*') +\r\n '$'\r\n )\r\n}\r\n\r\nfunction getMacosTmpDirWriteAllowPaths(): string[] {\r\n const tmpdirValue = process.env.TMPDIR\r\n if (!tmpdirValue) return []\r\n if (!tmpdirValue.match(/^\\/(private\\/)?var\\/folders\\/[^/]{2}\\/[^/]+\\/T\\/?$/))\r\n return []\r\n const base = tmpdirValue.replace(/\\/T\\/?$/, '')\r\n if (base.startsWith('/private/var/'))\r\n return [base, base.replace('/private', '')]\r\n if (base.startsWith('/var/')) return [base, '/private' + base]\r\n return [base]\r\n}\r\n\r\nfunction buildMacosSandboxDenyUnlinkRules(\r\n paths: string[],\r\n logTag: string,\r\n): string[] {\r\n const lines: string[] = []\r\n for (const raw of paths) {\r\n const normalized = normalizeLinuxSandboxPath(raw)\r\n if (hasGlobPattern(normalized)) {\r\n const regex = escapeRegexForSandboxGlobPattern(normalized)\r\n lines.push(\r\n '(deny file-write-unlink',\r\n ` (regex ${JSON.stringify(regex)})`,\r\n ` (with message \"${logTag}\"))`,\r\n )\r\n\r\n const prefix = normalized.split(/[*?[\\]]/)[0]\r\n if (prefix && prefix !== '/') {\r\n const literal = prefix.endsWith('/')\r\n ? prefix.slice(0, -1)\r\n : dirname(prefix)\r\n lines.push(\r\n '(deny file-write-unlink',\r\n ` (literal ${JSON.stringify(literal)})`,\r\n ` (with message \"${logTag}\"))`,\r\n )\r\n }\r\n continue\r\n }\r\n\r\n lines.push(\r\n '(deny file-write-unlink',\r\n ` (subpath ${JSON.stringify(normalized)})`,\r\n ` (with message \"${logTag}\"))`,\r\n )\r\n }\r\n return lines\r\n}\r\n\r\nfunction buildMacosSandboxFileReadRules(\r\n readConfig: BunShellSandboxReadConfig | undefined,\r\n logTag: string,\r\n): string[] {\r\n if (!readConfig) return ['(allow file-read*)']\r\n\r\n const lines: string[] = ['(allow file-read*)']\r\n for (const raw of readConfig.denyOnly ?? []) {\r\n const normalized = normalizeLinuxSandboxPath(raw)\r\n if (hasGlobPattern(normalized)) {\r\n const regex = escapeRegexForSandboxGlobPattern(normalized)\r\n lines.push(\r\n '(deny file-read*',\r\n ` (regex ${JSON.stringify(regex)})`,\r\n ` (with message \"${logTag}\"))`,\r\n )\r\n } else {\r\n lines.push(\r\n '(deny file-read*',\r\n ` (subpath ${JSON.stringify(normalized)})`,\r\n ` (with message \"${logTag}\"))`,\r\n )\r\n }\r\n }\r\n\r\n lines.push(\r\n ...buildMacosSandboxDenyUnlinkRules(readConfig.denyOnly ?? [], logTag),\r\n )\r\n return lines\r\n}\r\n\r\nfunction buildMacosSandboxFileWriteRules(\r\n writeConfig: BunShellSandboxWriteConfig | undefined,\r\n logTag: string,\r\n): string[] {\r\n if (!writeConfig) return ['(allow file-write*)']\r\n\r\n const lines: string[] = []\r\n\r\n lines.push(\r\n '(allow file-write*',\r\n ` (literal \"/dev/null\")`,\r\n ` (with message \"${logTag}\"))`,\r\n )\r\n\r\n for (const raw of getMacosTmpDirWriteAllowPaths()) {\r\n const normalized = normalizeLinuxSandboxPath(raw)\r\n lines.push(\r\n '(allow file-write*',\r\n ` (subpath ${JSON.stringify(normalized)})`,\r\n ` (with message \"${logTag}\"))`,\r\n )\r\n }\r\n\r\n for (const raw of writeConfig.allowOnly ?? []) {\r\n const normalized = normalizeLinuxSandboxPath(raw)\r\n if (hasGlobPattern(normalized)) {\r\n const regex = escapeRegexForSandboxGlobPattern(normalized)\r\n lines.push(\r\n '(allow file-write*',\r\n ` (regex ${JSON.stringify(regex)})`,\r\n ` (with message \"${logTag}\"))`,\r\n )\r\n } else {\r\n lines.push(\r\n '(allow file-write*',\r\n ` (subpath ${JSON.stringify(normalized)})`,\r\n ` (with message \"${logTag}\"))`,\r\n )\r\n }\r\n }\r\n\r\n for (const raw of writeConfig.denyWithinAllow ?? []) {\r\n const normalized = normalizeLinuxSandboxPath(raw)\r\n if (hasGlobPattern(normalized)) {\r\n const regex = escapeRegexForSandboxGlobPattern(normalized)\r\n lines.push(\r\n '(deny file-write*',\r\n ` (regex ${JSON.stringify(regex)})`,\r\n ` (with message \"${logTag}\"))`,\r\n )\r\n } else {\r\n lines.push(\r\n '(deny file-write*',\r\n ` (subpath ${JSON.stringify(normalized)})`,\r\n ` (with message \"${logTag}\"))`,\r\n )\r\n }\r\n }\r\n\r\n lines.push(\r\n ...buildMacosSandboxDenyUnlinkRules(\r\n writeConfig.denyWithinAllow ?? [],\r\n logTag,\r\n ),\r\n )\r\n return lines\r\n}\r\n\r\nexport function buildMacosSandboxExecCommand(options: {\r\n sandboxExecPath: string\r\n binShellPath: string\r\n command: string\r\n needsNetworkRestriction: boolean\r\n httpProxyPort?: number\r\n socksProxyPort?: number\r\n allowUnixSockets?: string[]\r\n allowAllUnixSockets?: boolean\r\n allowLocalBinding?: boolean\r\n readConfig?: BunShellSandboxReadConfig\r\n writeConfig?: BunShellSandboxWriteConfig\r\n}): string[] {\r\n const logTag = 'NEWCRAW_SANDBOX'\r\n\r\n const profileLines: string[] = [\r\n '(version 1)',\r\n `(deny default (with message \"${logTag}\"))`,\r\n '',\r\n '; NewCraw sandbox-exec profile (reference CLI compatible)',\r\n '',\r\n '(allow process*)',\r\n '(allow sysctl-read)',\r\n '(allow mach-lookup)',\r\n '',\r\n '; Network',\r\n ]\r\n\r\n const allowUnixSockets = options.allowUnixSockets ?? []\r\n if (!options.needsNetworkRestriction) {\r\n profileLines.push('(allow network*)')\r\n } else {\r\n if (options.allowLocalBinding) {\r\n profileLines.push('(allow network-bind (local ip \"localhost:*\"))')\r\n profileLines.push('(allow network-inbound (local ip \"localhost:*\"))')\r\n profileLines.push('(allow network-outbound (local ip \"localhost:*\"))')\r\n }\r\n if (options.allowAllUnixSockets) {\r\n profileLines.push('(allow network* (subpath \"/\"))')\r\n } else if (allowUnixSockets.length > 0) {\r\n for (const socketPath of allowUnixSockets) {\r\n const normalized = normalizeLinuxSandboxPath(socketPath)\r\n profileLines.push(\r\n `(allow network* (subpath ${JSON.stringify(normalized)}))`,\r\n )\r\n }\r\n }\r\n if (options.httpProxyPort !== undefined) {\r\n profileLines.push(\r\n `(allow network-bind (local ip \"localhost:${options.httpProxyPort}\"))`,\r\n )\r\n profileLines.push(\r\n `(allow network-inbound (local ip \"localhost:${options.httpProxyPort}\"))`,\r\n )\r\n profileLines.push(\r\n `(allow network-outbound (remote ip \"localhost:${options.httpProxyPort}\"))`,\r\n )\r\n }\r\n if (options.socksProxyPort !== undefined) {\r\n profileLines.push(\r\n `(allow network-bind (local ip \"localhost:${options.socksProxyPort}\"))`,\r\n )\r\n profileLines.push(\r\n `(allow network-inbound (local ip \"localhost:${options.socksProxyPort}\"))`,\r\n )\r\n profileLines.push(\r\n `(allow network-outbound (remote ip \"localhost:${options.socksProxyPort}\"))`,\r\n )\r\n }\r\n }\r\n\r\n profileLines.push('')\r\n profileLines.push('; File read')\r\n profileLines.push(\r\n ...buildMacosSandboxFileReadRules(options.readConfig, logTag),\r\n )\r\n profileLines.push('')\r\n profileLines.push('; File write')\r\n profileLines.push(\r\n ...buildMacosSandboxFileWriteRules(options.writeConfig, logTag),\r\n )\r\n\r\n const profile = profileLines.join('\\n')\r\n const envAssignments = buildSandboxEnvAssignments({\r\n httpProxyPort: options.httpProxyPort,\r\n socksProxyPort: options.socksProxyPort,\r\n platform: 'darwin',\r\n })\r\n const envPrefix = envAssignments.length\r\n ? `export ${envAssignments.join(' ')} && `\r\n : ''\r\n\r\n return [\r\n options.sandboxExecPath,\r\n '-p',\r\n profile,\r\n options.binShellPath,\r\n '-c',\r\n `${envPrefix}${options.command}`,\r\n ]\r\n}\r\n\r\nexport type BunShellSandboxOptions = {\r\n enabled: boolean\r\n require?: boolean\r\n needsNetworkRestriction?: boolean\r\n allowNetwork?: boolean\r\n\r\n allowUnixSockets?: string[]\r\n allowAllUnixSockets?: boolean\r\n allowLocalBinding?: boolean\r\n httpProxyPort?: number\r\n socksProxyPort?: number\r\n\r\n readConfig?: BunShellSandboxReadConfig\r\n writeConfig?: BunShellSandboxWriteConfig\r\n enableWeakerNestedSandbox?: boolean\r\n binShell?: string\r\n\r\n writableRoots?: string[]\r\n chdir?: string\r\n\r\n __platformOverride?: NodeJS.Platform\r\n __bwrapPathOverride?: string | null\r\n __sandboxExecPathOverride?: string | null\r\n}\r\n\r\nexport type BunShellExecOptions = {\r\n sandbox?: BunShellSandboxOptions\r\n onStdoutChunk?: (chunk: string) => void\r\n onStderrChunk?: (chunk: string) => void\r\n}\r\n\r\nexport type BackgroundShellStatusAttachment = {\r\n type: 'task_progress'\r\n taskId: string\r\n stdoutLineDelta: number\r\n stderrLineDelta: number\r\n outputFile: string\r\n}\r\n\r\nexport function renderBackgroundShellStatusAttachment(\r\n attachment: BackgroundShellStatusAttachment,\r\n): string {\r\n const parts: string[] = []\r\n if (attachment.stdoutLineDelta > 0) {\r\n const n = attachment.stdoutLineDelta\r\n parts.push(`${n} line${n > 1 ? 's' : ''} of stdout`)\r\n }\r\n if (attachment.stderrLineDelta > 0) {\r\n const n = attachment.stderrLineDelta\r\n parts.push(`${n} line${n > 1 ? 's' : ''} of stderr`)\r\n }\r\n if (parts.length === 0) return ''\r\n return `Background bash ${attachment.taskId} has new output: ${parts.join(', ')}. Read ${attachment.outputFile} to see output.`\r\n}\r\n\r\nexport type BashNotification = {\r\n type: 'bash_notification'\r\n taskId: string\r\n description: string\r\n status: 'completed' | 'failed' | 'killed'\r\n exitCode?: number\r\n outputFile: string\r\n}\r\n\r\nexport function renderBashNotification(notification: BashNotification): string {\r\n const status = notification.status\r\n const exitCode = notification.exitCode\r\n\r\n const summarySuffix =\r\n status === 'completed'\r\n ? `completed${exitCode !== undefined ? ` (exit code ${exitCode})` : ''}`\r\n : status === 'failed'\r\n ? `failed${exitCode !== undefined ? ` with exit code ${exitCode}` : ''}`\r\n : 'was killed'\r\n\r\n return [\r\n '<bash-notification>',\r\n `<shell-id>${notification.taskId}</shell-id>`,\r\n `<output-file>${notification.outputFile}</output-file>`,\r\n `<status>${status}</status>`,\r\n `<summary>Background command \"${notification.description}\" ${summarySuffix}.</summary>`,\r\n 'Read the output file to retrieve the output.',\r\n '</bash-notification>',\r\n ].join('\\n')\r\n}\r\n\r\ntype BackgroundProcess = {\r\n id: string\r\n command: string\r\n stdout: string\r\n stderr: string\r\n stdoutCursor: number\r\n stderrCursor: number\r\n stdoutLineCount: number\r\n stderrLineCount: number\r\n lastReportedStdoutLines: number\r\n lastReportedStderrLines: number\r\n code: number | null\r\n interrupted: boolean\r\n killed: boolean\r\n timedOut: boolean\r\n completionStatusSentInAttachment: boolean\r\n notified: boolean\r\n startedAt: number\r\n timeoutAt: number\r\n process: ShellChildProcess\r\n abortController: AbortController\r\n timeoutHandle: ReturnType<typeof setTimeout> | null\r\n cwd: string\r\n outputFile: string\r\n}\r\n\r\nexport class BunShell {\r\n private cwd: string\r\n private isAlive: boolean = true\r\n private currentProcess: ShellChildProcess | null = null\r\n private abortController: AbortController | null = null\r\n private backgroundProcesses: Map<string, BackgroundProcess> = new Map()\r\n\r\n constructor(cwd: string) {\r\n this.cwd = cwd\r\n }\r\n\r\n private static instance: BunShell | null = null\r\n\r\n static restart() {\r\n if (BunShell.instance) {\r\n BunShell.instance.close()\r\n BunShell.instance = null\r\n }\r\n }\r\n\r\n static getInstance(): BunShell {\r\n if (!BunShell.instance || !BunShell.instance.isAlive) {\r\n BunShell.instance = new BunShell(process.cwd())\r\n }\r\n return BunShell.instance\r\n }\r\n\r\n static getShellCmdForPlatform(\r\n platform: NodeJS.Platform,\r\n command: string,\r\n _env: NodeJS.ProcessEnv = process.env,\r\n ): string[] {\r\n if (platform === 'win32') {\r\n return [resolvePowerShellPath(), '-NoProfile', '-NonInteractive', '-Command', command]\r\n }\r\n const sh = existsSync('/bin/sh') ? '/bin/sh' : 'sh'\r\n return [sh, '-c', command]\r\n }\r\n\r\n private getShellCmd(command: string): string[] {\r\n return BunShell.getShellCmdForPlatform(\r\n process.platform,\r\n command,\r\n process.env,\r\n )\r\n }\r\n\r\n private buildSandboxCmd(\r\n command: string,\r\n sandbox: BunShellSandboxOptions,\r\n ): { cmd: string[]; warning?: string } | null {\r\n if (!sandbox.enabled) return null\r\n const platform = sandbox.__platformOverride ?? process.platform\r\n\r\n const needsNetworkRestriction =\r\n sandbox.needsNetworkRestriction !== undefined\r\n ? sandbox.needsNetworkRestriction\r\n : sandbox.allowNetwork === true\r\n ? false\r\n : true\r\n\r\n const writeConfig: BunShellSandboxWriteConfig | undefined =\r\n sandbox.writeConfig ??\r\n (sandbox.writableRoots && sandbox.writableRoots.length > 0\r\n ? { allowOnly: sandbox.writableRoots.filter(Boolean) }\r\n : undefined)\r\n\r\n const readConfig = sandbox.readConfig\r\n\r\n const hasReadRestrictions = (readConfig?.denyOnly?.length ?? 0) > 0\r\n const hasWriteRestrictions = writeConfig !== undefined\r\n const hasNetworkRestrictions = needsNetworkRestriction === true\r\n\r\n if (\r\n !hasReadRestrictions &&\r\n !hasWriteRestrictions &&\r\n !hasNetworkRestrictions\r\n ) {\r\n return null\r\n }\r\n\r\n const binShell = sandbox.binShell ?? (whichSync('bash') ? 'bash' : 'sh')\r\n const binShellPath = whichOrSelf(binShell)\r\n\r\n const cwd = sandbox.chdir || this.cwd\r\n\r\n if (platform === 'linux') {\r\n const bwrapPath =\r\n sandbox.__bwrapPathOverride !== undefined\r\n ? sandbox.__bwrapPathOverride\r\n : (whichSync('bwrap') ?? whichSync('bubblewrap'))\r\n if (!bwrapPath) {\r\n return null\r\n }\r\n\r\n try {\r\n mkdirSync('/tmp/newcraw', { recursive: true })\r\n } catch {}\r\n\r\n const cmd = buildLinuxBwrapCommand({\r\n bwrapPath,\r\n command,\r\n needsNetworkRestriction,\r\n readConfig,\r\n writeConfig,\r\n enableWeakerNestedSandbox: sandbox.enableWeakerNestedSandbox,\r\n binShellPath,\r\n cwd,\r\n })\r\n\r\n return { cmd }\r\n }\r\n\r\n if (platform === 'darwin') {\r\n const sandboxExecPath =\r\n sandbox.__sandboxExecPathOverride !== undefined\r\n ? sandbox.__sandboxExecPathOverride\r\n : existsSync('/usr/bin/sandbox-exec')\r\n ? '/usr/bin/sandbox-exec'\r\n : whichSync('sandbox-exec')\r\n if (!sandboxExecPath) {\r\n return null\r\n }\r\n\r\n try {\r\n mkdirSync('/tmp/newcraw', { recursive: true })\r\n } catch {}\r\n try {\r\n mkdirSync('/private/tmp/newcraw', { recursive: true })\r\n } catch {}\r\n\r\n return {\r\n cmd: buildMacosSandboxExecCommand({\r\n sandboxExecPath,\r\n binShellPath,\r\n command,\r\n needsNetworkRestriction,\r\n httpProxyPort: sandbox.httpProxyPort,\r\n socksProxyPort: sandbox.socksProxyPort,\r\n allowUnixSockets: sandbox.allowUnixSockets,\r\n allowAllUnixSockets: sandbox.allowAllUnixSockets,\r\n allowLocalBinding: sandbox.allowLocalBinding,\r\n readConfig,\r\n writeConfig,\r\n }),\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n private isSandboxInitFailure(stderr: string): boolean {\r\n const s = stderr.toLowerCase()\r\n return (\r\n s.includes('bwrap:') ||\r\n s.includes('bubblewrap') ||\r\n (s.includes('namespace') && s.includes('failed'))\r\n )\r\n }\r\n\r\n private startStreamReader(\r\n stream: NodeJS.ReadableStream | null,\r\n append: (chunk: string) => void,\r\n ): void {\r\n if (!stream) return\r\n try {\r\n ;(stream as any).setEncoding?.('utf8')\r\n } catch {}\r\n stream.on('data', chunk => {\r\n append(\r\n typeof chunk === 'string'\r\n ? chunk\r\n : Buffer.isBuffer(chunk)\r\n ? chunk.toString('utf8')\r\n : String(chunk),\r\n )\r\n })\r\n stream.on('error', err => {\r\n logError(`Stream read error: ${err}`)\r\n })\r\n }\r\n\r\n private createCancellableTextCollector(\r\n stream: NodeJS.ReadableStream | null,\r\n options?: { onChunk?: (chunk: string) => void; collectText?: boolean },\r\n ): {\r\n getText: () => string\r\n done: Promise<void>\r\n cancel: () => Promise<void>\r\n } {\r\n let text = ''\r\n const collectText = options?.collectText !== false\r\n if (!stream) {\r\n return {\r\n getText: () => text,\r\n done: Promise.resolve(),\r\n cancel: async () => {},\r\n }\r\n }\r\n\r\n let cancelled = false\r\n\r\n let resolveDone: (() => void) | null = null\r\n const done = new Promise<void>(resolve => {\r\n resolveDone = resolve\r\n })\r\n\r\n const finish = () => {\r\n if (!resolveDone) return\r\n resolveDone()\r\n resolveDone = null\r\n }\r\n\r\n const onData = (chunk: unknown) => {\r\n if (cancelled) return\r\n const s =\r\n typeof chunk === 'string'\r\n ? chunk\r\n : Buffer.isBuffer(chunk)\r\n ? chunk.toString('utf8')\r\n : String(chunk)\r\n if (collectText) text += s\r\n options?.onChunk?.(s)\r\n }\r\n\r\n const onEnd = () => {\r\n cleanup()\r\n finish()\r\n }\r\n\r\n const onClose = () => {\r\n cleanup()\r\n finish()\r\n }\r\n\r\n const cleanup = () => {\r\n stream.off('data', onData)\r\n stream.off('end', onEnd)\r\n stream.off('close', onClose)\r\n stream.off('error', onError)\r\n }\r\n\r\n const onError = (err: unknown) => {\r\n if (!cancelled) {\r\n logError(`Stream read error: ${err}`)\r\n }\r\n cleanup()\r\n finish()\r\n }\r\n\r\n try {\r\n ;(stream as any).setEncoding?.('utf8')\r\n } catch {}\r\n\r\n stream.on('data', onData)\r\n stream.once('end', onEnd)\r\n stream.once('close', onClose)\r\n stream.once('error', onError)\r\n\r\n return {\r\n getText: () => text,\r\n done,\r\n cancel: async () => {\r\n if (cancelled) return\r\n cancelled = true\r\n cleanup()\r\n finish()\r\n },\r\n }\r\n }\r\n\r\n private static makeBackgroundTaskId(): string {\r\n return `b${randomUUID().replace(/-/g, '').slice(0, 6)}`\r\n }\r\n\r\n execPromotable(\r\n command: string,\r\n abortSignal?: AbortSignal,\r\n timeout?: number,\r\n options?: BunShellExecOptions,\r\n ): BunShellPromotableExec {\r\n const DEFAULT_TIMEOUT = 120_000\r\n const commandTimeout = timeout ?? DEFAULT_TIMEOUT\r\n const startedAt = Date.now()\r\n\r\n const sandbox = options?.sandbox\r\n const shouldAttemptSandbox = sandbox?.enabled === true\r\n const executionCwd =\r\n shouldAttemptSandbox && sandbox?.chdir ? sandbox.chdir : this.cwd\r\n\r\n if (abortSignal?.aborted) {\r\n return {\r\n get status(): BunShellPromotableExecStatus {\r\n return 'killed'\r\n },\r\n background: () => null,\r\n kill: () => {},\r\n result: Promise.resolve({\r\n stdout: '',\r\n stderr: 'Command aborted before execution',\r\n code: 145,\r\n interrupted: true,\r\n }),\r\n }\r\n }\r\n\r\n const sandboxCmd = shouldAttemptSandbox\r\n ? this.buildSandboxCmd(command, sandbox!)\r\n : null\r\n if (shouldAttemptSandbox && sandbox?.require && !sandboxCmd) {\r\n return {\r\n get status(): BunShellPromotableExecStatus {\r\n return 'killed'\r\n },\r\n background: () => null,\r\n kill: () => {},\r\n result: Promise.resolve({\r\n stdout: '',\r\n stderr:\r\n 'System sandbox is required but unavailable (missing bubblewrap or unsupported platform).',\r\n code: 2,\r\n interrupted: false,\r\n }),\r\n }\r\n }\r\n\r\n const cmdToRun = sandboxCmd ? sandboxCmd.cmd : this.getShellCmd(command)\r\n\r\n const internalAbortController = new AbortController()\r\n this.abortController = internalAbortController\r\n\r\n let status: BunShellPromotableExecStatus = 'running'\r\n let backgroundProcess: BackgroundProcess | null = null\r\n let backgroundTaskId: string | null = null\r\n let stdout = ''\r\n let stderr = ''\r\n let wasAborted = false\r\n let wasBackgrounded = false\r\n let timeoutHandle: ReturnType<typeof setTimeout> | null = null\r\n let timedOut = false\r\n let onTimeoutCb:\r\n | ((background: (bashId?: string) => { bashId: string } | null) => void)\r\n | null = null\r\n\r\n const countNonEmptyLines = (chunk: string): number =>\r\n chunk.split('\\n').filter(line => line.length > 0).length\r\n\r\n const spawnedProcess = spawnWithExited({ cmd: cmdToRun, cwd: executionCwd })\r\n this.currentProcess = spawnedProcess\r\n\r\n const onAbort = () => {\r\n if (status === 'backgrounded') return\r\n wasAborted = true\r\n try {\r\n internalAbortController.abort()\r\n } catch {}\r\n try {\r\n spawnedProcess.kill()\r\n } catch {}\r\n if (backgroundProcess) backgroundProcess.interrupted = true\r\n }\r\n\r\n const clearForegroundGuards = () => {\r\n if (timeoutHandle) {\r\n clearTimeout(timeoutHandle)\r\n timeoutHandle = null\r\n }\r\n if (abortSignal) {\r\n abortSignal.removeEventListener('abort', onAbort)\r\n }\r\n }\r\n\r\n if (abortSignal) {\r\n abortSignal.addEventListener('abort', onAbort, { once: true })\r\n if (abortSignal.aborted) onAbort()\r\n }\r\n\r\n const stdoutCollector = this.createCancellableTextCollector(\r\n spawnedProcess.stdout,\r\n {\r\n collectText: false,\r\n onChunk: chunk => {\r\n stdout += chunk\r\n options?.onStdoutChunk?.(chunk)\r\n if (backgroundProcess) {\r\n backgroundProcess.stdout = stdout\r\n appendTaskOutput(backgroundProcess.id, chunk)\r\n backgroundProcess.stdoutLineCount += countNonEmptyLines(chunk)\r\n }\r\n },\r\n },\r\n )\r\n const stderrCollector = this.createCancellableTextCollector(\r\n spawnedProcess.stderr,\r\n {\r\n collectText: false,\r\n onChunk: chunk => {\r\n stderr += chunk\r\n options?.onStderrChunk?.(chunk)\r\n if (backgroundProcess) {\r\n backgroundProcess.stderr = stderr\r\n appendTaskOutput(backgroundProcess.id, chunk)\r\n backgroundProcess.stderrLineCount += countNonEmptyLines(chunk)\r\n }\r\n },\r\n },\r\n )\r\n\r\n timeoutHandle = setTimeout(() => {\r\n if (status !== 'running') return\r\n if (onTimeoutCb) {\r\n onTimeoutCb(background)\r\n return\r\n }\r\n timedOut = true\r\n try {\r\n spawnedProcess.kill()\r\n } catch {}\r\n try {\r\n internalAbortController.abort()\r\n } catch {}\r\n }, commandTimeout)\r\n\r\n const background = (bashId?: string): { bashId: string } | null => {\r\n if (backgroundTaskId) return { bashId: backgroundTaskId }\r\n if (status !== 'running') return null\r\n\r\n backgroundTaskId = bashId ?? BunShell.makeBackgroundTaskId()\r\n const outputFile = touchTaskOutputFile(backgroundTaskId)\r\n if (stdout) appendTaskOutput(backgroundTaskId, stdout)\r\n if (stderr) appendTaskOutput(backgroundTaskId, stderr)\r\n\r\n status = 'backgrounded'\r\n wasBackgrounded = true\r\n clearForegroundGuards()\r\n\r\n backgroundProcess = {\r\n id: backgroundTaskId,\r\n command,\r\n stdout,\r\n stderr,\r\n stdoutCursor: 0,\r\n stderrCursor: 0,\r\n stdoutLineCount: countNonEmptyLines(stdout),\r\n stderrLineCount: countNonEmptyLines(stderr),\r\n lastReportedStdoutLines: 0,\r\n lastReportedStderrLines: 0,\r\n code: null,\r\n interrupted: false,\r\n killed: false,\r\n timedOut: false,\r\n completionStatusSentInAttachment: false,\r\n notified: false,\r\n startedAt,\r\n timeoutAt: Number.POSITIVE_INFINITY,\r\n process: spawnedProcess,\r\n abortController: internalAbortController,\r\n timeoutHandle: null,\r\n cwd: executionCwd,\r\n outputFile,\r\n }\r\n\r\n this.backgroundProcesses.set(backgroundTaskId, backgroundProcess)\r\n\r\n this.currentProcess = null\r\n this.abortController = null\r\n\r\n return { bashId: backgroundTaskId }\r\n }\r\n\r\n const kill = () => {\r\n status = 'killed'\r\n try {\r\n spawnedProcess.kill()\r\n } catch {}\r\n try {\r\n internalAbortController.abort()\r\n } catch {}\r\n\r\n if (backgroundProcess) {\r\n backgroundProcess.interrupted = true\r\n backgroundProcess.killed = true\r\n }\r\n }\r\n\r\n const result = (async (): Promise<ExecResult> => {\r\n try {\r\n await spawnedProcess.exited\r\n\r\n if (status === 'running' || status === 'backgrounded')\r\n status = 'completed'\r\n\r\n if (backgroundProcess) {\r\n backgroundProcess.code = spawnedProcess.exitCode ?? 0\r\n backgroundProcess.interrupted =\r\n backgroundProcess.interrupted ||\r\n wasAborted ||\r\n internalAbortController.signal.aborted\r\n }\r\n\r\n if (!wasBackgrounded) {\r\n await Promise.race([\r\n Promise.allSettled([stdoutCollector.done, stderrCollector.done]),\r\n new Promise(resolve => setTimeout(resolve, 250)),\r\n ])\r\n await Promise.allSettled([\r\n stdoutCollector.cancel(),\r\n stderrCollector.cancel(),\r\n ])\r\n }\r\n\r\n const interrupted =\r\n wasAborted ||\r\n abortSignal?.aborted === true ||\r\n internalAbortController.signal.aborted === true ||\r\n timedOut\r\n\r\n let code = spawnedProcess.exitCode\r\n if (!Number.isFinite(code as any)) {\r\n code = interrupted ? 143 : 0\r\n }\r\n\r\n const stderrWithTimeout = timedOut\r\n ? [`Command timed out`, stderr].filter(Boolean).join('\\n')\r\n : stderr\r\n const stderrAnnotated = sandboxCmd\r\n ? maybeAnnotateMacosSandboxStderr(stderrWithTimeout, sandbox)\r\n : stderrWithTimeout\r\n\r\n return {\r\n stdout,\r\n stderr: stderrAnnotated,\r\n code: code as number,\r\n interrupted,\r\n }\r\n } finally {\r\n clearForegroundGuards()\r\n\r\n if (this.currentProcess === spawnedProcess) {\r\n this.currentProcess = null\r\n this.abortController = null\r\n }\r\n }\r\n })()\r\n\r\n const execHandle: BunShellPromotableExec = {\r\n get status() {\r\n return status\r\n },\r\n background,\r\n kill,\r\n result,\r\n }\r\n\r\n execHandle.onTimeout = cb => {\r\n onTimeoutCb = cb\r\n }\r\n\r\n result\r\n .then(r => {\r\n if (!backgroundProcess || !backgroundTaskId) return\r\n backgroundProcess.code = r.code\r\n backgroundProcess.interrupted = r.interrupted\r\n })\r\n .catch(() => {\r\n if (!backgroundProcess) return\r\n backgroundProcess.code = backgroundProcess.code ?? 2\r\n })\r\n\r\n return execHandle\r\n }\r\n\r\n async exec(\r\n command: string,\r\n abortSignal?: AbortSignal,\r\n timeout?: number,\r\n options?: BunShellExecOptions,\r\n ): Promise<ExecResult> {\r\n const DEFAULT_TIMEOUT = 120_000\r\n const commandTimeout = timeout ?? DEFAULT_TIMEOUT\r\n\r\n this.abortController = new AbortController()\r\n let wasAborted = false\r\n const onAbort = () => {\r\n wasAborted = true\r\n try {\r\n this.abortController?.abort()\r\n } catch {}\r\n try {\r\n this.currentProcess?.kill()\r\n } catch {}\r\n }\r\n\r\n if (abortSignal) {\r\n abortSignal.addEventListener('abort', onAbort, { once: true })\r\n }\r\n\r\n const sandbox = options?.sandbox\r\n const shouldAttemptSandbox = sandbox?.enabled === true\r\n const executionCwd =\r\n shouldAttemptSandbox && sandbox?.chdir ? sandbox.chdir : this.cwd\r\n\r\n const runOnce = async (\r\n cmd: string[],\r\n cwdOverride?: string,\r\n ): Promise<ExecResult> => {\r\n this.currentProcess = spawnWithExited({\r\n cmd,\r\n cwd: cwdOverride ?? executionCwd,\r\n })\r\n\r\n const stdoutCollector = this.createCancellableTextCollector(\r\n this.currentProcess.stdout,\r\n { onChunk: options?.onStdoutChunk },\r\n )\r\n const stderrCollector = this.createCancellableTextCollector(\r\n this.currentProcess.stderr,\r\n { onChunk: options?.onStderrChunk },\r\n )\r\n\r\n let timeoutHandle: ReturnType<typeof setTimeout> | null = null\r\n const timeoutPromise = new Promise<'timeout'>(resolve => {\r\n timeoutHandle = setTimeout(() => resolve('timeout'), commandTimeout)\r\n })\r\n\r\n const result = await Promise.race([\r\n this.currentProcess.exited.then(() => 'completed' as const),\r\n timeoutPromise,\r\n ])\r\n if (timeoutHandle) clearTimeout(timeoutHandle)\r\n\r\n if (result === 'timeout') {\r\n try {\r\n this.currentProcess.kill()\r\n } catch {}\r\n try {\r\n this.abortController.abort()\r\n } catch {}\r\n\r\n try {\r\n await this.currentProcess.exited\r\n } catch {}\r\n\r\n await Promise.race([\r\n Promise.allSettled([stdoutCollector.done, stderrCollector.done]),\r\n new Promise(resolve => setTimeout(resolve, 250)),\r\n ])\r\n await Promise.allSettled([\r\n stdoutCollector.cancel(),\r\n stderrCollector.cancel(),\r\n ])\r\n return {\r\n stdout: '',\r\n stderr: 'Command timed out',\r\n code: 143,\r\n interrupted: true,\r\n }\r\n }\r\n\r\n await Promise.race([\r\n Promise.allSettled([stdoutCollector.done, stderrCollector.done]),\r\n new Promise(resolve => setTimeout(resolve, 250)),\r\n ])\r\n await Promise.allSettled([\r\n stdoutCollector.cancel(),\r\n stderrCollector.cancel(),\r\n ])\r\n\r\n const stdout = stdoutCollector.getText()\r\n const stderr = stderrCollector.getText()\r\n const interrupted =\r\n wasAborted ||\r\n abortSignal?.aborted === true ||\r\n this.abortController?.signal.aborted === true\r\n const exitCode = this.currentProcess.exitCode ?? (interrupted ? 143 : 0)\r\n\r\n return {\r\n stdout,\r\n stderr,\r\n code: exitCode,\r\n interrupted,\r\n }\r\n }\r\n\r\n try {\r\n if (shouldAttemptSandbox) {\r\n const sandboxCmd = this.buildSandboxCmd(command, sandbox!)\r\n if (!sandboxCmd) {\r\n if (sandbox?.require) {\r\n return {\r\n stdout: '',\r\n stderr:\r\n 'System sandbox is required but unavailable (missing bubblewrap or unsupported platform).',\r\n code: 2,\r\n interrupted: false,\r\n }\r\n }\r\n const fallback = await runOnce(this.getShellCmd(command))\r\n return {\r\n ...fallback,\r\n stderr:\r\n `[sandbox] unavailable, ran without isolation.\\n${fallback.stderr}`.trim(),\r\n }\r\n }\r\n\r\n const sandboxed = await runOnce(sandboxCmd.cmd)\r\n sandboxed.stderr = maybeAnnotateMacosSandboxStderr(\r\n sandboxed.stderr,\r\n sandbox,\r\n )\r\n if (\r\n !sandboxed.interrupted &&\r\n sandboxed.code !== 0 &&\r\n this.isSandboxInitFailure(sandboxed.stderr) &&\r\n !sandbox?.require\r\n ) {\r\n const fallback = await runOnce(this.getShellCmd(command))\r\n return {\r\n ...fallback,\r\n stderr:\r\n `[sandbox] failed to start, ran without isolation.\\n${fallback.stderr}`.trim(),\r\n }\r\n }\r\n\r\n return sandboxed\r\n }\r\n\r\n return await runOnce(this.getShellCmd(command))\r\n } catch (error) {\r\n if (this.abortController.signal.aborted) {\r\n this.currentProcess?.kill()\r\n return {\r\n stdout: '',\r\n stderr: 'Command was interrupted',\r\n code: 143,\r\n interrupted: true,\r\n }\r\n }\r\n\r\n const errorStr = error instanceof Error ? error.message : String(error)\r\n logError(`Shell execution error: ${errorStr}`)\r\n\r\n return {\r\n stdout: '',\r\n stderr: errorStr,\r\n code: 2,\r\n interrupted: false,\r\n }\r\n } finally {\r\n if (abortSignal) {\r\n abortSignal.removeEventListener('abort', onAbort)\r\n }\r\n this.currentProcess = null\r\n this.abortController = null\r\n }\r\n }\r\n\r\n execInBackground(\r\n command: string,\r\n timeout?: number,\r\n options?: BunShellExecOptions,\r\n ): { bashId: string } {\r\n const DEFAULT_TIMEOUT = 120_000\r\n const commandTimeout = timeout ?? DEFAULT_TIMEOUT\r\n const abortController = new AbortController()\r\n\r\n const sandbox = options?.sandbox\r\n const sandboxCmd =\r\n sandbox?.enabled === true ? this.buildSandboxCmd(command, sandbox) : null\r\n const executionCwd =\r\n sandbox?.enabled === true && sandbox?.chdir ? sandbox.chdir : this.cwd\r\n\r\n if (sandbox?.enabled === true && sandbox?.require && !sandboxCmd) {\r\n throw new Error(\r\n 'System sandbox is required but unavailable (missing bubblewrap or unsupported platform).',\r\n )\r\n }\r\n\r\n const cmdToRun = sandboxCmd ? sandboxCmd.cmd : this.getShellCmd(command)\r\n\r\n const bashId = BunShell.makeBackgroundTaskId()\r\n const outputFile = touchTaskOutputFile(bashId)\r\n\r\n const process = spawnWithExited({ cmd: cmdToRun, cwd: executionCwd })\r\n const timeoutHandle = setTimeout(() => {\r\n abortController.abort()\r\n backgroundProcess.timedOut = true\r\n process.kill()\r\n }, commandTimeout)\r\n\r\n const backgroundProcess: BackgroundProcess = {\r\n id: bashId,\r\n command,\r\n stdout: '',\r\n stderr: '',\r\n stdoutCursor: 0,\r\n stderrCursor: 0,\r\n stdoutLineCount: 0,\r\n stderrLineCount: 0,\r\n lastReportedStdoutLines: 0,\r\n lastReportedStderrLines: 0,\r\n code: null,\r\n interrupted: false,\r\n killed: false,\r\n timedOut: false,\r\n completionStatusSentInAttachment: false,\r\n notified: false,\r\n startedAt: Date.now(),\r\n timeoutAt: Date.now() + commandTimeout,\r\n process,\r\n abortController,\r\n timeoutHandle,\r\n cwd: executionCwd,\r\n outputFile,\r\n }\r\n\r\n const countNonEmptyLines = (chunk: string): number =>\r\n chunk.split('\\n').filter(line => line.length > 0).length\r\n\r\n this.startStreamReader(process.stdout, chunk => {\r\n backgroundProcess.stdout += chunk\r\n appendTaskOutput(bashId, chunk)\r\n backgroundProcess.stdoutLineCount += countNonEmptyLines(chunk)\r\n })\r\n this.startStreamReader(process.stderr, chunk => {\r\n backgroundProcess.stderr += chunk\r\n appendTaskOutput(bashId, chunk)\r\n backgroundProcess.stderrLineCount += countNonEmptyLines(chunk)\r\n })\r\n\r\n process.exited.then(() => {\r\n backgroundProcess.code = process.exitCode ?? 0\r\n backgroundProcess.interrupted =\r\n backgroundProcess.interrupted || abortController.signal.aborted\r\n if (sandbox?.enabled === true) {\r\n backgroundProcess.stderr = maybeAnnotateMacosSandboxStderr(\r\n backgroundProcess.stderr,\r\n sandbox,\r\n )\r\n }\r\n if (backgroundProcess.timeoutHandle) {\r\n clearTimeout(backgroundProcess.timeoutHandle)\r\n backgroundProcess.timeoutHandle = null\r\n }\r\n })\r\n\r\n this.backgroundProcesses.set(bashId, backgroundProcess)\r\n return { bashId }\r\n }\r\n\r\n getBackgroundOutput(shellId: string): {\r\n stdout: string\r\n stderr: string\r\n code: number | null\r\n interrupted: boolean\r\n killed: boolean\r\n timedOut: boolean\r\n running: boolean\r\n command: string\r\n cwd: string\r\n startedAt: number\r\n timeoutAt: number\r\n outputFile: string\r\n } | null {\r\n const proc = this.backgroundProcesses.get(shellId)\r\n if (!proc) return null\r\n const running = proc.code === null && !proc.interrupted\r\n return {\r\n stdout: proc.stdout,\r\n stderr: proc.stderr,\r\n code: proc.code,\r\n interrupted: proc.interrupted,\r\n killed: proc.killed,\r\n timedOut: proc.timedOut,\r\n running,\r\n command: proc.command,\r\n cwd: proc.cwd,\r\n startedAt: proc.startedAt,\r\n timeoutAt: proc.timeoutAt,\r\n outputFile: proc.outputFile,\r\n }\r\n }\r\n\r\n readBackgroundOutput(\r\n bashId: string,\r\n options?: { filter?: string },\r\n ): {\r\n shellId: string\r\n command: string\r\n cwd: string\r\n startedAt: number\r\n timeoutAt: number\r\n status: 'running' | 'completed' | 'failed' | 'killed'\r\n exitCode: number | null\r\n stdout: string\r\n stderr: string\r\n stdoutLines: number\r\n stderrLines: number\r\n filterPattern?: string\r\n } | null {\r\n const proc = this.backgroundProcesses.get(bashId)\r\n if (!proc) return null\r\n\r\n const stdoutDelta = proc.stdout.slice(proc.stdoutCursor)\r\n const stderrDelta = proc.stderr.slice(proc.stderrCursor)\r\n\r\n proc.stdoutCursor = proc.stdout.length\r\n proc.stderrCursor = proc.stderr.length\r\n\r\n const stdoutLines = stdoutDelta === '' ? 0 : stdoutDelta.split('\\n').length\r\n const stderrLines = stderrDelta === '' ? 0 : stderrDelta.split('\\n').length\r\n\r\n let stdoutToReturn = stdoutDelta\r\n let stderrToReturn = stderrDelta\r\n\r\n const filter = options?.filter?.trim()\r\n if (filter) {\r\n const regex = new RegExp(filter, 'i')\r\n stdoutToReturn = stdoutDelta\r\n .split('\\n')\r\n .filter(line => regex.test(line))\r\n .join('\\n')\r\n stderrToReturn = stderrDelta\r\n .split('\\n')\r\n .filter(line => regex.test(line))\r\n .join('\\n')\r\n }\r\n\r\n const status: 'running' | 'completed' | 'failed' | 'killed' = proc.killed\r\n ? 'killed'\r\n : proc.code === null\r\n ? 'running'\r\n : proc.code === 0\r\n ? 'completed'\r\n : 'failed'\r\n\r\n return {\r\n shellId: bashId,\r\n command: proc.command,\r\n cwd: proc.cwd,\r\n startedAt: proc.startedAt,\r\n timeoutAt: proc.timeoutAt,\r\n status,\r\n exitCode: proc.code,\r\n stdout: stdoutToReturn,\r\n stderr: stderrToReturn,\r\n stdoutLines,\r\n stderrLines,\r\n ...(filter ? { filterPattern: filter } : {}),\r\n }\r\n }\r\n\r\n killBackgroundShell(shellId: string): boolean {\r\n const proc = this.backgroundProcesses.get(shellId)\r\n if (!proc) return false\r\n try {\r\n proc.interrupted = true\r\n proc.killed = true\r\n proc.abortController.abort()\r\n proc.process.kill()\r\n if (proc.timeoutHandle) {\r\n clearTimeout(proc.timeoutHandle)\r\n proc.timeoutHandle = null\r\n }\r\n return true\r\n } catch {\r\n return false\r\n }\r\n }\r\n\r\n listBackgroundShells(): BackgroundProcess[] {\r\n return Array.from(this.backgroundProcesses.values())\r\n }\r\n\r\n pwd(): string {\r\n return this.cwd\r\n }\r\n\r\n async setCwd(cwd: string) {\r\n const resolved = isAbsolute(cwd) ? cwd : resolve(this.cwd, cwd)\r\n if (!existsSync(resolved)) {\r\n throw new Error(`Path \"${resolved}\" does not exist`)\r\n }\r\n this.cwd = resolved\r\n }\r\n\r\n killChildren() {\r\n this.abortController?.abort()\r\n this.currentProcess?.kill()\r\n for (const bg of Array.from(this.backgroundProcesses.keys())) {\r\n this.killBackgroundShell(bg)\r\n }\r\n }\r\n\r\n close(): void {\r\n this.isAlive = false\r\n this.killChildren()\r\n }\r\n\r\n flushBashNotifications(): BashNotification[] {\r\n const processes = Array.from(this.backgroundProcesses.values())\r\n\r\n const statusFor = (\r\n proc: BackgroundProcess,\r\n ): 'running' | 'completed' | 'failed' | 'killed' =>\r\n proc.killed\r\n ? 'killed'\r\n : proc.code === null\r\n ? 'running'\r\n : proc.code === 0\r\n ? 'completed'\r\n : 'failed'\r\n\r\n const notifications: BashNotification[] = []\r\n\r\n for (const proc of processes) {\r\n if (proc.notified) continue\r\n const status = statusFor(proc)\r\n if (status === 'running') continue\r\n\r\n notifications.push({\r\n type: 'bash_notification',\r\n taskId: proc.id,\r\n description: proc.command,\r\n outputFile: proc.outputFile || getTaskOutputFilePath(proc.id),\r\n status,\r\n ...(proc.code !== null ? { exitCode: proc.code } : {}),\r\n })\r\n\r\n proc.notified = true\r\n }\r\n\r\n return notifications\r\n }\r\n\r\n flushBackgroundShellStatusAttachments(): BackgroundShellStatusAttachment[] {\r\n const processes = Array.from(this.backgroundProcesses.values())\r\n\r\n const statusFor = (\r\n proc: BackgroundProcess,\r\n ): 'running' | 'completed' | 'failed' | 'killed' =>\r\n proc.killed\r\n ? 'killed'\r\n : proc.code === null\r\n ? 'running'\r\n : proc.code === 0\r\n ? 'completed'\r\n : 'failed'\r\n\r\n const progressAttachments: BackgroundShellStatusAttachment[] = []\r\n\r\n for (const proc of processes) {\r\n if (statusFor(proc) !== 'running') continue\r\n\r\n const stdoutDelta = proc.stdoutLineCount - proc.lastReportedStdoutLines\r\n const stderrDelta = proc.stderrLineCount - proc.lastReportedStderrLines\r\n if (stdoutDelta === 0 && stderrDelta === 0) continue\r\n\r\n proc.lastReportedStdoutLines = proc.stdoutLineCount\r\n proc.lastReportedStderrLines = proc.stderrLineCount\r\n\r\n progressAttachments.push({\r\n type: 'task_progress',\r\n taskId: proc.id,\r\n stdoutLineDelta: stdoutDelta,\r\n stderrLineDelta: stderrDelta,\r\n outputFile: proc.outputFile || getTaskOutputFilePath(proc.id),\r\n })\r\n }\r\n\r\n return progressAttachments\r\n }\r\n}\r\n", "import { cwd } from 'process'\r\nimport { BunShell } from '@utils/bun/shell'\r\n\r\nconst STATE: {\r\n originalCwd: string\r\n} = {\r\n originalCwd: cwd(),\r\n}\r\n\r\nexport async function setCwd(cwd: string): Promise<void> {\r\n await BunShell.getInstance().setCwd(cwd)\r\n}\r\n\r\nexport function setOriginalCwd(cwd: string): void {\r\n STATE.originalCwd = cwd\r\n}\r\n\r\nexport function getOriginalCwd(): string {\r\n return STATE.originalCwd\r\n}\r\n\r\nexport function getCwd(): string {\r\n return BunShell.getInstance().pwd()\r\n}\r\n"],
5
+ "mappings": "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A;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEO,IAAM,kBAAkB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEO,IAAM,kBAAkB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AA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",
6
+ "names": ["resolve", "join", "existsSync", "mkdirSync", "readFileSync", "join", "cwd", "existsSync", "mkdirSync", "readFileSync", "statSync", "writeFileSync", "dirname", "join", "getProjectDir", "cwd", "existsSync", "mkdirSync", "realpathSync", "statSync", "randomUUID", "homedir", "dirname", "isAbsolute", "join", "resolve", "cwd", "env", "paths", "process", "cwd"]
7
+ }
@@ -7,14 +7,18 @@ import {
7
7
  getSessionPlugins
8
8
  } from "./chunk-2UO3BFZH.js";
9
9
  import {
10
- debug
11
- } from "./chunk-GZTCXXSS.js";
10
+ debug,
11
+ init_debugLogger
12
+ } from "./chunk-QT5GS374.js";
12
13
  import {
13
14
  getCwd,
15
+ init_log,
16
+ init_state,
14
17
  logError
15
- } from "./chunk-IM33F5CM.js";
18
+ } from "./chunk-XYQZLDRB.js";
16
19
 
17
20
  // src/utils/agent/loader.ts
21
+ init_state();
18
22
  import {
19
23
  existsSync,
20
24
  readFileSync,
@@ -28,6 +32,8 @@ import matter from "gray-matter";
28
32
  import yaml from "js-yaml";
29
33
  import { memoize } from "lodash-es";
30
34
  import { z } from "zod";
35
+ init_debugLogger();
36
+ init_log();
31
37
  function getClaudePolicyBaseDir() {
32
38
  switch (process.platform) {
33
39
  case "darwin":
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/utils/agent/loader.ts"],
4
4
  "sourcesContent": ["\r\nimport {\r\n existsSync,\r\n readFileSync,\r\n readdirSync,\r\n statSync,\r\n watch,\r\n type FSWatcher,\r\n} from 'fs'\r\nimport { basename, dirname, join, resolve } from 'path'\r\nimport { homedir } from 'os'\r\nimport matter from 'gray-matter'\r\nimport yaml from 'js-yaml'\r\nimport { memoize } from 'lodash-es'\r\nimport { z } from 'zod'\r\nimport { getCwd } from '@utils/state'\r\nimport { getSessionPlugins } from '@utils/session/sessionPlugins'\r\nimport { isSettingSourceEnabled } from '@utils/config/settingSources'\r\nimport { debug as debugLogger } from '@utils/log/debugLogger'\r\nimport { logError } from '@utils/log'\r\n\r\nexport type AgentSource =\r\n | 'built-in'\r\n | 'plugin'\r\n | 'userSettings'\r\n | 'projectSettings'\r\n | 'flagSettings'\r\n | 'policySettings'\r\n\r\nexport type AgentLocation = 'built-in' | 'plugin' | 'user' | 'project'\r\n\r\nexport type AgentModel = 'inherit' | 'haiku' | 'sonnet' | 'opus' | (string & {})\r\n\r\nexport type AgentPermissionMode =\r\n | 'default'\r\n | 'acceptEdits'\r\n | 'plan'\r\n | 'bypassPermissions'\r\n | 'dontAsk'\r\n | 'delegate'\r\n\r\nexport interface AgentConfig {\r\n agentType: string\r\n whenToUse: string\r\n tools: string[] | '*'\r\n disallowedTools?: string[]\r\n skills?: string[]\r\n systemPrompt: string\r\n source: AgentSource\r\n location: AgentLocation\r\n baseDir?: string\r\n filename?: string\r\n color?: string\r\n model?: AgentModel\r\n permissionMode?: AgentPermissionMode\r\n forkContext?: boolean\r\n}\r\n\r\nfunction getClaudePolicyBaseDir(): string {\r\n switch (process.platform) {\r\n case 'darwin':\r\n return '/Library/Application Support/ClaudeCode'\r\n case 'win32':\r\n return existsSync('C:\\\\Program Files\\\\ClaudeCode')\r\n ? 'C:\\\\Program Files\\\\ClaudeCode'\r\n : 'C:\\\\ProgramData\\\\ClaudeCode'\r\n default:\r\n return '/etc/claude-code'\r\n }\r\n}\r\n\r\nfunction normalizeOverride(value: unknown): string | null {\r\n if (typeof value !== 'string') return null\r\n const trimmed = value.trim()\r\n return trimmed ? resolve(trimmed) : null\r\n}\r\n\r\nfunction dedupeStrings(values: string[]): string[] {\r\n const out: string[] = []\r\n const seen = new Set<string>()\r\n for (const value of values) {\r\n if (!value) continue\r\n if (seen.has(value)) continue\r\n seen.add(value)\r\n out.push(value)\r\n }\r\n return out\r\n}\r\n\r\nfunction getUserConfigRoots(): string[] {\r\n const claudeOverride = normalizeOverride(process.env.CLAUDE_CONFIG_DIR)\r\n const kodeOverride = normalizeOverride(process.env.NEWCRAW_CONFIG_DIR)\r\n\r\n const hasAnyOverride = Boolean(claudeOverride || kodeOverride)\r\n if (hasAnyOverride) {\r\n return dedupeStrings([claudeOverride ?? '', kodeOverride ?? ''])\r\n }\r\n\r\n return dedupeStrings([join(homedir(), '.claude'), join(homedir(), '.newcraw')])\r\n}\r\n\r\nfunction findProjectAgentDirs(cwd: string): string[] {\r\n const result: string[] = []\r\n const home = resolve(homedir())\r\n let current = resolve(cwd)\r\n\r\n while (current !== home) {\r\n const claudeDir = join(current, '.claude', 'agents')\r\n if (existsSync(claudeDir)) result.push(claudeDir)\r\n\r\n const kodeDir = join(current, '.newcraw', 'agents')\r\n if (existsSync(kodeDir)) result.push(kodeDir)\r\n\r\n const parent = dirname(current)\r\n if (parent === current) break\r\n current = parent\r\n }\r\n\r\n return result\r\n}\r\n\r\nfunction listMarkdownFilesRecursively(rootDir: string): string[] {\r\n const files: string[] = []\r\n const visitedDirs = new Set<string>()\r\n\r\n const walk = (dirPath: string) => {\r\n let dirStat: ReturnType<typeof statSync>\r\n try {\r\n dirStat = statSync(dirPath)\r\n } catch {\r\n return\r\n }\r\n if (!dirStat.isDirectory()) return\r\n\r\n const dirKey = `${dirStat.dev}:${dirStat.ino}`\r\n if (visitedDirs.has(dirKey)) return\r\n visitedDirs.add(dirKey)\r\n\r\n let entries: Array<{\r\n name: string\r\n isDirectory(): boolean\r\n isFile(): boolean\r\n isSymbolicLink(): boolean\r\n }>\r\n try {\r\n entries = readdirSync(dirPath, {\r\n withFileTypes: true,\r\n encoding: 'utf8',\r\n }) as any\r\n } catch {\r\n return\r\n }\r\n\r\n for (const entry of entries) {\r\n const name = String(entry.name ?? '')\r\n const fullPath = join(dirPath, name)\r\n\r\n if (entry.isDirectory()) {\r\n walk(fullPath)\r\n continue\r\n }\r\n\r\n if (entry.isFile()) {\r\n if (name.endsWith('.md')) files.push(fullPath)\r\n continue\r\n }\r\n\r\n if (entry.isSymbolicLink()) {\r\n try {\r\n const st = statSync(fullPath)\r\n if (st.isDirectory()) {\r\n walk(fullPath)\r\n } else if (st.isFile() && name.endsWith('.md')) {\r\n files.push(fullPath)\r\n }\r\n } catch {\r\n continue\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!existsSync(rootDir)) return []\r\n walk(rootDir)\r\n return files\r\n}\r\n\r\nfunction readMarkdownFile(filePath: string): { frontmatter: any; content: string } | null {\r\n try {\r\n const raw = readFileSync(filePath, 'utf8')\r\n const yamlSchema = (yaml as any).JSON_SCHEMA\r\n const matterOptions = {\r\n engines: {\r\n yaml: {\r\n parse: (input: string) =>\r\n yaml.load(input, yamlSchema ? { schema: yamlSchema } : undefined) ??\r\n {},\r\n },\r\n },\r\n }\r\n const parsed = matter(raw, matterOptions)\r\n return {\r\n frontmatter: (parsed.data as any) ?? {},\r\n content: String(parsed.content ?? ''),\r\n }\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nfunction splitCliList(values: string[]): string[] {\r\n if (values.length === 0) return []\r\n const out: string[] = []\r\n\r\n for (const value of values) {\r\n if (!value) continue\r\n let current = ''\r\n let inParens = false\r\n\r\n for (const ch of value) {\r\n switch (ch) {\r\n case '(':\r\n inParens = true\r\n current += ch\r\n break\r\n case ')':\r\n inParens = false\r\n current += ch\r\n break\r\n case ',':\r\n if (inParens) {\r\n current += ch\r\n } else {\r\n const trimmed = current.trim()\r\n if (trimmed) out.push(trimmed)\r\n current = ''\r\n }\r\n break\r\n case ' ':\r\n if (inParens) {\r\n current += ch\r\n } else {\r\n const trimmed = current.trim()\r\n if (trimmed) out.push(trimmed)\r\n current = ''\r\n }\r\n break\r\n default:\r\n current += ch\r\n }\r\n }\r\n\r\n const trimmed = current.trim()\r\n if (trimmed) out.push(trimmed)\r\n }\r\n\r\n return out\r\n}\r\n\r\nfunction normalizeToolList(value: unknown): string[] | null {\r\n if (value === undefined || value === null) return null\r\n if (!value) return []\r\n\r\n let raw: string[] = []\r\n if (typeof value === 'string') raw = [value]\r\n else if (Array.isArray(value))\r\n raw = value.filter((v): v is string => typeof v === 'string')\r\n\r\n if (raw.length === 0) return []\r\n const parsed = splitCliList(raw)\r\n if (parsed.includes('*')) return ['*']\r\n return parsed\r\n}\r\n\r\nfunction z2A(value: unknown): string[] | undefined {\r\n const normalized = normalizeToolList(value)\r\n if (normalized === null) return value === undefined ? undefined : []\r\n if (normalized.includes('*')) return undefined\r\n return normalized\r\n}\r\n\r\nfunction qP(value: unknown): string[] {\r\n const normalized = normalizeToolList(value)\r\n if (normalized === null) return []\r\n return normalized\r\n}\r\n\r\nconst VALID_PERMISSION_MODES = [\r\n 'default',\r\n 'acceptEdits',\r\n 'plan',\r\n 'bypassPermissions',\r\n 'dontAsk',\r\n 'delegate',\r\n] as const\r\n\r\nfunction sourceToLocation(source: AgentSource): AgentLocation {\r\n switch (source) {\r\n case 'plugin':\r\n return 'plugin'\r\n case 'userSettings':\r\n return 'user'\r\n case 'projectSettings':\r\n return 'project'\r\n case 'built-in':\r\n case 'flagSettings':\r\n case 'policySettings':\r\n default:\r\n return 'built-in'\r\n }\r\n}\r\n\r\nfunction parseAgentFromFile(options: {\r\n filePath: string\r\n baseDir: string\r\n source: Exclude<AgentSource, 'flagSettings' | 'built-in'>\r\n}): AgentConfig | null {\r\n const parsed = readMarkdownFile(options.filePath)\r\n if (!parsed) return null\r\n\r\n try {\r\n const fm = parsed.frontmatter ?? {}\r\n let name: unknown = fm.name\r\n let description: unknown = fm.description\r\n\r\n if (!name || typeof name !== 'string' || !description || typeof description !== 'string') {\r\n return null\r\n }\r\n\r\n const whenToUse = description.replace(/\\\\n/g, '\\n')\r\n const filename = basename(options.filePath, '.md')\r\n\r\n const color = typeof fm.color === 'string' ? fm.color : undefined\r\n\r\n let modelRaw: unknown = fm.model\r\n if (typeof modelRaw !== 'string' && typeof fm.model_name === 'string') {\r\n modelRaw = fm.model_name\r\n }\r\n let model =\r\n typeof modelRaw === 'string' ? modelRaw.trim() : undefined\r\n if (model === '') model = undefined\r\n\r\n const forkContextValue: unknown = fm.forkContext\r\n if (\r\n forkContextValue !== undefined &&\r\n forkContextValue !== 'true' &&\r\n forkContextValue !== 'false'\r\n ) {\r\n debugLogger.warn('AGENT_LOADER_INVALID_FORK_CONTEXT', {\r\n filePath: options.filePath,\r\n forkContext: String(forkContextValue),\r\n })\r\n }\r\n const forkContext = forkContextValue === 'true'\r\n\r\n if (forkContext && model && model !== 'inherit') {\r\n debugLogger.warn('AGENT_LOADER_FORK_CONTEXT_MODEL_OVERRIDE', {\r\n filePath: options.filePath,\r\n model,\r\n })\r\n model = 'inherit'\r\n }\r\n\r\n const permissionModeValue: unknown = fm.permissionMode\r\n const permissionModeIsValid =\r\n typeof permissionModeValue === 'string' &&\r\n VALID_PERMISSION_MODES.includes(permissionModeValue as AgentPermissionMode)\r\n if (\r\n typeof permissionModeValue === 'string' &&\r\n permissionModeValue &&\r\n !permissionModeIsValid\r\n ) {\r\n debugLogger.warn('AGENT_LOADER_INVALID_PERMISSION_MODE', {\r\n filePath: options.filePath,\r\n permissionMode: permissionModeValue,\r\n valid: VALID_PERMISSION_MODES,\r\n })\r\n }\r\n\r\n const toolsList = z2A(fm.tools)\r\n const tools: string[] | '*' =\r\n toolsList === undefined || toolsList.includes('*') ? '*' : toolsList\r\n\r\n const disallowedRaw =\r\n fm.disallowedTools ??\r\n fm['disallowed-tools'] ??\r\n fm['disallowed_tools']\r\n const disallowedTools = disallowedRaw !== undefined ? z2A(disallowedRaw) : undefined\r\n\r\n const skills = qP(fm.skills)\r\n const systemPrompt = parsed.content.trim()\r\n\r\n const agent: AgentConfig = {\r\n agentType: name,\r\n whenToUse,\r\n tools,\r\n ...(disallowedTools !== undefined ? { disallowedTools } : {}),\r\n ...(skills.length > 0 ? { skills } : { skills: [] }),\r\n systemPrompt,\r\n source: options.source,\r\n location: sourceToLocation(options.source),\r\n baseDir: options.baseDir,\r\n filename,\r\n ...(color ? { color } : {}),\r\n ...(model ? { model: model as AgentModel } : {}),\r\n ...(permissionModeIsValid ? { permissionMode: permissionModeValue as AgentPermissionMode } : {}),\r\n ...(forkContext ? { forkContext: true } : {}),\r\n }\r\n\r\n return agent\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nconst agentJsonSchema = z.object({\r\n description: z.string().min(1, 'Description cannot be empty'),\r\n tools: z.array(z.string()).optional(),\r\n disallowedTools: z.array(z.string()).optional(),\r\n prompt: z.string().min(1, 'Prompt cannot be empty'),\r\n model: z.string().optional(),\r\n permissionMode: z.enum(VALID_PERMISSION_MODES).optional(),\r\n})\r\n\r\nconst agentsJsonSchema = z.record(z.string(), agentJsonSchema)\r\n\r\nfunction parseAgentFromJson(agentType: string, value: unknown): AgentConfig | null {\r\n const parsed = agentJsonSchema.safeParse(value)\r\n if (!parsed.success) return null\r\n\r\n const toolsList = z2A(parsed.data.tools)\r\n const disallowedList =\r\n parsed.data.disallowedTools !== undefined ? z2A(parsed.data.disallowedTools) : undefined\r\n const model =\r\n typeof parsed.data.model === 'string' ? parsed.data.model.trim() : undefined\r\n\r\n return {\r\n agentType,\r\n whenToUse: parsed.data.description,\r\n tools: toolsList === undefined || toolsList.includes('*') ? '*' : toolsList,\r\n ...(disallowedList !== undefined ? { disallowedTools: disallowedList } : {}),\r\n systemPrompt: parsed.data.prompt,\r\n source: 'flagSettings',\r\n location: 'built-in',\r\n ...(model ? { model: model as AgentModel } : {}),\r\n ...(parsed.data.permissionMode ? { permissionMode: parsed.data.permissionMode } : {}),\r\n }\r\n}\r\n\r\nlet FLAG_AGENTS: AgentConfig[] = []\r\n\r\nexport function setFlagAgentsFromCliJson(json: string | undefined): void {\r\n if (!json) {\r\n FLAG_AGENTS = []\r\n clearAgentCache()\r\n return\r\n }\r\n\r\n let raw: unknown\r\n try {\r\n raw = JSON.parse(json)\r\n } catch (err) {\r\n logError(err)\r\n debugLogger.warn('AGENT_LOADER_FLAG_AGENTS_JSON_PARSE_FAILED', {\r\n error: err instanceof Error ? err.message : String(err),\r\n })\r\n FLAG_AGENTS = []\r\n clearAgentCache()\r\n return\r\n }\r\n\r\n const parsed = agentsJsonSchema.safeParse(raw)\r\n if (!parsed.success) {\r\n logError(parsed.error)\r\n debugLogger.warn('AGENT_LOADER_FLAG_AGENTS_SCHEMA_INVALID', {\r\n error: parsed.error.message,\r\n })\r\n FLAG_AGENTS = []\r\n clearAgentCache()\r\n return\r\n }\r\n\r\n FLAG_AGENTS = Object.entries(parsed.data)\r\n .map(([agentType, value]) => parseAgentFromJson(agentType, value))\r\n .filter((agent): agent is AgentConfig => agent !== null)\r\n\r\n clearAgentCache()\r\n}\r\n\r\nconst BUILTIN_GENERAL_PURPOSE: AgentConfig = {\r\n agentType: 'general-purpose',\r\n whenToUse:\r\n 'General-purpose agent for researching complex questions, searching for code, and executing multi-step tasks',\r\n tools: '*',\r\n systemPrompt: `You are a general-purpose agent. Given the user's task, use the tools available to complete it efficiently and thoroughly.\r\n\r\nWhen to use your capabilities:\r\n- Searching for code, configurations, and patterns across large codebases\r\n- Analyzing multiple files to understand system architecture \r\n- Investigating complex questions that require exploring many files\r\n- Performing multi-step research tasks\r\n\r\nGuidelines:\r\n- For file searches: Use Grep or Glob when you need to search broadly. Use FileRead when you know the specific file path.\r\n- For analysis: Start broad and narrow down. Use multiple search strategies if the first doesn't yield results.\r\n- Be thorough: Check multiple locations, consider different naming conventions, look for related files.\r\n- Complete tasks directly using your capabilities.`,\r\n source: 'built-in',\r\n location: 'built-in',\r\n baseDir: 'built-in',\r\n}\r\n\r\nconst BUILTIN_EXPLORE: AgentConfig = {\r\n agentType: 'Explore',\r\n whenToUse:\r\n 'Fast agent specialized for exploring codebases. Use this when you need to quickly find files by patterns (eg. \"src/components/**/*.tsx\"), search code for keywords (eg. \"API endpoints\"), or answer questions about the codebase (eg. \"how do API endpoints work?\"). When calling this agent, specify the desired thoroughness level: \"quick\" for basic searches, \"medium\" for moderate exploration, or \"very thorough\" for comprehensive analysis across multiple locations and naming conventions.',\r\n tools: '*',\r\n disallowedTools: ['Task', 'ExitPlanMode', 'Edit', 'Write', 'NotebookEdit'],\r\n model: 'haiku',\r\n systemPrompt: `You are a file search specialist. You excel at thoroughly navigating and exploring codebases.\r\n\r\n=== CRITICAL: READ-ONLY MODE - NO FILE MODIFICATIONS ===\r\nThis is a READ-ONLY exploration task. You are STRICTLY PROHIBITED from:\r\n- Creating new files (no Write, touch, or file creation of any kind)\r\n- Modifying existing files (no Edit operations)\r\n- Deleting files (no rm or deletion)\r\n- Moving or copying files (no mv or cp)\r\n- Creating temporary files anywhere, including /tmp\r\n- Using redirect operators (>, >>, |) or heredocs to write to files\r\n- Running ANY commands that change system state\r\n\r\nYour role is EXCLUSIVELY to search and analyze existing code. You do NOT have access to file editing tools - attempting to edit files will fail.\r\n\r\nYour strengths:\r\n- Rapidly finding files using glob patterns\r\n- Searching code and text with powerful regex patterns\r\n- Reading and analyzing file contents\r\n\r\nGuidelines:\r\n- Use Glob for broad file pattern matching\r\n- Use Grep for searching file contents with regex\r\n- Use Read when you know the specific file path you need to read\r\n- Use Bash ONLY for read-only operations (ls, git status, git log, git diff, find, cat, head, tail)\r\n- NEVER use Bash for: mkdir, touch, rm, cp, mv, git add, git commit, npm install, pip install, or any file creation/modification\r\n- Adapt your search approach based on the thoroughness level specified by the caller\r\n- Return file paths as absolute paths in your final response\r\n- For clear communication, avoid using emojis\r\n- Communicate your final report directly as a regular message - do NOT attempt to create files\r\n\r\nNOTE: You are meant to be a fast agent that returns output as quickly as possible. In order to achieve this you must:\r\n- Make efficient use of the tools that you have at your disposal: be smart about how you search for files and implementations\r\n- Wherever possible you should try to spawn multiple parallel tool calls for grepping and reading files\r\n\r\nComplete the user's search request efficiently and report your findings clearly.`,\r\n source: 'built-in',\r\n location: 'built-in',\r\n baseDir: 'built-in',\r\n}\r\n\r\nconst BUILTIN_PLAN: AgentConfig = {\r\n agentType: 'Plan',\r\n whenToUse:\r\n 'Software architect agent for designing implementation plans. Use this when you need to plan the implementation strategy for a task. Returns step-by-step plans, identifies critical files, and considers architectural trade-offs.',\r\n tools: '*',\r\n disallowedTools: ['Task', 'ExitPlanMode', 'Edit', 'Write', 'NotebookEdit'],\r\n model: 'inherit',\r\n systemPrompt: `You are a software architect and planning specialist. Your role is to explore the codebase and design implementation plans.\r\n\r\n=== CRITICAL: READ-ONLY MODE - NO FILE MODIFICATIONS ===\r\nThis is a READ-ONLY planning task. You are STRICTLY PROHIBITED from:\r\n- Creating new files (no Write, touch, or file creation of any kind)\r\n- Modifying existing files (no Edit operations)\r\n- Deleting files (no rm or deletion)\r\n- Moving or copying files (no mv or cp)\r\n- Creating temporary files anywhere, including /tmp\r\n- Using redirect operators (>, >>, |) or heredocs to write to files\r\n- Running ANY commands that change system state\r\n\r\nYour role is EXCLUSIVELY to explore the codebase and design implementation plans. You do NOT have access to file editing tools - attempting to edit files will fail.\r\n\r\nYou will be provided with a set of requirements and optionally a perspective on how to approach the design process.\r\n\r\n## Your Process\r\n\r\n1. **Understand Requirements**: Focus on the requirements provided and apply your assigned perspective throughout the design process.\r\n\r\n2. **Explore Thoroughly**:\r\n - Read any files provided to you in the initial prompt\r\n - Find existing patterns and conventions using Glob, Grep, and Read\r\n - Understand the current architecture\r\n - Identify similar features as reference\r\n - Trace through relevant code paths\r\n - Use Bash ONLY for read-only operations (ls, git status, git log, git diff, find, cat, head, tail)\r\n - NEVER use Bash for: mkdir, touch, rm, cp, mv, git add, git commit, npm install, pip install, or any file creation/modification\r\n\r\n3. **Design Solution**:\r\n - Create implementation approach based on your assigned perspective\r\n - Consider trade-offs and architectural decisions\r\n - Follow existing patterns where appropriate\r\n\r\n4. **Detail the Plan**:\r\n - Provide step-by-step implementation strategy\r\n - Identify dependencies and sequencing\r\n - Anticipate potential challenges\r\n\r\n## Required Output\r\n\r\nEnd your response with:\r\n\r\n### Critical Files for Implementation\r\nList 3-5 files most critical for implementing this plan:\r\n- path/to/file1.ts - [Brief reason: e.g., \"Core logic to modify\"]\r\n- path/to/file2.ts - [Brief reason: e.g., \"Interfaces to implement\"]\r\n- path/to/file3.ts - [Brief reason: e.g., \"Pattern to follow\"]\r\n\r\nREMEMBER: You can ONLY explore and plan. You CANNOT and MUST NOT write, edit, or modify any files. You do NOT have access to file editing tools.`,\r\n source: 'built-in',\r\n location: 'built-in',\r\n baseDir: 'built-in',\r\n}\r\n\r\nconst BUILTIN_STATUSLINE_SETUP: AgentConfig = {\r\n agentType: 'statusline-setup',\r\n whenToUse:\r\n 'Set up the CLI status line command (writes to ~/.newcraw/settings.json statusLine). Use when the user runs /statusline.',\r\n tools: ['Read', 'Edit', 'Bash'],\r\n systemPrompt: `You are the status line setup agent.\r\n\r\nYour job is to configure a fast, single-line status command for the CLI UI.\r\n\r\nRequirements:\r\n- Write/update the user's ~/.newcraw/settings.json and set the top-level key \"statusLine\" to a shell command string.\r\n- IMPORTANT: When using Read/Edit tools, use absolute paths (do not pass \"~\" to tool inputs).\r\n- The command must be quick (ideally <200ms), produce a single line, and be safe to run repeatedly.\r\n- Prefer using information that is generally available: current directory, git branch/dirty state, etc.\r\n- If you can't infer the user's preferred status info from their shell config, ask them what they want and propose a reasonable default.\r\n\r\nSuggested approach:\r\n1) Inspect common shell config files (Read):\r\n - macOS/Linux: ~/.zshrc, ~/.bashrc, ~/.config/fish/config.fish\r\n - Windows: consider PowerShell profile if the user provides its location\r\n2) Propose a statusLine command:\r\n - macOS/Linux: e.g. a small sh snippet that prints cwd basename and git branch if present\r\n - Windows: e.g. a short PowerShell one-liner that prints similar info\r\n3) Update ~/.newcraw/settings.json:\r\n - If the file does not exist, create it as a minimal JSON object.\r\n - Preserve unrelated fields if present.\r\n4) Reply with the exact command you set and how the user can change/remove it later.`,\r\n source: 'built-in',\r\n location: 'built-in',\r\n baseDir: 'built-in',\r\n}\r\n\r\nfunction mergeAgents(allAgents: AgentConfig[]): AgentConfig[] {\r\n const builtIn = allAgents.filter(a => a.source === 'built-in')\r\n const plugin = allAgents.filter(a => a.source === 'plugin')\r\n const user = allAgents.filter(a => a.source === 'userSettings')\r\n const project = allAgents.filter(a => a.source === 'projectSettings')\r\n const flag = allAgents.filter(a => a.source === 'flagSettings')\r\n const policy = allAgents.filter(a => a.source === 'policySettings')\r\n\r\n const ordered = [builtIn, plugin, user, project, flag, policy]\r\n const map = new Map<string, AgentConfig>()\r\n for (const group of ordered) {\r\n for (const agent of group) {\r\n map.set(agent.agentType, agent)\r\n }\r\n }\r\n return Array.from(map.values())\r\n}\r\n\r\nfunction inodeKeyForPath(filePath: string): string | null {\r\n try {\r\n const st = statSync(filePath)\r\n if (typeof (st as any).dev === 'number' && typeof (st as any).ino === 'number') {\r\n return `${(st as any).dev}:${(st as any).ino}`\r\n }\r\n return null\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nfunction scanAgentPaths(options: {\r\n dirPathOrFile: string\r\n baseDir: string\r\n source: Exclude<AgentSource, 'built-in' | 'flagSettings'>\r\n seenInodes: Map<string, AgentSource>\r\n}): AgentConfig[] {\r\n const out: AgentConfig[] = []\r\n\r\n const addFile = (filePath: string) => {\r\n if (!filePath.endsWith('.md')) return\r\n\r\n const inodeKey = inodeKeyForPath(filePath)\r\n if (inodeKey) {\r\n const existing = options.seenInodes.get(inodeKey)\r\n if (existing) return\r\n options.seenInodes.set(inodeKey, options.source)\r\n }\r\n\r\n const agent = parseAgentFromFile({\r\n filePath,\r\n baseDir: options.baseDir,\r\n source: options.source,\r\n })\r\n if (agent) out.push(agent)\r\n }\r\n\r\n let st: ReturnType<typeof statSync>\r\n try {\r\n st = statSync(options.dirPathOrFile)\r\n } catch {\r\n return []\r\n }\r\n\r\n if (st.isFile()) {\r\n addFile(options.dirPathOrFile)\r\n return out\r\n }\r\n\r\n if (!st.isDirectory()) return []\r\n\r\n for (const filePath of listMarkdownFilesRecursively(options.dirPathOrFile)) {\r\n addFile(filePath)\r\n }\r\n\r\n return out\r\n}\r\n\r\nasync function loadAllAgents(): Promise<{\r\n activeAgents: AgentConfig[]\r\n allAgents: AgentConfig[]\r\n}> {\r\n const builtinAgents: AgentConfig[] = [\r\n BUILTIN_GENERAL_PURPOSE,\r\n BUILTIN_STATUSLINE_SETUP,\r\n BUILTIN_EXPLORE,\r\n BUILTIN_PLAN,\r\n ]\r\n\r\n const seenInodes = new Map<string, AgentSource>()\r\n\r\n const sessionPlugins = getSessionPlugins()\r\n const pluginAgentDirs = sessionPlugins.flatMap(p => p.agentsDirs ?? [])\r\n const pluginAgents = pluginAgentDirs.flatMap(dir =>\r\n scanAgentPaths({\r\n dirPathOrFile: dir,\r\n baseDir: dir,\r\n source: 'plugin',\r\n seenInodes,\r\n }),\r\n )\r\n\r\n const policyAgentsDir = join(getClaudePolicyBaseDir(), '.claude', 'agents')\r\n const policyAgents = scanAgentPaths({\r\n dirPathOrFile: policyAgentsDir,\r\n baseDir: policyAgentsDir,\r\n source: 'policySettings',\r\n seenInodes,\r\n })\r\n\r\n const userAgents: AgentConfig[] = []\r\n if (isSettingSourceEnabled('userSettings')) {\r\n for (const root of getUserConfigRoots()) {\r\n const dir = join(root, 'agents')\r\n userAgents.push(\r\n ...scanAgentPaths({\r\n dirPathOrFile: dir,\r\n baseDir: dir,\r\n source: 'userSettings',\r\n seenInodes,\r\n }),\r\n )\r\n }\r\n }\r\n\r\n const projectAgents: AgentConfig[] = []\r\n if (isSettingSourceEnabled('projectSettings')) {\r\n const dirs = findProjectAgentDirs(getCwd())\r\n for (const dir of dirs) {\r\n projectAgents.push(\r\n ...scanAgentPaths({\r\n dirPathOrFile: dir,\r\n baseDir: dir,\r\n source: 'projectSettings',\r\n seenInodes,\r\n }),\r\n )\r\n }\r\n }\r\n\r\n const allAgents: AgentConfig[] = [\r\n ...builtinAgents,\r\n ...pluginAgents,\r\n ...userAgents,\r\n ...projectAgents,\r\n ...FLAG_AGENTS,\r\n ...policyAgents,\r\n ]\r\n\r\n const activeAgents = mergeAgents(allAgents)\r\n return { activeAgents, allAgents }\r\n}\r\n\r\nexport const getActiveAgents = memoize(async (): Promise<AgentConfig[]> => {\r\n const { activeAgents } = await loadAllAgents()\r\n return activeAgents\r\n})\r\n\r\nexport const getAllAgents = memoize(async (): Promise<AgentConfig[]> => {\r\n const { allAgents } = await loadAllAgents()\r\n return allAgents\r\n})\r\n\r\nexport const getAgentByType = memoize(\r\n async (agentType: string): Promise<AgentConfig | undefined> => {\r\n const agents = await getActiveAgents()\r\n return agents.find(agent => agent.agentType === agentType)\r\n },\r\n)\r\n\r\nexport const getAvailableAgentTypes = memoize(async (): Promise<string[]> => {\r\n const agents = await getActiveAgents()\r\n return agents.map(agent => agent.agentType)\r\n})\r\n\r\nexport function clearAgentCache(): void {\r\n getActiveAgents.cache?.clear?.()\r\n getAllAgents.cache?.clear?.()\r\n getAgentByType.cache?.clear?.()\r\n getAvailableAgentTypes.cache?.clear?.()\r\n}\r\n\r\nlet watchers: FSWatcher[] = []\r\n\r\nexport async function startAgentWatcher(onChange?: () => void): Promise<void> {\r\n await stopAgentWatcher()\r\n\r\n const watchDirs: string[] = []\r\n\r\n watchDirs.push(join(getClaudePolicyBaseDir(), '.claude', 'agents'))\r\n\r\n if (isSettingSourceEnabled('userSettings')) {\r\n for (const root of getUserConfigRoots()) {\r\n watchDirs.push(join(root, 'agents'))\r\n }\r\n }\r\n\r\n if (isSettingSourceEnabled('projectSettings')) {\r\n watchDirs.push(...findProjectAgentDirs(getCwd()))\r\n }\r\n\r\n for (const plugin of getSessionPlugins()) {\r\n for (const dir of plugin.agentsDirs ?? []) {\r\n watchDirs.push(dir)\r\n }\r\n }\r\n\r\n for (const dirPath of dedupeStrings(watchDirs)) {\r\n if (!existsSync(dirPath)) continue\r\n try {\r\n const watcher = watch(\r\n dirPath,\r\n { recursive: false },\r\n async (_eventType, filename) => {\r\n if (filename && filename.endsWith('.md')) {\r\n clearAgentCache()\r\n onChange?.()\r\n }\r\n },\r\n )\r\n watchers.push(watcher)\r\n } catch {\r\n continue\r\n }\r\n }\r\n}\r\n\r\nexport async function stopAgentWatcher(): Promise<void> {\r\n try {\r\n for (const watcher of watchers) {\r\n try {\r\n watcher.close()\r\n } catch {\r\n }\r\n }\r\n } finally {\r\n watchers = []\r\n }\r\n}\r\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["trimmed"]
7
7
  }