localclawd 1.1.13 → 1.1.15
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/README.md +18 -9
- package/dist/cli.mjs +207 -169
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -133,9 +133,9 @@ The bootstrap scripts expect release assets to follow the native installer platf
|
|
|
133
133
|
|
|
134
134
|
### Backend setup after install
|
|
135
135
|
|
|
136
|
-
localclawd
|
|
136
|
+
localclawd requires no account or login. Run `localclawd` and use `/setup` to configure your local backend, or set environment variables before launching.
|
|
137
137
|
|
|
138
|
-
|
|
138
|
+
localclawd accepts native environment variable names. Legacy `CLAUDE_CODE_*` names are still accepted as compatibility aliases, but new setups should prefer `LOCALCLAWD_*`.
|
|
139
139
|
|
|
140
140
|
For vLLM:
|
|
141
141
|
|
|
@@ -165,17 +165,26 @@ Then run:
|
|
|
165
165
|
localclawd
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
+
## No account required
|
|
169
|
+
|
|
170
|
+
localclawd does not require any account, login, or subscription. Connect it to a local model (vLLM, Ollama) or any OpenAI-compatible endpoint and start coding immediately. Use `/setup` at any time to configure or change your backend.
|
|
171
|
+
|
|
172
|
+
If you want to use the Anthropic API directly, set `ANTHROPIC_API_KEY` in your environment — no login flow needed.
|
|
173
|
+
|
|
168
174
|
## Release status
|
|
169
175
|
|
|
170
|
-
`v1.
|
|
176
|
+
`v1.1.15` is live on npm. Install globally with `npm install -g localclawd` or run without installing with `npx localclawd`.
|
|
171
177
|
|
|
172
178
|
**Changelog**
|
|
173
|
-
- `1.
|
|
174
|
-
- `1.
|
|
175
|
-
- `1.
|
|
176
|
-
- `1.
|
|
177
|
-
- `1.
|
|
178
|
-
- `1.
|
|
179
|
+
- `1.1.15` — Full branding cleanup (no Anthropic/Claude references in UI); global crash handler shows errors instead of silent exit; auth commands hidden (use env vars or /setup); all startup errors surfaced with actionable messages.
|
|
180
|
+
- `1.1.14` — Error handling for all startup awaits; clean build artifacts before rebuild to prevent stale cache issues.
|
|
181
|
+
- `1.1.13` — Go straight to dashboard on launch; /setup for configuration; fix all stuck menus; useRef guards everywhere.
|
|
182
|
+
- `1.1.12` — Fix onboarding blank screen; no stuck menus; VSCode Enter handling.
|
|
183
|
+
- `1.1.11` — Ctrl+C everywhere; clean command list; lint fixes.
|
|
184
|
+
- `1.1.10` — Fix Enter key on VSCode/ConPTY.
|
|
185
|
+
- `1.0.5` — Geometric algebra lattice; /keepgoing upgraded with subagent support; /thinkharder 4-phase pipeline.
|
|
186
|
+
- `1.0.4` — Fix `util is not defined` crash; add `/buddy`, `/thinkharder`, `/thinknormal`; fix `/keepgoing`.
|
|
187
|
+
- `1.0.0` — Initial release.
|
|
179
188
|
|
|
180
189
|
External native update metadata is now expected under `release-manifests/`, the main verification workflow lives in `.github/workflows/ci.yml`, and the native asset publication workflow lives in `.github/workflows/publish-release-assets.yml`. See `docs/release.md` for the expected asset set and publish sequence.
|
|
181
190
|
|
package/dist/cli.mjs
CHANGED
|
@@ -89227,7 +89227,7 @@ var init_isEqual = __esm(() => {
|
|
|
89227
89227
|
|
|
89228
89228
|
// src/utils/userAgent.ts
|
|
89229
89229
|
function getClaudeCodeUserAgent() {
|
|
89230
|
-
return `claude-code/${"1.1.
|
|
89230
|
+
return `claude-code/${"1.1.15"}`;
|
|
89231
89231
|
}
|
|
89232
89232
|
|
|
89233
89233
|
// src/utils/workloadContext.ts
|
|
@@ -89249,7 +89249,7 @@ function getUserAgent() {
|
|
|
89249
89249
|
const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
|
|
89250
89250
|
const workload = getWorkload();
|
|
89251
89251
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
89252
|
-
return `claude-cli/${"1.1.
|
|
89252
|
+
return `claude-cli/${"1.1.15"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
89253
89253
|
}
|
|
89254
89254
|
function getMCPUserAgent() {
|
|
89255
89255
|
const parts = [];
|
|
@@ -89263,7 +89263,7 @@ function getMCPUserAgent() {
|
|
|
89263
89263
|
parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
|
|
89264
89264
|
}
|
|
89265
89265
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
89266
|
-
return `claude-code/${"1.1.
|
|
89266
|
+
return `claude-code/${"1.1.15"}${suffix}`;
|
|
89267
89267
|
}
|
|
89268
89268
|
function getWebFetchUserAgent() {
|
|
89269
89269
|
return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
|
|
@@ -99172,7 +99172,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
99172
99172
|
if (!isAttributionHeaderEnabled()) {
|
|
99173
99173
|
return "";
|
|
99174
99174
|
}
|
|
99175
|
-
const version = `${"1.1.
|
|
99175
|
+
const version = `${"1.1.15"}.${fingerprint}`;
|
|
99176
99176
|
const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
|
|
99177
99177
|
const cch = "";
|
|
99178
99178
|
const workload = getWorkload();
|
|
@@ -132719,7 +132719,7 @@ var init_metadata = __esm(() => {
|
|
|
132719
132719
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
132720
132720
|
WHITESPACE_REGEX = /\s+/;
|
|
132721
132721
|
getVersionBase = memoize_default(() => {
|
|
132722
|
-
const match = "1.1.
|
|
132722
|
+
const match = "1.1.15".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
132723
132723
|
return match ? match[0] : undefined;
|
|
132724
132724
|
});
|
|
132725
132725
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -132759,9 +132759,9 @@ var init_metadata = __esm(() => {
|
|
|
132759
132759
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
132760
132760
|
isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
|
|
132761
132761
|
isClaudeAiAuth: isClaudeAISubscriber(),
|
|
132762
|
-
version: "1.1.
|
|
132762
|
+
version: "1.1.15",
|
|
132763
132763
|
versionBase: getVersionBase(),
|
|
132764
|
-
buildTime: "2026-04-
|
|
132764
|
+
buildTime: "2026-04-08T22:42:21.973Z",
|
|
132765
132765
|
deploymentEnvironment: env4.detectDeploymentEnvironment(),
|
|
132766
132766
|
...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
|
|
132767
132767
|
githubEventName: process.env.GITHUB_EVENT_NAME,
|
|
@@ -197348,7 +197348,7 @@ function getTelemetryAttributes() {
|
|
|
197348
197348
|
attributes["session.id"] = sessionId;
|
|
197349
197349
|
}
|
|
197350
197350
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
197351
|
-
attributes["app.version"] = "1.1.
|
|
197351
|
+
attributes["app.version"] = "1.1.15";
|
|
197352
197352
|
}
|
|
197353
197353
|
const oauthAccount = getOauthAccountInfo();
|
|
197354
197354
|
if (oauthAccount) {
|
|
@@ -200182,7 +200182,7 @@ function getWarningUpsellText(rateLimitType) {
|
|
|
200182
200182
|
return null;
|
|
200183
200183
|
}
|
|
200184
200184
|
if (subscriptionType === "pro" || subscriptionType === "max") {
|
|
200185
|
-
return "/upgrade to keep using
|
|
200185
|
+
return "/upgrade to keep using localclawd";
|
|
200186
200186
|
}
|
|
200187
200187
|
}
|
|
200188
200188
|
if (rateLimitType === "overage") {
|
|
@@ -229409,7 +229409,7 @@ function getInstallationEnv() {
|
|
|
229409
229409
|
return;
|
|
229410
229410
|
}
|
|
229411
229411
|
function getClaudeCodeVersion() {
|
|
229412
|
-
return "1.1.
|
|
229412
|
+
return "1.1.15";
|
|
229413
229413
|
}
|
|
229414
229414
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
229415
229415
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -235011,7 +235011,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
235011
235011
|
const client4 = new Client({
|
|
235012
235012
|
name: "claude-code",
|
|
235013
235013
|
title: "Claude Code",
|
|
235014
|
-
version: "1.1.
|
|
235014
|
+
version: "1.1.15",
|
|
235015
235015
|
description: "Anthropic's agentic coding tool",
|
|
235016
235016
|
websiteUrl: PRODUCT_URL
|
|
235017
235017
|
}, {
|
|
@@ -235364,7 +235364,7 @@ var init_client9 = __esm(() => {
|
|
|
235364
235364
|
const client4 = new Client({
|
|
235365
235365
|
name: "claude-code",
|
|
235366
235366
|
title: "Claude Code",
|
|
235367
|
-
version: "1.1.
|
|
235367
|
+
version: "1.1.15",
|
|
235368
235368
|
description: "Anthropic's agentic coding tool",
|
|
235369
235369
|
websiteUrl: PRODUCT_URL
|
|
235370
235370
|
}, {
|
|
@@ -257637,7 +257637,7 @@ function ManagedSettingsSecurityDialog(t0) {
|
|
|
257637
257637
|
label: "Yes, I trust these settings",
|
|
257638
257638
|
value: "accept"
|
|
257639
257639
|
}, {
|
|
257640
|
-
label: "No, exit
|
|
257640
|
+
label: "No, exit localclawd",
|
|
257641
257641
|
value: "exit"
|
|
257642
257642
|
}];
|
|
257643
257643
|
$2[11] = t15;
|
|
@@ -258555,7 +258555,7 @@ var init_user = __esm(() => {
|
|
|
258555
258555
|
deviceId,
|
|
258556
258556
|
sessionId: getSessionId(),
|
|
258557
258557
|
email: getEmail(),
|
|
258558
|
-
appVersion: "1.1.
|
|
258558
|
+
appVersion: "1.1.15",
|
|
258559
258559
|
platform: getHostPlatformForAnalytics(),
|
|
258560
258560
|
organizationUuid,
|
|
258561
258561
|
accountUuid,
|
|
@@ -259879,7 +259879,7 @@ async function initializeBetaTracing(resource) {
|
|
|
259879
259879
|
});
|
|
259880
259880
|
logs.setGlobalLoggerProvider(loggerProvider);
|
|
259881
259881
|
setLoggerProvider(loggerProvider);
|
|
259882
|
-
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.
|
|
259882
|
+
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.15");
|
|
259883
259883
|
setEventLogger(eventLogger);
|
|
259884
259884
|
process.on("beforeExit", async () => {
|
|
259885
259885
|
await loggerProvider?.forceFlush();
|
|
@@ -259919,7 +259919,7 @@ async function initializeTelemetry() {
|
|
|
259919
259919
|
const platform3 = getPlatform();
|
|
259920
259920
|
const baseAttributes = {
|
|
259921
259921
|
[ATTR_SERVICE_NAME5]: "claude-code",
|
|
259922
|
-
[ATTR_SERVICE_VERSION5]: "1.1.
|
|
259922
|
+
[ATTR_SERVICE_VERSION5]: "1.1.15"
|
|
259923
259923
|
};
|
|
259924
259924
|
if (platform3 === "wsl") {
|
|
259925
259925
|
const wslVersion = getWslVersion();
|
|
@@ -259964,7 +259964,7 @@ async function initializeTelemetry() {
|
|
|
259964
259964
|
} catch {}
|
|
259965
259965
|
};
|
|
259966
259966
|
registerCleanup(shutdownTelemetry2);
|
|
259967
|
-
return meterProvider2.getMeter("com.anthropic.claude_code", "1.1.
|
|
259967
|
+
return meterProvider2.getMeter("com.anthropic.claude_code", "1.1.15");
|
|
259968
259968
|
}
|
|
259969
259969
|
const meterProvider = new MeterProvider5({
|
|
259970
259970
|
resource,
|
|
@@ -259984,7 +259984,7 @@ async function initializeTelemetry() {
|
|
|
259984
259984
|
});
|
|
259985
259985
|
logs.setGlobalLoggerProvider(loggerProvider);
|
|
259986
259986
|
setLoggerProvider(loggerProvider);
|
|
259987
|
-
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.
|
|
259987
|
+
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.1.15");
|
|
259988
259988
|
setEventLogger(eventLogger);
|
|
259989
259989
|
logForDebugging("[3P telemetry] Event logger set successfully");
|
|
259990
259990
|
process.on("beforeExit", async () => {
|
|
@@ -260046,7 +260046,7 @@ Current timeout: ${timeoutMs}ms
|
|
|
260046
260046
|
}
|
|
260047
260047
|
};
|
|
260048
260048
|
registerCleanup(shutdownTelemetry);
|
|
260049
|
-
return meterProvider.getMeter("com.anthropic.claude_code", "1.1.
|
|
260049
|
+
return meterProvider.getMeter("com.anthropic.claude_code", "1.1.15");
|
|
260050
260050
|
}
|
|
260051
260051
|
async function flushTelemetry() {
|
|
260052
260052
|
const meterProvider = getMeterProvider();
|
|
@@ -260211,7 +260211,7 @@ async function call3() {
|
|
|
260211
260211
|
clearOnboarding: true
|
|
260212
260212
|
});
|
|
260213
260213
|
const message = /* @__PURE__ */ jsx_dev_runtime102.jsxDEV(ThemedText, {
|
|
260214
|
-
children: "Successfully
|
|
260214
|
+
children: "Successfully signed out."
|
|
260215
260215
|
}, undefined, false, undefined, this);
|
|
260216
260216
|
setTimeout(() => {
|
|
260217
260217
|
gracefulShutdownSync(0, "logout");
|
|
@@ -261269,7 +261269,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
261269
261269
|
}
|
|
261270
261270
|
async function getDoctorDiagnostic() {
|
|
261271
261271
|
const installationType = await getCurrentInstallationType();
|
|
261272
|
-
const version = typeof MACRO !== "undefined" ? "1.1.
|
|
261272
|
+
const version = typeof MACRO !== "undefined" ? "1.1.15" : "unknown";
|
|
261273
261273
|
const installationPath = await getInstallationPath();
|
|
261274
261274
|
const invokedBinary = getInvokedBinary();
|
|
261275
261275
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -262210,8 +262210,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
262210
262210
|
const maxVersion = await getMaxVersion();
|
|
262211
262211
|
if (maxVersion && gt(version, maxVersion)) {
|
|
262212
262212
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
|
|
262213
|
-
if (gte("1.1.
|
|
262214
|
-
logForDebugging(`Native installer: current version ${"1.1.
|
|
262213
|
+
if (gte("1.1.15", maxVersion)) {
|
|
262214
|
+
logForDebugging(`Native installer: current version ${"1.1.15"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
262215
262215
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
262216
262216
|
latency_ms: Date.now() - startTime,
|
|
262217
262217
|
max_version: maxVersion,
|
|
@@ -262222,7 +262222,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
262222
262222
|
version = maxVersion;
|
|
262223
262223
|
}
|
|
262224
262224
|
}
|
|
262225
|
-
if (!forceReinstall && version === "1.1.
|
|
262225
|
+
if (!forceReinstall && version === "1.1.15" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
|
|
262226
262226
|
logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
|
|
262227
262227
|
logEvent("tengu_native_update_complete", {
|
|
262228
262228
|
latency_ms: Date.now() - startTime,
|
|
@@ -271233,11 +271233,11 @@ function TeleportError(t0) {
|
|
|
271233
271233
|
children: [
|
|
271234
271234
|
/* @__PURE__ */ jsx_dev_runtime115.jsxDEV(ThemedText, {
|
|
271235
271235
|
dimColor: true,
|
|
271236
|
-
children: "Teleport requires
|
|
271236
|
+
children: "Teleport requires an account."
|
|
271237
271237
|
}, undefined, false, undefined, this),
|
|
271238
271238
|
/* @__PURE__ */ jsx_dev_runtime115.jsxDEV(ThemedText, {
|
|
271239
271239
|
dimColor: true,
|
|
271240
|
-
children: "Your
|
|
271240
|
+
children: "Your subscription will be used by localclawd."
|
|
271241
271241
|
}, undefined, false, undefined, this)
|
|
271242
271242
|
]
|
|
271243
271243
|
}, undefined, true, undefined, this);
|
|
@@ -271248,13 +271248,13 @@ function TeleportError(t0) {
|
|
|
271248
271248
|
let t10;
|
|
271249
271249
|
if ($2[17] === Symbol.for("react.memo_cache_sentinel")) {
|
|
271250
271250
|
t10 = /* @__PURE__ */ jsx_dev_runtime115.jsxDEV(Dialog, {
|
|
271251
|
-
title: "Log in
|
|
271251
|
+
title: "Log in",
|
|
271252
271252
|
onCancel,
|
|
271253
271253
|
children: [
|
|
271254
271254
|
t9,
|
|
271255
271255
|
/* @__PURE__ */ jsx_dev_runtime115.jsxDEV(Select, {
|
|
271256
271256
|
options: [{
|
|
271257
|
-
label: "
|
|
271257
|
+
label: "Log in",
|
|
271258
271258
|
value: "login"
|
|
271259
271259
|
}, {
|
|
271260
271260
|
label: "Exit",
|
|
@@ -334442,7 +334442,7 @@ function getAnthropicEnvMetadata() {
|
|
|
334442
334442
|
function getBuildAgeMinutes() {
|
|
334443
334443
|
if (false)
|
|
334444
334444
|
;
|
|
334445
|
-
const buildTime = new Date("2026-04-
|
|
334445
|
+
const buildTime = new Date("2026-04-08T22:42:21.973Z").getTime();
|
|
334446
334446
|
if (isNaN(buildTime))
|
|
334447
334447
|
return;
|
|
334448
334448
|
return Math.floor((Date.now() - buildTime) / 60000);
|
|
@@ -358508,7 +358508,7 @@ function Feedback({
|
|
|
358508
358508
|
platform: env4.platform,
|
|
358509
358509
|
gitRepo: envInfo.isGit,
|
|
358510
358510
|
terminal: env4.terminal,
|
|
358511
|
-
version: "1.1.
|
|
358511
|
+
version: "1.1.15",
|
|
358512
358512
|
transcript: normalizeMessagesForAPI(messages),
|
|
358513
358513
|
errors: sanitizedErrors,
|
|
358514
358514
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -358700,7 +358700,7 @@ function Feedback({
|
|
|
358700
358700
|
", ",
|
|
358701
358701
|
env4.terminal,
|
|
358702
358702
|
", v",
|
|
358703
|
-
"1.1.
|
|
358703
|
+
"1.1.15"
|
|
358704
358704
|
]
|
|
358705
358705
|
}, undefined, true, undefined, this)
|
|
358706
358706
|
]
|
|
@@ -358806,7 +358806,7 @@ ${sanitizedDescription}
|
|
|
358806
358806
|
` + `**Environment Info**
|
|
358807
358807
|
` + `- Platform: ${env4.platform}
|
|
358808
358808
|
` + `- Terminal: ${env4.terminal}
|
|
358809
|
-
` + `- Version: ${"1.1.
|
|
358809
|
+
` + `- Version: ${"1.1.15"}
|
|
358810
358810
|
` + `- Feedback ID: ${feedbackId}
|
|
358811
358811
|
` + `
|
|
358812
358812
|
**Errors**
|
|
@@ -361055,12 +361055,12 @@ Learn more at ${DESKTOP_DOCS_URL}`, {
|
|
|
361055
361055
|
setState("checking");
|
|
361056
361056
|
const installStatus = await getDesktopInstallStatus();
|
|
361057
361057
|
if (installStatus.status === "not-installed") {
|
|
361058
|
-
setDownloadMessage("
|
|
361058
|
+
setDownloadMessage("Desktop app is not installed.");
|
|
361059
361059
|
setState("prompt-download");
|
|
361060
361060
|
return;
|
|
361061
361061
|
}
|
|
361062
361062
|
if (installStatus.status === "version-too-old") {
|
|
361063
|
-
setDownloadMessage(`
|
|
361063
|
+
setDownloadMessage(`localclawd desktop needs to be updated (found v${installStatus.version}, need v1.1.2396+).`);
|
|
361064
361064
|
setState("prompt-download");
|
|
361065
361065
|
return;
|
|
361066
361066
|
}
|
|
@@ -361069,7 +361069,7 @@ Learn more at ${DESKTOP_DOCS_URL}`, {
|
|
|
361069
361069
|
setState("opening");
|
|
361070
361070
|
const result = await openCurrentSessionInDesktop();
|
|
361071
361071
|
if (!result.success) {
|
|
361072
|
-
setError(result.error ?? "Failed to open
|
|
361072
|
+
setError(result.error ?? "Failed to open desktop app");
|
|
361073
361073
|
setState("error");
|
|
361074
361074
|
return;
|
|
361075
361075
|
}
|
|
@@ -361172,10 +361172,10 @@ Learn more at ${DESKTOP_DOCS_URL}`, {
|
|
|
361172
361172
|
let t4;
|
|
361173
361173
|
if ($2[17] === Symbol.for("react.memo_cache_sentinel")) {
|
|
361174
361174
|
t4 = {
|
|
361175
|
-
checking: "Checking for
|
|
361175
|
+
checking: "Checking for localclawd desktop…",
|
|
361176
361176
|
flushing: "Saving session…",
|
|
361177
|
-
opening: "Opening
|
|
361178
|
-
success: "Opening in
|
|
361177
|
+
opening: "Opening localclawd desktop…",
|
|
361178
|
+
success: "Opening in localclawd desktop…"
|
|
361179
361179
|
};
|
|
361180
361180
|
$2[17] = t4;
|
|
361181
361181
|
} else {
|
|
@@ -361196,7 +361196,7 @@ Learn more at ${DESKTOP_DOCS_URL}`, {
|
|
|
361196
361196
|
return t6;
|
|
361197
361197
|
}
|
|
361198
361198
|
async function _temp214(onDone_0) {
|
|
361199
|
-
onDone_0("Session transferred to
|
|
361199
|
+
onDone_0("Session transferred to localclawd desktop", {
|
|
361200
361200
|
display: "system"
|
|
361201
361201
|
});
|
|
361202
361202
|
await gracefulShutdown(0, "other");
|
|
@@ -361919,7 +361919,7 @@ function buildPrimarySection() {
|
|
|
361919
361919
|
}, undefined, false, undefined, this);
|
|
361920
361920
|
return [{
|
|
361921
361921
|
label: "Version",
|
|
361922
|
-
value: "1.1.
|
|
361922
|
+
value: "1.1.15"
|
|
361923
361923
|
}, {
|
|
361924
361924
|
label: "Session name",
|
|
361925
361925
|
value: nameValue
|
|
@@ -362942,7 +362942,7 @@ function ModelPicker(t0) {
|
|
|
362942
362942
|
} else {
|
|
362943
362943
|
t15 = $2[41];
|
|
362944
362944
|
}
|
|
362945
|
-
const t16 = headerText ?? "Switch between
|
|
362945
|
+
const t16 = headerText ?? "Switch between models. Applies to this session and future localclawd sessions. For other/previous model names, specify with --model.";
|
|
362946
362946
|
let t17;
|
|
362947
362947
|
if ($2[42] !== t16) {
|
|
362948
362948
|
t17 = /* @__PURE__ */ jsx_dev_runtime171.jsxDEV(ThemedText, {
|
|
@@ -366537,7 +366537,7 @@ function Config({
|
|
|
366537
366537
|
}
|
|
366538
366538
|
}, undefined, false, undefined, this)
|
|
366539
366539
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
|
|
366540
|
-
currentVersion: "1.1.
|
|
366540
|
+
currentVersion: "1.1.15",
|
|
366541
366541
|
onChoice: (choice) => {
|
|
366542
366542
|
setShowSubmenu(null);
|
|
366543
366543
|
setTabsHidden(false);
|
|
@@ -366549,7 +366549,7 @@ function Config({
|
|
|
366549
366549
|
autoUpdatesChannel: "stable"
|
|
366550
366550
|
};
|
|
366551
366551
|
if (choice === "stay") {
|
|
366552
|
-
newSettings.minimumVersion = "1.1.
|
|
366552
|
+
newSettings.minimumVersion = "1.1.15";
|
|
366553
366553
|
}
|
|
366554
366554
|
updateSettingsForSource("userSettings", newSettings);
|
|
366555
366555
|
setSettingsData((prev_27) => ({
|
|
@@ -376282,7 +376282,7 @@ function HelpV2(t0) {
|
|
|
376282
376282
|
let t6;
|
|
376283
376283
|
if ($2[31] !== tabs) {
|
|
376284
376284
|
t6 = /* @__PURE__ */ jsx_dev_runtime214.jsxDEV(Tabs, {
|
|
376285
|
-
title: `localclawd v${"1.1.
|
|
376285
|
+
title: `localclawd v${"1.1.15"}`,
|
|
376286
376286
|
color: "professionalBlue",
|
|
376287
376287
|
defaultTab: "general",
|
|
376288
376288
|
children: tabs
|
|
@@ -376713,7 +376713,7 @@ function IDEScreen(t0) {
|
|
|
376713
376713
|
t5 = availableIDEs.length === 0 && /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(ThemedText, {
|
|
376714
376714
|
dimColor: true,
|
|
376715
376715
|
children: isSupportedJetBrainsTerminal() ? `No available IDEs detected. Please install the plugin and restart your IDE:
|
|
376716
|
-
https://docs.claude.com/s/claude-code-jetbrains` : "No available IDEs detected. Make sure your IDE has the
|
|
376716
|
+
https://docs.claude.com/s/claude-code-jetbrains` : "No available IDEs detected. Make sure your IDE has the localclawd extension or plugin installed and is running."
|
|
376717
376717
|
}, undefined, false, undefined, this);
|
|
376718
376718
|
$2[17] = availableIDEs.length;
|
|
376719
376719
|
$2[18] = t5;
|
|
@@ -376745,7 +376745,7 @@ https://docs.claude.com/s/claude-code-jetbrains` : "No available IDEs detected.
|
|
|
376745
376745
|
marginTop: 1,
|
|
376746
376746
|
children: /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(ThemedText, {
|
|
376747
376747
|
color: "warning",
|
|
376748
|
-
children: "Note: Only one
|
|
376748
|
+
children: "Note: Only one localclawd instance can be connected to VS Code at a time."
|
|
376749
376749
|
}, undefined, false, undefined, this)
|
|
376750
376750
|
}, undefined, false, undefined, this);
|
|
376751
376751
|
$2[24] = availableIDEs;
|
|
@@ -377089,7 +377089,7 @@ async function call30(onDone, context8, args) {
|
|
|
377089
377089
|
const detectedIDEs2 = await detectIDEs(true);
|
|
377090
377090
|
const availableIDEs2 = detectedIDEs2.filter((ide) => ide.isValid);
|
|
377091
377091
|
if (availableIDEs2.length === 0) {
|
|
377092
|
-
onDone("No IDEs with
|
|
377092
|
+
onDone("No IDEs with localclawd extension detected.");
|
|
377093
377093
|
return null;
|
|
377094
377094
|
}
|
|
377095
377095
|
return /* @__PURE__ */ jsx_dev_runtime217.jsxDEV(IDEOpenSelection, {
|
|
@@ -377725,7 +377725,7 @@ var init_logout2 = __esm(() => {
|
|
|
377725
377725
|
logout_default = {
|
|
377726
377726
|
type: "local-jsx",
|
|
377727
377727
|
name: "logout",
|
|
377728
|
-
description: "Sign out
|
|
377728
|
+
description: "Sign out",
|
|
377729
377729
|
isEnabled: () => !isEnvTruthy(process.env.DISABLE_LOGOUT_COMMAND),
|
|
377730
377730
|
load: () => Promise.resolve().then(() => (init_logout(), exports_logout))
|
|
377731
377731
|
};
|
|
@@ -383244,9 +383244,9 @@ function MCPRemoteServerMenu({
|
|
|
383244
383244
|
if (success) {
|
|
383245
383245
|
onComplete?.(`Authentication successful. Connected to ${server.name}.`);
|
|
383246
383246
|
} else if (result.client.type === "needs-auth") {
|
|
383247
|
-
onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart
|
|
383247
|
+
onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart localclawd.");
|
|
383248
383248
|
} else {
|
|
383249
|
-
onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart
|
|
383249
|
+
onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart localclawd for the changes to take effect.");
|
|
383250
383250
|
}
|
|
383251
383251
|
} catch (err2) {
|
|
383252
383252
|
logEvent("tengu_claudeai_mcp_auth_completed", {
|
|
@@ -383408,10 +383408,10 @@ function MCPRemoteServerMenu({
|
|
|
383408
383408
|
const message = isEffectivelyAuthenticated ? `Authentication successful. Reconnected to ${server.name}.` : `Authentication successful. Connected to ${server.name}.`;
|
|
383409
383409
|
onComplete?.(message);
|
|
383410
383410
|
} else if (result_0.client.type === "needs-auth") {
|
|
383411
|
-
onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart
|
|
383411
|
+
onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart localclawd.");
|
|
383412
383412
|
} else {
|
|
383413
383413
|
logMCPDebug(server.name, `Reconnection failed after authentication`);
|
|
383414
|
-
onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart
|
|
383414
|
+
onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart localclawd for the changes to take effect.");
|
|
383415
383415
|
}
|
|
383416
383416
|
}
|
|
383417
383417
|
} catch (err_1) {
|
|
@@ -400440,7 +400440,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
400440
400440
|
return [];
|
|
400441
400441
|
}
|
|
400442
400442
|
}
|
|
400443
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.
|
|
400443
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.15") {
|
|
400444
400444
|
if (process.env.USER_TYPE === "ant") {
|
|
400445
400445
|
const changelog = MACRO.VERSION_CHANGELOG;
|
|
400446
400446
|
if (changelog) {
|
|
@@ -400467,7 +400467,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.1.13")
|
|
|
400467
400467
|
releaseNotes
|
|
400468
400468
|
};
|
|
400469
400469
|
}
|
|
400470
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.1.
|
|
400470
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.1.15") {
|
|
400471
400471
|
if (process.env.USER_TYPE === "ant") {
|
|
400472
400472
|
const changelog = MACRO.VERSION_CHANGELOG;
|
|
400473
400473
|
if (changelog) {
|
|
@@ -401634,7 +401634,7 @@ function getRecentActivitySync() {
|
|
|
401634
401634
|
return cachedActivity;
|
|
401635
401635
|
}
|
|
401636
401636
|
function getLogoDisplayData() {
|
|
401637
|
-
const version = process.env.DEMO_VERSION ?? "1.1.
|
|
401637
|
+
const version = process.env.DEMO_VERSION ?? "1.1.15";
|
|
401638
401638
|
const serverUrl = getDirectConnectServerUrl();
|
|
401639
401639
|
const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
|
|
401640
401640
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -402908,7 +402908,7 @@ function LogoV2() {
|
|
|
402908
402908
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
402909
402909
|
t2 = () => {
|
|
402910
402910
|
const currentConfig = getGlobalConfig();
|
|
402911
|
-
if (currentConfig.lastReleaseNotesSeen === "1.1.
|
|
402911
|
+
if (currentConfig.lastReleaseNotesSeen === "1.1.15") {
|
|
402912
402912
|
return;
|
|
402913
402913
|
}
|
|
402914
402914
|
saveGlobalConfig(_temp327);
|
|
@@ -403584,12 +403584,12 @@ function LogoV2() {
|
|
|
403584
403584
|
return t41;
|
|
403585
403585
|
}
|
|
403586
403586
|
function _temp327(current) {
|
|
403587
|
-
if (current.lastReleaseNotesSeen === "1.1.
|
|
403587
|
+
if (current.lastReleaseNotesSeen === "1.1.15") {
|
|
403588
403588
|
return current;
|
|
403589
403589
|
}
|
|
403590
403590
|
return {
|
|
403591
403591
|
...current,
|
|
403592
|
-
lastReleaseNotesSeen: "1.1.
|
|
403592
|
+
lastReleaseNotesSeen: "1.1.15"
|
|
403593
403593
|
};
|
|
403594
403594
|
}
|
|
403595
403595
|
function _temp245(s_0) {
|
|
@@ -411167,7 +411167,7 @@ function startDetachedPoll(taskId, sessionId, url3, getAppState, setAppState) {
|
|
|
411167
411167
|
ultraplanSessionUrl: undefined
|
|
411168
411168
|
} : prev);
|
|
411169
411169
|
enqueuePendingNotification({
|
|
411170
|
-
value: [`Ultraplan approved — executing in
|
|
411170
|
+
value: [`Ultraplan approved — executing in localclawd on the web. Follow along at: ${url3}`, "", "Results will land as a pull request when the remote session finishes. There is nothing to do here."].join(`
|
|
411171
411171
|
`),
|
|
411172
411172
|
mode: "task-notification"
|
|
411173
411173
|
});
|
|
@@ -411221,10 +411221,10 @@ Session: ${url3}`,
|
|
|
411221
411221
|
function buildLaunchMessage(disconnectedBridge) {
|
|
411222
411222
|
const prefix = disconnectedBridge ? `${REMOTE_CONTROL_DISCONNECTED_MSG} ` : "";
|
|
411223
411223
|
return `${DIAMOND_OPEN} ultraplan
|
|
411224
|
-
${prefix}Starting
|
|
411224
|
+
${prefix}Starting localclawd on the web…`;
|
|
411225
411225
|
}
|
|
411226
411226
|
function buildSessionReadyMessage(url3) {
|
|
411227
|
-
return `${DIAMOND_OPEN} ultraplan · Monitor progress in
|
|
411227
|
+
return `${DIAMOND_OPEN} ultraplan · Monitor progress in localclawd on the web ${url3}
|
|
411228
411228
|
You can continue working — when the ${DIAMOND_OPEN} fills, press ↓ to view results`;
|
|
411229
411229
|
}
|
|
411230
411230
|
function buildAlreadyActiveMessage(url3) {
|
|
@@ -411277,7 +411277,7 @@ async function launchUltraplan2(opts) {
|
|
|
411277
411277
|
"in your prompt",
|
|
411278
411278
|
"",
|
|
411279
411279
|
"Advanced multi-agent plan mode with our most powerful model",
|
|
411280
|
-
"(Opus). Runs in
|
|
411280
|
+
"(Opus). Runs in localclawd on the web. When the plan is ready,",
|
|
411281
411281
|
"you can execute it in the web session or send it back here.",
|
|
411282
411282
|
"Terminal stays free while the remote plans.",
|
|
411283
411283
|
"Requires /login.",
|
|
@@ -411460,7 +411460,7 @@ var init_ultraplan = __esm(() => {
|
|
|
411460
411460
|
ultraplan_default = {
|
|
411461
411461
|
type: "local-jsx",
|
|
411462
411462
|
name: "ultraplan",
|
|
411463
|
-
description: `~10–30 min ·
|
|
411463
|
+
description: `~10–30 min · localclawd on the web drafts an advanced plan you can edit and approve. See ${CCR_TERMS_URL2}`,
|
|
411464
411464
|
argumentHint: "<prompt>",
|
|
411465
411465
|
isEnabled: () => false,
|
|
411466
411466
|
load: () => Promise.resolve({
|
|
@@ -413738,7 +413738,7 @@ var init_mappers = __esm(() => {
|
|
|
413738
413738
|
// src/components/tasks/RemoteSessionDetailDialog.tsx
|
|
413739
413739
|
function formatToolUseSummary(name, input) {
|
|
413740
413740
|
if (name === EXIT_PLAN_MODE_V2_TOOL_NAME) {
|
|
413741
|
-
return "Review the plan in
|
|
413741
|
+
return "Review the plan in localclawd on the web";
|
|
413742
413742
|
}
|
|
413743
413743
|
if (!input || typeof input !== "object")
|
|
413744
413744
|
return name;
|
|
@@ -413852,7 +413852,7 @@ function UltraplanSessionDetail(t0) {
|
|
|
413852
413852
|
if ($2[12] === Symbol.for("react.memo_cache_sentinel")) {
|
|
413853
413853
|
t72 = /* @__PURE__ */ jsx_dev_runtime294.jsxDEV(ThemedText, {
|
|
413854
413854
|
dimColor: true,
|
|
413855
|
-
children: "This will terminate the
|
|
413855
|
+
children: "This will terminate the localclawd on the web session."
|
|
413856
413856
|
}, undefined, false, undefined, this);
|
|
413857
413857
|
$2[12] = t72;
|
|
413858
413858
|
} else {
|
|
@@ -414063,7 +414063,7 @@ function UltraplanSessionDetail(t0) {
|
|
|
414063
414063
|
let t19;
|
|
414064
414064
|
if ($2[47] === Symbol.for("react.memo_cache_sentinel")) {
|
|
414065
414065
|
t19 = {
|
|
414066
|
-
label: "Review in
|
|
414066
|
+
label: "Review in localclawd on the web",
|
|
414067
414067
|
value: "open"
|
|
414068
414068
|
};
|
|
414069
414069
|
$2[47] = t19;
|
|
@@ -414395,13 +414395,13 @@ function ReviewSessionDetail(t0) {
|
|
|
414395
414395
|
let t3;
|
|
414396
414396
|
if ($2[11] !== completed || $2[12] !== onKill || $2[13] !== running) {
|
|
414397
414397
|
t3 = completed ? [{
|
|
414398
|
-
label: "Open in
|
|
414398
|
+
label: "Open in localclawd on the web",
|
|
414399
414399
|
value: "open"
|
|
414400
414400
|
}, {
|
|
414401
414401
|
label: "Dismiss",
|
|
414402
414402
|
value: "dismiss"
|
|
414403
414403
|
}] : [{
|
|
414404
|
-
label: "Open in
|
|
414404
|
+
label: "Open in localclawd on the web",
|
|
414405
414405
|
value: "open"
|
|
414406
414406
|
}, ...onKill && running ? [{
|
|
414407
414407
|
label: "Stop ultrareview",
|
|
@@ -418813,9 +418813,9 @@ function PermissionRulesTab(t0) {
|
|
|
418813
418813
|
let t8;
|
|
418814
418814
|
if ($2[10] === Symbol.for("react.memo_cache_sentinel")) {
|
|
418815
418815
|
t8 = {
|
|
418816
|
-
allow: "
|
|
418817
|
-
ask: "
|
|
418818
|
-
deny: "
|
|
418816
|
+
allow: "localclawd won't ask before using allowed tools.",
|
|
418817
|
+
ask: "localclawd will always ask for confirmation before using these tools.",
|
|
418818
|
+
deny: "localclawd will always reject requests to use denied tools."
|
|
418819
418819
|
};
|
|
418820
418820
|
$2[10] = t8;
|
|
418821
418821
|
} else {
|
|
@@ -420732,7 +420732,7 @@ function GracePeriodContentBody() {
|
|
|
420732
420732
|
t3,
|
|
420733
420733
|
/* @__PURE__ */ jsx_dev_runtime314.jsxDEV(ThemedText, {
|
|
420734
420734
|
children: [
|
|
420735
|
-
"— Allow the use of your chats and coding sessions to
|
|
420735
|
+
"— Allow the use of your chats and coding sessions to help improve the service. Change anytime in your Privacy Settings (",
|
|
420736
420736
|
/* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
|
|
420737
420737
|
url: "https://claude.ai/settings/data-privacy-controls"
|
|
420738
420738
|
}, undefined, false, undefined, this),
|
|
@@ -420851,7 +420851,7 @@ function PostGracePeriodContentBody() {
|
|
|
420851
420851
|
children: "Help improve Claude"
|
|
420852
420852
|
}, undefined, false, undefined, this),
|
|
420853
420853
|
/* @__PURE__ */ jsx_dev_runtime314.jsxDEV(ThemedText, {
|
|
420854
|
-
children: "Allow the use of your chats and coding sessions to
|
|
420854
|
+
children: "Allow the use of your chats and coding sessions to help improve the service. You can change this anytime in Privacy Settings"
|
|
420855
420855
|
}, undefined, false, undefined, this),
|
|
420856
420856
|
/* @__PURE__ */ jsx_dev_runtime314.jsxDEV(Link, {
|
|
420857
420857
|
url: "https://claude.ai/settings/data-privacy-controls"
|
|
@@ -421427,7 +421427,7 @@ async function call54(onDone) {
|
|
|
421427
421427
|
}
|
|
421428
421428
|
const updatedSettings = updatedSettingsResult.data;
|
|
421429
421429
|
const groveStatus = updatedSettings.grove_enabled ? "true" : "false";
|
|
421430
|
-
onDone(`"
|
|
421430
|
+
onDone(`"Data sharing" set to ${groveStatus}.`);
|
|
421431
421431
|
if (settings.grove_enabled !== null && settings.grove_enabled !== updatedSettings.grove_enabled) {
|
|
421432
421432
|
logEvent("tengu_grove_policy_toggled", {
|
|
421433
421433
|
state: updatedSettings.grove_enabled,
|
|
@@ -429791,7 +429791,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
|
|
|
429791
429791
|
smapsRollup,
|
|
429792
429792
|
platform: process.platform,
|
|
429793
429793
|
nodeVersion: process.version,
|
|
429794
|
-
ccVersion: "1.1.
|
|
429794
|
+
ccVersion: "1.1.15"
|
|
429795
429795
|
};
|
|
429796
429796
|
}
|
|
429797
429797
|
async function performHeapDump(trigger = "manual", dumpNumber = 0) {
|
|
@@ -430376,7 +430376,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
430376
430376
|
var call64 = async () => {
|
|
430377
430377
|
return {
|
|
430378
430378
|
type: "text",
|
|
430379
|
-
value: `${"1.1.
|
|
430379
|
+
value: `${"1.1.15"} (built ${"2026-04-08T22:42:21.973Z"})`
|
|
430380
430380
|
};
|
|
430381
430381
|
}, version, version_default;
|
|
430382
430382
|
var init_version = __esm(() => {
|
|
@@ -439314,7 +439314,7 @@ function generateHtmlReport(data, insights) {
|
|
|
439314
439314
|
</html>`;
|
|
439315
439315
|
}
|
|
439316
439316
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
439317
|
-
const version2 = typeof MACRO !== "undefined" ? "1.1.
|
|
439317
|
+
const version2 = typeof MACRO !== "undefined" ? "1.1.15" : "unknown";
|
|
439318
439318
|
const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
|
|
439319
439319
|
const facets_summary = {
|
|
439320
439320
|
total: facets.size,
|
|
@@ -443481,7 +443481,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
443481
443481
|
init_settings2();
|
|
443482
443482
|
init_slowOperations();
|
|
443483
443483
|
init_uuid();
|
|
443484
|
-
VERSION6 = typeof MACRO !== "undefined" ? "1.1.
|
|
443484
|
+
VERSION6 = typeof MACRO !== "undefined" ? "1.1.15" : "unknown";
|
|
443485
443485
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
443486
443486
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
443487
443487
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -444683,7 +444683,7 @@ var init_filesystem = __esm(() => {
|
|
|
444683
444683
|
});
|
|
444684
444684
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
444685
444685
|
const nonce = randomBytes19(16).toString("hex");
|
|
444686
|
-
return join130(getClaudeTempDir(), "bundled-skills", "1.1.
|
|
444686
|
+
return join130(getClaudeTempDir(), "bundled-skills", "1.1.15", nonce);
|
|
444687
444687
|
});
|
|
444688
444688
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
444689
444689
|
});
|
|
@@ -450682,7 +450682,7 @@ function computeFingerprint(messageText, version2) {
|
|
|
450682
450682
|
}
|
|
450683
450683
|
function computeFingerprintFromMessages(messages) {
|
|
450684
450684
|
const firstMessageText = extractFirstMessageText(messages);
|
|
450685
|
-
return computeFingerprint(firstMessageText, "1.1.
|
|
450685
|
+
return computeFingerprint(firstMessageText, "1.1.15");
|
|
450686
450686
|
}
|
|
450687
450687
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
450688
450688
|
var init_fingerprint = () => {};
|
|
@@ -452537,7 +452537,7 @@ async function sideQuery(opts) {
|
|
|
452537
452537
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
452538
452538
|
}
|
|
452539
452539
|
const messageText = extractFirstUserMessageText(messages);
|
|
452540
|
-
const fingerprint = computeFingerprint(messageText, "1.1.
|
|
452540
|
+
const fingerprint = computeFingerprint(messageText, "1.1.15");
|
|
452541
452541
|
const attributionHeader = getAttributionHeader(fingerprint);
|
|
452542
452542
|
const systemBlocks = [
|
|
452543
452543
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -456691,7 +456691,7 @@ function CostThresholdDialog(t0) {
|
|
|
456691
456691
|
let t4;
|
|
456692
456692
|
if ($2[4] !== onDone || $2[5] !== t3) {
|
|
456693
456693
|
t4 = /* @__PURE__ */ jsx_dev_runtime373.jsxDEV(Dialog, {
|
|
456694
|
-
title: "You've spent $5 on
|
|
456694
|
+
title: "You've spent $5 on API calls this session.",
|
|
456695
456695
|
onCancel: onDone,
|
|
456696
456696
|
children: [
|
|
456697
456697
|
t1,
|
|
@@ -457335,7 +457335,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
457335
457335
|
slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
|
|
457336
457336
|
apiKeySource: getAnthropicApiKeyWithSource().source,
|
|
457337
457337
|
betas: getSdkBetas(),
|
|
457338
|
-
claude_code_version: "1.1.
|
|
457338
|
+
claude_code_version: "1.1.15",
|
|
457339
457339
|
output_style: outputStyle2,
|
|
457340
457340
|
agents: inputs.agents.map((agent) => agent.agentType),
|
|
457341
457341
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
|
|
@@ -466227,7 +466227,7 @@ function buildPlanApprovalOptions({
|
|
|
466227
466227
|
});
|
|
466228
466228
|
if (showUltraplan) {
|
|
466229
466229
|
options.push({
|
|
466230
|
-
label: "No, refine with Ultraplan on
|
|
466230
|
+
label: "No, refine with Ultraplan on localclawd on the web",
|
|
466231
466231
|
value: "ultraplan"
|
|
466232
466232
|
});
|
|
466233
466233
|
}
|
|
@@ -469482,14 +469482,14 @@ function permissionComponentForTool(tool) {
|
|
|
469482
469482
|
function getNotificationMessage(toolUseConfirm) {
|
|
469483
469483
|
const toolName = toolUseConfirm.tool.userFacingName(toolUseConfirm.input);
|
|
469484
469484
|
if (toolUseConfirm.tool === ExitPlanModeV2Tool) {
|
|
469485
|
-
return "
|
|
469485
|
+
return "localclawd needs your approval for the plan";
|
|
469486
469486
|
}
|
|
469487
469487
|
if (toolUseConfirm.tool === EnterPlanModeTool) {
|
|
469488
|
-
return "
|
|
469488
|
+
return "localclawd wants to enter plan mode";
|
|
469489
469489
|
}
|
|
469490
469490
|
if (false) {}
|
|
469491
469491
|
if (!toolName || toolName.trim() === "") {
|
|
469492
|
-
return "
|
|
469492
|
+
return "localclawd needs your attention";
|
|
469493
469493
|
}
|
|
469494
469494
|
return `Claude needs your permission to use ${toolName}`;
|
|
469495
469495
|
}
|
|
@@ -470056,7 +470056,7 @@ function ElicitationFormDialog({
|
|
|
470056
470056
|
const currentFieldIsText = currentField !== undefined && isTextField(currentField.schema) && !isEnumSchema(currentField.schema);
|
|
470057
470057
|
const isEditingTextField = currentFieldIsText && !focusedButton;
|
|
470058
470058
|
useRegisterOverlay("elicitation");
|
|
470059
|
-
useNotifyAfterTimeout("
|
|
470059
|
+
useNotifyAfterTimeout("localclawd needs your input", "elicitation_dialog");
|
|
470060
470060
|
const syncTextInput = import_react221.useCallback((fieldIndex) => {
|
|
470061
470061
|
if (fieldIndex === undefined) {
|
|
470062
470062
|
setTextInputValue("");
|
|
@@ -470907,7 +470907,7 @@ function ElicitationURLDialog({
|
|
|
470907
470907
|
const phaseRef = import_react221.useRef("prompt");
|
|
470908
470908
|
const [focusedButton, setFocusedButton] = import_react221.useState("accept");
|
|
470909
470909
|
const showCancel = waitingState?.showCancel ?? false;
|
|
470910
|
-
useNotifyAfterTimeout("
|
|
470910
|
+
useNotifyAfterTimeout("localclawd needs your input", "elicitation_url_dialog");
|
|
470911
470911
|
useRegisterOverlay("elicitation-url");
|
|
470912
470912
|
phaseRef.current = phase;
|
|
470913
470913
|
const onWaitingDismissRef = import_react221.useRef(onWaitingDismiss);
|
|
@@ -471914,7 +471914,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
471914
471914
|
function getSemverPart(version2) {
|
|
471915
471915
|
return `${import_semver12.major(version2, { loose: true })}.${import_semver12.minor(version2, { loose: true })}.${import_semver12.patch(version2, { loose: true })}`;
|
|
471916
471916
|
}
|
|
471917
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.1.
|
|
471917
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.1.15") {
|
|
471918
471918
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react228.useState(() => getSemverPart(initialVersion));
|
|
471919
471919
|
if (!updatedVersion) {
|
|
471920
471920
|
return null;
|
|
@@ -471954,7 +471954,7 @@ function AutoUpdater({
|
|
|
471954
471954
|
return;
|
|
471955
471955
|
}
|
|
471956
471956
|
if (false) {}
|
|
471957
|
-
const currentVersion = "1.1.
|
|
471957
|
+
const currentVersion = "1.1.15";
|
|
471958
471958
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
471959
471959
|
let latestVersion = await getLatestVersion(channel);
|
|
471960
471960
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -472165,12 +472165,12 @@ function NativeAutoUpdater({
|
|
|
472165
472165
|
logEvent("tengu_native_auto_updater_start", {});
|
|
472166
472166
|
try {
|
|
472167
472167
|
const maxVersion = await getMaxVersion();
|
|
472168
|
-
if (maxVersion && gt("1.1.
|
|
472168
|
+
if (maxVersion && gt("1.1.15", maxVersion)) {
|
|
472169
472169
|
const msg = await getMaxVersionMessage();
|
|
472170
472170
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
472171
472171
|
}
|
|
472172
472172
|
const result = await installLatest(channel);
|
|
472173
|
-
const currentVersion = "1.1.
|
|
472173
|
+
const currentVersion = "1.1.15";
|
|
472174
472174
|
const latencyMs = Date.now() - startTime;
|
|
472175
472175
|
if (result.lockFailed) {
|
|
472176
472176
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -472305,17 +472305,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
472305
472305
|
const maxVersion = await getMaxVersion();
|
|
472306
472306
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
472307
472307
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
472308
|
-
if (gte("1.1.
|
|
472309
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.
|
|
472308
|
+
if (gte("1.1.15", maxVersion)) {
|
|
472309
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.1.15"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
472310
472310
|
setUpdateAvailable(false);
|
|
472311
472311
|
return;
|
|
472312
472312
|
}
|
|
472313
472313
|
latest = maxVersion;
|
|
472314
472314
|
}
|
|
472315
|
-
const hasUpdate = latest && !gte("1.1.
|
|
472315
|
+
const hasUpdate = latest && !gte("1.1.15", latest) && !shouldSkipVersion(latest);
|
|
472316
472316
|
setUpdateAvailable(!!hasUpdate);
|
|
472317
472317
|
if (hasUpdate) {
|
|
472318
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.1.
|
|
472318
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.1.15"} -> ${latest}`);
|
|
472319
472319
|
}
|
|
472320
472320
|
};
|
|
472321
472321
|
$2[0] = t1;
|
|
@@ -472349,7 +472349,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
472349
472349
|
wrap: "truncate",
|
|
472350
472350
|
children: [
|
|
472351
472351
|
"currentVersion: ",
|
|
472352
|
-
"1.1.
|
|
472352
|
+
"1.1.15"
|
|
472353
472353
|
]
|
|
472354
472354
|
}, undefined, true, undefined, this);
|
|
472355
472355
|
$2[3] = verbose;
|
|
@@ -479907,7 +479907,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
479907
479907
|
project_dir: getOriginalCwd(),
|
|
479908
479908
|
added_dirs: addedDirs
|
|
479909
479909
|
},
|
|
479910
|
-
version: "1.1.
|
|
479910
|
+
version: "1.1.15",
|
|
479911
479911
|
output_style: {
|
|
479912
479912
|
name: outputStyleName
|
|
479913
479913
|
},
|
|
@@ -491467,7 +491467,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
|
|
|
491467
491467
|
} catch {}
|
|
491468
491468
|
const data = {
|
|
491469
491469
|
trigger,
|
|
491470
|
-
version: "1.1.
|
|
491470
|
+
version: "1.1.15",
|
|
491471
491471
|
platform: process.platform,
|
|
491472
491472
|
transcript,
|
|
491473
491473
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -492275,7 +492275,7 @@ function TranscriptSharePrompt(t0) {
|
|
|
492275
492275
|
}, undefined, true, undefined, this),
|
|
492276
492276
|
/* @__PURE__ */ jsx_dev_runtime455.jsxDEV(ThemedText, {
|
|
492277
492277
|
bold: true,
|
|
492278
|
-
children: "Can
|
|
492278
|
+
children: "Can we look at your session transcript to help improve localclawd?"
|
|
492279
492279
|
}, undefined, false, undefined, this)
|
|
492280
492280
|
]
|
|
492281
492281
|
}, undefined, true, undefined, this);
|
|
@@ -493211,7 +493211,7 @@ function DesktopUpsellStartup(t0) {
|
|
|
493211
493211
|
let t3;
|
|
493212
493212
|
if ($2[5] === Symbol.for("react.memo_cache_sentinel")) {
|
|
493213
493213
|
t3 = {
|
|
493214
|
-
label: "Open in
|
|
493214
|
+
label: "Open in localclawd desktop",
|
|
493215
493215
|
value: "try"
|
|
493216
493216
|
};
|
|
493217
493217
|
$2[5] = t3;
|
|
@@ -493244,7 +493244,7 @@ function DesktopUpsellStartup(t0) {
|
|
|
493244
493244
|
t6 = /* @__PURE__ */ jsx_dev_runtime459.jsxDEV(ThemedBox_default, {
|
|
493245
493245
|
marginBottom: 1,
|
|
493246
493246
|
children: /* @__PURE__ */ jsx_dev_runtime459.jsxDEV(ThemedText, {
|
|
493247
|
-
children: "Same
|
|
493247
|
+
children: "Same localclawd with visual diffs, live app preview, parallel sessions, and more."
|
|
493248
493248
|
}, undefined, false, undefined, this)
|
|
493249
493249
|
}, undefined, false, undefined, this);
|
|
493250
493250
|
$2[8] = t6;
|
|
@@ -493262,7 +493262,7 @@ function DesktopUpsellStartup(t0) {
|
|
|
493262
493262
|
let t8;
|
|
493263
493263
|
if ($2[11] !== handleSelect || $2[12] !== t7) {
|
|
493264
493264
|
t8 = /* @__PURE__ */ jsx_dev_runtime459.jsxDEV(PermissionDialog, {
|
|
493265
|
-
title: "Try
|
|
493265
|
+
title: "Try localclawd desktop",
|
|
493266
493266
|
children: /* @__PURE__ */ jsx_dev_runtime459.jsxDEV(ThemedBox_default, {
|
|
493267
493267
|
flexDirection: "column",
|
|
493268
493268
|
paddingX: 2,
|
|
@@ -503502,46 +503502,52 @@ async function showSetupScreens(root3, permissionMode, allowDangerouslySkipPermi
|
|
|
503502
503502
|
resetGrowthBook();
|
|
503503
503503
|
initializeGrowthBook();
|
|
503504
503504
|
getSystemContext();
|
|
503505
|
-
|
|
503506
|
-
errors: allErrors
|
|
503507
|
-
} = getSettingsWithAllErrors();
|
|
503508
|
-
if (allErrors.length === 0) {
|
|
503509
|
-
await handleMcpjsonServerApprovals(root3);
|
|
503510
|
-
}
|
|
503511
|
-
if (await shouldShowClaudeMdExternalIncludesWarning()) {
|
|
503512
|
-
const externalIncludes = getExternalClaudeMdIncludes(await getMemoryFiles(true));
|
|
503505
|
+
try {
|
|
503513
503506
|
const {
|
|
503514
|
-
|
|
503515
|
-
} =
|
|
503516
|
-
|
|
503517
|
-
|
|
503518
|
-
|
|
503519
|
-
|
|
503520
|
-
|
|
503521
|
-
|
|
503522
|
-
|
|
503523
|
-
|
|
503524
|
-
|
|
503507
|
+
errors: allErrors
|
|
503508
|
+
} = getSettingsWithAllErrors();
|
|
503509
|
+
if (allErrors.length === 0) {
|
|
503510
|
+
await handleMcpjsonServerApprovals(root3);
|
|
503511
|
+
}
|
|
503512
|
+
} catch {}
|
|
503513
|
+
try {
|
|
503514
|
+
if (await shouldShowClaudeMdExternalIncludesWarning()) {
|
|
503515
|
+
const externalIncludes = getExternalClaudeMdIncludes(await getMemoryFiles(true));
|
|
503516
|
+
const {
|
|
503517
|
+
ClaudeMdExternalIncludesDialog: ClaudeMdExternalIncludesDialog2
|
|
503518
|
+
} = await Promise.resolve().then(() => (init_ClaudeMdExternalIncludesDialog(), exports_ClaudeMdExternalIncludesDialog));
|
|
503519
|
+
await showDialog(root3, (done) => /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(AppStateProvider, {
|
|
503520
|
+
onChangeAppState,
|
|
503521
|
+
children: /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ClaudeMdExternalIncludesDialog2, {
|
|
503522
|
+
onDone: done,
|
|
503523
|
+
isStandaloneDialog: true,
|
|
503524
|
+
externalIncludes
|
|
503525
|
+
}, undefined, false, undefined, this)
|
|
503526
|
+
}, undefined, false, undefined, this));
|
|
503527
|
+
}
|
|
503528
|
+
} catch {}
|
|
503525
503529
|
}
|
|
503526
503530
|
updateGithubRepoPathMapping();
|
|
503527
503531
|
if (false) {}
|
|
503528
503532
|
applyConfigEnvironmentVariables();
|
|
503529
503533
|
setImmediate(() => initializeTelemetryAfterTrust());
|
|
503530
|
-
|
|
503531
|
-
|
|
503532
|
-
|
|
503533
|
-
|
|
503534
|
-
|
|
503535
|
-
|
|
503536
|
-
|
|
503537
|
-
|
|
503538
|
-
|
|
503539
|
-
|
|
503540
|
-
|
|
503541
|
-
|
|
503542
|
-
|
|
503534
|
+
try {
|
|
503535
|
+
if (await isQualifiedForGrove()) {
|
|
503536
|
+
const {
|
|
503537
|
+
GroveDialog: GroveDialog2
|
|
503538
|
+
} = await Promise.resolve().then(() => (init_Grove(), exports_Grove));
|
|
503539
|
+
const decision = await showSetupDialog(root3, (done) => /* @__PURE__ */ jsx_dev_runtime485.jsxDEV(GroveDialog2, {
|
|
503540
|
+
showIfAlreadyViewed: false,
|
|
503541
|
+
location: onboardingShown ? "onboarding" : "policy_update_modal",
|
|
503542
|
+
onDone: done
|
|
503543
|
+
}, undefined, false, undefined, this));
|
|
503544
|
+
if (decision === "escape") {
|
|
503545
|
+
logEvent("tengu_grove_policy_exited", {});
|
|
503546
|
+
gracefulShutdownSync(0);
|
|
503547
|
+
return false;
|
|
503548
|
+
}
|
|
503543
503549
|
}
|
|
503544
|
-
}
|
|
503550
|
+
} catch {}
|
|
503545
503551
|
if ((permissionMode === "bypassPermissions" || allowDangerouslySkipPermissions) && !hasSkipDangerousModePermissionPrompt()) {
|
|
503546
503552
|
const {
|
|
503547
503553
|
BypassPermissionsModeDialog: BypassPermissionsModeDialog2
|
|
@@ -507185,7 +507191,7 @@ function cliOk(msg) {
|
|
|
507185
507191
|
|
|
507186
507192
|
// src/commands/mcp/addCommand.ts
|
|
507187
507193
|
function registerMcpAddCommand(mcp2) {
|
|
507188
|
-
mcp2.command("add <name> <commandOrUrl> [args...]").description(`Add an MCP server to
|
|
507194
|
+
mcp2.command("add <name> <commandOrUrl> [args...]").description(`Add an MCP server to localclawd.
|
|
507189
507195
|
|
|
507190
507196
|
` + `Examples:
|
|
507191
507197
|
` + ` # Add HTTP server:
|
|
@@ -507924,7 +507930,7 @@ function appendToLog(path17, message) {
|
|
|
507924
507930
|
cwd: getFsImplementation().cwd(),
|
|
507925
507931
|
userType: process.env.USER_TYPE,
|
|
507926
507932
|
sessionId: getSessionId(),
|
|
507927
|
-
version: "1.1.
|
|
507933
|
+
version: "1.1.15"
|
|
507928
507934
|
};
|
|
507929
507935
|
getLogWriter(path17).write(messageWithTimestamp);
|
|
507930
507936
|
}
|
|
@@ -511924,8 +511930,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
511924
511930
|
}
|
|
511925
511931
|
async function checkEnvLessBridgeMinVersion() {
|
|
511926
511932
|
const cfg = await getEnvLessBridgeConfig();
|
|
511927
|
-
if (cfg.min_version && lt("1.1.
|
|
511928
|
-
return `Your version of localclawd (${"1.1.
|
|
511933
|
+
if (cfg.min_version && lt("1.1.15", cfg.min_version)) {
|
|
511934
|
+
return `Your version of localclawd (${"1.1.15"}) is too old for Remote Control.
|
|
511929
511935
|
Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
|
|
511930
511936
|
}
|
|
511931
511937
|
return null;
|
|
@@ -512397,7 +512403,7 @@ async function initBridgeCore(params) {
|
|
|
512397
512403
|
const rawApi = createBridgeApiClient({
|
|
512398
512404
|
baseUrl,
|
|
512399
512405
|
getAccessToken,
|
|
512400
|
-
runnerVersion: "1.1.
|
|
512406
|
+
runnerVersion: "1.1.15",
|
|
512401
512407
|
onDebug: logForDebugging,
|
|
512402
512408
|
onAuth401,
|
|
512403
512409
|
getTrustedDeviceToken
|
|
@@ -518053,7 +518059,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
|
|
|
518053
518059
|
setCwd(cwd3);
|
|
518054
518060
|
const server = new Server({
|
|
518055
518061
|
name: "claude/tengu",
|
|
518056
|
-
version: "1.1.
|
|
518062
|
+
version: "1.1.15"
|
|
518057
518063
|
}, {
|
|
518058
518064
|
capabilities: {
|
|
518059
518065
|
tools: {}
|
|
@@ -519134,7 +519140,7 @@ function WelcomeV2() {
|
|
|
519134
519140
|
dimColor: true,
|
|
519135
519141
|
children: [
|
|
519136
519142
|
"v",
|
|
519137
|
-
"1.1.
|
|
519143
|
+
"1.1.15"
|
|
519138
519144
|
]
|
|
519139
519145
|
}, undefined, true, undefined, this)
|
|
519140
519146
|
]
|
|
@@ -519554,7 +519560,7 @@ async function setupTokenHandler(root3) {
|
|
|
519554
519560
|
resolve40();
|
|
519555
519561
|
},
|
|
519556
519562
|
mode: "setup-token",
|
|
519557
|
-
startingMessage: "This will guide you through long-lived (1-year) auth token setup
|
|
519563
|
+
startingMessage: "This will guide you through long-lived (1-year) auth token setup."
|
|
519558
519564
|
}, undefined, false, undefined, this)
|
|
519559
519565
|
]
|
|
519560
519566
|
}, undefined, true, undefined, this)
|
|
@@ -519703,7 +519709,7 @@ __export(exports_update, {
|
|
|
519703
519709
|
});
|
|
519704
519710
|
async function update() {
|
|
519705
519711
|
logEvent("tengu_update_check", {});
|
|
519706
|
-
writeToStdout(`Current version: ${"1.1.
|
|
519712
|
+
writeToStdout(`Current version: ${"1.1.15"}
|
|
519707
519713
|
`);
|
|
519708
519714
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
519709
519715
|
writeToStdout(`Checking for updates to ${channel} version...
|
|
@@ -519778,8 +519784,8 @@ async function update() {
|
|
|
519778
519784
|
writeToStdout(`localclawd is managed by Homebrew.
|
|
519779
519785
|
`);
|
|
519780
519786
|
const latest = await getLatestVersion(channel);
|
|
519781
|
-
if (latest && !gte("1.1.
|
|
519782
|
-
writeToStdout(`Update available: ${"1.1.
|
|
519787
|
+
if (latest && !gte("1.1.15", latest)) {
|
|
519788
|
+
writeToStdout(`Update available: ${"1.1.15"} → ${latest}
|
|
519783
519789
|
`);
|
|
519784
519790
|
writeToStdout(`
|
|
519785
519791
|
`);
|
|
@@ -519795,8 +519801,8 @@ async function update() {
|
|
|
519795
519801
|
writeToStdout(`localclawd is managed by winget.
|
|
519796
519802
|
`);
|
|
519797
519803
|
const latest = await getLatestVersion(channel);
|
|
519798
|
-
if (latest && !gte("1.1.
|
|
519799
|
-
writeToStdout(`Update available: ${"1.1.
|
|
519804
|
+
if (latest && !gte("1.1.15", latest)) {
|
|
519805
|
+
writeToStdout(`Update available: ${"1.1.15"} → ${latest}
|
|
519800
519806
|
`);
|
|
519801
519807
|
writeToStdout(`
|
|
519802
519808
|
`);
|
|
@@ -519810,8 +519816,8 @@ async function update() {
|
|
|
519810
519816
|
writeToStdout(`localclawd is managed by apk.
|
|
519811
519817
|
`);
|
|
519812
519818
|
const latest = await getLatestVersion(channel);
|
|
519813
|
-
if (latest && !gte("1.1.
|
|
519814
|
-
writeToStdout(`Update available: ${"1.1.
|
|
519819
|
+
if (latest && !gte("1.1.15", latest)) {
|
|
519820
|
+
writeToStdout(`Update available: ${"1.1.15"} → ${latest}
|
|
519815
519821
|
`);
|
|
519816
519822
|
writeToStdout(`
|
|
519817
519823
|
`);
|
|
@@ -519876,11 +519882,11 @@ async function update() {
|
|
|
519876
519882
|
`);
|
|
519877
519883
|
await gracefulShutdown(1);
|
|
519878
519884
|
}
|
|
519879
|
-
if (result.latestVersion === "1.1.
|
|
519880
|
-
writeToStdout(source_default.green(`localclawd is up to date (${"1.1.
|
|
519885
|
+
if (result.latestVersion === "1.1.15") {
|
|
519886
|
+
writeToStdout(source_default.green(`localclawd is up to date (${"1.1.15"})`) + `
|
|
519881
519887
|
`);
|
|
519882
519888
|
} else {
|
|
519883
|
-
writeToStdout(source_default.green(`Successfully updated from ${"1.1.
|
|
519889
|
+
writeToStdout(source_default.green(`Successfully updated from ${"1.1.15"} to version ${result.latestVersion}`) + `
|
|
519884
519890
|
`);
|
|
519885
519891
|
await regenerateCompletionCache();
|
|
519886
519892
|
}
|
|
@@ -519940,12 +519946,12 @@ async function update() {
|
|
|
519940
519946
|
`);
|
|
519941
519947
|
await gracefulShutdown(1);
|
|
519942
519948
|
}
|
|
519943
|
-
if (latestVersion === "1.1.
|
|
519944
|
-
writeToStdout(source_default.green(`localclawd is up to date (${"1.1.
|
|
519949
|
+
if (latestVersion === "1.1.15") {
|
|
519950
|
+
writeToStdout(source_default.green(`localclawd is up to date (${"1.1.15"})`) + `
|
|
519945
519951
|
`);
|
|
519946
519952
|
await gracefulShutdown(0);
|
|
519947
519953
|
}
|
|
519948
|
-
writeToStdout(`New version available: ${latestVersion} (current: ${"1.1.
|
|
519954
|
+
writeToStdout(`New version available: ${latestVersion} (current: ${"1.1.15"})
|
|
519949
519955
|
`);
|
|
519950
519956
|
writeToStdout(`Installing update...
|
|
519951
519957
|
`);
|
|
@@ -519990,7 +519996,7 @@ async function update() {
|
|
|
519990
519996
|
logForDebugging(`update: Installation status: ${status2}`);
|
|
519991
519997
|
switch (status2) {
|
|
519992
519998
|
case "success":
|
|
519993
|
-
writeToStdout(source_default.green(`Successfully updated from ${"1.1.
|
|
519999
|
+
writeToStdout(source_default.green(`Successfully updated from ${"1.1.15"} to version ${latestVersion}`) + `
|
|
519994
520000
|
`);
|
|
519995
520001
|
await regenerateCompletionCache();
|
|
519996
520002
|
break;
|
|
@@ -521099,14 +521105,33 @@ ${customInstructions}` : customInstructions;
|
|
|
521099
521105
|
} = await Promise.resolve().then(() => (init_ink2(), exports_ink));
|
|
521100
521106
|
logForDebugging("[STARTUP] Ink root module imported");
|
|
521101
521107
|
startupLoadingIndicator?.stop();
|
|
521102
|
-
|
|
521108
|
+
try {
|
|
521109
|
+
root3 = await createRoot3(ctx2.renderOptions);
|
|
521110
|
+
} catch (err2) {
|
|
521111
|
+
const msg = err2 instanceof Error ? err2.message : String(err2);
|
|
521112
|
+
process.stderr.write(`
|
|
521113
|
+
localclawd: failed to initialize terminal — ${msg}
|
|
521114
|
+
If using VSCode, open a new terminal with Ctrl+\` and try again.
|
|
521115
|
+
`);
|
|
521116
|
+
process.exit(1);
|
|
521117
|
+
}
|
|
521103
521118
|
logForDebugging("[STARTUP] Ink root created");
|
|
521104
521119
|
logEvent("tengu_timer", {
|
|
521105
521120
|
event: "startup",
|
|
521106
521121
|
durationMs: Math.round(process.uptime() * 1000)
|
|
521107
521122
|
});
|
|
521108
521123
|
const setupScreensStart = Date.now();
|
|
521109
|
-
|
|
521124
|
+
let onboardingShown;
|
|
521125
|
+
try {
|
|
521126
|
+
onboardingShown = await showSetupScreens(root3, permissionMode, allowDangerouslySkipPermissions, commands2, enableClaudeInChrome, devChannels);
|
|
521127
|
+
} catch (err2) {
|
|
521128
|
+
const msg = err2 instanceof Error ? err2.message : String(err2);
|
|
521129
|
+
process.stderr.write(`
|
|
521130
|
+
localclawd: startup error — ${msg}
|
|
521131
|
+
Run with --debug for more details.
|
|
521132
|
+
`);
|
|
521133
|
+
process.exit(1);
|
|
521134
|
+
}
|
|
521110
521135
|
if (false) {}
|
|
521111
521136
|
if (false) {}
|
|
521112
521137
|
if (onboardingShown && prompt?.trim().toLowerCase() === "/login") {
|
|
@@ -521255,7 +521280,7 @@ ${customInstructions}` : customInstructions;
|
|
|
521255
521280
|
}
|
|
521256
521281
|
}
|
|
521257
521282
|
logForDiagnosticsNoPII("info", "started", {
|
|
521258
|
-
version: "1.1.
|
|
521283
|
+
version: "1.1.15",
|
|
521259
521284
|
is_native_binary: isInBundledMode()
|
|
521260
521285
|
});
|
|
521261
521286
|
registerCleanup(async () => {
|
|
@@ -522039,7 +522064,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
522039
522064
|
pendingHookMessages
|
|
522040
522065
|
}, renderAndRun);
|
|
522041
522066
|
}
|
|
522042
|
-
}).version("1.1.
|
|
522067
|
+
}).version("1.1.15 (localClawd)", "-v, --version", "Output the version number");
|
|
522043
522068
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
522044
522069
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
522045
522070
|
if (canUserConfigureAdvisor()) {
|
|
@@ -522130,8 +522155,8 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
522130
522155
|
if (false) {}
|
|
522131
522156
|
if (false) {}
|
|
522132
522157
|
if (false) {}
|
|
522133
|
-
const auth2 = program2.command("auth").description("Manage authentication").configureHelp(createSortedHelpConfig());
|
|
522134
|
-
auth2.command("login").description("Sign in
|
|
522158
|
+
const auth2 = program2.command("auth").description("Manage API authentication").hideHelp().configureHelp(createSortedHelpConfig());
|
|
522159
|
+
auth2.command("login").description("Sign in (API key users)").hideHelp().option("--email <email>", "Pre-populate email address on the login page").option("--sso", "Force SSO login flow").option("--console", "Use Console (API usage billing)").option("--claudeai", "Use subscription (default)").action(async ({
|
|
522135
522160
|
email,
|
|
522136
522161
|
sso,
|
|
522137
522162
|
console: useConsole,
|
|
@@ -522153,7 +522178,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
522153
522178
|
} = await Promise.resolve().then(() => (init_auth6(), exports_auth2));
|
|
522154
522179
|
await authStatus2(opts);
|
|
522155
522180
|
});
|
|
522156
|
-
auth2.command("logout").description("
|
|
522181
|
+
auth2.command("logout").description("Sign out").action(async () => {
|
|
522157
522182
|
const {
|
|
522158
522183
|
authLogout: authLogout2
|
|
522159
522184
|
} = await Promise.resolve().then(() => (init_auth6(), exports_auth2));
|
|
@@ -522547,7 +522572,7 @@ if (false) {}
|
|
|
522547
522572
|
async function main2() {
|
|
522548
522573
|
const args = process.argv.slice(2);
|
|
522549
522574
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
522550
|
-
console.log(`${"1.1.
|
|
522575
|
+
console.log(`${"1.1.15"} (localclawd)`);
|
|
522551
522576
|
return;
|
|
522552
522577
|
}
|
|
522553
522578
|
const {
|
|
@@ -522629,6 +522654,19 @@ async function main2() {
|
|
|
522629
522654
|
await cliMain();
|
|
522630
522655
|
profileCheckpoint2("cli_after_main_complete");
|
|
522631
522656
|
}
|
|
522632
|
-
|
|
522657
|
+
process.on("unhandledRejection", (reason) => {
|
|
522658
|
+
const msg = reason instanceof Error ? reason.stack ?? reason.message : String(reason);
|
|
522659
|
+
process.stderr.write(`
|
|
522660
|
+
localclawd: unhandled error — ${msg}
|
|
522661
|
+
`);
|
|
522662
|
+
process.exit(1);
|
|
522663
|
+
});
|
|
522664
|
+
main2().catch((err2) => {
|
|
522665
|
+
const msg = err2 instanceof Error ? err2.stack ?? err2.message : String(err2);
|
|
522666
|
+
process.stderr.write(`
|
|
522667
|
+
localclawd crashed: ${msg}
|
|
522668
|
+
`);
|
|
522669
|
+
process.exit(1);
|
|
522670
|
+
});
|
|
522633
522671
|
|
|
522634
|
-
//# debugId=
|
|
522672
|
+
//# debugId=EE921B1E2788116364756E2164756E21
|