@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.
Files changed (2) hide show
  1. package/dist/cli.mjs +354 -120
  2. 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
- return cache2?.models ?? [];
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.0" : "unknown";
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 = { ...t.input_schema ?? { type: "object", properties: {} } };
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: { type: "thinking_delta", thinking: delta.reasoning_content }
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 { type: "content_block_stop", index: contentBlockIndex };
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 = { ...active.extra_content ?? {}, ...contEC };
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 = { ...active.extra_content ?? {}, ...lateEC };
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 ? { signature: 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: { type: "text_delta", text: `
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: { type: "text_delta", text: `
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 apiKey = this.providerOverride?.apiKey ?? routeCredential ?? process.env.OPENAI_API_KEY ?? "";
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 authValue = hasCustomAuthHeader ? configuredAuthHeaderValue || apiKey : apiKey;
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
- if (authValue) {
173774
- if (hasCustomAuthHeader && customAuthHeader) {
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 = { ...failure, requestUrl: failure.requestUrl ?? requestUrl2 };
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
- await removeApiKey();
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.jsx(ThemedText, {
281233
- children: "Saiu da conta Verboo com sucesso."
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
- return cache3?.groups ?? [];
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
- clearMarketplaceCache();
294401
- const groups = await fetchMarketplaceGroups({ force: true });
294402
- if (groups.length === 0) {
294403
- setStep("splash");
294404
- } else {
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
- const models = await fetchVerbooModels(accessToken, { force: true });
294465
- if (models.length === 0) {
294466
- setErrorMsg("Pagamento confirmado, mas os modelos ainda não foram liberados. Aguarde alguns segundos e execute o Verboo novamente.");
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: "Ver planos", value: "retry" },
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.length === 0) {
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({ input: process.stdin, output: process.stdout });
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
- return fetchVerbooModels(accessToken, { force: true }).catch((err2) => {
299047
- process.stderr.write(`[Verboo] Falha ao carregar modelos: ${err2.message ?? String(err2)}
299048
- `);
299049
- return [];
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 models = await checkVerbooModels(accessToken);
299054
- if (models.length > 0)
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.length > 0)
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.length === 0) {
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 models = await checkVerbooModels(storedTokens.accessToken);
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 models = await checkVerbooModels(storedTokens.accessToken);
303640
- if (models.length === 0) {
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 models = await checkVerbooModels(storedTokens.accessToken);
303689
- if (models.length === 0) {
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 models = await checkVerbooModels(postLoginToken);
303700
- if (models.length > 0) {
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-13T19:37:58.646Z").getTime();
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.0"
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.0";
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-13T19:37:58.646Z"})`
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.0";
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.0") {
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.0";
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.0", maxVersion)) {
537944
- logForDebugging(`PackageManagerAutoUpdater: current version ${"0.13.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
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.0", latest) && !shouldSkipVersion(latest);
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.0"} -> ${latest}`);
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.0"
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.0", latest))
554172
+ if (!latest || gte("0.13.2", latest))
553939
554173
  return;
553940
554174
  writeToStdout(`
553941
- Nova versão disponível: ${latest} (atual: ${"0.13.0"})
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.0",
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.0",
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.0",
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.0",
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.0"}
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.0", latest)) {
589735
- writeToStdout(`Update available: ${"0.13.0"} → ${latest}
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.0", latest)) {
589752
- writeToStdout(`Update available: ${"0.13.0"} → ${latest}
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.0", latest)) {
589769
- writeToStdout(`Update available: ${"0.13.0"} → ${latest}
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.0") {
589823
- writeToStdout(source_default.green(`Verboo Code is up to date (${"0.13.0"})`) + `
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.0"} to version ${result.latestVersion}`) + `
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.0") {
589887
- writeToStdout(source_default.green(`Verboo Code is up to date (${"0.13.0"})`) + `
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.0"})
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.0"} to version ${latestVersion}`) + `
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.0",
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.0 (${cliDesc})`, "-v, --version", "Output the version number");
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.0"} (Verboo Code)`);
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=4C258D3E6200781664756E2164756E21
592985
+ //# debugId=1271E869CB00C30E64756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verboo/code",
3
- "version": "0.13.0",
3
+ "version": "0.13.2",
4
4
  "description": "Verboo Code — coding agent for the Verboo platform",
5
5
  "type": "module",
6
6
  "bin": {