@verboo/code 0.13.0 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.mjs +354 -120
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -135919,6 +135919,7 @@ __export(exports_client, {
|
|
|
135919
135919
|
storeOAuthAccountInfo: () => storeOAuthAccountInfo,
|
|
135920
135920
|
shouldUseClaudeAIAuth: () => shouldUseClaudeAIAuth,
|
|
135921
135921
|
shouldRefreshOAuthAccountInfo: () => shouldRefreshOAuthAccountInfo,
|
|
135922
|
+
revokeVerbooRefreshToken: () => revokeVerbooRefreshToken,
|
|
135922
135923
|
refreshOAuthToken: () => refreshOAuthToken,
|
|
135923
135924
|
populateOAuthAccountInfoIfNeeded: () => populateOAuthAccountInfoIfNeeded,
|
|
135924
135925
|
parseScopes: () => parseScopes,
|
|
@@ -136092,6 +136093,24 @@ async function refreshOAuthToken(refreshToken, { scopes: requestedScopes } = {})
|
|
|
136092
136093
|
throw error41;
|
|
136093
136094
|
}
|
|
136094
136095
|
}
|
|
136096
|
+
async function revokeVerbooRefreshToken(refreshToken) {
|
|
136097
|
+
const form = new URLSearchParams({
|
|
136098
|
+
token: refreshToken,
|
|
136099
|
+
token_type_hint: "refresh_token",
|
|
136100
|
+
client_id: getOauthConfig().CLIENT_ID
|
|
136101
|
+
});
|
|
136102
|
+
try {
|
|
136103
|
+
await axios_default.post(`${getOauthConfig().BASE_API_URL}/oauth/revoke`, form, {
|
|
136104
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
136105
|
+
timeout: 5000
|
|
136106
|
+
});
|
|
136107
|
+
logEvent("verboo_oauth_refresh_token_revocation_success", {});
|
|
136108
|
+
return true;
|
|
136109
|
+
} catch {
|
|
136110
|
+
logEvent("verboo_oauth_refresh_token_revocation_unconfirmed", {});
|
|
136111
|
+
return false;
|
|
136112
|
+
}
|
|
136113
|
+
}
|
|
136095
136114
|
async function fetchAndStoreUserRoles(accessToken) {
|
|
136096
136115
|
if (isVerbooMode()) {
|
|
136097
136116
|
return;
|
|
@@ -136601,7 +136620,10 @@ async function fetchVerbooModels(accessToken, opts = {}) {
|
|
|
136601
136620
|
logForDebugging(msg);
|
|
136602
136621
|
process.stderr.write(msg + `
|
|
136603
136622
|
`);
|
|
136604
|
-
|
|
136623
|
+
if (cache2 && cache2.models.length > 0) {
|
|
136624
|
+
return cache2.models;
|
|
136625
|
+
}
|
|
136626
|
+
throw error41;
|
|
136605
136627
|
} finally {
|
|
136606
136628
|
inflight = null;
|
|
136607
136629
|
}
|
|
@@ -169728,7 +169750,7 @@ function getClaudeCodeUserAgent() {
|
|
|
169728
169750
|
return `claude-code/${"99.0.0"}`;
|
|
169729
169751
|
}
|
|
169730
169752
|
function getVerbooCodeUserAgent() {
|
|
169731
|
-
const version2 = typeof MACRO !== "undefined" ? "0.13.
|
|
169753
|
+
const version2 = typeof MACRO !== "undefined" ? "0.13.2" : "unknown";
|
|
169732
169754
|
return `verboo-code/${version2}`;
|
|
169733
169755
|
}
|
|
169734
169756
|
|
|
@@ -173021,7 +173043,9 @@ function convertTools(tools, options2 = {}) {
|
|
|
173021
173043
|
const isGemini = isGeminiMode();
|
|
173022
173044
|
const strict = !isGemini && !isEnvTruthy(process.env.VERBOO_DISABLE_STRICT_TOOLS ?? process.env.OPENCLAUDE_DISABLE_STRICT_TOOLS) && !options2.skipStrict;
|
|
173023
173045
|
return tools.filter((t) => t.name !== "ToolSearchTool").map((t) => {
|
|
173024
|
-
const schema = {
|
|
173046
|
+
const schema = {
|
|
173047
|
+
...t.input_schema ?? { type: "object", properties: {} }
|
|
173048
|
+
};
|
|
173025
173049
|
if (t.name === "Agent" && schema.properties) {
|
|
173026
173050
|
const props = schema.properties;
|
|
173027
173051
|
if (!Array.isArray(schema.required))
|
|
@@ -173231,7 +173255,10 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
173231
173255
|
yield {
|
|
173232
173256
|
type: "content_block_delta",
|
|
173233
173257
|
index: hasClosedThinking ? contentBlockIndex - 1 : contentBlockIndex,
|
|
173234
|
-
delta: {
|
|
173258
|
+
delta: {
|
|
173259
|
+
type: "thinking_delta",
|
|
173260
|
+
thinking: delta.reasoning_content
|
|
173261
|
+
}
|
|
173235
173262
|
};
|
|
173236
173263
|
}
|
|
173237
173264
|
if (delta.content != null && delta.content !== "") {
|
|
@@ -173262,7 +173289,10 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
173262
173289
|
for (const tc of delta.tool_calls) {
|
|
173263
173290
|
if (tc.id && tc.function?.name) {
|
|
173264
173291
|
if (hasEmittedThinkingStart && !hasClosedThinking) {
|
|
173265
|
-
yield {
|
|
173292
|
+
yield {
|
|
173293
|
+
type: "content_block_stop",
|
|
173294
|
+
index: contentBlockIndex
|
|
173295
|
+
};
|
|
173266
173296
|
contentBlockIndex++;
|
|
173267
173297
|
hasClosedThinking = true;
|
|
173268
173298
|
}
|
|
@@ -173315,7 +173345,10 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
173315
173345
|
const contSig = tc.thought_signature;
|
|
173316
173346
|
const contEC = tc.extra_content ? { ...tc.extra_content } : contSig ? { google: { thought_signature: contSig } } : undefined;
|
|
173317
173347
|
if (contEC) {
|
|
173318
|
-
active.extra_content = {
|
|
173348
|
+
active.extra_content = {
|
|
173349
|
+
...active.extra_content ?? {},
|
|
173350
|
+
...contEC
|
|
173351
|
+
};
|
|
173319
173352
|
}
|
|
173320
173353
|
if (active.normalizeAtStop) {
|
|
173321
173354
|
continue;
|
|
@@ -173335,7 +173368,10 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
173335
173368
|
const lateSig = tc.thought_signature;
|
|
173336
173369
|
const lateEC = tc.extra_content ? { ...tc.extra_content } : lateSig ? { google: { thought_signature: lateSig } } : undefined;
|
|
173337
173370
|
if (lateEC) {
|
|
173338
|
-
active.extra_content = {
|
|
173371
|
+
active.extra_content = {
|
|
173372
|
+
...active.extra_content ?? {},
|
|
173373
|
+
...lateEC
|
|
173374
|
+
};
|
|
173339
173375
|
}
|
|
173340
173376
|
}
|
|
173341
173377
|
}
|
|
@@ -173362,7 +173398,9 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
173362
173398
|
name: tc.name,
|
|
173363
173399
|
input: {},
|
|
173364
173400
|
extra_content: tc.extra_content,
|
|
173365
|
-
...tc.extra_content.google?.thought_signature ? {
|
|
173401
|
+
...tc.extra_content.google?.thought_signature ? {
|
|
173402
|
+
signature: tc.extra_content.google.thought_signature
|
|
173403
|
+
} : {}
|
|
173366
173404
|
}
|
|
173367
173405
|
};
|
|
173368
173406
|
}
|
|
@@ -173429,9 +173467,12 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
173429
173467
|
yield {
|
|
173430
173468
|
type: "content_block_delta",
|
|
173431
173469
|
index: contentBlockIndex,
|
|
173432
|
-
delta: {
|
|
173470
|
+
delta: {
|
|
173471
|
+
type: "text_delta",
|
|
173472
|
+
text: `
|
|
173433
173473
|
|
|
173434
|
-
[Content blocked by provider safety filter]`
|
|
173474
|
+
[Content blocked by provider safety filter]`
|
|
173475
|
+
}
|
|
173435
173476
|
};
|
|
173436
173477
|
} else if (choice.finish_reason === "length") {
|
|
173437
173478
|
if (!hasEmittedContentStart) {
|
|
@@ -173445,9 +173486,12 @@ async function* openaiStreamToAnthropic(response, model2, signal) {
|
|
|
173445
173486
|
yield {
|
|
173446
173487
|
type: "content_block_delta",
|
|
173447
173488
|
index: contentBlockIndex,
|
|
173448
|
-
delta: {
|
|
173489
|
+
delta: {
|
|
173490
|
+
type: "text_delta",
|
|
173491
|
+
text: `
|
|
173449
173492
|
|
|
173450
|
-
[Response truncated — reached length limit or upstream stalled. Ask the model to continue.]`
|
|
173493
|
+
[Response truncated — reached length limit or upstream stalled. Ask the model to continue.]`
|
|
173494
|
+
}
|
|
173451
173495
|
};
|
|
173452
173496
|
}
|
|
173453
173497
|
lastStopReason = stopReason;
|
|
@@ -173756,11 +173800,33 @@ class OpenAIShimMessages {
|
|
|
173756
173800
|
baseUrl: request.baseUrl,
|
|
173757
173801
|
processEnv: process.env
|
|
173758
173802
|
});
|
|
173759
|
-
const
|
|
173803
|
+
const getApiKey = () => this.providerOverride?.getApiKey?.() ?? this.providerOverride?.apiKey ?? routeCredential ?? process.env.OPENAI_API_KEY ?? "";
|
|
173760
173804
|
const configuredAuthHeaderValue = process.env.OPENAI_AUTH_HEADER_VALUE?.trim();
|
|
173761
173805
|
const customAuthHeader = process.env.OPENAI_AUTH_HEADER?.trim();
|
|
173762
173806
|
const hasCustomAuthHeader = Boolean(customAuthHeader && /^[A-Za-z0-9!#$%&'*+.^_`|~-]+$/.test(customAuthHeader));
|
|
173763
|
-
const
|
|
173807
|
+
const applyAuthHeader = () => {
|
|
173808
|
+
const apiKey = getApiKey();
|
|
173809
|
+
const authValue = hasCustomAuthHeader ? configuredAuthHeaderValue || apiKey : apiKey;
|
|
173810
|
+
delete headers.Authorization;
|
|
173811
|
+
if (hasCustomAuthHeader && customAuthHeader) {
|
|
173812
|
+
delete headers[customAuthHeader];
|
|
173813
|
+
}
|
|
173814
|
+
if (authValue) {
|
|
173815
|
+
if (hasCustomAuthHeader && customAuthHeader) {
|
|
173816
|
+
const defaultCustomAuthScheme = customAuthHeader.toLowerCase() === "authorization" ? "bearer" : "raw";
|
|
173817
|
+
const customAuthScheme = process.env.OPENAI_AUTH_SCHEME === "raw" || process.env.OPENAI_AUTH_SCHEME === "bearer" ? process.env.OPENAI_AUTH_SCHEME : defaultCustomAuthScheme;
|
|
173818
|
+
headers[customAuthHeader] = customAuthScheme === "bearer" ? `Bearer ${authValue}` : authValue;
|
|
173819
|
+
} else if (isAzure) {
|
|
173820
|
+
headers["api-key"] = authValue;
|
|
173821
|
+
} else if (isBankr) {
|
|
173822
|
+
headers["X-API-Key"] = authValue;
|
|
173823
|
+
} else if (shimConfig.defaultAuthHeader?.name) {
|
|
173824
|
+
headers[shimConfig.defaultAuthHeader.name] = shimConfig.defaultAuthHeader.scheme === "bearer" ? `Bearer ${authValue}` : authValue;
|
|
173825
|
+
} else {
|
|
173826
|
+
headers.Authorization = `Bearer ${authValue}`;
|
|
173827
|
+
}
|
|
173828
|
+
}
|
|
173829
|
+
};
|
|
173764
173830
|
let isAzure = false;
|
|
173765
173831
|
try {
|
|
173766
173832
|
const { hostname: hostname2 } = new URL(request.baseUrl);
|
|
@@ -173770,21 +173836,8 @@ class OpenAIShimMessages {
|
|
|
173770
173836
|
try {
|
|
173771
173837
|
isBankr = runtimeShimContext.routeId === "bankr" || request.baseUrl.toLowerCase().includes("bankr");
|
|
173772
173838
|
} catch {}
|
|
173773
|
-
|
|
173774
|
-
|
|
173775
|
-
const defaultCustomAuthScheme = customAuthHeader.toLowerCase() === "authorization" ? "bearer" : "raw";
|
|
173776
|
-
const customAuthScheme = process.env.OPENAI_AUTH_SCHEME === "raw" || process.env.OPENAI_AUTH_SCHEME === "bearer" ? process.env.OPENAI_AUTH_SCHEME : defaultCustomAuthScheme;
|
|
173777
|
-
headers[customAuthHeader] = customAuthScheme === "bearer" ? `Bearer ${authValue}` : authValue;
|
|
173778
|
-
} else if (isAzure) {
|
|
173779
|
-
headers["api-key"] = authValue;
|
|
173780
|
-
} else if (isBankr) {
|
|
173781
|
-
headers["X-API-Key"] = authValue;
|
|
173782
|
-
} else if (shimConfig.defaultAuthHeader?.name) {
|
|
173783
|
-
headers[shimConfig.defaultAuthHeader.name] = shimConfig.defaultAuthHeader.scheme === "bearer" ? `Bearer ${authValue}` : authValue;
|
|
173784
|
-
} else {
|
|
173785
|
-
headers.Authorization = `Bearer ${authValue}`;
|
|
173786
|
-
}
|
|
173787
|
-
} else if (isGemini) {
|
|
173839
|
+
applyAuthHeader();
|
|
173840
|
+
if (!getApiKey() && isGemini) {
|
|
173788
173841
|
const geminiCredential = await resolveGeminiCredential(process.env);
|
|
173789
173842
|
if (geminiCredential.kind !== "none") {
|
|
173790
173843
|
headers.Authorization = `Bearer ${geminiCredential.credential}`;
|
|
@@ -173847,7 +173900,7 @@ class OpenAIShimMessages {
|
|
|
173847
173900
|
signal: options2?.signal
|
|
173848
173901
|
});
|
|
173849
173902
|
const maxSelfHealAttempts = isLocal ? localRetryBaseUrls.length + 1 : 0;
|
|
173850
|
-
const maxAttempts = (isGithub ? GITHUB_429_MAX_RETRIES : 1) + maxSelfHealAttempts;
|
|
173903
|
+
const maxAttempts = (isGithub ? GITHUB_429_MAX_RETRIES : 1) + maxSelfHealAttempts + (isVerbooRouterUrl(request.baseUrl) && this.providerOverride?.refreshApiKey ? 1 : 0);
|
|
173851
173904
|
const throwClassifiedTransportError = (error41, requestUrl2, preclassifiedFailure) => {
|
|
173852
173905
|
if (options2?.signal?.aborted) {
|
|
173853
173906
|
throw error41;
|
|
@@ -173866,12 +173919,16 @@ class OpenAIShimMessages {
|
|
|
173866
173919
|
body: errorBody,
|
|
173867
173920
|
url: requestUrl2
|
|
173868
173921
|
});
|
|
173869
|
-
const failureWithUrl = {
|
|
173922
|
+
const failureWithUrl = {
|
|
173923
|
+
...failure,
|
|
173924
|
+
requestUrl: failure.requestUrl ?? requestUrl2
|
|
173925
|
+
};
|
|
173870
173926
|
const redactedUrl = redactUrlForDiagnostics(requestUrl2);
|
|
173871
173927
|
logForDebugging(`[OpenAIShim] request failed category=${failure.category} retryable=${failure.retryable} status=${status} method=POST url=${redactedUrl} model=${request.resolvedModel}`, { level: "warn" });
|
|
173872
173928
|
throw APIError.generate(status, parsedBody, buildOpenAICompatibilityErrorMessage(`OpenAI API error ${status}: ${errorBody}${rateHint}`, failureWithUrl), responseHeaders);
|
|
173873
173929
|
};
|
|
173874
173930
|
let response;
|
|
173931
|
+
let didRetryVerbooAuth = false;
|
|
173875
173932
|
const provider = request.baseUrl.includes("nvidia") ? "nvidia-nim" : request.baseUrl.includes("minimax") ? "minimax" : request.baseUrl.includes("xiaomimimo") || request.baseUrl.includes("mimo-v2") ? "xiaomi-mimo" : request.baseUrl.includes("localhost:11434") || request.baseUrl.includes("localhost:11435") ? "ollama" : request.baseUrl.includes("anthropic") ? "anthropic" : "openai";
|
|
173876
173933
|
const { correlationId, startTime: startTime2 } = logApiCallStart(provider, request.resolvedModel);
|
|
173877
173934
|
for (let attempt = 0;attempt < maxAttempts; attempt++) {
|
|
@@ -173905,6 +173962,16 @@ class OpenAIShimMessages {
|
|
|
173905
173962
|
logApiCallEnd(correlationId, startTime2, request.resolvedModel, "success", tokensIn, tokensOut, Boolean(params.stream));
|
|
173906
173963
|
return response;
|
|
173907
173964
|
}
|
|
173965
|
+
if (!didRetryVerbooAuth && response.status === 401 && isVerbooRouterUrl(request.baseUrl) && this.providerOverride?.refreshApiKey) {
|
|
173966
|
+
didRetryVerbooAuth = true;
|
|
173967
|
+
const failedApiKey = getApiKey();
|
|
173968
|
+
await response.text().catch(() => {});
|
|
173969
|
+
const refreshedApiKey = await this.providerOverride.refreshApiKey(failedApiKey);
|
|
173970
|
+
if (refreshedApiKey) {
|
|
173971
|
+
applyAuthHeader();
|
|
173972
|
+
continue;
|
|
173973
|
+
}
|
|
173974
|
+
}
|
|
173908
173975
|
if (isGithub && response.status === 429 && attempt < maxAttempts - 1) {
|
|
173909
173976
|
await response.text().catch(() => {});
|
|
173910
173977
|
const delaySec = Math.min(GITHUB_429_BASE_DELAY_SEC * 2 ** attempt, GITHUB_429_MAX_DELAY_SEC);
|
|
@@ -187923,7 +187990,7 @@ async function getAnthropicClient({
|
|
|
187923
187990
|
defaultHeaders["x-anthropic-additional-protection"] = "true";
|
|
187924
187991
|
}
|
|
187925
187992
|
const shouldUseFirstPartyAuth = shouldUseFirstPartyAnthropicAuth(providerOverride);
|
|
187926
|
-
if (shouldUseFirstPartyAuth) {
|
|
187993
|
+
if (shouldUseFirstPartyAuth || isVerbooMode()) {
|
|
187927
187994
|
logForDebugging("[API:auth] OAuth token check starting");
|
|
187928
187995
|
await checkAndRefreshOAuthTokenIfNeeded();
|
|
187929
187996
|
logForDebugging("[API:auth] OAuth token check complete");
|
|
@@ -187966,7 +188033,12 @@ async function getAnthropicClient({
|
|
|
187966
188033
|
providerOverride: {
|
|
187967
188034
|
model: safeVerbooModel,
|
|
187968
188035
|
baseURL: VERBOO_ROUTER_URL,
|
|
187969
|
-
apiKey: accessToken ?? ""
|
|
188036
|
+
apiKey: accessToken ?? "",
|
|
188037
|
+
getApiKey: () => getClaudeAIOAuthTokens()?.accessToken ?? "",
|
|
188038
|
+
refreshApiKey: async (failedAccessToken) => {
|
|
188039
|
+
const recovered = await handleOAuth401Error(failedAccessToken);
|
|
188040
|
+
return recovered ? getClaudeAIOAuthTokens()?.accessToken ?? null : null;
|
|
188041
|
+
}
|
|
187970
188042
|
}
|
|
187971
188043
|
});
|
|
187972
188044
|
}
|
|
@@ -281176,6 +281248,22 @@ var init_user = __esm(() => {
|
|
|
281176
281248
|
});
|
|
281177
281249
|
});
|
|
281178
281250
|
|
|
281251
|
+
// src/commands/logout/logoutState.ts
|
|
281252
|
+
function removeStoredVerbooOauth(secureStorage) {
|
|
281253
|
+
const storageData = secureStorage.read() ?? {};
|
|
281254
|
+
const refreshToken = storageData.verbooOauth?.refreshToken ?? null;
|
|
281255
|
+
if (!storageData.verbooOauth) {
|
|
281256
|
+
return refreshToken;
|
|
281257
|
+
}
|
|
281258
|
+
delete storageData.verbooOauth;
|
|
281259
|
+
const isEmpty = Object.keys(storageData).length === 0;
|
|
281260
|
+
const success2 = isEmpty ? secureStorage.delete() : secureStorage.update(storageData).success;
|
|
281261
|
+
if (!success2) {
|
|
281262
|
+
throw new Error("Failed to clear local Verboo credentials");
|
|
281263
|
+
}
|
|
281264
|
+
return refreshToken;
|
|
281265
|
+
}
|
|
281266
|
+
|
|
281179
281267
|
// src/commands/logout/logout.tsx
|
|
281180
281268
|
var exports_logout = {};
|
|
281181
281269
|
__export(exports_logout, {
|
|
@@ -281183,16 +281271,27 @@ __export(exports_logout, {
|
|
|
281183
281271
|
clearAuthRelatedCaches: () => clearAuthRelatedCaches,
|
|
281184
281272
|
call: () => call
|
|
281185
281273
|
});
|
|
281274
|
+
function isExternallyInjectedTokenSource(source) {
|
|
281275
|
+
return [
|
|
281276
|
+
"CLAUDE_CODE_OAUTH_TOKEN",
|
|
281277
|
+
"CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR",
|
|
281278
|
+
"CCR_OAUTH_TOKEN_FILE",
|
|
281279
|
+
"ANTHROPIC_AUTH_TOKEN"
|
|
281280
|
+
].includes(source);
|
|
281281
|
+
}
|
|
281186
281282
|
async function performLogout({
|
|
281187
281283
|
clearOnboarding = false
|
|
281188
281284
|
}) {
|
|
281189
|
-
|
|
281285
|
+
const authTokenSource = getAuthTokenSource().source;
|
|
281286
|
+
const refreshToken = removeStoredVerbooOauth(getSecureStorage());
|
|
281287
|
+
const remoteRevocation = refreshToken ? await revokeVerbooRefreshToken(refreshToken) ? "revoked" : "unconfirmed" : "not_applicable";
|
|
281288
|
+
if (!isVerbooMode()) {
|
|
281289
|
+
await removeApiKey();
|
|
281290
|
+
}
|
|
281190
281291
|
if (isVerbooMode()) {
|
|
281191
281292
|
resetVerbooSessionValidation();
|
|
281192
281293
|
clearVerbooModelsCache();
|
|
281193
281294
|
}
|
|
281194
|
-
const secureStorage = getSecureStorage();
|
|
281195
|
-
secureStorage.delete();
|
|
281196
281295
|
await clearAuthRelatedCaches();
|
|
281197
281296
|
saveGlobalConfig((current) => {
|
|
281198
281297
|
const updated = {
|
|
@@ -281212,6 +281311,11 @@ async function performLogout({
|
|
|
281212
281311
|
updated.oauthAccount = undefined;
|
|
281213
281312
|
return updated;
|
|
281214
281313
|
});
|
|
281314
|
+
return {
|
|
281315
|
+
localCleared: true,
|
|
281316
|
+
remoteRevocation,
|
|
281317
|
+
...isExternallyInjectedTokenSource(authTokenSource) ? { externalTokenSource: authTokenSource } : {}
|
|
281318
|
+
};
|
|
281215
281319
|
}
|
|
281216
281320
|
async function clearAuthRelatedCaches() {
|
|
281217
281321
|
getClaudeAIOAuthTokens.cache?.clear?.();
|
|
@@ -281226,11 +281330,15 @@ async function clearAuthRelatedCaches() {
|
|
|
281226
281330
|
await clearPolicyLimitsCache();
|
|
281227
281331
|
}
|
|
281228
281332
|
async function call() {
|
|
281229
|
-
await performLogout({
|
|
281333
|
+
const result = await performLogout({
|
|
281230
281334
|
clearOnboarding: true
|
|
281231
281335
|
});
|
|
281232
|
-
const message = isVerbooMode() ? /* @__PURE__ */ jsx_runtime61.
|
|
281233
|
-
children:
|
|
281336
|
+
const message = isVerbooMode() ? /* @__PURE__ */ jsx_runtime61.jsxs(ThemedText, {
|
|
281337
|
+
children: [
|
|
281338
|
+
"Saiu da conta Verboo localmente.",
|
|
281339
|
+
result.remoteRevocation === "unconfirmed" ? " Não foi possível confirmar a revogação da sessão no servidor." : "",
|
|
281340
|
+
result.externalTokenSource ? ` ${result.externalTokenSource} ainda fornece uma credencial neste ambiente.` : ""
|
|
281341
|
+
]
|
|
281234
281342
|
}) : /* @__PURE__ */ jsx_runtime61.jsx(ThemedText, {
|
|
281235
281343
|
children: "Successfully logged out from your Anthropic account."
|
|
281236
281344
|
});
|
|
@@ -281250,6 +281358,7 @@ var init_logout = __esm(() => {
|
|
|
281250
281358
|
init_oauth();
|
|
281251
281359
|
init_verbooModels();
|
|
281252
281360
|
init_verbooStartupAuth();
|
|
281361
|
+
init_client2();
|
|
281253
281362
|
init_auth();
|
|
281254
281363
|
init_betas2();
|
|
281255
281364
|
init_config7();
|
|
@@ -294075,9 +294184,6 @@ var init_verbooCheckout = __esm(() => {
|
|
|
294075
294184
|
});
|
|
294076
294185
|
|
|
294077
294186
|
// src/services/api/verbooMarketplace.ts
|
|
294078
|
-
function clearMarketplaceCache() {
|
|
294079
|
-
cache3 = null;
|
|
294080
|
-
}
|
|
294081
294187
|
async function fetchMarketplaceGroups(opts = {}) {
|
|
294082
294188
|
if (!opts.force && cache3 && Date.now() - cache3.fetchedAt < CACHE_TTL_MS2) {
|
|
294083
294189
|
return cache3.groups;
|
|
@@ -294085,19 +294191,26 @@ async function fetchMarketplaceGroups(opts = {}) {
|
|
|
294085
294191
|
const endpoint = `${VERBOO_API_BASE_URL}/api/marketplace`;
|
|
294086
294192
|
try {
|
|
294087
294193
|
const response = await axios_default.get(endpoint, {
|
|
294088
|
-
timeout: 1e4
|
|
294194
|
+
timeout: 1e4,
|
|
294195
|
+
signal: opts.signal
|
|
294089
294196
|
});
|
|
294090
294197
|
const groups = response.data?.data ?? [];
|
|
294091
294198
|
cache3 = { fetchedAt: Date.now(), groups };
|
|
294092
294199
|
logForDebugging(`[Marketplace] Fetched ${groups.length} groups from ${endpoint}`);
|
|
294093
294200
|
return groups;
|
|
294094
294201
|
} catch (error42) {
|
|
294202
|
+
if (opts.signal?.aborted || axios_default.isCancel(error42)) {
|
|
294203
|
+
throw error42;
|
|
294204
|
+
}
|
|
294095
294205
|
logError2(error42);
|
|
294096
294206
|
const msg = `[Marketplace] Erro ao buscar planos: ${error42.message ?? String(error42)}`;
|
|
294097
294207
|
logForDebugging(msg);
|
|
294098
294208
|
process.stderr.write(msg + `
|
|
294099
294209
|
`);
|
|
294100
|
-
|
|
294210
|
+
if (cache3 && cache3.groups.length > 0) {
|
|
294211
|
+
return cache3.groups;
|
|
294212
|
+
}
|
|
294213
|
+
throw error42;
|
|
294101
294214
|
}
|
|
294102
294215
|
}
|
|
294103
294216
|
var CACHE_TTL_MS2, cache3 = null;
|
|
@@ -294395,16 +294508,46 @@ function PurchaseFlowView({
|
|
|
294395
294508
|
const [focusIndex, setFocusIndex] = import_react62.useState(0);
|
|
294396
294509
|
const [errorMsg, setErrorMsg] = import_react62.useState(null);
|
|
294397
294510
|
const [wooviPayment, setWooviPayment] = import_react62.useState(null);
|
|
294511
|
+
const plansRequestRef = import_react62.default.useRef(null);
|
|
294512
|
+
const cancelPlansLoading = import_react62.useCallback(() => {
|
|
294513
|
+
plansRequestRef.current?.abort();
|
|
294514
|
+
plansRequestRef.current = null;
|
|
294515
|
+
setStep("splash");
|
|
294516
|
+
}, []);
|
|
294517
|
+
import_react62.default.useEffect(() => () => {
|
|
294518
|
+
plansRequestRef.current?.abort();
|
|
294519
|
+
}, []);
|
|
294398
294520
|
const fetchPlans = import_react62.useCallback(async () => {
|
|
294521
|
+
plansRequestRef.current?.abort();
|
|
294522
|
+
const controller = new AbortController;
|
|
294523
|
+
plansRequestRef.current = controller;
|
|
294524
|
+
setErrorMsg(null);
|
|
294399
294525
|
setStep("loading-plans");
|
|
294400
|
-
|
|
294401
|
-
|
|
294402
|
-
|
|
294403
|
-
|
|
294404
|
-
|
|
294526
|
+
try {
|
|
294527
|
+
const groups = await fetchMarketplaceGroups({
|
|
294528
|
+
force: true,
|
|
294529
|
+
signal: controller.signal
|
|
294530
|
+
});
|
|
294531
|
+
if (plansRequestRef.current !== controller)
|
|
294532
|
+
return;
|
|
294533
|
+
if (groups.length === 0) {
|
|
294534
|
+
setErrorMsg("Nenhum plano está disponível no momento. Tente novamente mais tarde.");
|
|
294535
|
+
setStep("error");
|
|
294536
|
+
return;
|
|
294537
|
+
}
|
|
294405
294538
|
setPlans(groups);
|
|
294406
294539
|
setFocusIndex(0);
|
|
294407
294540
|
setStep("plans");
|
|
294541
|
+
} catch (error42) {
|
|
294542
|
+
if (controller.signal.aborted || plansRequestRef.current !== controller) {
|
|
294543
|
+
return;
|
|
294544
|
+
}
|
|
294545
|
+
setErrorMsg(`Não foi possível carregar os planos: ${errorMessage(error42)}`);
|
|
294546
|
+
setStep("error");
|
|
294547
|
+
} finally {
|
|
294548
|
+
if (plansRequestRef.current === controller) {
|
|
294549
|
+
plansRequestRef.current = null;
|
|
294550
|
+
}
|
|
294408
294551
|
}
|
|
294409
294552
|
}, []);
|
|
294410
294553
|
const startStripePolling = import_react62.useCallback(async () => {
|
|
@@ -294418,7 +294561,11 @@ function PurchaseFlowView({
|
|
|
294418
294561
|
setTimeout(() => onDone(true), 1500);
|
|
294419
294562
|
return;
|
|
294420
294563
|
}
|
|
294421
|
-
} catch {
|
|
294564
|
+
} catch (error42) {
|
|
294565
|
+
setErrorMsg(`Não foi possível verificar a liberação dos modelos: ${errorMessage(error42)}`);
|
|
294566
|
+
setStep("error");
|
|
294567
|
+
return;
|
|
294568
|
+
}
|
|
294422
294569
|
}
|
|
294423
294570
|
setErrorMsg("O pagamento ainda não foi confirmado. Verifique o checkout e tente novamente.");
|
|
294424
294571
|
setStep("error");
|
|
@@ -294461,16 +294608,26 @@ function PurchaseFlowView({
|
|
|
294461
294608
|
}
|
|
294462
294609
|
};
|
|
294463
294610
|
const handleWooviConfirmed = import_react62.useCallback(async () => {
|
|
294464
|
-
|
|
294465
|
-
|
|
294466
|
-
|
|
294611
|
+
try {
|
|
294612
|
+
const models = await fetchVerbooModels(accessToken, { force: true });
|
|
294613
|
+
if (models.length === 0) {
|
|
294614
|
+
setErrorMsg("Pagamento confirmado, mas os modelos ainda não foram liberados. Aguarde alguns segundos e execute o Verboo novamente.");
|
|
294615
|
+
setStep("error");
|
|
294616
|
+
return;
|
|
294617
|
+
}
|
|
294618
|
+
setStep("success");
|
|
294619
|
+
setTimeout(() => onDone(true), 1500);
|
|
294620
|
+
} catch (error42) {
|
|
294621
|
+
setErrorMsg(`Pagamento confirmado, mas não foi possível verificar os modelos: ${errorMessage(error42)}`);
|
|
294467
294622
|
setStep("error");
|
|
294468
|
-
return;
|
|
294469
294623
|
}
|
|
294470
|
-
setStep("success");
|
|
294471
|
-
setTimeout(() => onDone(true), 1500);
|
|
294472
294624
|
}, [accessToken, onDone]);
|
|
294473
294625
|
use_input_default((_input, key) => {
|
|
294626
|
+
if (step === "loading-plans") {
|
|
294627
|
+
if (key.escape)
|
|
294628
|
+
cancelPlansLoading();
|
|
294629
|
+
return;
|
|
294630
|
+
}
|
|
294474
294631
|
if (step !== "plans" || plans.length === 0)
|
|
294475
294632
|
return;
|
|
294476
294633
|
if (key.leftArrow)
|
|
@@ -294489,7 +294646,7 @@ function PurchaseFlowView({
|
|
|
294489
294646
|
}
|
|
294490
294647
|
} else if (key.escape)
|
|
294491
294648
|
setStep("splash");
|
|
294492
|
-
}, { isActive: step === "plans" });
|
|
294649
|
+
}, { isActive: step === "plans" || step === "loading-plans" });
|
|
294493
294650
|
switch (step) {
|
|
294494
294651
|
case "splash":
|
|
294495
294652
|
return /* @__PURE__ */ jsx_runtime71.jsxs(ThemedBox_default, {
|
|
@@ -294521,7 +294678,11 @@ function PurchaseFlowView({
|
|
|
294521
294678
|
/* @__PURE__ */ jsx_runtime71.jsx(ThemedText, {
|
|
294522
294679
|
children: "Buscando planos disponíveis…"
|
|
294523
294680
|
}),
|
|
294524
|
-
/* @__PURE__ */ jsx_runtime71.jsx(Spinner, {})
|
|
294681
|
+
/* @__PURE__ */ jsx_runtime71.jsx(Spinner, {}),
|
|
294682
|
+
/* @__PURE__ */ jsx_runtime71.jsx(ThemedText, {
|
|
294683
|
+
dimColor: true,
|
|
294684
|
+
children: "Esc para cancelar"
|
|
294685
|
+
})
|
|
294525
294686
|
]
|
|
294526
294687
|
});
|
|
294527
294688
|
case "plans": {
|
|
@@ -294755,7 +294916,7 @@ function PurchaseFlowView({
|
|
|
294755
294916
|
}),
|
|
294756
294917
|
/* @__PURE__ */ jsx_runtime71.jsx(Select, {
|
|
294757
294918
|
options: [
|
|
294758
|
-
{ label: "
|
|
294919
|
+
{ label: "Tentar novamente", value: "retry" },
|
|
294759
294920
|
{ label: "Fechar", value: "fechar" }
|
|
294760
294921
|
],
|
|
294761
294922
|
onChange: (value) => {
|
|
@@ -294791,6 +294952,7 @@ var init_purchaseFlow = __esm(() => {
|
|
|
294791
294952
|
init_TextInput();
|
|
294792
294953
|
init_ink2();
|
|
294793
294954
|
init_browser();
|
|
294955
|
+
init_errors();
|
|
294794
294956
|
init_verbooModels();
|
|
294795
294957
|
init_verbooCheckout();
|
|
294796
294958
|
init_verbooMarketplace();
|
|
@@ -298489,6 +298651,11 @@ ${sslHint ? sslHint + `
|
|
|
298489
298651
|
`);
|
|
298490
298652
|
process.exit(0);
|
|
298491
298653
|
}
|
|
298654
|
+
if (preflight.kind === "degraded") {
|
|
298655
|
+
process.stderr.write(getVerbooModelsUnavailableMessage(preflight.reason) + `
|
|
298656
|
+
`);
|
|
298657
|
+
process.exit(1);
|
|
298658
|
+
}
|
|
298492
298659
|
}
|
|
298493
298660
|
const result = await runOAuthLoginFlow({
|
|
298494
298661
|
email: email3,
|
|
@@ -298499,7 +298666,12 @@ ${sslHint ? sslHint + `
|
|
|
298499
298666
|
if (isVerbooMode()) {
|
|
298500
298667
|
await installVerbooOAuthTokens(result);
|
|
298501
298668
|
const models = await checkVerbooModels(result.accessToken);
|
|
298502
|
-
if (models.
|
|
298669
|
+
if (models.kind === "unavailable") {
|
|
298670
|
+
process.stderr.write(getVerbooModelsUnavailableMessage(models.reason) + `
|
|
298671
|
+
`);
|
|
298672
|
+
process.exit(1);
|
|
298673
|
+
}
|
|
298674
|
+
if (models.kind === "empty") {
|
|
298503
298675
|
const ok = await showNoModelsFlow(result.accessToken);
|
|
298504
298676
|
if (!ok)
|
|
298505
298677
|
process.exit(1);
|
|
@@ -298599,15 +298771,24 @@ async function authStatus(opts) {
|
|
|
298599
298771
|
process.exit(loggedIn ? 0 : 1);
|
|
298600
298772
|
}
|
|
298601
298773
|
async function authLogout() {
|
|
298774
|
+
let result;
|
|
298602
298775
|
try {
|
|
298603
|
-
await performLogout({ clearOnboarding: false });
|
|
298776
|
+
result = await performLogout({ clearOnboarding: false });
|
|
298604
298777
|
} catch {
|
|
298605
298778
|
process.stderr.write(`Failed to log out.
|
|
298606
298779
|
`);
|
|
298607
298780
|
process.exit(1);
|
|
298608
298781
|
}
|
|
298609
|
-
process.stdout.write(`Successfully logged out from your Verboo account.
|
|
298782
|
+
process.stdout.write(`Successfully logged out from your Verboo account locally.
|
|
298610
298783
|
`);
|
|
298784
|
+
if (result.remoteRevocation === "unconfirmed") {
|
|
298785
|
+
process.stderr.write(`Could not confirm server-side session revocation. Your local credentials were removed.
|
|
298786
|
+
`);
|
|
298787
|
+
}
|
|
298788
|
+
if (result.externalTokenSource) {
|
|
298789
|
+
process.stderr.write(`A credential from ${result.externalTokenSource} is still active in this shell. Remove it before starting Verboo again.
|
|
298790
|
+
`);
|
|
298791
|
+
}
|
|
298611
298792
|
process.exit(0);
|
|
298612
298793
|
}
|
|
298613
298794
|
async function authLoginHeadless() {
|
|
@@ -298662,7 +298843,10 @@ Código não informado. Cancelado.
|
|
|
298662
298843
|
}
|
|
298663
298844
|
function readOneLine() {
|
|
298664
298845
|
return new Promise((resolve21) => {
|
|
298665
|
-
const rl = readline.createInterface({
|
|
298846
|
+
const rl = readline.createInterface({
|
|
298847
|
+
input: process.stdin,
|
|
298848
|
+
output: process.stdout
|
|
298849
|
+
});
|
|
298666
298850
|
rl.once("line", (line) => {
|
|
298667
298851
|
rl.close();
|
|
298668
298852
|
resolve21(line);
|
|
@@ -298958,6 +299142,7 @@ __export(exports_verbooStartupAuth, {
|
|
|
298958
299142
|
markVerbooSessionValidated: () => markVerbooSessionValidated,
|
|
298959
299143
|
isVerbooSessionValidated: () => isVerbooSessionValidated,
|
|
298960
299144
|
installVerbooOAuthTokens: () => installVerbooOAuthTokens,
|
|
299145
|
+
getVerbooModelsUnavailableMessage: () => getVerbooModelsUnavailableMessage,
|
|
298961
299146
|
getNoVerbooModelsMessage: () => getNoVerbooModelsMessage2,
|
|
298962
299147
|
ensureVerbooAuthenticated: () => ensureVerbooAuthenticated,
|
|
298963
299148
|
checkVerbooModels: () => checkVerbooModels
|
|
@@ -299043,24 +299228,42 @@ async function validateVerbooSession() {
|
|
|
299043
299228
|
return { kind: "degraded", reason: result.reason };
|
|
299044
299229
|
}
|
|
299045
299230
|
async function checkVerbooModels(accessToken) {
|
|
299046
|
-
|
|
299047
|
-
|
|
299048
|
-
|
|
299049
|
-
|
|
299050
|
-
|
|
299231
|
+
try {
|
|
299232
|
+
const models = await fetchVerbooModels(accessToken, { force: true });
|
|
299233
|
+
if (models.length > 0) {
|
|
299234
|
+
return { kind: "available", models };
|
|
299235
|
+
}
|
|
299236
|
+
return { kind: "empty", models: [] };
|
|
299237
|
+
} catch (err2) {
|
|
299238
|
+
return {
|
|
299239
|
+
kind: "unavailable",
|
|
299240
|
+
reason: errorMessage(err2),
|
|
299241
|
+
models: []
|
|
299242
|
+
};
|
|
299243
|
+
}
|
|
299244
|
+
}
|
|
299245
|
+
function getVerbooModelsUnavailableMessage(reason) {
|
|
299246
|
+
return `Não foi possível verificar os modelos do Verboo: ${reason}.
|
|
299247
|
+
` + "Sua sessão local foi preservada. Tente novamente em alguns instantes.";
|
|
299051
299248
|
}
|
|
299052
299249
|
async function loadAndCheckModels(accessToken) {
|
|
299053
|
-
const
|
|
299054
|
-
if (
|
|
299250
|
+
const result = await checkVerbooModels(accessToken);
|
|
299251
|
+
if (result.kind === "available")
|
|
299055
299252
|
return;
|
|
299253
|
+
if (result.kind === "unavailable") {
|
|
299254
|
+
throw new Error(getVerbooModelsUnavailableMessage(result.reason));
|
|
299255
|
+
}
|
|
299056
299256
|
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
299057
299257
|
throw new Error("Nenhum modelo disponível nesta conta. Execute `verboo /login` em um terminal interativo para escolher um plano.");
|
|
299058
299258
|
}
|
|
299059
299259
|
const ok = await showNoModelsFlow(accessToken);
|
|
299060
299260
|
if (ok) {
|
|
299061
299261
|
const refreshed = await checkVerbooModels(accessToken);
|
|
299062
|
-
if (refreshed.
|
|
299262
|
+
if (refreshed.kind === "available")
|
|
299063
299263
|
return;
|
|
299264
|
+
if (refreshed.kind === "unavailable") {
|
|
299265
|
+
throw new Error(getVerbooModelsUnavailableMessage(refreshed.reason));
|
|
299266
|
+
}
|
|
299064
299267
|
}
|
|
299065
299268
|
process.stdout.write(`
|
|
299066
299269
|
Para trocar de conta, execute: verboo logout
|
|
@@ -299101,13 +299304,16 @@ async function preflightVerbooLogin() {
|
|
|
299101
299304
|
return { kind: "degraded", reason: session.reason };
|
|
299102
299305
|
}
|
|
299103
299306
|
const models = await checkVerbooModels(session.tokens.accessToken);
|
|
299104
|
-
if (models.
|
|
299307
|
+
if (models.kind === "unavailable") {
|
|
299308
|
+
return { kind: "degraded", reason: models.reason };
|
|
299309
|
+
}
|
|
299310
|
+
if (models.kind === "empty") {
|
|
299105
299311
|
return { kind: "needs-oauth", reason: "no-models" };
|
|
299106
299312
|
}
|
|
299107
299313
|
return {
|
|
299108
299314
|
kind: "ready",
|
|
299109
299315
|
tokens: session.tokens,
|
|
299110
|
-
models,
|
|
299316
|
+
models: models.models,
|
|
299111
299317
|
refreshed: session.refreshed
|
|
299112
299318
|
};
|
|
299113
299319
|
}
|
|
@@ -299117,8 +299323,8 @@ async function ensureVerbooAuthenticated(opts = {}) {
|
|
|
299117
299323
|
clearVerbooModelsCache();
|
|
299118
299324
|
const session = await validateVerbooSession();
|
|
299119
299325
|
if (session.kind === "ok") {
|
|
299120
|
-
validated = true;
|
|
299121
299326
|
await loadAndCheckModels(session.tokens.accessToken);
|
|
299327
|
+
validated = true;
|
|
299122
299328
|
await showPastDueNotice(session.tokens.accessToken);
|
|
299123
299329
|
return;
|
|
299124
299330
|
}
|
|
@@ -299127,10 +299333,10 @@ async function ensureVerbooAuthenticated(opts = {}) {
|
|
|
299127
299333
|
logForDebugging(degradedMsg);
|
|
299128
299334
|
process.stderr.write(degradedMsg + `
|
|
299129
299335
|
`);
|
|
299130
|
-
validated = true;
|
|
299131
299336
|
const stored = await getClaudeAIOAuthTokensAsync();
|
|
299132
299337
|
if (stored?.accessToken) {
|
|
299133
299338
|
await loadAndCheckModels(stored.accessToken);
|
|
299339
|
+
validated = true;
|
|
299134
299340
|
}
|
|
299135
299341
|
return;
|
|
299136
299342
|
}
|
|
@@ -303593,20 +303799,32 @@ async function call2(onDone, context) {
|
|
|
303593
303799
|
onDone(result.message, { display: "system" });
|
|
303594
303800
|
return;
|
|
303595
303801
|
}
|
|
303802
|
+
if (result.type === "unavailable") {
|
|
303803
|
+
onDone(getVerbooModelsUnavailableMessage(result.reason), {
|
|
303804
|
+
display: "system"
|
|
303805
|
+
});
|
|
303806
|
+
return;
|
|
303807
|
+
}
|
|
303596
303808
|
const authChanged = result.type !== "ready" || result.refreshed;
|
|
303597
303809
|
if (!authChanged) {
|
|
303598
303810
|
if (isVerbooMode()) {
|
|
303599
303811
|
markVerbooSessionValidated();
|
|
303600
303812
|
const storedTokens = await getClaudeAIOAuthTokensAsync();
|
|
303601
303813
|
if (storedTokens?.accessToken) {
|
|
303602
|
-
const
|
|
303603
|
-
const [firstModel] = models;
|
|
303814
|
+
const modelsResult = await checkVerbooModels(storedTokens.accessToken);
|
|
303815
|
+
const [firstModel] = modelsResult.models;
|
|
303604
303816
|
if (firstModel) {
|
|
303605
303817
|
context.setAppState((prev) => ({
|
|
303606
303818
|
...prev,
|
|
303607
303819
|
mainLoopModelOverride: firstModel.id
|
|
303608
303820
|
}));
|
|
303609
303821
|
}
|
|
303822
|
+
if (modelsResult.kind === "unavailable") {
|
|
303823
|
+
onDone(getVerbooModelsUnavailableMessage(modelsResult.reason), {
|
|
303824
|
+
display: "system"
|
|
303825
|
+
});
|
|
303826
|
+
return;
|
|
303827
|
+
}
|
|
303610
303828
|
}
|
|
303611
303829
|
}
|
|
303612
303830
|
onDone("Sessão já está válida.");
|
|
@@ -303636,12 +303854,16 @@ async function call2(onDone, context) {
|
|
|
303636
303854
|
markVerbooSessionValidated();
|
|
303637
303855
|
const storedTokens = await getClaudeAIOAuthTokensAsync();
|
|
303638
303856
|
if (storedTokens?.accessToken) {
|
|
303639
|
-
const
|
|
303640
|
-
if (
|
|
303857
|
+
const modelsResult = await checkVerbooModels(storedTokens.accessToken);
|
|
303858
|
+
if (modelsResult.kind === "unavailable") {
|
|
303859
|
+
onDone(`Login concluído. ${getVerbooModelsUnavailableMessage(modelsResult.reason)}`, { display: "system" });
|
|
303860
|
+
return;
|
|
303861
|
+
}
|
|
303862
|
+
if (modelsResult.kind === "empty") {
|
|
303641
303863
|
onDone(getNoVerbooModelsMessage2().trim(), { display: "system" });
|
|
303642
303864
|
return;
|
|
303643
303865
|
}
|
|
303644
|
-
const [firstModel] = models;
|
|
303866
|
+
const [firstModel] = modelsResult.models;
|
|
303645
303867
|
context.setAppState((prev) => ({
|
|
303646
303868
|
...prev,
|
|
303647
303869
|
mainLoopModelOverride: firstModel.id
|
|
@@ -303667,6 +303889,10 @@ function Login(props) {
|
|
|
303667
303889
|
props.onDone({ type: "ready", refreshed: result.refreshed }, mainLoopModel);
|
|
303668
303890
|
return;
|
|
303669
303891
|
}
|
|
303892
|
+
if (result.kind === "degraded") {
|
|
303893
|
+
props.onDone({ type: "unavailable", reason: result.reason }, mainLoopModel);
|
|
303894
|
+
return;
|
|
303895
|
+
}
|
|
303670
303896
|
setPreflightDone(true);
|
|
303671
303897
|
}).catch(() => {
|
|
303672
303898
|
if (!cancelled)
|
|
@@ -303685,8 +303911,12 @@ function Login(props) {
|
|
|
303685
303911
|
markVerbooSessionValidated();
|
|
303686
303912
|
const storedTokens = await getClaudeAIOAuthTokensAsync();
|
|
303687
303913
|
if (storedTokens?.accessToken) {
|
|
303688
|
-
const
|
|
303689
|
-
if (
|
|
303914
|
+
const modelsResult = await checkVerbooModels(storedTokens.accessToken);
|
|
303915
|
+
if (modelsResult.kind === "unavailable") {
|
|
303916
|
+
props.onDone({ type: "unavailable", reason: modelsResult.reason }, mainLoopModel);
|
|
303917
|
+
return;
|
|
303918
|
+
}
|
|
303919
|
+
if (modelsResult.kind === "empty") {
|
|
303690
303920
|
setPostLoginToken(storedTokens.accessToken);
|
|
303691
303921
|
return;
|
|
303692
303922
|
}
|
|
@@ -303696,8 +303926,12 @@ function Login(props) {
|
|
|
303696
303926
|
}, [mainLoopModel, props]);
|
|
303697
303927
|
const handlePurchaseDone = React31.useCallback(async (success2) => {
|
|
303698
303928
|
if (success2 && postLoginToken) {
|
|
303699
|
-
const
|
|
303700
|
-
if (
|
|
303929
|
+
const modelsResult = await checkVerbooModels(postLoginToken);
|
|
303930
|
+
if (modelsResult.kind === "unavailable") {
|
|
303931
|
+
props.onDone({ type: "unavailable", reason: modelsResult.reason }, mainLoopModel);
|
|
303932
|
+
return;
|
|
303933
|
+
}
|
|
303934
|
+
if (modelsResult.kind === "available") {
|
|
303701
303935
|
props.onDone({ type: "ready", refreshed: true }, mainLoopModel);
|
|
303702
303936
|
return;
|
|
303703
303937
|
}
|
|
@@ -393739,7 +393973,7 @@ function getAnthropicEnvMetadata() {
|
|
|
393739
393973
|
function getBuildAgeMinutes() {
|
|
393740
393974
|
if (false)
|
|
393741
393975
|
;
|
|
393742
|
-
const buildTime = new Date("2026-07-
|
|
393976
|
+
const buildTime = new Date("2026-07-15T01:49:30.886Z").getTime();
|
|
393743
393977
|
if (isNaN(buildTime))
|
|
393744
393978
|
return;
|
|
393745
393979
|
return Math.floor((Date.now() - buildTime) / 60000);
|
|
@@ -421994,7 +422228,7 @@ function buildPrimarySection() {
|
|
|
421994
422228
|
});
|
|
421995
422229
|
return [{
|
|
421996
422230
|
label: "Version",
|
|
421997
|
-
value: "0.13.
|
|
422231
|
+
value: "0.13.2"
|
|
421998
422232
|
}, {
|
|
421999
422233
|
label: "Session name",
|
|
422000
422234
|
value: nameValue
|
|
@@ -434923,7 +435157,7 @@ function getReleaseTagUrl(version2 = publicBuildVersion) {
|
|
|
434923
435157
|
return `${VERBOO_RELEASES_URL}/tag/v${normalizePublicVersion(version2)}`;
|
|
434924
435158
|
}
|
|
434925
435159
|
function getPublicBuildVersion() {
|
|
434926
|
-
return "0.13.
|
|
435160
|
+
return "0.13.2";
|
|
434927
435161
|
}
|
|
434928
435162
|
var import_semver10, VERBOO_RELEASES_URL = "https://github.com/verbeux-ai/code/releases", fallbackBuildVersion, publicBuildVersion;
|
|
434929
435163
|
var init_version = __esm(() => {
|
|
@@ -486182,7 +486416,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
486182
486416
|
var call63 = async () => {
|
|
486183
486417
|
return {
|
|
486184
486418
|
type: "text",
|
|
486185
|
-
value: `${"99.0.0"} (built ${"2026-07-
|
|
486419
|
+
value: `${"99.0.0"} (built ${"2026-07-15T01:49:30.886Z"})`
|
|
486186
486420
|
};
|
|
486187
486421
|
}, version2, version_default;
|
|
486188
486422
|
var init_version2 = __esm(() => {
|
|
@@ -519255,7 +519489,7 @@ function printStartupScreen(modelOverride) {
|
|
|
519255
519489
|
const home = process.env.HOME || process.env.USERPROFILE || "";
|
|
519256
519490
|
const cwd2 = process.cwd();
|
|
519257
519491
|
const displayCwd = home && cwd2.startsWith(home) ? `~${cwd2.slice(home.length)}` : cwd2;
|
|
519258
|
-
const version3 = "0.13.
|
|
519492
|
+
const version3 = "0.13.2";
|
|
519259
519493
|
const bold2 = `${ESC4}1m`;
|
|
519260
519494
|
const PURPLE = rgb3(...ACCENT);
|
|
519261
519495
|
const SOFT = rgb3(...CREAM);
|
|
@@ -537547,7 +537781,7 @@ var init_routerRateLimitHook = __esm(() => {
|
|
|
537547
537781
|
function getSemverPart(version3) {
|
|
537548
537782
|
return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
|
|
537549
537783
|
}
|
|
537550
|
-
function useUpdateNotification(updatedVersion, initialVersion = "0.13.
|
|
537784
|
+
function useUpdateNotification(updatedVersion, initialVersion = "0.13.2") {
|
|
537551
537785
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react225.useState(() => getSemverPart(initialVersion));
|
|
537552
537786
|
const [pendingNotification2, setPendingNotification] = import_react225.useState(null);
|
|
537553
537787
|
if (updatedVersion) {
|
|
@@ -537587,7 +537821,7 @@ function AutoUpdater({
|
|
|
537587
537821
|
return;
|
|
537588
537822
|
}
|
|
537589
537823
|
if (false) {}
|
|
537590
|
-
const currentVersion = "0.13.
|
|
537824
|
+
const currentVersion = "0.13.2";
|
|
537591
537825
|
const channel2 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
537592
537826
|
let latestVersion = await getLatestVersion(channel2);
|
|
537593
537827
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -537940,17 +538174,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
537940
538174
|
const maxVersion = await getMaxVersion();
|
|
537941
538175
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
537942
538176
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
537943
|
-
if (gte("0.13.
|
|
537944
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"0.13.
|
|
538177
|
+
if (gte("0.13.2", maxVersion)) {
|
|
538178
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"0.13.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
537945
538179
|
setUpdateAvailable(false);
|
|
537946
538180
|
return;
|
|
537947
538181
|
}
|
|
537948
538182
|
latest = maxVersion;
|
|
537949
538183
|
}
|
|
537950
|
-
const hasUpdate = latest && !gte("0.13.
|
|
538184
|
+
const hasUpdate = latest && !gte("0.13.2", latest) && !shouldSkipVersion(latest);
|
|
537951
538185
|
setUpdateAvailable(!!hasUpdate);
|
|
537952
538186
|
if (hasUpdate) {
|
|
537953
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"0.13.
|
|
538187
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"0.13.2"} -> ${latest}`);
|
|
537954
538188
|
}
|
|
537955
538189
|
};
|
|
537956
538190
|
$2[0] = t1;
|
|
@@ -537984,7 +538218,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
537984
538218
|
wrap: "truncate",
|
|
537985
538219
|
children: [
|
|
537986
538220
|
"currentVersion: ",
|
|
537987
|
-
"0.13.
|
|
538221
|
+
"0.13.2"
|
|
537988
538222
|
]
|
|
537989
538223
|
});
|
|
537990
538224
|
$2[3] = verbose;
|
|
@@ -553935,10 +554169,10 @@ async function autoUpdateCliInBackground() {
|
|
|
553935
554169
|
return;
|
|
553936
554170
|
const channel2 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
553937
554171
|
const latest = await getLatestVersion(channel2);
|
|
553938
|
-
if (!latest || gte("0.13.
|
|
554172
|
+
if (!latest || gte("0.13.2", latest))
|
|
553939
554173
|
return;
|
|
553940
554174
|
writeToStdout(`
|
|
553941
|
-
Nova versão disponível: ${latest} (atual: ${"0.13.
|
|
554175
|
+
Nova versão disponível: ${latest} (atual: ${"0.13.2"})
|
|
553942
554176
|
`);
|
|
553943
554177
|
writeToStdout(`Atualizando automaticamente...
|
|
553944
554178
|
`);
|
|
@@ -571632,7 +571866,7 @@ function WelcomeV2() {
|
|
|
571632
571866
|
dimColor: true,
|
|
571633
571867
|
children: [
|
|
571634
571868
|
"v",
|
|
571635
|
-
"0.13.
|
|
571869
|
+
"0.13.2",
|
|
571636
571870
|
" "
|
|
571637
571871
|
]
|
|
571638
571872
|
})
|
|
@@ -571819,7 +572053,7 @@ function WelcomeV2() {
|
|
|
571819
572053
|
dimColor: true,
|
|
571820
572054
|
children: [
|
|
571821
572055
|
"v",
|
|
571822
|
-
"0.13.
|
|
572056
|
+
"0.13.2",
|
|
571823
572057
|
" "
|
|
571824
572058
|
]
|
|
571825
572059
|
})
|
|
@@ -572035,7 +572269,7 @@ function AppleTerminalWelcomeV2(t0) {
|
|
|
572035
572269
|
dimColor: true,
|
|
572036
572270
|
children: [
|
|
572037
572271
|
"v",
|
|
572038
|
-
"0.13.
|
|
572272
|
+
"0.13.2",
|
|
572039
572273
|
" "
|
|
572040
572274
|
]
|
|
572041
572275
|
});
|
|
@@ -572244,7 +572478,7 @@ function AppleTerminalWelcomeV2(t0) {
|
|
|
572244
572478
|
dimColor: true,
|
|
572245
572479
|
children: [
|
|
572246
572480
|
"v",
|
|
572247
|
-
"0.13.
|
|
572481
|
+
"0.13.2",
|
|
572248
572482
|
" "
|
|
572249
572483
|
]
|
|
572250
572484
|
});
|
|
@@ -589646,7 +589880,7 @@ __export(exports_update, {
|
|
|
589646
589880
|
});
|
|
589647
589881
|
async function update() {
|
|
589648
589882
|
logEvent("tengu_update_check", {});
|
|
589649
|
-
writeToStdout(`Current version: ${"0.13.
|
|
589883
|
+
writeToStdout(`Current version: ${"0.13.2"}
|
|
589650
589884
|
`);
|
|
589651
589885
|
const channel2 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
589652
589886
|
writeToStdout(`Checking for updates to ${channel2} version...
|
|
@@ -589731,8 +589965,8 @@ async function update() {
|
|
|
589731
589965
|
writeToStdout(`Verboo Code is managed by Homebrew.
|
|
589732
589966
|
`);
|
|
589733
589967
|
const latest = await getLatestVersion(channel2);
|
|
589734
|
-
if (latest && !gte("0.13.
|
|
589735
|
-
writeToStdout(`Update available: ${"0.13.
|
|
589968
|
+
if (latest && !gte("0.13.2", latest)) {
|
|
589969
|
+
writeToStdout(`Update available: ${"0.13.2"} → ${latest}
|
|
589736
589970
|
`);
|
|
589737
589971
|
writeToStdout(`
|
|
589738
589972
|
`);
|
|
@@ -589748,8 +589982,8 @@ async function update() {
|
|
|
589748
589982
|
writeToStdout(`Verboo Code is managed by winget.
|
|
589749
589983
|
`);
|
|
589750
589984
|
const latest = await getLatestVersion(channel2);
|
|
589751
|
-
if (latest && !gte("0.13.
|
|
589752
|
-
writeToStdout(`Update available: ${"0.13.
|
|
589985
|
+
if (latest && !gte("0.13.2", latest)) {
|
|
589986
|
+
writeToStdout(`Update available: ${"0.13.2"} → ${latest}
|
|
589753
589987
|
`);
|
|
589754
589988
|
writeToStdout(`
|
|
589755
589989
|
`);
|
|
@@ -589765,8 +589999,8 @@ async function update() {
|
|
|
589765
589999
|
writeToStdout(`Verboo Code is managed by apk.
|
|
589766
590000
|
`);
|
|
589767
590001
|
const latest = await getLatestVersion(channel2);
|
|
589768
|
-
if (latest && !gte("0.13.
|
|
589769
|
-
writeToStdout(`Update available: ${"0.13.
|
|
590002
|
+
if (latest && !gte("0.13.2", latest)) {
|
|
590003
|
+
writeToStdout(`Update available: ${"0.13.2"} → ${latest}
|
|
589770
590004
|
`);
|
|
589771
590005
|
writeToStdout(`
|
|
589772
590006
|
`);
|
|
@@ -589819,11 +590053,11 @@ async function update() {
|
|
|
589819
590053
|
`);
|
|
589820
590054
|
await gracefulShutdown(1);
|
|
589821
590055
|
}
|
|
589822
|
-
if (result.latestVersion === "0.13.
|
|
589823
|
-
writeToStdout(source_default.green(`Verboo Code is up to date (${"0.13.
|
|
590056
|
+
if (result.latestVersion === "0.13.2") {
|
|
590057
|
+
writeToStdout(source_default.green(`Verboo Code is up to date (${"0.13.2"})`) + `
|
|
589824
590058
|
`);
|
|
589825
590059
|
} else {
|
|
589826
|
-
writeToStdout(source_default.green(`Successfully updated from ${"0.13.
|
|
590060
|
+
writeToStdout(source_default.green(`Successfully updated from ${"0.13.2"} to version ${result.latestVersion}`) + `
|
|
589827
590061
|
`);
|
|
589828
590062
|
await regenerateCompletionCache();
|
|
589829
590063
|
}
|
|
@@ -589883,12 +590117,12 @@ async function update() {
|
|
|
589883
590117
|
`);
|
|
589884
590118
|
await gracefulShutdown(1);
|
|
589885
590119
|
}
|
|
589886
|
-
if (latestVersion === "0.13.
|
|
589887
|
-
writeToStdout(source_default.green(`Verboo Code is up to date (${"0.13.
|
|
590120
|
+
if (latestVersion === "0.13.2") {
|
|
590121
|
+
writeToStdout(source_default.green(`Verboo Code is up to date (${"0.13.2"})`) + `
|
|
589888
590122
|
`);
|
|
589889
590123
|
await gracefulShutdown(0);
|
|
589890
590124
|
}
|
|
589891
|
-
writeToStdout(`New version available: ${latestVersion} (current: ${"0.13.
|
|
590125
|
+
writeToStdout(`New version available: ${latestVersion} (current: ${"0.13.2"})
|
|
589892
590126
|
`);
|
|
589893
590127
|
writeToStdout(`Installing update...
|
|
589894
590128
|
`);
|
|
@@ -589933,7 +590167,7 @@ async function update() {
|
|
|
589933
590167
|
logForDebugging(`update: Installation status: ${status2}`);
|
|
589934
590168
|
switch (status2) {
|
|
589935
590169
|
case "success":
|
|
589936
|
-
writeToStdout(source_default.green(`Successfully updated from ${"0.13.
|
|
590170
|
+
writeToStdout(source_default.green(`Successfully updated from ${"0.13.2"} to version ${latestVersion}`) + `
|
|
589937
590171
|
`);
|
|
589938
590172
|
await regenerateCompletionCache();
|
|
589939
590173
|
break;
|
|
@@ -591188,7 +591422,7 @@ ${customInstructions}` : customInstructions;
|
|
|
591188
591422
|
is_native_binary: isInBundledMode()
|
|
591189
591423
|
});
|
|
591190
591424
|
logMemoryDiagnostics("start", {
|
|
591191
|
-
version: "0.13.
|
|
591425
|
+
version: "0.13.2",
|
|
591192
591426
|
debug: debug2,
|
|
591193
591427
|
debugToStderr,
|
|
591194
591428
|
print: print ?? false,
|
|
@@ -591999,7 +592233,7 @@ Usage: verboo --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
591999
592233
|
pendingHookMessages
|
|
592000
592234
|
}, renderAndRun);
|
|
592001
592235
|
}
|
|
592002
|
-
}).version(`0.13.
|
|
592236
|
+
}).version(`0.13.2 (${cliDesc})`, "-v, --version", "Output the version number");
|
|
592003
592237
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
592004
592238
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
592005
592239
|
if (canUserConfigureAdvisor()) {
|
|
@@ -592574,7 +592808,7 @@ if (false) {}
|
|
|
592574
592808
|
async function main2() {
|
|
592575
592809
|
const args = process.argv.slice(2);
|
|
592576
592810
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
592577
|
-
console.log(`${"0.13.
|
|
592811
|
+
console.log(`${"0.13.2"} (Verboo Code)`);
|
|
592578
592812
|
return;
|
|
592579
592813
|
}
|
|
592580
592814
|
if (!IS_VERBOO_CLI && args.includes("--provider")) {
|
|
@@ -592748,4 +592982,4 @@ async function main2() {
|
|
|
592748
592982
|
}
|
|
592749
592983
|
main2();
|
|
592750
592984
|
|
|
592751
|
-
//# debugId=
|
|
592985
|
+
//# debugId=1271E869CB00C30E64756E2164756E21
|