ur-agent 1.31.0 → 1.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/dist/cli.js +295 -82
- package/docs/providers.md +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.33.0
|
|
4
|
+
|
|
5
|
+
- Add API keys from inside UR while it is running: in `/model`, selecting an
|
|
6
|
+
API provider (OpenAI, Anthropic, Gemini, OpenRouter) that isn't connected now
|
|
7
|
+
shows a masked key-entry step. The key is stored in the OS keychain, then the
|
|
8
|
+
provider's models load live and you choose one — all without leaving the
|
|
9
|
+
session or setting an environment variable.
|
|
10
|
+
- Subscription login is unchanged: use `ur auth <provider>` (Codex, Claude,
|
|
11
|
+
Gemini, Antigravity).
|
|
12
|
+
|
|
13
|
+
## 1.32.0
|
|
14
|
+
|
|
15
|
+
- `/model` now shows the subscription providers (Codex CLI, Claude Code, Gemini
|
|
16
|
+
CLI, Antigravity) again. They are enabled the moment you `ur connect` them
|
|
17
|
+
(persisted per-account opt-in) — no `UR_ENABLE_EXTERNAL_APP_PROVIDERS` env var
|
|
18
|
+
needed — and run via the official CLI. Not connected → clear connect prompt.
|
|
19
|
+
- API providers (OpenAI, Anthropic, Gemini, OpenRouter) now load their model
|
|
20
|
+
lists **live** from each provider's `/models` endpoint using your connected
|
|
21
|
+
key (OpenAI/Anthropic/OpenRouter `data[].id`; Gemini `models[]` filtered to
|
|
22
|
+
`generateContent`). No hardcoded model IDs; the curated list is only a
|
|
23
|
+
fallback shown before you connect. Subscription CLIs keep a curated list
|
|
24
|
+
because their official CLIs expose no models API.
|
|
25
|
+
- Live-discovered models validate against the discovered list (with cold-process
|
|
26
|
+
tolerance), so a saved API model keeps working across restarts.
|
|
27
|
+
|
|
3
28
|
## 1.31.0
|
|
4
29
|
|
|
5
30
|
- Add in-app provider connection: `ur connect` / `/connect` connects a provider
|
package/dist/cli.js
CHANGED
|
@@ -51616,6 +51616,7 @@ __export(exports_providerRegistry, {
|
|
|
51616
51616
|
isProviderRuntimeSelectable: () => isProviderRuntimeSelectable,
|
|
51617
51617
|
isProviderId: () => isProviderId,
|
|
51618
51618
|
isModelSupportedByProvider: () => isModelSupportedByProvider,
|
|
51619
|
+
isExternalBridgeEnabled: () => isExternalBridgeEnabled,
|
|
51619
51620
|
getValidModelIdsForProvider: () => getValidModelIdsForProvider,
|
|
51620
51621
|
getRuntimeProviderId: () => getRuntimeProviderId,
|
|
51621
51622
|
getProviderStatus: () => getProviderStatus,
|
|
@@ -51635,6 +51636,7 @@ __export(exports_providerRegistry, {
|
|
|
51635
51636
|
formatProviderDoctor: () => formatProviderDoctor,
|
|
51636
51637
|
formatInvalidProviderModelMessage: () => formatInvalidProviderModelMessage,
|
|
51637
51638
|
externalAppProviderBridgeEnabled: () => externalAppProviderBridgeEnabled,
|
|
51639
|
+
enableExternalBridge: () => enableExternalBridge,
|
|
51638
51640
|
doctorProvider: () => doctorProvider,
|
|
51639
51641
|
doctorActiveProvider: () => doctorActiveProvider,
|
|
51640
51642
|
credentialTypeLabel: () => credentialTypeLabel,
|
|
@@ -51775,11 +51777,43 @@ function credentialTypeLabel(type) {
|
|
|
51775
51777
|
function externalAppProviderBridgeEnabled(env4 = process.env) {
|
|
51776
51778
|
return env4.UR_ENABLE_EXTERNAL_APP_PROVIDERS === "1";
|
|
51777
51779
|
}
|
|
51780
|
+
function isExternalBridgeEnabled(providerId, env4 = process.env, settings = getInitialSettings()) {
|
|
51781
|
+
if (externalAppProviderBridgeEnabled(env4)) {
|
|
51782
|
+
return true;
|
|
51783
|
+
}
|
|
51784
|
+
const provider = resolveProviderId(providerId);
|
|
51785
|
+
const enabled = settings.provider?.enabledExternalBridges;
|
|
51786
|
+
return Boolean(provider && Array.isArray(enabled) && enabled.includes(provider));
|
|
51787
|
+
}
|
|
51788
|
+
function enableExternalBridge(providerId) {
|
|
51789
|
+
const provider = resolveProviderId(providerId);
|
|
51790
|
+
if (!provider) {
|
|
51791
|
+
return { ok: false, message: `Unknown provider "${providerId}". Run: ur provider list` };
|
|
51792
|
+
}
|
|
51793
|
+
if (getProviderDefinition(provider).runtimeKind !== "external-app") {
|
|
51794
|
+
return { ok: true, message: `${provider} does not require an external-app opt-in.` };
|
|
51795
|
+
}
|
|
51796
|
+
const settings = getInitialSettings();
|
|
51797
|
+
const current = settings.provider?.enabledExternalBridges ?? [];
|
|
51798
|
+
if (current.includes(provider)) {
|
|
51799
|
+
return { ok: true, message: `${provider} is already enabled.` };
|
|
51800
|
+
}
|
|
51801
|
+
const result = updateSettingsForSource("userSettings", {
|
|
51802
|
+
provider: {
|
|
51803
|
+
...settings.provider ?? {},
|
|
51804
|
+
enabledExternalBridges: [...current, provider]
|
|
51805
|
+
}
|
|
51806
|
+
});
|
|
51807
|
+
if (result.error) {
|
|
51808
|
+
return { ok: false, message: `Failed to persist opt-in: ${result.error.message}` };
|
|
51809
|
+
}
|
|
51810
|
+
return { ok: true, message: `Enabled ${provider} for this account.` };
|
|
51811
|
+
}
|
|
51778
51812
|
function getProviderRuntimeKind(providerId) {
|
|
51779
51813
|
const provider = resolveProviderId(providerId);
|
|
51780
51814
|
return provider ? getProviderDefinition(provider).runtimeKind : "unknown";
|
|
51781
51815
|
}
|
|
51782
|
-
function getProviderRuntimeBlockReason(providerId, env4 = process.env) {
|
|
51816
|
+
function getProviderRuntimeBlockReason(providerId, env4 = process.env, settings = getInitialSettings()) {
|
|
51783
51817
|
const provider = resolveProviderId(providerId);
|
|
51784
51818
|
if (!provider) {
|
|
51785
51819
|
return `Unknown provider "${providerId}". Run: ur provider list`;
|
|
@@ -51791,10 +51825,10 @@ function getProviderRuntimeBlockReason(providerId, env4 = process.env) {
|
|
|
51791
51825
|
if (definition.runtimeKind !== "external-app") {
|
|
51792
51826
|
return null;
|
|
51793
51827
|
}
|
|
51794
|
-
if (
|
|
51828
|
+
if (isExternalBridgeEnabled(provider, env4, settings)) {
|
|
51795
51829
|
return null;
|
|
51796
51830
|
}
|
|
51797
|
-
return `Provider "${provider}" uses an external app bridge (${definition.displayName})
|
|
51831
|
+
return `Provider "${provider}" uses an external app bridge (${definition.displayName}). Connect it once with \`ur connect ${provider}\` (or set UR_ENABLE_EXTERNAL_APP_PROVIDERS=1) to enable it. Otherwise choose an API/local/server provider such as openai-api, anthropic-api, gemini-api, openrouter, ollama, lmstudio, llama.cpp, or vllm.`;
|
|
51798
51832
|
}
|
|
51799
51833
|
function isProviderRuntimeSelectable(providerId, env4 = process.env) {
|
|
51800
51834
|
return getProviderRuntimeBlockReason(providerId, env4) === null;
|
|
@@ -52564,6 +52598,9 @@ function staticModelsForProvider(provider) {
|
|
|
52564
52598
|
async function discoverLiveModelsForProvider(provider, options = {}) {
|
|
52565
52599
|
const definition = getProviderDefinition(provider);
|
|
52566
52600
|
if (!definition.endpointKind) {
|
|
52601
|
+
if (definition.accessType === "api" && definition.modelDiscoveryType === "live") {
|
|
52602
|
+
return discoverApiProviderModels(provider, definition, options);
|
|
52603
|
+
}
|
|
52567
52604
|
return [];
|
|
52568
52605
|
}
|
|
52569
52606
|
const settings = options.settings ?? getInitialSettings();
|
|
@@ -52585,6 +52622,68 @@ async function discoverLiveModelsForProvider(provider, options = {}) {
|
|
|
52585
52622
|
const names = definition.endpointKind === "ollama" ? parseOllamaModelNamesFromTags(body) : parseOpenAICompatibleModelNames(body);
|
|
52586
52623
|
return modelDefinitionsFromNames(provider, names, "live");
|
|
52587
52624
|
}
|
|
52625
|
+
function apiModelsRequest(provider, apiKey) {
|
|
52626
|
+
switch (provider) {
|
|
52627
|
+
case "anthropic-api":
|
|
52628
|
+
return {
|
|
52629
|
+
url: "https://api.anthropic.com/v1/models",
|
|
52630
|
+
headers: { "x-api-key": apiKey, "anthropic-version": "2023-06-01" }
|
|
52631
|
+
};
|
|
52632
|
+
case "gemini-api":
|
|
52633
|
+
return {
|
|
52634
|
+
url: "https://generativelanguage.googleapis.com/v1beta/models",
|
|
52635
|
+
headers: { "x-goog-api-key": apiKey }
|
|
52636
|
+
};
|
|
52637
|
+
case "openrouter":
|
|
52638
|
+
return {
|
|
52639
|
+
url: "https://openrouter.ai/api/v1/models",
|
|
52640
|
+
headers: { Authorization: `Bearer ${apiKey}` }
|
|
52641
|
+
};
|
|
52642
|
+
default:
|
|
52643
|
+
return {
|
|
52644
|
+
url: "https://api.openai.com/v1/models",
|
|
52645
|
+
headers: { Authorization: `Bearer ${apiKey}` }
|
|
52646
|
+
};
|
|
52647
|
+
}
|
|
52648
|
+
}
|
|
52649
|
+
function parseApiModelIds(provider, body) {
|
|
52650
|
+
const root2 = body ?? {};
|
|
52651
|
+
if (provider === "gemini-api") {
|
|
52652
|
+
const models = Array.isArray(root2.models) ? root2.models : [];
|
|
52653
|
+
const names2 = models.filter((m) => {
|
|
52654
|
+
const methods = m.supportedGenerationMethods;
|
|
52655
|
+
return !Array.isArray(methods) || methods.includes("generateContent");
|
|
52656
|
+
}).map((m) => typeof m.name === "string" ? m.name.replace(/^models\//, "") : "").filter(Boolean);
|
|
52657
|
+
return [...new Set(names2)].sort((a2, b) => a2.localeCompare(b));
|
|
52658
|
+
}
|
|
52659
|
+
const data = Array.isArray(root2.data) ? root2.data : [];
|
|
52660
|
+
const names = data.map((m) => typeof m.id === "string" ? m.id : "").filter(Boolean);
|
|
52661
|
+
return [...new Set(names)].sort((a2, b) => a2.localeCompare(b));
|
|
52662
|
+
}
|
|
52663
|
+
async function discoverApiProviderModels(provider, definition, options) {
|
|
52664
|
+
const env4 = options.adapters?.env ?? process.env;
|
|
52665
|
+
let apiKey = definition.envKey ? env4[definition.envKey] : undefined;
|
|
52666
|
+
if (!apiKey) {
|
|
52667
|
+
try {
|
|
52668
|
+
const { getProviderApiKey: getProviderApiKey2 } = await Promise.resolve().then(() => (init_providerCredentials(), exports_providerCredentials));
|
|
52669
|
+
apiKey = getProviderApiKey2(provider, { env: env4 });
|
|
52670
|
+
} catch {}
|
|
52671
|
+
}
|
|
52672
|
+
if (!apiKey) {
|
|
52673
|
+
throw new Error(`Not connected: run \`ur connect ${provider}\` to add an API key.`);
|
|
52674
|
+
}
|
|
52675
|
+
const { url: url3, headers } = apiModelsRequest(provider, apiKey);
|
|
52676
|
+
const response = await (options.adapters?.fetch ?? fetch)(url3, {
|
|
52677
|
+
method: "GET",
|
|
52678
|
+
signal: options.signal,
|
|
52679
|
+
headers
|
|
52680
|
+
});
|
|
52681
|
+
if (!response.ok) {
|
|
52682
|
+
throw new Error(`${url3} returned HTTP ${response.status}.`);
|
|
52683
|
+
}
|
|
52684
|
+
const body = await response.json();
|
|
52685
|
+
return modelDefinitionsFromNames(provider, parseApiModelIds(provider, body), "live");
|
|
52686
|
+
}
|
|
52588
52687
|
async function listModelsForProviderWithSource(providerId, options = {}) {
|
|
52589
52688
|
const provider = resolveProviderId(providerId);
|
|
52590
52689
|
if (!provider) {
|
|
@@ -52707,12 +52806,13 @@ function validateProviderModelPair(providerId, modelId, options = {}) {
|
|
|
52707
52806
|
const suppliedModels = (options.availableModels ?? []).map((model) => typeof model === "string" ? model : model.id);
|
|
52708
52807
|
const cachedModels = getCachedProviderModels(provider).map((model) => model.id);
|
|
52709
52808
|
const staticModelIds = staticModelsForProvider(provider).map((model) => model.id);
|
|
52710
|
-
const hasDynamicModels = models.some((model) => model.isDynamic);
|
|
52809
|
+
const hasDynamicModels = models.some((model) => model.isDynamic) || getProviderDefinition(provider).modelDiscoveryType === "live";
|
|
52711
52810
|
const validModelIds = suppliedModels.length > 0 ? suppliedModels : hasDynamicModels ? cachedModels.length > 0 ? cachedModels : staticModelIds : Array.from(new Set([...staticModelIds, ...cachedModels]));
|
|
52712
52811
|
if (validModelIds.includes(modelId)) {
|
|
52713
52812
|
return { valid: true };
|
|
52714
52813
|
}
|
|
52715
|
-
|
|
52814
|
+
const noAuthoritativeList = cachedModels.length === 0 && suppliedModels.length === 0;
|
|
52815
|
+
if (hasDynamicModels && options.allowUncachedDynamic && noAuthoritativeList) {
|
|
52716
52816
|
return { valid: true };
|
|
52717
52817
|
}
|
|
52718
52818
|
const defaultModel = getDefaultModelForProvider(provider);
|
|
@@ -52889,10 +52989,10 @@ var init_providerRegistry = __esm(() => {
|
|
|
52889
52989
|
statusBarName: "OpenAI",
|
|
52890
52990
|
accessType: "api",
|
|
52891
52991
|
credentialType: "api-key",
|
|
52892
|
-
modelDiscoveryType: "
|
|
52992
|
+
modelDiscoveryType: "live",
|
|
52893
52993
|
statusCheck: "api-key",
|
|
52894
52994
|
listModels: "static",
|
|
52895
|
-
validateModel: "
|
|
52995
|
+
validateModel: "discovered-list",
|
|
52896
52996
|
runtimeKind: "ur-native",
|
|
52897
52997
|
authMode: "api",
|
|
52898
52998
|
legalPath: "OPENAI_API_KEY",
|
|
@@ -52905,10 +53005,10 @@ var init_providerRegistry = __esm(() => {
|
|
|
52905
53005
|
statusBarName: "Claude API",
|
|
52906
53006
|
accessType: "api",
|
|
52907
53007
|
credentialType: "api-key",
|
|
52908
|
-
modelDiscoveryType: "
|
|
53008
|
+
modelDiscoveryType: "live",
|
|
52909
53009
|
statusCheck: "api-key",
|
|
52910
53010
|
listModels: "static",
|
|
52911
|
-
validateModel: "
|
|
53011
|
+
validateModel: "discovered-list",
|
|
52912
53012
|
runtimeKind: "ur-native",
|
|
52913
53013
|
authMode: "api",
|
|
52914
53014
|
legalPath: "ANTHROPIC_API_KEY",
|
|
@@ -52921,10 +53021,10 @@ var init_providerRegistry = __esm(() => {
|
|
|
52921
53021
|
statusBarName: "Gemini API",
|
|
52922
53022
|
accessType: "api",
|
|
52923
53023
|
credentialType: "api-key",
|
|
52924
|
-
modelDiscoveryType: "
|
|
53024
|
+
modelDiscoveryType: "live",
|
|
52925
53025
|
statusCheck: "api-key",
|
|
52926
53026
|
listModels: "static",
|
|
52927
|
-
validateModel: "
|
|
53027
|
+
validateModel: "discovered-list",
|
|
52928
53028
|
runtimeKind: "ur-native",
|
|
52929
53029
|
authMode: "api",
|
|
52930
53030
|
legalPath: "GEMINI_API_KEY",
|
|
@@ -52937,10 +53037,10 @@ var init_providerRegistry = __esm(() => {
|
|
|
52937
53037
|
statusBarName: "OpenRouter",
|
|
52938
53038
|
accessType: "api",
|
|
52939
53039
|
credentialType: "api-key",
|
|
52940
|
-
modelDiscoveryType: "
|
|
53040
|
+
modelDiscoveryType: "live",
|
|
52941
53041
|
statusCheck: "api-key",
|
|
52942
53042
|
listModels: "static",
|
|
52943
|
-
validateModel: "
|
|
53043
|
+
validateModel: "discovered-list",
|
|
52944
53044
|
runtimeKind: "ur-native",
|
|
52945
53045
|
authMode: "api",
|
|
52946
53046
|
legalPath: "OPENROUTER_API_KEY",
|
|
@@ -69418,7 +69518,7 @@ var init_auth = __esm(() => {
|
|
|
69418
69518
|
|
|
69419
69519
|
// src/utils/userAgent.ts
|
|
69420
69520
|
function getURCodeUserAgent() {
|
|
69421
|
-
return `ur/${"1.
|
|
69521
|
+
return `ur/${"1.33.0"}`;
|
|
69422
69522
|
}
|
|
69423
69523
|
|
|
69424
69524
|
// src/utils/workloadContext.ts
|
|
@@ -69440,7 +69540,7 @@ function getUserAgent() {
|
|
|
69440
69540
|
const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
|
|
69441
69541
|
const workload = getWorkload();
|
|
69442
69542
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
69443
|
-
return `ur-cli/${"1.
|
|
69543
|
+
return `ur-cli/${"1.33.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
69444
69544
|
}
|
|
69445
69545
|
function getMCPUserAgent() {
|
|
69446
69546
|
const parts = [];
|
|
@@ -69454,7 +69554,7 @@ function getMCPUserAgent() {
|
|
|
69454
69554
|
parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
|
|
69455
69555
|
}
|
|
69456
69556
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
69457
|
-
return `ur/${"1.
|
|
69557
|
+
return `ur/${"1.33.0"}${suffix}`;
|
|
69458
69558
|
}
|
|
69459
69559
|
function getWebFetchUserAgent() {
|
|
69460
69560
|
return `UR-User (${getURCodeUserAgent()})`;
|
|
@@ -69592,7 +69692,7 @@ var init_user = __esm(() => {
|
|
|
69592
69692
|
deviceId,
|
|
69593
69693
|
sessionId: getSessionId(),
|
|
69594
69694
|
email: getEmail(),
|
|
69595
|
-
appVersion: "1.
|
|
69695
|
+
appVersion: "1.33.0",
|
|
69596
69696
|
platform: getHostPlatformForAnalytics(),
|
|
69597
69697
|
organizationUuid,
|
|
69598
69698
|
accountUuid,
|
|
@@ -76109,7 +76209,7 @@ var init_metadata = __esm(() => {
|
|
|
76109
76209
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
76110
76210
|
WHITESPACE_REGEX = /\s+/;
|
|
76111
76211
|
getVersionBase = memoize_default(() => {
|
|
76112
|
-
const match = "1.
|
|
76212
|
+
const match = "1.33.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
76113
76213
|
return match ? match[0] : undefined;
|
|
76114
76214
|
});
|
|
76115
76215
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -76149,7 +76249,7 @@ var init_metadata = __esm(() => {
|
|
|
76149
76249
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
76150
76250
|
isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
|
|
76151
76251
|
isURAiAuth: isURAISubscriber2(),
|
|
76152
|
-
version: "1.
|
|
76252
|
+
version: "1.33.0",
|
|
76153
76253
|
versionBase: getVersionBase(),
|
|
76154
76254
|
buildTime: "",
|
|
76155
76255
|
deploymentEnvironment: env2.detectDeploymentEnvironment(),
|
|
@@ -76819,7 +76919,7 @@ function initialize1PEventLogging() {
|
|
|
76819
76919
|
const platform2 = getPlatform();
|
|
76820
76920
|
const attributes = {
|
|
76821
76921
|
[import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
|
|
76822
|
-
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.
|
|
76922
|
+
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.33.0"
|
|
76823
76923
|
};
|
|
76824
76924
|
if (platform2 === "wsl") {
|
|
76825
76925
|
const wslVersion = getWslVersion();
|
|
@@ -76846,7 +76946,7 @@ function initialize1PEventLogging() {
|
|
|
76846
76946
|
})
|
|
76847
76947
|
]
|
|
76848
76948
|
});
|
|
76849
|
-
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.
|
|
76949
|
+
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.33.0");
|
|
76850
76950
|
}
|
|
76851
76951
|
async function reinitialize1PEventLoggingIfConfigChanged() {
|
|
76852
76952
|
if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
|
|
@@ -82143,7 +82243,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
|
|
|
82143
82243
|
function formatA2AAgentCard(options = {}, pretty = true) {
|
|
82144
82244
|
return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
|
|
82145
82245
|
}
|
|
82146
|
-
var urVersion = "1.
|
|
82246
|
+
var urVersion = "1.33.0", coverage, priorityRoadmap;
|
|
82147
82247
|
var init_trends = __esm(() => {
|
|
82148
82248
|
coverage = [
|
|
82149
82249
|
{
|
|
@@ -84136,7 +84236,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
84136
84236
|
if (!isAttributionHeaderEnabled()) {
|
|
84137
84237
|
return "";
|
|
84138
84238
|
}
|
|
84139
|
-
const version2 = `${"1.
|
|
84239
|
+
const version2 = `${"1.33.0"}.${fingerprint}`;
|
|
84140
84240
|
const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
|
|
84141
84241
|
const cch = "";
|
|
84142
84242
|
const workload = getWorkload();
|
|
@@ -191790,7 +191890,7 @@ function getTelemetryAttributes() {
|
|
|
191790
191890
|
attributes["session.id"] = sessionId;
|
|
191791
191891
|
}
|
|
191792
191892
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
191793
|
-
attributes["app.version"] = "1.
|
|
191893
|
+
attributes["app.version"] = "1.33.0";
|
|
191794
191894
|
}
|
|
191795
191895
|
const oauthAccount = getOauthAccountInfo();
|
|
191796
191896
|
if (oauthAccount) {
|
|
@@ -227175,7 +227275,7 @@ function getInstallationEnv() {
|
|
|
227175
227275
|
return;
|
|
227176
227276
|
}
|
|
227177
227277
|
function getURCodeVersion() {
|
|
227178
|
-
return "1.
|
|
227278
|
+
return "1.33.0";
|
|
227179
227279
|
}
|
|
227180
227280
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
227181
227281
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -230014,7 +230114,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
230014
230114
|
const client2 = new Client({
|
|
230015
230115
|
name: "ur",
|
|
230016
230116
|
title: "UR",
|
|
230017
|
-
version: "1.
|
|
230117
|
+
version: "1.33.0",
|
|
230018
230118
|
description: "UR-AGENT autonomous engineering workflow engine",
|
|
230019
230119
|
websiteUrl: PRODUCT_URL
|
|
230020
230120
|
}, {
|
|
@@ -230368,7 +230468,7 @@ var init_client5 = __esm(() => {
|
|
|
230368
230468
|
const client2 = new Client({
|
|
230369
230469
|
name: "ur",
|
|
230370
230470
|
title: "UR",
|
|
230371
|
-
version: "1.
|
|
230471
|
+
version: "1.33.0",
|
|
230372
230472
|
description: "UR-AGENT autonomous engineering workflow engine",
|
|
230373
230473
|
websiteUrl: PRODUCT_URL
|
|
230374
230474
|
}, {
|
|
@@ -240182,9 +240282,9 @@ async function assertMinVersion() {
|
|
|
240182
240282
|
if (false) {}
|
|
240183
240283
|
try {
|
|
240184
240284
|
const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
|
|
240185
|
-
if (versionConfig.minVersion && lt("1.
|
|
240285
|
+
if (versionConfig.minVersion && lt("1.33.0", versionConfig.minVersion)) {
|
|
240186
240286
|
console.error(`
|
|
240187
|
-
It looks like your version of UR (${"1.
|
|
240287
|
+
It looks like your version of UR (${"1.33.0"}) needs an update.
|
|
240188
240288
|
A newer version (${versionConfig.minVersion} or higher) is required to continue.
|
|
240189
240289
|
|
|
240190
240290
|
To update, please run:
|
|
@@ -240400,7 +240500,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
240400
240500
|
logError2(new AutoUpdaterError("Another process is currently installing an update"));
|
|
240401
240501
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
240402
240502
|
pid: process.pid,
|
|
240403
|
-
currentVersion: "1.
|
|
240503
|
+
currentVersion: "1.33.0"
|
|
240404
240504
|
});
|
|
240405
240505
|
return "in_progress";
|
|
240406
240506
|
}
|
|
@@ -240409,7 +240509,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
240409
240509
|
if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
|
|
240410
240510
|
logError2(new Error("Windows NPM detected in WSL environment"));
|
|
240411
240511
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
240412
|
-
currentVersion: "1.
|
|
240512
|
+
currentVersion: "1.33.0"
|
|
240413
240513
|
});
|
|
240414
240514
|
console.error(`
|
|
240415
240515
|
Error: Windows NPM detected in WSL
|
|
@@ -240944,7 +241044,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
240944
241044
|
}
|
|
240945
241045
|
async function getDoctorDiagnostic() {
|
|
240946
241046
|
const installationType = await getCurrentInstallationType();
|
|
240947
|
-
const version2 = typeof MACRO !== "undefined" ? "1.
|
|
241047
|
+
const version2 = typeof MACRO !== "undefined" ? "1.33.0" : "unknown";
|
|
240948
241048
|
const installationPath = await getInstallationPath();
|
|
240949
241049
|
const invokedBinary = getInvokedBinary();
|
|
240950
241050
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -241879,8 +241979,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
241879
241979
|
const maxVersion = await getMaxVersion();
|
|
241880
241980
|
if (maxVersion && gt(version2, maxVersion)) {
|
|
241881
241981
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
|
|
241882
|
-
if (gte("1.
|
|
241883
|
-
logForDebugging(`Native installer: current version ${"1.
|
|
241982
|
+
if (gte("1.33.0", maxVersion)) {
|
|
241983
|
+
logForDebugging(`Native installer: current version ${"1.33.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
241884
241984
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
241885
241985
|
latency_ms: Date.now() - startTime,
|
|
241886
241986
|
max_version: maxVersion,
|
|
@@ -241891,7 +241991,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
241891
241991
|
version2 = maxVersion;
|
|
241892
241992
|
}
|
|
241893
241993
|
}
|
|
241894
|
-
if (!forceReinstall && version2 === "1.
|
|
241994
|
+
if (!forceReinstall && version2 === "1.33.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
|
|
241895
241995
|
logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
|
|
241896
241996
|
logEvent("tengu_native_update_complete", {
|
|
241897
241997
|
latency_ms: Date.now() - startTime,
|
|
@@ -338795,7 +338895,7 @@ function Feedback({
|
|
|
338795
338895
|
platform: env2.platform,
|
|
338796
338896
|
gitRepo: envInfo.isGit,
|
|
338797
338897
|
terminal: env2.terminal,
|
|
338798
|
-
version: "1.
|
|
338898
|
+
version: "1.33.0",
|
|
338799
338899
|
transcript: normalizeMessagesForAPI(messages),
|
|
338800
338900
|
errors: sanitizedErrors,
|
|
338801
338901
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -338987,7 +339087,7 @@ function Feedback({
|
|
|
338987
339087
|
", ",
|
|
338988
339088
|
env2.terminal,
|
|
338989
339089
|
", v",
|
|
338990
|
-
"1.
|
|
339090
|
+
"1.33.0"
|
|
338991
339091
|
]
|
|
338992
339092
|
}, undefined, true, undefined, this)
|
|
338993
339093
|
]
|
|
@@ -339093,7 +339193,7 @@ ${sanitizedDescription}
|
|
|
339093
339193
|
` + `**Environment Info**
|
|
339094
339194
|
` + `- Platform: ${env2.platform}
|
|
339095
339195
|
` + `- Terminal: ${env2.terminal}
|
|
339096
|
-
` + `- Version: ${"1.
|
|
339196
|
+
` + `- Version: ${"1.33.0"}
|
|
339097
339197
|
` + `- Feedback ID: ${feedbackId}
|
|
339098
339198
|
` + `
|
|
339099
339199
|
**Errors**
|
|
@@ -342204,7 +342304,7 @@ function buildPrimarySection() {
|
|
|
342204
342304
|
}, undefined, false, undefined, this);
|
|
342205
342305
|
return [{
|
|
342206
342306
|
label: "Version",
|
|
342207
|
-
value: "1.
|
|
342307
|
+
value: "1.33.0"
|
|
342208
342308
|
}, {
|
|
342209
342309
|
label: "Session name",
|
|
342210
342310
|
value: nameValue
|
|
@@ -345504,7 +345604,7 @@ function Config({
|
|
|
345504
345604
|
}
|
|
345505
345605
|
}, undefined, false, undefined, this)
|
|
345506
345606
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime177.jsxDEV(ChannelDowngradeDialog, {
|
|
345507
|
-
currentVersion: "1.
|
|
345607
|
+
currentVersion: "1.33.0",
|
|
345508
345608
|
onChoice: (choice) => {
|
|
345509
345609
|
setShowSubmenu(null);
|
|
345510
345610
|
setTabsHidden(false);
|
|
@@ -345516,7 +345616,7 @@ function Config({
|
|
|
345516
345616
|
autoUpdatesChannel: "stable"
|
|
345517
345617
|
};
|
|
345518
345618
|
if (choice === "stay") {
|
|
345519
|
-
newSettings.minimumVersion = "1.
|
|
345619
|
+
newSettings.minimumVersion = "1.33.0";
|
|
345520
345620
|
}
|
|
345521
345621
|
updateSettingsForSource("userSettings", newSettings);
|
|
345522
345622
|
setSettingsData((prev_27) => ({
|
|
@@ -353586,7 +353686,7 @@ function HelpV2(t0) {
|
|
|
353586
353686
|
let t6;
|
|
353587
353687
|
if ($3[31] !== tabs) {
|
|
353588
353688
|
t6 = /* @__PURE__ */ jsx_dev_runtime204.jsxDEV(Tabs, {
|
|
353589
|
-
title: `UR v${"1.
|
|
353689
|
+
title: `UR v${"1.33.0"}`,
|
|
353590
353690
|
color: "professionalBlue",
|
|
353591
353691
|
defaultTab: "general",
|
|
353592
353692
|
children: tabs
|
|
@@ -354332,7 +354432,7 @@ function buildToolUseContext(tools, readFileStateCache) {
|
|
|
354332
354432
|
async function handleInitialize(options2) {
|
|
354333
354433
|
return {
|
|
354334
354434
|
name: "ur-agent",
|
|
354335
|
-
version: "1.
|
|
354435
|
+
version: "1.33.0",
|
|
354336
354436
|
protocolVersion: "0.1.0",
|
|
354337
354437
|
workspaceRoot: options2.cwd,
|
|
354338
354438
|
capabilities: {
|
|
@@ -374456,7 +374556,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
374456
374556
|
return [];
|
|
374457
374557
|
}
|
|
374458
374558
|
}
|
|
374459
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.
|
|
374559
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.33.0") {
|
|
374460
374560
|
if (process.env.USER_TYPE === "ant") {
|
|
374461
374561
|
const changelog = "";
|
|
374462
374562
|
if (changelog) {
|
|
@@ -374483,7 +374583,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.31.0")
|
|
|
374483
374583
|
releaseNotes
|
|
374484
374584
|
};
|
|
374485
374585
|
}
|
|
374486
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.
|
|
374586
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.33.0") {
|
|
374487
374587
|
if (process.env.USER_TYPE === "ant") {
|
|
374488
374588
|
const changelog = "";
|
|
374489
374589
|
if (changelog) {
|
|
@@ -375653,7 +375753,7 @@ function getRecentActivitySync() {
|
|
|
375653
375753
|
return cachedActivity;
|
|
375654
375754
|
}
|
|
375655
375755
|
function getLogoDisplayData() {
|
|
375656
|
-
const version2 = process.env.DEMO_VERSION ?? "1.
|
|
375756
|
+
const version2 = process.env.DEMO_VERSION ?? "1.33.0";
|
|
375657
375757
|
const serverUrl = getDirectConnectServerUrl();
|
|
375658
375758
|
const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd2());
|
|
375659
375759
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -376442,7 +376542,7 @@ function LogoV2() {
|
|
|
376442
376542
|
if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
376443
376543
|
t2 = () => {
|
|
376444
376544
|
const currentConfig = getGlobalConfig();
|
|
376445
|
-
if (currentConfig.lastReleaseNotesSeen === "1.
|
|
376545
|
+
if (currentConfig.lastReleaseNotesSeen === "1.33.0") {
|
|
376446
376546
|
return;
|
|
376447
376547
|
}
|
|
376448
376548
|
saveGlobalConfig(_temp326);
|
|
@@ -377127,12 +377227,12 @@ function LogoV2() {
|
|
|
377127
377227
|
return t41;
|
|
377128
377228
|
}
|
|
377129
377229
|
function _temp326(current) {
|
|
377130
|
-
if (current.lastReleaseNotesSeen === "1.
|
|
377230
|
+
if (current.lastReleaseNotesSeen === "1.33.0") {
|
|
377131
377231
|
return current;
|
|
377132
377232
|
}
|
|
377133
377233
|
return {
|
|
377134
377234
|
...current,
|
|
377135
|
-
lastReleaseNotesSeen: "1.
|
|
377235
|
+
lastReleaseNotesSeen: "1.33.0"
|
|
377136
377236
|
};
|
|
377137
377237
|
}
|
|
377138
377238
|
function _temp243(s_0) {
|
|
@@ -394365,8 +394465,10 @@ async function connectProvider(provider, keyFlag) {
|
|
|
394365
394465
|
if (alias === "provider") {
|
|
394366
394466
|
return `No official login is configured for ${provider}.`;
|
|
394367
394467
|
}
|
|
394468
|
+
const enabled = enableExternalBridge(provider);
|
|
394368
394469
|
const result = await launchProviderAuth(alias);
|
|
394369
|
-
return result.message
|
|
394470
|
+
return `${result.message}
|
|
394471
|
+
${enabled.message} It will run via the official ${def2.displayName} CLI.`;
|
|
394370
394472
|
}
|
|
394371
394473
|
if (def2.envKey) {
|
|
394372
394474
|
const key = keyFlag ?? await readStdinKey();
|
|
@@ -593026,7 +593128,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
|
|
|
593026
593128
|
smapsRollup,
|
|
593027
593129
|
platform: process.platform,
|
|
593028
593130
|
nodeVersion: process.version,
|
|
593029
|
-
ccVersion: "1.
|
|
593131
|
+
ccVersion: "1.33.0"
|
|
593030
593132
|
};
|
|
593031
593133
|
}
|
|
593032
593134
|
async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
|
|
@@ -593612,7 +593714,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
593612
593714
|
var call137 = async () => {
|
|
593613
593715
|
return {
|
|
593614
593716
|
type: "text",
|
|
593615
|
-
value: "1.
|
|
593717
|
+
value: "1.33.0"
|
|
593616
593718
|
};
|
|
593617
593719
|
}, version2, version_default;
|
|
593618
593720
|
var init_version = __esm(() => {
|
|
@@ -596492,6 +596594,9 @@ function ProviderFirstModelPicker({
|
|
|
596492
596594
|
const [modelSource, setModelSource] = import_react188.useState("static");
|
|
596493
596595
|
const [modelWarning, setModelWarning] = import_react188.useState(null);
|
|
596494
596596
|
const [providerWarning, setProviderWarning] = import_react188.useState(null);
|
|
596597
|
+
const [connectingProvider, setConnectingProvider] = import_react188.useState(null);
|
|
596598
|
+
const [apiKeyInput, setApiKeyInput] = import_react188.useState("");
|
|
596599
|
+
const [connectError, setConnectError] = import_react188.useState(null);
|
|
596495
596600
|
const effortValue = useAppState(selectEffortValue2);
|
|
596496
596601
|
const [effort] = import_react188.useState(effortValue !== undefined ? convertEffortValueToLevel(effortValue) : undefined);
|
|
596497
596602
|
const appThinkingEnabled = useAppState(selectThinkingEnabled2);
|
|
@@ -596500,7 +596605,7 @@ function ProviderFirstModelPicker({
|
|
|
596500
596605
|
import_react188.useEffect(() => {
|
|
596501
596606
|
async function loadProviderStatus() {
|
|
596502
596607
|
setLoadingProviders(true);
|
|
596503
|
-
const providers = listProviders();
|
|
596608
|
+
const providers = listProviders({ includeExternalAppBridges: true });
|
|
596504
596609
|
const settings = getSettingsForSource("userSettings");
|
|
596505
596610
|
const options2 = await Promise.all(providers.map(async (provider) => {
|
|
596506
596611
|
const status2 = await getProviderStatus(provider.id, {
|
|
@@ -596577,6 +596682,13 @@ function ProviderFirstModelPicker({
|
|
|
596577
596682
|
return;
|
|
596578
596683
|
}
|
|
596579
596684
|
if (provider.status !== "connected") {
|
|
596685
|
+
if (provider.credentialType === "api-key") {
|
|
596686
|
+
setConnectingProvider(provider);
|
|
596687
|
+
setApiKeyInput("");
|
|
596688
|
+
setConnectError(null);
|
|
596689
|
+
setStep("connect");
|
|
596690
|
+
return;
|
|
596691
|
+
}
|
|
596580
596692
|
setProviderWarning(`Provider "${provider.value}" is ${provider.status}: ${provider.statusLabel}. Run \`ur provider doctor ${provider.value}\`, or choose a connected API/local/server provider.`);
|
|
596581
596693
|
return;
|
|
596582
596694
|
}
|
|
@@ -596653,6 +596765,105 @@ function ProviderFirstModelPicker({
|
|
|
596653
596765
|
setModelOptions([]);
|
|
596654
596766
|
setModelWarning(null);
|
|
596655
596767
|
}
|
|
596768
|
+
function handleKeySubmit() {
|
|
596769
|
+
if (!connectingProvider)
|
|
596770
|
+
return;
|
|
596771
|
+
const key = apiKeyInput.trim();
|
|
596772
|
+
if (!key) {
|
|
596773
|
+
setConnectError("Enter your API key (or press Esc to go back).");
|
|
596774
|
+
return;
|
|
596775
|
+
}
|
|
596776
|
+
const saved = setProviderApiKey(connectingProvider.value, key);
|
|
596777
|
+
if (!saved.ok) {
|
|
596778
|
+
setConnectError(saved.message);
|
|
596779
|
+
return;
|
|
596780
|
+
}
|
|
596781
|
+
setApiKeyInput("");
|
|
596782
|
+
setConnectError(null);
|
|
596783
|
+
setSelectedProvider(connectingProvider);
|
|
596784
|
+
setStep("model");
|
|
596785
|
+
}
|
|
596786
|
+
function handleKeyCancel() {
|
|
596787
|
+
setApiKeyInput("");
|
|
596788
|
+
setConnectingProvider(null);
|
|
596789
|
+
setConnectError(null);
|
|
596790
|
+
setStep("provider");
|
|
596791
|
+
}
|
|
596792
|
+
if (step === "connect" && connectingProvider) {
|
|
596793
|
+
const envKey = connectingProvider.provider.envKey;
|
|
596794
|
+
const content2 = /* @__PURE__ */ jsx_dev_runtime346.jsxDEV(ThemedBox_default, {
|
|
596795
|
+
flexDirection: "column",
|
|
596796
|
+
children: [
|
|
596797
|
+
/* @__PURE__ */ jsx_dev_runtime346.jsxDEV(ThemedBox_default, {
|
|
596798
|
+
marginBottom: 1,
|
|
596799
|
+
flexDirection: "column",
|
|
596800
|
+
children: [
|
|
596801
|
+
/* @__PURE__ */ jsx_dev_runtime346.jsxDEV(ThemedText, {
|
|
596802
|
+
color: "remember",
|
|
596803
|
+
bold: true,
|
|
596804
|
+
children: [
|
|
596805
|
+
"Connect ",
|
|
596806
|
+
connectingProvider.label
|
|
596807
|
+
]
|
|
596808
|
+
}, undefined, true, undefined, this),
|
|
596809
|
+
/* @__PURE__ */ jsx_dev_runtime346.jsxDEV(ThemedText, {
|
|
596810
|
+
dimColor: true,
|
|
596811
|
+
children: "Paste your API key to use your own account. It is stored securely in your OS keychain and reused automatically \u2014 you only do this once."
|
|
596812
|
+
}, undefined, false, undefined, this),
|
|
596813
|
+
envKey && /* @__PURE__ */ jsx_dev_runtime346.jsxDEV(ThemedText, {
|
|
596814
|
+
dimColor: true,
|
|
596815
|
+
color: "subtle",
|
|
596816
|
+
children: [
|
|
596817
|
+
"Equivalent to setting ",
|
|
596818
|
+
envKey,
|
|
596819
|
+
". Get a key from the provider's dashboard."
|
|
596820
|
+
]
|
|
596821
|
+
}, undefined, true, undefined, this)
|
|
596822
|
+
]
|
|
596823
|
+
}, undefined, true, undefined, this),
|
|
596824
|
+
/* @__PURE__ */ jsx_dev_runtime346.jsxDEV(ThemedBox_default, {
|
|
596825
|
+
children: [
|
|
596826
|
+
/* @__PURE__ */ jsx_dev_runtime346.jsxDEV(ThemedText, {
|
|
596827
|
+
children: "API key: "
|
|
596828
|
+
}, undefined, false, undefined, this),
|
|
596829
|
+
/* @__PURE__ */ jsx_dev_runtime346.jsxDEV(TextInput, {
|
|
596830
|
+
value: apiKeyInput,
|
|
596831
|
+
onChange: setApiKeyInput,
|
|
596832
|
+
onSubmit: handleKeySubmit,
|
|
596833
|
+
mask: "*",
|
|
596834
|
+
placeholder: "paste key, then Enter"
|
|
596835
|
+
}, undefined, false, undefined, this)
|
|
596836
|
+
]
|
|
596837
|
+
}, undefined, true, undefined, this),
|
|
596838
|
+
connectError && /* @__PURE__ */ jsx_dev_runtime346.jsxDEV(ThemedBox_default, {
|
|
596839
|
+
marginTop: 1,
|
|
596840
|
+
children: /* @__PURE__ */ jsx_dev_runtime346.jsxDEV(ThemedText, {
|
|
596841
|
+
color: "error",
|
|
596842
|
+
children: connectError
|
|
596843
|
+
}, undefined, false, undefined, this)
|
|
596844
|
+
}, undefined, false, undefined, this),
|
|
596845
|
+
/* @__PURE__ */ jsx_dev_runtime346.jsxDEV(ThemedBox_default, {
|
|
596846
|
+
marginTop: 1,
|
|
596847
|
+
children: /* @__PURE__ */ jsx_dev_runtime346.jsxDEV(Byline, {
|
|
596848
|
+
children: [
|
|
596849
|
+
/* @__PURE__ */ jsx_dev_runtime346.jsxDEV(KeyboardShortcutHint, {
|
|
596850
|
+
shortcut: "Enter",
|
|
596851
|
+
action: "store key & load models"
|
|
596852
|
+
}, undefined, false, undefined, this),
|
|
596853
|
+
/* @__PURE__ */ jsx_dev_runtime346.jsxDEV(KeyboardShortcutHint, {
|
|
596854
|
+
shortcut: "Esc",
|
|
596855
|
+
action: "back"
|
|
596856
|
+
}, undefined, false, undefined, this)
|
|
596857
|
+
]
|
|
596858
|
+
}, undefined, true, undefined, this)
|
|
596859
|
+
}, undefined, false, undefined, this)
|
|
596860
|
+
]
|
|
596861
|
+
}, undefined, true, undefined, this);
|
|
596862
|
+
return isStandaloneCommand ? /* @__PURE__ */ jsx_dev_runtime346.jsxDEV(Pane, {
|
|
596863
|
+
color: "permission",
|
|
596864
|
+
children: content2
|
|
596865
|
+
}, undefined, false, undefined, this) : content2;
|
|
596866
|
+
}
|
|
596656
596867
|
if (step === "provider") {
|
|
596657
596868
|
const content2 = /* @__PURE__ */ jsx_dev_runtime346.jsxDEV(ThemedBox_default, {
|
|
596658
596869
|
flexDirection: "column",
|
|
@@ -596954,12 +597165,14 @@ var import_react188, jsx_dev_runtime346, selectCurrentProvider = (s) => s.provid
|
|
|
596954
597165
|
var init_ProviderFirstModelPicker = __esm(() => {
|
|
596955
597166
|
init_analytics();
|
|
596956
597167
|
init_providerRegistry();
|
|
597168
|
+
init_providerCredentials();
|
|
596957
597169
|
init_AppState();
|
|
596958
597170
|
init_settings2();
|
|
596959
597171
|
init_ink2();
|
|
596960
597172
|
init_AppState();
|
|
596961
597173
|
init_ConfigurableShortcutHint();
|
|
596962
597174
|
init_CustomSelect();
|
|
597175
|
+
init_TextInput();
|
|
596963
597176
|
init_Byline();
|
|
596964
597177
|
init_KeyboardShortcutHint();
|
|
596965
597178
|
init_Pane();
|
|
@@ -603567,7 +603780,7 @@ function generateHtmlReport(data, insights) {
|
|
|
603567
603780
|
</html>`;
|
|
603568
603781
|
}
|
|
603569
603782
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
603570
|
-
const version3 = typeof MACRO !== "undefined" ? "1.
|
|
603783
|
+
const version3 = typeof MACRO !== "undefined" ? "1.33.0" : "unknown";
|
|
603571
603784
|
const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
|
|
603572
603785
|
const facets_summary = {
|
|
603573
603786
|
total: facets.size,
|
|
@@ -607847,7 +608060,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
607847
608060
|
init_settings2();
|
|
607848
608061
|
init_slowOperations();
|
|
607849
608062
|
init_uuid();
|
|
607850
|
-
VERSION5 = typeof MACRO !== "undefined" ? "1.
|
|
608063
|
+
VERSION5 = typeof MACRO !== "undefined" ? "1.33.0" : "unknown";
|
|
607851
608064
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
607852
608065
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
607853
608066
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -609052,7 +609265,7 @@ var init_filesystem = __esm(() => {
|
|
|
609052
609265
|
});
|
|
609053
609266
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
609054
609267
|
const nonce = randomBytes18(16).toString("hex");
|
|
609055
|
-
return join200(getURTempDir(), "bundled-skills", "1.
|
|
609268
|
+
return join200(getURTempDir(), "bundled-skills", "1.33.0", nonce);
|
|
609056
609269
|
});
|
|
609057
609270
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
609058
609271
|
});
|
|
@@ -615341,7 +615554,7 @@ function computeFingerprint(messageText2, version3) {
|
|
|
615341
615554
|
}
|
|
615342
615555
|
function computeFingerprintFromMessages(messages) {
|
|
615343
615556
|
const firstMessageText = extractFirstMessageText(messages);
|
|
615344
|
-
return computeFingerprint(firstMessageText, "1.
|
|
615557
|
+
return computeFingerprint(firstMessageText, "1.33.0");
|
|
615345
615558
|
}
|
|
615346
615559
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
615347
615560
|
var init_fingerprint = () => {};
|
|
@@ -617208,7 +617421,7 @@ async function sideQuery(opts) {
|
|
|
617208
617421
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
617209
617422
|
}
|
|
617210
617423
|
const messageText2 = extractFirstUserMessageText(messages);
|
|
617211
|
-
const fingerprint = computeFingerprint(messageText2, "1.
|
|
617424
|
+
const fingerprint = computeFingerprint(messageText2, "1.33.0");
|
|
617212
617425
|
const attributionHeader = getAttributionHeader(fingerprint);
|
|
617213
617426
|
const systemBlocks = [
|
|
617214
617427
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -621945,7 +622158,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
621945
622158
|
slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
|
|
621946
622159
|
apiKeySource: getURHQApiKeyWithSource().source,
|
|
621947
622160
|
betas: getSdkBetas(),
|
|
621948
|
-
ur_version: "1.
|
|
622161
|
+
ur_version: "1.33.0",
|
|
621949
622162
|
output_style: outputStyle2,
|
|
621950
622163
|
agents: inputs.agents.map((agent) => agent.agentType),
|
|
621951
622164
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
|
|
@@ -636573,7 +636786,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
636573
636786
|
function getSemverPart(version3) {
|
|
636574
636787
|
return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
|
|
636575
636788
|
}
|
|
636576
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.
|
|
636789
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.33.0") {
|
|
636577
636790
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react226.useState(() => getSemverPart(initialVersion));
|
|
636578
636791
|
if (!updatedVersion) {
|
|
636579
636792
|
return null;
|
|
@@ -636622,7 +636835,7 @@ function AutoUpdater({
|
|
|
636622
636835
|
return;
|
|
636623
636836
|
}
|
|
636624
636837
|
if (false) {}
|
|
636625
|
-
const currentVersion = "1.
|
|
636838
|
+
const currentVersion = "1.33.0";
|
|
636626
636839
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
636627
636840
|
let latestVersion = await getLatestVersion(channel);
|
|
636628
636841
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -636851,12 +637064,12 @@ function NativeAutoUpdater({
|
|
|
636851
637064
|
logEvent("tengu_native_auto_updater_start", {});
|
|
636852
637065
|
try {
|
|
636853
637066
|
const maxVersion = await getMaxVersion();
|
|
636854
|
-
if (maxVersion && gt("1.
|
|
637067
|
+
if (maxVersion && gt("1.33.0", maxVersion)) {
|
|
636855
637068
|
const msg = await getMaxVersionMessage();
|
|
636856
637069
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
636857
637070
|
}
|
|
636858
637071
|
const result = await installLatest(channel);
|
|
636859
|
-
const currentVersion = "1.
|
|
637072
|
+
const currentVersion = "1.33.0";
|
|
636860
637073
|
const latencyMs = Date.now() - startTime;
|
|
636861
637074
|
if (result.lockFailed) {
|
|
636862
637075
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -636993,17 +637206,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
636993
637206
|
const maxVersion = await getMaxVersion();
|
|
636994
637207
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
636995
637208
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
636996
|
-
if (gte("1.
|
|
636997
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.
|
|
637209
|
+
if (gte("1.33.0", maxVersion)) {
|
|
637210
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.33.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
636998
637211
|
setUpdateAvailable(false);
|
|
636999
637212
|
return;
|
|
637000
637213
|
}
|
|
637001
637214
|
latest = maxVersion;
|
|
637002
637215
|
}
|
|
637003
|
-
const hasUpdate = latest && !gte("1.
|
|
637216
|
+
const hasUpdate = latest && !gte("1.33.0", latest) && !shouldSkipVersion(latest);
|
|
637004
637217
|
setUpdateAvailable(!!hasUpdate);
|
|
637005
637218
|
if (hasUpdate) {
|
|
637006
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.
|
|
637219
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.33.0"} -> ${latest}`);
|
|
637007
637220
|
}
|
|
637008
637221
|
};
|
|
637009
637222
|
$3[0] = t1;
|
|
@@ -637037,7 +637250,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
637037
637250
|
wrap: "truncate",
|
|
637038
637251
|
children: [
|
|
637039
637252
|
"currentVersion: ",
|
|
637040
|
-
"1.
|
|
637253
|
+
"1.33.0"
|
|
637041
637254
|
]
|
|
637042
637255
|
}, undefined, true, undefined, this);
|
|
637043
637256
|
$3[3] = verbose;
|
|
@@ -649488,7 +649701,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
649488
649701
|
project_dir: getOriginalCwd(),
|
|
649489
649702
|
added_dirs: addedDirs
|
|
649490
649703
|
},
|
|
649491
|
-
version: "1.
|
|
649704
|
+
version: "1.33.0",
|
|
649492
649705
|
output_style: {
|
|
649493
649706
|
name: outputStyleName
|
|
649494
649707
|
},
|
|
@@ -649571,7 +649784,7 @@ function StatusLineInner({
|
|
|
649571
649784
|
const taskValues = Object.values(tasks2);
|
|
649572
649785
|
const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
|
|
649573
649786
|
const defaultStatusLineText = buildDefaultStatusBar({
|
|
649574
|
-
version: "1.
|
|
649787
|
+
version: "1.33.0",
|
|
649575
649788
|
providerLabel: providerRuntime.providerLabel,
|
|
649576
649789
|
authMode: providerRuntime.authLabel,
|
|
649577
649790
|
model: providerRuntime.model ?? renderModelName(mainLoopModel),
|
|
@@ -661059,7 +661272,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
|
|
|
661059
661272
|
} catch {}
|
|
661060
661273
|
const data = {
|
|
661061
661274
|
trigger: trigger2,
|
|
661062
|
-
version: "1.
|
|
661275
|
+
version: "1.33.0",
|
|
661063
661276
|
platform: process.platform,
|
|
661064
661277
|
transcript,
|
|
661065
661278
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -672943,7 +673156,7 @@ function WelcomeV2() {
|
|
|
672943
673156
|
dimColor: true,
|
|
672944
673157
|
children: [
|
|
672945
673158
|
"v",
|
|
672946
|
-
"1.
|
|
673159
|
+
"1.33.0"
|
|
672947
673160
|
]
|
|
672948
673161
|
}, undefined, true, undefined, this)
|
|
672949
673162
|
]
|
|
@@ -674203,7 +674416,7 @@ function completeOnboarding() {
|
|
|
674203
674416
|
saveGlobalConfig((current) => ({
|
|
674204
674417
|
...current,
|
|
674205
674418
|
hasCompletedOnboarding: true,
|
|
674206
|
-
lastOnboardingVersion: "1.
|
|
674419
|
+
lastOnboardingVersion: "1.33.0"
|
|
674207
674420
|
}));
|
|
674208
674421
|
}
|
|
674209
674422
|
function showDialog(root2, renderer) {
|
|
@@ -679240,7 +679453,7 @@ function appendToLog(path24, message) {
|
|
|
679240
679453
|
cwd: getFsImplementation().cwd(),
|
|
679241
679454
|
userType: process.env.USER_TYPE,
|
|
679242
679455
|
sessionId: getSessionId(),
|
|
679243
|
-
version: "1.
|
|
679456
|
+
version: "1.33.0"
|
|
679244
679457
|
};
|
|
679245
679458
|
getLogWriter(path24).write(messageWithTimestamp);
|
|
679246
679459
|
}
|
|
@@ -683334,8 +683547,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
683334
683547
|
}
|
|
683335
683548
|
async function checkEnvLessBridgeMinVersion() {
|
|
683336
683549
|
const cfg = await getEnvLessBridgeConfig();
|
|
683337
|
-
if (cfg.min_version && lt("1.
|
|
683338
|
-
return `Your version of UR (${"1.
|
|
683550
|
+
if (cfg.min_version && lt("1.33.0", cfg.min_version)) {
|
|
683551
|
+
return `Your version of UR (${"1.33.0"}) is too old for Remote Control.
|
|
683339
683552
|
Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
|
|
683340
683553
|
}
|
|
683341
683554
|
return null;
|
|
@@ -683809,7 +684022,7 @@ async function initBridgeCore(params) {
|
|
|
683809
684022
|
const rawApi = createBridgeApiClient({
|
|
683810
684023
|
baseUrl,
|
|
683811
684024
|
getAccessToken,
|
|
683812
|
-
runnerVersion: "1.
|
|
684025
|
+
runnerVersion: "1.33.0",
|
|
683813
684026
|
onDebug: logForDebugging,
|
|
683814
684027
|
onAuth401,
|
|
683815
684028
|
getTrustedDeviceToken
|
|
@@ -689491,7 +689704,7 @@ async function startMCPServer(cwd3, debug2, verbose) {
|
|
|
689491
689704
|
setCwd(cwd3);
|
|
689492
689705
|
const server2 = new Server({
|
|
689493
689706
|
name: "ur/tengu",
|
|
689494
|
-
version: "1.
|
|
689707
|
+
version: "1.33.0"
|
|
689495
689708
|
}, {
|
|
689496
689709
|
capabilities: {
|
|
689497
689710
|
tools: {}
|
|
@@ -691468,7 +691681,7 @@ async function update() {
|
|
|
691468
691681
|
logEvent("tengu_update_check", {});
|
|
691469
691682
|
const diagnostic = await getDoctorDiagnostic();
|
|
691470
691683
|
const result = await checkUpgradeStatus({
|
|
691471
|
-
currentVersion: "1.
|
|
691684
|
+
currentVersion: "1.33.0",
|
|
691472
691685
|
packageName: UR_AGENT_PACKAGE_NAME,
|
|
691473
691686
|
installationType: diagnostic.installationType,
|
|
691474
691687
|
latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
|
|
@@ -692714,7 +692927,7 @@ ${customInstructions}` : customInstructions;
|
|
|
692714
692927
|
}
|
|
692715
692928
|
}
|
|
692716
692929
|
logForDiagnosticsNoPII("info", "started", {
|
|
692717
|
-
version: "1.
|
|
692930
|
+
version: "1.33.0",
|
|
692718
692931
|
is_native_binary: isInBundledMode()
|
|
692719
692932
|
});
|
|
692720
692933
|
registerCleanup(async () => {
|
|
@@ -693500,7 +693713,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
693500
693713
|
pendingHookMessages
|
|
693501
693714
|
}, renderAndRun);
|
|
693502
693715
|
}
|
|
693503
|
-
}).version("1.
|
|
693716
|
+
}).version("1.33.0 (UR-AGENT)", "-v, --version", "Output the version number");
|
|
693504
693717
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
693505
693718
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
693506
693719
|
if (canUserConfigureAdvisor()) {
|
|
@@ -694383,7 +694596,7 @@ if (false) {}
|
|
|
694383
694596
|
async function main2() {
|
|
694384
694597
|
const args = process.argv.slice(2);
|
|
694385
694598
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
694386
|
-
console.log(`${"1.
|
|
694599
|
+
console.log(`${"1.33.0"} (UR-AGENT)`);
|
|
694387
694600
|
return;
|
|
694388
694601
|
}
|
|
694389
694602
|
if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
|
package/docs/providers.md
CHANGED
|
@@ -163,10 +163,10 @@ ur config set provider anthropic-api
|
|
|
163
163
|
|
|
164
164
|
| Provider type | Model discovery | Source label |
|
|
165
165
|
| --- | --- | --- |
|
|
166
|
-
| API providers (openai-api, anthropic-api, gemini-api, openrouter) |
|
|
166
|
+
| API providers (openai-api, anthropic-api, gemini-api, openrouter) | Live discovery from the provider's `/models` endpoint using your connected key (curated fallback until connected) | live |
|
|
167
167
|
| Local/server providers (ollama, lmstudio, llama.cpp, vllm) | Dynamic discovery from the selected provider endpoint | live |
|
|
168
168
|
| OpenAI-compatible | Dynamic discovery from configured endpoint | live |
|
|
169
|
-
|
|
|
169
|
+
| Subscription CLIs (codex-cli, claude-code-cli, gemini-cli, antigravity-cli) | Curated list (the official CLIs expose no models API); shown in `/model`, enabled once you `ur connect` them | static |
|
|
170
170
|
|
|
171
171
|
### API vs Subscription distinction
|
|
172
172
|
|
package/package.json
CHANGED