newcraw 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/REPL-DECTPCL5.js +50 -0
- package/dist/{acp-J4WDYGRX.js → acp-HA476EHW.js} +69 -40
- package/dist/acp-HA476EHW.js.map +7 -0
- package/dist/{agentsValidate-UBOER2IN.js → agentsValidate-EDPFUUMG.js} +13 -10
- package/dist/{agentsValidate-UBOER2IN.js.map → agentsValidate-EDPFUUMG.js.map} +1 -1
- package/dist/{ask-MGUO3L35.js → ask-5SP4YYRD.js} +62 -52
- package/dist/ask-5SP4YYRD.js.map +7 -0
- package/dist/{autoUpdater-2GS6LRPK.js → autoUpdater-FFMM2DR7.js} +5 -4
- package/dist/chunk-2BVCVKKB.js +135 -0
- package/dist/chunk-2BVCVKKB.js.map +7 -0
- package/dist/{chunk-2C43OXE7.js → chunk-2JCTO2EY.js} +38 -59
- package/dist/chunk-2JCTO2EY.js.map +7 -0
- package/dist/{chunk-OJIMOLIC.js → chunk-3CKC4ABU.js} +3631 -7464
- package/dist/chunk-3CKC4ABU.js.map +7 -0
- package/dist/chunk-ARCEUG3V.js +88 -0
- package/dist/chunk-ARCEUG3V.js.map +7 -0
- package/dist/{chunk-RUXIBQ3B.js → chunk-BJYXLCRS.js} +4 -4
- package/dist/{chunk-VKI7ORIO.js → chunk-BMKE6FT5.js} +37 -18
- package/dist/{chunk-VKI7ORIO.js.map → chunk-BMKE6FT5.js.map} +1 -1
- package/dist/chunk-BQCOSNM3.js +93 -0
- package/dist/chunk-BQCOSNM3.js.map +7 -0
- package/dist/chunk-CHB5K4GI.js +107 -0
- package/dist/chunk-CHB5K4GI.js.map +7 -0
- package/dist/chunk-D4OZACS2.js +35 -0
- package/dist/chunk-EHQ2M5B4.js +166 -0
- package/dist/{chunk-ZYSVG4X3.js.map → chunk-EHQ2M5B4.js.map} +2 -2
- package/dist/chunk-EUBZGAIN.js +372 -0
- package/dist/chunk-EUBZGAIN.js.map +7 -0
- package/dist/{chunk-UYRR6F5S.js → chunk-FIMCETCB.js} +9 -3
- package/dist/{chunk-UYRR6F5S.js.map → chunk-FIMCETCB.js.map} +1 -1
- package/dist/{chunk-DEF3KFP7.js → chunk-GVLJUD6R.js} +4 -2
- package/dist/{chunk-DEF3KFP7.js.map → chunk-GVLJUD6R.js.map} +1 -1
- package/dist/chunk-HLBLZKZH.js +45 -0
- package/dist/chunk-HLBLZKZH.js.map +7 -0
- package/dist/{chunk-XS6PU75S.js → chunk-IVWPPTDM.js} +1 -1
- package/dist/{chunk-A7X6OCZE.js → chunk-IXFBUXQW.js} +1 -1
- package/dist/{chunk-HSJ6HYAO.js → chunk-IZZTKEZH.js} +18 -10
- package/dist/chunk-IZZTKEZH.js.map +7 -0
- package/dist/{chunk-2EFL22PV.js → chunk-JI4HCLK7.js} +7 -3
- package/dist/chunk-JI4HCLK7.js.map +7 -0
- package/dist/chunk-JLVECHVJ.js +36 -0
- package/dist/chunk-JLVECHVJ.js.map +7 -0
- package/dist/{chunk-XXU2NVOE.js → chunk-KJTPUTU7.js} +30 -6
- package/dist/chunk-KJTPUTU7.js.map +7 -0
- package/dist/{chunk-V5U6BHT2.js → chunk-KS646CDL.js} +7 -3
- package/dist/{chunk-V5U6BHT2.js.map → chunk-KS646CDL.js.map} +1 -1
- package/dist/{chunk-53A4JHFW.js → chunk-MJ3MLGVB.js} +23 -4
- package/dist/chunk-MJ3MLGVB.js.map +7 -0
- package/dist/chunk-MJLWBVZP.js +822 -0
- package/dist/chunk-MJLWBVZP.js.map +7 -0
- package/dist/chunk-MMF5RMLU.js +65 -0
- package/dist/chunk-MMF5RMLU.js.map +7 -0
- package/dist/{chunk-QH2M65BR.js → chunk-MUW3J7CP.js} +7 -3
- package/dist/{chunk-QH2M65BR.js.map → chunk-MUW3J7CP.js.map} +1 -1
- package/dist/{chunk-3LMXSKZ7.js → chunk-NFXLN6FJ.js} +1 -1
- package/dist/chunk-NT7RDVDA.js +33 -0
- package/dist/{chunk-KQSHIOZK.js.map → chunk-NT7RDVDA.js.map} +1 -1
- package/dist/{chunk-OZHBEG7U.js → chunk-O4EKE3YR.js} +15 -5
- package/dist/{chunk-OZHBEG7U.js.map → chunk-O4EKE3YR.js.map} +1 -1
- package/dist/chunk-Q2OBTLBI.js +5473 -0
- package/dist/chunk-Q2OBTLBI.js.map +7 -0
- package/dist/{chunk-WWDVA4NV.js → chunk-QJ7MQIHN.js} +22 -6
- package/dist/{chunk-WWDVA4NV.js.map → chunk-QJ7MQIHN.js.map} +1 -1
- package/dist/{chunk-N5OHRWG2.js → chunk-QSRXXZO7.js} +4 -2
- package/dist/{chunk-N5OHRWG2.js.map → chunk-QSRXXZO7.js.map} +1 -1
- package/dist/{chunk-GZTCXXSS.js → chunk-QT5GS374.js} +57 -46
- package/dist/{chunk-GZTCXXSS.js.map → chunk-QT5GS374.js.map} +1 -1
- package/dist/chunk-QX5Y5CE5.js +683 -0
- package/dist/{chunk-F3COCCAE.js.map → chunk-QX5Y5CE5.js.map} +1 -1
- package/dist/{chunk-IIFUDVGS.js → chunk-U6IF5D3J.js} +310 -177
- package/dist/chunk-U6IF5D3J.js.map +7 -0
- package/dist/{chunk-VQSCECTS.js → chunk-UPRKGNBR.js} +6 -4
- package/dist/{chunk-VQSCECTS.js.map → chunk-UPRKGNBR.js.map} +1 -1
- package/dist/chunk-UUCRNFMH.js +62 -0
- package/dist/chunk-UUCRNFMH.js.map +7 -0
- package/dist/chunk-UYWZQVH5.js +35 -0
- package/dist/chunk-UYWZQVH5.js.map +7 -0
- package/dist/{chunk-XMGUQHMF.js → chunk-VSSVN6WG.js} +11 -1
- package/dist/chunk-VSSVN6WG.js.map +7 -0
- package/dist/{chunk-VHS2MZQS.js → chunk-W7Q3VYAB.js} +9 -6
- package/dist/{chunk-VHS2MZQS.js.map → chunk-W7Q3VYAB.js.map} +1 -1
- package/dist/{chunk-JWXQNBBA.js → chunk-WAXMRSVR.js} +7 -1
- package/dist/{chunk-JWXQNBBA.js.map → chunk-WAXMRSVR.js.map} +1 -1
- package/dist/{chunk-BWYKUDJR.js → chunk-X3NER6FY.js} +14 -8
- package/dist/{chunk-BWYKUDJR.js.map → chunk-X3NER6FY.js.map} +1 -1
- package/dist/{chunk-IM33F5CM.js → chunk-XYQZLDRB.js} +1668 -1623
- package/dist/chunk-XYQZLDRB.js.map +7 -0
- package/dist/{chunk-LOIZNQOU.js → chunk-ZM5FMRLS.js} +9 -3
- package/dist/{chunk-LOIZNQOU.js.map → chunk-ZM5FMRLS.js.map} +1 -1
- package/dist/{chunk-755HIAI3.js → chunk-ZMO4E7IW.js} +3 -42
- package/dist/chunk-ZMO4E7IW.js.map +7 -0
- package/dist/{cli-KZGF3FV5.js → cli-4KO6TA5J.js} +251 -485
- package/dist/cli-4KO6TA5J.js.map +7 -0
- package/dist/commands-JSY7CGSU.js +54 -0
- package/dist/{config-GTJWCNPF.js → config-DQEFVW3Y.js} +9 -6
- package/dist/{context-WF3TTXQU.js → context-HVQCTO5R.js} +8 -7
- package/dist/{costTracker-2G3ZI2JF.js → costTracker-VSWW7SRT.js} +3 -2
- package/dist/{customCommands-QOWK57EX.js → customCommands-XCINU5TG.js} +6 -5
- package/dist/{env-37BAP7QF.js → env-ZOPEXWMF.js} +10 -7
- package/dist/{gateway-IZYO6YFJ.js → gateway-SUXSILQL.js} +542 -96
- package/dist/gateway-SUXSILQL.js.map +7 -0
- package/dist/identity-3KZQQVBG.js +16 -0
- package/dist/index.js +8 -6
- package/dist/index.js.map +1 -1
- package/dist/{kodeAgentSessionId-KTGFX2BE.js → kodeAgentSessionId-4SH24DVH.js} +1 -1
- package/dist/{kodeAgentSessionLoad-6F7SJXBC.js → kodeAgentSessionLoad-HB3BYVNG.js} +6 -5
- package/dist/{kodeAgentSessionResume-UEEDRJ3N.js → kodeAgentSessionResume-IGSZZY3G.js} +6 -5
- package/dist/{kodeAgentStreamJson-VIXFTYL5.js → kodeAgentStreamJson-4ZKIWKS3.js} +4 -2
- package/dist/{kodeAgentStreamJsonSession-XC3IPREZ.js → kodeAgentStreamJsonSession-4L76UC75.js} +15 -4
- package/dist/kodeAgentStreamJsonSession-4L76UC75.js.map +7 -0
- package/dist/{kodeAgentStructuredStdio-SI5C7AAD.js → kodeAgentStructuredStdio-5DCUC6V6.js} +3 -3
- package/dist/{kodeHooks-V36SHCTC.js → kodeHooks-H6DMC3XX.js} +6 -5
- package/dist/{llm-CYUDKJNR.js → llm-OJZ6DZVC.js} +306 -60
- package/dist/llm-OJZ6DZVC.js.map +7 -0
- package/dist/{llmLazy-IXVVBRTN.js → llmLazy-TDLZZDPL.js} +2 -2
- package/dist/{loader-OEJ6C3TN.js → loader-MOVYZ76M.js} +6 -5
- package/dist/{mcp-KE3SILMX.js → mcp-DUYSIR5L.js} +10 -9
- package/dist/{mentionProcessor-GAU2WAYB.js → mentionProcessor-EKVLXJN4.js} +14 -7
- package/dist/{mentionProcessor-GAU2WAYB.js.map → mentionProcessor-EKVLXJN4.js.map} +1 -1
- package/dist/{messages-WCSGGSEU.js → messages-23ICFVMC.js} +2 -2
- package/dist/{model-4TQIV5J2.js → model-FUBCTRTV.js} +10 -7
- package/dist/{openai-KTZV6F7N.js → openai-SMYIAIO4.js} +8 -7
- package/dist/{outputStyles-WX5RYQOA.js → outputStyles-HBOYJFBE.js} +6 -5
- package/dist/{pluginRuntime-JXMJZ2LC.js → pluginRuntime-ATZMDZA7.js} +11 -8
- package/dist/{pluginRuntime-JXMJZ2LC.js.map → pluginRuntime-ATZMDZA7.js.map} +1 -1
- package/dist/{pluginValidation-JNQZYLUP.js → pluginValidation-7CGOMT6F.js} +8 -7
- package/dist/prompts-MFESKNYZ.js +58 -0
- package/dist/query-BFEFOX4S.js +58 -0
- package/dist/{responsesStreaming-2AIT6GHG.js → responsesStreaming-JORGEFQC.js} +1 -1
- package/dist/{ripgrep-KDPQAMB2.js → ripgrep-KNJBCJIQ.js} +5 -4
- package/dist/sandbox-P3FR4G4D.js +63 -0
- package/dist/{skillMarketplace-IXAGP3Q2.js → skillMarketplace-PCMKVV4O.js} +5 -4
- package/dist/{state-MSCYLB6Y.js → state-XBYIQ7R4.js} +6 -3
- package/dist/structuredOutput-KAVFUV2Z.js +9 -0
- package/dist/theme-4ZSXUILR.js +15 -0
- package/dist/thinking-TTNUZUB3.js +18 -0
- package/dist/{toolPermissionContext-I3IXPVED.js → toolPermissionContext-JCQ5MFUT.js} +1 -1
- package/dist/toolPermissionContext-JCQ5MFUT.js.map +7 -0
- package/dist/toolPermissionContextState-R6ZGMKP6.js +24 -0
- package/dist/toolPermissionContextState-R6ZGMKP6.js.map +7 -0
- package/dist/{toolPermissionSettings-EUZKGZU2.js → toolPermissionSettings-GMEYTJEA.js} +9 -8
- package/dist/toolPermissionSettings-GMEYTJEA.js.map +7 -0
- package/dist/tools-7FVKB7BG.js +55 -0
- package/dist/tools-7FVKB7BG.js.map +7 -0
- package/dist/{userInput-LJL4CVOB.js → userInput-SZEUY5J6.js} +49 -34
- package/dist/{userInput-LJL4CVOB.js.map → userInput-SZEUY5J6.js.map} +1 -1
- package/dist/{uuid-VA3KVASX.js → uuid-RQH3OZ3W.js} +1 -1
- package/dist/uuid-RQH3OZ3W.js.map +7 -0
- package/dist/workspace-EP63OB5S.js +21 -0
- package/dist/workspace-EP63OB5S.js.map +7 -0
- package/package.json +2 -2
- package/web/dist/assets/index-XuLVvSQF.js +251 -0
- package/web/dist/assets/index-pSid9IlY.css +10 -0
- package/web/dist/index.html +2 -2
- package/dist/REPL-IAK7ZN2Z.js +0 -42
- package/dist/acp-J4WDYGRX.js.map +0 -7
- package/dist/ask-MGUO3L35.js.map +0 -7
- package/dist/chunk-2C43OXE7.js.map +0 -7
- package/dist/chunk-2EFL22PV.js.map +0 -7
- package/dist/chunk-53A4JHFW.js.map +0 -7
- package/dist/chunk-755HIAI3.js.map +0 -7
- package/dist/chunk-AXWJI6N5.js +0 -11
- package/dist/chunk-F3COCCAE.js +0 -654
- package/dist/chunk-HSJ6HYAO.js.map +0 -7
- package/dist/chunk-IIFUDVGS.js.map +0 -7
- package/dist/chunk-IM33F5CM.js.map +0 -7
- package/dist/chunk-KQSHIOZK.js +0 -24
- package/dist/chunk-OJIMOLIC.js.map +0 -7
- package/dist/chunk-XMGUQHMF.js.map +0 -7
- package/dist/chunk-XXU2NVOE.js.map +0 -7
- package/dist/chunk-ZYSVG4X3.js +0 -151
- package/dist/cli-KZGF3FV5.js.map +0 -7
- package/dist/commands-AVEBLFVS.js +0 -46
- package/dist/gateway-IZYO6YFJ.js.map +0 -7
- package/dist/kodeAgentStreamJsonSession-XC3IPREZ.js.map +0 -7
- package/dist/llm-CYUDKJNR.js.map +0 -7
- package/dist/prompts-LE6GK75N.js +0 -48
- package/dist/query-GGIP6PWG.js +0 -50
- package/dist/theme-GAMFOLBW.js +0 -14
- package/dist/tools-3HOUIDM3.js +0 -47
- package/web/dist/assets/index-COAJqX1Z.css +0 -1
- package/web/dist/assets/index-CzS_4LmC.js +0 -179
- /package/dist/{REPL-IAK7ZN2Z.js.map → REPL-DECTPCL5.js.map} +0 -0
- /package/dist/{autoUpdater-2GS6LRPK.js.map → autoUpdater-FFMM2DR7.js.map} +0 -0
- /package/dist/{chunk-RUXIBQ3B.js.map → chunk-BJYXLCRS.js.map} +0 -0
- /package/dist/{chunk-AXWJI6N5.js.map → chunk-D4OZACS2.js.map} +0 -0
- /package/dist/{chunk-XS6PU75S.js.map → chunk-IVWPPTDM.js.map} +0 -0
- /package/dist/{chunk-A7X6OCZE.js.map → chunk-IXFBUXQW.js.map} +0 -0
- /package/dist/{chunk-3LMXSKZ7.js.map → chunk-NFXLN6FJ.js.map} +0 -0
- /package/dist/{commands-AVEBLFVS.js.map → commands-JSY7CGSU.js.map} +0 -0
- /package/dist/{config-GTJWCNPF.js.map → config-DQEFVW3Y.js.map} +0 -0
- /package/dist/{context-WF3TTXQU.js.map → context-HVQCTO5R.js.map} +0 -0
- /package/dist/{costTracker-2G3ZI2JF.js.map → costTracker-VSWW7SRT.js.map} +0 -0
- /package/dist/{customCommands-QOWK57EX.js.map → customCommands-XCINU5TG.js.map} +0 -0
- /package/dist/{env-37BAP7QF.js.map → env-ZOPEXWMF.js.map} +0 -0
- /package/dist/{kodeAgentSessionId-KTGFX2BE.js.map → identity-3KZQQVBG.js.map} +0 -0
- /package/dist/{kodeAgentSessionLoad-6F7SJXBC.js.map → kodeAgentSessionId-4SH24DVH.js.map} +0 -0
- /package/dist/{kodeAgentSessionResume-UEEDRJ3N.js.map → kodeAgentSessionLoad-HB3BYVNG.js.map} +0 -0
- /package/dist/{kodeAgentStreamJson-VIXFTYL5.js.map → kodeAgentSessionResume-IGSZZY3G.js.map} +0 -0
- /package/dist/{kodeAgentStructuredStdio-SI5C7AAD.js.map → kodeAgentStreamJson-4ZKIWKS3.js.map} +0 -0
- /package/dist/{kodeHooks-V36SHCTC.js.map → kodeAgentStructuredStdio-5DCUC6V6.js.map} +0 -0
- /package/dist/{llmLazy-IXVVBRTN.js.map → kodeHooks-H6DMC3XX.js.map} +0 -0
- /package/dist/{loader-OEJ6C3TN.js.map → llmLazy-TDLZZDPL.js.map} +0 -0
- /package/dist/{mcp-KE3SILMX.js.map → loader-MOVYZ76M.js.map} +0 -0
- /package/dist/{messages-WCSGGSEU.js.map → mcp-DUYSIR5L.js.map} +0 -0
- /package/dist/{model-4TQIV5J2.js.map → messages-23ICFVMC.js.map} +0 -0
- /package/dist/{openai-KTZV6F7N.js.map → model-FUBCTRTV.js.map} +0 -0
- /package/dist/{outputStyles-WX5RYQOA.js.map → openai-SMYIAIO4.js.map} +0 -0
- /package/dist/{pluginValidation-JNQZYLUP.js.map → outputStyles-HBOYJFBE.js.map} +0 -0
- /package/dist/{prompts-LE6GK75N.js.map → pluginValidation-7CGOMT6F.js.map} +0 -0
- /package/dist/{query-GGIP6PWG.js.map → prompts-MFESKNYZ.js.map} +0 -0
- /package/dist/{responsesStreaming-2AIT6GHG.js.map → query-BFEFOX4S.js.map} +0 -0
- /package/dist/{ripgrep-KDPQAMB2.js.map → responsesStreaming-JORGEFQC.js.map} +0 -0
- /package/dist/{skillMarketplace-IXAGP3Q2.js.map → ripgrep-KNJBCJIQ.js.map} +0 -0
- /package/dist/{state-MSCYLB6Y.js.map → sandbox-P3FR4G4D.js.map} +0 -0
- /package/dist/{theme-GAMFOLBW.js.map → skillMarketplace-PCMKVV4O.js.map} +0 -0
- /package/dist/{toolPermissionContext-I3IXPVED.js.map → state-XBYIQ7R4.js.map} +0 -0
- /package/dist/{toolPermissionSettings-EUZKGZU2.js.map → structuredOutput-KAVFUV2Z.js.map} +0 -0
- /package/dist/{tools-3HOUIDM3.js.map → theme-4ZSXUILR.js.map} +0 -0
- /package/dist/{uuid-VA3KVASX.js.map → thinking-TTNUZUB3.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
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { createRequire as __newcrawCreateRequire } from "node:module";
|
|
2
|
+
const require = __newcrawCreateRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
getModelManager,
|
|
5
|
+
init_model
|
|
6
|
+
} from "./chunk-QX5Y5CE5.js";
|
|
7
|
+
|
|
8
|
+
// src/utils/model/thinking.ts
|
|
9
|
+
init_model();
|
|
10
|
+
import { last } from "lodash-es";
|
|
11
|
+
async function getMaxThinkingTokens(messages) {
|
|
12
|
+
if (process.env.MAX_THINKING_TOKENS) {
|
|
13
|
+
const tokens = parseInt(process.env.MAX_THINKING_TOKENS, 10);
|
|
14
|
+
return tokens;
|
|
15
|
+
}
|
|
16
|
+
const lastMessage = last(messages);
|
|
17
|
+
if (lastMessage?.type !== "user" || typeof lastMessage.message.content !== "string") {
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
const content = lastMessage.message.content.toLowerCase();
|
|
21
|
+
if (content.includes("think harder") || content.includes("think intensely") || content.includes("think longer") || content.includes("think really hard") || content.includes("think super hard") || content.includes("think very hard") || content.includes("ultrathink")) {
|
|
22
|
+
return 32e3 - 1;
|
|
23
|
+
}
|
|
24
|
+
if (content.includes("think about it") || content.includes("think a lot") || content.includes("think hard") || content.includes("think more") || content.includes("megathink")) {
|
|
25
|
+
return 1e4;
|
|
26
|
+
}
|
|
27
|
+
if (content.includes("think")) {
|
|
28
|
+
return 4e3;
|
|
29
|
+
}
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
async function getReasoningEffort(modelProfile, messages) {
|
|
33
|
+
const thinkingTokens = await getMaxThinkingTokens(messages);
|
|
34
|
+
let reasoningEffort;
|
|
35
|
+
if (modelProfile?.reasoningEffort) {
|
|
36
|
+
const effort2 = modelProfile.reasoningEffort;
|
|
37
|
+
reasoningEffort = effort2 === "high" || effort2 === "medium" || effort2 === "low" ? effort2 : effort2 === "minimal" ? "low" : "medium";
|
|
38
|
+
} else {
|
|
39
|
+
const modelManager = getModelManager();
|
|
40
|
+
const fallbackProfile = modelManager.getModel("main");
|
|
41
|
+
const effort2 = fallbackProfile?.reasoningEffort;
|
|
42
|
+
reasoningEffort = effort2 === "high" || effort2 === "medium" || effort2 === "low" ? effort2 : effort2 === "minimal" ? "low" : "medium";
|
|
43
|
+
}
|
|
44
|
+
const maxEffort = reasoningEffort === "high" ? 2 : reasoningEffort === "medium" ? 1 : reasoningEffort === "low" ? 0 : null;
|
|
45
|
+
if (!maxEffort) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
let effort = 0;
|
|
49
|
+
if (thinkingTokens < 1e4) {
|
|
50
|
+
effort = 0;
|
|
51
|
+
} else if (thinkingTokens >= 1e4 && thinkingTokens < 3e4) {
|
|
52
|
+
effort = 1;
|
|
53
|
+
} else {
|
|
54
|
+
effort = 2;
|
|
55
|
+
}
|
|
56
|
+
if (effort > maxEffort) {
|
|
57
|
+
return maxEffort === 2 ? "high" : maxEffort === 1 ? "medium" : "low";
|
|
58
|
+
}
|
|
59
|
+
return effort === 2 ? "high" : effort === 1 ? "medium" : "low";
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export {
|
|
63
|
+
getMaxThinkingTokens,
|
|
64
|
+
getReasoningEffort
|
|
65
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/model/thinking.ts"],
|
|
4
|
+
"sourcesContent": ["import { last } from 'lodash-es'\r\nimport type { Message } from '@query'\r\nimport { getLastAssistantMessageId } from '@utils/messages'\r\nimport { getModelManager } from '@utils/model'\r\n\r\nexport async function getMaxThinkingTokens(\r\n messages: Message[],\r\n): Promise<number> {\r\n if (process.env.MAX_THINKING_TOKENS) {\r\n const tokens = parseInt(process.env.MAX_THINKING_TOKENS, 10)\r\n return tokens\r\n }\r\n\r\n const lastMessage = last(messages)\r\n if (\r\n lastMessage?.type !== 'user' ||\r\n typeof lastMessage.message.content !== 'string'\r\n ) {\r\n return 0\r\n }\r\n\r\n const content = lastMessage.message.content.toLowerCase()\r\n if (\r\n content.includes('think harder') ||\r\n content.includes('think intensely') ||\r\n content.includes('think longer') ||\r\n content.includes('think really hard') ||\r\n content.includes('think super hard') ||\r\n content.includes('think very hard') ||\r\n content.includes('ultrathink')\r\n ) {\r\n return 32_000 - 1\r\n }\r\n\r\n if (\r\n content.includes('think about it') ||\r\n content.includes('think a lot') ||\r\n content.includes('think hard') ||\r\n content.includes('think more') ||\r\n content.includes('megathink')\r\n ) {\r\n return 10_000\r\n }\r\n\r\n if (content.includes('think')) {\r\n return 4_000\r\n }\r\n\r\n return 0\r\n}\r\n\r\nexport async function getReasoningEffort(\r\n modelProfile: any,\r\n messages: Message[],\r\n): Promise<'low' | 'medium' | 'high' | null> {\r\n const thinkingTokens = await getMaxThinkingTokens(messages)\r\n\r\n let reasoningEffort: 'low' | 'medium' | 'high' | undefined\r\n if (modelProfile?.reasoningEffort) {\r\n const effort = modelProfile.reasoningEffort\r\n reasoningEffort =\r\n effort === 'high' || effort === 'medium' || effort === 'low'\r\n ? effort\r\n : effort === 'minimal'\r\n ? 'low'\r\n : 'medium'\r\n } else {\r\n const modelManager = getModelManager()\r\n const fallbackProfile = modelManager.getModel('main')\r\n const effort = fallbackProfile?.reasoningEffort\r\n reasoningEffort =\r\n effort === 'high' || effort === 'medium' || effort === 'low'\r\n ? effort\r\n : effort === 'minimal'\r\n ? 'low'\r\n : 'medium'\r\n }\r\n\r\n const maxEffort =\r\n reasoningEffort === 'high'\r\n ? 2\r\n : reasoningEffort === 'medium'\r\n ? 1\r\n : reasoningEffort === 'low'\r\n ? 0\r\n : null\r\n if (!maxEffort) {\r\n return null\r\n }\r\n\r\n let effort = 0\r\n if (thinkingTokens < 10_000) {\r\n effort = 0\r\n } else if (thinkingTokens >= 10_000 && thinkingTokens < 30_000) {\r\n effort = 1\r\n } else {\r\n effort = 2\r\n }\r\n\r\n if (effort > maxEffort) {\r\n return maxEffort === 2 ? 'high' : maxEffort === 1 ? 'medium' : 'low'\r\n }\r\n\r\n return effort === 2 ? 'high' : effort === 1 ? 'medium' : 'low'\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;AAGA;AAHA,SAAS,YAAY;AAKrB,eAAsB,qBACpB,UACiB;AACjB,MAAI,QAAQ,IAAI,qBAAqB;AACnC,UAAM,SAAS,SAAS,QAAQ,IAAI,qBAAqB,EAAE;AAC3D,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,KAAK,QAAQ;AACjC,MACE,aAAa,SAAS,UACtB,OAAO,YAAY,QAAQ,YAAY,UACvC;AACA,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,YAAY,QAAQ,QAAQ,YAAY;AACxD,MACE,QAAQ,SAAS,cAAc,KAC/B,QAAQ,SAAS,iBAAiB,KAClC,QAAQ,SAAS,cAAc,KAC/B,QAAQ,SAAS,mBAAmB,KACpC,QAAQ,SAAS,kBAAkB,KACnC,QAAQ,SAAS,iBAAiB,KAClC,QAAQ,SAAS,YAAY,GAC7B;AACA,WAAO,OAAS;AAAA,EAClB;AAEA,MACE,QAAQ,SAAS,gBAAgB,KACjC,QAAQ,SAAS,aAAa,KAC9B,QAAQ,SAAS,YAAY,KAC7B,QAAQ,SAAS,YAAY,KAC7B,QAAQ,SAAS,WAAW,GAC5B;AACA,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,SAAS,OAAO,GAAG;AAC7B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,eAAsB,mBACpB,cACA,UAC2C;AAC3C,QAAM,iBAAiB,MAAM,qBAAqB,QAAQ;AAE1D,MAAI;AACJ,MAAI,cAAc,iBAAiB;AACjC,UAAMA,UAAS,aAAa;AAC5B,sBACEA,YAAW,UAAUA,YAAW,YAAYA,YAAW,QACnDA,UACAA,YAAW,YACT,QACA;AAAA,EACV,OAAO;AACL,UAAM,eAAe,gBAAgB;AACrC,UAAM,kBAAkB,aAAa,SAAS,MAAM;AACpD,UAAMA,UAAS,iBAAiB;AAChC,sBACEA,YAAW,UAAUA,YAAW,YAAYA,YAAW,QACnDA,UACAA,YAAW,YACT,QACA;AAAA,EACV;AAEA,QAAM,YACJ,oBAAoB,SAChB,IACA,oBAAoB,WAClB,IACA,oBAAoB,QAClB,IACA;AACV,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AAEA,MAAI,SAAS;AACb,MAAI,iBAAiB,KAAQ;AAC3B,aAAS;AAAA,EACX,WAAW,kBAAkB,OAAU,iBAAiB,KAAQ;AAC9D,aAAS;AAAA,EACX,OAAO;AACL,aAAS;AAAA,EACX;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,cAAc,IAAI,SAAS,cAAc,IAAI,WAAW;AAAA,EACjE;AAEA,SAAO,WAAW,IAAI,SAAS,WAAW,IAAI,WAAW;AAC3D;",
|
|
6
|
+
"names": ["effort"]
|
|
7
|
+
}
|
|
@@ -5,16 +5,20 @@ import {
|
|
|
5
5
|
setSessionState
|
|
6
6
|
} from "./chunk-TY3CCSAT.js";
|
|
7
7
|
import {
|
|
8
|
-
getGlobalConfig
|
|
9
|
-
|
|
8
|
+
getGlobalConfig,
|
|
9
|
+
init_config
|
|
10
|
+
} from "./chunk-U6IF5D3J.js";
|
|
10
11
|
import {
|
|
11
12
|
debug,
|
|
12
13
|
getCurrentRequest,
|
|
14
|
+
init_debugLogger,
|
|
13
15
|
logAPIError
|
|
14
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-QT5GS374.js";
|
|
15
17
|
|
|
16
18
|
// src/services/ai/openai.ts
|
|
19
|
+
init_config();
|
|
17
20
|
import { ProxyAgent, fetch } from "undici";
|
|
21
|
+
init_debugLogger();
|
|
18
22
|
var RETRY_CONFIG = {
|
|
19
23
|
BASE_DELAY_MS: 1e3,
|
|
20
24
|
MAX_DELAY_MS: 32e3,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/services/ai/openai.ts"],
|
|
4
4
|
"sourcesContent": ["import { OpenAI } from 'openai'\r\nimport { getGlobalConfig, GlobalConfig } from '@utils/config'\r\nimport { ProxyAgent, fetch, Response } from 'undici'\r\nimport { setSessionState, getSessionState } from '@utils/session/sessionState'\r\nimport {\r\n debug as debugLogger,\r\n getCurrentRequest,\r\n logAPIError,\r\n} from '@utils/log/debugLogger'\r\n\r\nconst RETRY_CONFIG = {\r\n BASE_DELAY_MS: 1000,\r\n MAX_DELAY_MS: 32000,\r\n MAX_SERVER_DELAY_MS: 60000,\r\n JITTER_FACTOR: 0.1,\r\n} as const\r\n\r\nfunction getRetryDelay(attempt: number, retryAfter?: string | null): number {\r\n if (retryAfter) {\r\n const retryAfterMs = parseInt(retryAfter) * 1000\r\n if (!isNaN(retryAfterMs) && retryAfterMs > 0) {\r\n return Math.min(retryAfterMs, RETRY_CONFIG.MAX_SERVER_DELAY_MS)\r\n }\r\n }\r\n\r\n const delay = RETRY_CONFIG.BASE_DELAY_MS * Math.pow(2, attempt - 1)\r\n const jitter = Math.random() * RETRY_CONFIG.JITTER_FACTOR * delay\r\n\r\n return Math.min(delay + jitter, RETRY_CONFIG.MAX_DELAY_MS)\r\n}\r\n\r\nfunction abortableDelay(delayMs: number, signal?: AbortSignal): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (signal?.aborted) {\r\n reject(new Error('Request was aborted'))\r\n return\r\n }\r\n\r\n const timeoutId = setTimeout(() => {\r\n resolve()\r\n }, delayMs)\r\n\r\n if (signal) {\r\n const abortHandler = () => {\r\n clearTimeout(timeoutId)\r\n reject(new Error('Request was aborted'))\r\n }\r\n signal.addEventListener('abort', abortHandler, { once: true })\r\n }\r\n })\r\n}\r\n\r\nenum ModelErrorType {\r\n MaxLength = '1024',\r\n MaxCompletionTokens = 'max_completion_tokens',\r\n TemperatureRestriction = 'temperature_restriction',\r\n StreamOptions = 'stream_options',\r\n Citations = 'citations',\r\n RateLimit = 'rate_limit',\r\n}\r\n\r\nfunction getModelErrorKey(\r\n baseURL: string,\r\n model: string,\r\n type: ModelErrorType,\r\n): string {\r\n return `${baseURL}:${model}:${type}`\r\n}\r\n\r\nfunction hasModelError(\r\n baseURL: string,\r\n model: string,\r\n type: ModelErrorType,\r\n): boolean {\r\n return !!getSessionState('modelErrors')[\r\n getModelErrorKey(baseURL, model, type)\r\n ]\r\n}\r\n\r\nfunction setModelError(\r\n baseURL: string,\r\n model: string,\r\n type: ModelErrorType,\r\n error: string,\r\n) {\r\n setSessionState('modelErrors', {\r\n [getModelErrorKey(baseURL, model, type)]: error,\r\n })\r\n}\r\n\r\ntype ErrorDetector = (errMsg: string) => boolean\r\ntype ErrorFixer = (\r\n opts: OpenAI.ChatCompletionCreateParams,\r\n) => Promise<void> | void\r\ninterface ErrorHandler {\r\n type: ModelErrorType\r\n detect: ErrorDetector\r\n fix: ErrorFixer\r\n}\r\n\r\nconst GPT5_ERROR_HANDLERS: ErrorHandler[] = [\r\n {\r\n type: ModelErrorType.MaxCompletionTokens,\r\n detect: errMsg => {\r\n const lowerMsg = errMsg.toLowerCase()\r\n return (\r\n (lowerMsg.includes(\"unsupported parameter: 'max_tokens'\") &&\r\n lowerMsg.includes(\"'max_completion_tokens'\")) ||\r\n (lowerMsg.includes('max_tokens') &&\r\n lowerMsg.includes('max_completion_tokens')) ||\r\n (lowerMsg.includes('max_tokens') &&\r\n lowerMsg.includes('not supported')) ||\r\n (lowerMsg.includes('max_tokens') &&\r\n lowerMsg.includes('use max_completion_tokens')) ||\r\n (lowerMsg.includes('invalid parameter') &&\r\n lowerMsg.includes('max_tokens')) ||\r\n (lowerMsg.includes('parameter error') &&\r\n lowerMsg.includes('max_tokens'))\r\n )\r\n },\r\n fix: async opts => {\r\n debugLogger.api('GPT5_FIX_MAX_TOKENS', {\r\n from: opts.max_tokens,\r\n to: opts.max_tokens,\r\n })\r\n if ('max_tokens' in opts) {\r\n opts.max_completion_tokens = opts.max_tokens\r\n delete opts.max_tokens\r\n }\r\n },\r\n },\r\n {\r\n type: ModelErrorType.TemperatureRestriction,\r\n detect: errMsg => {\r\n const lowerMsg = errMsg.toLowerCase()\r\n return (\r\n lowerMsg.includes('temperature') &&\r\n (lowerMsg.includes('only supports') ||\r\n lowerMsg.includes('must be 1') ||\r\n lowerMsg.includes('invalid temperature'))\r\n )\r\n },\r\n fix: async opts => {\r\n debugLogger.api('GPT5_FIX_TEMPERATURE', {\r\n from: opts.temperature,\r\n to: 1,\r\n })\r\n opts.temperature = 1\r\n },\r\n },\r\n]\r\n\r\nconst ERROR_HANDLERS: ErrorHandler[] = [\r\n {\r\n type: ModelErrorType.MaxLength,\r\n detect: errMsg =>\r\n errMsg.includes('Expected a string with maximum length 1024'),\r\n fix: async opts => {\r\n const toolDescriptions = {}\r\n for (const tool of opts.tools || []) {\r\n if (tool.function.description.length <= 1024) continue\r\n let str = ''\r\n let remainder = ''\r\n for (let line of tool.function.description.split('\\n')) {\r\n if (str.length + line.length < 1024) {\r\n str += line + '\\n'\r\n } else {\r\n remainder += line + '\\n'\r\n }\r\n }\r\n\r\n tool.function.description = str\r\n toolDescriptions[tool.function.name] = remainder\r\n }\r\n if (Object.keys(toolDescriptions).length > 0) {\r\n let content = '<additional-tool-usage-instructions>\\n\\n'\r\n for (const [name, description] of Object.entries(toolDescriptions)) {\r\n content += `<${name}>\\n${description}\\n</${name}>\\n\\n`\r\n }\r\n content += '</additional-tool-usage-instructions>'\r\n\r\n for (let i = opts.messages.length - 1; i >= 0; i--) {\r\n if (opts.messages[i].role === 'system') {\r\n opts.messages.splice(i + 1, 0, {\r\n role: 'system',\r\n content,\r\n })\r\n break\r\n }\r\n }\r\n }\r\n },\r\n },\r\n {\r\n type: ModelErrorType.MaxCompletionTokens,\r\n detect: errMsg => errMsg.includes(\"Use 'max_completion_tokens'\"),\r\n fix: async opts => {\r\n opts.max_completion_tokens = opts.max_tokens\r\n delete opts.max_tokens\r\n },\r\n },\r\n {\r\n type: ModelErrorType.StreamOptions,\r\n detect: errMsg => errMsg.includes('stream_options'),\r\n fix: async opts => {\r\n delete opts.stream_options\r\n },\r\n },\r\n {\r\n type: ModelErrorType.Citations,\r\n detect: errMsg =>\r\n errMsg.includes('Extra inputs are not permitted') &&\r\n errMsg.includes('citations'),\r\n fix: async opts => {\r\n if (!opts.messages) return\r\n\r\n for (const message of opts.messages) {\r\n if (!message) continue\r\n\r\n if (Array.isArray(message.content)) {\r\n for (const item of message.content) {\r\n if (item && typeof item === 'object') {\r\n const itemObj = item as unknown as Record<string, unknown>\r\n if ('citations' in itemObj) {\r\n delete itemObj.citations\r\n }\r\n }\r\n }\r\n } else if (message.content && typeof message.content === 'object') {\r\n const contentObj = message.content as unknown as Record<\r\n string,\r\n unknown\r\n >\r\n if ('citations' in contentObj) {\r\n delete contentObj.citations\r\n }\r\n }\r\n }\r\n },\r\n },\r\n]\r\n\r\nfunction isRateLimitError(errMsg: string): boolean {\r\n if (!errMsg) return false\r\n const lowerMsg = errMsg.toLowerCase()\r\n return (\r\n lowerMsg.includes('rate limit') ||\r\n lowerMsg.includes('too many requests') ||\r\n lowerMsg.includes('429')\r\n )\r\n}\r\n\r\ninterface ModelFeatures {\r\n usesMaxCompletionTokens: boolean\r\n supportsResponsesAPI?: boolean\r\n requiresTemperatureOne?: boolean\r\n supportsVerbosityControl?: boolean\r\n supportsCustomTools?: boolean\r\n supportsAllowedTools?: boolean\r\n}\r\n\r\nconst MODEL_FEATURES: Record<string, ModelFeatures> = {\r\n o1: { usesMaxCompletionTokens: true },\r\n 'o1-preview': { usesMaxCompletionTokens: true },\r\n 'o1-mini': { usesMaxCompletionTokens: true },\r\n 'o1-pro': { usesMaxCompletionTokens: true },\r\n 'o3-mini': { usesMaxCompletionTokens: true },\r\n 'gpt-5': {\r\n usesMaxCompletionTokens: true,\r\n supportsResponsesAPI: true,\r\n requiresTemperatureOne: true,\r\n supportsVerbosityControl: true,\r\n supportsCustomTools: true,\r\n supportsAllowedTools: true,\r\n },\r\n 'gpt-5-mini': {\r\n usesMaxCompletionTokens: true,\r\n supportsResponsesAPI: true,\r\n requiresTemperatureOne: true,\r\n supportsVerbosityControl: true,\r\n supportsCustomTools: true,\r\n supportsAllowedTools: true,\r\n },\r\n 'gpt-5-nano': {\r\n usesMaxCompletionTokens: true,\r\n supportsResponsesAPI: true,\r\n requiresTemperatureOne: true,\r\n supportsVerbosityControl: true,\r\n supportsCustomTools: true,\r\n supportsAllowedTools: true,\r\n },\r\n 'gpt-5-chat-latest': {\r\n usesMaxCompletionTokens: true,\r\n supportsResponsesAPI: false,\r\n requiresTemperatureOne: true,\r\n supportsVerbosityControl: true,\r\n },\r\n}\r\n\r\nfunction getModelFeatures(modelName: string): ModelFeatures {\r\n if (!modelName || typeof modelName !== 'string') {\r\n return { usesMaxCompletionTokens: false }\r\n }\r\n\r\n if (MODEL_FEATURES[modelName]) {\r\n return MODEL_FEATURES[modelName]\r\n }\r\n\r\n if (modelName.toLowerCase().includes('gpt-5')) {\r\n return {\r\n usesMaxCompletionTokens: true,\r\n supportsResponsesAPI: true,\r\n requiresTemperatureOne: true,\r\n supportsVerbosityControl: true,\r\n supportsCustomTools: true,\r\n supportsAllowedTools: true,\r\n }\r\n }\r\n\r\n for (const [key, features] of Object.entries(MODEL_FEATURES)) {\r\n if (modelName.includes(key)) {\r\n return features\r\n }\r\n }\r\n\r\n return { usesMaxCompletionTokens: false }\r\n}\r\n\r\nfunction applyModelSpecificTransformations(\r\n opts: OpenAI.ChatCompletionCreateParams,\r\n): void {\r\n if (!opts.model || typeof opts.model !== 'string') {\r\n return\r\n }\r\n\r\n const features = getModelFeatures(opts.model)\r\n const isGPT5 = opts.model.toLowerCase().includes('gpt-5')\r\n\r\n if (isGPT5 || features.usesMaxCompletionTokens) {\r\n if ('max_tokens' in opts && !('max_completion_tokens' in opts)) {\r\n debugLogger.api('OPENAI_TRANSFORM_MAX_TOKENS', {\r\n model: opts.model,\r\n from: opts.max_tokens,\r\n })\r\n opts.max_completion_tokens = opts.max_tokens\r\n delete opts.max_tokens\r\n }\r\n\r\n if (features.requiresTemperatureOne && 'temperature' in opts) {\r\n if (opts.temperature !== 1 && opts.temperature !== undefined) {\r\n debugLogger.api('OPENAI_TRANSFORM_TEMPERATURE', {\r\n model: opts.model,\r\n from: opts.temperature,\r\n to: 1,\r\n })\r\n opts.temperature = 1\r\n }\r\n }\r\n\r\n if (isGPT5) {\r\n delete opts.frequency_penalty\r\n delete opts.presence_penalty\r\n delete opts.logit_bias\r\n delete opts.user\r\n\r\n if (!opts.reasoning_effort && features.supportsVerbosityControl) {\r\n opts.reasoning_effort = 'medium'\r\n }\r\n }\r\n }\r\n\r\n else {\r\n if (\r\n features.usesMaxCompletionTokens &&\r\n 'max_tokens' in opts &&\r\n !('max_completion_tokens' in opts)\r\n ) {\r\n opts.max_completion_tokens = opts.max_tokens\r\n delete opts.max_tokens\r\n }\r\n }\r\n\r\n}\r\n\r\nasync function applyModelErrorFixes(\r\n opts: OpenAI.ChatCompletionCreateParams,\r\n baseURL: string,\r\n) {\r\n const isGPT5 = opts.model.startsWith('gpt-5')\r\n const handlers = isGPT5\r\n ? [...GPT5_ERROR_HANDLERS, ...ERROR_HANDLERS]\r\n : ERROR_HANDLERS\r\n\r\n for (const handler of handlers) {\r\n if (hasModelError(baseURL, opts.model, handler.type)) {\r\n await handler.fix(opts)\r\n return\r\n }\r\n }\r\n}\r\n\r\nasync function tryWithEndpointFallback(\r\n baseURL: string,\r\n opts: OpenAI.ChatCompletionCreateParams,\r\n headers: Record<string, string>,\r\n provider: string,\r\n proxy: any,\r\n signal?: AbortSignal,\r\n): Promise<{ response: Response; endpoint: string }> {\r\n const endpointsToTry = []\r\n\r\n if (provider === 'minimax') {\r\n endpointsToTry.push('/text/chatcompletion_v2', '/chat/completions')\r\n } else {\r\n endpointsToTry.push('/chat/completions')\r\n }\r\n\r\n let lastError = null\r\n\r\n for (const endpoint of endpointsToTry) {\r\n try {\r\n const response = await fetch(`${baseURL}${endpoint}`, {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(opts.stream ? { ...opts, stream: true } : opts),\r\n dispatcher: proxy,\r\n signal: signal,\r\n })\r\n\r\n if (response.ok) {\r\n return { response, endpoint }\r\n }\r\n\r\n if (response.status === 404 && endpointsToTry.length > 1) {\r\n debugLogger.api('OPENAI_ENDPOINT_FALLBACK', {\r\n endpoint,\r\n status: 404,\r\n reason: 'not_found',\r\n })\r\n continue\r\n }\r\n\r\n return { response, endpoint }\r\n } catch (error) {\r\n lastError = error\r\n if (endpointsToTry.indexOf(endpoint) < endpointsToTry.length - 1) {\r\n debugLogger.api('OPENAI_ENDPOINT_FALLBACK', {\r\n endpoint,\r\n reason: 'network_error',\r\n error: error instanceof Error ? error.message : String(error),\r\n })\r\n continue\r\n }\r\n }\r\n }\r\n\r\n throw lastError || new Error('All endpoints failed')\r\n}\r\n\r\nexport {\r\n getGPT5CompletionWithProfile,\r\n getModelFeatures,\r\n applyModelSpecificTransformations,\r\n}\r\n\r\nexport async function getCompletionWithProfile(\r\n modelProfile: any,\r\n opts: OpenAI.ChatCompletionCreateParams,\r\n attempt: number = 0,\r\n maxAttempts: number = 10,\r\n signal?: AbortSignal,\r\n): Promise<OpenAI.ChatCompletion | AsyncIterable<OpenAI.ChatCompletionChunk>> {\r\n if (attempt >= maxAttempts) {\r\n throw new Error('Max attempts reached')\r\n }\r\n\r\n const provider = modelProfile?.provider || 'anthropic'\r\n const baseURL = modelProfile?.baseURL\r\n const apiKey = modelProfile?.apiKey\r\n const proxy = getGlobalConfig().proxy\r\n ? new ProxyAgent(getGlobalConfig().proxy)\r\n : undefined\r\n\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n }\r\n\r\n if (apiKey) {\r\n if (provider === 'azure') {\r\n headers['api-key'] = apiKey\r\n } else {\r\n headers['Authorization'] = `Bearer ${apiKey}`\r\n }\r\n }\r\n\r\n applyModelSpecificTransformations(opts)\r\n await applyModelErrorFixes(opts, baseURL || '')\r\n\r\n debugLogger.api('OPENAI_API_CALL_START', {\r\n endpoint: baseURL || 'DEFAULT_OPENAI',\r\n model: opts.model,\r\n provider,\r\n apiKeyConfigured: !!apiKey,\r\n apiKeyPrefix: apiKey ? apiKey.substring(0, 8) : null,\r\n maxTokens: opts.max_tokens,\r\n temperature: opts.temperature,\r\n messageCount: opts.messages?.length || 0,\r\n streamMode: opts.stream,\r\n timestamp: new Date().toISOString(),\r\n modelProfileModelName: modelProfile?.modelName,\r\n modelProfileName: modelProfile?.name,\r\n })\r\n\r\n opts.messages = opts.messages.map(msg => {\r\n if (msg.role === 'tool') {\r\n if (Array.isArray(msg.content)) {\r\n return {\r\n ...msg,\r\n content:\r\n msg.content\r\n .map(c => c.text || '')\r\n .filter(Boolean)\r\n .join('\\n\\n') || '(empty content)',\r\n }\r\n } else if (typeof msg.content !== 'string') {\r\n return {\r\n ...msg,\r\n content:\r\n typeof msg.content === 'undefined'\r\n ? '(empty content)'\r\n : JSON.stringify(msg.content),\r\n }\r\n }\r\n }\r\n return msg\r\n })\r\n\r\n const azureApiVersion = '2024-06-01'\r\n let endpoint = '/chat/completions'\r\n\r\n if (provider === 'azure') {\r\n endpoint = `/chat/completions?api-version=${azureApiVersion}`\r\n } else if (provider === 'minimax') {\r\n endpoint = '/text/chatcompletion_v2'\r\n }\r\n\r\n try {\r\n if (opts.stream) {\r\n const isOpenAICompatible = [\r\n 'minimax',\r\n 'kimi',\r\n 'deepseek',\r\n 'siliconflow',\r\n 'qwen',\r\n 'glm',\r\n 'glm-coding',\r\n 'baidu-qianfan',\r\n 'openai',\r\n 'mistral',\r\n 'xai',\r\n 'groq',\r\n 'custom-openai',\r\n ].includes(provider)\r\n\r\n let response: Response\r\n let usedEndpoint: string\r\n\r\n if (isOpenAICompatible && provider !== 'azure') {\r\n const result = await tryWithEndpointFallback(\r\n baseURL,\r\n opts,\r\n headers,\r\n provider,\r\n proxy,\r\n signal,\r\n )\r\n response = result.response\r\n usedEndpoint = result.endpoint\r\n } else {\r\n response = await fetch(`${baseURL}${endpoint}`, {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify({ ...opts, stream: true }),\r\n dispatcher: proxy,\r\n signal: signal,\r\n })\r\n usedEndpoint = endpoint\r\n }\r\n\r\n if (!response.ok) {\r\n if (signal?.aborted) {\r\n throw new Error('Request cancelled by user')\r\n }\r\n\r\n try {\r\n const errorData = await response.json()\r\n const hasError = (\r\n data: unknown,\r\n ): data is { error?: { message?: string }; message?: string } => {\r\n return typeof data === 'object' && data !== null\r\n }\r\n const errorMessage = hasError(errorData)\r\n ? errorData.error?.message ||\r\n errorData.message ||\r\n `HTTP ${response.status}`\r\n : `HTTP ${response.status}`\r\n\r\n const isGPT5 = opts.model.startsWith('gpt-5')\r\n const handlers = isGPT5\r\n ? [...GPT5_ERROR_HANDLERS, ...ERROR_HANDLERS]\r\n : ERROR_HANDLERS\r\n\r\n for (const handler of handlers) {\r\n if (handler.detect(errorMessage)) {\r\n debugLogger.api('OPENAI_MODEL_ERROR_DETECTED', {\r\n model: opts.model,\r\n type: handler.type,\r\n errorMessage,\r\n status: response.status,\r\n })\r\n\r\n setModelError(\r\n baseURL || '',\r\n opts.model,\r\n handler.type,\r\n errorMessage,\r\n )\r\n\r\n await handler.fix(opts)\r\n debugLogger.api('OPENAI_MODEL_ERROR_FIXED', {\r\n model: opts.model,\r\n type: handler.type,\r\n })\r\n\r\n return getCompletionWithProfile(\r\n modelProfile,\r\n opts,\r\n attempt + 1,\r\n maxAttempts,\r\n signal,\r\n )\r\n }\r\n }\r\n\r\n debugLogger.warn('OPENAI_API_ERROR_UNHANDLED', {\r\n model: opts.model,\r\n status: response.status,\r\n errorMessage,\r\n })\r\n\r\n logAPIError({\r\n model: opts.model,\r\n endpoint: `${baseURL}${endpoint}`,\r\n status: response.status,\r\n error: errorMessage,\r\n request: opts,\r\n response: errorData,\r\n provider: provider,\r\n })\r\n } catch (parseError) {\r\n debugLogger.warn('OPENAI_API_ERROR_PARSE_FAILED', {\r\n model: opts.model,\r\n status: response.status,\r\n error: parseError instanceof Error ? parseError.message : String(parseError),\r\n })\r\n\r\n logAPIError({\r\n model: opts.model,\r\n endpoint: `${baseURL}${endpoint}`,\r\n status: response.status,\r\n error: `Could not parse error response: ${parseError.message}`,\r\n request: opts,\r\n response: { parseError: parseError.message },\r\n provider: provider,\r\n })\r\n }\r\n\r\n const delayMs = getRetryDelay(attempt)\r\n debugLogger.warn('OPENAI_API_RETRY', {\r\n model: opts.model,\r\n status: response.status,\r\n attempt: attempt + 1,\r\n maxAttempts,\r\n delayMs,\r\n })\r\n try {\r\n await abortableDelay(delayMs, signal)\r\n } catch (error) {\r\n if (error.message === 'Request was aborted') {\r\n throw new Error('Request cancelled by user')\r\n }\r\n throw error\r\n }\r\n return getCompletionWithProfile(\r\n modelProfile,\r\n opts,\r\n attempt + 1,\r\n maxAttempts,\r\n signal,\r\n )\r\n }\r\n\r\n const stream = createStreamProcessor(response.body as any, signal)\r\n return stream\r\n }\r\n\r\n const isOpenAICompatible = [\r\n 'minimax',\r\n 'kimi',\r\n 'deepseek',\r\n 'siliconflow',\r\n 'qwen',\r\n 'glm',\r\n 'baidu-qianfan',\r\n 'openai',\r\n 'mistral',\r\n 'xai',\r\n 'groq',\r\n 'custom-openai',\r\n ].includes(provider)\r\n\r\n let response: Response\r\n let usedEndpoint: string\r\n\r\n if (isOpenAICompatible && provider !== 'azure') {\r\n const result = await tryWithEndpointFallback(\r\n baseURL,\r\n opts,\r\n headers,\r\n provider,\r\n proxy,\r\n signal,\r\n )\r\n response = result.response\r\n usedEndpoint = result.endpoint\r\n } else {\r\n response = await fetch(`${baseURL}${endpoint}`, {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(opts),\r\n dispatcher: proxy,\r\n signal: signal,\r\n })\r\n usedEndpoint = endpoint\r\n }\r\n\r\n if (!response.ok) {\r\n if (signal?.aborted) {\r\n throw new Error('Request cancelled by user')\r\n }\r\n\r\n try {\r\n const errorData = await response.json()\r\n const hasError = (\r\n data: unknown,\r\n ): data is { error?: { message?: string }; message?: string } => {\r\n return typeof data === 'object' && data !== null\r\n }\r\n const errorMessage = hasError(errorData)\r\n ? errorData.error?.message ||\r\n errorData.message ||\r\n `HTTP ${response.status}`\r\n : `HTTP ${response.status}`\r\n\r\n const isGPT5 = opts.model.startsWith('gpt-5')\r\n const handlers = isGPT5\r\n ? [...GPT5_ERROR_HANDLERS, ...ERROR_HANDLERS]\r\n : ERROR_HANDLERS\r\n\r\n for (const handler of handlers) {\r\n if (handler.detect(errorMessage)) {\r\n debugLogger.api('OPENAI_MODEL_ERROR_DETECTED', {\r\n model: opts.model,\r\n type: handler.type,\r\n errorMessage,\r\n status: response.status,\r\n })\r\n\r\n setModelError(baseURL || '', opts.model, handler.type, errorMessage)\r\n\r\n await handler.fix(opts)\r\n debugLogger.api('OPENAI_MODEL_ERROR_FIXED', {\r\n model: opts.model,\r\n type: handler.type,\r\n })\r\n\r\n return getCompletionWithProfile(\r\n modelProfile,\r\n opts,\r\n attempt + 1,\r\n maxAttempts,\r\n signal,\r\n )\r\n }\r\n }\r\n\r\n debugLogger.warn('OPENAI_API_ERROR_UNHANDLED', {\r\n model: opts.model,\r\n status: response.status,\r\n errorMessage,\r\n })\r\n } catch (parseError) {\r\n debugLogger.warn('OPENAI_API_ERROR_PARSE_FAILED', {\r\n model: opts.model,\r\n status: response.status,\r\n error: parseError instanceof Error ? parseError.message : String(parseError),\r\n })\r\n }\r\n\r\n const delayMs = getRetryDelay(attempt)\r\n debugLogger.warn('OPENAI_API_RETRY', {\r\n model: opts.model,\r\n status: response.status,\r\n attempt: attempt + 1,\r\n maxAttempts,\r\n delayMs,\r\n })\r\n try {\r\n await abortableDelay(delayMs, signal)\r\n } catch (error) {\r\n if (error.message === 'Request was aborted') {\r\n throw new Error('Request cancelled by user')\r\n }\r\n throw error\r\n }\r\n return getCompletionWithProfile(\r\n modelProfile,\r\n opts,\r\n attempt + 1,\r\n maxAttempts,\r\n signal,\r\n )\r\n }\r\n\r\n const responseData = (await response.json()) as OpenAI.ChatCompletion\r\n return responseData\r\n } catch (error) {\r\n if (signal?.aborted) {\r\n throw new Error('Request cancelled by user')\r\n }\r\n\r\n if (attempt < maxAttempts) {\r\n if (signal?.aborted) {\r\n throw new Error('Request cancelled by user')\r\n }\r\n\r\n const delayMs = getRetryDelay(attempt)\r\n debugLogger.warn('OPENAI_NETWORK_RETRY', {\r\n model: opts.model,\r\n attempt: attempt + 1,\r\n maxAttempts,\r\n delayMs,\r\n error: error instanceof Error ? error.message : String(error),\r\n })\r\n try {\r\n await abortableDelay(delayMs, signal)\r\n } catch (error) {\r\n if (error.message === 'Request was aborted') {\r\n throw new Error('Request cancelled by user')\r\n }\r\n throw error\r\n }\r\n return getCompletionWithProfile(\r\n modelProfile,\r\n opts,\r\n attempt + 1,\r\n maxAttempts,\r\n signal,\r\n )\r\n }\r\n throw error\r\n }\r\n}\r\n\r\nexport function createStreamProcessor(\r\n stream: any,\r\n signal?: AbortSignal,\r\n): AsyncGenerator<OpenAI.ChatCompletionChunk, void, unknown> {\r\n if (!stream) {\r\n throw new Error('Stream is null or undefined')\r\n }\r\n\r\n return (async function* () {\r\n const reader = stream.getReader()\r\n const decoder = new TextDecoder('utf-8')\r\n let buffer = ''\r\n\r\n try {\r\n while (true) {\r\n if (signal?.aborted) {\r\n break\r\n }\r\n\r\n let readResult\r\n try {\r\n readResult = await reader.read()\r\n } catch (e) {\r\n if (signal?.aborted) {\r\n break\r\n }\r\n debugLogger.warn('OPENAI_STREAM_READ_ERROR', {\r\n error: e instanceof Error ? e.message : String(e),\r\n })\r\n break\r\n }\r\n\r\n const { done, value } = readResult\r\n if (done) {\r\n break\r\n }\r\n\r\n const chunk = decoder.decode(value, { stream: true })\r\n buffer += chunk\r\n\r\n let lineEnd = buffer.indexOf('\\n')\r\n while (lineEnd !== -1) {\r\n const line = buffer.substring(0, lineEnd).trim()\r\n buffer = buffer.substring(lineEnd + 1)\r\n\r\n if (line === 'data: [DONE]') {\r\n continue\r\n }\r\n\r\n if (line.startsWith('data: ')) {\r\n const data = line.slice(6).trim()\r\n if (!data) continue\r\n\r\n try {\r\n const parsed = JSON.parse(data) as OpenAI.ChatCompletionChunk\r\n yield parsed\r\n } catch (e) {\r\n debugLogger.warn('OPENAI_STREAM_JSON_PARSE_ERROR', {\r\n data,\r\n error: e instanceof Error ? e.message : String(e),\r\n })\r\n }\r\n }\r\n\r\n lineEnd = buffer.indexOf('\\n')\r\n }\r\n }\r\n\r\n if (buffer.trim()) {\r\n const lines = buffer.trim().split('\\n')\r\n for (const line of lines) {\r\n if (line.startsWith('data: ') && line !== 'data: [DONE]') {\r\n const data = line.slice(6).trim()\r\n if (!data) continue\r\n\r\n try {\r\n const parsed = JSON.parse(data) as OpenAI.ChatCompletionChunk\r\n yield parsed\r\n } catch (e) {\r\n debugLogger.warn('OPENAI_STREAM_FINAL_JSON_PARSE_ERROR', {\r\n data,\r\n error: e instanceof Error ? e.message : String(e),\r\n })\r\n }\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n debugLogger.warn('OPENAI_STREAM_UNEXPECTED_ERROR', {\r\n error: e instanceof Error ? e.message : String(e),\r\n })\r\n } finally {\r\n try {\r\n reader.releaseLock()\r\n } catch (e) {\r\n debugLogger.warn('OPENAI_STREAM_RELEASE_LOCK_ERROR', {\r\n error: e instanceof Error ? e.message : String(e),\r\n })\r\n }\r\n }\r\n })()\r\n}\r\n\r\nexport function streamCompletion(\r\n stream: any,\r\n signal?: AbortSignal,\r\n): AsyncGenerator<OpenAI.ChatCompletionChunk, void, unknown> {\r\n return createStreamProcessor(stream, signal)\r\n}\r\n\r\nexport async function callGPT5ResponsesAPI(\r\n modelProfile: any,\r\n request: any,\r\n signal?: AbortSignal,\r\n): Promise<any> {\r\n const baseURL = modelProfile?.baseURL || 'https://api.openai.com/v1'\r\n const apiKey = modelProfile?.apiKey\r\n const proxy = getGlobalConfig().proxy\r\n ? new ProxyAgent(getGlobalConfig().proxy)\r\n : undefined\r\n\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${apiKey}`,\r\n }\r\n\r\n const responsesParams = request\r\n\r\n try {\r\n const response = await fetch(`${baseURL}/responses`, {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(responsesParams),\r\n dispatcher: proxy,\r\n signal: signal,\r\n })\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text()\r\n throw new Error(\r\n `GPT-5 Responses API error: ${response.status} ${response.statusText} - ${errorText}`,\r\n )\r\n }\r\n\r\n return response\r\n } catch (error) {\r\n if (signal?.aborted) {\r\n throw new Error('Request cancelled by user')\r\n }\r\n throw error\r\n }\r\n}\r\n\r\nfunction convertResponsesAPIToChatCompletion(responsesData: any): any {\r\n let outputText = responsesData.output_text || ''\r\n const usage = responsesData.usage || {}\r\n\r\n if (responsesData.output && Array.isArray(responsesData.output)) {\r\n const reasoningItems = responsesData.output.filter(\r\n item => item.type === 'reasoning' && item.summary,\r\n )\r\n const messageItems = responsesData.output.filter(\r\n item => item.type === 'message',\r\n )\r\n\r\n if (reasoningItems.length > 0 && messageItems.length > 0) {\r\n const reasoningSummary = reasoningItems\r\n .map(item => item.summary?.map(s => s.text).join('\\n'))\r\n .filter(Boolean)\r\n .join('\\n\\n')\r\n\r\n const mainContent = messageItems\r\n .map(item => item.content?.map(c => c.text).join('\\n'))\r\n .filter(Boolean)\r\n .join('\\n\\n')\r\n\r\n if (reasoningSummary) {\r\n outputText = `**\uD83E\uDDE0 Reasoning Process:**\\n${reasoningSummary}\\n\\n**\uD83D\uDCDD Response:**\\n${mainContent}`\r\n } else {\r\n outputText = mainContent\r\n }\r\n }\r\n }\r\n\r\n return {\r\n id: responsesData.id || `chatcmpl-${Date.now()}`,\r\n object: 'chat.completion',\r\n created: Math.floor(Date.now() / 1000),\r\n model: responsesData.model || '',\r\n choices: [\r\n {\r\n index: 0,\r\n message: {\r\n role: 'assistant',\r\n content: outputText,\r\n ...(responsesData.reasoning && {\r\n reasoning: {\r\n effort: responsesData.reasoning.effort,\r\n summary: responsesData.reasoning.summary,\r\n },\r\n }),\r\n },\r\n finish_reason: responsesData.status === 'completed' ? 'stop' : 'length',\r\n },\r\n ],\r\n usage: {\r\n prompt_tokens: usage.input_tokens || 0,\r\n completion_tokens: usage.output_tokens || 0,\r\n total_tokens: (usage.input_tokens || 0) + (usage.output_tokens || 0),\r\n prompt_tokens_details: {\r\n cached_tokens: usage.input_tokens_details?.cached_tokens || 0,\r\n },\r\n completion_tokens_details: {\r\n reasoning_tokens: usage.output_tokens_details?.reasoning_tokens || 0,\r\n },\r\n },\r\n }\r\n}\r\n\r\nasync function getGPT5CompletionWithProfile(\r\n modelProfile: any,\r\n opts: OpenAI.ChatCompletionCreateParams,\r\n attempt: number = 0,\r\n maxAttempts: number = 10,\r\n signal?: AbortSignal,\r\n): Promise<OpenAI.ChatCompletion | AsyncIterable<OpenAI.ChatCompletionChunk>> {\r\n const features = getModelFeatures(opts.model)\r\n const isOfficialOpenAI =\r\n !modelProfile.baseURL || modelProfile.baseURL.includes('api.openai.com')\r\n\r\n if (!isOfficialOpenAI) {\r\n debugLogger.api('GPT5_THIRD_PARTY_PROVIDER', {\r\n model: opts.model,\r\n baseURL: modelProfile.baseURL,\r\n provider: modelProfile.provider,\r\n supportsResponsesAPI: features.supportsResponsesAPI,\r\n requestId: getCurrentRequest()?.id,\r\n })\r\n\r\n debugLogger.api('GPT5_PROVIDER_THIRD_PARTY_NOTICE', {\r\n model: opts.model,\r\n provider: modelProfile.provider,\r\n baseURL: modelProfile.baseURL,\r\n })\r\n\r\n if (modelProfile.provider === 'azure') {\r\n delete opts.reasoning_effort\r\n } else if (modelProfile.provider === 'custom-openai') {\r\n debugLogger.api('GPT5_CUSTOM_PROVIDER_OPTIMIZATIONS', {\r\n model: opts.model,\r\n provider: modelProfile.provider,\r\n })\r\n }\r\n }\r\n\r\n else if (opts.stream) {\r\n debugLogger.api('GPT5_STREAMING_MODE', {\r\n model: opts.model,\r\n baseURL: modelProfile.baseURL || 'official',\r\n reason: 'responses_api_no_streaming',\r\n requestId: getCurrentRequest()?.id,\r\n })\r\n\r\n debugLogger.api('GPT5_STREAMING_FALLBACK_TO_CHAT_COMPLETIONS', {\r\n model: opts.model,\r\n reason: 'responses_api_no_streaming',\r\n })\r\n }\r\n\r\n debugLogger.api('USING_CHAT_COMPLETIONS_FOR_GPT5', {\r\n model: opts.model,\r\n baseURL: modelProfile.baseURL || 'official',\r\n provider: modelProfile.provider,\r\n reason: isOfficialOpenAI ? 'streaming_or_fallback' : 'third_party_provider',\r\n requestId: getCurrentRequest()?.id,\r\n })\r\n\r\n return await getCompletionWithProfile(\r\n modelProfile,\r\n opts,\r\n attempt,\r\n maxAttempts,\r\n signal,\r\n )\r\n}\r\n\r\nexport async function fetchCustomModels(\r\n baseURL: string,\r\n apiKey: string,\r\n): Promise<any[]> {\r\n try {\r\n const hasVersionNumber = /\\/v\\d+/.test(baseURL)\r\n const cleanBaseURL = baseURL.replace(/\\/+$/, '')\r\n const modelsURL = hasVersionNumber\r\n ? `${cleanBaseURL}/models`\r\n : `${cleanBaseURL}/v1/models`\r\n\r\n const response = await fetch(modelsURL, {\r\n method: 'GET',\r\n headers: {\r\n Authorization: `Bearer ${apiKey}`,\r\n 'Content-Type': 'application/json',\r\n },\r\n })\r\n\r\n if (!response.ok) {\r\n if (response.status === 401) {\r\n throw new Error(\r\n 'Invalid API key. Please check your API key and try again.',\r\n )\r\n } else if (response.status === 403) {\r\n throw new Error(\r\n 'API key does not have permission to access models. Please check your API key permissions.',\r\n )\r\n } else if (response.status === 404) {\r\n throw new Error(\r\n 'API endpoint not found. Please check if the base URL is correct and supports the /models endpoint.',\r\n )\r\n } else if (response.status === 429) {\r\n throw new Error(\r\n 'Too many requests. Please wait a moment and try again.',\r\n )\r\n } else if (response.status >= 500) {\r\n throw new Error(\r\n 'API service is temporarily unavailable. Please try again later.',\r\n )\r\n } else {\r\n throw new Error(\r\n `Unable to connect to API (${response.status}). Please check your base URL, API key, and internet connection.`,\r\n )\r\n }\r\n }\r\n\r\n const data = await response.json()\r\n\r\n const hasDataArray = (obj: unknown): obj is { data: unknown[] } => {\r\n return (\r\n typeof obj === 'object' &&\r\n obj !== null &&\r\n 'data' in obj &&\r\n Array.isArray((obj as any).data)\r\n )\r\n }\r\n\r\n const hasModelsArray = (obj: unknown): obj is { models: unknown[] } => {\r\n return (\r\n typeof obj === 'object' &&\r\n obj !== null &&\r\n 'models' in obj &&\r\n Array.isArray((obj as any).models)\r\n )\r\n }\r\n\r\n let models = []\r\n\r\n if (hasDataArray(data)) {\r\n models = data.data\r\n } else if (Array.isArray(data)) {\r\n models = data\r\n } else if (hasModelsArray(data)) {\r\n models = data.models\r\n } else {\r\n throw new Error(\r\n 'API returned unexpected response format. Expected an array of models or an object with a \"data\" or \"models\" array.',\r\n )\r\n }\r\n\r\n if (!Array.isArray(models)) {\r\n throw new Error('API response format error: models data is not an array.')\r\n }\r\n\r\n return models\r\n } catch (error) {\r\n if (\r\n error instanceof Error &&\r\n (error.message.includes('API key') ||\r\n error.message.includes('API endpoint') ||\r\n error.message.includes('API service') ||\r\n error.message.includes('response format'))\r\n ) {\r\n throw error\r\n }\r\n\r\n debugLogger.warn('CUSTOM_API_MODELS_FETCH_FAILED', {\r\n baseURL,\r\n error: error instanceof Error ? error.message : String(error),\r\n })\r\n\r\n if (error instanceof Error && error.message.includes('fetch')) {\r\n throw new Error(\r\n 'Unable to connect to the API. Please check the base URL and your internet connection.',\r\n )\r\n }\r\n\r\n throw new Error(\r\n 'Failed to fetch models from custom API. Please check your configuration and try again.',\r\n )\r\n }\r\n}\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["isOpenAICompatible", "response", "usedEndpoint", "error"]
|
|
7
7
|
}
|
|
@@ -2,7 +2,7 @@ import { createRequire as __newcrawCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __newcrawCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
getSessionProjectDir
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-KJTPUTU7.js";
|
|
6
6
|
import {
|
|
7
7
|
isUuid
|
|
8
8
|
} from "./chunk-JX5ZQYTQ.js";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { createRequire as __newcrawCreateRequire } from "node:module";
|
|
2
|
+
const require = __newcrawCreateRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
__esm
|
|
5
|
+
} from "./chunk-D4OZACS2.js";
|
|
6
|
+
|
|
7
|
+
// src/utils/text/errors.ts
|
|
8
|
+
var MalformedCommandError, AbortError, ConfigParseError;
|
|
9
|
+
var init_errors = __esm({
|
|
10
|
+
"src/utils/text/errors.ts"() {
|
|
11
|
+
MalformedCommandError = class extends TypeError {
|
|
12
|
+
};
|
|
13
|
+
AbortError = class extends Error {
|
|
14
|
+
};
|
|
15
|
+
ConfigParseError = class extends Error {
|
|
16
|
+
filePath;
|
|
17
|
+
defaultConfig;
|
|
18
|
+
constructor(message, filePath, defaultConfig) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.name = "ConfigParseError";
|
|
21
|
+
this.filePath = filePath;
|
|
22
|
+
this.defaultConfig = defaultConfig;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export {
|
|
29
|
+
MalformedCommandError,
|
|
30
|
+
AbortError,
|
|
31
|
+
ConfigParseError,
|
|
32
|
+
init_errors
|
|
33
|
+
};
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/utils/text/errors.ts"],
|
|
4
4
|
"sourcesContent": ["export class MalformedCommandError extends TypeError {}\r\n\r\nexport class DeprecatedCommandError extends Error {}\r\n\r\nexport class AbortError extends Error {}\r\n\r\nexport class ConfigParseError extends Error {\r\n filePath: string\r\n defaultConfig: unknown\r\n\r\n constructor(message: string, filePath: string, defaultConfig: unknown) {\r\n super(message)\r\n this.name = 'ConfigParseError'\r\n this.filePath = filePath\r\n this.defaultConfig = defaultConfig\r\n }\r\n}\r\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;AAAA,IAAa,uBAIA,YAEA;AANb;AAAA;AAAO,IAAM,wBAAN,cAAoC,UAAU;AAAA,IAAC;AAI/C,IAAM,aAAN,cAAyB,MAAM;AAAA,IAAC;AAEhC,IAAM,mBAAN,cAA+B,MAAM;AAAA,MAC1C;AAAA,MACA;AAAA,MAEA,YAAY,SAAiB,UAAkB,eAAwB;AACrE,cAAM,OAAO;AACb,aAAK,OAAO;AACZ,aAAK,WAAW;AAChB,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
import { createRequire as __newcrawCreateRequire } from "node:module";
|
|
2
2
|
const require = __newcrawCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
|
-
PRODUCT_NAME,
|
|
5
4
|
execFileNoThrow,
|
|
5
|
+
init_execFileNoThrow,
|
|
6
|
+
init_log,
|
|
6
7
|
logError
|
|
7
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-XYQZLDRB.js";
|
|
9
|
+
import {
|
|
10
|
+
PRODUCT_NAME,
|
|
11
|
+
init_product
|
|
12
|
+
} from "./chunk-UYWZQVH5.js";
|
|
8
13
|
import {
|
|
9
|
-
MACRO
|
|
10
|
-
|
|
14
|
+
MACRO,
|
|
15
|
+
init_macros
|
|
16
|
+
} from "./chunk-EHQ2M5B4.js";
|
|
11
17
|
|
|
12
18
|
// src/utils/session/autoUpdater.ts
|
|
19
|
+
init_execFileNoThrow();
|
|
20
|
+
init_log();
|
|
21
|
+
init_macros();
|
|
22
|
+
init_product();
|
|
13
23
|
async function getSemver() {
|
|
14
24
|
const mod = await import("semver");
|
|
15
25
|
return mod?.default ?? mod;
|
|
@@ -82,7 +92,7 @@ async function checkAndNotifyUpdate() {
|
|
|
82
92
|
const [
|
|
83
93
|
{ isAutoUpdaterDisabled, getGlobalConfig, saveGlobalConfig },
|
|
84
94
|
{ env }
|
|
85
|
-
] = await Promise.all([import("./config-
|
|
95
|
+
] = await Promise.all([import("./config-DQEFVW3Y.js"), import("./env-ZOPEXWMF.js")]);
|
|
86
96
|
if (await isAutoUpdaterDisabled()) return;
|
|
87
97
|
if (await env.getIsDocker()) return;
|
|
88
98
|
if (!await env.hasInternetAccess()) return;
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/utils/session/autoUpdater.ts"],
|
|
4
4
|
"sourcesContent": ["import { execFileNoThrow } from '@utils/system/execFileNoThrow'\r\nimport { logError } from '@utils/log'\r\n\r\nimport { MACRO } from '@constants/macros'\r\nimport { PRODUCT_NAME } from '@constants/product'\r\n\r\nasync function getSemver() {\r\n const mod: any = await import('semver')\r\n return (mod?.default ?? mod) as {\r\n lt: (a: string, b: string) => boolean\r\n gt: (a: string, b: string) => boolean\r\n }\r\n}\r\n\r\nexport type VersionConfig = {\r\n minVersion: string\r\n}\r\n\r\nexport async function assertMinVersion(): Promise<void> {\r\n try {\r\n const versionConfig: VersionConfig = { minVersion: '0.0.0' }\r\n if (versionConfig.minVersion) {\r\n const { lt } = await getSemver()\r\n if (!lt(MACRO.VERSION, versionConfig.minVersion)) return\r\n\r\n const suggestions = await getUpdateCommandSuggestions()\r\n process.stderr.write(\r\n `Your ${PRODUCT_NAME} version ${MACRO.VERSION} is below the minimum supported ${versionConfig.minVersion}.\\n` +\r\n 'Update using one of:\\n' +\r\n suggestions.map(c => ` ${c}`).join('\\n') +\r\n '\\n',\r\n )\r\n process.exit(1)\r\n }\r\n } catch (error) {\r\n logError(`Error checking minimum version: ${error}`)\r\n }\r\n}\r\n\r\nexport async function getLatestVersion(): Promise<string | null> {\r\n try {\r\n const abortController = new AbortController()\r\n setTimeout(() => abortController.abort(), 5000)\r\n const result = await execFileNoThrow(\r\n 'npm',\r\n ['view', MACRO.PACKAGE_URL, 'version'],\r\n abortController.signal,\r\n )\r\n if (result.code === 0) {\r\n const v = result.stdout.trim()\r\n if (v) return v\r\n }\r\n } catch {}\r\n\r\n\t try {\r\n\t const controller = new AbortController()\r\n\t const timer = setTimeout(() => controller.abort(), 5000)\r\n\t const res = await fetch(\r\n\t `https://registry.npmjs.org/${encodeURIComponent(MACRO.PACKAGE_URL)}`,\r\n\t {\r\n\t method: 'GET',\r\n\t headers: {\r\n\t Accept: 'application/vnd.npm.install-v1+json',\r\n\t 'User-Agent': `${PRODUCT_NAME}/${MACRO.VERSION}`,\r\n\t },\r\n\t signal: controller.signal,\r\n\t },\r\n\t )\r\n\t clearTimeout(timer)\r\n\t if (!res.ok) return null\r\n\t const json: any = await res.json().catch(() => null)\r\n\t const latest = json && json['dist-tags'] && json['dist-tags'].latest\r\n\t return typeof latest === 'string' ? latest : null\r\n\t } catch {\r\n\t return null\r\n\t }\r\n\t}\r\n\r\nexport async function getUpdateCommandSuggestions(): Promise<string[]> {\r\n return [\r\n `bun add -g ${MACRO.PACKAGE_URL}@latest`,\r\n `npm install -g ${MACRO.PACKAGE_URL}@latest`,\r\n ]\r\n}\r\n\r\nexport async function checkAndNotifyUpdate(): Promise<void> {\r\n try {\r\n if (process.env.NODE_ENV === 'test') return\r\n const [\r\n { isAutoUpdaterDisabled, getGlobalConfig, saveGlobalConfig },\r\n { env },\r\n ] = await Promise.all([import('@utils/config'), import('@utils/config/env')])\r\n if (await isAutoUpdaterDisabled()) return\r\n if (await env.getIsDocker()) return\r\n if (!(await env.hasInternetAccess())) return\r\n\r\n const config: any = getGlobalConfig()\r\n const now = Date.now()\r\n const DAY_MS = 24 * 60 * 60 * 1000\r\n const lastCheck = Number(config.lastUpdateCheckAt || 0)\r\n if (lastCheck && now - lastCheck < DAY_MS) return\r\n\r\n const latest = await getLatestVersion()\r\n if (!latest) {\r\n saveGlobalConfig({ ...config, lastUpdateCheckAt: now })\r\n return\r\n }\r\n\r\n const { gt } = await getSemver()\r\n if (gt(latest, MACRO.VERSION)) {\r\n saveGlobalConfig({\r\n ...config,\r\n lastUpdateCheckAt: now,\r\n lastSuggestedVersion: latest,\r\n })\r\n const suggestions = await getUpdateCommandSuggestions()\r\n process.stderr.write(\r\n [\r\n `New version available: ${latest} (current: ${MACRO.VERSION})`,\r\n 'Run the following command to update:',\r\n ...suggestions.map(command => ` ${command}`),\r\n '',\r\n ].join('\\n'),\r\n )\r\n } else {\r\n saveGlobalConfig({ ...config, lastUpdateCheckAt: now })\r\n }\r\n } catch (error) {\r\n logError(`update-notify: ${error}`)\r\n }\r\n}\r\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|