@duheso/zerocli 0.9.6 → 0.9.7

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 +215 -86
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -119192,7 +119192,7 @@ function buildProviderInfoLines() {
119192
119192
  const sLen = ` ● ${sL} ${sReady}`.length;
119193
119193
  out.push(boxRow(sRow, W2, sLen));
119194
119194
  out.push(`${rgb(...BORDER)}╚${"═".repeat(W2 - 2)}╝${RESET}`);
119195
- out.push(` ${DIM}${rgb(...DIMCOL)}zero ${RESET}${rgb(...ACCENT)}v${"0.9.6"}${RESET}`);
119195
+ out.push(` ${DIM}${rgb(...DIMCOL)}zero ${RESET}${rgb(...ACCENT)}v${"0.9.7"}${RESET}`);
119196
119196
  return out;
119197
119197
  }
119198
119198
  function printStartupScreen() {}
@@ -147383,7 +147383,7 @@ function getAttributionHeader(fingerprint) {
147383
147383
  if (!isAttributionHeaderEnabled()) {
147384
147384
  return "";
147385
147385
  }
147386
- const version2 = `${"0.9.6"}.${fingerprint}`;
147386
+ const version2 = `${"0.9.7"}.${fingerprint}`;
147387
147387
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
147388
147388
  const cch = "";
147389
147389
  const workload = getWorkload();
@@ -190393,7 +190393,7 @@ var init_imageValidation = __esm(() => {
190393
190393
 
190394
190394
  // src/utils/userAgent.ts
190395
190395
  function getZeroCodeUserAgent() {
190396
- return `claude-code/${"0.9.6"}`;
190396
+ return `claude-code/${"0.9.7"}`;
190397
190397
  }
190398
190398
 
190399
190399
  // src/utils/http.ts
@@ -190402,7 +190402,7 @@ function getUserAgent() {
190402
190402
  const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
190403
190403
  const workload = getWorkload();
190404
190404
  const workloadSuffix = workload ? `, workload/${workload}` : "";
190405
- return `claude-cli/${"0.9.6"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
190405
+ return `claude-cli/${"0.9.7"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
190406
190406
  }
190407
190407
  function getMCPUserAgent() {
190408
190408
  const parts = [];
@@ -190416,7 +190416,7 @@ function getMCPUserAgent() {
190416
190416
  parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
190417
190417
  }
190418
190418
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
190419
- return `claude-code/${"0.9.6"}${suffix}`;
190419
+ return `claude-code/${"0.9.7"}${suffix}`;
190420
190420
  }
190421
190421
  function getWebFetchUserAgent() {
190422
190422
  const supportUrl = getAPIProvider() === "firstParty" ? "https://support.anthropic.com/" : "https://github.com/Duheso/ZeroCLI";
@@ -192892,8 +192892,9 @@ async function* openaiStreamToAnthropic(response, model, signal) {
192892
192892
  return;
192893
192893
  const decoder = new TextDecoder;
192894
192894
  let buffer = "";
192895
- const STREAM_IDLE_TIMEOUT_MS = 120000;
192895
+ const STREAM_IDLE_TIMEOUT_MS = parseInt(process.env.OPENAI_STREAM_IDLE_TIMEOUT_MS ?? "300000", 10) || 300000;
192896
192896
  let lastDataTime = Date.now();
192897
+ let lastStallWarningTime = 0;
192897
192898
  async function readWithTimeout() {
192898
192899
  return new Promise((resolve19, reject) => {
192899
192900
  const timeoutId = setTimeout(() => {
@@ -192904,23 +192905,33 @@ async function* openaiStreamToAnthropic(response, model, signal) {
192904
192905
  ` + `[ZERO-DEBUG] ENCERRAMENTO DETECTADO: STREAM IDLE TIMEOUT
192905
192906
  ` + `========================================================================
192906
192907
  ` + `CAUSA: O stream SSE ficou ${elapsed}s sem receber dados do modelo (vLLM/OpenAI).
192907
- ` + `LIMITE ATUAL: ${STREAM_IDLE_TIMEOUT_MS / 1000}s (HARDCODED em openaiShim.ts:916).
192908
+ ` + `LIMITE ATUAL: ${STREAM_IDLE_TIMEOUT_MS / 1000}s (configuravel via OPENAI_STREAM_IDLE_TIMEOUT_MS).
192908
192909
  ` + `EFEITO: Zero encerrou o processamento porque assumiu que a conexao caiu.
192909
- ` + `CORRECAO: Aumentar STREAM_IDLE_TIMEOUT_MS em src/services/api/openaiShim.ts
192910
- ` + ` ou tornar configuravel via env var OPENAI_STREAM_IDLE_TIMEOUT_MS.
192910
+ ` + `CORRECAO: Aumentar o timeout via env var OPENAI_STREAM_IDLE_TIMEOUT_MS (em ms).
192911
192911
  ` + ` Modelos locais (vLLM) podem demorar mais que 120s entre chunks.
192912
192912
  ` + `========================================================================`, { level: "error" });
192913
192913
  reject(new Error(msg));
192914
192914
  }, STREAM_IDLE_TIMEOUT_MS);
192915
+ const STALL_WARNING_INTERVAL_MS = 30000;
192916
+ const stallWarningId = setInterval(() => {
192917
+ const idleSeconds = Math.round((Date.now() - lastDataTime) / 1000);
192918
+ const now2 = Date.now();
192919
+ if (idleSeconds >= 30 && now2 - lastStallWarningTime >= STALL_WARNING_INTERVAL_MS) {
192920
+ lastStallWarningTime = now2;
192921
+ logForDebugging(`[ZERO-DEBUG] STALL WARNING: Stream sem dados há ${idleSeconds}s. ` + `Timeout em ${Math.round((STREAM_IDLE_TIMEOUT_MS - (now2 - lastDataTime)) / 1000)}s. ` + `Modelo ainda pode estar processando (vLLM/local models são lentos).`, { level: "warn" });
192922
+ }
192923
+ }, STALL_WARNING_INTERVAL_MS);
192915
192924
  let abortCleanup;
192916
192925
  if (signal) {
192917
192926
  abortCleanup = () => {
192918
192927
  clearTimeout(timeoutId);
192928
+ clearInterval(stallWarningId);
192919
192929
  };
192920
192930
  signal.addEventListener("abort", abortCleanup, { once: true });
192921
192931
  }
192922
192932
  reader.read().then((result) => {
192923
192933
  clearTimeout(timeoutId);
192934
+ clearInterval(stallWarningId);
192924
192935
  if (signal && abortCleanup)
192925
192936
  signal.removeEventListener("abort", abortCleanup);
192926
192937
  if (result.value)
@@ -192928,6 +192939,7 @@ async function* openaiStreamToAnthropic(response, model, signal) {
192928
192939
  resolve19(result);
192929
192940
  }, (err2) => {
192930
192941
  clearTimeout(timeoutId);
192942
+ clearInterval(stallWarningId);
192931
192943
  if (signal && abortCleanup)
192932
192944
  signal.removeEventListener("abort", abortCleanup);
192933
192945
  reject(err2);
@@ -244890,7 +244902,7 @@ function getTelemetryAttributes() {
244890
244902
  attributes["session.id"] = sessionId;
244891
244903
  }
244892
244904
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
244893
- attributes["app.version"] = "0.9.6";
244905
+ attributes["app.version"] = "0.9.7";
244894
244906
  }
244895
244907
  const oauthAccount = getOauthAccountInfo();
244896
244908
  if (oauthAccount) {
@@ -257129,7 +257141,7 @@ function computeFingerprint(messageText, version2) {
257129
257141
  }
257130
257142
  function computeFingerprintFromMessages(messages) {
257131
257143
  const firstMessageText = extractFirstMessageText(messages);
257132
- return computeFingerprint(firstMessageText, "0.9.6");
257144
+ return computeFingerprint(firstMessageText, "0.9.7");
257133
257145
  }
257134
257146
  var FINGERPRINT_SALT = "59cf53e54c78";
257135
257147
  var init_fingerprint = () => {};
@@ -257171,7 +257183,7 @@ async function sideQuery(opts) {
257171
257183
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
257172
257184
  }
257173
257185
  const messageText = extractFirstUserMessageText(messages);
257174
- const fingerprint = computeFingerprint(messageText, "0.9.6");
257186
+ const fingerprint = computeFingerprint(messageText, "0.9.7");
257175
257187
  const attributionHeader = getAttributionHeader(fingerprint);
257176
257188
  const systemBlocks = [
257177
257189
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -266073,7 +266085,7 @@ var init_user = __esm(() => {
266073
266085
  deviceId,
266074
266086
  sessionId: getSessionId(),
266075
266087
  email: getEmail(),
266076
- appVersion: "0.9.6",
266088
+ appVersion: "0.9.7",
266077
266089
  platform: getHostPlatformForAnalytics(),
266078
266090
  organizationUuid,
266079
266091
  accountUuid,
@@ -266467,7 +266479,7 @@ async function initializeBetaTracing(resource) {
266467
266479
  });
266468
266480
  logs.setGlobalLoggerProvider(loggerProvider);
266469
266481
  setLoggerProvider(loggerProvider);
266470
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "0.9.6");
266482
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "0.9.7");
266471
266483
  setEventLogger(eventLogger);
266472
266484
  process.on("beforeExit", async () => {
266473
266485
  await loggerProvider?.forceFlush();
@@ -266507,7 +266519,7 @@ async function initializeTelemetry() {
266507
266519
  const platform3 = getPlatform();
266508
266520
  const baseAttributes = {
266509
266521
  [ATTR_SERVICE_NAME3]: "claude-code",
266510
- [ATTR_SERVICE_VERSION3]: "0.9.6"
266522
+ [ATTR_SERVICE_VERSION3]: "0.9.7"
266511
266523
  };
266512
266524
  if (platform3 === "wsl") {
266513
266525
  const wslVersion = getWslVersion();
@@ -266552,7 +266564,7 @@ async function initializeTelemetry() {
266552
266564
  } catch {}
266553
266565
  };
266554
266566
  registerCleanup(shutdownTelemetry2);
266555
- return meterProvider2.getMeter("com.anthropic.claude_code", "0.9.6");
266567
+ return meterProvider2.getMeter("com.anthropic.claude_code", "0.9.7");
266556
266568
  }
266557
266569
  const meterProvider = new MeterProvider3({
266558
266570
  resource,
@@ -266572,7 +266584,7 @@ async function initializeTelemetry() {
266572
266584
  });
266573
266585
  logs.setGlobalLoggerProvider(loggerProvider);
266574
266586
  setLoggerProvider(loggerProvider);
266575
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "0.9.6");
266587
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "0.9.7");
266576
266588
  setEventLogger(eventLogger);
266577
266589
  logForDebugging("[3P telemetry] Event logger set successfully");
266578
266590
  process.on("beforeExit", async () => {
@@ -266634,7 +266646,7 @@ Current timeout: ${timeoutMs}ms
266634
266646
  }
266635
266647
  };
266636
266648
  registerCleanup(shutdownTelemetry);
266637
- return meterProvider.getMeter("com.anthropic.claude_code", "0.9.6");
266649
+ return meterProvider.getMeter("com.anthropic.claude_code", "0.9.7");
266638
266650
  }
266639
266651
  async function flushTelemetry() {
266640
266652
  const meterProvider = getMeterProvider();
@@ -267446,9 +267458,9 @@ async function assertMinVersion() {
267446
267458
  }
267447
267459
  try {
267448
267460
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
267449
- if (versionConfig.minVersion && lt("0.9.6", versionConfig.minVersion)) {
267461
+ if (versionConfig.minVersion && lt("0.9.7", versionConfig.minVersion)) {
267450
267462
  console.error(`
267451
- It looks like your version of ZeroCLI (${"0.9.6"}) needs an update.
267463
+ It looks like your version of ZeroCLI (${"0.9.7"}) needs an update.
267452
267464
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
267453
267465
 
267454
267466
  To update, please run:
@@ -267664,7 +267676,7 @@ async function installGlobalPackage(specificVersion) {
267664
267676
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
267665
267677
  logEvent("tengu_auto_updater_lock_contention", {
267666
267678
  pid: process.pid,
267667
- currentVersion: "0.9.6"
267679
+ currentVersion: "0.9.7"
267668
267680
  });
267669
267681
  return "in_progress";
267670
267682
  }
@@ -267673,7 +267685,7 @@ async function installGlobalPackage(specificVersion) {
267673
267685
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
267674
267686
  logError2(new Error("Windows NPM detected in WSL environment"));
267675
267687
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
267676
- currentVersion: "0.9.6"
267688
+ currentVersion: "0.9.7"
267677
267689
  });
267678
267690
  console.error(`
267679
267691
  Error: Windows NPM detected in WSL
@@ -268227,7 +268239,7 @@ async function getDoctorDiagnostic() {
268227
268239
  const installationType = await getCurrentInstallationType();
268228
268240
  let version2;
268229
268241
  try {
268230
- version2 = "0.9.6";
268242
+ version2 = "0.9.7";
268231
268243
  } catch {
268232
268244
  version2 = "unknown";
268233
268245
  }
@@ -269721,7 +269733,7 @@ function getInstallationEnv() {
269721
269733
  return;
269722
269734
  }
269723
269735
  function getZeroCodeVersion() {
269724
- return "0.9.6";
269736
+ return "0.9.7";
269725
269737
  }
269726
269738
  async function getInstalledVSCodeExtensionVersion(command) {
269727
269739
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -271088,8 +271100,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
271088
271100
  const maxVersion = await getMaxVersion();
271089
271101
  if (maxVersion && gt(version2, maxVersion)) {
271090
271102
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
271091
- if (gte("0.9.6", maxVersion)) {
271092
- logForDebugging(`Native installer: current version ${"0.9.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
271103
+ if (gte("0.9.7", maxVersion)) {
271104
+ logForDebugging(`Native installer: current version ${"0.9.7"} is already at or above maxVersion ${maxVersion}, skipping update`);
271093
271105
  logEvent("tengu_native_update_skipped_max_version", {
271094
271106
  latency_ms: Date.now() - startTime2,
271095
271107
  max_version: maxVersion,
@@ -271100,7 +271112,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
271100
271112
  version2 = maxVersion;
271101
271113
  }
271102
271114
  }
271103
- if (!forceReinstall && version2 === "0.9.6" && await versionIsAvailable(version2) && await isPossibleZeroBinary(executablePath)) {
271115
+ if (!forceReinstall && version2 === "0.9.7" && await versionIsAvailable(version2) && await isPossibleZeroBinary(executablePath)) {
271104
271116
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
271105
271117
  logEvent("tengu_native_update_complete", {
271106
271118
  latency_ms: Date.now() - startTime2,
@@ -372694,8 +372706,77 @@ function getSchemaValidationToolUseResult(tool, input, fallbackMessage) {
372694
372706
  const override = getSchemaValidationErrorOverride(tool, input);
372695
372707
  return `InputValidationError: ${override ?? fallbackMessage ?? ""}`;
372696
372708
  }
372709
+ function tryRepairToolInput(tool, input) {
372710
+ const shape = tool.inputSchema.shape;
372711
+ if (!shape)
372712
+ return input;
372713
+ const expectedKeys = new Set(Object.keys(shape));
372714
+ const inputKeys = Object.keys(input);
372715
+ const unrecognizedKeys = inputKeys.filter((k) => !expectedKeys.has(k));
372716
+ if (unrecognizedKeys.length === 0)
372717
+ return input;
372718
+ const missingKeys = [...expectedKeys].filter((k) => !(k in input) || input[k] === undefined);
372719
+ if (missingKeys.length === 0)
372720
+ return input;
372721
+ const repaired = { ...input };
372722
+ let anyRepaired = false;
372723
+ for (const badKey of unrecognizedKeys) {
372724
+ let bestMatch = null;
372725
+ let bestScore = Infinity;
372726
+ for (const expectedKey of missingKeys) {
372727
+ if (badKey === `${expectedKey}_${expectedKey}` || badKey === `${expectedKey}_${expectedKey.split("_").pop()}` || badKey.startsWith(expectedKey + "_") && badKey.replace(expectedKey + "_", "") === expectedKey.split("_").pop()) {
372728
+ bestMatch = expectedKey;
372729
+ bestScore = 0;
372730
+ break;
372731
+ }
372732
+ if (badKey.startsWith(expectedKey) && badKey.length > expectedKey.length) {
372733
+ const suffix = badKey.slice(expectedKey.length + 1);
372734
+ if (expectedKey.endsWith(suffix) || expectedKey.includes(suffix)) {
372735
+ bestMatch = expectedKey;
372736
+ bestScore = 0;
372737
+ break;
372738
+ }
372739
+ }
372740
+ const dist = levenshteinDistance(badKey, expectedKey);
372741
+ if (dist <= 3 && dist < bestScore) {
372742
+ bestMatch = expectedKey;
372743
+ bestScore = dist;
372744
+ }
372745
+ if ((badKey.includes(expectedKey) || expectedKey.includes(badKey)) && bestScore > 1) {
372746
+ bestMatch = expectedKey;
372747
+ bestScore = 1;
372748
+ }
372749
+ }
372750
+ if (bestMatch) {
372751
+ repaired[bestMatch] = repaired[badKey];
372752
+ delete repaired[badKey];
372753
+ anyRepaired = true;
372754
+ const idx = missingKeys.indexOf(bestMatch);
372755
+ if (idx >= 0)
372756
+ missingKeys.splice(idx, 1);
372757
+ logForDebugging(`[ZERO-DEBUG] Tool param auto-repair: "${badKey}" → "${bestMatch}" (tool: ${tool.name})`);
372758
+ }
372759
+ }
372760
+ return anyRepaired ? repaired : input;
372761
+ }
372762
+ function levenshteinDistance(a2, b) {
372763
+ const m = a2.length;
372764
+ const n2 = b.length;
372765
+ const dp = Array.from({ length: m + 1 }, () => Array(n2 + 1).fill(0));
372766
+ for (let i3 = 0;i3 <= m; i3++)
372767
+ dp[i3][0] = i3;
372768
+ for (let j = 0;j <= n2; j++)
372769
+ dp[0][j] = j;
372770
+ for (let i3 = 1;i3 <= m; i3++) {
372771
+ for (let j = 1;j <= n2; j++) {
372772
+ dp[i3][j] = a2[i3 - 1] === b[j - 1] ? dp[i3 - 1][j - 1] : 1 + Math.min(dp[i3 - 1][j], dp[i3][j - 1], dp[i3 - 1][j - 1]);
372773
+ }
372774
+ }
372775
+ return dp[m][n2];
372776
+ }
372697
372777
  async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContext, canUseTool, assistantMessage, messageId, requestId, mcpServerType, mcpServerBaseUrl, onToolProgress) {
372698
- const parsedInput = tool.inputSchema.safeParse(input);
372778
+ const repairedInput = tryRepairToolInput(tool, input);
372779
+ const parsedInput = tool.inputSchema.safeParse(repairedInput);
372699
372780
  if (!parsedInput.success) {
372700
372781
  const fallbackErrorContent = formatZodValidationError(tool.name, parsedInput.error);
372701
372782
  let errorContent = getSchemaValidationErrorOverride(tool, input) ?? fallbackErrorContent;
@@ -375901,8 +375982,9 @@ async function* queryLoop(params, consumedCommandUuids) {
375901
375982
  continue;
375902
375983
  }
375903
375984
  if (maxOutputTokensRecoveryCount < MAX_OUTPUT_TOKENS_RECOVERY_LIMIT) {
375985
+ logForDebugging(`[ZERO-DEBUG] MAX_TOKENS recovery attempt ${maxOutputTokensRecoveryCount + 1}/${MAX_OUTPUT_TOKENS_RECOVERY_LIMIT}. Enviando nudge para o modelo continuar de onde parou.`);
375904
375986
  const recoveryMessage = createUserMessage({
375905
- content: `Output token limit hit. Resume directly — no apology, no recap of what you were doing. ` + `Pick up mid-thought if that is where the cut happened. Break remaining work into smaller pieces.`,
375987
+ content: `Output token limit hit. Resume directly — no apology, no recap of what you were doing. ` + `Pick up mid-thought if that is where the cut happened. Break remaining work into smaller pieces. Use tool calls (one at a time) rather than generating large blocks of text or code inline.`,
375906
375988
  isMeta: true
375907
375989
  });
375908
375990
  const next2 = {
@@ -376343,7 +376425,7 @@ function getAnthropicEnvMetadata() {
376343
376425
  function getBuildAgeMinutes() {
376344
376426
  if (false)
376345
376427
  ;
376346
- const buildTime = new Date("2026-05-13T13:07:10.047Z").getTime();
376428
+ const buildTime = new Date("2026-05-14T00:59:01.796Z").getTime();
376347
376429
  if (isNaN(buildTime))
376348
376430
  return;
376349
376431
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -380295,6 +380377,29 @@ async function countMessagesTokensWithAPI(messages, tools) {
380295
380377
  containsThinking
380296
380378
  });
380297
380379
  }
380380
+ const provider = getAPIProvider();
380381
+ const openAICompatProviders = new Set([
380382
+ "openai",
380383
+ "github",
380384
+ "codex",
380385
+ "nvidia-nim",
380386
+ "minimax",
380387
+ "mistral",
380388
+ "gemini"
380389
+ ]);
380390
+ if (openAICompatProviders.has(provider)) {
380391
+ logForDebugging(`[ZERO-DEBUG] countTokens: provider="${provider}" não suporta countTokens API. Usando estimativa local.`);
380392
+ let total = 0;
380393
+ const bytesPerToken = getBytesPerTokenForModel(model);
380394
+ for (const msg of messages) {
380395
+ const content = typeof msg.content === "string" ? msg.content : Array.isArray(msg.content) ? msg.content.map((b) => typeof b === "string" ? b : JSON.stringify(b)).join("") : "";
380396
+ total += roughTokenCountEstimation(content, bytesPerToken);
380397
+ }
380398
+ if (tools.length > 0) {
380399
+ total += roughTokenCountEstimation(JSON.stringify(tools), bytesPerToken);
380400
+ }
380401
+ return total;
380402
+ }
380298
380403
  const anthropic = await getAnthropicClient({
380299
380404
  maxRetries: 1,
380300
380405
  model,
@@ -380336,6 +380441,18 @@ function bytesPerTokenForFileType(fileExtension2) {
380336
380441
  return 4;
380337
380442
  }
380338
380443
  }
380444
+ function getTokenizerConfig(model) {
380445
+ const lower = model.toLowerCase();
380446
+ for (const config2 of MODEL_TOKENIZER_CONFIGS) {
380447
+ if (lower.includes(config2.modelFamily)) {
380448
+ return config2;
380449
+ }
380450
+ }
380451
+ return { modelFamily: "unknown", bytesPerToken: 4, supportsJson: true, supportsCode: true };
380452
+ }
380453
+ function getBytesPerTokenForModel(model) {
380454
+ return getTokenizerConfig(model).bytesPerToken;
380455
+ }
380339
380456
  function roughTokenCountEstimationForFileType(content, fileExtension2) {
380340
380457
  return roughTokenCountEstimation(content, bytesPerTokenForFileType(fileExtension2));
380341
380458
  }
@@ -380476,11 +380593,12 @@ async function countTokensWithBedrock({
380476
380593
  return null;
380477
380594
  }
380478
380595
  }
380479
- var TOKEN_COUNT_THINKING_BUDGET = 1024, TOKEN_COUNT_MAX_TOKENS = 2048;
380596
+ var TOKEN_COUNT_THINKING_BUDGET = 1024, TOKEN_COUNT_MAX_TOKENS = 2048, MODEL_TOKENIZER_CONFIGS;
380480
380597
  var init_tokenEstimation = __esm(() => {
380481
380598
  init_providers();
380482
380599
  init_betas();
380483
380600
  init_betas2();
380601
+ init_debug();
380484
380602
  init_envUtils();
380485
380603
  init_log3();
380486
380604
  init_messages3();
@@ -380491,6 +380609,17 @@ var init_tokenEstimation = __esm(() => {
380491
380609
  init_claude();
380492
380610
  init_client6();
380493
380611
  init_vcr();
380612
+ MODEL_TOKENIZER_CONFIGS = [
380613
+ { modelFamily: "claude", bytesPerToken: 3.5, supportsJson: true, supportsCode: true },
380614
+ { modelFamily: "gpt-4", bytesPerToken: 4, supportsJson: true, supportsCode: true },
380615
+ { modelFamily: "gpt-3.5", bytesPerToken: 4, supportsJson: true, supportsCode: true },
380616
+ { modelFamily: "gemini", bytesPerToken: 3.5, supportsJson: true, supportsCode: true },
380617
+ { modelFamily: "llama", bytesPerToken: 3.8, supportsJson: true, supportsCode: true },
380618
+ { modelFamily: "deepseek", bytesPerToken: 3.5, supportsJson: true, supportsCode: true },
380619
+ { modelFamily: "minimax", bytesPerToken: 3.2, supportsJson: true, supportsCode: true },
380620
+ { modelFamily: "qwen", bytesPerToken: 3.5, supportsJson: true, supportsCode: true },
380621
+ { modelFamily: "mistral", bytesPerToken: 3.5, supportsJson: true, supportsCode: true }
380622
+ ];
380494
380623
  });
380495
380624
 
380496
380625
  // src/utils/pdf.ts
@@ -403779,7 +403908,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
403779
403908
  const client2 = new Client({
403780
403909
  name: "claude-code",
403781
403910
  title: "ZeroCLI",
403782
- version: "0.9.6",
403911
+ version: "0.9.7",
403783
403912
  description: "Anthropic's agentic coding tool",
403784
403913
  websiteUrl: PRODUCT_URL
403785
403914
  }, {
@@ -404131,7 +404260,7 @@ var init_client7 = __esm(() => {
404131
404260
  const client2 = new Client({
404132
404261
  name: "claude-code",
404133
404262
  title: "ZeroCLI",
404134
- version: "0.9.6",
404263
+ version: "0.9.7",
404135
404264
  description: "Anthropic's agentic coding tool",
404136
404265
  websiteUrl: PRODUCT_URL
404137
404266
  }, {
@@ -414866,7 +414995,7 @@ function Feedback({
414866
414995
  platform: env2.platform,
414867
414996
  gitRepo: envInfo.isGit,
414868
414997
  terminal: env2.terminal,
414869
- version: "0.9.6",
414998
+ version: "0.9.7",
414870
414999
  transcript: normalizeMessagesForAPI(messages),
414871
415000
  errors: sanitizedErrors,
414872
415001
  lastApiRequest: getLastAPIRequest(),
@@ -415059,7 +415188,7 @@ function Feedback({
415059
415188
  ", ",
415060
415189
  env2.terminal,
415061
415190
  ", v",
415062
- "0.9.6"
415191
+ "0.9.7"
415063
415192
  ]
415064
415193
  })
415065
415194
  ]
@@ -415167,7 +415296,7 @@ ${sanitizedDescription}
415167
415296
  ` + `**Environment Info**
415168
415297
  ` + `- Platform: ${env2.platform}
415169
415298
  ` + `- Terminal: ${env2.terminal}
415170
- ` + `- Version: ${"0.9.6"}
415299
+ ` + `- Version: ${"0.9.7"}
415171
415300
  ` + feedbackIdLine + `
415172
415301
  **Errors**
415173
415302
  \`\`\`json
@@ -418320,7 +418449,7 @@ function buildPrimarySection() {
418320
418449
  });
418321
418450
  return [{
418322
418451
  label: "Version",
418323
- value: "0.9.6"
418452
+ value: "0.9.7"
418324
418453
  }, {
418325
418454
  label: "Session name",
418326
418455
  value: nameValue
@@ -423090,7 +423219,7 @@ function Config({
423090
423219
  }
423091
423220
  })
423092
423221
  }) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_runtime181.jsx(ChannelDowngradeDialog, {
423093
- currentVersion: "0.9.6",
423222
+ currentVersion: "0.9.7",
423094
423223
  onChoice: (choice) => {
423095
423224
  setShowSubmenu(null);
423096
423225
  setTabsHidden(false);
@@ -423102,7 +423231,7 @@ function Config({
423102
423231
  autoUpdatesChannel: "stable"
423103
423232
  };
423104
423233
  if (choice === "stay") {
423105
- newSettings.minimumVersion = "0.9.6";
423234
+ newSettings.minimumVersion = "0.9.7";
423106
423235
  }
423107
423236
  updateSettingsForSource("userSettings", newSettings);
423108
423237
  setSettingsData((prev_27) => ({
@@ -430043,7 +430172,7 @@ function UpdateScreen({ onDone }) {
430043
430172
  setState({ type: "dev-build" });
430044
430173
  return;
430045
430174
  }
430046
- const currentVersion = "0.9.6";
430175
+ const currentVersion = "0.9.7";
430047
430176
  const channel2 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
430048
430177
  const latestVersion = await getLatestVersion(channel2);
430049
430178
  if (!latestVersion) {
@@ -432154,7 +432283,7 @@ function HelpV2(t0) {
432154
432283
  let t6;
432155
432284
  if ($2[31] !== tabs) {
432156
432285
  t6 = /* @__PURE__ */ jsx_runtime211.jsx(Tabs, {
432157
- title: `ZeroCLI v${"0.9.6"}`,
432286
+ title: `ZeroCLI v${"0.9.7"}`,
432158
432287
  color: "professionalBlue",
432159
432288
  defaultTab: "general",
432160
432289
  children: tabs
@@ -456998,7 +457127,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
456998
457127
  return [];
456999
457128
  }
457000
457129
  }
457001
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "0.9.6") {
457130
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "0.9.7") {
457002
457131
  if (process.env.USER_TYPE === "ant") {
457003
457132
  const changelog = MACRO.VERSION_CHANGELOG;
457004
457133
  if (changelog) {
@@ -486036,7 +486165,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
486036
486165
  smapsRollup,
486037
486166
  platform: process.platform,
486038
486167
  nodeVersion: process.version,
486039
- ccVersion: "0.9.6"
486168
+ ccVersion: "0.9.7"
486040
486169
  };
486041
486170
  }
486042
486171
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -486623,7 +486752,7 @@ var init_bridge_kick = __esm(() => {
486623
486752
  var call60 = async () => {
486624
486753
  return {
486625
486754
  type: "text",
486626
- value: `${"0.9.6"} (built ${"2026-05-13T13:07:10.047Z"})`
486755
+ value: `${"0.9.7"} (built ${"2026-05-14T00:59:01.796Z"})`
486627
486756
  };
486628
486757
  }, version2, version_default;
486629
486758
  var init_version = __esm(() => {
@@ -496780,7 +496909,7 @@ function generateHtmlReport(data, insights) {
496780
496909
  function buildExportData(data, insights, facets) {
496781
496910
  let version3;
496782
496911
  try {
496783
- version3 = "0.9.6";
496912
+ version3 = "0.9.7";
496784
496913
  } catch {
496785
496914
  version3 = "unknown";
496786
496915
  }
@@ -500976,7 +501105,7 @@ var init_sessionStorage = __esm(() => {
500976
501105
  init_slowOperations();
500977
501106
  init_uuid();
500978
501107
  try {
500979
- VERSION7 = "0.9.6";
501108
+ VERSION7 = "0.9.7";
500980
501109
  } catch {
500981
501110
  VERSION7 = "unknown";
500982
501111
  }
@@ -502297,7 +502426,7 @@ var init_filesystem = __esm(() => {
502297
502426
  });
502298
502427
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
502299
502428
  const nonce = randomBytes17(16).toString("hex");
502300
- return join137(getZeroTempDir(), "bundled-skills", "0.9.6", nonce);
502429
+ return join137(getZeroTempDir(), "bundled-skills", "0.9.7", nonce);
502301
502430
  });
502302
502431
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
502303
502432
  });
@@ -513317,7 +513446,7 @@ function buildSystemInitMessage(inputs) {
513317
513446
  slash_commands: inputs.commands.filter((c6) => c6.userInvocable !== false).map((c6) => c6.name),
513318
513447
  apiKeySource: getAnthropicApiKeyWithSource().source,
513319
513448
  betas: getSdkBetas(),
513320
- claude_code_version: "0.9.6",
513449
+ claude_code_version: "0.9.7",
513321
513450
  output_style: outputStyle2,
513322
513451
  agents: inputs.agents.map((agent2) => agent2.agentType),
513323
513452
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -528632,7 +528761,7 @@ var init_useVoiceEnabled = __esm(() => {
528632
528761
  function getSemverPart(version3) {
528633
528762
  return `${import_semver12.major(version3, { loose: true })}.${import_semver12.minor(version3, { loose: true })}.${import_semver12.patch(version3, { loose: true })}`;
528634
528763
  }
528635
- function useUpdateNotification(updatedVersion, initialVersion = "0.9.6") {
528764
+ function useUpdateNotification(updatedVersion, initialVersion = "0.9.7") {
528636
528765
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react226.useState(() => getSemverPart(initialVersion));
528637
528766
  if (!updatedVersion) {
528638
528767
  return null;
@@ -528675,7 +528804,7 @@ function AutoUpdater({
528675
528804
  return;
528676
528805
  }
528677
528806
  if (false) {}
528678
- const currentVersion = "0.9.6";
528807
+ const currentVersion = "0.9.7";
528679
528808
  const channel2 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
528680
528809
  let latestVersion = await getLatestVersion(channel2);
528681
528810
  const isDisabled = isAutoUpdaterDisabled();
@@ -528896,12 +529025,12 @@ function NativeAutoUpdater({
528896
529025
  logEvent("tengu_native_auto_updater_start", {});
528897
529026
  try {
528898
529027
  const maxVersion = await getMaxVersion();
528899
- if (maxVersion && gt("0.9.6", maxVersion)) {
529028
+ if (maxVersion && gt("0.9.7", maxVersion)) {
528900
529029
  const msg = await getMaxVersionMessage();
528901
529030
  setMaxVersionIssue(msg ?? "affects your version");
528902
529031
  }
528903
529032
  const result = await installLatest(channel2);
528904
- const currentVersion = "0.9.6";
529033
+ const currentVersion = "0.9.7";
528905
529034
  const latencyMs = Date.now() - startTime2;
528906
529035
  if (result.lockFailed) {
528907
529036
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -529043,17 +529172,17 @@ function PackageManagerAutoUpdater(t0) {
529043
529172
  const maxVersion = await getMaxVersion();
529044
529173
  if (maxVersion && latest && gt(latest, maxVersion)) {
529045
529174
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
529046
- if (gte("0.9.6", maxVersion)) {
529047
- logForDebugging(`PackageManagerAutoUpdater: current version ${"0.9.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
529175
+ if (gte("0.9.7", maxVersion)) {
529176
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"0.9.7"} is already at or above maxVersion ${maxVersion}, skipping update`);
529048
529177
  setUpdateAvailable(false);
529049
529178
  return;
529050
529179
  }
529051
529180
  latest = maxVersion;
529052
529181
  }
529053
- const hasUpdate = latest && !gte("0.9.6", latest) && !shouldSkipVersion(latest);
529182
+ const hasUpdate = latest && !gte("0.9.7", latest) && !shouldSkipVersion(latest);
529054
529183
  setUpdateAvailable(!!hasUpdate);
529055
529184
  if (hasUpdate) {
529056
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"0.9.6"} -> ${latest}`);
529185
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"0.9.7"} -> ${latest}`);
529057
529186
  }
529058
529187
  };
529059
529188
  $2[0] = t1;
@@ -529087,7 +529216,7 @@ function PackageManagerAutoUpdater(t0) {
529087
529216
  wrap: "truncate",
529088
529217
  children: [
529089
529218
  "currentVersion: ",
529090
- "0.9.6"
529219
+ "0.9.7"
529091
529220
  ]
529092
529221
  });
529093
529222
  $2[3] = verbose;
@@ -538116,7 +538245,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
538116
538245
  project_dir: getOriginalCwd(),
538117
538246
  added_dirs: addedDirs
538118
538247
  },
538119
- version: "0.9.6",
538248
+ version: "0.9.7",
538120
538249
  output_style: {
538121
538250
  name: outputStyleName
538122
538251
  },
@@ -562619,7 +562748,7 @@ function WelcomeV2() {
562619
562748
  dimColor: true,
562620
562749
  children: [
562621
562750
  "v",
562622
- "0.9.6",
562751
+ "0.9.7",
562623
562752
  " "
562624
562753
  ]
562625
562754
  })
@@ -562853,7 +562982,7 @@ function WelcomeV2() {
562853
562982
  dimColor: true,
562854
562983
  children: [
562855
562984
  "v",
562856
- "0.9.6",
562985
+ "0.9.7",
562857
562986
  " "
562858
562987
  ]
562859
562988
  })
@@ -563100,7 +563229,7 @@ function AppleTerminalWelcomeV2(t0) {
563100
563229
  dimColor: true,
563101
563230
  children: [
563102
563231
  "v",
563103
- "0.9.6",
563232
+ "0.9.7",
563104
563233
  " "
563105
563234
  ]
563106
563235
  });
@@ -563373,7 +563502,7 @@ function AppleTerminalWelcomeV2(t0) {
563373
563502
  dimColor: true,
563374
563503
  children: [
563375
563504
  "v",
563376
- "0.9.6",
563505
+ "0.9.7",
563377
563506
  " "
563378
563507
  ]
563379
563508
  });
@@ -564885,7 +565014,7 @@ function completeOnboarding() {
564885
565014
  saveGlobalConfig((current) => ({
564886
565015
  ...current,
564887
565016
  hasCompletedOnboarding: true,
564888
- lastOnboardingVersion: "0.9.6"
565017
+ lastOnboardingVersion: "0.9.7"
564889
565018
  }));
564890
565019
  }
564891
565020
  function showDialog(root2, renderer) {
@@ -569136,7 +569265,7 @@ function appendToLog(path24, message) {
569136
569265
  cwd: getFsImplementation().cwd(),
569137
569266
  userType: process.env.USER_TYPE,
569138
569267
  sessionId: getSessionId(),
569139
- version: "0.9.6"
569268
+ version: "0.9.7"
569140
569269
  };
569141
569270
  getLogWriter(path24).write(messageWithTimestamp);
569142
569271
  }
@@ -569742,7 +569871,7 @@ async function startMCPServer(cwd2, debug, verbose) {
569742
569871
  setCwd(cwd2);
569743
569872
  const server = new Server({
569744
569873
  name: "claude/tengu",
569745
- version: "0.9.6"
569874
+ version: "0.9.7"
569746
569875
  }, {
569747
569876
  capabilities: {
569748
569877
  tools: {}
@@ -574381,8 +574510,8 @@ async function getEnvLessBridgeConfig() {
574381
574510
  }
574382
574511
  async function checkEnvLessBridgeMinVersion() {
574383
574512
  const cfg = await getEnvLessBridgeConfig();
574384
- if (cfg.min_version && lt("0.9.6", cfg.min_version)) {
574385
- return `Your version of ZeroCLI (${"0.9.6"}) is too old for Remote Control.
574513
+ if (cfg.min_version && lt("0.9.7", cfg.min_version)) {
574514
+ return `Your version of ZeroCLI (${"0.9.7"}) is too old for Remote Control.
574386
574515
  Version ${cfg.min_version} or higher is required. Run \`zero update\` to update.`;
574387
574516
  }
574388
574517
  return null;
@@ -574857,7 +574986,7 @@ async function initBridgeCore(params) {
574857
574986
  const rawApi = createBridgeApiClient({
574858
574987
  baseUrl,
574859
574988
  getAccessToken,
574860
- runnerVersion: "0.9.6",
574989
+ runnerVersion: "0.9.7",
574861
574990
  onDebug: logForDebugging,
574862
574991
  onAuth401,
574863
574992
  getTrustedDeviceToken
@@ -581145,7 +581274,7 @@ __export(exports_update2, {
581145
581274
  });
581146
581275
  async function update2() {
581147
581276
  logEvent("tengu_update_check", {});
581148
- writeToStdout(`Current version: ${"0.9.6"}
581277
+ writeToStdout(`Current version: ${"0.9.7"}
581149
581278
  `);
581150
581279
  const channel2 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
581151
581280
  writeToStdout(`Checking for updates to ${channel2} version...
@@ -581220,8 +581349,8 @@ async function update2() {
581220
581349
  writeToStdout(`Zero is managed by Homebrew.
581221
581350
  `);
581222
581351
  const latest = await getLatestVersion(channel2);
581223
- if (latest && !gte("0.9.6", latest)) {
581224
- writeToStdout(`Update available: ${"0.9.6"} → ${latest}
581352
+ if (latest && !gte("0.9.7", latest)) {
581353
+ writeToStdout(`Update available: ${"0.9.7"} → ${latest}
581225
581354
  `);
581226
581355
  writeToStdout(`
581227
581356
  `);
@@ -581237,8 +581366,8 @@ async function update2() {
581237
581366
  writeToStdout(`Zero is managed by winget.
581238
581367
  `);
581239
581368
  const latest = await getLatestVersion(channel2);
581240
- if (latest && !gte("0.9.6", latest)) {
581241
- writeToStdout(`Update available: ${"0.9.6"} → ${latest}
581369
+ if (latest && !gte("0.9.7", latest)) {
581370
+ writeToStdout(`Update available: ${"0.9.7"} → ${latest}
581242
581371
  `);
581243
581372
  writeToStdout(`
581244
581373
  `);
@@ -581254,8 +581383,8 @@ async function update2() {
581254
581383
  writeToStdout(`Zero is managed by apk.
581255
581384
  `);
581256
581385
  const latest = await getLatestVersion(channel2);
581257
- if (latest && !gte("0.9.6", latest)) {
581258
- writeToStdout(`Update available: ${"0.9.6"} → ${latest}
581386
+ if (latest && !gte("0.9.7", latest)) {
581387
+ writeToStdout(`Update available: ${"0.9.7"} → ${latest}
581259
581388
  `);
581260
581389
  writeToStdout(`
581261
581390
  `);
@@ -581320,11 +581449,11 @@ async function update2() {
581320
581449
  `);
581321
581450
  await gracefulShutdown(1);
581322
581451
  }
581323
- if (result.latestVersion === "0.9.6") {
581324
- writeToStdout(source_default.green(`Zero CLI is up to date (${"0.9.6"})`) + `
581452
+ if (result.latestVersion === "0.9.7") {
581453
+ writeToStdout(source_default.green(`Zero CLI is up to date (${"0.9.7"})`) + `
581325
581454
  `);
581326
581455
  } else {
581327
- writeToStdout(source_default.green(`Successfully updated from ${"0.9.6"} to version ${result.latestVersion}`) + `
581456
+ writeToStdout(source_default.green(`Successfully updated from ${"0.9.7"} to version ${result.latestVersion}`) + `
581328
581457
  `);
581329
581458
  await regenerateCompletionCache();
581330
581459
  }
@@ -581384,12 +581513,12 @@ async function update2() {
581384
581513
  `);
581385
581514
  await gracefulShutdown(1);
581386
581515
  }
581387
- if (latestVersion === "0.9.6") {
581388
- writeToStdout(source_default.green(`Zero CLI is up to date (${"0.9.6"})`) + `
581516
+ if (latestVersion === "0.9.7") {
581517
+ writeToStdout(source_default.green(`Zero CLI is up to date (${"0.9.7"})`) + `
581389
581518
  `);
581390
581519
  await gracefulShutdown(0);
581391
581520
  }
581392
- writeToStdout(`New version available: ${latestVersion} (current: ${"0.9.6"})
581521
+ writeToStdout(`New version available: ${latestVersion} (current: ${"0.9.7"})
581393
581522
  `);
581394
581523
  writeToStdout(`Installing update...
581395
581524
  `);
@@ -581434,7 +581563,7 @@ async function update2() {
581434
581563
  logForDebugging(`update: Installation status: ${status2}`);
581435
581564
  switch (status2) {
581436
581565
  case "success":
581437
- writeToStdout(source_default.green(`Successfully updated from ${"0.9.6"} to version ${latestVersion}`) + `
581566
+ writeToStdout(source_default.green(`Successfully updated from ${"0.9.7"} to version ${latestVersion}`) + `
581438
581567
  `);
581439
581568
  await regenerateCompletionCache();
581440
581569
  break;
@@ -582735,7 +582864,7 @@ ${customInstructions}` : customInstructions;
582735
582864
  }
582736
582865
  }
582737
582866
  logForDiagnosticsNoPII("info", "started", {
582738
- version: "0.9.6",
582867
+ version: "0.9.7",
582739
582868
  is_native_binary: isInBundledMode()
582740
582869
  });
582741
582870
  registerCleanup(async () => {
@@ -583618,7 +583747,7 @@ Usage: claude --remote "your task description"`, () => gracefulShutdown(1));
583618
583747
  pendingHookMessages
583619
583748
  }, renderAndRun);
583620
583749
  }
583621
- }).version("0.9.6", "-v, --version", "Output the version number");
583750
+ }).version("0.9.7", "-v, --version", "Output the version number");
583622
583751
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
583623
583752
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
583624
583753
  if (canUserConfigureAdvisor()) {
@@ -584284,7 +584413,7 @@ if (false) {}
584284
584413
  async function main2() {
584285
584414
  const args = process.argv.slice(2);
584286
584415
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
584287
- console.log(`${"0.9.6"} (ZeroCLI)`);
584416
+ console.log(`${"0.9.7"} (ZeroCLI)`);
584288
584417
  return;
584289
584418
  }
584290
584419
  if (args.includes("--provider")) {
@@ -584426,4 +584555,4 @@ async function main2() {
584426
584555
  }
584427
584556
  main2();
584428
584557
 
584429
- //# debugId=E7574CB9448447CE64756E2164756E21
584558
+ //# debugId=B6F3EC808063D21764756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duheso/zerocli",
3
- "version": "0.9.6",
3
+ "version": "0.9.7",
4
4
  "description": "Zero CLI to any LLM — OpenAI, Gemini, DeepSeek, Ollama, and 200+ models",
5
5
  "type": "module",
6
6
  "bin": {