newcraw 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/dist/REPL-CTTH53A7.js +50 -0
  2. package/dist/{acp-J4WDYGRX.js → acp-25PIN25O.js} +69 -40
  3. package/dist/acp-25PIN25O.js.map +7 -0
  4. package/dist/{agentsValidate-UBOER2IN.js → agentsValidate-BXDD54YP.js} +13 -10
  5. package/dist/{agentsValidate-UBOER2IN.js.map → agentsValidate-BXDD54YP.js.map} +1 -1
  6. package/dist/{ask-MGUO3L35.js → ask-EL4XAA5P.js} +62 -52
  7. package/dist/ask-EL4XAA5P.js.map +7 -0
  8. package/dist/{autoUpdater-2GS6LRPK.js → autoUpdater-DKMSJXWW.js} +5 -4
  9. package/dist/{chunk-2C43OXE7.js → chunk-2OVXJBJV.js} +38 -59
  10. package/dist/chunk-2OVXJBJV.js.map +7 -0
  11. package/dist/{chunk-53A4JHFW.js → chunk-3D3C7MRI.js} +23 -4
  12. package/dist/chunk-3D3C7MRI.js.map +7 -0
  13. package/dist/{chunk-VKI7ORIO.js → chunk-3ZQRACCP.js} +37 -18
  14. package/dist/{chunk-VKI7ORIO.js.map → chunk-3ZQRACCP.js.map} +1 -1
  15. package/dist/chunk-4A6CDBDH.js +822 -0
  16. package/dist/chunk-4A6CDBDH.js.map +7 -0
  17. package/dist/{chunk-VQSCECTS.js → chunk-53VETVCP.js} +6 -4
  18. package/dist/{chunk-VQSCECTS.js.map → chunk-53VETVCP.js.map} +1 -1
  19. package/dist/{chunk-WWDVA4NV.js → chunk-6WT3ZRYF.js} +22 -6
  20. package/dist/{chunk-WWDVA4NV.js.map → chunk-6WT3ZRYF.js.map} +1 -1
  21. package/dist/{chunk-RUXIBQ3B.js → chunk-7E2L7EH2.js} +4 -4
  22. package/dist/{chunk-VHS2MZQS.js → chunk-7PWVUHQ2.js} +9 -6
  23. package/dist/{chunk-VHS2MZQS.js.map → chunk-7PWVUHQ2.js.map} +1 -1
  24. package/dist/{chunk-2EFL22PV.js → chunk-ADJ4YEII.js} +7 -3
  25. package/dist/chunk-ADJ4YEII.js.map +7 -0
  26. package/dist/chunk-AKNZJBBU.js +372 -0
  27. package/dist/chunk-AKNZJBBU.js.map +7 -0
  28. package/dist/chunk-ALQSPHXV.js +135 -0
  29. package/dist/chunk-ALQSPHXV.js.map +7 -0
  30. package/dist/{chunk-XS6PU75S.js → chunk-APSIF3YK.js} +1 -1
  31. package/dist/{chunk-IM33F5CM.js → chunk-BMJ5XGFR.js} +1668 -1623
  32. package/dist/chunk-BMJ5XGFR.js.map +7 -0
  33. package/dist/chunk-BQCOSNM3.js +93 -0
  34. package/dist/chunk-BQCOSNM3.js.map +7 -0
  35. package/dist/{chunk-OJIMOLIC.js → chunk-BTCASL4X.js} +3621 -7413
  36. package/dist/chunk-BTCASL4X.js.map +7 -0
  37. package/dist/chunk-CHB5K4GI.js +107 -0
  38. package/dist/chunk-CHB5K4GI.js.map +7 -0
  39. package/dist/{chunk-QH2M65BR.js → chunk-D2FSAFMO.js} +7 -3
  40. package/dist/{chunk-QH2M65BR.js.map → chunk-D2FSAFMO.js.map} +1 -1
  41. package/dist/chunk-D4OZACS2.js +35 -0
  42. package/dist/{chunk-IIFUDVGS.js → chunk-ENLHVQCX.js} +310 -177
  43. package/dist/chunk-ENLHVQCX.js.map +7 -0
  44. package/dist/{chunk-A7X6OCZE.js → chunk-ERKWSZ3K.js} +1 -1
  45. package/dist/{chunk-UYRR6F5S.js → chunk-FSSZHQEJ.js} +9 -3
  46. package/dist/{chunk-UYRR6F5S.js.map → chunk-FSSZHQEJ.js.map} +1 -1
  47. package/dist/chunk-GV73HKJO.js +5473 -0
  48. package/dist/chunk-GV73HKJO.js.map +7 -0
  49. package/dist/{chunk-GZTCXXSS.js → chunk-GZ4BEVMZ.js} +57 -46
  50. package/dist/{chunk-GZTCXXSS.js.map → chunk-GZ4BEVMZ.js.map} +1 -1
  51. package/dist/chunk-HLBLZKZH.js +45 -0
  52. package/dist/chunk-HLBLZKZH.js.map +7 -0
  53. package/dist/chunk-JLVECHVJ.js +36 -0
  54. package/dist/chunk-JLVECHVJ.js.map +7 -0
  55. package/dist/chunk-KNSAVNMD.js +683 -0
  56. package/dist/{chunk-F3COCCAE.js.map → chunk-KNSAVNMD.js.map} +1 -1
  57. package/dist/{chunk-V5U6BHT2.js → chunk-KRN3WHHL.js} +7 -3
  58. package/dist/{chunk-V5U6BHT2.js.map → chunk-KRN3WHHL.js.map} +1 -1
  59. package/dist/{chunk-3LMXSKZ7.js → chunk-NFYAVT54.js} +1 -1
  60. package/dist/chunk-NT7RDVDA.js +33 -0
  61. package/dist/{chunk-KQSHIOZK.js.map → chunk-NT7RDVDA.js.map} +1 -1
  62. package/dist/chunk-NW7WSLD5.js +166 -0
  63. package/dist/{chunk-ZYSVG4X3.js.map → chunk-NW7WSLD5.js.map} +2 -2
  64. package/dist/{chunk-HSJ6HYAO.js → chunk-P52SGBC4.js} +18 -10
  65. package/dist/chunk-P52SGBC4.js.map +7 -0
  66. package/dist/{chunk-XXU2NVOE.js → chunk-PC6QOCGI.js} +30 -6
  67. package/dist/chunk-PC6QOCGI.js.map +7 -0
  68. package/dist/{chunk-N5OHRWG2.js → chunk-QSRXXZO7.js} +4 -2
  69. package/dist/{chunk-N5OHRWG2.js.map → chunk-QSRXXZO7.js.map} +1 -1
  70. package/dist/{chunk-DEF3KFP7.js → chunk-QZFKONA3.js} +4 -2
  71. package/dist/{chunk-DEF3KFP7.js.map → chunk-QZFKONA3.js.map} +1 -1
  72. package/dist/{chunk-JWXQNBBA.js → chunk-RE226X4F.js} +7 -1
  73. package/dist/{chunk-JWXQNBBA.js.map → chunk-RE226X4F.js.map} +1 -1
  74. package/dist/chunk-RF57YWGW.js +88 -0
  75. package/dist/chunk-RF57YWGW.js.map +7 -0
  76. package/dist/chunk-UGBECBIR.js +62 -0
  77. package/dist/chunk-UGBECBIR.js.map +7 -0
  78. package/dist/chunk-UYWZQVH5.js +35 -0
  79. package/dist/chunk-UYWZQVH5.js.map +7 -0
  80. package/dist/{chunk-LOIZNQOU.js → chunk-VHZRJ7RI.js} +9 -3
  81. package/dist/{chunk-LOIZNQOU.js.map → chunk-VHZRJ7RI.js.map} +1 -1
  82. package/dist/{chunk-XMGUQHMF.js → chunk-VSSVN6WG.js} +11 -1
  83. package/dist/chunk-VSSVN6WG.js.map +7 -0
  84. package/dist/{chunk-OZHBEG7U.js → chunk-XV7LPJNT.js} +15 -5
  85. package/dist/{chunk-OZHBEG7U.js.map → chunk-XV7LPJNT.js.map} +1 -1
  86. package/dist/chunk-Y7MDOB3N.js +65 -0
  87. package/dist/chunk-Y7MDOB3N.js.map +7 -0
  88. package/dist/{chunk-BWYKUDJR.js → chunk-ZLAB3Z4G.js} +14 -8
  89. package/dist/{chunk-BWYKUDJR.js.map → chunk-ZLAB3Z4G.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-Z2BNJWHT.js} +251 -485
  93. package/dist/cli-Z2BNJWHT.js.map +7 -0
  94. package/dist/commands-3Y3OQOXT.js +54 -0
  95. package/dist/{config-GTJWCNPF.js → config-5RS7HDIK.js} +9 -6
  96. package/dist/{context-WF3TTXQU.js → context-XZXRRYKS.js} +8 -7
  97. package/dist/{costTracker-2G3ZI2JF.js → costTracker-VSWW7SRT.js} +3 -2
  98. package/dist/{customCommands-QOWK57EX.js → customCommands-6KDAODFQ.js} +6 -5
  99. package/dist/{env-37BAP7QF.js → env-WIM2DQ4L.js} +10 -7
  100. package/dist/{gateway-IZYO6YFJ.js → gateway-DKHC7H3K.js} +542 -96
  101. package/dist/gateway-DKHC7H3K.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-4S452GGD.js} +6 -5
  107. package/dist/{kodeAgentSessionResume-UEEDRJ3N.js → kodeAgentSessionResume-MSMG4QUR.js} +6 -5
  108. package/dist/{kodeAgentStreamJson-VIXFTYL5.js → kodeAgentStreamJson-4ZKIWKS3.js} +4 -2
  109. package/dist/{kodeAgentStreamJsonSession-XC3IPREZ.js → kodeAgentStreamJsonSession-CYG6MLKP.js} +15 -4
  110. package/dist/kodeAgentStreamJsonSession-CYG6MLKP.js.map +7 -0
  111. package/dist/{kodeAgentStructuredStdio-SI5C7AAD.js → kodeAgentStructuredStdio-5DCUC6V6.js} +3 -3
  112. package/dist/{kodeHooks-V36SHCTC.js → kodeHooks-WX3N6CL6.js} +6 -5
  113. package/dist/{llm-CYUDKJNR.js → llm-V2W4KJIA.js} +239 -57
  114. package/dist/llm-V2W4KJIA.js.map +7 -0
  115. package/dist/{llmLazy-IXVVBRTN.js → llmLazy-I7SO67YA.js} +2 -2
  116. package/dist/{loader-OEJ6C3TN.js → loader-YJGRGJNH.js} +6 -5
  117. package/dist/{mcp-KE3SILMX.js → mcp-WG3RQQCZ.js} +10 -9
  118. package/dist/{mentionProcessor-GAU2WAYB.js → mentionProcessor-PKWDUKTN.js} +14 -7
  119. package/dist/{mentionProcessor-GAU2WAYB.js.map → mentionProcessor-PKWDUKTN.js.map} +1 -1
  120. package/dist/{messages-WCSGGSEU.js → messages-RXHQ6VKL.js} +2 -2
  121. package/dist/{model-4TQIV5J2.js → model-JNWAZGT7.js} +10 -7
  122. package/dist/{openai-KTZV6F7N.js → openai-6NL5UXO7.js} +8 -7
  123. package/dist/{outputStyles-WX5RYQOA.js → outputStyles-BVPXT3MW.js} +6 -5
  124. package/dist/{pluginRuntime-JXMJZ2LC.js → pluginRuntime-XHI3TCRJ.js} +11 -8
  125. package/dist/{pluginRuntime-JXMJZ2LC.js.map → pluginRuntime-XHI3TCRJ.js.map} +1 -1
  126. package/dist/{pluginValidation-JNQZYLUP.js → pluginValidation-WDFL352C.js} +8 -7
  127. package/dist/prompts-C4RUFGX2.js +58 -0
  128. package/dist/query-IA3UKMGR.js +58 -0
  129. package/dist/{responsesStreaming-2AIT6GHG.js → responsesStreaming-JORGEFQC.js} +1 -1
  130. package/dist/{ripgrep-KDPQAMB2.js → ripgrep-BHDXRABJ.js} +5 -4
  131. package/dist/sandbox-QOXESHL4.js +63 -0
  132. package/dist/{skillMarketplace-IXAGP3Q2.js → skillMarketplace-RIAMO2YA.js} +5 -4
  133. package/dist/{state-MSCYLB6Y.js → state-TM2XZQE2.js} +6 -3
  134. package/dist/structuredOutput-KAVFUV2Z.js +9 -0
  135. package/dist/theme-BXUQNXSD.js +15 -0
  136. package/dist/thinking-BCZ4WDT6.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-ILRPUITK.js +24 -0
  140. package/dist/toolPermissionContextState-ILRPUITK.js.map +7 -0
  141. package/dist/{toolPermissionSettings-EUZKGZU2.js → toolPermissionSettings-LNYZ6XFE.js} +9 -8
  142. package/dist/toolPermissionSettings-LNYZ6XFE.js.map +7 -0
  143. package/dist/tools-HIPUGTF5.js +55 -0
  144. package/dist/tools-HIPUGTF5.js.map +7 -0
  145. package/dist/{userInput-LJL4CVOB.js → userInput-I33T2RX2.js} +49 -34
  146. package/dist/{userInput-LJL4CVOB.js.map → userInput-I33T2RX2.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 +1 -1
  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-CTTH53A7.js.map} +0 -0
  184. /package/dist/{autoUpdater-2GS6LRPK.js.map → autoUpdater-DKMSJXWW.js.map} +0 -0
  185. /package/dist/{chunk-RUXIBQ3B.js.map → chunk-7E2L7EH2.js.map} +0 -0
  186. /package/dist/{chunk-XS6PU75S.js.map → chunk-APSIF3YK.js.map} +0 -0
  187. /package/dist/{chunk-AXWJI6N5.js.map → chunk-D4OZACS2.js.map} +0 -0
  188. /package/dist/{chunk-A7X6OCZE.js.map → chunk-ERKWSZ3K.js.map} +0 -0
  189. /package/dist/{chunk-3LMXSKZ7.js.map → chunk-NFYAVT54.js.map} +0 -0
  190. /package/dist/{commands-AVEBLFVS.js.map → commands-3Y3OQOXT.js.map} +0 -0
  191. /package/dist/{config-GTJWCNPF.js.map → config-5RS7HDIK.js.map} +0 -0
  192. /package/dist/{context-WF3TTXQU.js.map → context-XZXRRYKS.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-6KDAODFQ.js.map} +0 -0
  195. /package/dist/{env-37BAP7QF.js.map → env-WIM2DQ4L.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-4S452GGD.js.map} +0 -0
  199. /package/dist/{kodeAgentStreamJson-VIXFTYL5.js.map → kodeAgentSessionResume-MSMG4QUR.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-WX3N6CL6.js.map} +0 -0
  203. /package/dist/{loader-OEJ6C3TN.js.map → llmLazy-I7SO67YA.js.map} +0 -0
  204. /package/dist/{mcp-KE3SILMX.js.map → loader-YJGRGJNH.js.map} +0 -0
  205. /package/dist/{messages-WCSGGSEU.js.map → mcp-WG3RQQCZ.js.map} +0 -0
  206. /package/dist/{model-4TQIV5J2.js.map → messages-RXHQ6VKL.js.map} +0 -0
  207. /package/dist/{openai-KTZV6F7N.js.map → model-JNWAZGT7.js.map} +0 -0
  208. /package/dist/{outputStyles-WX5RYQOA.js.map → openai-6NL5UXO7.js.map} +0 -0
  209. /package/dist/{pluginValidation-JNQZYLUP.js.map → outputStyles-BVPXT3MW.js.map} +0 -0
  210. /package/dist/{prompts-LE6GK75N.js.map → pluginValidation-WDFL352C.js.map} +0 -0
  211. /package/dist/{query-GGIP6PWG.js.map → prompts-C4RUFGX2.js.map} +0 -0
  212. /package/dist/{responsesStreaming-2AIT6GHG.js.map → query-IA3UKMGR.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-BHDXRABJ.js.map} +0 -0
  215. /package/dist/{state-MSCYLB6Y.js.map → sandbox-QOXESHL4.js.map} +0 -0
  216. /package/dist/{theme-GAMFOLBW.js.map → skillMarketplace-RIAMO2YA.js.map} +0 -0
  217. /package/dist/{toolPermissionContext-I3IXPVED.js.map → state-TM2XZQE2.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-BXUQNXSD.js.map} +0 -0
  220. /package/dist/{uuid-VA3KVASX.js.map → thinking-BCZ4WDT6.js.map} +0 -0
