@duheso/zerocli 0.9.5 → 0.9.6

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 +159 -82
  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.5"}${RESET}`);
119195
+ out.push(` ${DIM}${rgb(...DIMCOL)}zero ${RESET}${rgb(...ACCENT)}v${"0.9.6"}${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.5"}.${fingerprint}`;
147386
+ const version2 = `${"0.9.6"}.${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.5"}`;
190396
+ return `claude-code/${"0.9.6"}`;
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.5"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
190405
+ return `claude-cli/${"0.9.6"} (${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.5"}${suffix}`;
190419
+ return `claude-code/${"0.9.6"}${suffix}`;
190420
190420
  }
190421
190421
  function getWebFetchUserAgent() {
190422
190422
  const supportUrl = getAPIProvider() === "firstParty" ? "https://support.anthropic.com/" : "https://github.com/Duheso/ZeroCLI";
@@ -192898,7 +192898,19 @@ async function* openaiStreamToAnthropic(response, model, signal) {
192898
192898
  return new Promise((resolve19, reject) => {
192899
192899
  const timeoutId = setTimeout(() => {
192900
192900
  const elapsed = Math.round((Date.now() - lastDataTime) / 1000);
192901
- reject(new Error(`OpenAI/Gemini SSE stream idle for ${elapsed}s (limit: ${STREAM_IDLE_TIMEOUT_MS / 1000}s). Connection likely dropped.`));
192901
+ const msg = `OpenAI/Gemini SSE stream idle for ${elapsed}s (limit: ${STREAM_IDLE_TIMEOUT_MS / 1000}s). Connection likely dropped.`;
192902
+ logForDebugging(`
192903
+ ` + `========================================================================
192904
+ ` + `[ZERO-DEBUG] ENCERRAMENTO DETECTADO: STREAM IDLE TIMEOUT
192905
+ ` + `========================================================================
192906
+ ` + `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
+ ` + `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.
192911
+ ` + ` Modelos locais (vLLM) podem demorar mais que 120s entre chunks.
192912
+ ` + `========================================================================`, { level: "error" });
192913
+ reject(new Error(msg));
192902
192914
  }, STREAM_IDLE_TIMEOUT_MS);
192903
192915
  let abortCleanup;
192904
192916
  if (signal) {
@@ -192958,7 +192970,19 @@ async function* openaiStreamToAnthropic(response, model, signal) {
192958
192970
  let chunk;
192959
192971
  try {
192960
192972
  chunk = JSON.parse(trimmed.slice(6));
192961
- } catch {
192973
+ } catch (parseError) {
192974
+ logForDebugging(`
192975
+ ` + `========================================================================
192976
+ ` + `[ZERO-DEBUG] ALERTA: ERRO DE PARSE JSON NO STREAM SSE
192977
+ ` + `========================================================================
192978
+ ` + `CAUSA: Chunk recebido do modelo nao e JSON valido.
192979
+ ` + `DADOS RECEBIDOS: ${trimmed.slice(0, 500)}
192980
+ ` + `ERRO: ${parseError instanceof Error ? parseError.message : String(parseError)}
192981
+ ` + `EFEITO: Este chunk foi IGNORADO silenciosamente. Se muitos chunks falharem,
192982
+ ` + ` o modelo pode parecer encerrar sem completar a resposta.
192983
+ ` + `CORRECAO: Verificar se o vLLM esta retornando respostas validas.
192984
+ ` + ` Pode indicar incompatibilidade de formato entre vLLM e ZeroCLI.
192985
+ ` + `========================================================================`, { level: "warn" });
192962
192986
  continue;
192963
192987
  }
192964
192988
  const chunkUsage = convertChunkUsage(chunk.usage);
@@ -193133,6 +193157,20 @@ async function* openaiStreamToAnthropic(response, model, signal) {
193133
193157
  yield { type: "content_block_stop", index: tc.index };
193134
193158
  }
193135
193159
  const stopReason = choice.finish_reason === "tool_calls" ? "tool_use" : choice.finish_reason === "length" ? "max_tokens" : "end_turn";
193160
+ if (choice.finish_reason === "length") {
193161
+ logForDebugging(`
193162
+ ` + `========================================================================
193163
+ ` + `[ZERO-DEBUG] ENCERRAMENTO DETECTADO: MAX_TOKENS ATINGIDO (finish_reason=length)
193164
+ ` + `========================================================================
193165
+ ` + `CAUSA: O modelo atingiu o limite de tokens de saida e parou de gerar.
193166
+ ` + `FINISH_REASON: "length" (convertido para "max_tokens" internamente).
193167
+ ` + `EFEITO: Zero encerrou o processamento porque o modelo foi cortado no meio.
193168
+ ` + ` A resposta pode estar incompleta ou cortada abruptamente.
193169
+ ` + `CORRECAO: Aumentar max_tokens via env var CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000
193170
+ ` + ` ou CLAUDE_CODE_OPENAI_MAX_OUTPUT_TOKENS='{"seu-modelo": 64000}'
193171
+ ` + ` Default atual: CAPPED_DEFAULT_MAX_TOKENS = 8000 tokens.
193172
+ ` + `========================================================================`, { level: "error" });
193173
+ }
193136
193174
  if (choice.finish_reason === "content_filter" || choice.finish_reason === "safety") {
193137
193175
  if (!hasEmittedContentStart) {
193138
193176
  yield {
@@ -244852,7 +244890,7 @@ function getTelemetryAttributes() {
244852
244890
  attributes["session.id"] = sessionId;
244853
244891
  }
244854
244892
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
244855
- attributes["app.version"] = "0.9.5";
244893
+ attributes["app.version"] = "0.9.6";
244856
244894
  }
244857
244895
  const oauthAccount = getOauthAccountInfo();
244858
244896
  if (oauthAccount) {
@@ -257091,7 +257129,7 @@ function computeFingerprint(messageText, version2) {
257091
257129
  }
257092
257130
  function computeFingerprintFromMessages(messages) {
257093
257131
  const firstMessageText = extractFirstMessageText(messages);
257094
- return computeFingerprint(firstMessageText, "0.9.5");
257132
+ return computeFingerprint(firstMessageText, "0.9.6");
257095
257133
  }
257096
257134
  var FINGERPRINT_SALT = "59cf53e54c78";
257097
257135
  var init_fingerprint = () => {};
@@ -257133,7 +257171,7 @@ async function sideQuery(opts) {
257133
257171
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
257134
257172
  }
257135
257173
  const messageText = extractFirstUserMessageText(messages);
257136
- const fingerprint = computeFingerprint(messageText, "0.9.5");
257174
+ const fingerprint = computeFingerprint(messageText, "0.9.6");
257137
257175
  const attributionHeader = getAttributionHeader(fingerprint);
257138
257176
  const systemBlocks = [
257139
257177
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -266035,7 +266073,7 @@ var init_user = __esm(() => {
266035
266073
  deviceId,
266036
266074
  sessionId: getSessionId(),
266037
266075
  email: getEmail(),
266038
- appVersion: "0.9.5",
266076
+ appVersion: "0.9.6",
266039
266077
  platform: getHostPlatformForAnalytics(),
266040
266078
  organizationUuid,
266041
266079
  accountUuid,
@@ -266429,7 +266467,7 @@ async function initializeBetaTracing(resource) {
266429
266467
  });
266430
266468
  logs.setGlobalLoggerProvider(loggerProvider);
266431
266469
  setLoggerProvider(loggerProvider);
266432
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "0.9.5");
266470
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "0.9.6");
266433
266471
  setEventLogger(eventLogger);
266434
266472
  process.on("beforeExit", async () => {
266435
266473
  await loggerProvider?.forceFlush();
@@ -266469,7 +266507,7 @@ async function initializeTelemetry() {
266469
266507
  const platform3 = getPlatform();
266470
266508
  const baseAttributes = {
266471
266509
  [ATTR_SERVICE_NAME3]: "claude-code",
266472
- [ATTR_SERVICE_VERSION3]: "0.9.5"
266510
+ [ATTR_SERVICE_VERSION3]: "0.9.6"
266473
266511
  };
266474
266512
  if (platform3 === "wsl") {
266475
266513
  const wslVersion = getWslVersion();
@@ -266514,7 +266552,7 @@ async function initializeTelemetry() {
266514
266552
  } catch {}
266515
266553
  };
266516
266554
  registerCleanup(shutdownTelemetry2);
266517
- return meterProvider2.getMeter("com.anthropic.claude_code", "0.9.5");
266555
+ return meterProvider2.getMeter("com.anthropic.claude_code", "0.9.6");
266518
266556
  }
266519
266557
  const meterProvider = new MeterProvider3({
266520
266558
  resource,
@@ -266534,7 +266572,7 @@ async function initializeTelemetry() {
266534
266572
  });
266535
266573
  logs.setGlobalLoggerProvider(loggerProvider);
266536
266574
  setLoggerProvider(loggerProvider);
266537
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "0.9.5");
266575
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "0.9.6");
266538
266576
  setEventLogger(eventLogger);
266539
266577
  logForDebugging("[3P telemetry] Event logger set successfully");
266540
266578
  process.on("beforeExit", async () => {
@@ -266596,7 +266634,7 @@ Current timeout: ${timeoutMs}ms
266596
266634
  }
266597
266635
  };
266598
266636
  registerCleanup(shutdownTelemetry);
266599
- return meterProvider.getMeter("com.anthropic.claude_code", "0.9.5");
266637
+ return meterProvider.getMeter("com.anthropic.claude_code", "0.9.6");
266600
266638
  }
266601
266639
  async function flushTelemetry() {
266602
266640
  const meterProvider = getMeterProvider();
@@ -267408,9 +267446,9 @@ async function assertMinVersion() {
267408
267446
  }
267409
267447
  try {
267410
267448
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
267411
- if (versionConfig.minVersion && lt("0.9.5", versionConfig.minVersion)) {
267449
+ if (versionConfig.minVersion && lt("0.9.6", versionConfig.minVersion)) {
267412
267450
  console.error(`
267413
- It looks like your version of ZeroCLI (${"0.9.5"}) needs an update.
267451
+ It looks like your version of ZeroCLI (${"0.9.6"}) needs an update.
267414
267452
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
267415
267453
 
267416
267454
  To update, please run:
@@ -267626,7 +267664,7 @@ async function installGlobalPackage(specificVersion) {
267626
267664
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
267627
267665
  logEvent("tengu_auto_updater_lock_contention", {
267628
267666
  pid: process.pid,
267629
- currentVersion: "0.9.5"
267667
+ currentVersion: "0.9.6"
267630
267668
  });
267631
267669
  return "in_progress";
267632
267670
  }
@@ -267635,7 +267673,7 @@ async function installGlobalPackage(specificVersion) {
267635
267673
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
267636
267674
  logError2(new Error("Windows NPM detected in WSL environment"));
267637
267675
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
267638
- currentVersion: "0.9.5"
267676
+ currentVersion: "0.9.6"
267639
267677
  });
267640
267678
  console.error(`
267641
267679
  Error: Windows NPM detected in WSL
@@ -268189,7 +268227,7 @@ async function getDoctorDiagnostic() {
268189
268227
  const installationType = await getCurrentInstallationType();
268190
268228
  let version2;
268191
268229
  try {
268192
- version2 = "0.9.5";
268230
+ version2 = "0.9.6";
268193
268231
  } catch {
268194
268232
  version2 = "unknown";
268195
268233
  }
@@ -269683,7 +269721,7 @@ function getInstallationEnv() {
269683
269721
  return;
269684
269722
  }
269685
269723
  function getZeroCodeVersion() {
269686
- return "0.9.5";
269724
+ return "0.9.6";
269687
269725
  }
269688
269726
  async function getInstalledVSCodeExtensionVersion(command) {
269689
269727
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -271050,8 +271088,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
271050
271088
  const maxVersion = await getMaxVersion();
271051
271089
  if (maxVersion && gt(version2, maxVersion)) {
271052
271090
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
271053
- if (gte("0.9.5", maxVersion)) {
271054
- logForDebugging(`Native installer: current version ${"0.9.5"} is already at or above maxVersion ${maxVersion}, skipping update`);
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`);
271055
271093
  logEvent("tengu_native_update_skipped_max_version", {
271056
271094
  latency_ms: Date.now() - startTime2,
271057
271095
  max_version: maxVersion,
@@ -271062,7 +271100,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
271062
271100
  version2 = maxVersion;
271063
271101
  }
271064
271102
  }
271065
- if (!forceReinstall && version2 === "0.9.5" && await versionIsAvailable(version2) && await isPossibleZeroBinary(executablePath)) {
271103
+ if (!forceReinstall && version2 === "0.9.6" && await versionIsAvailable(version2) && await isPossibleZeroBinary(executablePath)) {
271066
271104
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
271067
271105
  logEvent("tengu_native_update_complete", {
271068
271106
  latency_ms: Date.now() - startTime2,
@@ -375725,6 +375763,25 @@ async function* queryLoop(params, consumedCommandUuids) {
375725
375763
  } catch (error42) {
375726
375764
  logError2(error42);
375727
375765
  const errorMessage2 = error42 instanceof Error ? error42.message : String(error42);
375766
+ const isIdleTimeout = errorMessage2.includes("idle") && errorMessage2.includes("timeout");
375767
+ const isMaxTokens = errorMessage2.includes("max_tokens") || errorMessage2.includes("max_output_tokens");
375768
+ const isStreamDrop = errorMessage2.includes("stream") || errorMessage2.includes("SSE") || errorMessage2.includes("Connection");
375769
+ logForDebugging(`
375770
+ ` + `========================================================================
375771
+ ` + `[ZERO-DEBUG] QUERY ENCERROU COM ERRO
375772
+ ` + `========================================================================
375773
+ ` + `ERRO: ${errorMessage2}
375774
+ ` + `TIPO: ${error42 instanceof Error ? error42.constructor.name : typeof error42}
375775
+ ` + `MENSAGENS DO ASSISTENTE: ${assistantMessages.length}
375776
+ ` + `TOOL USES: ${assistantMessages.flatMap((_) => _.message.content.filter((content) => content.type === "tool_use")).length}
375777
+ ` + (isIdleTimeout ? `DIAGNOSTICO: >>> STREAM IDLE TIMEOUT - modelo demorou demais para responder <<<
375778
+ ` + `CORRECAO: Aumentar STREAM_IDLE_TIMEOUT_MS ou CLAUDE_STREAM_IDLE_TIMEOUT_MS
375779
+ ` : isMaxTokens ? `DIAGNOSTICO: >>> MAX TOKENS ATINGIDO - resposta cortada pelo limite <<<
375780
+ ` + `CORRECAO: export CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000
375781
+ ` : isStreamDrop ? `DIAGNOSTICO: >>> CONEXAO COM MODELO CAIU - stream interrompido <<<
375782
+ ` + `CORRECAO: Verificar estabilidade do vLLM e conexao de rede
375783
+ ` : `DIAGNOSTICO: Erro nao mapeado nas causas conhecidas de encerramento silencioso.
375784
+ `) + `========================================================================`, { level: "error" });
375728
375785
  logEvent("tengu_query_error", {
375729
375786
  assistantMessages: assistantMessages.length,
375730
375787
  toolUses: assistantMessages.flatMap((_) => _.message.content.filter((content) => content.type === "tool_use")).length,
@@ -376286,7 +376343,7 @@ function getAnthropicEnvMetadata() {
376286
376343
  function getBuildAgeMinutes() {
376287
376344
  if (false)
376288
376345
  ;
376289
- const buildTime = new Date("2026-05-11T18:46:47.195Z").getTime();
376346
+ const buildTime = new Date("2026-05-13T13:07:10.047Z").getTime();
376290
376347
  if (isNaN(buildTime))
376291
376348
  return;
376292
376349
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -403722,7 +403779,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
403722
403779
  const client2 = new Client({
403723
403780
  name: "claude-code",
403724
403781
  title: "ZeroCLI",
403725
- version: "0.9.5",
403782
+ version: "0.9.6",
403726
403783
  description: "Anthropic's agentic coding tool",
403727
403784
  websiteUrl: PRODUCT_URL
403728
403785
  }, {
@@ -404074,7 +404131,7 @@ var init_client7 = __esm(() => {
404074
404131
  const client2 = new Client({
404075
404132
  name: "claude-code",
404076
404133
  title: "ZeroCLI",
404077
- version: "0.9.5",
404134
+ version: "0.9.6",
404078
404135
  description: "Anthropic's agentic coding tool",
404079
404136
  websiteUrl: PRODUCT_URL
404080
404137
  }, {
@@ -406111,7 +406168,18 @@ ${deferredToolList}
406111
406168
  streamIdleTimer = setTimeout(() => {
406112
406169
  streamIdleAborted = true;
406113
406170
  streamWatchdogFiredAt = performance.now();
406114
- logForDebugging(`Streaming idle timeout: no chunks received for ${STREAM_IDLE_TIMEOUT_MS / 1000}s, aborting stream`, { level: "error" });
406171
+ logForDebugging(`
406172
+ ========================================================================
406173
+ [ZERO-DEBUG] ENCERRAMENTO DETECTADO: STREAM WATCHDOG TIMEOUT
406174
+ ========================================================================
406175
+ CAUSA: O stream ficou ${STREAM_IDLE_TIMEOUT_MS / 1000}s sem receber chunks do modelo.
406176
+ LIMITE ATUAL: ${STREAM_IDLE_TIMEOUT_MS / 1000}s (configuravel via CLAUDE_STREAM_IDLE_TIMEOUT_MS).
406177
+ MODELO: ${options2.model}
406178
+ EFEITO: Zero abortou o stream e vai tentar fallback para modo nao-streaming.
406179
+ Se o fallback tambem falhar, o processamento encerra silenciosamente.
406180
+ CORRECAO: export CLAUDE_STREAM_IDLE_TIMEOUT_MS=600000 (10 min)
406181
+ export CLAUDE_ENABLE_STREAM_WATCHDOG=1
406182
+ ========================================================================`, { level: "error" });
406115
406183
  logForDiagnosticsNoPII("error", "cli_streaming_idle_timeout");
406116
406184
  logEvent("tengu_streaming_idle_timeout", {
406117
406185
  model: options2.model,
@@ -406404,6 +406472,15 @@ ${deferredToolList}
406404
406472
  logEvent("tengu_max_tokens_reached", {
406405
406473
  max_tokens: maxOutputTokens
406406
406474
  });
406475
+ logForDebugging(`
406476
+ ========================================================================
406477
+ [ZERO-DEBUG] ENCERRAMENTO DETECTADO: MAX_TOKENS ATINGIDO (Anthropic API)
406478
+ ========================================================================
406479
+ CAUSA: O modelo atingiu o limite de ${maxOutputTokens} tokens de saida.
406480
+ EFEITO: A resposta foi cortada. Recovery sera tentado ate 3x.
406481
+ Se recovery falhar, o processamento encerra abruptamente.
406482
+ CORRECAO: export CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000
406483
+ ========================================================================`, { level: "error" });
406407
406484
  yield createAssistantAPIErrorMessage({
406408
406485
  content: `${API_ERROR_MESSAGE_PREFIX}: Zero's response exceeded the ${maxOutputTokens} output token maximum. To configure this behavior, set the CLAUDE_CODE_MAX_OUTPUT_TOKENS environment variable.`,
406409
406486
  apiError: "max_output_tokens",
@@ -414789,7 +414866,7 @@ function Feedback({
414789
414866
  platform: env2.platform,
414790
414867
  gitRepo: envInfo.isGit,
414791
414868
  terminal: env2.terminal,
414792
- version: "0.9.5",
414869
+ version: "0.9.6",
414793
414870
  transcript: normalizeMessagesForAPI(messages),
414794
414871
  errors: sanitizedErrors,
414795
414872
  lastApiRequest: getLastAPIRequest(),
@@ -414982,7 +415059,7 @@ function Feedback({
414982
415059
  ", ",
414983
415060
  env2.terminal,
414984
415061
  ", v",
414985
- "0.9.5"
415062
+ "0.9.6"
414986
415063
  ]
414987
415064
  })
414988
415065
  ]
@@ -415090,7 +415167,7 @@ ${sanitizedDescription}
415090
415167
  ` + `**Environment Info**
415091
415168
  ` + `- Platform: ${env2.platform}
415092
415169
  ` + `- Terminal: ${env2.terminal}
415093
- ` + `- Version: ${"0.9.5"}
415170
+ ` + `- Version: ${"0.9.6"}
415094
415171
  ` + feedbackIdLine + `
415095
415172
  **Errors**
415096
415173
  \`\`\`json
@@ -418243,7 +418320,7 @@ function buildPrimarySection() {
418243
418320
  });
418244
418321
  return [{
418245
418322
  label: "Version",
418246
- value: "0.9.5"
418323
+ value: "0.9.6"
418247
418324
  }, {
418248
418325
  label: "Session name",
418249
418326
  value: nameValue
@@ -423013,7 +423090,7 @@ function Config({
423013
423090
  }
423014
423091
  })
423015
423092
  }) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_runtime181.jsx(ChannelDowngradeDialog, {
423016
- currentVersion: "0.9.5",
423093
+ currentVersion: "0.9.6",
423017
423094
  onChoice: (choice) => {
423018
423095
  setShowSubmenu(null);
423019
423096
  setTabsHidden(false);
@@ -423025,7 +423102,7 @@ function Config({
423025
423102
  autoUpdatesChannel: "stable"
423026
423103
  };
423027
423104
  if (choice === "stay") {
423028
- newSettings.minimumVersion = "0.9.5";
423105
+ newSettings.minimumVersion = "0.9.6";
423029
423106
  }
423030
423107
  updateSettingsForSource("userSettings", newSettings);
423031
423108
  setSettingsData((prev_27) => ({
@@ -429966,7 +430043,7 @@ function UpdateScreen({ onDone }) {
429966
430043
  setState({ type: "dev-build" });
429967
430044
  return;
429968
430045
  }
429969
- const currentVersion = "0.9.5";
430046
+ const currentVersion = "0.9.6";
429970
430047
  const channel2 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
429971
430048
  const latestVersion = await getLatestVersion(channel2);
429972
430049
  if (!latestVersion) {
@@ -432077,7 +432154,7 @@ function HelpV2(t0) {
432077
432154
  let t6;
432078
432155
  if ($2[31] !== tabs) {
432079
432156
  t6 = /* @__PURE__ */ jsx_runtime211.jsx(Tabs, {
432080
- title: `ZeroCLI v${"0.9.5"}`,
432157
+ title: `ZeroCLI v${"0.9.6"}`,
432081
432158
  color: "professionalBlue",
432082
432159
  defaultTab: "general",
432083
432160
  children: tabs
@@ -456921,7 +456998,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
456921
456998
  return [];
456922
456999
  }
456923
457000
  }
456924
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "0.9.5") {
457001
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "0.9.6") {
456925
457002
  if (process.env.USER_TYPE === "ant") {
456926
457003
  const changelog = MACRO.VERSION_CHANGELOG;
456927
457004
  if (changelog) {
@@ -485959,7 +486036,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
485959
486036
  smapsRollup,
485960
486037
  platform: process.platform,
485961
486038
  nodeVersion: process.version,
485962
- ccVersion: "0.9.5"
486039
+ ccVersion: "0.9.6"
485963
486040
  };
485964
486041
  }
485965
486042
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -486546,7 +486623,7 @@ var init_bridge_kick = __esm(() => {
486546
486623
  var call60 = async () => {
486547
486624
  return {
486548
486625
  type: "text",
486549
- value: `${"0.9.5"} (built ${"2026-05-11T18:46:47.195Z"})`
486626
+ value: `${"0.9.6"} (built ${"2026-05-13T13:07:10.047Z"})`
486550
486627
  };
486551
486628
  }, version2, version_default;
486552
486629
  var init_version = __esm(() => {
@@ -496703,7 +496780,7 @@ function generateHtmlReport(data, insights) {
496703
496780
  function buildExportData(data, insights, facets) {
496704
496781
  let version3;
496705
496782
  try {
496706
- version3 = "0.9.5";
496783
+ version3 = "0.9.6";
496707
496784
  } catch {
496708
496785
  version3 = "unknown";
496709
496786
  }
@@ -500899,7 +500976,7 @@ var init_sessionStorage = __esm(() => {
500899
500976
  init_slowOperations();
500900
500977
  init_uuid();
500901
500978
  try {
500902
- VERSION7 = "0.9.5";
500979
+ VERSION7 = "0.9.6";
500903
500980
  } catch {
500904
500981
  VERSION7 = "unknown";
500905
500982
  }
@@ -502220,7 +502297,7 @@ var init_filesystem = __esm(() => {
502220
502297
  });
502221
502298
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
502222
502299
  const nonce = randomBytes17(16).toString("hex");
502223
- return join137(getZeroTempDir(), "bundled-skills", "0.9.5", nonce);
502300
+ return join137(getZeroTempDir(), "bundled-skills", "0.9.6", nonce);
502224
502301
  });
502225
502302
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
502226
502303
  });
@@ -513240,7 +513317,7 @@ function buildSystemInitMessage(inputs) {
513240
513317
  slash_commands: inputs.commands.filter((c6) => c6.userInvocable !== false).map((c6) => c6.name),
513241
513318
  apiKeySource: getAnthropicApiKeyWithSource().source,
513242
513319
  betas: getSdkBetas(),
513243
- claude_code_version: "0.9.5",
513320
+ claude_code_version: "0.9.6",
513244
513321
  output_style: outputStyle2,
513245
513322
  agents: inputs.agents.map((agent2) => agent2.agentType),
513246
513323
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -528555,7 +528632,7 @@ var init_useVoiceEnabled = __esm(() => {
528555
528632
  function getSemverPart(version3) {
528556
528633
  return `${import_semver12.major(version3, { loose: true })}.${import_semver12.minor(version3, { loose: true })}.${import_semver12.patch(version3, { loose: true })}`;
528557
528634
  }
528558
- function useUpdateNotification(updatedVersion, initialVersion = "0.9.5") {
528635
+ function useUpdateNotification(updatedVersion, initialVersion = "0.9.6") {
528559
528636
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react226.useState(() => getSemverPart(initialVersion));
528560
528637
  if (!updatedVersion) {
528561
528638
  return null;
@@ -528598,7 +528675,7 @@ function AutoUpdater({
528598
528675
  return;
528599
528676
  }
528600
528677
  if (false) {}
528601
- const currentVersion = "0.9.5";
528678
+ const currentVersion = "0.9.6";
528602
528679
  const channel2 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
528603
528680
  let latestVersion = await getLatestVersion(channel2);
528604
528681
  const isDisabled = isAutoUpdaterDisabled();
@@ -528819,12 +528896,12 @@ function NativeAutoUpdater({
528819
528896
  logEvent("tengu_native_auto_updater_start", {});
528820
528897
  try {
528821
528898
  const maxVersion = await getMaxVersion();
528822
- if (maxVersion && gt("0.9.5", maxVersion)) {
528899
+ if (maxVersion && gt("0.9.6", maxVersion)) {
528823
528900
  const msg = await getMaxVersionMessage();
528824
528901
  setMaxVersionIssue(msg ?? "affects your version");
528825
528902
  }
528826
528903
  const result = await installLatest(channel2);
528827
- const currentVersion = "0.9.5";
528904
+ const currentVersion = "0.9.6";
528828
528905
  const latencyMs = Date.now() - startTime2;
528829
528906
  if (result.lockFailed) {
528830
528907
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -528966,17 +529043,17 @@ function PackageManagerAutoUpdater(t0) {
528966
529043
  const maxVersion = await getMaxVersion();
528967
529044
  if (maxVersion && latest && gt(latest, maxVersion)) {
528968
529045
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
528969
- if (gte("0.9.5", maxVersion)) {
528970
- logForDebugging(`PackageManagerAutoUpdater: current version ${"0.9.5"} is already at or above maxVersion ${maxVersion}, skipping update`);
529046
+ if (gte("0.9.6", maxVersion)) {
529047
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"0.9.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
528971
529048
  setUpdateAvailable(false);
528972
529049
  return;
528973
529050
  }
528974
529051
  latest = maxVersion;
528975
529052
  }
528976
- const hasUpdate = latest && !gte("0.9.5", latest) && !shouldSkipVersion(latest);
529053
+ const hasUpdate = latest && !gte("0.9.6", latest) && !shouldSkipVersion(latest);
528977
529054
  setUpdateAvailable(!!hasUpdate);
528978
529055
  if (hasUpdate) {
528979
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"0.9.5"} -> ${latest}`);
529056
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"0.9.6"} -> ${latest}`);
528980
529057
  }
528981
529058
  };
528982
529059
  $2[0] = t1;
@@ -529010,7 +529087,7 @@ function PackageManagerAutoUpdater(t0) {
529010
529087
  wrap: "truncate",
529011
529088
  children: [
529012
529089
  "currentVersion: ",
529013
- "0.9.5"
529090
+ "0.9.6"
529014
529091
  ]
529015
529092
  });
529016
529093
  $2[3] = verbose;
@@ -538039,7 +538116,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
538039
538116
  project_dir: getOriginalCwd(),
538040
538117
  added_dirs: addedDirs
538041
538118
  },
538042
- version: "0.9.5",
538119
+ version: "0.9.6",
538043
538120
  output_style: {
538044
538121
  name: outputStyleName
538045
538122
  },
@@ -562542,7 +562619,7 @@ function WelcomeV2() {
562542
562619
  dimColor: true,
562543
562620
  children: [
562544
562621
  "v",
562545
- "0.9.5",
562622
+ "0.9.6",
562546
562623
  " "
562547
562624
  ]
562548
562625
  })
@@ -562776,7 +562853,7 @@ function WelcomeV2() {
562776
562853
  dimColor: true,
562777
562854
  children: [
562778
562855
  "v",
562779
- "0.9.5",
562856
+ "0.9.6",
562780
562857
  " "
562781
562858
  ]
562782
562859
  })
@@ -563023,7 +563100,7 @@ function AppleTerminalWelcomeV2(t0) {
563023
563100
  dimColor: true,
563024
563101
  children: [
563025
563102
  "v",
563026
- "0.9.5",
563103
+ "0.9.6",
563027
563104
  " "
563028
563105
  ]
563029
563106
  });
@@ -563296,7 +563373,7 @@ function AppleTerminalWelcomeV2(t0) {
563296
563373
  dimColor: true,
563297
563374
  children: [
563298
563375
  "v",
563299
- "0.9.5",
563376
+ "0.9.6",
563300
563377
  " "
563301
563378
  ]
563302
563379
  });
@@ -564808,7 +564885,7 @@ function completeOnboarding() {
564808
564885
  saveGlobalConfig((current) => ({
564809
564886
  ...current,
564810
564887
  hasCompletedOnboarding: true,
564811
- lastOnboardingVersion: "0.9.5"
564888
+ lastOnboardingVersion: "0.9.6"
564812
564889
  }));
564813
564890
  }
564814
564891
  function showDialog(root2, renderer) {
@@ -569059,7 +569136,7 @@ function appendToLog(path24, message) {
569059
569136
  cwd: getFsImplementation().cwd(),
569060
569137
  userType: process.env.USER_TYPE,
569061
569138
  sessionId: getSessionId(),
569062
- version: "0.9.5"
569139
+ version: "0.9.6"
569063
569140
  };
569064
569141
  getLogWriter(path24).write(messageWithTimestamp);
569065
569142
  }
@@ -569665,7 +569742,7 @@ async function startMCPServer(cwd2, debug, verbose) {
569665
569742
  setCwd(cwd2);
569666
569743
  const server = new Server({
569667
569744
  name: "claude/tengu",
569668
- version: "0.9.5"
569745
+ version: "0.9.6"
569669
569746
  }, {
569670
569747
  capabilities: {
569671
569748
  tools: {}
@@ -574304,8 +574381,8 @@ async function getEnvLessBridgeConfig() {
574304
574381
  }
574305
574382
  async function checkEnvLessBridgeMinVersion() {
574306
574383
  const cfg = await getEnvLessBridgeConfig();
574307
- if (cfg.min_version && lt("0.9.5", cfg.min_version)) {
574308
- return `Your version of ZeroCLI (${"0.9.5"}) is too old for Remote Control.
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.
574309
574386
  Version ${cfg.min_version} or higher is required. Run \`zero update\` to update.`;
574310
574387
  }
574311
574388
  return null;
@@ -574780,7 +574857,7 @@ async function initBridgeCore(params) {
574780
574857
  const rawApi = createBridgeApiClient({
574781
574858
  baseUrl,
574782
574859
  getAccessToken,
574783
- runnerVersion: "0.9.5",
574860
+ runnerVersion: "0.9.6",
574784
574861
  onDebug: logForDebugging,
574785
574862
  onAuth401,
574786
574863
  getTrustedDeviceToken
@@ -581068,7 +581145,7 @@ __export(exports_update2, {
581068
581145
  });
581069
581146
  async function update2() {
581070
581147
  logEvent("tengu_update_check", {});
581071
- writeToStdout(`Current version: ${"0.9.5"}
581148
+ writeToStdout(`Current version: ${"0.9.6"}
581072
581149
  `);
581073
581150
  const channel2 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
581074
581151
  writeToStdout(`Checking for updates to ${channel2} version...
@@ -581143,8 +581220,8 @@ async function update2() {
581143
581220
  writeToStdout(`Zero is managed by Homebrew.
581144
581221
  `);
581145
581222
  const latest = await getLatestVersion(channel2);
581146
- if (latest && !gte("0.9.5", latest)) {
581147
- writeToStdout(`Update available: ${"0.9.5"} → ${latest}
581223
+ if (latest && !gte("0.9.6", latest)) {
581224
+ writeToStdout(`Update available: ${"0.9.6"} → ${latest}
581148
581225
  `);
581149
581226
  writeToStdout(`
581150
581227
  `);
@@ -581160,8 +581237,8 @@ async function update2() {
581160
581237
  writeToStdout(`Zero is managed by winget.
581161
581238
  `);
581162
581239
  const latest = await getLatestVersion(channel2);
581163
- if (latest && !gte("0.9.5", latest)) {
581164
- writeToStdout(`Update available: ${"0.9.5"} → ${latest}
581240
+ if (latest && !gte("0.9.6", latest)) {
581241
+ writeToStdout(`Update available: ${"0.9.6"} → ${latest}
581165
581242
  `);
581166
581243
  writeToStdout(`
581167
581244
  `);
@@ -581177,8 +581254,8 @@ async function update2() {
581177
581254
  writeToStdout(`Zero is managed by apk.
581178
581255
  `);
581179
581256
  const latest = await getLatestVersion(channel2);
581180
- if (latest && !gte("0.9.5", latest)) {
581181
- writeToStdout(`Update available: ${"0.9.5"} → ${latest}
581257
+ if (latest && !gte("0.9.6", latest)) {
581258
+ writeToStdout(`Update available: ${"0.9.6"} → ${latest}
581182
581259
  `);
581183
581260
  writeToStdout(`
581184
581261
  `);
@@ -581243,11 +581320,11 @@ async function update2() {
581243
581320
  `);
581244
581321
  await gracefulShutdown(1);
581245
581322
  }
581246
- if (result.latestVersion === "0.9.5") {
581247
- writeToStdout(source_default.green(`Zero CLI is up to date (${"0.9.5"})`) + `
581323
+ if (result.latestVersion === "0.9.6") {
581324
+ writeToStdout(source_default.green(`Zero CLI is up to date (${"0.9.6"})`) + `
581248
581325
  `);
581249
581326
  } else {
581250
- writeToStdout(source_default.green(`Successfully updated from ${"0.9.5"} to version ${result.latestVersion}`) + `
581327
+ writeToStdout(source_default.green(`Successfully updated from ${"0.9.6"} to version ${result.latestVersion}`) + `
581251
581328
  `);
581252
581329
  await regenerateCompletionCache();
581253
581330
  }
@@ -581307,12 +581384,12 @@ async function update2() {
581307
581384
  `);
581308
581385
  await gracefulShutdown(1);
581309
581386
  }
581310
- if (latestVersion === "0.9.5") {
581311
- writeToStdout(source_default.green(`Zero CLI is up to date (${"0.9.5"})`) + `
581387
+ if (latestVersion === "0.9.6") {
581388
+ writeToStdout(source_default.green(`Zero CLI is up to date (${"0.9.6"})`) + `
581312
581389
  `);
581313
581390
  await gracefulShutdown(0);
581314
581391
  }
581315
- writeToStdout(`New version available: ${latestVersion} (current: ${"0.9.5"})
581392
+ writeToStdout(`New version available: ${latestVersion} (current: ${"0.9.6"})
581316
581393
  `);
581317
581394
  writeToStdout(`Installing update...
581318
581395
  `);
@@ -581357,7 +581434,7 @@ async function update2() {
581357
581434
  logForDebugging(`update: Installation status: ${status2}`);
581358
581435
  switch (status2) {
581359
581436
  case "success":
581360
- writeToStdout(source_default.green(`Successfully updated from ${"0.9.5"} to version ${latestVersion}`) + `
581437
+ writeToStdout(source_default.green(`Successfully updated from ${"0.9.6"} to version ${latestVersion}`) + `
581361
581438
  `);
581362
581439
  await regenerateCompletionCache();
581363
581440
  break;
@@ -582658,7 +582735,7 @@ ${customInstructions}` : customInstructions;
582658
582735
  }
582659
582736
  }
582660
582737
  logForDiagnosticsNoPII("info", "started", {
582661
- version: "0.9.5",
582738
+ version: "0.9.6",
582662
582739
  is_native_binary: isInBundledMode()
582663
582740
  });
582664
582741
  registerCleanup(async () => {
@@ -583541,7 +583618,7 @@ Usage: claude --remote "your task description"`, () => gracefulShutdown(1));
583541
583618
  pendingHookMessages
583542
583619
  }, renderAndRun);
583543
583620
  }
583544
- }).version("0.9.5", "-v, --version", "Output the version number");
583621
+ }).version("0.9.6", "-v, --version", "Output the version number");
583545
583622
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
583546
583623
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
583547
583624
  if (canUserConfigureAdvisor()) {
@@ -584207,7 +584284,7 @@ if (false) {}
584207
584284
  async function main2() {
584208
584285
  const args = process.argv.slice(2);
584209
584286
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
584210
- console.log(`${"0.9.5"} (ZeroCLI)`);
584287
+ console.log(`${"0.9.6"} (ZeroCLI)`);
584211
584288
  return;
584212
584289
  }
584213
584290
  if (args.includes("--provider")) {
@@ -584349,4 +584426,4 @@ async function main2() {
584349
584426
  }
584350
584427
  main2();
584351
584428
 
584352
- //# debugId=93A40B18BC7C0BDA64756E2164756E21
584429
+ //# debugId=E7574CB9448447CE64756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duheso/zerocli",
3
- "version": "0.9.5",
3
+ "version": "0.9.6",
4
4
  "description": "Zero CLI to any LLM — OpenAI, Gemini, DeepSeek, Ollama, and 200+ models",
5
5
  "type": "module",
6
6
  "bin": {