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.
Files changed (2) hide show
  1. package/dist/cli.mjs +240 -202
  2. 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/${"1.9.9"}`;
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/${"1.9.9"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
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/${"1.9.9"}${suffix}`;
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 = `${"1.9.9"}.${fingerprint}`;
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 = "1.9.9".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
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: "1.9.9",
147072
+ version: "2.0.1",
147073
147073
  versionBase: getVersionBase(),
147074
- buildTime: "2026-05-07T20:02:04.277Z",
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"] = "1.9.9";
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 "1.9.9";
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: "1.9.9",
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: "1.9.9",
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, "1.9.9");
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, "1.9.9");
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: "1.9.9",
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", "1.9.9");
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]: "1.9.9"
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", "1.9.9");
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", "1.9.9");
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", "1.9.9");
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" ? "1.9.9" : "unknown";
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("1.9.9", maxVersion)) {
286626
- logForDebugging(`Native installer: current version ${"1.9.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
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 === "1.9.9" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
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
- - .localclawd/image-pipeline/generated/ when the pipeline is scaffolded (run /image-pipeline setup)
323120
- - ~/generatedimages/ otherwise
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 does not match the description, has quality issues (artifacts, wrong style, wrong subject, blurry), or clearly fails call GenerateImage again.
323130
- 3. Refine: add missing details, fix style keywords, adjust composition language. Do not simply repeat the same prompt.
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. Show the user the final saved path and a brief assessment of what changed.
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 (see /image-tips for full guide):
323135
- - Corner / edge artifacts → wrong cfg for model type. Flow models (z_image_turbo, AuraFlow, Lumina2): cfg MUST be 1.0. Retry with cfg=1.
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, or wrong sampler. Increase steps by +4.
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 → use multiples of 64. Flow models need 1024×1024.
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: ${error5.message}`
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: output.path ? `Saved: ${output.path}` : output.error ?? "Generation failed"
323164
- }, undefined, false, undefined, this);
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 ~/generatedimages/."
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
- queued = await queuePrompt(backendUrl, workflow);
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: backendUrl, error: `Queue failed: ${String(e)}` }
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
- imgData ? "Review the image above. If it does not match the description or has quality issues, call GenerateImage again with an improved prompt (up to 3 iterations total)." : `Image saved to ${output.path} — vision not available for inline review.`
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:02:04.277Z").getTime();
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 callInner(file_path, fullFilePath, resolvedFilePath, ext, offset, limit, pages, maxSizeBytes, maxTokens, readFileState, context5, messageId) {
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 callInner(file_path, fullFilePath, fullFilePath, ext, offset, limit, pages, maxSizeBytes, maxTokens, readFileState, context5, parentMessage?.message.id);
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 callInner(file_path, fullFilePath, altPath, ext, offset, limit, pages, maxSizeBytes, maxTokens, readFileState, context5, parentMessage?.message.id);
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: "1.9.9",
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
- "1.9.9"
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: ${"1.9.9"}
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: "1.9.9"
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: "1.9.9",
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 = "1.9.9";
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 callInner2(onDone, context7, args) {
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 callInner2(onDone, context7, args);
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${"1.9.9"}`,
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 = "1.9.9") {
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 = "1.9.9") {
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 ?? "1.9.9";
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 === "1.9.9") {
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 === "1.9.9") {
405215
+ if (current.lastReleaseNotesSeen === "2.0.1") {
405178
405216
  return current;
405179
405217
  }
405180
405218
  return {
405181
405219
  ...current,
405182
- lastReleaseNotesSeen: "1.9.9"
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: "1.9.9"
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: `${"1.9.9"} (built ${"2026-05-07T20:02:04.277Z"})`
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" ? "1.9.9" : "unknown";
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" ? "1.9.9" : "unknown";
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", "1.9.9", nonce);
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: "1.9.9",
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 = "1.9.9") {
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 = "1.9.9";
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("1.9.9", maxVersion)) {
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 = "1.9.9";
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("1.9.9", maxVersion)) {
473380
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.9.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
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("1.9.9", latest) && !shouldSkipVersion(latest);
473424
+ const hasUpdate = latest && !gte("2.0.1", latest) && !shouldSkipVersion(latest);
473387
473425
  setUpdateAvailable(!!hasUpdate);
473388
473426
  if (hasUpdate) {
473389
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.9.9"} -> ${latest}`);
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
- "1.9.9"
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: "1.9.9",
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: "1.9.9",
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: "1.9.9"
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("1.9.9", cfg.min_version)) {
513489
- return `Your version of localclawd (${"1.9.9"}) is too old for Remote Control.
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: "1.9.9",
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: "1.9.9"
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
- "1.9.9"
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: ${"1.9.9"}
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("1.9.9", latest)) {
521028
- writeToStdout(`Update available: ${"1.9.9"} → ${latest}
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("1.9.9", latest)) {
521045
- writeToStdout(`Update available: ${"1.9.9"} → ${latest}
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("1.9.9", latest)) {
521060
- writeToStdout(`Update available: ${"1.9.9"} → ${latest}
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 === "1.9.9") {
521126
- writeToStdout(source_default.green(`localclawd is up to date (${"1.9.9"})`) + `
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 ${"1.9.9"} to version ${result.latestVersion}`) + `
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 === "1.9.9") {
521190
- writeToStdout(source_default.green(`localclawd is up to date (${"1.9.9"})`) + `
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: ${"1.9.9"})
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 ${"1.9.9"} to version ${latestVersion}`) + `
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: "1.9.9",
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("1.9.9 (localclawd)", "-v, --version", "Output the version number");
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(`${"1.9.9"} (localclawd)`);
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=7C85E9F9DFBCA5CA64756E2164756E21
523908
+ //# debugId=E7F35C77473C10C264756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "localclawd",
3
- "version": "1.9.9",
3
+ "version": "2.0.1",
4
4
  "description": "Local-first coding CLI for vLLM, Ollama, and OpenAI-compatible backends.",
5
5
  "private": false,
6
6
  "type": "module",