@verboo/code 0.7.7 → 0.7.9

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 +142 -51
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -17015,7 +17015,7 @@ function fileSuffixForOauthConfig() {
17015
17015
  }
17016
17016
  }
17017
17017
  function isVerbooMode() {
17018
- return getOauthConfig().CLIENT_ID === "verboo-code-cli";
17018
+ return true;
17019
17019
  }
17020
17020
  function getActiveScopes() {
17021
17021
  return isVerbooMode() ? VERBOO_OAUTH_SCOPES : ALL_OAUTH_SCOPES;
@@ -36307,6 +36307,9 @@ function parseModelFlag(args) {
36307
36307
  return value;
36308
36308
  }
36309
36309
  function applyProviderFlag(provider, args) {
36310
+ return {
36311
+ error: "Verboo Code usa apenas o provider nativo Verboo."
36312
+ };
36310
36313
  if (!VALID_PROVIDERS.includes(provider)) {
36311
36314
  return {
36312
36315
  error: `Unknown provider "${provider}". Valid providers: ${VALID_PROVIDERS.join(", ")}`
@@ -109959,6 +109962,7 @@ __export(exports_client, {
109959
109962
  getOrganizationUUID: () => getOrganizationUUID,
109960
109963
  fetchProfileInfo: () => fetchProfileInfo,
109961
109964
  fetchAndStoreUserRoles: () => fetchAndStoreUserRoles,
109965
+ exchangeCodeForTokensWithUri: () => exchangeCodeForTokensWithUri,
109962
109966
  exchangeCodeForTokens: () => exchangeCodeForTokens,
109963
109967
  createAndStoreApiKey: () => createAndStoreApiKey,
109964
109968
  buildAuthUrl: () => buildAuthUrl
@@ -110021,6 +110025,17 @@ async function exchangeCodeForTokens(authorizationCode, state, codeVerifier, por
110021
110025
  logEvent("tengu_oauth_token_exchange_success", {});
110022
110026
  return response;
110023
110027
  }
110028
+ async function exchangeCodeForTokensWithUri(authorizationCode, codeVerifier, redirectUri) {
110029
+ const response = await postOAuthForm({
110030
+ grant_type: "authorization_code",
110031
+ code: authorizationCode,
110032
+ redirect_uri: redirectUri,
110033
+ client_id: getOauthConfig().CLIENT_ID,
110034
+ code_verifier: codeVerifier
110035
+ });
110036
+ logEvent("tengu_oauth_token_exchange_success", {});
110037
+ return response;
110038
+ }
110024
110039
  function normalizeOAuthTokenResponse(data) {
110025
110040
  return {
110026
110041
  ...data,
@@ -115487,7 +115502,7 @@ function printStartupScreen(modelOverride) {
115487
115502
  const home = process.env.HOME || process.env.USERPROFILE || "";
115488
115503
  const cwd2 = process.cwd();
115489
115504
  const displayCwd = home && cwd2.startsWith(home) ? `~${cwd2.slice(home.length)}` : cwd2;
115490
- const version2 = "0.7.7";
115505
+ const version2 = "0.7.9";
115491
115506
  const bold2 = `${ESC}1m`;
115492
115507
  const PURPLE = rgb(...ACCENT);
115493
115508
  const SOFT = rgb(...CREAM);
@@ -193578,7 +193593,7 @@ async function* openaiStreamToAnthropic(response, model, signal) {
193578
193593
  }
193579
193594
  yield {
193580
193595
  type: "content_block_delta",
193581
- index: contentBlockIndex,
193596
+ index: hasClosedThinking ? contentBlockIndex - 1 : contentBlockIndex,
193582
193597
  delta: { type: "thinking_delta", thinking: delta.reasoning_content }
193583
193598
  };
193584
193599
  }
@@ -201038,6 +201053,24 @@ async function getAnthropicClient({
201038
201053
  fetch: resolvedFetch
201039
201054
  }
201040
201055
  };
201056
+ const useOAuthToken = isClaudeAISubscriber() || isVerbooMode();
201057
+ const accessToken = useOAuthToken ? getClaudeAIOAuthTokens()?.accessToken : undefined;
201058
+ if (isVerbooMode()) {
201059
+ if (!accessToken) {
201060
+ process.stderr.write("[Verboo] ERRO: token de acesso não encontrado. Execute `verboo /login`.\n");
201061
+ }
201062
+ const { createOpenAIShimClient: createOpenAIShimClient2 } = await Promise.resolve().then(() => (init_openaiShim(), exports_openaiShim));
201063
+ return createOpenAIShimClient2({
201064
+ defaultHeaders,
201065
+ maxRetries,
201066
+ timeout: parseInt(process.env.API_TIMEOUT_MS || String(600000), 10),
201067
+ providerOverride: {
201068
+ model: model ?? "",
201069
+ baseURL: VERBOO_ROUTER_URL,
201070
+ apiKey: accessToken ?? ""
201071
+ }
201072
+ });
201073
+ }
201041
201074
  if (providerOverride) {
201042
201075
  const { createOpenAIShimClient: createOpenAIShimClient2 } = await Promise.resolve().then(() => (init_openaiShim(), exports_openaiShim));
201043
201076
  const safeHeaders = {};
@@ -201150,24 +201183,6 @@ async function getAnthropicClient({
201150
201183
  };
201151
201184
  return new AnthropicVertex(vertexArgs);
201152
201185
  }
201153
- const useOAuthToken = isClaudeAISubscriber() || isVerbooMode();
201154
- const accessToken = useOAuthToken ? getClaudeAIOAuthTokens()?.accessToken : undefined;
201155
- if (isVerbooMode()) {
201156
- if (!accessToken) {
201157
- process.stderr.write("[Verboo] ERRO: token de acesso não encontrado. Execute `verboo /login`.\n");
201158
- }
201159
- const { createOpenAIShimClient: createOpenAIShimClient2 } = await Promise.resolve().then(() => (init_openaiShim(), exports_openaiShim));
201160
- return createOpenAIShimClient2({
201161
- defaultHeaders,
201162
- maxRetries,
201163
- timeout: parseInt(process.env.API_TIMEOUT_MS || String(600000), 10),
201164
- providerOverride: {
201165
- model: model ?? "",
201166
- baseURL: VERBOO_ROUTER_URL,
201167
- apiKey: accessToken ?? ""
201168
- }
201169
- });
201170
- }
201171
201186
  const clientConfig = {
201172
201187
  apiKey: useOAuthToken ? null : apiKey || getAnthropicApiKey(),
201173
201188
  authToken: accessToken,
@@ -260930,7 +260945,7 @@ function printResumeHint() {
260930
260945
  }
260931
260946
  writeSync2(1, source_default.dim(`
260932
260947
  Resume this session with:
260933
- openclaude --resume ${resumeArg}
260948
+ verboo --resume ${resumeArg}
260934
260949
  `));
260935
260950
  resumeHintPrinted = true;
260936
260951
  } catch {}
@@ -272206,8 +272221,10 @@ __export(exports_auth2, {
272206
272221
  installOAuthTokens: () => installOAuthTokens,
272207
272222
  authStatus: () => authStatus,
272208
272223
  authLogout: () => authLogout,
272224
+ authLoginHeadless: () => authLoginHeadless,
272209
272225
  authLogin: () => authLogin
272210
272226
  });
272227
+ import * as readline from "node:readline";
272211
272228
  async function installOAuthTokens(tokens) {
272212
272229
  await performLogout({ clearOnboarding: false });
272213
272230
  const profile = tokens.profile ?? await getOauthProfileFromOauthToken(tokens.accessToken);
@@ -272458,6 +272475,66 @@ async function authLogout() {
272458
272475
  `);
272459
272476
  process.exit(0);
272460
272477
  }
272478
+ async function authLoginHeadless() {
272479
+ const config2 = getOauthConfig();
272480
+ const codeVerifier = generateCodeVerifier();
272481
+ const codeChallenge = await generateCodeChallenge(codeVerifier);
272482
+ const state = generateState();
272483
+ const params = new URLSearchParams({
272484
+ client_id: config2.CLIENT_ID,
272485
+ redirect_uri: HEADLESS_REDIRECT_URI,
272486
+ response_type: "code",
272487
+ code_challenge: codeChallenge,
272488
+ code_challenge_method: "S256",
272489
+ state,
272490
+ scope: getActiveScopes().join(" ")
272491
+ });
272492
+ const url3 = `${config2.CONSOLE_AUTHORIZE_URL}?${params}`;
272493
+ process.stdout.write(`
272494
+ Abra este link em qualquer navegador:
272495
+
272496
+ `);
272497
+ process.stdout.write(` ${url3}
272498
+
272499
+ `);
272500
+ process.stdout.write("Após autorizar, cole o código exibido e pressione Enter: ");
272501
+ const code = (await readOneLine()).trim();
272502
+ if (!code) {
272503
+ process.stderr.write(`
272504
+ Código não informado. Cancelado.
272505
+ `);
272506
+ process.exit(1);
272507
+ }
272508
+ try {
272509
+ const tokenResponse = await exchangeCodeForTokensWithUri(code, codeVerifier, HEADLESS_REDIRECT_URI);
272510
+ const tokens = {
272511
+ accessToken: tokenResponse.access_token,
272512
+ refreshToken: tokenResponse.refresh_token ?? null,
272513
+ expiresAt: Date.now() + (tokenResponse.expires_in ?? 900) * 1000,
272514
+ scopes: tokenResponse.scope?.split(" ").filter(Boolean) ?? [],
272515
+ subscriptionType: null,
272516
+ rateLimitTier: null
272517
+ };
272518
+ await installOAuthTokens(tokens);
272519
+ process.stdout.write(`Login realizado com sucesso.
272520
+ `);
272521
+ process.exit(0);
272522
+ } catch (err2) {
272523
+ process.stderr.write(`Erro ao trocar o código: ${errorMessage(err2)}
272524
+ `);
272525
+ process.exit(1);
272526
+ }
272527
+ }
272528
+ function readOneLine() {
272529
+ return new Promise((resolve23) => {
272530
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
272531
+ rl.once("line", (line) => {
272532
+ rl.close();
272533
+ resolve23(line);
272534
+ });
272535
+ });
272536
+ }
272537
+ var HEADLESS_REDIRECT_URI = "https://code.verboo.ai/pt/cli-auth/manual";
272461
272538
  var init_auth5 = __esm(() => {
272462
272539
  init_logout();
272463
272540
  init_errorUtils();
@@ -272477,6 +272554,7 @@ var init_auth5 = __esm(() => {
272477
272554
  init_slowOperations();
272478
272555
  init_status();
272479
272556
  init_oauth();
272557
+ init_crypto2();
272480
272558
  });
272481
272559
 
272482
272560
  // src/services/oauth/verbooStartupAuth.ts
@@ -376716,7 +376794,7 @@ function getAnthropicEnvMetadata() {
376716
376794
  function getBuildAgeMinutes() {
376717
376795
  if (false)
376718
376796
  ;
376719
- const buildTime = new Date("2026-04-29T17:32:40.324Z").getTime();
376797
+ const buildTime = new Date("2026-04-30T10:27:56.054Z").getTime();
376720
376798
  if (isNaN(buildTime))
376721
376799
  return;
376722
376800
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -417243,7 +417321,7 @@ function buildPrimarySection() {
417243
417321
  }, undefined, false, undefined, this);
417244
417322
  return [{
417245
417323
  label: "Version",
417246
- value: "0.7.7"
417324
+ value: "0.7.9"
417247
417325
  }, {
417248
417326
  label: "Session name",
417249
417327
  value: nameValue
@@ -485193,7 +485271,7 @@ var init_bridge_kick = __esm(() => {
485193
485271
  var call60 = async () => {
485194
485272
  return {
485195
485273
  type: "text",
485196
- value: `${"99.0.0"} (built ${"2026-04-29T17:32:40.324Z"})`
485274
+ value: `${"99.0.0"} (built ${"2026-04-30T10:27:56.054Z"})`
485197
485275
  };
485198
485276
  }, version2, version_default;
485199
485277
  var init_version = __esm(() => {
@@ -560851,7 +560929,7 @@ function WelcomeV2() {
560851
560929
  dimColor: true,
560852
560930
  children: [
560853
560931
  "v",
560854
- "0.7.7",
560932
+ "0.7.9",
560855
560933
  " "
560856
560934
  ]
560857
560935
  }, undefined, true, undefined, this)
@@ -561038,7 +561116,7 @@ function WelcomeV2() {
561038
561116
  dimColor: true,
561039
561117
  children: [
561040
561118
  "v",
561041
- "0.7.7",
561119
+ "0.7.9",
561042
561120
  " "
561043
561121
  ]
561044
561122
  }, undefined, true, undefined, this)
@@ -561254,7 +561332,7 @@ function AppleTerminalWelcomeV2(t0) {
561254
561332
  dimColor: true,
561255
561333
  children: [
561256
561334
  "v",
561257
- "0.7.7",
561335
+ "0.7.9",
561258
561336
  " "
561259
561337
  ]
561260
561338
  }, undefined, true, undefined, this);
@@ -561463,7 +561541,7 @@ function AppleTerminalWelcomeV2(t0) {
561463
561541
  dimColor: true,
561464
561542
  children: [
561465
561543
  "v",
561466
- "0.7.7",
561544
+ "0.7.9",
561467
561545
  " "
561468
561546
  ]
561469
561547
  }, undefined, true, undefined, this);
@@ -579491,7 +579569,7 @@ __export(exports_update, {
579491
579569
  async function update() {
579492
579570
  if (getAPIProvider() !== "firstParty") {
579493
579571
  writeToStdout(source_default.yellow(`Auto-update is not available for third-party provider builds.
579494
- `) + `Current version: ${"0.7.7"}
579572
+ `) + `Current version: ${"0.7.9"}
579495
579573
 
579496
579574
  ` + `To update, reinstall from npm:
579497
579575
  ` + source_default.bold(` npm install -g ${"@verboo/code"}@latest`) + `
@@ -579502,7 +579580,7 @@ async function update() {
579502
579580
  await gracefulShutdown(0);
579503
579581
  }
579504
579582
  logEvent("tengu_update_check", {});
579505
- writeToStdout(`Current version: ${"0.7.7"}
579583
+ writeToStdout(`Current version: ${"0.7.9"}
579506
579584
  `);
579507
579585
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
579508
579586
  writeToStdout(`Checking for updates to ${channel} version...
@@ -579587,8 +579665,8 @@ async function update() {
579587
579665
  writeToStdout(`Claude is managed by Homebrew.
579588
579666
  `);
579589
579667
  const latest = await getLatestVersion(channel);
579590
- if (latest && !gte("0.7.7", latest)) {
579591
- writeToStdout(`Update available: ${"0.7.7"} → ${latest}
579668
+ if (latest && !gte("0.7.9", latest)) {
579669
+ writeToStdout(`Update available: ${"0.7.9"} → ${latest}
579592
579670
  `);
579593
579671
  writeToStdout(`
579594
579672
  `);
@@ -579604,8 +579682,8 @@ async function update() {
579604
579682
  writeToStdout(`Claude is managed by winget.
579605
579683
  `);
579606
579684
  const latest = await getLatestVersion(channel);
579607
- if (latest && !gte("0.7.7", latest)) {
579608
- writeToStdout(`Update available: ${"0.7.7"} → ${latest}
579685
+ if (latest && !gte("0.7.9", latest)) {
579686
+ writeToStdout(`Update available: ${"0.7.9"} → ${latest}
579609
579687
  `);
579610
579688
  writeToStdout(`
579611
579689
  `);
@@ -579621,8 +579699,8 @@ async function update() {
579621
579699
  writeToStdout(`Claude is managed by apk.
579622
579700
  `);
579623
579701
  const latest = await getLatestVersion(channel);
579624
- if (latest && !gte("0.7.7", latest)) {
579625
- writeToStdout(`Update available: ${"0.7.7"} → ${latest}
579702
+ if (latest && !gte("0.7.9", latest)) {
579703
+ writeToStdout(`Update available: ${"0.7.9"} → ${latest}
579626
579704
  `);
579627
579705
  writeToStdout(`
579628
579706
  `);
@@ -579687,11 +579765,11 @@ async function update() {
579687
579765
  `);
579688
579766
  await gracefulShutdown(1);
579689
579767
  }
579690
- if (result.latestVersion === "0.7.7") {
579691
- writeToStdout(source_default.green(`Verboo Code is up to date (${"0.7.7"})`) + `
579768
+ if (result.latestVersion === "0.7.9") {
579769
+ writeToStdout(source_default.green(`Verboo Code is up to date (${"0.7.9"})`) + `
579692
579770
  `);
579693
579771
  } else {
579694
- writeToStdout(source_default.green(`Successfully updated from ${"0.7.7"} to version ${result.latestVersion}`) + `
579772
+ writeToStdout(source_default.green(`Successfully updated from ${"0.7.9"} to version ${result.latestVersion}`) + `
579695
579773
  `);
579696
579774
  await regenerateCompletionCache();
579697
579775
  }
@@ -579751,12 +579829,12 @@ async function update() {
579751
579829
  `);
579752
579830
  await gracefulShutdown(1);
579753
579831
  }
579754
- if (latestVersion === "0.7.7") {
579755
- writeToStdout(source_default.green(`Verboo Code is up to date (${"0.7.7"})`) + `
579832
+ if (latestVersion === "0.7.9") {
579833
+ writeToStdout(source_default.green(`Verboo Code is up to date (${"0.7.9"})`) + `
579756
579834
  `);
579757
579835
  await gracefulShutdown(0);
579758
579836
  }
579759
- writeToStdout(`New version available: ${latestVersion} (current: ${"0.7.7"})
579837
+ writeToStdout(`New version available: ${latestVersion} (current: ${"0.7.9"})
579760
579838
  `);
579761
579839
  writeToStdout(`Installing update...
579762
579840
  `);
@@ -579801,7 +579879,7 @@ async function update() {
579801
579879
  logForDebugging2(`update: Installation status: ${status2}`);
579802
579880
  switch (status2) {
579803
579881
  case "success":
579804
- writeToStdout(source_default.green(`Successfully updated from ${"0.7.7"} to version ${latestVersion}`) + `
579882
+ writeToStdout(source_default.green(`Successfully updated from ${"0.7.9"} to version ${latestVersion}`) + `
579805
579883
  `);
579806
579884
  await regenerateCompletionCache();
579807
579885
  break;
@@ -581854,7 +581932,7 @@ Usage: verboo --remote "your task description"`, () => gracefulShutdown(1));
581854
581932
  pendingHookMessages
581855
581933
  }, renderAndRun);
581856
581934
  }
581857
- }).version(`0.7.7 (${cliDesc})`, "-v, --version", "Output the version number");
581935
+ }).version(`0.7.9 (${cliDesc})`, "-v, --version", "Output the version number");
581858
581936
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
581859
581937
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
581860
581938
  if (canUserConfigureAdvisor()) {
@@ -581949,15 +582027,21 @@ Usage: verboo --remote "your task description"`, () => gracefulShutdown(1));
581949
582027
  if (false) {}
581950
582028
  if (false) {}
581951
582029
  const auth2 = program2.command("auth").description("Manage authentication").configureHelp(createSortedHelpConfig());
581952
- auth2.command("login").description("Sign in to your Verboo account").option("--email <email>", "Pre-populate email address on the login page").option("--sso", "Force SSO login flow").option("--console", "Use Verboo Console (API usage billing) instead of subscription").option("--claudeai", "Use Verboo subscription (default)").action(async ({
582030
+ auth2.command("login").description("Sign in to your Verboo account").option("--email <email>", "Pre-populate email address on the login page").option("--sso", "Force SSO login flow").option("--console", "Use Verboo Console (API usage billing) instead of subscription").option("--claudeai", "Use Verboo subscription (default)").option("--headless", "Login sem navegador: exibe URL para abrir em outro dispositivo e solicita código (ideal para servidores/CI)").action(async ({
581953
582031
  email: email3,
581954
582032
  sso,
581955
582033
  console: useConsole,
581956
- claudeai
582034
+ claudeai,
582035
+ headless
581957
582036
  }) => {
581958
582037
  const {
581959
- authLogin: authLogin2
582038
+ authLogin: authLogin2,
582039
+ authLoginHeadless: authLoginHeadless2
581960
582040
  } = await Promise.resolve().then(() => (init_auth5(), exports_auth2));
582041
+ if (headless) {
582042
+ await authLoginHeadless2();
582043
+ return;
582044
+ }
581961
582045
  await authLogin2({
581962
582046
  email: email3,
581963
582047
  sso,
@@ -581977,6 +582061,12 @@ Usage: verboo --remote "your task description"`, () => gracefulShutdown(1));
581977
582061
  } = await Promise.resolve().then(() => (init_auth5(), exports_auth2));
581978
582062
  await authLogout2();
581979
582063
  });
582064
+ program2.command("logout").description("Atalho para `auth logout`").action(async () => {
582065
+ const {
582066
+ authLogout: authLogout2
582067
+ } = await Promise.resolve().then(() => (init_auth5(), exports_auth2));
582068
+ await authLogout2();
582069
+ });
581980
582070
  const coworkOption = () => new Option("--cowork", "Use cowork_plugins directory").hideHelp();
581981
582071
  const pluginCmd = program2.command("plugin").alias("plugins").description("Manage Verboo Code plugins").configureHelp(createSortedHelpConfig());
581982
582072
  pluginCmd.command("validate <path>").description("Validate a plugin or marketplace manifest").addOption(coworkOption()).action(async (manifestPath, options2) => {
@@ -582410,7 +582500,7 @@ if (false) {}
582410
582500
  async function main2() {
582411
582501
  const args = process.argv.slice(2);
582412
582502
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
582413
- console.log(`${"0.7.7"} (Verboo Code)`);
582503
+ console.log(`${"0.7.9"} (Verboo Code)`);
582414
582504
  return;
582415
582505
  }
582416
582506
  if (args.includes("--provider")) {
@@ -582546,7 +582636,8 @@ async function main2() {
582546
582636
  }
582547
582637
  profileCheckpoint2("cli_before_main_import");
582548
582638
  const { isVerbooMode: isVerbooMode2 } = await Promise.resolve().then(() => (init_oauth(), exports_oauth));
582549
- if (isVerbooMode2() && !(args[0] === "auth" && args[1] === "login")) {
582639
+ const skipsAuth = args.includes("--help") || args.includes("-h") || args[0] === "auth" || args[0] === "logout" || args[0] === "update";
582640
+ if (isVerbooMode2() && !skipsAuth) {
582550
582641
  const { ensureVerbooAuthenticated: ensureVerbooAuthenticated2 } = await Promise.resolve().then(() => (init_verbooStartupAuth(), exports_verbooStartupAuth));
582551
582642
  try {
582552
582643
  await ensureVerbooAuthenticated2();
@@ -582565,4 +582656,4 @@ async function main2() {
582565
582656
  }
582566
582657
  main2();
582567
582658
 
582568
- //# debugId=2A7860A73BFAD4B264756E2164756E21
582659
+ //# debugId=6BDE2B381516DD3664756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verboo/code",
3
- "version": "0.7.7",
3
+ "version": "0.7.9",
4
4
  "description": "Verboo Code — coding agent for the Verboo platform",
5
5
  "type": "module",
6
6
  "bin": {