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
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/services/sandbox/types.ts", "../src/services/sandbox/runtimeImages.ts", "../src/services/sandbox/podmanEngine.ts", "../src/services/sandbox/containerLifecycle.ts", "../src/services/sandbox/containerPool.ts", "../src/services/sandbox/skillExecutor.ts", "../src/services/sandbox/index.ts"],
4
+ "sourcesContent": ["export type ContainerRuntime = 'python' | 'node' | 'bash' | 'custom'\r\n\r\nexport type ContainerStatus =\r\n | 'creating'\r\n | 'ready'\r\n | 'running'\r\n | 'stopped'\r\n | 'error'\r\n | 'destroyed'\r\n\r\nexport interface ContainerConfig {\r\n runtime: ContainerRuntime\r\n image?: string\r\n workDir?: string\r\n mountPaths?: MountPath[]\r\n env?: Record<string, string>\r\n networkEnabled?: boolean\r\n timeoutMs?: number\r\n memoryLimitMb?: number\r\n cpuLimit?: number\r\n}\r\n\r\nexport interface MountPath {\r\n hostPath: string\r\n containerPath: string\r\n readOnly?: boolean\r\n}\r\n\r\nexport interface ContainerInfo {\r\n id: string\r\n name: string\r\n image: string\r\n status: ContainerStatus\r\n runtime: ContainerRuntime\r\n createdAt: number\r\n lastUsedAt: number\r\n}\r\n\r\nexport interface ExecOptions {\r\n command: string[]\r\n cwd?: string\r\n env?: Record<string, string>\r\n timeoutMs?: number\r\n stdin?: string\r\n}\r\n\r\nexport interface ExecResult {\r\n stdout: string\r\n stderr: string\r\n exitCode: number\r\n durationMs: number\r\n timedOut: boolean\r\n}\r\n\r\nexport interface SandboxEngineCapabilities {\r\n name: string\r\n available: boolean\r\n rootless: boolean\r\n version?: string\r\n}\r\n\r\nexport interface RuntimeImageSpec {\r\n runtime: ContainerRuntime\r\n image: string\r\n tag: string\r\n fullName: string\r\n preInstallCommands?: string[]\r\n}\r\n\r\nexport type SandboxEngineType = 'podman' | 'docker' | 'bwrap' | 'none'\r\n\r\nexport interface SandboxEngineConfig {\r\n engine: SandboxEngineType\r\n fallbackEngine?: SandboxEngineType\r\n poolSize: number\r\n poolIdleTimeoutMs: number\r\n defaultTimeoutMs: number\r\n defaultMemoryLimitMb: number\r\n defaultCpuLimit: number\r\n networkEnabled: boolean\r\n}\r\n\r\nexport const DEFAULT_SANDBOX_CONFIG: SandboxEngineConfig = {\r\n engine: 'podman',\r\n fallbackEngine: 'docker',\r\n poolSize: 2,\r\n poolIdleTimeoutMs: 300_000,\r\n defaultTimeoutMs: 60_000,\r\n defaultMemoryLimitMb: 512,\r\n defaultCpuLimit: 1,\r\n networkEnabled: false,\r\n}\r\n", "import type { ContainerRuntime, RuntimeImageSpec } from './types'\r\n\r\nconst RUNTIME_IMAGES: Record<ContainerRuntime, RuntimeImageSpec> = {\r\n python: {\r\n runtime: 'python',\r\n image: 'python',\r\n tag: '3.11-alpine',\r\n fullName: 'python:3.11-alpine',\r\n preInstallCommands: ['pip install --no-cache-dir --upgrade pip'],\r\n },\r\n node: {\r\n runtime: 'node',\r\n image: 'node',\r\n tag: '20-alpine',\r\n fullName: 'node:20-alpine',\r\n },\r\n bash: {\r\n runtime: 'bash',\r\n image: 'alpine',\r\n tag: '3.19',\r\n fullName: 'alpine:3.19',\r\n preInstallCommands: ['apk add --no-cache bash curl jq'],\r\n },\r\n custom: {\r\n runtime: 'custom',\r\n image: 'alpine',\r\n tag: '3.19',\r\n fullName: 'alpine:3.19',\r\n },\r\n}\r\n\r\nexport function getRuntimeImage(runtime: ContainerRuntime): RuntimeImageSpec {\r\n return RUNTIME_IMAGES[runtime]\r\n}\r\n\r\nexport function getImageFullName(runtime: ContainerRuntime): string {\r\n return RUNTIME_IMAGES[runtime].fullName\r\n}\r\n\r\nexport function getAllRuntimeImages(): RuntimeImageSpec[] {\r\n return Object.values(RUNTIME_IMAGES)\r\n}\r\n\r\nexport function resolveImage(\r\n runtime: ContainerRuntime,\r\n customImage?: string,\r\n): string {\r\n if (customImage) return customImage\r\n return getImageFullName(runtime)\r\n}\r\n", "import { spawn } from 'child_process'\r\nimport { randomUUID } from 'crypto'\r\nimport which from 'which'\r\nimport { logError } from '@utils/log'\r\nimport type {\r\n ContainerConfig,\r\n ContainerInfo,\r\n ContainerStatus,\r\n ExecOptions,\r\n ExecResult,\r\n MountPath,\r\n SandboxEngineCapabilities,\r\n SandboxEngineType,\r\n} from './types'\r\nimport { resolveImage } from './runtimeImages'\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\nlet detectedEngine: SandboxEngineType | null = null\r\nlet detectedBinary: string | null = null\r\n\r\nexport async function detectContainerEngine(): Promise<SandboxEngineCapabilities> {\r\n for (const engine of ['podman', 'docker'] as const) {\r\n const binary = whichSync(engine)\r\n if (!binary) continue\r\n\r\n try {\r\n const version = await execSimple([binary, '--version'])\r\n const rootless =\r\n engine === 'podman'\r\n ? await checkPodmanRootless(binary)\r\n : false\r\n\r\n detectedEngine = engine\r\n detectedBinary = binary\r\n\r\n return {\r\n name: engine,\r\n available: true,\r\n rootless,\r\n version: version.trim(),\r\n }\r\n } catch {\r\n continue\r\n }\r\n }\r\n\r\n detectedEngine = 'none'\r\n detectedBinary = null\r\n return { name: 'none', available: false, rootless: false }\r\n}\r\n\r\nasync function checkPodmanRootless(binary: string): Promise<boolean> {\r\n try {\r\n const info = await execSimple([binary, 'info', '--format', '{{.Host.Security.Rootless}}'])\r\n return info.trim().toLowerCase() === 'true'\r\n } catch {\r\n return process.getuid?.() !== 0\r\n }\r\n}\r\n\r\nfunction getEngineBinary(): string {\r\n if (detectedBinary) return detectedBinary\r\n const podman = whichSync('podman')\r\n if (podman) {\r\n detectedEngine = 'podman'\r\n detectedBinary = podman\r\n return podman\r\n }\r\n const docker = whichSync('docker')\r\n if (docker) {\r\n detectedEngine = 'docker'\r\n detectedBinary = docker\r\n return docker\r\n }\r\n throw new Error(\r\n 'No container engine found. Install Podman (preferred) or Docker.',\r\n )\r\n}\r\n\r\nfunction getEngineType(): SandboxEngineType {\r\n if (detectedEngine) return detectedEngine\r\n getEngineBinary()\r\n return detectedEngine!\r\n}\r\n\r\nfunction execSimple(cmd: string[]): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n const child = spawn(cmd[0], cmd.slice(1), {\r\n stdio: ['ignore', 'pipe', 'pipe'],\r\n windowsHide: true,\r\n })\r\n let stdout = ''\r\n let stderr = ''\r\n child.stdout?.on('data', (d: Buffer) => { stdout += d.toString() })\r\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString() })\r\n child.on('close', code => {\r\n if (code === 0) resolve(stdout)\r\n else reject(new Error(`Command failed (${code}): ${stderr}`))\r\n })\r\n child.on('error', reject)\r\n })\r\n}\r\n\r\nfunction buildRunArgs(config: ContainerConfig): string[] {\r\n const binary = getEngineBinary()\r\n const image = resolveImage(config.runtime, config.image)\r\n const name = `kode-sandbox-${randomUUID().slice(0, 8)}`\r\n\r\n const args: string[] = [\r\n binary,\r\n 'run',\r\n '--name', name,\r\n '--detach',\r\n '--init',\r\n ]\r\n\r\n if (!config.networkEnabled) {\r\n args.push('--network', 'none')\r\n }\r\n\r\n if (config.memoryLimitMb) {\r\n args.push('--memory', `${config.memoryLimitMb}m`)\r\n }\r\n if (config.cpuLimit) {\r\n args.push('--cpus', String(config.cpuLimit))\r\n }\r\n\r\n if (config.workDir) {\r\n args.push('--workdir', config.workDir)\r\n }\r\n\r\n for (const mount of config.mountPaths ?? []) {\r\n const opt = mount.readOnly\r\n ? `${mount.hostPath}:${mount.containerPath}:ro`\r\n : `${mount.hostPath}:${mount.containerPath}`\r\n args.push('-v', opt)\r\n }\r\n\r\n for (const [key, value] of Object.entries(config.env ?? {})) {\r\n args.push('-e', `${key}=${value}`)\r\n }\r\n\r\n args.push(image, 'sleep', 'infinity')\r\n\r\n return args\r\n}\r\n\r\nexport async function createContainer(\r\n config: ContainerConfig,\r\n): Promise<ContainerInfo> {\r\n const args = buildRunArgs(config)\r\n const binary = args[0]\r\n const runArgs = args.slice(1)\r\n\r\n const output = await execSimple([binary, ...runArgs])\r\n const containerId = output.trim().slice(0, 12)\r\n\r\n const name = runArgs[runArgs.indexOf('--name') + 1]\r\n\r\n return {\r\n id: containerId,\r\n name,\r\n image: resolveImage(config.runtime, config.image),\r\n status: 'ready',\r\n runtime: config.runtime,\r\n createdAt: Date.now(),\r\n lastUsedAt: Date.now(),\r\n }\r\n}\r\n\r\nexport async function execInContainer(\r\n containerId: string,\r\n options: ExecOptions,\r\n): Promise<ExecResult> {\r\n const binary = getEngineBinary()\r\n const startTime = Date.now()\r\n\r\n const args: string[] = [binary, 'exec']\r\n\r\n if (options.cwd) {\r\n args.push('--workdir', options.cwd)\r\n }\r\n\r\n for (const [key, value] of Object.entries(options.env ?? {})) {\r\n args.push('-e', `${key}=${value}`)\r\n }\r\n\r\n args.push(containerId, ...options.command)\r\n\r\n return new Promise<ExecResult>((resolve, reject) => {\r\n const child = spawn(args[0], args.slice(1), {\r\n stdio: ['pipe', 'pipe', 'pipe'],\r\n windowsHide: true,\r\n })\r\n\r\n let stdout = ''\r\n let stderr = ''\r\n let timedOut = false\r\n let timer: ReturnType<typeof setTimeout> | undefined\r\n\r\n if (options.timeoutMs) {\r\n timer = setTimeout(() => {\r\n timedOut = true\r\n child.kill('SIGKILL')\r\n }, options.timeoutMs)\r\n }\r\n\r\n child.stdout?.on('data', (d: Buffer) => { stdout += d.toString() })\r\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString() })\r\n\r\n if (options.stdin) {\r\n child.stdin?.write(options.stdin)\r\n child.stdin?.end()\r\n } else {\r\n child.stdin?.end()\r\n }\r\n\r\n child.on('close', code => {\r\n if (timer) clearTimeout(timer)\r\n resolve({\r\n stdout,\r\n stderr,\r\n exitCode: code ?? (timedOut ? 137 : 1),\r\n durationMs: Date.now() - startTime,\r\n timedOut,\r\n })\r\n })\r\n\r\n child.on('error', err => {\r\n if (timer) clearTimeout(timer)\r\n reject(err)\r\n })\r\n })\r\n}\r\n\r\nexport async function removeContainer(containerId: string): Promise<void> {\r\n const binary = getEngineBinary()\r\n try {\r\n await execSimple([binary, 'rm', '-f', containerId])\r\n } catch (err) {\r\n logError(err)\r\n }\r\n}\r\n\r\nexport async function stopContainer(containerId: string): Promise<void> {\r\n const binary = getEngineBinary()\r\n try {\r\n await execSimple([binary, 'stop', '-t', '3', containerId])\r\n } catch (err) {\r\n logError(err)\r\n }\r\n}\r\n\r\nexport async function getContainerStatus(\r\n containerId: string,\r\n): Promise<ContainerStatus> {\r\n const binary = getEngineBinary()\r\n try {\r\n const output = await execSimple([\r\n binary, 'inspect', '--format', '{{.State.Status}}', containerId,\r\n ])\r\n const status = output.trim().toLowerCase()\r\n switch (status) {\r\n case 'running': return 'running'\r\n case 'created': return 'creating'\r\n case 'exited':\r\n case 'stopped': return 'stopped'\r\n default: return 'error'\r\n }\r\n } catch {\r\n return 'destroyed'\r\n }\r\n}\r\n\r\nexport async function pullImage(image: string): Promise<void> {\r\n const binary = getEngineBinary()\r\n await execSimple([binary, 'pull', image])\r\n}\r\n\r\nexport async function imageExists(image: string): Promise<boolean> {\r\n const binary = getEngineBinary()\r\n try {\r\n await execSimple([binary, 'image', 'inspect', image])\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport { getEngineType, getEngineBinary }\r\n", "import { logError } from '@utils/log'\r\nimport {\r\n createContainer,\r\n execInContainer,\r\n removeContainer,\r\n stopContainer,\r\n pullImage,\r\n imageExists,\r\n} from './podmanEngine'\r\nimport { resolveImage } from './runtimeImages'\r\nimport type {\r\n ContainerConfig,\r\n ContainerInfo,\r\n ContainerRuntime,\r\n ExecOptions,\r\n ExecResult,\r\n} from './types'\r\nimport { DEFAULT_SANDBOX_CONFIG } from './types'\r\n\r\nexport class ContainerLifecycleManager {\r\n private activeContainers = new Map<string, ContainerInfo>()\r\n\r\n async ensureImage(runtime: ContainerRuntime, customImage?: string): Promise<void> {\r\n const image = resolveImage(runtime, customImage)\r\n const exists = await imageExists(image)\r\n if (!exists) {\r\n await pullImage(image)\r\n }\r\n }\r\n\r\n async spawn(config: ContainerConfig): Promise<ContainerInfo> {\r\n const mergedConfig: ContainerConfig = {\r\n timeoutMs: DEFAULT_SANDBOX_CONFIG.defaultTimeoutMs,\r\n memoryLimitMb: DEFAULT_SANDBOX_CONFIG.defaultMemoryLimitMb,\r\n cpuLimit: DEFAULT_SANDBOX_CONFIG.defaultCpuLimit,\r\n networkEnabled: DEFAULT_SANDBOX_CONFIG.networkEnabled,\r\n ...config,\r\n }\r\n\r\n await this.ensureImage(mergedConfig.runtime, mergedConfig.image)\r\n\r\n const info = await createContainer(mergedConfig)\r\n this.activeContainers.set(info.id, info)\r\n return info\r\n }\r\n\r\n async exec(containerId: string, options: ExecOptions): Promise<ExecResult> {\r\n const info = this.activeContainers.get(containerId)\r\n if (info) {\r\n info.lastUsedAt = Date.now()\r\n info.status = 'running'\r\n }\r\n\r\n const result = await execInContainer(containerId, {\r\n timeoutMs: DEFAULT_SANDBOX_CONFIG.defaultTimeoutMs,\r\n ...options,\r\n })\r\n\r\n if (info) {\r\n info.status = 'ready'\r\n }\r\n\r\n return result\r\n }\r\n\r\n async destroy(containerId: string): Promise<void> {\r\n try {\r\n await stopContainer(containerId)\r\n await removeContainer(containerId)\r\n } catch (err) {\r\n logError(err)\r\n } finally {\r\n this.activeContainers.delete(containerId)\r\n }\r\n }\r\n\r\n async destroyAll(): Promise<void> {\r\n const ids = Array.from(this.activeContainers.keys())\r\n await Promise.allSettled(ids.map(id => this.destroy(id)))\r\n }\r\n\r\n getActive(): ContainerInfo[] {\r\n return Array.from(this.activeContainers.values())\r\n }\r\n\r\n getContainer(containerId: string): ContainerInfo | undefined {\r\n return this.activeContainers.get(containerId)\r\n }\r\n\r\n get activeCount(): number {\r\n return this.activeContainers.size\r\n }\r\n}\r\n\r\nlet globalLifecycleManager: ContainerLifecycleManager | null = null\r\n\r\nexport function getContainerLifecycleManager(): ContainerLifecycleManager {\r\n if (!globalLifecycleManager) {\r\n globalLifecycleManager = new ContainerLifecycleManager()\r\n }\r\n return globalLifecycleManager\r\n}\r\n", "import { logError } from '@utils/log'\r\nimport { ContainerLifecycleManager } from './containerLifecycle'\r\nimport type {\r\n ContainerConfig,\r\n ContainerInfo,\r\n ContainerRuntime,\r\n ExecOptions,\r\n ExecResult,\r\n SandboxEngineConfig,\r\n} from './types'\r\nimport { DEFAULT_SANDBOX_CONFIG } from './types'\r\n\r\ninterface PoolEntry {\r\n container: ContainerInfo\r\n runtime: ContainerRuntime\r\n inUse: boolean\r\n idleTimer?: ReturnType<typeof setTimeout>\r\n}\r\n\r\nexport class ContainerPool {\r\n private pool = new Map<string, PoolEntry>()\r\n private lifecycle: ContainerLifecycleManager\r\n private config: SandboxEngineConfig\r\n\r\n constructor(\r\n lifecycle: ContainerLifecycleManager,\r\n config: Partial<SandboxEngineConfig> = {},\r\n ) {\r\n this.lifecycle = lifecycle\r\n this.config = { ...DEFAULT_SANDBOX_CONFIG, ...config }\r\n }\r\n\r\n async warmup(runtime: ContainerRuntime, count?: number): Promise<void> {\r\n const n = count ?? this.config.poolSize\r\n const existing = this.getIdleByRuntime(runtime)\r\n const needed = Math.max(0, n - existing.length)\r\n\r\n const promises: Promise<void>[] = []\r\n for (let i = 0; i < needed; i++) {\r\n promises.push(this.spawnPoolEntry(runtime))\r\n }\r\n await Promise.allSettled(promises)\r\n }\r\n\r\n async acquire(\r\n runtime: ContainerRuntime,\r\n config?: Partial<ContainerConfig>,\r\n ): Promise<ContainerInfo> {\r\n const idle = this.getIdleByRuntime(runtime)\r\n\r\n if (idle.length > 0) {\r\n const entry = idle[0]\r\n entry.inUse = true\r\n if (entry.idleTimer) {\r\n clearTimeout(entry.idleTimer)\r\n entry.idleTimer = undefined\r\n }\r\n entry.container.lastUsedAt = Date.now()\r\n return entry.container\r\n }\r\n\r\n const containerConfig: ContainerConfig = {\r\n runtime,\r\n networkEnabled: this.config.networkEnabled,\r\n memoryLimitMb: this.config.defaultMemoryLimitMb,\r\n cpuLimit: this.config.defaultCpuLimit,\r\n timeoutMs: this.config.defaultTimeoutMs,\r\n ...config,\r\n }\r\n\r\n const info = await this.lifecycle.spawn(containerConfig)\r\n\r\n this.pool.set(info.id, {\r\n container: info,\r\n runtime,\r\n inUse: true,\r\n })\r\n\r\n return info\r\n }\r\n\r\n release(containerId: string): void {\r\n const entry = this.pool.get(containerId)\r\n if (!entry) return\r\n\r\n entry.inUse = false\r\n entry.container.lastUsedAt = Date.now()\r\n\r\n const idleCount = this.getIdleByRuntime(entry.runtime).length\r\n if (idleCount > this.config.poolSize) {\r\n void this.evict(containerId)\r\n return\r\n }\r\n\r\n entry.idleTimer = setTimeout(() => {\r\n void this.evict(containerId)\r\n }, this.config.poolIdleTimeoutMs)\r\n }\r\n\r\n async exec(\r\n containerId: string,\r\n options: ExecOptions,\r\n ): Promise<ExecResult> {\r\n return this.lifecycle.exec(containerId, options)\r\n }\r\n\r\n private async evict(containerId: string): Promise<void> {\r\n const entry = this.pool.get(containerId)\r\n if (!entry) return\r\n if (entry.inUse) return\r\n\r\n if (entry.idleTimer) {\r\n clearTimeout(entry.idleTimer)\r\n }\r\n\r\n this.pool.delete(containerId)\r\n\r\n try {\r\n await this.lifecycle.destroy(containerId)\r\n } catch (err) {\r\n logError(err)\r\n }\r\n }\r\n\r\n private async spawnPoolEntry(runtime: ContainerRuntime): Promise<void> {\r\n try {\r\n const info = await this.lifecycle.spawn({\r\n runtime,\r\n networkEnabled: this.config.networkEnabled,\r\n memoryLimitMb: this.config.defaultMemoryLimitMb,\r\n cpuLimit: this.config.defaultCpuLimit,\r\n timeoutMs: this.config.defaultTimeoutMs,\r\n })\r\n\r\n const entry: PoolEntry = {\r\n container: info,\r\n runtime,\r\n inUse: false,\r\n }\r\n\r\n entry.idleTimer = setTimeout(() => {\r\n void this.evict(info.id)\r\n }, this.config.poolIdleTimeoutMs)\r\n\r\n this.pool.set(info.id, entry)\r\n } catch (err) {\r\n logError(err)\r\n }\r\n }\r\n\r\n private getIdleByRuntime(runtime: ContainerRuntime): PoolEntry[] {\r\n return Array.from(this.pool.values()).filter(\r\n e => e.runtime === runtime && !e.inUse,\r\n )\r\n }\r\n\r\n async shutdown(): Promise<void> {\r\n for (const entry of this.pool.values()) {\r\n if (entry.idleTimer) clearTimeout(entry.idleTimer)\r\n }\r\n\r\n const ids = Array.from(this.pool.keys())\r\n await Promise.allSettled(ids.map(id => this.lifecycle.destroy(id)))\r\n this.pool.clear()\r\n }\r\n\r\n get stats() {\r\n const entries = Array.from(this.pool.values())\r\n return {\r\n total: entries.length,\r\n idle: entries.filter(e => !e.inUse).length,\r\n inUse: entries.filter(e => e.inUse).length,\r\n byRuntime: Object.fromEntries(\r\n (['python', 'node', 'bash'] as ContainerRuntime[]).map(rt => [\r\n rt,\r\n {\r\n total: entries.filter(e => e.runtime === rt).length,\r\n idle: entries.filter(e => e.runtime === rt && !e.inUse).length,\r\n inUse: entries.filter(e => e.runtime === rt && e.inUse).length,\r\n },\r\n ]),\r\n ),\r\n }\r\n }\r\n}\r\n", "import { dirname, join } from 'path'\r\nimport { logError } from '@utils/log'\r\nimport { debug as debugLogger } from '@utils/log/debugLogger'\r\nimport { getSandboxPool } from './index'\r\nimport { getContainerLifecycleManager } from './containerLifecycle'\r\nimport type {\r\n ContainerConfig,\r\n ContainerRuntime,\r\n ExecResult,\r\n} from './types'\r\n\r\nexport interface SkillExecutionRequest {\r\n runtime: ContainerRuntime\r\n executionScript: string\r\n skillDir: string\r\n dependencies?: string\r\n args?: string\r\n workDir?: string\r\n env?: Record<string, string>\r\n timeoutMs?: number\r\n}\r\n\r\nexport interface SkillExecutionResult {\r\n stdout: string\r\n stderr: string\r\n exitCode: number\r\n durationMs: number\r\n outputFiles?: string[]\r\n}\r\n\r\nexport async function executeSkillInSandbox(\r\n request: SkillExecutionRequest,\r\n): Promise<SkillExecutionResult> {\r\n const pool = getSandboxPool()\r\n\r\n if (!pool) {\r\n debugLogger.warn('SKILL_SANDBOX_NOT_AVAILABLE', {\r\n skillDir: request.skillDir,\r\n runtime: request.runtime,\r\n })\r\n throw new Error(\r\n 'Sandbox pool not initialized. Ensure container engine (Podman/Docker) is available.',\r\n )\r\n }\r\n\r\n const containerConfig: Partial<ContainerConfig> = {\r\n runtime: request.runtime,\r\n workDir: '/workspace',\r\n mountPaths: [\r\n {\r\n hostPath: request.skillDir,\r\n containerPath: '/workspace/skill',\r\n readOnly: true,\r\n },\r\n ...(request.workDir\r\n ? [{\r\n hostPath: request.workDir,\r\n containerPath: '/workspace/project',\r\n readOnly: false,\r\n }]\r\n : []),\r\n ],\r\n env: request.env,\r\n timeoutMs: request.timeoutMs ?? 120_000,\r\n }\r\n\r\n const container = await pool.acquire(request.runtime, containerConfig)\r\n\r\n try {\r\n if (request.dependencies) {\r\n const installResult = await installDependencies(\r\n container.id,\r\n request.runtime,\r\n request.dependencies,\r\n request.skillDir,\r\n )\r\n if (installResult.exitCode !== 0) {\r\n debugLogger.warn('SKILL_DEPENDENCY_INSTALL_FAILED', {\r\n stderr: installResult.stderr.slice(0, 500),\r\n })\r\n }\r\n }\r\n\r\n const command = buildExecCommand(request)\r\n const result = await pool.exec(container.id, {\r\n command,\r\n cwd: '/workspace',\r\n env: request.env,\r\n timeoutMs: request.timeoutMs ?? 120_000,\r\n })\r\n\r\n const outputFiles = await collectOutputFiles(pool, container.id)\r\n\r\n return {\r\n stdout: result.stdout,\r\n stderr: result.stderr,\r\n exitCode: result.exitCode,\r\n durationMs: result.durationMs,\r\n outputFiles,\r\n }\r\n } catch (err) {\r\n logError(err)\r\n throw err\r\n } finally {\r\n pool.release(container.id)\r\n }\r\n}\r\n\r\nasync function installDependencies(\r\n containerId: string,\r\n runtime: ContainerRuntime,\r\n dependenciesFile: string,\r\n skillDir: string,\r\n): Promise<ExecResult> {\r\n const lifecycle = getContainerLifecycleManager()\r\n const depsPath = `/workspace/skill/${dependenciesFile}`\r\n\r\n let command: string[]\r\n switch (runtime) {\r\n case 'python':\r\n command = ['pip', 'install', '--no-cache-dir', '-r', depsPath]\r\n break\r\n case 'node':\r\n command = ['npm', 'install', '--prefix', '/workspace/skill']\r\n break\r\n default:\r\n return { stdout: '', stderr: '', exitCode: 0, durationMs: 0, timedOut: false }\r\n }\r\n\r\n return lifecycle.exec(containerId, {\r\n command,\r\n cwd: '/workspace',\r\n timeoutMs: 60_000,\r\n })\r\n}\r\n\r\nfunction buildExecCommand(request: SkillExecutionRequest): string[] {\r\n const scriptPath = `/workspace/skill/${request.executionScript}`\r\n\r\n switch (request.runtime) {\r\n case 'python':\r\n return ['python', scriptPath, ...(request.args ? [request.args] : [])]\r\n case 'node':\r\n return ['node', scriptPath, ...(request.args ? [request.args] : [])]\r\n case 'bash':\r\n return ['bash', scriptPath, ...(request.args ? [request.args] : [])]\r\n default:\r\n return ['sh', scriptPath, ...(request.args ? [request.args] : [])]\r\n }\r\n}\r\n\r\nconst OUTPUT_EXTENSIONS = new Set([\r\n '.png', '.jpg', '.jpeg', '.gif', '.svg', '.webp',\r\n '.html', '.htm',\r\n '.csv', '.json', '.xml',\r\n '.md', '.txt',\r\n '.py', '.js', '.ts',\r\n])\r\n\r\nasync function collectOutputFiles(\r\n pool: import('./containerPool').ContainerPool,\r\n containerId: string,\r\n): Promise<string[]> {\r\n try {\r\n const lsResult = await pool.exec(containerId, {\r\n command: ['find', '/workspace/project', '-maxdepth', '2', '-type', 'f', '-newer', '/workspace/skill', '-name', '*.*'],\r\n cwd: '/workspace',\r\n timeoutMs: 5_000,\r\n })\r\n if (lsResult.exitCode !== 0 || !lsResult.stdout.trim()) return []\r\n\r\n return lsResult.stdout\r\n .trim()\r\n .split('\\n')\r\n .filter(f => {\r\n const ext = f.slice(f.lastIndexOf('.')).toLowerCase()\r\n return OUTPUT_EXTENSIONS.has(ext)\r\n })\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\nexport function canExecuteInSandbox(\r\n skill: { runtime?: string; executionScript?: string },\r\n): boolean {\r\n return !!(skill.runtime && skill.executionScript)\r\n}\r\n", "export type {\r\n ContainerRuntime,\r\n ContainerStatus,\r\n ContainerConfig,\r\n ContainerInfo,\r\n ExecOptions,\r\n ExecResult,\r\n MountPath,\r\n SandboxEngineCapabilities,\r\n SandboxEngineType,\r\n SandboxEngineConfig,\r\n RuntimeImageSpec,\r\n} from './types'\r\nexport { DEFAULT_SANDBOX_CONFIG } from './types'\r\n\r\nexport {\r\n detectContainerEngine,\r\n createContainer,\r\n execInContainer,\r\n removeContainer,\r\n stopContainer,\r\n getContainerStatus,\r\n pullImage,\r\n imageExists,\r\n getEngineType,\r\n getEngineBinary,\r\n} from './podmanEngine'\r\n\r\nexport {\r\n getRuntimeImage,\r\n getImageFullName,\r\n getAllRuntimeImages,\r\n resolveImage,\r\n} from './runtimeImages'\r\n\r\nexport {\r\n ContainerLifecycleManager,\r\n getContainerLifecycleManager,\r\n} from './containerLifecycle'\r\n\r\nexport { ContainerPool } from './containerPool'\r\n\r\nexport {\r\n executeSkillInSandbox,\r\n canExecuteInSandbox,\r\n type SkillExecutionRequest,\r\n type SkillExecutionResult,\r\n} from './skillExecutor'\r\n\r\nimport { ContainerPool } from './containerPool'\r\nimport { getContainerLifecycleManager } from './containerLifecycle'\r\nimport { detectContainerEngine } from './podmanEngine'\r\nimport type { SandboxEngineConfig, SandboxEngineCapabilities } from './types'\r\n\r\nlet globalPool: ContainerPool | null = null\r\nlet detectedCapabilities: SandboxEngineCapabilities | null = null\r\n\r\nexport async function initSandboxPool(\r\n config?: Partial<SandboxEngineConfig>,\r\n): Promise<ContainerPool> {\r\n const capabilities = await detectContainerEngine()\r\n detectedCapabilities = capabilities\r\n\r\n if (!capabilities.available) {\r\n throw new Error(\r\n `No container engine available. Install Podman (rootless preferred) or Docker.\\n` +\r\n `Podman: https://podman.io/docs/installation\\n` +\r\n `Docker: https://docs.docker.com/get-docker/`,\r\n )\r\n }\r\n\r\n const lifecycle = getContainerLifecycleManager()\r\n globalPool = new ContainerPool(lifecycle, config)\r\n\r\n return globalPool\r\n}\r\n\r\nexport async function tryInitSandboxPool(\r\n config?: Partial<SandboxEngineConfig>,\r\n): Promise<{ pool: ContainerPool | null; capabilities: SandboxEngineCapabilities }> {\r\n try {\r\n const capabilities = await detectContainerEngine()\r\n detectedCapabilities = capabilities\r\n\r\n if (!capabilities.available) {\r\n return { pool: null, capabilities }\r\n }\r\n\r\n const lifecycle = getContainerLifecycleManager()\r\n globalPool = new ContainerPool(lifecycle, config)\r\n\r\n return { pool: globalPool, capabilities }\r\n } catch {\r\n return {\r\n pool: null,\r\n capabilities: { name: 'none', available: false, rootless: false },\r\n }\r\n }\r\n}\r\n\r\nexport function getSandboxPool(): ContainerPool | null {\r\n return globalPool\r\n}\r\n\r\nexport function getSandboxCapabilities(): SandboxEngineCapabilities | null {\r\n return detectedCapabilities\r\n}\r\n\r\nexport async function shutdownSandboxPool(): Promise<void> {\r\n if (globalPool) {\r\n await globalPool.shutdown()\r\n globalPool = null\r\n }\r\n\r\n const lifecycle = getContainerLifecycleManager()\r\n await lifecycle.destroyAll()\r\n}\r\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -2,15 +2,17 @@ import { createRequire as __newcrawCreateRequire } from "node:module";
2
2
  const require = __newcrawCreateRequire(import.meta.url);
3
3
  import {
4
4
  MarketplaceManifestSchema
5
- } from "./chunk-HSJ6HYAO.js";
5
+ } from "./chunk-P52SGBC4.js";
6
6
  import {
7
7
  parseFrontmatter
8
- } from "./chunk-2C43OXE7.js";
8
+ } from "./chunk-2OVXJBJV.js";
9
9
  import {
10
- getCwd
11
- } from "./chunk-IM33F5CM.js";
10
+ getCwd,
11
+ init_state
12
+ } from "./chunk-BMJ5XGFR.js";
12
13
 