@@ -1,66 +1,79 @@
1
1
  import { createRequire as __newcrawCreateRequire } from "node:module";
2
2
  const require = __newcrawCreateRequire(import.meta.url);
3
+ import {
4
+ buildSkillMatchDirective,
5
+ createQueryOptions,
6
+ matchSkillForPrompt
7
+ } from "./chunk-RF57YWGW.js";
3
8
  import {
4
9
  getSystemPrompt,
5
10
  query
6
- } from "./chunk-OJIMOLIC.js";
7
- import "./chunk-XS6PU75S.js";
8
- import "./chunk-WWDVA4NV.js";
9
- import "./chunk-VQSCECTS.js";
10
- import "./chunk-HSJ6HYAO.js";
11
- import "./chunk-3LMXSKZ7.js";
12
- import "./chunk-XXU2NVOE.js";
11
+ } from "./chunk-BTCASL4X.js";
12
+ import "./chunk-GV73HKJO.js";
13
+ import "./chunk-53VETVCP.js";
14
+ import "./chunk-NFYAVT54.js";
15
+ import "./chunk-APSIF3YK.js";
16
+ import "./chunk-PC6QOCGI.js";
13
17
  import "./chunk-JX5ZQYTQ.js";
14
18
  import "./chunk-XJQATPV7.js";
15
- import "./chunk-V5U6BHT2.js";
16
- import "./chunk-7ZFLZNOW.js";
17
- import "./chunk-VHS2MZQS.js";
18
- import "./chunk-QH2M65BR.js";
19
- import "./chunk-RUXIBQ3B.js";
20
- import "./chunk-JWXQNBBA.js";
21
- import "./chunk-2C43OXE7.js";
22
- import "./chunk-BWYKUDJR.js";
23
- import "./chunk-2EFL22PV.js";
19
+ import "./chunk-D2FSAFMO.js";
20
+ import "./chunk-Y7MDOB3N.js";
21
+ import "./chunk-7E2L7EH2.js";
22
+ import "./chunk-6WT3ZRYF.js";
23
+ import "./chunk-P52SGBC4.js";
24
+ import "./chunk-UGBECBIR.js";
25
+ import "./chunk-ZLAB3Z4G.js";
24
26
  import "./chunk-U7S4MEYP.js";
25
- import "./chunk-UYRR6F5S.js";
27
+ import "./chunk-FSSZHQEJ.js";
26
28
  import "./chunk-TY3CCSAT.js";
27
- import "./chunk-LOIZNQOU.js";
28
- import "./chunk-INJSFEKL.js";
29
- import "./chunk-2UO3BFZH.js";
29
+ import "./chunk-VHZRJ7RI.js";
30
30
  import {
31
31
  createUserMessage
32
- } from "./chunk-A7X6OCZE.js";
33
- import {
34
- getModelManager
35
- } from "./chunk-F3COCCAE.js";
32
+ } from "./chunk-ERKWSZ3K.js";
33
+ import "./chunk-RE226X4F.js";
34
+ import "./chunk-4A6CDBDH.js";
35
+ import "./chunk-KRN3WHHL.js";
36
+ import "./chunk-7ZFLZNOW.js";
37
+ import "./chunk-7PWVUHQ2.js";
38
+ import "./chunk-INJSFEKL.js";
39
+ import "./chunk-ADJ4YEII.js";
40
+ import "./chunk-JLVECHVJ.js";
41
+ import "./chunk-2OVXJBJV.js";
42
+ import "./chunk-2UO3BFZH.js";
43
+ import "./chunk-CHB5K4GI.js";
44
+ import "./chunk-KNSAVNMD.js";
36
45
  import {
37
46
  getContext
38
- } from "./chunk-53A4JHFW.js";
39
- import "./chunk-DEF3KFP7.js";
40
- import "./chunk-IIFUDVGS.js";
41
- import "./chunk-KQSHIOZK.js";
42
- import "./chunk-GZTCXXSS.js";
47
+ } from "./chunk-3D3C7MRI.js";
48
+ import "./chunk-QZFKONA3.js";
49
+ import "./chunk-ENLHVQCX.js";
50
+ import "./chunk-NT7RDVDA.js";
51
+ import "./chunk-GZ4BEVMZ.js";
43
52
  import {
44
53
  getMessagesPath,
54
+ init_log,
55
+ init_state,
45
56
  overwriteLog,
46
57
  setCwd
47
- } from "./chunk-IM33F5CM.js";
48
- import "./chunk-ZYSVG4X3.js";
58
+ } from "./chunk-BMJ5XGFR.js";
59
+ import "./chunk-UYWZQVH5.js";
60
+ import "./chunk-NW7WSLD5.js";
49
61
  import {
50
62
  getTotalCost
51
- } from "./chunk-755HIAI3.js";
52
- import "./chunk-AXWJI6N5.js";
63
+ } from "./chunk-ZMO4E7IW.js";
64
+ import "./chunk-HLBLZKZH.js";
65
+ import "./chunk-D4OZACS2.js";
53
66
 
54
67
  // src/app/ask.ts
55
68
  import { last } from "lodash-es";
