@costrict/csc 4.2.36 → 4.2.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.js +326 -163
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -31759,8 +31759,8 @@ function getClientVersion() {
31759
31759
  if (cached)
31760
31760
  return cached;
31761
31761
  try {
31762
- if ("4.2.36") {
31763
- cached = "4.2.36";
31762
+ if ("4.2.38") {
31763
+ cached = "4.2.38";
31764
31764
  return cached;
31765
31765
  }
31766
31766
  } catch {}
@@ -31810,7 +31810,8 @@ __export(exports_token, {
31810
31810
  refreshCoStrictToken: () => refreshCoStrictToken,
31811
31811
  parseJWT: () => parseJWT,
31812
31812
  isCoStrictTokenValid: () => isCoStrictTokenValid,
31813
- extractExpiryFromJWT: () => extractExpiryFromJWT
31813
+ extractExpiryFromJWT: () => extractExpiryFromJWT,
31814
+ CoStrictAuthTerminalError: () => CoStrictAuthTerminalError
31814
31815
  });
31815
31816
  function parseJWT(token) {
31816
31817
  const parts = token.split(".");
@@ -31881,22 +31882,28 @@ async function refreshCoStrictToken(params) {
31881
31882
  try {
31882
31883
  parsed = JSON.parse(raw);
31883
31884
  } catch {
31884
- throw new Error(formatRefreshError(response.status, null, raw));
31885
+ throw new CoStrictAuthTerminalError(formatRefreshError(response.status, null, raw));
31885
31886
  }
31886
31887
  const tokens = unwrapCoStrictRefreshResponse(parsed);
31887
31888
  if (!tokens) {
31888
31889
  const serverFailed = isRecord(parsed) && parsed.success === false;
31889
- throw new Error(formatRefreshError(response.status, parsed, raw) + (serverFailed ? "" : ": Token refresh response is missing required fields"));
31890
+ throw new CoStrictAuthTerminalError(formatRefreshError(response.status, parsed, raw) + (serverFailed ? "" : ": Token refresh response is missing required fields"));
31890
31891
  }
31891
31892
  if (!response.ok) {
31892
- throw new Error(formatRefreshError(response.status, parsed, raw));
31893
+ throw new CoStrictAuthTerminalError(formatRefreshError(response.status, parsed, raw));
31893
31894
  }
31894
31895
  return tokens;
31895
31896
  }
31896
- var ACCESS_TOKEN_REFRESH_BUFFER_MS;
31897
+ var ACCESS_TOKEN_REFRESH_BUFFER_MS, CoStrictAuthTerminalError;
31897
31898
  var init_token = __esm(() => {
31898
31899
  init_oauth_params();
31899
31900
  ACCESS_TOKEN_REFRESH_BUFFER_MS = 30 * 60 * 1000;
31901
+ CoStrictAuthTerminalError = class CoStrictAuthTerminalError extends Error {
31902
+ constructor(message) {
31903
+ super(message);
31904
+ this.name = "CoStrictAuthTerminalError";
31905
+ }
31906
+ };
31900
31907
  });
31901
31908
 
31902
31909
  // src/costrict/provider/auth.ts
@@ -224369,7 +224376,7 @@ async function fetchCoStrictModels(baseUrl, accessToken) {
224369
224376
  headers: {
224370
224377
  Authorization: `Bearer ${accessToken}`,
224371
224378
  Accept: "application/json",
224372
- "User-Agent": `csc/${"4.2.36"}`
224379
+ "User-Agent": `csc/${"4.2.38"}`
224373
224380
  },
224374
224381
  signal: controller.signal
224375
224382
  });
@@ -226409,7 +226416,7 @@ var init_auth7 = __esm(() => {
226409
226416
 
226410
226417
  // src/utils/userAgent.ts
226411
226418
  function getClaudeCodeUserAgent() {
226412
- return `costrict/${"4.2.36"}`;
226419
+ return `costrict/${"4.2.38"}`;
226413
226420
  }
226414
226421
 
226415
226422
  // src/utils/workloadContext.ts
@@ -226431,7 +226438,7 @@ function getUserAgent() {
226431
226438
  const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
226432
226439
  const workload = getWorkload();
226433
226440
  const workloadSuffix = workload ? `, workload/${workload}` : "";
226434
- return `csc/${"4.2.36"}`;
226441
+ return `csc/${"4.2.38"}`;
226435
226442
  }
226436
226443
  function getMCPUserAgent() {
226437
226444
  const parts = [];
@@ -226445,7 +226452,7 @@ function getMCPUserAgent() {
226445
226452
  parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
226446
226453
  }
226447
226454
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
226448
- return `csc/${"4.2.36"}${suffix}`;
226455
+ return `csc/${"4.2.38"}${suffix}`;
226449
226456
  }
226450
226457
  function getWebFetchUserAgent() {
226451
226458
  return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
@@ -226565,7 +226572,7 @@ var init_user = __esm(() => {
226565
226572
  deviceId,
226566
226573
  sessionId: getSessionId(),
226567
226574
  email: getEmail(),
226568
- appVersion: "4.2.36",
226575
+ appVersion: "4.2.38",
226569
226576
  platform: getHostPlatformForAnalytics(),
226570
226577
  organizationUuid,
226571
226578
  accountUuid,
@@ -237613,7 +237620,7 @@ var init_metadata = __esm(() => {
237613
237620
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
237614
237621
  WHITESPACE_REGEX = /\s+/;
237615
237622
  getVersionBase = memoize_default(() => {
237616
- const match = "4.2.36".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
237623
+ const match = "4.2.38".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
237617
237624
  return match ? match[0] : undefined;
237618
237625
  });
237619
237626
  buildEnvContext = memoize_default(async () => {
@@ -237653,9 +237660,9 @@ var init_metadata = __esm(() => {
237653
237660
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
237654
237661
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
237655
237662
  isClaudeAiAuth: isClaudeAISubscriber(),
237656
- version: "4.2.36",
237663
+ version: "4.2.38",
237657
237664
  versionBase: getVersionBase(),
237658
- buildTime: "2026-09-07T00:23:46.056Z",
237665
+ buildTime: "2026-09-14T02:57:33.042Z",
237659
237666
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
237660
237667
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
237661
237668
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -238326,7 +238333,7 @@ function initialize1PEventLogging() {
238326
238333
  const platform3 = getPlatform();
238327
238334
  const attributes = {
238328
238335
  [import_semantic_conventions2.ATTR_SERVICE_NAME]: "claude-code",
238329
- [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "4.2.36"
238336
+ [import_semantic_conventions2.ATTR_SERVICE_VERSION]: "4.2.38"
238330
238337
  };
238331
238338
  if (platform3 === "wsl") {
238332
238339
  const wslVersion = getWslVersion();
@@ -238353,7 +238360,7 @@ function initialize1PEventLogging() {
238353
238360
  })
238354
238361
  ]
238355
238362
  });
238356
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.claude_code.events", "4.2.36");
238363
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.claude_code.events", "4.2.38");
238357
238364
  }
238358
238365
  async function reinitialize1PEventLoggingIfConfigChanged() {
238359
238366
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -278274,7 +278281,8 @@ var exports_tokenManager = {};
278274
278281
  __export(exports_tokenManager, {
278275
278282
  recoverFrom401: () => recoverFrom401,
278276
278283
  ensureValidCredentials: () => ensureValidCredentials,
278277
- _resetInflightRefresh: () => _resetInflightRefresh
278284
+ _resetInflightRefresh: () => _resetInflightRefresh,
278285
+ CoStrictAuthTerminalError: () => CoStrictAuthTerminalError
278278
278286
  });
278279
278287
  function resolveBaseUrl(credentialsBaseUrl) {
278280
278288
  const envUrl = process.env.COSTRICT_BASE_URL;
@@ -278300,25 +278308,25 @@ async function ensureValidCredentials(forceRefresh = false) {
278300
278308
  async function doRefresh(forceRefresh = false) {
278301
278309
  const decision = await updateCredentialsAtomically((creds) => {
278302
278310
  if (!creds) {
278303
- throw new Error(t("errors.costrict.credentialsNotFound"));
278311
+ throw new CoStrictAuthTerminalError(t("errors.costrict.credentialsNotFound"));
278304
278312
  }
278305
278313
  if (!forceRefresh && isCoStrictTokenValid(creds)) {
278306
278314
  return null;
278307
278315
  }
278308
278316
  if (!creds.refresh_token) {
278309
- throw new Error(t("errors.costrict.noRefreshToken"));
278317
+ throw new CoStrictAuthTerminalError(t("errors.costrict.noRefreshToken"));
278310
278318
  }
278311
278319
  return creds;
278312
278320
  });
278313
278321
  if (!decision) {
278314
278322
  const finalCreds = await loadCoStrictCredentials();
278315
278323
  if (!finalCreds) {
278316
- throw new Error(t("errors.costrict.refreshFailed"));
278324
+ throw new CoStrictAuthTerminalError(t("errors.costrict.refreshFailed"));
278317
278325
  }
278318
278326
  return { credentials: finalCreds, refreshed: false };
278319
278327
  }
278320
278328
  if (!decision.refresh_token) {
278321
- throw new Error(t("errors.costrict.noRefreshToken"));
278329
+ throw new CoStrictAuthTerminalError(t("errors.costrict.noRefreshToken"));
278322
278330
  }
278323
278331
  const baseUrl = resolveBaseUrl(decision.base_url);
278324
278332
  const refreshed2 = await refreshCoStrictToken({
@@ -354157,7 +354165,7 @@ function getTelemetryAttributes() {
354157
354165
  attributes["session.id"] = sessionId;
354158
354166
  }
354159
354167
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
354160
- attributes["app.version"] = "4.2.36";
354168
+ attributes["app.version"] = "4.2.38";
354161
354169
  }
354162
354170
  const oauthAccount = getOauthAccountInfo();
354163
354171
  if (oauthAccount) {
@@ -469283,7 +469291,7 @@ function getInstallationEnv() {
469283
469291
  return;
469284
469292
  }
469285
469293
  function getClaudeCodeVersion() {
469286
- return "4.2.36";
469294
+ return "4.2.38";
469287
469295
  }
469288
469296
  async function getInstalledVSCodeExtensionVersion(command4) {
469289
469297
  const { stdout } = await execFileNoThrow(command4, ["--list-extensions", "--show-versions"], {
@@ -523000,7 +523008,7 @@ function initLangfuse() {
523000
523008
  flushInterval: parseInt(process.env.LANGFUSE_FLUSH_INTERVAL ?? "10", 10),
523001
523009
  mask: maskFn,
523002
523010
  environment: process.env.LANGFUSE_TRACING_ENVIRONMENT ?? "development",
523003
- release: "4.2.36",
523011
+ release: "4.2.38",
523004
523012
  exportMode: process.env.LANGFUSE_EXPORT_MODE ?? "batched",
523005
523013
  timeout: parseInt(process.env.LANGFUSE_TIMEOUT ?? "5", 10)
523006
523014
  });
@@ -523559,7 +523567,7 @@ function computeFingerprint(messageText2, version11) {
523559
523567
  }
523560
523568
  function computeFingerprintFromMessages(messages) {
523561
523569
  const firstMessageText = extractFirstMessageText(messages);
523562
- return computeFingerprint(firstMessageText, "4.2.36");
523570
+ return computeFingerprint(firstMessageText, "4.2.38");
523563
523571
  }
523564
523572
  var FINGERPRINT_SALT = "59cf53e54c78";
523565
523573
  var init_fingerprint = () => {};
@@ -524002,7 +524010,27 @@ function toKebabCase(s) {
524002
524010
  function createCoStrictFetch(options) {
524003
524011
  const agentType = toKebabCase(options?.agentType) || "build";
524004
524012
  const costrictFetch = async (input4, init2) => {
524005
- const { credentials: creds } = await ensureValidCredentials();
524013
+ let creds;
524014
+ try {
524015
+ ({ credentials: creds } = await ensureValidCredentials());
524016
+ } catch (authError) {
524017
+ if (authError instanceof CoStrictAuthTerminalError) {
524018
+ logError2(authError);
524019
+ return new Response(JSON.stringify({
524020
+ error: {
524021
+ message: authError.message,
524022
+ type: "authentication_error"
524023
+ }
524024
+ }), {
524025
+ status: 401,
524026
+ headers: {
524027
+ "content-type": "application/json",
524028
+ "x-should-retry": "false"
524029
+ }
524030
+ });
524031
+ }
524032
+ throw authError;
524033
+ }
524006
524034
  const headers = new Headers(init2?.headers);
524007
524035
  headers.set("Authorization", `Bearer ${creds.access_token}`);
524008
524036
  headers.set("User-Agent", `csc/${VERSION9}`);
@@ -524045,6 +524073,7 @@ function createCoStrictFetch(options) {
524045
524073
  var VERSION9;
524046
524074
  var init_fetch2 = __esm(() => {
524047
524075
  init_tokenManager();
524076
+ init_log3();
524048
524077
  init_uuid();
524049
524078
  init_clientVersion();
524050
524079
  VERSION9 = getClientVersion();
@@ -524111,7 +524140,7 @@ async function sideQuery(opts) {
524111
524140
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
524112
524141
  }
524113
524142
  const messageText2 = extractFirstUserMessageText(messages);
524114
- const fingerprint = computeFingerprint(messageText2, "4.2.36");
524143
+ const fingerprint = computeFingerprint(messageText2, "4.2.38");
524115
524144
  const attributionHeader = getAttributionHeader(fingerprint);
524116
524145
  const systemBlocks = [
524117
524146
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -525538,7 +525567,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
525538
525567
  const client10 = new Client({
525539
525568
  name: "claude-code",
525540
525569
  title: "CoStrict",
525541
- version: "4.2.36",
525570
+ version: "4.2.38",
525542
525571
  description: "CoStrict agentic coding tool",
525543
525572
  websiteUrl: PRODUCT_URL
525544
525573
  }, {
@@ -525910,7 +525939,7 @@ var init_client17 = __esm(() => {
525910
525939
  const client10 = new Client({
525911
525940
  name: "claude-code",
525912
525941
  title: "CoStrict",
525913
- version: "4.2.36",
525942
+ version: "4.2.38",
525914
525943
  description: "CoStrict agentic coding tool",
525915
525944
  websiteUrl: PRODUCT_URL
525916
525945
  }, {
@@ -624812,7 +624841,7 @@ function initSentry() {
624812
624841
  }
624813
624842
  init3({
624814
624843
  dsn,
624815
- release: typeof MACRO !== "undefined" ? "4.2.36" : undefined,
624844
+ release: typeof MACRO !== "undefined" ? "4.2.38" : undefined,
624816
624845
  environment: typeof BUILD_ENV !== "undefined" ? BUILD_ENV : "production",
624817
624846
  maxBreadcrumbs: 20,
624818
624847
  sampleRate: 1,
@@ -652461,7 +652490,7 @@ async function initializeBetaTracing(resource) {
652461
652490
  });
652462
652491
  logs.setGlobalLoggerProvider(loggerProvider);
652463
652492
  setLoggerProvider(loggerProvider);
652464
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.36");
652493
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.38");
652465
652494
  setEventLogger(eventLogger);
652466
652495
  process.on("beforeExit", async () => {
652467
652496
  await loggerProvider?.forceFlush();
@@ -652501,7 +652530,7 @@ async function initializeTelemetry() {
652501
652530
  const platform10 = getPlatform();
652502
652531
  const baseAttributes = {
652503
652532
  [import_semantic_conventions29.ATTR_SERVICE_NAME]: "claude-code",
652504
- [import_semantic_conventions29.ATTR_SERVICE_VERSION]: "4.2.36"
652533
+ [import_semantic_conventions29.ATTR_SERVICE_VERSION]: "4.2.38"
652505
652534
  };
652506
652535
  if (platform10 === "wsl") {
652507
652536
  const wslVersion = getWslVersion();
@@ -652546,7 +652575,7 @@ async function initializeTelemetry() {
652546
652575
  } catch {}
652547
652576
  };
652548
652577
  registerCleanup(shutdownTelemetry2);
652549
- return meterProvider2.getMeter("com.anthropic.claude_code", "4.2.36");
652578
+ return meterProvider2.getMeter("com.anthropic.claude_code", "4.2.38");
652550
652579
  }
652551
652580
  const meterProvider = new import_sdk_metrics2.MeterProvider({
652552
652581
  resource,
@@ -652566,7 +652595,7 @@ async function initializeTelemetry() {
652566
652595
  });
652567
652596
  logs.setGlobalLoggerProvider(loggerProvider);
652568
652597
  setLoggerProvider(loggerProvider);
652569
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.36");
652598
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.38");
652570
652599
  setEventLogger(eventLogger);
652571
652600
  logForDebugging("[3P telemetry] Event logger set successfully");
652572
652601
  process.on("beforeExit", async () => {
@@ -652628,7 +652657,7 @@ Current timeout: ${timeoutMs}ms
652628
652657
  }
652629
652658
  };
652630
652659
  registerCleanup(shutdownTelemetry);
652631
- return meterProvider.getMeter("com.anthropic.claude_code", "4.2.36");
652660
+ return meterProvider.getMeter("com.anthropic.claude_code", "4.2.38");
652632
652661
  }
652633
652662
  async function flushTelemetry() {
652634
652663
  const meterProvider = getMeterProvider();
@@ -653598,7 +653627,7 @@ async function installGlobalPackage(specificVersion) {
653598
653627
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
653599
653628
  logEvent("tengu_auto_updater_lock_contention", {
653600
653629
  pid: process.pid,
653601
- currentVersion: "4.2.36"
653630
+ currentVersion: "4.2.38"
653602
653631
  });
653603
653632
  return { status: "in_progress" };
653604
653633
  }
@@ -653607,7 +653636,7 @@ async function installGlobalPackage(specificVersion) {
653607
653636
  if (!env4.isRunningWithBun() && env4.isNpmFromWindowsPath()) {
653608
653637
  logError2(new Error("Windows NPM detected in WSL environment"));
653609
653638
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
653610
- currentVersion: "4.2.36"
653639
+ currentVersion: "4.2.38"
653611
653640
  });
653612
653641
  return {
653613
653642
  status: "install_failed",
@@ -654153,7 +654182,7 @@ function detectLinuxGlobPatternWarnings() {
654153
654182
  }
654154
654183
  async function getDoctorDiagnostic() {
654155
654184
  const installationType = await getCurrentInstallationType();
654156
- const version11 = typeof MACRO !== "undefined" ? "4.2.36" : "unknown";
654185
+ const version11 = typeof MACRO !== "undefined" ? "4.2.38" : "unknown";
654157
654186
  const installationPath = await getInstallationPath();
654158
654187
  const invokedBinary = getInvokedBinary();
654159
654188
  const multipleInstallations = await detectMultipleInstallations();
@@ -655095,8 +655124,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
655095
655124
  const maxVersion = await getMaxVersion();
655096
655125
  if (maxVersion && gt(version11, maxVersion)) {
655097
655126
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version11} to ${maxVersion}`);
655098
- if (gte2("4.2.36", maxVersion)) {
655099
- logForDebugging(`Native installer: current version ${"4.2.36"} is already at or above maxVersion ${maxVersion}, skipping update`);
655127
+ if (gte2("4.2.38", maxVersion)) {
655128
+ logForDebugging(`Native installer: current version ${"4.2.38"} is already at or above maxVersion ${maxVersion}, skipping update`);
655100
655129
  logEvent("tengu_native_update_skipped_max_version", {
655101
655130
  latency_ms: Date.now() - startTime2,
655102
655131
  max_version: maxVersion,
@@ -655107,7 +655136,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
655107
655136
  version11 = maxVersion;
655108
655137
  }
655109
655138
  }
655110
- if (!forceReinstall && version11 === "4.2.36" && await versionIsAvailable(version11) && await isPossibleClaudeBinary(executablePath)) {
655139
+ if (!forceReinstall && version11 === "4.2.38" && await versionIsAvailable(version11) && await isPossibleClaudeBinary(executablePath)) {
655111
655140
  logForDebugging(`Found ${version11} at ${executablePath}, skipping install`);
655112
655141
  logEvent("tengu_native_update_complete", {
655113
655142
  latency_ms: Date.now() - startTime2,
@@ -741354,13 +741383,132 @@ async function getParsedSession(taskDir, sessionId, preferredTranscriptPath) {
741354
741383
  const cacheEntry = sessionMessagesCache.get(cacheKey);
741355
741384
  return cacheEntry;
741356
741385
  }
741357
- var log10, sessionMessagesCache;
741386
+ async function streamSessionStatistics(taskDir, sessionId, opts) {
741387
+ const chunkSize = opts?.chunkSize ?? STREAM_DEFAULT_CHUNK_BYTES;
741388
+ const maxLineBytes = opts?.maxLineBytes ?? STREAM_DEFAULT_MAX_LINE_BYTES;
741389
+ const sessionFile = await resolveTranscriptPath(taskDir, sessionId);
741390
+ if (!sessionFile) {
741391
+ throw new Error(`session transcript not found for session ${sessionId} under ${taskDir}`);
741392
+ }
741393
+ const agg = {
741394
+ lineCount: 0,
741395
+ conversationCount: 0,
741396
+ upstreamTokens: 0,
741397
+ downstreamTokens: 0,
741398
+ firstTimestamp: 0,
741399
+ lastTimestamp: 0,
741400
+ skippedOversizeLines: 0
741401
+ };
741402
+ const consumeLine = (line) => {
741403
+ let value;
741404
+ try {
741405
+ value = JSON.parse(line);
741406
+ } catch {
741407
+ return;
741408
+ }
741409
+ if (value === null)
741410
+ return;
741411
+ agg.lineCount++;
741412
+ if (typeof value !== "object")
741413
+ return;
741414
+ const msg = value;
741415
+ if (msg.type === "user") {
741416
+ agg.conversationCount++;
741417
+ }
741418
+ const usage2 = msg.message?.usage;
741419
+ if (usage2) {
741420
+ agg.upstreamTokens += (usage2.input_tokens ?? 0) + (usage2.cache_read_input_tokens ?? 0) + (usage2.cache_creation_input_tokens ?? 0);
741421
+ agg.downstreamTokens += usage2.output_tokens ?? 0;
741422
+ }
741423
+ if (msg.timestamp) {
741424
+ const ts = new Date(msg.timestamp).getTime();
741425
+ if (agg.firstTimestamp === 0 || ts < agg.firstTimestamp) {
741426
+ agg.firstTimestamp = ts;
741427
+ }
741428
+ if (agg.lastTimestamp === 0 || ts > agg.lastTimestamp) {
741429
+ agg.lastTimestamp = ts;
741430
+ }
741431
+ }
741432
+ };
741433
+ let warnedOversize = false;
741434
+ const noteOversize = () => {
741435
+ agg.skippedOversizeLines++;
741436
+ if (!warnedOversize) {
741437
+ warnedOversize = true;
741438
+ log10.warn("transcript \u5B58\u5728\u8D85\u957F\u884C\uFF0C\u7EDF\u8BA1\u5DF2\u8DF3\u8FC7\u8BE5\u884C", {
741439
+ sessionId,
741440
+ maxLineBytes
741441
+ });
741442
+ }
741443
+ };
741444
+ const fd3 = await fs29.open(sessionFile, "r");
741445
+ try {
741446
+ const chunk = Buffer.allocUnsafe(chunkSize);
741447
+ let carry;
741448
+ let discarding = false;
741449
+ for (;; ) {
741450
+ const { bytesRead } = await fd3.read(chunk, 0, chunkSize, null);
741451
+ if (bytesRead === 0)
741452
+ break;
741453
+ const view = chunk.subarray(0, bytesRead);
741454
+ let buf;
741455
+ let lineStart;
741456
+ if (discarding) {
741457
+ const nl = view.indexOf(10);
741458
+ if (nl === -1)
741459
+ continue;
741460
+ discarding = false;
741461
+ carry = undefined;
741462
+ lineStart = nl + 1;
741463
+ buf = view;
741464
+ } else {
741465
+ buf = carry ? Buffer.concat([carry, view]) : view;
741466
+ lineStart = 0;
741467
+ }
741468
+ for (;; ) {
741469
+ const nl = buf.indexOf(10, lineStart);
741470
+ if (nl === -1)
741471
+ break;
741472
+ if (nl - lineStart > maxLineBytes) {
741473
+ noteOversize();
741474
+ } else {
741475
+ consumeLine(buf.toString("utf8", lineStart, nl));
741476
+ }
741477
+ lineStart = nl + 1;
741478
+ }
741479
+ const tailLen = buf.length - lineStart;
741480
+ if (tailLen > maxLineBytes) {
741481
+ noteOversize();
741482
+ discarding = true;
741483
+ carry = undefined;
741484
+ } else if (tailLen > 0) {
741485
+ carry = Buffer.from(buf.subarray(lineStart));
741486
+ } else {
741487
+ carry = undefined;
741488
+ }
741489
+ }
741490
+ if (!discarding && carry) {
741491
+ consumeLine(carry.toString("utf8"));
741492
+ }
741493
+ } finally {
741494
+ await fd3.close();
741495
+ }
741496
+ log10.debug("streamed session statistics", {
741497
+ sessionId,
741498
+ lineCount: agg.lineCount,
741499
+ skippedOversizeLines: agg.skippedOversizeLines
741500
+ });
741501
+ return agg;
741502
+ }
741503
+ var log10, sessionMessagesCache, STREAM_DEFAULT_CHUNK_BYTES, STREAM_DEFAULT_MAX_LINE_BYTES;
741358
741504
  var init_session2 = __esm(() => {
741359
741505
  init_parse12();
741360
741506
  init_logger6();
741361
741507
  init_dirs();
741362
741508
  log10 = createLogger("session");
741363
741509
  sessionMessagesCache = new Map;
741510
+ STREAM_DEFAULT_CHUNK_BYTES = 1024 * 1024;
741511
+ STREAM_DEFAULT_MAX_LINE_BYTES = 32 * 1024 * 1024;
741364
741512
  });
741365
741513
 
741366
741514
  // src/services/rawDump/statistics.ts
@@ -741404,7 +741552,7 @@ async function statHistorySessions() {
741404
741552
  });
741405
741553
  const sessionDateMap = new Map;
741406
741554
  for (const item of uniqueItems) {
741407
- const cacheEntry = await getParsedSession(item.project, item.sessionId).catch((err3) => {
741555
+ const r7 = await streamSessionStatistics(item.project, item.sessionId).catch((err3) => {
741408
741556
  log11.warn("statistics: \u8DF3\u8FC7\u4F1A\u8BDD\uFF08transcript \u672A\u89E3\u6790\uFF09", {
741409
741557
  sessionId: item.sessionId,
741410
741558
  project: item.project,
@@ -741412,52 +741560,17 @@ async function statHistorySessions() {
741412
741560
  });
741413
741561
  return null;
741414
741562
  });
741415
- if (!cacheEntry)
741563
+ if (!r7)
741416
741564
  continue;
741417
- const messages = cacheEntry.messages;
741418
- if (!messages || messages.length === 0)
741565
+ if (r7.lineCount === 0)
741419
741566
  continue;
741420
- let sessionTimestamp = 0;
741421
- let sessionUpstreamTokens = 0;
741422
- let sessionDownstreamTokens = 0;
741423
- for (const msg of messages) {
741424
- if (msg.timestamp) {
741425
- const ts = new Date(msg.timestamp).getTime();
741426
- if (sessionTimestamp === 0 || ts < sessionTimestamp) {
741427
- sessionTimestamp = ts;
741428
- }
741429
- }
741430
- const usage2 = msg.message?.usage;
741431
- if (usage2) {
741432
- sessionUpstreamTokens += (usage2.input_tokens ?? 0) + (usage2.cache_read_input_tokens ?? 0) + (usage2.cache_creation_input_tokens ?? 0);
741433
- sessionDownstreamTokens += usage2.output_tokens ?? 0;
741434
- }
741435
- }
741436
- const sessionDateKey = sessionTimestamp ? new Date(sessionTimestamp).toISOString().slice(0, 10) : new Date().toISOString().slice(0, 10);
741567
+ const sessionDateKey = r7.firstTimestamp ? new Date(r7.firstTimestamp).toISOString().slice(0, 10) : new Date().toISOString().slice(0, 10);
741437
741568
  sessionDateMap.set(item.sessionId, sessionDateKey);
741438
- let conversationCount = 0;
741439
- let upstreamTokens = 0;
741440
- let downstreamTokens = 0;
741441
- let startTime2 = 0;
741442
- let endTime = 0;
741443
- for (const msg of messages) {
741444
- if (msg.type === "user") {
741445
- conversationCount++;
741446
- }
741447
- const usage2 = msg.message?.usage;
741448
- if (usage2) {
741449
- upstreamTokens += (usage2.input_tokens ?? 0) + (usage2.cache_read_input_tokens ?? 0) + (usage2.cache_creation_input_tokens ?? 0);
741450
- downstreamTokens += usage2.output_tokens ?? 0;
741451
- }
741452
- if (msg.timestamp) {
741453
- const ts = new Date(msg.timestamp).getTime();
741454
- if (startTime2 === 0 || ts < startTime2) {
741455
- startTime2 = ts;
741456
- }
741457
- if (endTime === 0 || ts > endTime) {
741458
- endTime = ts;
741459
- }
741460
- }
741569
+ if (r7.skippedOversizeLines > 0) {
741570
+ log11.warn("statistics: transcript \u5B58\u5728\u8D85\u957F\u884C\u5DF2\u8DF3\u8FC7\u7EDF\u8BA1", {
741571
+ sessionId: item.sessionId,
741572
+ skipped: r7.skippedOversizeLines
741573
+ });
741461
741574
  }
741462
741575
  const dateKey = sessionDateKey;
741463
741576
  if (!dailyStats.has(dateKey)) {
@@ -741472,17 +741585,17 @@ async function statHistorySessions() {
741472
741585
  });
741473
741586
  }
741474
741587
  const stats3 = dailyStats.get(dateKey);
741475
- stats3.conversationCount += conversationCount;
741476
- stats3.upstreamTokens += upstreamTokens;
741477
- stats3.downstreamTokens += downstreamTokens;
741478
- if (startTime2 > 0) {
741479
- if (stats3.startTime === 0 || startTime2 < stats3.startTime) {
741480
- stats3.startTime = startTime2;
741588
+ stats3.conversationCount += r7.conversationCount;
741589
+ stats3.upstreamTokens += r7.upstreamTokens;
741590
+ stats3.downstreamTokens += r7.downstreamTokens;
741591
+ if (r7.firstTimestamp > 0) {
741592
+ if (stats3.startTime === 0 || r7.firstTimestamp < stats3.startTime) {
741593
+ stats3.startTime = r7.firstTimestamp;
741481
741594
  }
741482
741595
  }
741483
- if (endTime > 0) {
741484
- if (stats3.endTime === 0 || endTime > stats3.endTime) {
741485
- stats3.endTime = endTime;
741596
+ if (r7.lastTimestamp > 0) {
741597
+ if (stats3.endTime === 0 || r7.lastTimestamp > stats3.endTime) {
741598
+ stats3.endTime = r7.lastTimestamp;
741486
741599
  }
741487
741600
  }
741488
741601
  }
@@ -763912,7 +764025,7 @@ function getAnthropicEnvMetadata() {
763912
764025
  function getBuildAgeMinutes() {
763913
764026
  if (false)
763914
764027
  ;
763915
- const buildTime = new Date("2026-09-07T00:23:46.056Z").getTime();
764028
+ const buildTime = new Date("2026-09-14T02:57:33.042Z").getTime();
763916
764029
  if (isNaN(buildTime))
763917
764030
  return;
763918
764031
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -778410,7 +778523,7 @@ function Feedback({
778410
778523
  platform: env4.platform,
778411
778524
  gitRepo: envInfo.isGit,
778412
778525
  terminal: env4.terminal,
778413
- version: "4.2.36",
778526
+ version: "4.2.38",
778414
778527
  transcript: normalizeMessagesForAPI(messages),
778415
778528
  errors: sanitizedErrors,
778416
778529
  lastApiRequest: getLastAPIRequest(),
@@ -778593,7 +778706,7 @@ function Feedback({
778593
778706
  ", ",
778594
778707
  env4.terminal,
778595
778708
  ", v",
778596
- "4.2.36"
778709
+ "4.2.38"
778597
778710
  ]
778598
778711
  })
778599
778712
  ]
@@ -778690,7 +778803,7 @@ ${sanitizedDescription}
778690
778803
  ` + `**Environment Info**
778691
778804
  ` + `- Platform: ${env4.platform}
778692
778805
  ` + `- Terminal: ${env4.terminal}
778693
- ` + `- Version: ${"4.2.36"}
778806
+ ` + `- Version: ${"4.2.38"}
778694
778807
  ` + `- Feedback ID: ${feedbackId}
778695
778808
  ` + `
778696
778809
  **Errors**
@@ -780929,7 +781042,7 @@ function buildPrimarySection() {
780929
781042
  children: t("settings.status.renameHint")
780930
781043
  });
780931
781044
  return [
780932
- { label: t("settings.status.version"), value: "4.2.36" },
781045
+ { label: t("settings.status.version"), value: "4.2.38" },
780933
781046
  { label: t("settings.status.sessionName"), value: nameValue },
780934
781047
  { label: t("settings.status.sessionId"), value: sessionId },
780935
781048
  { label: t("settings.status.cwd"), value: getCwd() },
@@ -783807,7 +783920,7 @@ function Config({
783807
783920
  }
783808
783921
  })
783809
783922
  }) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_runtime192.jsx(ChannelDowngradeDialog, {
783810
- currentVersion: "4.2.36",
783923
+ currentVersion: "4.2.38",
783811
783924
  onChoice: (choice) => {
783812
783925
  setShowSubmenu(null);
783813
783926
  setTabsHidden(false);
@@ -783819,7 +783932,7 @@ function Config({
783819
783932
  autoUpdatesChannel: "stable"
783820
783933
  };
783821
783934
  if (choice === "stay") {
783822
- newSettings.minimumVersion = "4.2.36";
783935
+ newSettings.minimumVersion = "4.2.38";
783823
783936
  }
783824
783937
  updateSettingsForSource("userSettings", newSettings);
783825
783938
  setSettingsData((prev) => ({
@@ -789288,7 +789401,7 @@ function HelpV2({ onClose, commands: commands11 }) {
789288
789401
  color: "professionalBlue",
789289
789402
  children: [
789290
789403
  /* @__PURE__ */ jsx_runtime219.jsx(Tabs, {
789291
- title: process.env.USER_TYPE === "sf" ? "/help" : `CoStrict v${"4.2.36"}`,
789404
+ title: process.env.USER_TYPE === "sf" ? "/help" : `CoStrict v${"4.2.38"}`,
789292
789405
  color: "professionalBlue",
789293
789406
  defaultTab: "general",
789294
789407
  children: tabs
@@ -812003,7 +812116,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
812003
812116
  return [];
812004
812117
  }
812005
812118
  }
812006
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.36") {
812119
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.38") {
812007
812120
  if (process.env.USER_TYPE === "sf") {
812008
812121
  const changelog = "";
812009
812122
  if (changelog) {
@@ -812030,7 +812143,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.36")
812030
812143
  releaseNotes
812031
812144
  };
812032
812145
  }
812033
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "4.2.36") {
812146
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "4.2.38") {
812034
812147
  if (process.env.USER_TYPE === "sf") {
812035
812148
  const changelog = "";
812036
812149
  if (changelog) {
@@ -814543,7 +814656,7 @@ function isNotLoggedIn() {
814543
814656
  return true;
814544
814657
  }
814545
814658
  function getLogoDisplayData() {
814546
- const version11 = process.env.DEMO_VERSION ?? "4.2.36";
814659
+ const version11 = process.env.DEMO_VERSION ?? "4.2.38";
814547
814660
  const serverUrl = getDirectConnectServerUrl();
814548
814661
  const displayPath2 = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
814549
814662
  const cwd2 = serverUrl ? `${displayPath2} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath2;
@@ -815121,7 +815234,7 @@ var init_MatrixMessageLine = __esm(() => {
815121
815234
  // src/components/matrix-tactical/MatrixWelcome.tsx
815122
815235
  import { basename as basename48 } from "path";
815123
815236
  function MatrixWelcome({
815124
- version: version11 = "4.2.36",
815237
+ version: version11 = "4.2.38",
815125
815238
  projectName,
815126
815239
  cwd: cwd2,
815127
815240
  modelDisplayName,
@@ -815756,13 +815869,13 @@ function LogoV2() {
815756
815869
  const { hasReleaseNotes } = checkForReleaseNotesSync(config13.lastReleaseNotesSeen);
815757
815870
  import_react167.useEffect(() => {
815758
815871
  const currentConfig = getGlobalConfig();
815759
- if (currentConfig.lastReleaseNotesSeen === "4.2.36") {
815872
+ if (currentConfig.lastReleaseNotesSeen === "4.2.38") {
815760
815873
  return;
815761
815874
  }
815762
815875
  saveGlobalConfig((current2) => {
815763
- if (current2.lastReleaseNotesSeen === "4.2.36")
815876
+ if (current2.lastReleaseNotesSeen === "4.2.38")
815764
815877
  return current2;
815765
- return { ...current2, lastReleaseNotesSeen: "4.2.36" };
815878
+ return { ...current2, lastReleaseNotesSeen: "4.2.38" };
815766
815879
  });
815767
815880
  if (showOnboarding) {
815768
815881
  incrementProjectOnboardingSeenCount();
@@ -839327,7 +839440,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
839327
839440
  smapsRollup,
839328
839441
  platform: process.platform,
839329
839442
  nodeVersion: process.version,
839330
- ccVersion: "4.2.36"
839443
+ ccVersion: "4.2.38"
839331
839444
  };
839332
839445
  }
839333
839446
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -839443,7 +839556,7 @@ var init_mock_limits = __esm(() => {
839443
839556
  var call56 = async () => {
839444
839557
  return {
839445
839558
  type: "text",
839446
- value: `${"4.2.36"} (built ${"2026-09-07T00:23:46.056Z"})`
839559
+ value: `${"4.2.38"} (built ${"2026-09-14T02:57:33.042Z"})`
839447
839560
  };
839448
839561
  }, version11, version_default;
839449
839562
  var init_version2 = __esm(() => {
@@ -859323,7 +859436,7 @@ function generateHtmlReport(data, insights) {
859323
859436
  </html>`;
859324
859437
  }
859325
859438
  function buildExportData(data, insights, facets, remoteStats) {
859326
- const version12 = typeof MACRO !== "undefined" ? "4.2.36" : "unknown";
859439
+ const version12 = typeof MACRO !== "undefined" ? "4.2.38" : "unknown";
859327
859440
  const remote_hosts_collected = remoteStats?.hosts.filter((h8) => h8.sessionCount > 0).map((h8) => h8.name);
859328
859441
  const facets_summary = {
859329
859442
  total: facets.size,
@@ -863815,7 +863928,7 @@ var init_sessionStorage = __esm(() => {
863815
863928
  init_settings2();
863816
863929
  init_slowOperations();
863817
863930
  init_uuid();
863818
- VERSION11 = typeof MACRO !== "undefined" ? "4.2.36" : "unknown";
863931
+ VERSION11 = typeof MACRO !== "undefined" ? "4.2.38" : "unknown";
863819
863932
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
863820
863933
  SKIP_FIRST_PROMPT_PATTERN2 = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
863821
863934
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -865156,7 +865269,7 @@ var init_filesystem = __esm(() => {
865156
865269
  });
865157
865270
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
865158
865271
  const nonce = randomBytes24(16).toString("hex");
865159
- return join219(getCostrictTempDir(), "bundled-skills", "4.2.36", nonce);
865272
+ return join219(getCostrictTempDir(), "bundled-skills", "4.2.38", nonce);
865160
865273
  });
865161
865274
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
865162
865275
  });
@@ -876654,7 +876767,7 @@ function buildSystemInitMessage(inputs) {
876654
876767
  slash_commands: inputs.commands.filter((c10) => c10.userInvocable !== false).map((c10) => c10.name),
876655
876768
  apiKeySource: getAnthropicApiKeyWithSource().source,
876656
876769
  betas: getSdkBetas(),
876657
- claude_code_version: "4.2.36",
876770
+ claude_code_version: "4.2.38",
876658
876771
  output_style: outputStyle2,
876659
876772
  agents: inputs.agents.map((agent) => agent.agentType),
876660
876773
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -880198,7 +880311,7 @@ function appendToLog(path61, message2) {
880198
880311
  cwd: getFsImplementation().cwd(),
880199
880312
  userType: process.env.USER_TYPE,
880200
880313
  sessionId: getSessionId(),
880201
- version: "4.2.36"
880314
+ version: "4.2.38"
880202
880315
  };
880203
880316
  getLogWriter(path61).write(messageWithTimestamp);
880204
880317
  }
@@ -901259,7 +901372,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
901259
901372
  project_dir: getOriginalCwd(),
901260
901373
  added_dirs: addedDirs
901261
901374
  },
901262
- version: "4.2.36",
901375
+ version: "4.2.38",
901263
901376
  output_style: {
901264
901377
  name: outputStyleName
901265
901378
  },
@@ -915465,10 +915578,66 @@ var init_useAfterFirstRender = __esm(() => {
915465
915578
  import_react307 = __toESM(require_react(), 1);
915466
915579
  });
915467
915580
 
915581
+ // src/hooks/deferredHookMessagesGate.ts
915582
+ class DeferredHookGate {
915583
+ pending;
915584
+ resolved = false;
915585
+ constructor(pending3) {
915586
+ this.pending = pending3 ?? null;
915587
+ if (!pending3)
915588
+ this.resolved = true;
915589
+ }
915590
+ async wait(timeoutMs = HOOK_WAIT_TIMEOUT_MS) {
915591
+ const promise4 = this.pending;
915592
+ if (this.resolved || !promise4)
915593
+ return null;
915594
+ let timer3;
915595
+ const timeout3 = new Promise((resolve72) => {
915596
+ timer3 = setTimeout(() => resolve72("timeout"), timeoutMs);
915597
+ });
915598
+ try {
915599
+ const outcome = await Promise.race([
915600
+ promise4.then(() => "done"),
915601
+ timeout3
915602
+ ]);
915603
+ if (outcome === "timeout") {
915604
+ if (this.resolved)
915605
+ return null;
915606
+ this.resolved = true;
915607
+ this.pending = null;
915608
+ logForDebugging(`SessionStart hooks did not complete within ${timeoutMs}ms; proceeding without hook context`, { level: "warn" });
915609
+ return null;
915610
+ }
915611
+ if (this.resolved)
915612
+ return null;
915613
+ this.resolved = true;
915614
+ this.pending = null;
915615
+ return await promise4;
915616
+ } finally {
915617
+ if (timer3)
915618
+ clearTimeout(timer3);
915619
+ }
915620
+ }
915621
+ takeBackgroundMessages(msgs) {
915622
+ if (this.resolved)
915623
+ return null;
915624
+ this.resolved = true;
915625
+ this.pending = null;
915626
+ return msgs;
915627
+ }
915628
+ }
915629
+ var HOOK_WAIT_TIMEOUT_MS = 3000;
915630
+ var init_deferredHookMessagesGate = __esm(() => {
915631
+ init_debug();
915632
+ });
915633
+
915468
915634
  // src/hooks/useDeferredHookMessages.ts
915469
915635
  function useDeferredHookMessages(pendingHookMessages, setMessages) {
915470
915636
  const pendingRef = import_react308.useRef(pendingHookMessages ?? null);
915471
- const resolvedRef = import_react308.useRef(!pendingHookMessages);
915637
+ const gateRef = import_react308.useRef(null);
915638
+ if (gateRef.current === null) {
915639
+ gateRef.current = new DeferredHookGate(pendingRef.current ?? undefined);
915640
+ }
915472
915641
  import_react308.useEffect(() => {
915473
915642
  const promise4 = pendingRef.current;
915474
915643
  if (!promise4)
@@ -915477,10 +915646,9 @@ function useDeferredHookMessages(pendingHookMessages, setMessages) {
915477
915646
  promise4.then((msgs) => {
915478
915647
  if (cancelled)
915479
915648
  return;
915480
- resolvedRef.current = true;
915481
- pendingRef.current = null;
915482
- if (msgs.length > 0) {
915483
- setMessages((prev) => [...msgs, ...prev]);
915649
+ const inject = gateRef.current.takeBackgroundMessages(msgs);
915650
+ if (inject && inject.length > 0) {
915651
+ setMessages((prev) => [...inject, ...prev]);
915484
915652
  }
915485
915653
  });
915486
915654
  return () => {
@@ -915488,20 +915656,15 @@ function useDeferredHookMessages(pendingHookMessages, setMessages) {
915488
915656
  };
915489
915657
  }, [setMessages]);
915490
915658
  return import_react308.useCallback(async () => {
915491
- if (resolvedRef.current || !pendingRef.current)
915492
- return;
915493
- const msgs = await pendingRef.current;
915494
- if (resolvedRef.current)
915495
- return;
915496
- resolvedRef.current = true;
915497
- pendingRef.current = null;
915498
- if (msgs.length > 0) {
915499
- setMessages((prev) => [...msgs, ...prev]);
915659
+ const inject = await gateRef.current.wait();
915660
+ if (inject && inject.length > 0) {
915661
+ setMessages((prev) => [...inject, ...prev]);
915500
915662
  }
915501
915663
  }, [setMessages]);
915502
915664
  }
915503
915665
  var import_react308;
915504
915666
  var init_useDeferredHookMessages = __esm(() => {
915667
+ init_deferredHookMessagesGate();
915505
915668
  import_react308 = __toESM(require_react(), 1);
915506
915669
  });
915507
915670
 
@@ -919875,7 +920038,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
919875
920038
  } catch {}
919876
920039
  const data = {
919877
920040
  trigger,
919878
- version: "4.2.36",
920041
+ version: "4.2.38",
919879
920042
  platform: process.platform,
919880
920043
  transcript,
919881
920044
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -921130,7 +921293,7 @@ function getReleaseType(current2, latest) {
921130
921293
  return "patch";
921131
921294
  }
921132
921295
  async function checkNewAutoUpdate(callbacks) {
921133
- const currentVersion = "4.2.36";
921296
+ const currentVersion = "4.2.38";
921134
921297
  logForDebugging(`[newAutoUpdater] checking, current: ${currentVersion}`);
921135
921298
  if (isNewAutoUpdaterDisabled()) {
921136
921299
  return { action: "skip", currentVersion, latestVersion: null };
@@ -933387,7 +933550,7 @@ function WelcomeV2() {
933387
933550
  dimColor: true,
933388
933551
  children: [
933389
933552
  "v",
933390
- "4.2.36",
933553
+ "4.2.38",
933391
933554
  " "
933392
933555
  ]
933393
933556
  })
@@ -933453,7 +933616,7 @@ function WelcomeV2() {
933453
933616
  dimColor: true,
933454
933617
  children: [
933455
933618
  "v",
933456
- "4.2.36",
933619
+ "4.2.38",
933457
933620
  " "
933458
933621
  ]
933459
933622
  })
@@ -933555,7 +933718,7 @@ function AppleTerminalWelcomeV2({ theme: theme2, welcomeMessage }) {
933555
933718
  dimColor: true,
933556
933719
  children: [
933557
933720
  "v",
933558
- "4.2.36",
933721
+ "4.2.38",
933559
933722
  " "
933560
933723
  ]
933561
933724
  })
@@ -933621,7 +933784,7 @@ function AppleTerminalWelcomeV2({ theme: theme2, welcomeMessage }) {
933621
933784
  dimColor: true,
933622
933785
  children: [
933623
933786
  "v",
933624
- "4.2.36",
933787
+ "4.2.38",
933625
933788
  " "
933626
933789
  ]
933627
933790
  })
@@ -934561,7 +934724,7 @@ function completeOnboarding() {
934561
934724
  saveGlobalConfig((current2) => ({
934562
934725
  ...current2,
934563
934726
  hasCompletedOnboarding: true,
934564
- lastOnboardingVersion: "4.2.36"
934727
+ lastOnboardingVersion: "4.2.38"
934565
934728
  }));
934566
934729
  }
934567
934730
  function showDialog(root9, renderer) {
@@ -951028,7 +951191,7 @@ async function startMCPServer(cwd3, debug5, verbose) {
951028
951191
  setCwd(cwd3);
951029
951192
  const server2 = new Server({
951030
951193
  name: "claude/tengu",
951031
- version: "4.2.36"
951194
+ version: "4.2.38"
951032
951195
  }, {
951033
951196
  capabilities: {
951034
951197
  tools: {}
@@ -953313,7 +953476,7 @@ function createHealthRoutes(sessionManager) {
953313
953476
  const uptime2 = process.uptime() * 1000;
953314
953477
  return c10.json({
953315
953478
  status: "ok",
953316
- version: "4.2.36",
953479
+ version: "4.2.38",
953317
953480
  uptime_ms: Math.round(uptime2),
953318
953481
  active_sessions: sessionManager.getActiveCount()
953319
953482
  });
@@ -953585,7 +953748,7 @@ function getMacroDefines() {
953585
953748
  commit = execSync3("git rev-parse --short HEAD", { encoding: "utf-8", cwd: __dirname }).trim();
953586
953749
  } catch {}
953587
953750
  return {
953588
- "MACRO.VERSION": JSON.stringify("4.2.36"),
953751
+ "MACRO.VERSION": JSON.stringify("4.2.38"),
953589
953752
  "MACRO.BUILD_TIME": JSON.stringify(new Date().toISOString()),
953590
953753
  "MACRO.COMMIT": JSON.stringify(commit),
953591
953754
  "MACRO.FEEDBACK_CHANNEL": JSON.stringify(""),
@@ -960723,7 +960886,7 @@ __export(exports_update, {
960723
960886
  });
960724
960887
  async function update() {
960725
960888
  logEvent("tengu_update_check", {});
960726
- writeToStdout(`${t("cli.update.currentVersion", "Current version")}: ${"4.2.36"}
960889
+ writeToStdout(`${t("cli.update.currentVersion", "Current version")}: ${"4.2.38"}
960727
960890
  `);
960728
960891
  const channel5 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
960729
960892
  writeToStdout(`${t("cli.update.checkingUpdates", { channel: channel5 }, "Checking for updates to {channel} version...")}
@@ -960798,8 +960961,8 @@ async function update() {
960798
960961
  writeToStdout(`${t("cli.update.managedByHomebrew", "CoStrict is managed by Homebrew.")}
960799
960962
  `);
960800
960963
  const latest = await getLatestVersion(channel5);
960801
- if (latest && !gte2("4.2.36", latest)) {
960802
- writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.36", latest }, "Update available: {current} \u2192 {latest}")}
960964
+ if (latest && !gte2("4.2.38", latest)) {
960965
+ writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.38", latest }, "Update available: {current} \u2192 {latest}")}
960803
960966
  `);
960804
960967
  writeToStdout(`
960805
960968
  `);
@@ -960815,8 +960978,8 @@ async function update() {
960815
960978
  writeToStdout(`${t("cli.update.managedByWinget", "CoStrict is managed by winget.")}
960816
960979
  `);
960817
960980
  const latest = await getLatestVersion(channel5);
960818
- if (latest && !gte2("4.2.36", latest)) {
960819
- writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.36", latest }, "Update available: {current} \u2192 {latest}")}
960981
+ if (latest && !gte2("4.2.38", latest)) {
960982
+ writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.38", latest }, "Update available: {current} \u2192 {latest}")}
960820
960983
  `);
960821
960984
  writeToStdout(`
960822
960985
  `);
@@ -960832,8 +960995,8 @@ async function update() {
960832
960995
  writeToStdout(`${t("cli.update.managedByApk", "CoStrict is managed by apk.")}
960833
960996
  `);
960834
960997
  const latest = await getLatestVersion(channel5);
960835
- if (latest && !gte2("4.2.36", latest)) {
960836
- writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.36", latest }, "Update available: {current} \u2192 {latest}")}
960998
+ if (latest && !gte2("4.2.38", latest)) {
960999
+ writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.38", latest }, "Update available: {current} \u2192 {latest}")}
960837
961000
  `);
960838
961001
  writeToStdout(`
960839
961002
  `);
@@ -960898,11 +961061,11 @@ async function update() {
960898
961061
  `);
960899
961062
  await gracefulShutdown(1);
960900
961063
  }
960901
- if (result2.latestVersion === "4.2.36") {
960902
- writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.36" }, "CoStrict is up to date ({version})")) + `
961064
+ if (result2.latestVersion === "4.2.38") {
961065
+ writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.38" }, "CoStrict is up to date ({version})")) + `
960903
961066
  `);
960904
961067
  } else {
960905
- writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.36", to: String(result2.latestVersion) }, "Successfully updated from {from} to version {to}")) + `
961068
+ writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.38", to: String(result2.latestVersion) }, "Successfully updated from {from} to version {to}")) + `
960906
961069
  `);
960907
961070
  regenerateCompletionCache();
960908
961071
  }
@@ -960962,12 +961125,12 @@ async function update() {
960962
961125
  `);
960963
961126
  await gracefulShutdown(1);
960964
961127
  }
960965
- if (latestVersion === "4.2.36") {
960966
- writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.36" }, "CoStrict is up to date ({version})")) + `
961128
+ if (latestVersion === "4.2.38") {
961129
+ writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.38" }, "CoStrict is up to date ({version})")) + `
960967
961130
  `);
960968
961131
  await gracefulShutdown(0);
960969
961132
  }
960970
- writeToStdout(`${t("cli.update.newVersionAvailable", { latest: String(latestVersion), current: "4.2.36" }, "New version available: {latest} (current: {current})")}
961133
+ writeToStdout(`${t("cli.update.newVersionAvailable", { latest: String(latestVersion), current: "4.2.38" }, "New version available: {latest} (current: {current})")}
960971
961134
  `);
960972
961135
  writeToStdout(`${t("cli.update.installing", "Installing update...")}
960973
961136
  `);
@@ -961012,7 +961175,7 @@ async function update() {
961012
961175
  logForDebugging(`update: Installation status: ${result.status}`);
961013
961176
  switch (result.status) {
961014
961177
  case "success":
961015
- writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.36", to: String(latestVersion) }, "Successfully updated from {from} to version {to}")) + `
961178
+ writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.38", to: String(latestVersion) }, "Successfully updated from {from} to version {to}")) + `
961016
961179
  `);
961017
961180
  regenerateCompletionCache();
961018
961181
  break;
@@ -963231,7 +963394,7 @@ ${assistantAddendum}` : assistantAddendum;
963231
963394
  }
963232
963395
  }
963233
963396
  logForDiagnosticsNoPII("info", "started", {
963234
- version: "4.2.36",
963397
+ version: "4.2.38",
963235
963398
  is_native_binary: isInBundledMode()
963236
963399
  });
963237
963400
  registerCleanup(async () => {
@@ -963722,7 +963885,7 @@ Session: ${directConnectConfig.sessionId}`, "info");
963722
963885
  sshSession = await createSSHSession2({
963723
963886
  host: _pendingSSH.host,
963724
963887
  cwd: _pendingSSH.cwd,
963725
- localVersion: "4.2.36",
963888
+ localVersion: "4.2.38",
963726
963889
  permissionMode: _pendingSSH.permissionMode,
963727
963890
  dangerouslySkipPermissions: _pendingSSH.dangerouslySkipPermissions,
963728
963891
  extraCliArgs: _pendingSSH.extraCliArgs,
@@ -964191,7 +964354,7 @@ Usage: csc --remote "your task description"`, () => gracefulShutdown(1));
964191
964354
  pendingHookMessages
964192
964355
  }, renderAndRun);
964193
964356
  }
964194
- }).version("4.2.36 (CoStrict)", "-v, --version", cliDesc("cli.option.version", "Output the version number"));
964357
+ }).version("4.2.38 (CoStrict)", "-v, --version", cliDesc("cli.option.version", "Output the version number"));
964195
964358
  program2.addOption(new Option("-w, --worktree [name]", cliDesc("cli.option.worktree", "Create a new git worktree for this session (optionally specify a name)")).hideHelp());
964196
964359
  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());
964197
964360
  if (canUserConfigureAdvisor()) {
@@ -964960,10 +965123,10 @@ function getCouncilArgs(args) {
964960
965123
  async function main2() {
964961
965124
  const args = process.argv.slice(2);
964962
965125
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
964963
- const d7 = new Date("2026-09-07T00:23:46.056Z");
965126
+ const d7 = new Date("2026-09-14T02:57:33.042Z");
964964
965127
  const p2 = (n3) => String(n3).padStart(2, "0");
964965
965128
  const buildTime = `${d7.getFullYear()}/${p2(d7.getMonth() + 1)}/${p2(d7.getDate())} ${p2(d7.getHours())}:${p2(d7.getMinutes())}:${p2(d7.getSeconds())}`;
964966
- console.log(`${"4.2.36"} (commit: ${"224bdf6c8"}, built: ${buildTime})`);
965129
+ console.log(`${"4.2.38"} (commit: ${"66df21796"}, built: ${buildTime})`);
964967
965130
  return;
964968
965131
  }
964969
965132
  if (true) {
@@ -965144,5 +965307,5 @@ async function main2() {
965144
965307
  }
965145
965308
  main2();
965146
965309
 
965147
- //# debugId=2269F0D79FA1004A64756E2164756E21
965310
+ //# debugId=737638D9532C20B764756E2164756E21
965148
965311
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@costrict/csc",
3
- "version": "4.2.36",
3
+ "version": "4.2.38",
4
4
  "description": "costrict",
5
5
  "type": "module",
6
6
  "author": "costrict",