13
14
  // src/services/plugins/pluginValidation.ts
15
+ init_state();
14
16
  import { existsSync, lstatSync, readFileSync } from "node:fs";
15
17
  import { dirname, join, resolve, sep } from "node:path";
16
18
  import figures from "figures";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/services/plugins/pluginValidation.ts"],
4
4
  "sourcesContent": ["import { existsSync, lstatSync, readFileSync } from 'node:fs'\r\nimport { dirname, join, resolve, sep } from 'node:path'\r\nimport figures from 'figures'\r\nimport { z } from 'zod'\r\nimport { getCwd } from '@utils/state'\r\nimport { parseFrontmatter } from '@services/customCommands'\r\nimport { MarketplaceManifestSchema } from '@services/skillMarketplace'\r\n\r\nexport type ValidationIssue = {\r\n path: string\r\n message: string\r\n}\r\n\r\nexport type ValidationResult = {\r\n success: boolean\r\n fileType: 'plugin' | 'marketplace'\r\n filePath: string\r\n errors: ValidationIssue[]\r\n warnings: ValidationIssue[]\r\n}\r\n\r\nconst PluginManifestSchema = z\r\n .strictObject({\r\n name: z.string().min(1),\r\n version: z.string().optional(),\r\n description: z.string().optional(),\r\n author: z.unknown().optional(),\r\n homepage: z.string().optional(),\r\n repository: z.unknown().optional(),\r\n license: z.string().optional(),\r\n keywords: z.array(z.string()).optional(),\r\n commands: z.union([z.string(), z.array(z.string())]).optional(),\r\n agents: z.union([z.string(), z.array(z.string())]).optional(),\r\n skills: z.union([z.string(), z.array(z.string())]).optional(),\r\n hooks: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),\r\n mcpServers: z\r\n .union([z.string(), z.record(z.string(), z.unknown())])\r\n .optional(),\r\n })\r\n .passthrough()\r\n\r\nfunction resolveFromAgentCwd(input: string): string {\r\n const trimmed = input.trim()\r\n if (!trimmed) return trimmed\r\n if (trimmed.startsWith('~')) {\r\n return trimmed\r\n }\r\n if (trimmed.startsWith(sep)) return trimmed\r\n return resolve(getCwd(), trimmed)\r\n}\r\n\r\nfunction validateRelativePath(path: string): string | null {\r\n if (!path.startsWith('./')) return 'must start with \"./\"'\r\n if (path.split('/').includes('..')) return 'must not contain \"..\"'\r\n if (path.includes('\\\\')) return 'must use forward slashes'\r\n return null\r\n}\r\n\r\nfunction safeResolveWithin(baseDir: string, rel: string): string | null {\r\n const normalized = rel.replace(/\\\\/g, '/')\r\n if (!normalized.startsWith('./') || normalized.split('/').includes('..'))\r\n return null\r\n const abs = resolve(baseDir, normalized.split('/').join(sep))\r\n const base = resolve(baseDir)\r\n if (!abs.startsWith(base + sep) && abs !== base) return null\r\n return abs\r\n}\r\n\r\nfunction validateSkillDir(skillDir: string): ValidationIssue[] {\r\n const issues: ValidationIssue[] = []\r\n const name = skillDir.split(sep).pop() || ''\r\n if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name) || name.length > 64) {\r\n issues.push({\r\n path: `skills/${name}`,\r\n message:\r\n 'Invalid skill directory name (must be lowercase kebab-case, 1\u201364 chars)',\r\n })\r\n return issues\r\n }\r\n\r\n const skillFileCandidates = [\r\n join(skillDir, 'SKILL.md'),\r\n join(skillDir, 'skill.md'),\r\n ]\r\n const skillFile = skillFileCandidates.find(p => existsSync(p))\r\n if (!skillFile) {\r\n issues.push({\r\n path: `skills/${name}`,\r\n message: 'Missing SKILL.md (or skill.md)',\r\n })\r\n return issues\r\n }\r\n\r\n try {\r\n const raw = readFileSync(skillFile, 'utf8')\r\n const { frontmatter } = parseFrontmatter(raw)\r\n const declared =\r\n typeof (frontmatter as any).name === 'string'\r\n ? String((frontmatter as any).name).trim()\r\n : ''\r\n if (!declared) {\r\n issues.push({\r\n path: `${name}/SKILL.md`,\r\n message: 'Missing required frontmatter field: name',\r\n })\r\n } else if (declared !== name) {\r\n issues.push({\r\n path: `${name}/SKILL.md`,\r\n message: `Frontmatter name must match directory name (dir=${name}, name=${declared})`,\r\n })\r\n }\r\n\r\n const description =\r\n typeof (frontmatter as any).description === 'string'\r\n ? String((frontmatter as any).description).trim()\r\n : ''\r\n if (!description) {\r\n issues.push({\r\n path: `${name}/SKILL.md`,\r\n message: 'Missing required frontmatter field: description',\r\n })\r\n } else if (description.length > 1024) {\r\n issues.push({\r\n path: `${name}/SKILL.md`,\r\n message: 'description must be <= 1024 characters',\r\n })\r\n }\r\n } catch (err) {\r\n issues.push({\r\n path: `${name}/SKILL.md`,\r\n message: `Failed to parse SKILL.md: ${err instanceof Error ? err.message : String(err)}`,\r\n })\r\n }\r\n\r\n return issues\r\n}\r\n\r\nfunction validateMarketplaceJson(filePath: string): ValidationResult {\r\n const errors: ValidationIssue[] = []\r\n const warnings: ValidationIssue[] = []\r\n\r\n let raw: string\r\n try {\r\n raw = readFileSync(filePath, 'utf8')\r\n } catch (err) {\r\n return {\r\n success: false,\r\n fileType: 'marketplace',\r\n filePath,\r\n errors: [\r\n { path: 'file', message: `Failed to read file: ${String(err)}` },\r\n ],\r\n warnings: [],\r\n }\r\n }\r\n\r\n let json: unknown\r\n try {\r\n json = JSON.parse(raw)\r\n } catch (err) {\r\n return {\r\n success: false,\r\n fileType: 'marketplace',\r\n filePath,\r\n errors: [\r\n { path: 'json', message: `Invalid JSON syntax: ${String(err)}` },\r\n ],\r\n warnings: [],\r\n }\r\n }\r\n\r\n const parsed = MarketplaceManifestSchema.safeParse(json)\r\n if (!parsed.success) {\r\n errors.push(\r\n ...parsed.error.issues.map(i => ({\r\n path: i.path.join('.'),\r\n message: i.message,\r\n })),\r\n )\r\n return {\r\n success: false,\r\n fileType: 'marketplace',\r\n filePath,\r\n errors,\r\n warnings,\r\n }\r\n }\r\n\r\n const data = parsed.data\r\n const topLevelDescription =\r\n typeof (data as any).description === 'string'\r\n ? String((data as any).description).trim()\r\n : ''\r\n const metadataDescription =\r\n typeof (data.metadata as any)?.description === 'string'\r\n ? String((data.metadata as any).description).trim()\r\n : ''\r\n if (!topLevelDescription && !metadataDescription) {\r\n warnings.push({\r\n path: 'description',\r\n message:\r\n 'No marketplace description provided. Adding a description helps users understand what this marketplace offers',\r\n })\r\n }\r\n if (!data.plugins || data.plugins.length === 0) {\r\n warnings.push({\r\n path: 'plugins',\r\n message: 'Marketplace has no plugins defined',\r\n })\r\n }\r\n\r\n const pluginNames = new Set<string>()\r\n for (const [index, plugin] of data.plugins.entries()) {\r\n if (pluginNames.has(plugin.name)) {\r\n errors.push({\r\n path: `plugins[${index}].name`,\r\n message: `Duplicate plugin name \"${plugin.name}\"`,\r\n })\r\n }\r\n pluginNames.add(plugin.name)\r\n\r\n const source = plugin.source ?? './'\r\n const sourceErr = validateRelativePath(source)\r\n if (sourceErr)\r\n errors.push({ path: `plugins[${index}].source`, message: sourceErr })\r\n\r\n const marketplaceRoot = dirname(dirname(filePath))\r\n const pluginBase = safeResolveWithin(marketplaceRoot, source)\r\n if (!pluginBase) {\r\n errors.push({\r\n path: `plugins[${index}].source`,\r\n message: 'Invalid source path (must be ./..., no .., forward slashes)',\r\n })\r\n continue\r\n }\r\n if (!existsSync(pluginBase) || !lstatSync(pluginBase).isDirectory()) {\r\n errors.push({\r\n path: `plugins[${index}].source`,\r\n message: `Source path not found: ${source}`,\r\n })\r\n continue\r\n }\r\n\r\n const skillPaths = plugin.skills ?? []\r\n for (const [j, rel] of skillPaths.entries()) {\r\n const err = validateRelativePath(rel)\r\n if (err) {\r\n errors.push({ path: `plugins[${index}].skills[${j}]`, message: err })\r\n continue\r\n }\r\n const abs = safeResolveWithin(pluginBase, rel)\r\n if (!abs) {\r\n errors.push({\r\n path: `plugins[${index}].skills[${j}]`,\r\n message: 'Invalid path (must be ./..., no .., forward slashes)',\r\n })\r\n continue\r\n }\r\n if (!existsSync(abs) || !lstatSync(abs).isDirectory()) {\r\n errors.push({\r\n path: `plugins[${index}].skills[${j}]`,\r\n message: `Skill directory not found: ${rel}`,\r\n })\r\n continue\r\n }\r\n errors.push(\r\n ...validateSkillDir(abs).map(e => ({\r\n ...e,\r\n path: `plugins[${index}].skills[${j}]: ${e.path}`,\r\n })),\r\n )\r\n }\r\n\r\n const commandPaths = plugin.commands ?? []\r\n for (const [j, rel] of commandPaths.entries()) {\r\n const err = validateRelativePath(rel)\r\n if (err) {\r\n errors.push({ path: `plugins[${index}].commands[${j}]`, message: err })\r\n continue\r\n }\r\n const abs = safeResolveWithin(pluginBase, rel)\r\n if (!abs) {\r\n errors.push({\r\n path: `plugins[${index}].commands[${j}]`,\r\n message: 'Invalid path (must be ./..., no .., forward slashes)',\r\n })\r\n continue\r\n }\r\n if (!existsSync(abs) || !lstatSync(abs).isDirectory()) {\r\n errors.push({\r\n path: `plugins[${index}].commands[${j}]`,\r\n message: `Command directory not found: ${rel}`,\r\n })\r\n }\r\n }\r\n }\r\n\r\n return {\r\n success: errors.length === 0,\r\n fileType: 'marketplace',\r\n filePath,\r\n errors,\r\n warnings,\r\n }\r\n}\r\n\r\nfunction validatePluginJson(filePath: string): ValidationResult {\r\n const errors: ValidationIssue[] = []\r\n const warnings: ValidationIssue[] = []\r\n\r\n let raw: string\r\n try {\r\n raw = readFileSync(filePath, 'utf8')\r\n } catch (err) {\r\n return {\r\n success: false,\r\n fileType: 'plugin',\r\n filePath,\r\n errors: [\r\n { path: 'file', message: `Failed to read file: ${String(err)}` },\r\n ],\r\n warnings: [],\r\n }\r\n }\r\n\r\n let json: unknown\r\n try {\r\n json = JSON.parse(raw)\r\n } catch (err) {\r\n return {\r\n success: false,\r\n fileType: 'plugin',\r\n filePath,\r\n errors: [\r\n { path: 'json', message: `Invalid JSON syntax: ${String(err)}` },\r\n ],\r\n warnings: [],\r\n }\r\n }\r\n\r\n const parsed = PluginManifestSchema.safeParse(json)\r\n if (!parsed.success) {\r\n errors.push(\r\n ...parsed.error.issues.map(i => ({\r\n path: i.path.join('.'),\r\n message: i.message,\r\n })),\r\n )\r\n return { success: false, fileType: 'plugin', filePath, errors, warnings }\r\n }\r\n\r\n const data = parsed.data\r\n\r\n if (!/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(data.name)) {\r\n errors.push({\r\n path: 'name',\r\n message: 'Must be kebab-case and start with a letter',\r\n })\r\n }\r\n if (\r\n data.version &&\r\n !/^(\\d+)\\.(\\d+)\\.(\\d+)(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$/.test(\r\n data.version,\r\n )\r\n ) {\r\n errors.push({\r\n path: 'version',\r\n message: 'Invalid semantic version (expected MAJOR.MINOR.PATCH)',\r\n })\r\n }\r\n if (data.homepage) {\r\n try {\r\n // eslint-disable-next-line no-new\r\n new URL(data.homepage)\r\n } catch {\r\n errors.push({ path: 'homepage', message: 'Invalid URL' })\r\n }\r\n }\r\n if (typeof data.repository === 'string') {\r\n try {\r\n // eslint-disable-next-line no-new\r\n new URL(data.repository)\r\n } catch {\r\n errors.push({ path: 'repository', message: 'Invalid URL' })\r\n }\r\n }\r\n if (!data.version) {\r\n warnings.push({\r\n path: 'version',\r\n message:\r\n 'No version specified. Consider adding a version following semver (e.g., \"1.0.0\")',\r\n })\r\n }\r\n if (!data.description) {\r\n warnings.push({\r\n path: 'description',\r\n message:\r\n 'No description provided. Adding a description helps users understand what your plugin does',\r\n })\r\n }\r\n if (!data.author) {\r\n warnings.push({\r\n path: 'author',\r\n message:\r\n 'No author information provided. Consider adding author details for plugin attribution',\r\n })\r\n }\r\n\r\n const pluginRoot = dirname(dirname(filePath))\r\n\r\n const validatePathList = (field: string, value: unknown) => {\r\n if (!value) return\r\n const values = Array.isArray(value) ? value : [value]\r\n for (const [idx, p] of values.entries()) {\r\n if (typeof p !== 'string') continue\r\n const err = validateRelativePath(p)\r\n if (err) errors.push({ path: `${field}[${idx}]`, message: err })\r\n const abs = safeResolveWithin(pluginRoot, p)\r\n if (!abs) {\r\n errors.push({\r\n path: `${field}[${idx}]`,\r\n message: 'Invalid path (must be ./..., no .., forward slashes)',\r\n })\r\n } else if (!existsSync(abs)) {\r\n errors.push({\r\n path: `${field}[${idx}]`,\r\n message: `Path not found: ${p}`,\r\n })\r\n }\r\n }\r\n }\r\n\r\n validatePathList('commands', data.commands)\r\n validatePathList('agents', data.agents)\r\n validatePathList('skills', data.skills)\r\n\r\n if (typeof data.hooks === 'string') validatePathList('hooks', data.hooks)\r\n if (typeof data.mcpServers === 'string')\r\n validatePathList('mcpServers', data.mcpServers)\r\n\r\n return {\r\n success: errors.length === 0,\r\n fileType: 'plugin',\r\n filePath,\r\n errors,\r\n warnings,\r\n }\r\n}\r\n\r\nexport function validatePluginOrMarketplacePath(\r\n path: string,\r\n): ValidationResult {\r\n const abs = resolveFromAgentCwd(path)\r\n if (!abs) {\r\n return {\r\n success: false,\r\n fileType: 'plugin',\r\n filePath: '',\r\n errors: [{ path: 'path', message: 'Path is required' }],\r\n warnings: [],\r\n }\r\n }\r\n if (!existsSync(abs)) {\r\n return {\r\n success: false,\r\n fileType: 'plugin',\r\n filePath: abs,\r\n errors: [{ path: 'file', message: `Path not found: ${abs}` }],\r\n warnings: [],\r\n }\r\n }\r\n\r\n const stat = lstatSync(abs)\r\n let filePath = abs\r\n if (stat.isDirectory()) {\r\n const marketplace = join(abs, '.newcraw-plugin', 'marketplace.json')\r\n const plugin = join(abs, '.newcraw-plugin', 'plugin.json')\r\n const legacyMarketplace = join(abs, '.claude-plugin', 'marketplace.json')\r\n const legacyPlugin = join(abs, '.claude-plugin', 'plugin.json')\r\n if (existsSync(marketplace)) filePath = marketplace\r\n else if (existsSync(plugin)) filePath = plugin\r\n else if (existsSync(legacyMarketplace)) filePath = legacyMarketplace\r\n else if (existsSync(legacyPlugin)) filePath = legacyPlugin\r\n else {\r\n return {\r\n success: false,\r\n fileType: 'plugin',\r\n filePath: abs,\r\n errors: [\r\n {\r\n path: 'directory',\r\n message:\r\n 'No manifest found in directory. Expected .newcraw-plugin/marketplace.json or .newcraw-plugin/plugin.json (legacy .claude-plugin/* is also supported)',\r\n },\r\n ],\r\n warnings: [],\r\n }\r\n }\r\n }\r\n\r\n if (filePath.endsWith('marketplace.json'))\r\n return validateMarketplaceJson(filePath)\r\n if (filePath.endsWith('plugin.json')) return validatePluginJson(filePath)\r\n\r\n try {\r\n const raw = readFileSync(filePath, 'utf8')\r\n const json = JSON.parse(raw)\r\n if (\r\n json &&\r\n typeof json === 'object' &&\r\n Array.isArray((json as any).plugins)\r\n ) {\r\n return validateMarketplaceJson(filePath)\r\n }\r\n } catch {}\r\n return validatePluginJson(filePath)\r\n}\r\n\r\nexport function formatValidationResult(result: ValidationResult): string {\r\n const lines: string[] = []\r\n for (const err of result.errors) {\r\n lines.push(` ${figures.pointer} ${err.path}: ${err.message}`)\r\n }\r\n for (const warn of result.warnings) {\r\n lines.push(` ${figures.pointer} ${warn.path}: ${warn.message}`)\r\n }\r\n\r\n lines.push('')\r\n\r\n if (result.success) {\r\n if (result.warnings.length > 0) {\r\n lines.push(`${figures.tick} Validation passed with warnings`)\r\n } else {\r\n lines.push(`${figures.tick} Validation passed`)\r\n }\r\n } else {\r\n lines.push(`${figures.cross} Validation failed`)\r\n }\r\n\r\n return lines.join('\\n')\r\n}\r\n"],
