localclawd 1.2.2 → 1.2.3

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 +215 -214
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -87564,7 +87564,7 @@ var init_isEqual = __esm(() => {
87564
87564
 
87565
87565
  // src/utils/userAgent.ts
87566
87566
  function getClaudeCodeUserAgent() {
87567
- return `claude-code/${"1.2.2"}`;
87567
+ return `claude-code/${"1.2.3"}`;
87568
87568
  }
87569
87569
 
87570
87570
  // src/utils/workloadContext.ts
@@ -87586,7 +87586,7 @@ function getUserAgent() {
87586
87586
  const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
87587
87587
  const workload = getWorkload();
87588
87588
  const workloadSuffix = workload ? `, workload/${workload}` : "";
87589
- return `claude-cli/${"1.2.2"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87589
+ return `claude-cli/${"1.2.3"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87590
87590
  }
87591
87591
  function getMCPUserAgent() {
87592
87592
  const parts = [];
@@ -87600,7 +87600,7 @@ function getMCPUserAgent() {
87600
87600
  parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
87601
87601
  }
87602
87602
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
87603
- return `claude-code/${"1.2.2"}${suffix}`;
87603
+ return `claude-code/${"1.2.3"}${suffix}`;
87604
87604
  }
87605
87605
  function getWebFetchUserAgent() {
87606
87606
  return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
@@ -130791,7 +130791,7 @@ function getAttributionHeader(fingerprint) {
130791
130791
  if (!isAttributionHeaderEnabled()) {
130792
130792
  return "";
130793
130793
  }
130794
- const version = `${"1.2.2"}.${fingerprint}`;
130794
+ const version = `${"1.2.3"}.${fingerprint}`;
130795
130795
  const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? "unknown";
130796
130796
  const cch = "";
130797
130797
  const workload = getWorkload();
@@ -146980,7 +146980,7 @@ var init_metadata = __esm(() => {
146980
146980
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
146981
146981
  WHITESPACE_REGEX = /\s+/;
146982
146982
  getVersionBase = memoize_default(() => {
146983
- const match = "1.2.2".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
146983
+ const match = "1.2.3".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
146984
146984
  return match ? match[0] : undefined;
146985
146985
  });
146986
146986
  buildEnvContext = memoize_default(async () => {
@@ -147020,9 +147020,9 @@ var init_metadata = __esm(() => {
147020
147020
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
147021
147021
  isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
147022
147022
  isClaudeAiAuth: isClaudeAISubscriber(),
147023
- version: "1.2.2",
147023
+ version: "1.2.3",
147024
147024
  versionBase: getVersionBase(),
147025
- buildTime: "2026-04-18T18:20:09.217Z",
147025
+ buildTime: "2026-04-18T19:07:42.573Z",
147026
147026
  deploymentEnvironment: env3.detectDeploymentEnvironment(),
147027
147027
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
147028
147028
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -179501,7 +179501,7 @@ function getTelemetryAttributes() {
179501
179501
  attributes["session.id"] = sessionId;
179502
179502
  }
179503
179503
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
179504
- attributes["app.version"] = "1.2.2";
179504
+ attributes["app.version"] = "1.2.3";
179505
179505
  }
179506
179506
  const oauthAccount = getOauthAccountInfo();
179507
179507
  if (oauthAccount) {
@@ -242293,7 +242293,7 @@ function getInstallationEnv() {
242293
242293
  return;
242294
242294
  }
242295
242295
  function getClaudeCodeVersion() {
242296
- return "1.2.2";
242296
+ return "1.2.3";
242297
242297
  }
242298
242298
  async function getInstalledVSCodeExtensionVersion(command) {
242299
242299
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -247567,7 +247567,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
247567
247567
  const client4 = new Client({
247568
247568
  name: "localclawd",
247569
247569
  title: "localclawd",
247570
- version: "1.2.2",
247570
+ version: "1.2.3",
247571
247571
  description: "local-first AI coding tool",
247572
247572
  websiteUrl: PRODUCT_URL
247573
247573
  }, {
@@ -247909,7 +247909,7 @@ var init_client9 = __esm(() => {
247909
247909
  const client4 = new Client({
247910
247910
  name: "localclawd",
247911
247911
  title: "localclawd",
247912
- version: "1.2.2",
247912
+ version: "1.2.3",
247913
247913
  description: "local-first AI coding tool",
247914
247914
  websiteUrl: PRODUCT_URL
247915
247915
  }, {
@@ -262299,7 +262299,7 @@ function computeFingerprint(messageText, version) {
262299
262299
  }
262300
262300
  function computeFingerprintFromMessages(messages) {
262301
262301
  const firstMessageText = extractFirstMessageText(messages);
262302
- return computeFingerprint(firstMessageText, "1.2.2");
262302
+ return computeFingerprint(firstMessageText, "1.2.3");
262303
262303
  }
262304
262304
  var FINGERPRINT_SALT = "59cf53e54c78";
262305
262305
  var init_fingerprint = () => {};
@@ -262341,7 +262341,7 @@ async function sideQuery(opts) {
262341
262341
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
262342
262342
  }
262343
262343
  const messageText = extractFirstUserMessageText(messages);
262344
- const fingerprint = computeFingerprint(messageText, "1.2.2");
262344
+ const fingerprint = computeFingerprint(messageText, "1.2.3");
262345
262345
  const attributionHeader = getAttributionHeader(fingerprint);
262346
262346
  const systemBlocks = [
262347
262347
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -283065,7 +283065,7 @@ var init_user = __esm(() => {
283065
283065
  deviceId,
283066
283066
  sessionId: getSessionId(),
283067
283067
  email: getEmail(),
283068
- appVersion: "1.2.2",
283068
+ appVersion: "1.2.3",
283069
283069
  platform: getHostPlatformForAnalytics(),
283070
283070
  organizationUuid,
283071
283071
  accountUuid,
@@ -284130,7 +284130,7 @@ async function initializeBetaTracing(resource) {
284130
284130
  });
284131
284131
  logs.setGlobalLoggerProvider(loggerProvider);
284132
284132
  setLoggerProvider(loggerProvider);
284133
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.2.2");
284133
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.2.3");
284134
284134
  setEventLogger(eventLogger);
284135
284135
  process.on("beforeExit", async () => {
284136
284136
  await loggerProvider?.forceFlush();
@@ -284170,7 +284170,7 @@ async function initializeTelemetry() {
284170
284170
  const platform2 = getPlatform();
284171
284171
  const baseAttributes = {
284172
284172
  [ATTR_SERVICE_NAME4]: "claude-code",
284173
- [ATTR_SERVICE_VERSION4]: "1.2.2"
284173
+ [ATTR_SERVICE_VERSION4]: "1.2.3"
284174
284174
  };
284175
284175
  if (platform2 === "wsl") {
284176
284176
  const wslVersion = getWslVersion();
@@ -284215,7 +284215,7 @@ async function initializeTelemetry() {
284215
284215
  } catch {}
284216
284216
  };
284217
284217
  registerCleanup(shutdownTelemetry2);
284218
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.2.2");
284218
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.2.3");
284219
284219
  }
284220
284220
  const meterProvider = new MeterProvider4({
284221
284221
  resource,
@@ -284235,7 +284235,7 @@ async function initializeTelemetry() {
284235
284235
  });
284236
284236
  logs.setGlobalLoggerProvider(loggerProvider);
284237
284237
  setLoggerProvider(loggerProvider);
284238
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.2.2");
284238
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.2.3");
284239
284239
  setEventLogger(eventLogger);
284240
284240
  logForDebugging("[3P telemetry] Event logger set successfully");
284241
284241
  process.on("beforeExit", async () => {
@@ -284297,7 +284297,7 @@ Current timeout: ${timeoutMs}ms
284297
284297
  }
284298
284298
  };
284299
284299
  registerCleanup(shutdownTelemetry);
284300
- return meterProvider.getMeter("com.anthropic.claude_code", "1.2.2");
284300
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.2.3");
284301
284301
  }
284302
284302
  async function flushTelemetry() {
284303
284303
  const meterProvider = getMeterProvider();
@@ -285487,7 +285487,7 @@ function detectLinuxGlobPatternWarnings() {
285487
285487
  }
285488
285488
  async function getDoctorDiagnostic() {
285489
285489
  const installationType = await getCurrentInstallationType();
285490
- const version = typeof MACRO !== "undefined" ? "1.2.2" : "unknown";
285490
+ const version = typeof MACRO !== "undefined" ? "1.2.3" : "unknown";
285491
285491
  const installationPath = await getInstallationPath();
285492
285492
  const invokedBinary = getInvokedBinary();
285493
285493
  const multipleInstallations = await detectMultipleInstallations();
@@ -286428,8 +286428,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286428
286428
  const maxVersion = await getMaxVersion();
286429
286429
  if (maxVersion && gt(version, maxVersion)) {
286430
286430
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
286431
- if (gte("1.2.2", maxVersion)) {
286432
- logForDebugging(`Native installer: current version ${"1.2.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
286431
+ if (gte("1.2.3", maxVersion)) {
286432
+ logForDebugging(`Native installer: current version ${"1.2.3"} is already at or above maxVersion ${maxVersion}, skipping update`);
286433
286433
  logEvent("tengu_native_update_skipped_max_version", {
286434
286434
  latency_ms: Date.now() - startTime,
286435
286435
  max_version: maxVersion,
@@ -286440,7 +286440,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286440
286440
  version = maxVersion;
286441
286441
  }
286442
286442
  }
286443
- if (!forceReinstall && version === "1.2.2" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286443
+ if (!forceReinstall && version === "1.2.3" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286444
286444
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
286445
286445
  logEvent("tengu_native_update_complete", {
286446
286446
  latency_ms: Date.now() - startTime,
@@ -330829,7 +330829,7 @@ function getAnthropicEnvMetadata() {
330829
330829
  function getBuildAgeMinutes() {
330830
330830
  if (false)
330831
330831
  ;
330832
- const buildTime = new Date("2026-04-18T18:20:09.217Z").getTime();
330832
+ const buildTime = new Date("2026-04-18T19:07:42.573Z").getTime();
330833
330833
  if (isNaN(buildTime))
330834
330834
  return;
330835
330835
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -359154,7 +359154,7 @@ function Feedback({
359154
359154
  platform: env3.platform,
359155
359155
  gitRepo: envInfo.isGit,
359156
359156
  terminal: env3.terminal,
359157
- version: "1.2.2",
359157
+ version: "1.2.3",
359158
359158
  transcript: normalizeMessagesForAPI(messages),
359159
359159
  errors: sanitizedErrors,
359160
359160
  lastApiRequest: getLastAPIRequest(),
@@ -359346,7 +359346,7 @@ function Feedback({
359346
359346
  ", ",
359347
359347
  env3.terminal,
359348
359348
  ", v",
359349
- "1.2.2"
359349
+ "1.2.3"
359350
359350
  ]
359351
359351
  }, undefined, true, undefined, this)
359352
359352
  ]
@@ -359452,7 +359452,7 @@ ${sanitizedDescription}
359452
359452
  ` + `**Environment Info**
359453
359453
  ` + `- Platform: ${env3.platform}
359454
359454
  ` + `- Terminal: ${env3.terminal}
359455
- ` + `- Version: ${"1.2.2"}
359455
+ ` + `- Version: ${"1.2.3"}
359456
359456
  ` + `- Feedback ID: ${feedbackId}
359457
359457
  ` + `
359458
359458
  **Errors**
@@ -362080,7 +362080,7 @@ function buildPrimarySection() {
362080
362080
  }, undefined, false, undefined, this);
362081
362081
  return [{
362082
362082
  label: "Version",
362083
- value: "1.2.2"
362083
+ value: "1.2.3"
362084
362084
  }, {
362085
362085
  label: "Session name",
362086
362086
  value: nameValue
@@ -366679,7 +366679,7 @@ function Config({
366679
366679
  }
366680
366680
  }, undefined, false, undefined, this)
366681
366681
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime175.jsxDEV(ChannelDowngradeDialog, {
366682
- currentVersion: "1.2.2",
366682
+ currentVersion: "1.2.3",
366683
366683
  onChoice: (choice) => {
366684
366684
  setShowSubmenu(null);
366685
366685
  setTabsHidden(false);
@@ -366691,7 +366691,7 @@ function Config({
366691
366691
  autoUpdatesChannel: "stable"
366692
366692
  };
366693
366693
  if (choice === "stay") {
366694
- newSettings.minimumVersion = "1.2.2";
366694
+ newSettings.minimumVersion = "1.2.3";
366695
366695
  }
366696
366696
  updateSettingsForSource("userSettings", newSettings);
366697
366697
  setSettingsData((prev_27) => ({
@@ -372629,9 +372629,17 @@ function createEmptyState() {
372629
372629
  import { mkdir as mkdir27, readdir as readdir21, readFile as readFile36, stat as stat37, writeFile as writeFile29 } from "fs/promises";
372630
372630
  import { basename as basename34, join as join105, resolve as resolve36 } from "path";
372631
372631
  import { homedir as homedir26 } from "os";
372632
+ function setDirectorProjectRoot(projectPath) {
372633
+ _projectStateDir = join105(projectPath, ".claude");
372634
+ }
372635
+ function getStatePath() {
372636
+ if (_projectStateDir)
372637
+ return join105(_projectStateDir, "director-memory.json");
372638
+ return join105(GLOBAL_DIRECTOR_DIR, "state.json");
372639
+ }
372632
372640
  async function loadDirectorState() {
372633
372641
  try {
372634
- const raw = await readFile36(STATE_FILE, "utf-8");
372642
+ const raw = await readFile36(getStatePath(), "utf-8");
372635
372643
  const parsed = JSON.parse(raw);
372636
372644
  if (parsed.version !== 1)
372637
372645
  return createEmptyState();
@@ -372641,8 +372649,9 @@ async function loadDirectorState() {
372641
372649
  }
372642
372650
  }
372643
372651
  async function saveDirectorState(state) {
372644
- await mkdir27(DIRECTOR_DIR, { recursive: true });
372645
- await writeFile29(STATE_FILE, JSON.stringify(state, null, 2), "utf-8");
372652
+ const dir = _projectStateDir || GLOBAL_DIRECTOR_DIR;
372653
+ await mkdir27(dir, { recursive: true });
372654
+ await writeFile29(getStatePath(), JSON.stringify(state, null, 2), "utf-8");
372646
372655
  }
372647
372656
  function slugify(path12) {
372648
372657
  return basename34(resolve36(path12)).toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
@@ -372818,12 +372827,11 @@ function getProjectContext(state, projectId) {
372818
372827
  return lines.join(`
372819
372828
  `);
372820
372829
  }
372821
- var DIRECTOR_DIR, STATE_FILE, DIRECTOR_MEMORY_DIR, KEY_FILES, MAX_FILE_ENTRIES = 100, MAX_TASKS = 200, PRUNE_INTERVAL_MS, PROJECT_STALE_MS, IMPORTANCE_DECAY = 0.95;
372830
+ var GLOBAL_DIRECTOR_DIR, DIRECTOR_MEMORY_DIR, _projectStateDir = "", KEY_FILES, MAX_FILE_ENTRIES = 100, MAX_TASKS = 200, PRUNE_INTERVAL_MS, PROJECT_STALE_MS, IMPORTANCE_DECAY = 0.95;
372822
372831
  var init_directorMemoryOps = __esm(() => {
372823
372832
  init_debug();
372824
- DIRECTOR_DIR = join105(homedir26(), ".claude", "director");
372825
- STATE_FILE = join105(DIRECTOR_DIR, "state.json");
372826
- DIRECTOR_MEMORY_DIR = join105(DIRECTOR_DIR, "memory");
372833
+ GLOBAL_DIRECTOR_DIR = join105(homedir26(), ".claude", "director");
372834
+ DIRECTOR_MEMORY_DIR = join105(GLOBAL_DIRECTOR_DIR, "memory");
372827
372835
  KEY_FILES = [
372828
372836
  "package.json",
372829
372837
  "README.md",
@@ -372882,17 +372890,20 @@ function buildDirectorReviewPrompt(round, maxRounds, reviewNotes, telegramMsg) {
372882
372890
  const telegramSection = telegramMsg ? `
372883
372891
  ━━━ MESSAGE FROM USER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
372884
372892
  ${telegramMsg}
372885
- ━━━ (respond to this, then continue) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
372893
+ ━━━ Respond to this message, then continue your work. ━━━━━━━━━━━━━━
372886
372894
  ` : "";
372887
372895
  return `[DIRECTOR REVIEW — ${roundInfo}]
372888
372896
 
372889
372897
  The director reviewed your last response:
372890
372898
  ${reviewNotes}
372891
372899
  ${telegramSection}
372892
- Continue working. Do not re-explain previous work.
372893
- Pick up exactly where you left off and proceed with the next action.
372894
-
372895
- When ALL work is done, emit: TASK COMPLETE: <summary>`;
372900
+ ━━━ INSTRUCTIONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
372901
+ 1. Continue working do not re-explain what was already done
372902
+ 2. Use the Agent tool to spawn subagents for independent parallel work
372903
+ 3. Run builds/tests after significant changes to verify correctness
372904
+ 4. Assess whether the task is complete:
372905
+ - If YES → emit: TASK COMPLETE: <summary of all work done>
372906
+ - If NO → proceed with the next action immediately`;
372896
372907
  }
372897
372908
  function buildDirectorStatusText(projects, recentTasks) {
372898
372909
  const lines = [];
@@ -372972,22 +372983,6 @@ var init_telegramKill = __esm(() => {
372972
372983
  });
372973
372984
 
372974
372985
  // src/services/telegram/telegramBot.ts
372975
- var exports_telegramBot = {};
372976
- __export(exports_telegramBot, {
372977
- validateTelegramToken: () => validateTelegramToken,
372978
- stopTypingIndicator: () => stopTypingIndicator,
372979
- stopTelegram: () => stopTelegram,
372980
- startTypingIndicator: () => startTypingIndicator,
372981
- sendTypingIndicator: () => sendTypingIndicator,
372982
- sendTelegramMessage: () => sendTelegramMessage,
372983
- onTelegramMessage: () => onTelegramMessage,
372984
- isTelegramConfigured: () => isTelegramConfigured,
372985
- isTelegramActive: () => isTelegramActive,
372986
- initTelegramWithCredentials: () => initTelegramWithCredentials,
372987
- initTelegram: () => initTelegram,
372988
- getTelegramChatId: () => getTelegramChatId,
372989
- getPendingTelegramMessage: () => getPendingTelegramMessage
372990
- });
372991
372986
  async function api(method, body = {}) {
372992
372987
  const url3 = `https://api.telegram.org/bot${_token}/${method}`;
372993
372988
  const res = await fetch(url3, {
@@ -373046,14 +373041,6 @@ function stopTypingIndicator() {
373046
373041
  function getPendingTelegramMessage() {
373047
373042
  return _queue.shift() ?? null;
373048
373043
  }
373049
- function onTelegramMessage(cb) {
373050
- _listeners.push(cb);
373051
- return () => {
373052
- const i2 = _listeners.indexOf(cb);
373053
- if (i2 !== -1)
373054
- _listeners.splice(i2, 1);
373055
- };
373056
- }
373057
373044
  function getTelegramChatId() {
373058
373045
  return _chatId;
373059
373046
  }
@@ -373137,9 +373124,6 @@ Ready to receive commands.`);
373137
373124
  logForDebugging(`[telegram] Init failed: ${e}`, { level: "warn" });
373138
373125
  }
373139
373126
  }
373140
- function stopTelegram() {
373141
- _polling = false;
373142
- }
373143
373127
  async function pollLoop() {
373144
373128
  while (_polling) {
373145
373129
  try {
@@ -373266,6 +373250,7 @@ var init_telegramBot = __esm(() => {
373266
373250
  var exports_directorEngine = {};
373267
373251
  __export(exports_directorEngine, {
373268
373252
  startDirectorTask: () => startDirectorTask,
373253
+ sendTurnStatus: () => sendTurnStatus,
373269
373254
  sendDirectorNotification: () => sendDirectorNotification,
373270
373255
  reviewAndContinue: () => reviewAndContinue,
373271
373256
  resetDirector: () => resetDirector,
@@ -373314,6 +373299,7 @@ async function startDirectorTask(task, projectPath, maxRounds, medium) {
373314
373299
  boostProject(state, project.id);
373315
373300
  await indexProjectFiles(state, project.id, projectPath);
373316
373301
  await saveDirectorState(state);
373302
+ setDirectorProjectRoot(projectPath);
373317
373303
  _round = 1;
373318
373304
  _task = task;
373319
373305
  _projectId = project.id;
@@ -373321,7 +373307,6 @@ async function startDirectorTask(task, projectPath, maxRounds, medium) {
373321
373307
  _projectPath = projectPath;
373322
373308
  _notifyMedium = medium ?? (isTelegramActive() ? "telegram" : "desktop");
373323
373309
  _startGitRef = await captureGitRef(projectPath);
373324
- startHeartbeat();
373325
373310
  const context7 = getProjectContext(state, project.id);
373326
373311
  const prompt = buildDirectorTaskPrompt(task, context7, _round, _maxRounds, _notifyMedium);
373327
373312
  logForDebugging(`[director] Starting task in ${project.id}: ${task.slice(0, 80)}`);
@@ -373368,12 +373353,16 @@ async function recordTaskOutcome(outcome, summary) {
373368
373353
  logForDebugging(`[director] Failed to record task: ${e}`);
373369
373354
  }
373370
373355
  }
373371
- function startHeartbeat() {
373372
- stopHeartbeat();
373373
- _taskStartTime = Date.now();
373374
- _heartbeatTimer = setInterval(() => {
373375
- sendHeartbeatUpdate();
373376
- }, HEARTBEAT_INTERVAL_MS2);
373356
+ async function sendTurnStatus(lastText) {
373357
+ const elapsed = Math.round((Date.now() - _taskStartTime) / (1000 * 60));
373358
+ const completedLines = lastText.split(`
373359
+ `).filter((l) => /^Completed:/i.test(l.trim())).map((l) => l.trim().slice(0, 120));
373360
+ const progress = completedLines.length > 0 ? completedLines.join(`
373361
+ `) : lastText.slice(0, 200).replace(/\n/g, " ");
373362
+ const msg = `Round ${_round}/${isFinite(_maxRounds) ? _maxRounds : "∞"} · ${elapsed}m elapsed
373363
+ ${progress}`;
373364
+ await sendDirectorNotification("Director", msg);
373365
+ logForDebugging(`[director] Turn status sent: round ${_round}`);
373377
373366
  }
373378
373367
  function stopHeartbeat() {
373379
373368
  if (_heartbeatTimer) {
@@ -373381,15 +373370,6 @@ function stopHeartbeat() {
373381
373370
  _heartbeatTimer = null;
373382
373371
  }
373383
373372
  }
373384
- async function sendHeartbeatUpdate() {
373385
- const elapsed = Math.round((Date.now() - _taskStartTime) / (1000 * 60));
373386
- const msg = `Director heartbeat — still working
373387
- Task: ${_task.slice(0, 100)}
373388
- Round: ${_round}/${isFinite(_maxRounds) ? _maxRounds : "∞"}
373389
- Elapsed: ${elapsed} min`;
373390
- await sendDirectorNotification("localclawd Director — Heartbeat", msg);
373391
- logForDebugging(`[director] Heartbeat sent at ${elapsed}min`);
373392
- }
373393
373373
  async function sendDirectorNotification(title, message) {
373394
373374
  if (_notifyMedium === "telegram" && isTelegramActive()) {
373395
373375
  sendTelegramMessage(`*${title}*
@@ -373501,7 +373481,7 @@ ${status}`;
373501
373481
  return "Unable to generate change summary.";
373502
373482
  }
373503
373483
  }
373504
- var _round = 0, _task = "", _projectId = "", _maxRounds = 20, _startGitRef = "", _projectPath = "", _heartbeatTimer = null, _taskStartTime = 0, _notifyMedium = "desktop", STOP_PATTERNS, HEARTBEAT_INTERVAL_MS2;
373484
+ var _round = 0, _task = "", _projectId = "", _maxRounds = 20, _startGitRef = "", _projectPath = "", _heartbeatTimer = null, _taskStartTime = 0, _notifyMedium = "desktop", STOP_PATTERNS;
373505
373485
  var init_directorEngine = __esm(() => {
373506
373486
  init_directorMemoryOps();
373507
373487
  init_debug();
@@ -373513,7 +373493,6 @@ var init_directorEngine = __esm(() => {
373513
373493
  { pattern: /ALL[_ ]DONE\b/i, label: "all done" },
373514
373494
  { pattern: /WORK[_ ]COMPLETE:/i, label: "work complete" }
373515
373495
  ];
373516
- HEARTBEAT_INTERVAL_MS2 = 30 * 60 * 1000;
373517
373496
  });
373518
373497
 
373519
373498
  // src/commands/director/director.tsx
@@ -373658,13 +373637,14 @@ ${task.slice(0, 200)}`);
373658
373637
  maxRounds: DEFAULT_MAX_ROUNDS,
373659
373638
  task,
373660
373639
  telegram: isTelegramActive(),
373661
- onReady: () => onDone(undefined, {
373662
- display: "system",
373663
- shouldQuery: true,
373664
- metaMessages: [prompt],
373665
- nextInput: "/director",
373666
- submitNextInput: true
373667
- })
373640
+ onReady: () => {
373641
+ enqueue({ value: "/director", mode: "prompt", isMeta: true });
373642
+ onDone(undefined, {
373643
+ display: "system",
373644
+ shouldQuery: true,
373645
+ metaMessages: [prompt]
373646
+ });
373647
+ }
373668
373648
  }, undefined, false, undefined, this);
373669
373649
  }
373670
373650
  if (isTelegramActive())
@@ -373692,15 +373672,7 @@ ${changeSummary}` : "";
373692
373672
  return prev;
373693
373673
  });
373694
373674
  if (lastText.trim()) {
373695
- const round2 = getDirectorRound();
373696
- const preview = lastText.slice(0, 1200);
373697
- const suffix = lastText.length > 1200 ? `
373698
- ...(truncated)` : "";
373699
- if (getNotifyMedium() === "telegram" && isTelegramActive()) {
373700
- const { sendTelegramMessage: sendTelegramMessage2 } = await Promise.resolve().then(() => (init_telegramBot(), exports_telegramBot));
373701
- sendTelegramMessage2(`Director round ${round2}:
373702
- ${preview}${suffix}`);
373703
- }
373675
+ sendTurnStatus(lastText);
373704
373676
  }
373705
373677
  const telegramMsg = getPendingTelegramMessage();
373706
373678
  const result = await reviewAndContinue(lastText, telegramMsg);
@@ -373732,13 +373704,14 @@ ${changeSummary}` : "";
373732
373704
  maxRounds: DEFAULT_MAX_ROUNDS,
373733
373705
  task: currentTask,
373734
373706
  telegram: isTelegramActive(),
373735
- onReady: () => onDone(undefined, {
373736
- display: "system",
373737
- shouldQuery: true,
373738
- metaMessages: [result.prompt],
373739
- nextInput: "/director",
373740
- submitNextInput: true
373741
- })
373707
+ onReady: () => {
373708
+ enqueue({ value: "/director", mode: "prompt", isMeta: true });
373709
+ onDone(undefined, {
373710
+ display: "system",
373711
+ shouldQuery: true,
373712
+ metaMessages: [result.prompt]
373713
+ });
373714
+ }
373742
373715
  }, undefined, false, undefined, this);
373743
373716
  };
373744
373717
  var init_director = __esm(() => {
@@ -373747,6 +373720,7 @@ var init_director = __esm(() => {
373747
373720
  init_telegramBot();
373748
373721
  init_telegramSignals();
373749
373722
  init_state();
373723
+ init_messageQueueManager();
373750
373724
  React58 = __toESM(require_react(), 1);
373751
373725
  jsx_dev_runtime195 = __toESM(require_jsx_dev_runtime(), 1);
373752
373726
  });
@@ -374014,12 +373988,11 @@ Round cap ${finalRound}/${maxRounds} reached.`);
374014
373988
  const nextCmd = `/keepgoing${nextArgs.length ? " " + nextArgs.join(" ") : ""}`;
374015
373989
  const metaMessages = [prompt];
374016
373990
  const handleReady = () => {
373991
+ enqueue({ value: nextCmd, mode: "prompt", isMeta: true });
374017
373992
  onDone(undefined, {
374018
373993
  display: "system",
374019
373994
  shouldQuery: true,
374020
- metaMessages,
374021
- nextInput: nextCmd,
374022
- submitNextInput: true
373995
+ metaMessages
374023
373996
  });
374024
373997
  };
374025
373998
  return /* @__PURE__ */ jsx_dev_runtime196.jsxDEV(KeepGoingBanner, {
@@ -374036,6 +374009,7 @@ var init_keepgoing = __esm(() => {
374036
374009
  init_thinkharder();
374037
374010
  init_telegramBot();
374038
374011
  init_telegramSignals();
374012
+ init_messageQueueManager();
374039
374013
  React59 = __toESM(require_react(), 1);
374040
374014
  jsx_dev_runtime196 = __toESM(require_jsx_dev_runtime(), 1);
374041
374015
  STOP_PATTERNS2 = [
@@ -374348,36 +374322,37 @@ async function saveTelegramConfig(token, chatId) {
374348
374322
  const configPath = join107(configDir, "telegram.json");
374349
374323
  await writeFile30(configPath, JSON.stringify({ token, chatId }, null, 2), "utf-8");
374350
374324
  }
374351
- function TelegramStatus({ onReady }) {
374325
+ function TelegramStatus({
374326
+ onDone
374327
+ }) {
374352
374328
  const active = isTelegramActive();
374353
374329
  const configured = isTelegramConfigured();
374354
- React60.useEffect(() => {
374355
- const id = setTimeout(onReady, 100);
374356
- return () => clearTimeout(id);
374357
- }, [onReady]);
374330
+ const [showSetup, setShowSetup] = React60.useState(false);
374331
+ if (showSetup) {
374332
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(TelegramSetup, {
374333
+ onDone
374334
+ }, undefined, false, undefined, this);
374335
+ }
374358
374336
  if (active) {
374359
- return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedBox_default, {
374360
- flexDirection: "column",
374361
- marginTop: 1,
374337
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Dialog, {
374338
+ title: "Telegram Bridge",
374339
+ onCancel: () => onDone(),
374340
+ hideInputGuide: true,
374362
374341
  children: [
374363
- /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374364
- bold: true,
374365
- color: "#6366f1",
374366
- children: "◆ Telegram Bridge"
374367
- }, undefined, false, undefined, this),
374368
- /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374369
- color: "green",
374370
- children: " ● Active — bot is polling"
374371
- }, undefined, false, undefined, this),
374372
- /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374373
- dimColor: true,
374374
- children: ` Chat ID: ${getTelegramChatId()}`
374375
- }, undefined, false, undefined, this),
374376
374342
  /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedBox_default, {
374377
374343
  flexDirection: "column",
374378
- marginLeft: 2,
374379
- marginTop: 1,
374380
374344
  children: [
374345
+ /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374346
+ color: "green",
374347
+ children: "● Active — bot is polling"
374348
+ }, undefined, false, undefined, this),
374349
+ /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374350
+ dimColor: true,
374351
+ children: `Chat ID: ${getTelegramChatId()}`
374352
+ }, undefined, false, undefined, this),
374353
+ /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374354
+ children: ""
374355
+ }, undefined, false, undefined, this),
374381
374356
  /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374382
374357
  dimColor: true,
374383
374358
  children: "Messages from Telegram are injected into /keepgoing and /director rounds."
@@ -374391,23 +374366,55 @@ function TelegramStatus({ onReady }) {
374391
374366
  children: "Send /stop to stop current task, /kill to stop all instances."
374392
374367
  }, undefined, false, undefined, this)
374393
374368
  ]
374394
- }, undefined, true, undefined, this)
374369
+ }, undefined, true, undefined, this),
374370
+ /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Select, {
374371
+ options: [
374372
+ { label: "OK", value: "ok" },
374373
+ { label: "Reconfigure — run setup again", value: "setup" }
374374
+ ],
374375
+ onChange: (v2) => {
374376
+ if (v2 === "setup")
374377
+ setShowSetup(true);
374378
+ else
374379
+ onDone(undefined);
374380
+ }
374381
+ }, undefined, false, undefined, this)
374395
374382
  ]
374396
374383
  }, undefined, true, undefined, this);
374397
374384
  }
374398
374385
  if (configured) {
374399
- return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedBox_default, {
374400
- flexDirection: "column",
374401
- marginTop: 1,
374386
+ return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Dialog, {
374387
+ title: "Telegram Bridge",
374388
+ onCancel: () => onDone(),
374389
+ hideInputGuide: true,
374402
374390
  children: [
374403
- /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374404
- bold: true,
374405
- color: "#6366f1",
374406
- children: "◆ Telegram Bridge"
374407
- }, undefined, false, undefined, this),
374408
- /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374409
- color: "yellow",
374410
- children: " ◌ Configured but not active (init failed — check logs)"
374391
+ /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedBox_default, {
374392
+ flexDirection: "column",
374393
+ children: [
374394
+ /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374395
+ color: "yellow",
374396
+ children: "◌ Configured but not active (init failed — check token/chat ID)"
374397
+ }, undefined, false, undefined, this),
374398
+ /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374399
+ children: ""
374400
+ }, undefined, false, undefined, this),
374401
+ /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(ThemedText, {
374402
+ dimColor: true,
374403
+ children: "The saved credentials may be invalid or expired."
374404
+ }, undefined, false, undefined, this)
374405
+ ]
374406
+ }, undefined, true, undefined, this),
374407
+ /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(Select, {
374408
+ options: [
374409
+ { label: "Reconfigure — run setup again", value: "setup" },
374410
+ { label: "Cancel", value: "cancel" }
374411
+ ],
374412
+ onChange: (v2) => {
374413
+ if (v2 === "setup")
374414
+ setShowSetup(true);
374415
+ else
374416
+ onDone(undefined);
374417
+ }
374411
374418
  }, undefined, false, undefined, this)
374412
374419
  ]
374413
374420
  }, undefined, true, undefined, this);
@@ -374468,7 +374475,7 @@ var React60, jsx_dev_runtime197, call21 = async (onDone, _context, args) => {
374468
374475
  }, undefined, false, undefined, this);
374469
374476
  }
374470
374477
  return /* @__PURE__ */ jsx_dev_runtime197.jsxDEV(TelegramStatus, {
374471
- onReady: () => onDone(undefined)
374478
+ onDone: (msg) => onDone(msg)
374472
374479
  }, undefined, false, undefined, this);
374473
374480
  }
374474
374481
  if (!isTelegramActive()) {
@@ -376876,7 +376883,7 @@ function Help(t0) {
376876
376883
  let t6;
376877
376884
  if ($2[31] !== tabs) {
376878
376885
  t6 = /* @__PURE__ */ jsx_dev_runtime208.jsxDEV(Tabs, {
376879
- title: `localclawd v${"1.2.2"}`,
376886
+ title: `localclawd v${"1.2.3"}`,
376880
376887
  color: "professionalBlue",
376881
376888
  defaultTab: "general",
376882
376889
  children: tabs
@@ -393109,7 +393116,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
393109
393116
  return [];
393110
393117
  }
393111
393118
  }
393112
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.2.2") {
393119
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.2.3") {
393113
393120
  if (process.env.USER_TYPE === "ant") {
393114
393121
  const changelog = MACRO.VERSION_CHANGELOG;
393115
393122
  if (changelog) {
@@ -393136,7 +393143,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.2.2") {
393136
393143
  releaseNotes
393137
393144
  };
393138
393145
  }
393139
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.2.2") {
393146
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.2.3") {
393140
393147
  if (process.env.USER_TYPE === "ant") {
393141
393148
  const changelog = MACRO.VERSION_CHANGELOG;
393142
393149
  if (changelog) {
@@ -394394,7 +394401,7 @@ function getRecentActivitySync() {
394394
394401
  return cachedActivity;
394395
394402
  }
394396
394403
  function getLogoDisplayData() {
394397
- const version = process.env.DEMO_VERSION ?? "1.2.2";
394404
+ const version = process.env.DEMO_VERSION ?? "1.2.3";
394398
394405
  const serverUrl = getDirectConnectServerUrl();
394399
394406
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
394400
394407
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -395501,7 +395508,7 @@ function Logo() {
395501
395508
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
395502
395509
  t2 = () => {
395503
395510
  const currentConfig = getGlobalConfig();
395504
- if (currentConfig.lastReleaseNotesSeen === "1.2.2") {
395511
+ if (currentConfig.lastReleaseNotesSeen === "1.2.3") {
395505
395512
  return;
395506
395513
  }
395507
395514
  saveGlobalConfig(_temp326);
@@ -396160,12 +396167,12 @@ function Logo() {
396160
396167
  return t41;
396161
396168
  }
396162
396169
  function _temp326(current) {
396163
- if (current.lastReleaseNotesSeen === "1.2.2") {
396170
+ if (current.lastReleaseNotesSeen === "1.2.3") {
396164
396171
  return current;
396165
396172
  }
396166
396173
  return {
396167
396174
  ...current,
396168
- lastReleaseNotesSeen: "1.2.2"
396175
+ lastReleaseNotesSeen: "1.2.3"
396169
396176
  };
396170
396177
  }
396171
396178
  function _temp241(s_0) {
@@ -426644,7 +426651,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
426644
426651
  smapsRollup,
426645
426652
  platform: process.platform,
426646
426653
  nodeVersion: process.version,
426647
- ccVersion: "1.2.2"
426654
+ ccVersion: "1.2.3"
426648
426655
  };
426649
426656
  }
426650
426657
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -427229,7 +427236,7 @@ var init_bridge_kick = __esm(() => {
427229
427236
  var call60 = async () => {
427230
427237
  return {
427231
427238
  type: "text",
427232
- value: `${"1.2.2"} (built ${"2026-04-18T18:20:09.217Z"})`
427239
+ value: `${"1.2.3"} (built ${"2026-04-18T19:07:42.573Z"})`
427233
427240
  };
427234
427241
  }, version, version_default;
427235
427242
  var init_version = __esm(() => {
@@ -435173,7 +435180,7 @@ function generateHtmlReport(data, insights) {
435173
435180
  </html>`;
435174
435181
  }
435175
435182
  function buildExportData(data, insights, facets, remoteStats) {
435176
- const version2 = typeof MACRO !== "undefined" ? "1.2.2" : "unknown";
435183
+ const version2 = typeof MACRO !== "undefined" ? "1.2.3" : "unknown";
435177
435184
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
435178
435185
  const facets_summary = {
435179
435186
  total: facets.size,
@@ -439321,7 +439328,7 @@ var init_sessionStorage = __esm(() => {
439321
439328
  init_settings2();
439322
439329
  init_slowOperations();
439323
439330
  init_uuid();
439324
- VERSION6 = typeof MACRO !== "undefined" ? "1.2.2" : "unknown";
439331
+ VERSION6 = typeof MACRO !== "undefined" ? "1.2.3" : "unknown";
439325
439332
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
439326
439333
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
439327
439334
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -440523,7 +440530,7 @@ var init_filesystem = __esm(() => {
440523
440530
  });
440524
440531
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
440525
440532
  const nonce = randomBytes19(16).toString("hex");
440526
- return join129(getClaudeTempDir(), "bundled-skills", "1.2.2", nonce);
440533
+ return join129(getClaudeTempDir(), "bundled-skills", "1.2.3", nonce);
440527
440534
  });
440528
440535
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
440529
440536
  });
@@ -449808,7 +449815,7 @@ function buildSystemInitMessage(inputs) {
449808
449815
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
449809
449816
  apiKeySource: getAnthropicApiKeyWithSource().source,
449810
449817
  betas: getSdkBetas(),
449811
- claude_code_version: "1.2.2",
449818
+ claude_code_version: "1.2.3",
449812
449819
  output_style: outputStyle2,
449813
449820
  agents: inputs.agents.map((agent) => agent.agentType),
449814
449821
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -464387,7 +464394,7 @@ var init_useVoiceEnabled = __esm(() => {
464387
464394
  function getSemverPart(version2) {
464388
464395
  return `${import_semver10.major(version2, { loose: true })}.${import_semver10.minor(version2, { loose: true })}.${import_semver10.patch(version2, { loose: true })}`;
464389
464396
  }
464390
- function useUpdateNotification(updatedVersion, initialVersion = "1.2.2") {
464397
+ function useUpdateNotification(updatedVersion, initialVersion = "1.2.3") {
464391
464398
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react214.useState(() => getSemverPart(initialVersion));
464392
464399
  if (!updatedVersion) {
464393
464400
  return null;
@@ -464427,7 +464434,7 @@ function AutoUpdater({
464427
464434
  return;
464428
464435
  }
464429
464436
  if (false) {}
464430
- const currentVersion = "1.2.2";
464437
+ const currentVersion = "1.2.3";
464431
464438
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
464432
464439
  let latestVersion = await getLatestVersion(channel);
464433
464440
  const isDisabled = isAutoUpdaterDisabled();
@@ -464638,12 +464645,12 @@ function NativeAutoUpdater({
464638
464645
  logEvent("tengu_native_auto_updater_start", {});
464639
464646
  try {
464640
464647
  const maxVersion = await getMaxVersion();
464641
- if (maxVersion && gt("1.2.2", maxVersion)) {
464648
+ if (maxVersion && gt("1.2.3", maxVersion)) {
464642
464649
  const msg = await getMaxVersionMessage();
464643
464650
  setMaxVersionIssue(msg ?? "affects your version");
464644
464651
  }
464645
464652
  const result = await installLatest(channel);
464646
- const currentVersion = "1.2.2";
464653
+ const currentVersion = "1.2.3";
464647
464654
  const latencyMs = Date.now() - startTime;
464648
464655
  if (result.lockFailed) {
464649
464656
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -464778,17 +464785,17 @@ function PackageManagerAutoUpdater(t0) {
464778
464785
  const maxVersion = await getMaxVersion();
464779
464786
  if (maxVersion && latest && gt(latest, maxVersion)) {
464780
464787
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
464781
- if (gte("1.2.2", maxVersion)) {
464782
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.2.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
464788
+ if (gte("1.2.3", maxVersion)) {
464789
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.2.3"} is already at or above maxVersion ${maxVersion}, skipping update`);
464783
464790
  setUpdateAvailable(false);
464784
464791
  return;
464785
464792
  }
464786
464793
  latest = maxVersion;
464787
464794
  }
464788
- const hasUpdate = latest && !gte("1.2.2", latest) && !shouldSkipVersion(latest);
464795
+ const hasUpdate = latest && !gte("1.2.3", latest) && !shouldSkipVersion(latest);
464789
464796
  setUpdateAvailable(!!hasUpdate);
464790
464797
  if (hasUpdate) {
464791
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.2.2"} -> ${latest}`);
464798
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.2.3"} -> ${latest}`);
464792
464799
  }
464793
464800
  };
464794
464801
  $2[0] = t1;
@@ -464822,7 +464829,7 @@ function PackageManagerAutoUpdater(t0) {
464822
464829
  wrap: "truncate",
464823
464830
  children: [
464824
464831
  "currentVersion: ",
464825
- "1.2.2"
464832
+ "1.2.3"
464826
464833
  ]
464827
464834
  }, undefined, true, undefined, this);
464828
464835
  $2[3] = verbose;
@@ -472380,7 +472387,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
472380
472387
  project_dir: getOriginalCwd(),
472381
472388
  added_dirs: addedDirs
472382
472389
  },
472383
- version: "1.2.2",
472390
+ version: "1.2.3",
472384
472391
  output_style: {
472385
472392
  name: outputStyleName
472386
472393
  },
@@ -479591,15 +479598,15 @@ function CancelRequestHandler(props) {
479591
479598
  setToolUseConfirmQueue(() => []);
479592
479599
  if (hasCommandsInQueue()) {
479593
479600
  globalStopSignal.set(true);
479601
+ clearCommandQueue();
479594
479602
  }
479595
479603
  onCancel();
479596
479604
  return;
479597
479605
  }
479598
479606
  if (hasCommandsInQueue()) {
479599
- if (popCommandFromQueue) {
479600
- popCommandFromQueue();
479601
- return;
479602
- }
479607
+ globalStopSignal.set(true);
479608
+ clearCommandQueue();
479609
+ return;
479603
479610
  }
479604
479611
  logEvent("tengu_cancel", cancelProps);
479605
479612
  setToolUseConfirmQueue(() => []);
@@ -483952,7 +483959,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
483952
483959
  } catch {}
483953
483960
  const data = {
483954
483961
  trigger,
483955
- version: "1.2.2",
483962
+ version: "1.2.3",
483956
483963
  platform: process.platform,
483957
483964
  transcript,
483958
483965
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -486217,7 +486224,7 @@ var init_tipRegistry = __esm(() => {
486217
486224
  },
486218
486225
  {
486219
486226
  id: "git-worktrees",
486220
- content: async () => "Use git worktrees to run multiple Claude sessions in parallel.",
486227
+ content: async () => "Use git worktrees to run multiple localclawd sessions in parallel.",
486221
486228
  cooldownSessions: 10,
486222
486229
  isRelevant: async () => {
486223
486230
  try {
@@ -486231,7 +486238,7 @@ var init_tipRegistry = __esm(() => {
486231
486238
  },
486232
486239
  {
486233
486240
  id: "color-when-multi-clauding",
486234
- content: async () => "Running multiple Claude sessions? Use /color and /rename to tell them apart at a glance.",
486241
+ content: async () => "Running multiple localclawd sessions? Use /color and /rename to tell them apart at a glance.",
486235
486242
  cooldownSessions: 10,
486236
486243
  isRelevant: async () => {
486237
486244
  if (getCurrentSessionAgentColor())
@@ -486275,7 +486282,7 @@ var init_tipRegistry = __esm(() => {
486275
486282
  },
486276
486283
  {
486277
486284
  id: "memory-command",
486278
- content: async () => "Use /memory to view and manage Claude memory",
486285
+ content: async () => "Use /memory to view and manage localclawd memory",
486279
486286
  cooldownSessions: 15,
486280
486287
  async isRelevant() {
486281
486288
  const config2 = getGlobalConfig();
@@ -486352,7 +486359,7 @@ var init_tipRegistry = __esm(() => {
486352
486359
  },
486353
486360
  {
486354
486361
  id: "ide-upsell-external-terminal",
486355
- content: async () => "Connect Claude to your IDE · /ide",
486362
+ content: async () => "Connect localclawd to your IDE · /ide",
486356
486363
  cooldownSessions: 4,
486357
486364
  async isRelevant() {
486358
486365
  if (isSupportedTerminal()) {
@@ -486366,12 +486373,6 @@ var init_tipRegistry = __esm(() => {
486366
486373
  return runningIDEs.length > 0;
486367
486374
  }
486368
486375
  },
486369
- {
486370
- id: "install-slack-app",
486371
- content: async () => "Run /install-slack-app to use Claude in Slack",
486372
- cooldownSessions: 10,
486373
- isRelevant: async () => !getGlobalConfig().slackAppInstallCount
486374
- },
486375
486376
  {
486376
486377
  id: "permissions",
486377
486378
  content: async () => "Use /permissions to pre-approve and pre-deny bash, edit, and MCP tools",
@@ -486407,7 +486408,7 @@ var init_tipRegistry = __esm(() => {
486407
486408
  },
486408
486409
  {
486409
486410
  id: "continue",
486410
- content: async () => "Run claude --continue or claude --resume to resume a conversation",
486411
+ content: async () => "Run localclawd --continue or localclawd --resume to resume a conversation",
486411
486412
  cooldownSessions: 10,
486412
486413
  isRelevant: async () => true
486413
486414
  },
@@ -486489,7 +486490,7 @@ var init_tipRegistry = __esm(() => {
486489
486490
  },
486490
486491
  {
486491
486492
  id: "opusplan-mode-reminder",
486492
- content: async () => `Your default model setting is Opus Plan Mode. Press ${getShortcutDisplay("chat:cycleMode", "Chat", "shift+tab")} twice to activate Plan Mode and plan with Claude Opus.`,
486493
+ content: async () => `Press ${getShortcutDisplay("chat:cycleMode", "Chat", "shift+tab")} twice to activate Plan Mode.`,
486493
486494
  cooldownSessions: 2,
486494
486495
  async isRelevant() {
486495
486496
  if (process.env.USER_TYPE === "ant")
@@ -486532,7 +486533,7 @@ ${blue(`/plugin install vercel@${OFFICIAL_MARKETPLACE_NAME}`)}`;
486532
486533
  const blue = color("suggestion", ctx2.theme);
486533
486534
  const cmd = blue("/effort high");
486534
486535
  const variant = getFeatureValue_CACHED_MAY_BE_STALE("tengu_tide_elm", "off");
486535
- return variant === "copy_b" ? `Use ${cmd} for better one-shot answers. Claude thinks it through first.` : `Working on something tricky? ${cmd} gives better first answers`;
486536
+ return variant === "copy_b" ? `Use ${cmd} for better one-shot answers.` : `Working on something tricky? ${cmd} gives better first answers`;
486536
486537
  },
486537
486538
  cooldownSessions: 3,
486538
486539
  isRelevant: async () => {
@@ -500417,7 +500418,7 @@ function appendToLog(path17, message) {
500417
500418
  cwd: getFsImplementation().cwd(),
500418
500419
  userType: process.env.USER_TYPE,
500419
500420
  sessionId: getSessionId(),
500420
- version: "1.2.2"
500421
+ version: "1.2.3"
500421
500422
  };
500422
500423
  getLogWriter(path17).write(messageWithTimestamp);
500423
500424
  }
@@ -504416,8 +504417,8 @@ async function getEnvLessBridgeConfig() {
504416
504417
  }
504417
504418
  async function checkEnvLessBridgeMinVersion() {
504418
504419
  const cfg = await getEnvLessBridgeConfig();
504419
- if (cfg.min_version && lt("1.2.2", cfg.min_version)) {
504420
- return `Your version of localclawd (${"1.2.2"}) is too old for Remote Control.
504420
+ if (cfg.min_version && lt("1.2.3", cfg.min_version)) {
504421
+ return `Your version of localclawd (${"1.2.3"}) is too old for Remote Control.
504421
504422
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
504422
504423
  }
504423
504424
  return null;
@@ -504889,7 +504890,7 @@ async function initBridgeCore(params) {
504889
504890
  const rawApi = createBridgeApiClient({
504890
504891
  baseUrl,
504891
504892
  getAccessToken,
504892
- runnerVersion: "1.2.2",
504893
+ runnerVersion: "1.2.3",
504893
504894
  onDebug: logForDebugging,
504894
504895
  onAuth401,
504895
504896
  getTrustedDeviceToken
@@ -510608,7 +510609,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
510608
510609
  setCwd(cwd3);
510609
510610
  const server = new Server({
510610
510611
  name: "claude/tengu",
510611
- version: "1.2.2"
510612
+ version: "1.2.3"
510612
510613
  }, {
510613
510614
  capabilities: {
510614
510615
  tools: {}
@@ -511689,7 +511690,7 @@ function WelcomeLogo() {
511689
511690
  dimColor: true,
511690
511691
  children: [
511691
511692
  "v",
511692
- "1.2.2"
511693
+ "1.2.3"
511693
511694
  ]
511694
511695
  }, undefined, true, undefined, this)
511695
511696
  ]
@@ -511880,7 +511881,7 @@ __export(exports_update, {
511880
511881
  });
511881
511882
  async function update() {
511882
511883
  logEvent("tengu_update_check", {});
511883
- writeToStdout(`Current version: ${"1.2.2"}
511884
+ writeToStdout(`Current version: ${"1.2.3"}
511884
511885
  `);
511885
511886
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
511886
511887
  writeToStdout(`Checking for updates to ${channel} version...
@@ -511955,8 +511956,8 @@ async function update() {
511955
511956
  writeToStdout(`localclawd is managed by Homebrew.
511956
511957
  `);
511957
511958
  const latest = await getLatestVersion(channel);
511958
- if (latest && !gte("1.2.2", latest)) {
511959
- writeToStdout(`Update available: ${"1.2.2"} → ${latest}
511959
+ if (latest && !gte("1.2.3", latest)) {
511960
+ writeToStdout(`Update available: ${"1.2.3"} → ${latest}
511960
511961
  `);
511961
511962
  writeToStdout(`
511962
511963
  `);
@@ -511972,8 +511973,8 @@ async function update() {
511972
511973
  writeToStdout(`localclawd is managed by winget.
511973
511974
  `);
511974
511975
  const latest = await getLatestVersion(channel);
511975
- if (latest && !gte("1.2.2", latest)) {
511976
- writeToStdout(`Update available: ${"1.2.2"} → ${latest}
511976
+ if (latest && !gte("1.2.3", latest)) {
511977
+ writeToStdout(`Update available: ${"1.2.3"} → ${latest}
511977
511978
  `);
511978
511979
  writeToStdout(`
511979
511980
  `);
@@ -511987,8 +511988,8 @@ async function update() {
511987
511988
  writeToStdout(`localclawd is managed by apk.
511988
511989
  `);
511989
511990
  const latest = await getLatestVersion(channel);
511990
- if (latest && !gte("1.2.2", latest)) {
511991
- writeToStdout(`Update available: ${"1.2.2"} → ${latest}
511991
+ if (latest && !gte("1.2.3", latest)) {
511992
+ writeToStdout(`Update available: ${"1.2.3"} → ${latest}
511992
511993
  `);
511993
511994
  writeToStdout(`
511994
511995
  `);
@@ -512053,11 +512054,11 @@ async function update() {
512053
512054
  `);
512054
512055
  await gracefulShutdown(1);
512055
512056
  }
512056
- if (result.latestVersion === "1.2.2") {
512057
- writeToStdout(source_default.green(`localclawd is up to date (${"1.2.2"})`) + `
512057
+ if (result.latestVersion === "1.2.3") {
512058
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.2.3"})`) + `
512058
512059
  `);
512059
512060
  } else {
512060
- writeToStdout(source_default.green(`Successfully updated from ${"1.2.2"} to version ${result.latestVersion}`) + `
512061
+ writeToStdout(source_default.green(`Successfully updated from ${"1.2.3"} to version ${result.latestVersion}`) + `
512061
512062
  `);
512062
512063
  await regenerateCompletionCache();
512063
512064
  }
@@ -512117,12 +512118,12 @@ async function update() {
512117
512118
  `);
512118
512119
  await gracefulShutdown(1);
512119
512120
  }
512120
- if (latestVersion === "1.2.2") {
512121
- writeToStdout(source_default.green(`localclawd is up to date (${"1.2.2"})`) + `
512121
+ if (latestVersion === "1.2.3") {
512122
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.2.3"})`) + `
512122
512123
  `);
512123
512124
  await gracefulShutdown(0);
512124
512125
  }
512125
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.2.2"})
512126
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.2.3"})
512126
512127
  `);
512127
512128
  writeToStdout(`Installing update...
512128
512129
  `);
@@ -512167,7 +512168,7 @@ async function update() {
512167
512168
  logForDebugging(`update: Installation status: ${status2}`);
512168
512169
  switch (status2) {
512169
512170
  case "success":
512170
- writeToStdout(source_default.green(`Successfully updated from ${"1.2.2"} to version ${latestVersion}`) + `
512171
+ writeToStdout(source_default.green(`Successfully updated from ${"1.2.3"} to version ${latestVersion}`) + `
512171
512172
  `);
512172
512173
  await regenerateCompletionCache();
512173
512174
  break;
@@ -513409,7 +513410,7 @@ Run with --debug for more details.
513409
513410
  }
513410
513411
  }
513411
513412
  logForDiagnosticsNoPII("info", "started", {
513412
- version: "1.2.2",
513413
+ version: "1.2.3",
513413
513414
  is_native_binary: isInBundledMode()
513414
513415
  });
513415
513416
  registerCleanup(async () => {
@@ -514193,7 +514194,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
514193
514194
  pendingHookMessages
514194
514195
  }, renderAndRun);
514195
514196
  }
514196
- }).version("1.2.2 (localclawd)", "-v, --version", "Output the version number");
514197
+ }).version("1.2.3 (localclawd)", "-v, --version", "Output the version number");
514197
514198
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
514198
514199
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
514199
514200
  if (canUserConfigureAdvisor()) {
@@ -514693,7 +514694,7 @@ if (false) {}
514693
514694
  async function main2() {
514694
514695
  const args = process.argv.slice(2);
514695
514696
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
514696
- console.log(`${"1.2.2"} (localclawd)`);
514697
+ console.log(`${"1.2.3"} (localclawd)`);
514697
514698
  return;
514698
514699
  }
514699
514700
  const {
@@ -514776,4 +514777,4 @@ localclawd crashed: ${msg}
514776
514777
  process.exit(1);
514777
514778
  });
514778
514779
 
514779
- //# debugId=38E1293AFF56160C64756E2164756E21
514780
+ //# debugId=D9814C9770A3639464756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "localclawd",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "description": "Local-first coding CLI for vLLM, Ollama, and OpenAI-compatible backends.",
5
5
  "private": false,
6
6
  "type": "module",