newcraw 1.0.0
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/LICENSE +201 -0
- package/README.md +692 -0
- package/README.zh-CN.md +338 -0
- package/cli-acp.js +82 -0
- package/cli.js +105 -0
- package/dist/REPL-74GZVSMY.js +42 -0
- package/dist/REPL-74GZVSMY.js.map +7 -0
- package/dist/acp-A55ZRIPP.js +1357 -0
- package/dist/acp-A55ZRIPP.js.map +7 -0
- package/dist/agentsValidate-XWFIEHJ2.js +373 -0
- package/dist/agentsValidate-XWFIEHJ2.js.map +7 -0
- package/dist/ask-4ACYU23S.js +126 -0
- package/dist/ask-4ACYU23S.js.map +7 -0
- package/dist/autoUpdater-O2WHHSGP.js +17 -0
- package/dist/autoUpdater-O2WHHSGP.js.map +7 -0
- package/dist/chunk-2UO3BFZH.js +16 -0
- package/dist/chunk-2UO3BFZH.js.map +7 -0
- package/dist/chunk-3C73U2IU.js +2970 -0
- package/dist/chunk-3C73U2IU.js.map +7 -0
- package/dist/chunk-3U5X4VWP.js +2613 -0
- package/dist/chunk-3U5X4VWP.js.map +7 -0
- package/dist/chunk-755HIAI3.js +95 -0
- package/dist/chunk-755HIAI3.js.map +7 -0
- package/dist/chunk-7ZFLZNOW.js +21 -0
- package/dist/chunk-7ZFLZNOW.js.map +7 -0
- package/dist/chunk-A44DGORI.js +49 -0
- package/dist/chunk-A44DGORI.js.map +7 -0
- package/dist/chunk-AXWJI6N5.js +11 -0
- package/dist/chunk-AXWJI6N5.js.map +7 -0
- package/dist/chunk-B26ZUMJI.js +515 -0
- package/dist/chunk-B26ZUMJI.js.map +7 -0
- package/dist/chunk-BHNQGSLO.js +96 -0
- package/dist/chunk-BHNQGSLO.js.map +7 -0
- package/dist/chunk-BUI6KGVA.js +164 -0
- package/dist/chunk-BUI6KGVA.js.map +7 -0
- package/dist/chunk-DY5D4SS7.js +936 -0
- package/dist/chunk-DY5D4SS7.js.map +7 -0
- package/dist/chunk-EENI5HG7.js +498 -0
- package/dist/chunk-EENI5HG7.js.map +7 -0
- package/dist/chunk-EXPWPWA4.js +654 -0
- package/dist/chunk-EXPWPWA4.js.map +7 -0
- package/dist/chunk-FHOCKJOW.js +766 -0
- package/dist/chunk-FHOCKJOW.js.map +7 -0
- package/dist/chunk-GPKVTIYJ.js +191 -0
- package/dist/chunk-GPKVTIYJ.js.map +7 -0
- package/dist/chunk-H5BCUDEN.js +794 -0
- package/dist/chunk-H5BCUDEN.js.map +7 -0
- package/dist/chunk-INJSFEKL.js +47 -0
- package/dist/chunk-INJSFEKL.js.map +7 -0
- package/dist/chunk-JX5ZQYTQ.js +12 -0
- package/dist/chunk-JX5ZQYTQ.js.map +7 -0
- package/dist/chunk-KQSHIOZK.js +24 -0
- package/dist/chunk-KQSHIOZK.js.map +7 -0
- package/dist/chunk-L6WKZEK4.js +1609 -0
- package/dist/chunk-L6WKZEK4.js.map +7 -0
- package/dist/chunk-LC4CL3YJ.js +124 -0
- package/dist/chunk-LC4CL3YJ.js.map +7 -0
- package/dist/chunk-MXSB7IOZ.js +1097 -0
- package/dist/chunk-MXSB7IOZ.js.map +7 -0
- package/dist/chunk-N5OHRWG2.js +249 -0
- package/dist/chunk-N5OHRWG2.js.map +7 -0
- package/dist/chunk-NQE3GGE3.js +19 -0
- package/dist/chunk-NQE3GGE3.js.map +7 -0
- package/dist/chunk-QF6YDTME.js +139 -0
- package/dist/chunk-QF6YDTME.js.map +7 -0
- package/dist/chunk-QTX7AJFQ.js +240 -0
- package/dist/chunk-QTX7AJFQ.js.map +7 -0
- package/dist/chunk-S3ZAJPYZ.js +515 -0
- package/dist/chunk-S3ZAJPYZ.js.map +7 -0
- package/dist/chunk-S5Y5IF2H.js +735 -0
- package/dist/chunk-S5Y5IF2H.js.map +7 -0
- package/dist/chunk-SBE6Y327.js +836 -0
- package/dist/chunk-SBE6Y327.js.map +7 -0
- package/dist/chunk-T25Z3JMG.js +17 -0
- package/dist/chunk-T25Z3JMG.js.map +7 -0
- package/dist/chunk-T6VKT5FR.js +196 -0
- package/dist/chunk-T6VKT5FR.js.map +7 -0
- package/dist/chunk-TSGGSPYD.js +151 -0
- package/dist/chunk-TSGGSPYD.js.map +7 -0
- package/dist/chunk-TY3CCSAT.js +24 -0
- package/dist/chunk-TY3CCSAT.js.map +7 -0
- package/dist/chunk-U224EQOS.js +34 -0
- package/dist/chunk-U224EQOS.js.map +7 -0
- package/dist/chunk-U7S4MEYP.js +95 -0
- package/dist/chunk-U7S4MEYP.js.map +7 -0
- package/dist/chunk-ULVAAZ2U.js +30517 -0
- package/dist/chunk-ULVAAZ2U.js.map +7 -0
- package/dist/chunk-WWLFALT7.js +128 -0
- package/dist/chunk-WWLFALT7.js.map +7 -0
- package/dist/chunk-XJQATPV7.js +23 -0
- package/dist/chunk-XJQATPV7.js.map +7 -0
- package/dist/chunk-XMGUQHMF.js +72 -0
- package/dist/chunk-XMGUQHMF.js.map +7 -0
- package/dist/chunk-XOMW5QTV.js +472 -0
- package/dist/chunk-XOMW5QTV.js.map +7 -0
- package/dist/chunk-Y7VZUSIM.js +1256 -0
- package/dist/chunk-Y7VZUSIM.js.map +7 -0
- package/dist/chunk-YVNBXMIP.js +511 -0
- package/dist/chunk-YVNBXMIP.js.map +7 -0
- package/dist/chunk-YYPJWXSA.js +145 -0
- package/dist/chunk-YYPJWXSA.js.map +7 -0
- package/dist/cli-BW34VKCN.js +3917 -0
- package/dist/cli-BW34VKCN.js.map +7 -0
- package/dist/commands-4CNZZBTE.js +46 -0
- package/dist/commands-4CNZZBTE.js.map +7 -0
- package/dist/config-XKRCXCSS.js +81 -0
- package/dist/config-XKRCXCSS.js.map +7 -0
- package/dist/context-T5CR3RP6.js +30 -0
- package/dist/context-T5CR3RP6.js.map +7 -0
- package/dist/costTracker-2G3ZI2JF.js +19 -0
- package/dist/costTracker-2G3ZI2JF.js.map +7 -0
- package/dist/customCommands-OCUMXZDN.js +25 -0
- package/dist/customCommands-OCUMXZDN.js.map +7 -0
- package/dist/env-DYDNFB4D.js +22 -0
- package/dist/env-DYDNFB4D.js.map +7 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +7 -0
- package/dist/kodeAgentSessionId-KTGFX2BE.js +13 -0
- package/dist/kodeAgentSessionId-KTGFX2BE.js.map +7 -0
- package/dist/kodeAgentSessionLoad-ZKR2VGHO.js +18 -0
- package/dist/kodeAgentSessionLoad-ZKR2VGHO.js.map +7 -0
- package/dist/kodeAgentSessionResume-NFZCTIBZ.js +16 -0
- package/dist/kodeAgentSessionResume-NFZCTIBZ.js.map +7 -0
- package/dist/kodeAgentStreamJson-VIXFTYL5.js +13 -0
- package/dist/kodeAgentStreamJson-VIXFTYL5.js.map +7 -0
- package/dist/kodeAgentStreamJsonSession-6CKTK6AF.js +131 -0
- package/dist/kodeAgentStreamJsonSession-6CKTK6AF.js.map +7 -0
- package/dist/kodeAgentStructuredStdio-SI5C7AAD.js +10 -0
- package/dist/kodeAgentStructuredStdio-SI5C7AAD.js.map +7 -0
- package/dist/kodeHooks-5RXJRDCY.js +36 -0
- package/dist/kodeHooks-5RXJRDCY.js.map +7 -0
- package/dist/llm-QJA3QMXR.js +3118 -0
- package/dist/llm-QJA3QMXR.js.map +7 -0
- package/dist/llmLazy-VCEV22DK.js +15 -0
- package/dist/llmLazy-VCEV22DK.js.map +7 -0
- package/dist/loader-CKNYMPCZ.js +28 -0
- package/dist/loader-CKNYMPCZ.js.map +7 -0
- package/dist/mcp-2SZTOKZX.js +49 -0
- package/dist/mcp-2SZTOKZX.js.map +7 -0
- package/dist/mentionProcessor-O7NWOH6S.js +211 -0
- package/dist/mentionProcessor-O7NWOH6S.js.map +7 -0
- package/dist/messages-PRKIHXMK.js +65 -0
- package/dist/messages-PRKIHXMK.js.map +7 -0
- package/dist/model-WG6RA25G.js +30 -0
- package/dist/model-WG6RA25G.js.map +7 -0
- package/dist/openai-VQLYFQ6B.js +29 -0
- package/dist/openai-VQLYFQ6B.js.map +7 -0
- package/dist/outputStyles-VQ57E3B6.js +28 -0
- package/dist/outputStyles-VQ57E3B6.js.map +7 -0
- package/dist/package.json +4 -0
- package/dist/pluginRuntime-NWOLU73K.js +218 -0
- package/dist/pluginRuntime-NWOLU73K.js.map +7 -0
- package/dist/pluginValidation-R7B6QQ6T.js +17 -0
- package/dist/pluginValidation-R7B6QQ6T.js.map +7 -0
- package/dist/prompts-W4V4Y67M.js +48 -0
- package/dist/prompts-W4V4Y67M.js.map +7 -0
- package/dist/query-GFFKKURO.js +50 -0
- package/dist/query-GFFKKURO.js.map +7 -0
- package/dist/responsesStreaming-2AIT6GHG.js +10 -0
- package/dist/responsesStreaming-2AIT6GHG.js.map +7 -0
- package/dist/ripgrep-SVBVC46X.js +17 -0
- package/dist/ripgrep-SVBVC46X.js.map +7 -0
- package/dist/skillMarketplace-5Z7Y6FTD.js +37 -0
- package/dist/skillMarketplace-5Z7Y6FTD.js.map +7 -0
- package/dist/state-X3R7BV7A.js +16 -0
- package/dist/state-X3R7BV7A.js.map +7 -0
- package/dist/theme-4VA64EWF.js +14 -0
- package/dist/theme-4VA64EWF.js.map +7 -0
- package/dist/toolPermissionContext-I3IXPVED.js +17 -0
- package/dist/toolPermissionContext-I3IXPVED.js.map +7 -0
- package/dist/toolPermissionSettings-35DJQEKG.js +18 -0
- package/dist/toolPermissionSettings-35DJQEKG.js.map +7 -0
- package/dist/tools-USOBTPOI.js +47 -0
- package/dist/tools-USOBTPOI.js.map +7 -0
- package/dist/userInput-NID2UYXG.js +312 -0
- package/dist/userInput-NID2UYXG.js.map +7 -0
- package/dist/uuid-VA3KVASX.js +9 -0
- package/dist/uuid-VA3KVASX.js.map +7 -0
- package/dist/yoga.wasm +0 -0
- package/package.json +135 -0
- package/scripts/binary-utils.cjs +61 -0
- package/scripts/cli-acp-wrapper.cjs +82 -0
- package/scripts/cli-wrapper.cjs +105 -0
- package/scripts/postinstall.js +144 -0
- package/web/dist/assets/index-COAJqX1Z.css +1 -0
- package/web/dist/assets/index-CzS_4LmC.js +179 -0
- package/web/dist/index.html +14 -0
- package/yoga.wasm +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/model/index.ts"],
|
|
4
|
+
"sourcesContent": ["import { memoize } from 'lodash-es'\r\n\r\nimport { logError } from '@utils/log'\r\nimport { debug as debugLogger } from '@utils/log/debugLogger'\r\nimport {\r\n getGlobalConfig,\r\n ModelProfile,\r\n ModelPointerType,\r\n saveGlobalConfig,\r\n} from '@utils/config'\r\n\r\nexport const USE_BEDROCK = !!(\r\n process.env.NEWCRAW_USE_BEDROCK ?? process.env.CLAUDE_CODE_USE_BEDROCK\r\n)\r\nexport const USE_VERTEX = !!(\r\n process.env.NEWCRAW_USE_VERTEX ?? process.env.CLAUDE_CODE_USE_VERTEX\r\n)\r\n\r\nexport interface ModelConfig {\r\n bedrock: string\r\n vertex: string\r\n firstParty: string\r\n}\r\n\r\nconst DEFAULT_MODEL_CONFIG: ModelConfig = {\r\n bedrock: 'us.anthropic.claude-3-7-sonnet-20250219-v1:0',\r\n vertex: 'claude-3-7-sonnet@20250219',\r\n firstParty: 'claude-sonnet-4-20250514',\r\n}\r\n\r\nasync function getModelConfig(): Promise<ModelConfig> {\r\n return DEFAULT_MODEL_CONFIG\r\n}\r\n\r\nexport const getSlowAndCapableModel = memoize(async (): Promise<string> => {\r\n const config = await getGlobalConfig()\r\n\r\n const modelManager = new ModelManager(config)\r\n const model = modelManager.getMainAgentModel()\r\n\r\n if (model) {\r\n return model\r\n }\r\n\r\n const modelConfig = await getModelConfig()\r\n if (USE_BEDROCK) return modelConfig.bedrock\r\n if (USE_VERTEX) return modelConfig.vertex\r\n return modelConfig.firstParty\r\n})\r\n\r\nexport async function isDefaultSlowAndCapableModel(): Promise<boolean> {\r\n return (\r\n !process.env.ANTHROPIC_MODEL ||\r\n process.env.ANTHROPIC_MODEL === (await getSlowAndCapableModel())\r\n )\r\n}\r\n\r\nexport function getVertexRegionForModel(\r\n model: string | undefined,\r\n): string | undefined {\r\n if (model?.startsWith('claude-3-5-haiku')) {\r\n return process.env.VERTEX_REGION_CLAUDE_3_5_HAIKU\r\n } else if (model?.startsWith('claude-3-5-sonnet')) {\r\n return process.env.VERTEX_REGION_CLAUDE_3_5_SONNET\r\n } else if (model?.startsWith('claude-3-7-sonnet')) {\r\n return process.env.VERTEX_REGION_CLAUDE_3_7_SONNET\r\n }\r\n}\r\n\r\nexport class ModelManager {\r\n private config: any\r\n private modelProfiles: ModelProfile[]\r\n\r\n constructor(config: any) {\r\n this.config = config\r\n this.modelProfiles = config.modelProfiles || []\r\n }\r\n\r\n getCurrentModel(): string | null {\r\n const mainModelName = this.config.modelPointers?.main\r\n if (mainModelName) {\r\n const profile = this.findModelProfile(mainModelName)\r\n if (profile && profile.isActive) {\r\n return profile.modelName\r\n }\r\n }\r\n\r\n return this.getMainAgentModel()\r\n }\r\n\r\n getMainAgentModel(): string | null {\r\n const mainModelName = this.config.modelPointers?.main\r\n if (mainModelName) {\r\n const profile = this.findModelProfile(mainModelName)\r\n if (profile && profile.isActive) {\r\n return profile.modelName\r\n }\r\n }\r\n\r\n const activeProfile = this.modelProfiles.find(p => p.isActive)\r\n if (activeProfile) {\r\n return activeProfile.modelName\r\n }\r\n\r\n return null\r\n }\r\n\r\n getTaskToolModel(): string | null {\r\n const taskModelName = this.config.modelPointers?.task\r\n if (taskModelName) {\r\n const profile = this.findModelProfile(taskModelName)\r\n if (profile && profile.isActive) {\r\n return profile.modelName\r\n }\r\n }\r\n\r\n return this.getMainAgentModel()\r\n }\r\n\r\n switchToNextModelWithContextCheck(currentContextTokens: number = 0): {\r\n success: boolean\r\n modelName: string | null\r\n previousModelName: string | null\r\n contextOverflow: boolean\r\n usagePercentage: number\r\n currentContextTokens: number\r\n skippedModels?: Array<{\r\n name: string\r\n provider: string\r\n contextLength: number\r\n budgetTokens: number | null\r\n usagePercentage: number\r\n }>\r\n } {\r\n const allProfiles = this.getAllConfiguredModels()\r\n if (allProfiles.length === 0) {\r\n return {\r\n success: false,\r\n modelName: null,\r\n previousModelName: null,\r\n contextOverflow: false,\r\n usagePercentage: 0,\r\n currentContextTokens,\r\n }\r\n }\r\n\r\n allProfiles.sort((a, b) => a.createdAt - b.createdAt)\r\n\r\n const currentMainModelName = this.config.modelPointers?.main\r\n const currentModel = currentMainModelName\r\n ? this.findModelProfile(currentMainModelName)\r\n : null\r\n const previousModelName = currentModel?.name || null\r\n\r\n const budgetForModel = (\r\n model: ModelProfile,\r\n ): {\r\n budgetTokens: number | null\r\n usagePercentage: number\r\n compatible: boolean\r\n } => {\r\n const contextLength = Number(model.contextLength)\r\n if (!Number.isFinite(contextLength) || contextLength <= 0) {\r\n return { budgetTokens: null, usagePercentage: 0, compatible: true }\r\n }\r\n const budgetTokens = Math.floor(contextLength * 0.9)\r\n const usagePercentage =\r\n budgetTokens > 0 ? (currentContextTokens / budgetTokens) * 100 : 0\r\n return {\r\n budgetTokens,\r\n usagePercentage,\r\n compatible:\r\n budgetTokens > 0 ? currentContextTokens <= budgetTokens : true,\r\n }\r\n }\r\n\r\n const currentIndex = currentMainModelName\r\n ? allProfiles.findIndex(p => p.modelName === currentMainModelName)\r\n : -1\r\n const startIndex = currentIndex >= 0 ? currentIndex : -1\r\n\r\n if (allProfiles.length === 1) {\r\n return {\r\n success: false,\r\n modelName: null,\r\n previousModelName,\r\n contextOverflow: false,\r\n usagePercentage: 0,\r\n currentContextTokens,\r\n }\r\n }\r\n\r\n const maxOffsets =\r\n startIndex === -1 ? allProfiles.length : allProfiles.length - 1\r\n const skippedModels: NonNullable<\r\n ReturnType<\r\n ModelManager['switchToNextModelWithContextCheck']\r\n >['skippedModels']\r\n > = []\r\n\r\n let selected: ModelProfile | null = null\r\n let selectedUsagePercentage = 0\r\n\r\n for (let offset = 1; offset <= maxOffsets; offset++) {\r\n const candidateIndex =\r\n (startIndex + offset + allProfiles.length) % allProfiles.length\r\n const candidate = allProfiles[candidateIndex]\r\n if (!candidate) continue\r\n\r\n const { budgetTokens, usagePercentage, compatible } =\r\n budgetForModel(candidate)\r\n if (compatible) {\r\n selected = candidate\r\n selectedUsagePercentage = usagePercentage\r\n break\r\n }\r\n skippedModels.push({\r\n name: candidate.name,\r\n provider: candidate.provider,\r\n contextLength: candidate.contextLength,\r\n budgetTokens,\r\n usagePercentage,\r\n })\r\n }\r\n\r\n if (!selected) {\r\n const firstSkipped = skippedModels[0]\r\n return {\r\n success: false,\r\n modelName: null,\r\n previousModelName,\r\n contextOverflow: true,\r\n usagePercentage: firstSkipped?.usagePercentage ?? 0,\r\n currentContextTokens,\r\n skippedModels,\r\n }\r\n }\r\n\r\n if (!selected.isActive) {\r\n selected.isActive = true\r\n }\r\n\r\n this.setPointer('main', selected.modelName)\r\n this.updateLastUsed(selected.modelName)\r\n\r\n return {\r\n success: true,\r\n modelName: selected.name,\r\n previousModelName,\r\n contextOverflow: false,\r\n usagePercentage: selectedUsagePercentage,\r\n currentContextTokens,\r\n skippedModels,\r\n }\r\n }\r\n\r\n switchToNextModel(currentContextTokens: number = 0): {\r\n success: boolean\r\n modelName: string | null\r\n blocked?: boolean\r\n message?: string\r\n } {\r\n const result = this.switchToNextModelWithContextCheck(currentContextTokens)\r\n\r\n const formatTokens = (tokens: number): string => {\r\n if (!Number.isFinite(tokens)) return 'unknown'\r\n if (tokens >= 1000) return `${Math.round(tokens / 1000)}k`\r\n return String(Math.round(tokens))\r\n }\r\n\r\n const allModels = this.getAllConfiguredModels()\r\n if (allModels.length === 0) {\r\n return {\r\n success: false,\r\n modelName: null,\r\n blocked: false,\r\n message: '\u274C No models configured. Use /model to add models.',\r\n }\r\n }\r\n if (allModels.length === 1) {\r\n return {\r\n success: false,\r\n modelName: null,\r\n blocked: false,\r\n message: `\u26A0\uFE0F Only one model configured (${allModels[0].modelName}). Use /model to add more models for switching.`,\r\n }\r\n }\r\n\r\n const currentModel = this.findModelProfile(this.config.modelPointers?.main)\r\n const modelsSorted = [...allModels].sort(\r\n (a, b) => a.createdAt - b.createdAt,\r\n )\r\n const currentIndex = modelsSorted.findIndex(\r\n m => m.modelName === currentModel?.modelName,\r\n )\r\n const totalModels = modelsSorted.length\r\n\r\n if (result.success && result.modelName) {\r\n const skippedCount = result.skippedModels?.length ?? 0\r\n const skippedSuffix =\r\n skippedCount > 0 ? ` \u00B7 skipped ${skippedCount} incompatible` : ''\r\n const contextSuffix =\r\n currentModel?.contextLength && result.currentContextTokens\r\n ? ` \u00B7 context ~${formatTokens(result.currentContextTokens)}/${formatTokens(currentModel.contextLength)}`\r\n : ''\r\n\r\n return {\r\n success: true,\r\n modelName: result.modelName,\r\n blocked: false,\r\n message: `\u2705 Switched to ${result.modelName} (${currentIndex + 1}/${totalModels})${currentModel?.provider ? ` [${currentModel.provider}]` : ''}${skippedSuffix}${contextSuffix}`,\r\n }\r\n }\r\n\r\n if (result.contextOverflow) {\r\n const attempted = result.skippedModels?.[0]\r\n const attemptedContext = attempted?.contextLength\r\n const attemptedBudget = attempted?.budgetTokens\r\n const currentLabel =\r\n currentModel?.name || currentModel?.modelName || 'current model'\r\n\r\n const attemptedText = attempted\r\n ? `Can't switch to ${attempted.name}: current ~${formatTokens(result.currentContextTokens)} tokens exceeds safe budget (~${formatTokens(attemptedBudget ?? 0)} tokens, 90% of ${formatTokens(attemptedContext ?? 0)}).`\r\n : `Can't switch models due to context size (~${formatTokens(result.currentContextTokens)} tokens).`\r\n\r\n return {\r\n success: false,\r\n modelName: null,\r\n blocked: true,\r\n message: `\u26A0\uFE0F ${attemptedText} Keeping ${currentLabel}.`,\r\n }\r\n }\r\n\r\n return {\r\n success: false,\r\n modelName: null,\r\n blocked: false,\r\n message: '\u274C Failed to switch models',\r\n }\r\n }\r\n\r\n revertToPreviousModel(previousModelName: string): boolean {\r\n const previousModel = this.modelProfiles.find(\r\n p => p.name === previousModelName && p.isActive,\r\n )\r\n if (!previousModel) {\r\n return false\r\n }\r\n\r\n this.setPointer('main', previousModel.modelName)\r\n this.updateLastUsed(previousModel.modelName)\r\n return true\r\n }\r\n\r\n analyzeContextCompatibility(\r\n model: ModelProfile,\r\n contextTokens: number,\r\n ): {\r\n compatible: boolean\r\n severity: 'safe' | 'warning' | 'critical'\r\n usagePercentage: number\r\n recommendation: string\r\n } {\r\n const usableContext = Math.floor(model.contextLength * 0.8)\r\n const usagePercentage = (contextTokens / usableContext) * 100\r\n\r\n if (usagePercentage <= 70) {\r\n return {\r\n compatible: true,\r\n severity: 'safe',\r\n usagePercentage,\r\n recommendation: 'Full context preserved',\r\n }\r\n } else if (usagePercentage <= 90) {\r\n return {\r\n compatible: true,\r\n severity: 'warning',\r\n usagePercentage,\r\n recommendation: 'Context usage high, consider compression',\r\n }\r\n } else {\r\n return {\r\n compatible: false,\r\n severity: 'critical',\r\n usagePercentage,\r\n recommendation: 'Auto-compression or message truncation required',\r\n }\r\n }\r\n }\r\n\r\n switchToNextModelWithAnalysis(currentContextTokens: number = 0): {\r\n modelName: string | null\r\n contextAnalysis: ReturnType<typeof this.analyzeContextCompatibility> | null\r\n requiresCompression: boolean\r\n estimatedTokensAfterSwitch: number\r\n } {\r\n const result = this.switchToNextModel(currentContextTokens)\r\n\r\n if (!result.success || !result.modelName) {\r\n return {\r\n modelName: null,\r\n contextAnalysis: null,\r\n requiresCompression: false,\r\n estimatedTokensAfterSwitch: 0,\r\n }\r\n }\r\n\r\n const newModel = this.getModel('main')\r\n if (!newModel) {\r\n return {\r\n modelName: result.modelName,\r\n contextAnalysis: null,\r\n requiresCompression: false,\r\n estimatedTokensAfterSwitch: currentContextTokens,\r\n }\r\n }\r\n\r\n const analysis = this.analyzeContextCompatibility(\r\n newModel,\r\n currentContextTokens,\r\n )\r\n\r\n return {\r\n modelName: result.modelName,\r\n contextAnalysis: analysis,\r\n requiresCompression: analysis.severity === 'critical',\r\n estimatedTokensAfterSwitch: currentContextTokens,\r\n }\r\n }\r\n\r\n canModelHandleContext(model: ModelProfile, contextTokens: number): boolean {\r\n const analysis = this.analyzeContextCompatibility(model, contextTokens)\r\n return analysis.compatible\r\n }\r\n\r\n findModelWithSufficientContext(\r\n models: ModelProfile[],\r\n contextTokens: number,\r\n ): ModelProfile | null {\r\n return (\r\n models.find(model => this.canModelHandleContext(model, contextTokens)) ||\r\n null\r\n )\r\n }\r\n\r\n getModelForContext(\r\n contextType: 'terminal' | 'main-agent' | 'task-tool',\r\n ): string | null {\r\n switch (contextType) {\r\n case 'terminal':\r\n return this.getCurrentModel()\r\n case 'main-agent':\r\n return this.getMainAgentModel()\r\n case 'task-tool':\r\n return this.getTaskToolModel()\r\n default:\r\n return this.getMainAgentModel()\r\n }\r\n }\r\n\r\n getActiveModelProfiles(): ModelProfile[] {\r\n return this.modelProfiles.filter(p => p.isActive)\r\n }\r\n\r\n hasConfiguredModels(): boolean {\r\n return this.getActiveModelProfiles().length > 0\r\n }\r\n\r\n\r\n getModel(pointer: ModelPointerType): ModelProfile | null {\r\n const pointerId = this.config.modelPointers?.[pointer]\r\n if (!pointerId) {\r\n return this.getDefaultModel()\r\n }\r\n\r\n const profile = this.findModelProfile(pointerId)\r\n return profile && profile.isActive ? profile : this.getDefaultModel()\r\n }\r\n\r\n getModelName(pointer: ModelPointerType): string | null {\r\n const profile = this.getModel(pointer)\r\n return profile ? profile.modelName : null\r\n }\r\n\r\n getCompactModel(): string | null {\r\n return this.getModelName('compact') || this.getModelName('main')\r\n }\r\n\r\n getQuickModel(): string | null {\r\n return (\r\n this.getModelName('quick') ||\r\n this.getModelName('task') ||\r\n this.getModelName('main')\r\n )\r\n }\r\n\r\n async addModel(\r\n config: Omit<ModelProfile, 'createdAt' | 'isActive'>,\r\n ): Promise<string> {\r\n const existingByModelName = this.modelProfiles.find(\r\n p => p.modelName === config.modelName,\r\n )\r\n if (existingByModelName) {\r\n throw new Error(\r\n `Model with modelName '${config.modelName}' already exists: ${existingByModelName.name}`,\r\n )\r\n }\r\n\r\n const existingByName = this.modelProfiles.find(p => p.name === config.name)\r\n if (existingByName) {\r\n throw new Error(`Model with name '${config.name}' already exists`)\r\n }\r\n\r\n const newModel: ModelProfile = {\r\n ...config,\r\n createdAt: Date.now(),\r\n isActive: true,\r\n }\r\n\r\n this.modelProfiles.push(newModel)\r\n\r\n if (this.modelProfiles.length === 1) {\r\n this.config.modelPointers = {\r\n main: config.modelName,\r\n task: config.modelName,\r\n compact: config.modelName,\r\n quick: config.modelName,\r\n }\r\n this.config.defaultModelName = config.modelName\r\n } else {\r\n if (!this.config.modelPointers) {\r\n this.config.modelPointers = {\r\n main: config.modelName,\r\n task: '',\r\n compact: '',\r\n quick: '',\r\n }\r\n } else {\r\n this.config.modelPointers.main = config.modelName\r\n }\r\n }\r\n\r\n this.saveConfig()\r\n return config.modelName\r\n }\r\n\r\n setPointer(pointer: ModelPointerType, modelName: string): void {\r\n if (!this.findModelProfile(modelName)) {\r\n throw new Error(`Model '${modelName}' not found`)\r\n }\r\n\r\n if (!this.config.modelPointers) {\r\n this.config.modelPointers = {\r\n main: '',\r\n task: '',\r\n compact: '',\r\n quick: '',\r\n }\r\n }\r\n\r\n this.config.modelPointers[pointer] = modelName\r\n this.saveConfig()\r\n }\r\n\r\n getAvailableModels(): ModelProfile[] {\r\n return this.modelProfiles.filter(p => p.isActive)\r\n }\r\n\r\n getAllConfiguredModels(): ModelProfile[] {\r\n return this.modelProfiles\r\n }\r\n\r\n getAllAvailableModelNames(): string[] {\r\n return this.getAvailableModels().map(p => p.modelName)\r\n }\r\n\r\n getAllConfiguredModelNames(): string[] {\r\n return this.getAllConfiguredModels().map(p => p.modelName)\r\n }\r\n\r\n getModelSwitchingDebugInfo(): {\r\n totalModels: number\r\n activeModels: number\r\n inactiveModels: number\r\n currentMainModel: string | null\r\n availableModels: Array<{\r\n name: string\r\n modelName: string\r\n provider: string\r\n isActive: boolean\r\n lastUsed?: number\r\n }>\r\n modelPointers: Record<string, string | undefined>\r\n } {\r\n const availableModels = this.getAvailableModels()\r\n const currentMainModelName = this.config.modelPointers?.main\r\n\r\n return {\r\n totalModels: this.modelProfiles.length,\r\n activeModels: availableModels.length,\r\n inactiveModels: this.modelProfiles.length - availableModels.length,\r\n currentMainModel: currentMainModelName || null,\r\n availableModels: this.modelProfiles.map(p => ({\r\n name: p.name,\r\n modelName: p.modelName,\r\n provider: p.provider,\r\n isActive: p.isActive,\r\n lastUsed: p.lastUsed,\r\n })),\r\n modelPointers: this.config.modelPointers || {},\r\n }\r\n }\r\n\r\n removeModel(modelName: string): void {\r\n this.modelProfiles = this.modelProfiles.filter(\r\n p => p.modelName !== modelName,\r\n )\r\n\r\n if (this.config.modelPointers) {\r\n Object.keys(this.config.modelPointers).forEach(pointer => {\r\n if (\r\n this.config.modelPointers[pointer as ModelPointerType] === modelName\r\n ) {\r\n this.config.modelPointers[pointer as ModelPointerType] =\r\n this.config.defaultModelName || ''\r\n }\r\n })\r\n }\r\n\r\n this.saveConfig()\r\n }\r\n\r\n private getDefaultModel(): ModelProfile | null {\r\n if (this.config.defaultModelId) {\r\n const profile = this.findModelProfile(this.config.defaultModelId)\r\n if (profile && profile.isActive) {\r\n return profile\r\n }\r\n }\r\n return this.modelProfiles.find(p => p.isActive) || null\r\n }\r\n\r\n private saveConfig(): void {\r\n const updatedConfig = {\r\n ...this.config,\r\n modelProfiles: this.modelProfiles,\r\n }\r\n saveGlobalConfig(updatedConfig)\r\n }\r\n\r\n async getFallbackModel(): Promise<string> {\r\n const modelConfig = await getModelConfig()\r\n if (USE_BEDROCK) return modelConfig.bedrock\r\n if (USE_VERTEX) return modelConfig.vertex\r\n return modelConfig.firstParty\r\n }\r\n\r\n resolveModel(modelParam: string | ModelPointerType): ModelProfile | null {\r\n if (['main', 'task', 'compact', 'quick'].includes(modelParam)) {\r\n const pointerId =\r\n this.config.modelPointers?.[modelParam as ModelPointerType]\r\n if (pointerId) {\r\n let profile = this.findModelProfile(pointerId)\r\n if (!profile) {\r\n profile = this.findModelProfileByModelName(pointerId)\r\n }\r\n if (profile && profile.isActive) {\r\n return profile\r\n }\r\n }\r\n return this.getDefaultModel()\r\n }\r\n\r\n let profile = this.findModelProfile(modelParam)\r\n if (profile && profile.isActive) {\r\n return profile\r\n }\r\n\r\n profile = this.findModelProfileByModelName(modelParam)\r\n if (profile && profile.isActive) {\r\n return profile\r\n }\r\n\r\n profile = this.findModelProfileByName(modelParam)\r\n if (profile && profile.isActive) {\r\n return profile\r\n }\r\n\r\n if (typeof modelParam === 'string') {\r\n const qualified = this.resolveProviderQualifiedModel(modelParam)\r\n if (qualified && qualified.isActive) {\r\n return qualified\r\n }\r\n }\r\n\r\n return this.getDefaultModel()\r\n }\r\n\r\n resolveModelWithInfo(modelParam: string | ModelPointerType): {\r\n success: boolean\r\n profile: ModelProfile | null\r\n error?: string\r\n } {\r\n const isPointer = ['main', 'task', 'compact', 'quick'].includes(modelParam)\r\n\r\n if (isPointer) {\r\n const pointerId =\r\n this.config.modelPointers?.[modelParam as ModelPointerType]\r\n if (!pointerId) {\r\n return {\r\n success: false,\r\n profile: null,\r\n error: `Model pointer '${modelParam}' is not configured. Use /model to set up models.`,\r\n }\r\n }\r\n\r\n let profile = this.findModelProfile(pointerId)\r\n if (!profile) {\r\n profile = this.findModelProfileByModelName(pointerId)\r\n }\r\n\r\n if (!profile) {\r\n return {\r\n success: false,\r\n profile: null,\r\n error: `Model pointer '${modelParam}' points to invalid model '${pointerId}'. Use /model to reconfigure.`,\r\n }\r\n }\r\n\r\n if (!profile.isActive) {\r\n return {\r\n success: false,\r\n profile: null,\r\n error: `Model '${profile.name}' (pointed by '${modelParam}') is inactive. Use /model to activate it.`,\r\n }\r\n }\r\n\r\n return {\r\n success: true,\r\n profile,\r\n }\r\n } else {\r\n let profile = this.findModelProfile(modelParam)\r\n if (!profile) {\r\n profile = this.findModelProfileByModelName(modelParam)\r\n }\r\n if (!profile) {\r\n profile = this.findModelProfileByName(modelParam)\r\n }\r\n\r\n if (!profile && typeof modelParam === 'string') {\r\n profile = this.resolveProviderQualifiedModel(modelParam)\r\n }\r\n\r\n if (!profile) {\r\n return {\r\n success: false,\r\n profile: null,\r\n error: `Model '${modelParam}' not found. Use /model to add models, or run 'newcraw models list' to see configured profiles.`,\r\n }\r\n }\r\n\r\n if (!profile.isActive) {\r\n return {\r\n success: false,\r\n profile: null,\r\n error: `Model '${profile.name}' is inactive. Use /model to activate it.`,\r\n }\r\n }\r\n\r\n return {\r\n success: true,\r\n profile,\r\n }\r\n }\r\n }\r\n\r\n private resolveProviderQualifiedModel(input: string): ModelProfile | null {\r\n const trimmed = input.trim()\r\n const colonIndex = trimmed.indexOf(':')\r\n if (colonIndex <= 0 || colonIndex >= trimmed.length - 1) return null\r\n\r\n const provider = trimmed.slice(0, colonIndex).trim().toLowerCase()\r\n const modelOrName = trimmed.slice(colonIndex + 1).trim()\r\n if (!provider || !modelOrName) return null\r\n\r\n const providerProfiles = this.modelProfiles.filter(\r\n p => String(p.provider).trim().toLowerCase() === provider,\r\n )\r\n if (providerProfiles.length === 0) return null\r\n\r\n const byModelName = providerProfiles.find(p => p.modelName === modelOrName)\r\n if (byModelName) return byModelName\r\n\r\n const byName = providerProfiles.find(p => p.name === modelOrName)\r\n if (byName) return byName\r\n\r\n return null\r\n }\r\n\r\n private findModelProfile(modelName: string): ModelProfile | null {\r\n return this.modelProfiles.find(p => p.modelName === modelName) || null\r\n }\r\n\r\n private findModelProfileByModelName(modelName: string): ModelProfile | null {\r\n return this.modelProfiles.find(p => p.modelName === modelName) || null\r\n }\r\n\r\n private findModelProfileByName(name: string): ModelProfile | null {\r\n return this.modelProfiles.find(p => p.name === name) || null\r\n }\r\n\r\n private updateLastUsed(modelName: string): void {\r\n const profile = this.findModelProfile(modelName)\r\n if (profile) {\r\n profile.lastUsed = Date.now()\r\n }\r\n }\r\n}\r\n\r\nlet globalModelManager: ModelManager | null = null\r\n\r\nexport const getModelManager = (): ModelManager => {\r\n try {\r\n if (!globalModelManager) {\r\n const config = getGlobalConfig()\r\n if (!config) {\r\n debugLogger.warn('MODEL_MANAGER_GLOBAL_CONFIG_MISSING', {})\r\n globalModelManager = new ModelManager({\r\n modelProfiles: [],\r\n modelPointers: { main: '', task: '', compact: '', quick: '' },\r\n })\r\n } else {\r\n globalModelManager = new ModelManager(config)\r\n }\r\n }\r\n return globalModelManager\r\n } catch (error) {\r\n logError(error)\r\n debugLogger.error('MODEL_MANAGER_CREATE_FAILED', {\r\n error: error instanceof Error ? error.message : String(error),\r\n })\r\n return new ModelManager({\r\n modelProfiles: [],\r\n modelPointers: { main: '', task: '', compact: '', quick: '' },\r\n })\r\n }\r\n}\r\n\r\nexport const reloadModelManager = (): void => {\r\n globalModelManager = null\r\n getModelManager()\r\n}\r\n\r\nexport const getQuickModel = (): string => {\r\n const manager = getModelManager()\r\n const quickModel = manager.getModel('quick')\r\n return quickModel?.modelName || 'quick'\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;AAAA,SAAS,eAAe;AAWjB,IAAM,cAAc,CAAC,EAC1B,QAAQ,IAAI,uBAAuB,QAAQ,IAAI;AAE1C,IAAM,aAAa,CAAC,EACzB,QAAQ,IAAI,sBAAsB,QAAQ,IAAI;AAShD,IAAM,uBAAoC;AAAA,EACxC,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,YAAY;AACd;AAEA,eAAe,iBAAuC;AACpD,SAAO;AACT;AAEO,IAAM,yBAAyB,QAAQ,YAA6B;AACzE,QAAM,SAAS,MAAM,gBAAgB;AAErC,QAAM,eAAe,IAAI,aAAa,MAAM;AAC5C,QAAM,QAAQ,aAAa,kBAAkB;AAE7C,MAAI,OAAO;AACT,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,MAAM,eAAe;AACzC,MAAI,YAAa,QAAO,YAAY;AACpC,MAAI,WAAY,QAAO,YAAY;AACnC,SAAO,YAAY;AACrB,CAAC;AAED,eAAsB,+BAAiD;AACrE,SACE,CAAC,QAAQ,IAAI,mBACb,QAAQ,IAAI,oBAAqB,MAAM,uBAAuB;AAElE;AAEO,SAAS,wBACd,OACoB;AACpB,MAAI,OAAO,WAAW,kBAAkB,GAAG;AACzC,WAAO,QAAQ,IAAI;AAAA,EACrB,WAAW,OAAO,WAAW,mBAAmB,GAAG;AACjD,WAAO,QAAQ,IAAI;AAAA,EACrB,WAAW,OAAO,WAAW,mBAAmB,GAAG;AACjD,WAAO,QAAQ,IAAI;AAAA,EACrB;AACF;AAEO,IAAM,eAAN,MAAmB;AAAA,EAChB;AAAA,EACA;AAAA,EAER,YAAY,QAAa;AACvB,SAAK,SAAS;AACd,SAAK,gBAAgB,OAAO,iBAAiB,CAAC;AAAA,EAChD;AAAA,EAEA,kBAAiC;AAC/B,UAAM,gBAAgB,KAAK,OAAO,eAAe;AACjD,QAAI,eAAe;AACjB,YAAM,UAAU,KAAK,iBAAiB,aAAa;AACnD,UAAI,WAAW,QAAQ,UAAU;AAC/B,eAAO,QAAQ;AAAA,MACjB;AAAA,IACF;AAEA,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAAA,EAEA,oBAAmC;AACjC,UAAM,gBAAgB,KAAK,OAAO,eAAe;AACjD,QAAI,eAAe;AACjB,YAAM,UAAU,KAAK,iBAAiB,aAAa;AACnD,UAAI,WAAW,QAAQ,UAAU;AAC/B,eAAO,QAAQ;AAAA,MACjB;AAAA,IACF;AAEA,UAAM,gBAAgB,KAAK,cAAc,KAAK,OAAK,EAAE,QAAQ;AAC7D,QAAI,eAAe;AACjB,aAAO,cAAc;AAAA,IACvB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,mBAAkC;AAChC,UAAM,gBAAgB,KAAK,OAAO,eAAe;AACjD,QAAI,eAAe;AACjB,YAAM,UAAU,KAAK,iBAAiB,aAAa;AACnD,UAAI,WAAW,QAAQ,UAAU;AAC/B,eAAO,QAAQ;AAAA,MACjB;AAAA,IACF;AAEA,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAAA,EAEA,kCAAkC,uBAA+B,GAc/D;AACA,UAAM,cAAc,KAAK,uBAAuB;AAChD,QAAI,YAAY,WAAW,GAAG;AAC5B,aAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,QACX,mBAAmB;AAAA,QACnB,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAEA,gBAAY,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS;AAEpD,UAAM,uBAAuB,KAAK,OAAO,eAAe;AACxD,UAAM,eAAe,uBACjB,KAAK,iBAAiB,oBAAoB,IAC1C;AACJ,UAAM,oBAAoB,cAAc,QAAQ;AAEhD,UAAM,iBAAiB,CACrB,UAKG;AACH,YAAM,gBAAgB,OAAO,MAAM,aAAa;AAChD,UAAI,CAAC,OAAO,SAAS,aAAa,KAAK,iBAAiB,GAAG;AACzD,eAAO,EAAE,cAAc,MAAM,iBAAiB,GAAG,YAAY,KAAK;AAAA,MACpE;AACA,YAAM,eAAe,KAAK,MAAM,gBAAgB,GAAG;AACnD,YAAM,kBACJ,eAAe,IAAK,uBAAuB,eAAgB,MAAM;AACnE,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,YACE,eAAe,IAAI,wBAAwB,eAAe;AAAA,MAC9D;AAAA,IACF;AAEA,UAAM,eAAe,uBACjB,YAAY,UAAU,OAAK,EAAE,cAAc,oBAAoB,IAC/D;AACJ,UAAM,aAAa,gBAAgB,IAAI,eAAe;AAEtD,QAAI,YAAY,WAAW,GAAG;AAC5B,aAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,QACX;AAAA,QACA,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,aACJ,eAAe,KAAK,YAAY,SAAS,YAAY,SAAS;AAChE,UAAM,gBAIF,CAAC;AAEL,QAAI,WAAgC;AACpC,QAAI,0BAA0B;AAE9B,aAAS,SAAS,GAAG,UAAU,YAAY,UAAU;AACnD,YAAM,kBACH,aAAa,SAAS,YAAY,UAAU,YAAY;AAC3D,YAAM,YAAY,YAAY,cAAc;AAC5C,UAAI,CAAC,UAAW;AAEhB,YAAM,EAAE,cAAc,iBAAiB,WAAW,IAChD,eAAe,SAAS;AAC1B,UAAI,YAAY;AACd,mBAAW;AACX,kCAA0B;AAC1B;AAAA,MACF;AACA,oBAAc,KAAK;AAAA,QACjB,MAAM,UAAU;AAAA,QAChB,UAAU,UAAU;AAAA,QACpB,eAAe,UAAU;AAAA,QACzB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,UAAU;AACb,YAAM,eAAe,cAAc,CAAC;AACpC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,QACX;AAAA,QACA,iBAAiB;AAAA,QACjB,iBAAiB,cAAc,mBAAmB;AAAA,QAClD;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,UAAU;AACtB,eAAS,WAAW;AAAA,IACtB;AAEA,SAAK,WAAW,QAAQ,SAAS,SAAS;AAC1C,SAAK,eAAe,SAAS,SAAS;AAEtC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,WAAW,SAAS;AAAA,MACpB;AAAA,MACA,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAAkB,uBAA+B,GAK/C;AACA,UAAM,SAAS,KAAK,kCAAkC,oBAAoB;AAE1E,UAAM,eAAe,CAAC,WAA2B;AAC/C,UAAI,CAAC,OAAO,SAAS,MAAM,EAAG,QAAO;AACrC,UAAI,UAAU,IAAM,QAAO,GAAG,KAAK,MAAM,SAAS,GAAI,CAAC;AACvD,aAAO,OAAO,KAAK,MAAM,MAAM,CAAC;AAAA,IAClC;AAEA,UAAM,YAAY,KAAK,uBAAuB;AAC9C,QAAI,UAAU,WAAW,GAAG;AAC1B,aAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AACA,QAAI,UAAU,WAAW,GAAG;AAC1B,aAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS;AAAA,QACT,SAAS,2CAAiC,UAAU,CAAC,EAAE,SAAS;AAAA,MAClE;AAAA,IACF;AAEA,UAAM,eAAe,KAAK,iBAAiB,KAAK,OAAO,eAAe,IAAI;AAC1E,UAAM,eAAe,CAAC,GAAG,SAAS,EAAE;AAAA,MAClC,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE;AAAA,IAC5B;AACA,UAAM,eAAe,aAAa;AAAA,MAChC,OAAK,EAAE,cAAc,cAAc;AAAA,IACrC;AACA,UAAM,cAAc,aAAa;AAEjC,QAAI,OAAO,WAAW,OAAO,WAAW;AACtC,YAAM,eAAe,OAAO,eAAe,UAAU;AACrD,YAAM,gBACJ,eAAe,IAAI,iBAAc,YAAY,kBAAkB;AACjE,YAAM,gBACJ,cAAc,iBAAiB,OAAO,uBAClC,kBAAe,aAAa,OAAO,oBAAoB,CAAC,IAAI,aAAa,aAAa,aAAa,CAAC,KACpG;AAEN,aAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW,OAAO;AAAA,QAClB,SAAS;AAAA,QACT,SAAS,sBAAiB,OAAO,SAAS,KAAK,eAAe,CAAC,IAAI,WAAW,IAAI,cAAc,WAAW,KAAK,aAAa,QAAQ,MAAM,EAAE,GAAG,aAAa,GAAG,aAAa;AAAA,MAC/K;AAAA,IACF;AAEA,QAAI,OAAO,iBAAiB;AAC1B,YAAM,YAAY,OAAO,gBAAgB,CAAC;AAC1C,YAAM,mBAAmB,WAAW;AACpC,YAAM,kBAAkB,WAAW;AACnC,YAAM,eACJ,cAAc,QAAQ,cAAc,aAAa;AAEnD,YAAM,gBAAgB,YAClB,mBAAmB,UAAU,IAAI,cAAc,aAAa,OAAO,oBAAoB,CAAC,iCAAiC,aAAa,mBAAmB,CAAC,CAAC,mBAAmB,aAAa,oBAAoB,CAAC,CAAC,OACjN,6CAA6C,aAAa,OAAO,oBAAoB,CAAC;AAE1F,aAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS;AAAA,QACT,SAAS,gBAAM,aAAa,YAAY,YAAY;AAAA,MACtD;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,sBAAsB,mBAAoC;AACxD,UAAM,gBAAgB,KAAK,cAAc;AAAA,MACvC,OAAK,EAAE,SAAS,qBAAqB,EAAE;AAAA,IACzC;AACA,QAAI,CAAC,eAAe;AAClB,aAAO;AAAA,IACT;AAEA,SAAK,WAAW,QAAQ,cAAc,SAAS;AAC/C,SAAK,eAAe,cAAc,SAAS;AAC3C,WAAO;AAAA,EACT;AAAA,EAEA,4BACE,OACA,eAMA;AACA,UAAM,gBAAgB,KAAK,MAAM,MAAM,gBAAgB,GAAG;AAC1D,UAAM,kBAAmB,gBAAgB,gBAAiB;AAE1D,QAAI,mBAAmB,IAAI;AACzB,aAAO;AAAA,QACL,YAAY;AAAA,QACZ,UAAU;AAAA,QACV;AAAA,QACA,gBAAgB;AAAA,MAClB;AAAA,IACF,WAAW,mBAAmB,IAAI;AAChC,aAAO;AAAA,QACL,YAAY;AAAA,QACZ,UAAU;AAAA,QACV;AAAA,QACA,gBAAgB;AAAA,MAClB;AAAA,IACF,OAAO;AACL,aAAO;AAAA,QACL,YAAY;AAAA,QACZ,UAAU;AAAA,QACV;AAAA,QACA,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,8BAA8B,uBAA+B,GAK3D;AACA,UAAM,SAAS,KAAK,kBAAkB,oBAAoB;AAE1D,QAAI,CAAC,OAAO,WAAW,CAAC,OAAO,WAAW;AACxC,aAAO;AAAA,QACL,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,qBAAqB;AAAA,QACrB,4BAA4B;AAAA,MAC9B;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,SAAS,MAAM;AACrC,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,WAAW,OAAO;AAAA,QAClB,iBAAiB;AAAA,QACjB,qBAAqB;AAAA,QACrB,4BAA4B;AAAA,MAC9B;AAAA,IACF;AAEA,UAAM,WAAW,KAAK;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,MACL,WAAW,OAAO;AAAA,MAClB,iBAAiB;AAAA,MACjB,qBAAqB,SAAS,aAAa;AAAA,MAC3C,4BAA4B;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,sBAAsB,OAAqB,eAAgC;AACzE,UAAM,WAAW,KAAK,4BAA4B,OAAO,aAAa;AACtE,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,+BACE,QACA,eACqB;AACrB,WACE,OAAO,KAAK,WAAS,KAAK,sBAAsB,OAAO,aAAa,CAAC,KACrE;AAAA,EAEJ;AAAA,EAEA,mBACE,aACe;AACf,YAAQ,aAAa;AAAA,MACnB,KAAK;AACH,eAAO,KAAK,gBAAgB;AAAA,MAC9B,KAAK;AACH,eAAO,KAAK,kBAAkB;AAAA,MAChC,KAAK;AACH,eAAO,KAAK,iBAAiB;AAAA,MAC/B;AACE,eAAO,KAAK,kBAAkB;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,yBAAyC;AACvC,WAAO,KAAK,cAAc,OAAO,OAAK,EAAE,QAAQ;AAAA,EAClD;AAAA,EAEA,sBAA+B;AAC7B,WAAO,KAAK,uBAAuB,EAAE,SAAS;AAAA,EAChD;AAAA,EAGA,SAAS,SAAgD;AACvD,UAAM,YAAY,KAAK,OAAO,gBAAgB,OAAO;AACrD,QAAI,CAAC,WAAW;AACd,aAAO,KAAK,gBAAgB;AAAA,IAC9B;AAEA,UAAM,UAAU,KAAK,iBAAiB,SAAS;AAC/C,WAAO,WAAW,QAAQ,WAAW,UAAU,KAAK,gBAAgB;AAAA,EACtE;AAAA,EAEA,aAAa,SAA0C;AACrD,UAAM,UAAU,KAAK,SAAS,OAAO;AACrC,WAAO,UAAU,QAAQ,YAAY;AAAA,EACvC;AAAA,EAEA,kBAAiC;AAC/B,WAAO,KAAK,aAAa,SAAS,KAAK,KAAK,aAAa,MAAM;AAAA,EACjE;AAAA,EAEA,gBAA+B;AAC7B,WACE,KAAK,aAAa,OAAO,KACzB,KAAK,aAAa,MAAM,KACxB,KAAK,aAAa,MAAM;AAAA,EAE5B;AAAA,EAEA,MAAM,SACJ,QACiB;AACjB,UAAM,sBAAsB,KAAK,cAAc;AAAA,MAC7C,OAAK,EAAE,cAAc,OAAO;AAAA,IAC9B;AACA,QAAI,qBAAqB;AACvB,YAAM,IAAI;AAAA,QACR,yBAAyB,OAAO,SAAS,qBAAqB,oBAAoB,IAAI;AAAA,MACxF;AAAA,IACF;AAEA,UAAM,iBAAiB,KAAK,cAAc,KAAK,OAAK,EAAE,SAAS,OAAO,IAAI;AAC1E,QAAI,gBAAgB;AAClB,YAAM,IAAI,MAAM,oBAAoB,OAAO,IAAI,kBAAkB;AAAA,IACnE;AAEA,UAAM,WAAyB;AAAA,MAC7B,GAAG;AAAA,MACH,WAAW,KAAK,IAAI;AAAA,MACpB,UAAU;AAAA,IACZ;AAEA,SAAK,cAAc,KAAK,QAAQ;AAEhC,QAAI,KAAK,cAAc,WAAW,GAAG;AACnC,WAAK,OAAO,gBAAgB;AAAA,QAC1B,MAAM,OAAO;AAAA,QACb,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,OAAO,OAAO;AAAA,MAChB;AACA,WAAK,OAAO,mBAAmB,OAAO;AAAA,IACxC,OAAO;AACL,UAAI,CAAC,KAAK,OAAO,eAAe;AAC9B,aAAK,OAAO,gBAAgB;AAAA,UAC1B,MAAM,OAAO;AAAA,UACb,MAAM;AAAA,UACN,SAAS;AAAA,UACT,OAAO;AAAA,QACT;AAAA,MACF,OAAO;AACL,aAAK,OAAO,cAAc,OAAO,OAAO;AAAA,MAC1C;AAAA,IACF;AAEA,SAAK,WAAW;AAChB,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,WAAW,SAA2B,WAAyB;AAC7D,QAAI,CAAC,KAAK,iBAAiB,SAAS,GAAG;AACrC,YAAM,IAAI,MAAM,UAAU,SAAS,aAAa;AAAA,IAClD;AAEA,QAAI,CAAC,KAAK,OAAO,eAAe;AAC9B,WAAK,OAAO,gBAAgB;AAAA,QAC1B,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,SAAK,OAAO,cAAc,OAAO,IAAI;AACrC,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,qBAAqC;AACnC,WAAO,KAAK,cAAc,OAAO,OAAK,EAAE,QAAQ;AAAA,EAClD;AAAA,EAEA,yBAAyC;AACvC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,4BAAsC;AACpC,WAAO,KAAK,mBAAmB,EAAE,IAAI,OAAK,EAAE,SAAS;AAAA,EACvD;AAAA,EAEA,6BAAuC;AACrC,WAAO,KAAK,uBAAuB,EAAE,IAAI,OAAK,EAAE,SAAS;AAAA,EAC3D;AAAA,EAEA,6BAaE;AACA,UAAM,kBAAkB,KAAK,mBAAmB;AAChD,UAAM,uBAAuB,KAAK,OAAO,eAAe;AAExD,WAAO;AAAA,MACL,aAAa,KAAK,cAAc;AAAA,MAChC,cAAc,gBAAgB;AAAA,MAC9B,gBAAgB,KAAK,cAAc,SAAS,gBAAgB;AAAA,MAC5D,kBAAkB,wBAAwB;AAAA,MAC1C,iBAAiB,KAAK,cAAc,IAAI,QAAM;AAAA,QAC5C,MAAM,EAAE;AAAA,QACR,WAAW,EAAE;AAAA,QACb,UAAU,EAAE;AAAA,QACZ,UAAU,EAAE;AAAA,QACZ,UAAU,EAAE;AAAA,MACd,EAAE;AAAA,MACF,eAAe,KAAK,OAAO,iBAAiB,CAAC;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,YAAY,WAAyB;AACnC,SAAK,gBAAgB,KAAK,cAAc;AAAA,MACtC,OAAK,EAAE,cAAc;AAAA,IACvB;AAEA,QAAI,KAAK,OAAO,eAAe;AAC7B,aAAO,KAAK,KAAK,OAAO,aAAa,EAAE,QAAQ,aAAW;AACxD,YACE,KAAK,OAAO,cAAc,OAA2B,MAAM,WAC3D;AACA,eAAK,OAAO,cAAc,OAA2B,IACnD,KAAK,OAAO,oBAAoB;AAAA,QACpC;AAAA,MACF,CAAC;AAAA,IACH;AAEA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEQ,kBAAuC;AAC7C,QAAI,KAAK,OAAO,gBAAgB;AAC9B,YAAM,UAAU,KAAK,iBAAiB,KAAK,OAAO,cAAc;AAChE,UAAI,WAAW,QAAQ,UAAU;AAC/B,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO,KAAK,cAAc,KAAK,OAAK,EAAE,QAAQ,KAAK;AAAA,EACrD;AAAA,EAEQ,aAAmB;AACzB,UAAM,gBAAgB;AAAA,MACpB,GAAG,KAAK;AAAA,MACR,eAAe,KAAK;AAAA,IACtB;AACA,qBAAiB,aAAa;AAAA,EAChC;AAAA,EAEA,MAAM,mBAAoC;AACxC,UAAM,cAAc,MAAM,eAAe;AACzC,QAAI,YAAa,QAAO,YAAY;AACpC,QAAI,WAAY,QAAO,YAAY;AACnC,WAAO,YAAY;AAAA,EACrB;AAAA,EAEA,aAAa,YAA4D;AACvE,QAAI,CAAC,QAAQ,QAAQ,WAAW,OAAO,EAAE,SAAS,UAAU,GAAG;AAC7D,YAAM,YACJ,KAAK,OAAO,gBAAgB,UAA8B;AAC5D,UAAI,WAAW;AACb,YAAIA,WAAU,KAAK,iBAAiB,SAAS;AAC7C,YAAI,CAACA,UAAS;AACZ,UAAAA,WAAU,KAAK,4BAA4B,SAAS;AAAA,QACtD;AACA,YAAIA,YAAWA,SAAQ,UAAU;AAC/B,iBAAOA;AAAA,QACT;AAAA,MACF;AACA,aAAO,KAAK,gBAAgB;AAAA,IAC9B;AAEA,QAAI,UAAU,KAAK,iBAAiB,UAAU;AAC9C,QAAI,WAAW,QAAQ,UAAU;AAC/B,aAAO;AAAA,IACT;AAEA,cAAU,KAAK,4BAA4B,UAAU;AACrD,QAAI,WAAW,QAAQ,UAAU;AAC/B,aAAO;AAAA,IACT;AAEA,cAAU,KAAK,uBAAuB,UAAU;AAChD,QAAI,WAAW,QAAQ,UAAU;AAC/B,aAAO;AAAA,IACT;AAEA,QAAI,OAAO,eAAe,UAAU;AAClC,YAAM,YAAY,KAAK,8BAA8B,UAAU;AAC/D,UAAI,aAAa,UAAU,UAAU;AACnC,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,KAAK,gBAAgB;AAAA,EAC9B;AAAA,EAEA,qBAAqB,YAInB;AACA,UAAM,YAAY,CAAC,QAAQ,QAAQ,WAAW,OAAO,EAAE,SAAS,UAAU;AAE1E,QAAI,WAAW;AACb,YAAM,YACJ,KAAK,OAAO,gBAAgB,UAA8B;AAC5D,UAAI,CAAC,WAAW;AACd,eAAO;AAAA,UACL,SAAS;AAAA,UACT,SAAS;AAAA,UACT,OAAO,kBAAkB,UAAU;AAAA,QACrC;AAAA,MACF;AAEA,UAAI,UAAU,KAAK,iBAAiB,SAAS;AAC7C,UAAI,CAAC,SAAS;AACZ,kBAAU,KAAK,4BAA4B,SAAS;AAAA,MACtD;AAEA,UAAI,CAAC,SAAS;AACZ,eAAO;AAAA,UACL,SAAS;AAAA,UACT,SAAS;AAAA,UACT,OAAO,kBAAkB,UAAU,8BAA8B,SAAS;AAAA,QAC5E;AAAA,MACF;AAEA,UAAI,CAAC,QAAQ,UAAU;AACrB,eAAO;AAAA,UACL,SAAS;AAAA,UACT,SAAS;AAAA,UACT,OAAO,UAAU,QAAQ,IAAI,kBAAkB,UAAU;AAAA,QAC3D;AAAA,MACF;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF,OAAO;AACL,UAAI,UAAU,KAAK,iBAAiB,UAAU;AAC9C,UAAI,CAAC,SAAS;AACZ,kBAAU,KAAK,4BAA4B,UAAU;AAAA,MACvD;AACA,UAAI,CAAC,SAAS;AACZ,kBAAU,KAAK,uBAAuB,UAAU;AAAA,MAClD;AAEA,UAAI,CAAC,WAAW,OAAO,eAAe,UAAU;AAC9C,kBAAU,KAAK,8BAA8B,UAAU;AAAA,MACzD;AAEA,UAAI,CAAC,SAAS;AACZ,eAAO;AAAA,UACL,SAAS;AAAA,UACT,SAAS;AAAA,UACT,OAAO,UAAU,UAAU;AAAA,QAC7B;AAAA,MACF;AAEA,UAAI,CAAC,QAAQ,UAAU;AACrB,eAAO;AAAA,UACL,SAAS;AAAA,UACT,SAAS;AAAA,UACT,OAAO,UAAU,QAAQ,IAAI;AAAA,QAC/B;AAAA,MACF;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,8BAA8B,OAAoC;AACxE,UAAM,UAAU,MAAM,KAAK;AAC3B,UAAM,aAAa,QAAQ,QAAQ,GAAG;AACtC,QAAI,cAAc,KAAK,cAAc,QAAQ,SAAS,EAAG,QAAO;AAEhE,UAAM,WAAW,QAAQ,MAAM,GAAG,UAAU,EAAE,KAAK,EAAE,YAAY;AACjE,UAAM,cAAc,QAAQ,MAAM,aAAa,CAAC,EAAE,KAAK;AACvD,QAAI,CAAC,YAAY,CAAC,YAAa,QAAO;AAEtC,UAAM,mBAAmB,KAAK,cAAc;AAAA,MAC1C,OAAK,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,MAAM;AAAA,IACnD;AACA,QAAI,iBAAiB,WAAW,EAAG,QAAO;AAE1C,UAAM,cAAc,iBAAiB,KAAK,OAAK,EAAE,cAAc,WAAW;AAC1E,QAAI,YAAa,QAAO;AAExB,UAAM,SAAS,iBAAiB,KAAK,OAAK,EAAE,SAAS,WAAW;AAChE,QAAI,OAAQ,QAAO;AAEnB,WAAO;AAAA,EACT;AAAA,EAEQ,iBAAiB,WAAwC;AAC/D,WAAO,KAAK,cAAc,KAAK,OAAK,EAAE,cAAc,SAAS,KAAK;AAAA,EACpE;AAAA,EAEQ,4BAA4B,WAAwC;AAC1E,WAAO,KAAK,cAAc,KAAK,OAAK,EAAE,cAAc,SAAS,KAAK;AAAA,EACpE;AAAA,EAEQ,uBAAuB,MAAmC;AAChE,WAAO,KAAK,cAAc,KAAK,OAAK,EAAE,SAAS,IAAI,KAAK;AAAA,EAC1D;AAAA,EAEQ,eAAe,WAAyB;AAC9C,UAAM,UAAU,KAAK,iBAAiB,SAAS;AAC/C,QAAI,SAAS;AACX,cAAQ,WAAW,KAAK,IAAI;AAAA,IAC9B;AAAA,EACF;AACF;AAEA,IAAI,qBAA0C;AAEvC,IAAM,kBAAkB,MAAoB;AACjD,MAAI;AACF,QAAI,CAAC,oBAAoB;AACvB,YAAM,SAAS,gBAAgB;AAC/B,UAAI,CAAC,QAAQ;AACX,cAAY,KAAK,uCAAuC,CAAC,CAAC;AAC1D,6BAAqB,IAAI,aAAa;AAAA,UACpC,eAAe,CAAC;AAAA,UAChB,eAAe,EAAE,MAAM,IAAI,MAAM,IAAI,SAAS,IAAI,OAAO,GAAG;AAAA,QAC9D,CAAC;AAAA,MACH,OAAO;AACL,6BAAqB,IAAI,aAAa,MAAM;AAAA,MAC9C;AAAA,IACF;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,aAAS,KAAK;AACd,UAAY,MAAM,+BAA+B;AAAA,MAC/C,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D,CAAC;AACD,WAAO,IAAI,aAAa;AAAA,MACtB,eAAe,CAAC;AAAA,MAChB,eAAe,EAAE,MAAM,IAAI,MAAM,IAAI,SAAS,IAAI,OAAO,GAAG;AAAA,IAC9D,CAAC;AAAA,EACH;AACF;AAEO,IAAM,qBAAqB,MAAY;AAC5C,uBAAqB;AACrB,kBAAgB;AAClB;AAEO,IAAM,gBAAgB,MAAc;AACzC,QAAM,UAAU,gBAAgB;AAChC,QAAM,aAAa,QAAQ,SAAS,OAAO;AAC3C,SAAO,YAAY,aAAa;AAClC;",
|
|
6
|
+
"names": ["profile"]
|
|
7
|
+
}
|