5
- "mappings": "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",
5
+ "mappings": ";;;;;;;;;;;;;;AAIA;AAJA,SAAS,YAAY,WAAW,oBAAoB;AACpD,SAAS,SAAS,MAAM,SAAS,WAAW;AAC5C,OAAO,aAAa;AACpB,SAAS,SAAS;AAkBlB,IAAM,uBAAuB,EAC1B,aAAa;AAAA,EACZ,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,YAAY,EAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACvC,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9D,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EAC5D,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EAC5D,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EACzE,YAAY,EACT,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrD,SAAS;AACd,CAAC,EACA,YAAY;AAEf,SAAS,oBAAoB,OAAuB;AAClD,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,QAAQ,WAAW,GAAG,GAAG;AAC3B,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,WAAW,GAAG,EAAG,QAAO;AACpC,SAAO,QAAQ,OAAO,GAAG,OAAO;AAClC;AAEA,SAAS,qBAAqB,MAA6B;AACzD,MAAI,CAAC,KAAK,WAAW,IAAI,EAAG,QAAO;AACnC,MAAI,KAAK,MAAM,GAAG,EAAE,SAAS,IAAI,EAAG,QAAO;AAC3C,MAAI,KAAK,SAAS,IAAI,EAAG,QAAO;AAChC,SAAO;AACT;AAEA,SAAS,kBAAkB,SAAiB,KAA4B;AACtE,QAAM,aAAa,IAAI,QAAQ,OAAO,GAAG;AACzC,MAAI,CAAC,WAAW,WAAW,IAAI,KAAK,WAAW,MAAM,GAAG,EAAE,SAAS,IAAI;AACrE,WAAO;AACT,QAAM,MAAM,QAAQ,SAAS,WAAW,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC;AAC5D,QAAM,OAAO,QAAQ,OAAO;AAC5B,MAAI,CAAC,IAAI,WAAW,OAAO,GAAG,KAAK,QAAQ,KAAM,QAAO;AACxD,SAAO;AACT;AAEA,SAAS,iBAAiB,UAAqC;AAC7D,QAAM,SAA4B,CAAC;AACnC,QAAM,OAAO,SAAS,MAAM,GAAG,EAAE,IAAI,KAAK;AAC1C,MAAI,CAAC,6BAA6B,KAAK,IAAI,KAAK,KAAK,SAAS,IAAI;AAChE,WAAO,KAAK;AAAA,MACV,MAAM,UAAU,IAAI;AAAA,MACpB,SACE;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACT;AAEA,QAAM,sBAAsB;AAAA,IAC1B,KAAK,UAAU,UAAU;AAAA,IACzB,KAAK,UAAU,UAAU;AAAA,EAC3B;AACA,QAAM,YAAY,oBAAoB,KAAK,OAAK,WAAW,CAAC,CAAC;AAC7D,MAAI,CAAC,WAAW;AACd,WAAO,KAAK;AAAA,MACV,MAAM,UAAU,IAAI;AAAA,MACpB,SAAS;AAAA,IACX,CAAC;AACD,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,MAAM,aAAa,WAAW,MAAM;AAC1C,UAAM,EAAE,YAAY,IAAI,iBAAiB,GAAG;AAC5C,UAAM,WACJ,OAAQ,YAAoB,SAAS,WACjC,OAAQ,YAAoB,IAAI,EAAE,KAAK,IACvC;AACN,QAAI,CAAC,UAAU;AACb,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH,WAAW,aAAa,MAAM;AAC5B,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS,mDAAmD,IAAI,UAAU,QAAQ;AAAA,MACpF,CAAC;AAAA,IACH;AAEA,UAAM,cACJ,OAAQ,YAAoB,gBAAgB,WACxC,OAAQ,YAAoB,WAAW,EAAE,KAAK,IAC9C;AACN,QAAI,CAAC,aAAa;AAChB,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH,WAAW,YAAY,SAAS,MAAM;AACpC,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF,SAAS,KAAK;AACZ,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS,6BAA6B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IACxF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,wBAAwB,UAAoC;AACnE,QAAM,SAA4B,CAAC;AACnC,QAAM,WAA8B,CAAC;AAErC,MAAI;AACJ,MAAI;AACF,UAAM,aAAa,UAAU,MAAM;AAAA,EACrC,SAAS,KAAK;AACZ,WAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,QACN,EAAE,MAAM,QAAQ,SAAS,wBAAwB,OAAO,GAAG,CAAC,GAAG;AAAA,MACjE;AAAA,MACA,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,WAAO,KAAK,MAAM,GAAG;AAAA,EACvB,SAAS,KAAK;AACZ,WAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,QACN,EAAE,MAAM,QAAQ,SAAS,wBAAwB,OAAO,GAAG,CAAC,GAAG;AAAA,MACjE;AAAA,MACA,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAEA,QAAM,SAAS,0BAA0B,UAAU,IAAI;AACvD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO;AAAA,MACL,GAAG,OAAO,MAAM,OAAO,IAAI,QAAM;AAAA,QAC/B,MAAM,EAAE,KAAK,KAAK,GAAG;AAAA,QACrB,SAAS,EAAE;AAAA,MACb,EAAE;AAAA,IACJ;AACA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,OAAO,OAAO;AACpB,QAAM,sBACJ,OAAQ,KAAa,gBAAgB,WACjC,OAAQ,KAAa,WAAW,EAAE,KAAK,IACvC;AACN,QAAM,sBACJ,OAAQ,KAAK,UAAkB,gBAAgB,WAC3C,OAAQ,KAAK,SAAiB,WAAW,EAAE,KAAK,IAChD;AACN,MAAI,CAAC,uBAAuB,CAAC,qBAAqB;AAChD,aAAS,KAAK;AAAA,MACZ,MAAM;AAAA,MACN,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AACA,MAAI,CAAC,KAAK,WAAW,KAAK,QAAQ,WAAW,GAAG;AAC9C,aAAS,KAAK;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,oBAAI,IAAY;AACpC,aAAW,CAAC,OAAO,MAAM,KAAK,KAAK,QAAQ,QAAQ,GAAG;AACpD,QAAI,YAAY,IAAI,OAAO,IAAI,GAAG;AAChC,aAAO,KAAK;AAAA,QACV,MAAM,WAAW,KAAK;AAAA,QACtB,SAAS,0BAA0B,OAAO,IAAI;AAAA,MAChD,CAAC;AAAA,IACH;AACA,gBAAY,IAAI,OAAO,IAAI;AAE3B,UAAM,SAAS,OAAO,UAAU;AAChC,UAAM,YAAY,qBAAqB,MAAM;AAC7C,QAAI;AACF,aAAO,KAAK,EAAE,MAAM,WAAW,KAAK,YAAY,SAAS,UAAU,CAAC;AAEtE,UAAM,kBAAkB,QAAQ,QAAQ,QAAQ,CAAC;AACjD,UAAM,aAAa,kBAAkB,iBAAiB,MAAM;AAC5D,QAAI,CAAC,YAAY;AACf,aAAO,KAAK;AAAA,QACV,MAAM,WAAW,KAAK;AAAA,QACtB,SAAS;AAAA,MACX,CAAC;AACD;AAAA,IACF;AACA,QAAI,CAAC,WAAW,UAAU,KAAK,CAAC,UAAU,UAAU,EAAE,YAAY,GAAG;AACnE,aAAO,KAAK;AAAA,QACV,MAAM,WAAW,KAAK;AAAA,QACtB,SAAS,0BAA0B,MAAM;AAAA,MAC3C,CAAC;AACD;AAAA,IACF;AAEA,UAAM,aAAa,OAAO,UAAU,CAAC;AACrC,eAAW,CAAC,GAAG,GAAG,KAAK,WAAW,QAAQ,GAAG;AAC3C,YAAM,MAAM,qBAAqB,GAAG;AACpC,UAAI,KAAK;AACP,eAAO,KAAK,EAAE,MAAM,WAAW,KAAK,YAAY,CAAC,KAAK,SAAS,IAAI,CAAC;AACpE;AAAA,MACF;AACA,YAAM,MAAM,kBAAkB,YAAY,GAAG;AAC7C,UAAI,CAAC,KAAK;AACR,eAAO,KAAK;AAAA,UACV,MAAM,WAAW,KAAK,YAAY,CAAC;AAAA,UACnC,SAAS;AAAA,QACX,CAAC;AACD;AAAA,MACF;AACA,UAAI,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,GAAG,EAAE,YAAY,GAAG;AACrD,eAAO,KAAK;AAAA,UACV,MAAM,WAAW,KAAK,YAAY,CAAC;AAAA,UACnC,SAAS,8BAA8B,GAAG;AAAA,QAC5C,CAAC;AACD;AAAA,MACF;AACA,aAAO;AAAA,QACL,GAAG,iBAAiB,GAAG,EAAE,IAAI,QAAM;AAAA,UACjC,GAAG;AAAA,UACH,MAAM,WAAW,KAAK,YAAY,CAAC,MAAM,EAAE,IAAI;AAAA,QACjD,EAAE;AAAA,MACJ;AAAA,IACF;AAEA,UAAM,eAAe,OAAO,YAAY,CAAC;AACzC,eAAW,CAAC,GAAG,GAAG,KAAK,aAAa,QAAQ,GAAG;AAC7C,YAAM,MAAM,qBAAqB,GAAG;AACpC,UAAI,KAAK;AACP,eAAO,KAAK,EAAE,MAAM,WAAW,KAAK,cAAc,CAAC,KAAK,SAAS,IAAI,CAAC;AACtE;AAAA,MACF;AACA,YAAM,MAAM,kBAAkB,YAAY,GAAG;AAC7C,UAAI,CAAC,KAAK;AACR,eAAO,KAAK;AAAA,UACV,MAAM,WAAW,KAAK,cAAc,CAAC;AAAA,UACrC,SAAS;AAAA,QACX,CAAC;AACD;AAAA,MACF;AACA,UAAI,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,GAAG,EAAE,YAAY,GAAG;AACrD,eAAO,KAAK;AAAA,UACV,MAAM,WAAW,KAAK,cAAc,CAAC;AAAA,UACrC,SAAS,gCAAgC,GAAG;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS,OAAO,WAAW;AAAA,IAC3B,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,mBAAmB,UAAoC;AAC9D,QAAM,SAA4B,CAAC;AACnC,QAAM,WAA8B,CAAC;AAErC,MAAI;AACJ,MAAI;AACF,UAAM,aAAa,UAAU,MAAM;AAAA,EACrC,SAAS,KAAK;AACZ,WAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,QACN,EAAE,MAAM,QAAQ,SAAS,wBAAwB,OAAO,GAAG,CAAC,GAAG;AAAA,MACjE;AAAA,MACA,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,WAAO,KAAK,MAAM,GAAG;AAAA,EACvB,SAAS,KAAK;AACZ,WAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,QACN,EAAE,MAAM,QAAQ,SAAS,wBAAwB,OAAO,GAAG,CAAC,GAAG;AAAA,MACjE;AAAA,MACA,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAEA,QAAM,SAAS,qBAAqB,UAAU,IAAI;AAClD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO;AAAA,MACL,GAAG,OAAO,MAAM,OAAO,IAAI,QAAM;AAAA,QAC/B,MAAM,EAAE,KAAK,KAAK,GAAG;AAAA,QACrB,SAAS,EAAE;AAAA,MACb,EAAE;AAAA,IACJ;AACA,WAAO,EAAE,SAAS,OAAO,UAAU,UAAU,UAAU,QAAQ,SAAS;AAAA,EAC1E;AAEA,QAAM,OAAO,OAAO;AAEpB,MAAI,CAAC,gCAAgC,KAAK,KAAK,IAAI,GAAG;AACpD,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MACE,KAAK,WACL,CAAC,uGAAuG;AAAA,IACtG,KAAK;AAAA,EACP,GACA;AACA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,KAAK,UAAU;AACjB,QAAI;AAEF,UAAI,IAAI,KAAK,QAAQ;AAAA,IACvB,QAAQ;AACN,aAAO,KAAK,EAAE,MAAM,YAAY,SAAS,cAAc,CAAC;AAAA,IAC1D;AAAA,EACF;AACA,MAAI,OAAO,KAAK,eAAe,UAAU;AACvC,QAAI;AAEF,UAAI,IAAI,KAAK,UAAU;AAAA,IACzB,QAAQ;AACN,aAAO,KAAK,EAAE,MAAM,cAAc,SAAS,cAAc,CAAC;AAAA,IAC5D;AAAA,EACF;AACA,MAAI,CAAC,KAAK,SAAS;AACjB,aAAS,KAAK;AAAA,MACZ,MAAM;AAAA,MACN,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AACA,MAAI,CAAC,KAAK,aAAa;AACrB,aAAS,KAAK;AAAA,MACZ,MAAM;AAAA,MACN,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AACA,MAAI,CAAC,KAAK,QAAQ;AAChB,aAAS,KAAK;AAAA,MACZ,MAAM;AAAA,MACN,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AAEA,QAAM,aAAa,QAAQ,QAAQ,QAAQ,CAAC;AAE5C,QAAM,mBAAmB,CAAC,OAAe,UAAmB;AAC1D,QAAI,CAAC,MAAO;AACZ,UAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACpD,eAAW,CAAC,KAAK,CAAC,KAAK,OAAO,QAAQ,GAAG;AACvC,UAAI,OAAO,MAAM,SAAU;AAC3B,YAAM,MAAM,qBAAqB,CAAC;AAClC,UAAI,IAAK,QAAO,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC;AAC/D,YAAM,MAAM,kBAAkB,YAAY,CAAC;AAC3C,UAAI,CAAC,KAAK;AACR,eAAO,KAAK;AAAA,UACV,MAAM,GAAG,KAAK,IAAI,GAAG;AAAA,UACrB,SAAS;AAAA,QACX,CAAC;AAAA,MACH,WAAW,CAAC,WAAW,GAAG,GAAG;AAC3B,eAAO,KAAK;AAAA,UACV,MAAM,GAAG,KAAK,IAAI,GAAG;AAAA,UACrB,SAAS,mBAAmB,CAAC;AAAA,QAC/B,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,mBAAiB,YAAY,KAAK,QAAQ;AAC1C,mBAAiB,UAAU,KAAK,MAAM;AACtC,mBAAiB,UAAU,KAAK,MAAM;AAEtC,MAAI,OAAO,KAAK,UAAU,SAAU,kBAAiB,SAAS,KAAK,KAAK;AACxE,MAAI,OAAO,KAAK,eAAe;AAC7B,qBAAiB,cAAc,KAAK,UAAU;AAEhD,SAAO;AAAA,IACL,SAAS,OAAO,WAAW;AAAA,IAC3B,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,gCACd,MACkB;AAClB,QAAM,MAAM,oBAAoB,IAAI;AACpC,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,MACV,UAAU;AAAA,MACV,QAAQ,CAAC,EAAE,MAAM,QAAQ,SAAS,mBAAmB,CAAC;AAAA,MACtD,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AACA,MAAI,CAAC,WAAW,GAAG,GAAG;AACpB,WAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,MACV,UAAU;AAAA,MACV,QAAQ,CAAC,EAAE,MAAM,QAAQ,SAAS,mBAAmB,GAAG,GAAG,CAAC;AAAA,MAC5D,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAEA,QAAM,OAAO,UAAU,GAAG;AAC1B,MAAI,WAAW;AACf,MAAI,KAAK,YAAY,GAAG;AACtB,UAAM,cAAc,KAAK,KAAK,mBAAmB,kBAAkB;AACnE,UAAM,SAAS,KAAK,KAAK,mBAAmB,aAAa;AACzD,UAAM,oBAAoB,KAAK,KAAK,kBAAkB,kBAAkB;AACxE,UAAM,eAAe,KAAK,KAAK,kBAAkB,aAAa;AAC9D,QAAI,WAAW,WAAW,EAAG,YAAW;AAAA,aAC/B,WAAW,MAAM,EAAG,YAAW;AAAA,aAC/B,WAAW,iBAAiB,EAAG,YAAW;AAAA,aAC1C,WAAW,YAAY,EAAG,YAAW;AAAA,SACzC;AACH,aAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,QACV,UAAU;AAAA,QACV,QAAQ;AAAA,UACN;AAAA,YACE,MAAM;AAAA,YACN,SACE;AAAA,UACJ;AAAA,QACF;AAAA,QACA,UAAU,CAAC;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,SAAS,kBAAkB;AACtC,WAAO,wBAAwB,QAAQ;AACzC,MAAI,SAAS,SAAS,aAAa,EAAG,QAAO,mBAAmB,QAAQ;AAExE,MAAI;AACF,UAAM,MAAM,aAAa,UAAU,MAAM;AACzC,UAAM,OAAO,KAAK,MAAM,GAAG;AAC3B,QACE,QACA,OAAO,SAAS,YAChB,MAAM,QAAS,KAAa,OAAO,GACnC;AACA,aAAO,wBAAwB,QAAQ;AAAA,IACzC;AAAA,EACF,QAAQ;AAAA,EAAC;AACT,SAAO,mBAAmB,QAAQ;AACpC;AAEO,SAAS,uBAAuB,QAAkC;AACvE,QAAM,QAAkB,CAAC;AACzB,aAAW,OAAO,OAAO,QAAQ;AAC/B,UAAM,KAAK,KAAK,QAAQ,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO,EAAE;AAAA,EAC/D;AACA,aAAW,QAAQ,OAAO,UAAU;AAClC,UAAM,KAAK,KAAK,QAAQ,OAAO,IAAI,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE;AAAA,EACjE;AAEA,QAAM,KAAK,EAAE;AAEb,MAAI,OAAO,SAAS;AAClB,QAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,YAAM,KAAK,GAAG,QAAQ,IAAI,kCAAkC;AAAA,IAC9D,OAAO;AACL,YAAM,KAAK,GAAG,QAAQ,IAAI,oBAAoB;AAAA,IAChD;AAAA,EACF,OAAO;AACL,UAAM,KAAK,GAAG,QAAQ,KAAK,oBAAoB;AAAA,EACjD;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;",
6
6
  "names": []
