@docyrus/docyrus 0.0.32 → 0.0.33
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/agent-loader.js +38 -15
- package/agent-loader.js.map +2 -2
- package/main.js +1 -1
- package/main.js.map +1 -1
- package/package.json +1 -1
- package/server-loader.js +32 -7
- package/server-loader.js.map +2 -2
package/agent-loader.js
CHANGED
|
@@ -1336,7 +1336,7 @@ function createCustomOpenAiProviderConfig(params) {
|
|
|
1336
1336
|
function createAzureProviderConfig(params) {
|
|
1337
1337
|
const providerConfig = {
|
|
1338
1338
|
baseUrl: params.baseUrl,
|
|
1339
|
-
apiKey: "
|
|
1339
|
+
apiKey: "AZURE_OPENAI_API_KEY"
|
|
1340
1340
|
};
|
|
1341
1341
|
if (params.useCustomModel) {
|
|
1342
1342
|
providerConfig.api = "azure-openai-responses";
|
|
@@ -1365,6 +1365,22 @@ function trimOrUndefined(value) {
|
|
|
1365
1365
|
const trimmed = value?.trim();
|
|
1366
1366
|
return trimmed && trimmed.length > 0 ? trimmed : void 0;
|
|
1367
1367
|
}
|
|
1368
|
+
function normalizeAzureBaseUrl(baseUrl) {
|
|
1369
|
+
const trimmed = baseUrl.trim().replace(/\/+$/, "");
|
|
1370
|
+
try {
|
|
1371
|
+
const url = new URL(trimmed);
|
|
1372
|
+
url.search = "";
|
|
1373
|
+
url.hash = "";
|
|
1374
|
+
if (url.pathname.endsWith("/openai/v1")) {
|
|
1375
|
+
url.pathname = url.pathname.slice(0, -3);
|
|
1376
|
+
} else if (url.pathname.endsWith("/openai/responses")) {
|
|
1377
|
+
url.pathname = url.pathname.slice(0, -10);
|
|
1378
|
+
}
|
|
1379
|
+
return url.toString().replace(/\/+$/, "");
|
|
1380
|
+
} catch {
|
|
1381
|
+
return trimmed.replace(/\/openai\/v1$/i, "/openai").replace(/\/openai\/responses$/i, "/openai");
|
|
1382
|
+
}
|
|
1383
|
+
}
|
|
1368
1384
|
async function saveGenericApiKey(params) {
|
|
1369
1385
|
params.authStorage.set(params.providerId, {
|
|
1370
1386
|
type: "api_key",
|
|
@@ -1391,6 +1407,7 @@ async function saveCustomOpenAiConfig(params) {
|
|
|
1391
1407
|
async function saveAzureConfig(params) {
|
|
1392
1408
|
const modelId = params.modelId.trim();
|
|
1393
1409
|
const useCustomModel = params.useCustomModel ?? false;
|
|
1410
|
+
const normalizedBaseUrl = normalizeAzureBaseUrl(params.baseUrl);
|
|
1394
1411
|
params.authStorage.set("azure-openai-responses", {
|
|
1395
1412
|
type: "api_key",
|
|
1396
1413
|
key: params.apiKey.trim()
|
|
@@ -1415,7 +1432,7 @@ async function saveAzureConfig(params) {
|
|
|
1415
1432
|
}
|
|
1416
1433
|
await params.envStore.setMany(envValues);
|
|
1417
1434
|
await upsertModelsProvider(params.modelsJsonPath, "azure-openai-responses", createAzureProviderConfig({
|
|
1418
|
-
baseUrl:
|
|
1435
|
+
baseUrl: normalizedBaseUrl,
|
|
1419
1436
|
modelId,
|
|
1420
1437
|
useCustomModel
|
|
1421
1438
|
}));
|
|
@@ -1679,7 +1696,7 @@ function getProviderFormFields(params) {
|
|
|
1679
1696
|
title: "Azure OpenAI base URL",
|
|
1680
1697
|
required: true,
|
|
1681
1698
|
component: "text",
|
|
1682
|
-
placeholder: "https://my-resource.openai.azure.com/openai
|
|
1699
|
+
placeholder: "https://my-resource.openai.azure.com/openai",
|
|
1683
1700
|
dependsOn: { field: "configMode", equals: "base-url" }
|
|
1684
1701
|
},
|
|
1685
1702
|
{
|
|
@@ -1708,8 +1725,8 @@ function getProviderFormFields(params) {
|
|
|
1708
1725
|
name: "apiVersion",
|
|
1709
1726
|
title: "API version",
|
|
1710
1727
|
component: "text",
|
|
1711
|
-
defaultValue: "2025-
|
|
1712
|
-
placeholder: "2025-
|
|
1728
|
+
defaultValue: "2025-04-01-preview",
|
|
1729
|
+
placeholder: "2025-04-01-preview"
|
|
1713
1730
|
}
|
|
1714
1731
|
];
|
|
1715
1732
|
case "amazon-bedrock":
|
|
@@ -1783,9 +1800,14 @@ function getProviderFormFields(params) {
|
|
|
1783
1800
|
}
|
|
1784
1801
|
}
|
|
1785
1802
|
async function refreshSessionAfterCredentialChange(params) {
|
|
1803
|
+
await params.envStore?.hydrateProcessEnv(process.env);
|
|
1786
1804
|
params.modelRegistry.refresh();
|
|
1787
1805
|
const availableModels = params.modelRegistry.getAvailable();
|
|
1788
1806
|
const preferredModel = params.preferredProviderId && params.preferredModelId ? availableModels.find((model) => model.provider === params.preferredProviderId && model.id === params.preferredModelId) : params.preferredProviderId ? availableModels.find((model) => model.provider === params.preferredProviderId) : void 0;
|
|
1807
|
+
if (preferredModel) {
|
|
1808
|
+
await params.session.setModel(preferredModel);
|
|
1809
|
+
return;
|
|
1810
|
+
}
|
|
1789
1811
|
const currentModel = params.session.model;
|
|
1790
1812
|
const currentModelStillAvailable = currentModel ? availableModels.some((model) => model.provider === currentModel.provider && model.id === currentModel.id) : false;
|
|
1791
1813
|
if (currentModel && !currentModelStillAvailable) {
|
|
@@ -1874,11 +1896,12 @@ async function showInput(mode, title, placeholder) {
|
|
|
1874
1896
|
});
|
|
1875
1897
|
});
|
|
1876
1898
|
}
|
|
1877
|
-
async function refreshAfterCredentialChange(mode, preferredProviderId, preferredModelId) {
|
|
1899
|
+
async function refreshAfterCredentialChange(mode, envStore, preferredProviderId, preferredModelId) {
|
|
1878
1900
|
const modeAny = modeAsAny(mode);
|
|
1879
1901
|
await refreshSessionAfterCredentialChange({
|
|
1880
1902
|
session: modeAny.session,
|
|
1881
1903
|
modelRegistry: modeAny.session.modelRegistry,
|
|
1904
|
+
envStore,
|
|
1882
1905
|
preferredProviderId,
|
|
1883
1906
|
preferredModelId
|
|
1884
1907
|
});
|
|
@@ -1916,7 +1939,7 @@ async function runApiKeyProviderFlow(mode, dependencies, provider) {
|
|
|
1916
1939
|
apiKey,
|
|
1917
1940
|
modelId
|
|
1918
1941
|
});
|
|
1919
|
-
await refreshAfterCredentialChange(mode, "custom-openai", modelId);
|
|
1942
|
+
await refreshAfterCredentialChange(mode, dependencies.envStore, "custom-openai", modelId);
|
|
1920
1943
|
modeAny.showStatus(`Configured ${provider.label}`);
|
|
1921
1944
|
return;
|
|
1922
1945
|
}
|
|
@@ -1949,7 +1972,7 @@ async function runApiKeyProviderFlow(mode, dependencies, provider) {
|
|
|
1949
1972
|
} else {
|
|
1950
1973
|
const resourceName = await showInput(mode, resourceNameField?.title || "Azure resource name", resourceNameField?.placeholder);
|
|
1951
1974
|
if (resourceName) {
|
|
1952
|
-
baseUrl = `https://${resourceName}.openai.azure.com/openai
|
|
1975
|
+
baseUrl = `https://${resourceName}.openai.azure.com/openai`;
|
|
1953
1976
|
}
|
|
1954
1977
|
}
|
|
1955
1978
|
if (!baseUrl) {
|
|
@@ -1974,7 +1997,7 @@ async function runApiKeyProviderFlow(mode, dependencies, provider) {
|
|
|
1974
1997
|
apiVersion,
|
|
1975
1998
|
useCustomModel: !builtInModelIds.has(modelId)
|
|
1976
1999
|
});
|
|
1977
|
-
await refreshAfterCredentialChange(mode, "azure-openai-responses", modelId);
|
|
2000
|
+
await refreshAfterCredentialChange(mode, dependencies.envStore, "azure-openai-responses", modelId);
|
|
1978
2001
|
modeAny.showStatus(`Configured ${provider.label}`);
|
|
1979
2002
|
return;
|
|
1980
2003
|
}
|
|
@@ -2037,7 +2060,7 @@ async function runApiKeyProviderFlow(mode, dependencies, provider) {
|
|
|
2037
2060
|
secretAccessKey,
|
|
2038
2061
|
sessionToken
|
|
2039
2062
|
});
|
|
2040
|
-
await refreshAfterCredentialChange(mode, "amazon-bedrock", modelId);
|
|
2063
|
+
await refreshAfterCredentialChange(mode, dependencies.envStore, "amazon-bedrock", modelId);
|
|
2041
2064
|
modeAny.showStatus(`Configured ${provider.label}`);
|
|
2042
2065
|
return;
|
|
2043
2066
|
}
|
|
@@ -2052,7 +2075,7 @@ async function runApiKeyProviderFlow(mode, dependencies, provider) {
|
|
|
2052
2075
|
providerId: provider.id,
|
|
2053
2076
|
apiKey
|
|
2054
2077
|
});
|
|
2055
|
-
await refreshAfterCredentialChange(mode, provider.id);
|
|
2078
|
+
await refreshAfterCredentialChange(mode, dependencies.envStore, provider.id);
|
|
2056
2079
|
modeAny.showStatus(`Configured ${provider.label}`);
|
|
2057
2080
|
}
|
|
2058
2081
|
}
|
|
@@ -2111,7 +2134,7 @@ async function handleInteractiveLogout(mode, dependencies) {
|
|
|
2111
2134
|
...dependencies,
|
|
2112
2135
|
providerId
|
|
2113
2136
|
});
|
|
2114
|
-
await refreshAfterCredentialChange(mode);
|
|
2137
|
+
await refreshAfterCredentialChange(mode, dependencies.envStore);
|
|
2115
2138
|
modeAny.showStatus(`Removed ${getProviderLabel(providerId)}`);
|
|
2116
2139
|
} catch (error) {
|
|
2117
2140
|
modeAny.showError(`Failed to remove ${getProviderLabel(providerId)}: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -2327,7 +2350,7 @@ async function runAzureFlow(clack, pico, dependencies) {
|
|
|
2327
2350
|
if (configMode === "base-url") {
|
|
2328
2351
|
const baseUrlInput = await clack.text({
|
|
2329
2352
|
message: "Azure OpenAI base URL:",
|
|
2330
|
-
placeholder: "https://my-resource.openai.azure.com/openai
|
|
2353
|
+
placeholder: "https://my-resource.openai.azure.com/openai",
|
|
2331
2354
|
validate: (value) => value?.trim() ? void 0 : "Base URL is required"
|
|
2332
2355
|
});
|
|
2333
2356
|
if (clack.isCancel(baseUrlInput) || !baseUrlInput) {
|
|
@@ -2343,7 +2366,7 @@ async function runAzureFlow(clack, pico, dependencies) {
|
|
|
2343
2366
|
if (clack.isCancel(resourceName) || !resourceName) {
|
|
2344
2367
|
return false;
|
|
2345
2368
|
}
|
|
2346
|
-
baseUrl = `https://${String(resourceName).trim()}.openai.azure.com/openai
|
|
2369
|
+
baseUrl = `https://${String(resourceName).trim()}.openai.azure.com/openai`;
|
|
2347
2370
|
}
|
|
2348
2371
|
const modelId = await clack.text({
|
|
2349
2372
|
message: "Model ID to use:",
|
|
@@ -2362,7 +2385,7 @@ async function runAzureFlow(clack, pico, dependencies) {
|
|
|
2362
2385
|
}
|
|
2363
2386
|
const apiVersion = await clack.text({
|
|
2364
2387
|
message: `API version ${pico.dim("(leave blank to use pi's default)")}:`,
|
|
2365
|
-
placeholder: "2025-
|
|
2388
|
+
placeholder: "2025-04-01-preview"
|
|
2366
2389
|
});
|
|
2367
2390
|
if (clack.isCancel(apiVersion)) {
|
|
2368
2391
|
return false;
|