@costrict/csc 4.2.23 → 4.2.25-beta

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.23") {
66717
- cached = "4.2.23";
66716
+ if ("4.2.25-beta") {
66717
+ cached = "4.2.25-beta";
66718
66718
  return cached;
66719
66719
  }
66720
66720
  } catch {}
@@ -220503,7 +220503,7 @@ async function fetchCoStrictModels(baseUrl, accessToken) {
220503
220503
  headers: {
220504
220504
  Authorization: `Bearer ${accessToken}`,
220505
220505
  Accept: "application/json",
220506
- "User-Agent": `csc/${"4.2.23"}`
220506
+ "User-Agent": `csc/${"4.2.25-beta"}`
220507
220507
  },
220508
220508
  signal: controller.signal
220509
220509
  });
@@ -222540,7 +222540,7 @@ var init_auth7 = __esm(() => {
222540
222540
 
222541
222541
  // src/utils/userAgent.ts
222542
222542
  function getClaudeCodeUserAgent() {
222543
- return `costrict/${"4.2.23"}`;
222543
+ return `costrict/${"4.2.25-beta"}`;
222544
222544
  }
222545
222545
 
222546
222546
  // src/utils/workloadContext.ts
@@ -222562,7 +222562,7 @@ function getUserAgent() {
222562
222562
  const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
222563
222563
  const workload = getWorkload();
222564
222564
  const workloadSuffix = workload ? `, workload/${workload}` : "";
222565
- return `csc/${"4.2.23"}`;
222565
+ return `csc/${"4.2.25-beta"}`;
222566
222566
  }
222567
222567
  function getMCPUserAgent() {
222568
222568
  const parts = [];
@@ -222576,7 +222576,7 @@ function getMCPUserAgent() {
222576
222576
  parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
222577
222577
  }
222578
222578
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
222579
- return `csc/${"4.2.23"}${suffix}`;
222579
+ return `csc/${"4.2.25-beta"}${suffix}`;
222580
222580
  }
222581
222581
  function getWebFetchUserAgent() {
222582
222582
  return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
@@ -222696,7 +222696,7 @@ var init_user = __esm(() => {
222696
222696
  deviceId,
222697
222697
  sessionId: getSessionId(),
222698
222698
  email: getEmail(),
222699
- appVersion: "4.2.23",
222699
+ appVersion: "4.2.25-beta",
222700
222700
  platform: getHostPlatformForAnalytics(),
222701
222701
  organizationUuid,
222702
222702
  accountUuid,
@@ -233744,7 +233744,7 @@ var init_metadata = __esm(() => {
233744
233744
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
233745
233745
  WHITESPACE_REGEX = /\s+/;
233746
233746
  getVersionBase = memoize_default(() => {
233747
- const match = "4.2.23".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
233747
+ const match = "4.2.25-beta".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
233748
233748
  return match ? match[0] : undefined;
233749
233749
  });
233750
233750
  buildEnvContext = memoize_default(async () => {
@@ -233784,9 +233784,9 @@ var init_metadata = __esm(() => {
233784
233784
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
233785
233785
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
233786
233786
  isClaudeAiAuth: isClaudeAISubscriber(),
233787
- version: "4.2.23",
233787
+ version: "4.2.25-beta",
233788
233788
  versionBase: getVersionBase(),
233789
- buildTime: "2026-08-04T07:11:51.439Z",
233789
+ buildTime: "2026-08-05T02:51:18.330Z",
233790
233790
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
233791
233791
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
233792
233792
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -234457,7 +234457,7 @@ function initialize1PEventLogging() {
234457
234457
  const platform3 = getPlatform();
234458
234458
  const attributes = {
234459
234459
  [import_semantic_conventions2.ATTR_SERVICE_NAME]: "claude-code",
234460
- [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "4.2.23"
234460
+ [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "4.2.25-beta"
234461
234461
  };
234462
234462
  if (platform3 === "wsl") {
234463
234463
  const wslVersion = getWslVersion();
@@ -234484,7 +234484,7 @@ function initialize1PEventLogging() {
234484
234484
  })
234485
234485
  ]
234486
234486
  });
234487
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.claude_code.events", "4.2.23");
234487
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.claude_code.events", "4.2.25-beta");
234488
234488
  }
234489
234489
  async function reinitialize1PEventLoggingIfConfigChanged() {
234490
234490
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -434502,7 +434502,7 @@ function getTelemetryAttributes() {
434502
434502
  attributes["session.id"] = sessionId;
434503
434503
  }
434504
434504
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
434505
- attributes["app.version"] = "4.2.23";
434505
+ attributes["app.version"] = "4.2.25-beta";
434506
434506
  }
434507
434507
  const oauthAccount = getOauthAccountInfo();
434508
434508
  if (oauthAccount) {
@@ -468022,7 +468022,7 @@ function initLangfuse() {
468022
468022
  flushInterval: parseInt(process.env.LANGFUSE_FLUSH_INTERVAL ?? "10", 10),
468023
468023
  mask: maskFn,
468024
468024
  environment: process.env.LANGFUSE_TRACING_ENVIRONMENT ?? "development",
468025
- release: "4.2.23",
468025
+ release: "4.2.25-beta",
468026
468026
  exportMode: process.env.LANGFUSE_EXPORT_MODE ?? "batched",
468027
468027
  timeout: parseInt(process.env.LANGFUSE_TIMEOUT ?? "5", 10)
468028
468028
  });
@@ -499922,7 +499922,7 @@ function initSentry() {
499922
499922
  }
499923
499923
  init3({
499924
499924
  dsn,
499925
- release: typeof MACRO !== "undefined" ? "4.2.23" : undefined,
499925
+ release: typeof MACRO !== "undefined" ? "4.2.25-beta" : undefined,
499926
499926
  environment: typeof BUILD_ENV !== "undefined" ? BUILD_ENV : "production",
499927
499927
  maxBreadcrumbs: 20,
499928
499928
  sampleRate: 1,
@@ -527819,7 +527819,7 @@ async function initializeBetaTracing(resource) {
527819
527819
  });
527820
527820
  logs.setGlobalLoggerProvider(loggerProvider);
527821
527821
  setLoggerProvider(loggerProvider);
527822
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.23");
527822
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.25-beta");
527823
527823
  setEventLogger(eventLogger);
527824
527824
  process.on("beforeExit", async () => {
527825
527825
  await loggerProvider?.forceFlush();
@@ -527859,7 +527859,7 @@ async function initializeTelemetry() {
527859
527859
  const platform5 = getPlatform();
527860
527860
  const baseAttributes = {
527861
527861
  [import_semantic_conventions29.ATTR_SERVICE_NAME]: "claude-code",
527862
- [import_semantic_conventions29.ATTR_SERVICE_VERSION]: "4.2.23"
527862
+ [import_semantic_conventions29.ATTR_SERVICE_VERSION]: "4.2.25-beta"
527863
527863
  };
527864
527864
  if (platform5 === "wsl") {
527865
527865
  const wslVersion = getWslVersion();
@@ -527904,7 +527904,7 @@ async function initializeTelemetry() {
527904
527904
  } catch {}
527905
527905
  };
527906
527906
  registerCleanup(shutdownTelemetry2);
527907
- return meterProvider2.getMeter("com.anthropic.claude_code", "4.2.23");
527907
+ return meterProvider2.getMeter("com.anthropic.claude_code", "4.2.25-beta");
527908
527908
  }
527909
527909
  const meterProvider = new import_sdk_metrics2.MeterProvider({
527910
527910
  resource,
@@ -527924,7 +527924,7 @@ async function initializeTelemetry() {
527924
527924
  });
527925
527925
  logs.setGlobalLoggerProvider(loggerProvider);
527926
527926
  setLoggerProvider(loggerProvider);
527927
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.23");
527927
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.25-beta");
527928
527928
  setEventLogger(eventLogger);
527929
527929
  logForDebugging("[3P telemetry] Event logger set successfully");
527930
527930
  process.on("beforeExit", async () => {
@@ -527986,7 +527986,7 @@ Current timeout: ${timeoutMs}ms
527986
527986
  }
527987
527987
  };
527988
527988
  registerCleanup(shutdownTelemetry);
527989
- return meterProvider.getMeter("com.anthropic.claude_code", "4.2.23");
527989
+ return meterProvider.getMeter("com.anthropic.claude_code", "4.2.25-beta");
527990
527990
  }
527991
527991
  async function flushTelemetry() {
527992
527992
  const meterProvider = getMeterProvider();
@@ -529045,7 +529045,7 @@ async function installGlobalPackage(specificVersion) {
529045
529045
  logError3(new AutoUpdaterError("Another process is currently installing an update"));
529046
529046
  logEvent("tengu_auto_updater_lock_contention", {
529047
529047
  pid: process.pid,
529048
- currentVersion: "4.2.23"
529048
+ currentVersion: "4.2.25-beta"
529049
529049
  });
529050
529050
  return { status: "in_progress" };
529051
529051
  }
@@ -529054,7 +529054,7 @@ async function installGlobalPackage(specificVersion) {
529054
529054
  if (!env4.isRunningWithBun() && env4.isNpmFromWindowsPath()) {
529055
529055
  logError3(new Error("Windows NPM detected in WSL environment"));
529056
529056
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
529057
- currentVersion: "4.2.23"
529057
+ currentVersion: "4.2.25-beta"
529058
529058
  });
529059
529059
  return {
529060
529060
  status: "install_failed",
@@ -529600,7 +529600,7 @@ function detectLinuxGlobPatternWarnings() {
529600
529600
  }
529601
529601
  async function getDoctorDiagnostic() {
529602
529602
  const installationType = await getCurrentInstallationType();
529603
- const version9 = typeof MACRO !== "undefined" ? "4.2.23" : "unknown";
529603
+ const version9 = typeof MACRO !== "undefined" ? "4.2.25-beta" : "unknown";
529604
529604
  const installationPath = await getInstallationPath();
529605
529605
  const invokedBinary = getInvokedBinary();
529606
529606
  const multipleInstallations = await detectMultipleInstallations();
@@ -567787,7 +567787,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
567787
567787
  const client10 = new Client3({
567788
567788
  name: "claude-code",
567789
567789
  title: "CoStrict",
567790
- version: "4.2.23",
567790
+ version: "4.2.25-beta",
567791
567791
  description: "CoStrict agentic coding tool",
567792
567792
  websiteUrl: PRODUCT_URL
567793
567793
  }, {
@@ -568158,7 +568158,7 @@ var init_client18 = __esm(() => {
568158
568158
  const client10 = new Client3({
568159
568159
  name: "claude-code",
568160
568160
  title: "CoStrict",
568161
- version: "4.2.23",
568161
+ version: "4.2.25-beta",
568162
568162
  description: "CoStrict agentic coding tool",
568163
568163
  websiteUrl: PRODUCT_URL
568164
568164
  }, {
@@ -569548,7 +569548,7 @@ function getInstallationEnv() {
569548
569548
  return;
569549
569549
  }
569550
569550
  function getClaudeCodeVersion() {
569551
- return "4.2.23";
569551
+ return "4.2.25-beta";
569552
569552
  }
569553
569553
  async function getInstalledVSCodeExtensionVersion(command4) {
569554
569554
  const { stdout } = await execFileNoThrow2(command4, ["--list-extensions", "--show-versions"], {
@@ -570912,8 +570912,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
570912
570912
  const maxVersion = await getMaxVersion();
570913
570913
  if (maxVersion && gt(version10, maxVersion)) {
570914
570914
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version10} to ${maxVersion}`);
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`);
570915
+ if (gte2("4.2.25-beta", maxVersion)) {
570916
+ logForDebugging(`Native installer: current version ${"4.2.25-beta"} is already at or above maxVersion ${maxVersion}, skipping update`);
570917
570917
  logEvent("tengu_native_update_skipped_max_version", {
570918
570918
  latency_ms: Date.now() - startTime2,
570919
570919
  max_version: maxVersion,
@@ -570924,7 +570924,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
570924
570924
  version10 = maxVersion;
570925
570925
  }
570926
570926
  }
570927
- if (!forceReinstall && version10 === "4.2.23" && await versionIsAvailable(version10) && await isPossibleClaudeBinary(executablePath)) {
570927
+ if (!forceReinstall && version10 === "4.2.25-beta" && await versionIsAvailable(version10) && await isPossibleClaudeBinary(executablePath)) {
570928
570928
  logForDebugging(`Found ${version10} at ${executablePath}, skipping install`);
570929
570929
  logEvent("tengu_native_update_complete", {
570930
570930
  latency_ms: Date.now() - startTime2,
@@ -708992,7 +708992,7 @@ function Feedback({
708992
708992
  platform: env4.platform,
708993
708993
  gitRepo: envInfo.isGit,
708994
708994
  terminal: env4.terminal,
708995
- version: "4.2.23",
708995
+ version: "4.2.25-beta",
708996
708996
  transcript: normalizeMessagesForAPI(messages),
708997
708997
  errors: sanitizedErrors,
708998
708998
  lastApiRequest: getLastAPIRequest(),
@@ -709175,7 +709175,7 @@ function Feedback({
709175
709175
  ", ",
709176
709176
  env4.terminal,
709177
709177
  ", v",
709178
- "4.2.23"
709178
+ "4.2.25-beta"
709179
709179
  ]
709180
709180
  })
709181
709181
  ]
@@ -709272,7 +709272,7 @@ ${sanitizedDescription}
709272
709272
  ` + `**Environment Info**
709273
709273
  ` + `- Platform: ${env4.platform}
709274
709274
  ` + `- Terminal: ${env4.terminal}
709275
- ` + `- Version: ${"4.2.23"}
709275
+ ` + `- Version: ${"4.2.25-beta"}
709276
709276
  ` + `- Feedback ID: ${feedbackId}
709277
709277
  ` + `
709278
709278
  **Errors**
@@ -711511,7 +711511,7 @@ function buildPrimarySection() {
711511
711511
  children: t("settings.status.renameHint")
711512
711512
  });
711513
711513
  return [
711514
- { label: t("settings.status.version"), value: "4.2.23" },
711514
+ { label: t("settings.status.version"), value: "4.2.25-beta" },
711515
711515
  { label: t("settings.status.sessionName"), value: nameValue },
711516
711516
  { label: t("settings.status.sessionId"), value: sessionId },
711517
711517
  { label: t("settings.status.cwd"), value: getCwd() },
@@ -714369,7 +714369,7 @@ function Config({
714369
714369
  }
714370
714370
  })
714371
714371
  }) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_runtime191.jsx(ChannelDowngradeDialog, {
714372
- currentVersion: "4.2.23",
714372
+ currentVersion: "4.2.25-beta",
714373
714373
  onChoice: (choice) => {
714374
714374
  setShowSubmenu(null);
714375
714375
  setTabsHidden(false);
@@ -714381,7 +714381,7 @@ function Config({
714381
714381
  autoUpdatesChannel: "stable"
714382
714382
  };
714383
714383
  if (choice === "stay") {
714384
- newSettings.minimumVersion = "4.2.23";
714384
+ newSettings.minimumVersion = "4.2.25-beta";
714385
714385
  }
714386
714386
  updateSettingsForSource("userSettings", newSettings);
714387
714387
  setSettingsData((prev) => ({
@@ -719850,7 +719850,7 @@ function HelpV2({ onClose, commands: commands11 }) {
719850
719850
  color: "professionalBlue",
719851
719851
  children: [
719852
719852
  /* @__PURE__ */ jsx_runtime218.jsx(Tabs, {
719853
- title: process.env.USER_TYPE === "sf" ? "/help" : `CoStrict v${"4.2.23"}`,
719853
+ title: process.env.USER_TYPE === "sf" ? "/help" : `CoStrict v${"4.2.25-beta"}`,
719854
719854
  color: "professionalBlue",
719855
719855
  defaultTab: "general",
719856
719856
  children: tabs
@@ -742851,7 +742851,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
742851
742851
  return [];
742852
742852
  }
742853
742853
  }
742854
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.23") {
742854
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.25-beta") {
742855
742855
  if (process.env.USER_TYPE === "sf") {
742856
742856
  const changelog = "";
742857
742857
  if (changelog) {
@@ -742878,7 +742878,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.23")
742878
742878
  releaseNotes
742879
742879
  };
742880
742880
  }
742881
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "4.2.23") {
742881
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "4.2.25-beta") {
742882
742882
  if (process.env.USER_TYPE === "sf") {
742883
742883
  const changelog = "";
742884
742884
  if (changelog) {
@@ -745391,7 +745391,7 @@ function isNotLoggedIn() {
745391
745391
  return true;
745392
745392
  }
745393
745393
  function getLogoDisplayData() {
745394
- const version10 = process.env.DEMO_VERSION ?? "4.2.23";
745394
+ const version10 = process.env.DEMO_VERSION ?? "4.2.25-beta";
745395
745395
  const serverUrl = getDirectConnectServerUrl();
745396
745396
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
745397
745397
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -745969,7 +745969,7 @@ var init_MatrixMessageLine = __esm(() => {
745969
745969
  // src/components/matrix-tactical/MatrixWelcome.tsx
745970
745970
  import { basename as basename47 } from "path";
745971
745971
  function MatrixWelcome({
745972
- version: version10 = "4.2.23",
745972
+ version: version10 = "4.2.25-beta",
745973
745973
  projectName,
745974
745974
  cwd: cwd2,
745975
745975
  modelDisplayName,
@@ -746604,13 +746604,13 @@ function LogoV2() {
746604
746604
  const { hasReleaseNotes } = checkForReleaseNotesSync(config13.lastReleaseNotesSeen);
746605
746605
  import_react167.useEffect(() => {
746606
746606
  const currentConfig = getGlobalConfig();
746607
- if (currentConfig.lastReleaseNotesSeen === "4.2.23") {
746607
+ if (currentConfig.lastReleaseNotesSeen === "4.2.25-beta") {
746608
746608
  return;
746609
746609
  }
746610
746610
  saveGlobalConfig((current2) => {
746611
- if (current2.lastReleaseNotesSeen === "4.2.23")
746611
+ if (current2.lastReleaseNotesSeen === "4.2.25-beta")
746612
746612
  return current2;
746613
- return { ...current2, lastReleaseNotesSeen: "4.2.23" };
746613
+ return { ...current2, lastReleaseNotesSeen: "4.2.25-beta" };
746614
746614
  });
746615
746615
  if (showOnboarding) {
746616
746616
  incrementProjectOnboardingSeenCount();
@@ -769140,7 +769140,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
769140
769140
  smapsRollup,
769141
769141
  platform: process.platform,
769142
769142
  nodeVersion: process.version,
769143
- ccVersion: "4.2.23"
769143
+ ccVersion: "4.2.25-beta"
769144
769144
  };
769145
769145
  }
769146
769146
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -769256,7 +769256,7 @@ var init_mock_limits = __esm(() => {
769256
769256
  var call55 = async () => {
769257
769257
  return {
769258
769258
  type: "text",
769259
- value: `${"4.2.23"} (built ${"2026-08-04T07:11:51.439Z"})`
769259
+ value: `${"4.2.25-beta"} (built ${"2026-08-05T02:51:18.330Z"})`
769260
769260
  };
769261
769261
  }, version10, version_default;
769262
769262
  var init_version2 = __esm(() => {
@@ -776503,6 +776503,34 @@ function agentsDir() {
776503
776503
  function commandsDir() {
776504
776504
  return path54.join(getClaudeConfigHomeDir(), "commands");
776505
776505
  }
776506
+ function assertSafeSlug(slug) {
776507
+ if (!slug || typeof slug !== "string") {
776508
+ throw new Error("Invalid favorite slug: empty or non-string");
776509
+ }
776510
+ if (slug.includes("/") || slug.includes("\\") || slug.includes("\x00") || slug === "." || slug === ".." || slug.startsWith(".") || slug.startsWith(" ") || slug.endsWith(" ") || !SAFE_SLUG_RE.test(slug)) {
776511
+ throw new Error(`Invalid favorite slug: ${slug}`);
776512
+ }
776513
+ }
776514
+ function resolveFavoritePath(baseDir, slug) {
776515
+ assertSafeSlug(slug);
776516
+ const resolvedBase = path54.resolve(baseDir);
776517
+ const resolvedTarget = path54.resolve(path54.join(resolvedBase, slug));
776518
+ const rel = path54.relative(resolvedBase, resolvedTarget);
776519
+ if (rel === "" || rel.startsWith("..") || path54.isAbsolute(rel)) {
776520
+ throw new Error(`Path traversal detected for favorite slug: ${slug}`);
776521
+ }
776522
+ return resolvedTarget;
776523
+ }
776524
+ function resolveFavoriteFilePath(baseDir, slug, suffix) {
776525
+ assertSafeSlug(slug);
776526
+ const resolvedBase = path54.resolve(baseDir);
776527
+ const resolvedTarget = path54.resolve(path54.join(resolvedBase, `${slug}${suffix}`));
776528
+ const rel = path54.relative(resolvedBase, resolvedTarget);
776529
+ if (rel.startsWith("..") || path54.isAbsolute(rel)) {
776530
+ throw new Error(`Path traversal detected for favorite slug: ${slug}`);
776531
+ }
776532
+ return resolvedTarget;
776533
+ }
776506
776534
  async function readState() {
776507
776535
  try {
776508
776536
  const text2 = await readFile76(favoriteStatePath(), "utf-8");
@@ -776597,11 +776625,18 @@ function parseFavoriteListItem(data) {
776597
776625
  const localType = STORE_TYPE_MAP[storeType];
776598
776626
  if (!localType)
776599
776627
  return;
776628
+ const slug = String(data.slug ?? data.id);
776629
+ try {
776630
+ assertSafeSlug(slug);
776631
+ } catch {
776632
+ logForDebugging(`[favorite] skipping candidate with unsafe slug: ${slug}`);
776633
+ return;
776634
+ }
776600
776635
  const favorited = typeof data.favorited === "boolean" ? data.favorited : data.favorited === "true" || data.favorited === 1;
776601
776636
  logForDebugging(`[favorite] name=${data.name} score=${data.score} experienceScore=${data.experienceScore} favoriteCount=${data.favoriteCount} createdBy=${data.createdBy} fields=[${Object.keys(data).join(",")}]`);
776602
776637
  return {
776603
776638
  id: String(data.id),
776604
- slug: String(data.slug ?? data.id),
776639
+ slug,
776605
776640
  name: String(data.name ?? data.slug ?? data.id),
776606
776641
  description: String(data.description ?? ""),
776607
776642
  itemType: localType,
@@ -776631,9 +776666,11 @@ async function getRemoteItem(id) {
776631
776666
  if (!localType) {
776632
776667
  throw new Error(`Unsupported item type: ${storeType} (${String(data.slug ?? id)})`);
776633
776668
  }
776669
+ const slug = String(data.slug);
776670
+ assertSafeSlug(slug);
776634
776671
  return {
776635
776672
  id: String(data.id),
776636
- slug: String(data.slug),
776673
+ slug,
776637
776674
  name: String(data.name),
776638
776675
  description: String(data.description ?? ""),
776639
776676
  itemType: localType,
@@ -776701,7 +776738,7 @@ function deriveStatus(state3, activeSkillSlugs, activeAgentNames, activeCommandN
776701
776738
  }
776702
776739
  async function persistInstalledItem(item) {
776703
776740
  const typeRoot = favoriteTypeRoot(item.itemType);
776704
- const dir = path54.join(typeRoot, item.slug);
776741
+ const dir = resolveFavoritePath(typeRoot, item.slug);
776705
776742
  const itemJson = JSON.stringify({
776706
776743
  id: item.id,
776707
776744
  slug: item.slug,
@@ -776879,7 +776916,7 @@ async function copyDir2(src, dest) {
776879
776916
  async function addItemToConfig(item, localPath) {
776880
776917
  switch (item.itemType) {
776881
776918
  case "skill": {
776882
- const destDir = path54.join(skillsDir(), item.slug);
776919
+ const destDir = resolveFavoritePath(skillsDir(), item.slug);
776883
776920
  const fingerprint = await readBundleFingerprint(localPath);
776884
776921
  await replaceDirectoryAtomically(destDir, (stagingDir) => copyDir2(localPath, stagingDir), fingerprint === null ? {} : { fingerprint });
776885
776922
  clearCommandsCache();
@@ -776902,7 +776939,7 @@ async function addItemToConfig(item, localPath) {
776902
776939
  }));
776903
776940
  const agentDestDir = agentsDir();
776904
776941
  await mkdir62(agentDestDir, { recursive: true });
776905
- await copyFile10(mdPath, path54.join(agentDestDir, `${item.slug}.md`));
776942
+ await copyFile10(mdPath, resolveFavoriteFilePath(agentDestDir, item.slug, ".md"));
776906
776943
  clearAgentDefinitionsCache();
776907
776944
  break;
776908
776945
  }
@@ -776922,7 +776959,7 @@ async function addItemToConfig(item, localPath) {
776922
776959
  }));
776923
776960
  const commandDestDir = commandsDir();
776924
776961
  await mkdir62(commandDestDir, { recursive: true });
776925
- await copyFile10(mdPath, path54.join(commandDestDir, `${item.slug}.md`));
776962
+ await copyFile10(mdPath, resolveFavoriteFilePath(commandDestDir, item.slug, ".md"));
776926
776963
  clearCommandsCache();
776927
776964
  skillChangeDetector.notify();
776928
776965
  break;
@@ -776951,7 +776988,7 @@ Supported formats: opencode native, VS Code / Claude Desktop style, or simplifie
776951
776988
  async function removeItemFromConfig(itemType, slug, _localPath) {
776952
776989
  switch (itemType) {
776953
776990
  case "skill": {
776954
- const destDir = path54.join(skillsDir(), slug);
776991
+ const destDir = resolveFavoritePath(skillsDir(), slug);
776955
776992
  await withTargetDirLock(destDir, () => rm16(destDir, { recursive: true, force: true }));
776956
776993
  clearCommandsCache();
776957
776994
  skillChangeDetector.notify();
@@ -776963,7 +777000,9 @@ async function removeItemFromConfig(itemType, slug, _localPath) {
776963
777000
  delete agents2[slug];
776964
777001
  return { ...cfg, agents: agents2 };
776965
777002
  });
776966
- await rm16(path54.join(agentsDir(), `${slug}.md`), { force: true });
777003
+ await rm16(resolveFavoriteFilePath(agentsDir(), slug, ".md"), {
777004
+ force: true
777005
+ });
776967
777006
  clearAgentDefinitionsCache();
776968
777007
  break;
776969
777008
  }
@@ -776973,7 +777012,9 @@ async function removeItemFromConfig(itemType, slug, _localPath) {
776973
777012
  delete commands11[slug];
776974
777013
  return { ...cfg, commands: commands11 };
776975
777014
  });
776976
- await rm16(path54.join(commandsDir(), `${slug}.md`), { force: true });
777015
+ await rm16(resolveFavoriteFilePath(commandsDir(), slug, ".md"), {
777016
+ force: true
777017
+ });
776977
777018
  clearCommandsCache();
776978
777019
  skillChangeDetector.notify();
776979
777020
  break;
@@ -777235,7 +777276,8 @@ function hasUpdate(item, localVersion) {
777235
777276
  async function updateFavoriteItem(slugOrId) {
777236
777277
  const installed = await ensureInstalled(slugOrId);
777237
777278
  const remote = await getRemoteItem(installed.id);
777238
- const backupDir = path54.join(path54.dirname(installed.localPath), ".backup", installed.slug, new Date().toISOString().replace(/[:.]/gu, "-"));
777279
+ const backupBase = path54.join(path54.dirname(installed.localPath), ".backup");
777280
+ const backupDir = path54.join(resolveFavoritePath(backupBase, installed.slug), new Date().toISOString().replace(/[:.]/gu, "-"));
777239
777281
  await copyDir2(installed.localPath, backupDir);
777240
777282
  await persistInstalledItem(remote);
777241
777283
  if (installed.lifecycle === "active") {
@@ -777319,7 +777361,7 @@ async function batchUpdateFavoriteItems(slugs) {
777319
777361
  }
777320
777362
  return { updated, errors: errors14 };
777321
777363
  }
777322
- var FAVORITE_PAGE_SIZE = 20, FAVORITE_MAX_PAGES = 20, FAVORITE_LIST_CACHE_TTL_MS = 30000, _listFavoriteItemsCache = null, STORE_TYPE_MAP, LOCAL_TO_STORE_TYPE, FETCH_TIMEOUT_MS7 = 15000, RemoteListHttpError, _untypedListUnsupported = false, SUPPORTED_MCP_TYPES;
777364
+ var FAVORITE_PAGE_SIZE = 20, FAVORITE_MAX_PAGES = 20, FAVORITE_LIST_CACHE_TTL_MS = 30000, _listFavoriteItemsCache = null, STORE_TYPE_MAP, LOCAL_TO_STORE_TYPE, SAFE_SLUG_RE, FETCH_TIMEOUT_MS7 = 15000, RemoteListHttpError, _untypedListUnsupported = false, SUPPORTED_MCP_TYPES;
777323
777365
  var init_favorite = __esm(() => {
777324
777366
  init_fetch2();
777325
777367
  init_auth();
@@ -777345,6 +777387,7 @@ var init_favorite = __esm(() => {
777345
777387
  command: "command",
777346
777388
  mcp: "mcp"
777347
777389
  };
777390
+ SAFE_SLUG_RE = /^[a-zA-Z0-9._-]+$/u;
777348
777391
  RemoteListHttpError = class RemoteListHttpError extends Error {
777349
777392
  status;
777350
777393
  constructor(status2, message2) {
@@ -787180,7 +787223,7 @@ function generateHtmlReport(data, insights) {
787180
787223
  </html>`;
787181
787224
  }
787182
787225
  function buildExportData(data, insights, facets, remoteStats) {
787183
- const version11 = typeof MACRO !== "undefined" ? "4.2.23" : "unknown";
787226
+ const version11 = typeof MACRO !== "undefined" ? "4.2.25-beta" : "unknown";
787184
787227
  const remote_hosts_collected = remoteStats?.hosts.filter((h8) => h8.sessionCount > 0).map((h8) => h8.name);
787185
787228
  const facets_summary = {
787186
787229
  total: facets.size,
@@ -791630,7 +791673,7 @@ var init_sessionStorage = __esm(() => {
791630
791673
  init_settings2();
791631
791674
  init_slowOperations();
791632
791675
  init_uuid();
791633
- VERSION11 = typeof MACRO !== "undefined" ? "4.2.23" : "unknown";
791676
+ VERSION11 = typeof MACRO !== "undefined" ? "4.2.25-beta" : "unknown";
791634
791677
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
791635
791678
  SKIP_FIRST_PROMPT_PATTERN2 = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
791636
791679
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -792971,7 +793014,7 @@ var init_filesystem = __esm(() => {
792971
793014
  });
792972
793015
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
792973
793016
  const nonce = randomBytes24(16).toString("hex");
792974
- return join204(getCostrictTempDir(), "bundled-skills", "4.2.23", nonce);
793017
+ return join204(getCostrictTempDir(), "bundled-skills", "4.2.25-beta", nonce);
792975
793018
  });
792976
793019
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
792977
793020
  });
@@ -799241,7 +799284,7 @@ function computeFingerprint(messageText, version11) {
799241
799284
  }
799242
799285
  function computeFingerprintFromMessages(messages) {
799243
799286
  const firstMessageText = extractFirstMessageText(messages);
799244
- return computeFingerprint(firstMessageText, "4.2.23");
799287
+ return computeFingerprint(firstMessageText, "4.2.25-beta");
799245
799288
  }
799246
799289
  var FINGERPRINT_SALT = "59cf53e54c78";
799247
799290
  var init_fingerprint = () => {};
@@ -799651,7 +799694,7 @@ function getAnthropicEnvMetadata() {
799651
799694
  function getBuildAgeMinutes() {
799652
799695
  if (false)
799653
799696
  ;
799654
- const buildTime = new Date("2026-08-04T07:11:51.439Z").getTime();
799697
+ const buildTime = new Date("2026-08-05T02:51:18.330Z").getTime();
799655
799698
  if (isNaN(buildTime))
799656
799699
  return;
799657
799700
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -805175,7 +805218,7 @@ async function sideQuery(opts) {
805175
805218
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
805176
805219
  }
805177
805220
  const messageText = extractFirstUserMessageText(messages);
805178
- const fingerprint = computeFingerprint(messageText, "4.2.23");
805221
+ const fingerprint = computeFingerprint(messageText, "4.2.25-beta");
805179
805222
  const attributionHeader = getAttributionHeader(fingerprint);
805180
805223
  const systemBlocks = [
805181
805224
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -808571,7 +808614,7 @@ function buildSystemInitMessage(inputs) {
808571
808614
  slash_commands: inputs.commands.filter((c10) => c10.userInvocable !== false).map((c10) => c10.name),
808572
808615
  apiKeySource: getAnthropicApiKeyWithSource().source,
808573
808616
  betas: getSdkBetas(),
808574
- claude_code_version: "4.2.23",
808617
+ claude_code_version: "4.2.25-beta",
808575
808618
  output_style: outputStyle2,
808576
808619
  agents: inputs.agents.map((agent) => agent.agentType),
808577
808620
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -812115,7 +812158,7 @@ function appendToLog(path57, message2) {
812115
812158
  cwd: getFsImplementation().cwd(),
812116
812159
  userType: process.env.USER_TYPE,
812117
812160
  sessionId: getSessionId(),
812118
- version: "4.2.23"
812161
+ version: "4.2.25-beta"
812119
812162
  };
812120
812163
  getLogWriter(path57).write(messageWithTimestamp);
812121
812164
  }
@@ -833171,7 +833214,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
833171
833214
  project_dir: getOriginalCwd(),
833172
833215
  added_dirs: addedDirs
833173
833216
  },
833174
- version: "4.2.23",
833217
+ version: "4.2.25-beta",
833175
833218
  output_style: {
833176
833219
  name: outputStyleName
833177
833220
  },
@@ -851796,7 +851839,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
851796
851839
  } catch {}
851797
851840
  const data = {
851798
851841
  trigger,
851799
- version: "4.2.23",
851842
+ version: "4.2.25-beta",
851800
851843
  platform: process.platform,
851801
851844
  transcript,
851802
851845
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -853051,7 +853094,7 @@ function getReleaseType(current2, latest) {
853051
853094
  return "patch";
853052
853095
  }
853053
853096
  async function checkNewAutoUpdate(callbacks) {
853054
- const currentVersion = "4.2.23";
853097
+ const currentVersion = "4.2.25-beta";
853055
853098
  logForDebugging(`[newAutoUpdater] checking, current: ${currentVersion}`);
853056
853099
  if (isNewAutoUpdaterDisabled()) {
853057
853100
  return { action: "skip", currentVersion, latestVersion: null };
@@ -864274,7 +864317,7 @@ function WelcomeV2() {
864274
864317
  dimColor: true,
864275
864318
  children: [
864276
864319
  "v",
864277
- "4.2.23",
864320
+ "4.2.25-beta",
864278
864321
  " "
864279
864322
  ]
864280
864323
  })
@@ -864340,7 +864383,7 @@ function WelcomeV2() {
864340
864383
  dimColor: true,
864341
864384
  children: [
864342
864385
  "v",
864343
- "4.2.23",
864386
+ "4.2.25-beta",
864344
864387
  " "
864345
864388
  ]
864346
864389
  })
@@ -864442,7 +864485,7 @@ function AppleTerminalWelcomeV2({ theme: theme2, welcomeMessage }) {
864442
864485
  dimColor: true,
864443
864486
  children: [
864444
864487
  "v",
864445
- "4.2.23",
864488
+ "4.2.25-beta",
864446
864489
  " "
864447
864490
  ]
864448
864491
  })
@@ -864508,7 +864551,7 @@ function AppleTerminalWelcomeV2({ theme: theme2, welcomeMessage }) {
864508
864551
  dimColor: true,
864509
864552
  children: [
864510
864553
  "v",
864511
- "4.2.23",
864554
+ "4.2.25-beta",
864512
864555
  " "
864513
864556
  ]
864514
864557
  })
@@ -865448,7 +865491,7 @@ function completeOnboarding() {
865448
865491
  saveGlobalConfig((current2) => ({
865449
865492
  ...current2,
865450
865493
  hasCompletedOnboarding: true,
865451
- lastOnboardingVersion: "4.2.23"
865494
+ lastOnboardingVersion: "4.2.25-beta"
865452
865495
  }));
865453
865496
  }
865454
865497
  function showDialog(root9, renderer) {
@@ -880530,7 +880573,7 @@ async function startMCPServer(cwd3, debug5, verbose) {
880530
880573
  setCwd(cwd3);
880531
880574
  const server2 = new Server({
880532
880575
  name: "claude/tengu",
880533
- version: "4.2.23"
880576
+ version: "4.2.25-beta"
880534
880577
  }, {
880535
880578
  capabilities: {
880536
880579
  tools: {}
@@ -882815,7 +882858,7 @@ function createHealthRoutes(sessionManager) {
882815
882858
  const uptime2 = process.uptime() * 1000;
882816
882859
  return c10.json({
882817
882860
  status: "ok",
882818
- version: "4.2.23",
882861
+ version: "4.2.25-beta",
882819
882862
  uptime_ms: Math.round(uptime2),
882820
882863
  active_sessions: sessionManager.getActiveCount()
882821
882864
  });
@@ -883087,7 +883130,7 @@ function getMacroDefines() {
883087
883130
  commit = execSync3("git rev-parse --short HEAD", { encoding: "utf-8", cwd: __dirname }).trim();
883088
883131
  } catch {}
883089
883132
  return {
883090
- "MACRO.VERSION": JSON.stringify("4.2.23"),
883133
+ "MACRO.VERSION": JSON.stringify("4.2.25-beta"),
883091
883134
  "MACRO.BUILD_TIME": JSON.stringify(new Date().toISOString()),
883092
883135
  "MACRO.COMMIT": JSON.stringify(commit),
883093
883136
  "MACRO.FEEDBACK_CHANNEL": JSON.stringify(""),
@@ -884094,6 +884137,8 @@ function createSessionRoutes(sessionManager, eventBus) {
884094
884137
  });
884095
884138
  const historyIds = new Set(historySessions.map((s) => s.sessionId));
884096
884139
  for (const handle of sessionManager.getAllSessions()) {
884140
+ if (!handle.prompted)
884141
+ continue;
884097
884142
  if (!historyIds.has(handle.sessionId)) {
884098
884143
  if (canonicalDir) {
884099
884144
  const handleCwd = await canonicalizePath(handle.cwd).catch(() => handle.cwd);
@@ -887003,6 +887048,11 @@ var init_find = __esm(() => {
887003
887048
  });
887004
887049
 
887005
887050
  // src/server/routes/favorite.ts
887051
+ function validateRouteId(id) {
887052
+ if (id.includes("/") || id.includes("\\") || id.includes("\x00") || id === ".." || id === ".") {
887053
+ throw new Error(`Invalid favorite id: ${id}`);
887054
+ }
887055
+ }
887006
887056
  function createFavoriteRoutes() {
887007
887057
  return new Hono2().get("/global/favorite/skills", async (c10) => {
887008
887058
  try {
@@ -887016,6 +887066,7 @@ function createFavoriteRoutes() {
887016
887066
  }).post("/global/favorite/skills/:id/load", async (c10) => {
887017
887067
  const id = c10.req.param("id");
887018
887068
  try {
887069
+ validateRouteId(id);
887019
887070
  const result = await loadFavoriteItem(id);
887020
887071
  return c10.json({ success: true, item: result });
887021
887072
  } catch (error100) {
@@ -887028,6 +887079,7 @@ function createFavoriteRoutes() {
887028
887079
  }).post("/global/favorite/skills/:id/unload", async (c10) => {
887029
887080
  const id = c10.req.param("id");
887030
887081
  try {
887082
+ validateRouteId(id);
887031
887083
  const result = await unloadFavoriteItem(id);
887032
887084
  return c10.json({ success: true, item: result });
887033
887085
  } catch (error100) {
@@ -888765,16 +888817,48 @@ class SessionManager {
888765
888817
  try {
888766
888818
  const raw2 = await readFile93(path60, "utf-8");
888767
888819
  const index2 = JSON.parse(raw2);
888768
- for (const [key6, entry] of Object.entries(index2)) {
888769
- this.loadedIndex.set(key6, entry);
888820
+ const entries = Object.entries(index2);
888821
+ const verdicts = await Promise.all(entries.map(async ([, entry]) => {
888822
+ if (entry.customTitle !== undefined)
888823
+ return false;
888824
+ if (entry.createdAt !== undefined && entry.createdAt === entry.lastActiveAt) {
888825
+ return true;
888826
+ }
888827
+ return await this.isTranscriptEmpty(entry);
888828
+ }));
888829
+ let pruned = false;
888830
+ for (let i10 = 0;i10 < entries.length; i10++) {
888831
+ if (verdicts[i10]) {
888832
+ pruned = true;
888833
+ continue;
888834
+ }
888835
+ this.loadedIndex.set(entries[i10][0], entries[i10][1]);
888770
888836
  }
888837
+ if (pruned)
888838
+ this.scheduleIndexSave();
888771
888839
  } catch (err3) {
888772
888840
  logError3(err3);
888773
888841
  }
888774
888842
  }
888843
+ async isTranscriptEmpty(entry) {
888844
+ if (!entry.cwd)
888845
+ return false;
888846
+ const sessionFile = `${entry.sessionId}.jsonl`;
888847
+ for (const projectsDir of getAllProjectsDirs()) {
888848
+ const projectDir = join236(projectsDir, sanitizePath(entry.cwd));
888849
+ const filePath = join236(projectDir, sessionFile);
888850
+ const lite = await readSessionLite(filePath);
888851
+ if (!lite)
888852
+ continue;
888853
+ return !extractFirstPromptFromHead(lite.head) && !extractFirstPromptFromHead(lite.tail);
888854
+ }
888855
+ return true;
888856
+ }
888775
888857
  async saveIndex() {
888776
888858
  const index2 = Object.fromEntries(this.loadedIndex);
888777
888859
  for (const [key6, handle] of this.sessions) {
888860
+ if (!handle.prompted)
888861
+ continue;
888778
888862
  index2[key6] = this.toIndexEntry(handle);
888779
888863
  }
888780
888864
  const dir = getClaudeConfigHomeDir();
@@ -890080,7 +890164,7 @@ __export(exports_update, {
890080
890164
  });
890081
890165
  async function update() {
890082
890166
  logEvent("tengu_update_check", {});
890083
- writeToStdout(`${t("cli.update.currentVersion", "Current version")}: ${"4.2.23"}
890167
+ writeToStdout(`${t("cli.update.currentVersion", "Current version")}: ${"4.2.25-beta"}
890084
890168
  `);
890085
890169
  const channel5 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
890086
890170
  writeToStdout(`${t("cli.update.checkingUpdates", { channel: channel5 }, "Checking for updates to {channel} version...")}
@@ -890155,8 +890239,8 @@ async function update() {
890155
890239
  writeToStdout(`${t("cli.update.managedByHomebrew", "CoStrict is managed by Homebrew.")}
890156
890240
  `);
890157
890241
  const latest = await getLatestVersion(channel5);
890158
- if (latest && !gte2("4.2.23", latest)) {
890159
- writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.23", latest }, "Update available: {current} \u2192 {latest}")}
890242
+ if (latest && !gte2("4.2.25-beta", latest)) {
890243
+ writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.25-beta", latest }, "Update available: {current} \u2192 {latest}")}
890160
890244
  `);
890161
890245
  writeToStdout(`
890162
890246
  `);
@@ -890172,8 +890256,8 @@ async function update() {
890172
890256
  writeToStdout(`${t("cli.update.managedByWinget", "CoStrict is managed by winget.")}
890173
890257
  `);
890174
890258
  const latest = await getLatestVersion(channel5);
890175
- if (latest && !gte2("4.2.23", latest)) {
890176
- writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.23", latest }, "Update available: {current} \u2192 {latest}")}
890259
+ if (latest && !gte2("4.2.25-beta", latest)) {
890260
+ writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.25-beta", latest }, "Update available: {current} \u2192 {latest}")}
890177
890261
  `);
890178
890262
  writeToStdout(`
890179
890263
  `);
@@ -890189,8 +890273,8 @@ async function update() {
890189
890273
  writeToStdout(`${t("cli.update.managedByApk", "CoStrict is managed by apk.")}
890190
890274
  `);
890191
890275
  const latest = await getLatestVersion(channel5);
890192
- if (latest && !gte2("4.2.23", latest)) {
890193
- writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.23", latest }, "Update available: {current} \u2192 {latest}")}
890276
+ if (latest && !gte2("4.2.25-beta", latest)) {
890277
+ writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.25-beta", latest }, "Update available: {current} \u2192 {latest}")}
890194
890278
  `);
890195
890279
  writeToStdout(`
890196
890280
  `);
@@ -890255,11 +890339,11 @@ async function update() {
890255
890339
  `);
890256
890340
  await gracefulShutdown(1);
890257
890341
  }
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})")) + `
890342
+ if (result2.latestVersion === "4.2.25-beta") {
890343
+ writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.25-beta" }, "CoStrict is up to date ({version})")) + `
890260
890344
  `);
890261
890345
  } else {
890262
- writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.23", to: String(result2.latestVersion) }, "Successfully updated from {from} to version {to}")) + `
890346
+ writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.25-beta", to: String(result2.latestVersion) }, "Successfully updated from {from} to version {to}")) + `
890263
890347
  `);
890264
890348
  regenerateCompletionCache();
890265
890349
  }
@@ -890319,12 +890403,12 @@ async function update() {
890319
890403
  `);
890320
890404
  await gracefulShutdown(1);
890321
890405
  }
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})")) + `
890406
+ if (latestVersion === "4.2.25-beta") {
890407
+ writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.25-beta" }, "CoStrict is up to date ({version})")) + `
890324
890408
  `);
890325
890409
  await gracefulShutdown(0);
890326
890410
  }
890327
- writeToStdout(`${t("cli.update.newVersionAvailable", { latest: String(latestVersion), current: "4.2.23" }, "New version available: {latest} (current: {current})")}
890411
+ writeToStdout(`${t("cli.update.newVersionAvailable", { latest: String(latestVersion), current: "4.2.25-beta" }, "New version available: {latest} (current: {current})")}
890328
890412
  `);
890329
890413
  writeToStdout(`${t("cli.update.installing", "Installing update...")}
890330
890414
  `);
@@ -890369,7 +890453,7 @@ async function update() {
890369
890453
  logForDebugging(`update: Installation status: ${result.status}`);
890370
890454
  switch (result.status) {
890371
890455
  case "success":
890372
- writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.23", to: String(latestVersion) }, "Successfully updated from {from} to version {to}")) + `
890456
+ writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.25-beta", to: String(latestVersion) }, "Successfully updated from {from} to version {to}")) + `
890373
890457
  `);
890374
890458
  regenerateCompletionCache();
890375
890459
  break;
@@ -892573,7 +892657,7 @@ ${assistantAddendum}` : assistantAddendum;
892573
892657
  }
892574
892658
  }
892575
892659
  logForDiagnosticsNoPII("info", "started", {
892576
- version: "4.2.23",
892660
+ version: "4.2.25-beta",
892577
892661
  is_native_binary: isInBundledMode()
892578
892662
  });
892579
892663
  registerCleanup(async () => {
@@ -893064,7 +893148,7 @@ Session: ${directConnectConfig.sessionId}`, "info");
893064
893148
  sshSession = await createSSHSession2({
893065
893149
  host: _pendingSSH.host,
893066
893150
  cwd: _pendingSSH.cwd,
893067
- localVersion: "4.2.23",
893151
+ localVersion: "4.2.25-beta",
893068
893152
  permissionMode: _pendingSSH.permissionMode,
893069
893153
  dangerouslySkipPermissions: _pendingSSH.dangerouslySkipPermissions,
893070
893154
  extraCliArgs: _pendingSSH.extraCliArgs,
@@ -893533,7 +893617,7 @@ Usage: csc --remote "your task description"`, () => gracefulShutdown(1));
893533
893617
  pendingHookMessages
893534
893618
  }, renderAndRun);
893535
893619
  }
893536
- }).version("4.2.23 (CoStrict)", "-v, --version", cliDesc("cli.option.version", "Output the version number"));
893620
+ }).version("4.2.25-beta (CoStrict)", "-v, --version", cliDesc("cli.option.version", "Output the version number"));
893537
893621
  program2.addOption(new Option("-w, --worktree [name]", cliDesc("cli.option.worktree", "Create a new git worktree for this session (optionally specify a name)")).hideHelp());
893538
893622
  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());
893539
893623
  if (canUserConfigureAdvisor()) {
@@ -894276,10 +894360,10 @@ if (process.env.CLAUDE_CODE_REMOTE === "true") {
894276
894360
  async function main2() {
894277
894361
  const args = process.argv.slice(2);
894278
894362
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
894279
- const d7 = new Date("2026-08-04T07:11:51.439Z");
894363
+ const d7 = new Date("2026-08-05T02:51:18.330Z");
894280
894364
  const p2 = (n3) => String(n3).padStart(2, "0");
894281
894365
  const buildTime = `${d7.getFullYear()}/${p2(d7.getMonth() + 1)}/${p2(d7.getDate())} ${p2(d7.getHours())}:${p2(d7.getMinutes())}:${p2(d7.getSeconds())}`;
894282
- console.log(`${"4.2.23"} (commit: ${"c5c7891a2"}, built: ${buildTime})`);
894366
+ console.log(`${"4.2.25-beta"} (commit: ${"f030d9465"}, built: ${buildTime})`);
894283
894367
  return;
894284
894368
  }
894285
894369
  let stopServeParentWatchdog;
@@ -894455,5 +894539,5 @@ async function main2() {
894455
894539
  }
894456
894540
  main2();
894457
894541
 
894458
- //# debugId=572B24B78021B29264756E2164756E21
894542
+ //# debugId=D6E03C30C8B9862B64756E2164756E21
894459
894543
 
@@ -736,8 +736,8 @@ function getClientVersion() {
736
736
  if (cached)
737
737
  return cached;
738
738
  try {
739
- if ("4.2.23") {
740
- cached = "4.2.23";
739
+ if ("4.2.25-beta") {
740
+ cached = "4.2.25-beta";
741
741
  return cached;
742
742
  }
743
743
  } catch {}
@@ -138557,7 +138557,7 @@ var init_user = __esm(() => {
138557
138557
  deviceId,
138558
138558
  sessionId: getSessionId(),
138559
138559
  email: getEmail(),
138560
- appVersion: "4.2.23",
138560
+ appVersion: "4.2.25-beta",
138561
138561
  platform: getHostPlatformForAnalytics(),
138562
138562
  organizationUuid,
138563
138563
  accountUuid,
@@ -138844,7 +138844,7 @@ var init_metadata = __esm(() => {
138844
138844
  "sed"
138845
138845
  ]);
138846
138846
  getVersionBase = memoize_default(() => {
138847
- const match = "4.2.23".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
138847
+ const match = "4.2.25-beta".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
138848
138848
  return match ? match[0] : undefined;
138849
138849
  });
138850
138850
  buildEnvContext = memoize_default(async () => {
@@ -138884,9 +138884,9 @@ var init_metadata = __esm(() => {
138884
138884
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
138885
138885
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
138886
138886
  isClaudeAiAuth: isClaudeAISubscriber(),
138887
- version: "4.2.23",
138887
+ version: "4.2.25-beta",
138888
138888
  versionBase: getVersionBase(),
138889
- buildTime: "2026-08-04T07:11:53.958Z",
138889
+ buildTime: "2026-08-05T02:51:20.593Z",
138890
138890
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
138891
138891
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
138892
138892
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -143224,5 +143224,5 @@ export {
143224
143224
  isParentHeartbeatValid
143225
143225
  };
143226
143226
 
143227
- //# debugId=22A05C2AEDAD152664756E2164756E21
143227
+ //# debugId=20F4512408F2E43364756E2164756E21
143228
143228
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@costrict/csc",
3
- "version": "4.2.23",
3
+ "version": "4.2.25-beta",
4
4
  "description": "costrict",
5
5
  "type": "module",
6
6
  "author": "costrict",