localclawd 1.8.9 → 1.9.0

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 +147 -104
  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.8.9"}`;
87611
+ return `claude-code/${"1.9.0"}`;
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.8.9"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87633
+ return `claude-cli/${"1.9.0"} (${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.8.9"}${suffix}`;
87647
+ return `claude-code/${"1.9.0"}${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.8.9"}.${fingerprint}`;
130843
+ const version = `${"1.9.0"}.${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.8.9".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
147032
+ const match = "1.9.0".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.8.9",
147072
+ version: "1.9.0",
147073
147073
  versionBase: getVersionBase(),
147074
- buildTime: "2026-05-07T17:33:40.617Z",
147074
+ buildTime: "2026-05-07T17:47:00.138Z",
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.8.9";
179650
+ attributes["app.version"] = "1.9.0";
179651
179651
  }
179652
179652
  const oauthAccount = getOauthAccountInfo();
179653
179653
  if (oauthAccount) {
@@ -242448,7 +242448,7 @@ function getInstallationEnv() {
242448
242448
  return;
242449
242449
  }
242450
242450
  function getClaudeCodeVersion() {
242451
- return "1.8.9";
242451
+ return "1.9.0";
242452
242452
  }
242453
242453
  async function getInstalledVSCodeExtensionVersion(command) {
242454
242454
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -247722,7 +247722,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
247722
247722
  const client4 = new Client({
247723
247723
  name: "localclawd",
247724
247724
  title: "localclawd",
247725
- version: "1.8.9",
247725
+ version: "1.9.0",
247726
247726
  description: "local-first AI coding tool",
247727
247727
  websiteUrl: PRODUCT_URL
247728
247728
  }, {
@@ -248064,7 +248064,7 @@ var init_client9 = __esm(() => {
248064
248064
  const client4 = new Client({
248065
248065
  name: "localclawd",
248066
248066
  title: "localclawd",
248067
- version: "1.8.9",
248067
+ version: "1.9.0",
248068
248068
  description: "local-first AI coding tool",
248069
248069
  websiteUrl: PRODUCT_URL
248070
248070
  }, {
@@ -262466,7 +262466,7 @@ function computeFingerprint(messageText, version) {
262466
262466
  }
262467
262467
  function computeFingerprintFromMessages(messages) {
262468
262468
  const firstMessageText = extractFirstMessageText(messages);
262469
- return computeFingerprint(firstMessageText, "1.8.9");
262469
+ return computeFingerprint(firstMessageText, "1.9.0");
262470
262470
  }
262471
262471
  var FINGERPRINT_SALT = "59cf53e54c78";
262472
262472
  var init_fingerprint = () => {};
@@ -262508,7 +262508,7 @@ async function sideQuery(opts) {
262508
262508
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
262509
262509
  }
262510
262510
  const messageText = extractFirstUserMessageText(messages);
262511
- const fingerprint = computeFingerprint(messageText, "1.8.9");
262511
+ const fingerprint = computeFingerprint(messageText, "1.9.0");
262512
262512
  const attributionHeader = getAttributionHeader(fingerprint);
262513
262513
  const systemBlocks = [
262514
262514
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -283256,7 +283256,7 @@ var init_user = __esm(() => {
283256
283256
  deviceId,
283257
283257
  sessionId: getSessionId(),
283258
283258
  email: getEmail(),
283259
- appVersion: "1.8.9",
283259
+ appVersion: "1.9.0",
283260
283260
  platform: getHostPlatformForAnalytics(),
283261
283261
  organizationUuid,
283262
283262
  accountUuid,
@@ -284321,7 +284321,7 @@ async function initializeBetaTracing(resource) {
284321
284321
  });
284322
284322
  logs.setGlobalLoggerProvider(loggerProvider);
284323
284323
  setLoggerProvider(loggerProvider);
284324
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.8.9");
284324
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.0");
284325
284325
  setEventLogger(eventLogger);
284326
284326
  process.on("beforeExit", async () => {
284327
284327
  await loggerProvider?.forceFlush();
@@ -284361,7 +284361,7 @@ async function initializeTelemetry() {
284361
284361
  const platform2 = getPlatform();
284362
284362
  const baseAttributes = {
284363
284363
  [ATTR_SERVICE_NAME4]: "claude-code",
284364
- [ATTR_SERVICE_VERSION4]: "1.8.9"
284364
+ [ATTR_SERVICE_VERSION4]: "1.9.0"
284365
284365
  };
284366
284366
  if (platform2 === "wsl") {
284367
284367
  const wslVersion = getWslVersion();
@@ -284406,7 +284406,7 @@ async function initializeTelemetry() {
284406
284406
  } catch {}
284407
284407
  };
284408
284408
  registerCleanup(shutdownTelemetry2);
284409
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.8.9");
284409
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.9.0");
284410
284410
  }
284411
284411
  const meterProvider = new MeterProvider4({
284412
284412
  resource,
@@ -284426,7 +284426,7 @@ async function initializeTelemetry() {
284426
284426
  });
284427
284427
  logs.setGlobalLoggerProvider(loggerProvider);
284428
284428
  setLoggerProvider(loggerProvider);
284429
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.8.9");
284429
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.9.0");
284430
284430
  setEventLogger(eventLogger);
284431
284431
  logForDebugging("[3P telemetry] Event logger set successfully");
284432
284432
  process.on("beforeExit", async () => {
@@ -284488,7 +284488,7 @@ Current timeout: ${timeoutMs}ms
284488
284488
  }
284489
284489
  };
284490
284490
  registerCleanup(shutdownTelemetry);
284491
- return meterProvider.getMeter("com.anthropic.claude_code", "1.8.9");
284491
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.9.0");
284492
284492
  }
284493
284493
  async function flushTelemetry() {
284494
284494
  const meterProvider = getMeterProvider();
@@ -285678,7 +285678,7 @@ function detectLinuxGlobPatternWarnings() {
285678
285678
  }
285679
285679
  async function getDoctorDiagnostic() {
285680
285680
  const installationType = await getCurrentInstallationType();
285681
- const version = typeof MACRO !== "undefined" ? "1.8.9" : "unknown";
285681
+ const version = typeof MACRO !== "undefined" ? "1.9.0" : "unknown";
285682
285682
  const installationPath = await getInstallationPath();
285683
285683
  const invokedBinary = getInvokedBinary();
285684
285684
  const multipleInstallations = await detectMultipleInstallations();
@@ -286619,8 +286619,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286619
286619
  const maxVersion = await getMaxVersion();
286620
286620
  if (maxVersion && gt(version, maxVersion)) {
286621
286621
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
286622
- if (gte("1.8.9", maxVersion)) {
286623
- logForDebugging(`Native installer: current version ${"1.8.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
286622
+ if (gte("1.9.0", maxVersion)) {
286623
+ logForDebugging(`Native installer: current version ${"1.9.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
286624
286624
  logEvent("tengu_native_update_skipped_max_version", {
286625
286625
  latency_ms: Date.now() - startTime,
286626
286626
  max_version: maxVersion,
@@ -286631,7 +286631,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286631
286631
  version = maxVersion;
286632
286632
  }
286633
286633
  }
286634
- if (!forceReinstall && version === "1.8.9" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286634
+ if (!forceReinstall && version === "1.9.0" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286635
286635
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
286636
286636
  logEvent("tengu_native_update_complete", {
286637
286637
  latency_ms: Date.now() - startTime,
@@ -322925,9 +322925,22 @@ function replaceTemplatesDeep(obj, vars) {
322925
322925
  return obj;
322926
322926
  }
322927
322927
  async function loadWorkflow(projectRoot, name) {
322928
+ const wfBase = join79(projectRoot, ".localclawd", "image-pipeline", "workflows");
322928
322929
  const filename = name.endsWith(".json") ? name : `${name}.json`;
322929
322930
  try {
322930
- const data = await readFile26(join79(projectRoot, ".localclawd", "image-pipeline", "workflows", filename), "utf-8");
322931
+ const data = await readFile26(join79(wfBase, filename), "utf-8");
322932
+ return JSON.parse(data);
322933
+ } catch {}
322934
+ const all4 = await listWorkflows(projectRoot);
322935
+ const baseName = name.replace(/\.json$/, "").split(/[\\/]/).pop() ?? name;
322936
+ const match = all4.find((w2) => {
322937
+ const wBaseName = w2.replace(/\.json$/, "").split(/[\\/]/).pop() ?? "";
322938
+ return wBaseName === baseName;
322939
+ });
322940
+ if (!match)
322941
+ return null;
322942
+ try {
322943
+ const data = await readFile26(join79(wfBase, match), "utf-8");
322931
322944
  return JSON.parse(data);
322932
322945
  } catch {
322933
322946
  return null;
@@ -322951,10 +322964,6 @@ async function scaffoldProject(projectRoot) {
322951
322964
  created.push(".localclawd/image-pipeline/config.json");
322952
322965
  await writeFile19(join79(base, "prompts", "example.json"), JSON.stringify(EXAMPLE_PROMPT, null, 2), "utf-8");
322953
322966
  created.push(".localclawd/image-pipeline/prompts/example.json");
322954
- await writeFile19(join79(base, "workflows", "txt2img.json"), JSON.stringify(DEFAULT_WORKFLOW, null, 2), "utf-8");
322955
- created.push(".localclawd/image-pipeline/workflows/txt2img.json");
322956
- await writeFile19(join79(base, "workflows", "z_image_turbo.json"), JSON.stringify(Z_IMAGE_TURBO_WORKFLOW, null, 2), "utf-8");
322957
- created.push(".localclawd/image-pipeline/workflows/z_image_turbo.json");
322958
322967
  await writeFile19(join79(base, "scripts", "generate.sh"), GENERATE_SH, "utf-8");
322959
322968
  created.push(".localclawd/image-pipeline/scripts/generate.sh");
322960
322969
  await writeFile19(join79(base, "scripts", "generate.ps1"), GENERATE_PS1, "utf-8");
@@ -322962,6 +322971,18 @@ async function scaffoldProject(projectRoot) {
322962
322971
  await writeFile19(join79(base, "README.md"), README_CONTENT, "utf-8");
322963
322972
  created.push(".localclawd/image-pipeline/README.md");
322964
322973
  }
322974
+ for (const [wfName, wfContent] of [
322975
+ ["txt2img.json", DEFAULT_WORKFLOW],
322976
+ ["z_image_turbo.json", Z_IMAGE_TURBO_WORKFLOW]
322977
+ ]) {
322978
+ const wfPath = join79(base, "workflows", wfName);
322979
+ try {
322980
+ await access5(wfPath);
322981
+ } catch {
322982
+ await writeFile19(wfPath, JSON.stringify(wfContent, null, 2), "utf-8");
322983
+ created.push(`.localclawd/image-pipeline/workflows/${wfName}`);
322984
+ }
322985
+ }
322965
322986
  return { configPath, created, alreadyExisted };
322966
322987
  }
322967
322988
  async function loadConfig(projectRoot) {
@@ -322986,14 +323007,24 @@ async function listPrompts(projectRoot) {
322986
323007
  }
322987
323008
  }
322988
323009
  async function listWorkflows(projectRoot) {
322989
- try {
322990
- const { readdir: readdir12 } = await import("fs/promises");
322991
- const dir = join79(projectRoot, ".localclawd", "image-pipeline", "workflows");
322992
- const files = await readdir12(dir);
322993
- return files.filter((f) => f.endsWith(".json"));
322994
- } catch {
322995
- return [];
323010
+ const base = join79(projectRoot, ".localclawd", "image-pipeline", "workflows");
323011
+ const results = [];
323012
+ async function scan(dir, rel) {
323013
+ try {
323014
+ const { readdir: rd } = await import("fs/promises");
323015
+ const entries = await rd(dir, { withFileTypes: true });
323016
+ for (const entry of entries) {
323017
+ const entryRel = rel ? `${rel}/${entry.name}` : entry.name;
323018
+ if (entry.isDirectory()) {
323019
+ await scan(join79(dir, entry.name), entryRel);
323020
+ } else if (entry.isFile() && entry.name.endsWith(".json")) {
323021
+ results.push(entryRel);
323022
+ }
323023
+ }
323024
+ } catch {}
322996
323025
  }
323026
+ await scan(base, "");
323027
+ return results;
322997
323028
  }
322998
323029
  var DEFAULT_CONFIG2, EXAMPLE_PROMPT, DEFAULT_WORKFLOW, Z_IMAGE_TURBO_WORKFLOW, GENERATE_SH = `#!/usr/bin/env bash
322999
323030
  # localclawd image pipeline — quick generate helper
@@ -331884,7 +331915,7 @@ function getAnthropicEnvMetadata() {
331884
331915
  function getBuildAgeMinutes() {
331885
331916
  if (false)
331886
331917
  ;
331887
- const buildTime = new Date("2026-05-07T17:33:40.617Z").getTime();
331918
+ const buildTime = new Date("2026-05-07T17:47:00.138Z").getTime();
331888
331919
  if (isNaN(buildTime))
331889
331920
  return;
331890
331921
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -360714,7 +360745,7 @@ function Feedback({
360714
360745
  platform: env3.platform,
360715
360746
  gitRepo: envInfo.isGit,
360716
360747
  terminal: env3.terminal,
360717
- version: "1.8.9",
360748
+ version: "1.9.0",
360718
360749
  transcript: normalizeMessagesForAPI(messages),
360719
360750
  errors: sanitizedErrors,
360720
360751
  lastApiRequest: getLastAPIRequest(),
@@ -360906,7 +360937,7 @@ function Feedback({
360906
360937
  ", ",
360907
360938
  env3.terminal,
360908
360939
  ", v",
360909
- "1.8.9"
360940
+ "1.9.0"
360910
360941
  ]
360911
360942
  }, undefined, true, undefined, this)
360912
360943
  ]
@@ -361012,7 +361043,7 @@ ${sanitizedDescription}
361012
361043
  ` + `**Environment Info**
361013
361044
  ` + `- Platform: ${env3.platform}
361014
361045
  ` + `- Terminal: ${env3.terminal}
361015
- ` + `- Version: ${"1.8.9"}
361046
+ ` + `- Version: ${"1.9.0"}
361016
361047
  ` + `- Feedback ID: ${feedbackId}
361017
361048
  ` + `
361018
361049
  **Errors**
@@ -363640,7 +363671,7 @@ function buildPrimarySection() {
363640
363671
  }, undefined, false, undefined, this);
363641
363672
  return [{
363642
363673
  label: "Version",
363643
- value: "1.8.9"
363674
+ value: "1.9.0"
363644
363675
  }, {
363645
363676
  label: "Session name",
363646
363677
  value: nameValue
@@ -368321,7 +368352,7 @@ function Config({
368321
368352
  }
368322
368353
  }, undefined, false, undefined, this)
368323
368354
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
368324
- currentVersion: "1.8.9",
368355
+ currentVersion: "1.9.0",
368325
368356
  onChoice: (choice) => {
368326
368357
  setShowSubmenu(null);
368327
368358
  setTabsHidden(false);
@@ -368333,7 +368364,7 @@ function Config({
368333
368364
  autoUpdatesChannel: "stable"
368334
368365
  };
368335
368366
  if (choice === "stay") {
368336
- newSettings.minimumVersion = "1.8.9";
368367
+ newSettings.minimumVersion = "1.9.0";
368337
368368
  }
368338
368369
  updateSettingsForSource("userSettings", newSettings);
368339
368370
  setSettingsData((prev_27) => ({
@@ -374920,9 +374951,15 @@ var call20 = async (onDone, _context, args) => {
374920
374951
  lines.push(` Generated images will be saved to:`);
374921
374952
  lines.push(` ${generatedDir}`);
374922
374953
  lines.push("");
374954
+ lines.push(" To add custom workflows:");
374955
+ lines.push(` Export from ComfyUI → Save (API Format) → drop into:`);
374956
+ lines.push(` .localclawd/image-pipeline/workflows/`);
374957
+ lines.push(` .localclawd/image-pipeline/workflows/comfyui/ ← or any subfolder`);
374958
+ lines.push("");
374923
374959
  lines.push(" Next steps:");
374924
374960
  lines.push(" /image-pipeline config http://127.0.0.1:8000 — confirm or change ComfyUI URL");
374925
- lines.push(" /image-pipeline workflow txt2img set default workflow");
374961
+ lines.push(" /image-pipeline list see all available workflows");
374962
+ lines.push(" /image-pipeline workflow z_image_turbo — set default workflow");
374926
374963
  lines.push(" /image a misty forest at dawn — generate an image");
374927
374964
  onDone(lines.join(`
374928
374965
  `), { display: "system" });
@@ -374995,7 +375032,11 @@ var call20 = async (onDone, _context, args) => {
374995
375032
  outputDir: ".localclawd/image-pipeline/generated"
374996
375033
  };
374997
375034
  const workflows = await listWorkflows(projectRoot);
374998
- const match = workflows.find((w2) => w2 === name || w2 === `${name}.json`);
375035
+ const baseName = name.replace(/\.json$/, "").split(/[\\/]/).pop() ?? name;
375036
+ const match = workflows.find((w2) => {
375037
+ const wName = w2.replace(/\.json$/, "");
375038
+ return wName === name.replace(/\.json$/, "") || wName.split(/[\\/]/).pop() === baseName;
375039
+ });
374999
375040
  if (!match) {
375000
375041
  const lines = [
375001
375042
  `◆ Image Pipeline — Workflow not found: "${name}"`,
@@ -375006,13 +375047,16 @@ var call20 = async (onDone, _context, args) => {
375006
375047
  for (const w2 of workflows)
375007
375048
  lines.push(` • ${w2.replace(/\.json$/, "")}`);
375008
375049
  } else {
375009
- lines.push(" No workflows found — run /image-pipeline setup first.");
375050
+ lines.push(" No local workflows found.");
375051
+ lines.push(" Run /image-pipeline setup to add bundled templates.");
375052
+ lines.push(" Or export a workflow from ComfyUI (API Format) and drop it into:");
375053
+ lines.push(` ${join113(projectRoot, ".localclawd", "image-pipeline", "workflows")}`);
375010
375054
  }
375011
375055
  onDone(lines.join(`
375012
375056
  `), { display: "system" });
375013
375057
  return null;
375014
375058
  }
375015
- config2.defaultWorkflow = name.replace(/\.json$/, "");
375059
+ config2.defaultWorkflow = match.replace(/\.json$/, "");
375016
375060
  await saveConfig2(projectRoot, config2);
375017
375061
  onDone([
375018
375062
  "◆ Image Pipeline — Default Workflow Set",
@@ -375094,23 +375138,22 @@ var call20 = async (onDone, _context, args) => {
375094
375138
  }
375095
375139
  const fetchResult = await fetchServerWorkflow(backendUrl, name);
375096
375140
  if ("error" in fetchResult) {
375097
- const wfDir = `${projectRoot}\\.localclawd\\image-pipeline\\workflows`;
375141
+ const wfDir = join113(projectRoot, ".localclawd", "image-pipeline", "workflows", "comfyui");
375098
375142
  onDone([
375099
375143
  `◆ Image Pipeline — Fetch Failed: "${name}"`,
375100
375144
  "",
375101
375145
  ` ${fetchResult.error}`,
375102
375146
  "",
375103
- " Your ComfyUI version may not support workflow download via API.",
375104
- " Export the workflow manually:",
375105
- "",
375147
+ " Export the workflow manually from ComfyUI:",
375106
375148
  ` 1. Open ComfyUI: ${backendUrl}`,
375107
- " 2. Load the workflow from the sidebar",
375108
- " 3. Settings → Enable Dev Mode (gear icon)",
375109
- " 4. Click Save (API Format) — saves a flat JSON file",
375110
- " 5. Copy that file here:",
375111
- ` ${wfDir}\\${name}.json`,
375149
+ " 2. Load the workflow (sidebar or Menu → Open)",
375150
+ " 3. Settings → Enable Dev Mode",
375151
+ " 4. Save (API Format) — exports a flat JSON file",
375152
+ " 5. Drop the JSON file into:",
375153
+ ` ${wfDir}`,
375112
375154
  "",
375113
- " Then use: /image " + name + ": <your prompt>"
375155
+ " Then: /image-pipeline workflow " + name,
375156
+ " /image " + name + ": <your prompt>"
375114
375157
  ].join(`
375115
375158
  `), { display: "system" });
375116
375159
  return null;
@@ -385776,7 +385819,7 @@ function Help(t0) {
385776
385819
  let t6;
385777
385820
  if ($2[31] !== tabs) {
385778
385821
  t6 = /* @__PURE__ */ jsx_dev_runtime221.jsxDEV(Tabs, {
385779
- title: `localclawd v${"1.8.9"}`,
385822
+ title: `localclawd v${"1.9.0"}`,
385780
385823
  color: "professionalBlue",
385781
385824
  defaultTab: "general",
385782
385825
  children: tabs
@@ -403038,7 +403081,7 @@ function getRecentReleaseNotes(currentVersion, previousVersion, changelogContent
403038
403081
  }
403039
403082
  return [];
403040
403083
  }
403041
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.8.9") {
403084
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.9.0") {
403042
403085
  if (process.env.USER_TYPE === "ant") {
403043
403086
  const changelog = MACRO.VERSION_CHANGELOG;
403044
403087
  if (changelog) {
@@ -403065,7 +403108,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.8.9") {
403065
403108
  releaseNotes
403066
403109
  };
403067
403110
  }
403068
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.8.9") {
403111
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.9.0") {
403069
403112
  if (process.env.USER_TYPE === "ant") {
403070
403113
  const changelog = MACRO.VERSION_CHANGELOG;
403071
403114
  if (changelog) {
@@ -403222,7 +403265,7 @@ function getRecentActivitySync() {
403222
403265
  return cachedActivity;
403223
403266
  }
403224
403267
  function getLogoDisplayData() {
403225
- const version = process.env.DEMO_VERSION ?? "1.8.9";
403268
+ const version = process.env.DEMO_VERSION ?? "1.9.0";
403226
403269
  const serverUrl = getDirectConnectServerUrl();
403227
403270
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
403228
403271
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -404322,7 +404365,7 @@ function Logo() {
404322
404365
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
404323
404366
  t2 = () => {
404324
404367
  const currentConfig = getGlobalConfig();
404325
- if (currentConfig.lastReleaseNotesSeen === "1.8.9") {
404368
+ if (currentConfig.lastReleaseNotesSeen === "1.9.0") {
404326
404369
  return;
404327
404370
  }
404328
404371
  saveGlobalConfig(_temp326);
@@ -404981,12 +405024,12 @@ function Logo() {
404981
405024
  return t41;
404982
405025
  }
404983
405026
  function _temp326(current) {
404984
- if (current.lastReleaseNotesSeen === "1.8.9") {
405027
+ if (current.lastReleaseNotesSeen === "1.9.0") {
404985
405028
  return current;
404986
405029
  }
404987
405030
  return {
404988
405031
  ...current,
404989
- lastReleaseNotesSeen: "1.8.9"
405032
+ lastReleaseNotesSeen: "1.9.0"
404990
405033
  };
404991
405034
  }
404992
405035
  function _temp241(s_0) {
@@ -435465,7 +435508,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
435465
435508
  smapsRollup,
435466
435509
  platform: process.platform,
435467
435510
  nodeVersion: process.version,
435468
- ccVersion: "1.8.9"
435511
+ ccVersion: "1.9.0"
435469
435512
  };
435470
435513
  }
435471
435514
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -436050,7 +436093,7 @@ var init_bridge_kick = __esm(() => {
436050
436093
  var call87 = async () => {
436051
436094
  return {
436052
436095
  type: "text",
436053
- value: `${"1.8.9"} (built ${"2026-05-07T17:33:40.617Z"})`
436096
+ value: `${"1.9.0"} (built ${"2026-05-07T17:47:00.138Z"})`
436054
436097
  };
436055
436098
  }, version, version_default;
436056
436099
  var init_version = __esm(() => {
@@ -443994,7 +444037,7 @@ function generateHtmlReport(data, insights) {
443994
444037
  </html>`;
443995
444038
  }
443996
444039
  function buildExportData(data, insights, facets, remoteStats) {
443997
- const version2 = typeof MACRO !== "undefined" ? "1.8.9" : "unknown";
444040
+ const version2 = typeof MACRO !== "undefined" ? "1.9.0" : "unknown";
443998
444041
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
443999
444042
  const facets_summary = {
444000
444043
  total: facets.size,
@@ -448195,7 +448238,7 @@ var init_sessionStorage = __esm(() => {
448195
448238
  init_settings2();
448196
448239
  init_slowOperations();
448197
448240
  init_uuid();
448198
- VERSION6 = typeof MACRO !== "undefined" ? "1.8.9" : "unknown";
448241
+ VERSION6 = typeof MACRO !== "undefined" ? "1.9.0" : "unknown";
448199
448242
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
448200
448243
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
448201
448244
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -449396,7 +449439,7 @@ var init_filesystem = __esm(() => {
449396
449439
  });
449397
449440
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
449398
449441
  const nonce = randomBytes20(16).toString("hex");
449399
- return join151(getClaudeTempDir(), "bundled-skills", "1.8.9", nonce);
449442
+ return join151(getClaudeTempDir(), "bundled-skills", "1.9.0", nonce);
449400
449443
  });
449401
449444
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
449402
449445
  });
@@ -458633,7 +458676,7 @@ function buildSystemInitMessage(inputs) {
458633
458676
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
458634
458677
  apiKeySource: getAnthropicApiKeyWithSource().source,
458635
458678
  betas: getSdkBetas(),
458636
- claude_code_version: "1.8.9",
458679
+ claude_code_version: "1.9.0",
458637
458680
  output_style: outputStyle2,
458638
458681
  agents: inputs.agents.map((agent) => agent.agentType),
458639
458682
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -472790,7 +472833,7 @@ var init_useVoiceEnabled = __esm(() => {
472790
472833
  function getSemverPart(version2) {
472791
472834
  return `${import_semver10.major(version2, { loose: true })}.${import_semver10.minor(version2, { loose: true })}.${import_semver10.patch(version2, { loose: true })}`;
472792
472835
  }
472793
- function useUpdateNotification(updatedVersion, initialVersion = "1.8.9") {
472836
+ function useUpdateNotification(updatedVersion, initialVersion = "1.9.0") {
472794
472837
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react214.useState(() => getSemverPart(initialVersion));
472795
472838
  if (!updatedVersion) {
472796
472839
  return null;
@@ -472830,7 +472873,7 @@ function AutoUpdater({
472830
472873
  return;
472831
472874
  }
472832
472875
  if (false) {}
472833
- const currentVersion = "1.8.9";
472876
+ const currentVersion = "1.9.0";
472834
472877
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
472835
472878
  let latestVersion = await getLatestVersion(channel);
472836
472879
  const isDisabled = isAutoUpdaterDisabled();
@@ -473041,12 +473084,12 @@ function NativeAutoUpdater({
473041
473084
  logEvent("tengu_native_auto_updater_start", {});
473042
473085
  try {
473043
473086
  const maxVersion = await getMaxVersion();
473044
- if (maxVersion && gt("1.8.9", maxVersion)) {
473087
+ if (maxVersion && gt("1.9.0", maxVersion)) {
473045
473088
  const msg = await getMaxVersionMessage();
473046
473089
  setMaxVersionIssue(msg ?? "affects your version");
473047
473090
  }
473048
473091
  const result = await installLatest(channel);
473049
- const currentVersion = "1.8.9";
473092
+ const currentVersion = "1.9.0";
473050
473093
  const latencyMs = Date.now() - startTime;
473051
473094
  if (result.lockFailed) {
473052
473095
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -473181,17 +473224,17 @@ function PackageManagerAutoUpdater(t0) {
473181
473224
  const maxVersion = await getMaxVersion();
473182
473225
  if (maxVersion && latest && gt(latest, maxVersion)) {
473183
473226
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
473184
- if (gte("1.8.9", maxVersion)) {
473185
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.8.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
473227
+ if (gte("1.9.0", maxVersion)) {
473228
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.9.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
473186
473229
  setUpdateAvailable(false);
473187
473230
  return;
473188
473231
  }
473189
473232
  latest = maxVersion;
473190
473233
  }
473191
- const hasUpdate = latest && !gte("1.8.9", latest) && !shouldSkipVersion(latest);
473234
+ const hasUpdate = latest && !gte("1.9.0", latest) && !shouldSkipVersion(latest);
473192
473235
  setUpdateAvailable(!!hasUpdate);
473193
473236
  if (hasUpdate) {
473194
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.8.9"} -> ${latest}`);
473237
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.9.0"} -> ${latest}`);
473195
473238
  }
473196
473239
  };
473197
473240
  $2[0] = t1;
@@ -473225,7 +473268,7 @@ function PackageManagerAutoUpdater(t0) {
473225
473268
  wrap: "truncate",
473226
473269
  children: [
473227
473270
  "currentVersion: ",
473228
- "1.8.9"
473271
+ "1.9.0"
473229
473272
  ]
473230
473273
  }, undefined, true, undefined, this);
473231
473274
  $2[3] = verbose;
@@ -480785,7 +480828,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
480785
480828
  project_dir: getOriginalCwd(),
480786
480829
  added_dirs: addedDirs
480787
480830
  },
480788
- version: "1.8.9",
480831
+ version: "1.9.0",
480789
480832
  output_style: {
480790
480833
  name: outputStyleName
480791
480834
  },
@@ -492357,7 +492400,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
492357
492400
  } catch {}
492358
492401
  const data = {
492359
492402
  trigger,
492360
- version: "1.8.9",
492403
+ version: "1.9.0",
492361
492404
  platform: process.platform,
492362
492405
  transcript,
492363
492406
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -509266,7 +509309,7 @@ function appendToLog(path17, message) {
509266
509309
  cwd: getFsImplementation().cwd(),
509267
509310
  userType: process.env.USER_TYPE,
509268
509311
  sessionId: getSessionId(),
509269
- version: "1.8.9"
509312
+ version: "1.9.0"
509270
509313
  };
509271
509314
  getLogWriter(path17).write(messageWithTimestamp);
509272
509315
  }
@@ -513290,8 +513333,8 @@ async function getEnvLessBridgeConfig() {
513290
513333
  }
513291
513334
  async function checkEnvLessBridgeMinVersion() {
513292
513335
  const cfg = await getEnvLessBridgeConfig();
513293
- if (cfg.min_version && lt("1.8.9", cfg.min_version)) {
513294
- return `Your version of localclawd (${"1.8.9"}) is too old for Remote Control.
513336
+ if (cfg.min_version && lt("1.9.0", cfg.min_version)) {
513337
+ return `Your version of localclawd (${"1.9.0"}) is too old for Remote Control.
513295
513338
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
513296
513339
  }
513297
513340
  return null;
@@ -513763,7 +513806,7 @@ async function initBridgeCore(params) {
513763
513806
  const rawApi = createBridgeApiClient({
513764
513807
  baseUrl,
513765
513808
  getAccessToken,
513766
- runnerVersion: "1.8.9",
513809
+ runnerVersion: "1.9.0",
513767
513810
  onDebug: logForDebugging,
513768
513811
  onAuth401,
513769
513812
  getTrustedDeviceToken
@@ -519482,7 +519525,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
519482
519525
  setCwd(cwd3);
519483
519526
  const server = new Server({
519484
519527
  name: "claude/tengu",
519485
- version: "1.8.9"
519528
+ version: "1.9.0"
519486
519529
  }, {
519487
519530
  capabilities: {
519488
519531
  tools: {}
@@ -520563,7 +520606,7 @@ function WelcomeLogo() {
520563
520606
  dimColor: true,
520564
520607
  children: [
520565
520608
  "v",
520566
- "1.8.9"
520609
+ "1.9.0"
520567
520610
  ]
520568
520611
  }, undefined, true, undefined, this)
520569
520612
  ]
@@ -520754,7 +520797,7 @@ __export(exports_update, {
520754
520797
  });
520755
520798
  async function update() {
520756
520799
  logEvent("tengu_update_check", {});
520757
- writeToStdout(`Current version: ${"1.8.9"}
520800
+ writeToStdout(`Current version: ${"1.9.0"}
520758
520801
  `);
520759
520802
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
520760
520803
  writeToStdout(`Checking for updates to ${channel} version...
@@ -520829,8 +520872,8 @@ async function update() {
520829
520872
  writeToStdout(`localclawd is managed by Homebrew.
520830
520873
  `);
520831
520874
  const latest = await getLatestVersion(channel);
520832
- if (latest && !gte("1.8.9", latest)) {
520833
- writeToStdout(`Update available: ${"1.8.9"} → ${latest}
520875
+ if (latest && !gte("1.9.0", latest)) {
520876
+ writeToStdout(`Update available: ${"1.9.0"} → ${latest}
520834
520877
  `);
520835
520878
  writeToStdout(`
520836
520879
  `);
@@ -520846,8 +520889,8 @@ async function update() {
520846
520889
  writeToStdout(`localclawd is managed by winget.
520847
520890
  `);
520848
520891
  const latest = await getLatestVersion(channel);
520849
- if (latest && !gte("1.8.9", latest)) {
520850
- writeToStdout(`Update available: ${"1.8.9"} → ${latest}
520892
+ if (latest && !gte("1.9.0", latest)) {
520893
+ writeToStdout(`Update available: ${"1.9.0"} → ${latest}
520851
520894
  `);
520852
520895
  writeToStdout(`
520853
520896
  `);
@@ -520861,8 +520904,8 @@ async function update() {
520861
520904
  writeToStdout(`localclawd is managed by apk.
520862
520905
  `);
520863
520906
  const latest = await getLatestVersion(channel);
520864
- if (latest && !gte("1.8.9", latest)) {
520865
- writeToStdout(`Update available: ${"1.8.9"} → ${latest}
520907
+ if (latest && !gte("1.9.0", latest)) {
520908
+ writeToStdout(`Update available: ${"1.9.0"} → ${latest}
520866
520909
  `);
520867
520910
  writeToStdout(`
520868
520911
  `);
@@ -520927,11 +520970,11 @@ async function update() {
520927
520970
  `);
520928
520971
  await gracefulShutdown(1);
520929
520972
  }
520930
- if (result.latestVersion === "1.8.9") {
520931
- writeToStdout(source_default.green(`localclawd is up to date (${"1.8.9"})`) + `
520973
+ if (result.latestVersion === "1.9.0") {
520974
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.9.0"})`) + `
520932
520975
  `);
520933
520976
  } else {
520934
- writeToStdout(source_default.green(`Successfully updated from ${"1.8.9"} to version ${result.latestVersion}`) + `
520977
+ writeToStdout(source_default.green(`Successfully updated from ${"1.9.0"} to version ${result.latestVersion}`) + `
520935
520978
  `);
520936
520979
  await regenerateCompletionCache();
520937
520980
  }
@@ -520991,12 +521034,12 @@ async function update() {
520991
521034
  `);
520992
521035
  await gracefulShutdown(1);
520993
521036
  }
520994
- if (latestVersion === "1.8.9") {
520995
- writeToStdout(source_default.green(`localclawd is up to date (${"1.8.9"})`) + `
521037
+ if (latestVersion === "1.9.0") {
521038
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.9.0"})`) + `
520996
521039
  `);
520997
521040
  await gracefulShutdown(0);
520998
521041
  }
520999
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.8.9"})
521042
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.9.0"})
521000
521043
  `);
521001
521044
  writeToStdout(`Installing update...
521002
521045
  `);
@@ -521041,7 +521084,7 @@ async function update() {
521041
521084
  logForDebugging(`update: Installation status: ${status2}`);
521042
521085
  switch (status2) {
521043
521086
  case "success":
521044
- writeToStdout(source_default.green(`Successfully updated from ${"1.8.9"} to version ${latestVersion}`) + `
521087
+ writeToStdout(source_default.green(`Successfully updated from ${"1.9.0"} to version ${latestVersion}`) + `
521045
521088
  `);
521046
521089
  await regenerateCompletionCache();
521047
521090
  break;
@@ -522283,7 +522326,7 @@ Run with --debug for more details.
522283
522326
  }
522284
522327
  }
522285
522328
  logForDiagnosticsNoPII("info", "started", {
522286
- version: "1.8.9",
522329
+ version: "1.9.0",
522287
522330
  is_native_binary: isInBundledMode()
522288
522331
  });
522289
522332
  registerCleanup(async () => {
@@ -523067,7 +523110,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
523067
523110
  pendingHookMessages
523068
523111
  }, renderAndRun);
523069
523112
  }
523070
- }).version("1.8.9 (localclawd)", "-v, --version", "Output the version number");
523113
+ }).version("1.9.0 (localclawd)", "-v, --version", "Output the version number");
523071
523114
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
523072
523115
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
523073
523116
  if (canUserConfigureAdvisor()) {
@@ -523581,7 +523624,7 @@ if (false) {}
523581
523624
  async function main2() {
523582
523625
  const args = process.argv.slice(2);
523583
523626
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
523584
- console.log(`${"1.8.9"} (localclawd)`);
523627
+ console.log(`${"1.9.0"} (localclawd)`);
523585
523628
  return;
523586
523629
  }
523587
523630
  const {
@@ -523664,4 +523707,4 @@ localclawd crashed: ${msg}
523664
523707
  process.exit(1);
523665
523708
  });
523666
523709
 
523667
- //# debugId=8CAABE705FAA411364756E2164756E21
523710
+ //# debugId=40FDF2E96DA5BCD764756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "localclawd",
3
- "version": "1.8.9",
3
+ "version": "1.9.0",
4
4
  "description": "Local-first coding CLI for vLLM, Ollama, and OpenAI-compatible backends.",
5
5
  "private": false,
6
6
  "type": "module",