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/core/config/schema.ts", "../src/core/config/defaults.ts", "../src/utils/text/json.ts", "../src/core/config/migrations.ts", "../src/core/config/loader.ts", "../src/core/config/validator.ts", "../src/core/config/index.ts", "../src/utils/config/index.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ThemeNames } from '@utils/theme'\r\n\r\nexport type McpStdioServerConfig = {\r\n type?: 'stdio'\r\n command: string\r\n args: string[]\r\n env?: Record<string, string>\r\n}\r\n\r\nexport type McpSSEServerConfig = {\r\n type: 'sse'\r\n url: string\r\n headers?: Record<string, string>\r\n headersHelper?: string\r\n}\r\n\r\nexport type McpHttpServerConfig = {\r\n type: 'http'\r\n url: string\r\n headers?: Record<string, string>\r\n headersHelper?: string\r\n}\r\n\r\nexport type McpSSEIdeServerConfig = {\r\n type: 'sse-ide'\r\n url: string\r\n ideName: string\r\n ideRunningInWindows?: boolean\r\n headers?: Record<string, string>\r\n headersHelper?: string\r\n}\r\n\r\nexport type McpWsServerConfig = {\r\n type: 'ws'\r\n url: string\r\n}\r\n\r\nexport type McpWsIdeServerConfig = {\r\n type: 'ws-ide'\r\n url: string\r\n ideName: string\r\n authToken?: string\r\n ideRunningInWindows?: boolean\r\n}\r\n\r\nexport type McpServerConfig =\r\n | McpStdioServerConfig\r\n | McpSSEServerConfig\r\n | McpHttpServerConfig\r\n | McpSSEIdeServerConfig\r\n | McpWsServerConfig\r\n | McpWsIdeServerConfig\r\n\r\nexport type ProjectConfig = {\r\n allowedTools: string[]\r\n deniedTools?: string[]\r\n askedTools?: string[]\r\n context: Record<string, string>\r\n contextFiles?: string[]\r\n dontCrawlDirectory?: boolean\r\n enableArchitectTool?: boolean\r\n mcpContextUris: string[]\r\n mcpServers?: Record<string, McpServerConfig>\r\n approvedMcprcServers?: string[]\r\n rejectedMcprcServers?: string[]\r\n lastAPIDuration?: number\r\n lastCost?: number\r\n lastDuration?: number\r\n lastSessionId?: string\r\n exampleFiles?: string[]\r\n exampleFilesGeneratedAt?: number\r\n hasTrustDialogAccepted?: boolean\r\n hasCompletedProjectOnboarding?: boolean\r\n}\r\n\r\nexport type AutoUpdaterStatus =\r\n | 'disabled'\r\n | 'enabled'\r\n | 'no_permissions'\r\n | 'not_configured'\r\n\r\nexport function isAutoUpdaterStatus(value: string): value is AutoUpdaterStatus {\r\n return ['disabled', 'enabled', 'no_permissions', 'not_configured'].includes(\r\n value as AutoUpdaterStatus,\r\n )\r\n}\r\n\r\nexport type NotificationChannel =\r\n | 'iterm2'\r\n | 'terminal_bell'\r\n | 'iterm2_with_bell'\r\n | 'notifications_disabled'\r\n\r\nexport type ProviderType =\r\n | 'anthropic'\r\n | 'openai'\r\n | 'mistral'\r\n | 'deepseek'\r\n | 'kimi'\r\n | 'qwen'\r\n | 'glm'\r\n | 'minimax'\r\n | 'baidu-qianfan'\r\n | 'siliconflow'\r\n | 'bigdream'\r\n | 'opendev'\r\n | 'xai'\r\n | 'groq'\r\n | 'gemini'\r\n | 'ollama'\r\n | 'azure'\r\n | 'custom'\r\n | 'custom-openai'\r\n | (string & {})\r\n\r\nexport type ModelProfile = {\r\n name: string\r\n provider: ProviderType\r\n modelName: string\r\n baseURL?: string\r\n apiKey: string\r\n maxTokens: number\r\n contextLength: number\r\n reasoningEffort?: 'low' | 'medium' | 'high' | 'minimal' | string\r\n isActive: boolean\r\n createdAt: number\r\n lastUsed?: number\r\n isGPT5?: boolean\r\n validationStatus?: 'valid' | 'needs_repair' | 'auto_repaired'\r\n lastValidation?: number\r\n}\r\n\r\nexport type ModelPointerType = 'main' | 'task' | 'compact' | 'quick'\r\n\r\nexport type ModelPointers = {\r\n main: string\r\n task: string\r\n compact: string\r\n quick: string\r\n}\r\n\r\nexport type AccountInfo = {\r\n accountUuid: string\r\n emailAddress: string\r\n organizationUuid?: string\r\n}\r\n\r\nexport type GlobalConfig = {\r\n projects?: Record<string, ProjectConfig>\r\n numStartups: number\r\n autoUpdaterStatus?: AutoUpdaterStatus\r\n userID?: string\r\n theme: ThemeNames\r\n hasCompletedOnboarding?: boolean\r\n lastPlanModeUse?: number\r\n lastOnboardingVersion?: string\r\n lastReleaseNotesSeen?: string\r\n mcpServers?: Record<string, McpServerConfig>\r\n preferredNotifChannel: NotificationChannel\r\n verbose: boolean\r\n customApiKeyResponses?: {\r\n approved?: string[]\r\n rejected?: string[]\r\n }\r\n primaryProvider?: ProviderType\r\n maxTokens?: number\r\n autoCompactThreshold?: number\r\n slidingWindowThresholdRatio?: number\r\n slidingWindowPreserveCount?: number\r\n hasAcknowledgedCostThreshold?: boolean\r\n oauthAccount?: AccountInfo\r\n proxy?: string\r\n stream?: boolean\r\n\r\n reasoning?: ReasoningConfig\r\n\r\n modelProfiles?: ModelProfile[]\r\n modelPointers?: ModelPointers\r\n defaultModelName?: string\r\n lastDismissedUpdateVersion?: string\r\n}\r\n\r\nexport const GLOBAL_CONFIG_KEYS = [\r\n 'autoUpdaterStatus',\r\n 'theme',\r\n 'hasCompletedOnboarding',\r\n 'lastOnboardingVersion',\r\n 'lastReleaseNotesSeen',\r\n 'verbose',\r\n 'customApiKeyResponses',\r\n 'primaryProvider',\r\n 'preferredNotifChannel',\r\n 'maxTokens',\r\n 'autoCompactThreshold',\r\n 'slidingWindowThresholdRatio',\r\n 'slidingWindowPreserveCount',\r\n] as const\r\n\r\nexport type GlobalConfigKey = (typeof GLOBAL_CONFIG_KEYS)[number]\r\n\r\nexport function isGlobalConfigKey(key: string): key is GlobalConfigKey {\r\n return GLOBAL_CONFIG_KEYS.includes(key as GlobalConfigKey)\r\n}\r\n\r\nexport const PROJECT_CONFIG_KEYS = [\r\n 'dontCrawlDirectory',\r\n 'enableArchitectTool',\r\n 'hasTrustDialogAccepted',\r\n 'hasCompletedProjectOnboarding',\r\n] as const\r\n\r\nexport type ProjectConfigKey = (typeof PROJECT_CONFIG_KEYS)[number]\r\n\r\nexport function isProjectConfigKey(key: string): key is ProjectConfigKey {\r\n return PROJECT_CONFIG_KEYS.includes(key as ProjectConfigKey)\r\n}\r\n\r\nexport type ReasoningConfig = {\r\n reflectionInterval?: number\r\n deepReflectionThreshold?: number\r\n errorStreakThreshold?: number\r\n replanInterval?: number\r\n loopWarnThreshold?: number\r\n loopRecoverThreshold?: number\r\n loopForceThreshold?: number\r\n loopBreakThreshold?: number\r\n semanticLoopThreshold?: number\r\n verificationEditThreshold?: number\r\n backtrackErrorThreshold?: number\r\n planningEnabled?: boolean\r\n reflectionEnabled?: boolean\r\n verificationEnabled?: boolean\r\n backtrackingEnabled?: boolean\r\n}\r\n\r\nexport type ProjectMcpServerDefinitions = {\r\n servers: Record<string, McpServerConfig>\r\n sources: Record<string, '.mcp.json' | '.mcprc'>\r\n mcpJsonPath: string\r\n mcprcPath: string\r\n}\r\n", "import { homedir } from 'os'\r\nimport type { GlobalConfig, ProjectConfig, ProviderType } from './schema'\r\nimport type { ThemeNames } from '@utils/theme'\r\n\r\nexport const DEFAULT_PROJECT_CONFIG: ProjectConfig = {\r\n allowedTools: [],\r\n deniedTools: [],\r\n askedTools: [],\r\n context: {},\r\n dontCrawlDirectory: false,\r\n enableArchitectTool: false,\r\n mcpContextUris: [],\r\n mcpServers: {},\r\n approvedMcprcServers: [],\r\n rejectedMcprcServers: [],\r\n hasTrustDialogAccepted: false,\r\n}\r\n\r\nexport function defaultConfigForProject(projectPath: string): ProjectConfig {\r\n const config = { ...DEFAULT_PROJECT_CONFIG }\r\n if (projectPath === homedir()) {\r\n config.dontCrawlDirectory = true\r\n }\r\n return config\r\n}\r\n\r\nexport const DEFAULT_GLOBAL_CONFIG: GlobalConfig = {\r\n numStartups: 0,\r\n autoUpdaterStatus: 'not_configured',\r\n theme: 'dark' as ThemeNames,\r\n preferredNotifChannel: 'iterm2',\r\n verbose: false,\r\n primaryProvider: 'anthropic' as ProviderType,\r\n customApiKeyResponses: {\r\n approved: [],\r\n rejected: [],\r\n },\r\n stream: true,\r\n\r\n modelProfiles: [],\r\n modelPointers: {\r\n main: '',\r\n task: '',\r\n compact: '',\r\n quick: '',\r\n },\r\n lastDismissedUpdateVersion: undefined,\r\n}\r\n\r\n", "import { logError } from '@utils/log'\r\n\r\nexport function safeParseJSON(json: string | null | undefined): unknown {\r\n if (!json) {\r\n return null\r\n }\r\n try {\r\n return JSON.parse(json)\r\n } catch (e) {\r\n logError(e)\r\n return null\r\n }\r\n}\r\n", "import type { GlobalConfig, ModelPointers, ModelProfile } from './schema'\r\n\r\nexport function migrateModelProfilesRemoveId(config: GlobalConfig): GlobalConfig {\r\n if (!config.modelProfiles) return config\r\n\r\n const idToModelNameMap = new Map<string, string>()\r\n const migratedProfiles = config.modelProfiles.map(profile => {\r\n if ((profile as any).id && profile.modelName) {\r\n idToModelNameMap.set((profile as any).id, profile.modelName)\r\n }\r\n\r\n const { id, ...profileWithoutId } = profile as any\r\n return profileWithoutId as ModelProfile\r\n })\r\n\r\n const migratedPointers: ModelPointers = {\r\n main: '',\r\n task: '',\r\n compact: '',\r\n quick: '',\r\n }\r\n\r\n const rawPointers = config.modelPointers as\r\n | Record<string, unknown>\r\n | undefined\r\n const rawMain = typeof rawPointers?.main === 'string' ? rawPointers.main : ''\r\n const rawTask = typeof rawPointers?.task === 'string' ? rawPointers.task : ''\r\n const rawQuick =\r\n typeof rawPointers?.quick === 'string' ? rawPointers.quick : ''\r\n const rawCompact =\r\n typeof rawPointers?.compact === 'string'\r\n ? rawPointers.compact\r\n : typeof rawPointers?.reasoning === 'string'\r\n ? rawPointers.reasoning\r\n : ''\r\n\r\n if (rawMain) migratedPointers.main = idToModelNameMap.get(rawMain) || rawMain\r\n if (rawTask) migratedPointers.task = idToModelNameMap.get(rawTask) || rawTask\r\n if (rawCompact)\r\n migratedPointers.compact = idToModelNameMap.get(rawCompact) || rawCompact\r\n if (rawQuick)\r\n migratedPointers.quick = idToModelNameMap.get(rawQuick) || rawQuick\r\n\r\n let defaultModelName: string | undefined\r\n if ((config as any).defaultModelId) {\r\n defaultModelName =\r\n idToModelNameMap.get((config as any).defaultModelId) ||\r\n (config as any).defaultModelId\r\n } else if ((config as any).defaultModelName) {\r\n defaultModelName = (config as any).defaultModelName\r\n }\r\n\r\n const migratedConfig = { ...config }\r\n delete (migratedConfig as any).defaultModelId\r\n delete (migratedConfig as any).currentSelectedModelId\r\n delete (migratedConfig as any).mainAgentModelId\r\n delete (migratedConfig as any).taskToolModelId\r\n\r\n return {\r\n ...migratedConfig,\r\n modelProfiles: migratedProfiles,\r\n modelPointers: migratedPointers,\r\n defaultModelName,\r\n }\r\n}\r\n\r\n", "import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs'\r\nimport { dirname, join, posix, resolve, win32 } from 'path'\r\nimport { cloneDeep, memoize, pick } from 'lodash-es'\r\nimport { homedir } from 'os'\r\nimport { randomBytes } from 'crypto'\r\nimport { getGlobalConfigFilePath } from '@utils/config/env'\r\nimport { getCwd } from '@utils/state'\r\nimport { safeParseJSON } from '@utils/text/json'\r\nimport { ConfigParseError } from '@utils/text/errors'\r\nimport { debug as debugLogger } from '@utils/log/debugLogger'\r\nimport {\r\n DEFAULT_GLOBAL_CONFIG,\r\n DEFAULT_PROJECT_CONFIG,\r\n defaultConfigForProject,\r\n} from './defaults'\r\nimport {\r\n GLOBAL_CONFIG_KEYS,\r\n PROJECT_CONFIG_KEYS,\r\n isGlobalConfigKey,\r\n isAutoUpdaterStatus,\r\n isProjectConfigKey,\r\n type GlobalConfig,\r\n type McpServerConfig,\r\n type ProjectConfig,\r\n type ProjectMcpServerDefinitions,\r\n} from './schema'\r\nimport { migrateModelProfilesRemoveId } from './migrations'\r\n\r\nfunction expandHomeDirForPlatform(\r\n input: string,\r\n homeDirPath: string,\r\n platform: NodeJS.Platform,\r\n): string {\r\n const trimmed = input.trim()\r\n if (!trimmed) return trimmed\r\n if (trimmed === '~') return homeDirPath\r\n if (trimmed.startsWith('~/') || trimmed.startsWith('~\\\\')) {\r\n const rest = trimmed.slice(2)\r\n return platform === 'win32'\r\n ? win32.join(homeDirPath, rest)\r\n : posix.join(homeDirPath, rest)\r\n }\r\n return trimmed\r\n}\r\n\r\nexport function normalizeProjectPathForComparison(\r\n projectPath: string,\r\n baseDir: string,\r\n opts?: { platform?: NodeJS.Platform; homeDir?: string },\r\n): string {\r\n const platform = opts?.platform ?? process.platform\r\n const homeDirPath = opts?.homeDir ?? homedir()\r\n const expanded = expandHomeDirForPlatform(projectPath, homeDirPath, platform)\r\n if (!expanded) return ''\r\n\r\n if (platform === 'win32') {\r\n const resolved = win32.isAbsolute(expanded)\r\n ? win32.resolve(expanded)\r\n : win32.resolve(baseDir, expanded)\r\n return resolved.toLowerCase()\r\n }\r\n\r\n const resolved = posix.isAbsolute(expanded)\r\n ? posix.resolve(expanded)\r\n : posix.resolve(baseDir, expanded)\r\n return resolved\r\n}\r\n\r\nfunction findMatchingProjectKey(\r\n projects: Record<string, ProjectConfig> | undefined,\r\n absolutePath: string,\r\n): string | undefined {\r\n if (!projects) return undefined\r\n if (projects[absolutePath]) return absolutePath\r\n\r\n const normalizedTarget = normalizeProjectPathForComparison(\r\n absolutePath,\r\n absolutePath,\r\n )\r\n\r\n for (const key of Object.keys(projects)) {\r\n if (\r\n normalizeProjectPathForComparison(key, absolutePath) === normalizedTarget\r\n ) {\r\n return key\r\n }\r\n }\r\n\r\n return undefined\r\n}\r\n\r\nexport function checkHasTrustDialogAccepted(): boolean {\r\n let currentPath = getCwd()\r\n const config = getConfig(getGlobalConfigFilePath(), DEFAULT_GLOBAL_CONFIG)\r\n\r\n while (true) {\r\n const projectKey = findMatchingProjectKey(config.projects, currentPath)\r\n const projectConfig = projectKey ? config.projects?.[projectKey] : undefined\r\n if (projectConfig?.hasTrustDialogAccepted) {\r\n return true\r\n }\r\n const parentPath = resolve(currentPath, '..')\r\n if (parentPath === currentPath) {\r\n break\r\n }\r\n currentPath = parentPath\r\n }\r\n\r\n return false\r\n}\r\n\r\nconst TEST_GLOBAL_CONFIG_FOR_TESTING: GlobalConfig = {\r\n ...DEFAULT_GLOBAL_CONFIG,\r\n autoUpdaterStatus: 'disabled',\r\n}\r\nconst TEST_PROJECT_CONFIG_FOR_TESTING: ProjectConfig = {\r\n ...DEFAULT_PROJECT_CONFIG,\r\n}\r\n\r\nexport function saveGlobalConfig(config: GlobalConfig): void {\r\n if (process.env.NODE_ENV === 'test') {\r\n for (const key in config) {\r\n TEST_GLOBAL_CONFIG_FOR_TESTING[key] = config[key]\r\n }\r\n return\r\n }\r\n\r\n saveConfig(\r\n getGlobalConfigFilePath(),\r\n {\r\n ...config,\r\n projects: getConfig(getGlobalConfigFilePath(), DEFAULT_GLOBAL_CONFIG)\r\n .projects,\r\n },\r\n DEFAULT_GLOBAL_CONFIG,\r\n )\r\n}\r\n\r\nexport function getGlobalConfig(): GlobalConfig {\r\n if (process.env.NODE_ENV === 'test') {\r\n return TEST_GLOBAL_CONFIG_FOR_TESTING\r\n }\r\n const config = getConfig(getGlobalConfigFilePath(), DEFAULT_GLOBAL_CONFIG)\r\n return migrateModelProfilesRemoveId(config)\r\n}\r\n\r\nexport function normalizeApiKeyForConfig(apiKey: string): string {\r\n return apiKey?.slice(-20) ?? ''\r\n}\r\n\r\nexport function getCustomApiKeyStatus(\r\n truncatedApiKey: string,\r\n): 'approved' | 'rejected' | 'new' {\r\n const config = getGlobalConfig()\r\n if (config.customApiKeyResponses?.approved?.includes(truncatedApiKey)) {\r\n return 'approved'\r\n }\r\n if (config.customApiKeyResponses?.rejected?.includes(truncatedApiKey)) {\r\n return 'rejected'\r\n }\r\n return 'new'\r\n}\r\n\r\nfunction saveConfig<A extends object>(\r\n file: string,\r\n config: A,\r\n defaultConfig: A,\r\n): void {\r\n const filteredConfig = Object.fromEntries(\r\n Object.entries(config).filter(\r\n ([key, value]) =>\r\n JSON.stringify(value) !== JSON.stringify(defaultConfig[key as keyof A]),\r\n ),\r\n )\r\n try {\r\n mkdirSync(dirname(file), { recursive: true })\r\n writeFileSync(file, JSON.stringify(filteredConfig, null, 2), 'utf-8')\r\n } catch (error) {\r\n const err = error as NodeJS.ErrnoException\r\n if (\r\n err?.code === 'EACCES' ||\r\n err?.code === 'EPERM' ||\r\n err?.code === 'EROFS'\r\n ) {\r\n debugLogger.state('CONFIG_SAVE_SKIPPED', {\r\n file,\r\n reason: String(err.code),\r\n })\r\n return\r\n }\r\n throw error\r\n }\r\n}\r\n\r\nlet configReadingAllowed = false\r\n\r\nexport function enableConfigs(): void {\r\n configReadingAllowed = true\r\n getConfig(\r\n getGlobalConfigFilePath(),\r\n DEFAULT_GLOBAL_CONFIG,\r\n true,\r\n )\r\n}\r\n\r\nfunction getConfig<A>(\r\n file: string,\r\n defaultConfig: A,\r\n throwOnInvalid?: boolean,\r\n): A {\r\n void configReadingAllowed\r\n\r\n debugLogger.state('CONFIG_LOAD_START', {\r\n file,\r\n fileExists: String(existsSync(file)),\r\n throwOnInvalid: String(!!throwOnInvalid),\r\n })\r\n\r\n if (!existsSync(file)) {\r\n debugLogger.state('CONFIG_LOAD_DEFAULT', {\r\n file,\r\n reason: 'file_not_exists',\r\n defaultConfigKeys: Object.keys(defaultConfig as object).join(', '),\r\n })\r\n return cloneDeep(defaultConfig)\r\n }\r\n\r\n try {\r\n const fileContent = readFileSync(file, 'utf-8')\r\n debugLogger.state('CONFIG_FILE_READ', {\r\n file,\r\n contentLength: String(fileContent.length),\r\n contentPreview:\r\n fileContent.substring(0, 100) + (fileContent.length > 100 ? '...' : ''),\r\n })\r\n\r\n try {\r\n const parsedConfig = JSON.parse(fileContent)\r\n debugLogger.state('CONFIG_JSON_PARSED', {\r\n file,\r\n parsedKeys: Object.keys(parsedConfig).join(', '),\r\n })\r\n\r\n const finalConfig = {\r\n ...cloneDeep(defaultConfig),\r\n ...parsedConfig,\r\n }\r\n\r\n debugLogger.state('CONFIG_LOAD_SUCCESS', {\r\n file,\r\n finalConfigKeys: Object.keys(finalConfig as object).join(', '),\r\n })\r\n\r\n return finalConfig\r\n } catch (error) {\r\n const errorMessage =\r\n error instanceof Error ? error.message : String(error)\r\n\r\n debugLogger.error('CONFIG_JSON_PARSE_ERROR', {\r\n file,\r\n errorMessage,\r\n errorType: error instanceof Error ? error.constructor.name : typeof error,\r\n contentLength: String(fileContent.length),\r\n })\r\n\r\n throw new ConfigParseError(errorMessage, file, defaultConfig)\r\n }\r\n } catch (error: unknown) {\r\n if (error instanceof ConfigParseError && throwOnInvalid) {\r\n debugLogger.error('CONFIG_PARSE_ERROR_RETHROWN', {\r\n file,\r\n throwOnInvalid: String(throwOnInvalid),\r\n errorMessage: error.message,\r\n })\r\n throw error\r\n }\r\n\r\n debugLogger.warn('CONFIG_FALLBACK_TO_DEFAULT', {\r\n file,\r\n errorType: error instanceof Error ? error.constructor.name : typeof error,\r\n errorMessage: error instanceof Error ? error.message : String(error),\r\n action: 'using_default_config',\r\n })\r\n\r\n return cloneDeep(defaultConfig)\r\n }\r\n}\r\n\r\nexport function getCurrentProjectConfig(): ProjectConfig {\r\n if (process.env.NODE_ENV === 'test') {\r\n return TEST_PROJECT_CONFIG_FOR_TESTING\r\n }\r\n\r\n const absolutePath = resolve(getCwd())\r\n const config = getConfig(getGlobalConfigFilePath(), DEFAULT_GLOBAL_CONFIG)\r\n\r\n if (!config.projects) {\r\n return defaultConfigForProject(absolutePath)\r\n }\r\n\r\n const projectKey = findMatchingProjectKey(config.projects, absolutePath)\r\n const projectConfig =\r\n projectKey && config.projects[projectKey]\r\n ? config.projects[projectKey]\r\n : defaultConfigForProject(absolutePath)\r\n if (typeof projectConfig.allowedTools === 'string') {\r\n projectConfig.allowedTools =\r\n (safeParseJSON(projectConfig.allowedTools) as string[]) ?? []\r\n }\r\n if (typeof (projectConfig as any).deniedTools === 'string') {\r\n ;(projectConfig as any).deniedTools =\r\n (safeParseJSON((projectConfig as any).deniedTools) as string[]) ?? []\r\n }\r\n if (typeof (projectConfig as any).askedTools === 'string') {\r\n ;(projectConfig as any).askedTools =\r\n (safeParseJSON((projectConfig as any).askedTools) as string[]) ?? []\r\n }\r\n return projectConfig\r\n}\r\n\r\nexport function saveCurrentProjectConfig(projectConfig: ProjectConfig): void {\r\n if (process.env.NODE_ENV === 'test') {\r\n for (const key in projectConfig) {\r\n TEST_PROJECT_CONFIG_FOR_TESTING[key] = projectConfig[key]\r\n }\r\n return\r\n }\r\n const config = getConfig(getGlobalConfigFilePath(), DEFAULT_GLOBAL_CONFIG)\r\n const resolvedCwd = resolve(getCwd())\r\n const existingKey = findMatchingProjectKey(config.projects, resolvedCwd)\r\n const storageKey = existingKey ?? resolvedCwd\r\n\r\n saveConfig(\r\n getGlobalConfigFilePath(),\r\n {\r\n ...config,\r\n projects: {\r\n ...config.projects,\r\n [storageKey]: projectConfig,\r\n },\r\n },\r\n DEFAULT_GLOBAL_CONFIG,\r\n )\r\n}\r\n\r\nexport async function isAutoUpdaterDisabled(): Promise<boolean> {\r\n const status = getGlobalConfig().autoUpdaterStatus\r\n return status !== 'enabled'\r\n}\r\n\r\nexport const TEST_MCPRC_CONFIG_FOR_TESTING: Record<string, McpServerConfig> = {}\r\n\r\nexport function clearMcprcConfigForTesting(): void {\r\n if (process.env.NODE_ENV === 'test') {\r\n Object.keys(TEST_MCPRC_CONFIG_FOR_TESTING).forEach(key => {\r\n delete TEST_MCPRC_CONFIG_FOR_TESTING[key]\r\n })\r\n }\r\n}\r\n\r\nexport function addMcprcServerForTesting(\r\n name: string,\r\n server: McpServerConfig,\r\n): void {\r\n if (process.env.NODE_ENV === 'test') {\r\n TEST_MCPRC_CONFIG_FOR_TESTING[name] = server\r\n }\r\n}\r\n\r\nexport function removeMcprcServerForTesting(name: string): void {\r\n if (process.env.NODE_ENV === 'test') {\r\n if (!TEST_MCPRC_CONFIG_FOR_TESTING[name]) {\r\n throw new Error(`No MCP server found with name: ${name} in .mcprc`)\r\n }\r\n delete TEST_MCPRC_CONFIG_FOR_TESTING[name]\r\n }\r\n}\r\n\r\nexport const getMcprcConfig = memoize(\r\n (): Record<string, McpServerConfig> => {\r\n if (process.env.NODE_ENV === 'test') {\r\n return TEST_MCPRC_CONFIG_FOR_TESTING\r\n }\r\n\r\n const mcprcPath = join(getCwd(), '.mcprc')\r\n if (!existsSync(mcprcPath)) {\r\n return {}\r\n }\r\n\r\n try {\r\n const mcprcContent = readFileSync(mcprcPath, 'utf-8')\r\n const config = safeParseJSON(mcprcContent)\r\n if (config && typeof config === 'object') {\r\n return config as Record<string, McpServerConfig>\r\n }\r\n } catch {}\r\n return {}\r\n },\r\n () => {\r\n const cwd = getCwd()\r\n const mcprcPath = join(cwd, '.mcprc')\r\n if (existsSync(mcprcPath)) {\r\n try {\r\n const stat = readFileSync(mcprcPath, 'utf-8')\r\n return `${cwd}:${stat}`\r\n } catch {\r\n return cwd\r\n }\r\n }\r\n return cwd\r\n },\r\n)\r\n\r\nfunction parseMcpServersFromMcpJson(\r\n value: unknown,\r\n): Record<string, McpServerConfig> {\r\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {}\r\n const raw = (value as { mcpServers?: unknown }).mcpServers\r\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return {}\r\n return raw as Record<string, McpServerConfig>\r\n}\r\n\r\nfunction parseMcpServersFromMcprc(\r\n value: unknown,\r\n): Record<string, McpServerConfig> {\r\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {}\r\n const maybeNested = (value as { mcpServers?: unknown }).mcpServers\r\n if (\r\n maybeNested &&\r\n typeof maybeNested === 'object' &&\r\n !Array.isArray(maybeNested)\r\n ) {\r\n return maybeNested as Record<string, McpServerConfig>\r\n }\r\n return value as Record<string, McpServerConfig>\r\n}\r\n\r\nexport const getProjectMcpServerDefinitions = memoize(\r\n (): ProjectMcpServerDefinitions => {\r\n if (process.env.NODE_ENV === 'test') {\r\n return {\r\n servers: {},\r\n sources: {},\r\n mcpJsonPath: join(getCwd(), '.mcp.json'),\r\n mcprcPath: join(getCwd(), '.mcprc'),\r\n }\r\n }\r\n\r\n const cwd = getCwd()\r\n const mcpJsonPath = join(cwd, '.mcp.json')\r\n const mcprcPath = join(cwd, '.mcprc')\r\n\r\n let mcpJsonServers: Record<string, McpServerConfig> = {}\r\n let mcprcServers: Record<string, McpServerConfig> = {}\r\n\r\n if (existsSync(mcpJsonPath)) {\r\n try {\r\n const content = readFileSync(mcpJsonPath, 'utf-8')\r\n const parsed = safeParseJSON(content)\r\n mcpJsonServers = parseMcpServersFromMcpJson(parsed)\r\n } catch {}\r\n }\r\n\r\n if (existsSync(mcprcPath)) {\r\n try {\r\n const content = readFileSync(mcprcPath, 'utf-8')\r\n const parsed = safeParseJSON(content)\r\n mcprcServers = parseMcpServersFromMcprc(parsed)\r\n } catch {}\r\n }\r\n\r\n const sources: Record<string, '.mcp.json' | '.mcprc'> = {}\r\n for (const name of Object.keys(mcpJsonServers)) {\r\n sources[name] = '.mcp.json'\r\n }\r\n for (const name of Object.keys(mcprcServers)) {\r\n sources[name] = '.mcprc'\r\n }\r\n\r\n return {\r\n servers: { ...mcpJsonServers, ...mcprcServers },\r\n sources,\r\n mcpJsonPath,\r\n mcprcPath,\r\n }\r\n },\r\n () => {\r\n const cwd = getCwd()\r\n const mcpJsonPath = join(cwd, '.mcp.json')\r\n const mcprcPath = join(cwd, '.mcprc')\r\n\r\n const parts: string[] = [cwd]\r\n\r\n if (existsSync(mcpJsonPath)) {\r\n try {\r\n parts.push('mcp.json')\r\n parts.push(readFileSync(mcpJsonPath, 'utf-8'))\r\n } catch {}\r\n }\r\n\r\n if (existsSync(mcprcPath)) {\r\n try {\r\n parts.push('mcprc')\r\n parts.push(readFileSync(mcprcPath, 'utf-8'))\r\n } catch {}\r\n }\r\n\r\n return parts.join(':')\r\n },\r\n)\r\n\r\nexport function getOrCreateUserID(): string {\r\n const config = getGlobalConfig()\r\n if (config.userID) {\r\n return config.userID\r\n }\r\n\r\n const userID = randomBytes(32).toString('hex')\r\n saveGlobalConfig({ ...config, userID })\r\n return userID\r\n}\r\n\r\nexport function getConfigForCLI(key: string, global: boolean): unknown {\r\n if (global) {\r\n if (!isGlobalConfigKey(key)) {\r\n console.error(\r\n `Error: '${key}' is not a valid config key. Valid keys are: ${GLOBAL_CONFIG_KEYS.join(', ')}`,\r\n )\r\n process.exit(1)\r\n }\r\n return getGlobalConfig()[key]\r\n } else {\r\n if (!isProjectConfigKey(key)) {\r\n console.error(\r\n `Error: '${key}' is not a valid config key. Valid keys are: ${PROJECT_CONFIG_KEYS.join(', ')}`,\r\n )\r\n process.exit(1)\r\n }\r\n return getCurrentProjectConfig()[key]\r\n }\r\n}\r\n\r\nexport function setConfigForCLI(\r\n key: string,\r\n value: unknown,\r\n global: boolean,\r\n): void {\r\n if (global) {\r\n if (!isGlobalConfigKey(key)) {\r\n console.error(\r\n `Error: Cannot set '${key}'. Only these keys can be modified: ${GLOBAL_CONFIG_KEYS.join(', ')}`,\r\n )\r\n process.exit(1)\r\n }\r\n\r\n if (key === 'autoUpdaterStatus' && !isAutoUpdaterStatus(value as string)) {\r\n console.error(\r\n `Error: Invalid value for autoUpdaterStatus. Must be one of: disabled, enabled, no_permissions, not_configured`,\r\n )\r\n process.exit(1)\r\n }\r\n\r\n const currentConfig = getGlobalConfig()\r\n saveGlobalConfig({\r\n ...currentConfig,\r\n [key]: value,\r\n })\r\n } else {\r\n if (!isProjectConfigKey(key)) {\r\n console.error(\r\n `Error: Cannot set '${key}'. Only these keys can be modified: ${PROJECT_CONFIG_KEYS.join(', ')}. Did you mean --global?`,\r\n )\r\n process.exit(1)\r\n }\r\n const currentConfig = getCurrentProjectConfig()\r\n saveCurrentProjectConfig({\r\n ...currentConfig,\r\n [key]: value,\r\n })\r\n }\r\n setTimeout(() => {\r\n process.exit(0)\r\n }, 100)\r\n}\r\n\r\nexport function deleteConfigForCLI(key: string, global: boolean): void {\r\n if (global) {\r\n if (!isGlobalConfigKey(key)) {\r\n console.error(\r\n `Error: Cannot delete '${key}'. Only these keys can be modified: ${GLOBAL_CONFIG_KEYS.join(', ')}`,\r\n )\r\n process.exit(1)\r\n }\r\n const currentConfig = getGlobalConfig()\r\n delete currentConfig[key]\r\n saveGlobalConfig(currentConfig)\r\n } else {\r\n if (!isProjectConfigKey(key)) {\r\n console.error(\r\n `Error: Cannot delete '${key}'. Only these keys can be modified: ${PROJECT_CONFIG_KEYS.join(', ')}. Did you mean --global?`,\r\n )\r\n process.exit(1)\r\n }\r\n const currentConfig = getCurrentProjectConfig()\r\n delete currentConfig[key]\r\n saveCurrentProjectConfig(currentConfig)\r\n }\r\n}\r\n\r\nexport function listConfigForCLI(global: true): GlobalConfig\r\nexport function listConfigForCLI(global: false): ProjectConfig\r\nexport function listConfigForCLI(global: boolean): object {\r\n if (global) {\r\n const currentConfig = pick(getGlobalConfig(), GLOBAL_CONFIG_KEYS)\r\n return currentConfig\r\n } else {\r\n return pick(getCurrentProjectConfig(), PROJECT_CONFIG_KEYS)\r\n }\r\n}\r\n\r\nexport function getOpenAIApiKey(): string | undefined {\r\n return process.env.OPENAI_API_KEY\r\n}\r\n\r\nexport function getAnthropicApiKey(): string {\r\n return process.env.ANTHROPIC_API_KEY || ''\r\n}\r\n", "import type { ModelPointerType, ModelProfile, ProviderType } from './schema'\r\nimport { debug as debugLogger } from '@utils/log/debugLogger'\r\nimport { getGlobalConfig, saveGlobalConfig } from './loader'\r\n\r\nexport function setAllPointersToModel(modelName: string): void {\r\n const config = getGlobalConfig()\r\n const updatedConfig = {\r\n ...config,\r\n modelPointers: {\r\n main: modelName,\r\n task: modelName,\r\n compact: modelName,\r\n quick: modelName,\r\n },\r\n defaultModelName: modelName,\r\n }\r\n saveGlobalConfig(updatedConfig)\r\n}\r\n\r\nexport function setModelPointer(\r\n pointer: ModelPointerType,\r\n modelName: string,\r\n): void {\r\n const config = getGlobalConfig()\r\n const updatedConfig = {\r\n ...config,\r\n modelPointers: {\r\n ...config.modelPointers,\r\n [pointer]: modelName,\r\n },\r\n }\r\n saveGlobalConfig(updatedConfig)\r\n\r\n import('../../utils/model').then(({ reloadModelManager }) => {\r\n reloadModelManager()\r\n })\r\n}\r\n\r\nexport function isGPT5ModelName(modelName: string): boolean {\r\n if (!modelName || typeof modelName !== 'string') return false\r\n const lowerName = modelName.toLowerCase()\r\n return lowerName.startsWith('gpt-5') || lowerName.includes('gpt-5')\r\n}\r\n\r\nexport function validateAndRepairGPT5Profile(\r\n profile: ModelProfile,\r\n): ModelProfile {\r\n const isGPT5 = isGPT5ModelName(profile.modelName)\r\n const now = Date.now()\r\n\r\n const repairedProfile: ModelProfile = { ...profile }\r\n let wasRepaired = false\r\n\r\n if (isGPT5 !== profile.isGPT5) {\r\n repairedProfile.isGPT5 = isGPT5\r\n wasRepaired = true\r\n }\r\n\r\n if (isGPT5) {\r\n\r\n const validReasoningEfforts = ['minimal', 'low', 'medium', 'high']\r\n if (\r\n !profile.reasoningEffort ||\r\n !validReasoningEfforts.includes(profile.reasoningEffort)\r\n ) {\r\n repairedProfile.reasoningEffort = 'medium'\r\n wasRepaired = true\r\n debugLogger.state('GPT5_CONFIG_AUTO_REPAIR', {\r\n model: profile.modelName,\r\n field: 'reasoningEffort',\r\n value: 'medium',\r\n })\r\n }\r\n\r\n if (profile.contextLength < 128000) {\r\n repairedProfile.contextLength = 128000\r\n wasRepaired = true\r\n debugLogger.state('GPT5_CONFIG_AUTO_REPAIR', {\r\n model: profile.modelName,\r\n field: 'contextLength',\r\n value: 128000,\r\n })\r\n }\r\n\r\n if (profile.maxTokens < 4000) {\r\n repairedProfile.maxTokens = 8192\r\n wasRepaired = true\r\n debugLogger.state('GPT5_CONFIG_AUTO_REPAIR', {\r\n model: profile.modelName,\r\n field: 'maxTokens',\r\n value: 8192,\r\n })\r\n }\r\n\r\n if (\r\n profile.provider !== 'openai' &&\r\n profile.provider !== 'custom-openai' &&\r\n profile.provider !== 'azure'\r\n ) {\r\n debugLogger.warn('GPT5_CONFIG_UNEXPECTED_PROVIDER', {\r\n model: profile.modelName,\r\n provider: profile.provider,\r\n expectedProviders: ['openai', 'custom-openai', 'azure'],\r\n })\r\n }\r\n\r\n if (profile.modelName.includes('gpt-5') && !profile.baseURL) {\r\n repairedProfile.baseURL = 'https://api.openai.com/v1'\r\n wasRepaired = true\r\n debugLogger.state('GPT5_CONFIG_AUTO_REPAIR', {\r\n model: profile.modelName,\r\n field: 'baseURL',\r\n value: 'https://api.openai.com/v1',\r\n })\r\n }\r\n }\r\n\r\n repairedProfile.validationStatus = wasRepaired ? 'auto_repaired' : 'valid'\r\n repairedProfile.lastValidation = now\r\n\r\n if (wasRepaired) {\r\n debugLogger.info('GPT5_CONFIG_AUTO_REPAIRED', { model: profile.modelName })\r\n }\r\n\r\n return repairedProfile\r\n}\r\n\r\nexport function validateAndRepairAllGPT5Profiles(): {\r\n repaired: number\r\n total: number\r\n} {\r\n const config = getGlobalConfig()\r\n if (!config.modelProfiles) {\r\n return { repaired: 0, total: 0 }\r\n }\r\n\r\n let repairCount = 0\r\n const repairedProfiles = config.modelProfiles.map(profile => {\r\n const repairedProfile = validateAndRepairGPT5Profile(profile)\r\n if (repairedProfile.validationStatus === 'auto_repaired') {\r\n repairCount++\r\n }\r\n return repairedProfile\r\n })\r\n\r\n if (repairCount > 0) {\r\n const updatedConfig = {\r\n ...config,\r\n modelProfiles: repairedProfiles,\r\n }\r\n saveGlobalConfig(updatedConfig)\r\n debugLogger.info('GPT5_CONFIG_AUTO_REPAIR_SUMMARY', {\r\n repaired: repairCount,\r\n total: config.modelProfiles.length,\r\n })\r\n }\r\n\r\n return { repaired: repairCount, total: config.modelProfiles.length }\r\n}\r\n\r\nexport function getGPT5ConfigRecommendations(\r\n modelName: string,\r\n): Partial<ModelProfile> {\r\n if (!isGPT5ModelName(modelName)) {\r\n return {}\r\n }\r\n\r\n const recommendations: Partial<ModelProfile> = {\r\n contextLength: 128000,\r\n maxTokens: 8192,\r\n reasoningEffort: 'medium',\r\n isGPT5: true,\r\n }\r\n\r\n if (modelName.includes('gpt-5-mini')) {\r\n recommendations.maxTokens = 4096\r\n recommendations.reasoningEffort = 'low'\r\n } else if (modelName.includes('gpt-5-nano')) {\r\n recommendations.maxTokens = 2048\r\n recommendations.reasoningEffort = 'minimal'\r\n }\r\n\r\n return recommendations\r\n}\r\n\r\nexport function createGPT5ModelProfile(\r\n name: string,\r\n modelName: string,\r\n apiKey: string,\r\n baseURL?: string,\r\n provider: ProviderType = 'openai',\r\n): ModelProfile {\r\n const recommendations = getGPT5ConfigRecommendations(modelName)\r\n\r\n const profile: ModelProfile = {\r\n name,\r\n provider,\r\n modelName,\r\n baseURL: baseURL || 'https://api.openai.com/v1',\r\n apiKey,\r\n maxTokens: recommendations.maxTokens || 8192,\r\n contextLength: recommendations.contextLength || 128000,\r\n reasoningEffort: recommendations.reasoningEffort || 'medium',\r\n isActive: true,\r\n createdAt: Date.now(),\r\n isGPT5: true,\r\n validationStatus: 'valid',\r\n lastValidation: Date.now(),\r\n }\r\n\r\n return profile\r\n}\r\n\r\n", "export type {\r\n AccountInfo,\r\n AutoUpdaterStatus,\r\n GlobalConfig,\r\n GlobalConfigKey,\r\n McpHttpServerConfig,\r\n McpSSEIdeServerConfig,\r\n McpSSEServerConfig,\r\n McpServerConfig,\r\n McpStdioServerConfig,\r\n McpWsIdeServerConfig,\r\n McpWsServerConfig,\r\n ModelPointerType,\r\n ModelPointers,\r\n ModelProfile,\r\n NotificationChannel,\r\n ProjectConfig,\r\n ProjectConfigKey,\r\n ProjectMcpServerDefinitions,\r\n ProviderType,\r\n} from './schema'\r\nexport {\r\n GLOBAL_CONFIG_KEYS,\r\n PROJECT_CONFIG_KEYS,\r\n isAutoUpdaterStatus,\r\n isGlobalConfigKey,\r\n isProjectConfigKey,\r\n} from './schema'\r\nexport { DEFAULT_GLOBAL_CONFIG } from './defaults'\r\nexport {\r\n TEST_MCPRC_CONFIG_FOR_TESTING,\r\n addMcprcServerForTesting,\r\n checkHasTrustDialogAccepted,\r\n clearMcprcConfigForTesting,\r\n deleteConfigForCLI,\r\n enableConfigs,\r\n getAnthropicApiKey,\r\n getConfigForCLI,\r\n getCurrentProjectConfig,\r\n getCustomApiKeyStatus,\r\n getGlobalConfig,\r\n getMcprcConfig,\r\n getOpenAIApiKey,\r\n getOrCreateUserID,\r\n getProjectMcpServerDefinitions,\r\n isAutoUpdaterDisabled,\r\n listConfigForCLI,\r\n normalizeApiKeyForConfig,\r\n removeMcprcServerForTesting,\r\n saveCurrentProjectConfig,\r\n saveGlobalConfig,\r\n setConfigForCLI,\r\n} from './loader'\r\nexport {\r\n createGPT5ModelProfile,\r\n getGPT5ConfigRecommendations,\r\n isGPT5ModelName,\r\n setAllPointersToModel,\r\n setModelPointer,\r\n validateAndRepairAllGPT5Profiles,\r\n validateAndRepairGPT5Profile,\r\n} from './validator'\r\n\r\n", "export * from '../../core/config'\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["homedir", "resolved", "init_config"]
|
|
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-
|
|
5
|
+
} from "./chunk-IZZTKEZH.js";
|
|
6
6
|
import {
|
|
7
7
|
parseFrontmatter
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-2JCTO2EY.js";
|
|
9
9
|
import {
|
|
10
|
-
getCwd
|
|
11
|
-
|
|
10
|
+
getCwd,
|
|
11
|
+
init_state
|
|
12
|
+
} from "./chunk-XYQZLDRB.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": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { createRequire as __newcrawCreateRequire } from "node:module";
|
|
2
|
+
const require = __newcrawCreateRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
loadToolPermissionContextFromDisk
|
|
5
|
+
} from "./chunk-X3NER6FY.js";
|
|
6
|
+
import {
|
|
7
|
+
applyToolPermissionContextUpdate
|
|
8
|
+
} from "./chunk-U7S4MEYP.js";
|
|
9
|
+
|
|
10
|
+
// src/utils/permissions/toolPermissionContextState.ts
|
|
11
|
+
var toolPermissionContextByConversationKey = /* @__PURE__ */ new Map();
|
|
12
|
+
function getToolPermissionContextForConversationKey(options) {
|
|
13
|
+
const existing = toolPermissionContextByConversationKey.get(
|
|
14
|
+
options.conversationKey
|
|
15
|
+
);
|
|
16
|
+
if (existing) {
|
|
17
|
+
let next = existing;
|
|
18
|
+
if (next.isBypassPermissionsModeAvailable !== options.isBypassPermissionsModeAvailable) {
|
|
19
|
+
next = {
|
|
20
|
+
...next,
|
|
21
|
+
isBypassPermissionsModeAvailable: options.isBypassPermissionsModeAvailable
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (!options.isBypassPermissionsModeAvailable && next.mode === "bypassPermissions") {
|
|
25
|
+
next = { ...next, mode: "default" };
|
|
26
|
+
}
|
|
27
|
+
if (next !== existing) {
|
|
28
|
+
toolPermissionContextByConversationKey.set(options.conversationKey, next);
|
|
29
|
+
}
|
|
30
|
+
return next;
|
|
31
|
+
}
|
|
32
|
+
const initial = loadToolPermissionContextFromDisk({
|
|
33
|
+
isBypassPermissionsModeAvailable: options.isBypassPermissionsModeAvailable
|
|
34
|
+
});
|
|
35
|
+
toolPermissionContextByConversationKey.set(options.conversationKey, initial);
|
|
36
|
+
return initial;
|
|
37
|
+
}
|
|
38
|
+
function setToolPermissionContextForConversationKey(options) {
|
|
39
|
+
toolPermissionContextByConversationKey.set(
|
|
40
|
+
options.conversationKey,
|
|
41
|
+
options.context
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
function applyToolPermissionContextUpdateForConversationKey(options) {
|
|
45
|
+
const prev = getToolPermissionContextForConversationKey({
|
|
46
|
+
conversationKey: options.conversationKey,
|
|
47
|
+
isBypassPermissionsModeAvailable: options.isBypassPermissionsModeAvailable
|
|
48
|
+
});
|
|
49
|
+
const next = applyToolPermissionContextUpdate(prev, options.update);
|
|
50
|
+
toolPermissionContextByConversationKey.set(options.conversationKey, next);
|
|
51
|
+
return next;
|
|
52
|
+
}
|
|
53
|
+
function __resetToolPermissionContextStateForTests() {
|
|
54
|
+
toolPermissionContextByConversationKey.clear();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export {
|
|
58
|
+
getToolPermissionContextForConversationKey,
|
|
59
|
+
setToolPermissionContextForConversationKey,
|
|
60
|
+
applyToolPermissionContextUpdateForConversationKey,
|
|
61
|
+
__resetToolPermissionContextStateForTests
|
|
62
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/permissions/toolPermissionContextState.ts"],
|
|
4
|
+
"sourcesContent": ["import type {\r\n ToolPermissionContext,\r\n ToolPermissionContextUpdate,\r\n} from '@newcraw-types/toolPermissionContext'\r\nimport { applyToolPermissionContextUpdate } from '@newcraw-types/toolPermissionContext'\r\nimport { loadToolPermissionContextFromDisk } from '@utils/permissions/toolPermissionSettings'\r\n\r\nconst toolPermissionContextByConversationKey = new Map<\r\n string,\r\n ToolPermissionContext\r\n>()\r\n\r\nexport function getToolPermissionContextForConversationKey(options: {\r\n conversationKey: string\r\n isBypassPermissionsModeAvailable: boolean\r\n}): ToolPermissionContext {\r\n const existing = toolPermissionContextByConversationKey.get(\r\n options.conversationKey,\r\n )\r\n if (existing) {\r\n let next = existing\r\n\r\n if (\r\n next.isBypassPermissionsModeAvailable !==\r\n options.isBypassPermissionsModeAvailable\r\n ) {\r\n next = {\r\n ...next,\r\n isBypassPermissionsModeAvailable:\r\n options.isBypassPermissionsModeAvailable,\r\n }\r\n }\r\n\r\n if (\r\n !options.isBypassPermissionsModeAvailable &&\r\n next.mode === 'bypassPermissions'\r\n ) {\r\n next = { ...next, mode: 'default' }\r\n }\r\n\r\n if (next !== existing) {\r\n toolPermissionContextByConversationKey.set(options.conversationKey, next)\r\n }\r\n\r\n return next\r\n }\r\n\r\n const initial = loadToolPermissionContextFromDisk({\r\n isBypassPermissionsModeAvailable: options.isBypassPermissionsModeAvailable,\r\n })\r\n toolPermissionContextByConversationKey.set(options.conversationKey, initial)\r\n return initial\r\n}\r\n\r\nexport function setToolPermissionContextForConversationKey(options: {\r\n conversationKey: string\r\n context: ToolPermissionContext\r\n}): void {\r\n toolPermissionContextByConversationKey.set(\r\n options.conversationKey,\r\n options.context,\r\n )\r\n}\r\n\r\nexport function applyToolPermissionContextUpdateForConversationKey(options: {\r\n conversationKey: string\r\n isBypassPermissionsModeAvailable: boolean\r\n update: ToolPermissionContextUpdate\r\n}): ToolPermissionContext {\r\n const prev = getToolPermissionContextForConversationKey({\r\n conversationKey: options.conversationKey,\r\n isBypassPermissionsModeAvailable: options.isBypassPermissionsModeAvailable,\r\n })\r\n const next = applyToolPermissionContextUpdate(prev, options.update)\r\n toolPermissionContextByConversationKey.set(options.conversationKey, next)\r\n return next\r\n}\r\n\r\nexport function __resetToolPermissionContextStateForTests(): void {\r\n toolPermissionContextByConversationKey.clear()\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;AAOA,IAAM,yCAAyC,oBAAI,IAGjD;AAEK,SAAS,2CAA2C,SAGjC;AACxB,QAAM,WAAW,uCAAuC;AAAA,IACtD,QAAQ;AAAA,EACV;AACA,MAAI,UAAU;AACZ,QAAI,OAAO;AAEX,QACE,KAAK,qCACL,QAAQ,kCACR;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,kCACE,QAAQ;AAAA,MACZ;AAAA,IACF;AAEA,QACE,CAAC,QAAQ,oCACT,KAAK,SAAS,qBACd;AACA,aAAO,EAAE,GAAG,MAAM,MAAM,UAAU;AAAA,IACpC;AAEA,QAAI,SAAS,UAAU;AACrB,6CAAuC,IAAI,QAAQ,iBAAiB,IAAI;AAAA,IAC1E;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,kCAAkC;AAAA,IAChD,kCAAkC,QAAQ;AAAA,EAC5C,CAAC;AACD,yCAAuC,IAAI,QAAQ,iBAAiB,OAAO;AAC3E,SAAO;AACT;AAEO,SAAS,2CAA2C,SAGlD;AACP,yCAAuC;AAAA,IACrC,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACF;AAEO,SAAS,mDAAmD,SAIzC;AACxB,QAAM,OAAO,2CAA2C;AAAA,IACtD,iBAAiB,QAAQ;AAAA,IACzB,kCAAkC,QAAQ;AAAA,EAC5C,CAAC;AACD,QAAM,OAAO,iCAAiC,MAAM,QAAQ,MAAM;AAClE,yCAAuC,IAAI,QAAQ,iBAAiB,IAAI;AACxE,SAAO;AACT;AAEO,SAAS,4CAAkD;AAChE,yCAAuC,MAAM;AAC/C;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
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/constants/product.ts
|
|
8
|
+
var PRODUCT_NAME, PROJECT_FILE, PRODUCT_COMMAND, CONFIG_BASE_DIR, GITHUB_ISSUES_REPO_URL, ASCII_LOGO;
|
|
9
|
+
var init_product = __esm({
|
|
10
|
+
"src/constants/product.ts"() {
|
|
11
|
+
PRODUCT_NAME = "NewCraw";
|
|
12
|
+
PROJECT_FILE = "AGENTS.md";
|
|
13
|
+
PRODUCT_COMMAND = "newcraw";
|
|
14
|
+
CONFIG_BASE_DIR = ".newcraw";
|
|
15
|
+
GITHUB_ISSUES_REPO_URL = "https://github.com/YOUR_USERNAME/newcraw/issues";
|
|
16
|
+
ASCII_LOGO = `
|
|
17
|
+
_ _ ____
|
|
18
|
+
| \\ | | ___ __ __/ ___|_ __ __ ___ __
|
|
19
|
+
| \\| | / _ \\\\ \\ /\\ / / | | '__/ _\` \\ \\ /\\ / /
|
|
20
|
+
| |\\ || __/ \\ V V /| |___| | | (_| |\\ V V /
|
|
21
|
+
|_| \\_| \\___| \\_/\\_/ \\____|_| \\__,_| \\_/\\_/
|
|
22
|
+
|
|
23
|
+
`;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export {
|
|
28
|
+
PRODUCT_NAME,
|
|
29
|
+
PROJECT_FILE,
|
|
30
|
+
PRODUCT_COMMAND,
|
|
31
|
+
CONFIG_BASE_DIR,
|
|
32
|
+
GITHUB_ISSUES_REPO_URL,
|
|
33
|
+
ASCII_LOGO,
|
|
34
|
+
init_product
|
|
35
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/constants/product.ts"],
|
|
4
|
+
"sourcesContent": ["export const PRODUCT_NAME = 'NewCraw'\nexport const PRODUCT_URL = 'https://github.com/YOUR_USERNAME/newcraw'\nexport const PROJECT_FILE = 'AGENTS.md'\nexport const PRODUCT_COMMAND = 'newcraw'\nexport const CONFIG_BASE_DIR = '.newcraw'\nexport const CONFIG_FILE = '.newcraw.json'\nexport const GITHUB_ISSUES_REPO_URL =\n 'https://github.com/YOUR_USERNAME/newcraw/issues'\n\nexport const ASCII_LOGO = `\n _ _ ____ \n | \\\\ | | ___ __ __/ ___|_ __ __ ___ __\n | \\\\| | / _ \\\\\\\\ \\\\ /\\\\ / / | | '__/ _\\` \\\\ \\\\ /\\\\ / /\n | |\\\\ || __/ \\\\ V V /| |___| | | (_| |\\\\ V V / \n |_| \\\\_| \\\\___| \\\\_/\\\\_/ \\\\____|_| \\\\__,_| \\\\_/\\\\_/ \n \n`\n"],
|
|
5
|
+
"mappings": ";;;;;;;AAAA,IAAa,cAEA,cACA,iBACA,iBAEA,wBAGA;AATb;AAAA;AAAO,IAAM,eAAe;AAErB,IAAM,eAAe;AACrB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AAExB,IAAM,yBACX;AAEK,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -64,9 +64,19 @@ function kodeMessageToSdkMessage(message, sessionId) {
|
|
|
64
64
|
}
|
|
65
65
|
return null;
|
|
66
66
|
}
|
|
67
|
+
function makeSdkReasoningMessage(event, sessionId) {
|
|
68
|
+
return {
|
|
69
|
+
type: "reasoning",
|
|
70
|
+
session_id: sessionId,
|
|
71
|
+
reasoning_type: event.reasoningType,
|
|
72
|
+
content: event.content,
|
|
73
|
+
metadata: event.metadata
|
|
74
|
+
};
|
|
75
|
+
}
|
|
67
76
|
|
|
68
77
|
export {
|
|
69
78
|
makeSdkInitMessage,
|
|
70
79
|
makeSdkResultMessage,
|
|
71
|
-
kodeMessageToSdkMessage
|
|
80
|
+
kodeMessageToSdkMessage,
|
|
81
|
+
makeSdkReasoningMessage
|
|
72
82
|
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/protocol/kodeAgentStreamJson.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Message as KodeMessage, ReasoningEvent } from '@query'\r\n\r\n\r\nexport type SdkMessage =\r\n | {\r\n type: 'system'\r\n subtype: string\r\n session_id?: string\r\n model?: string\r\n cwd?: string\r\n tools?: string[]\r\n slash_commands?: string[]\r\n status?: string\r\n uuid?: string\r\n }\r\n | {\r\n type: 'user'\r\n session_id?: string\r\n uuid?: string\r\n parent_tool_use_id?: string | null\r\n message: { role: 'user'; content: any }\r\n }\r\n | {\r\n type: 'assistant'\r\n session_id?: string\r\n uuid?: string\r\n parent_tool_use_id?: string | null\r\n message: { role: 'assistant'; content: any[] }\r\n }\r\n | {\r\n type: 'result'\r\n subtype: 'success' | 'error_during_execution' | 'error_max_turns'\r\n result?: string\r\n structured_output?: Record<string, unknown>\r\n num_turns: number\r\n usage?: any\r\n total_cost_usd: number\r\n duration_ms: number\r\n duration_api_ms: number\r\n is_error: boolean\r\n session_id: string\r\n }\r\n | {\r\n type: 'reasoning'\r\n session_id?: string\r\n reasoning_type: ReasoningEvent['reasoningType']\r\n content: string\r\n metadata: Record<string, unknown>\r\n }\r\n | {\r\n type: 'log'\r\n log: { level: 'debug' | 'info' | 'warn' | 'error'; message: string }\r\n }\r\n\r\nfunction normalizeToolUseBlockTypes(block: any): any {\r\n if (!block || typeof block !== 'object') return block\r\n if (block.type === 'server_tool_use' || block.type === 'mcp_tool_use') {\r\n return { ...block, type: 'tool_use' }\r\n }\r\n return block\r\n}\r\n\r\nexport function makeSdkInitMessage(args: {\r\n sessionId: string\r\n cwd: string\r\n model?: string\r\n tools?: string[]\r\n slashCommands?: string[]\r\n}): SdkMessage {\r\n return {\r\n type: 'system',\r\n subtype: 'init',\r\n session_id: args.sessionId,\r\n cwd: args.cwd,\r\n model: args.model,\r\n tools: args.tools,\r\n ...(args.slashCommands ? { slash_commands: args.slashCommands } : {}),\r\n }\r\n}\r\n\r\nexport function makeSdkResultMessage(args: {\r\n sessionId: string\r\n result: string\r\n structuredOutput?: Record<string, unknown>\r\n numTurns: number\r\n usage?: any\r\n totalCostUsd: number\r\n durationMs: number\r\n durationApiMs: number\r\n isError: boolean\r\n}): SdkMessage {\r\n return {\r\n type: 'result',\r\n subtype: args.isError ? 'error_during_execution' : 'success',\r\n result: args.result,\r\n ...(args.structuredOutput\r\n ? { structured_output: args.structuredOutput }\r\n : {}),\r\n num_turns: args.numTurns,\r\n usage: args.usage,\r\n total_cost_usd: args.totalCostUsd,\r\n duration_ms: args.durationMs,\r\n duration_api_ms: args.durationApiMs,\r\n is_error: args.isError,\r\n session_id: args.sessionId,\r\n }\r\n}\r\n\r\nexport function kodeMessageToSdkMessage(\r\n message: KodeMessage,\r\n sessionId: string,\r\n): SdkMessage | null {\r\n if (message.type === 'progress') return null\r\n\r\n if (message.type === 'user') {\r\n return {\r\n type: 'user',\r\n session_id: sessionId,\r\n uuid: message.uuid,\r\n parent_tool_use_id: null,\r\n message: {\r\n role: 'user',\r\n content: message.message.content as any,\r\n },\r\n }\r\n }\r\n\r\n if (message.type === 'assistant') {\r\n const content = Array.isArray(message.message.content)\r\n ? message.message.content.map(normalizeToolUseBlockTypes)\r\n : []\r\n return {\r\n type: 'assistant',\r\n session_id: sessionId,\r\n uuid: message.uuid,\r\n parent_tool_use_id: null,\r\n message: {\r\n role: 'assistant',\r\n content: content as any[],\r\n },\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport function makeSdkReasoningMessage(\r\n event: ReasoningEvent,\r\n sessionId: string,\r\n): SdkMessage {\r\n return {\r\n type: 'reasoning',\r\n session_id: sessionId,\r\n reasoning_type: event.reasoningType,\r\n content: event.content,\r\n metadata: event.metadata,\r\n }\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;AAsDA,SAAS,2BAA2B,OAAiB;AACnD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,MAAI,MAAM,SAAS,qBAAqB,MAAM,SAAS,gBAAgB;AACrE,WAAO,EAAE,GAAG,OAAO,MAAM,WAAW;AAAA,EACtC;AACA,SAAO;AACT;AAEO,SAAS,mBAAmB,MAMpB;AACb,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,YAAY,KAAK;AAAA,IACjB,KAAK,KAAK;AAAA,IACV,OAAO,KAAK;AAAA,IACZ,OAAO,KAAK;AAAA,IACZ,GAAI,KAAK,gBAAgB,EAAE,gBAAgB,KAAK,cAAc,IAAI,CAAC;AAAA,EACrE;AACF;AAEO,SAAS,qBAAqB,MAUtB;AACb,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,KAAK,UAAU,2BAA2B;AAAA,IACnD,QAAQ,KAAK;AAAA,IACb,GAAI,KAAK,mBACL,EAAE,mBAAmB,KAAK,iBAAiB,IAC3C,CAAC;AAAA,IACL,WAAW,KAAK;AAAA,IAChB,OAAO,KAAK;AAAA,IACZ,gBAAgB,KAAK;AAAA,IACrB,aAAa,KAAK;AAAA,IAClB,iBAAiB,KAAK;AAAA,IACtB,UAAU,KAAK;AAAA,IACf,YAAY,KAAK;AAAA,EACnB;AACF;AAEO,SAAS,wBACd,SACA,WACmB;AACnB,MAAI,QAAQ,SAAS,WAAY,QAAO;AAExC,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,MAAM,QAAQ;AAAA,MACd,oBAAoB;AAAA,MACpB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS,QAAQ,QAAQ;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEA,MAAI,QAAQ,SAAS,aAAa;AAChC,UAAM,UAAU,MAAM,QAAQ,QAAQ,QAAQ,OAAO,IACjD,QAAQ,QAAQ,QAAQ,IAAI,0BAA0B,IACtD,CAAC;AACL,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,MAAM,QAAQ;AAAA,MACd,oBAAoB;AAAA,MACpB,SAAS;AAAA,QACP,MAAM;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,wBACd,OACA,WACY;AACZ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,gBAAgB,MAAM;AAAA,IACtB,SAAS,MAAM;AAAA,IACf,UAAU,MAAM;AAAA,EAClB;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import { createRequire as __newcrawCreateRequire } from "node:module";
|
|
2
2
|
const require = __newcrawCreateRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
isSettingSourceEnabled
|
|
5
|
+
} from "./chunk-INJSFEKL.js";
|
|
3
6
|
import {
|
|
4
7
|
getSettingsFileCandidates,
|
|
5
8
|
loadSettingsWithLegacyFallback,
|
|
6
9
|
saveSettingsToPrimaryAndSyncLegacy
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import {
|
|
9
|
-
isSettingSourceEnabled
|
|
10
|
-
} from "./chunk-INJSFEKL.js";
|
|
10
|
+
} from "./chunk-JI4HCLK7.js";
|
|
11
11
|
import {
|
|
12
12
|
getSessionPlugins
|
|
13
13
|
} from "./chunk-2UO3BFZH.js";
|
|
14
14
|
import {
|
|
15
|
-
getCwd
|
|
16
|
-
|
|
15
|
+
getCwd,
|
|
16
|
+
init_state
|
|
17
|
+
} from "./chunk-XYQZLDRB.js";
|
|
17
18
|
|
|
18
19
|
// src/services/ui/outputStyles.ts
|
|
19
20
|
import figures from "figures";
|
|
@@ -25,6 +26,7 @@ import matter from "gray-matter";
|
|
|
25
26
|
import yaml from "js-yaml";
|
|
26
27
|
|
|
27
28
|
// src/utils/config/localSettings.ts
|
|
29
|
+
init_state();
|
|
28
30
|
function readLocalSettings(options) {
|
|
29
31
|
const projectDir = options?.projectDir ?? getCwd();
|
|
30
32
|
const loaded = loadSettingsWithLegacyFallback({
|
|
@@ -58,6 +60,7 @@ function updateLocalSettings(patch, options) {
|
|
|
58
60
|
}
|
|
59
61
|
|
|
60
62
|
// src/services/ui/outputStyles.ts
|
|
63
|
+
init_state();
|
|
61
64
|
var DEFAULT_OUTPUT_STYLE = "default";
|
|
62
65
|
function normalizeString(value) {
|
|
63
66
|
if (typeof value !== "string") return null;
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/services/ui/outputStyles.ts", "../src/utils/config/localSettings.ts"],
|
|
4
4
|
"sourcesContent": ["import figures from 'figures'\r\nimport { memoize } from 'lodash-es'\r\nimport { existsSync, readdirSync, readFileSync, statSync } from 'fs'\r\nimport { basename, dirname, join, resolve } from 'path'\r\nimport { homedir } from 'os'\r\nimport matter from 'gray-matter'\r\nimport yaml from 'js-yaml'\r\nimport { getSessionPlugins } from '@utils/session/sessionPlugins'\r\nimport { readLocalSettings, updateLocalSettings } from '@utils/config/localSettings'\r\nimport { getCwd } from '@utils/state'\r\nimport { isSettingSourceEnabled } from '@utils/config/settingSources'\r\n\r\nexport type OutputStyleSource =\r\n | 'built-in'\r\n | 'plugin'\r\n | 'userSettings'\r\n | 'projectSettings'\r\n | 'policySettings'\r\n\r\nexport type OutputStyleDefinition = {\r\n name: string\r\n description: string\r\n prompt: string\r\n source: OutputStyleSource\r\n keepCodingInstructions?: boolean\r\n}\r\n\r\nexport type OutputStyleMap = Record<string, OutputStyleDefinition | null>\r\n\r\nexport const DEFAULT_OUTPUT_STYLE = 'default'\r\n\r\nfunction normalizeString(value: unknown): string | null {\r\n if (typeof value !== 'string') return null\r\n const trimmed = value.trim()\r\n return trimmed ? trimmed : null\r\n}\r\n\r\nfunction getClaudePolicyBaseDir(): string {\r\n switch (process.platform) {\r\n case 'darwin':\r\n return '/Library/Application Support/ClaudeCode'\r\n case 'win32':\r\n return existsSync('C:\\\\Program Files\\\\ClaudeCode')\r\n ? 'C:\\\\Program Files\\\\ClaudeCode'\r\n : 'C:\\\\ProgramData\\\\ClaudeCode'\r\n default:\r\n return '/etc/claude-code'\r\n }\r\n}\r\n\r\nfunction getUserConfigBaseDirs(): { claude: string; newcraw: string }[] {\r\n const out: { claude: string; newcraw: string }[] = []\r\n\r\n const hasAnyOverride =\r\n typeof process.env.CLAUDE_CONFIG_DIR === 'string' ||\r\n typeof process.env.NEWCRAW_CONFIG_DIR === 'string'\r\n\r\n const claudeBase = normalizeString(process.env.CLAUDE_CONFIG_DIR)\r\n const newcrawBase = normalizeString(process.env.NEWCRAW_CONFIG_DIR)\r\n\r\n if (claudeBase) out.push({ claude: resolve(claudeBase), newcraw: resolve(claudeBase) })\r\n if (newcrawBase) out.push({ claude: resolve(newcrawBase), newcraw: resolve(newcrawBase) })\r\n\r\n if (hasAnyOverride) {\r\n return dedupeConfigBases(out)\r\n }\r\n\r\n return dedupeConfigBases([\r\n { claude: join(homedir(), '.claude'), newcraw: join(homedir(), '.claude') },\r\n { claude: join(homedir(), '.newcraw'), newcraw: join(homedir(), '.newcraw') },\r\n ])\r\n}\r\n\r\nfunction dedupeConfigBases(\r\n bases: Array<{ claude: string; newcraw: string }>,\r\n): Array<{ claude: string; newcraw: string }> {\r\n const seen = new Set<string>()\r\n const out: Array<{ claude: string; newcraw: string }> = []\r\n for (const base of bases) {\r\n const key = `${base.claude}::${base.newcraw}`\r\n if (seen.has(key)) continue\r\n seen.add(key)\r\n out.push(base)\r\n }\r\n return out\r\n}\r\n\r\nfunction findProjectSubdirs(subdir: string, cwd: string): string[] {\r\n const result: string[] = []\r\n const home = resolve(homedir())\r\n let current = resolve(cwd)\r\n\r\n while (current !== home) {\r\n const claudeDir = join(current, '.claude', subdir)\r\n if (existsSync(claudeDir)) result.push(claudeDir)\r\n\r\n const newcrawDir = join(current, '.newcraw', subdir)\r\n if (existsSync(newcrawDir)) result.push(newcrawDir)\r\n\r\n const parent = dirname(current)\r\n if (parent === current) break\r\n current = parent\r\n }\r\n\r\n return result\r\n}\r\n\r\nfunction markdownFirstLineOrHeading(content: string, fallback: string): string {\r\n const lines = content.split('\\n')\r\n for (const line of lines) {\r\n const trimmed = line.trim()\r\n if (!trimmed) continue\r\n const heading = trimmed.match(/^#+\\s+(.+)$/)?.[1] ?? trimmed\r\n return heading.length > 100 ? `${heading.substring(0, 97)}...` : heading\r\n }\r\n return fallback\r\n}\r\n\r\nfunction listMarkdownFilesRecursively(rootDir: string): string[] {\r\n const files: string[] = []\r\n const visitedDirs = new Set<string>()\r\n\r\n const walk = (dirPath: string) => {\r\n let dirStat: ReturnType<typeof statSync>\r\n try {\r\n dirStat = statSync(dirPath)\r\n } catch {\r\n return\r\n }\r\n if (!dirStat.isDirectory()) return\r\n\r\n const dirKey = `${dirStat.dev}:${dirStat.ino}`\r\n if (visitedDirs.has(dirKey)) return\r\n visitedDirs.add(dirKey)\r\n\r\n let entries: Array<{ name: string; isDirectory(): boolean; isFile(): boolean; isSymbolicLink(): boolean }>\r\n try {\r\n entries = readdirSync(dirPath, { withFileTypes: true, encoding: 'utf8' }) as any\r\n } catch {\r\n return\r\n }\r\n\r\n for (const entry of entries) {\r\n const name = String(entry.name ?? '')\r\n const fullPath = join(dirPath, name)\r\n\r\n if (entry.isDirectory()) {\r\n walk(fullPath)\r\n continue\r\n }\r\n\r\n if (entry.isFile()) {\r\n if (name.endsWith('.md')) files.push(fullPath)\r\n continue\r\n }\r\n\r\n if (entry.isSymbolicLink()) {\r\n try {\r\n const st = statSync(fullPath)\r\n if (st.isDirectory()) {\r\n walk(fullPath)\r\n } else if (st.isFile() && name.endsWith('.md')) {\r\n files.push(fullPath)\r\n }\r\n } catch {\r\n continue\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!existsSync(rootDir)) return []\r\n walk(rootDir)\r\n return files\r\n}\r\n\r\nfunction readMarkdownFile(filePath: string): { frontmatter: any; content: string } | null {\r\n try {\r\n const raw = readFileSync(filePath, 'utf8')\r\n const yamlSchema = (yaml as any).JSON_SCHEMA\r\n const matterOptions = {\r\n engines: {\r\n yaml: {\r\n parse: (input: string) =>\r\n yaml.load(input, yamlSchema ? { schema: yamlSchema } : undefined) ??\r\n {},\r\n },\r\n },\r\n }\r\n const parsed = matter(raw, matterOptions)\r\n return { frontmatter: (parsed.data as any) ?? {}, content: String(parsed.content ?? '') }\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nfunction inodeKeyForPath(filePath: string): string | null {\r\n try {\r\n const st = statSync(filePath)\r\n if (typeof (st as any).dev === 'number' && typeof (st as any).ino === 'number') {\r\n return `${(st as any).dev}:${(st as any).ino}`\r\n }\r\n return null\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nconst INSIGHTS_SECTION = `\r\n## Insights\r\nIn order to encourage learning, before and after writing code, always provide brief educational explanations about implementation choices using (with backticks):\r\n\"\\`${figures.star} Insight \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\\`\r\n[2-3 key educational points]\r\n\\`\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\\`\"\r\n\r\nThese insights should be included in the conversation, not in the codebase. You should generally focus on interesting insights that are specific to the codebase or the code you just wrote, rather than general programming concepts.`\r\n\r\nfunction getBuiltInOutputStyles(): OutputStyleMap {\r\n return {\r\n [DEFAULT_OUTPUT_STYLE]: null,\r\n Explanatory: {\r\n name: 'Explanatory',\r\n source: 'built-in',\r\n description: 'Claude explains its implementation choices and codebase patterns',\r\n keepCodingInstructions: true,\r\n prompt: `You are an interactive CLI tool that helps users with software engineering tasks. In addition to software engineering tasks, you should provide educational insights about the codebase along the way.\r\n\r\nYou should be clear and educational, providing helpful explanations while remaining focused on the task. Balance educational content with task completion. When providing insights, you may exceed typical length constraints, but remain focused and relevant.\r\n\r\n# Explanatory Style Active\r\n${INSIGHTS_SECTION}`,\r\n },\r\n Learning: {\r\n name: 'Learning',\r\n source: 'built-in',\r\n description:\r\n 'Claude pauses and asks you to write small pieces of code for hands-on practice',\r\n keepCodingInstructions: true,\r\n prompt: `You are an interactive CLI tool that helps users with software engineering tasks. In addition to software engineering tasks, you should help users learn more about the codebase through hands-on practice and educational insights.\r\n\r\nYou should be collaborative and encouraging. Balance task completion with learning by requesting user input for meaningful design decisions while handling routine implementation yourself. \r\n\r\n# Learning Style Active\r\n## Requesting Human Contributions\r\nIn order to encourage learning, ask the human to contribute 2-10 line code pieces when generating 20+ lines involving:\r\n- Design decisions (error handling, data structures)\r\n- Business logic with multiple valid approaches \r\n- Key algorithms or interface definitions\r\n\r\n**TodoList Integration**: If using a TodoList for the overall task, include a specific todo item like \"Request human input on [specific decision]\" when planning to request human input. This ensures proper task tracking. Note: TodoList is not required for all tasks.\r\n\r\nExample TodoList flow:\r\n \u2713 \"Set up component structure with placeholder for logic\"\r\n \u2713 \"Request human collaboration on decision logic implementation\"\r\n \u2713 \"Integrate contribution and complete feature\"\r\n\r\n### Request Format\r\n\\`\\`\\`\r\n${figures.bullet} **Learn by Doing**\r\n**Context:** [what's built and why this decision matters]\r\n**Your Task:** [specific function/section in file, mention file and TODO(human) but do not include line numbers]\r\n**Guidance:** [trade-offs and constraints to consider]\r\n\\`\\`\\`\r\n\r\n### Key Guidelines\r\n- Frame contributions as valuable design decisions, not busy work\r\n- You must first add a TODO(human) section into the codebase with your editing tools before making the Learn by Doing request \r\n- Make sure there is one and only one TODO(human) section in the code\r\n- Don't take any action or output anything after the Learn by Doing request. Wait for human implementation before proceeding.\r\n\r\n### Example Requests\r\n\r\n**Whole Function Example:**\r\n\\`\\`\\`\r\n${figures.bullet} **Learn by Doing**\r\n\r\n**Context:** I've set up the hint feature UI with a button that triggers the hint system. The infrastructure is ready: when clicked, it calls selectHintCell() to determine which cell to hint, then highlights that cell with a yellow background and shows possible values. The hint system needs to decide which empty cell would be most helpful to reveal to the user.\r\n\r\n**Your Task:** In sudoku.js, implement the selectHintCell(board) function. Look for TODO(human). This function should analyze the board and return {row, col} for the best cell to hint, or null if the puzzle is complete.\r\n\r\n**Guidance:** Consider multiple strategies: prioritize cells with only one possible value (naked singles), or cells that appear in rows/columns/boxes with many filled cells. You could also consider a balanced approach that helps without making it too easy. The board parameter is a 9x9 array where 0 represents empty cells.\r\n\\`\\`\\`\r\n\r\n**Partial Function Example:**\r\n\\`\\`\\`\r\n${figures.bullet} **Learn by Doing**\r\n\r\n**Context:** I've built a file upload component that validates files before accepting them. The main validation logic is complete, but it needs specific handling for different file type categories in the switch statement.\r\n\r\n**Your Task:** In upload.js, inside the validateFile() function's switch statement, implement the 'case \"document\":' branch. Look for TODO(human). This should validate document files (pdf, doc, docx).\r\n\r\n**Guidance:** Consider checking file size limits (maybe 10MB for documents?), validating the file extension matches the MIME type, and returning {valid: boolean, error?: string}. The file object has properties: name, size, type.\r\n\\`\\`\\`\r\n\r\n**Debugging Example:**\r\n\\`\\`\\`\r\n${figures.bullet} **Learn by Doing**\r\n\r\n**Context:** The user reported that number inputs aren't working correctly in the calculator. I've identified the handleInput() function as the likely source, but need to understand what values are being processed.\r\n\r\n**Your Task:** In calculator.js, inside the handleInput() function, add 2-3 console.log statements after the TODO(human) comment to help debug why number inputs fail.\r\n\r\n**Guidance:** Consider logging: the raw input value, the parsed result, and any validation state. This will help us understand where the conversion breaks.\r\n\\`\\`\\`\r\n\r\n### After Contributions\r\nShare one insight connecting their code to broader patterns or system effects. Avoid praise or repetition.\r\n\r\n## Insights\r\n${INSIGHTS_SECTION}`,\r\n },\r\n }\r\n}\r\n\r\nfunction parseKeepCodingInstructions(value: unknown): boolean | undefined {\r\n if (value === 'true') return true\r\n if (value === 'false') return false\r\n return undefined\r\n}\r\n\r\nfunction parseCustomOutputStyleFile(options: {\r\n filePath: string\r\n source: Exclude<OutputStyleSource, 'built-in' | 'plugin'>\r\n}): OutputStyleDefinition | null {\r\n const parsed = readMarkdownFile(options.filePath)\r\n if (!parsed) return null\r\n\r\n const base = basename(options.filePath, '.md')\r\n const name = normalizeString(parsed.frontmatter?.name) ?? base\r\n const description =\r\n normalizeString(parsed.frontmatter?.description) ??\r\n markdownFirstLineOrHeading(parsed.content, `Custom ${base} output style`)\r\n const keepCodingInstructions = parseKeepCodingInstructions(\r\n parsed.frontmatter?.['keep-coding-instructions'],\r\n )\r\n const prompt = parsed.content.trim()\r\n\r\n return {\r\n name,\r\n description,\r\n prompt,\r\n source: options.source,\r\n ...(keepCodingInstructions !== undefined ? { keepCodingInstructions } : {}),\r\n }\r\n}\r\n\r\nfunction parsePluginOutputStyleFile(options: {\r\n filePath: string\r\n pluginName: string\r\n seen: Set<string>\r\n}): OutputStyleDefinition | null {\r\n const inodeKey = inodeKeyForPath(options.filePath)\r\n const dedupeKey = inodeKey ? `inode:${inodeKey}` : `path:${options.filePath}`\r\n if (options.seen.has(dedupeKey)) return null\r\n options.seen.add(dedupeKey)\r\n\r\n const parsed = readMarkdownFile(options.filePath)\r\n if (!parsed) return null\r\n\r\n const base = basename(options.filePath, '.md')\r\n const styleName = normalizeString(parsed.frontmatter?.name) ?? base\r\n const fullName = `${options.pluginName}:${styleName}`\r\n const description =\r\n normalizeString(parsed.frontmatter?.description) ??\r\n markdownFirstLineOrHeading(\r\n parsed.content,\r\n `Output style from ${options.pluginName} plugin`,\r\n )\r\n const prompt = parsed.content.trim()\r\n\r\n return {\r\n name: fullName,\r\n description,\r\n prompt,\r\n source: 'plugin',\r\n }\r\n}\r\n\r\nfunction loadPluginOutputStyles(): OutputStyleDefinition[] {\r\n const out: OutputStyleDefinition[] = []\r\n const plugins = getSessionPlugins()\r\n for (const plugin of plugins) {\r\n const pluginName = plugin.name\r\n const seen = new Set<string>()\r\n for (const dir of plugin.outputStylesDirs ?? []) {\r\n let st: ReturnType<typeof statSync>\r\n try {\r\n st = statSync(dir)\r\n } catch {\r\n continue\r\n }\r\n if (st.isFile()) {\r\n if (!dir.endsWith('.md')) continue\r\n const style = parsePluginOutputStyleFile({\r\n filePath: dir,\r\n pluginName,\r\n seen,\r\n })\r\n if (style) out.push(style)\r\n continue\r\n }\r\n\r\n if (st.isDirectory()) {\r\n const files = listMarkdownFilesRecursively(dir)\r\n for (const filePath of files) {\r\n const style = parsePluginOutputStyleFile({\r\n filePath,\r\n pluginName,\r\n seen,\r\n })\r\n if (style) out.push(style)\r\n }\r\n }\r\n }\r\n }\r\n return out\r\n}\r\n\r\nfunction loadCustomOutputStyles(options: { cwd: string }): OutputStyleDefinition[] {\r\n const out: OutputStyleDefinition[] = []\r\n const seen = new Set<string>()\r\n\r\n const policyDir = join(\r\n getClaudePolicyBaseDir(),\r\n '.claude',\r\n 'output-styles',\r\n )\r\n for (const filePath of listMarkdownFilesRecursively(policyDir)) {\r\n const inodeKey = inodeKeyForPath(filePath)\r\n const dedupeKey = inodeKey ? `inode:${inodeKey}` : `path:${filePath}`\r\n if (seen.has(dedupeKey)) continue\r\n seen.add(dedupeKey)\r\n const style = parseCustomOutputStyleFile({\r\n filePath,\r\n source: 'policySettings',\r\n })\r\n if (style) out.push(style)\r\n }\r\n\r\n if (isSettingSourceEnabled('userSettings')) {\r\n const userBases = getUserConfigBaseDirs()\r\n for (const base of userBases) {\r\n for (const userBaseDir of new Set([base.claude, base.newcraw])) {\r\n const dirPath = join(userBaseDir, 'output-styles')\r\n for (const filePath of listMarkdownFilesRecursively(dirPath)) {\r\n const inodeKey = inodeKeyForPath(filePath)\r\n const dedupeKey = inodeKey ? `inode:${inodeKey}` : `path:${filePath}`\r\n if (seen.has(dedupeKey)) continue\r\n seen.add(dedupeKey)\r\n const style = parseCustomOutputStyleFile({\r\n filePath,\r\n source: 'userSettings',\r\n })\r\n if (style) out.push(style)\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (isSettingSourceEnabled('projectSettings')) {\r\n for (const dirPath of findProjectSubdirs('output-styles', options.cwd)) {\r\n for (const filePath of listMarkdownFilesRecursively(dirPath)) {\r\n const inodeKey = inodeKeyForPath(filePath)\r\n const dedupeKey = inodeKey ? `inode:${inodeKey}` : `path:${filePath}`\r\n if (seen.has(dedupeKey)) continue\r\n seen.add(dedupeKey)\r\n const style = parseCustomOutputStyleFile({\r\n filePath,\r\n source: 'projectSettings',\r\n })\r\n if (style) out.push(style)\r\n }\r\n }\r\n }\r\n\r\n return out\r\n}\r\n\r\nexport const getAvailableOutputStyles = memoize((): OutputStyleMap => {\r\n const cwd = getCwd()\r\n const builtIn = getBuiltInOutputStyles()\r\n const merged: OutputStyleMap = { ...builtIn }\r\n\r\n for (const style of loadPluginOutputStyles()) {\r\n merged[style.name] = style\r\n }\r\n\r\n const custom = loadCustomOutputStyles({ cwd })\r\n const user = custom.filter(s => s.source === 'userSettings')\r\n const project = custom.filter(s => s.source === 'projectSettings')\r\n const policy = custom.filter(s => s.source === 'policySettings')\r\n\r\n for (const style of user) merged[style.name] = style\r\n for (const style of project) merged[style.name] = style\r\n for (const style of policy) merged[style.name] = style\r\n\r\n return merged\r\n})\r\n\r\nexport function clearOutputStyleCache(): void {\r\n ;(getAvailableOutputStyles as any).cache?.clear?.()\r\n}\r\n\r\nexport function getCurrentOutputStyle(): string {\r\n if (!isSettingSourceEnabled('localSettings')) return DEFAULT_OUTPUT_STYLE\r\n\r\n const settings = readLocalSettings()\r\n const candidate = normalizeString(settings.outputStyle)\r\n return candidate ?? DEFAULT_OUTPUT_STYLE\r\n}\r\n\r\nexport function setCurrentOutputStyle(styleName: string): void {\r\n updateLocalSettings({ outputStyle: styleName })\r\n}\r\n\r\nexport function resolveOutputStyleName(input: string): string | null {\r\n const raw = normalizeString(input)\r\n if (!raw) return null\r\n const styles = getAvailableOutputStyles()\r\n if (raw in styles) return raw\r\n const lower = raw.toLowerCase()\r\n for (const name of Object.keys(styles)) {\r\n if (name.toLowerCase() === lower) return name\r\n }\r\n return null\r\n}\r\n\r\nexport function getCurrentOutputStyleDefinition(): OutputStyleDefinition | null {\r\n const current = getCurrentOutputStyle()\r\n const styles = getAvailableOutputStyles()\r\n return styles[current] ?? null\r\n}\r\n\r\nexport function getOutputStyleSystemPromptAdditions(): string[] {\r\n const style = getCurrentOutputStyleDefinition()\r\n if (!style) return []\r\n const prompt = style.prompt.trim()\r\n if (!prompt) return []\r\n return [`\\n# Output Style: ${style.name}\\n${prompt}\\n`]\r\n}\r\n", "import { join } from 'path'\r\nimport { getCwd } from '@utils/state'\r\nimport {\r\n getSettingsFileCandidates,\r\n loadSettingsWithLegacyFallback,\r\n saveSettingsToPrimaryAndSyncLegacy,\r\n} from '@utils/config/settingsFiles'\r\n\r\nexport type LocalSettings = {\r\n outputStyle?: unknown\r\n [key: string]: unknown\r\n}\r\n\r\nexport function getLocalSettingsPath(options?: {\r\n projectDir?: string\r\n}): string {\r\n const projectDir = options?.projectDir ?? getCwd()\r\n return join(projectDir, '.newcraw', 'settings.local.json')\r\n}\r\n\r\nexport function readLocalSettings(options?: {\r\n projectDir?: string\r\n}): LocalSettings {\r\n const projectDir = options?.projectDir ?? getCwd()\r\n const loaded = loadSettingsWithLegacyFallback({\r\n destination: 'localSettings',\r\n projectDir,\r\n migrateToPrimary: true,\r\n })\r\n return (loaded.settings as LocalSettings | null) ?? {}\r\n}\r\n\r\nexport function updateLocalSettings(\r\n patch: Record<string, unknown>,\r\n options?: {\r\n projectDir?: string\r\n },\r\n): LocalSettings {\r\n const projectDir = options?.projectDir ?? getCwd()\r\n const candidates = getSettingsFileCandidates({\r\n destination: 'localSettings',\r\n projectDir,\r\n })\r\n const existing =\r\n (candidates\r\n ? loadSettingsWithLegacyFallback({\r\n destination: 'localSettings',\r\n projectDir,\r\n migrateToPrimary: true,\r\n }).settings\r\n : null) ?? {}\r\n\r\n const next = { ...(existing as Record<string, unknown>), ...patch }\r\n\r\n if (candidates) {\r\n saveSettingsToPrimaryAndSyncLegacy({\r\n destination: 'localSettings',\r\n projectDir,\r\n settings: next,\r\n syncLegacyIfExists: true,\r\n })\r\n }\r\n\r\n return next as LocalSettings\r\n}\r\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA,OAAO,aAAa;AACpB,SAAS,eAAe;AACxB,SAAS,YAAY,aAAa,cAAc,gBAAgB;AAChE,SAAS,UAAU,SAAS,MAAM,eAAe;AACjD,SAAS,eAAe;AACxB,OAAO,YAAY;AACnB,OAAO,UAAU;;;ACLjB;AAmBO,SAAS,kBAAkB,SAEhB;AAChB,QAAM,aAAa,SAAS,cAAc,OAAO;AACjD,QAAM,SAAS,+BAA+B;AAAA,IAC5C,aAAa;AAAA,IACb;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC;AACD,SAAQ,OAAO,YAAqC,CAAC;AACvD;AAEO,SAAS,oBACd,OACA,SAGe;AACf,QAAM,aAAa,SAAS,cAAc,OAAO;AACjD,QAAM,aAAa,0BAA0B;AAAA,IAC3C,aAAa;AAAA,IACb;AAAA,EACF,CAAC;AACD,QAAM,YACH,aACG,+BAA+B;AAAA,IAC7B,aAAa;AAAA,IACb;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC,EAAE,WACH,SAAS,CAAC;AAEhB,QAAM,OAAO,EAAE,GAAI,UAAsC,GAAG,MAAM;AAElE,MAAI,YAAY;AACd,uCAAmC;AAAA,MACjC,aAAa;AAAA,MACb;AAAA,MACA,UAAU;AAAA,MACV,oBAAoB;AAAA,IACtB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;ADvDA;AAoBO,IAAM,uBAAuB;AAEpC,SAAS,gBAAgB,OAA+B;AACtD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,UAAU,MAAM,KAAK;AAC3B,SAAO,UAAU,UAAU;AAC7B;AAEA,SAAS,yBAAiC;AACxC,UAAQ,QAAQ,UAAU;AAAA,IACxB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,WAAW,+BAA+B,IAC7C,kCACA;AAAA,IACN;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,wBAA+D;AACtE,QAAM,MAA6C,CAAC;AAEpD,QAAM,iBACJ,OAAO,QAAQ,IAAI,sBAAsB,YACzC,OAAO,QAAQ,IAAI,uBAAuB;AAE5C,QAAM,aAAa,gBAAgB,QAAQ,IAAI,iBAAiB;AAChE,QAAM,cAAc,gBAAgB,QAAQ,IAAI,kBAAkB;AAElE,MAAI,WAAY,KAAI,KAAK,EAAE,QAAQ,QAAQ,UAAU,GAAG,SAAS,QAAQ,UAAU,EAAE,CAAC;AACtF,MAAI,YAAa,KAAI,KAAK,EAAE,QAAQ,QAAQ,WAAW,GAAG,SAAS,QAAQ,WAAW,EAAE,CAAC;AAEzF,MAAI,gBAAgB;AAClB,WAAO,kBAAkB,GAAG;AAAA,EAC9B;AAEA,SAAO,kBAAkB;AAAA,IACvB,EAAE,QAAQ,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS,KAAK,QAAQ,GAAG,SAAS,EAAE;AAAA,IAC1E,EAAE,QAAQ,KAAK,QAAQ,GAAG,UAAU,GAAG,SAAS,KAAK,QAAQ,GAAG,UAAU,EAAE;AAAA,EAC9E,CAAC;AACH;AAEA,SAAS,kBACP,OAC4C;AAC5C,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,MAAkD,CAAC;AACzD,aAAW,QAAQ,OAAO;AACxB,UAAM,MAAM,GAAG,KAAK,MAAM,KAAK,KAAK,OAAO;AAC3C,QAAI,KAAK,IAAI,GAAG,EAAG;AACnB,SAAK,IAAI,GAAG;AACZ,QAAI,KAAK,IAAI;AAAA,EACf;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,QAAgB,KAAuB;AACjE,QAAM,SAAmB,CAAC;AAC1B,QAAM,OAAO,QAAQ,QAAQ,CAAC;AAC9B,MAAI,UAAU,QAAQ,GAAG;AAEzB,SAAO,YAAY,MAAM;AACvB,UAAM,YAAY,KAAK,SAAS,WAAW,MAAM;AACjD,QAAI,WAAW,SAAS,EAAG,QAAO,KAAK,SAAS;AAEhD,UAAM,aAAa,KAAK,SAAS,YAAY,MAAM;AACnD,QAAI,WAAW,UAAU,EAAG,QAAO,KAAK,UAAU;AAElD,UAAM,SAAS,QAAQ,OAAO;AAC9B,QAAI,WAAW,QAAS;AACxB,cAAU;AAAA,EACZ;AAEA,SAAO;AACT;AAEA,SAAS,2BAA2B,SAAiB,UAA0B;AAC7E,QAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAU,KAAK,KAAK;AAC1B,QAAI,CAAC,QAAS;AACd,UAAM,UAAU,QAAQ,MAAM,aAAa,IAAI,CAAC,KAAK;AACrD,WAAO,QAAQ,SAAS,MAAM,GAAG,QAAQ,UAAU,GAAG,EAAE,CAAC,QAAQ;AAAA,EACnE;AACA,SAAO;AACT;AAEA,SAAS,6BAA6B,SAA2B;AAC/D,QAAM,QAAkB,CAAC;AACzB,QAAM,cAAc,oBAAI,IAAY;AAEpC,QAAM,OAAO,CAAC,YAAoB;AAChC,QAAI;AACJ,QAAI;AACF,gBAAU,SAAS,OAAO;AAAA,IAC5B,QAAQ;AACN;AAAA,IACF;AACA,QAAI,CAAC,QAAQ,YAAY,EAAG;AAE5B,UAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,QAAQ,GAAG;AAC5C,QAAI,YAAY,IAAI,MAAM,EAAG;AAC7B,gBAAY,IAAI,MAAM;AAEtB,QAAI;AACJ,QAAI;AACF,gBAAU,YAAY,SAAS,EAAE,eAAe,MAAM,UAAU,OAAO,CAAC;AAAA,IAC1E,QAAQ;AACN;AAAA,IACF;AAEA,eAAW,SAAS,SAAS;AAC3B,YAAM,OAAO,OAAO,MAAM,QAAQ,EAAE;AACpC,YAAM,WAAW,KAAK,SAAS,IAAI;AAEnC,UAAI,MAAM,YAAY,GAAG;AACvB,aAAK,QAAQ;AACb;AAAA,MACF;AAEA,UAAI,MAAM,OAAO,GAAG;AAClB,YAAI,KAAK,SAAS,KAAK,EAAG,OAAM,KAAK,QAAQ;AAC7C;AAAA,MACF;AAEA,UAAI,MAAM,eAAe,GAAG;AAC1B,YAAI;AACF,gBAAM,KAAK,SAAS,QAAQ;AAC5B,cAAI,GAAG,YAAY,GAAG;AACpB,iBAAK,QAAQ;AAAA,UACf,WAAW,GAAG,OAAO,KAAK,KAAK,SAAS,KAAK,GAAG;AAC9C,kBAAM,KAAK,QAAQ;AAAA,UACrB;AAAA,QACF,QAAQ;AACN;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,WAAW,OAAO,EAAG,QAAO,CAAC;AAClC,OAAK,OAAO;AACZ,SAAO;AACT;AAEA,SAAS,iBAAiB,UAAgE;AACxF,MAAI;AACF,UAAM,MAAM,aAAa,UAAU,MAAM;AACzC,UAAM,aAAc,KAAa;AACjC,UAAM,gBAAgB;AAAA,MACpB,SAAS;AAAA,QACP,MAAM;AAAA,UACJ,OAAO,CAAC,UACN,KAAK,KAAK,OAAO,aAAa,EAAE,QAAQ,WAAW,IAAI,MAAS,KAChE,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAAS,OAAO,KAAK,aAAa;AACxC,WAAO,EAAE,aAAc,OAAO,QAAgB,CAAC,GAAG,SAAS,OAAO,OAAO,WAAW,EAAE,EAAE;AAAA,EAC1F,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,gBAAgB,UAAiC;AACxD,MAAI;AACF,UAAM,KAAK,SAAS,QAAQ;AAC5B,QAAI,OAAQ,GAAW,QAAQ,YAAY,OAAQ,GAAW,QAAQ,UAAU;AAC9E,aAAO,GAAI,GAAW,GAAG,IAAK,GAAW,GAAG;AAAA,IAC9C;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,mBAAmB;AAAA;AAAA;AAAA,KAGpB,QAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAMjB,SAAS,yBAAyC;AAChD,SAAO;AAAA,IACL,CAAC,oBAAoB,GAAG;AAAA,IACxB,aAAa;AAAA,MACX,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,wBAAwB;AAAA,MACxB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKZ,gBAAgB;AAAA,IACd;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,aACE;AAAA,MACF,wBAAwB;AAAA,MACxB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBZ,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBd,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWd,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWd,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAad,gBAAgB;AAAA,IACd;AAAA,EACF;AACF;AAEA,SAAS,4BAA4B,OAAqC;AACxE,MAAI,UAAU,OAAQ,QAAO;AAC7B,MAAI,UAAU,QAAS,QAAO;AAC9B,SAAO;AACT;AAEA,SAAS,2BAA2B,SAGH;AAC/B,QAAM,SAAS,iBAAiB,QAAQ,QAAQ;AAChD,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,OAAO,SAAS,QAAQ,UAAU,KAAK;AAC7C,QAAM,OAAO,gBAAgB,OAAO,aAAa,IAAI,KAAK;AAC1D,QAAM,cACJ,gBAAgB,OAAO,aAAa,WAAW,KAC/C,2BAA2B,OAAO,SAAS,UAAU,IAAI,eAAe;AAC1E,QAAM,yBAAyB;AAAA,IAC7B,OAAO,cAAc,0BAA0B;AAAA,EACjD;AACA,QAAM,SAAS,OAAO,QAAQ,KAAK;AAEnC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB,GAAI,2BAA2B,SAAY,EAAE,uBAAuB,IAAI,CAAC;AAAA,EAC3E;AACF;AAEA,SAAS,2BAA2B,SAIH;AAC/B,QAAM,WAAW,gBAAgB,QAAQ,QAAQ;AACjD,QAAM,YAAY,WAAW,SAAS,QAAQ,KAAK,QAAQ,QAAQ,QAAQ;AAC3E,MAAI,QAAQ,KAAK,IAAI,SAAS,EAAG,QAAO;AACxC,UAAQ,KAAK,IAAI,SAAS;AAE1B,QAAM,SAAS,iBAAiB,QAAQ,QAAQ;AAChD,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,OAAO,SAAS,QAAQ,UAAU,KAAK;AAC7C,QAAM,YAAY,gBAAgB,OAAO,aAAa,IAAI,KAAK;AAC/D,QAAM,WAAW,GAAG,QAAQ,UAAU,IAAI,SAAS;AACnD,QAAM,cACJ,gBAAgB,OAAO,aAAa,WAAW,KAC/C;AAAA,IACE,OAAO;AAAA,IACP,qBAAqB,QAAQ,UAAU;AAAA,EACzC;AACF,QAAM,SAAS,OAAO,QAAQ,KAAK;AAEnC,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV;AACF;AAEA,SAAS,yBAAkD;AACzD,QAAM,MAA+B,CAAC;AACtC,QAAM,UAAU,kBAAkB;AAClC,aAAW,UAAU,SAAS;AAC5B,UAAM,aAAa,OAAO;AAC1B,UAAM,OAAO,oBAAI,IAAY;AAC7B,eAAW,OAAO,OAAO,oBAAoB,CAAC,GAAG;AAC/C,UAAI;AACJ,UAAI;AACF,aAAK,SAAS,GAAG;AAAA,MACnB,QAAQ;AACN;AAAA,MACF;AACA,UAAI,GAAG,OAAO,GAAG;AACf,YAAI,CAAC,IAAI,SAAS,KAAK,EAAG;AAC1B,cAAM,QAAQ,2BAA2B;AAAA,UACvC,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QACF,CAAC;AACD,YAAI,MAAO,KAAI,KAAK,KAAK;AACzB;AAAA,MACF;AAEA,UAAI,GAAG,YAAY,GAAG;AACpB,cAAM,QAAQ,6BAA6B,GAAG;AAC9C,mBAAW,YAAY,OAAO;AAC5B,gBAAM,QAAQ,2BAA2B;AAAA,YACvC;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AACD,cAAI,MAAO,KAAI,KAAK,KAAK;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,SAAmD;AACjF,QAAM,MAA+B,CAAC;AACtC,QAAM,OAAO,oBAAI,IAAY;AAE7B,QAAM,YAAY;AAAA,IAChB,uBAAuB;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AACA,aAAW,YAAY,6BAA6B,SAAS,GAAG;AAC9D,UAAM,WAAW,gBAAgB,QAAQ;AACzC,UAAM,YAAY,WAAW,SAAS,QAAQ,KAAK,QAAQ,QAAQ;AACnE,QAAI,KAAK,IAAI,SAAS,EAAG;AACzB,SAAK,IAAI,SAAS;AAClB,UAAM,QAAQ,2BAA2B;AAAA,MACvC;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AACD,QAAI,MAAO,KAAI,KAAK,KAAK;AAAA,EAC3B;AAEA,MAAI,uBAAuB,cAAc,GAAG;AAC1C,UAAM,YAAY,sBAAsB;AACxC,eAAW,QAAQ,WAAW;AAC5B,iBAAW,eAAe,oBAAI,IAAI,CAAC,KAAK,QAAQ,KAAK,OAAO,CAAC,GAAG;AAC9D,cAAM,UAAU,KAAK,aAAa,eAAe;AACjD,mBAAW,YAAY,6BAA6B,OAAO,GAAG;AAC5D,gBAAM,WAAW,gBAAgB,QAAQ;AACzC,gBAAM,YAAY,WAAW,SAAS,QAAQ,KAAK,QAAQ,QAAQ;AACnE,cAAI,KAAK,IAAI,SAAS,EAAG;AACzB,eAAK,IAAI,SAAS;AAClB,gBAAM,QAAQ,2BAA2B;AAAA,YACvC;AAAA,YACA,QAAQ;AAAA,UACV,CAAC;AACD,cAAI,MAAO,KAAI,KAAK,KAAK;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,uBAAuB,iBAAiB,GAAG;AAC7C,eAAW,WAAW,mBAAmB,iBAAiB,QAAQ,GAAG,GAAG;AACtE,iBAAW,YAAY,6BAA6B,OAAO,GAAG;AAC5D,cAAM,WAAW,gBAAgB,QAAQ;AACzC,cAAM,YAAY,WAAW,SAAS,QAAQ,KAAK,QAAQ,QAAQ;AACnE,YAAI,KAAK,IAAI,SAAS,EAAG;AACzB,aAAK,IAAI,SAAS;AAClB,cAAM,QAAQ,2BAA2B;AAAA,UACvC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AACD,YAAI,MAAO,KAAI,KAAK,KAAK;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,2BAA2B,QAAQ,MAAsB;AACpE,QAAM,MAAM,OAAO;AACnB,QAAM,UAAU,uBAAuB;AACvC,QAAM,SAAyB,EAAE,GAAG,QAAQ;AAE5C,aAAW,SAAS,uBAAuB,GAAG;AAC5C,WAAO,MAAM,IAAI,IAAI;AAAA,EACvB;AAEA,QAAM,SAAS,uBAAuB,EAAE,IAAI,CAAC;AAC7C,QAAM,OAAO,OAAO,OAAO,OAAK,EAAE,WAAW,cAAc;AAC3D,QAAM,UAAU,OAAO,OAAO,OAAK,EAAE,WAAW,iBAAiB;AACjE,QAAM,SAAS,OAAO,OAAO,OAAK,EAAE,WAAW,gBAAgB;AAE/D,aAAW,SAAS,KAAM,QAAO,MAAM,IAAI,IAAI;AAC/C,aAAW,SAAS,QAAS,QAAO,MAAM,IAAI,IAAI;AAClD,aAAW,SAAS,OAAQ,QAAO,MAAM,IAAI,IAAI;AAEjD,SAAO;AACT,CAAC;AAEM,SAAS,wBAA8B;AAC5C;AAAC,EAAC,yBAAiC,OAAO,QAAQ;AACpD;AAEO,SAAS,wBAAgC;AAC9C,MAAI,CAAC,uBAAuB,eAAe,EAAG,QAAO;AAErD,QAAM,WAAW,kBAAkB;AACnC,QAAM,YAAY,gBAAgB,SAAS,WAAW;AACtD,SAAO,aAAa;AACtB;AAEO,SAAS,sBAAsB,WAAyB;AAC7D,sBAAoB,EAAE,aAAa,UAAU,CAAC;AAChD;AAEO,SAAS,uBAAuB,OAA8B;AACnE,QAAM,MAAM,gBAAgB,KAAK;AACjC,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,SAAS,yBAAyB;AACxC,MAAI,OAAO,OAAQ,QAAO;AAC1B,QAAM,QAAQ,IAAI,YAAY;AAC9B,aAAW,QAAQ,OAAO,KAAK,MAAM,GAAG;AACtC,QAAI,KAAK,YAAY,MAAM,MAAO,QAAO;AAAA,EAC3C;AACA,SAAO;AACT;AAEO,SAAS,kCAAgE;AAC9E,QAAM,UAAU,sBAAsB;AACtC,QAAM,SAAS,yBAAyB;AACxC,SAAO,OAAO,OAAO,KAAK;AAC5B;AAEO,SAAS,sCAAgD;AAC9D,QAAM,QAAQ,gCAAgC;AAC9C,MAAI,CAAC,MAAO,QAAO,CAAC;AACpB,QAAM,SAAS,MAAM,OAAO,KAAK;AACjC,MAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,SAAO,CAAC;AAAA,kBAAqB,MAAM,IAAI;AAAA,EAAK,MAAM;AAAA,CAAI;AACxD;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,10 +3,16 @@ const require = __newcrawCreateRequire(import.meta.url);
|
|
|
3
3
|
import {
|
|
4
4
|
BunShell,
|
|
5
5
|
execFileNoThrow,
|
|
6
|
+
init_execFileNoThrow,
|
|
7
|
+
init_log,
|
|
8
|
+
init_shell,
|
|
6
9
|
logError
|
|
7
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-XYQZLDRB.js";
|
|
8
11
|
|
|
9
12
|
// src/utils/system/ripgrep.ts
|
|
13
|
+
init_log();
|
|
14
|
+
init_execFileNoThrow();
|
|
15
|
+
init_shell();
|
|
10
16
|
import { rgPath } from "@vscode/ripgrep";
|
|
11
17
|
import { findActualExecutable } from "spawn-rx";
|
|
12
18
|
import { memoize } from "lodash-es";
|