localclawd 1.9.9 → 2.0.1
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.mjs +240 -202
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -87608,7 +87608,7 @@ var init_isEqual = __esm(() => {
|
|
|
87608
87608
|
|
|
87609
87609
|
// src/utils/userAgent.ts
|
|
87610
87610
|
function getClaudeCodeUserAgent() {
|
|
87611
|
-
return `claude-code/${"
|
|
87611
|
+
return `claude-code/${"2.0.1"}`;
|
|
87612
87612
|
}
|
|
87613
87613
|
|
|
87614
87614
|
// src/utils/workloadContext.ts
|
|
@@ -87630,7 +87630,7 @@ function getUserAgent() {
|
|
|
87630
87630
|
const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
|
|
87631
87631
|
const workload = getWorkload();
|
|
87632
87632
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
87633
|
-
return `claude-cli/${"
|
|
87633
|
+
return `claude-cli/${"2.0.1"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
87634
87634
|
}
|
|
87635
87635
|
function getMCPUserAgent() {
|
|
87636
87636
|
const parts = [];
|
|
@@ -87644,7 +87644,7 @@ function getMCPUserAgent() {
|
|
|
87644
87644
|
parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
|
|
87645
87645
|
}
|
|
87646
87646
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
87647
|
-
return `claude-code/${"
|
|
87647
|
+
return `claude-code/${"2.0.1"}${suffix}`;
|
|
87648
87648
|
}
|
|
87649
87649
|
function getWebFetchUserAgent() {
|
|
87650
87650
|
return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
|
|
@@ -130840,7 +130840,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
130840
130840
|
if (!isAttributionHeaderEnabled()) {
|
|
130841
130841
|
return "";
|
|
130842
130842
|
}
|
|
130843
|
-
const version = `${"
|
|
130843
|
+
const version = `${"2.0.1"}.${fingerprint}`;
|
|
130844
130844
|
const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
|
|
130845
130845
|
const cch = "";
|
|
130846
130846
|
const workload = getWorkload();
|
|
@@ -147029,7 +147029,7 @@ var init_metadata = __esm(() => {
|
|
|
147029
147029
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
147030
147030
|
WHITESPACE_REGEX = /\s+/;
|
|
147031
147031
|
getVersionBase = memoize_default(() => {
|
|
147032
|
-
const match = "
|
|
147032
|
+
const match = "2.0.1".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
147033
147033
|
return match ? match[0] : undefined;
|
|
147034
147034
|
});
|
|
147035
147035
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -147069,9 +147069,9 @@ var init_metadata = __esm(() => {
|
|
|
147069
147069
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
147070
147070
|
isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
|
|
147071
147071
|
isClaudeAiAuth: isClaudeAISubscriber(),
|
|
147072
|
-
version: "
|
|
147072
|
+
version: "2.0.1",
|
|
147073
147073
|
versionBase: getVersionBase(),
|
|
147074
|
-
buildTime: "2026-05-07T20:
|
|
147074
|
+
buildTime: "2026-05-07T20:29:52.644Z",
|
|
147075
147075
|
deploymentEnvironment: env3.detectDeploymentEnvironment(),
|
|
147076
147076
|
...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
|
|
147077
147077
|
githubEventName: process.env.GITHUB_EVENT_NAME,
|
|
@@ -179647,7 +179647,7 @@ function getTelemetryAttributes() {
|
|
|
179647
179647
|
attributes["session.id"] = sessionId;
|
|
179648
179648
|
}
|
|
179649
179649
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
179650
|
-
attributes["app.version"] = "
|
|
179650
|
+
attributes["app.version"] = "2.0.1";
|
|
179651
179651
|
}
|
|
179652
179652
|
const oauthAccount = getOauthAccountInfo();
|
|
179653
179653
|
if (oauthAccount) {
|
|
@@ -242451,7 +242451,7 @@ function getInstallationEnv() {
|
|
|
242451
242451
|
return;
|
|
242452
242452
|
}
|
|
242453
242453
|
function getClaudeCodeVersion() {
|
|
242454
|
-
return "
|
|
242454
|
+
return "2.0.1";
|
|
242455
242455
|
}
|
|
242456
242456
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
242457
242457
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -247725,7 +247725,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
247725
247725
|
const client4 = new Client({
|
|
247726
247726
|
name: "localclawd",
|
|
247727
247727
|
title: "localclawd",
|
|
247728
|
-
version: "
|
|
247728
|
+
version: "2.0.1",
|
|
247729
247729
|
description: "local-first AI coding tool",
|
|
247730
247730
|
websiteUrl: PRODUCT_URL
|
|
247731
247731
|
}, {
|
|
@@ -248067,7 +248067,7 @@ var init_client9 = __esm(() => {
|
|
|
248067
248067
|
const client4 = new Client({
|
|
248068
248068
|
name: "localclawd",
|
|
248069
248069
|
title: "localclawd",
|
|
248070
|
-
version: "
|
|
248070
|
+
version: "2.0.1",
|
|
248071
248071
|
description: "local-first AI coding tool",
|
|
248072
248072
|
websiteUrl: PRODUCT_URL
|
|
248073
248073
|
}, {
|
|
@@ -262469,7 +262469,7 @@ function computeFingerprint(messageText, version) {
|
|
|
262469
262469
|
}
|
|
262470
262470
|
function computeFingerprintFromMessages(messages) {
|
|
262471
262471
|
const firstMessageText = extractFirstMessageText(messages);
|
|
262472
|
-
return computeFingerprint(firstMessageText, "
|
|
262472
|
+
return computeFingerprint(firstMessageText, "2.0.1");
|
|
262473
262473
|
}
|
|
262474
262474
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
262475
262475
|
var init_fingerprint = () => {};
|
|
@@ -262511,7 +262511,7 @@ async function sideQuery(opts) {
|
|
|
262511
262511
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
262512
262512
|
}
|
|
262513
262513
|
const messageText = extractFirstUserMessageText(messages);
|
|
262514
|
-
const fingerprint = computeFingerprint(messageText, "
|
|
262514
|
+
const fingerprint = computeFingerprint(messageText, "2.0.1");
|
|
262515
262515
|
const attributionHeader = getAttributionHeader(fingerprint);
|
|
262516
262516
|
const systemBlocks = [
|
|
262517
262517
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -283259,7 +283259,7 @@ var init_user = __esm(() => {
|
|
|
283259
283259
|
deviceId,
|
|
283260
283260
|
sessionId: getSessionId(),
|
|
283261
283261
|
email: getEmail(),
|
|
283262
|
-
appVersion: "
|
|
283262
|
+
appVersion: "2.0.1",
|
|
283263
283263
|
platform: getHostPlatformForAnalytics(),
|
|
283264
283264
|
organizationUuid,
|
|
283265
283265
|
accountUuid,
|
|
@@ -284324,7 +284324,7 @@ async function initializeBetaTracing(resource) {
|
|
|
284324
284324
|
});
|
|
284325
284325
|
logs.setGlobalLoggerProvider(loggerProvider);
|
|
284326
284326
|
setLoggerProvider(loggerProvider);
|
|
284327
|
-
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "
|
|
284327
|
+
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "2.0.1");
|
|
284328
284328
|
setEventLogger(eventLogger);
|
|
284329
284329
|
process.on("beforeExit", async () => {
|
|
284330
284330
|
await loggerProvider?.forceFlush();
|
|
@@ -284364,7 +284364,7 @@ async function initializeTelemetry() {
|
|
|
284364
284364
|
const platform2 = getPlatform();
|
|
284365
284365
|
const baseAttributes = {
|
|
284366
284366
|
[ATTR_SERVICE_NAME4]: "claude-code",
|
|
284367
|
-
[ATTR_SERVICE_VERSION4]: "
|
|
284367
|
+
[ATTR_SERVICE_VERSION4]: "2.0.1"
|
|
284368
284368
|
};
|
|
284369
284369
|
if (platform2 === "wsl") {
|
|
284370
284370
|
const wslVersion = getWslVersion();
|
|
@@ -284409,7 +284409,7 @@ async function initializeTelemetry() {
|
|
|
284409
284409
|
} catch {}
|
|
284410
284410
|
};
|
|
284411
284411
|
registerCleanup(shutdownTelemetry2);
|
|
284412
|
-
return meterProvider2.getMeter("com.anthropic.claude_code", "
|
|
284412
|
+
return meterProvider2.getMeter("com.anthropic.claude_code", "2.0.1");
|
|
284413
284413
|
}
|
|
284414
284414
|
const meterProvider = new MeterProvider4({
|
|
284415
284415
|
resource,
|
|
@@ -284429,7 +284429,7 @@ async function initializeTelemetry() {
|
|
|
284429
284429
|
});
|
|
284430
284430
|
logs.setGlobalLoggerProvider(loggerProvider);
|
|
284431
284431
|
setLoggerProvider(loggerProvider);
|
|
284432
|
-
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "
|
|
284432
|
+
const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "2.0.1");
|
|
284433
284433
|
setEventLogger(eventLogger);
|
|
284434
284434
|
logForDebugging("[3P telemetry] Event logger set successfully");
|
|
284435
284435
|
process.on("beforeExit", async () => {
|
|
@@ -284491,7 +284491,7 @@ Current timeout: ${timeoutMs}ms
|
|
|
284491
284491
|
}
|
|
284492
284492
|
};
|
|
284493
284493
|
registerCleanup(shutdownTelemetry);
|
|
284494
|
-
return meterProvider.getMeter("com.anthropic.claude_code", "
|
|
284494
|
+
return meterProvider.getMeter("com.anthropic.claude_code", "2.0.1");
|
|
284495
284495
|
}
|
|
284496
284496
|
async function flushTelemetry() {
|
|
284497
284497
|
const meterProvider = getMeterProvider();
|
|
@@ -285681,7 +285681,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
285681
285681
|
}
|
|
285682
285682
|
async function getDoctorDiagnostic() {
|
|
285683
285683
|
const installationType = await getCurrentInstallationType();
|
|
285684
|
-
const version = typeof MACRO !== "undefined" ? "
|
|
285684
|
+
const version = typeof MACRO !== "undefined" ? "2.0.1" : "unknown";
|
|
285685
285685
|
const installationPath = await getInstallationPath();
|
|
285686
285686
|
const invokedBinary = getInvokedBinary();
|
|
285687
285687
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -286622,8 +286622,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
286622
286622
|
const maxVersion = await getMaxVersion();
|
|
286623
286623
|
if (maxVersion && gt(version, maxVersion)) {
|
|
286624
286624
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
|
|
286625
|
-
if (gte("
|
|
286626
|
-
logForDebugging(`Native installer: current version ${"
|
|
286625
|
+
if (gte("2.0.1", maxVersion)) {
|
|
286626
|
+
logForDebugging(`Native installer: current version ${"2.0.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
286627
286627
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
286628
286628
|
latency_ms: Date.now() - startTime,
|
|
286629
286629
|
max_version: maxVersion,
|
|
@@ -286634,7 +286634,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
286634
286634
|
version = maxVersion;
|
|
286635
286635
|
}
|
|
286636
286636
|
}
|
|
286637
|
-
if (!forceReinstall && version === "
|
|
286637
|
+
if (!forceReinstall && version === "2.0.1" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
|
|
286638
286638
|
logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
|
|
286639
286639
|
logEvent("tengu_native_update_complete", {
|
|
286640
286640
|
latency_ms: Date.now() - startTime,
|
|
@@ -323116,8 +323116,12 @@ Workflow selection:
|
|
|
323116
323116
|
- Workflows support {{positive_prompt}} / {{negative_prompt}} templates or raw ComfyUI API exports
|
|
323117
323117
|
|
|
323118
323118
|
Output directory:
|
|
323119
|
-
-
|
|
323120
|
-
-
|
|
323119
|
+
- All generated images are saved to: <project-root>/.localclawd/image-pipeline/generated/
|
|
323120
|
+
- The full absolute path is returned in the tool result (path field).
|
|
323121
|
+
- After inspecting the image, you can move it anywhere using Bash (mv) or PowerShell (Move-Item).
|
|
323122
|
+
Example: move to project root → mv "<path>" "./my-image.png"
|
|
323123
|
+
Example: move to desktop → mv "<path>" "$HOME/Desktop/my-image.png"
|
|
323124
|
+
If the user specifies a destination, move it there immediately after approving the result.
|
|
323121
323125
|
|
|
323122
323126
|
If ComfyUI is not reachable, ask the user to run /image-pipeline config <url> with their ComfyUI address.
|
|
323123
323127
|
To list available workflows, call /image-pipeline list.
|
|
@@ -323125,18 +323129,18 @@ To list available workflows, call /image-pipeline list.
|
|
|
323125
323129
|
After generating, the image is returned visually in the tool result so you can review it.
|
|
323126
323130
|
|
|
323127
323131
|
REVIEW AND REPROMPT PROTOCOL:
|
|
323128
|
-
1. After calling GenerateImage, examine the returned image carefully.
|
|
323129
|
-
2. If the image
|
|
323130
|
-
3. Refine: add missing details, fix style keywords, adjust composition
|
|
323132
|
+
1. After calling GenerateImage, examine the returned image carefully for quality AND artifacts.
|
|
323133
|
+
2. If the image has edge/corner artifacts, blurring, or wrong content — fix parameters and retry (do not keep a bad image).
|
|
323134
|
+
3. Refine: add missing details, fix style keywords, adjust composition. Do not repeat the same prompt.
|
|
323131
323135
|
4. You may iterate up to 3 times total. Stop as soon as a result is satisfactory.
|
|
323132
|
-
5.
|
|
323136
|
+
5. After final approval: move the image to the user's desired location if specified, then report the saved path.
|
|
323133
323137
|
|
|
323134
|
-
FIXING ARTIFACTS
|
|
323135
|
-
- Corner / edge artifacts →
|
|
323138
|
+
FIXING ARTIFACTS:
|
|
323139
|
+
- Corner / edge artifacts → cfg is too high for this model. Flow models (z_image_turbo, AuraFlow, Lumina2): cfg MUST be 1. Retry with cfg=1.
|
|
323136
323140
|
- Ring or halo artefacts → steps too high. Try steps=4 for turbo workflows.
|
|
323137
|
-
- Blurry result → steps too low
|
|
323141
|
+
- Blurry result → steps too low or wrong sampler. Increase steps by +4.
|
|
323138
323142
|
- Washed-out / grey → VAE mismatch. Try a different workflow.
|
|
323139
|
-
- Size-related artefacts →
|
|
323143
|
+
- Size-related artefacts → dimensions must be multiples of 64. Flow models need 1024×1024.
|
|
323140
323144
|
Pass overrides via the tool parameters: steps, cfg, width, height, model.
|
|
323141
323145
|
|
|
323142
323146
|
Use this tool when the user asks you to generate, create, or render an image.`;
|
|
@@ -323152,16 +323156,30 @@ function renderToolUseMessage21(input) {
|
|
|
323152
323156
|
return input.prompt ?? null;
|
|
323153
323157
|
}
|
|
323154
323158
|
function renderToolUseErrorMessage11(error5) {
|
|
323159
|
+
const msg = error5 instanceof Error ? error5.message ?? "unknown error" : error5 != null ? String(error5) : "unknown error";
|
|
323155
323160
|
return /* @__PURE__ */ jsx_dev_runtime145.jsxDEV(ThemedText, {
|
|
323156
323161
|
color: "red",
|
|
323157
|
-
children: `GenerateImage error: ${
|
|
323162
|
+
children: `GenerateImage error: ${msg}`
|
|
323158
323163
|
}, undefined, false, undefined, this);
|
|
323159
323164
|
}
|
|
323160
323165
|
function renderToolResultMessage20(output) {
|
|
323166
|
+
if (output.error)
|
|
323167
|
+
return /* @__PURE__ */ jsx_dev_runtime145.jsxDEV(ThemedText, {
|
|
323168
|
+
color: "red",
|
|
323169
|
+
children: output.error
|
|
323170
|
+
}, undefined, false, undefined, this);
|
|
323161
323171
|
return /* @__PURE__ */ jsx_dev_runtime145.jsxDEV(ThemedText, {
|
|
323162
323172
|
dimColor: true,
|
|
323163
|
-
children:
|
|
323164
|
-
|
|
323173
|
+
children: [
|
|
323174
|
+
`Saved: ${output.path}`,
|
|
323175
|
+
`
|
|
323176
|
+
`,
|
|
323177
|
+
/* @__PURE__ */ jsx_dev_runtime145.jsxDEV(ThemedText, {
|
|
323178
|
+
color: "yellow",
|
|
323179
|
+
children: 'Inspect above — move with: mv "' + output.path + '" <destination>'
|
|
323180
|
+
}, undefined, false, undefined, this)
|
|
323181
|
+
]
|
|
323182
|
+
}, undefined, true, undefined, this);
|
|
323165
323183
|
}
|
|
323166
323184
|
var jsx_dev_runtime145;
|
|
323167
323185
|
var init_UI20 = __esm(() => {
|
|
@@ -323181,6 +323199,117 @@ function timestamp() {
|
|
|
323181
323199
|
const pad = (n) => String(n).padStart(2, "0");
|
|
323182
323200
|
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}_${pad(d.getHours())}-${pad(d.getMinutes())}-${pad(d.getSeconds())}`;
|
|
323183
323201
|
}
|
|
323202
|
+
async function callInner(input, abortController) {
|
|
323203
|
+
const projectRoot = getCwd();
|
|
323204
|
+
const config = await loadConfig(projectRoot);
|
|
323205
|
+
const configuredUrl = config?.backendUrl ?? DEFAULT_COMFYUI_URL;
|
|
323206
|
+
let backendUrl = DEFAULT_COMFYUI_URL;
|
|
323207
|
+
if (!await detectComfyUI(DEFAULT_COMFYUI_URL)) {
|
|
323208
|
+
if (configuredUrl !== DEFAULT_COMFYUI_URL && await detectComfyUI(configuredUrl)) {
|
|
323209
|
+
backendUrl = configuredUrl;
|
|
323210
|
+
} else {
|
|
323211
|
+
return {
|
|
323212
|
+
data: {
|
|
323213
|
+
path: "",
|
|
323214
|
+
filename: "",
|
|
323215
|
+
promptId: "",
|
|
323216
|
+
seed: 0,
|
|
323217
|
+
backend: configuredUrl,
|
|
323218
|
+
error: `ComfyUI not reachable at ${DEFAULT_COMFYUI_URL}${configuredUrl !== DEFAULT_COMFYUI_URL ? ` or ${configuredUrl}` : ""}. Start ComfyUI or run /image-pipeline config <url>.`
|
|
323219
|
+
}
|
|
323220
|
+
};
|
|
323221
|
+
}
|
|
323222
|
+
}
|
|
323223
|
+
if (abortController.signal.aborted) {
|
|
323224
|
+
return { data: { path: "", filename: "", promptId: "", seed: 0, backend: backendUrl, error: "Aborted" } };
|
|
323225
|
+
}
|
|
323226
|
+
const seed = input.seed ?? Math.floor(Math.random() * 2 ** 32);
|
|
323227
|
+
const negativePrompt = input.negative_prompt ?? "blurry, low quality, watermark, deformed";
|
|
323228
|
+
const workflowName = input.workflow ?? config?.defaultWorkflow;
|
|
323229
|
+
const workflowBase = workflowName ? await loadWorkflow(projectRoot, workflowName) : null;
|
|
323230
|
+
const usingBuiltIn = !workflowBase;
|
|
323231
|
+
const injectParams = usingBuiltIn ? {
|
|
323232
|
+
seed,
|
|
323233
|
+
model: input.model ?? config?.defaultModel ?? "v1-5-pruned-emaonly.safetensors",
|
|
323234
|
+
width: input.width ?? config?.defaultWidth ?? 512,
|
|
323235
|
+
height: input.height ?? config?.defaultHeight ?? 512,
|
|
323236
|
+
steps: input.steps ?? config?.defaultSteps ?? 20,
|
|
323237
|
+
cfg: input.cfg ?? config?.defaultCfg ?? 7
|
|
323238
|
+
} : {
|
|
323239
|
+
seed,
|
|
323240
|
+
...input.model && { model: input.model },
|
|
323241
|
+
...input.width && { width: input.width },
|
|
323242
|
+
...input.height && { height: input.height },
|
|
323243
|
+
...input.steps && { steps: input.steps },
|
|
323244
|
+
...input.cfg && { cfg: input.cfg }
|
|
323245
|
+
};
|
|
323246
|
+
const workflow = injectPrompt(workflowBase ?? DEFAULT_WORKFLOW, input.prompt, negativePrompt, injectParams);
|
|
323247
|
+
let queued;
|
|
323248
|
+
try {
|
|
323249
|
+
queued = await queuePrompt(backendUrl, workflow);
|
|
323250
|
+
} catch (e) {
|
|
323251
|
+
return {
|
|
323252
|
+
data: { path: "", filename: "", promptId: "", seed, backend: backendUrl, error: `Queue failed: ${String(e)}` }
|
|
323253
|
+
};
|
|
323254
|
+
}
|
|
323255
|
+
if (abortController.signal.aborted) {
|
|
323256
|
+
return { data: { path: "", filename: "", promptId: queued.prompt_id, seed, backend: backendUrl, error: "Aborted" } };
|
|
323257
|
+
}
|
|
323258
|
+
const result = await pollForCompletion(backendUrl, queued.prompt_id);
|
|
323259
|
+
if (!result) {
|
|
323260
|
+
return {
|
|
323261
|
+
data: {
|
|
323262
|
+
path: "",
|
|
323263
|
+
filename: "",
|
|
323264
|
+
promptId: queued.prompt_id,
|
|
323265
|
+
seed,
|
|
323266
|
+
backend: backendUrl,
|
|
323267
|
+
error: `Timed out. Check ComfyUI: ${backendUrl}/history/${queued.prompt_id}`
|
|
323268
|
+
}
|
|
323269
|
+
};
|
|
323270
|
+
}
|
|
323271
|
+
const comfyImages = extractOutputImages(result);
|
|
323272
|
+
const firstImage = comfyImages[0];
|
|
323273
|
+
if (!firstImage) {
|
|
323274
|
+
return {
|
|
323275
|
+
data: { path: "", filename: "", promptId: queued.prompt_id, seed, backend: backendUrl, error: "Job completed but no output images found" }
|
|
323276
|
+
};
|
|
323277
|
+
}
|
|
323278
|
+
const allImageMeta = Object.values(result.outputs).flatMap((o) => o.images ?? []);
|
|
323279
|
+
const imgMeta = allImageMeta.find((img) => img.filename === firstImage);
|
|
323280
|
+
const subfolder = imgMeta?.subfolder ?? "";
|
|
323281
|
+
const imgType = imgMeta?.type ?? "output";
|
|
323282
|
+
let rawBytes = null;
|
|
323283
|
+
try {
|
|
323284
|
+
const params = new URLSearchParams({ filename: firstImage, subfolder, type: imgType });
|
|
323285
|
+
const res = await fetch(`${backendUrl}/view?${params}`);
|
|
323286
|
+
if (res.ok) {
|
|
323287
|
+
rawBytes = Buffer.from(await res.arrayBuffer());
|
|
323288
|
+
}
|
|
323289
|
+
} catch {}
|
|
323290
|
+
const outputDir = join80(getCwd(), ".localclawd", "image-pipeline", "generated").replace(/\\/g, "/");
|
|
323291
|
+
await mkdir20(outputDir, { recursive: true });
|
|
323292
|
+
const outName = `${timestamp()}_${slugify(input.prompt)}.png`;
|
|
323293
|
+
const savedPath = join80(outputDir, outName).replace(/\\/g, "/");
|
|
323294
|
+
if (rawBytes) {
|
|
323295
|
+
await writeFile20(savedPath, rawBytes);
|
|
323296
|
+
}
|
|
323297
|
+
const data = {
|
|
323298
|
+
path: savedPath,
|
|
323299
|
+
filename: outName,
|
|
323300
|
+
promptId: queued.prompt_id,
|
|
323301
|
+
seed,
|
|
323302
|
+
backend: backendUrl
|
|
323303
|
+
};
|
|
323304
|
+
const imageBytes = rawBytes ?? await readFile27(savedPath).catch(() => null);
|
|
323305
|
+
if (imageBytes && imageBytes.length > 0) {
|
|
323306
|
+
imageDataCache.set(data, {
|
|
323307
|
+
base64: imageBytes.toString("base64"),
|
|
323308
|
+
mediaType: "image/png"
|
|
323309
|
+
});
|
|
323310
|
+
}
|
|
323311
|
+
return { data };
|
|
323312
|
+
}
|
|
323184
323313
|
var inputSchema27, outputSchema23, imageDataCache, GenerateImageTool;
|
|
323185
323314
|
var init_GenerateImageTool = __esm(() => {
|
|
323186
323315
|
init_Tool();
|
|
@@ -323238,7 +323367,7 @@ var init_GenerateImageTool = __esm(() => {
|
|
|
323238
323367
|
async checkPermissions(_input, _context) {
|
|
323239
323368
|
return {
|
|
323240
323369
|
behavior: "ask",
|
|
323241
|
-
message: "localclawd wants to generate an image via ComfyUI and save it to
|
|
323370
|
+
message: "localclawd wants to generate an image via ComfyUI and save it to .localclawd/image-pipeline/generated/."
|
|
323242
323371
|
};
|
|
323243
323372
|
},
|
|
323244
323373
|
async prompt() {
|
|
@@ -323248,115 +323377,14 @@ var init_GenerateImageTool = __esm(() => {
|
|
|
323248
323377
|
renderToolUseErrorMessage: renderToolUseErrorMessage11,
|
|
323249
323378
|
renderToolResultMessage: renderToolResultMessage20,
|
|
323250
323379
|
async call(input, { abortController }) {
|
|
323251
|
-
const projectRoot = getCwd();
|
|
323252
|
-
const config = await loadConfig(projectRoot);
|
|
323253
|
-
const configuredUrl = config?.backendUrl ?? DEFAULT_COMFYUI_URL;
|
|
323254
|
-
let backendUrl = DEFAULT_COMFYUI_URL;
|
|
323255
|
-
if (!await detectComfyUI(DEFAULT_COMFYUI_URL)) {
|
|
323256
|
-
if (configuredUrl !== DEFAULT_COMFYUI_URL && await detectComfyUI(configuredUrl)) {
|
|
323257
|
-
backendUrl = configuredUrl;
|
|
323258
|
-
} else {
|
|
323259
|
-
return {
|
|
323260
|
-
data: {
|
|
323261
|
-
path: "",
|
|
323262
|
-
filename: "",
|
|
323263
|
-
promptId: "",
|
|
323264
|
-
seed: 0,
|
|
323265
|
-
backend: configuredUrl,
|
|
323266
|
-
error: `ComfyUI not reachable at ${DEFAULT_COMFYUI_URL}${configuredUrl !== DEFAULT_COMFYUI_URL ? ` or ${configuredUrl}` : ""}. Start ComfyUI or run /image-pipeline config <url>.`
|
|
323267
|
-
}
|
|
323268
|
-
};
|
|
323269
|
-
}
|
|
323270
|
-
}
|
|
323271
|
-
if (abortController.signal.aborted) {
|
|
323272
|
-
return { data: { path: "", filename: "", promptId: "", seed: 0, backend: backendUrl, error: "Aborted" } };
|
|
323273
|
-
}
|
|
323274
|
-
const seed = input.seed ?? Math.floor(Math.random() * 2 ** 32);
|
|
323275
|
-
const negativePrompt = input.negative_prompt ?? "blurry, low quality, watermark, deformed";
|
|
323276
|
-
const workflowName = input.workflow ?? config?.defaultWorkflow;
|
|
323277
|
-
const workflowBase = workflowName ? await loadWorkflow(projectRoot, workflowName) : null;
|
|
323278
|
-
const usingBuiltIn = !workflowBase;
|
|
323279
|
-
const injectParams = usingBuiltIn ? {
|
|
323280
|
-
seed,
|
|
323281
|
-
model: input.model ?? config?.defaultModel ?? "v1-5-pruned-emaonly.safetensors",
|
|
323282
|
-
width: input.width ?? config?.defaultWidth ?? 512,
|
|
323283
|
-
height: input.height ?? config?.defaultHeight ?? 512,
|
|
323284
|
-
steps: input.steps ?? config?.defaultSteps ?? 20,
|
|
323285
|
-
cfg: input.cfg ?? config?.defaultCfg ?? 7
|
|
323286
|
-
} : {
|
|
323287
|
-
seed,
|
|
323288
|
-
...input.model && { model: input.model },
|
|
323289
|
-
...input.width && { width: input.width },
|
|
323290
|
-
...input.height && { height: input.height },
|
|
323291
|
-
...input.steps && { steps: input.steps },
|
|
323292
|
-
...input.cfg && { cfg: input.cfg }
|
|
323293
|
-
};
|
|
323294
|
-
const workflow = injectPrompt(workflowBase ?? DEFAULT_WORKFLOW, input.prompt, negativePrompt, injectParams);
|
|
323295
|
-
let queued;
|
|
323296
323380
|
try {
|
|
323297
|
-
|
|
323381
|
+
return await callInner(input, abortController);
|
|
323298
323382
|
} catch (e) {
|
|
323383
|
+
const msg = e instanceof Error ? e.message || e.constructor.name : e != null ? String(e) : "unknown error";
|
|
323299
323384
|
return {
|
|
323300
|
-
data: { path: "", filename: "", promptId: "", seed, backend:
|
|
323301
|
-
};
|
|
323302
|
-
}
|
|
323303
|
-
if (abortController.signal.aborted) {
|
|
323304
|
-
return { data: { path: "", filename: "", promptId: queued.prompt_id, seed, backend: backendUrl, error: "Aborted" } };
|
|
323305
|
-
}
|
|
323306
|
-
const result = await pollForCompletion(backendUrl, queued.prompt_id);
|
|
323307
|
-
if (!result) {
|
|
323308
|
-
return {
|
|
323309
|
-
data: {
|
|
323310
|
-
path: "",
|
|
323311
|
-
filename: "",
|
|
323312
|
-
promptId: queued.prompt_id,
|
|
323313
|
-
seed,
|
|
323314
|
-
backend: backendUrl,
|
|
323315
|
-
error: `Timed out. Check ComfyUI: ${backendUrl}/history/${queued.prompt_id}`
|
|
323316
|
-
}
|
|
323317
|
-
};
|
|
323318
|
-
}
|
|
323319
|
-
const comfyImages = extractOutputImages(result);
|
|
323320
|
-
const firstImage = comfyImages[0];
|
|
323321
|
-
if (!firstImage) {
|
|
323322
|
-
return {
|
|
323323
|
-
data: { path: "", filename: "", promptId: queued.prompt_id, seed, backend: backendUrl, error: "Job completed but no output images found" }
|
|
323385
|
+
data: { path: "", filename: "", promptId: "", seed: 0, backend: DEFAULT_COMFYUI_URL, error: `GenerateImage failed: ${msg}` }
|
|
323324
323386
|
};
|
|
323325
323387
|
}
|
|
323326
|
-
const allImageMeta = Object.values(result.outputs).flatMap((o) => o.images ?? []);
|
|
323327
|
-
const imgMeta = allImageMeta.find((img) => img.filename === firstImage);
|
|
323328
|
-
const subfolder = imgMeta?.subfolder ?? "";
|
|
323329
|
-
const imgType = imgMeta?.type ?? "output";
|
|
323330
|
-
let rawBytes = null;
|
|
323331
|
-
try {
|
|
323332
|
-
const params = new URLSearchParams({ filename: firstImage, subfolder, type: imgType });
|
|
323333
|
-
const res = await fetch(`${backendUrl}/view?${params}`);
|
|
323334
|
-
if (res.ok) {
|
|
323335
|
-
rawBytes = Buffer.from(await res.arrayBuffer());
|
|
323336
|
-
}
|
|
323337
|
-
} catch {}
|
|
323338
|
-
const outputDir = join80(getCwd(), ".localclawd", "image-pipeline", "generated").replace(/\\/g, "/");
|
|
323339
|
-
await mkdir20(outputDir, { recursive: true });
|
|
323340
|
-
const outName = `${timestamp()}_${slugify(input.prompt)}.png`;
|
|
323341
|
-
const savedPath = join80(outputDir, outName).replace(/\\/g, "/");
|
|
323342
|
-
if (rawBytes) {
|
|
323343
|
-
await writeFile20(savedPath, rawBytes);
|
|
323344
|
-
}
|
|
323345
|
-
const data = {
|
|
323346
|
-
path: savedPath,
|
|
323347
|
-
filename: outName,
|
|
323348
|
-
promptId: queued.prompt_id,
|
|
323349
|
-
seed,
|
|
323350
|
-
backend: backendUrl
|
|
323351
|
-
};
|
|
323352
|
-
const imageBytes = rawBytes ?? await readFile27(savedPath).catch(() => null);
|
|
323353
|
-
if (imageBytes && imageBytes.length > 0) {
|
|
323354
|
-
imageDataCache.set(data, {
|
|
323355
|
-
base64: imageBytes.toString("base64"),
|
|
323356
|
-
mediaType: "image/png"
|
|
323357
|
-
});
|
|
323358
|
-
}
|
|
323359
|
-
return { data };
|
|
323360
323388
|
},
|
|
323361
323389
|
mapToolResultToToolResultBlockParam(output, toolUseID) {
|
|
323362
323390
|
if (output.error) {
|
|
@@ -323368,10 +323396,20 @@ var init_GenerateImageTool = __esm(() => {
|
|
|
323368
323396
|
};
|
|
323369
323397
|
}
|
|
323370
323398
|
const imgData = imageDataCache.get(output);
|
|
323399
|
+
const reviewNote = imgData ? [
|
|
323400
|
+
"Review the image above for artifacts before accepting:",
|
|
323401
|
+
" • Edge/corner artifacts → retry with cfg=1 (flow models require cfg=1)",
|
|
323402
|
+
" • Halo/ring artifacts → retry with fewer steps (steps=4 for turbo)",
|
|
323403
|
+
" • Wrong content/style → rephrase the prompt",
|
|
323404
|
+
"If satisfied, move the file to the desired location using Bash mv or PowerShell Move-Item.",
|
|
323405
|
+
` mv "${output.path}" <destination>`
|
|
323406
|
+
].join(`
|
|
323407
|
+
`) : `Vision unavailable — inspect manually at: ${output.path}
|
|
323408
|
+
Move with: mv "${output.path}" <destination>`;
|
|
323371
323409
|
const textSummary = [
|
|
323372
323410
|
`Image saved: ${output.path}`,
|
|
323373
323411
|
`Seed: ${output.seed} · Prompt ID: ${output.promptId}`,
|
|
323374
|
-
|
|
323412
|
+
reviewNote
|
|
323375
323413
|
].join(`
|
|
323376
323414
|
`);
|
|
323377
323415
|
if (imgData) {
|
|
@@ -331835,7 +331873,7 @@ function getAnthropicEnvMetadata() {
|
|
|
331835
331873
|
function getBuildAgeMinutes() {
|
|
331836
331874
|
if (false)
|
|
331837
331875
|
;
|
|
331838
|
-
const buildTime = new Date("2026-05-07T20:
|
|
331876
|
+
const buildTime = new Date("2026-05-07T20:29:52.644Z").getTime();
|
|
331839
331877
|
if (isNaN(buildTime))
|
|
331840
331878
|
return;
|
|
331841
331879
|
return Math.floor((Date.now() - buildTime) / 60000);
|
|
@@ -342139,7 +342177,7 @@ function createImageResponse(buffer, mediaType, originalSize, dimensions) {
|
|
|
342139
342177
|
}
|
|
342140
342178
|
};
|
|
342141
342179
|
}
|
|
342142
|
-
async function
|
|
342180
|
+
async function callInner2(file_path, fullFilePath, resolvedFilePath, ext, offset, limit, pages, maxSizeBytes, maxTokens, readFileState, context5, messageId) {
|
|
342143
342181
|
if (ext === "ipynb") {
|
|
342144
342182
|
const cells = await readNotebook(resolvedFilePath);
|
|
342145
342183
|
const cellsJson = jsonStringify(cells);
|
|
@@ -342679,14 +342717,14 @@ var init_FileReadTool = __esm(() => {
|
|
|
342679
342717
|
activateConditionalSkillsForPaths([fullFilePath], cwd2);
|
|
342680
342718
|
}
|
|
342681
342719
|
try {
|
|
342682
|
-
return await
|
|
342720
|
+
return await callInner2(file_path, fullFilePath, fullFilePath, ext, offset, limit, pages, maxSizeBytes, maxTokens, readFileState, context5, parentMessage?.message.id);
|
|
342683
342721
|
} catch (error5) {
|
|
342684
342722
|
const code = getErrnoCode(error5);
|
|
342685
342723
|
if (code === "ENOENT") {
|
|
342686
342724
|
const altPath = getAlternateScreenshotPath(fullFilePath);
|
|
342687
342725
|
if (altPath) {
|
|
342688
342726
|
try {
|
|
342689
|
-
return await
|
|
342727
|
+
return await callInner2(file_path, fullFilePath, altPath, ext, offset, limit, pages, maxSizeBytes, maxTokens, readFileState, context5, parentMessage?.message.id);
|
|
342690
342728
|
} catch (altError) {
|
|
342691
342729
|
if (!isENOENT(altError)) {
|
|
342692
342730
|
throw altError;
|
|
@@ -360667,7 +360705,7 @@ function Feedback({
|
|
|
360667
360705
|
platform: env3.platform,
|
|
360668
360706
|
gitRepo: envInfo.isGit,
|
|
360669
360707
|
terminal: env3.terminal,
|
|
360670
|
-
version: "
|
|
360708
|
+
version: "2.0.1",
|
|
360671
360709
|
transcript: normalizeMessagesForAPI(messages),
|
|
360672
360710
|
errors: sanitizedErrors,
|
|
360673
360711
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -360859,7 +360897,7 @@ function Feedback({
|
|
|
360859
360897
|
", ",
|
|
360860
360898
|
env3.terminal,
|
|
360861
360899
|
", v",
|
|
360862
|
-
"
|
|
360900
|
+
"2.0.1"
|
|
360863
360901
|
]
|
|
360864
360902
|
}, undefined, true, undefined, this)
|
|
360865
360903
|
]
|
|
@@ -360965,7 +361003,7 @@ ${sanitizedDescription}
|
|
|
360965
361003
|
` + `**Environment Info**
|
|
360966
361004
|
` + `- Platform: ${env3.platform}
|
|
360967
361005
|
` + `- Terminal: ${env3.terminal}
|
|
360968
|
-
` + `- Version: ${"
|
|
361006
|
+
` + `- Version: ${"2.0.1"}
|
|
360969
361007
|
` + `- Feedback ID: ${feedbackId}
|
|
360970
361008
|
` + `
|
|
360971
361009
|
**Errors**
|
|
@@ -363593,7 +363631,7 @@ function buildPrimarySection() {
|
|
|
363593
363631
|
}, undefined, false, undefined, this);
|
|
363594
363632
|
return [{
|
|
363595
363633
|
label: "Version",
|
|
363596
|
-
value: "
|
|
363634
|
+
value: "2.0.1"
|
|
363597
363635
|
}, {
|
|
363598
363636
|
label: "Session name",
|
|
363599
363637
|
value: nameValue
|
|
@@ -368274,7 +368312,7 @@ function Config({
|
|
|
368274
368312
|
}
|
|
368275
368313
|
}, undefined, false, undefined, this)
|
|
368276
368314
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
|
|
368277
|
-
currentVersion: "
|
|
368315
|
+
currentVersion: "2.0.1",
|
|
368278
368316
|
onChoice: (choice) => {
|
|
368279
368317
|
setShowSubmenu(null);
|
|
368280
368318
|
setTabsHidden(false);
|
|
@@ -368286,7 +368324,7 @@ function Config({
|
|
|
368286
368324
|
autoUpdatesChannel: "stable"
|
|
368287
368325
|
};
|
|
368288
368326
|
if (choice === "stay") {
|
|
368289
|
-
newSettings.minimumVersion = "
|
|
368327
|
+
newSettings.minimumVersion = "2.0.1";
|
|
368290
368328
|
}
|
|
368291
368329
|
updateSettingsForSource("userSettings", newSettings);
|
|
368292
368330
|
setSettingsData((prev_27) => ({
|
|
@@ -377484,7 +377522,7 @@ function safeSend(fn) {
|
|
|
377484
377522
|
logKgCrash(e, "send-sync");
|
|
377485
377523
|
}
|
|
377486
377524
|
}
|
|
377487
|
-
async function
|
|
377525
|
+
async function callInner3(onDone, context7, args) {
|
|
377488
377526
|
const rawArgs = args?.trim() ?? "";
|
|
377489
377527
|
const { extractChain: extractChain2 } = await Promise.resolve().then(() => (init_commandChaining(), exports_commandChaining));
|
|
377490
377528
|
const { ownArgs: chainedArgs } = extractChain2(rawArgs);
|
|
@@ -377597,7 +377635,7 @@ Round ${finalRound} · stopped via /stop`;
|
|
|
377597
377635
|
}
|
|
377598
377636
|
var React58, jsx_dev_runtime196, sessionRound = 0, sessionFocus = "", sessionOriginalMode = "default", sessionSelfDirective = "", call22 = async (onDone, context7, args) => {
|
|
377599
377637
|
try {
|
|
377600
|
-
return await
|
|
377638
|
+
return await callInner3(onDone, context7, args);
|
|
377601
377639
|
} catch (error5) {
|
|
377602
377640
|
logKgCrash(error5, "call");
|
|
377603
377641
|
const msg = error5 instanceof Error ? error5.message : String(error5);
|
|
@@ -385969,7 +386007,7 @@ function Help(t0) {
|
|
|
385969
386007
|
let t6;
|
|
385970
386008
|
if ($2[31] !== tabs) {
|
|
385971
386009
|
t6 = /* @__PURE__ */ jsx_dev_runtime221.jsxDEV(Tabs, {
|
|
385972
|
-
title: `localclawd v${"
|
|
386010
|
+
title: `localclawd v${"2.0.1"}`,
|
|
385973
386011
|
color: "professionalBlue",
|
|
385974
386012
|
defaultTab: "general",
|
|
385975
386013
|
children: tabs
|
|
@@ -403231,7 +403269,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
|
|
|
403231
403269
|
}
|
|
403232
403270
|
return [];
|
|
403233
403271
|
}
|
|
403234
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "
|
|
403272
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "2.0.1") {
|
|
403235
403273
|
if (process.env.USER_TYPE === "ant") {
|
|
403236
403274
|
const changelog = MACRO.VERSION_CHANGELOG;
|
|
403237
403275
|
if (changelog) {
|
|
@@ -403258,7 +403296,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.9") {
|
|
|
403258
403296
|
releaseNotes
|
|
403259
403297
|
};
|
|
403260
403298
|
}
|
|
403261
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "
|
|
403299
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "2.0.1") {
|
|
403262
403300
|
if (process.env.USER_TYPE === "ant") {
|
|
403263
403301
|
const changelog = MACRO.VERSION_CHANGELOG;
|
|
403264
403302
|
if (changelog) {
|
|
@@ -403415,7 +403453,7 @@ function getRecentActivitySync() {
|
|
|
403415
403453
|
return cachedActivity;
|
|
403416
403454
|
}
|
|
403417
403455
|
function getLogoDisplayData() {
|
|
403418
|
-
const version = process.env.DEMO_VERSION ?? "
|
|
403456
|
+
const version = process.env.DEMO_VERSION ?? "2.0.1";
|
|
403419
403457
|
const serverUrl = getDirectConnectServerUrl();
|
|
403420
403458
|
const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
|
|
403421
403459
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -404515,7 +404553,7 @@ function Logo() {
|
|
|
404515
404553
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
404516
404554
|
t2 = () => {
|
|
404517
404555
|
const currentConfig = getGlobalConfig();
|
|
404518
|
-
if (currentConfig.lastReleaseNotesSeen === "
|
|
404556
|
+
if (currentConfig.lastReleaseNotesSeen === "2.0.1") {
|
|
404519
404557
|
return;
|
|
404520
404558
|
}
|
|
404521
404559
|
saveGlobalConfig(_temp326);
|
|
@@ -405174,12 +405212,12 @@ function Logo() {
|
|
|
405174
405212
|
return t41;
|
|
405175
405213
|
}
|
|
405176
405214
|
function _temp326(current) {
|
|
405177
|
-
if (current.lastReleaseNotesSeen === "
|
|
405215
|
+
if (current.lastReleaseNotesSeen === "2.0.1") {
|
|
405178
405216
|
return current;
|
|
405179
405217
|
}
|
|
405180
405218
|
return {
|
|
405181
405219
|
...current,
|
|
405182
|
-
lastReleaseNotesSeen: "
|
|
405220
|
+
lastReleaseNotesSeen: "2.0.1"
|
|
405183
405221
|
};
|
|
405184
405222
|
}
|
|
405185
405223
|
function _temp241(s_0) {
|
|
@@ -435658,7 +435696,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
|
|
|
435658
435696
|
smapsRollup,
|
|
435659
435697
|
platform: process.platform,
|
|
435660
435698
|
nodeVersion: process.version,
|
|
435661
|
-
ccVersion: "
|
|
435699
|
+
ccVersion: "2.0.1"
|
|
435662
435700
|
};
|
|
435663
435701
|
}
|
|
435664
435702
|
async function performHeapDump(trigger = "manual", dumpNumber = 0) {
|
|
@@ -436243,7 +436281,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
436243
436281
|
var call88 = async () => {
|
|
436244
436282
|
return {
|
|
436245
436283
|
type: "text",
|
|
436246
|
-
value: `${"
|
|
436284
|
+
value: `${"2.0.1"} (built ${"2026-05-07T20:29:52.644Z"})`
|
|
436247
436285
|
};
|
|
436248
436286
|
}, version, version_default;
|
|
436249
436287
|
var init_version = __esm(() => {
|
|
@@ -444187,7 +444225,7 @@ function generateHtmlReport(data, insights) {
|
|
|
444187
444225
|
</html>`;
|
|
444188
444226
|
}
|
|
444189
444227
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
444190
|
-
const version2 = typeof MACRO !== "undefined" ? "
|
|
444228
|
+
const version2 = typeof MACRO !== "undefined" ? "2.0.1" : "unknown";
|
|
444191
444229
|
const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
|
|
444192
444230
|
const facets_summary = {
|
|
444193
444231
|
total: facets.size,
|
|
@@ -448390,7 +448428,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
448390
448428
|
init_settings2();
|
|
448391
448429
|
init_slowOperations();
|
|
448392
448430
|
init_uuid();
|
|
448393
|
-
VERSION6 = typeof MACRO !== "undefined" ? "
|
|
448431
|
+
VERSION6 = typeof MACRO !== "undefined" ? "2.0.1" : "unknown";
|
|
448394
448432
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
448395
448433
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
448396
448434
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -449591,7 +449629,7 @@ var init_filesystem = __esm(() => {
|
|
|
449591
449629
|
});
|
|
449592
449630
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
449593
449631
|
const nonce = randomBytes20(16).toString("hex");
|
|
449594
|
-
return join151(getClaudeTempDir(), "bundled-skills", "
|
|
449632
|
+
return join151(getClaudeTempDir(), "bundled-skills", "2.0.1", nonce);
|
|
449595
449633
|
});
|
|
449596
449634
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
449597
449635
|
});
|
|
@@ -458828,7 +458866,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
458828
458866
|
slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
|
|
458829
458867
|
apiKeySource: getAnthropicApiKeyWithSource().source,
|
|
458830
458868
|
betas: getSdkBetas(),
|
|
458831
|
-
claude_code_version: "
|
|
458869
|
+
claude_code_version: "2.0.1",
|
|
458832
458870
|
output_style: outputStyle2,
|
|
458833
458871
|
agents: inputs.agents.map((agent) => agent.agentType),
|
|
458834
458872
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
|
|
@@ -472985,7 +473023,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
472985
473023
|
function getSemverPart(version2) {
|
|
472986
473024
|
return `${import_semver10.major(version2, { loose: true })}.${import_semver10.minor(version2, { loose: true })}.${import_semver10.patch(version2, { loose: true })}`;
|
|
472987
473025
|
}
|
|
472988
|
-
function useUpdateNotification(updatedVersion, initialVersion = "
|
|
473026
|
+
function useUpdateNotification(updatedVersion, initialVersion = "2.0.1") {
|
|
472989
473027
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react214.useState(() => getSemverPart(initialVersion));
|
|
472990
473028
|
if (!updatedVersion) {
|
|
472991
473029
|
return null;
|
|
@@ -473025,7 +473063,7 @@ function AutoUpdater({
|
|
|
473025
473063
|
return;
|
|
473026
473064
|
}
|
|
473027
473065
|
if (false) {}
|
|
473028
|
-
const currentVersion = "
|
|
473066
|
+
const currentVersion = "2.0.1";
|
|
473029
473067
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
473030
473068
|
let latestVersion = await getLatestVersion(channel);
|
|
473031
473069
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -473236,12 +473274,12 @@ function NativeAutoUpdater({
|
|
|
473236
473274
|
logEvent("tengu_native_auto_updater_start", {});
|
|
473237
473275
|
try {
|
|
473238
473276
|
const maxVersion = await getMaxVersion();
|
|
473239
|
-
if (maxVersion && gt("
|
|
473277
|
+
if (maxVersion && gt("2.0.1", maxVersion)) {
|
|
473240
473278
|
const msg = await getMaxVersionMessage();
|
|
473241
473279
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
473242
473280
|
}
|
|
473243
473281
|
const result = await installLatest(channel);
|
|
473244
|
-
const currentVersion = "
|
|
473282
|
+
const currentVersion = "2.0.1";
|
|
473245
473283
|
const latencyMs = Date.now() - startTime;
|
|
473246
473284
|
if (result.lockFailed) {
|
|
473247
473285
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -473376,17 +473414,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
473376
473414
|
const maxVersion = await getMaxVersion();
|
|
473377
473415
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
473378
473416
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
473379
|
-
if (gte("
|
|
473380
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"
|
|
473417
|
+
if (gte("2.0.1", maxVersion)) {
|
|
473418
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"2.0.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
473381
473419
|
setUpdateAvailable(false);
|
|
473382
473420
|
return;
|
|
473383
473421
|
}
|
|
473384
473422
|
latest = maxVersion;
|
|
473385
473423
|
}
|
|
473386
|
-
const hasUpdate = latest && !gte("
|
|
473424
|
+
const hasUpdate = latest && !gte("2.0.1", latest) && !shouldSkipVersion(latest);
|
|
473387
473425
|
setUpdateAvailable(!!hasUpdate);
|
|
473388
473426
|
if (hasUpdate) {
|
|
473389
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"
|
|
473427
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"2.0.1"} -> ${latest}`);
|
|
473390
473428
|
}
|
|
473391
473429
|
};
|
|
473392
473430
|
$2[0] = t1;
|
|
@@ -473420,7 +473458,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
473420
473458
|
wrap: "truncate",
|
|
473421
473459
|
children: [
|
|
473422
473460
|
"currentVersion: ",
|
|
473423
|
-
"
|
|
473461
|
+
"2.0.1"
|
|
473424
473462
|
]
|
|
473425
473463
|
}, undefined, true, undefined, this);
|
|
473426
473464
|
$2[3] = verbose;
|
|
@@ -480980,7 +481018,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
480980
481018
|
project_dir: getOriginalCwd(),
|
|
480981
481019
|
added_dirs: addedDirs
|
|
480982
481020
|
},
|
|
480983
|
-
version: "
|
|
481021
|
+
version: "2.0.1",
|
|
480984
481022
|
output_style: {
|
|
480985
481023
|
name: outputStyleName
|
|
480986
481024
|
},
|
|
@@ -492552,7 +492590,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
|
|
|
492552
492590
|
} catch {}
|
|
492553
492591
|
const data = {
|
|
492554
492592
|
trigger,
|
|
492555
|
-
version: "
|
|
492593
|
+
version: "2.0.1",
|
|
492556
492594
|
platform: process.platform,
|
|
492557
492595
|
transcript,
|
|
492558
492596
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -509461,7 +509499,7 @@ function appendToLog(path17, message) {
|
|
|
509461
509499
|
cwd: getFsImplementation().cwd(),
|
|
509462
509500
|
userType: process.env.USER_TYPE,
|
|
509463
509501
|
sessionId: getSessionId(),
|
|
509464
|
-
version: "
|
|
509502
|
+
version: "2.0.1"
|
|
509465
509503
|
};
|
|
509466
509504
|
getLogWriter(path17).write(messageWithTimestamp);
|
|
509467
509505
|
}
|
|
@@ -513485,8 +513523,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
513485
513523
|
}
|
|
513486
513524
|
async function checkEnvLessBridgeMinVersion() {
|
|
513487
513525
|
const cfg = await getEnvLessBridgeConfig();
|
|
513488
|
-
if (cfg.min_version && lt("
|
|
513489
|
-
return `Your version of localclawd (${"
|
|
513526
|
+
if (cfg.min_version && lt("2.0.1", cfg.min_version)) {
|
|
513527
|
+
return `Your version of localclawd (${"2.0.1"}) is too old for Remote Control.
|
|
513490
513528
|
Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
|
|
513491
513529
|
}
|
|
513492
513530
|
return null;
|
|
@@ -513958,7 +513996,7 @@ async function initBridgeCore(params) {
|
|
|
513958
513996
|
const rawApi = createBridgeApiClient({
|
|
513959
513997
|
baseUrl,
|
|
513960
513998
|
getAccessToken,
|
|
513961
|
-
runnerVersion: "
|
|
513999
|
+
runnerVersion: "2.0.1",
|
|
513962
514000
|
onDebug: logForDebugging,
|
|
513963
514001
|
onAuth401,
|
|
513964
514002
|
getTrustedDeviceToken
|
|
@@ -519677,7 +519715,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
|
|
|
519677
519715
|
setCwd(cwd3);
|
|
519678
519716
|
const server = new Server({
|
|
519679
519717
|
name: "claude/tengu",
|
|
519680
|
-
version: "
|
|
519718
|
+
version: "2.0.1"
|
|
519681
519719
|
}, {
|
|
519682
519720
|
capabilities: {
|
|
519683
519721
|
tools: {}
|
|
@@ -520758,7 +520796,7 @@ function WelcomeLogo() {
|
|
|
520758
520796
|
dimColor: true,
|
|
520759
520797
|
children: [
|
|
520760
520798
|
"v",
|
|
520761
|
-
"
|
|
520799
|
+
"2.0.1"
|
|
520762
520800
|
]
|
|
520763
520801
|
}, undefined, true, undefined, this)
|
|
520764
520802
|
]
|
|
@@ -520949,7 +520987,7 @@ __export(exports_update, {
|
|
|
520949
520987
|
});
|
|
520950
520988
|
async function update() {
|
|
520951
520989
|
logEvent("tengu_update_check", {});
|
|
520952
|
-
writeToStdout(`Current version: ${"
|
|
520990
|
+
writeToStdout(`Current version: ${"2.0.1"}
|
|
520953
520991
|
`);
|
|
520954
520992
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
520955
520993
|
writeToStdout(`Checking for updates to ${channel} version...
|
|
@@ -521024,8 +521062,8 @@ async function update() {
|
|
|
521024
521062
|
writeToStdout(`localclawd is managed by Homebrew.
|
|
521025
521063
|
`);
|
|
521026
521064
|
const latest = await getLatestVersion(channel);
|
|
521027
|
-
if (latest && !gte("
|
|
521028
|
-
writeToStdout(`Update available: ${"
|
|
521065
|
+
if (latest && !gte("2.0.1", latest)) {
|
|
521066
|
+
writeToStdout(`Update available: ${"2.0.1"} → ${latest}
|
|
521029
521067
|
`);
|
|
521030
521068
|
writeToStdout(`
|
|
521031
521069
|
`);
|
|
@@ -521041,8 +521079,8 @@ async function update() {
|
|
|
521041
521079
|
writeToStdout(`localclawd is managed by winget.
|
|
521042
521080
|
`);
|
|
521043
521081
|
const latest = await getLatestVersion(channel);
|
|
521044
|
-
if (latest && !gte("
|
|
521045
|
-
writeToStdout(`Update available: ${"
|
|
521082
|
+
if (latest && !gte("2.0.1", latest)) {
|
|
521083
|
+
writeToStdout(`Update available: ${"2.0.1"} → ${latest}
|
|
521046
521084
|
`);
|
|
521047
521085
|
writeToStdout(`
|
|
521048
521086
|
`);
|
|
@@ -521056,8 +521094,8 @@ async function update() {
|
|
|
521056
521094
|
writeToStdout(`localclawd is managed by apk.
|
|
521057
521095
|
`);
|
|
521058
521096
|
const latest = await getLatestVersion(channel);
|
|
521059
|
-
if (latest && !gte("
|
|
521060
|
-
writeToStdout(`Update available: ${"
|
|
521097
|
+
if (latest && !gte("2.0.1", latest)) {
|
|
521098
|
+
writeToStdout(`Update available: ${"2.0.1"} → ${latest}
|
|
521061
521099
|
`);
|
|
521062
521100
|
writeToStdout(`
|
|
521063
521101
|
`);
|
|
@@ -521122,11 +521160,11 @@ async function update() {
|
|
|
521122
521160
|
`);
|
|
521123
521161
|
await gracefulShutdown(1);
|
|
521124
521162
|
}
|
|
521125
|
-
if (result.latestVersion === "
|
|
521126
|
-
writeToStdout(source_default.green(`localclawd is up to date (${"
|
|
521163
|
+
if (result.latestVersion === "2.0.1") {
|
|
521164
|
+
writeToStdout(source_default.green(`localclawd is up to date (${"2.0.1"})`) + `
|
|
521127
521165
|
`);
|
|
521128
521166
|
} else {
|
|
521129
|
-
writeToStdout(source_default.green(`Successfully updated from ${"
|
|
521167
|
+
writeToStdout(source_default.green(`Successfully updated from ${"2.0.1"} to version ${result.latestVersion}`) + `
|
|
521130
521168
|
`);
|
|
521131
521169
|
await regenerateCompletionCache();
|
|
521132
521170
|
}
|
|
@@ -521186,12 +521224,12 @@ async function update() {
|
|
|
521186
521224
|
`);
|
|
521187
521225
|
await gracefulShutdown(1);
|
|
521188
521226
|
}
|
|
521189
|
-
if (latestVersion === "
|
|
521190
|
-
writeToStdout(source_default.green(`localclawd is up to date (${"
|
|
521227
|
+
if (latestVersion === "2.0.1") {
|
|
521228
|
+
writeToStdout(source_default.green(`localclawd is up to date (${"2.0.1"})`) + `
|
|
521191
521229
|
`);
|
|
521192
521230
|
await gracefulShutdown(0);
|
|
521193
521231
|
}
|
|
521194
|
-
writeToStdout(`New version available: ${latestVersion} (current: ${"
|
|
521232
|
+
writeToStdout(`New version available: ${latestVersion} (current: ${"2.0.1"})
|
|
521195
521233
|
`);
|
|
521196
521234
|
writeToStdout(`Installing update...
|
|
521197
521235
|
`);
|
|
@@ -521236,7 +521274,7 @@ async function update() {
|
|
|
521236
521274
|
logForDebugging(`update: Installation status: ${status2}`);
|
|
521237
521275
|
switch (status2) {
|
|
521238
521276
|
case "success":
|
|
521239
|
-
writeToStdout(source_default.green(`Successfully updated from ${"
|
|
521277
|
+
writeToStdout(source_default.green(`Successfully updated from ${"2.0.1"} to version ${latestVersion}`) + `
|
|
521240
521278
|
`);
|
|
521241
521279
|
await regenerateCompletionCache();
|
|
521242
521280
|
break;
|
|
@@ -522478,7 +522516,7 @@ Run with --debug for more details.
|
|
|
522478
522516
|
}
|
|
522479
522517
|
}
|
|
522480
522518
|
logForDiagnosticsNoPII("info", "started", {
|
|
522481
|
-
version: "
|
|
522519
|
+
version: "2.0.1",
|
|
522482
522520
|
is_native_binary: isInBundledMode()
|
|
522483
522521
|
});
|
|
522484
522522
|
registerCleanup(async () => {
|
|
@@ -523262,7 +523300,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
523262
523300
|
pendingHookMessages
|
|
523263
523301
|
}, renderAndRun);
|
|
523264
523302
|
}
|
|
523265
|
-
}).version("
|
|
523303
|
+
}).version("2.0.1 (localclawd)", "-v, --version", "Output the version number");
|
|
523266
523304
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
523267
523305
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
523268
523306
|
if (canUserConfigureAdvisor()) {
|
|
@@ -523776,7 +523814,7 @@ if (false) {}
|
|
|
523776
523814
|
async function main2() {
|
|
523777
523815
|
const args = process.argv.slice(2);
|
|
523778
523816
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
523779
|
-
console.log(`${"
|
|
523817
|
+
console.log(`${"2.0.1"} (localclawd)`);
|
|
523780
523818
|
return;
|
|
523781
523819
|
}
|
|
523782
523820
|
const {
|
|
@@ -523867,4 +523905,4 @@ localclawd crashed: ${msg}
|
|
|
523867
523905
|
process.exit(1);
|
|
523868
523906
|
});
|
|
523869
523907
|
|
|
523870
|
-
//# debugId=
|
|
523908
|
+
//# debugId=E7F35C77473C10C264756E2164756E21
|