@qwen-code/qwen-code 0.10.0-preview.3 → 0.10.0-preview.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/cli.js +469 -441
- package/locales/de.js +18 -0
- package/locales/en.js +37 -0
- package/locales/ja.js +18 -0
- package/locales/pt.js +18 -0
- package/locales/ru.js +18 -0
- package/locales/zh.js +36 -0
- package/package.json +2 -2
package/cli.js
CHANGED
|
@@ -71639,17 +71639,6 @@ var init_tools = __esm({
|
|
|
71639
71639
|
});
|
|
71640
71640
|
|
|
71641
71641
|
// packages/core/dist/src/tools/mcp-tool.js
|
|
71642
|
-
function wrapMcpCallToolResultAsParts(toolName, result) {
|
|
71643
|
-
const response = result.isError ? { error: result, content: result.content } : result;
|
|
71644
|
-
return [
|
|
71645
|
-
{
|
|
71646
|
-
functionResponse: {
|
|
71647
|
-
name: toolName,
|
|
71648
|
-
response
|
|
71649
|
-
}
|
|
71650
|
-
}
|
|
71651
|
-
];
|
|
71652
|
-
}
|
|
71653
71642
|
function transformTextBlock(block2) {
|
|
71654
71643
|
return { text: block2.text };
|
|
71655
71644
|
}
|
|
@@ -71767,10 +71756,8 @@ var init_mcp_tool = __esm({
|
|
|
71767
71756
|
displayName;
|
|
71768
71757
|
trust;
|
|
71769
71758
|
cliConfig;
|
|
71770
|
-
mcpClient;
|
|
71771
|
-
mcpTimeout;
|
|
71772
71759
|
static allowlist = /* @__PURE__ */ new Set();
|
|
71773
|
-
constructor(mcpTool, serverName, serverToolName, displayName, trust, params = {}, cliConfig
|
|
71760
|
+
constructor(mcpTool, serverName, serverToolName, displayName, trust, params = {}, cliConfig) {
|
|
71774
71761
|
super(params);
|
|
71775
71762
|
this.mcpTool = mcpTool;
|
|
71776
71763
|
this.serverName = serverName;
|
|
@@ -71778,8 +71765,6 @@ var init_mcp_tool = __esm({
|
|
|
71778
71765
|
this.displayName = displayName;
|
|
71779
71766
|
this.trust = trust;
|
|
71780
71767
|
this.cliConfig = cliConfig;
|
|
71781
|
-
this.mcpClient = mcpClient;
|
|
71782
|
-
this.mcpTimeout = mcpTimeout;
|
|
71783
71768
|
}
|
|
71784
71769
|
async shouldConfirmExecute(_abortSignal) {
|
|
71785
71770
|
const serverAllowListKey = this.serverName;
|
|
@@ -71823,63 +71808,7 @@ var init_mcp_tool = __esm({
|
|
|
71823
71808
|
}
|
|
71824
71809
|
return false;
|
|
71825
71810
|
}
|
|
71826
|
-
async execute(signal
|
|
71827
|
-
if (this.mcpClient) {
|
|
71828
|
-
return this.executeWithDirectClient(signal, updateOutput2);
|
|
71829
|
-
}
|
|
71830
|
-
return this.executeWithCallableTool(signal);
|
|
71831
|
-
}
|
|
71832
|
-
/**
|
|
71833
|
-
* Execute using the raw MCP SDK Client, which supports progress
|
|
71834
|
-
* notifications via the onprogress callback. This enables real-time
|
|
71835
|
-
* streaming of progress updates to the user during long-running
|
|
71836
|
-
* MCP tool calls (e.g., browser automation).
|
|
71837
|
-
*/
|
|
71838
|
-
async executeWithDirectClient(signal, updateOutput2) {
|
|
71839
|
-
const callToolResult = await this.mcpClient.callTool({
|
|
71840
|
-
name: this.serverToolName,
|
|
71841
|
-
arguments: this.params
|
|
71842
|
-
}, void 0, {
|
|
71843
|
-
onprogress: /* @__PURE__ */ __name((progress) => {
|
|
71844
|
-
if (updateOutput2) {
|
|
71845
|
-
const progressData = {
|
|
71846
|
-
type: "mcp_tool_progress",
|
|
71847
|
-
progress: progress.progress,
|
|
71848
|
-
...progress.total != null && { total: progress.total },
|
|
71849
|
-
...progress.message != null && { message: progress.message }
|
|
71850
|
-
};
|
|
71851
|
-
updateOutput2(progressData);
|
|
71852
|
-
}
|
|
71853
|
-
}, "onprogress"),
|
|
71854
|
-
timeout: this.mcpTimeout,
|
|
71855
|
-
signal
|
|
71856
|
-
});
|
|
71857
|
-
const rawResponseParts = wrapMcpCallToolResultAsParts(this.serverToolName, callToolResult);
|
|
71858
|
-
if (this.isMCPToolError(rawResponseParts)) {
|
|
71859
|
-
const errorMessage = `MCP tool '${this.serverToolName}' reported tool error for function call: ${safeJsonStringify({
|
|
71860
|
-
name: this.serverToolName,
|
|
71861
|
-
args: this.params
|
|
71862
|
-
})} with response: ${safeJsonStringify(rawResponseParts)}`;
|
|
71863
|
-
return {
|
|
71864
|
-
llmContent: errorMessage,
|
|
71865
|
-
returnDisplay: `Error: MCP tool '${this.serverToolName}' reported an error.`,
|
|
71866
|
-
error: {
|
|
71867
|
-
message: errorMessage,
|
|
71868
|
-
type: ToolErrorType.MCP_TOOL_ERROR
|
|
71869
|
-
}
|
|
71870
|
-
};
|
|
71871
|
-
}
|
|
71872
|
-
const transformedParts = transformMcpContentToParts(rawResponseParts);
|
|
71873
|
-
return {
|
|
71874
|
-
llmContent: transformedParts,
|
|
71875
|
-
returnDisplay: getStringifiedResultForDisplay(rawResponseParts)
|
|
71876
|
-
};
|
|
71877
|
-
}
|
|
71878
|
-
/**
|
|
71879
|
-
* Fallback: execute using the @google/genai CallableTool wrapper.
|
|
71880
|
-
* This path does NOT support progress notifications.
|
|
71881
|
-
*/
|
|
71882
|
-
async executeWithCallableTool(signal) {
|
|
71811
|
+
async execute(signal) {
|
|
71883
71812
|
const functionCalls = [
|
|
71884
71813
|
{
|
|
71885
71814
|
name: this.serverToolName,
|
|
@@ -71942,9 +71871,7 @@ var init_mcp_tool = __esm({
|
|
|
71942
71871
|
parameterSchema;
|
|
71943
71872
|
trust;
|
|
71944
71873
|
cliConfig;
|
|
71945
|
-
|
|
71946
|
-
mcpTimeout;
|
|
71947
|
-
constructor(mcpTool, serverName, serverToolName, description, parameterSchema, trust, nameOverride, cliConfig, mcpClient, mcpTimeout) {
|
|
71874
|
+
constructor(mcpTool, serverName, serverToolName, description, parameterSchema, trust, nameOverride, cliConfig) {
|
|
71948
71875
|
super(
|
|
71949
71876
|
nameOverride ?? generateValidName(`mcp__${serverName}__${serverToolName}`),
|
|
71950
71877
|
`${serverToolName} (${serverName} MCP Server)`,
|
|
@@ -71953,7 +71880,7 @@ var init_mcp_tool = __esm({
|
|
|
71953
71880
|
parameterSchema,
|
|
71954
71881
|
true,
|
|
71955
71882
|
// isOutputMarkdown
|
|
71956
|
-
|
|
71883
|
+
false
|
|
71957
71884
|
);
|
|
71958
71885
|
this.mcpTool = mcpTool;
|
|
71959
71886
|
this.serverName = serverName;
|
|
@@ -71961,17 +71888,14 @@ var init_mcp_tool = __esm({
|
|
|
71961
71888
|
this.parameterSchema = parameterSchema;
|
|
71962
71889
|
this.trust = trust;
|
|
71963
71890
|
this.cliConfig = cliConfig;
|
|
71964
|
-
this.mcpClient = mcpClient;
|
|
71965
|
-
this.mcpTimeout = mcpTimeout;
|
|
71966
71891
|
}
|
|
71967
71892
|
asFullyQualifiedTool() {
|
|
71968
|
-
return new _DiscoveredMCPTool(this.mcpTool, this.serverName, this.serverToolName, this.description, this.parameterSchema, this.trust, generateValidName(`mcp__${this.serverName}__${this.serverToolName}`), this.cliConfig
|
|
71893
|
+
return new _DiscoveredMCPTool(this.mcpTool, this.serverName, this.serverToolName, this.description, this.parameterSchema, this.trust, generateValidName(`mcp__${this.serverName}__${this.serverToolName}`), this.cliConfig);
|
|
71969
71894
|
}
|
|
71970
71895
|
createInvocation(params) {
|
|
71971
|
-
return new DiscoveredMCPToolInvocation(this.mcpTool, this.serverName, this.serverToolName, this.displayName, this.trust, params, this.cliConfig
|
|
71896
|
+
return new DiscoveredMCPToolInvocation(this.mcpTool, this.serverName, this.serverToolName, this.displayName, this.trust, params, this.cliConfig);
|
|
71972
71897
|
}
|
|
71973
71898
|
};
|
|
71974
|
-
__name(wrapMcpCallToolResultAsParts, "wrapMcpCallToolResultAsParts");
|
|
71975
71899
|
__name(transformTextBlock, "transformTextBlock");
|
|
71976
71900
|
__name(transformImageAudioBlock, "transformImageAudioBlock");
|
|
71977
71901
|
__name(transformResourceBlock, "transformResourceBlock");
|
|
@@ -132884,11 +132808,16 @@ var init_modelRegistry = __esm({
|
|
|
132884
132808
|
}
|
|
132885
132809
|
}
|
|
132886
132810
|
/**
|
|
132887
|
-
* Register models for an authType
|
|
132811
|
+
* Register models for an authType.
|
|
132812
|
+
* If multiple models have the same id, the first one takes precedence.
|
|
132888
132813
|
*/
|
|
132889
132814
|
registerAuthTypeModels(authType, models) {
|
|
132890
132815
|
const modelMap = /* @__PURE__ */ new Map();
|
|
132891
132816
|
for (const config2 of models) {
|
|
132817
|
+
if (modelMap.has(config2.id)) {
|
|
132818
|
+
debugLogger5.warn(`Duplicate model id "${config2.id}" for authType "${authType}". Using the first registered config.`);
|
|
132819
|
+
continue;
|
|
132820
|
+
}
|
|
132892
132821
|
const resolved = this.resolveModelConfig(config2, authType);
|
|
132893
132822
|
modelMap.set(config2.id, resolved);
|
|
132894
132823
|
}
|
|
@@ -132962,6 +132891,31 @@ var init_modelRegistry = __esm({
|
|
|
132962
132891
|
throw new Error(`Model config in authType '${authType}' missing required field: id`);
|
|
132963
132892
|
}
|
|
132964
132893
|
}
|
|
132894
|
+
/**
|
|
132895
|
+
* Reload models from updated configuration.
|
|
132896
|
+
* Clears existing user-configured models and re-registers from new config.
|
|
132897
|
+
* Preserves hard-coded qwen-oauth models.
|
|
132898
|
+
*/
|
|
132899
|
+
reloadModels(modelProvidersConfig) {
|
|
132900
|
+
for (const authType of this.modelsByAuthType.keys()) {
|
|
132901
|
+
if (authType !== AuthType2.QWEN_OAUTH) {
|
|
132902
|
+
this.modelsByAuthType.delete(authType);
|
|
132903
|
+
}
|
|
132904
|
+
}
|
|
132905
|
+
if (modelProvidersConfig) {
|
|
132906
|
+
for (const [rawKey, models] of Object.entries(modelProvidersConfig)) {
|
|
132907
|
+
const authType = validateAuthTypeKey(rawKey);
|
|
132908
|
+
if (!authType) {
|
|
132909
|
+
debugLogger5.warn(`Invalid authType key "${rawKey}" in modelProviders config. Expected one of: ${Object.values(AuthType2).join(", ")}. Skipping.`);
|
|
132910
|
+
continue;
|
|
132911
|
+
}
|
|
132912
|
+
if (authType === AuthType2.QWEN_OAUTH) {
|
|
132913
|
+
continue;
|
|
132914
|
+
}
|
|
132915
|
+
this.registerAuthTypeModels(authType, models);
|
|
132916
|
+
}
|
|
132917
|
+
}
|
|
132918
|
+
}
|
|
132965
132919
|
};
|
|
132966
132920
|
}
|
|
132967
132921
|
});
|
|
@@ -133774,6 +133728,15 @@ var init_modelsConfig = __esm({
|
|
|
133774
133728
|
this.activeRuntimeModelSnapshotId = void 0;
|
|
133775
133729
|
}
|
|
133776
133730
|
}
|
|
133731
|
+
/**
|
|
133732
|
+
* Reload model providers configuration at runtime.
|
|
133733
|
+
* This enables hot-reloading of modelProviders settings without restarting the CLI.
|
|
133734
|
+
*
|
|
133735
|
+
* @param modelProvidersConfig - The updated model providers configuration
|
|
133736
|
+
*/
|
|
133737
|
+
reloadModelProvidersConfig(modelProvidersConfig) {
|
|
133738
|
+
this.modelRegistry.reloadModels(modelProvidersConfig);
|
|
133739
|
+
}
|
|
133777
133740
|
};
|
|
133778
133741
|
}
|
|
133779
133742
|
});
|
|
@@ -156388,7 +156351,7 @@ __export(geminiContentGenerator_exports, {
|
|
|
156388
156351
|
createGeminiContentGenerator: () => createGeminiContentGenerator
|
|
156389
156352
|
});
|
|
156390
156353
|
function createGeminiContentGenerator(config2, gcConfig) {
|
|
156391
|
-
const version2 = "0.10.0-preview.
|
|
156354
|
+
const version2 = "0.10.0-preview.4";
|
|
156392
156355
|
const userAgent2 = config2.userAgent || `QwenCode/${version2} (${process.platform}; ${process.arch})`;
|
|
156393
156356
|
const baseHeaders = {
|
|
156394
156357
|
"User-Agent": userAgent2
|
|
@@ -210595,26 +210558,13 @@ async function discoverTools(mcpServerName, mcpServerConfig, mcpClient, cliConfi
|
|
|
210595
210558
|
if (!Array.isArray(tool.functionDeclarations)) {
|
|
210596
210559
|
return [];
|
|
210597
210560
|
}
|
|
210598
|
-
const mcpTimeout = mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC;
|
|
210599
210561
|
const discoveredTools = [];
|
|
210600
210562
|
for (const funcDecl of tool.functionDeclarations) {
|
|
210601
210563
|
try {
|
|
210602
210564
|
if (!isEnabled(funcDecl, mcpServerName, mcpServerConfig)) {
|
|
210603
210565
|
continue;
|
|
210604
210566
|
}
|
|
210605
|
-
discoveredTools.push(new DiscoveredMCPTool(
|
|
210606
|
-
mcpCallableTool,
|
|
210607
|
-
mcpServerName,
|
|
210608
|
-
funcDecl.name,
|
|
210609
|
-
funcDecl.description ?? "",
|
|
210610
|
-
funcDecl.parametersJsonSchema ?? { type: "object", properties: {} },
|
|
210611
|
-
mcpServerConfig.trust,
|
|
210612
|
-
void 0,
|
|
210613
|
-
cliConfig,
|
|
210614
|
-
mcpClient,
|
|
210615
|
-
// raw MCP Client for direct callTool with progress
|
|
210616
|
-
mcpTimeout
|
|
210617
|
-
));
|
|
210567
|
+
discoveredTools.push(new DiscoveredMCPTool(mcpCallableTool, mcpServerName, funcDecl.name, funcDecl.description ?? "", funcDecl.parametersJsonSchema ?? { type: "object", properties: {} }, mcpServerConfig.trust, void 0, cliConfig));
|
|
210618
210568
|
} catch (error2) {
|
|
210619
210569
|
debugLogger49.error(`Error discovering tool: '${funcDecl.name}' from MCP server '${mcpServerName}': ${error2.message}`);
|
|
210620
210570
|
}
|
|
@@ -242504,6 +242454,16 @@ var init_config3 = __esm({
|
|
|
242504
242454
|
updateCredentials(credentials, settingsGenerationConfig) {
|
|
242505
242455
|
this.modelsConfig.updateCredentials(credentials, settingsGenerationConfig);
|
|
242506
242456
|
}
|
|
242457
|
+
/**
|
|
242458
|
+
* Reload model providers configuration at runtime.
|
|
242459
|
+
* This enables hot-reloading of modelProviders settings without restarting the CLI.
|
|
242460
|
+
* Should be called before refreshAuth when settings.json has been updated.
|
|
242461
|
+
*
|
|
242462
|
+
* @param modelProvidersConfig - The updated model providers configuration
|
|
242463
|
+
*/
|
|
242464
|
+
reloadModelProvidersConfig(modelProvidersConfig) {
|
|
242465
|
+
this.modelsConfig.reloadModelProvidersConfig(modelProvidersConfig);
|
|
242466
|
+
}
|
|
242507
242467
|
/**
|
|
242508
242468
|
* Refresh authentication and rebuild ContentGenerator.
|
|
242509
242469
|
*/
|
|
@@ -281707,7 +281667,7 @@ var require_backend = __commonJS({
|
|
|
281707
281667
|
) : symbolOrNumber;
|
|
281708
281668
|
}
|
|
281709
281669
|
__name(getTypeSymbol, "getTypeSymbol");
|
|
281710
|
-
var _ReactTypeOfWork = ReactTypeOfWork, CacheComponent = _ReactTypeOfWork.CacheComponent, ClassComponent = _ReactTypeOfWork.ClassComponent, IncompleteClassComponent = _ReactTypeOfWork.IncompleteClassComponent, FunctionComponent = _ReactTypeOfWork.FunctionComponent, IndeterminateComponent = _ReactTypeOfWork.IndeterminateComponent, ForwardRef = _ReactTypeOfWork.ForwardRef, HostRoot = _ReactTypeOfWork.HostRoot, HostHoistable = _ReactTypeOfWork.HostHoistable, HostSingleton = _ReactTypeOfWork.HostSingleton, HostComponent = _ReactTypeOfWork.HostComponent, HostPortal = _ReactTypeOfWork.HostPortal, HostText = _ReactTypeOfWork.HostText,
|
|
281670
|
+
var _ReactTypeOfWork = ReactTypeOfWork, CacheComponent = _ReactTypeOfWork.CacheComponent, ClassComponent = _ReactTypeOfWork.ClassComponent, IncompleteClassComponent = _ReactTypeOfWork.IncompleteClassComponent, FunctionComponent = _ReactTypeOfWork.FunctionComponent, IndeterminateComponent = _ReactTypeOfWork.IndeterminateComponent, ForwardRef = _ReactTypeOfWork.ForwardRef, HostRoot = _ReactTypeOfWork.HostRoot, HostHoistable = _ReactTypeOfWork.HostHoistable, HostSingleton = _ReactTypeOfWork.HostSingleton, HostComponent = _ReactTypeOfWork.HostComponent, HostPortal = _ReactTypeOfWork.HostPortal, HostText = _ReactTypeOfWork.HostText, Fragment16 = _ReactTypeOfWork.Fragment, LazyComponent = _ReactTypeOfWork.LazyComponent, LegacyHiddenComponent = _ReactTypeOfWork.LegacyHiddenComponent, MemoComponent = _ReactTypeOfWork.MemoComponent, OffscreenComponent = _ReactTypeOfWork.OffscreenComponent, Profiler = _ReactTypeOfWork.Profiler, ScopeComponent = _ReactTypeOfWork.ScopeComponent, SimpleMemoComponent = _ReactTypeOfWork.SimpleMemoComponent, SuspenseComponent = _ReactTypeOfWork.SuspenseComponent, SuspenseListComponent = _ReactTypeOfWork.SuspenseListComponent, TracingMarkerComponent = _ReactTypeOfWork.TracingMarkerComponent;
|
|
281711
281671
|
function resolveFiberType(type) {
|
|
281712
281672
|
var typeSymbol = getTypeSymbol(type);
|
|
281713
281673
|
switch (typeSymbol) {
|
|
@@ -281753,7 +281713,7 @@ var require_backend = __commonJS({
|
|
|
281753
281713
|
case HostPortal:
|
|
281754
281714
|
case HostText:
|
|
281755
281715
|
return null;
|
|
281756
|
-
case
|
|
281716
|
+
case Fragment16:
|
|
281757
281717
|
return "Fragment";
|
|
281758
281718
|
case LazyComponent:
|
|
281759
281719
|
return "Lazy";
|
|
@@ -281819,7 +281779,7 @@ var require_backend = __commonJS({
|
|
|
281819
281779
|
function attach(hook2, rendererID, renderer2, global2) {
|
|
281820
281780
|
var version2 = renderer2.reconcilerVersion || renderer2.version;
|
|
281821
281781
|
var _getInternalReactCons = getInternalReactConstants(version2), getDisplayNameForFiber = _getInternalReactCons.getDisplayNameForFiber, getTypeSymbol = _getInternalReactCons.getTypeSymbol, ReactPriorityLevels = _getInternalReactCons.ReactPriorityLevels, ReactTypeOfWork = _getInternalReactCons.ReactTypeOfWork, StrictModeBits = _getInternalReactCons.StrictModeBits;
|
|
281822
|
-
var CacheComponent = ReactTypeOfWork.CacheComponent, ClassComponent = ReactTypeOfWork.ClassComponent, ContextConsumer = ReactTypeOfWork.ContextConsumer, DehydratedSuspenseComponent = ReactTypeOfWork.DehydratedSuspenseComponent, ForwardRef = ReactTypeOfWork.ForwardRef,
|
|
281782
|
+
var CacheComponent = ReactTypeOfWork.CacheComponent, ClassComponent = ReactTypeOfWork.ClassComponent, ContextConsumer = ReactTypeOfWork.ContextConsumer, DehydratedSuspenseComponent = ReactTypeOfWork.DehydratedSuspenseComponent, ForwardRef = ReactTypeOfWork.ForwardRef, Fragment16 = ReactTypeOfWork.Fragment, FunctionComponent = ReactTypeOfWork.FunctionComponent, HostRoot = ReactTypeOfWork.HostRoot, HostHoistable = ReactTypeOfWork.HostHoistable, HostSingleton = ReactTypeOfWork.HostSingleton, HostPortal = ReactTypeOfWork.HostPortal, HostComponent = ReactTypeOfWork.HostComponent, HostText = ReactTypeOfWork.HostText, IncompleteClassComponent = ReactTypeOfWork.IncompleteClassComponent, IndeterminateComponent = ReactTypeOfWork.IndeterminateComponent, LegacyHiddenComponent = ReactTypeOfWork.LegacyHiddenComponent, MemoComponent = ReactTypeOfWork.MemoComponent, OffscreenComponent = ReactTypeOfWork.OffscreenComponent, SimpleMemoComponent = ReactTypeOfWork.SimpleMemoComponent, SuspenseComponent = ReactTypeOfWork.SuspenseComponent, SuspenseListComponent = ReactTypeOfWork.SuspenseListComponent, TracingMarkerComponent = ReactTypeOfWork.TracingMarkerComponent;
|
|
281823
281783
|
var ImmediatePriority = ReactPriorityLevels.ImmediatePriority, UserBlockingPriority = ReactPriorityLevels.UserBlockingPriority, NormalPriority = ReactPriorityLevels.NormalPriority, LowPriority = ReactPriorityLevels.LowPriority, IdlePriority = ReactPriorityLevels.IdlePriority, NoPriority = ReactPriorityLevels.NoPriority;
|
|
281824
281784
|
var getLaneLabelMap = renderer2.getLaneLabelMap, injectProfilingHooks = renderer2.injectProfilingHooks, overrideHookState = renderer2.overrideHookState, overrideHookStateDeletePath = renderer2.overrideHookStateDeletePath, overrideHookStateRenamePath = renderer2.overrideHookStateRenamePath, overrideProps = renderer2.overrideProps, overridePropsDeletePath = renderer2.overridePropsDeletePath, overridePropsRenamePath = renderer2.overridePropsRenamePath, scheduleRefresh = renderer2.scheduleRefresh, setErrorHandler = renderer2.setErrorHandler, setSuspenseHandler = renderer2.setSuspenseHandler, scheduleUpdate = renderer2.scheduleUpdate;
|
|
281825
281785
|
var supportsTogglingError = typeof setErrorHandler === "function" && typeof scheduleUpdate === "function";
|
|
@@ -282034,7 +281994,7 @@ var require_backend = __commonJS({
|
|
|
282034
281994
|
return true;
|
|
282035
281995
|
case HostRoot:
|
|
282036
281996
|
return false;
|
|
282037
|
-
case
|
|
281997
|
+
case Fragment16:
|
|
282038
281998
|
return key === null;
|
|
282039
281999
|
default:
|
|
282040
282000
|
var typeSymbol = getTypeSymbol(type);
|
|
@@ -282109,7 +282069,7 @@ var require_backend = __commonJS({
|
|
|
282109
282069
|
return ElementTypeHostComponent;
|
|
282110
282070
|
case HostPortal:
|
|
282111
282071
|
case HostText:
|
|
282112
|
-
case
|
|
282072
|
+
case Fragment16:
|
|
282113
282073
|
return ElementTypeOtherOrUnknown;
|
|
282114
282074
|
case MemoComponent:
|
|
282115
282075
|
case SimpleMemoComponent:
|
|
@@ -297343,7 +297303,17 @@ var init_de = __esm({
|
|
|
297343
297303
|
"Opening extensions page in your browser: {{url}}": "Erweiterungsseite wird im Browser ge\xF6ffnet: {{url}}",
|
|
297344
297304
|
"Failed to open browser. Check out the extensions gallery at {{url}}": "Browser konnte nicht ge\xF6ffnet werden. Besuchen Sie die Erweiterungsgalerie unter {{url}}",
|
|
297345
297305
|
"You can switch permission mode quickly with Shift+Tab or /approval-mode.": "Sie k\xF6nnen den Berechtigungsmodus schnell mit Shift+Tab oder /approval-mode wechseln.",
|
|
297346
|
-
"You can switch permission mode quickly with Tab or /approval-mode.": "Sie k\xF6nnen den Berechtigungsmodus schnell mit Tab oder /approval-mode wechseln."
|
|
297306
|
+
"You can switch permission mode quickly with Tab or /approval-mode.": "Sie k\xF6nnen den Berechtigungsmodus schnell mit Tab oder /approval-mode wechseln.",
|
|
297307
|
+
// ============================================================================
|
|
297308
|
+
// Custom API-KEY Configuration
|
|
297309
|
+
// ============================================================================
|
|
297310
|
+
"For advanced users who want to configure models manually.": "F\xFCr fortgeschrittene Benutzer, die Modelle manuell konfigurieren m\xF6chten.",
|
|
297311
|
+
"Please configure your models in settings.json:": "Bitte konfigurieren Sie Ihre Modelle in settings.json:",
|
|
297312
|
+
"Set API key via environment variable (e.g., OPENAI_API_KEY)": "API-Schl\xFCssel \xFCber Umgebungsvariable setzen (z.B. OPENAI_API_KEY)",
|
|
297313
|
+
"Add model configuration to modelProviders['openai'] (or other auth types)": "Modellkonfiguration zu modelProviders['openai'] (oder anderen Authentifizierungstypen) hinzuf\xFCgen",
|
|
297314
|
+
"Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig": "Jeder Anbieter ben\xF6tigt: id, envKey (erforderlich), plus optionale baseUrl, generationConfig",
|
|
297315
|
+
"Use /model command to select your preferred model from the configured list": "Verwenden Sie den /model-Befehl, um Ihr bevorzugtes Modell aus der konfigurierten Liste auszuw\xE4hlen",
|
|
297316
|
+
"Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "Unterst\xFCtzte Authentifizierungstypen: openai, anthropic, gemini, vertex-ai, usw."
|
|
297347
297317
|
};
|
|
297348
297318
|
}
|
|
297349
297319
|
});
|
|
@@ -298381,7 +298351,32 @@ var init_en3 = __esm({
|
|
|
298381
298351
|
"Would open extensions page in your browser: {{url}} (skipped in test environment)": "Would open extensions page in your browser: {{url}} (skipped in test environment)",
|
|
298382
298352
|
"View available extensions at {{url}}": "View available extensions at {{url}}",
|
|
298383
298353
|
"Opening extensions page in your browser: {{url}}": "Opening extensions page in your browser: {{url}}",
|
|
298384
|
-
"Failed to open browser. Check out the extensions gallery at {{url}}": "Failed to open browser. Check out the extensions gallery at {{url}}"
|
|
298354
|
+
"Failed to open browser. Check out the extensions gallery at {{url}}": "Failed to open browser. Check out the extensions gallery at {{url}}",
|
|
298355
|
+
// ============================================================================
|
|
298356
|
+
// Coding Plan Authentication
|
|
298357
|
+
// ============================================================================
|
|
298358
|
+
"Please enter your API key:": "Please enter your API key:",
|
|
298359
|
+
"API key cannot be empty.": "API key cannot be empty.",
|
|
298360
|
+
"API key is stored in settings.env. You can migrate it to a .env file for better security.": "API key is stored in settings.env. You can migrate it to a .env file for better security.",
|
|
298361
|
+
// ============================================================================
|
|
298362
|
+
// Custom API-KEY Configuration
|
|
298363
|
+
// ============================================================================
|
|
298364
|
+
"For advanced users who want to configure models manually.": "For advanced users who want to configure models manually.",
|
|
298365
|
+
"Please configure your models in settings.json:": "Please configure your models in settings.json:",
|
|
298366
|
+
"Set API key via environment variable (e.g., OPENAI_API_KEY)": "Set API key via environment variable (e.g., OPENAI_API_KEY)",
|
|
298367
|
+
"Add model configuration to modelProviders['openai'] (or other auth types)": "Add model configuration to modelProviders['openai'] (or other auth types)",
|
|
298368
|
+
"Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig": "Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig",
|
|
298369
|
+
"Use /model command to select your preferred model from the configured list": "Use /model command to select your preferred model from the configured list",
|
|
298370
|
+
"Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "Supported auth types: openai, anthropic, gemini, vertex-ai, etc.",
|
|
298371
|
+
// ============================================================================
|
|
298372
|
+
// Auth Dialog - View Titles and Labels
|
|
298373
|
+
// ============================================================================
|
|
298374
|
+
"API-KEY": "API-KEY",
|
|
298375
|
+
"Coding Plan": "Coding Plan",
|
|
298376
|
+
Custom: "Custom",
|
|
298377
|
+
"Select API-KEY configuration mode:": "Select API-KEY configuration mode:",
|
|
298378
|
+
"(Press Escape to go back)": "(Press Escape to go back)",
|
|
298379
|
+
"(Press Enter to submit, Escape to cancel)": "(Press Enter to submit, Escape to cancel)"
|
|
298385
298380
|
};
|
|
298386
298381
|
}
|
|
298387
298382
|
});
|
|
@@ -299063,7 +299058,17 @@ var init_ja = __esm({
|
|
|
299063
299058
|
"\u30D7\u30ED\u30B0\u30E9\u30DE\u30FC\u304C\u30C0\u30FC\u30AF\u30E2\u30FC\u30C9\u306A\u306E\u306F\u30D0\u30B0\u3092\u898B\u305F\u304F\u306A\u3044\u304B\u3089...",
|
|
299064
299059
|
"\u30B3\u30FC\u30C9\u304C\u58CA\u308C\u305F?\u53E9\u3051\u3070\u6CBB\u308B\u3055",
|
|
299065
299060
|
"USB\u306E\u5DEE\u3057\u8FBC\u307F\u306B\u6311\u6226\u4E2D..."
|
|
299066
|
-
]
|
|
299061
|
+
],
|
|
299062
|
+
// ============================================================================
|
|
299063
|
+
// Custom API-KEY Configuration
|
|
299064
|
+
// ============================================================================
|
|
299065
|
+
"For advanced users who want to configure models manually.": "\u30E2\u30C7\u30EB\u3092\u624B\u52D5\u3067\u8A2D\u5B9A\u3057\u305F\u3044\u4E0A\u7D1A\u30E6\u30FC\u30B6\u30FC\u5411\u3051\u3002",
|
|
299066
|
+
"Please configure your models in settings.json:": "settings.json \u3067\u30E2\u30C7\u30EB\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF1A",
|
|
299067
|
+
"Set API key via environment variable (e.g., OPENAI_API_KEY)": "\u74B0\u5883\u5909\u6570\u3092\u4F7F\u7528\u3057\u3066 API \u30AD\u30FC\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F8B\uFF1AOPENAI_API_KEY\uFF09",
|
|
299068
|
+
"Add model configuration to modelProviders['openai'] (or other auth types)": "modelProviders['openai']\uFF08\u307E\u305F\u306F\u4ED6\u306E\u8A8D\u8A3C\u30BF\u30A4\u30D7\uFF09\u306B\u30E2\u30C7\u30EB\u8A2D\u5B9A\u3092\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
299069
|
+
"Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig": "\u5404\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u306B\u306F\uFF1Aid\u3001envKey\uFF08\u5FC5\u9808\uFF09\u3001\u304A\u3088\u3073\u30AA\u30D7\u30B7\u30E7\u30F3\u306E baseUrl\u3001generationConfig \u304C\u5FC5\u8981\u3067\u3059",
|
|
299070
|
+
"Use /model command to select your preferred model from the configured list": "/model \u30B3\u30DE\u30F3\u30C9\u3092\u4F7F\u7528\u3057\u3066\u3001\u8A2D\u5B9A\u6E08\u307F\u30EA\u30B9\u30C8\u304B\u3089\u304A\u597D\u307F\u306E\u30E2\u30C7\u30EB\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
299071
|
+
"Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u8A8D\u8A3C\u30BF\u30A4\u30D7\uFF1Aopenai\u3001anthropic\u3001gemini\u3001vertex-ai \u306A\u3069"
|
|
299067
299072
|
};
|
|
299068
299073
|
}
|
|
299069
299074
|
});
|
|
@@ -300091,7 +300096,17 @@ var init_pt = __esm({
|
|
|
300091
300096
|
"Would open extensions page in your browser: {{url}} (skipped in test environment)": "Abriria a p\xE1gina de extens\xF5es no seu navegador: {{url}} (pulado no ambiente de teste)",
|
|
300092
300097
|
"View available extensions at {{url}}": "Ver extens\xF5es dispon\xEDveis em {{url}}",
|
|
300093
300098
|
"Opening extensions page in your browser: {{url}}": "Abrindo p\xE1gina de extens\xF5es no seu navegador: {{url}}",
|
|
300094
|
-
"Failed to open browser. Check out the extensions gallery at {{url}}": "Falha ao abrir o navegador. Confira a galeria de extens\xF5es em {{url}}"
|
|
300099
|
+
"Failed to open browser. Check out the extensions gallery at {{url}}": "Falha ao abrir o navegador. Confira a galeria de extens\xF5es em {{url}}",
|
|
300100
|
+
// ============================================================================
|
|
300101
|
+
// Custom API-KEY Configuration
|
|
300102
|
+
// ============================================================================
|
|
300103
|
+
"For advanced users who want to configure models manually.": "Para usu\xE1rios avan\xE7ados que desejam configurar modelos manualmente.",
|
|
300104
|
+
"Please configure your models in settings.json:": "Por favor, configure seus modelos em settings.json:",
|
|
300105
|
+
"Set API key via environment variable (e.g., OPENAI_API_KEY)": "Defina a chave de API via vari\xE1vel de ambiente (ex: OPENAI_API_KEY)",
|
|
300106
|
+
"Add model configuration to modelProviders['openai'] (or other auth types)": "Adicione a configura\xE7\xE3o do modelo a modelProviders['openai'] (ou outros tipos de autentica\xE7\xE3o)",
|
|
300107
|
+
"Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig": "Cada provedor precisa de: id, envKey (obrigat\xF3rio), al\xE9m de baseUrl e generationConfig opcionais",
|
|
300108
|
+
"Use /model command to select your preferred model from the configured list": "Use o comando /model para selecionar seu modelo preferido da lista configurada",
|
|
300109
|
+
"Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "Tipos de autentica\xE7\xE3o suportados: openai, anthropic, gemini, vertex-ai, etc."
|
|
300095
300110
|
};
|
|
300096
300111
|
}
|
|
300097
300112
|
});
|
|
@@ -301127,7 +301142,17 @@ var init_ru = __esm({
|
|
|
301127
301142
|
"Opening extensions page in your browser: {{url}}": "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u043C \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0439 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435: {{url}}",
|
|
301128
301143
|
"Failed to open browser. Check out the extensions gallery at {{url}}": "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u041F\u043E\u0441\u0435\u0442\u0438\u0442\u0435 \u0433\u0430\u043B\u0435\u0440\u0435\u044E \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0439 \u043F\u043E \u0430\u0434\u0440\u0435\u0441\u0443 {{url}}",
|
|
301129
301144
|
"You can switch permission mode quickly with Shift+Tab or /approval-mode.": "\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0431\u044B\u0441\u0442\u0440\u043E \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0430\u0442\u044C \u0440\u0435\u0436\u0438\u043C \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0439 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E Shift+Tab \u0438\u043B\u0438 /approval-mode.",
|
|
301130
|
-
"You can switch permission mode quickly with Tab or /approval-mode.": "\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0431\u044B\u0441\u0442\u0440\u043E \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0430\u0442\u044C \u0440\u0435\u0436\u0438\u043C \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0439 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E Tab \u0438\u043B\u0438 /approval-mode."
|
|
301145
|
+
"You can switch permission mode quickly with Tab or /approval-mode.": "\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0431\u044B\u0441\u0442\u0440\u043E \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0430\u0442\u044C \u0440\u0435\u0436\u0438\u043C \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0439 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E Tab \u0438\u043B\u0438 /approval-mode.",
|
|
301146
|
+
// ============================================================================
|
|
301147
|
+
// Custom API-KEY Configuration
|
|
301148
|
+
// ============================================================================
|
|
301149
|
+
"For advanced users who want to configure models manually.": "\u0414\u043B\u044F \u043F\u0440\u043E\u0434\u0432\u0438\u043D\u0443\u0442\u044B\u0445 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u0439, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0445\u043E\u0442\u044F\u0442 \u043D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044C \u043C\u043E\u0434\u0435\u043B\u0438 \u0432\u0440\u0443\u0447\u043D\u0443\u044E.",
|
|
301150
|
+
"Please configure your models in settings.json:": "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u0442\u0435 \u0432\u0430\u0448\u0438 \u043C\u043E\u0434\u0435\u043B\u0438 \u0432 settings.json:",
|
|
301151
|
+
"Set API key via environment variable (e.g., OPENAI_API_KEY)": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u043A\u043B\u044E\u0447 API \u0447\u0435\u0440\u0435\u0437 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u0443\u044E \u043E\u043A\u0440\u0443\u0436\u0435\u043D\u0438\u044F (\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, OPENAI_API_KEY)",
|
|
301152
|
+
"Add model configuration to modelProviders['openai'] (or other auth types)": "\u0414\u043E\u0431\u0430\u0432\u044C\u0442\u0435 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044E \u043C\u043E\u0434\u0435\u043B\u0438 \u0432 modelProviders['openai'] (\u0438\u043B\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0438\u043F\u044B \u0430\u0443\u0442\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438)",
|
|
301153
|
+
"Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig": "\u041A\u0430\u0436\u0434\u043E\u043C\u0443 \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u043D\u0443\u0436\u043D\u044B: id, envKey (\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E), \u0430 \u0442\u0430\u043A\u0436\u0435 \u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 baseUrl, generationConfig",
|
|
301154
|
+
"Use /model command to select your preferred model from the configured list": "\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 /model, \u0447\u0442\u043E\u0431\u044B \u0432\u044B\u0431\u0440\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0438\u0442\u0430\u0435\u043C\u0443\u044E \u043C\u043E\u0434\u0435\u043B\u044C \u0438\u0437 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u043E\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430",
|
|
301155
|
+
"Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043C\u044B\u0435 \u0442\u0438\u043F\u044B \u0430\u0443\u0442\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438: openai, anthropic, gemini, vertex-ai \u0438 \u0434\u0440."
|
|
301131
301156
|
};
|
|
301132
301157
|
}
|
|
301133
301158
|
});
|
|
@@ -302064,7 +302089,32 @@ var init_zh = __esm({
|
|
|
302064
302089
|
"Would open extensions page in your browser: {{url}} (skipped in test environment)": "\u5C06\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u6269\u5C55\u9875\u9762\uFF1A{{url}}\uFF08\u6D4B\u8BD5\u73AF\u5883\u4E2D\u5DF2\u8DF3\u8FC7\uFF09",
|
|
302065
302090
|
"View available extensions at {{url}}": "\u5728 {{url}} \u67E5\u770B\u53EF\u7528\u6269\u5C55",
|
|
302066
302091
|
"Opening extensions page in your browser: {{url}}": "\u6B63\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u6269\u5C55\u9875\u9762\uFF1A{{url}}",
|
|
302067
|
-
"Failed to open browser. Check out the extensions gallery at {{url}}": "\u6253\u5F00\u6D4F\u89C8\u5668\u5931\u8D25\u3002\u8BF7\u8BBF\u95EE\u6269\u5C55\u5E02\u573A\uFF1A{{url}}"
|
|
302092
|
+
"Failed to open browser. Check out the extensions gallery at {{url}}": "\u6253\u5F00\u6D4F\u89C8\u5668\u5931\u8D25\u3002\u8BF7\u8BBF\u95EE\u6269\u5C55\u5E02\u573A\uFF1A{{url}}",
|
|
302093
|
+
// ============================================================================
|
|
302094
|
+
// Coding Plan Authentication
|
|
302095
|
+
// ============================================================================
|
|
302096
|
+
"Please enter your API key:": "\u8BF7\u8F93\u5165\u60A8\u7684 API Key\uFF1A",
|
|
302097
|
+
"API key cannot be empty.": "API Key \u4E0D\u80FD\u4E3A\u7A7A\u3002",
|
|
302098
|
+
"API key is stored in settings.env. You can migrate it to a .env file for better security.": "API Key \u5DF2\u5B58\u50A8\u5728 settings.env \u4E2D\u3002\u60A8\u53EF\u4EE5\u5C06\u5176\u8FC1\u79FB\u5230 .env \u6587\u4EF6\u4EE5\u83B7\u5F97\u66F4\u597D\u7684\u5B89\u5168\u6027\u3002",
|
|
302099
|
+
// ============================================================================
|
|
302100
|
+
// Custom API-KEY Configuration
|
|
302101
|
+
// ============================================================================
|
|
302102
|
+
"For advanced users who want to configure models manually.": "\u9002\u5408\u9700\u8981\u624B\u52A8\u914D\u7F6E\u6A21\u578B\u7684\u9AD8\u7EA7\u7528\u6237\u3002",
|
|
302103
|
+
"Please configure your models in settings.json:": "\u8BF7\u5728 settings.json \u4E2D\u914D\u7F6E\u60A8\u7684\u6A21\u578B\uFF1A",
|
|
302104
|
+
"Set API key via environment variable (e.g., OPENAI_API_KEY)": "\u901A\u8FC7\u73AF\u5883\u53D8\u91CF\u8BBE\u7F6E API Key\uFF08\u4F8B\u5982\uFF1AOPENAI_API_KEY\uFF09",
|
|
302105
|
+
"Add model configuration to modelProviders['openai'] (or other auth types)": "\u5C06\u6A21\u578B\u914D\u7F6E\u6DFB\u52A0\u5230 modelProviders['openai']\uFF08\u6216\u5176\u4ED6\u8BA4\u8BC1\u7C7B\u578B\uFF09",
|
|
302106
|
+
"Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig": "\u6BCF\u4E2A\u63D0\u4F9B\u5546\u9700\u8981\uFF1Aid\u3001envKey\uFF08\u5FC5\u9700\uFF09\uFF0C\u4EE5\u53CA\u53EF\u9009\u7684 baseUrl\u3001generationConfig",
|
|
302107
|
+
"Use /model command to select your preferred model from the configured list": "\u4F7F\u7528 /model \u547D\u4EE4\u4ECE\u914D\u7F6E\u5217\u8868\u4E2D\u9009\u62E9\u60A8\u504F\u597D\u7684\u6A21\u578B",
|
|
302108
|
+
"Supported auth types: openai, anthropic, gemini, vertex-ai, etc.": "\u652F\u6301\u7684\u8BA4\u8BC1\u7C7B\u578B\uFF1Aopenai\u3001anthropic\u3001gemini\u3001vertex-ai \u7B49",
|
|
302109
|
+
// ============================================================================
|
|
302110
|
+
// Auth Dialog - View Titles and Labels
|
|
302111
|
+
// ============================================================================
|
|
302112
|
+
"API-KEY": "API-KEY",
|
|
302113
|
+
"Coding Plan": "Coding Plan",
|
|
302114
|
+
Custom: "\u81EA\u5B9A\u4E49",
|
|
302115
|
+
"Select API-KEY configuration mode:": "\u9009\u62E9 API-KEY \u914D\u7F6E\u6A21\u5F0F\uFF1A",
|
|
302116
|
+
"(Press Escape to go back)": "(\u6309 Escape \u952E\u8FD4\u56DE)",
|
|
302117
|
+
"(Press Enter to submit, Escape to cancel)": "(\u6309 Enter \u63D0\u4EA4\uFF0CEscape \u53D6\u6D88)"
|
|
302068
302118
|
};
|
|
302069
302119
|
}
|
|
302070
302120
|
});
|
|
@@ -337572,7 +337622,7 @@ var require_react_is_development = __commonJS({
|
|
|
337572
337622
|
var ContextProvider = REACT_PROVIDER_TYPE;
|
|
337573
337623
|
var Element2 = REACT_ELEMENT_TYPE;
|
|
337574
337624
|
var ForwardRef = REACT_FORWARD_REF_TYPE;
|
|
337575
|
-
var
|
|
337625
|
+
var Fragment16 = REACT_FRAGMENT_TYPE;
|
|
337576
337626
|
var Lazy = REACT_LAZY_TYPE;
|
|
337577
337627
|
var Memo = REACT_MEMO_TYPE;
|
|
337578
337628
|
var Portal = REACT_PORTAL_TYPE;
|
|
@@ -337644,7 +337694,7 @@ var require_react_is_development = __commonJS({
|
|
|
337644
337694
|
exports2.ContextProvider = ContextProvider;
|
|
337645
337695
|
exports2.Element = Element2;
|
|
337646
337696
|
exports2.ForwardRef = ForwardRef;
|
|
337647
|
-
exports2.Fragment =
|
|
337697
|
+
exports2.Fragment = Fragment16;
|
|
337648
337698
|
exports2.Lazy = Lazy;
|
|
337649
337699
|
exports2.Memo = Memo;
|
|
337650
337700
|
exports2.Portal = Portal;
|
|
@@ -373111,7 +373161,7 @@ __name(getPackageJson, "getPackageJson");
|
|
|
373111
373161
|
// packages/cli/src/utils/version.ts
|
|
373112
373162
|
async function getCliVersion() {
|
|
373113
373163
|
const pkgJson = await getPackageJson();
|
|
373114
|
-
return "0.10.0-preview.
|
|
373164
|
+
return "0.10.0-preview.4";
|
|
373115
373165
|
}
|
|
373116
373166
|
__name(getCliVersion, "getCliVersion");
|
|
373117
373167
|
|
|
@@ -380634,7 +380684,7 @@ var formatDuration = /* @__PURE__ */ __name((milliseconds) => {
|
|
|
380634
380684
|
|
|
380635
380685
|
// packages/cli/src/generated/git-commit.ts
|
|
380636
380686
|
init_esbuild_shims();
|
|
380637
|
-
var GIT_COMMIT_INFO = "
|
|
380687
|
+
var GIT_COMMIT_INFO = "3f4cd8cb";
|
|
380638
380688
|
|
|
380639
380689
|
// packages/cli/src/utils/systemInfo.ts
|
|
380640
380690
|
async function getNpmVersion() {
|
|
@@ -387351,19 +387401,6 @@ async function buildSystemMessage(config2, sessionId, permissionMode, allowedBui
|
|
|
387351
387401
|
return systemMessage;
|
|
387352
387402
|
}
|
|
387353
387403
|
__name(buildSystemMessage, "buildSystemMessage");
|
|
387354
|
-
function isMcpToolProgressData(output) {
|
|
387355
|
-
return typeof output === "object" && output !== null && "type" in output && output.type === "mcp_tool_progress";
|
|
387356
|
-
}
|
|
387357
|
-
__name(isMcpToolProgressData, "isMcpToolProgressData");
|
|
387358
|
-
function createToolProgressHandler(request4, adapter) {
|
|
387359
|
-
const handler = /* @__PURE__ */ __name((_callId, output) => {
|
|
387360
|
-
if (isMcpToolProgressData(output)) {
|
|
387361
|
-
adapter.emitToolProgress(request4, output);
|
|
387362
|
-
}
|
|
387363
|
-
}, "handler");
|
|
387364
|
-
return { handler };
|
|
387365
|
-
}
|
|
387366
|
-
__name(createToolProgressHandler, "createToolProgressHandler");
|
|
387367
387404
|
function createTaskToolProgressHandler(config2, taskToolCallId, adapter) {
|
|
387368
387405
|
const previousTaskStates = /* @__PURE__ */ new Map();
|
|
387369
387406
|
const emittedToolUseIds = /* @__PURE__ */ new Set();
|
|
@@ -388196,16 +388233,6 @@ ${event.value}`, null);
|
|
|
388196
388233
|
};
|
|
388197
388234
|
this.emitMessageImpl(systemMessage);
|
|
388198
388235
|
}
|
|
388199
|
-
/**
|
|
388200
|
-
* Emits a tool progress stream event.
|
|
388201
|
-
* Default implementation is a no-op. StreamJsonOutputAdapter overrides this
|
|
388202
|
-
* to emit stream events when includePartialMessages is enabled.
|
|
388203
|
-
*
|
|
388204
|
-
* @param _request - Tool call request info
|
|
388205
|
-
* @param _progress - Structured MCP progress data
|
|
388206
|
-
*/
|
|
388207
|
-
emitToolProgress(_request, _progress) {
|
|
388208
|
-
}
|
|
388209
388236
|
/**
|
|
388210
388237
|
* Builds a result message from options.
|
|
388211
388238
|
* Helper method used by both emitResult implementations.
|
|
@@ -388585,27 +388612,6 @@ var StreamJsonOutputAdapter = class extends BaseJsonOutputAdapter {
|
|
|
388585
388612
|
);
|
|
388586
388613
|
}
|
|
388587
388614
|
}
|
|
388588
|
-
/**
|
|
388589
|
-
* Emits a tool progress stream event when partial messages are enabled.
|
|
388590
|
-
* This overrides the no-op in BaseJsonOutputAdapter.
|
|
388591
|
-
*/
|
|
388592
|
-
emitToolProgress(request4, progress) {
|
|
388593
|
-
if (!this.includePartialMessages) {
|
|
388594
|
-
return;
|
|
388595
|
-
}
|
|
388596
|
-
const partial2 = {
|
|
388597
|
-
type: "stream_event",
|
|
388598
|
-
uuid: randomUUID8(),
|
|
388599
|
-
session_id: this.getSessionId(),
|
|
388600
|
-
parent_tool_use_id: null,
|
|
388601
|
-
event: {
|
|
388602
|
-
type: "tool_progress",
|
|
388603
|
-
tool_use_id: request4.callId,
|
|
388604
|
-
content: progress
|
|
388605
|
-
}
|
|
388606
|
-
};
|
|
388607
|
-
this.emitMessageImpl(partial2);
|
|
388608
|
-
}
|
|
388609
388615
|
/**
|
|
388610
388616
|
* Emits stream events when partial messages are enabled.
|
|
388611
388617
|
* This is a private method specific to StreamJsonOutputAdapter.
|
|
@@ -389095,21 +389101,24 @@ async function runNonInteractive(config2, settings, input, prompt_id, options2 =
|
|
|
389095
389101
|
const inputFormat = typeof config2.getInputFormat === "function" ? config2.getInputFormat() : InputFormat.TEXT;
|
|
389096
389102
|
const toolCallUpdateCallback = inputFormat === InputFormat.STREAM_JSON && options2.controlService ? options2.controlService.permission.getToolCallUpdateCallback() : void 0;
|
|
389097
389103
|
const isTaskTool = finalRequestInfo.name === "task";
|
|
389098
|
-
const
|
|
389104
|
+
const taskToolProgress = isTaskTool ? createTaskToolProgressHandler(
|
|
389099
389105
|
config2,
|
|
389100
389106
|
finalRequestInfo.callId,
|
|
389101
389107
|
adapter
|
|
389102
|
-
) :
|
|
389108
|
+
) : void 0;
|
|
389109
|
+
const taskToolProgressHandler = taskToolProgress?.handler;
|
|
389103
389110
|
const toolResponse = await executeToolCall(
|
|
389104
389111
|
config2,
|
|
389105
389112
|
finalRequestInfo,
|
|
389106
389113
|
abortController.signal,
|
|
389107
|
-
{
|
|
389108
|
-
|
|
389114
|
+
taskToolProgressHandler || toolCallUpdateCallback ? {
|
|
389115
|
+
...taskToolProgressHandler && {
|
|
389116
|
+
outputUpdateHandler: taskToolProgressHandler
|
|
389117
|
+
},
|
|
389109
389118
|
...toolCallUpdateCallback && {
|
|
389110
389119
|
onToolCallsUpdate: toolCallUpdateCallback
|
|
389111
389120
|
}
|
|
389112
|
-
}
|
|
389121
|
+
} : void 0
|
|
389113
389122
|
);
|
|
389114
389123
|
if (toolResponse.error) {
|
|
389115
389124
|
handleToolError(
|
|
@@ -412929,15 +412938,6 @@ var useResultDisplayRenderer = /* @__PURE__ */ __name((resultDisplay) => import_
|
|
|
412929
412938
|
data: resultDisplay
|
|
412930
412939
|
};
|
|
412931
412940
|
}
|
|
412932
|
-
if (typeof resultDisplay === "object" && resultDisplay !== null && "type" in resultDisplay && resultDisplay.type === "mcp_tool_progress") {
|
|
412933
|
-
const progress = resultDisplay;
|
|
412934
|
-
const msg = progress.message ?? `Progress: ${progress.progress}`;
|
|
412935
|
-
const totalStr = progress.total != null ? `/${progress.total}` : "";
|
|
412936
|
-
return {
|
|
412937
|
-
type: "string",
|
|
412938
|
-
data: `\u23F3 [${progress.progress}${totalStr}] ${msg}`
|
|
412939
|
-
};
|
|
412940
|
-
}
|
|
412941
412941
|
if (typeof resultDisplay === "object" && resultDisplay !== null && "ansiOutput" in resultDisplay) {
|
|
412942
412942
|
return { type: "ansi", data: resultDisplay.ansiOutput };
|
|
412943
412943
|
}
|
|
@@ -415132,9 +415132,10 @@ var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1);
|
|
|
415132
415132
|
var AppHeader = /* @__PURE__ */ __name(({ version: version2 }) => {
|
|
415133
415133
|
const settings = useSettings();
|
|
415134
415134
|
const config2 = useConfig();
|
|
415135
|
+
const uiState = useUIState();
|
|
415135
415136
|
const contentGeneratorConfig = config2.getContentGeneratorConfig();
|
|
415136
415137
|
const authType = contentGeneratorConfig?.authType;
|
|
415137
|
-
const model =
|
|
415138
|
+
const model = uiState.currentModel;
|
|
415138
415139
|
const targetDir = config2.getTargetDir();
|
|
415139
415140
|
const showBanner = !config2.getScreenReader();
|
|
415140
415141
|
const showTips = !(settings.merged.ui?.hideTips || config2.getScreenReader());
|
|
@@ -415209,7 +415210,7 @@ var MainContent = /* @__PURE__ */ __name(() => {
|
|
|
415209
415210
|
],
|
|
415210
415211
|
children: (item) => item
|
|
415211
415212
|
},
|
|
415212
|
-
uiState.historyRemountKey
|
|
415213
|
+
`${uiState.historyRemountKey}-${uiState.currentModel}`
|
|
415213
415214
|
),
|
|
415214
415215
|
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)(OverflowProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(Box_default, { flexDirection: "column", children: [
|
|
415215
415216
|
pendingHistoryItems.map((item, i3) => /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
|
|
@@ -417468,13 +417469,47 @@ __name(QwenOAuthProgress, "QwenOAuthProgress");
|
|
|
417468
417469
|
init_esbuild_shims();
|
|
417469
417470
|
var import_react81 = __toESM(require_react(), 1);
|
|
417470
417471
|
|
|
417472
|
+
// packages/cli/src/ui/components/ApiKeyInput.tsx
|
|
417473
|
+
init_esbuild_shims();
|
|
417474
|
+
var import_react79 = __toESM(require_react(), 1);
|
|
417475
|
+
var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1);
|
|
417476
|
+
function ApiKeyInput({
|
|
417477
|
+
onSubmit,
|
|
417478
|
+
onCancel
|
|
417479
|
+
}) {
|
|
417480
|
+
const [apiKey, setApiKey] = (0, import_react79.useState)("");
|
|
417481
|
+
const [error2, setError] = (0, import_react79.useState)(null);
|
|
417482
|
+
useKeypress(
|
|
417483
|
+
(key) => {
|
|
417484
|
+
if (key.name === "escape") {
|
|
417485
|
+
onCancel();
|
|
417486
|
+
} else if (key.name === "return") {
|
|
417487
|
+
const trimmedKey = apiKey.trim();
|
|
417488
|
+
if (!trimmedKey) {
|
|
417489
|
+
setError(t4("API key cannot be empty."));
|
|
417490
|
+
return;
|
|
417491
|
+
}
|
|
417492
|
+
onSubmit(trimmedKey);
|
|
417493
|
+
}
|
|
417494
|
+
},
|
|
417495
|
+
{ isActive: true }
|
|
417496
|
+
);
|
|
417497
|
+
return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(Box_default, { flexDirection: "column", children: [
|
|
417498
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Box_default, { marginBottom: 1, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Text3, { children: t4("Please enter your API key:") }) }),
|
|
417499
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)(TextInput, { value: apiKey, onChange: setApiKey, placeholder: "sk-..." }),
|
|
417500
|
+
error2 && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Text3, { color: Colors.AccentRed, children: error2 }) }),
|
|
417501
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Text3, { color: Colors.Gray, children: t4("(Press Enter to submit, Escape to cancel)") }) })
|
|
417502
|
+
] });
|
|
417503
|
+
}
|
|
417504
|
+
__name(ApiKeyInput, "ApiKeyInput");
|
|
417505
|
+
|
|
417471
417506
|
// packages/cli/src/ui/contexts/UIActionsContext.tsx
|
|
417472
417507
|
init_esbuild_shims();
|
|
417473
417508
|
var import_react80 = __toESM(require_react(), 1);
|
|
417474
417509
|
|
|
417475
417510
|
// packages/cli/src/ui/components/ModelSwitchDialog.tsx
|
|
417476
417511
|
init_esbuild_shims();
|
|
417477
|
-
var
|
|
417512
|
+
var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1);
|
|
417478
417513
|
var ModelSwitchDialog = /* @__PURE__ */ __name(({
|
|
417479
417514
|
onSelect
|
|
417480
417515
|
}) => {
|
|
@@ -417506,7 +417541,7 @@ var ModelSwitchDialog = /* @__PURE__ */ __name(({
|
|
|
417506
417541
|
const handleSelect = /* @__PURE__ */ __name((outcome) => {
|
|
417507
417542
|
onSelect(outcome);
|
|
417508
417543
|
}, "handleSelect");
|
|
417509
|
-
return /* @__PURE__ */ (0,
|
|
417544
|
+
return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
|
|
417510
417545
|
Box_default,
|
|
417511
417546
|
{
|
|
417512
417547
|
flexDirection: "column",
|
|
@@ -417516,12 +417551,12 @@ var ModelSwitchDialog = /* @__PURE__ */ __name(({
|
|
|
417516
417551
|
width: "100%",
|
|
417517
417552
|
marginLeft: 1,
|
|
417518
417553
|
children: [
|
|
417519
|
-
/* @__PURE__ */ (0,
|
|
417520
|
-
/* @__PURE__ */ (0,
|
|
417521
|
-
/* @__PURE__ */ (0,
|
|
417522
|
-
/* @__PURE__ */ (0,
|
|
417554
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Box_default, { flexDirection: "column", marginBottom: 1, children: [
|
|
417555
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Text3, { bold: true, children: "Vision Model Switch Required" }),
|
|
417556
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Text3, { children: "Your message contains an image, but the current model doesn't support vision." }),
|
|
417557
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Text3, { children: "How would you like to proceed?" })
|
|
417523
417558
|
] }),
|
|
417524
|
-
/* @__PURE__ */ (0,
|
|
417559
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { marginBottom: 1, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
|
|
417525
417560
|
RadioButtonSelect,
|
|
417526
417561
|
{
|
|
417527
417562
|
items: options2,
|
|
@@ -417530,209 +417565,12 @@ var ModelSwitchDialog = /* @__PURE__ */ __name(({
|
|
|
417530
417565
|
isFocused: true
|
|
417531
417566
|
}
|
|
417532
417567
|
) }),
|
|
417533
|
-
/* @__PURE__ */ (0,
|
|
417568
|
+
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Text3, { color: Colors.Gray, children: "Press Enter to select, Esc to cancel" }) })
|
|
417534
417569
|
]
|
|
417535
417570
|
}
|
|
417536
417571
|
);
|
|
417537
417572
|
}, "ModelSwitchDialog");
|
|
417538
417573
|
|
|
417539
|
-
// packages/cli/src/ui/components/OpenAIKeyPrompt.tsx
|
|
417540
|
-
init_esbuild_shims();
|
|
417541
|
-
var import_react79 = __toESM(require_react(), 1);
|
|
417542
|
-
init_zod();
|
|
417543
|
-
var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1);
|
|
417544
|
-
var credentialSchema = external_exports.object({
|
|
417545
|
-
apiKey: external_exports.string().min(1, "API key is required"),
|
|
417546
|
-
baseUrl: external_exports.union([external_exports.string().url("Base URL must be a valid URL"), external_exports.literal("")]).optional(),
|
|
417547
|
-
model: external_exports.string().min(1, "Model must be a non-empty string").optional()
|
|
417548
|
-
});
|
|
417549
|
-
function OpenAIKeyPrompt({
|
|
417550
|
-
onSubmit,
|
|
417551
|
-
onCancel,
|
|
417552
|
-
defaultApiKey,
|
|
417553
|
-
defaultBaseUrl,
|
|
417554
|
-
defaultModel
|
|
417555
|
-
}) {
|
|
417556
|
-
const [apiKey, setApiKey] = (0, import_react79.useState)(defaultApiKey || "");
|
|
417557
|
-
const [baseUrl, setBaseUrl] = (0, import_react79.useState)(defaultBaseUrl || "");
|
|
417558
|
-
const [model, setModel] = (0, import_react79.useState)(defaultModel || "");
|
|
417559
|
-
const [currentField, setCurrentField] = (0, import_react79.useState)("apiKey");
|
|
417560
|
-
const [validationError, setValidationError] = (0, import_react79.useState)(null);
|
|
417561
|
-
const validateAndSubmit = /* @__PURE__ */ __name(() => {
|
|
417562
|
-
setValidationError(null);
|
|
417563
|
-
try {
|
|
417564
|
-
const validated = credentialSchema.parse({
|
|
417565
|
-
apiKey: apiKey.trim(),
|
|
417566
|
-
baseUrl: baseUrl.trim() || void 0,
|
|
417567
|
-
model: model.trim() || void 0
|
|
417568
|
-
});
|
|
417569
|
-
onSubmit(
|
|
417570
|
-
validated.apiKey,
|
|
417571
|
-
validated.baseUrl === "" ? "" : validated.baseUrl || "",
|
|
417572
|
-
validated.model || ""
|
|
417573
|
-
);
|
|
417574
|
-
} catch (error2) {
|
|
417575
|
-
if (error2 instanceof external_exports.ZodError) {
|
|
417576
|
-
const errorMessage = error2.errors.map((e4) => `${e4.path.join(".")}: ${e4.message}`).join(", ");
|
|
417577
|
-
setValidationError(
|
|
417578
|
-
t4("Invalid credentials: {{errorMessage}}", { errorMessage })
|
|
417579
|
-
);
|
|
417580
|
-
} else {
|
|
417581
|
-
setValidationError(t4("Failed to validate credentials"));
|
|
417582
|
-
}
|
|
417583
|
-
}
|
|
417584
|
-
}, "validateAndSubmit");
|
|
417585
|
-
useKeypress(
|
|
417586
|
-
(key) => {
|
|
417587
|
-
if (key.name === "escape") {
|
|
417588
|
-
onCancel();
|
|
417589
|
-
return;
|
|
417590
|
-
}
|
|
417591
|
-
if (key.name === "return") {
|
|
417592
|
-
if (currentField === "apiKey") {
|
|
417593
|
-
setCurrentField("baseUrl");
|
|
417594
|
-
return;
|
|
417595
|
-
} else if (currentField === "baseUrl") {
|
|
417596
|
-
setCurrentField("model");
|
|
417597
|
-
return;
|
|
417598
|
-
} else if (currentField === "model") {
|
|
417599
|
-
if (apiKey.trim()) {
|
|
417600
|
-
validateAndSubmit();
|
|
417601
|
-
} else {
|
|
417602
|
-
setCurrentField("apiKey");
|
|
417603
|
-
}
|
|
417604
|
-
}
|
|
417605
|
-
return;
|
|
417606
|
-
}
|
|
417607
|
-
if (key.name === "tab") {
|
|
417608
|
-
if (currentField === "apiKey") {
|
|
417609
|
-
setCurrentField("baseUrl");
|
|
417610
|
-
} else if (currentField === "baseUrl") {
|
|
417611
|
-
setCurrentField("model");
|
|
417612
|
-
} else if (currentField === "model") {
|
|
417613
|
-
setCurrentField("apiKey");
|
|
417614
|
-
}
|
|
417615
|
-
return;
|
|
417616
|
-
}
|
|
417617
|
-
if (key.name === "up") {
|
|
417618
|
-
if (currentField === "baseUrl") {
|
|
417619
|
-
setCurrentField("apiKey");
|
|
417620
|
-
} else if (currentField === "model") {
|
|
417621
|
-
setCurrentField("baseUrl");
|
|
417622
|
-
}
|
|
417623
|
-
return;
|
|
417624
|
-
}
|
|
417625
|
-
if (key.name === "down") {
|
|
417626
|
-
if (currentField === "apiKey") {
|
|
417627
|
-
setCurrentField("baseUrl");
|
|
417628
|
-
} else if (currentField === "baseUrl") {
|
|
417629
|
-
setCurrentField("model");
|
|
417630
|
-
}
|
|
417631
|
-
return;
|
|
417632
|
-
}
|
|
417633
|
-
if (key.name === "backspace" || key.name === "delete") {
|
|
417634
|
-
if (currentField === "apiKey") {
|
|
417635
|
-
setApiKey((prev) => prev.slice(0, -1));
|
|
417636
|
-
} else if (currentField === "baseUrl") {
|
|
417637
|
-
setBaseUrl((prev) => prev.slice(0, -1));
|
|
417638
|
-
} else if (currentField === "model") {
|
|
417639
|
-
setModel((prev) => prev.slice(0, -1));
|
|
417640
|
-
}
|
|
417641
|
-
return;
|
|
417642
|
-
}
|
|
417643
|
-
if (key.paste && key.sequence) {
|
|
417644
|
-
let cleanInput = key.sequence.replace(/\u001b\[[0-9;]*[a-zA-Z]/g, "").replace(/\[200~/g, "").replace(/\[201~/g, "").replace(/^\[|~$/g, "");
|
|
417645
|
-
cleanInput = cleanInput.split("").filter((ch) => ch.charCodeAt(0) >= 32).join("");
|
|
417646
|
-
if (cleanInput.length > 0) {
|
|
417647
|
-
if (currentField === "apiKey") {
|
|
417648
|
-
setApiKey((prev) => prev + cleanInput);
|
|
417649
|
-
} else if (currentField === "baseUrl") {
|
|
417650
|
-
setBaseUrl((prev) => prev + cleanInput);
|
|
417651
|
-
} else if (currentField === "model") {
|
|
417652
|
-
setModel((prev) => prev + cleanInput);
|
|
417653
|
-
}
|
|
417654
|
-
}
|
|
417655
|
-
return;
|
|
417656
|
-
}
|
|
417657
|
-
if (key.sequence && !key.ctrl && !key.meta) {
|
|
417658
|
-
const cleanInput = key.sequence.split("").filter((ch) => ch.charCodeAt(0) >= 32).join("");
|
|
417659
|
-
if (cleanInput.length > 0) {
|
|
417660
|
-
if (currentField === "apiKey") {
|
|
417661
|
-
setApiKey((prev) => prev + cleanInput);
|
|
417662
|
-
} else if (currentField === "baseUrl") {
|
|
417663
|
-
setBaseUrl((prev) => prev + cleanInput);
|
|
417664
|
-
} else if (currentField === "model") {
|
|
417665
|
-
setModel((prev) => prev + cleanInput);
|
|
417666
|
-
}
|
|
417667
|
-
}
|
|
417668
|
-
}
|
|
417669
|
-
},
|
|
417670
|
-
{ isActive: true }
|
|
417671
|
-
);
|
|
417672
|
-
return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
|
|
417673
|
-
Box_default,
|
|
417674
|
-
{
|
|
417675
|
-
borderStyle: "round",
|
|
417676
|
-
borderColor: Colors.AccentBlue,
|
|
417677
|
-
flexDirection: "column",
|
|
417678
|
-
padding: 1,
|
|
417679
|
-
width: "100%",
|
|
417680
|
-
children: [
|
|
417681
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Text3, { bold: true, color: Colors.AccentBlue, children: t4("OpenAI Configuration Required") }),
|
|
417682
|
-
validationError && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Text3, { color: Colors.AccentRed, children: validationError }) }),
|
|
417683
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Text3, { children: [
|
|
417684
|
-
t4(
|
|
417685
|
-
"Please enter your OpenAI configuration. You can get an API key from"
|
|
417686
|
-
),
|
|
417687
|
-
" ",
|
|
417688
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Text3, { color: Colors.AccentBlue, children: "https://bailian.console.aliyun.com/?tab=model#/api-key" })
|
|
417689
|
-
] }) }),
|
|
417690
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Box_default, { marginTop: 1, flexDirection: "row", children: [
|
|
417691
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { width: 12, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
|
|
417692
|
-
Text3,
|
|
417693
|
-
{
|
|
417694
|
-
color: currentField === "apiKey" ? Colors.AccentBlue : Colors.Gray,
|
|
417695
|
-
children: t4("API Key:")
|
|
417696
|
-
}
|
|
417697
|
-
) }),
|
|
417698
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Text3, { children: [
|
|
417699
|
-
currentField === "apiKey" ? "> " : " ",
|
|
417700
|
-
apiKey || " "
|
|
417701
|
-
] }) })
|
|
417702
|
-
] }),
|
|
417703
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Box_default, { marginTop: 1, flexDirection: "row", children: [
|
|
417704
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { width: 12, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
|
|
417705
|
-
Text3,
|
|
417706
|
-
{
|
|
417707
|
-
color: currentField === "baseUrl" ? Colors.AccentBlue : Colors.Gray,
|
|
417708
|
-
children: t4("Base URL:")
|
|
417709
|
-
}
|
|
417710
|
-
) }),
|
|
417711
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Text3, { children: [
|
|
417712
|
-
currentField === "baseUrl" ? "> " : " ",
|
|
417713
|
-
baseUrl
|
|
417714
|
-
] }) })
|
|
417715
|
-
] }),
|
|
417716
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Box_default, { marginTop: 1, flexDirection: "row", children: [
|
|
417717
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { width: 12, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
|
|
417718
|
-
Text3,
|
|
417719
|
-
{
|
|
417720
|
-
color: currentField === "model" ? Colors.AccentBlue : Colors.Gray,
|
|
417721
|
-
children: t4("Model:")
|
|
417722
|
-
}
|
|
417723
|
-
) }),
|
|
417724
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { flexGrow: 1, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Text3, { children: [
|
|
417725
|
-
currentField === "model" ? "> " : " ",
|
|
417726
|
-
model
|
|
417727
|
-
] }) })
|
|
417728
|
-
] }),
|
|
417729
|
-
/* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Text3, { color: Colors.Gray, children: t4("Press Enter to continue, Tab/\u2191\u2193 to navigate, Esc to cancel") }) })
|
|
417730
|
-
]
|
|
417731
|
-
}
|
|
417732
|
-
);
|
|
417733
|
-
}
|
|
417734
|
-
__name(OpenAIKeyPrompt, "OpenAIKeyPrompt");
|
|
417735
|
-
|
|
417736
417574
|
// packages/cli/src/ui/contexts/UIActionsContext.tsx
|
|
417737
417575
|
var UIActionsContext = (0, import_react80.createContext)(null);
|
|
417738
417576
|
var useUIActions = /* @__PURE__ */ __name(() => {
|
|
@@ -417754,25 +417592,39 @@ function parseDefaultAuthType(defaultAuthType) {
|
|
|
417754
417592
|
__name(parseDefaultAuthType, "parseDefaultAuthType");
|
|
417755
417593
|
function AuthDialog() {
|
|
417756
417594
|
const { pendingAuthType, authError } = useUIState();
|
|
417757
|
-
const { handleAuthSelect: onAuthSelect } = useUIActions();
|
|
417595
|
+
const { handleAuthSelect: onAuthSelect, handleCodingPlanSubmit } = useUIActions();
|
|
417758
417596
|
const config2 = useConfig();
|
|
417759
417597
|
const [errorMessage, setErrorMessage] = (0, import_react81.useState)(null);
|
|
417760
417598
|
const [selectedIndex, setSelectedIndex] = (0, import_react81.useState)(null);
|
|
417761
|
-
const
|
|
417599
|
+
const [viewLevel, setViewLevel] = (0, import_react81.useState)("main");
|
|
417600
|
+
const [apiKeySubModeIndex, setApiKeySubModeIndex] = (0, import_react81.useState)(0);
|
|
417601
|
+
const mainItems = [
|
|
417762
417602
|
{
|
|
417763
417603
|
key: AuthType2.QWEN_OAUTH,
|
|
417764
417604
|
label: t4("Qwen OAuth"),
|
|
417765
417605
|
value: AuthType2.QWEN_OAUTH
|
|
417766
417606
|
},
|
|
417767
417607
|
{
|
|
417768
|
-
key:
|
|
417769
|
-
label: t4("
|
|
417770
|
-
value:
|
|
417608
|
+
key: "API-KEY",
|
|
417609
|
+
label: t4("API-KEY"),
|
|
417610
|
+
value: "API-KEY"
|
|
417611
|
+
}
|
|
417612
|
+
];
|
|
417613
|
+
const apiKeySubItems = [
|
|
417614
|
+
{
|
|
417615
|
+
key: "coding-plan",
|
|
417616
|
+
label: t4("Coding Plan"),
|
|
417617
|
+
value: "coding-plan"
|
|
417618
|
+
},
|
|
417619
|
+
{
|
|
417620
|
+
key: "custom",
|
|
417621
|
+
label: t4("Custom"),
|
|
417622
|
+
value: "custom"
|
|
417771
417623
|
}
|
|
417772
417624
|
];
|
|
417773
417625
|
const initialAuthIndex = Math.max(
|
|
417774
417626
|
0,
|
|
417775
|
-
|
|
417627
|
+
mainItems.findIndex((item) => {
|
|
417776
417628
|
if (pendingAuthType) {
|
|
417777
417629
|
return item.value === pendingAuthType;
|
|
417778
417630
|
}
|
|
@@ -417790,18 +417642,50 @@ function AuthDialog() {
|
|
|
417790
417642
|
})
|
|
417791
417643
|
);
|
|
417792
417644
|
const hasApiKey = Boolean(config2.getContentGeneratorConfig()?.apiKey);
|
|
417793
|
-
const currentSelectedAuthType = selectedIndex !== null ?
|
|
417794
|
-
const
|
|
417645
|
+
const currentSelectedAuthType = selectedIndex !== null ? mainItems[selectedIndex]?.value : mainItems[initialAuthIndex]?.value;
|
|
417646
|
+
const handleMainSelect = /* @__PURE__ */ __name(async (value) => {
|
|
417795
417647
|
setErrorMessage(null);
|
|
417796
|
-
|
|
417797
|
-
|
|
417798
|
-
|
|
417799
|
-
|
|
417800
|
-
|
|
417801
|
-
}, "
|
|
417648
|
+
if (value === "API-KEY") {
|
|
417649
|
+
setViewLevel("api-key-sub");
|
|
417650
|
+
return;
|
|
417651
|
+
}
|
|
417652
|
+
await onAuthSelect(value);
|
|
417653
|
+
}, "handleMainSelect");
|
|
417654
|
+
const handleApiKeySubSelect = /* @__PURE__ */ __name(async (subMode) => {
|
|
417655
|
+
setErrorMessage(null);
|
|
417656
|
+
if (subMode === "coding-plan") {
|
|
417657
|
+
setViewLevel("api-key-input");
|
|
417658
|
+
} else {
|
|
417659
|
+
setViewLevel("custom-info");
|
|
417660
|
+
}
|
|
417661
|
+
}, "handleApiKeySubSelect");
|
|
417662
|
+
const handleApiKeyInputSubmit = /* @__PURE__ */ __name(async (apiKey) => {
|
|
417663
|
+
setErrorMessage(null);
|
|
417664
|
+
if (!apiKey.trim()) {
|
|
417665
|
+
setErrorMessage(t4("API key cannot be empty."));
|
|
417666
|
+
return;
|
|
417667
|
+
}
|
|
417668
|
+
await handleCodingPlanSubmit(apiKey);
|
|
417669
|
+
}, "handleApiKeyInputSubmit");
|
|
417670
|
+
const handleGoBack = /* @__PURE__ */ __name(() => {
|
|
417671
|
+
setErrorMessage(null);
|
|
417672
|
+
if (viewLevel === "api-key-sub") {
|
|
417673
|
+
setViewLevel("main");
|
|
417674
|
+
} else if (viewLevel === "api-key-input" || viewLevel === "custom-info") {
|
|
417675
|
+
setViewLevel("api-key-sub");
|
|
417676
|
+
}
|
|
417677
|
+
}, "handleGoBack");
|
|
417802
417678
|
useKeypress(
|
|
417803
417679
|
(key) => {
|
|
417804
417680
|
if (key.name === "escape") {
|
|
417681
|
+
if (viewLevel === "api-key-sub") {
|
|
417682
|
+
handleGoBack();
|
|
417683
|
+
return;
|
|
417684
|
+
}
|
|
417685
|
+
if (viewLevel === "api-key-input" || viewLevel === "custom-info") {
|
|
417686
|
+
handleGoBack();
|
|
417687
|
+
return;
|
|
417688
|
+
}
|
|
417805
417689
|
if (errorMessage) {
|
|
417806
417690
|
return;
|
|
417807
417691
|
}
|
|
@@ -417818,6 +417702,88 @@ function AuthDialog() {
|
|
|
417818
417702
|
},
|
|
417819
417703
|
{ isActive: true }
|
|
417820
417704
|
);
|
|
417705
|
+
const renderMainView = /* @__PURE__ */ __name(() => /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
|
|
417706
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { children: t4("How would you like to authenticate for this project?") }) }),
|
|
417707
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
417708
|
+
RadioButtonSelect,
|
|
417709
|
+
{
|
|
417710
|
+
items: mainItems,
|
|
417711
|
+
initialIndex: initialAuthIndex,
|
|
417712
|
+
onSelect: handleMainSelect,
|
|
417713
|
+
onHighlight: (value) => {
|
|
417714
|
+
const index = mainItems.findIndex((item) => item.value === value);
|
|
417715
|
+
setSelectedIndex(index);
|
|
417716
|
+
}
|
|
417717
|
+
}
|
|
417718
|
+
) })
|
|
417719
|
+
] }), "renderMainView");
|
|
417720
|
+
const renderApiKeySubView = /* @__PURE__ */ __name(() => /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
|
|
417721
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { children: t4("Select API-KEY configuration mode:") }) }),
|
|
417722
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
417723
|
+
RadioButtonSelect,
|
|
417724
|
+
{
|
|
417725
|
+
items: apiKeySubItems,
|
|
417726
|
+
initialIndex: apiKeySubModeIndex,
|
|
417727
|
+
onSelect: handleApiKeySubSelect,
|
|
417728
|
+
onHighlight: (value) => {
|
|
417729
|
+
const index = apiKeySubItems.findIndex(
|
|
417730
|
+
(item) => item.value === value
|
|
417731
|
+
);
|
|
417732
|
+
setApiKeySubModeIndex(index);
|
|
417733
|
+
}
|
|
417734
|
+
}
|
|
417735
|
+
) }),
|
|
417736
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.Gray, children: t4("(Press Escape to go back)") }) })
|
|
417737
|
+
] }), "renderApiKeySubView");
|
|
417738
|
+
const renderApiKeyInputView = /* @__PURE__ */ __name(() => /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ApiKeyInput, { onSubmit: handleApiKeyInputSubmit, onCancel: handleGoBack }) }), "renderApiKeyInputView");
|
|
417739
|
+
const renderCustomInfoView = /* @__PURE__ */ __name(() => /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
|
|
417740
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { bold: true, children: t4("Custom API-KEY Configuration") }) }),
|
|
417741
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { children: t4("For advanced users who want to configure models manually.") }) }),
|
|
417742
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { children: t4("Please configure your models in settings.json:") }) }),
|
|
417743
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, paddingLeft: 2, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Text3, { color: Colors.AccentYellow, children: [
|
|
417744
|
+
"1. ",
|
|
417745
|
+
t4("Set API key via environment variable (e.g., OPENAI_API_KEY)")
|
|
417746
|
+
] }) }),
|
|
417747
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 0, paddingLeft: 2, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Text3, { color: Colors.AccentYellow, children: [
|
|
417748
|
+
"2.",
|
|
417749
|
+
" ",
|
|
417750
|
+
t4(
|
|
417751
|
+
"Add model configuration to modelProviders['openai'] (or other auth types)"
|
|
417752
|
+
)
|
|
417753
|
+
] }) }),
|
|
417754
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 0, paddingLeft: 2, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Text3, { color: Colors.AccentYellow, children: [
|
|
417755
|
+
"3.",
|
|
417756
|
+
" ",
|
|
417757
|
+
t4(
|
|
417758
|
+
"Each provider needs: id, envKey (required), plus optional baseUrl, generationConfig"
|
|
417759
|
+
)
|
|
417760
|
+
] }) }),
|
|
417761
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 0, paddingLeft: 2, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Text3, { color: Colors.AccentYellow, children: [
|
|
417762
|
+
"4.",
|
|
417763
|
+
" ",
|
|
417764
|
+
t4(
|
|
417765
|
+
"Use /model command to select your preferred model from the configured list"
|
|
417766
|
+
)
|
|
417767
|
+
] }) }),
|
|
417768
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.Gray, children: t4(
|
|
417769
|
+
"Supported auth types: openai, anthropic, gemini, vertex-ai, etc."
|
|
417770
|
+
) }) }),
|
|
417771
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.Gray, children: t4("(Press Escape to go back)") }) })
|
|
417772
|
+
] }), "renderCustomInfoView");
|
|
417773
|
+
const getViewTitle = /* @__PURE__ */ __name(() => {
|
|
417774
|
+
switch (viewLevel) {
|
|
417775
|
+
case "main":
|
|
417776
|
+
return t4("Get started");
|
|
417777
|
+
case "api-key-sub":
|
|
417778
|
+
return t4("API-KEY Configuration");
|
|
417779
|
+
case "api-key-input":
|
|
417780
|
+
return t4("Coding Plan Setup");
|
|
417781
|
+
case "custom-info":
|
|
417782
|
+
return t4("Custom Configuration");
|
|
417783
|
+
default:
|
|
417784
|
+
return t4("Get started");
|
|
417785
|
+
}
|
|
417786
|
+
}, "getViewTitle");
|
|
417821
417787
|
return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
|
|
417822
417788
|
Box_default,
|
|
417823
417789
|
{
|
|
@@ -417827,24 +417793,20 @@ function AuthDialog() {
|
|
|
417827
417793
|
padding: 1,
|
|
417828
417794
|
width: "100%",
|
|
417829
417795
|
children: [
|
|
417830
|
-
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { bold: true, children:
|
|
417831
|
-
|
|
417832
|
-
|
|
417833
|
-
|
|
417834
|
-
|
|
417835
|
-
items,
|
|
417836
|
-
initialIndex: initialAuthIndex,
|
|
417837
|
-
onSelect: handleAuthSelect,
|
|
417838
|
-
onHighlight: handleHighlight
|
|
417839
|
-
}
|
|
417840
|
-
) }),
|
|
417796
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { bold: true, children: getViewTitle() }),
|
|
417797
|
+
viewLevel === "main" && renderMainView(),
|
|
417798
|
+
viewLevel === "api-key-sub" && renderApiKeySubView(),
|
|
417799
|
+
viewLevel === "api-key-input" && renderApiKeyInputView(),
|
|
417800
|
+
viewLevel === "custom-info" && renderCustomInfoView(),
|
|
417841
417801
|
(authError || errorMessage) && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.AccentRed, children: authError || errorMessage }) }),
|
|
417842
|
-
|
|
417843
|
-
|
|
417844
|
-
|
|
417845
|
-
|
|
417846
|
-
|
|
417847
|
-
|
|
417802
|
+
viewLevel === "main" && /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
|
|
417803
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.AccentPurple, children: t4("(Use Enter to Set Auth)") }) }),
|
|
417804
|
+
hasApiKey && currentSelectedAuthType === AuthType2.QWEN_OAUTH && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.Gray, children: t4(
|
|
417805
|
+
"Note: Your existing API key in settings.json will not be cleared when using Qwen OAuth. You can switch back to OpenAI authentication later if needed."
|
|
417806
|
+
) }) }),
|
|
417807
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { children: t4("Terms of Services and Privacy Notice for Qwen Code") }) }),
|
|
417808
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Box_default, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text3, { color: Colors.AccentBlue, children: "https://github.com/QwenLM/Qwen3-Coder/blob/main/README.md" }) })
|
|
417809
|
+
] })
|
|
417848
417810
|
]
|
|
417849
417811
|
}
|
|
417850
417812
|
);
|
|
@@ -419254,15 +419216,6 @@ var DialogManager = /* @__PURE__ */ __name(({
|
|
|
419254
419216
|
const uiState = useUIState();
|
|
419255
419217
|
const uiActions = useUIActions();
|
|
419256
419218
|
const { constrainHeight, terminalHeight, staticExtraHeight, mainAreaWidth } = uiState;
|
|
419257
|
-
const getDefaultOpenAIConfig = /* @__PURE__ */ __name(() => {
|
|
419258
|
-
const fromSettings = settings.merged.security?.auth;
|
|
419259
|
-
const modelSettings = settings.merged.model;
|
|
419260
|
-
return {
|
|
419261
|
-
apiKey: fromSettings?.apiKey || process35.env["OPENAI_API_KEY"] || "",
|
|
419262
|
-
baseUrl: fromSettings?.baseUrl || process35.env["OPENAI_BASE_URL"] || "",
|
|
419263
|
-
model: modelSettings?.name || process35.env["OPENAI_MODEL"] || ""
|
|
419264
|
-
};
|
|
419265
|
-
}, "getDefaultOpenAIConfig");
|
|
419266
419219
|
if (uiState.showWelcomeBackDialog && uiState.welcomeBackInfo?.hasHistory) {
|
|
419267
419220
|
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
419268
419221
|
WelcomeBackDialog,
|
|
@@ -419436,28 +419389,6 @@ var DialogManager = /* @__PURE__ */ __name(({
|
|
|
419436
419389
|
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Box_default, { flexDirection: "column", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(AuthDialog, {}) });
|
|
419437
419390
|
}
|
|
419438
419391
|
if (uiState.isAuthenticating) {
|
|
419439
|
-
if (uiState.pendingAuthType === AuthType2.USE_OPENAI) {
|
|
419440
|
-
const defaults3 = getDefaultOpenAIConfig();
|
|
419441
|
-
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
419442
|
-
OpenAIKeyPrompt,
|
|
419443
|
-
{
|
|
419444
|
-
onSubmit: (apiKey, baseUrl, model) => {
|
|
419445
|
-
uiActions.handleAuthSelect(AuthType2.USE_OPENAI, {
|
|
419446
|
-
apiKey,
|
|
419447
|
-
baseUrl,
|
|
419448
|
-
model
|
|
419449
|
-
});
|
|
419450
|
-
},
|
|
419451
|
-
onCancel: () => {
|
|
419452
|
-
uiActions.cancelAuthentication();
|
|
419453
|
-
uiActions.setAuthState("updating" /* Updating */);
|
|
419454
|
-
},
|
|
419455
|
-
defaultApiKey: defaults3.apiKey,
|
|
419456
|
-
defaultBaseUrl: defaults3.baseUrl,
|
|
419457
|
-
defaultModel: defaults3.model
|
|
419458
|
-
}
|
|
419459
|
-
);
|
|
419460
|
-
}
|
|
419461
419392
|
if (uiState.pendingAuthType === AuthType2.QWEN_OAUTH) {
|
|
419462
419393
|
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
419463
419394
|
QwenOAuthProgress,
|
|
@@ -422844,6 +422775,31 @@ var useQwenAuth = /* @__PURE__ */ __name((pendingAuthType, isAuthenticating) =>
|
|
|
422844
422775
|
};
|
|
422845
422776
|
}, "useQwenAuth");
|
|
422846
422777
|
|
|
422778
|
+
// packages/cli/src/constants/codingPlanTemplates.ts
|
|
422779
|
+
init_esbuild_shims();
|
|
422780
|
+
var CODING_PLAN_ENV_KEY = "BAILIAN_CODING_PLAN_API_KEY";
|
|
422781
|
+
var CODING_PLAN_TEMPLATE = [
|
|
422782
|
+
{
|
|
422783
|
+
id: "qwen3-coder-plus",
|
|
422784
|
+
name: "qwen3-coder-plur",
|
|
422785
|
+
baseUrl: "https://coding.dashscope.aliyuncs.com/v1",
|
|
422786
|
+
description: "Qwen3 Coder Plus model from Bailian Coding Plan",
|
|
422787
|
+
envKey: CODING_PLAN_ENV_KEY
|
|
422788
|
+
},
|
|
422789
|
+
{
|
|
422790
|
+
id: "qwen3-max-2026-01-23",
|
|
422791
|
+
name: "qwen3-max-2026-01-23",
|
|
422792
|
+
description: "Qwen3 Max Thinking model from Bailian Coding Plan",
|
|
422793
|
+
baseUrl: "https://coding.dashscope.aliyuncs.com/v1",
|
|
422794
|
+
envKey: CODING_PLAN_ENV_KEY,
|
|
422795
|
+
generationConfig: {
|
|
422796
|
+
extra_body: {
|
|
422797
|
+
enable_thinking: true
|
|
422798
|
+
}
|
|
422799
|
+
}
|
|
422800
|
+
}
|
|
422801
|
+
];
|
|
422802
|
+
|
|
422847
422803
|
// packages/cli/src/ui/auth/useAuth.ts
|
|
422848
422804
|
var useAuthCommand = /* @__PURE__ */ __name((settings, config2, addItem, onAuthChange) => {
|
|
422849
422805
|
const unAuthenticated = config2.getAuthType() === void 0;
|
|
@@ -423036,6 +422992,74 @@ var useAuthCommand = /* @__PURE__ */ __name((settings, config2, addItem, onAuthC
|
|
|
423036
422992
|
setIsAuthDialogOpen(true);
|
|
423037
422993
|
setAuthError(null);
|
|
423038
422994
|
}, [isAuthenticating, pendingAuthType, cancelQwenAuth, config2]);
|
|
422995
|
+
const handleCodingPlanSubmit = (0, import_react103.useCallback)(
|
|
422996
|
+
async (apiKey) => {
|
|
422997
|
+
try {
|
|
422998
|
+
setIsAuthenticating(true);
|
|
422999
|
+
setAuthError(null);
|
|
423000
|
+
const envKeyName = CODING_PLAN_ENV_KEY;
|
|
423001
|
+
const persistScope = getPersistScopeForModelSelection(settings);
|
|
423002
|
+
settings.setValue(persistScope, `env.${envKeyName}`, apiKey);
|
|
423003
|
+
process.env[envKeyName] = apiKey;
|
|
423004
|
+
const newConfigs = CODING_PLAN_TEMPLATE.map(
|
|
423005
|
+
(templateConfig) => ({
|
|
423006
|
+
...templateConfig,
|
|
423007
|
+
envKey: envKeyName
|
|
423008
|
+
})
|
|
423009
|
+
);
|
|
423010
|
+
const existingConfigs = settings.merged.modelProviders?.[AuthType2.USE_OPENAI] || [];
|
|
423011
|
+
const isDuplicate = /* @__PURE__ */ __name((config3) => existingConfigs.some(
|
|
423012
|
+
(existing) => existing.id === config3.id && existing.baseUrl === config3.baseUrl && existing.envKey === config3.envKey
|
|
423013
|
+
), "isDuplicate");
|
|
423014
|
+
const uniqueNewConfigs = newConfigs.filter(
|
|
423015
|
+
(config3) => !isDuplicate(config3)
|
|
423016
|
+
);
|
|
423017
|
+
const updatedConfigs = [...uniqueNewConfigs, ...existingConfigs];
|
|
423018
|
+
settings.setValue(
|
|
423019
|
+
persistScope,
|
|
423020
|
+
`modelProviders.${AuthType2.USE_OPENAI}`,
|
|
423021
|
+
updatedConfigs
|
|
423022
|
+
);
|
|
423023
|
+
settings.setValue(
|
|
423024
|
+
persistScope,
|
|
423025
|
+
"security.auth.selectedType",
|
|
423026
|
+
AuthType2.USE_OPENAI
|
|
423027
|
+
);
|
|
423028
|
+
if (updatedConfigs.length > 0 && updatedConfigs[0]?.id) {
|
|
423029
|
+
settings.setValue(persistScope, "model.name", updatedConfigs[0].id);
|
|
423030
|
+
}
|
|
423031
|
+
const updatedModelProviders = {
|
|
423032
|
+
...settings.merged.modelProviders,
|
|
423033
|
+
[AuthType2.USE_OPENAI]: updatedConfigs
|
|
423034
|
+
};
|
|
423035
|
+
config2.reloadModelProvidersConfig(updatedModelProviders);
|
|
423036
|
+
await config2.refreshAuth(AuthType2.USE_OPENAI);
|
|
423037
|
+
setAuthError(null);
|
|
423038
|
+
setAuthState("authenticated" /* Authenticated */);
|
|
423039
|
+
setIsAuthDialogOpen(false);
|
|
423040
|
+
setIsAuthenticating(false);
|
|
423041
|
+
onAuthChange?.();
|
|
423042
|
+
addItem(
|
|
423043
|
+
{
|
|
423044
|
+
type: "info" /* INFO */,
|
|
423045
|
+
text: t4(
|
|
423046
|
+
"Authenticated successfully with Coding Plan. API key is stored in settings.env."
|
|
423047
|
+
)
|
|
423048
|
+
},
|
|
423049
|
+
Date.now()
|
|
423050
|
+
);
|
|
423051
|
+
const authEvent = new AuthEvent(
|
|
423052
|
+
AuthType2.USE_OPENAI,
|
|
423053
|
+
"coding-plan",
|
|
423054
|
+
"success"
|
|
423055
|
+
);
|
|
423056
|
+
logAuth(config2, authEvent);
|
|
423057
|
+
} catch (error2) {
|
|
423058
|
+
handleAuthFailure(error2);
|
|
423059
|
+
}
|
|
423060
|
+
},
|
|
423061
|
+
[settings, config2, handleAuthFailure, addItem, onAuthChange]
|
|
423062
|
+
);
|
|
423039
423063
|
(0, import_react103.useEffect)(() => {
|
|
423040
423064
|
const defaultAuthType = process.env["QWEN_DEFAULT_AUTH_TYPE"];
|
|
423041
423065
|
if (defaultAuthType && ![
|
|
@@ -423072,6 +423096,7 @@ var useAuthCommand = /* @__PURE__ */ __name((settings, config2, addItem, onAuthC
|
|
|
423072
423096
|
pendingAuthType,
|
|
423073
423097
|
qwenAuthState,
|
|
423074
423098
|
handleAuthSelect,
|
|
423099
|
+
handleCodingPlanSubmit,
|
|
423075
423100
|
openAuthDialog,
|
|
423076
423101
|
cancelAuthentication
|
|
423077
423102
|
};
|
|
@@ -430993,6 +431018,7 @@ var AppContainer = /* @__PURE__ */ __name((props) => {
|
|
|
430993
431018
|
pendingAuthType,
|
|
430994
431019
|
qwenAuthState,
|
|
430995
431020
|
handleAuthSelect,
|
|
431021
|
+
handleCodingPlanSubmit,
|
|
430996
431022
|
openAuthDialog,
|
|
430997
431023
|
cancelAuthentication
|
|
430998
431024
|
} = useAuthCommand(settings, config2, historyManager.addItem, refreshStatic);
|
|
@@ -431858,6 +431884,7 @@ ${migrationResult.failedFiles.map((f5) => ` \u2022 ${f5.file}: ${f5.error}`).jo
|
|
|
431858
431884
|
setAuthState,
|
|
431859
431885
|
onAuthError,
|
|
431860
431886
|
cancelAuthentication,
|
|
431887
|
+
handleCodingPlanSubmit,
|
|
431861
431888
|
handleEditorSelect,
|
|
431862
431889
|
exitEditorDialog,
|
|
431863
431890
|
closeSettingsDialog,
|
|
@@ -431902,6 +431929,7 @@ ${migrationResult.failedFiles.map((f5) => ` \u2022 ${f5.file}: ${f5.error}`).jo
|
|
|
431902
431929
|
setAuthState,
|
|
431903
431930
|
onAuthError,
|
|
431904
431931
|
cancelAuthentication,
|
|
431932
|
+
handleCodingPlanSubmit,
|
|
431905
431933
|
handleEditorSelect,
|
|
431906
431934
|
exitEditorDialog,
|
|
431907
431935
|
closeSettingsDialog,
|
|
@@ -434952,7 +434980,7 @@ var GeminiAgent = class {
|
|
|
434952
434980
|
name: APPROVAL_MODE_INFO[mode].name,
|
|
434953
434981
|
description: APPROVAL_MODE_INFO[mode].description
|
|
434954
434982
|
}));
|
|
434955
|
-
const version2 = "0.10.0-preview.
|
|
434983
|
+
const version2 = "0.10.0-preview.4";
|
|
434956
434984
|
return {
|
|
434957
434985
|
protocolVersion: PROTOCOL_VERSION,
|
|
434958
434986
|
agentInfo: {
|