@costrict/csc 4.2.21 → 4.2.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -66713,8 +66713,8 @@ function getClientVersion() {
66713
66713
  if (cached)
66714
66714
  return cached;
66715
66715
  try {
66716
- if ("4.2.21") {
66717
- cached = "4.2.21";
66716
+ if ("4.2.23") {
66717
+ cached = "4.2.23";
66718
66718
  return cached;
66719
66719
  }
66720
66720
  } catch {}
@@ -90538,11 +90538,22 @@ __export(exports_windowsPaths, {
90538
90538
  });
90539
90539
  import { existsSync as existsSync4 } from "fs";
90540
90540
  import * as pathWin32 from "path/win32";
90541
+ function isNonGitBash(candidatePath) {
90542
+ const lower = candidatePath.toLowerCase();
90543
+ if (!lower.endsWith("\\bash.exe")) {
90544
+ return false;
90545
+ }
90546
+ return lower.includes("\\windows\\system32\\") || lower.includes("\\windows\\syswow64\\") || lower.includes("\\windowsapps\\") || lower.includes("\\cygwin\\") || lower.includes("\\cygwin64\\");
90547
+ }
90541
90548
  function findExecutableWithDeps(executable, deps) {
90542
90549
  try {
90543
90550
  const paths2 = deps.execCommand(`where.exe ${executable}`).split(/\r?\n/u).map((candidate) => candidate.trim()).filter(Boolean);
90544
90551
  const cwd2 = pathWin32.resolve(deps.cwdFn()).toLowerCase();
90545
90552
  for (const candidatePath of paths2) {
90553
+ if (executable === "bash" && isNonGitBash(candidatePath)) {
90554
+ logForDebugging(`Skipping non-Git bash launcher (incompatible with Windows paths): ${candidatePath}`);
90555
+ continue;
90556
+ }
90546
90557
  const candidateDirectory = pathWin32.dirname(pathWin32.resolve(candidatePath)).toLowerCase();
90547
90558
  const relativeDirectory = pathWin32.relative(cwd2, candidateDirectory);
90548
90559
  const isWithinCwd = relativeDirectory === "" || !relativeDirectory.startsWith("..") && !pathWin32.isAbsolute(relativeDirectory);
@@ -90572,10 +90583,6 @@ function findGitBashPathOrNullWithDeps(deps = DEFAULT_DEPS) {
90572
90583
  if (envOverride) {
90573
90584
  return deps.checkExists(envOverride) ? envOverride : null;
90574
90585
  }
90575
- const bashPath = findExecutableWithDeps("bash", deps);
90576
- if (bashPath && deps.checkExists(bashPath)) {
90577
- return bashPath;
90578
- }
90579
90586
  const gitPath = findExecutableWithDeps("git", deps);
90580
90587
  if (gitPath) {
90581
90588
  const candidates = [
@@ -90583,11 +90590,20 @@ function findGitBashPathOrNullWithDeps(deps = DEFAULT_DEPS) {
90583
90590
  pathWin32.join(gitPath, "..", "..", "usr", "bin", "bash.exe"),
90584
90591
  pathWin32.join(gitPath, "..", "bash.exe")
90585
90592
  ];
90586
- const derivedPath = candidates.find(deps.checkExists);
90593
+ const derivedPath = candidates.find((candidate) => {
90594
+ if (isNonGitBash(candidate)) {
90595
+ return false;
90596
+ }
90597
+ return deps.checkExists(candidate);
90598
+ });
90587
90599
  if (derivedPath) {
90588
90600
  return derivedPath;
90589
90601
  }
90590
90602
  }
90603
+ const bashPath = findExecutableWithDeps("bash", deps);
90604
+ if (bashPath && deps.checkExists(bashPath)) {
90605
+ return bashPath;
90606
+ }
90591
90607
  return findCommonGitBashPath(deps.checkExists, deps.userProfile);
90592
90608
  }
90593
90609
  function setShellIfWindows() {
@@ -220487,7 +220503,7 @@ async function fetchCoStrictModels(baseUrl, accessToken) {
220487
220503
  headers: {
220488
220504
  Authorization: `Bearer ${accessToken}`,
220489
220505
  Accept: "application/json",
220490
- "User-Agent": `csc/${"4.2.21"}`
220506
+ "User-Agent": `csc/${"4.2.23"}`
220491
220507
  },
220492
220508
  signal: controller.signal
220493
220509
  });
@@ -222524,7 +222540,7 @@ var init_auth7 = __esm(() => {
222524
222540
 
222525
222541
  // src/utils/userAgent.ts
222526
222542
  function getClaudeCodeUserAgent() {
222527
- return `costrict/${"4.2.21"}`;
222543
+ return `costrict/${"4.2.23"}`;
222528
222544
  }
222529
222545
 
222530
222546
  // src/utils/workloadContext.ts
@@ -222546,7 +222562,7 @@ function getUserAgent() {
222546
222562
  const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
222547
222563
  const workload = getWorkload();
222548
222564
  const workloadSuffix = workload ? `, workload/${workload}` : "";
222549
- return `csc/${"4.2.21"}`;
222565
+ return `csc/${"4.2.23"}`;
222550
222566
  }
222551
222567
  function getMCPUserAgent() {
222552
222568
  const parts = [];
@@ -222560,7 +222576,7 @@ function getMCPUserAgent() {
222560
222576
  parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
222561
222577
  }
222562
222578
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
222563
- return `csc/${"4.2.21"}${suffix}`;
222579
+ return `csc/${"4.2.23"}${suffix}`;
222564
222580
  }
222565
222581
  function getWebFetchUserAgent() {
222566
222582
  return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
@@ -222680,7 +222696,7 @@ var init_user = __esm(() => {
222680
222696
  deviceId,
222681
222697
  sessionId: getSessionId(),
222682
222698
  email: getEmail(),
222683
- appVersion: "4.2.21",
222699
+ appVersion: "4.2.23",
222684
222700
  platform: getHostPlatformForAnalytics(),
222685
222701
  organizationUuid,
222686
222702
  accountUuid,
@@ -233728,7 +233744,7 @@ var init_metadata = __esm(() => {
233728
233744
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
233729
233745
  WHITESPACE_REGEX = /\s+/;
233730
233746
  getVersionBase = memoize_default(() => {
233731
- const match = "4.2.21".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
233747
+ const match = "4.2.23".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
233732
233748
  return match ? match[0] : undefined;
233733
233749
  });
233734
233750
  buildEnvContext = memoize_default(async () => {
@@ -233768,9 +233784,9 @@ var init_metadata = __esm(() => {
233768
233784
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
233769
233785
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
233770
233786
  isClaudeAiAuth: isClaudeAISubscriber(),
233771
- version: "4.2.21",
233787
+ version: "4.2.23",
233772
233788
  versionBase: getVersionBase(),
233773
- buildTime: "2026-07-31T12:00:32.834Z",
233789
+ buildTime: "2026-08-04T07:11:51.439Z",
233774
233790
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
233775
233791
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
233776
233792
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -234441,7 +234457,7 @@ function initialize1PEventLogging() {
234441
234457
  const platform3 = getPlatform();
234442
234458
  const attributes = {
234443
234459
  [import_semantic_conventions2.ATTR_SERVICE_NAME]: "claude-code",
234444
- [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "4.2.21"
234460
+ [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "4.2.23"
234445
234461
  };
234446
234462
  if (platform3 === "wsl") {
234447
234463
  const wslVersion = getWslVersion();
@@ -234468,7 +234484,7 @@ function initialize1PEventLogging() {
234468
234484
  })
234469
234485
  ]
234470
234486
  });
234471
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.claude_code.events", "4.2.21");
234487
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.claude_code.events", "4.2.23");
234472
234488
  }
234473
234489
  async function reinitialize1PEventLoggingIfConfigChanged() {
234474
234490
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -434486,7 +434502,7 @@ function getTelemetryAttributes() {
434486
434502
  attributes["session.id"] = sessionId;
434487
434503
  }
434488
434504
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
434489
- attributes["app.version"] = "4.2.21";
434505
+ attributes["app.version"] = "4.2.23";
434490
434506
  }
434491
434507
  const oauthAccount = getOauthAccountInfo();
434492
434508
  if (oauthAccount) {
@@ -468006,7 +468022,7 @@ function initLangfuse() {
468006
468022
  flushInterval: parseInt(process.env.LANGFUSE_FLUSH_INTERVAL ?? "10", 10),
468007
468023
  mask: maskFn,
468008
468024
  environment: process.env.LANGFUSE_TRACING_ENVIRONMENT ?? "development",
468009
- release: "4.2.21",
468025
+ release: "4.2.23",
468010
468026
  exportMode: process.env.LANGFUSE_EXPORT_MODE ?? "batched",
468011
468027
  timeout: parseInt(process.env.LANGFUSE_TIMEOUT ?? "5", 10)
468012
468028
  });
@@ -499906,7 +499922,7 @@ function initSentry() {
499906
499922
  }
499907
499923
  init3({
499908
499924
  dsn,
499909
- release: typeof MACRO !== "undefined" ? "4.2.21" : undefined,
499925
+ release: typeof MACRO !== "undefined" ? "4.2.23" : undefined,
499910
499926
  environment: typeof BUILD_ENV !== "undefined" ? BUILD_ENV : "production",
499911
499927
  maxBreadcrumbs: 20,
499912
499928
  sampleRate: 1,
@@ -527803,7 +527819,7 @@ async function initializeBetaTracing(resource) {
527803
527819
  });
527804
527820
  logs.setGlobalLoggerProvider(loggerProvider);
527805
527821
  setLoggerProvider(loggerProvider);
527806
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.21");
527822
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.23");
527807
527823
  setEventLogger(eventLogger);
527808
527824
  process.on("beforeExit", async () => {
527809
527825
  await loggerProvider?.forceFlush();
@@ -527843,7 +527859,7 @@ async function initializeTelemetry() {
527843
527859
  const platform5 = getPlatform();
527844
527860
  const baseAttributes = {
527845
527861
  [import_semantic_conventions29.ATTR_SERVICE_NAME]: "claude-code",
527846
- [import_semantic_conventions29.ATTR_SERVICE_VERSION]: "4.2.21"
527862
+ [import_semantic_conventions29.ATTR_SERVICE_VERSION]: "4.2.23"
527847
527863
  };
527848
527864
  if (platform5 === "wsl") {
527849
527865
  const wslVersion = getWslVersion();
@@ -527888,7 +527904,7 @@ async function initializeTelemetry() {
527888
527904
  } catch {}
527889
527905
  };
527890
527906
  registerCleanup(shutdownTelemetry2);
527891
- return meterProvider2.getMeter("com.anthropic.claude_code", "4.2.21");
527907
+ return meterProvider2.getMeter("com.anthropic.claude_code", "4.2.23");
527892
527908
  }
527893
527909
  const meterProvider = new import_sdk_metrics2.MeterProvider({
527894
527910
  resource,
@@ -527908,7 +527924,7 @@ async function initializeTelemetry() {
527908
527924
  });
527909
527925
  logs.setGlobalLoggerProvider(loggerProvider);
527910
527926
  setLoggerProvider(loggerProvider);
527911
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.21");
527927
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.23");
527912
527928
  setEventLogger(eventLogger);
527913
527929
  logForDebugging("[3P telemetry] Event logger set successfully");
527914
527930
  process.on("beforeExit", async () => {
@@ -527970,7 +527986,7 @@ Current timeout: ${timeoutMs}ms
527970
527986
  }
527971
527987
  };
527972
527988
  registerCleanup(shutdownTelemetry);
527973
- return meterProvider.getMeter("com.anthropic.claude_code", "4.2.21");
527989
+ return meterProvider.getMeter("com.anthropic.claude_code", "4.2.23");
527974
527990
  }
527975
527991
  async function flushTelemetry() {
527976
527992
  const meterProvider = getMeterProvider();
@@ -529029,7 +529045,7 @@ async function installGlobalPackage(specificVersion) {
529029
529045
  logError3(new AutoUpdaterError("Another process is currently installing an update"));
529030
529046
  logEvent("tengu_auto_updater_lock_contention", {
529031
529047
  pid: process.pid,
529032
- currentVersion: "4.2.21"
529048
+ currentVersion: "4.2.23"
529033
529049
  });
529034
529050
  return { status: "in_progress" };
529035
529051
  }
@@ -529038,7 +529054,7 @@ async function installGlobalPackage(specificVersion) {
529038
529054
  if (!env4.isRunningWithBun() && env4.isNpmFromWindowsPath()) {
529039
529055
  logError3(new Error("Windows NPM detected in WSL environment"));
529040
529056
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
529041
- currentVersion: "4.2.21"
529057
+ currentVersion: "4.2.23"
529042
529058
  });
529043
529059
  return {
529044
529060
  status: "install_failed",
@@ -529584,7 +529600,7 @@ function detectLinuxGlobPatternWarnings() {
529584
529600
  }
529585
529601
  async function getDoctorDiagnostic() {
529586
529602
  const installationType = await getCurrentInstallationType();
529587
- const version9 = typeof MACRO !== "undefined" ? "4.2.21" : "unknown";
529603
+ const version9 = typeof MACRO !== "undefined" ? "4.2.23" : "unknown";
529588
529604
  const installationPath = await getInstallationPath();
529589
529605
  const invokedBinary = getInvokedBinary();
529590
529606
  const multipleInstallations = await detectMultipleInstallations();
@@ -567771,7 +567787,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
567771
567787
  const client10 = new Client3({
567772
567788
  name: "claude-code",
567773
567789
  title: "CoStrict",
567774
- version: "4.2.21",
567790
+ version: "4.2.23",
567775
567791
  description: "CoStrict agentic coding tool",
567776
567792
  websiteUrl: PRODUCT_URL
567777
567793
  }, {
@@ -568142,7 +568158,7 @@ var init_client18 = __esm(() => {
568142
568158
  const client10 = new Client3({
568143
568159
  name: "claude-code",
568144
568160
  title: "CoStrict",
568145
- version: "4.2.21",
568161
+ version: "4.2.23",
568146
568162
  description: "CoStrict agentic coding tool",
568147
568163
  websiteUrl: PRODUCT_URL
568148
568164
  }, {
@@ -569532,7 +569548,7 @@ function getInstallationEnv() {
569532
569548
  return;
569533
569549
  }
569534
569550
  function getClaudeCodeVersion() {
569535
- return "4.2.21";
569551
+ return "4.2.23";
569536
569552
  }
569537
569553
  async function getInstalledVSCodeExtensionVersion(command4) {
569538
569554
  const { stdout } = await execFileNoThrow2(command4, ["--list-extensions", "--show-versions"], {
@@ -570896,8 +570912,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
570896
570912
  const maxVersion = await getMaxVersion();
570897
570913
  if (maxVersion && gt(version10, maxVersion)) {
570898
570914
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version10} to ${maxVersion}`);
570899
- if (gte2("4.2.21", maxVersion)) {
570900
- logForDebugging(`Native installer: current version ${"4.2.21"} is already at or above maxVersion ${maxVersion}, skipping update`);
570915
+ if (gte2("4.2.23", maxVersion)) {
570916
+ logForDebugging(`Native installer: current version ${"4.2.23"} is already at or above maxVersion ${maxVersion}, skipping update`);
570901
570917
  logEvent("tengu_native_update_skipped_max_version", {
570902
570918
  latency_ms: Date.now() - startTime2,
570903
570919
  max_version: maxVersion,
@@ -570908,7 +570924,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
570908
570924
  version10 = maxVersion;
570909
570925
  }
570910
570926
  }
570911
- if (!forceReinstall && version10 === "4.2.21" && await versionIsAvailable(version10) && await isPossibleClaudeBinary(executablePath)) {
570927
+ if (!forceReinstall && version10 === "4.2.23" && await versionIsAvailable(version10) && await isPossibleClaudeBinary(executablePath)) {
570912
570928
  logForDebugging(`Found ${version10} at ${executablePath}, skipping install`);
570913
570929
  logEvent("tengu_native_update_complete", {
570914
570930
  latency_ms: Date.now() - startTime2,
@@ -708976,7 +708992,7 @@ function Feedback({
708976
708992
  platform: env4.platform,
708977
708993
  gitRepo: envInfo.isGit,
708978
708994
  terminal: env4.terminal,
708979
- version: "4.2.21",
708995
+ version: "4.2.23",
708980
708996
  transcript: normalizeMessagesForAPI(messages),
708981
708997
  errors: sanitizedErrors,
708982
708998
  lastApiRequest: getLastAPIRequest(),
@@ -709159,7 +709175,7 @@ function Feedback({
709159
709175
  ", ",
709160
709176
  env4.terminal,
709161
709177
  ", v",
709162
- "4.2.21"
709178
+ "4.2.23"
709163
709179
  ]
709164
709180
  })
709165
709181
  ]
@@ -709256,7 +709272,7 @@ ${sanitizedDescription}
709256
709272
  ` + `**Environment Info**
709257
709273
  ` + `- Platform: ${env4.platform}
709258
709274
  ` + `- Terminal: ${env4.terminal}
709259
- ` + `- Version: ${"4.2.21"}
709275
+ ` + `- Version: ${"4.2.23"}
709260
709276
  ` + `- Feedback ID: ${feedbackId}
709261
709277
  ` + `
709262
709278
  **Errors**
@@ -711495,7 +711511,7 @@ function buildPrimarySection() {
711495
711511
  children: t("settings.status.renameHint")
711496
711512
  });
711497
711513
  return [
711498
- { label: t("settings.status.version"), value: "4.2.21" },
711514
+ { label: t("settings.status.version"), value: "4.2.23" },
711499
711515
  { label: t("settings.status.sessionName"), value: nameValue },
711500
711516
  { label: t("settings.status.sessionId"), value: sessionId },
711501
711517
  { label: t("settings.status.cwd"), value: getCwd() },
@@ -714353,7 +714369,7 @@ function Config({
714353
714369
  }
714354
714370
  })
714355
714371
  }) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_runtime191.jsx(ChannelDowngradeDialog, {
714356
- currentVersion: "4.2.21",
714372
+ currentVersion: "4.2.23",
714357
714373
  onChoice: (choice) => {
714358
714374
  setShowSubmenu(null);
714359
714375
  setTabsHidden(false);
@@ -714365,7 +714381,7 @@ function Config({
714365
714381
  autoUpdatesChannel: "stable"
714366
714382
  };
714367
714383
  if (choice === "stay") {
714368
- newSettings.minimumVersion = "4.2.21";
714384
+ newSettings.minimumVersion = "4.2.23";
714369
714385
  }
714370
714386
  updateSettingsForSource("userSettings", newSettings);
714371
714387
  setSettingsData((prev) => ({
@@ -719834,7 +719850,7 @@ function HelpV2({ onClose, commands: commands11 }) {
719834
719850
  color: "professionalBlue",
719835
719851
  children: [
719836
719852
  /* @__PURE__ */ jsx_runtime218.jsx(Tabs, {
719837
- title: process.env.USER_TYPE === "sf" ? "/help" : `CoStrict v${"4.2.21"}`,
719853
+ title: process.env.USER_TYPE === "sf" ? "/help" : `CoStrict v${"4.2.23"}`,
719838
719854
  color: "professionalBlue",
719839
719855
  defaultTab: "general",
719840
719856
  children: tabs
@@ -742835,7 +742851,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
742835
742851
  return [];
742836
742852
  }
742837
742853
  }
742838
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.21") {
742854
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.23") {
742839
742855
  if (process.env.USER_TYPE === "sf") {
742840
742856
  const changelog = "";
742841
742857
  if (changelog) {
@@ -742862,7 +742878,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.21")
742862
742878
  releaseNotes
742863
742879
  };
742864
742880
  }
742865
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "4.2.21") {
742881
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "4.2.23") {
742866
742882
  if (process.env.USER_TYPE === "sf") {
742867
742883
  const changelog = "";
742868
742884
  if (changelog) {
@@ -745375,7 +745391,7 @@ function isNotLoggedIn() {
745375
745391
  return true;
745376
745392
  }
745377
745393
  function getLogoDisplayData() {
745378
- const version10 = process.env.DEMO_VERSION ?? "4.2.21";
745394
+ const version10 = process.env.DEMO_VERSION ?? "4.2.23";
745379
745395
  const serverUrl = getDirectConnectServerUrl();
745380
745396
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
745381
745397
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -745953,7 +745969,7 @@ var init_MatrixMessageLine = __esm(() => {
745953
745969
  // src/components/matrix-tactical/MatrixWelcome.tsx
745954
745970
  import { basename as basename47 } from "path";
745955
745971
  function MatrixWelcome({
745956
- version: version10 = "4.2.21",
745972
+ version: version10 = "4.2.23",
745957
745973
  projectName,
745958
745974
  cwd: cwd2,
745959
745975
  modelDisplayName,
@@ -746588,13 +746604,13 @@ function LogoV2() {
746588
746604
  const { hasReleaseNotes } = checkForReleaseNotesSync(config13.lastReleaseNotesSeen);
746589
746605
  import_react167.useEffect(() => {
746590
746606
  const currentConfig = getGlobalConfig();
746591
- if (currentConfig.lastReleaseNotesSeen === "4.2.21") {
746607
+ if (currentConfig.lastReleaseNotesSeen === "4.2.23") {
746592
746608
  return;
746593
746609
  }
746594
746610
  saveGlobalConfig((current2) => {
746595
- if (current2.lastReleaseNotesSeen === "4.2.21")
746611
+ if (current2.lastReleaseNotesSeen === "4.2.23")
746596
746612
  return current2;
746597
- return { ...current2, lastReleaseNotesSeen: "4.2.21" };
746613
+ return { ...current2, lastReleaseNotesSeen: "4.2.23" };
746598
746614
  });
746599
746615
  if (showOnboarding) {
746600
746616
  incrementProjectOnboardingSeenCount();
@@ -769124,7 +769140,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
769124
769140
  smapsRollup,
769125
769141
  platform: process.platform,
769126
769142
  nodeVersion: process.version,
769127
- ccVersion: "4.2.21"
769143
+ ccVersion: "4.2.23"
769128
769144
  };
769129
769145
  }
769130
769146
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -769240,7 +769256,7 @@ var init_mock_limits = __esm(() => {
769240
769256
  var call55 = async () => {
769241
769257
  return {
769242
769258
  type: "text",
769243
- value: `${"4.2.21"} (built ${"2026-07-31T12:00:32.834Z"})`
769259
+ value: `${"4.2.23"} (built ${"2026-08-04T07:11:51.439Z"})`
769244
769260
  };
769245
769261
  }, version10, version_default;
769246
769262
  var init_version2 = __esm(() => {
@@ -783830,7 +783846,8 @@ async function generateUltracodeWorkflow(request3, context41) {
783830
783846
  maxRetries: 1,
783831
783847
  thinking: false,
783832
783848
  querySource: "workflow",
783833
- signal: context41.abortController.signal
783849
+ signal: context41.abortController.signal,
783850
+ stream: true
783834
783851
  });
783835
783852
  const workflow = prepareGeneratedUltracodeWorkflow(extractGeneratedWorkflow(response3), request3);
783836
783853
  validateGeneratedUltracodeWorkflow(workflow, request3);
@@ -787163,7 +787180,7 @@ function generateHtmlReport(data, insights) {
787163
787180
  </html>`;
787164
787181
  }
787165
787182
  function buildExportData(data, insights, facets, remoteStats) {
787166
- const version11 = typeof MACRO !== "undefined" ? "4.2.21" : "unknown";
787183
+ const version11 = typeof MACRO !== "undefined" ? "4.2.23" : "unknown";
787167
787184
  const remote_hosts_collected = remoteStats?.hosts.filter((h8) => h8.sessionCount > 0).map((h8) => h8.name);
787168
787185
  const facets_summary = {
787169
787186
  total: facets.size,
@@ -791613,7 +791630,7 @@ var init_sessionStorage = __esm(() => {
791613
791630
  init_settings2();
791614
791631
  init_slowOperations();
791615
791632
  init_uuid();
791616
- VERSION11 = typeof MACRO !== "undefined" ? "4.2.21" : "unknown";
791633
+ VERSION11 = typeof MACRO !== "undefined" ? "4.2.23" : "unknown";
791617
791634
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
791618
791635
  SKIP_FIRST_PROMPT_PATTERN2 = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
791619
791636
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -792954,7 +792971,7 @@ var init_filesystem = __esm(() => {
792954
792971
  });
792955
792972
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
792956
792973
  const nonce = randomBytes24(16).toString("hex");
792957
- return join204(getCostrictTempDir(), "bundled-skills", "4.2.21", nonce);
792974
+ return join204(getCostrictTempDir(), "bundled-skills", "4.2.23", nonce);
792958
792975
  });
792959
792976
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
792960
792977
  });
@@ -799224,7 +799241,7 @@ function computeFingerprint(messageText, version11) {
799224
799241
  }
799225
799242
  function computeFingerprintFromMessages(messages) {
799226
799243
  const firstMessageText = extractFirstMessageText(messages);
799227
- return computeFingerprint(firstMessageText, "4.2.21");
799244
+ return computeFingerprint(firstMessageText, "4.2.23");
799228
799245
  }
799229
799246
  var FINGERPRINT_SALT = "59cf53e54c78";
799230
799247
  var init_fingerprint = () => {};
@@ -799634,7 +799651,7 @@ function getAnthropicEnvMetadata() {
799634
799651
  function getBuildAgeMinutes() {
799635
799652
  if (false)
799636
799653
  ;
799637
- const buildTime = new Date("2026-07-31T12:00:32.834Z").getTime();
799654
+ const buildTime = new Date("2026-08-04T07:11:51.439Z").getTime();
799638
799655
  if (isNaN(buildTime))
799639
799656
  return;
799640
799657
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -804890,7 +804907,10 @@ function buildMessages(system, messages) {
804890
804907
  }
804891
804908
  for (const msg of messages) {
804892
804909
  if (typeof msg.content === "string") {
804893
- result.push({ role: msg.role, content: msg.content });
804910
+ result.push({
804911
+ role: msg.role,
804912
+ content: msg.content
804913
+ });
804894
804914
  } else {
804895
804915
  const text2 = msg.content.filter((b9) => b9.type === "text").map((b9) => b9.text).join(`
804896
804916
  `);
@@ -804900,9 +804920,21 @@ function buildMessages(system, messages) {
804900
804920
  return result;
804901
804921
  }
804902
804922
  async function sideQueryOpenAICompat(opts, client10, resolvedModel, providerTag) {
804903
- const { system, messages, max_tokens = 1024, signal, temperature, stop_sequences, querySource } = opts;
804904
- logForDebugging(`[${providerTag} sideQuery] querySource=${querySource}, model=${resolvedModel}`);
804923
+ const {
804924
+ system,
804925
+ messages,
804926
+ max_tokens = 1024,
804927
+ signal,
804928
+ temperature,
804929
+ stop_sequences,
804930
+ querySource,
804931
+ stream: stream6
804932
+ } = opts;
804933
+ logForDebugging(`[${providerTag} sideQuery] querySource=${querySource}, model=${resolvedModel}, stream=${stream6 ?? false}`);
804905
804934
  const start = Date.now();
804935
+ if (stream6) {
804936
+ return streamOpenAICompat(client10, resolvedModel, opts, providerTag);
804937
+ }
804906
804938
  const response3 = await client10.chat.completions.create({
804907
804939
  model: resolvedModel,
804908
804940
  messages: buildMessages(system, messages),
@@ -804930,7 +804962,11 @@ async function sideQueryOpenAICompat(opts, client10, resolvedModel, providerTag)
804930
804962
  const choice = response3.choices[0];
804931
804963
  const content = [];
804932
804964
  if (choice?.message?.content) {
804933
- content.push({ type: "text", text: choice.message.content, citations: null });
804965
+ content.push({
804966
+ type: "text",
804967
+ text: choice.message.content,
804968
+ citations: null
804969
+ });
804934
804970
  }
804935
804971
  if (choice?.message?.tool_calls) {
804936
804972
  for (const tc of choice.message.tool_calls) {
@@ -804939,7 +804975,12 @@ async function sideQueryOpenAICompat(opts, client10, resolvedModel, providerTag)
804939
804975
  try {
804940
804976
  input4 = JSON.parse(funcTc.function.arguments);
804941
804977
  } catch {}
804942
- content.push({ type: "tool_use", id: tc.id, name: funcTc.function.name, input: input4 });
804978
+ content.push({
804979
+ type: "tool_use",
804980
+ id: tc.id,
804981
+ name: funcTc.function.name,
804982
+ input: input4
804983
+ });
804943
804984
  }
804944
804985
  }
804945
804986
  return {
@@ -804959,6 +805000,107 @@ async function sideQueryOpenAICompat(opts, client10, resolvedModel, providerTag)
804959
805000
  }
804960
805001
  };
804961
805002
  }
805003
+ async function streamOpenAICompat(client10, resolvedModel, opts, providerTag) {
805004
+ const {
805005
+ system,
805006
+ messages,
805007
+ max_tokens = 1024,
805008
+ signal,
805009
+ temperature,
805010
+ stop_sequences,
805011
+ querySource
805012
+ } = opts;
805013
+ logForDebugging(`[${providerTag} sideQuery:stream] querySource=${querySource}, model=${resolvedModel}`);
805014
+ const start = Date.now();
805015
+ const stream6 = await client10.chat.completions.create({
805016
+ model: resolvedModel,
805017
+ messages: buildMessages(system, messages),
805018
+ max_tokens,
805019
+ stream: true,
805020
+ stream_options: { include_usage: true },
805021
+ ...temperature !== undefined && { temperature },
805022
+ ...stop_sequences && { stop: stop_sequences }
805023
+ }, { signal });
805024
+ let responseId = "";
805025
+ let contentText = "";
805026
+ let finishReason;
805027
+ const toolCalls = new Map;
805028
+ let inputTokens = 0;
805029
+ let outputTokens = 0;
805030
+ for await (const chunk2 of stream6) {
805031
+ if (chunk2.id)
805032
+ responseId = chunk2.id;
805033
+ const choice = chunk2.choices?.[0];
805034
+ if (choice) {
805035
+ if (choice.delta?.content)
805036
+ contentText += choice.delta.content;
805037
+ if (choice.delta?.tool_calls) {
805038
+ for (const tc of choice.delta.tool_calls) {
805039
+ const idx = tc.index ?? 0;
805040
+ const existing = toolCalls.get(idx) ?? {
805041
+ id: "",
805042
+ name: "",
805043
+ arguments: ""
805044
+ };
805045
+ if (tc.id)
805046
+ existing.id = tc.id;
805047
+ if (tc.function?.name)
805048
+ existing.name = tc.function.name;
805049
+ if (tc.function?.arguments)
805050
+ existing.arguments += tc.function.arguments;
805051
+ toolCalls.set(idx, existing);
805052
+ }
805053
+ }
805054
+ if (choice.finish_reason)
805055
+ finishReason = choice.finish_reason;
805056
+ }
805057
+ if (chunk2.usage) {
805058
+ inputTokens = chunk2.usage.prompt_tokens ?? 0;
805059
+ outputTokens = chunk2.usage.completion_tokens ?? 0;
805060
+ }
805061
+ }
805062
+ const now2 = Date.now();
805063
+ const lastCompletion = getLastApiCompletionTimestamp();
805064
+ logEvent("tengu_api_success", {
805065
+ requestId: responseId,
805066
+ querySource,
805067
+ model: resolvedModel,
805068
+ inputTokens,
805069
+ outputTokens,
805070
+ cachedInputTokens: 0,
805071
+ uncachedInputTokens: 0,
805072
+ durationMsIncludingRetries: now2 - start,
805073
+ timeSinceLastApiCallMs: lastCompletion !== null ? now2 - lastCompletion : undefined
805074
+ });
805075
+ setLastApiCompletionTimestamp(now2);
805076
+ const content = [];
805077
+ if (contentText) {
805078
+ content.push({ type: "text", text: contentText, citations: null });
805079
+ }
805080
+ for (const [, tc] of [...toolCalls.entries()].sort((a8, b9) => a8[0] - b9[0])) {
805081
+ let input4 = {};
805082
+ try {
805083
+ input4 = JSON.parse(tc.arguments);
805084
+ } catch {}
805085
+ content.push({ type: "tool_use", id: tc.id, name: tc.name, input: input4 });
805086
+ }
805087
+ return {
805088
+ id: responseId,
805089
+ type: "message",
805090
+ role: "assistant",
805091
+ content,
805092
+ model: resolvedModel,
805093
+ stop_reason: STOP_REASON_MAP[finishReason ?? "stop"] ?? "end_turn",
805094
+ stop_sequence: null,
805095
+ usage: {
805096
+ input_tokens: inputTokens,
805097
+ output_tokens: outputTokens,
805098
+ cache_creation_input_tokens: null,
805099
+ cache_read_input_tokens: null,
805100
+ server_tool_use: null
805101
+ }
805102
+ };
805103
+ }
804962
805104
  var STOP_REASON_MAP;
804963
805105
  var init_sideQueryOpenAICompat = __esm(() => {
804964
805106
  init_analytics();
@@ -805033,7 +805175,7 @@ async function sideQuery(opts) {
805033
805175
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
805034
805176
  }
805035
805177
  const messageText = extractFirstUserMessageText(messages);
805036
- const fingerprint = computeFingerprint(messageText, "4.2.21");
805178
+ const fingerprint = computeFingerprint(messageText, "4.2.23");
805037
805179
  const attributionHeader = getAttributionHeader(fingerprint);
805038
805180
  const systemBlocks = [
805039
805181
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -808429,7 +808571,7 @@ function buildSystemInitMessage(inputs) {
808429
808571
  slash_commands: inputs.commands.filter((c10) => c10.userInvocable !== false).map((c10) => c10.name),
808430
808572
  apiKeySource: getAnthropicApiKeyWithSource().source,
808431
808573
  betas: getSdkBetas(),
808432
- claude_code_version: "4.2.21",
808574
+ claude_code_version: "4.2.23",
808433
808575
  output_style: outputStyle2,
808434
808576
  agents: inputs.agents.map((agent) => agent.agentType),
808435
808577
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -811973,7 +812115,7 @@ function appendToLog(path57, message2) {
811973
812115
  cwd: getFsImplementation().cwd(),
811974
812116
  userType: process.env.USER_TYPE,
811975
812117
  sessionId: getSessionId(),
811976
- version: "4.2.21"
812118
+ version: "4.2.23"
811977
812119
  };
811978
812120
  getLogWriter(path57).write(messageWithTimestamp);
811979
812121
  }
@@ -828442,7 +828584,7 @@ function getCommandFuse(commands11) {
828442
828584
  if (fuseCache?.commands === commands11) {
828443
828585
  return fuseCache.fuse;
828444
828586
  }
828445
- const commandData = commands11.filter((cmd) => !cmd.isHidden).map((cmd) => {
828587
+ const commandData = deduplicateCommands(commands11.filter((cmd) => !cmd.isHidden)).map((cmd) => {
828446
828588
  const commandName = getCommandName(cmd);
828447
828589
  const commandNameKey = getSearchAliases([commandName]);
828448
828590
  const aliasKey = cmd.aliases ? getSearchAliases(cmd.aliases) : undefined;
@@ -828576,6 +828718,17 @@ function getCommandId2(cmd) {
828576
828718
  }
828577
828719
  return `${commandName}:${cmd.type}`;
828578
828720
  }
828721
+ function deduplicateCommands(commands11) {
828722
+ const seenIds = new Set;
828723
+ return commands11.filter((cmd) => {
828724
+ const id = getCommandId2(cmd);
828725
+ if (seenIds.has(id)) {
828726
+ return false;
828727
+ }
828728
+ seenIds.add(id);
828729
+ return true;
828730
+ });
828731
+ }
828579
828732
  function findMatchedAlias(query5, aliases) {
828580
828733
  if (!aliases || aliases.length === 0 || query5 === "") {
828581
828734
  return;
@@ -828606,7 +828759,7 @@ function generateCommandSuggestions(input4, commands11) {
828606
828759
  }
828607
828760
  const query5 = input4.slice(1).toLowerCase().trim();
828608
828761
  if (query5 === "") {
828609
- const visibleCommands = commands11.filter((cmd) => !cmd.isHidden);
828762
+ const visibleCommands = deduplicateCommands(commands11.filter((cmd) => !cmd.isHidden));
828610
828763
  const recentlyUsed = [];
828611
828764
  const commandsWithScores = visibleCommands.filter((cmd) => cmd.type === "prompt").map((cmd) => ({
828612
828765
  cmd,
@@ -833018,7 +833171,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
833018
833171
  project_dir: getOriginalCwd(),
833019
833172
  added_dirs: addedDirs
833020
833173
  },
833021
- version: "4.2.21",
833174
+ version: "4.2.23",
833022
833175
  output_style: {
833023
833176
  name: outputStyleName
833024
833177
  },
@@ -851643,7 +851796,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
851643
851796
  } catch {}
851644
851797
  const data = {
851645
851798
  trigger,
851646
- version: "4.2.21",
851799
+ version: "4.2.23",
851647
851800
  platform: process.platform,
851648
851801
  transcript,
851649
851802
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -852898,7 +853051,7 @@ function getReleaseType(current2, latest) {
852898
853051
  return "patch";
852899
853052
  }
852900
853053
  async function checkNewAutoUpdate(callbacks) {
852901
- const currentVersion = "4.2.21";
853054
+ const currentVersion = "4.2.23";
852902
853055
  logForDebugging(`[newAutoUpdater] checking, current: ${currentVersion}`);
852903
853056
  if (isNewAutoUpdaterDisabled()) {
852904
853057
  return { action: "skip", currentVersion, latestVersion: null };
@@ -864121,7 +864274,7 @@ function WelcomeV2() {
864121
864274
  dimColor: true,
864122
864275
  children: [
864123
864276
  "v",
864124
- "4.2.21",
864277
+ "4.2.23",
864125
864278
  " "
864126
864279
  ]
864127
864280
  })
@@ -864187,7 +864340,7 @@ function WelcomeV2() {
864187
864340
  dimColor: true,
864188
864341
  children: [
864189
864342
  "v",
864190
- "4.2.21",
864343
+ "4.2.23",
864191
864344
  " "
864192
864345
  ]
864193
864346
  })
@@ -864289,7 +864442,7 @@ function AppleTerminalWelcomeV2({ theme: theme2, welcomeMessage }) {
864289
864442
  dimColor: true,
864290
864443
  children: [
864291
864444
  "v",
864292
- "4.2.21",
864445
+ "4.2.23",
864293
864446
  " "
864294
864447
  ]
864295
864448
  })
@@ -864355,7 +864508,7 @@ function AppleTerminalWelcomeV2({ theme: theme2, welcomeMessage }) {
864355
864508
  dimColor: true,
864356
864509
  children: [
864357
864510
  "v",
864358
- "4.2.21",
864511
+ "4.2.23",
864359
864512
  " "
864360
864513
  ]
864361
864514
  })
@@ -865295,7 +865448,7 @@ function completeOnboarding() {
865295
865448
  saveGlobalConfig((current2) => ({
865296
865449
  ...current2,
865297
865450
  hasCompletedOnboarding: true,
865298
- lastOnboardingVersion: "4.2.21"
865451
+ lastOnboardingVersion: "4.2.23"
865299
865452
  }));
865300
865453
  }
865301
865454
  function showDialog(root9, renderer) {
@@ -880377,7 +880530,7 @@ async function startMCPServer(cwd3, debug5, verbose) {
880377
880530
  setCwd(cwd3);
880378
880531
  const server2 = new Server({
880379
880532
  name: "claude/tengu",
880380
- version: "4.2.21"
880533
+ version: "4.2.23"
880381
880534
  }, {
880382
880535
  capabilities: {
880383
880536
  tools: {}
@@ -882662,7 +882815,7 @@ function createHealthRoutes(sessionManager) {
882662
882815
  const uptime2 = process.uptime() * 1000;
882663
882816
  return c10.json({
882664
882817
  status: "ok",
882665
- version: "4.2.21",
882818
+ version: "4.2.23",
882666
882819
  uptime_ms: Math.round(uptime2),
882667
882820
  active_sessions: sessionManager.getActiveCount()
882668
882821
  });
@@ -882934,7 +883087,7 @@ function getMacroDefines() {
882934
883087
  commit = execSync3("git rev-parse --short HEAD", { encoding: "utf-8", cwd: __dirname }).trim();
882935
883088
  } catch {}
882936
883089
  return {
882937
- "MACRO.VERSION": JSON.stringify("4.2.21"),
883090
+ "MACRO.VERSION": JSON.stringify("4.2.23"),
882938
883091
  "MACRO.BUILD_TIME": JSON.stringify(new Date().toISOString()),
882939
883092
  "MACRO.COMMIT": JSON.stringify(commit),
882940
883093
  "MACRO.FEEDBACK_CHANNEL": JSON.stringify(""),
@@ -889927,7 +890080,7 @@ __export(exports_update, {
889927
890080
  });
889928
890081
  async function update() {
889929
890082
  logEvent("tengu_update_check", {});
889930
- writeToStdout(`${t("cli.update.currentVersion", "Current version")}: ${"4.2.21"}
890083
+ writeToStdout(`${t("cli.update.currentVersion", "Current version")}: ${"4.2.23"}
889931
890084
  `);
889932
890085
  const channel5 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
889933
890086
  writeToStdout(`${t("cli.update.checkingUpdates", { channel: channel5 }, "Checking for updates to {channel} version...")}
@@ -890002,8 +890155,8 @@ async function update() {
890002
890155
  writeToStdout(`${t("cli.update.managedByHomebrew", "CoStrict is managed by Homebrew.")}
890003
890156
  `);
890004
890157
  const latest = await getLatestVersion(channel5);
890005
- if (latest && !gte2("4.2.21", latest)) {
890006
- writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.21", latest }, "Update available: {current} \u2192 {latest}")}
890158
+ if (latest && !gte2("4.2.23", latest)) {
890159
+ writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.23", latest }, "Update available: {current} \u2192 {latest}")}
890007
890160
  `);
890008
890161
  writeToStdout(`
890009
890162
  `);
@@ -890019,8 +890172,8 @@ async function update() {
890019
890172
  writeToStdout(`${t("cli.update.managedByWinget", "CoStrict is managed by winget.")}
890020
890173
  `);
890021
890174
  const latest = await getLatestVersion(channel5);
890022
- if (latest && !gte2("4.2.21", latest)) {
890023
- writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.21", latest }, "Update available: {current} \u2192 {latest}")}
890175
+ if (latest && !gte2("4.2.23", latest)) {
890176
+ writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.23", latest }, "Update available: {current} \u2192 {latest}")}
890024
890177
  `);
890025
890178
  writeToStdout(`
890026
890179
  `);
@@ -890036,8 +890189,8 @@ async function update() {
890036
890189
  writeToStdout(`${t("cli.update.managedByApk", "CoStrict is managed by apk.")}
890037
890190
  `);
890038
890191
  const latest = await getLatestVersion(channel5);
890039
- if (latest && !gte2("4.2.21", latest)) {
890040
- writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.21", latest }, "Update available: {current} \u2192 {latest}")}
890192
+ if (latest && !gte2("4.2.23", latest)) {
890193
+ writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.23", latest }, "Update available: {current} \u2192 {latest}")}
890041
890194
  `);
890042
890195
  writeToStdout(`
890043
890196
  `);
@@ -890102,11 +890255,11 @@ async function update() {
890102
890255
  `);
890103
890256
  await gracefulShutdown(1);
890104
890257
  }
890105
- if (result2.latestVersion === "4.2.21") {
890106
- writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.21" }, "CoStrict is up to date ({version})")) + `
890258
+ if (result2.latestVersion === "4.2.23") {
890259
+ writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.23" }, "CoStrict is up to date ({version})")) + `
890107
890260
  `);
890108
890261
  } else {
890109
- writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.21", to: String(result2.latestVersion) }, "Successfully updated from {from} to version {to}")) + `
890262
+ writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.23", to: String(result2.latestVersion) }, "Successfully updated from {from} to version {to}")) + `
890110
890263
  `);
890111
890264
  regenerateCompletionCache();
890112
890265
  }
@@ -890166,12 +890319,12 @@ async function update() {
890166
890319
  `);
890167
890320
  await gracefulShutdown(1);
890168
890321
  }
890169
- if (latestVersion === "4.2.21") {
890170
- writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.21" }, "CoStrict is up to date ({version})")) + `
890322
+ if (latestVersion === "4.2.23") {
890323
+ writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.23" }, "CoStrict is up to date ({version})")) + `
890171
890324
  `);
890172
890325
  await gracefulShutdown(0);
890173
890326
  }
890174
- writeToStdout(`${t("cli.update.newVersionAvailable", { latest: String(latestVersion), current: "4.2.21" }, "New version available: {latest} (current: {current})")}
890327
+ writeToStdout(`${t("cli.update.newVersionAvailable", { latest: String(latestVersion), current: "4.2.23" }, "New version available: {latest} (current: {current})")}
890175
890328
  `);
890176
890329
  writeToStdout(`${t("cli.update.installing", "Installing update...")}
890177
890330
  `);
@@ -890216,7 +890369,7 @@ async function update() {
890216
890369
  logForDebugging(`update: Installation status: ${result.status}`);
890217
890370
  switch (result.status) {
890218
890371
  case "success":
890219
- writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.21", to: String(latestVersion) }, "Successfully updated from {from} to version {to}")) + `
890372
+ writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.23", to: String(latestVersion) }, "Successfully updated from {from} to version {to}")) + `
890220
890373
  `);
890221
890374
  regenerateCompletionCache();
890222
890375
  break;
@@ -892420,7 +892573,7 @@ ${assistantAddendum}` : assistantAddendum;
892420
892573
  }
892421
892574
  }
892422
892575
  logForDiagnosticsNoPII("info", "started", {
892423
- version: "4.2.21",
892576
+ version: "4.2.23",
892424
892577
  is_native_binary: isInBundledMode()
892425
892578
  });
892426
892579
  registerCleanup(async () => {
@@ -892911,7 +893064,7 @@ Session: ${directConnectConfig.sessionId}`, "info");
892911
893064
  sshSession = await createSSHSession2({
892912
893065
  host: _pendingSSH.host,
892913
893066
  cwd: _pendingSSH.cwd,
892914
- localVersion: "4.2.21",
893067
+ localVersion: "4.2.23",
892915
893068
  permissionMode: _pendingSSH.permissionMode,
892916
893069
  dangerouslySkipPermissions: _pendingSSH.dangerouslySkipPermissions,
892917
893070
  extraCliArgs: _pendingSSH.extraCliArgs,
@@ -893380,7 +893533,7 @@ Usage: csc --remote "your task description"`, () => gracefulShutdown(1));
893380
893533
  pendingHookMessages
893381
893534
  }, renderAndRun);
893382
893535
  }
893383
- }).version("4.2.21 (CoStrict)", "-v, --version", cliDesc("cli.option.version", "Output the version number"));
893536
+ }).version("4.2.23 (CoStrict)", "-v, --version", cliDesc("cli.option.version", "Output the version number"));
893384
893537
  program2.addOption(new Option("-w, --worktree [name]", cliDesc("cli.option.worktree", "Create a new git worktree for this session (optionally specify a name)")).hideHelp());
893385
893538
  program2.addOption(new Option("--tmux", cliDesc("cli.option.tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.")).hideHelp());
893386
893539
  if (canUserConfigureAdvisor()) {
@@ -894123,10 +894276,10 @@ if (process.env.CLAUDE_CODE_REMOTE === "true") {
894123
894276
  async function main2() {
894124
894277
  const args = process.argv.slice(2);
894125
894278
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
894126
- const d7 = new Date("2026-07-31T12:00:32.834Z");
894279
+ const d7 = new Date("2026-08-04T07:11:51.439Z");
894127
894280
  const p2 = (n3) => String(n3).padStart(2, "0");
894128
894281
  const buildTime = `${d7.getFullYear()}/${p2(d7.getMonth() + 1)}/${p2(d7.getDate())} ${p2(d7.getHours())}:${p2(d7.getMinutes())}:${p2(d7.getSeconds())}`;
894129
- console.log(`${"4.2.21"} (commit: ${"a5b8e821b"}, built: ${buildTime})`);
894282
+ console.log(`${"4.2.23"} (commit: ${"c5c7891a2"}, built: ${buildTime})`);
894130
894283
  return;
894131
894284
  }
894132
894285
  let stopServeParentWatchdog;
@@ -894302,5 +894455,5 @@ async function main2() {
894302
894455
  }
894303
894456
  main2();
894304
894457
 
894305
- //# debugId=34E5D0B238E216CF64756E2164756E21
894458
+ //# debugId=572B24B78021B29264756E2164756E21
894306
894459
 
@@ -736,8 +736,8 @@ function getClientVersion() {
736
736
  if (cached)
737
737
  return cached;
738
738
  try {
739
- if ("4.2.21") {
740
- cached = "4.2.21";
739
+ if ("4.2.23") {
740
+ cached = "4.2.23";
741
741
  return cached;
742
742
  }
743
743
  } catch {}
@@ -61589,11 +61589,22 @@ var init_memoize2 = __esm(() => {
61589
61589
  // src/utils/windowsPaths.ts
61590
61590
  import { existsSync as existsSync3 } from "fs";
61591
61591
  import * as pathWin32 from "path/win32";
61592
+ function isNonGitBash(candidatePath) {
61593
+ const lower = candidatePath.toLowerCase();
61594
+ if (!lower.endsWith("\\bash.exe")) {
61595
+ return false;
61596
+ }
61597
+ return lower.includes("\\windows\\system32\\") || lower.includes("\\windows\\syswow64\\") || lower.includes("\\windowsapps\\") || lower.includes("\\cygwin\\") || lower.includes("\\cygwin64\\");
61598
+ }
61592
61599
  function findExecutableWithDeps(executable, deps) {
61593
61600
  try {
61594
61601
  const paths2 = deps.execCommand(`where.exe ${executable}`).split(/\r?\n/u).map((candidate) => candidate.trim()).filter(Boolean);
61595
61602
  const cwd2 = pathWin32.resolve(deps.cwdFn()).toLowerCase();
61596
61603
  for (const candidatePath of paths2) {
61604
+ if (executable === "bash" && isNonGitBash(candidatePath)) {
61605
+ logForDebugging(`Skipping non-Git bash launcher (incompatible with Windows paths): ${candidatePath}`);
61606
+ continue;
61607
+ }
61597
61608
  const candidateDirectory = pathWin32.dirname(pathWin32.resolve(candidatePath)).toLowerCase();
61598
61609
  const relativeDirectory = pathWin32.relative(cwd2, candidateDirectory);
61599
61610
  const isWithinCwd = relativeDirectory === "" || !relativeDirectory.startsWith("..") && !pathWin32.isAbsolute(relativeDirectory);
@@ -61623,10 +61634,6 @@ function findGitBashPathOrNullWithDeps(deps = DEFAULT_DEPS) {
61623
61634
  if (envOverride) {
61624
61635
  return deps.checkExists(envOverride) ? envOverride : null;
61625
61636
  }
61626
- const bashPath = findExecutableWithDeps("bash", deps);
61627
- if (bashPath && deps.checkExists(bashPath)) {
61628
- return bashPath;
61629
- }
61630
61637
  const gitPath = findExecutableWithDeps("git", deps);
61631
61638
  if (gitPath) {
61632
61639
  const candidates = [
@@ -61634,11 +61641,20 @@ function findGitBashPathOrNullWithDeps(deps = DEFAULT_DEPS) {
61634
61641
  pathWin32.join(gitPath, "..", "..", "usr", "bin", "bash.exe"),
61635
61642
  pathWin32.join(gitPath, "..", "bash.exe")
61636
61643
  ];
61637
- const derivedPath = candidates.find(deps.checkExists);
61644
+ const derivedPath = candidates.find((candidate) => {
61645
+ if (isNonGitBash(candidate)) {
61646
+ return false;
61647
+ }
61648
+ return deps.checkExists(candidate);
61649
+ });
61638
61650
  if (derivedPath) {
61639
61651
  return derivedPath;
61640
61652
  }
61641
61653
  }
61654
+ const bashPath = findExecutableWithDeps("bash", deps);
61655
+ if (bashPath && deps.checkExists(bashPath)) {
61656
+ return bashPath;
61657
+ }
61642
61658
  return findCommonGitBashPath(deps.checkExists, deps.userProfile);
61643
61659
  }
61644
61660
  var DEFAULT_DEPS, findGitBashPathOrNull, windowsPathToPosixPath, posixPathToWindowsPath;
@@ -138541,7 +138557,7 @@ var init_user = __esm(() => {
138541
138557
  deviceId,
138542
138558
  sessionId: getSessionId(),
138543
138559
  email: getEmail(),
138544
- appVersion: "4.2.21",
138560
+ appVersion: "4.2.23",
138545
138561
  platform: getHostPlatformForAnalytics(),
138546
138562
  organizationUuid,
138547
138563
  accountUuid,
@@ -138828,7 +138844,7 @@ var init_metadata = __esm(() => {
138828
138844
  "sed"
138829
138845
  ]);
138830
138846
  getVersionBase = memoize_default(() => {
138831
- const match = "4.2.21".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
138847
+ const match = "4.2.23".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
138832
138848
  return match ? match[0] : undefined;
138833
138849
  });
138834
138850
  buildEnvContext = memoize_default(async () => {
@@ -138868,9 +138884,9 @@ var init_metadata = __esm(() => {
138868
138884
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
138869
138885
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
138870
138886
  isClaudeAiAuth: isClaudeAISubscriber(),
138871
- version: "4.2.21",
138887
+ version: "4.2.23",
138872
138888
  versionBase: getVersionBase(),
138873
- buildTime: "2026-07-31T12:00:35.194Z",
138889
+ buildTime: "2026-08-04T07:11:53.958Z",
138874
138890
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
138875
138891
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
138876
138892
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -143208,5 +143224,5 @@ export {
143208
143224
  isParentHeartbeatValid
143209
143225
  };
143210
143226
 
143211
- //# debugId=8FD1A5954CDBB6BF64756E2164756E21
143227
+ //# debugId=22A05C2AEDAD152664756E2164756E21
143212
143228
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@costrict/csc",
3
- "version": "4.2.21",
3
+ "version": "4.2.23",
4
4
  "description": "costrict",
5
5
  "type": "module",
6
6
  "author": "costrict",