@costrict/csc 4.2.18-beat1 → 4.2.18
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 +330 -277
- package/dist/services/rawDump/batchWorker.js +7 -7
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -66656,8 +66656,8 @@ function getClientVersion() {
|
|
|
66656
66656
|
if (cached)
|
|
66657
66657
|
return cached;
|
|
66658
66658
|
try {
|
|
66659
|
-
if ("4.2.18
|
|
66660
|
-
cached = "4.2.18
|
|
66659
|
+
if ("4.2.18") {
|
|
66660
|
+
cached = "4.2.18";
|
|
66661
66661
|
return cached;
|
|
66662
66662
|
}
|
|
66663
66663
|
} catch {}
|
|
@@ -220336,7 +220336,7 @@ async function fetchCoStrictModels(baseUrl, accessToken) {
|
|
|
220336
220336
|
headers: {
|
|
220337
220337
|
Authorization: `Bearer ${accessToken}`,
|
|
220338
220338
|
Accept: "application/json",
|
|
220339
|
-
"User-Agent": `csc/${"4.2.18
|
|
220339
|
+
"User-Agent": `csc/${"4.2.18"}`
|
|
220340
220340
|
},
|
|
220341
220341
|
signal: controller.signal
|
|
220342
220342
|
});
|
|
@@ -222373,7 +222373,7 @@ var init_auth7 = __esm(() => {
|
|
|
222373
222373
|
|
|
222374
222374
|
// src/utils/userAgent.ts
|
|
222375
222375
|
function getClaudeCodeUserAgent() {
|
|
222376
|
-
return `costrict/${"4.2.18
|
|
222376
|
+
return `costrict/${"4.2.18"}`;
|
|
222377
222377
|
}
|
|
222378
222378
|
|
|
222379
222379
|
// src/utils/workloadContext.ts
|
|
@@ -222395,7 +222395,7 @@ function getUserAgent() {
|
|
|
222395
222395
|
const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
|
|
222396
222396
|
const workload = getWorkload();
|
|
222397
222397
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
222398
|
-
return `csc/${"4.2.18
|
|
222398
|
+
return `csc/${"4.2.18"}`;
|
|
222399
222399
|
}
|
|
222400
222400
|
function getMCPUserAgent() {
|
|
222401
222401
|
const parts = [];
|
|
@@ -222409,7 +222409,7 @@ function getMCPUserAgent() {
|
|
|
222409
222409
|
parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
|
|
222410
222410
|
}
|
|
222411
222411
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
222412
|
-
return `csc/${"4.2.18
|
|
222412
|
+
return `csc/${"4.2.18"}${suffix}`;
|
|
222413
222413
|
}
|
|
222414
222414
|
function getWebFetchUserAgent() {
|
|
222415
222415
|
return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
|
|
@@ -222529,7 +222529,7 @@ var init_user = __esm(() => {
|
|
|
222529
222529
|
deviceId,
|
|
222530
222530
|
sessionId: getSessionId(),
|
|
222531
222531
|
email: getEmail(),
|
|
222532
|
-
appVersion: "4.2.18
|
|
222532
|
+
appVersion: "4.2.18",
|
|
222533
222533
|
platform: getHostPlatformForAnalytics(),
|
|
222534
222534
|
organizationUuid,
|
|
222535
222535
|
accountUuid,
|
|
@@ -233577,7 +233577,7 @@ var init_metadata = __esm(() => {
|
|
|
233577
233577
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
233578
233578
|
WHITESPACE_REGEX = /\s+/;
|
|
233579
233579
|
getVersionBase = memoize_default(() => {
|
|
233580
|
-
const match = "4.2.18
|
|
233580
|
+
const match = "4.2.18".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
233581
233581
|
return match ? match[0] : undefined;
|
|
233582
233582
|
});
|
|
233583
233583
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -233617,9 +233617,9 @@ var init_metadata = __esm(() => {
|
|
|
233617
233617
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
233618
233618
|
isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
|
|
233619
233619
|
isClaudeAiAuth: isClaudeAISubscriber(),
|
|
233620
|
-
version: "4.2.18
|
|
233620
|
+
version: "4.2.18",
|
|
233621
233621
|
versionBase: getVersionBase(),
|
|
233622
|
-
buildTime: "2026-07-
|
|
233622
|
+
buildTime: "2026-07-29T00:51:14.363Z",
|
|
233623
233623
|
deploymentEnvironment: env4.detectDeploymentEnvironment(),
|
|
233624
233624
|
...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
|
|
233625
233625
|
githubEventName: process.env.GITHUB_EVENT_NAME,
|
|
@@ -234290,7 +234290,7 @@ function initialize1PEventLogging() {
|
|
|
234290
234290
|
const platform3 = getPlatform();
|
|
234291
234291
|
const attributes = {
|
|
234292
234292
|
[import_semantic_conventions2.ATTR_SERVICE_NAME]: "claude-code",
|
|
234293
|
-
[import_semantic_conventions2.ATTR_SERVICE_VERSION]: "4.2.18
|
|
234293
|
+
[import_semantic_conventions2.ATTR_SERVICE_VERSION]: "4.2.18"
|
|
234294
234294
|
};
|
|
234295
234295
|
if (platform3 === "wsl") {
|
|
234296
234296
|
const wslVersion = getWslVersion();
|
|
@@ -234317,7 +234317,7 @@ function initialize1PEventLogging() {
|
|
|
234317
234317
|
})
|
|
234318
234318
|
]
|
|
234319
234319
|
});
|
|
234320
|
-
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.claude_code.events", "4.2.18
|
|
234320
|
+
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.claude_code.events", "4.2.18");
|
|
234321
234321
|
}
|
|
234322
234322
|
async function reinitialize1PEventLoggingIfConfigChanged() {
|
|
234323
234323
|
if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
|
|
@@ -434271,7 +434271,7 @@ function getTelemetryAttributes() {
|
|
|
434271
434271
|
attributes["session.id"] = sessionId;
|
|
434272
434272
|
}
|
|
434273
434273
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
434274
|
-
attributes["app.version"] = "4.2.18
|
|
434274
|
+
attributes["app.version"] = "4.2.18";
|
|
434275
434275
|
}
|
|
434276
434276
|
const oauthAccount = getOauthAccountInfo();
|
|
434277
434277
|
if (oauthAccount) {
|
|
@@ -467791,7 +467791,7 @@ function initLangfuse() {
|
|
|
467791
467791
|
flushInterval: parseInt(process.env.LANGFUSE_FLUSH_INTERVAL ?? "10", 10),
|
|
467792
467792
|
mask: maskFn,
|
|
467793
467793
|
environment: process.env.LANGFUSE_TRACING_ENVIRONMENT ?? "development",
|
|
467794
|
-
release: "4.2.18
|
|
467794
|
+
release: "4.2.18",
|
|
467795
467795
|
exportMode: process.env.LANGFUSE_EXPORT_MODE ?? "batched",
|
|
467796
467796
|
timeout: parseInt(process.env.LANGFUSE_TIMEOUT ?? "5", 10)
|
|
467797
467797
|
});
|
|
@@ -499691,7 +499691,7 @@ function initSentry() {
|
|
|
499691
499691
|
}
|
|
499692
499692
|
init3({
|
|
499693
499693
|
dsn,
|
|
499694
|
-
release: typeof MACRO !== "undefined" ? "4.2.18
|
|
499694
|
+
release: typeof MACRO !== "undefined" ? "4.2.18" : undefined,
|
|
499695
499695
|
environment: typeof BUILD_ENV !== "undefined" ? BUILD_ENV : "production",
|
|
499696
499696
|
maxBreadcrumbs: 20,
|
|
499697
499697
|
sampleRate: 1,
|
|
@@ -527588,7 +527588,7 @@ async function initializeBetaTracing(resource) {
|
|
|
527588
527588
|
});
|
|
527589
527589
|
logs.setGlobalLoggerProvider(loggerProvider);
|
|
527590
527590
|
setLoggerProvider(loggerProvider);
|
|
527591
|
-
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.18
|
|
527591
|
+
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.18");
|
|
527592
527592
|
setEventLogger(eventLogger);
|
|
527593
527593
|
process.on("beforeExit", async () => {
|
|
527594
527594
|
await loggerProvider?.forceFlush();
|
|
@@ -527628,7 +527628,7 @@ async function initializeTelemetry() {
|
|
|
527628
527628
|
const platform5 = getPlatform();
|
|
527629
527629
|
const baseAttributes = {
|
|
527630
527630
|
[import_semantic_conventions29.ATTR_SERVICE_NAME]: "claude-code",
|
|
527631
|
-
[import_semantic_conventions29.ATTR_SERVICE_VERSION]: "4.2.18
|
|
527631
|
+
[import_semantic_conventions29.ATTR_SERVICE_VERSION]: "4.2.18"
|
|
527632
527632
|
};
|
|
527633
527633
|
if (platform5 === "wsl") {
|
|
527634
527634
|
const wslVersion = getWslVersion();
|
|
@@ -527673,7 +527673,7 @@ async function initializeTelemetry() {
|
|
|
527673
527673
|
} catch {}
|
|
527674
527674
|
};
|
|
527675
527675
|
registerCleanup(shutdownTelemetry2);
|
|
527676
|
-
return meterProvider2.getMeter("com.anthropic.claude_code", "4.2.18
|
|
527676
|
+
return meterProvider2.getMeter("com.anthropic.claude_code", "4.2.18");
|
|
527677
527677
|
}
|
|
527678
527678
|
const meterProvider = new import_sdk_metrics2.MeterProvider({
|
|
527679
527679
|
resource,
|
|
@@ -527693,7 +527693,7 @@ async function initializeTelemetry() {
|
|
|
527693
527693
|
});
|
|
527694
527694
|
logs.setGlobalLoggerProvider(loggerProvider);
|
|
527695
527695
|
setLoggerProvider(loggerProvider);
|
|
527696
|
-
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.18
|
|
527696
|
+
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "4.2.18");
|
|
527697
527697
|
setEventLogger(eventLogger);
|
|
527698
527698
|
logForDebugging("[3P telemetry] Event logger set successfully");
|
|
527699
527699
|
process.on("beforeExit", async () => {
|
|
@@ -527755,7 +527755,7 @@ Current timeout: ${timeoutMs}ms
|
|
|
527755
527755
|
}
|
|
527756
527756
|
};
|
|
527757
527757
|
registerCleanup(shutdownTelemetry);
|
|
527758
|
-
return meterProvider.getMeter("com.anthropic.claude_code", "4.2.18
|
|
527758
|
+
return meterProvider.getMeter("com.anthropic.claude_code", "4.2.18");
|
|
527759
527759
|
}
|
|
527760
527760
|
async function flushTelemetry() {
|
|
527761
527761
|
const meterProvider = getMeterProvider();
|
|
@@ -528814,7 +528814,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
528814
528814
|
logError3(new AutoUpdaterError("Another process is currently installing an update"));
|
|
528815
528815
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
528816
528816
|
pid: process.pid,
|
|
528817
|
-
currentVersion: "4.2.18
|
|
528817
|
+
currentVersion: "4.2.18"
|
|
528818
528818
|
});
|
|
528819
528819
|
return { status: "in_progress" };
|
|
528820
528820
|
}
|
|
@@ -528823,7 +528823,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
528823
528823
|
if (!env4.isRunningWithBun() && env4.isNpmFromWindowsPath()) {
|
|
528824
528824
|
logError3(new Error("Windows NPM detected in WSL environment"));
|
|
528825
528825
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
528826
|
-
currentVersion: "4.2.18
|
|
528826
|
+
currentVersion: "4.2.18"
|
|
528827
528827
|
});
|
|
528828
528828
|
return {
|
|
528829
528829
|
status: "install_failed",
|
|
@@ -529369,7 +529369,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
529369
529369
|
}
|
|
529370
529370
|
async function getDoctorDiagnostic() {
|
|
529371
529371
|
const installationType = await getCurrentInstallationType();
|
|
529372
|
-
const version9 = typeof MACRO !== "undefined" ? "4.2.18
|
|
529372
|
+
const version9 = typeof MACRO !== "undefined" ? "4.2.18" : "unknown";
|
|
529373
529373
|
const installationPath = await getInstallationPath();
|
|
529374
529374
|
const invokedBinary = getInvokedBinary();
|
|
529375
529375
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -567556,7 +567556,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
567556
567556
|
const client10 = new Client3({
|
|
567557
567557
|
name: "claude-code",
|
|
567558
567558
|
title: "CoStrict",
|
|
567559
|
-
version: "4.2.18
|
|
567559
|
+
version: "4.2.18",
|
|
567560
567560
|
description: "CoStrict agentic coding tool",
|
|
567561
567561
|
websiteUrl: PRODUCT_URL
|
|
567562
567562
|
}, {
|
|
@@ -567927,7 +567927,7 @@ var init_client18 = __esm(() => {
|
|
|
567927
567927
|
const client10 = new Client3({
|
|
567928
567928
|
name: "claude-code",
|
|
567929
567929
|
title: "CoStrict",
|
|
567930
|
-
version: "4.2.18
|
|
567930
|
+
version: "4.2.18",
|
|
567931
567931
|
description: "CoStrict agentic coding tool",
|
|
567932
567932
|
websiteUrl: PRODUCT_URL
|
|
567933
567933
|
}, {
|
|
@@ -569317,7 +569317,7 @@ function getInstallationEnv() {
|
|
|
569317
569317
|
return;
|
|
569318
569318
|
}
|
|
569319
569319
|
function getClaudeCodeVersion() {
|
|
569320
|
-
return "4.2.18
|
|
569320
|
+
return "4.2.18";
|
|
569321
569321
|
}
|
|
569322
569322
|
async function getInstalledVSCodeExtensionVersion(command4) {
|
|
569323
569323
|
const { stdout } = await execFileNoThrow2(command4, ["--list-extensions", "--show-versions"], {
|
|
@@ -570681,8 +570681,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
570681
570681
|
const maxVersion = await getMaxVersion();
|
|
570682
570682
|
if (maxVersion && gt(version10, maxVersion)) {
|
|
570683
570683
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version10} to ${maxVersion}`);
|
|
570684
|
-
if (gte2("4.2.18
|
|
570685
|
-
logForDebugging(`Native installer: current version ${"4.2.18
|
|
570684
|
+
if (gte2("4.2.18", maxVersion)) {
|
|
570685
|
+
logForDebugging(`Native installer: current version ${"4.2.18"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
570686
570686
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
570687
570687
|
latency_ms: Date.now() - startTime2,
|
|
570688
570688
|
max_version: maxVersion,
|
|
@@ -570693,7 +570693,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
570693
570693
|
version10 = maxVersion;
|
|
570694
570694
|
}
|
|
570695
570695
|
}
|
|
570696
|
-
if (!forceReinstall && version10 === "4.2.18
|
|
570696
|
+
if (!forceReinstall && version10 === "4.2.18" && await versionIsAvailable(version10) && await isPossibleClaudeBinary(executablePath)) {
|
|
570697
570697
|
logForDebugging(`Found ${version10} at ${executablePath}, skipping install`);
|
|
570698
570698
|
logEvent("tengu_native_update_complete", {
|
|
570699
570699
|
latency_ms: Date.now() - startTime2,
|
|
@@ -708697,7 +708697,7 @@ function Feedback({
|
|
|
708697
708697
|
platform: env4.platform,
|
|
708698
708698
|
gitRepo: envInfo.isGit,
|
|
708699
708699
|
terminal: env4.terminal,
|
|
708700
|
-
version: "4.2.18
|
|
708700
|
+
version: "4.2.18",
|
|
708701
708701
|
transcript: normalizeMessagesForAPI(messages),
|
|
708702
708702
|
errors: sanitizedErrors,
|
|
708703
708703
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -708880,7 +708880,7 @@ function Feedback({
|
|
|
708880
708880
|
", ",
|
|
708881
708881
|
env4.terminal,
|
|
708882
708882
|
", v",
|
|
708883
|
-
"4.2.18
|
|
708883
|
+
"4.2.18"
|
|
708884
708884
|
]
|
|
708885
708885
|
})
|
|
708886
708886
|
]
|
|
@@ -708977,7 +708977,7 @@ ${sanitizedDescription}
|
|
|
708977
708977
|
` + `**Environment Info**
|
|
708978
708978
|
` + `- Platform: ${env4.platform}
|
|
708979
708979
|
` + `- Terminal: ${env4.terminal}
|
|
708980
|
-
` + `- Version: ${"4.2.18
|
|
708980
|
+
` + `- Version: ${"4.2.18"}
|
|
708981
708981
|
` + `- Feedback ID: ${feedbackId}
|
|
708982
708982
|
` + `
|
|
708983
708983
|
**Errors**
|
|
@@ -711213,7 +711213,7 @@ function buildPrimarySection() {
|
|
|
711213
711213
|
children: t("settings.status.renameHint")
|
|
711214
711214
|
});
|
|
711215
711215
|
return [
|
|
711216
|
-
{ label: t("settings.status.version"), value: "4.2.18
|
|
711216
|
+
{ label: t("settings.status.version"), value: "4.2.18" },
|
|
711217
711217
|
{ label: t("settings.status.sessionName"), value: nameValue },
|
|
711218
711218
|
{ label: t("settings.status.sessionId"), value: sessionId },
|
|
711219
711219
|
{ label: t("settings.status.cwd"), value: getCwd() },
|
|
@@ -714071,7 +714071,7 @@ function Config({
|
|
|
714071
714071
|
}
|
|
714072
714072
|
})
|
|
714073
714073
|
}) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_runtime191.jsx(ChannelDowngradeDialog, {
|
|
714074
|
-
currentVersion: "4.2.18
|
|
714074
|
+
currentVersion: "4.2.18",
|
|
714075
714075
|
onChoice: (choice) => {
|
|
714076
714076
|
setShowSubmenu(null);
|
|
714077
714077
|
setTabsHidden(false);
|
|
@@ -714083,7 +714083,7 @@ function Config({
|
|
|
714083
714083
|
autoUpdatesChannel: "stable"
|
|
714084
714084
|
};
|
|
714085
714085
|
if (choice === "stay") {
|
|
714086
|
-
newSettings.minimumVersion = "4.2.18
|
|
714086
|
+
newSettings.minimumVersion = "4.2.18";
|
|
714087
714087
|
}
|
|
714088
714088
|
updateSettingsForSource("userSettings", newSettings);
|
|
714089
714089
|
setSettingsData((prev) => ({
|
|
@@ -719552,7 +719552,7 @@ function HelpV2({ onClose, commands: commands11 }) {
|
|
|
719552
719552
|
color: "professionalBlue",
|
|
719553
719553
|
children: [
|
|
719554
719554
|
/* @__PURE__ */ jsx_runtime218.jsx(Tabs, {
|
|
719555
|
-
title: process.env.USER_TYPE === "sf" ? "/help" : `CoStrict v${"4.2.18
|
|
719555
|
+
title: process.env.USER_TYPE === "sf" ? "/help" : `CoStrict v${"4.2.18"}`,
|
|
719556
719556
|
color: "professionalBlue",
|
|
719557
719557
|
defaultTab: "general",
|
|
719558
719558
|
children: tabs
|
|
@@ -742553,7 +742553,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
742553
742553
|
return [];
|
|
742554
742554
|
}
|
|
742555
742555
|
}
|
|
742556
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.18
|
|
742556
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.18") {
|
|
742557
742557
|
if (process.env.USER_TYPE === "sf") {
|
|
742558
742558
|
const changelog = "";
|
|
742559
742559
|
if (changelog) {
|
|
@@ -742580,7 +742580,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "4.2.18-be
|
|
|
742580
742580
|
releaseNotes
|
|
742581
742581
|
};
|
|
742582
742582
|
}
|
|
742583
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "4.2.18
|
|
742583
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "4.2.18") {
|
|
742584
742584
|
if (process.env.USER_TYPE === "sf") {
|
|
742585
742585
|
const changelog = "";
|
|
742586
742586
|
if (changelog) {
|
|
@@ -745093,7 +745093,7 @@ function isNotLoggedIn() {
|
|
|
745093
745093
|
return true;
|
|
745094
745094
|
}
|
|
745095
745095
|
function getLogoDisplayData() {
|
|
745096
|
-
const version10 = process.env.DEMO_VERSION ?? "4.2.18
|
|
745096
|
+
const version10 = process.env.DEMO_VERSION ?? "4.2.18";
|
|
745097
745097
|
const serverUrl = getDirectConnectServerUrl();
|
|
745098
745098
|
const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
|
|
745099
745099
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -745671,7 +745671,7 @@ var init_MatrixMessageLine = __esm(() => {
|
|
|
745671
745671
|
// src/components/matrix-tactical/MatrixWelcome.tsx
|
|
745672
745672
|
import { basename as basename47 } from "path";
|
|
745673
745673
|
function MatrixWelcome({
|
|
745674
|
-
version: version10 = "4.2.18
|
|
745674
|
+
version: version10 = "4.2.18",
|
|
745675
745675
|
projectName,
|
|
745676
745676
|
cwd: cwd2,
|
|
745677
745677
|
modelDisplayName,
|
|
@@ -746306,13 +746306,13 @@ function LogoV2() {
|
|
|
746306
746306
|
const { hasReleaseNotes } = checkForReleaseNotesSync(config13.lastReleaseNotesSeen);
|
|
746307
746307
|
import_react167.useEffect(() => {
|
|
746308
746308
|
const currentConfig = getGlobalConfig();
|
|
746309
|
-
if (currentConfig.lastReleaseNotesSeen === "4.2.18
|
|
746309
|
+
if (currentConfig.lastReleaseNotesSeen === "4.2.18") {
|
|
746310
746310
|
return;
|
|
746311
746311
|
}
|
|
746312
746312
|
saveGlobalConfig((current2) => {
|
|
746313
|
-
if (current2.lastReleaseNotesSeen === "4.2.18
|
|
746313
|
+
if (current2.lastReleaseNotesSeen === "4.2.18")
|
|
746314
746314
|
return current2;
|
|
746315
|
-
return { ...current2, lastReleaseNotesSeen: "4.2.18
|
|
746315
|
+
return { ...current2, lastReleaseNotesSeen: "4.2.18" };
|
|
746316
746316
|
});
|
|
746317
746317
|
if (showOnboarding) {
|
|
746318
746318
|
incrementProjectOnboardingSeenCount();
|
|
@@ -768841,7 +768841,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
|
|
|
768841
768841
|
smapsRollup,
|
|
768842
768842
|
platform: process.platform,
|
|
768843
768843
|
nodeVersion: process.version,
|
|
768844
|
-
ccVersion: "4.2.18
|
|
768844
|
+
ccVersion: "4.2.18"
|
|
768845
768845
|
};
|
|
768846
768846
|
}
|
|
768847
768847
|
async function performHeapDump(trigger = "manual", dumpNumber = 0) {
|
|
@@ -768957,7 +768957,7 @@ var init_mock_limits = __esm(() => {
|
|
|
768957
768957
|
var call55 = async () => {
|
|
768958
768958
|
return {
|
|
768959
768959
|
type: "text",
|
|
768960
|
-
value: `${"4.2.18
|
|
768960
|
+
value: `${"4.2.18"} (built ${"2026-07-29T00:51:14.363Z"})`
|
|
768961
768961
|
};
|
|
768962
768962
|
}, version10, version_default;
|
|
768963
768963
|
var init_version2 = __esm(() => {
|
|
@@ -786273,7 +786273,7 @@ function generateHtmlReport(data, insights) {
|
|
|
786273
786273
|
</html>`;
|
|
786274
786274
|
}
|
|
786275
786275
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
786276
|
-
const version11 = typeof MACRO !== "undefined" ? "4.2.18
|
|
786276
|
+
const version11 = typeof MACRO !== "undefined" ? "4.2.18" : "unknown";
|
|
786277
786277
|
const remote_hosts_collected = remoteStats?.hosts.filter((h8) => h8.sessionCount > 0).map((h8) => h8.name);
|
|
786278
786278
|
const facets_summary = {
|
|
786279
786279
|
total: facets.size,
|
|
@@ -790723,7 +790723,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
790723
790723
|
init_settings2();
|
|
790724
790724
|
init_slowOperations();
|
|
790725
790725
|
init_uuid();
|
|
790726
|
-
VERSION11 = typeof MACRO !== "undefined" ? "4.2.18
|
|
790726
|
+
VERSION11 = typeof MACRO !== "undefined" ? "4.2.18" : "unknown";
|
|
790727
790727
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
790728
790728
|
SKIP_FIRST_PROMPT_PATTERN2 = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
790729
790729
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -792064,7 +792064,7 @@ var init_filesystem = __esm(() => {
|
|
|
792064
792064
|
});
|
|
792065
792065
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
792066
792066
|
const nonce = randomBytes24(16).toString("hex");
|
|
792067
|
-
return join204(getCostrictTempDir(), "bundled-skills", "4.2.18
|
|
792067
|
+
return join204(getCostrictTempDir(), "bundled-skills", "4.2.18", nonce);
|
|
792068
792068
|
});
|
|
792069
792069
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
792070
792070
|
});
|
|
@@ -798334,7 +798334,7 @@ function computeFingerprint(messageText, version11) {
|
|
|
798334
798334
|
}
|
|
798335
798335
|
function computeFingerprintFromMessages(messages) {
|
|
798336
798336
|
const firstMessageText = extractFirstMessageText(messages);
|
|
798337
|
-
return computeFingerprint(firstMessageText, "4.2.18
|
|
798337
|
+
return computeFingerprint(firstMessageText, "4.2.18");
|
|
798338
798338
|
}
|
|
798339
798339
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
798340
798340
|
var init_fingerprint = () => {};
|
|
@@ -798744,7 +798744,7 @@ function getAnthropicEnvMetadata() {
|
|
|
798744
798744
|
function getBuildAgeMinutes() {
|
|
798745
798745
|
if (false)
|
|
798746
798746
|
;
|
|
798747
|
-
const buildTime = new Date("2026-07-
|
|
798747
|
+
const buildTime = new Date("2026-07-29T00:51:14.363Z").getTime();
|
|
798748
798748
|
if (isNaN(buildTime))
|
|
798749
798749
|
return;
|
|
798750
798750
|
return Math.floor((Date.now() - buildTime) / 60000);
|
|
@@ -804141,7 +804141,7 @@ async function sideQuery(opts) {
|
|
|
804141
804141
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
804142
804142
|
}
|
|
804143
804143
|
const messageText = extractFirstUserMessageText(messages);
|
|
804144
|
-
const fingerprint = computeFingerprint(messageText, "4.2.18
|
|
804144
|
+
const fingerprint = computeFingerprint(messageText, "4.2.18");
|
|
804145
804145
|
const attributionHeader = getAttributionHeader(fingerprint);
|
|
804146
804146
|
const systemBlocks = [
|
|
804147
804147
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -807537,7 +807537,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
807537
807537
|
slash_commands: inputs.commands.filter((c10) => c10.userInvocable !== false).map((c10) => c10.name),
|
|
807538
807538
|
apiKeySource: getAnthropicApiKeyWithSource().source,
|
|
807539
807539
|
betas: getSdkBetas(),
|
|
807540
|
-
claude_code_version: "4.2.18
|
|
807540
|
+
claude_code_version: "4.2.18",
|
|
807541
807541
|
output_style: outputStyle2,
|
|
807542
807542
|
agents: inputs.agents.map((agent) => agent.agentType),
|
|
807543
807543
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
|
|
@@ -811081,7 +811081,7 @@ function appendToLog(path56, message2) {
|
|
|
811081
811081
|
cwd: getFsImplementation().cwd(),
|
|
811082
811082
|
userType: process.env.USER_TYPE,
|
|
811083
811083
|
sessionId: getSessionId(),
|
|
811084
|
-
version: "4.2.18
|
|
811084
|
+
version: "4.2.18"
|
|
811085
811085
|
};
|
|
811086
811086
|
getLogWriter(path56).write(messageWithTimestamp);
|
|
811087
811087
|
}
|
|
@@ -832126,7 +832126,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
832126
832126
|
project_dir: getOriginalCwd(),
|
|
832127
832127
|
added_dirs: addedDirs
|
|
832128
832128
|
},
|
|
832129
|
-
version: "4.2.18
|
|
832129
|
+
version: "4.2.18",
|
|
832130
832130
|
output_style: {
|
|
832131
832131
|
name: outputStyleName
|
|
832132
832132
|
},
|
|
@@ -850751,7 +850751,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
|
|
|
850751
850751
|
} catch {}
|
|
850752
850752
|
const data = {
|
|
850753
850753
|
trigger,
|
|
850754
|
-
version: "4.2.18
|
|
850754
|
+
version: "4.2.18",
|
|
850755
850755
|
platform: process.platform,
|
|
850756
850756
|
transcript,
|
|
850757
850757
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -852006,7 +852006,7 @@ function getReleaseType(current2, latest) {
|
|
|
852006
852006
|
return "patch";
|
|
852007
852007
|
}
|
|
852008
852008
|
async function checkNewAutoUpdate(callbacks) {
|
|
852009
|
-
const currentVersion = "4.2.18
|
|
852009
|
+
const currentVersion = "4.2.18";
|
|
852010
852010
|
logForDebugging(`[newAutoUpdater] checking, current: ${currentVersion}`);
|
|
852011
852011
|
if (isNewAutoUpdaterDisabled()) {
|
|
852012
852012
|
return { action: "skip", currentVersion, latestVersion: null };
|
|
@@ -863239,7 +863239,7 @@ function WelcomeV2() {
|
|
|
863239
863239
|
dimColor: true,
|
|
863240
863240
|
children: [
|
|
863241
863241
|
"v",
|
|
863242
|
-
"4.2.18
|
|
863242
|
+
"4.2.18",
|
|
863243
863243
|
" "
|
|
863244
863244
|
]
|
|
863245
863245
|
})
|
|
@@ -863305,7 +863305,7 @@ function WelcomeV2() {
|
|
|
863305
863305
|
dimColor: true,
|
|
863306
863306
|
children: [
|
|
863307
863307
|
"v",
|
|
863308
|
-
"4.2.18
|
|
863308
|
+
"4.2.18",
|
|
863309
863309
|
" "
|
|
863310
863310
|
]
|
|
863311
863311
|
})
|
|
@@ -863407,7 +863407,7 @@ function AppleTerminalWelcomeV2({ theme: theme2, welcomeMessage }) {
|
|
|
863407
863407
|
dimColor: true,
|
|
863408
863408
|
children: [
|
|
863409
863409
|
"v",
|
|
863410
|
-
"4.2.18
|
|
863410
|
+
"4.2.18",
|
|
863411
863411
|
" "
|
|
863412
863412
|
]
|
|
863413
863413
|
})
|
|
@@ -863473,7 +863473,7 @@ function AppleTerminalWelcomeV2({ theme: theme2, welcomeMessage }) {
|
|
|
863473
863473
|
dimColor: true,
|
|
863474
863474
|
children: [
|
|
863475
863475
|
"v",
|
|
863476
|
-
"4.2.18
|
|
863476
|
+
"4.2.18",
|
|
863477
863477
|
" "
|
|
863478
863478
|
]
|
|
863479
863479
|
})
|
|
@@ -864413,7 +864413,7 @@ function completeOnboarding() {
|
|
|
864413
864413
|
saveGlobalConfig((current2) => ({
|
|
864414
864414
|
...current2,
|
|
864415
864415
|
hasCompletedOnboarding: true,
|
|
864416
|
-
lastOnboardingVersion: "4.2.18
|
|
864416
|
+
lastOnboardingVersion: "4.2.18"
|
|
864417
864417
|
}));
|
|
864418
864418
|
}
|
|
864419
864419
|
function showDialog(root9, renderer) {
|
|
@@ -879469,7 +879469,7 @@ async function startMCPServer(cwd3, debug5, verbose) {
|
|
|
879469
879469
|
setCwd(cwd3);
|
|
879470
879470
|
const server2 = new Server({
|
|
879471
879471
|
name: "claude/tengu",
|
|
879472
|
-
version: "4.2.18
|
|
879472
|
+
version: "4.2.18"
|
|
879473
879473
|
}, {
|
|
879474
879474
|
capabilities: {
|
|
879475
879475
|
tools: {}
|
|
@@ -881754,7 +881754,7 @@ function createHealthRoutes(sessionManager) {
|
|
|
881754
881754
|
const uptime2 = process.uptime() * 1000;
|
|
881755
881755
|
return c10.json({
|
|
881756
881756
|
status: "ok",
|
|
881757
|
-
version: "4.2.18
|
|
881757
|
+
version: "4.2.18",
|
|
881758
881758
|
uptime_ms: Math.round(uptime2),
|
|
881759
881759
|
active_sessions: sessionManager.getActiveCount()
|
|
881760
881760
|
});
|
|
@@ -882026,7 +882026,7 @@ function getMacroDefines() {
|
|
|
882026
882026
|
commit = execSync3("git rev-parse --short HEAD", { encoding: "utf-8", cwd: __dirname }).trim();
|
|
882027
882027
|
} catch {}
|
|
882028
882028
|
return {
|
|
882029
|
-
"MACRO.VERSION": JSON.stringify("4.2.18
|
|
882029
|
+
"MACRO.VERSION": JSON.stringify("4.2.18"),
|
|
882030
882030
|
"MACRO.BUILD_TIME": JSON.stringify(new Date().toISOString()),
|
|
882031
882031
|
"MACRO.COMMIT": JSON.stringify(commit),
|
|
882032
882032
|
"MACRO.FEEDBACK_CHANNEL": JSON.stringify(""),
|
|
@@ -882142,112 +882142,6 @@ var init_childSpawn = __esm(() => {
|
|
|
882142
882142
|
})();
|
|
882143
882143
|
});
|
|
882144
882144
|
|
|
882145
|
-
// src/utils/permissions/permissionModeHooks.ts
|
|
882146
|
-
function allowHook(toolName) {
|
|
882147
|
-
return { matcher: { tool_name: toolName }, action: { type: "allow" } };
|
|
882148
|
-
}
|
|
882149
|
-
function askHook(toolName) {
|
|
882150
|
-
return { matcher: { tool_name: toolName }, action: { type: "ask" } };
|
|
882151
|
-
}
|
|
882152
|
-
function buildHooksForPermissionMode(mode) {
|
|
882153
|
-
switch (mode) {
|
|
882154
|
-
case "plan": {
|
|
882155
|
-
const preToolUse = [];
|
|
882156
|
-
for (const tool of READ_ONLY_TOOLS) {
|
|
882157
|
-
preToolUse.push(allowHook(tool));
|
|
882158
|
-
}
|
|
882159
|
-
for (const tool of FILE_OPERATION_TOOLS) {
|
|
882160
|
-
preToolUse.push(allowHook(tool));
|
|
882161
|
-
}
|
|
882162
|
-
for (const tool of DANGEROUS_TOOLS) {
|
|
882163
|
-
preToolUse.push(askHook(tool));
|
|
882164
|
-
}
|
|
882165
|
-
for (const tool of PLAN_APPROVAL_TOOLS) {
|
|
882166
|
-
preToolUse.push(askHook(tool));
|
|
882167
|
-
}
|
|
882168
|
-
return { PreToolUse: preToolUse };
|
|
882169
|
-
}
|
|
882170
|
-
case "default": {
|
|
882171
|
-
const preToolUse = [];
|
|
882172
|
-
for (const tool of READ_ONLY_TOOLS) {
|
|
882173
|
-
preToolUse.push(allowHook(tool));
|
|
882174
|
-
}
|
|
882175
|
-
for (const tool of FILE_OPERATION_TOOLS) {
|
|
882176
|
-
preToolUse.push(askHook(tool));
|
|
882177
|
-
}
|
|
882178
|
-
for (const tool of DANGEROUS_TOOLS) {
|
|
882179
|
-
preToolUse.push(askHook(tool));
|
|
882180
|
-
}
|
|
882181
|
-
return { PreToolUse: preToolUse };
|
|
882182
|
-
}
|
|
882183
|
-
case "acceptEdits": {
|
|
882184
|
-
const preToolUse = [];
|
|
882185
|
-
for (const tool of READ_ONLY_TOOLS) {
|
|
882186
|
-
preToolUse.push(allowHook(tool));
|
|
882187
|
-
}
|
|
882188
|
-
for (const tool of FILE_OPERATION_TOOLS) {
|
|
882189
|
-
preToolUse.push(allowHook(tool));
|
|
882190
|
-
}
|
|
882191
|
-
for (const tool of DANGEROUS_TOOLS) {
|
|
882192
|
-
preToolUse.push(askHook(tool));
|
|
882193
|
-
}
|
|
882194
|
-
return { PreToolUse: preToolUse };
|
|
882195
|
-
}
|
|
882196
|
-
case "bypassPermissions":
|
|
882197
|
-
case "auto":
|
|
882198
|
-
case "dontAsk":
|
|
882199
|
-
case "bubble":
|
|
882200
|
-
return;
|
|
882201
|
-
}
|
|
882202
|
-
}
|
|
882203
|
-
function mergeHooks(autoHooks, userHooks) {
|
|
882204
|
-
if (!autoHooks && !userHooks)
|
|
882205
|
-
return;
|
|
882206
|
-
if (!autoHooks)
|
|
882207
|
-
return userHooks;
|
|
882208
|
-
if (!userHooks)
|
|
882209
|
-
return autoHooks;
|
|
882210
|
-
const merged = { ...userHooks };
|
|
882211
|
-
for (const [key6, value] of Object.entries(autoHooks)) {
|
|
882212
|
-
const existing = merged[key6];
|
|
882213
|
-
if (Array.isArray(existing) && Array.isArray(value)) {
|
|
882214
|
-
merged[key6] = [...value, ...existing];
|
|
882215
|
-
} else if (!(key6 in merged)) {
|
|
882216
|
-
merged[key6] = value;
|
|
882217
|
-
}
|
|
882218
|
-
}
|
|
882219
|
-
return merged;
|
|
882220
|
-
}
|
|
882221
|
-
var READ_ONLY_TOOLS, FILE_OPERATION_TOOLS, DANGEROUS_TOOLS, PLAN_APPROVAL_TOOLS;
|
|
882222
|
-
var init_permissionModeHooks = __esm(() => {
|
|
882223
|
-
READ_ONLY_TOOLS = [
|
|
882224
|
-
"Read",
|
|
882225
|
-
"Glob",
|
|
882226
|
-
"Grep",
|
|
882227
|
-
"ToolSearch",
|
|
882228
|
-
"LSP",
|
|
882229
|
-
"TaskGet",
|
|
882230
|
-
"TaskList",
|
|
882231
|
-
"WebFetch",
|
|
882232
|
-
"WebSearch",
|
|
882233
|
-
"McpGet",
|
|
882234
|
-
"McpList"
|
|
882235
|
-
];
|
|
882236
|
-
FILE_OPERATION_TOOLS = [
|
|
882237
|
-
"Edit",
|
|
882238
|
-
"Write",
|
|
882239
|
-
"NotebookEdit"
|
|
882240
|
-
];
|
|
882241
|
-
DANGEROUS_TOOLS = [
|
|
882242
|
-
"Bash",
|
|
882243
|
-
"PowerShell"
|
|
882244
|
-
];
|
|
882245
|
-
PLAN_APPROVAL_TOOLS = [
|
|
882246
|
-
"ExitPlanMode",
|
|
882247
|
-
"AskUserQuestion"
|
|
882248
|
-
];
|
|
882249
|
-
});
|
|
882250
|
-
|
|
882251
882145
|
// src/server/transcriptReader.ts
|
|
882252
882146
|
import { readFile as readFile89, readdir as readdir48, stat as stat61 } from "fs/promises";
|
|
882253
882147
|
import { existsSync as existsSync38 } from "fs";
|
|
@@ -882922,6 +882816,9 @@ var init_transcriptReader = __esm(() => {
|
|
|
882922
882816
|
});
|
|
882923
882817
|
|
|
882924
882818
|
// src/server/routes/session.ts
|
|
882819
|
+
import { join as join233 } from "path";
|
|
882820
|
+
import { existsSync as existsSync39 } from "fs";
|
|
882821
|
+
import { readdir as readdir49 } from "fs/promises";
|
|
882925
882822
|
async function getHistoryCwd(sessionId2) {
|
|
882926
882823
|
try {
|
|
882927
882824
|
const list = await listSessionsImpl({ limit: 1000 });
|
|
@@ -882930,6 +882827,9 @@ async function getHistoryCwd(sessionId2) {
|
|
|
882930
882827
|
return;
|
|
882931
882828
|
}
|
|
882932
882829
|
}
|
|
882830
|
+
function fallbackSessionTitle(sessionId2) {
|
|
882831
|
+
return `Session ${sessionId2.slice(0, 8)}`;
|
|
882832
|
+
}
|
|
882933
882833
|
function ssePrompt(handle, id, content, c10, eventBus, parts, messageID) {
|
|
882934
882834
|
return streamSSE(c10, async (stream8) => {
|
|
882935
882835
|
const startTime2 = Date.now();
|
|
@@ -883010,11 +882910,14 @@ function createSessionRoutes(sessionManager, eventBus) {
|
|
|
883010
882910
|
const handle = sessionManager.getSession(id);
|
|
883011
882911
|
if (handle && handle.status !== "stopped")
|
|
883012
882912
|
return handle;
|
|
883013
|
-
|
|
883014
|
-
let
|
|
883015
|
-
|
|
883016
|
-
|
|
883017
|
-
|
|
882913
|
+
let cwd4 = await getHistoryCwd(id);
|
|
882914
|
+
let resumeSessionId;
|
|
882915
|
+
if (cwd4) {
|
|
882916
|
+
resumeSessionId = id;
|
|
882917
|
+
} else {
|
|
882918
|
+
const entry = sessionManager.getIndexEntry(id);
|
|
882919
|
+
cwd4 = entry?.cwd;
|
|
882920
|
+
resumeSessionId = undefined;
|
|
883018
882921
|
}
|
|
883019
882922
|
if (!cwd4) {
|
|
883020
882923
|
throw notFound(`session not found or cannot be resumed: ${id}`);
|
|
@@ -883048,12 +882951,6 @@ function createSessionRoutes(sessionManager, eventBus) {
|
|
|
883048
882951
|
}
|
|
883049
882952
|
}
|
|
883050
882953
|
try {
|
|
883051
|
-
let hooks2 = body.hooks;
|
|
883052
|
-
if (permissionMode) {
|
|
883053
|
-
const resolvedMode = permissionModeFromString(permissionMode);
|
|
883054
|
-
const autoHooks = buildHooksForPermissionMode(resolvedMode);
|
|
883055
|
-
hooks2 = mergeHooks(autoHooks, body.hooks);
|
|
883056
|
-
}
|
|
883057
882954
|
const handle = await sessionManager.createSession({
|
|
883058
882955
|
cwd: cwd4,
|
|
883059
882956
|
sessionId: body.session_id,
|
|
@@ -883062,7 +882959,7 @@ function createSessionRoutes(sessionManager, eventBus) {
|
|
|
883062
882959
|
systemPrompt: body.system_prompt,
|
|
883063
882960
|
resumeSessionId: body.resume_session_id,
|
|
883064
882961
|
resumeSessionAt: body.resume_session_at,
|
|
883065
|
-
hooks:
|
|
882962
|
+
hooks: body.hooks,
|
|
883066
882963
|
execPath: process.execPath,
|
|
883067
882964
|
scriptArgs: getScriptArgsForChild()
|
|
883068
882965
|
});
|
|
@@ -883107,7 +883004,7 @@ function createSessionRoutes(sessionManager, eventBus) {
|
|
|
883107
883004
|
status: info2?.status ?? "stopped",
|
|
883108
883005
|
directory: info2?.directory ?? s.cwd ?? "",
|
|
883109
883006
|
cwd: info2?.cwd ?? s.cwd ?? "",
|
|
883110
|
-
title: info2?.title ?? s.customTitle ?? s.firstPrompt ?? s.summary
|
|
883007
|
+
title: (info2?.title ?? s.customTitle ?? s.firstPrompt ?? s.summary) || fallbackSessionTitle(s.sessionId),
|
|
883111
883008
|
version: info2?.version ?? "",
|
|
883112
883009
|
time: info2?.time ?? {
|
|
883113
883010
|
created: s.createdAt ?? 0,
|
|
@@ -883119,7 +883016,8 @@ function createSessionRoutes(sessionManager, eventBus) {
|
|
|
883119
883016
|
last_active_at: s.lastModified ?? info2?.last_active_at ?? 0,
|
|
883120
883017
|
cost_usd: info2?.cost_usd ?? 0,
|
|
883121
883018
|
input_tokens: info2?.input_tokens ?? 0,
|
|
883122
|
-
output_tokens: info2?.output_tokens ?? 0
|
|
883019
|
+
output_tokens: info2?.output_tokens ?? 0,
|
|
883020
|
+
message_count: handle?.messageCount ?? 0
|
|
883123
883021
|
};
|
|
883124
883022
|
});
|
|
883125
883023
|
const historyIds = new Set(historySessions.map((s) => s.sessionId));
|
|
@@ -883131,8 +883029,46 @@ function createSessionRoutes(sessionManager, eventBus) {
|
|
|
883131
883029
|
continue;
|
|
883132
883030
|
}
|
|
883133
883031
|
const info2 = handle.getInfo();
|
|
883134
|
-
merged.push({
|
|
883032
|
+
merged.push({
|
|
883033
|
+
...info2,
|
|
883034
|
+
title: info2.title || fallbackSessionTitle(handle.sessionId),
|
|
883035
|
+
message_count: handle.messageCount
|
|
883036
|
+
});
|
|
883037
|
+
historyIds.add(handle.sessionId);
|
|
883038
|
+
}
|
|
883039
|
+
}
|
|
883040
|
+
for (const entry of sessionManager.getIndexEntries()) {
|
|
883041
|
+
if (historyIds.has(entry.sessionId))
|
|
883042
|
+
continue;
|
|
883043
|
+
if (canonicalDir) {
|
|
883044
|
+
const entryCwd = await canonicalizePath(entry.cwd).catch(() => entry.cwd);
|
|
883045
|
+
if (entryCwd !== canonicalDir)
|
|
883046
|
+
continue;
|
|
883135
883047
|
}
|
|
883048
|
+
merged.push({
|
|
883049
|
+
id: entry.sessionId,
|
|
883050
|
+
session_id: entry.sessionId,
|
|
883051
|
+
slug: entry.sessionId,
|
|
883052
|
+
projectID: "",
|
|
883053
|
+
status: "stopped",
|
|
883054
|
+
directory: entry.cwd,
|
|
883055
|
+
cwd: entry.cwd,
|
|
883056
|
+
title: fallbackSessionTitle(entry.sessionId),
|
|
883057
|
+
version: "",
|
|
883058
|
+
time: {
|
|
883059
|
+
created: entry.createdAt ?? 0,
|
|
883060
|
+
updated: entry.lastActiveAt ?? 0
|
|
883061
|
+
},
|
|
883062
|
+
model: undefined,
|
|
883063
|
+
permission_mode: entry.permissionMode,
|
|
883064
|
+
created_at: entry.createdAt ?? 0,
|
|
883065
|
+
last_active_at: entry.lastActiveAt ?? 0,
|
|
883066
|
+
cost_usd: 0,
|
|
883067
|
+
input_tokens: 0,
|
|
883068
|
+
output_tokens: 0,
|
|
883069
|
+
message_count: 0
|
|
883070
|
+
});
|
|
883071
|
+
historyIds.add(entry.sessionId);
|
|
883136
883072
|
}
|
|
883137
883073
|
const cwdCache = new Map;
|
|
883138
883074
|
const getCwd3 = async (p2) => {
|
|
@@ -883203,33 +883139,6 @@ function createSessionRoutes(sessionManager, eventBus) {
|
|
|
883203
883139
|
usage: handle.usage
|
|
883204
883140
|
});
|
|
883205
883141
|
}
|
|
883206
|
-
const entry = sessionManager.getIndexEntry(id);
|
|
883207
|
-
if (entry) {
|
|
883208
|
-
return c10.json({
|
|
883209
|
-
id,
|
|
883210
|
-
session_id: id,
|
|
883211
|
-
slug: id,
|
|
883212
|
-
projectID: "",
|
|
883213
|
-
status: "stopped",
|
|
883214
|
-
directory: entry.cwd ?? "",
|
|
883215
|
-
cwd: entry.cwd ?? "",
|
|
883216
|
-
title: "",
|
|
883217
|
-
version: "",
|
|
883218
|
-
time: {
|
|
883219
|
-
created: entry.createdAt ?? 0,
|
|
883220
|
-
updated: entry.lastActiveAt ?? 0
|
|
883221
|
-
},
|
|
883222
|
-
model: undefined,
|
|
883223
|
-
permission_mode: entry.permissionMode,
|
|
883224
|
-
created_at: entry.createdAt ?? 0,
|
|
883225
|
-
last_active_at: entry.lastActiveAt ?? 0,
|
|
883226
|
-
cost_usd: 0,
|
|
883227
|
-
input_tokens: 0,
|
|
883228
|
-
output_tokens: 0,
|
|
883229
|
-
message_count: 0,
|
|
883230
|
-
usage: { input_tokens: 0, output_tokens: 0 }
|
|
883231
|
-
});
|
|
883232
|
-
}
|
|
883233
883142
|
try {
|
|
883234
883143
|
const history = await listSessionsImpl({ limit: 1000 });
|
|
883235
883144
|
const s = history.find((h8) => h8.sessionId === id);
|
|
@@ -883253,7 +883162,7 @@ function createSessionRoutes(sessionManager, eventBus) {
|
|
|
883253
883162
|
status: "history",
|
|
883254
883163
|
directory: s.cwd ?? "",
|
|
883255
883164
|
cwd: s.cwd ?? "",
|
|
883256
|
-
title: s.customTitle ?? s.firstPrompt ?? s.summary
|
|
883165
|
+
title: (s.customTitle ?? s.firstPrompt ?? s.summary) || fallbackSessionTitle(s.sessionId),
|
|
883257
883166
|
version: "",
|
|
883258
883167
|
time: {
|
|
883259
883168
|
created: s.createdAt ?? 0,
|
|
@@ -883271,6 +883180,33 @@ function createSessionRoutes(sessionManager, eventBus) {
|
|
|
883271
883180
|
});
|
|
883272
883181
|
}
|
|
883273
883182
|
} catch {}
|
|
883183
|
+
const entry = sessionManager.getIndexEntry(id);
|
|
883184
|
+
if (entry) {
|
|
883185
|
+
return c10.json({
|
|
883186
|
+
id,
|
|
883187
|
+
session_id: id,
|
|
883188
|
+
slug: id,
|
|
883189
|
+
projectID: "",
|
|
883190
|
+
status: "stopped",
|
|
883191
|
+
directory: entry.cwd ?? "",
|
|
883192
|
+
cwd: entry.cwd ?? "",
|
|
883193
|
+
title: fallbackSessionTitle(id),
|
|
883194
|
+
version: "",
|
|
883195
|
+
time: {
|
|
883196
|
+
created: entry.createdAt ?? 0,
|
|
883197
|
+
updated: entry.lastActiveAt ?? 0
|
|
883198
|
+
},
|
|
883199
|
+
model: undefined,
|
|
883200
|
+
permission_mode: entry.permissionMode,
|
|
883201
|
+
created_at: entry.createdAt ?? 0,
|
|
883202
|
+
last_active_at: entry.lastActiveAt ?? 0,
|
|
883203
|
+
cost_usd: 0,
|
|
883204
|
+
input_tokens: 0,
|
|
883205
|
+
output_tokens: 0,
|
|
883206
|
+
message_count: 0,
|
|
883207
|
+
usage: { input_tokens: 0, output_tokens: 0 }
|
|
883208
|
+
});
|
|
883209
|
+
}
|
|
883274
883210
|
throw notFound("session not found");
|
|
883275
883211
|
}).patch("/session/:sessionID", async (c10) => {
|
|
883276
883212
|
const id = c10.req.param("sessionID");
|
|
@@ -883278,12 +883214,56 @@ function createSessionRoutes(sessionManager, eventBus) {
|
|
|
883278
883214
|
const body = await c10.req.json();
|
|
883279
883215
|
if (handle) {
|
|
883280
883216
|
if (body.title)
|
|
883281
|
-
handle.
|
|
883217
|
+
handle.setCustomTitle(body.title);
|
|
883282
883218
|
if (body.model)
|
|
883283
883219
|
await handle.setModel(body.model);
|
|
883284
883220
|
if (body.permission_mode)
|
|
883285
883221
|
await handle.setPermissionMode(body.permission_mode);
|
|
883286
883222
|
}
|
|
883223
|
+
if (body.title) {
|
|
883224
|
+
sessionManager.updateSessionEntry(id, { customTitle: body.title });
|
|
883225
|
+
try {
|
|
883226
|
+
const cwd4 = handle?.cwd ?? sessionManager.getIndexEntry(id)?.cwd;
|
|
883227
|
+
let transcriptPath;
|
|
883228
|
+
if (cwd4) {
|
|
883229
|
+
const p2 = join233(getProjectDir(cwd4), `${id}.jsonl`);
|
|
883230
|
+
if (existsSync39(p2))
|
|
883231
|
+
transcriptPath = p2;
|
|
883232
|
+
}
|
|
883233
|
+
if (!transcriptPath) {
|
|
883234
|
+
for (const projectsDir of getAllProjectsDirs()) {
|
|
883235
|
+
try {
|
|
883236
|
+
const dirents = await readdir49(projectsDir, { withFileTypes: true });
|
|
883237
|
+
for (const dirent of dirents) {
|
|
883238
|
+
if (!dirent.isDirectory())
|
|
883239
|
+
continue;
|
|
883240
|
+
const candidate = join233(projectsDir, dirent.name, `${id}.jsonl`);
|
|
883241
|
+
if (existsSync39(candidate)) {
|
|
883242
|
+
transcriptPath = candidate;
|
|
883243
|
+
break;
|
|
883244
|
+
}
|
|
883245
|
+
}
|
|
883246
|
+
} catch {}
|
|
883247
|
+
if (transcriptPath)
|
|
883248
|
+
break;
|
|
883249
|
+
}
|
|
883250
|
+
}
|
|
883251
|
+
if (transcriptPath) {
|
|
883252
|
+
await saveCustomTitle(id, body.title, transcriptPath, "user");
|
|
883253
|
+
}
|
|
883254
|
+
} catch (err3) {
|
|
883255
|
+
logError3(err3);
|
|
883256
|
+
}
|
|
883257
|
+
if (!handle) {
|
|
883258
|
+
eventBus.publish("session.updated", {
|
|
883259
|
+
_native_opencode: true,
|
|
883260
|
+
session_id: id,
|
|
883261
|
+
sessionID: id,
|
|
883262
|
+
info: { id, title: body.title },
|
|
883263
|
+
title: body.title
|
|
883264
|
+
});
|
|
883265
|
+
}
|
|
883266
|
+
}
|
|
883287
883267
|
return c10.json({
|
|
883288
883268
|
session_id: id,
|
|
883289
883269
|
title: handle?.title ?? body.title,
|
|
@@ -883366,7 +883346,21 @@ function createSessionRoutes(sessionManager, eventBus) {
|
|
|
883366
883346
|
} catch {}
|
|
883367
883347
|
}
|
|
883368
883348
|
handle.prompt(content, { parts: body.parts, messageID: body.messageID }).catch(() => {});
|
|
883369
|
-
} catch {
|
|
883349
|
+
} catch (err3) {
|
|
883350
|
+
handle.reportInitializationFailure(err3);
|
|
883351
|
+
try {
|
|
883352
|
+
await handle.terminate();
|
|
883353
|
+
} catch (terminationErr) {
|
|
883354
|
+
const cleanupMessage = terminationErr instanceof Error ? terminationErr.message : String(terminationErr);
|
|
883355
|
+
eventBus.publish("session.error", {
|
|
883356
|
+
sessionID: id,
|
|
883357
|
+
error: {
|
|
883358
|
+
subtype: "session_cleanup_error",
|
|
883359
|
+
level: "error",
|
|
883360
|
+
message: cleanupMessage
|
|
883361
|
+
}
|
|
883362
|
+
});
|
|
883363
|
+
}
|
|
883370
883364
|
eventBus.publish("session.status", {
|
|
883371
883365
|
sessionID: id,
|
|
883372
883366
|
status: { type: "idle" }
|
|
@@ -883474,8 +883468,8 @@ var init_session5 = __esm(() => {
|
|
|
883474
883468
|
init_errors20();
|
|
883475
883469
|
init_listSessionsImpl();
|
|
883476
883470
|
init_sessionStoragePortable();
|
|
883477
|
-
|
|
883478
|
-
|
|
883471
|
+
init_sessionStorage();
|
|
883472
|
+
init_log3();
|
|
883479
883473
|
init_transcriptReader();
|
|
883480
883474
|
});
|
|
883481
883475
|
|
|
@@ -884636,18 +884630,20 @@ function handleResultMessage(msg, ctx) {
|
|
|
884636
884630
|
isError: msg.is_error,
|
|
884637
884631
|
costUsd: msg.cost_usd,
|
|
884638
884632
|
usage: msg.usage,
|
|
884639
|
-
stopReason: msg.stop_reason
|
|
884633
|
+
stopReason: msg.stop_reason,
|
|
884634
|
+
errors: msg.errors
|
|
884640
884635
|
});
|
|
884641
884636
|
const subtype = msg.subtype;
|
|
884642
884637
|
if (subtype && subtype !== "success") {
|
|
884643
884638
|
const errorData = msg.errors;
|
|
884644
|
-
const
|
|
884639
|
+
const firstError = errorData?.[0];
|
|
884640
|
+
const errorMessage2 = typeof firstError === "string" ? firstError : firstError && typeof firstError === "object" ? firstError.message : undefined;
|
|
884645
884641
|
ctx.emitOpencodeEvent("session.error", {
|
|
884646
884642
|
sessionID: ctx.sessionId,
|
|
884647
884643
|
error: {
|
|
884648
884644
|
subtype,
|
|
884649
884645
|
level: "error",
|
|
884650
|
-
message: typeof errorMessage2 === "string" ? errorMessage2 :
|
|
884646
|
+
message: typeof errorMessage2 === "string" ? errorMessage2 : msg.subtype ?? "Unknown error"
|
|
884651
884647
|
}
|
|
884652
884648
|
});
|
|
884653
884649
|
}
|
|
@@ -885897,7 +885893,7 @@ var init_providerConfig2 = __esm(() => {
|
|
|
885897
885893
|
|
|
885898
885894
|
// src/server/routes/find.ts
|
|
885899
885895
|
import { stat as stat62 } from "fs/promises";
|
|
885900
|
-
import { join as
|
|
885896
|
+
import { join as join234 } from "path";
|
|
885901
885897
|
function createFindRoutes() {
|
|
885902
885898
|
return new Hono2().get("/find/file", async (c10) => {
|
|
885903
885899
|
const query5 = c10.req.query("query");
|
|
@@ -885912,7 +885908,7 @@ function createFindRoutes() {
|
|
|
885912
885908
|
for await (const path59 of glob2.scan({ cwd: cwd4, dot: false, absolute: false })) {
|
|
885913
885909
|
if (dirs) {
|
|
885914
885910
|
try {
|
|
885915
|
-
const s = await stat62(
|
|
885911
|
+
const s = await stat62(join234(cwd4, path59));
|
|
885916
885912
|
if (!s.isDirectory())
|
|
885917
885913
|
continue;
|
|
885918
885914
|
} catch {
|
|
@@ -886467,7 +886463,7 @@ class EventBus {
|
|
|
886467
886463
|
|
|
886468
886464
|
// src/services/agent-compat/attachments.ts
|
|
886469
886465
|
import { fileURLToPath as fileURLToPath14 } from "url";
|
|
886470
|
-
import { existsSync as
|
|
886466
|
+
import { existsSync as existsSync40 } from "fs";
|
|
886471
886467
|
import { extname as extname18 } from "path";
|
|
886472
886468
|
async function attachmentPartsToContentBlocks(text2, parts) {
|
|
886473
886469
|
const blocks = [];
|
|
@@ -886531,7 +886527,7 @@ async function pushFileUriBlock(blocks, url5, mime) {
|
|
|
886531
886527
|
} catch {
|
|
886532
886528
|
return;
|
|
886533
886529
|
}
|
|
886534
|
-
if (!
|
|
886530
|
+
if (!existsSync40(filePath)) {
|
|
886535
886531
|
logError3(new Error(`attachment file not found: ${filePath}`));
|
|
886536
886532
|
return;
|
|
886537
886533
|
}
|
|
@@ -886645,9 +886641,9 @@ __export(exports_sessionHandle, {
|
|
|
886645
886641
|
});
|
|
886646
886642
|
import { spawn as spawn18, spawnSync as spawnSync11 } from "child_process";
|
|
886647
886643
|
import { createInterface as createInterface4 } from "readline";
|
|
886648
|
-
import { readdir as
|
|
886649
|
-
import { existsSync as
|
|
886650
|
-
import { join as
|
|
886644
|
+
import { readdir as readdir50, readFile as readFile90 } from "fs/promises";
|
|
886645
|
+
import { existsSync as existsSync41 } from "fs";
|
|
886646
|
+
import { join as join235 } from "path";
|
|
886651
886647
|
function extractStdoutError(msg) {
|
|
886652
886648
|
const errors14 = msg.errors;
|
|
886653
886649
|
if (Array.isArray(errors14) && errors14.length > 0) {
|
|
@@ -886731,6 +886727,7 @@ var init_sessionHandle = __esm(() => {
|
|
|
886731
886727
|
_lastPromptUserUuid = null;
|
|
886732
886728
|
_controlChannel = new ControlChannel;
|
|
886733
886729
|
_titleGenerationAttempted = false;
|
|
886730
|
+
_customTitleSet = false;
|
|
886734
886731
|
_firstPromptContent;
|
|
886735
886732
|
_messageBuffer = [];
|
|
886736
886733
|
_tombstonedUuids = new Set;
|
|
@@ -886740,6 +886737,7 @@ var init_sessionHandle = __esm(() => {
|
|
|
886740
886737
|
_directExited = false;
|
|
886741
886738
|
_terminatePromise = null;
|
|
886742
886739
|
_exitNotified = false;
|
|
886740
|
+
_initializationFailureReported = false;
|
|
886743
886741
|
_processGroupId = null;
|
|
886744
886742
|
get subagentIndex() {
|
|
886745
886743
|
return this._subagentIndex;
|
|
@@ -886835,7 +886833,9 @@ var init_sessionHandle = __esm(() => {
|
|
|
886835
886833
|
}
|
|
886836
886834
|
return new Promise((resolve61, reject2) => {
|
|
886837
886835
|
const timer3 = setTimeout(() => {
|
|
886838
|
-
|
|
886836
|
+
const error100 = new Error(`Session ${this.sessionId} init timed out`);
|
|
886837
|
+
this.reportInitializationFailure(error100);
|
|
886838
|
+
reject2(error100);
|
|
886839
886839
|
}, timeoutMs);
|
|
886840
886840
|
const origResolve = this.initResolve;
|
|
886841
886841
|
const origReject = this.initReject;
|
|
@@ -886860,6 +886860,8 @@ var init_sessionHandle = __esm(() => {
|
|
|
886860
886860
|
this._model = opts.model;
|
|
886861
886861
|
this._agent = opts.agent;
|
|
886862
886862
|
this._permissionMode = opts.permissionMode ?? "default";
|
|
886863
|
+
this._title = opts.customTitle;
|
|
886864
|
+
this._customTitleSet = !!opts.customTitle;
|
|
886863
886865
|
this.verbose = opts.verbose ?? false;
|
|
886864
886866
|
}
|
|
886865
886867
|
onMessage(listener2) {
|
|
@@ -886870,16 +886872,16 @@ var init_sessionHandle = __esm(() => {
|
|
|
886870
886872
|
}
|
|
886871
886873
|
async buildSubagentIndex() {
|
|
886872
886874
|
const projectDir = getProjectDir(this.cwd);
|
|
886873
|
-
const sessionDir =
|
|
886874
|
-
if (!
|
|
886875
|
+
const sessionDir = join235(projectDir, this.sessionId, "subagents");
|
|
886876
|
+
if (!existsSync41(sessionDir))
|
|
886875
886877
|
return;
|
|
886876
886878
|
try {
|
|
886877
|
-
const entries = await
|
|
886879
|
+
const entries = await readdir50(sessionDir);
|
|
886878
886880
|
for (const entry of entries) {
|
|
886879
886881
|
if (!entry.startsWith("agent-") || !entry.endsWith(".jsonl"))
|
|
886880
886882
|
continue;
|
|
886881
886883
|
const agentId = entry.slice("agent-".length, -".jsonl".length);
|
|
886882
|
-
const transcriptPath =
|
|
886884
|
+
const transcriptPath = join235(sessionDir, entry);
|
|
886883
886885
|
const metaPath = transcriptPath.replace(/\.jsonl$/u, ".meta.json");
|
|
886884
886886
|
let meta6 = {};
|
|
886885
886887
|
try {
|
|
@@ -886950,15 +886952,7 @@ var init_sessionHandle = __esm(() => {
|
|
|
886950
886952
|
});
|
|
886951
886953
|
this.initRequestId = crypto.randomUUID();
|
|
886952
886954
|
this.sendInitialize();
|
|
886953
|
-
const timeout2 = setTimeout(() =>
|
|
886954
|
-
if (this.initReject) {
|
|
886955
|
-
const reject2 = this.initReject;
|
|
886956
|
-
this.initResolve = null;
|
|
886957
|
-
this.initReject = null;
|
|
886958
|
-
this.terminate();
|
|
886959
|
-
reject2(new Error(`Session ${this.sessionId} init timed out`));
|
|
886960
|
-
}
|
|
886961
|
-
}, INIT_TIMEOUT_MS2);
|
|
886955
|
+
const timeout2 = setTimeout(() => this.handleInitializationTimeout(), INIT_TIMEOUT_MS2);
|
|
886962
886956
|
this.initResolve = (data) => {
|
|
886963
886957
|
clearTimeout(timeout2);
|
|
886964
886958
|
this.initReject = null;
|
|
@@ -886986,6 +886980,7 @@ var init_sessionHandle = __esm(() => {
|
|
|
886986
886980
|
}
|
|
886987
886981
|
rejectPendingOperations(error100, code, signal) {
|
|
886988
886982
|
if (this.initReject) {
|
|
886983
|
+
this.reportInitializationFailure(error100);
|
|
886989
886984
|
const reject2 = this.initReject;
|
|
886990
886985
|
this.initResolve = null;
|
|
886991
886986
|
this.initReject = null;
|
|
@@ -887010,6 +887005,41 @@ ${stdoutTail}` : ""}` + `
|
|
|
887010
887005
|
}
|
|
887011
887006
|
this._controlChannel.rejectAll(error100);
|
|
887012
887007
|
}
|
|
887008
|
+
handleInitializationTimeout() {
|
|
887009
|
+
if (!this.initReject)
|
|
887010
|
+
return;
|
|
887011
|
+
const reject2 = this.initReject;
|
|
887012
|
+
const error100 = new Error(`Session ${this.sessionId} init timed out`);
|
|
887013
|
+
this.initResolve = null;
|
|
887014
|
+
this.initReject = null;
|
|
887015
|
+
this.reportInitializationFailure(error100);
|
|
887016
|
+
this.terminate().catch(logError3);
|
|
887017
|
+
reject2(error100);
|
|
887018
|
+
}
|
|
887019
|
+
reportInitializationFailure(error100) {
|
|
887020
|
+
if (this._initializationFailureReported)
|
|
887021
|
+
return;
|
|
887022
|
+
this._initializationFailureReported = true;
|
|
887023
|
+
const baseMessage = error100 instanceof Error ? error100.message : String(error100);
|
|
887024
|
+
const stderrTail = this.lastStderr.slice(-5).join(`
|
|
887025
|
+
`).trim();
|
|
887026
|
+
const message2 = stderrTail && !baseMessage.includes(stderrTail) ? `${baseMessage}
|
|
887027
|
+
${stderrTail}` : baseMessage;
|
|
887028
|
+
this.emitOpencodeEvent("session.result", {
|
|
887029
|
+
sessionID: this.sessionId,
|
|
887030
|
+
subtype: "error_during_execution",
|
|
887031
|
+
isError: true,
|
|
887032
|
+
errors: [message2]
|
|
887033
|
+
});
|
|
887034
|
+
this.emitOpencodeEvent("session.error", {
|
|
887035
|
+
sessionID: this.sessionId,
|
|
887036
|
+
error: {
|
|
887037
|
+
subtype: "error_during_execution",
|
|
887038
|
+
level: "error",
|
|
887039
|
+
message: message2
|
|
887040
|
+
}
|
|
887041
|
+
});
|
|
887042
|
+
}
|
|
887013
887043
|
async finishNaturalExit() {
|
|
887014
887044
|
const groupId = this._processGroupId;
|
|
887015
887045
|
if (groupId !== null && this.isTreeAlive(groupId)) {
|
|
@@ -887201,7 +887231,7 @@ ${stdoutTail}` : ""}` + `
|
|
|
887201
887231
|
this.promptResolve = null;
|
|
887202
887232
|
this.promptReject = null;
|
|
887203
887233
|
}
|
|
887204
|
-
if (this._firstPromptContent && !this._titleGenerationAttempted) {
|
|
887234
|
+
if (this._firstPromptContent && !this._titleGenerationAttempted && !this._customTitleSet) {
|
|
887205
887235
|
this._titleGenerationAttempted = true;
|
|
887206
887236
|
const content = this._firstPromptContent;
|
|
887207
887237
|
this.sendControlRequest({
|
|
@@ -887209,9 +887239,13 @@ ${stdoutTail}` : ""}` + `
|
|
|
887209
887239
|
description: content,
|
|
887210
887240
|
persist: true
|
|
887211
887241
|
}, 30000).then((res) => {
|
|
887242
|
+
if (this._customTitleSet)
|
|
887243
|
+
return;
|
|
887212
887244
|
const title = res.title || content.slice(0, 100);
|
|
887213
887245
|
this.setTitle(title);
|
|
887214
887246
|
}).catch(() => {
|
|
887247
|
+
if (this._customTitleSet)
|
|
887248
|
+
return;
|
|
887215
887249
|
this.setTitle(content.slice(0, 100));
|
|
887216
887250
|
});
|
|
887217
887251
|
}
|
|
@@ -887242,6 +887276,13 @@ ${stdoutTail}` : ""}` + `
|
|
|
887242
887276
|
providerID: this._providerId
|
|
887243
887277
|
});
|
|
887244
887278
|
}
|
|
887279
|
+
setCustomTitle(title) {
|
|
887280
|
+
this._customTitleSet = true;
|
|
887281
|
+
this.setTitle(title);
|
|
887282
|
+
}
|
|
887283
|
+
get customTitleSet() {
|
|
887284
|
+
return this._customTitleSet;
|
|
887285
|
+
}
|
|
887245
887286
|
async sendControlRequest(request3, timeoutMs = 1e4) {
|
|
887246
887287
|
const requestId2 = crypto.randomUUID();
|
|
887247
887288
|
this.writeStdin(jsonStringify({
|
|
@@ -887575,8 +887616,8 @@ __export(exports_sessionManager, {
|
|
|
887575
887616
|
SessionManager: () => SessionManager
|
|
887576
887617
|
});
|
|
887577
887618
|
import { readFile as readFile91, writeFile as writeFile82, mkdir as mkdir75, rm as rm18 } from "fs/promises";
|
|
887578
|
-
import { existsSync as
|
|
887579
|
-
import { join as
|
|
887619
|
+
import { existsSync as existsSync42, statSync as statSync14 } from "fs";
|
|
887620
|
+
import { join as join236, resolve as resolve61, isAbsolute as isAbsolute32 } from "path";
|
|
887580
887621
|
|
|
887581
887622
|
class SessionManager {
|
|
887582
887623
|
sessions = new Map;
|
|
@@ -887622,11 +887663,11 @@ class SessionManager {
|
|
|
887622
887663
|
this.startIdleCheck();
|
|
887623
887664
|
}
|
|
887624
887665
|
getIndexPath() {
|
|
887625
|
-
return
|
|
887666
|
+
return join236(getClaudeConfigHomeDir(), INDEX_FILE);
|
|
887626
887667
|
}
|
|
887627
887668
|
async loadIndex() {
|
|
887628
887669
|
const path59 = this.getIndexPath();
|
|
887629
|
-
if (!
|
|
887670
|
+
if (!existsSync42(path59))
|
|
887630
887671
|
return;
|
|
887631
887672
|
try {
|
|
887632
887673
|
const raw2 = await readFile91(path59, "utf-8");
|
|
@@ -887644,7 +887685,7 @@ class SessionManager {
|
|
|
887644
887685
|
index2[key6] = this.toIndexEntry(handle);
|
|
887645
887686
|
}
|
|
887646
887687
|
const dir = getClaudeConfigHomeDir();
|
|
887647
|
-
if (!
|
|
887688
|
+
if (!existsSync42(dir)) {
|
|
887648
887689
|
await mkdir75(dir, { recursive: true });
|
|
887649
887690
|
}
|
|
887650
887691
|
try {
|
|
@@ -887672,7 +887713,8 @@ class SessionManager {
|
|
|
887672
887713
|
cwd: handle.cwd,
|
|
887673
887714
|
permissionMode: info2.permission_mode,
|
|
887674
887715
|
createdAt: info2.created_at,
|
|
887675
|
-
lastActiveAt: info2.last_active_at
|
|
887716
|
+
lastActiveAt: info2.last_active_at,
|
|
887717
|
+
customTitle: handle.title
|
|
887676
887718
|
};
|
|
887677
887719
|
}
|
|
887678
887720
|
reapHandle(handle) {
|
|
@@ -887784,6 +887826,16 @@ class SessionManager {
|
|
|
887784
887826
|
getIndexEntry(id) {
|
|
887785
887827
|
return this.loadedIndex.get(id);
|
|
887786
887828
|
}
|
|
887829
|
+
getIndexEntries() {
|
|
887830
|
+
return [...this.loadedIndex.values()];
|
|
887831
|
+
}
|
|
887832
|
+
updateSessionEntry(id, updates) {
|
|
887833
|
+
const existing = this.loadedIndex.get(id);
|
|
887834
|
+
if (existing) {
|
|
887835
|
+
this.loadedIndex.set(id, { ...existing, ...updates });
|
|
887836
|
+
this.scheduleIndexSave();
|
|
887837
|
+
}
|
|
887838
|
+
}
|
|
887787
887839
|
getAllSessions() {
|
|
887788
887840
|
return [...this.sessions.values()];
|
|
887789
887841
|
}
|
|
@@ -887834,7 +887886,7 @@ class SessionManager {
|
|
|
887834
887886
|
if (!isAbsolute32(cwd4)) {
|
|
887835
887887
|
cwd4 = resolve61(process.cwd(), cwd4);
|
|
887836
887888
|
}
|
|
887837
|
-
if (!
|
|
887889
|
+
if (!existsSync42(cwd4) || !statSync14(cwd4).isDirectory()) {
|
|
887838
887890
|
throw new Error(`Working directory does not exist: ${cwd4}`);
|
|
887839
887891
|
}
|
|
887840
887892
|
const canonicalCwd = await canonicalizePath(cwd4).catch(() => cwd4);
|
|
@@ -887882,6 +887934,7 @@ class SessionManager {
|
|
|
887882
887934
|
execPath: opts.execPath,
|
|
887883
887935
|
scriptArgs: opts.scriptArgs,
|
|
887884
887936
|
silent: opts.silent,
|
|
887937
|
+
customTitle: this.loadedIndex.get(sessionId2)?.customTitle,
|
|
887885
887938
|
onInit: (data) => {
|
|
887886
887939
|
this._cachedInitData = data;
|
|
887887
887940
|
this._resolveInitDataReady?.();
|
|
@@ -888083,17 +888136,17 @@ class SessionManager {
|
|
|
888083
888136
|
}
|
|
888084
888137
|
async deleteSessionFilesFromDisk(sessionId2, cwd4) {
|
|
888085
888138
|
const projectDir = getProjectDir(cwd4);
|
|
888086
|
-
const jsonlPath =
|
|
888087
|
-
const sessionDir =
|
|
888139
|
+
const jsonlPath = join236(projectDir, sessionId2 + ".jsonl");
|
|
888140
|
+
const sessionDir = join236(projectDir, sessionId2);
|
|
888088
888141
|
try {
|
|
888089
|
-
if (
|
|
888142
|
+
if (existsSync42(jsonlPath)) {
|
|
888090
888143
|
await rm18(jsonlPath, { force: true });
|
|
888091
888144
|
}
|
|
888092
888145
|
} catch (err3) {
|
|
888093
888146
|
logError3(err3);
|
|
888094
888147
|
}
|
|
888095
888148
|
try {
|
|
888096
|
-
if (
|
|
888149
|
+
if (existsSync42(sessionDir)) {
|
|
888097
888150
|
await rm18(sessionDir, { recursive: true, force: true });
|
|
888098
888151
|
}
|
|
888099
888152
|
} catch (err3) {
|
|
@@ -888933,7 +888986,7 @@ __export(exports_update, {
|
|
|
888933
888986
|
});
|
|
888934
888987
|
async function update() {
|
|
888935
888988
|
logEvent("tengu_update_check", {});
|
|
888936
|
-
writeToStdout(`${t("cli.update.currentVersion", "Current version")}: ${"4.2.18
|
|
888989
|
+
writeToStdout(`${t("cli.update.currentVersion", "Current version")}: ${"4.2.18"}
|
|
888937
888990
|
`);
|
|
888938
888991
|
const channel5 = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
888939
888992
|
writeToStdout(`${t("cli.update.checkingUpdates", { channel: channel5 }, "Checking for updates to {channel} version...")}
|
|
@@ -889008,8 +889061,8 @@ async function update() {
|
|
|
889008
889061
|
writeToStdout(`${t("cli.update.managedByHomebrew", "CoStrict is managed by Homebrew.")}
|
|
889009
889062
|
`);
|
|
889010
889063
|
const latest = await getLatestVersion(channel5);
|
|
889011
|
-
if (latest && !gte2("4.2.18
|
|
889012
|
-
writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.18
|
|
889064
|
+
if (latest && !gte2("4.2.18", latest)) {
|
|
889065
|
+
writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.18", latest }, "Update available: {current} \u2192 {latest}")}
|
|
889013
889066
|
`);
|
|
889014
889067
|
writeToStdout(`
|
|
889015
889068
|
`);
|
|
@@ -889025,8 +889078,8 @@ async function update() {
|
|
|
889025
889078
|
writeToStdout(`${t("cli.update.managedByWinget", "CoStrict is managed by winget.")}
|
|
889026
889079
|
`);
|
|
889027
889080
|
const latest = await getLatestVersion(channel5);
|
|
889028
|
-
if (latest && !gte2("4.2.18
|
|
889029
|
-
writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.18
|
|
889081
|
+
if (latest && !gte2("4.2.18", latest)) {
|
|
889082
|
+
writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.18", latest }, "Update available: {current} \u2192 {latest}")}
|
|
889030
889083
|
`);
|
|
889031
889084
|
writeToStdout(`
|
|
889032
889085
|
`);
|
|
@@ -889042,8 +889095,8 @@ async function update() {
|
|
|
889042
889095
|
writeToStdout(`${t("cli.update.managedByApk", "CoStrict is managed by apk.")}
|
|
889043
889096
|
`);
|
|
889044
889097
|
const latest = await getLatestVersion(channel5);
|
|
889045
|
-
if (latest && !gte2("4.2.18
|
|
889046
|
-
writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.18
|
|
889098
|
+
if (latest && !gte2("4.2.18", latest)) {
|
|
889099
|
+
writeToStdout(`${t("cli.update.updateAvailable", { current: "4.2.18", latest }, "Update available: {current} \u2192 {latest}")}
|
|
889047
889100
|
`);
|
|
889048
889101
|
writeToStdout(`
|
|
889049
889102
|
`);
|
|
@@ -889108,11 +889161,11 @@ async function update() {
|
|
|
889108
889161
|
`);
|
|
889109
889162
|
await gracefulShutdown(1);
|
|
889110
889163
|
}
|
|
889111
|
-
if (result2.latestVersion === "4.2.18
|
|
889112
|
-
writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.18
|
|
889164
|
+
if (result2.latestVersion === "4.2.18") {
|
|
889165
|
+
writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.18" }, "CoStrict is up to date ({version})")) + `
|
|
889113
889166
|
`);
|
|
889114
889167
|
} else {
|
|
889115
|
-
writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.18
|
|
889168
|
+
writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.18", to: String(result2.latestVersion) }, "Successfully updated from {from} to version {to}")) + `
|
|
889116
889169
|
`);
|
|
889117
889170
|
regenerateCompletionCache();
|
|
889118
889171
|
}
|
|
@@ -889172,12 +889225,12 @@ async function update() {
|
|
|
889172
889225
|
`);
|
|
889173
889226
|
await gracefulShutdown(1);
|
|
889174
889227
|
}
|
|
889175
|
-
if (latestVersion === "4.2.18
|
|
889176
|
-
writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.18
|
|
889228
|
+
if (latestVersion === "4.2.18") {
|
|
889229
|
+
writeToStdout(source_default.green(t("cli.update.upToDateVersion", { version: "4.2.18" }, "CoStrict is up to date ({version})")) + `
|
|
889177
889230
|
`);
|
|
889178
889231
|
await gracefulShutdown(0);
|
|
889179
889232
|
}
|
|
889180
|
-
writeToStdout(`${t("cli.update.newVersionAvailable", { latest: String(latestVersion), current: "4.2.18
|
|
889233
|
+
writeToStdout(`${t("cli.update.newVersionAvailable", { latest: String(latestVersion), current: "4.2.18" }, "New version available: {latest} (current: {current})")}
|
|
889181
889234
|
`);
|
|
889182
889235
|
writeToStdout(`${t("cli.update.installing", "Installing update...")}
|
|
889183
889236
|
`);
|
|
@@ -889222,7 +889275,7 @@ async function update() {
|
|
|
889222
889275
|
logForDebugging(`update: Installation status: ${result.status}`);
|
|
889223
889276
|
switch (result.status) {
|
|
889224
889277
|
case "success":
|
|
889225
|
-
writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.18
|
|
889278
|
+
writeToStdout(source_default.green(t("cli.update.successfullyUpdated", { from: "4.2.18", to: String(latestVersion) }, "Successfully updated from {from} to version {to}")) + `
|
|
889226
889279
|
`);
|
|
889227
889280
|
regenerateCompletionCache();
|
|
889228
889281
|
break;
|
|
@@ -889316,12 +889369,12 @@ __export(exports_install, {
|
|
|
889316
889369
|
install: () => install
|
|
889317
889370
|
});
|
|
889318
889371
|
import { homedir as homedir61 } from "os";
|
|
889319
|
-
import { join as
|
|
889372
|
+
import { join as join237 } from "path";
|
|
889320
889373
|
function getInstallationPath2() {
|
|
889321
889374
|
const isWindows4 = env4.platform === "win32";
|
|
889322
889375
|
const homeDir = homedir61();
|
|
889323
889376
|
if (isWindows4) {
|
|
889324
|
-
const windowsPath =
|
|
889377
|
+
const windowsPath = join237(homeDir, ".local", "bin", "claude.exe");
|
|
889325
889378
|
return windowsPath.replace(/\//gu, "\\");
|
|
889326
889379
|
}
|
|
889327
889380
|
return "~/.local/bin/claude";
|
|
@@ -889751,7 +889804,7 @@ __export(exports_up, {
|
|
|
889751
889804
|
up: () => up
|
|
889752
889805
|
});
|
|
889753
889806
|
import { readFileSync as readFileSync44 } from "fs";
|
|
889754
|
-
import { join as
|
|
889807
|
+
import { join as join238 } from "path";
|
|
889755
889808
|
import { spawnSync as spawnSync12 } from "child_process";
|
|
889756
889809
|
async function up() {
|
|
889757
889810
|
const cwd5 = process.cwd();
|
|
@@ -889759,7 +889812,7 @@ async function up() {
|
|
|
889759
889812
|
const searchDirs = gitRoot ? [gitRoot, cwd5] : [cwd5];
|
|
889760
889813
|
let upSection = null;
|
|
889761
889814
|
for (const dir of searchDirs) {
|
|
889762
|
-
const claudeMdPath =
|
|
889815
|
+
const claudeMdPath = join238(dir, "CLAUDE.md");
|
|
889763
889816
|
try {
|
|
889764
889817
|
const content = readFileSync44(claudeMdPath, "utf-8");
|
|
889765
889818
|
upSection = extractUpSection(content);
|
|
@@ -891426,7 +891479,7 @@ ${assistantAddendum}` : assistantAddendum;
|
|
|
891426
891479
|
}
|
|
891427
891480
|
}
|
|
891428
891481
|
logForDiagnosticsNoPII("info", "started", {
|
|
891429
|
-
version: "4.2.18
|
|
891482
|
+
version: "4.2.18",
|
|
891430
891483
|
is_native_binary: isInBundledMode()
|
|
891431
891484
|
});
|
|
891432
891485
|
registerCleanup(async () => {
|
|
@@ -891917,7 +891970,7 @@ Session: ${directConnectConfig.sessionId}`, "info");
|
|
|
891917
891970
|
sshSession = await createSSHSession2({
|
|
891918
891971
|
host: _pendingSSH.host,
|
|
891919
891972
|
cwd: _pendingSSH.cwd,
|
|
891920
|
-
localVersion: "4.2.18
|
|
891973
|
+
localVersion: "4.2.18",
|
|
891921
891974
|
permissionMode: _pendingSSH.permissionMode,
|
|
891922
891975
|
dangerouslySkipPermissions: _pendingSSH.dangerouslySkipPermissions,
|
|
891923
891976
|
extraCliArgs: _pendingSSH.extraCliArgs,
|
|
@@ -892386,7 +892439,7 @@ Usage: csc --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
892386
892439
|
pendingHookMessages
|
|
892387
892440
|
}, renderAndRun);
|
|
892388
892441
|
}
|
|
892389
|
-
}).version("4.2.18
|
|
892442
|
+
}).version("4.2.18 (CoStrict)", "-v, --version", cliDesc("cli.option.version", "Output the version number"));
|
|
892390
892443
|
program2.addOption(new Option("-w, --worktree [name]", cliDesc("cli.option.worktree", "Create a new git worktree for this session (optionally specify a name)")).hideHelp());
|
|
892391
892444
|
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());
|
|
892392
892445
|
if (canUserConfigureAdvisor()) {
|
|
@@ -893129,10 +893182,10 @@ if (process.env.CLAUDE_CODE_REMOTE === "true") {
|
|
|
893129
893182
|
async function main2() {
|
|
893130
893183
|
const args = process.argv.slice(2);
|
|
893131
893184
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
893132
|
-
const d7 = new Date("2026-07-
|
|
893185
|
+
const d7 = new Date("2026-07-29T00:51:14.363Z");
|
|
893133
893186
|
const p2 = (n3) => String(n3).padStart(2, "0");
|
|
893134
893187
|
const buildTime = `${d7.getFullYear()}/${p2(d7.getMonth() + 1)}/${p2(d7.getDate())} ${p2(d7.getHours())}:${p2(d7.getMinutes())}:${p2(d7.getSeconds())}`;
|
|
893135
|
-
console.log(`${"4.2.18
|
|
893188
|
+
console.log(`${"4.2.18"} (commit: ${"2e2c090c0"}, built: ${buildTime})`);
|
|
893136
893189
|
return;
|
|
893137
893190
|
}
|
|
893138
893191
|
let stopServeParentWatchdog;
|
|
@@ -893308,5 +893361,5 @@ async function main2() {
|
|
|
893308
893361
|
}
|
|
893309
893362
|
main2();
|
|
893310
893363
|
|
|
893311
|
-
//# debugId=
|
|
893364
|
+
//# debugId=0C90C80B929528FC64756E2164756E21
|
|
893312
893365
|
|