@costrict/csc 4.2.24 → 4.2.25

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.24") {
66717
- cached = "4.2.24";
66716
+ if ("4.2.25") {
66717
+ cached = "4.2.25";
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.24"}`
220506
+ "User-Agent": `csc/${"4.2.25"}`
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.24"}`;
222543
+ return `costrict/${"4.2.25"}`;
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.24"}`;
222565
+ return `csc/${"4.2.25"}`;
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.24"}${suffix}`;
222579
+ return `csc/${"4.2.25"}${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.24",
222699
+ appVersion: "4.2.25",
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.24".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
233747
+ const match = "4.2.25".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.24",
233787
+ version: "4.2.25",
233788
233788
  versionBase: getVersionBase(),
233789
- buildTime: "2026-08-04T09:20:56.936Z",
233789
+ buildTime: "2026-08-06T08:23:07.527Z",
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.24"
234460
+ [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "4.2.25"
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.24");
234487
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.claude_code.events", "4.2.25");
234488
234488
  }
234489
234489
  async function reinitialize1PEventLoggingIfConfigChanged() {
234490
234490
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -317210,7 +317210,6 @@ var init_tools3 = __esm(() => {
317210
317210
  TASK_OUTPUT_TOOL_NAME,
317211
317211
  EXIT_PLAN_MODE_V2_TOOL_NAME,
317212
317212
  ENTER_PLAN_MODE_TOOL_NAME,
317213
- ...process.env.USER_TYPE === "sf" ? [] : [AGENT_TOOL_NAME],
317214
317213
  ASK_USER_QUESTION_TOOL_NAME,
317215
317214
  TASK_STOP_TOOL_NAME,
317216
317215
  ...[WORKFLOW_TOOL_NAME],
@@ -434502,7 +434501,7 @@ function getTelemetryAttributes() {
434502
434501
  attributes["session.id"] = sessionId;
434503
434502
  }
434504
434503
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
434505
- attributes["app.version"] = "4.2.24";
434504
+ attributes["app.version"] = "4.2.25";
434506
434505
  }
434507
434506
  const oauthAccount = getOauthAccountInfo();
434508
434507
  if (oauthAccount) {
@@ -468022,7 +468021,7 @@ function initLangfuse() {
468022
468021
  flushInterval: parseInt(process.env.LANGFUSE_FLUSH_INTERVAL ?? "10", 10),
468023
468022
  mask: maskFn,
468024
468023
  environment: process.env.LANGFUSE_TRACING_ENVIRONMENT ?? "development",
468025
- release: "4.2.24",
468024
+ release: "4.2.25",
468026
468025
  exportMode: process.env.LANGFUSE_EXPORT_MODE ?? "batched",
468027
468026
  timeout: parseInt(process.env.LANGFUSE_TIMEOUT ?? "5", 10)
468028
468027
  });
@@ -499922,7 +499921,7 @@ function initSentry() {
499922
499921
  }
499923
499922
  init3({
499924
499923
  dsn,
499925
- release: typeof MACRO !== "undefined" ? "4.2.24" : undefined,
499924
+ release: typeof MACRO !== "undefined" ? "4.2.25" : undefined,
499926
499925
  environment: typeof BUILD_ENV !== "undefined" ? BUILD_ENV : "production",
499927
499926
  maxBreadcrumbs: 20,
499928
499927
  sampleRate: 1,
@@ -527819,7 +527818,7 @@ async function initializeBetaTracing(resource) {
527819
527818
  });
527820
527819
  logs.setGlobalLoggerProvider(loggerProvider);
527821
527820
  setLoggerProvider(loggerProvider);
527822
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.24");
527821
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.25");
527823
527822
  setEventLogger(eventLogger);
527824
527823
  process.on("beforeExit", async () => {
527825
527824
  await loggerProvider?.forceFlush();
@@ -527859,7 +527858,7 @@ async function initializeTelemetry() {
527859
527858
  const platform5 = getPlatform();
527860
527859
  const baseAttributes = {
527861
527860
  [import_semantic_conventions29.ATTR_SERVICE_NAME]: "claude-code",
527862
- [import_semantic_conventions29.ATTR_SERVICE_VERSION]: "4.2.24"
527861
+ [import_semantic_conventions29.ATTR_SERVICE_VERSION]: "4.2.25"
527863
527862
  };
527864
527863
  if (platform5 === "wsl") {
527865
527864
  const wslVersion = getWslVersion();
@@ -527904,7 +527903,7 @@ async function initializeTelemetry() {
527904
527903
  } catch {}
527905
527904
  };
527906
527905
  registerCleanup(shutdownTelemetry2);
527907
- return meterProvider2.getMeter("com.anthropic.claude_code", "4.2.24");
527906
+ return meterProvider2.getMeter("com.anthropic.claude_code", "4.2.25");
527908
527907
  }
527909
527908
  const meterProvider = new import_sdk_metrics2.MeterProvider({
527910
527909
  resource,
@@ -527924,7 +527923,7 @@ async function initializeTelemetry() {
527924
527923
  });
527925
527924
  logs.setGlobalLoggerProvider(loggerProvider);
527926
527925
  setLoggerProvider(loggerProvider);
527927
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.24");
527926
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.25");
527928
527927
  setEventLogger(eventLogger);
527929
527928
  logForDebugging("[3P telemetry] Event logger set successfully");
527930
527929
  process.on("beforeExit", async () => {
@@ -527986,7 +527985,7 @@ Current timeout: ${timeoutMs}ms
527986
527985
  }
527987
527986
  };
527988
527987
  registerCleanup(shutdownTelemetry);
527989
- return meterProvider.getMeter("com.anthropic.claude_code", "4.2.24");
527988
+ return meterProvider.getMeter("com.anthropic.claude_code", "4.2.25");
527990
527989
  }
527991
527990
  async function flushTelemetry() {
527992
527991
  const meterProvider = getMeterProvider();
@@ -529045,7 +529044,7 @@ async function installGlobalPackage(specificVersion) {
529045
529044
  logError3(new AutoUpdaterError("Another process is currently installing an update"));
529046
529045
  logEvent("tengu_auto_updater_lock_contention", {
529047
529046
  pid: process.pid,
529048
- currentVersion: "4.2.24"
529047
+ currentVersion: "4.2.25"
529049
529048
  });
529050
529049
  return { status: "in_progress" };
529051
529050
  }
@@ -529054,7 +529053,7 @@ async function installGlobalPackage(specificVersion) {
529054
529053
  if (!env4.isRunningWithBun() && env4.isNpmFromWindowsPath()) {
529055
529054
  logError3(new Error("Windows NPM detected in WSL environment"));
529056
529055
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
529057
- currentVersion: "4.2.24"
529056
+ currentVersion: "4.2.25"
529058
529057
  });
529059
529058
  return {
529060
529059
  status: "install_failed",
@@ -529600,7 +529599,7 @@ function detectLinuxGlobPatternWarnings() {
529600
529599
  }
529601
529600
  async function getDoctorDiagnostic() {
529602
529601
  const installationType = await getCurrentInstallationType();
529603
- const version9 = typeof MACRO !== "undefined" ? "4.2.24" : "unknown";
529602
+ const version9 = typeof MACRO !== "undefined" ? "4.2.25" : "unknown";
529604
529603
  const installationPath = await getInstallationPath();
529605
529604
  const invokedBinary = getInvokedBinary();
529606
529605
  const multipleInstallations = await detectMultipleInstallations();
@@ -567787,7 +567786,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
567787
567786
  const client10 = new Client3({
567788
567787
  name: "claude-code",
567789
567788
  title: "CoStrict",
567790
- version: "4.2.24",
567789
+ version: "4.2.25",
567791
567790
  description: "CoStrict agentic coding tool",
567792
567791
  websiteUrl: PRODUCT_URL
567793
567792
  }, {
@@ -568158,7 +568157,7 @@ var init_client18 = __esm(() => {
568158
568157
  const client10 = new Client3({
568159
568158
  name: "claude-code",
568160
568159
  title: "CoStrict",
568161
- version: "4.2.24",
568160
+ version: "4.2.25",
568162
568161
  description: "CoStrict agentic coding tool",
568163
568162
  websiteUrl: PRODUCT_URL
568164
568163
  }, {
@@ -569548,7 +569547,7 @@ function getInstallationEnv() {
569548
569547
  return;
569549
569548
  }
569550
569549
  function getClaudeCodeVersion() {
569551
- return "4.2.24";
569550
+ return "4.2.25";
569552
569551
  }
569553
569552
  async function getInstalledVSCodeExtensionVersion(command4) {
569554
569553
  const { stdout } = await execFileNoThrow2(command4, ["--list-extensions", "--show-versions"], {
@@ -570912,8 +570911,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
570912
570911
  const maxVersion = await getMaxVersion();
570913
570912
  if (maxVersion && gt(version10, maxVersion)) {
570914
570913
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version10} to ${maxVersion}`);
570915
- if (gte2("4.2.24", maxVersion)) {
570916
- logForDebugging(`Native installer: current version ${"4.2.24"} is already at or above maxVersion ${maxVersion}, skipping update`);
570914
+ if (gte2("4.2.25", maxVersion)) {
570915
+ logForDebugging(`Native installer: current version ${"4.2.25"} is already at or above maxVersion ${maxVersion}, skipping update`);
570917
570916
  logEvent("tengu_native_update_skipped_max_version", {
570918
570917
  latency_ms: Date.now() - startTime2,
570919
570918
  max_version: maxVersion,
@@ -570924,7 +570923,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
570924
570923
  version10 = maxVersion;
570925
570924
  }
570926
570925
  }
570927
- if (!forceReinstall && version10 === "4.2.24" && await versionIsAvailable(version10) && await isPossibleClaudeBinary(executablePath)) {
570926
+ if (!forceReinstall && version10 === "4.2.25" && await versionIsAvailable(version10) && await isPossibleClaudeBinary(executablePath)) {
570928
570927
  logForDebugging(`Found ${version10} at ${executablePath}, skipping install`);
570929
570928
  logEvent("tengu_native_update_complete", {
570930
570929
  latency_ms: Date.now() - startTime2,
@@ -589429,10 +589428,20 @@ var init_sdkProgress = __esm(() => {
589429
589428
  });
589430
589429
 
589431
589430
  // packages/builtin-tools/src/tools/AgentTool/agentToolUtils.ts
589431
+ function canReceiveNestedAgentTool({
589432
+ workerNestingDepth,
589433
+ isAsync: isAsync2
589434
+ }) {
589435
+ if (true) {
589436
+ return !isAsync2 && workerNestingDepth < MAX_NESTED_AGENT_DEPTH;
589437
+ }
589438
+ return false;
589439
+ }
589432
589440
  function filterToolsForAgent({
589433
589441
  tools,
589434
589442
  isBuiltIn,
589435
589443
  isAsync: isAsync2 = false,
589444
+ workerNestingDepth = 1,
589436
589445
  permissionMode
589437
589446
  }) {
589438
589447
  return tools.filter((tool) => {
@@ -589442,6 +589451,9 @@ function filterToolsForAgent({
589442
589451
  if (toolMatchesName(tool, EXIT_PLAN_MODE_V2_TOOL_NAME) && permissionMode === "plan") {
589443
589452
  return true;
589444
589453
  }
589454
+ if (toolMatchesName(tool, AGENT_TOOL_NAME)) {
589455
+ return canReceiveNestedAgentTool({ workerNestingDepth, isAsync: isAsync2 });
589456
+ }
589445
589457
  if (ALL_AGENT_DISALLOWED_TOOLS.has(tool.name)) {
589446
589458
  return false;
589447
589459
  }
@@ -589462,7 +589474,7 @@ function filterToolsForAgent({
589462
589474
  return true;
589463
589475
  });
589464
589476
  }
589465
- function resolveAgentTools(agentDefinition, availableTools, isAsync2 = false, isMainThread3 = false) {
589477
+ function resolveAgentTools(agentDefinition, availableTools, isAsync2 = false, isMainThread3 = false, workerNestingDepth = 1) {
589466
589478
  const {
589467
589479
  tools: agentTools,
589468
589480
  disallowedTools,
@@ -589475,6 +589487,7 @@ function resolveAgentTools(agentDefinition, availableTools, isAsync2 = false, is
589475
589487
  tools: availableTools,
589476
589488
  isBuiltIn: source === "built-in",
589477
589489
  isAsync: isAsync2,
589490
+ workerNestingDepth,
589478
589491
  permissionMode
589479
589492
  });
589480
589493
  const disallowedToolSet = new Set(disallowedTools?.map((toolSpec) => {
@@ -589506,7 +589519,7 @@ function resolveAgentTools(agentDefinition, availableTools, isAsync2 = false, is
589506
589519
  if (ruleContent) {
589507
589520
  allowedAgentTypes = ruleContent.split(",").map((s) => s.trim());
589508
589521
  }
589509
- if (!effectiveIsMainThread) {
589522
+ if (!effectiveIsMainThread && !availableToolMap.has(AGENT_TOOL_NAME)) {
589510
589523
  validTools.push(toolSpec);
589511
589524
  continue;
589512
589525
  }
@@ -589802,7 +589815,7 @@ ${finalMessage}`;
589802
589815
  clearDumpState(agentIdForCleanup);
589803
589816
  }
589804
589817
  }
589805
- var agentToolResultSchema;
589818
+ var MAX_NESTED_AGENT_DEPTH = 4, agentToolResultSchema;
589806
589819
  var init_agentToolUtils = __esm(() => {
589807
589820
  init_v4();
589808
589821
  init_state();
@@ -599545,7 +599558,7 @@ async function* runAgent({
599545
599558
  effortValue
599546
599559
  };
599547
599560
  };
599548
- const resolvedTools = useExactTools ? availableTools : resolveAgentTools(agentDefinition, availableTools, isAsync2).resolvedTools;
599561
+ const resolvedTools = useExactTools ? availableTools : resolveAgentTools(agentDefinition, availableTools, isAsync2, false, (toolUseContext.agentNestingDepth ?? 0) + 1).resolvedTools;
599549
599562
  const additionalWorkingDirectories = Array.from(includeWorktreeInAdditionalDirs(appState.toolPermissionContext.additionalWorkingDirectories).keys());
599550
599563
  const agentSystemPrompt = override?.systemPrompt ? override.systemPrompt : asSystemPrompt(await getAgentSystemPrompt(agentDefinition, toolUseContext, resolvedAgentModel, additionalWorkingDirectories, resolvedTools));
599551
599564
  const agentAbortController = override?.abortController ? override.abortController : isAsync2 ? new AbortController : toolUseContext.abortController;
@@ -599625,6 +599638,7 @@ async function* runAgent({
599625
599638
  options: agentOptions,
599626
599639
  agentId,
599627
599640
  agentType: agentDefinition.agentType,
599641
+ agentIsAsync: isAsync2,
599628
599642
  messages: initialMessages,
599629
599643
  readFileState: agentReadFileState,
599630
599644
  abortController: agentAbortController,
@@ -662324,10 +662338,16 @@ function parseAddress(to) {
662324
662338
  }
662325
662339
 
662326
662340
  // src/utils/agentToolFilter.ts
662327
- function filterParentToolsForFork(parentTools) {
662328
- return parentTools.filter((t2) => !ALL_AGENT_DISALLOWED_TOOLS.has(t2.name));
662341
+ function filterParentToolsForFork(parentTools, parentNestingDepth = 0, isAsync2 = false) {
662342
+ let canRetainAgent = false;
662343
+ if (true) {
662344
+ canRetainAgent = !isAsync2 && parentNestingDepth < MAX_NESTED_AGENT_DEPTH2;
662345
+ }
662346
+ return parentTools.filter((t2) => !ALL_AGENT_DISALLOWED_TOOLS.has(t2.name) && (t2.name !== AGENT_TOOL_NAME || canRetainAgent));
662329
662347
  }
662348
+ var MAX_NESTED_AGENT_DEPTH2 = 4;
662330
662349
  var init_agentToolFilter = __esm(() => {
662350
+ init_constants3();
662331
662351
  init_tools3();
662332
662352
  });
662333
662353
 
@@ -662560,7 +662580,7 @@ async function resumeAgentBackground({
662560
662580
  ...appState.toolPermissionContext,
662561
662581
  mode: selectedAgent.permissionMode ?? "acceptEdits"
662562
662582
  };
662563
- const workerTools = isResumedFork ? filterParentToolsForFork(toolUseContext.options.tools) : assembleToolPool(workerPermissionContext, appState.mcp.tools);
662583
+ const workerTools = isResumedFork ? filterParentToolsForFork(toolUseContext.options.tools, toolUseContext.agentNestingDepth ?? 0, true) : assembleToolPool(workerPermissionContext, appState.mcp.tools);
662564
662584
  const runAgentParams = {
662565
662585
  agentDefinition: selectedAgent,
662566
662586
  promptMessages: [
@@ -665898,6 +665918,13 @@ var init_AgentTool = __esm(() => {
665898
665918
  cwd: cwd2
665899
665919
  }, toolUseContext, canUseTool, assistantMessage, onProgress) {
665900
665920
  const startTime2 = Date.now();
665921
+ const nestingDepth = toolUseContext.agentNestingDepth ?? 0;
665922
+ if (true) {
665923
+ if (toolUseContext.agentIsAsync === true || nestingDepth >= 4) {
665924
+ throw new Error("Nested Agent calls are only available to synchronous agents up to depth 4.");
665925
+ }
665926
+ } else
665927
+ ;
665901
665928
  const model = isCoordinatorMode() ? undefined : modelParam;
665902
665929
  const appState = toolUseContext.getAppState();
665903
665930
  const permissionMode = appState.toolPermissionContext.mode;
@@ -666124,7 +666151,7 @@ ${reasons}`);
666124
666151
  querySource: toolUseContext.options.querySource ?? getQuerySourceForAgent(selectedAgent.agentType, isBuiltInAgent(selectedAgent)),
666125
666152
  model: isForkPath ? undefined : model,
666126
666153
  override: isForkPath ? { systemPrompt: forkParentSystemPrompt } : enhancedSystemPrompt && !worktreeInfo && !cwd2 ? { systemPrompt: asSystemPrompt(enhancedSystemPrompt) } : undefined,
666127
- availableTools: isForkPath ? filterParentToolsForFork(toolUseContext.options.tools) : workerTools,
666154
+ availableTools: isForkPath ? filterParentToolsForFork(toolUseContext.options.tools, toolUseContext.agentNestingDepth ?? 0, shouldRunAsync) : workerTools,
666128
666155
  forkContextMessages: isForkPath ? toolUseContext.messages : undefined,
666129
666156
  ...isForkPath && { useExactTools: true },
666130
666157
  worktreePath: worktreeInfo?.worktreePath,
@@ -683083,6 +683110,8 @@ function createSubagentContext(parentContext, overrides2) {
683083
683110
  messages: overrides2?.messages ?? parentContext.messages,
683084
683111
  agentId: overrides2?.agentId ?? createAgentId(),
683085
683112
  parentAgentId: overrides2?.parentAgentId ?? parentContext.agentId,
683113
+ agentNestingDepth: (parentContext.agentNestingDepth ?? 0) + 1,
683114
+ agentIsAsync: overrides2?.agentIsAsync ?? parentContext.agentIsAsync,
683086
683115
  agentType: overrides2?.agentType,
683087
683116
  queryTracking: {
683088
683117
  chainId: randomUUID36(),
@@ -685156,11 +685185,11 @@ function getAutocompactBufferTokens(model) {
685156
685185
  }
685157
685186
  const effectiveWindow = getEffectiveContextWindowSize(model);
685158
685187
  if (effectiveWindow >= 800000)
685159
- return 80000;
685188
+ return 30000;
685160
685189
  if (effectiveWindow >= 400000)
685161
- return 60000;
685190
+ return 22000;
685162
685191
  if (effectiveWindow >= 200000)
685163
- return 40000;
685192
+ return 15000;
685164
685193
  return AUTOCOMPACT_BUFFER_TOKENS;
685165
685194
  }
685166
685195
  function getAutoCompactThreshold(model) {
@@ -685226,17 +685255,17 @@ async function shouldAutoCompact(messages, model, querySource, snipTokensFreed =
685226
685255
  const multiplier = (() => {
685227
685256
  if (multiplierEnv !== undefined) {
685228
685257
  const parsed = parseFloat(multiplierEnv);
685229
- if (!Number.isNaN(parsed) && parsed >= 1) {
685258
+ if (!Number.isNaN(parsed) && parsed > 0) {
685230
685259
  return parsed;
685231
685260
  }
685232
685261
  }
685233
- return 1.1;
685262
+ return 1;
685234
685263
  })();
685235
685264
  const estimatedTokenCount = Math.ceil(tokenCountWithEstimation(messages) * multiplier);
685236
685265
  const tokenCount = estimatedTokenCount - snipTokensFreed - microcompactTokensFreed;
685237
685266
  const threshold = getAutoCompactThreshold(model);
685238
685267
  const effectiveWindow = getEffectiveContextWindowSize(model);
685239
- logForDebugging(`autocompact: tokens=${tokenCount} (raw=${tokenCountWithEstimation(messages)}) threshold=${threshold} effectiveWindow=${effectiveWindow}${snipTokensFreed > 0 ? ` snipFreed=${snipTokensFreed}` : ""}${microcompactTokensFreed > 0 ? ` microcompactFreed=${microcompactTokensFreed}` : ""}${multiplier !== 1.1 ? ` multiplier=${multiplier}` : ""}`);
685268
+ logForDebugging(`autocompact: tokens=${tokenCount} (raw=${tokenCountWithEstimation(messages)}) threshold=${threshold} effectiveWindow=${effectiveWindow}${snipTokensFreed > 0 ? ` snipFreed=${snipTokensFreed}` : ""}${microcompactTokensFreed > 0 ? ` microcompactFreed=${microcompactTokensFreed}` : ""}${multiplier !== 1 ? ` multiplier=${multiplier}` : ""}`);
685240
685269
  const { isAboveAutoCompactThreshold } = calculateTokenWarningState(tokenCount, model);
685241
685270
  return isAboveAutoCompactThreshold;
685242
685271
  }
@@ -685300,7 +685329,7 @@ async function autoCompactIfNeeded(messages, toolUseContext, cacheSafeParams, qu
685300
685329
  return { wasCompacted: false, consecutiveFailures: nextFailures };
685301
685330
  }
685302
685331
  }
685303
- var MAX_OUTPUT_TOKENS_FOR_SUMMARY = 20000, AUTOCOMPACT_BUFFER_TOKENS = 35000, WARNING_THRESHOLD_BUFFER_TOKENS = 20000, ERROR_THRESHOLD_BUFFER_TOKENS = 20000, MANUAL_COMPACT_BUFFER_TOKENS = 1e4, MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3, MAX_CONSECUTIVE_AUTOCOMPACT_COMPACTIONS = 2;
685332
+ var MAX_OUTPUT_TOKENS_FOR_SUMMARY = 20000, AUTOCOMPACT_BUFFER_TOKENS = 15000, WARNING_THRESHOLD_BUFFER_TOKENS = 20000, ERROR_THRESHOLD_BUFFER_TOKENS = 20000, MANUAL_COMPACT_BUFFER_TOKENS = 1e4, MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3, MAX_CONSECUTIVE_AUTOCOMPACT_COMPACTIONS = 2;
685304
685333
  var init_autoCompact = __esm(() => {
685305
685334
  init_state();
685306
685335
  init_state();
@@ -685819,7 +685848,7 @@ async function analyzeContextUsage(messages, model, getToolPermissionContext, to
685819
685848
  const skillFrontmatterTokens = skillInfo.skillFrontmatter.reduce((sum, skill) => sum + skill.tokens, 0);
685820
685849
  const messageTokens = messageBreakdown.totalTokens;
685821
685850
  const isAutoCompact = isAutoCompactEnabled();
685822
- const autoCompactThreshold = isAutoCompact ? getEffectiveContextWindowSize(model) - AUTOCOMPACT_BUFFER_TOKENS : undefined;
685851
+ const autoCompactThreshold = isAutoCompact ? getEffectiveContextWindowSize(model) - getAutocompactBufferTokens(model) : undefined;
685823
685852
  const cats = [];
685824
685853
  if (systemPromptTokens > 0) {
685825
685854
  cats.push({
@@ -708992,7 +709021,7 @@ function Feedback({
708992
709021
  platform: env4.platform,
708993
709022
  gitRepo: envInfo.isGit,
708994
709023
  terminal: env4.terminal,
708995
- version: "4.2.24",
709024
+ version: "4.2.25",
708996
709025
  transcript: normalizeMessagesForAPI(messages),
708997
709026
  errors: sanitizedErrors,
708998
709027
  lastApiRequest: getLastAPIRequest(),
@@ -709175,7 +709204,7 @@ function Feedback({
709175
709204
  ", ",
709176
709205
  env4.terminal,
709177
709206
  ", v",
709178
- "4.2.24"
709207
+ "4.2.25"
709179
709208
  ]
709180
709209
  })
709181
709210
  ]
@@ -709272,7 +709301,7 @@ ${sanitizedDescription}
709272
709301
  ` + `**Environment Info**
709273
709302
  ` + `- Platform: ${env4.platform}
709274
709303
  ` + `- Terminal: ${env4.terminal}
709275
- ` + `- Version: ${"4.2.24"}
709304
+ ` + `- Version: ${"4.2.25"}
709276
709305
  ` + `- Feedback ID: ${feedbackId}
709277
709306
  ` + `
709278
709307
  **Errors**
@@ -711511,7 +711540,7 @@ function buildPrimarySection() {
711511
711540
  children: t("settings.status.renameHint")
711512
711541
  });
711513
711542
  return [
711514
- { label: t("settings.status.version"), value: "4.2.24" },
711543
+ { label: t("settings.status.version"), value: "4.2.25" },
711515
711544
  { label: t("settings.status.sessionName"), value: nameValue },
711516
711545
  { label: t("settings.status.sessionId"), value: sessionId },
711517
711546
  { label: t("settings.status.cwd"), value: getCwd() },
@@ -714369,7 +714398,7 @@ function Config({
714369
714398
  }
714370
714399
  })
714371
714400
  }) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_runtime191.jsx(ChannelDowngradeDialog, {
714372
- currentVersion: "4.2.24",
714401
+ currentVersion: "4.2.25",
714373
714402
  onChoice: (choice) => {
714374
714403
  setShowSubmenu(null);
714375
714404
  setTabsHidden(false);
@@ -714381,7 +714410,7 @@ function Config({
714381
714410
  autoUpdatesChannel: "stable"
714382
714411
  };
714383
714412
  if (choice === "stay") {
714384
- newSettings.minimumVersion = "4.2.24";
714413
+ newSettings.minimumVersion = "4.2.25";
714385
714414
  }
714386
714415
  updateSettingsForSource("userSettings", newSettings);
714387
714416
  setSettingsData((prev) => ({
@@ -719850,7 +719879,7 @@ function HelpV2({ onClose, commands: commands11 }) {
719850
719879
  color: "professionalBlue",
719851
719880
  children: [
719852
719881
  /* @__PURE__ */ jsx_runtime218.jsx(Tabs, {
719853
- title: process.env.USER_TYPE === "sf" ? "/help" : `CoStrict v${"4.2.24"}`,
719882
+ title: process.env.USER_TYPE === "sf" ? "/help" : `CoStrict v${"4.2.25"}`,
719854
719883
  color: "professionalBlue",
719855
719884
  defaultTab: "general",
719856
719885
  children: tabs
@@ -742851,7 +742880,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
742851
742880
  return [];
742852
742881
  }
742853
742882
  }
742854
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.24") {
742883
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.25") {
742855
742884
  if (process.env.USER_TYPE === "sf") {
742856
742885
  const changelog = "";
742857
742886
  if (changelog) {
@@ -742878,7 +742907,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.24")
742878
742907
  releaseNotes
742879
742908
  };
742880
742909
  }
742881
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "4.2.24") {
742910
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "4.2.25") {
742882
742911
  if (process.env.USER_TYPE === "sf") {
742883
742912
  const changelog = "";
742884
742913
  if (changelog) {
@@ -745391,7 +745420,7 @@ function isNotLoggedIn() {
745391
745420
  return true;
745392
745421
  }
745393
745422
  function getLogoDisplayData() {
745394
- const version10 = process.env.DEMO_VERSION ?? "4.2.24";
745423
+ const version10 = process.env.DEMO_VERSION ?? "4.2.25";
745395
745424
  const serverUrl = getDirectConnectServerUrl();
745396
745425
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
745397
745426
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -745969,7 +745998,7 @@ var init_MatrixMessageLine = __esm(() => {
745969
745998
  // src/components/matrix-tactical/MatrixWelcome.tsx
745970
745999
  import { basename as basename47 } from "path";
745971
746000
  function MatrixWelcome({
745972
- version: version10 = "4.2.24",
746001
+ version: version10 = "4.2.25",
745973
746002
  projectName,
745974
746003
  cwd: cwd2,
745975
746004
  modelDisplayName,
@@ -746604,13 +746633,13 @@ function LogoV2() {
746604
746633
  const { hasReleaseNotes } = checkForReleaseNotesSync(config13.lastReleaseNotesSeen);
746605
746634
  import_react167.useEffect(() => {
746606
746635
  const currentConfig = getGlobalConfig();
746607
- if (currentConfig.lastReleaseNotesSeen === "4.2.24") {
746636
+ if (currentConfig.lastReleaseNotesSeen === "4.2.25") {
746608
746637
  return;
746609
746638
  }
746610
746639
  saveGlobalConfig((current2) => {
746611
- if (current2.lastReleaseNotesSeen === "4.2.24")
746640
+ if (current2.lastReleaseNotesSeen === "4.2.25")
746612
746641
  return current2;
746613
- return { ...current2, lastReleaseNotesSeen: "4.2.24" };
746642
+ return { ...current2, lastReleaseNotesSeen: "4.2.25" };
746614
746643
  });
746615
746644
  if (showOnboarding) {
746616
746645
  incrementProjectOnboardingSeenCount();
@@ -769140,7 +769169,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
769140
769169
  smapsRollup,
769141
769170
  platform: process.platform,
769142
769171
  nodeVersion: process.version,
769143
- ccVersion: "4.2.24"
769172
+ ccVersion: "4.2.25"
769144
769173
  };
769145
769174
  }
769146
769175
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -769256,7 +769285,7 @@ var init_mock_limits = __esm(() => {
769256
769285
  var call55 = async () => {
769257
769286
  return {
769258
769287
  type: "text",
769259
- value: `${"4.2.24"} (built ${"2026-08-04T09:20:56.936Z"})`
769288
+ value: `${"4.2.25"} (built ${"2026-08-06T08:23:07.527Z"})`
769260
769289
  };
769261
769290
  }, version10, version_default;
769262
769291
  var init_version2 = __esm(() => {
@@ -787223,7 +787252,7 @@ function generateHtmlReport(data, insights) {
787223
787252
  </html>`;
787224
787253
  }
787225
787254
  function buildExportData(data, insights, facets, remoteStats) {
787226
- const version11 = typeof MACRO !== "undefined" ? "4.2.24" : "unknown";
787255
+ const version11 = typeof MACRO !== "undefined" ? "4.2.25" : "unknown";
787227
787256
  const remote_hosts_collected = remoteStats?.hosts.filter((h8) => h8.sessionCount > 0).map((h8) => h8.name);
787228
787257
  const facets_summary = {
787229
787258
  total: facets.size,
@@ -791673,7 +791702,7 @@ var init_sessionStorage = __esm(() => {
791673
791702
  init_settings2();
791674
791703
  init_slowOperations();
791675
791704
  init_uuid();
791676
- VERSION11 = typeof MACRO !== "undefined" ? "4.2.24" : "unknown";
791705
+ VERSION11 = typeof MACRO !== "undefined" ? "4.2.25" : "unknown";
791677
791706
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
791678
791707
  SKIP_FIRST_PROMPT_PATTERN2 = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
791679
791708
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -793014,7 +793043,7 @@ var init_filesystem = __esm(() => {
793014
793043
  });
793015
793044
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
793016
793045
  const nonce = randomBytes24(16).toString("hex");
793017
- return join204(getCostrictTempDir(), "bundled-skills", "4.2.24", nonce);
793046
+ return join204(getCostrictTempDir(), "bundled-skills", "4.2.25", nonce);
793018
793047
  });
793019
793048
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
793020
793049
  });
@@ -799284,7 +799313,7 @@ function computeFingerprint(messageText, version11) {
799284
799313
  }
799285
799314
  function computeFingerprintFromMessages(messages) {
799286
799315
  const firstMessageText = extractFirstMessageText(messages);
799287
- return computeFingerprint(firstMessageText, "4.2.24");
799316
+ return computeFingerprint(firstMessageText, "4.2.25");
799288
799317
  }
799289
799318
  var FINGERPRINT_SALT = "59cf53e54c78";
799290
799319
  var init_fingerprint = () => {};
@@ -799694,7 +799723,7 @@ function getAnthropicEnvMetadata() {
799694
799723
  function getBuildAgeMinutes() {
799695
799724
  if (false)
799696
799725
  ;
799697
- const buildTime = new Date("2026-08-04T09:20:56.936Z").getTime();
799726
+ const buildTime = new Date("2026-08-06T08:23:07.527Z").getTime();
799698
799727
  if (isNaN(buildTime))
799699
799728
  return;
799700
799729
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -805218,7 +805247,7 @@ async function sideQuery(opts) {
805218
805247
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
805219
805248
  }
805220
805249
  const messageText = extractFirstUserMessageText(messages);
805221
- const fingerprint = computeFingerprint(messageText, "4.2.24");
805250
+ const fingerprint = computeFingerprint(messageText, "4.2.25");
805222
805251
  const attributionHeader = getAttributionHeader(fingerprint);
805223
805252
  const systemBlocks = [
805224
805253
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -808614,7 +808643,7 @@ function buildSystemInitMessage(inputs) {
808614
808643
  slash_commands: inputs.commands.filter((c10) => c10.userInvocable !== false).map((c10) => c10.name),
808615
808644
  apiKeySource: getAnthropicApiKeyWithSource().source,
808616
808645
  betas: getSdkBetas(),
808617
- claude_code_version: "4.2.24",
808646
+ claude_code_version: "4.2.25",
808618
808647
  output_style: outputStyle2,
808619
808648
  agents: inputs.agents.map((agent) => agent.agentType),
808620
808649
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -812158,7 +812187,7 @@ function appendToLog(path57, message2) {
812158
812187
  cwd: getFsImplementation().cwd(),
812159
812188
  userType: process.env.USER_TYPE,
812160
812189
  sessionId: getSessionId(),
812161
- version: "4.2.24"
812190
+ version: "4.2.25"
812162
812191
  };
812163
812192
  getLogWriter(path57).write(messageWithTimestamp);
812164
812193
  }
@@ -833214,7 +833243,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
833214
833243
  project_dir: getOriginalCwd(),
833215
833244
  added_dirs: addedDirs
833216
833245
  },
833217
- version: "4.2.24",
833246
+ version: "4.2.25",
833218
833247
  output_style: {
833219
833248
  name: outputStyleName
833220
833249
  },
@@ -850394,6 +850423,8 @@ function formatActivityText(activity) {
850394
850423
  function AgentRow2({ task, selected }) {
850395
850424
  const { columns } = useTerminalSize();
850396
850425
  const elapsed = useElapsedTime(task.startTime, task.status === "running", 1000, task.totalPausedMs ?? 0, task.endTime);
850426
+ const mainLoopModel = useMainLoopModel();
850427
+ const permissionMode = useAppState((s) => s.toolPermissionContext.mode);
850397
850428
  const tokens = task.progress?.tokenCount ?? 0;
850398
850429
  const isRunning2 = task.status === "running";
850399
850430
  const isCompleted = task.status === "completed";
@@ -850402,8 +850433,8 @@ function AgentRow2({ task, selected }) {
850402
850433
  const toolUseCount = task.progress?.toolUseCount ?? 0;
850403
850434
  const [theme2] = useTheme();
850404
850435
  const isMatrix = isMatrixTacticalTheme(theme2);
850405
- const hasModelForCtx = agentModel && agentModel !== "inherit";
850406
- const contextWindowSize = hasModelForCtx ? getContextWindowForModel(agentModel) : 200000;
850436
+ const resolvedAgentModel = getAgentModel(agentModel, mainLoopModel, undefined, permissionMode);
850437
+ const contextWindowSize = getContextWindowForModel(resolvedAgentModel);
850407
850438
  const contextPercentages = calculateContextPercentages(tokens > 0 ? { input_tokens: tokens, cache_creation_input_tokens: 0, cache_read_input_tokens: 0 } : null, contextWindowSize);
850408
850439
  const ctxPct = contextPercentages.used;
850409
850440
  const elapsedMs = (task.endTime ?? Date.now()) - task.startTime - (task.totalPausedMs ?? 0);
@@ -850681,10 +850712,12 @@ var init_BackgroundAgentSelector = __esm(() => {
850681
850712
  init_src();
850682
850713
  init_useBackgroundAgentTasks();
850683
850714
  init_useElapsedTime();
850715
+ init_useMainLoopModel();
850684
850716
  init_useTerminalSize2();
850685
850717
  init_AppState();
850686
850718
  init_format2();
850687
850719
  init_context();
850720
+ init_agent();
850688
850721
  init_locales2();
850689
850722
  init_matrixTacticalPresentation();
850690
850723
  jsx_runtime456 = __toESM(require_jsx_runtime(), 1);
@@ -851839,7 +851872,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
851839
851872
  } catch {}
851840
851873
  const data = {
851841
851874
  trigger,
851842
- version: "4.2.24",
851875
+ version: "4.2.25",
851843
851876
  platform: process.platform,
851844
851877
  transcript,
851845
851878
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -853094,7 +853127,7 @@ function getReleaseType(current2, latest) {
853094
853127
  return "patch";
853095
853128
  }
853096
853129
  async function checkNewAutoUpdate(callbacks) {
853097
- const currentVersion = "4.2.24";
853130
+ const currentVersion = "4.2.25";
853098
853131
  logForDebugging(`[newAutoUpdater] checking, current: ${currentVersion}`);
853099
853132
  if (isNewAutoUpdaterDisabled()) {
853100
853133
  return { action: "skip", currentVersion, latestVersion: null };
@@ -864317,7 +864350,7 @@ function WelcomeV2() {
864317
864350
  dimColor: true,
864318
864351
  children: [
864319
864352
  "v",
864320
- "4.2.24",
864353
+ "4.2.25",
864321
864354
  " "
864322
864355
  ]
864323
864356
  })
@@ -864383,7 +864416,7 @@ function WelcomeV2() {
864383
864416
  dimColor: true,
864384
864417
  children: [
864385
864418
  "v",
864386
- "4.2.24",
864419
+ "4.2.25",
864387
864420
  " "
864388
864421
  ]
864389
864422
  })
@@ -864485,7 +864518,7 @@ function AppleTerminalWelcomeV2({ theme: theme2, welcomeMessage }) {
864485
864518
  dimColor: true,
864486
864519
  children: [
864487
864520
  "v",
864488
- "4.2.24",
864521
+ "4.2.25",
864489
864522
  " "
864490
864523
  ]
864491
864524
  })
@@ -864551,7 +864584,7 @@ function AppleTerminalWelcomeV2({ theme: theme2, welcomeMessage }) {
864551
864584
  dimColor: true,
864552
864585
  children: [
864553
864586
  "v",
864554
- "4.2.24",
864587
+ "4.2.25",
864555
864588
  " "
864556
864589
  ]
864557
864590
  })
@@ -865491,7 +865524,7 @@ function completeOnboarding() {
865491
865524
  saveGlobalConfig((current2) => ({
865492
865525
  ...current2,
865493
865526
  hasCompletedOnboarding: true,
865494
- lastOnboardingVersion: "4.2.24"
865527
+ lastOnboardingVersion: "4.2.25"
865495
865528
  }));
865496
865529
  }
865497
865530
  function showDialog(root9, renderer) {
@@ -880573,7 +880606,7 @@ async function startMCPServer(cwd3, debug5, verbose) {
880573
880606
  setCwd(cwd3);
880574
880607
  const server2 = new Server({
880575
880608
  name: "claude/tengu",
880576
- version: "4.2.24"
880609
+ version: "4.2.25"
880577
880610
  }, {
880578
880611
  capabilities: {
880579
880612
  tools: {}
@@ -882858,7 +882891,7 @@ function createHealthRoutes(sessionManager) {
882858
882891
  const uptime2 = process.uptime() * 1000;
882859
882892
  return c10.json({
882860
882893
  status: "ok",
882861
- version: "4.2.24",
882894
+ version: "4.2.25",
882862
882895
  uptime_ms: Math.round(uptime2),
882863
882896
  active_sessions: sessionManager.getActiveCount()
882864
882897
  });
@@ -883130,7 +883163,7 @@ function getMacroDefines() {
883130
883163
  commit = execSync3("git rev-parse --short HEAD", { encoding: "utf-8", cwd: __dirname }).trim();
883131
883164
  } catch {}
883132
883165
  return {
883133
- "MACRO.VERSION": JSON.stringify("4.2.24"),
883166
+ "MACRO.VERSION": JSON.stringify("4.2.25"),
883134
883167
  "MACRO.BUILD_TIME": JSON.stringify(new Date().toISOString()),
883135
883168
  "MACRO.COMMIT": JSON.stringify(commit),
883136
883169
  "MACRO.FEEDBACK_CHANNEL": JSON.stringify(""),
@@ -883154,6 +883187,7 @@ var init_defines = __esm(() => {
883154
883187
  "PROMPT_CACHE_BREAK_DETECTION",
883155
883188
  "TOKEN_BUDGET",
883156
883189
  "AGENT_TRIGGERS",
883190
+ "NESTED_AGENT_CALLS",
883157
883191
  "ULTRATHINK",
883158
883192
  "BUILTIN_EXPLORE_PLAN_AGENTS",
883159
883193
  "LODESTONE",
@@ -883977,6 +884011,7 @@ function ssePrompt(handle, id, content, c10, eventBus, parts, messageID) {
883977
884011
  });
883978
884012
  try {
883979
884013
  eventBus.publish("session.status", {
884014
+ session_id: id,
883980
884015
  sessionID: id,
883981
884016
  status: { type: "busy" }
883982
884017
  });
@@ -884137,6 +884172,8 @@ function createSessionRoutes(sessionManager, eventBus) {
884137
884172
  });
884138
884173
  const historyIds = new Set(historySessions.map((s) => s.sessionId));
884139
884174
  for (const handle of sessionManager.getAllSessions()) {
884175
+ if (!handle.prompted)
884176
+ continue;
884140
884177
  if (!historyIds.has(handle.sessionId)) {
884141
884178
  if (canonicalDir) {
884142
884179
  const handleCwd = await canonicalizePath(handle.cwd).catch(() => handle.cwd);
@@ -884427,6 +884464,7 @@ function createSessionRoutes(sessionManager, eventBus) {
884427
884464
  throw badRequest("content is required");
884428
884465
  }
884429
884466
  eventBus.publish("session.status", {
884467
+ session_id: id,
884430
884468
  sessionID: id,
884431
884469
  status: { type: "busy" }
884432
884470
  });
@@ -884436,6 +884474,7 @@ function createSessionRoutes(sessionManager, eventBus) {
884436
884474
  handle = await getOrResumeSession(id);
884437
884475
  } catch (err3) {
884438
884476
  eventBus.publish("session.status", {
884477
+ session_id: id,
884439
884478
  sessionID: id,
884440
884479
  status: { type: "idle" }
884441
884480
  });
@@ -884477,6 +884516,7 @@ function createSessionRoutes(sessionManager, eventBus) {
884477
884516
  });
884478
884517
  }
884479
884518
  eventBus.publish("session.status", {
884519
+ session_id: id,
884480
884520
  sessionID: id,
884481
884521
  status: { type: "idle" }
884482
884522
  });
@@ -884488,6 +884528,7 @@ function createSessionRoutes(sessionManager, eventBus) {
884488
884528
  const handle = sessionManager.getSession(id);
884489
884529
  if (!handle) {
884490
884530
  eventBus.publish("session.status", {
884531
+ session_id: id,
884491
884532
  sessionID: id,
884492
884533
  status: { type: "idle" }
884493
884534
  });
@@ -884510,6 +884551,7 @@ function createSessionRoutes(sessionManager, eventBus) {
884510
884551
  throw badRequest("command is required");
884511
884552
  const cmdParts = "/" + [body.command, body.arguments].filter(Boolean).join(" ");
884512
884553
  eventBus.publish("session.status", {
884554
+ session_id: id,
884513
884555
  sessionID: id,
884514
884556
  status: { type: "busy" }
884515
884557
  });
@@ -884532,6 +884574,7 @@ function createSessionRoutes(sessionManager, eventBus) {
884532
884574
  handle.prompt(cmdParts).catch(() => {});
884533
884575
  } catch (err3) {
884534
884576
  eventBus.publish("session.status", {
884577
+ session_id: id,
884535
884578
  sessionID: id,
884536
884579
  status: { type: "idle" }
884537
884580
  });
@@ -884561,6 +884604,7 @@ function createSessionRoutes(sessionManager, eventBus) {
884561
884604
  if (handle.prompting)
884562
884605
  throw conflict("session is already processing a prompt");
884563
884606
  eventBus.publish("session.status", {
884607
+ session_id: id,
884564
884608
  sessionID: id,
884565
884609
  status: { type: "busy" }
884566
884610
  });
@@ -887524,7 +887568,8 @@ class EventBus {
887524
887568
  continue;
887525
887569
  }
887526
887570
  if (client10.sessionIdFilter) {
887527
- if (dataObj?.session_id && dataObj.session_id !== client10.sessionIdFilter) {
887571
+ const eventSessionId = dataObj?.session_id ?? dataObj?.sessionID;
887572
+ if (eventSessionId && eventSessionId !== client10.sessionIdFilter) {
887528
887573
  continue;
887529
887574
  }
887530
887575
  }
@@ -888296,6 +888341,7 @@ ${stderrTail}` : baseMessage;
888296
888341
  if (this._silent)
888297
888342
  return;
888298
888343
  this.eventBus.publish("session.status", {
888344
+ session_id: this.sessionId,
888299
888345
  sessionID: this.sessionId,
888300
888346
  status: this._busyStatus
888301
888347
  });
@@ -888815,16 +888861,48 @@ class SessionManager {
888815
888861
  try {
888816
888862
  const raw2 = await readFile93(path60, "utf-8");
888817
888863
  const index2 = JSON.parse(raw2);
888818
- for (const [key6, entry] of Object.entries(index2)) {
888819
- this.loadedIndex.set(key6, entry);
888864
+ const entries = Object.entries(index2);
888865
+ const verdicts = await Promise.all(entries.map(async ([, entry]) => {
888866
+ if (entry.customTitle !== undefined)
888867
+ return false;
888868
+ if (entry.createdAt !== undefined && entry.createdAt === entry.lastActiveAt) {
888869
+ return true;
888870
+ }
888871
+ return await this.isTranscriptEmpty(entry);
888872
+ }));
888873
+ let pruned = false;
888874
+ for (let i10 = 0;i10 < entries.length; i10++) {
888875
+ if (verdicts[i10]) {
888876
+ pruned = true;
888877
+ continue;
888878
+ }
888879
+ this.loadedIndex.set(entries[i10][0], entries[i10][1]);
888820
888880
  }
888881
+ if (pruned)
888882
+ this.scheduleIndexSave();
888821
888883
  } catch (err3) {
888822
888884
  logError3(err3);
888823
888885
  }
888824
888886
  }
888887
+ async isTranscriptEmpty(entry) {
888888
+ if (!entry.cwd)
888889
+ return false;
888890
+ const sessionFile = `${entry.sessionId}.jsonl`;
888891
+ for (const projectsDir of getAllProjectsDirs()) {
888892
+ const projectDir = join236(projectsDir, sanitizePath(entry.cwd));
888893
+ const filePath = join236(projectDir, sessionFile);
888894
+ const lite = await readSessionLite(filePath);
888895
+ if (!lite)
888896
+ continue;
888897
+ return !extractFirstPromptFromHead(lite.head) && !extractFirstPromptFromHead(lite.tail);
888898
+ }
888899
+ return true;
888900
+ }
888825
888901
  async saveIndex() {
888826
888902
  const index2 = Object.fromEntries(this.loadedIndex);
888827
888903
  for (const [key6, handle] of this.sessions) {
888904
+ if (!handle.prompted)
888905
+ continue;
888828
888906
  index2[key6] = this.toIndexEntry(handle);
888829
888907
  }
888830
888908
  const dir = getClaudeConfigHomeDir();
@@ -890130,7 +890208,7 @@ __export(exports_update, {
890130
890208
  });
890131
890209
  async function update() {
890132
890210
  logEvent("tengu_update_check", {});
890133
- writeToStdout(`${t("cli.update.currentVersion", "Current version")}: ${"4.2.24"}
890211
+ writeToStdout(`${t("cli.update.currentVersion", "Current version")}: ${"4.2.25"}
890134
890212
  `);
890135
890213
  const channel5 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
890136
890214
  writeToStdout(`${t("cli.update.checkingUpdates", { channel: channel5 }, "Checking for updates to {channel} version...")}
@@ -890205,8 +890283,8 @@ async function update() {
890205
890283
  writeToStdout(`${t("cli.update.managedByHomebrew", "CoStrict is managed by Homebrew.")}
890206
890284
  `);
890207
890285
  const latest = await getLatestVersion(channel5);
890208
- if (latest && !gte2("4.2.24", latest)) {
890209
- writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.24", latest }, "Update available: {current} \u2192 {latest}")}
890286
+ if (latest && !gte2("4.2.25", latest)) {
890287
+ writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.25", latest }, "Update available: {current} \u2192 {latest}")}
890210
890288
  `);
890211
890289
  writeToStdout(`
890212
890290
  `);
@@ -890222,8 +890300,8 @@ async function update() {
890222
890300
  writeToStdout(`${t("cli.update.managedByWinget", "CoStrict is managed by winget.")}
890223
890301
  `);
890224
890302
  const latest = await getLatestVersion(channel5);
890225
- if (latest && !gte2("4.2.24", latest)) {
890226
- writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.24", latest }, "Update available: {current} \u2192 {latest}")}
890303
+ if (latest && !gte2("4.2.25", latest)) {
890304
+ writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.25", latest }, "Update available: {current} \u2192 {latest}")}
890227
890305
  `);
890228
890306
  writeToStdout(`
890229
890307
  `);
@@ -890239,8 +890317,8 @@ async function update() {
890239
890317
  writeToStdout(`${t("cli.update.managedByApk", "CoStrict is managed by apk.")}
890240
890318
  `);
890241
890319
  const latest = await getLatestVersion(channel5);
890242
- if (latest && !gte2("4.2.24", latest)) {
890243
- writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.24", latest }, "Update available: {current} \u2192 {latest}")}
890320
+ if (latest && !gte2("4.2.25", latest)) {
890321
+ writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.25", latest }, "Update available: {current} \u2192 {latest}")}
890244
890322
  `);
890245
890323
  writeToStdout(`
890246
890324
  `);
@@ -890305,11 +890383,11 @@ async function update() {
890305
890383
  `);
890306
890384
  await gracefulShutdown(1);
890307
890385
  }
890308
- if (result2.latestVersion === "4.2.24") {
890309
- writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.24" }, "CoStrict is up to date ({version})")) + `
890386
+ if (result2.latestVersion === "4.2.25") {
890387
+ writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.25" }, "CoStrict is up to date ({version})")) + `
890310
890388
  `);
890311
890389
  } else {
890312
- writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.24", to: String(result2.latestVersion) }, "Successfully updated from {from} to version {to}")) + `
890390
+ writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.25", to: String(result2.latestVersion) }, "Successfully updated from {from} to version {to}")) + `
890313
890391
  `);
890314
890392
  regenerateCompletionCache();
890315
890393
  }
@@ -890369,12 +890447,12 @@ async function update() {
890369
890447
  `);
890370
890448
  await gracefulShutdown(1);
890371
890449
  }
890372
- if (latestVersion === "4.2.24") {
890373
- writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.24" }, "CoStrict is up to date ({version})")) + `
890450
+ if (latestVersion === "4.2.25") {
890451
+ writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.25" }, "CoStrict is up to date ({version})")) + `
890374
890452
  `);
890375
890453
  await gracefulShutdown(0);
890376
890454
  }
890377
- writeToStdout(`${t("cli.update.newVersionAvailable", { latest: String(latestVersion), current: "4.2.24" }, "New version available: {latest} (current: {current})")}
890455
+ writeToStdout(`${t("cli.update.newVersionAvailable", { latest: String(latestVersion), current: "4.2.25" }, "New version available: {latest} (current: {current})")}
890378
890456
  `);
890379
890457
  writeToStdout(`${t("cli.update.installing", "Installing update...")}
890380
890458
  `);
@@ -890419,7 +890497,7 @@ async function update() {
890419
890497
  logForDebugging(`update: Installation status: ${result.status}`);
890420
890498
  switch (result.status) {
890421
890499
  case "success":
890422
- writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.24", to: String(latestVersion) }, "Successfully updated from {from} to version {to}")) + `
890500
+ writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.25", to: String(latestVersion) }, "Successfully updated from {from} to version {to}")) + `
890423
890501
  `);
890424
890502
  regenerateCompletionCache();
890425
890503
  break;
@@ -892623,7 +892701,7 @@ ${assistantAddendum}` : assistantAddendum;
892623
892701
  }
892624
892702
  }
892625
892703
  logForDiagnosticsNoPII("info", "started", {
892626
- version: "4.2.24",
892704
+ version: "4.2.25",
892627
892705
  is_native_binary: isInBundledMode()
892628
892706
  });
892629
892707
  registerCleanup(async () => {
@@ -893114,7 +893192,7 @@ Session: ${directConnectConfig.sessionId}`, "info");
893114
893192
  sshSession = await createSSHSession2({
893115
893193
  host: _pendingSSH.host,
893116
893194
  cwd: _pendingSSH.cwd,
893117
- localVersion: "4.2.24",
893195
+ localVersion: "4.2.25",
893118
893196
  permissionMode: _pendingSSH.permissionMode,
893119
893197
  dangerouslySkipPermissions: _pendingSSH.dangerouslySkipPermissions,
893120
893198
  extraCliArgs: _pendingSSH.extraCliArgs,
@@ -893583,7 +893661,7 @@ Usage: csc --remote "your task description"`, () => gracefulShutdown(1));
893583
893661
  pendingHookMessages
893584
893662
  }, renderAndRun);
893585
893663
  }
893586
- }).version("4.2.24 (CoStrict)", "-v, --version", cliDesc("cli.option.version", "Output the version number"));
893664
+ }).version("4.2.25 (CoStrict)", "-v, --version", cliDesc("cli.option.version", "Output the version number"));
893587
893665
  program2.addOption(new Option("-w, --worktree [name]", cliDesc("cli.option.worktree", "Create a new git worktree for this session (optionally specify a name)")).hideHelp());
893588
893666
  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());
893589
893667
  if (canUserConfigureAdvisor()) {
@@ -894326,10 +894404,10 @@ if (process.env.CLAUDE_CODE_REMOTE === "true") {
894326
894404
  async function main2() {
894327
894405
  const args = process.argv.slice(2);
894328
894406
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
894329
- const d7 = new Date("2026-08-04T09:20:56.936Z");
894407
+ const d7 = new Date("2026-08-06T08:23:07.527Z");
894330
894408
  const p2 = (n3) => String(n3).padStart(2, "0");
894331
894409
  const buildTime = `${d7.getFullYear()}/${p2(d7.getMonth() + 1)}/${p2(d7.getDate())} ${p2(d7.getHours())}:${p2(d7.getMinutes())}:${p2(d7.getSeconds())}`;
894332
- console.log(`${"4.2.24"} (commit: ${"bf82163cc"}, built: ${buildTime})`);
894410
+ console.log(`${"4.2.25"} (commit: ${"ae28cc389"}, built: ${buildTime})`);
894333
894411
  return;
894334
894412
  }
894335
894413
  let stopServeParentWatchdog;
@@ -894505,5 +894583,5 @@ async function main2() {
894505
894583
  }
894506
894584
  main2();
894507
894585
 
894508
- //# debugId=D85CD535754BCE3164756E2164756E21
894586
+ //# debugId=E8D8BB321B69A0B564756E2164756E21
894509
894587
 
@@ -736,8 +736,8 @@ function getClientVersion() {
736
736
  if (cached)
737
737
  return cached;
738
738
  try {
739
- if ("4.2.24") {
740
- cached = "4.2.24";
739
+ if ("4.2.25") {
740
+ cached = "4.2.25";
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.24",
138560
+ appVersion: "4.2.25",
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.24".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
138847
+ const match = "4.2.25".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.24",
138887
+ version: "4.2.25",
138888
138888
  versionBase: getVersionBase(),
138889
- buildTime: "2026-08-04T09:20:59.781Z",
138889
+ buildTime: "2026-08-06T08:23:09.793Z",
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=3B86544BA0122FB764756E2164756E21
143227
+ //# debugId=29200D3432A7B6E564756E2164756E21
143228
143228
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@costrict/csc",
3
- "version": "4.2.24",
3
+ "version": "4.2.25",
4
4
  "description": "costrict",
5
5
  "type": "module",
6
6
  "author": "costrict",