7
7
  }
@@ -3,31 +3,42 @@ const require = __newcrawCreateRequire(import.meta.url);
3
3
  import {
4
4
  getSettingsFileCandidates,
5
5
  loadSettingsWithLegacyFallback
6
- } from "./chunk-2EFL22PV.js";
6
+ } from "./chunk-ADJ4YEII.js";
7
7
  import {
8
8
  getSessionPlugins
9
9
  } from "./chunk-2UO3BFZH.js";
10
10
  import {
11
11
  getTheme
12
- } from "./chunk-DEF3KFP7.js";
12
+ } from "./chunk-QZFKONA3.js";
13
13
  import {
14
14
  addMcprcServerForTesting,
15
15
  getCurrentProjectConfig,
16
16
  getGlobalConfig,
17
17
  getProjectMcpServerDefinitions,
18
+ init_config,
19
+ init_json,
18
20
  removeMcprcServerForTesting,
19
21
  safeParseJSON,
20
22
  saveCurrentProjectConfig,
21
23
  saveGlobalConfig
22
- } from "./chunk-IIFUDVGS.js";
24
+ } from "./chunk-ENLHVQCX.js";
23
25
  import {
24
- PRODUCT_COMMAND,
25
- PRODUCT_NAME,
26
26
  getCwd,
27
+ init_log,
28
+ init_state,
27
29
  logMCPError
28
- } from "./chunk-IM33F5CM.js";
30
+ } from "./chunk-BMJ5XGFR.js";
31
+ import {
32
+ PRODUCT_COMMAND,
33
+ PRODUCT_NAME,
34
+ init_product
35
+ } from "./chunk-UYWZQVH5.js";
29
36
 