69
+ init_state();
70
+ init_log();
56
71
  async function ask({
57
- commands,
58
72
  safeMode,
59
73
  hasPermissionsToUseTool,
60
74
  messageLogName,
61
75
  prompt,
62
76
  cwd,
63
- tools,
64
77
  verbose = false,
65
78
  initialMessages,
66
79
  persistSession = true,
@@ -69,32 +82,29 @@ async function ask({
69
82
  await setCwd(cwd);
70
83
  const message = createUserMessage(prompt);
71
84
  const messages = [...initialMessages ?? [], message];
72
- const [systemPrompt, context, model] = await Promise.all([
85
+ const [systemPrompt, context, queryOpts, skillMatch] = await Promise.all([
73
86
  getSystemPrompt({ domain }),
74
87
  getContext(),
75
- getModelManager().getModelName("main")
88
+ createQueryOptions({
89
+ messages,
90
+ safeMode,
91
+ messageLogName,
92
+ verbose,
93
+ persistSession
94
+ }),
95
+ matchSkillForPrompt(prompt)
76
96
  ]);
97
+ if (skillMatch) {
98
+ systemPrompt.unshift(buildSkillMatchDirective(skillMatch));
99
+ }
77
100
  for await (const m of query(
78
101
  messages,
79
102
  systemPrompt,
80
103
  context,
81
104
  hasPermissionsToUseTool,
82
105
  {
83
- options: {
84
- commands,
85
- tools,
86
- verbose,
87
- safeMode,
88
- forkNumber: 0,
89
- messageLogName: "unused",
90
- maxThinkingTokens: 0,
91
- persistSession
92
- },
93
- abortController: new AbortController(),
94
- messageId: void 0,
95
- readFileTimestamps: {},
96
- setToolJSX: () => {
97
- }
106
+ ...queryOpts,
107
+ abortController: new AbortController()
98
108
  }
99
109
  )) {
100
110
  messages.push(m);
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/app/ask.ts"],
4
+ "sourcesContent": ["import { last } from 'lodash-es'\r\nimport { getSystemPrompt } from '@constants/prompts'\r\nimport { getContext } from '@context'\r\nimport { getTotalCost } from '@costTracker'\r\nimport { Message, query } from '@query'\r\nimport type { CanUseToolFn } from '@newcraw-types/canUseTool'\r\nimport { setCwd } from '@utils/state'\r\nimport { getMessagesPath, overwriteLog } from '@utils/log'\r\nimport { createUserMessage } from '@utils/messages'\r\nimport { createQueryOptions } from '@core/queryOptionsFactory'\r\nimport { matchSkillForPrompt, buildSkillMatchDirective } from '@core/skillMatcher'\r\n\r\ntype Props = {\r\n safeMode?: boolean\r\n hasPermissionsToUseTool: CanUseToolFn\r\n messageLogName: string\r\n prompt: string\r\n cwd: string\r\n verbose?: boolean\r\n initialMessages?: Message[]\r\n persistSession?: boolean\r\n domain?: string\r\n}\r\n\r\nexport async function ask({\r\n safeMode,\r\n hasPermissionsToUseTool,\r\n messageLogName,\r\n prompt,\r\n cwd,\r\n verbose = false,\r\n initialMessages,\r\n persistSession = true,\r\n domain,\r\n}: Props): Promise<{\r\n resultText: string\r\n totalCost: number\r\n messageHistoryFile: string\r\n}> {\r\n await setCwd(cwd)\r\n const message = createUserMessage(prompt)\r\n const messages: Message[] = [...(initialMessages ?? []), message]\r\n\r\n const [systemPrompt, context, queryOpts, skillMatch] = await Promise.all([\r\n getSystemPrompt({ domain }),\r\n getContext(),\r\n createQueryOptions({\r\n messages,\r\n safeMode,\r\n messageLogName,\r\n verbose,\r\n persistSession,\r\n }),\r\n matchSkillForPrompt(prompt),\r\n ])\r\n\r\n if (skillMatch) {\r\n systemPrompt.unshift(buildSkillMatchDirective(skillMatch))\r\n }\r\n\r\n for await (const m of query(\r\n messages,\r\n systemPrompt,\r\n context,\r\n hasPermissionsToUseTool,\r\n {\r\n ...queryOpts,\r\n abortController: new AbortController(),\r\n },\r\n )) {\r\n messages.push(m)\r\n }\r\n\r\n const result = last(messages)\r\n if (!result || result.type !== 'assistant') {\r\n throw new Error('Expected content to be an assistant message')\r\n }\r\n\r\n const textContent = result.message.content.find(c => c.type === 'text')\r\n if (!textContent) {\r\n throw new Error(\r\n `Expected at least one text content item, but got ${JSON.stringify(\r\n result.message.content,\r\n null,\r\n 2,\r\n )}`,\r\n )\r\n }\r\n\r\n const messageHistoryFile = getMessagesPath(messageLogName, 0, 0)\r\n overwriteLog(messageHistoryFile, messages)\r\n\r\n return {\r\n resultText: textContent.text,\r\n totalCost: getTotalCost(),\r\n messageHistoryFile,\r\n }\r\n}\r\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,YAAY;AAMrB;AACA;AAiBA,eAAsB,IAAI;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,iBAAiB;AAAA,EACjB;AACF,GAIG;AACD,QAAM,OAAO,GAAG;AAChB,QAAM,UAAU,kBAAkB,MAAM;AACxC,QAAM,WAAsB,CAAC,GAAI,mBAAmB,CAAC,GAAI,OAAO;AAEhE,QAAM,CAAC,cAAc,SAAS,WAAW,UAAU,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvE,gBAAgB,EAAE,OAAO,CAAC;AAAA,IAC1B,WAAW;AAAA,IACX,mBAAmB;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,oBAAoB,MAAM;AAAA,EAC5B,CAAC;AAED,MAAI,YAAY;AACd,iBAAa,QAAQ,yBAAyB,UAAU,CAAC;AAAA,EAC3D;AAEA,mBAAiB,KAAK;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,iBAAiB,IAAI,gBAAgB;AAAA,IACvC;AAAA,EACF,GAAG;AACD,aAAS,KAAK,CAAC;AAAA,EACjB;AAEA,QAAM,SAAS,KAAK,QAAQ;AAC5B,MAAI,CAAC,UAAU,OAAO,SAAS,aAAa;AAC1C,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AAEA,QAAM,cAAc,OAAO,QAAQ,QAAQ,KAAK,OAAK,EAAE,SAAS,MAAM;AACtE,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI;AAAA,MACR,oDAAoD,KAAK;AAAA,QACvD,OAAO,QAAQ;AAAA,QACf;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,qBAAqB,gBAAgB,gBAAgB,GAAG,CAAC;AAC/D,eAAa,oBAAoB,QAAQ;AAEzC,SAAO;AAAA,IACL,YAAY,YAAY;AAAA,IACxB,WAAW,aAAa;AAAA,IACxB;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -5,10 +5,11 @@ import {
5
5
  checkAndNotifyUpdate,
6
6
  getLatestVersion,
7
7
  getUpdateCommandSuggestions
8
- } from "./chunk-OZHBEG7U.js";
9
- import "./chunk-IM33F5CM.js";
10
- import "./chunk-ZYSVG4X3.js";
11
- import "./chunk-AXWJI6N5.js";
8
+ } from "./chunk-XV7LPJNT.js";
9
+ import "./chunk-BMJ5XGFR.js";
10
+ import "./chunk-UYWZQVH5.js";
11
+ import "./chunk-NW7WSLD5.js";
12
+ import "./chunk-D4OZACS2.js";
12
13
  export {
13
14
  assertMinVersion,
14
15
  checkAndNotifyUpdate,
@@ -4,19 +4,26 @@ import {
4
4
  getSessionPlugins
5
5
  } from "./chunk-2UO3BFZH.js";
6
6
  import {
7
- debug
8
- } from "./chunk-GZTCXXSS.js";
7
+ debug,
8
+ init_debugLogger
9
+ } from "./chunk-GZ4BEVMZ.js";
9
10
  import {
10
11
  getCwd,
11
- getKodeBaseDir,
12
+ getNewcrawBaseDir,
13
+ init_env,
14
+ init_log,
15
+ init_state,
12
16
  logError
13
- } from "./chunk-IM33F5CM.js";
17
+ } from "./chunk-BMJ5XGFR.js";
14
18
 
15
19
  // src/services/plugins/customCommands.ts
20
+ init_state();
16
21
  import { existsSync, readFileSync, readdirSync, statSync } from "fs";
17
22
  import { basename, dirname, join, relative, sep } from "path";
18
- import { homedir } from "os";
19
23
  import { memoize } from "lodash-es";
24
+ init_env();
25
+ init_debugLogger();
26
+ init_log();
20
27
  import { execFile } from "child_process";
21
28
  import { promisify } from "util";
22
29
  import matter from "gray-matter";
@@ -110,8 +117,8 @@ function parseFrontmatter(content) {
110
117
  function isSkillMarkdownFile(filePath) {
111
118
  return /^skill\.md$/i.test(basename(filePath));
112
119
  }
113
- function getUserKodeBaseDir() {
114
- return getKodeBaseDir();
120
+ function getUserNewcrawBaseDir() {
121
+ return getNewcrawBaseDir();
115
122
  }
116
123
  function toBoolean(value) {
117
124
  if (typeof value === "boolean") return value;
@@ -356,6 +363,9 @@ function loadPluginSkillDirectoryCommandsFromBaseDir(args) {
356
363
  hasUserSpecifiedDescription: !!frontmatter.description,
357
364
  source: "pluginDir",
358
365
  scope: "project",
366
+ runtime: frontmatter.runtime,
367
+ executionScript: frontmatter["execution-script"],
368
+ dependencies: frontmatter.dependencies,
359
369
  userFacingName() {
360
370
  return effectiveDeclaredName ? buildPluginQualifiedName(args.pluginName, effectiveDeclaredName) : name;
361
371
  },
@@ -581,6 +591,9 @@ function loadSkillDirectoryCommandsFromBaseDir(skillsDir, source, scope) {
581
591
  hasUserSpecifiedDescription: !!frontmatter.description,
582
592
  source,
583
593
  scope,
594
+ runtime: frontmatter.runtime,
595
+ executionScript: frontmatter["execution-script"],
596
+ dependencies: frontmatter.dependencies,
584
597
  userFacingName() {
585
598
  return effectiveDeclaredName || name;
586
599
  },
@@ -609,40 +622,24 @@ ARGUMENTS: ${trimmedArgs}`;
609
622
  var loadCustomCommands = memoize(
610
623
  async () => {
611
624
  const cwd = getCwd();
612
- const userKodeBaseDir = getUserKodeBaseDir();
625
+ const userBaseDir = getUserNewcrawBaseDir();
613
626
  const sessionPlugins = getSessionPlugins();
614
- const projectLegacyCommandsDir = join(cwd, ".claude", "commands");
615
- const userLegacyCommandsDir = join(homedir(), ".claude", "commands");
616
- const projectKodeCommandsDir = join(cwd, ".newcraw", "commands");
617
- const userKodeCommandsDir = join(userKodeBaseDir, "commands");
618
- const projectLegacySkillsDir = join(cwd, ".claude", "skills");
619
- const userLegacySkillsDir = join(homedir(), ".claude", "skills");
620
- const projectKodeSkillsDir = join(cwd, ".newcraw", "skills");
621
- const userKodeSkillsDir = join(userKodeBaseDir, "skills");
627
+ const projectCommandsDir = join(cwd, ".newcraw", "commands");
628
+ const userCommandsDir = join(userBaseDir, "commands");
629
+ const projectSkillsDir = join(cwd, ".newcraw", "skills");
630
+ const userSkillsDir = join(userBaseDir, "skills");
622
631
  const abortController = new AbortController();
623
632
  const timeout = setTimeout(() => abortController.abort(), 3e3);
624
633
  try {
625
634
  const commandFiles = applySkillFilePreference([
626
635
  ...loadCommandMarkdownFilesFromBaseDir(
627
- projectLegacyCommandsDir,
636
+ projectCommandsDir,
628
637
  "localSettings",
629
638
  "project",
630
639
  abortController.signal
631
640
  ),
632
641
  ...loadCommandMarkdownFilesFromBaseDir(
633
- projectKodeCommandsDir,
634
- "localSettings",
635
- "project",
636
- abortController.signal
637
- ),
638
- ...loadCommandMarkdownFilesFromBaseDir(
639
- userLegacyCommandsDir,
640
- "userSettings",
641
- "user",
642
- abortController.signal
643
- ),
644
- ...loadCommandMarkdownFilesFromBaseDir(
645
- userKodeCommandsDir,
642
+ userCommandsDir,
646
643
  "userSettings",
647
644
  "user",
648
645
  abortController.signal
@@ -651,22 +648,12 @@ var loadCustomCommands = memoize(
651
648
  const fileCommands = commandFiles.map(createPromptCommandFromFile).filter((cmd) => cmd !== null);
652
649
  const skillDirCommands = [
653
650
  ...loadSkillDirectoryCommandsFromBaseDir(
654
- projectLegacySkillsDir,
655
- "localSettings",
656
- "project"
657
- ),
658
- ...loadSkillDirectoryCommandsFromBaseDir(
659
- projectKodeSkillsDir,
651
+ projectSkillsDir,
660
652
  "localSettings",
661
653
  "project"
662
654
  ),
663
655
  ...loadSkillDirectoryCommandsFromBaseDir(
664
- userLegacySkillsDir,
665
- "userSettings",
666
- "user"
667
- ),
668
- ...loadSkillDirectoryCommandsFromBaseDir(
669
- userKodeSkillsDir,
656
+ userSkillsDir,
670
657
  "userSettings",
671
658
  "user"
672
659
  )
@@ -719,15 +706,11 @@ var loadCustomCommands = memoize(
719
706
  },
720
707
  () => {
721
708
  const cwd = getCwd();
722
- const userKodeBaseDir = getUserKodeBaseDir();
709
+ const userBaseDir = getUserNewcrawBaseDir();
723
710
  const dirs = [
724
- join(homedir(), ".claude", "commands"),
725
- join(cwd, ".claude", "commands"),
726
- join(userKodeBaseDir, "commands"),
711
+ join(userBaseDir, "commands"),
727
712
  join(cwd, ".newcraw", "commands"),
728
- join(homedir(), ".claude", "skills"),
729
- join(cwd, ".claude", "skills"),
730
- join(userKodeBaseDir, "skills"),
713
+ join(userBaseDir, "skills"),
731
714
  join(cwd, ".newcraw", "skills")
732
715
  ];
733
716
  const exists = dirs.map((d) => existsSync(d) ? "1" : "0").join("");
@@ -738,21 +721,17 @@ var reloadCustomCommands = () => {
738
721
  loadCustomCommands.cache.clear();
739
722
  };
740
723
  function getCustomCommandDirectories() {
741
- const userKodeBaseDir = getUserKodeBaseDir();
724
+ const userBaseDir = getUserNewcrawBaseDir();
742
725
  return {
743
- userClaudeCommands: join(homedir(), ".claude", "commands"),
744
- projectClaudeCommands: join(getCwd(), ".claude", "commands"),
745
- userClaudeSkills: join(homedir(), ".claude", "skills"),
746
- projectClaudeSkills: join(getCwd(), ".claude", "skills"),
747
- userKodeCommands: join(userKodeBaseDir, "commands"),
748
- projectKodeCommands: join(getCwd(), ".newcraw", "commands"),
749
- userKodeSkills: join(userKodeBaseDir, "skills"),
750
- projectKodeSkills: join(getCwd(), ".newcraw", "skills")
726
+ userCommands: join(userBaseDir, "commands"),
727
+ projectCommands: join(getCwd(), ".newcraw", "commands"),
728
+ userSkills: join(userBaseDir, "skills"),
729
+ projectSkills: join(getCwd(), ".newcraw", "skills")
751
730
  };
752
731
  }
753
732
  function hasCustomCommands() {
754
733
  const dirs = getCustomCommandDirectories();
755
- return existsSync(dirs.userClaudeCommands) || existsSync(dirs.projectClaudeCommands) || existsSync(dirs.userClaudeSkills) || existsSync(dirs.projectClaudeSkills) || existsSync(dirs.userKodeCommands) || existsSync(dirs.projectKodeCommands) || existsSync(dirs.userKodeSkills) || existsSync(dirs.projectKodeSkills);
734
+ return existsSync(dirs.userCommands) || existsSync(dirs.projectCommands) || existsSync(dirs.userSkills) || existsSync(dirs.projectSkills);
756
735
  }
757
736
 
758
737
  export {
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/services/plugins/customCommands.ts"],
4
+ "sourcesContent": ["import { existsSync, readFileSync, readdirSync, statSync } from 'fs'\nimport { basename, dirname, join, relative, resolve, sep } from 'path'\nimport { memoize } from 'lodash-es'\nimport type { MessageParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { Command } from '@commands'\nimport { getCwd } from '@utils/state'\nimport { getSessionPlugins } from '@utils/session/sessionPlugins'\nimport { getNewcrawBaseDir } from '@utils/config/env'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\nimport { execFile } from 'child_process'\nimport { promisify } from 'util'\nimport matter from 'gray-matter'\nimport yaml from 'js-yaml'\n\nconst execFileAsync = promisify(execFile)\n\nexport async function executeBashCommands(content: string): Promise<string> {\n const bashCommandRegex = /!\\`([^`]+)\\`/g\n const matches = [...content.matchAll(bashCommandRegex)]\n\n if (matches.length === 0) {\n return content\n }\n\n let result = content\n\n for (const match of matches) {\n const fullMatch = match[0]\n const command = match[1].trim()\n\n try {\n const parts = command.split(/\\s+/)\n const cmd = parts[0]\n const args = parts.slice(1)\n\n const { stdout, stderr } = await execFileAsync(cmd, args, {\n timeout: 5000,\n encoding: 'utf8',\n cwd: getCwd(),\n })\n\n const output = stdout.trim() || stderr.trim() || '(no output)'\n result = result.replace(fullMatch, output)\n } catch (error) {\n logError(error)\n debugLogger.warn('CUSTOM_COMMAND_BASH_EXEC_FAILED', {\n command,\n error: error instanceof Error ? error.message : String(error),\n })\n result = result.replace(fullMatch, `(error executing: ${command})`)\n }\n }\n\n return result\n}\n\nexport async function resolveFileReferences(content: string): Promise<string> {\n const fileRefRegex = /@([a-zA-Z0-9/._-]+(?:\\.[a-zA-Z0-9]+)?)/g\n const matches = [...content.matchAll(fileRefRegex)]\n\n if (matches.length === 0) {\n return content\n }\n\n let result = content\n\n for (const match of matches) {\n const fullMatch = match[0]\n const filePath = match[1]\n\n if (filePath.startsWith('agent-')) {\n continue\n }\n\n try {\n const fullPath = join(getCwd(), filePath)\n\n if (existsSync(fullPath)) {\n const fileContent = readFileSync(fullPath, { encoding: 'utf-8' })\n\n const formattedContent = `\\n\\n## File: ${filePath}\\n\\`\\`\\`\\n${fileContent}\\n\\`\\`\\`\\n`\n result = result.replace(fullMatch, formattedContent)\n } else {\n result = result.replace(fullMatch, `(file not found: ${filePath})`)\n }\n } catch (error) {\n logError(error)\n debugLogger.warn('CUSTOM_COMMAND_FILE_READ_FAILED', {\n filePath,\n error: error instanceof Error ? error.message : String(error),\n })\n result = result.replace(fullMatch, `(error reading: ${filePath})`)\n }\n }\n\n return result\n}\n\nexport interface CustomCommandFrontmatter {\n description?: string\n 'allowed-tools'?: string[]\n 'argument-hint'?: string\n when_to_use?: string\n version?: string\n model?: string\n maxThinkingTokens?: number | string\n max_thinking_tokens?: number | string\n 'max-thinking-tokens'?: number | string\n name?: string\n 'disable-model-invocation'?: boolean | string\n runtime?: 'python' | 'node' | 'bash'\n 'execution-script'?: string\n dependencies?: string\n}\n\nexport interface CustomCommandWithScope {\n type: 'prompt'\n name: string\n description: string\n isEnabled: boolean\n isHidden: boolean\n aliases?: string[]\n progressMessage: string\n userFacingName(): string\n getPromptForCommand(args: string): Promise<MessageParam[]>\n allowedTools?: string[]\n maxThinkingTokens?: number\n argumentHint?: string\n whenToUse?: string\n version?: string\n model?: string\n isSkill?: boolean\n disableModelInvocation?: boolean\n hasUserSpecifiedDescription?: boolean\n source?: 'localSettings' | 'userSettings' | 'pluginDir'\n scope?: 'user' | 'project'\n filePath?: string\n runtime?: 'python' | 'node' | 'bash'\n executionScript?: string\n dependencies?: string\n}\n\nexport interface CustomCommandFile {\n frontmatter: CustomCommandFrontmatter\n content: string\n filePath: string\n}\n\nexport function parseFrontmatter(content: string): {\n frontmatter: CustomCommandFrontmatter\n content: string\n} {\n const yamlSchema = (yaml as any).JSON_SCHEMA\n const parsed = matter(content, {\n engines: {\n yaml: {\n parse: (input: string) =>\n yaml.load(input, yamlSchema ? { schema: yamlSchema } : undefined) ??\n {},\n },\n },\n })\n return {\n frontmatter: (parsed.data ?? {}) as CustomCommandFrontmatter,\n content: parsed.content ?? '',\n }\n}\n\ntype CommandSource = 'localSettings' | 'userSettings' | 'pluginDir'\n\nfunction isSkillMarkdownFile(filePath: string): boolean {\n return /^skill\\.md$/i.test(basename(filePath))\n}\n\nfunction getUserNewcrawBaseDir(): string {\n return getNewcrawBaseDir()\n}\n\nfunction toBoolean(value: unknown): boolean {\n if (typeof value === 'boolean') return value\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase()\n if (['1', 'true', 'yes', 'on'].includes(normalized)) return true\n if (['0', 'false', 'no', 'off'].includes(normalized)) return false\n }\n return false\n}\n\nfunction parseAllowedTools(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map(v => String(v).trim()).filter(Boolean)\n }\n if (typeof value === 'string') {\n const trimmed = value.trim()\n if (!trimmed) return []\n return trimmed\n .split(/\\s+/)\n .map(v => v.trim())\n .filter(Boolean)\n }\n return []\n}\n\nfunction parseMaxThinkingTokens(\n frontmatter: CustomCommandFrontmatter,\n): number | undefined {\n const raw =\n (frontmatter as any).maxThinkingTokens ??\n (frontmatter as any).max_thinking_tokens ??\n (frontmatter as any)['max-thinking-tokens'] ??\n (frontmatter as any)['max_thinking_tokens']\n if (raw === undefined || raw === null) return undefined\n const value = typeof raw === 'number' ? raw : Number(String(raw).trim())\n if (!Number.isFinite(value) || value < 0) return undefined\n return Math.floor(value)\n}\n\nfunction sourceLabel(source: CommandSource): string {\n if (source === 'localSettings') return 'project'\n if (source === 'userSettings') return 'user'\n if (source === 'pluginDir') return 'plugin'\n return 'unknown'\n}\n\nfunction extractDescriptionFromMarkdown(\n markdown: string,\n fallback: string,\n): string {\n const lines = markdown.split(/\\r?\\n/)\n for (const line of lines) {\n const trimmed = line.trim()\n if (!trimmed) continue\n const heading = trimmed.match(/^#{1,6}\\s+(.*)$/)\n if (heading?.[1]) return heading[1].trim()\n return trimmed.length > 120 ? `${trimmed.slice(0, 117)}...` : trimmed\n }\n return fallback\n}\n\nfunction namespaceFromDirPath(dirPath: string, baseDir: string): string {\n const relPath = relative(baseDir, dirPath)\n if (!relPath || relPath === '.' || relPath.startsWith('..')) return ''\n return relPath.split(sep).join(':')\n}\n\nfunction nameForCommandFile(filePath: string, baseDir: string): string {\n if (isSkillMarkdownFile(filePath)) {\n const skillDir = dirname(filePath)\n const parentDir = dirname(skillDir)\n const skillName = basename(skillDir)\n const namespace = namespaceFromDirPath(parentDir, baseDir)\n return namespace ? `${namespace}:${skillName}` : skillName\n }\n\n const dir = dirname(filePath)\n const namespace = namespaceFromDirPath(dir, baseDir)\n const fileName = basename(filePath).replace(/\\.md$/i, '')\n return namespace ? `${namespace}:${fileName}` : fileName\n}\n\ntype CommandFileRecord = {\n baseDir: string\n filePath: string\n frontmatter: CustomCommandFrontmatter\n content: string\n source: CommandSource\n scope: 'user' | 'project'\n}\n\nfunction buildPluginQualifiedName(\n pluginName: string,\n localName: string,\n): string {\n const p = pluginName.trim()\n const l = localName.trim()\n if (!p) return l\n if (!l || l === p) return p\n return `${p}:${l}`\n}\n\nfunction nameForPluginCommandFile(\n filePath: string,\n commandsDir: string,\n pluginName: string,\n): string {\n const rel = relative(commandsDir, filePath)\n const noExt = rel.replace(/\\.md$/i, '')\n const localName = noExt.split(sep).filter(Boolean).join(':')\n return buildPluginQualifiedName(pluginName, localName)\n}\n\nfunction createPluginPromptCommandFromFile(record: {\n pluginName: string\n commandsDir: string\n filePath: string\n frontmatter: CustomCommandFrontmatter\n content: string\n}): CustomCommandWithScope | null {\n const name = nameForPluginCommandFile(\n record.filePath,\n record.commandsDir,\n record.pluginName,\n )\n if (!name) return null\n\n const descriptionText =\n record.frontmatter.description ??\n extractDescriptionFromMarkdown(record.content, 'Custom command')\n const allowedTools = parseAllowedTools(record.frontmatter['allowed-tools'])\n const maxThinkingTokens = parseMaxThinkingTokens(record.frontmatter)\n const argumentHint = record.frontmatter['argument-hint']\n const whenToUse = record.frontmatter.when_to_use\n const version = record.frontmatter.version\n const disableModelInvocation = toBoolean(\n record.frontmatter['disable-model-invocation'],\n )\n const model =\n record.frontmatter.model === 'inherit'\n ? undefined\n : record.frontmatter.model\n\n return {\n type: 'prompt',\n name,\n description: `${descriptionText} (${sourceLabel('pluginDir')})`,\n isEnabled: true,\n isHidden: false,\n filePath: record.filePath,\n aliases: [],\n progressMessage: 'running',\n allowedTools,\n maxThinkingTokens,\n argumentHint,\n whenToUse,\n version,\n model,\n isSkill: false,\n disableModelInvocation,\n hasUserSpecifiedDescription: !!record.frontmatter.description,\n source: 'pluginDir',\n scope: 'project',\n userFacingName() {\n return name\n },\n async getPromptForCommand(args: string): Promise<MessageParam[]> {\n let prompt = record.content\n const trimmedArgs = args.trim()\n if (trimmedArgs) {\n if (prompt.includes('$ARGUMENTS')) {\n prompt = prompt.replaceAll('$ARGUMENTS', trimmedArgs)\n } else {\n prompt = `${prompt}\\n\\nARGUMENTS: ${trimmedArgs}`\n }\n }\n return [{ role: 'user', content: prompt }]\n },\n }\n}\n\nfunction loadPluginCommandsFromDir(args: {\n pluginName: string\n commandsDir: string\n signal: AbortSignal\n}): CustomCommandWithScope[] {\n let commandsBaseDir = args.commandsDir\n let files: string[] = []\n try {\n const st = statSync(args.commandsDir)\n if (st.isFile()) {\n if (!args.commandsDir.toLowerCase().endsWith('.md')) return []\n files = [args.commandsDir]\n commandsBaseDir = dirname(args.commandsDir)\n } else if (st.isDirectory()) {\n files = listMarkdownFilesRecursively(args.commandsDir, args.signal)\n } else {\n return []\n }\n } catch {\n return []\n }\n\n const out: CustomCommandWithScope[] = []\n for (const filePath of files) {\n if (args.signal.aborted) break\n try {\n const raw = readFileSync(filePath, 'utf8')\n const { frontmatter, content } = parseFrontmatter(raw)\n const cmd = createPluginPromptCommandFromFile({\n pluginName: args.pluginName,\n commandsDir: commandsBaseDir,\n filePath,\n frontmatter,\n content,\n })\n if (cmd) out.push(cmd)\n } catch {\n }\n }\n return out\n}\n\nfunction loadPluginSkillDirectoryCommandsFromBaseDir(args: {\n pluginName: string\n skillsDir: string\n}): CustomCommandWithScope[] {\n if (!existsSync(args.skillsDir)) return []\n\n const out: CustomCommandWithScope[] = []\n let entries\n try {\n entries = readdirSync(args.skillsDir, { withFileTypes: true })\n } catch {\n return []\n }\n\n const strictMode = toBoolean(process.env.NEWCRAW_SKILLS_STRICT)\n const validateName = (skillName: string): boolean => {\n if (skillName.length < 1 || skillName.length > 64) return false\n return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(skillName)\n }\n\n for (const entry of entries) {\n if (!entry.isDirectory() && !entry.isSymbolicLink()) continue\n const skillDir = join(args.skillsDir, entry.name)\n const skillFileCandidates = [\n join(skillDir, 'SKILL.md'),\n join(skillDir, 'skill.md'),\n ]\n const skillFile = skillFileCandidates.find(p => existsSync(p))\n if (!skillFile) continue\n\n try {\n const raw = readFileSync(skillFile, 'utf8')\n const { frontmatter, content } = parseFrontmatter(raw)\n\n const dirName = entry.name\n const declaredName =\n typeof (frontmatter as any).name === 'string'\n ? String((frontmatter as any).name).trim()\n : ''\n const effectiveDeclaredName =\n declaredName && declaredName === dirName ? declaredName : ''\n if (declaredName && declaredName !== dirName) {\n if (strictMode) continue\n debugLogger.warn('CUSTOM_COMMAND_SKILL_NAME_MISMATCH', {\n dirName,\n declaredName,\n skillFile,\n })\n }\n const name = buildPluginQualifiedName(args.pluginName, dirName)\n if (!validateName(dirName)) {\n if (strictMode) continue\n debugLogger.warn('CUSTOM_COMMAND_SKILL_DIR_INVALID', { dirName, skillFile })\n }\n const descriptionText =\n frontmatter.description ??\n extractDescriptionFromMarkdown(content, 'Skill')\n if (strictMode) {\n const d =\n typeof frontmatter.description === 'string'\n ? frontmatter.description.trim()\n : ''\n if (!d || d.length > 1024) continue\n }\n\n const allowedTools = parseAllowedTools(frontmatter['allowed-tools'])\n const maxThinkingTokens = parseMaxThinkingTokens(frontmatter as any)\n const argumentHint = frontmatter['argument-hint']\n const whenToUse = frontmatter.when_to_use\n const version = frontmatter.version\n const disableModelInvocation = toBoolean(\n frontmatter['disable-model-invocation'],\n )\n const model =\n frontmatter.model === 'inherit' ? undefined : frontmatter.model\n\n out.push({\n type: 'prompt',\n name,\n description: `${descriptionText} (${sourceLabel('pluginDir')})`,\n isEnabled: true,\n isHidden: true,\n aliases: [],\n filePath: skillFile,\n progressMessage: 'loading',\n allowedTools,\n maxThinkingTokens,\n argumentHint,\n whenToUse,\n version,\n model,\n isSkill: true,\n disableModelInvocation,\n hasUserSpecifiedDescription: !!frontmatter.description,\n source: 'pluginDir',\n scope: 'project',\n runtime: frontmatter.runtime,\n executionScript: frontmatter['execution-script'],\n dependencies: frontmatter.dependencies,\n userFacingName() {\n return effectiveDeclaredName\n ? buildPluginQualifiedName(args.pluginName, effectiveDeclaredName)\n : name\n },\n async getPromptForCommand(argsText: string): Promise<MessageParam[]> {\n let prompt = `Base directory for this skill: ${skillDir}\\n\\n${content}`\n const trimmedArgs = argsText.trim()\n if (trimmedArgs) {\n if (prompt.includes('$ARGUMENTS')) {\n prompt = prompt.replaceAll('$ARGUMENTS', trimmedArgs)\n } else {\n prompt = `${prompt}\\n\\nARGUMENTS: ${trimmedArgs}`\n }\n }\n return [{ role: 'user', content: prompt }]\n },\n })\n } catch {\n }\n }\n\n return out\n}\n\nfunction applySkillFilePreference(\n files: CommandFileRecord[],\n): CommandFileRecord[] {\n const grouped = new Map<string, CommandFileRecord[]>()\n for (const file of files) {\n const key = dirname(file.filePath)\n const existing = grouped.get(key) ?? []\n existing.push(file)\n grouped.set(key, existing)\n }\n\n const result: CommandFileRecord[] = []\n for (const group of grouped.values()) {\n const skillFiles = group.filter(f => isSkillMarkdownFile(f.filePath))\n if (skillFiles.length > 0) {\n result.push(skillFiles[0]!)\n continue\n }\n result.push(...group)\n }\n return result\n}\n\nfunction createPromptCommandFromFile(\n record: CommandFileRecord,\n): CustomCommandWithScope | null {\n const isSkill = isSkillMarkdownFile(record.filePath)\n const name = nameForCommandFile(record.filePath, record.baseDir)\n if (!name) return null\n\n const descriptionText =\n record.frontmatter.description ??\n extractDescriptionFromMarkdown(\n record.content,\n isSkill ? 'Skill' : 'Custom command',\n )\n\n const allowedTools = parseAllowedTools(record.frontmatter['allowed-tools'])\n const maxThinkingTokens = parseMaxThinkingTokens(record.frontmatter)\n const argumentHint = record.frontmatter['argument-hint']\n const whenToUse = record.frontmatter.when_to_use\n const version = record.frontmatter.version\n const disableModelInvocation = toBoolean(\n record.frontmatter['disable-model-invocation'],\n )\n const model =\n record.frontmatter.model === 'inherit'\n ? undefined\n : record.frontmatter.model\n\n const description = `${descriptionText} (${sourceLabel(record.source)})`\n const progressMessage = isSkill ? 'loading' : 'running'\n const skillBaseDir = isSkill ? dirname(record.filePath) : undefined\n\n return {\n type: 'prompt',\n name,\n description,\n isEnabled: true,\n isHidden: false,\n filePath: record.filePath,\n aliases: [],\n progressMessage,\n allowedTools,\n maxThinkingTokens,\n argumentHint,\n whenToUse,\n version,\n model,\n isSkill,\n disableModelInvocation,\n hasUserSpecifiedDescription: !!record.frontmatter.description,\n source: record.source,\n scope: record.scope,\n userFacingName() {\n return name\n },\n async getPromptForCommand(args: string): Promise<MessageParam[]> {\n let prompt = record.content\n if (isSkill && skillBaseDir) {\n prompt = `Base directory for this skill: ${skillBaseDir}\\n\\n${prompt}`\n }\n const trimmedArgs = args.trim()\n if (trimmedArgs) {\n if (prompt.includes('$ARGUMENTS')) {\n prompt = prompt.replaceAll('$ARGUMENTS', trimmedArgs)\n } else {\n prompt = `${prompt}\\n\\nARGUMENTS: ${trimmedArgs}`\n }\n }\n return [{ role: 'user', content: prompt }]\n },\n }\n}\n\nfunction listMarkdownFilesRecursively(\n baseDir: string,\n signal: AbortSignal,\n): string[] {\n const results: string[] = []\n const queue: string[] = [baseDir]\n while (queue.length > 0) {\n if (signal.aborted) break\n const currentDir = queue.pop()!\n let entries\n try {\n entries = readdirSync(currentDir, { withFileTypes: true })\n } catch {\n continue\n }\n for (const entry of entries) {\n if (signal.aborted) break\n const fullPath = join(currentDir, entry.name)\n if (entry.isDirectory()) {\n queue.push(fullPath)\n continue\n }\n if (entry.isFile() && entry.name.toLowerCase().endsWith('.md')) {\n results.push(fullPath)\n }\n }\n }\n return results\n}\n\nfunction loadCommandMarkdownFilesFromBaseDir(\n baseDir: string,\n source: CommandSource,\n scope: 'user' | 'project',\n signal: AbortSignal,\n): CommandFileRecord[] {\n if (!existsSync(baseDir)) return []\n const files = listMarkdownFilesRecursively(baseDir, signal)\n const records: CommandFileRecord[] = []\n for (const filePath of files) {\n if (signal.aborted) break\n try {\n const raw = readFileSync(filePath, 'utf8')\n const { frontmatter, content } = parseFrontmatter(raw)\n records.push({ baseDir, filePath, frontmatter, content, source, scope })\n } catch {\n }\n }\n return records\n}\n\nfunction loadSkillDirectoryCommandsFromBaseDir(\n skillsDir: string,\n source: CommandSource,\n scope: 'user' | 'project',\n): CustomCommandWithScope[] {\n if (!existsSync(skillsDir)) return []\n\n const out: CustomCommandWithScope[] = []\n let entries\n try {\n entries = readdirSync(skillsDir, { withFileTypes: true })\n } catch {\n return []\n }\n\n const strictMode = toBoolean(process.env.NEWCRAW_SKILLS_STRICT)\n const validateName = (skillName: string): boolean => {\n if (skillName.length < 1 || skillName.length > 64) return false\n return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(skillName)\n }\n\n for (const entry of entries) {\n if (!entry.isDirectory() && !entry.isSymbolicLink()) continue\n const skillDir = join(skillsDir, entry.name)\n const skillFileCandidates = [\n join(skillDir, 'SKILL.md'),\n join(skillDir, 'skill.md'),\n ]\n const skillFile = skillFileCandidates.find(p => existsSync(p))\n if (!skillFile) continue\n\n try {\n const raw = readFileSync(skillFile, 'utf8')\n const { frontmatter, content } = parseFrontmatter(raw)\n\n const dirName = entry.name\n const declaredName =\n typeof (frontmatter as any).name === 'string'\n ? String((frontmatter as any).name).trim()\n : ''\n const effectiveDeclaredName =\n declaredName && declaredName === dirName ? declaredName : ''\n if (declaredName && declaredName !== dirName) {\n if (strictMode) continue\n debugLogger.warn('CUSTOM_COMMAND_SKILL_NAME_MISMATCH', {\n dirName,\n declaredName,\n skillFile,\n })\n }\n const name = dirName\n if (!validateName(name)) {\n if (strictMode) continue\n debugLogger.warn('CUSTOM_COMMAND_SKILL_DIR_INVALID', { name, skillFile })\n }\n const descriptionText =\n frontmatter.description ??\n extractDescriptionFromMarkdown(content, 'Skill')\n if (strictMode) {\n const d =\n typeof frontmatter.description === 'string'\n ? frontmatter.description.trim()\n : ''\n if (!d || d.length > 1024) continue\n }\n\n const allowedTools = parseAllowedTools(frontmatter['allowed-tools'])\n const maxThinkingTokens = parseMaxThinkingTokens(frontmatter as any)\n const argumentHint = frontmatter['argument-hint']\n const whenToUse = frontmatter.when_to_use\n const version = frontmatter.version\n const disableModelInvocation = toBoolean(\n frontmatter['disable-model-invocation'],\n )\n const model =\n frontmatter.model === 'inherit' ? undefined : frontmatter.model\n\n out.push({\n type: 'prompt',\n name,\n description: `${descriptionText} (${sourceLabel(source)})`,\n isEnabled: true,\n isHidden: true,\n aliases: [],\n filePath: skillFile,\n progressMessage: 'loading',\n allowedTools,\n maxThinkingTokens,\n argumentHint,\n whenToUse,\n version,\n model,\n isSkill: true,\n disableModelInvocation,\n hasUserSpecifiedDescription: !!frontmatter.description,\n source,\n scope,\n runtime: frontmatter.runtime,\n executionScript: frontmatter['execution-script'],\n dependencies: frontmatter.dependencies,\n userFacingName() {\n return effectiveDeclaredName || name\n },\n async getPromptForCommand(args: string): Promise<MessageParam[]> {\n let prompt = `Base directory for this skill: ${skillDir}\\n\\n${content}`\n const trimmedArgs = args.trim()\n if (trimmedArgs) {\n if (prompt.includes('$ARGUMENTS')) {\n prompt = prompt.replaceAll('$ARGUMENTS', trimmedArgs)\n } else {\n prompt = `${prompt}\\n\\nARGUMENTS: ${trimmedArgs}`\n }\n }\n return [{ role: 'user', content: prompt }]\n },\n })\n } catch {\n }\n }\n\n return out\n}\n\nexport const loadCustomCommands = memoize(\n async (): Promise<CustomCommandWithScope[]> => {\n const cwd = getCwd()\n const userBaseDir = getUserNewcrawBaseDir()\n const sessionPlugins = getSessionPlugins()\n\n const projectCommandsDir = join(cwd, '.newcraw', 'commands')\n const userCommandsDir = join(userBaseDir, 'commands')\n\n const projectSkillsDir = join(cwd, '.newcraw', 'skills')\n const userSkillsDir = join(userBaseDir, 'skills')\n\n const abortController = new AbortController()\n const timeout = setTimeout(() => abortController.abort(), 3000)\n\n try {\n const commandFiles = applySkillFilePreference([\n ...loadCommandMarkdownFilesFromBaseDir(\n projectCommandsDir,\n 'localSettings',\n 'project',\n abortController.signal,\n ),\n ...loadCommandMarkdownFilesFromBaseDir(\n userCommandsDir,\n 'userSettings',\n 'user',\n abortController.signal,\n ),\n ])\n\n const fileCommands = commandFiles\n .map(createPromptCommandFromFile)\n .filter((cmd): cmd is CustomCommandWithScope => cmd !== null)\n\n const skillDirCommands: CustomCommandWithScope[] = [\n ...loadSkillDirectoryCommandsFromBaseDir(\n projectSkillsDir,\n 'localSettings',\n 'project',\n ),\n ...loadSkillDirectoryCommandsFromBaseDir(\n userSkillsDir,\n 'userSettings',\n 'user',\n ),\n ]\n\n const pluginCommands: CustomCommandWithScope[] = []\n if (sessionPlugins.length > 0) {\n for (const plugin of sessionPlugins) {\n for (const commandsDir of plugin.commandsDirs) {\n pluginCommands.push(\n ...loadPluginCommandsFromDir({\n pluginName: plugin.name,\n commandsDir,\n signal: abortController.signal,\n }),\n )\n }\n for (const skillsDir of plugin.skillsDirs) {\n pluginCommands.push(\n ...loadPluginSkillDirectoryCommandsFromBaseDir({\n pluginName: plugin.name,\n skillsDir,\n }),\n )\n }\n }\n }\n\n const ordered = [\n ...fileCommands,\n ...skillDirCommands,\n ...pluginCommands,\n ].filter(cmd => cmd.isEnabled)\n\n const seen = new Set<string>()\n const unique: CustomCommandWithScope[] = []\n for (const cmd of ordered) {\n const key = cmd.userFacingName()\n if (seen.has(key)) continue\n seen.add(key)\n unique.push(cmd)\n }\n\n return unique\n } catch (error) {\n logError(error)\n debugLogger.warn('CUSTOM_COMMANDS_LOAD_FAILED', {\n error: error instanceof Error ? error.message : String(error),\n })\n return []\n } finally {\n clearTimeout(timeout)\n }\n },\n () => {\n const cwd = getCwd()\n const userBaseDir = getUserNewcrawBaseDir()\n const dirs = [\n join(userBaseDir, 'commands'),\n join(cwd, '.newcraw', 'commands'),\n join(userBaseDir, 'skills'),\n join(cwd, '.newcraw', 'skills'),\n ]\n const exists = dirs.map(d => (existsSync(d) ? '1' : '0')).join('')\n return `${cwd}:${exists}:${Math.floor(Date.now() / 60000)}`\n },\n)\n\nexport const reloadCustomCommands = (): void => {\n loadCustomCommands.cache.clear()\n}\n\nexport function getCustomCommandDirectories(): {\n userCommands: string\n projectCommands: string\n userSkills: string\n projectSkills: string\n} {\n const userBaseDir = getUserNewcrawBaseDir()\n return {\n userCommands: join(userBaseDir, 'commands'),\n projectCommands: join(getCwd(), '.newcraw', 'commands'),\n userSkills: join(userBaseDir, 'skills'),\n projectSkills: join(getCwd(), '.newcraw', 'skills'),\n }\n}\n\nexport function hasCustomCommands(): boolean {\n const dirs = getCustomCommandDirectories()\n return (\n existsSync(dirs.userCommands) ||\n existsSync(dirs.projectCommands) ||\n existsSync(dirs.userSkills) ||\n existsSync(dirs.projectSkills)\n )\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["namespace"]
7
+ }
@@ -4,20 +4,31 @@ import {
4
4
  getCurrentProjectConfig,
5
5
  getGlobalConfig,
6
6
  getOrCreateUserID,
7
+ init_config,
7
8
  saveCurrentProjectConfig
8
- } from "./chunk-IIFUDVGS.js";
9
+ } from "./chunk-ENLHVQCX.js";
9
10
  import {
10
11
  SESSION_ID,
11
12
  env,
12
13
  execFileNoThrow,
13
14
  getCwd,
15
+ init_env,
16
+ init_execFileNoThrow,
17
+ init_log,
18
+ init_state,
14
19
  logError
15
- } from "./chunk-IM33F5CM.js";
20
+ } from "./chunk-BMJ5XGFR.js";
16
21
  import {
17
- MACRO
18
- } from "./chunk-ZYSVG4X3.js";
22
+ MACRO,
23
+ init_macros
24
+ } from "./chunk-NW7WSLD5.js";
25
+
26
+ // src/context/index.ts
27
+ init_config();
28
+ init_log();
19
29
 
20
30
  // src/utils/config/style.ts
31
+ init_state();
21
32
  import { readFileSync as readFileSync2 } from "fs";
22
33
  import { memoize } from "lodash-es";
23
34
 
@@ -181,9 +192,11 @@ ${styles.join("\n\n")}`;
181
192
  });
182
193
 
183
194
  // src/context/index.ts
195
+ init_state();
184
196
  import { memoize as memoize4, omit } from "lodash-es";
185
197
 
186
198
  // src/utils/system/git.ts
199
+ init_execFileNoThrow();
187
200
  import { memoize as memoize2 } from "lodash-es";
188
201
  var getIsGit = memoize2(async () => {
189
202
  const { code } = await execFileNoThrow("git", [
@@ -258,11 +271,17 @@ async function getGitState() {
258
271
  }
259
272
 
260
273
  // src/context/index.ts
274
+ init_execFileNoThrow();
261
275
  import { join as join2 } from "path";
262
276
  import { readFile } from "fs/promises";
263
277
  import { existsSync as existsSync2, readdirSync } from "fs";
264
278
 
265
279
  // src/utils/identity/user.ts
280
+ init_config();
281
+ init_env();
282
+ init_execFileNoThrow();
283
+ init_log();
284
+ init_macros();
266
285
  import { memoize as memoize3 } from "lodash-es";
267
286
  var getGitEmail = memoize3(async () => {
268
287
  const result = await execFileNoThrow("git", ["config", "user.email"]);
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/context/index.ts", "../src/utils/config/style.ts", "../src/utils/config/projectInstructions.ts", "../src/utils/system/git.ts", "../src/utils/identity/user.ts"],
4
+ "sourcesContent": ["import {\r\n getCurrentProjectConfig,\r\n saveCurrentProjectConfig,\r\n} from '@utils/config'\r\nimport { logError } from '@utils/log'\r\nimport { getCodeStyle } from '@utils/config/style'\r\nimport { getCwd } from '@utils/state'\r\nimport { memoize, omit } from 'lodash-es'\r\nimport { getIsGit } from '@utils/system/git'\r\nimport { execFileNoThrow } from '@utils/system/execFileNoThrow'\r\nimport { join } from 'path'\r\nimport { readFile } from 'fs/promises'\r\nimport { existsSync, readdirSync } from 'fs'\r\nimport { getModelManager } from '@utils/model'\r\nimport { lastX } from '@utils/text/generators'\r\nimport { getGitEmail } from '@utils/identity/user'\r\nimport {\r\n getProjectInstructionFiles,\r\n readAndConcatProjectInstructionFiles,\r\n} from '@utils/config/projectInstructions'\r\nexport async function getInstructionFilesNote(): Promise<string | null> {\r\n try {\r\n const cwd = getCwd()\r\n const instructionFiles = getProjectInstructionFiles(cwd)\r\n const legacyPath = join(cwd, 'CLAUDE.md')\r\n const hasLegacy = existsSync(legacyPath)\r\n\r\n if (instructionFiles.length === 0 && !hasLegacy) {\r\n return null\r\n }\r\n\r\n const fileTypes = new Set<string>()\r\n for (const f of instructionFiles) fileTypes.add(f.filename)\r\n if (hasLegacy) fileTypes.add('CLAUDE.md (legacy)')\r\n\r\n const allFiles = [\r\n ...instructionFiles.map(f => f.absolutePath),\r\n ...(hasLegacy ? [legacyPath] : []),\r\n ]\r\n\r\n return `NOTE: Additional project instruction files (${Array.from(fileTypes).join(', ')}) were found. When working in these directories, make sure to read and follow the instructions in the corresponding files:\\n${allFiles\r\n .map(_ => `- ${_}`)\r\n .join('\\n')}`\r\n } catch (error) {\r\n logError(error)\r\n return null\r\n }\r\n}\r\n\r\nexport function setContext(key: string, value: string): void {\r\n const projectConfig = getCurrentProjectConfig()\r\n const context = omit(\r\n { ...projectConfig.context, [key]: value },\r\n 'codeStyle',\r\n 'directoryStructure',\r\n )\r\n saveCurrentProjectConfig({ ...projectConfig, context })\r\n}\r\n\r\nexport function removeContext(key: string): void {\r\n const projectConfig = getCurrentProjectConfig()\r\n const context = omit(\r\n projectConfig.context,\r\n key,\r\n 'codeStyle',\r\n 'directoryStructure',\r\n )\r\n saveCurrentProjectConfig({ ...projectConfig, context })\r\n}\r\n\r\nexport const getReadme = memoize(async (): Promise<string | null> => {\r\n try {\r\n const readmePath = join(getCwd(), 'README.md')\r\n if (!existsSync(readmePath)) {\r\n return null\r\n }\r\n const content = await readFile(readmePath, 'utf-8')\r\n return content\r\n } catch (e) {\r\n logError(e)\r\n return null\r\n }\r\n})\r\n\r\nexport async function getProjectDocsForCwd(\r\n cwd: string,\r\n): Promise<string | null> {\r\n try {\r\n const instructionFiles = getProjectInstructionFiles(cwd)\r\n const legacyPath = join(cwd, 'CLAUDE.md')\r\n\r\n const docs = []\r\n\r\n if (instructionFiles.length > 0) {\r\n const { content } = readAndConcatProjectInstructionFiles(\r\n instructionFiles,\r\n { includeHeadings: true },\r\n )\r\n if (content.trim().length > 0) docs.push(content)\r\n }\r\n\r\n if (existsSync(legacyPath)) {\r\n try {\r\n const content = await readFile(legacyPath, 'utf-8')\r\n docs.push(\r\n `# Legacy instructions (CLAUDE.md)\\n\\n${content}`,\r\n )\r\n } catch (e) {\r\n logError(e)\r\n }\r\n }\r\n\r\n return docs.length > 0 ? docs.join('\\n\\n---\\n\\n') : null\r\n } catch (e) {\r\n logError(e)\r\n return null\r\n }\r\n}\r\n\r\nexport const getProjectDocs = memoize(async (): Promise<string | null> => {\r\n return getProjectDocsForCwd(getCwd())\r\n})\r\n\r\nexport const getGitStatus = memoize(async (): Promise<string | null> => {\r\n if (process.env.NODE_ENV === 'test') {\r\n return null\r\n }\r\n if (!(await getIsGit())) {\r\n return null\r\n }\r\n\r\n try {\r\n const [branch, mainBranch, status, log, authorLog] = await Promise.all([\r\n execFileNoThrow(\r\n 'git',\r\n ['branch', '--show-current'],\r\n undefined,\r\n undefined,\r\n false,\r\n ).then(({ stdout }) => stdout.trim()),\r\n execFileNoThrow(\r\n 'git',\r\n ['rev-parse', '--abbrev-ref', 'origin/HEAD'],\r\n undefined,\r\n undefined,\r\n false,\r\n ).then(({ stdout }) => stdout.replace('origin/', '').trim()),\r\n execFileNoThrow(\r\n 'git',\r\n ['status', '--short'],\r\n undefined,\r\n undefined,\r\n false,\r\n ).then(({ stdout }) => stdout.trim()),\r\n execFileNoThrow(\r\n 'git',\r\n ['log', '--oneline', '-n', '5'],\r\n undefined,\r\n undefined,\r\n false,\r\n ).then(({ stdout }) => stdout.trim()),\r\n execFileNoThrow(\r\n 'git',\r\n [\r\n 'log',\r\n '--oneline',\r\n '-n',\r\n '5',\r\n '--author',\r\n (await getGitEmail()) || '',\r\n ],\r\n undefined,\r\n undefined,\r\n false,\r\n ).then(({ stdout }) => stdout.trim()),\r\n ])\r\n const statusLines = status.split('\\n').length\r\n const truncatedStatus =\r\n statusLines > 200\r\n ? status.split('\\n').slice(0, 200).join('\\n') +\r\n '\\n... (truncated because there are more than 200 lines. If you need more information, run \"git status\" using BashTool)'\r\n : status\r\n\r\n return `This is the git status at the start of the conversation. Note that this status is a snapshot in time, and will not update during the conversation.\\nCurrent branch: ${branch}\\n\\nMain branch (you will usually use this for PRs): ${mainBranch}\\n\\nStatus:\\n${truncatedStatus || '(clean)'}\\n\\nRecent commits:\\n${log}\\n\\nYour recent commits:\\n${authorLog || '(no recent commits)'}`\r\n } catch (error) {\r\n logError(error)\r\n return null\r\n }\r\n})\r\n\r\nexport const getContext = memoize(\r\n async (): Promise<{\r\n [k: string]: string\r\n }> => {\r\n const codeStyle = getCodeStyle()\r\n const projectConfig = getCurrentProjectConfig()\r\n const dontCrawl = projectConfig.dontCrawlDirectory\r\n const [\r\n gitStatus,\r\n directoryStructure,\r\n instructionFilesNote,\r\n readme,\r\n projectDocs,\r\n ] = await Promise.all([\r\n getGitStatus(),\r\n dontCrawl ? Promise.resolve('') : getDirectoryStructure(),\r\n dontCrawl ? Promise.resolve('') : getInstructionFilesNote(),\r\n getReadme(),\r\n getProjectDocs(),\r\n ])\r\n return {\r\n ...projectConfig.context,\r\n ...(directoryStructure ? { directoryStructure } : {}),\r\n ...(gitStatus ? { gitStatus } : {}),\r\n ...(codeStyle ? { codeStyle } : {}),\r\n ...(instructionFilesNote ? { instructionFilesNote } : {}),\r\n ...(readme ? { readme } : {}),\r\n ...(projectDocs ? { projectDocs } : {}),\r\n }\r\n },\r\n)\r\n\r\nexport const getDirectoryStructure = memoize(\r\n async function (): Promise<string> {\r\n let lines: string\r\n try {\r\n const entries = readdirSync(getCwd(), { withFileTypes: true })\r\n lines = entries\r\n .map(entry => `${entry.isDirectory() ? 'd' : 'f'} ${entry.name}`)\r\n .join('\\n')\r\n } catch (error) {\r\n logError(error)\r\n return ''\r\n }\r\n\r\n return `Below is a snapshot of this project's file structure at the start of the conversation. This snapshot will NOT update during the conversation.\r\n\r\n${lines}`\r\n },\r\n)\r\n", "import { readFileSync } from 'fs'\r\nimport { memoize } from 'lodash-es'\r\nimport { getCwd } from '@utils/state'\r\nimport { getProjectInstructionFiles } from './projectInstructions'\r\n\r\nconst STYLE_PROMPT =\r\n 'The codebase follows strict style guidelines shown below. All code changes must strictly adhere to these guidelines to maintain consistency and quality.'\r\n\r\nexport const getCodeStyle = memoize((): string => {\r\n const styles: string[] = []\r\n\r\n const instructionFiles = getProjectInstructionFiles(getCwd())\r\n for (const file of instructionFiles) {\r\n try {\r\n styles.push(\r\n `Contents of ${file.absolutePath}:\\n\\n${readFileSync(file.absolutePath, 'utf-8')}`,\r\n )\r\n } catch {\r\n }\r\n }\r\n\r\n if (styles.length === 0) {\r\n return ''\r\n }\r\n\r\n return `${STYLE_PROMPT}\\n\\n${styles.join('\\n\\n')}`\r\n})\r\n", "import { existsSync, readFileSync } from 'fs'\r\nimport { dirname, join, parse, relative, resolve, sep } from 'path'\r\n\r\nexport type ProjectInstructionFile = {\r\n absolutePath: string\r\n relativePathFromGitRoot: string\r\n filename: 'AGENTS.override.md' | 'AGENTS.md'\r\n}\r\n\r\nconst DEFAULT_PROJECT_DOC_MAX_BYTES = 32 * 1024\r\n\r\nfunction isRegularFile(path: string): boolean {\r\n try {\r\n return existsSync(path)\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport function findGitRoot(startDir: string): string | null {\r\n let currentDir = resolve(startDir)\r\n const fsRoot = parse(currentDir).root\r\n\r\n while (true) {\r\n const dotGitPath = join(currentDir, '.git')\r\n if (existsSync(dotGitPath)) {\r\n return currentDir\r\n }\r\n if (currentDir === fsRoot) {\r\n return null\r\n }\r\n currentDir = dirname(currentDir)\r\n }\r\n}\r\n\r\nfunction getDirsFromGitRootToCwd(gitRoot: string, cwd: string): string[] {\r\n const absoluteGitRoot = resolve(gitRoot)\r\n const absoluteCwd = resolve(cwd)\r\n\r\n const rel = relative(absoluteGitRoot, absoluteCwd)\r\n if (!rel || rel === '.') {\r\n return [absoluteGitRoot]\r\n }\r\n\r\n const parts = rel.split(sep).filter(Boolean)\r\n const dirs: string[] = [absoluteGitRoot]\r\n for (let i = 0; i < parts.length; i++) {\r\n dirs.push(join(absoluteGitRoot, ...parts.slice(0, i + 1)))\r\n }\r\n return dirs\r\n}\r\n\r\nexport function getProjectInstructionFiles(\r\n cwd: string,\r\n): ProjectInstructionFile[] {\r\n const gitRoot = findGitRoot(cwd)\r\n const root = gitRoot ?? resolve(cwd)\r\n const dirs = getDirsFromGitRootToCwd(root, cwd)\r\n\r\n const results: ProjectInstructionFile[] = []\r\n for (const dir of dirs) {\r\n const overridePath = join(dir, 'AGENTS.override.md')\r\n const agentsPath = join(dir, 'AGENTS.md')\r\n\r\n if (isRegularFile(overridePath)) {\r\n results.push({\r\n absolutePath: overridePath,\r\n relativePathFromGitRoot:\r\n relative(root, overridePath) || 'AGENTS.override.md',\r\n filename: 'AGENTS.override.md',\r\n })\r\n continue\r\n }\r\n\r\n if (isRegularFile(agentsPath)) {\r\n results.push({\r\n absolutePath: agentsPath,\r\n relativePathFromGitRoot: relative(root, agentsPath) || 'AGENTS.md',\r\n filename: 'AGENTS.md',\r\n })\r\n }\r\n }\r\n\r\n return results\r\n}\r\n\r\nexport function getProjectDocMaxBytes(): number {\r\n const raw = process.env.NEWCRAW_PROJECT_DOC_MAX_BYTES\r\n if (!raw) return DEFAULT_PROJECT_DOC_MAX_BYTES\r\n const parsed = Number.parseInt(raw, 10)\r\n if (!Number.isFinite(parsed) || parsed <= 0)\r\n return DEFAULT_PROJECT_DOC_MAX_BYTES\r\n return parsed\r\n}\r\n\r\nexport function readAndConcatProjectInstructionFiles(\r\n files: ProjectInstructionFile[],\r\n {\r\n maxBytes = getProjectDocMaxBytes(),\r\n includeHeadings = true,\r\n }: { maxBytes?: number; includeHeadings?: boolean } = {},\r\n): { content: string; truncated: boolean } {\r\n let totalBytes = 0\r\n let truncated = false\r\n\r\n const parts: string[] = []\r\n\r\n const truncateUtf8ToBytes = (value: string, bytes: number): string => {\r\n const buf = Buffer.from(value, 'utf8')\r\n if (buf.length <= bytes) return value\r\n return buf.subarray(0, Math.max(0, bytes)).toString('utf8')\r\n }\r\n\r\n for (const file of files) {\r\n if (totalBytes >= maxBytes) {\r\n truncated = true\r\n break\r\n }\r\n\r\n let raw: string\r\n try {\r\n raw = readFileSync(file.absolutePath, 'utf-8')\r\n } catch {\r\n continue\r\n }\r\n\r\n if (!raw.trim()) continue\r\n\r\n const separator = parts.length > 0 ? '\\n\\n' : ''\r\n const separatorBytes = Buffer.byteLength(separator, 'utf8')\r\n const remainingAfterSeparator = maxBytes - totalBytes - separatorBytes\r\n if (remainingAfterSeparator <= 0) {\r\n truncated = true\r\n break\r\n }\r\n\r\n const heading = includeHeadings\r\n ? `# ${file.filename}\\n\\n_Path: ${file.relativePathFromGitRoot}_\\n\\n`\r\n : ''\r\n\r\n const block = `${heading}${raw}`.trimEnd()\r\n const blockBytes = Buffer.byteLength(block, 'utf8')\r\n\r\n if (blockBytes <= remainingAfterSeparator) {\r\n parts.push(`${separator}${block}`)\r\n totalBytes += separatorBytes + blockBytes\r\n continue\r\n }\r\n\r\n truncated = true\r\n const suffix = `\\n\\n... (truncated: project instruction files exceeded ${maxBytes} bytes)`\r\n const suffixBytes = Buffer.byteLength(suffix, 'utf8')\r\n\r\n let finalBlock = ''\r\n if (suffixBytes >= remainingAfterSeparator) {\r\n finalBlock = truncateUtf8ToBytes(suffix, remainingAfterSeparator)\r\n } else {\r\n const prefixBudget = remainingAfterSeparator - suffixBytes\r\n const prefix = truncateUtf8ToBytes(block, prefixBudget)\r\n finalBlock = `${prefix}${suffix}`\r\n }\r\n\r\n parts.push(`${separator}${finalBlock}`)\r\n totalBytes += separatorBytes + Buffer.byteLength(finalBlock, 'utf8')\r\n break\r\n }\r\n\r\n return { content: parts.join(''), truncated }\r\n}\r\n", "import { memoize } from 'lodash-es'\r\nimport { execFileNoThrow } from './execFileNoThrow'\r\n\r\nexport const getIsGit = memoize(async (): Promise<boolean> => {\r\n const { code } = await execFileNoThrow('git', [\r\n 'rev-parse',\r\n '--is-inside-work-tree',\r\n ])\r\n return code === 0\r\n})\r\n\r\nexport const getHead = async (): Promise<string> => {\r\n const { stdout } = await execFileNoThrow('git', ['rev-parse', 'HEAD'])\r\n return stdout.trim()\r\n}\r\n\r\nexport const getBranch = async (): Promise<string> => {\r\n const { stdout } = await execFileNoThrow(\r\n 'git',\r\n ['rev-parse', '--abbrev-ref', 'HEAD'],\r\n undefined,\r\n undefined,\r\n false,\r\n )\r\n return stdout.trim()\r\n}\r\n\r\nexport const getRemoteUrl = async (): Promise<string | null> => {\r\n const { stdout, code } = await execFileNoThrow(\r\n 'git',\r\n ['remote', 'get-url', 'origin'],\r\n undefined,\r\n undefined,\r\n false,\r\n )\r\n return code === 0 ? stdout.trim() : null\r\n}\r\n\r\nexport const getIsHeadOnRemote = async (): Promise<boolean> => {\r\n const { code } = await execFileNoThrow(\r\n 'git',\r\n ['rev-parse', '@{u}'],\r\n undefined,\r\n undefined,\r\n false,\r\n )\r\n return code === 0\r\n}\r\n\r\nexport const getIsClean = async (): Promise<boolean> => {\r\n const { stdout } = await execFileNoThrow(\r\n 'git',\r\n ['status', '--porcelain'],\r\n undefined,\r\n undefined,\r\n false,\r\n )\r\n return stdout.trim().length === 0\r\n}\r\n\r\nexport interface GitRepoState {\r\n commitHash: string\r\n branchName: string\r\n remoteUrl: string | null\r\n isHeadOnRemote: boolean\r\n isClean: boolean\r\n}\r\n\r\nexport async function getGitState(): Promise<GitRepoState | null> {\r\n try {\r\n const [commitHash, branchName, remoteUrl, isHeadOnRemote, isClean] =\r\n await Promise.all([\r\n getHead(),\r\n getBranch(),\r\n getRemoteUrl(),\r\n getIsHeadOnRemote(),\r\n getIsClean(),\r\n ])\r\n\r\n return {\r\n commitHash,\r\n branchName,\r\n remoteUrl,\r\n isHeadOnRemote,\r\n isClean,\r\n }\r\n } catch (_) {\r\n return null\r\n }\r\n}\r\n", "import { getGlobalConfig, getOrCreateUserID } from '@utils/config'\r\nimport { memoize } from 'lodash-es'\r\nimport { env } from '@utils/config/env'\r\nimport { execFileNoThrow } from '@utils/system/execFileNoThrow'\r\nimport { logError, SESSION_ID } from '@utils/log'\r\nimport { MACRO } from '@constants/macros'\r\nexport const getGitEmail = memoize(async (): Promise<string | undefined> => {\r\n const result = await execFileNoThrow('git', ['config', 'user.email'])\r\n if (result.code !== 0) {\r\n logError(`Failed to get git email: ${result.stdout} ${result.stderr}`)\r\n return undefined\r\n }\r\n return result.stdout.trim() || undefined\r\n})\r\n\r\ntype SimpleUser = {\r\n customIDs?: Record<string, string>\r\n userID: string\r\n appVersion?: string\r\n userAgent?: string\r\n email?: string\r\n custom?: Record<string, unknown>\r\n}\r\n\r\nexport const getUser = memoize(async (): Promise<SimpleUser> => {\r\n const userID = getOrCreateUserID()\r\n const config = getGlobalConfig()\r\n const email = undefined\r\n return {\r\n customIDs: {\r\n sessionId: SESSION_ID,\r\n },\r\n userID,\r\n appVersion: MACRO.VERSION,\r\n userAgent: env.platform,\r\n email,\r\n custom: {\r\n nodeVersion: env.nodeVersion,\r\n userType: process.env.USER_TYPE,\r\n organizationUuid: config.oauthAccount?.organizationUuid,\r\n accountUuid: config.oauthAccount?.accountUuid,\r\n },\r\n }\r\n})\r\n"],
5
+ "mappings": "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",
6
+ "names": ["readFileSync", "readFileSync", "memoize", "memoize", "join", "existsSync", "memoize", "join", "existsSync", "memoize"]
7
+ }