30
37
  // src/services/mcp/client.ts
38
+ init_config();
39
+ init_state();
40
+ init_log();
41
+ init_product();
31
42
  import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
32
43
  import { resolve } from "path";
33
44
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
@@ -108,6 +119,9 @@ function parseJsonOrJsonc(text) {
108
119
  }
109
120
 
110
121
  // src/services/mcp/discovery.ts
122
+ init_config();
123
+ init_state();
124
+ init_json();
111
125
  import { existsSync, readFileSync, writeFileSync } from "fs";
112
126
  import { join } from "path";
113
127
  function expandTemplateString(value, pluginRoot) {
@@ -689,6 +703,7 @@ import { z } from "zod";
689
703
 
690
704
  // src/ui/components/FallbackToolUseRejectedMessage.tsx
691
705
  import * as React from "react";
706
+ init_product();
692
707
  import { Text } from "ink";
693
708
  function FallbackToolUseRejectedMessage() {
694
709
  return /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0", /* @__PURE__ */ React.createElement(Text, { color: getTheme().error }, "No (tell ", PRODUCT_NAME, " what to do differently)"));
@@ -1235,6 +1250,7 @@ var MCPTool = {
1235
1250
  };
1236
1251
 
1237
1252
  // src/services/mcp/tools-integration.ts
1253
+ init_log();
1238
1254
  import {
1239
1255
  CallToolResultSchema,
1240
1256
  ListPromptsResultSchema,