localclawd 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.mjs +248 -133
  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.0"}`;
87567
+ return `claude-code/${"1.2.1"}`;
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.0"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
87589
+ return `claude-cli/${"1.2.1"} (${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.0"}${suffix}`;
87603
+ return `claude-code/${"1.2.1"}${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.0"}.${fingerprint}`;
130794
+ const version = `${"1.2.1"}.${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.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
146983
+ const match = "1.2.1".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.0",
147023
+ version: "1.2.1",
147024
147024
  versionBase: getVersionBase(),
147025
- buildTime: "2026-04-14T18:16:06.737Z",
147025
+ buildTime: "2026-04-15T02:12:12.680Z",
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.0";
179504
+ attributes["app.version"] = "1.2.1";
179505
179505
  }
179506
179506
  const oauthAccount = getOauthAccountInfo();
179507
179507
  if (oauthAccount) {
@@ -180397,7 +180397,8 @@ function getEffectiveContextWindowSize(model) {
180397
180397
  if (autoCompactWindow) {
180398
180398
  contextWindow = Math.min(contextWindow, autoCompactWindow);
180399
180399
  }
180400
- return contextWindow - reservedTokensForSummary;
180400
+ const MIN_EFFECTIVE_TOKENS = 4000;
180401
+ return Math.max(contextWindow - reservedTokensForSummary, Math.max(Math.floor(contextWindow * 0.25), MIN_EFFECTIVE_TOKENS));
180401
180402
  }
180402
180403
  function getAutoCompactThreshold(model) {
180403
180404
  const effectiveContextWindow = getEffectiveContextWindowSize(model);
@@ -180627,6 +180628,39 @@ function objectGroupBy(items, keySelector) {
180627
180628
  }
180628
180629
 
180629
180630
  // src/utils/messageQueueManager.ts
180631
+ var exports_messageQueueManager = {};
180632
+ __export(exports_messageQueueManager, {
180633
+ subscribeToPendingNotifications: () => subscribeToPendingNotifications,
180634
+ subscribeToCommandQueue: () => subscribeToCommandQueue,
180635
+ resetPendingNotifications: () => resetPendingNotifications,
180636
+ resetCommandQueue: () => resetCommandQueue,
180637
+ removeByFilter: () => removeByFilter,
180638
+ remove: () => remove,
180639
+ recheckPendingNotifications: () => recheckPendingNotifications,
180640
+ recheckCommandQueue: () => recheckCommandQueue,
180641
+ popAllEditable: () => popAllEditable,
180642
+ peek: () => peek,
180643
+ isSlashCommand: () => isSlashCommand,
180644
+ isQueuedCommandVisible: () => isQueuedCommandVisible,
180645
+ isQueuedCommandEditable: () => isQueuedCommandEditable,
180646
+ isPromptInputModeEditable: () => isPromptInputModeEditable,
180647
+ hasPendingNotifications: () => hasPendingNotifications,
180648
+ hasCommandsInQueue: () => hasCommandsInQueue,
180649
+ getPendingNotificationsSnapshot: () => getPendingNotificationsSnapshot,
180650
+ getPendingNotificationsCount: () => getPendingNotificationsCount,
180651
+ getCommandsByMaxPriority: () => getCommandsByMaxPriority,
180652
+ getCommandQueueSnapshot: () => getCommandQueueSnapshot,
180653
+ getCommandQueueLength: () => getCommandQueueLength,
180654
+ getCommandQueue: () => getCommandQueue,
180655
+ enqueuePendingNotification: () => enqueuePendingNotification,
180656
+ enqueue: () => enqueue,
180657
+ dequeuePendingNotification: () => dequeuePendingNotification,
180658
+ dequeueAllMatching: () => dequeueAllMatching,
180659
+ dequeueAll: () => dequeueAll,
180660
+ dequeue: () => dequeue,
180661
+ clearPendingNotifications: () => clearPendingNotifications,
180662
+ clearCommandQueue: () => clearCommandQueue
180663
+ });
180630
180664
  function logOperation(operation, content) {
180631
180665
  const sessionId = getSessionId();
180632
180666
  const queueOp = {
@@ -180654,6 +180688,11 @@ function getCommandQueueLength() {
180654
180688
  function hasCommandsInQueue() {
180655
180689
  return commandQueue.length > 0;
180656
180690
  }
180691
+ function recheckCommandQueue() {
180692
+ if (commandQueue.length > 0) {
180693
+ notifySubscribers();
180694
+ }
180695
+ }
180657
180696
  function enqueue(command) {
180658
180697
  commandQueue.push({ ...command, priority: command.priority ?? "next" });
180659
180698
  notifySubscribers();
@@ -180687,6 +180726,18 @@ function dequeue(filter2) {
180687
180726
  logOperation("dequeue");
180688
180727
  return dequeued;
180689
180728
  }
180729
+ function dequeueAll() {
180730
+ if (commandQueue.length === 0) {
180731
+ return [];
180732
+ }
180733
+ const commands = [...commandQueue];
180734
+ commandQueue.length = 0;
180735
+ notifySubscribers();
180736
+ for (const _cmd of commands) {
180737
+ logOperation("dequeue");
180738
+ }
180739
+ return commands;
180740
+ }
180690
180741
  function peek(filter2) {
180691
180742
  if (commandQueue.length === 0) {
180692
180743
  return;
@@ -180767,6 +180818,10 @@ function clearCommandQueue() {
180767
180818
  commandQueue.length = 0;
180768
180819
  notifySubscribers();
180769
180820
  }
180821
+ function resetCommandQueue() {
180822
+ commandQueue.length = 0;
180823
+ snapshot = Object.freeze([]);
180824
+ }
180770
180825
  function isPromptInputModeEditable(mode) {
180771
180826
  return !NON_EDITABLE_MODES.has(mode);
180772
180827
  }
@@ -180837,6 +180892,12 @@ function popAllEditable(currentInput, currentCursorOffset) {
180837
180892
  notifySubscribers();
180838
180893
  return { text: newInput, cursorOffset, images };
180839
180894
  }
180895
+ function getPendingNotificationsSnapshot() {
180896
+ return snapshot;
180897
+ }
180898
+ function dequeuePendingNotification() {
180899
+ return dequeue();
180900
+ }
180840
180901
  function getCommandsByMaxPriority(maxPriority) {
180841
180902
  const threshold = PRIORITY_ORDER[maxPriority];
180842
180903
  return commandQueue.filter((cmd) => PRIORITY_ORDER[cmd.priority ?? "next"] <= threshold);
@@ -180844,7 +180905,7 @@ function getCommandsByMaxPriority(maxPriority) {
180844
180905
  function isSlashCommand(cmd) {
180845
180906
  return typeof cmd.value === "string" && cmd.value.trim().startsWith("/") && !cmd.skipSlashCommands;
180846
180907
  }
180847
- var commandQueue, snapshot, queueChanged, subscribeToCommandQueue, PRIORITY_ORDER, NON_EDITABLE_MODES;
180908
+ var commandQueue, snapshot, queueChanged, subscribeToCommandQueue, PRIORITY_ORDER, NON_EDITABLE_MODES, subscribeToPendingNotifications, hasPendingNotifications, getPendingNotificationsCount, recheckPendingNotifications, resetPendingNotifications, clearPendingNotifications;
180848
180909
  var init_messageQueueManager = __esm(() => {
180849
180910
  init_state();
180850
180911
  init_messages3();
@@ -180861,6 +180922,12 @@ var init_messageQueueManager = __esm(() => {
180861
180922
  NON_EDITABLE_MODES = new Set([
180862
180923
  "task-notification"
180863
180924
  ]);
180925
+ subscribeToPendingNotifications = subscribeToCommandQueue;
180926
+ hasPendingNotifications = hasCommandsInQueue;
180927
+ getPendingNotificationsCount = getCommandQueueLength;
180928
+ recheckPendingNotifications = recheckCommandQueue;
180929
+ resetPendingNotifications = resetCommandQueue;
180930
+ clearPendingNotifications = clearCommandQueue;
180864
180931
  });
180865
180932
 
180866
180933
  // src/utils/commandLifecycle.ts
@@ -233943,6 +234010,7 @@ var init_stdio2 = __esm(() => {
233943
234010
  // node_modules/eventsource-parser/dist/stream.js
233944
234011
  var EventSourceParserStream;
233945
234012
  var init_stream = __esm(() => {
234013
+ init_dist4();
233946
234014
  init_dist4();
233947
234015
  EventSourceParserStream = class EventSourceParserStream extends TransformStream {
233948
234016
  constructor({ onError, onRetry, onComment } = {}) {
@@ -242225,7 +242293,7 @@ function getInstallationEnv() {
242225
242293
  return;
242226
242294
  }
242227
242295
  function getClaudeCodeVersion() {
242228
- return "1.2.0";
242296
+ return "1.2.1";
242229
242297
  }
242230
242298
  async function getInstalledVSCodeExtensionVersion(command) {
242231
242299
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -247499,7 +247567,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
247499
247567
  const client4 = new Client({
247500
247568
  name: "localclawd",
247501
247569
  title: "localclawd",
247502
- version: "1.2.0",
247570
+ version: "1.2.1",
247503
247571
  description: "local-first AI coding tool",
247504
247572
  websiteUrl: PRODUCT_URL
247505
247573
  }, {
@@ -247841,7 +247909,7 @@ var init_client9 = __esm(() => {
247841
247909
  const client4 = new Client({
247842
247910
  name: "localclawd",
247843
247911
  title: "localclawd",
247844
- version: "1.2.0",
247912
+ version: "1.2.1",
247845
247913
  description: "local-first AI coding tool",
247846
247914
  websiteUrl: PRODUCT_URL
247847
247915
  }, {
@@ -262231,7 +262299,7 @@ function computeFingerprint(messageText, version) {
262231
262299
  }
262232
262300
  function computeFingerprintFromMessages(messages) {
262233
262301
  const firstMessageText = extractFirstMessageText(messages);
262234
- return computeFingerprint(firstMessageText, "1.2.0");
262302
+ return computeFingerprint(firstMessageText, "1.2.1");
262235
262303
  }
262236
262304
  var FINGERPRINT_SALT = "59cf53e54c78";
262237
262305
  var init_fingerprint = () => {};
@@ -262273,7 +262341,7 @@ async function sideQuery(opts) {
262273
262341
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
262274
262342
  }
262275
262343
  const messageText = extractFirstUserMessageText(messages);
262276
- const fingerprint = computeFingerprint(messageText, "1.2.0");
262344
+ const fingerprint = computeFingerprint(messageText, "1.2.1");
262277
262345
  const attributionHeader = getAttributionHeader(fingerprint);
262278
262346
  const systemBlocks = [
262279
262347
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -276071,7 +276139,7 @@ async function getMessagesForSlashCommand(commandName, args, setToolJSX, context
276071
276139
  }));
276072
276140
  const skipTranscript = isFullscreenEnvEnabled() && typeof result === "string" && result.endsWith(" dismissed");
276073
276141
  resolve28({
276074
- messages: options?.display === "system" ? skipTranscript ? metaMessages : [createCommandInputMessage(formatCommandInput(command, args)), createCommandInputMessage(`<local-command-stdout>${result}</local-command-stdout>`), ...metaMessages] : [createUserMessage({
276142
+ messages: options?.display === "system" ? skipTranscript ? metaMessages : [createCommandInputMessage(formatCommandInput(command, args)), ...result ? [createCommandInputMessage(`<local-command-stdout>${result}</local-command-stdout>`)] : [], ...metaMessages] : [createUserMessage({
276075
276143
  content: prepareUserContent({
276076
276144
  inputString: formatCommandInput(command, args),
276077
276145
  precedingInputBlocks
@@ -282997,7 +283065,7 @@ var init_user = __esm(() => {
282997
283065
  deviceId,
282998
283066
  sessionId: getSessionId(),
282999
283067
  email: getEmail(),
283000
- appVersion: "1.2.0",
283068
+ appVersion: "1.2.1",
283001
283069
  platform: getHostPlatformForAnalytics(),
283002
283070
  organizationUuid,
283003
283071
  accountUuid,
@@ -284062,7 +284130,7 @@ async function initializeBetaTracing(resource) {
284062
284130
  });
284063
284131
  logs.setGlobalLoggerProvider(loggerProvider);
284064
284132
  setLoggerProvider(loggerProvider);
284065
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.2.0");
284133
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.2.1");
284066
284134
  setEventLogger(eventLogger);
284067
284135
  process.on("beforeExit", async () => {
284068
284136
  await loggerProvider?.forceFlush();
@@ -284102,7 +284170,7 @@ async function initializeTelemetry() {
284102
284170
  const platform2 = getPlatform();
284103
284171
  const baseAttributes = {
284104
284172
  [ATTR_SERVICE_NAME4]: "claude-code",
284105
- [ATTR_SERVICE_VERSION4]: "1.2.0"
284173
+ [ATTR_SERVICE_VERSION4]: "1.2.1"
284106
284174
  };
284107
284175
  if (platform2 === "wsl") {
284108
284176
  const wslVersion = getWslVersion();
@@ -284147,7 +284215,7 @@ async function initializeTelemetry() {
284147
284215
  } catch {}
284148
284216
  };
284149
284217
  registerCleanup(shutdownTelemetry2);
284150
- return meterProvider2.getMeter("com.anthropic.claude_code", "1.2.0");
284218
+ return meterProvider2.getMeter("com.anthropic.claude_code", "1.2.1");
284151
284219
  }
284152
284220
  const meterProvider = new MeterProvider4({
284153
284221
  resource,
@@ -284167,7 +284235,7 @@ async function initializeTelemetry() {
284167
284235
  });
284168
284236
  logs.setGlobalLoggerProvider(loggerProvider);
284169
284237
  setLoggerProvider(loggerProvider);
284170
- const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.2.0");
284238
+ const eventLogger = logs.getLogger("com.anthropic.claude_code.events", "1.2.1");
284171
284239
  setEventLogger(eventLogger);
284172
284240
  logForDebugging("[3P telemetry] Event logger set successfully");
284173
284241
  process.on("beforeExit", async () => {
@@ -284229,7 +284297,7 @@ Current timeout: ${timeoutMs}ms
284229
284297
  }
284230
284298
  };
284231
284299
  registerCleanup(shutdownTelemetry);
284232
- return meterProvider.getMeter("com.anthropic.claude_code", "1.2.0");
284300
+ return meterProvider.getMeter("com.anthropic.claude_code", "1.2.1");
284233
284301
  }
284234
284302
  async function flushTelemetry() {
284235
284303
  const meterProvider = getMeterProvider();
@@ -285419,7 +285487,7 @@ function detectLinuxGlobPatternWarnings() {
285419
285487
  }
285420
285488
  async function getDoctorDiagnostic() {
285421
285489
  const installationType = await getCurrentInstallationType();
285422
- const version = typeof MACRO !== "undefined" ? "1.2.0" : "unknown";
285490
+ const version = typeof MACRO !== "undefined" ? "1.2.1" : "unknown";
285423
285491
  const installationPath = await getInstallationPath();
285424
285492
  const invokedBinary = getInvokedBinary();
285425
285493
  const multipleInstallations = await detectMultipleInstallations();
@@ -286360,8 +286428,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286360
286428
  const maxVersion = await getMaxVersion();
286361
286429
  if (maxVersion && gt(version, maxVersion)) {
286362
286430
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version} to ${maxVersion}`);
286363
- if (gte("1.2.0", maxVersion)) {
286364
- logForDebugging(`Native installer: current version ${"1.2.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
286431
+ if (gte("1.2.1", maxVersion)) {
286432
+ logForDebugging(`Native installer: current version ${"1.2.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
286365
286433
  logEvent("tengu_native_update_skipped_max_version", {
286366
286434
  latency_ms: Date.now() - startTime,
286367
286435
  max_version: maxVersion,
@@ -286372,7 +286440,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
286372
286440
  version = maxVersion;
286373
286441
  }
286374
286442
  }
286375
- if (!forceReinstall && version === "1.2.0" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286443
+ if (!forceReinstall && version === "1.2.1" && await versionIsAvailable(version) && await isPossibleLocalClawdBinary(executablePath)) {
286376
286444
  logForDebugging(`Found ${version} at ${executablePath}, skipping install`);
286377
286445
  logEvent("tengu_native_update_complete", {
286378
286446
  latency_ms: Date.now() - startTime,
@@ -288932,7 +289000,7 @@ function GlimmerMessage(t0) {
288932
289000
  const baseColorStr = theme[messageColor];
288933
289001
  const baseRGB = baseColorStr ? parseRGB(baseColorStr) : null;
288934
289002
  if (baseRGB) {
288935
- const interpolated = interpolateColor(baseRGB, ERROR_RED, stalledIntensity);
289003
+ const interpolated = interpolateColor(baseRGB, STALLED_DIM, stalledIntensity);
288936
289004
  const color2 = toRGBColor(interpolated);
288937
289005
  let t53;
288938
289006
  if ($2[17] !== color2) {
@@ -289243,7 +289311,7 @@ function GlimmerMessage(t0) {
289243
289311
  }
289244
289312
  return t7;
289245
289313
  }
289246
- var jsx_dev_runtime122, ERROR_RED;
289314
+ var jsx_dev_runtime122, STALLED_DIM;
289247
289315
  var init_GlimmerMessage = __esm(() => {
289248
289316
  init_stringWidth();
289249
289317
  init_ink2();
@@ -289251,10 +289319,10 @@ var init_GlimmerMessage = __esm(() => {
289251
289319
  init_theme();
289252
289320
  init_utils9();
289253
289321
  jsx_dev_runtime122 = __toESM(require_jsx_dev_runtime(), 1);
289254
- ERROR_RED = {
289255
- r: 171,
289256
- g: 43,
289257
- b: 63
289322
+ STALLED_DIM = {
289323
+ r: 55,
289324
+ g: 48,
289325
+ b: 140
289258
289326
  };
289259
289327
  });
289260
289328
 
@@ -289334,7 +289402,7 @@ function SpinnerGlyph(t0) {
289334
289402
  const baseColorStr = theme[messageColor];
289335
289403
  const baseRGB = baseColorStr ? parseRGB(baseColorStr) : null;
289336
289404
  if (baseRGB) {
289337
- const interpolated = interpolateColor(baseRGB, ERROR_RED2, stalledIntensity);
289405
+ const interpolated = interpolateColor(baseRGB, STALLED_DIM2, stalledIntensity);
289338
289406
  return /* @__PURE__ */ jsx_dev_runtime124.jsxDEV(ThemedBox_default, {
289339
289407
  flexWrap: "wrap",
289340
289408
  height: 1,
@@ -289384,7 +289452,7 @@ function SpinnerGlyph(t0) {
289384
289452
  }
289385
289453
  return t4;
289386
289454
  }
289387
- var jsx_dev_runtime124, DEFAULT_CHARACTERS, SPINNER_FRAMES, REDUCED_MOTION_DOT = "●", REDUCED_MOTION_CYCLE_MS = 2000, ERROR_RED2;
289455
+ var jsx_dev_runtime124, DEFAULT_CHARACTERS, SPINNER_FRAMES, REDUCED_MOTION_DOT = "●", REDUCED_MOTION_CYCLE_MS = 2000, STALLED_DIM2;
289388
289456
  var init_SpinnerGlyph = __esm(() => {
289389
289457
  init_ink2();
289390
289458
  init_theme();
@@ -289392,10 +289460,10 @@ var init_SpinnerGlyph = __esm(() => {
289392
289460
  jsx_dev_runtime124 = __toESM(require_jsx_dev_runtime(), 1);
289393
289461
  DEFAULT_CHARACTERS = getDefaultCharacters();
289394
289462
  SPINNER_FRAMES = [...DEFAULT_CHARACTERS, ...[...DEFAULT_CHARACTERS].reverse()];
289395
- ERROR_RED2 = {
289396
- r: 171,
289397
- g: 43,
289398
- b: 63
289463
+ STALLED_DIM2 = {
289464
+ r: 55,
289465
+ g: 48,
289466
+ b: 140
289399
289467
  };
289400
289468
  });
289401
289469
 
@@ -330761,7 +330829,7 @@ function getAnthropicEnvMetadata() {
330761
330829
  function getBuildAgeMinutes() {
330762
330830
  if (false)
330763
330831
  ;
330764
- const buildTime = new Date("2026-04-14T18:16:06.737Z").getTime();
330832
+ const buildTime = new Date("2026-04-15T02:12:12.680Z").getTime();
330765
330833
  if (isNaN(buildTime))
330766
330834
  return;
330767
330835
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -342113,7 +342181,7 @@ function ThinkNormalBanner({ onReady }) {
342113
342181
  }, undefined, false, undefined, this),
342114
342182
  /* @__PURE__ */ jsx_dev_runtime151.jsxDEV(ThemedText, {
342115
342183
  dimColor: true,
342116
- children: " Default pipeline. Lattice memory is fallback-only."
342184
+ children: " Default pipeline restored."
342117
342185
  }, undefined, false, undefined, this)
342118
342186
  ]
342119
342187
  }, undefined, true, undefined, this);
@@ -342202,8 +342270,7 @@ for the next change.`, THINKNORMAL_PROMPT = `[THINK HARDER DEACTIVATED — defau
342202
342270
 
342203
342271
  Resume standard operation:
342204
342272
  • Normal tool use and response pipeline.
342205
- Lattice memory scoring returns to fallback-only mode.
342206
- • Memory priming and 5-phase refinement are no longer required,
342273
+ 5-phase refinement is no longer required,
342207
342274
  though careful reasoning is always encouraged.`, call3 = async (onDone, _context, args) => {
342208
342275
  const { extractChain: extractChain2, validateCommandChain: validateCommandChain2, parseCommandChain: parseCommandChain2, chainWarning: chainWarning2 } = await Promise.resolve().then(() => (init_commandChaining(), exports_commandChaining));
342209
342276
  const { ownArgs: _ownArgs, nextCmd } = extractChain2(args ?? "");
@@ -342223,7 +342290,7 @@ Resume standard operation:
342223
342290
  return /* @__PURE__ */ jsx_dev_runtime151.jsxDEV(ThinkHarderBanner, {
342224
342291
  onReady: () => onDone(undefined, {
342225
342292
  display: "system",
342226
- shouldQuery: !nextCmd,
342293
+ shouldQuery: false,
342227
342294
  metaMessages: [THINKHARDER_PROMPT],
342228
342295
  nextInput: nextCmd ?? undefined,
342229
342296
  submitNextInput: nextCmd ? true : undefined
@@ -342236,7 +342303,7 @@ Resume standard operation:
342236
342303
  return /* @__PURE__ */ jsx_dev_runtime151.jsxDEV(ThinkNormalBanner, {
342237
342304
  onReady: () => onDone(undefined, {
342238
342305
  display: "system",
342239
- shouldQuery: !nextCmd,
342306
+ shouldQuery: false,
342240
342307
  metaMessages: [THINKNORMAL_PROMPT],
342241
342308
  nextInput: nextCmd ?? undefined,
342242
342309
  submitNextInput: nextCmd ? true : undefined
@@ -359087,7 +359154,7 @@ function Feedback({
359087
359154
  platform: env3.platform,
359088
359155
  gitRepo: envInfo.isGit,
359089
359156
  terminal: env3.terminal,
359090
- version: "1.2.0",
359157
+ version: "1.2.1",
359091
359158
  transcript: normalizeMessagesForAPI(messages),
359092
359159
  errors: sanitizedErrors,
359093
359160
  lastApiRequest: getLastAPIRequest(),
@@ -359279,7 +359346,7 @@ function Feedback({
359279
359346
  ", ",
359280
359347
  env3.terminal,
359281
359348
  ", v",
359282
- "1.2.0"
359349
+ "1.2.1"
359283
359350
  ]
359284
359351
  }, undefined, true, undefined, this)
359285
359352
  ]
@@ -359385,7 +359452,7 @@ ${sanitizedDescription}
359385
359452
  ` + `**Environment Info**
359386
359453
  ` + `- Platform: ${env3.platform}
359387
359454
  ` + `- Terminal: ${env3.terminal}
359388
- ` + `- Version: ${"1.2.0"}
359455
+ ` + `- Version: ${"1.2.1"}
359389
359456
  ` + `- Feedback ID: ${feedbackId}
359390
359457
  ` + `
359391
359458
  **Errors**
@@ -362013,7 +362080,7 @@ function buildPrimarySection() {
362013
362080
  }, undefined, false, undefined, this);
362014
362081
  return [{
362015
362082
  label: "Version",
362016
- value: "1.2.0"
362083
+ value: "1.2.1"
362017
362084
  }, {
362018
362085
  label: "Session name",
362019
362086
  value: nameValue
@@ -366612,7 +366679,7 @@ function Config({
366612
366679
  }
366613
366680
  }, undefined, false, undefined, this)
366614
366681
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime175.jsxDEV(ChannelDowngradeDialog, {
366615
- currentVersion: "1.2.0",
366682
+ currentVersion: "1.2.1",
366616
366683
  onChoice: (choice) => {
366617
366684
  setShowSubmenu(null);
366618
366685
  setTabsHidden(false);
@@ -366624,7 +366691,7 @@ function Config({
366624
366691
  autoUpdatesChannel: "stable"
366625
366692
  };
366626
366693
  if (choice === "stay") {
366627
- newSettings.minimumVersion = "1.2.0";
366694
+ newSettings.minimumVersion = "1.2.1";
366628
366695
  }
366629
366696
  updateSettingsForSource("userSettings", newSettings);
366630
366697
  setSettingsData((prev_27) => ({
@@ -372902,6 +372969,19 @@ var init_telegramKill = __esm(() => {
372902
372969
  });
372903
372970
 
372904
372971
  // src/services/telegram/telegramBot.ts
372972
+ var exports_telegramBot = {};
372973
+ __export(exports_telegramBot, {
372974
+ validateTelegramToken: () => validateTelegramToken,
372975
+ stopTelegram: () => stopTelegram,
372976
+ sendTelegramMessage: () => sendTelegramMessage,
372977
+ onTelegramMessage: () => onTelegramMessage,
372978
+ isTelegramConfigured: () => isTelegramConfigured,
372979
+ isTelegramActive: () => isTelegramActive,
372980
+ initTelegramWithCredentials: () => initTelegramWithCredentials,
372981
+ initTelegram: () => initTelegram,
372982
+ getTelegramChatId: () => getTelegramChatId,
372983
+ getPendingTelegramMessage: () => getPendingTelegramMessage
372984
+ });
372905
372985
  async function api(method, body = {}) {
372906
372986
  const url3 = `https://api.telegram.org/bot${_token}/${method}`;
372907
372987
  const res = await fetch(url3, {
@@ -372941,6 +373021,14 @@ async function sendTelegramMessage(text) {
372941
373021
  function getPendingTelegramMessage() {
372942
373022
  return _queue.shift() ?? null;
372943
373023
  }
373024
+ function onTelegramMessage(cb) {
373025
+ _listeners.push(cb);
373026
+ return () => {
373027
+ const i2 = _listeners.indexOf(cb);
373028
+ if (i2 !== -1)
373029
+ _listeners.splice(i2, 1);
373030
+ };
373031
+ }
372944
373032
  function getTelegramChatId() {
372945
373033
  return _chatId;
372946
373034
  }
@@ -373024,6 +373112,9 @@ Ready to receive commands.`);
373024
373112
  logForDebugging(`[telegram] Init failed: ${e}`, { level: "warn" });
373025
373113
  }
373026
373114
  }
373115
+ function stopTelegram() {
373116
+ _polling = false;
373117
+ }
373027
373118
  async function pollLoop() {
373028
373119
  while (_polling) {
373029
373120
  try {
@@ -373038,7 +373129,7 @@ async function pollLoop() {
373038
373129
  }
373039
373130
  for (const update of resp.result) {
373040
373131
  _lastUpdateId = Math.max(_lastUpdateId, update.update_id);
373041
- handleUpdate(update);
373132
+ await handleUpdate(update);
373042
373133
  }
373043
373134
  } catch (e) {
373044
373135
  if (_polling) {
@@ -373048,7 +373139,7 @@ async function pollLoop() {
373048
373139
  }
373049
373140
  }
373050
373141
  }
373051
- function handleUpdate(update) {
373142
+ async function handleUpdate(update) {
373052
373143
  const msg = update.message;
373053
373144
  if (!msg?.text)
373054
373145
  return;
@@ -373073,7 +373164,18 @@ function handleUpdate(update) {
373073
373164
  });
373074
373165
  return;
373075
373166
  }
373076
- _queue.push(text);
373167
+ if (isDirectorActive()) {
373168
+ _queue.push(text);
373169
+ } else {
373170
+ sendTelegramMessage(`Starting director mode: ${text.slice(0, 100)}...`);
373171
+ try {
373172
+ const { enqueue: enqueue2 } = await Promise.resolve().then(() => (init_messageQueueManager(), exports_messageQueueManager));
373173
+ enqueue2({ value: `/director ${text}`, mode: "prompt", priority: "now" });
373174
+ } catch (e) {
373175
+ _queue.push(text);
373176
+ logForDebugging(`[telegram] Failed to auto-start director: ${e}`);
373177
+ }
373178
+ }
373077
373179
  for (const cb of _listeners) {
373078
373180
  try {
373079
373181
  cb(text);
@@ -373106,6 +373208,7 @@ var init_telegramBot = __esm(() => {
373106
373208
  init_debug();
373107
373209
  init_telegramSignals();
373108
373210
  init_telegramKill();
373211
+ init_directorEngine();
373109
373212
  _queue = [];
373110
373213
  _listeners = [];
373111
373214
  });
@@ -373120,6 +373223,9 @@ function getDirectorTask() {
373120
373223
  function isDirectorActive() {
373121
373224
  return _task !== "";
373122
373225
  }
373226
+ function getNotifyMedium() {
373227
+ return _notifyMedium;
373228
+ }
373123
373229
  function resetDirector() {
373124
373230
  _round = 0;
373125
373231
  _task = "";
@@ -373127,6 +373233,7 @@ function resetDirector() {
373127
373233
  _startGitRef = "";
373128
373234
  _projectPath = "";
373129
373235
  _taskStartTime = 0;
373236
+ _notifyMedium = "desktop";
373130
373237
  stopHeartbeat();
373131
373238
  }
373132
373239
  function detectStopSignal(text) {
@@ -373135,7 +373242,7 @@ function detectStopSignal(text) {
373135
373242
  return label;
373136
373243
  return null;
373137
373244
  }
373138
- async function startDirectorTask(task, projectPath, maxRounds) {
373245
+ async function startDirectorTask(task, projectPath, maxRounds, medium) {
373139
373246
  const state = await loadDirectorState();
373140
373247
  if (shouldPrune(state)) {
373141
373248
  pruneMemory(state);
@@ -373149,6 +373256,7 @@ async function startDirectorTask(task, projectPath, maxRounds) {
373149
373256
  _projectId = project.id;
373150
373257
  _maxRounds = maxRounds ?? 20;
373151
373258
  _projectPath = projectPath;
373259
+ _notifyMedium = medium ?? (isTelegramActive() ? "telegram" : "desktop");
373152
373260
  _startGitRef = await captureGitRef(projectPath);
373153
373261
  startHeartbeat();
373154
373262
  const context7 = getProjectContext(state, project.id);
@@ -373216,12 +373324,17 @@ async function sendHeartbeatUpdate() {
373216
373324
  Task: ${_task.slice(0, 100)}
373217
373325
  Round: ${_round}/${isFinite(_maxRounds) ? _maxRounds : "∞"}
373218
373326
  Elapsed: ${elapsed} min`;
373219
- if (isTelegramActive()) {
373220
- sendTelegramMessage(msg);
373221
- }
373222
- sendDesktopNotification("localclawd Director", msg);
373327
+ await sendDirectorNotification("localclawd Director — Heartbeat", msg);
373223
373328
  logForDebugging(`[director] Heartbeat sent at ${elapsed}min`);
373224
373329
  }
373330
+ async function sendDirectorNotification(title, message) {
373331
+ if (_notifyMedium === "telegram" && isTelegramActive()) {
373332
+ sendTelegramMessage(`*${title}*
373333
+ ${message}`);
373334
+ } else {
373335
+ sendDesktopNotification(title, message);
373336
+ }
373337
+ }
373225
373338
  async function sendDesktopNotification(title, message) {
373226
373339
  try {
373227
373340
  const { execFile: execFile6 } = await import("child_process");
@@ -373325,7 +373438,7 @@ ${status}`;
373325
373438
  return "Unable to generate change summary.";
373326
373439
  }
373327
373440
  }
373328
- var _round = 0, _task = "", _projectId = "", _maxRounds = 20, _startGitRef = "", _projectPath = "", _heartbeatTimer = null, _taskStartTime = 0, STOP_PATTERNS, HEARTBEAT_INTERVAL_MS2;
373441
+ var _round = 0, _task = "", _projectId = "", _maxRounds = 20, _startGitRef = "", _projectPath = "", _heartbeatTimer = null, _taskStartTime = 0, _notifyMedium = "desktop", STOP_PATTERNS, HEARTBEAT_INTERVAL_MS2;
373329
373442
  var init_directorEngine = __esm(() => {
373330
373443
  init_directorMemoryOps();
373331
373444
  init_debug();
@@ -373367,12 +373480,12 @@ function DirectorBanner({
373367
373480
  children: [
373368
373481
  /* @__PURE__ */ jsx_dev_runtime195.jsxDEV(ThemedText, {
373369
373482
  bold: true,
373370
- color: "#f59e0b",
373483
+ color: "#818cf8",
373371
373484
  children: `◆ Director [round ${roundDisplay}]${badgeStr}`
373372
373485
  }, undefined, false, undefined, this),
373373
373486
  /* @__PURE__ */ jsx_dev_runtime195.jsxDEV(ThemedText, {
373374
373487
  dimColor: true,
373375
- color: "#f59e0b",
373488
+ color: "#818cf8",
373376
373489
  children: ` ↳ Task: ${task.slice(0, 80)}${task.length > 80 ? "..." : ""}`
373377
373490
  }, undefined, false, undefined, this)
373378
373491
  ]
@@ -373434,7 +373547,7 @@ function DirectorStatus({
373434
373547
  children: [
373435
373548
  /* @__PURE__ */ jsx_dev_runtime195.jsxDEV(ThemedText, {
373436
373549
  bold: true,
373437
- color: "#f59e0b",
373550
+ color: "#818cf8",
373438
373551
  children: "◆ Director Status"
373439
373552
  }, undefined, false, undefined, this),
373440
373553
  /* @__PURE__ */ jsx_dev_runtime195.jsxDEV(ThemedBox_default, {
@@ -373471,11 +373584,10 @@ var React58, jsx_dev_runtime195, DEFAULT_MAX_ROUNDS = 20, call19 = async (onDone
373471
373584
  }
373472
373585
  if (task && !isDirectorActive()) {
373473
373586
  const cwd2 = getOriginalCwd();
373474
- const { prompt } = await startDirectorTask(task, cwd2, DEFAULT_MAX_ROUNDS);
373475
- if (isTelegramActive()) {
373476
- sendTelegramMessage(`◆ Director starting task:
373587
+ const medium = isTelegramActive() ? "telegram" : "desktop";
373588
+ const { prompt } = await startDirectorTask(task, cwd2, DEFAULT_MAX_ROUNDS, medium);
373589
+ sendDirectorNotification("Director", `Starting task:
373477
373590
  ${task.slice(0, 200)}`);
373478
- }
373479
373591
  return /* @__PURE__ */ jsx_dev_runtime195.jsxDEV(DirectorBanner, {
373480
373592
  round: 1,
373481
373593
  maxRounds: DEFAULT_MAX_ROUNDS,
@@ -373494,14 +373606,12 @@ ${task.slice(0, 200)}`);
373494
373606
  globalStopSignal.reset();
373495
373607
  const round2 = getDirectorRound();
373496
373608
  const changeSummary = await getChangeSummary();
373497
- resetDirector();
373498
- if (isTelegramActive()) {
373499
- const summaryMsg = changeSummary ? `
373609
+ const summaryMsg = changeSummary ? `
373500
373610
 
373501
373611
  Changes:
373502
373612
  ${changeSummary}` : "";
373503
- sendTelegramMessage(`Director stopped via /stop after ${round2} rounds${summaryMsg}`);
373504
- }
373613
+ sendDirectorNotification("Director Stopped", `Stopped via /stop after ${round2} rounds${summaryMsg}`);
373614
+ resetDirector();
373505
373615
  return /* @__PURE__ */ jsx_dev_runtime195.jsxDEV(DirectorDone, {
373506
373616
  round: round2,
373507
373617
  reason: "stopped via /stop",
@@ -373514,13 +373624,16 @@ ${changeSummary}` : "";
373514
373624
  lastText = extractLastAssistantText(prev);
373515
373625
  return prev;
373516
373626
  });
373517
- if (isTelegramActive() && lastText.trim()) {
373627
+ if (lastText.trim()) {
373518
373628
  const round2 = getDirectorRound();
373519
373629
  const preview = lastText.slice(0, 1200);
373520
373630
  const suffix = lastText.length > 1200 ? `
373521
373631
  ...(truncated)` : "";
373522
- sendTelegramMessage(`Director round ${round2}:
373632
+ if (getNotifyMedium() === "telegram" && isTelegramActive()) {
373633
+ const { sendTelegramMessage: sendTelegramMessage2 } = await Promise.resolve().then(() => (init_telegramBot(), exports_telegramBot));
373634
+ sendTelegramMessage2(`Director round ${round2}:
373523
373635
  ${preview}${suffix}`);
373636
+ }
373524
373637
  }
373525
373638
  const telegramMsg = getPendingTelegramMessage();
373526
373639
  const result = await reviewAndContinue(lastText, telegramMsg);
@@ -373528,14 +373641,12 @@ ${preview}${suffix}`);
373528
373641
  const round2 = getDirectorRound();
373529
373642
  const reason = result.reason ?? "completed";
373530
373643
  const changeSummary = await getChangeSummary();
373531
- resetDirector();
373532
- if (isTelegramActive()) {
373533
- const summaryMsg = changeSummary ? `
373644
+ const summaryMsg = changeSummary ? `
373534
373645
 
373535
373646
  Changes:
373536
373647
  ${changeSummary}` : "";
373537
- sendTelegramMessage(`Director finished: ${reason} (${round2} rounds)${summaryMsg}`);
373538
- }
373648
+ sendDirectorNotification("Director — Complete", `Finished: ${reason} (${round2} rounds)${summaryMsg}`);
373649
+ resetDirector();
373539
373650
  return /* @__PURE__ */ jsx_dev_runtime195.jsxDEV(DirectorDone, {
373540
373651
  round: round2,
373541
373652
  reason,
@@ -373861,7 +373972,7 @@ var init_keepgoing = __esm(() => {
373861
373972
  STOP_PATTERNS2 = [
373862
373973
  { pattern: /TASK[_ ]COMPLETE:/i, label: "task complete" },
373863
373974
  { pattern: /NEEDS[_ ]INPUT:/i, label: "paused — needs input" },
373864
- { pattern: /\bFINISHED\b/, label: "finished" },
373975
+ { pattern: /\bFINISHED\b/i, label: "finished" },
373865
373976
  { pattern: /ALL[_ ]DONE\b/i, label: "all done" },
373866
373977
  { pattern: /WORK[_ ]COMPLETE:/i, label: "work complete" }
373867
373978
  ];
@@ -374995,7 +375106,7 @@ var init_thinkharder2 = __esm(() => {
374995
375106
  type: "local-jsx",
374996
375107
  name: "thinkharder",
374997
375108
  aliases: ["th"],
374998
- description: "Enable careful mode: model double-checks its work at each step and queries memory more frequently. Use /thinknormal to return to default.",
375109
+ description: "Enable careful mode: 5-phase verification pipeline (ORIENT DRAFT CRITIQUE REFINE → VERIFY). Use /thinknormal to return to default.",
374999
375110
  load: () => Promise.resolve().then(() => (init_thinkharder(), exports_thinkharder))
375000
375111
  };
375001
375112
  thinkharder_default = thinkharder;
@@ -375008,7 +375119,7 @@ var init_thinknormal_index = __esm(() => {
375008
375119
  type: "local-jsx",
375009
375120
  name: "thinknormal",
375010
375121
  aliases: ["tn"],
375011
- description: "Return to default pipeline. Disables /thinkharder careful mode and lattice memory is fallback-only.",
375122
+ description: "Return to default pipeline. Disables /thinkharder careful mode.",
375012
375123
  load: async () => {
375013
375124
  const mod = await Promise.resolve().then(() => (init_thinkharder(), exports_thinkharder));
375014
375125
  return { call: mod.callNormal };
@@ -376669,7 +376780,7 @@ function Help(t0) {
376669
376780
  let t6;
376670
376781
  if ($2[31] !== tabs) {
376671
376782
  t6 = /* @__PURE__ */ jsx_dev_runtime208.jsxDEV(Tabs, {
376672
- title: `localclawd v${"1.2.0"}`,
376783
+ title: `localclawd v${"1.2.1"}`,
376673
376784
  color: "professionalBlue",
376674
376785
  defaultTab: "general",
376675
376786
  children: tabs
@@ -392902,7 +393013,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
392902
393013
  return [];
392903
393014
  }
392904
393015
  }
392905
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.2.0") {
393016
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.2.1") {
392906
393017
  if (process.env.USER_TYPE === "ant") {
392907
393018
  const changelog = MACRO.VERSION_CHANGELOG;
392908
393019
  if (changelog) {
@@ -392929,7 +393040,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.2.0") {
392929
393040
  releaseNotes
392930
393041
  };
392931
393042
  }
392932
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.2.0") {
393043
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.2.1") {
392933
393044
  if (process.env.USER_TYPE === "ant") {
392934
393045
  const changelog = MACRO.VERSION_CHANGELOG;
392935
393046
  if (changelog) {
@@ -394187,7 +394298,7 @@ function getRecentActivitySync() {
394187
394298
  return cachedActivity;
394188
394299
  }
394189
394300
  function getLogoDisplayData() {
394190
- const version = process.env.DEMO_VERSION ?? "1.2.0";
394301
+ const version = process.env.DEMO_VERSION ?? "1.2.1";
394191
394302
  const serverUrl = getDirectConnectServerUrl();
394192
394303
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
394193
394304
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -395294,7 +395405,7 @@ function Logo() {
395294
395405
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
395295
395406
  t2 = () => {
395296
395407
  const currentConfig = getGlobalConfig();
395297
- if (currentConfig.lastReleaseNotesSeen === "1.2.0") {
395408
+ if (currentConfig.lastReleaseNotesSeen === "1.2.1") {
395298
395409
  return;
395299
395410
  }
395300
395411
  saveGlobalConfig(_temp326);
@@ -395953,12 +396064,12 @@ function Logo() {
395953
396064
  return t41;
395954
396065
  }
395955
396066
  function _temp326(current) {
395956
- if (current.lastReleaseNotesSeen === "1.2.0") {
396067
+ if (current.lastReleaseNotesSeen === "1.2.1") {
395957
396068
  return current;
395958
396069
  }
395959
396070
  return {
395960
396071
  ...current,
395961
- lastReleaseNotesSeen: "1.2.0"
396072
+ lastReleaseNotesSeen: "1.2.1"
395962
396073
  };
395963
396074
  }
395964
396075
  function _temp241(s_0) {
@@ -426437,7 +426548,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
426437
426548
  smapsRollup,
426438
426549
  platform: process.platform,
426439
426550
  nodeVersion: process.version,
426440
- ccVersion: "1.2.0"
426551
+ ccVersion: "1.2.1"
426441
426552
  };
426442
426553
  }
426443
426554
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -427022,7 +427133,7 @@ var init_bridge_kick = __esm(() => {
427022
427133
  var call59 = async () => {
427023
427134
  return {
427024
427135
  type: "text",
427025
- value: `${"1.2.0"} (built ${"2026-04-14T18:16:06.737Z"})`
427136
+ value: `${"1.2.1"} (built ${"2026-04-15T02:12:12.680Z"})`
427026
427137
  };
427027
427138
  }, version, version_default;
427028
427139
  var init_version = __esm(() => {
@@ -434966,7 +435077,7 @@ function generateHtmlReport(data, insights) {
434966
435077
  </html>`;
434967
435078
  }
434968
435079
  function buildExportData(data, insights, facets, remoteStats) {
434969
- const version2 = typeof MACRO !== "undefined" ? "1.2.0" : "unknown";
435080
+ const version2 = typeof MACRO !== "undefined" ? "1.2.1" : "unknown";
434970
435081
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
434971
435082
  const facets_summary = {
434972
435083
  total: facets.size,
@@ -439112,7 +439223,7 @@ var init_sessionStorage = __esm(() => {
439112
439223
  init_settings2();
439113
439224
  init_slowOperations();
439114
439225
  init_uuid();
439115
- VERSION6 = typeof MACRO !== "undefined" ? "1.2.0" : "unknown";
439226
+ VERSION6 = typeof MACRO !== "undefined" ? "1.2.1" : "unknown";
439116
439227
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
439117
439228
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
439118
439229
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -440314,7 +440425,7 @@ var init_filesystem = __esm(() => {
440314
440425
  });
440315
440426
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
440316
440427
  const nonce = randomBytes19(16).toString("hex");
440317
- return join129(getClaudeTempDir(), "bundled-skills", "1.2.0", nonce);
440428
+ return join129(getClaudeTempDir(), "bundled-skills", "1.2.1", nonce);
440318
440429
  });
440319
440430
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
440320
440431
  });
@@ -447530,9 +447641,9 @@ var require_extra_typings = __commonJS((exports, module) => {
447530
447641
  });
447531
447642
 
447532
447643
  // node_modules/@commander-js/extra-typings/esm.mjs
447533
- var import__2, program, createCommand, createArgument, createOption, CommanderError, InvalidArgumentError, InvalidOptionArgumentError, Command, Argument, Option, Help2;
447644
+ var import__3, program, createCommand, createArgument, createOption, CommanderError, InvalidArgumentError, InvalidOptionArgumentError, Command, Argument, Option, Help2;
447534
447645
  var init_esm3 = __esm(() => {
447535
- import__2 = __toESM(require_extra_typings(), 1);
447646
+ import__3 = __toESM(require_extra_typings(), 1);
447536
447647
  ({
447537
447648
  program,
447538
447649
  createCommand,
@@ -447545,7 +447656,7 @@ var init_esm3 = __esm(() => {
447545
447656
  Argument,
447546
447657
  Option,
447547
447658
  Help: Help2
447548
- } = import__2.default);
447659
+ } = import__3.default);
447549
447660
  });
447550
447661
 
447551
447662
  // src/utils/apiPreconnect.ts
@@ -449599,7 +449710,7 @@ function buildSystemInitMessage(inputs) {
449599
449710
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
449600
449711
  apiKeySource: getAnthropicApiKeyWithSource().source,
449601
449712
  betas: getSdkBetas(),
449602
- claude_code_version: "1.2.0",
449713
+ claude_code_version: "1.2.1",
449603
449714
  output_style: outputStyle2,
449604
449715
  agents: inputs.agents.map((agent) => agent.agentType),
449605
449716
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill) => skill.name),
@@ -464178,7 +464289,7 @@ var init_useVoiceEnabled = __esm(() => {
464178
464289
  function getSemverPart(version2) {
464179
464290
  return `${import_semver10.major(version2, { loose: true })}.${import_semver10.minor(version2, { loose: true })}.${import_semver10.patch(version2, { loose: true })}`;
464180
464291
  }
464181
- function useUpdateNotification(updatedVersion, initialVersion = "1.2.0") {
464292
+ function useUpdateNotification(updatedVersion, initialVersion = "1.2.1") {
464182
464293
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react214.useState(() => getSemverPart(initialVersion));
464183
464294
  if (!updatedVersion) {
464184
464295
  return null;
@@ -464218,7 +464329,7 @@ function AutoUpdater({
464218
464329
  return;
464219
464330
  }
464220
464331
  if (false) {}
464221
- const currentVersion = "1.2.0";
464332
+ const currentVersion = "1.2.1";
464222
464333
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
464223
464334
  let latestVersion = await getLatestVersion(channel);
464224
464335
  const isDisabled = isAutoUpdaterDisabled();
@@ -464429,12 +464540,12 @@ function NativeAutoUpdater({
464429
464540
  logEvent("tengu_native_auto_updater_start", {});
464430
464541
  try {
464431
464542
  const maxVersion = await getMaxVersion();
464432
- if (maxVersion && gt("1.2.0", maxVersion)) {
464543
+ if (maxVersion && gt("1.2.1", maxVersion)) {
464433
464544
  const msg = await getMaxVersionMessage();
464434
464545
  setMaxVersionIssue(msg ?? "affects your version");
464435
464546
  }
464436
464547
  const result = await installLatest(channel);
464437
- const currentVersion = "1.2.0";
464548
+ const currentVersion = "1.2.1";
464438
464549
  const latencyMs = Date.now() - startTime;
464439
464550
  if (result.lockFailed) {
464440
464551
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -464569,17 +464680,17 @@ function PackageManagerAutoUpdater(t0) {
464569
464680
  const maxVersion = await getMaxVersion();
464570
464681
  if (maxVersion && latest && gt(latest, maxVersion)) {
464571
464682
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
464572
- if (gte("1.2.0", maxVersion)) {
464573
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.2.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
464683
+ if (gte("1.2.1", maxVersion)) {
464684
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.2.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
464574
464685
  setUpdateAvailable(false);
464575
464686
  return;
464576
464687
  }
464577
464688
  latest = maxVersion;
464578
464689
  }
464579
- const hasUpdate = latest && !gte("1.2.0", latest) && !shouldSkipVersion(latest);
464690
+ const hasUpdate = latest && !gte("1.2.1", latest) && !shouldSkipVersion(latest);
464580
464691
  setUpdateAvailable(!!hasUpdate);
464581
464692
  if (hasUpdate) {
464582
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.2.0"} -> ${latest}`);
464693
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.2.1"} -> ${latest}`);
464583
464694
  }
464584
464695
  };
464585
464696
  $2[0] = t1;
@@ -464613,7 +464724,7 @@ function PackageManagerAutoUpdater(t0) {
464613
464724
  wrap: "truncate",
464614
464725
  children: [
464615
464726
  "currentVersion: ",
464616
- "1.2.0"
464727
+ "1.2.1"
464617
464728
  ]
464618
464729
  }, undefined, true, undefined, this);
464619
464730
  $2[3] = verbose;
@@ -468434,7 +468545,7 @@ function useTypeahead({
468434
468545
  const debouncedFetchSlackChannels = useDebounceCallback(fetchSlackChannels, 150);
468435
468546
  const updateSuggestions = import_react227.useCallback(async (value, inputCursorOffset) => {
468436
468547
  const effectiveCursorOffset = inputCursorOffset ?? cursorOffsetRef.current;
468437
- if (suppressSuggestions) {
468548
+ if (suppressSuggestions && !(mode === "prompt" && isCommandInput(value))) {
468438
468549
  debouncedFetchFileSuggestions.cancel();
468439
468550
  clearSuggestions();
468440
468551
  return;
@@ -472171,7 +472282,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
472171
472282
  project_dir: getOriginalCwd(),
472172
472283
  added_dirs: addedDirs
472173
472284
  },
472174
- version: "1.2.0",
472285
+ version: "1.2.1",
472175
472286
  output_style: {
472176
472287
  name: outputStyleName
472177
472288
  },
@@ -479380,6 +479491,9 @@ function CancelRequestHandler(props) {
479380
479491
  if (abortSignal !== undefined && !abortSignal.aborted) {
479381
479492
  logEvent("tengu_cancel", cancelProps);
479382
479493
  setToolUseConfirmQueue(() => []);
479494
+ if (hasCommandsInQueue()) {
479495
+ globalStopSignal.set(true);
479496
+ }
479383
479497
  onCancel();
479384
479498
  return;
479385
479499
  }
@@ -479501,6 +479615,7 @@ var init_useCancelRequest = __esm(() => {
479501
479615
  init_teammateViewHelpers();
479502
479616
  init_LocalAgentTask();
479503
479617
  init_messageQueueManager();
479618
+ init_telegramSignals();
479504
479619
  init_sdkEventQueue();
479505
479620
  import_react260 = __toESM(require_react(), 1);
479506
479621
  });
@@ -483739,7 +483854,7 @@ async function submitTranscriptShare(messages, trigger, appearanceId) {
483739
483854
  } catch {}
483740
483855
  const data = {
483741
483856
  trigger,
483742
- version: "1.2.0",
483857
+ version: "1.2.1",
483743
483858
  platform: process.platform,
483744
483859
  transcript,
483745
483860
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -500204,7 +500319,7 @@ function appendToLog(path17, message) {
500204
500319
  cwd: getFsImplementation().cwd(),
500205
500320
  userType: process.env.USER_TYPE,
500206
500321
  sessionId: getSessionId(),
500207
- version: "1.2.0"
500322
+ version: "1.2.1"
500208
500323
  };
500209
500324
  getLogWriter(path17).write(messageWithTimestamp);
500210
500325
  }
@@ -504203,8 +504318,8 @@ async function getEnvLessBridgeConfig() {
504203
504318
  }
504204
504319
  async function checkEnvLessBridgeMinVersion() {
504205
504320
  const cfg = await getEnvLessBridgeConfig();
504206
- if (cfg.min_version && lt("1.2.0", cfg.min_version)) {
504207
- return `Your version of localclawd (${"1.2.0"}) is too old for Remote Control.
504321
+ if (cfg.min_version && lt("1.2.1", cfg.min_version)) {
504322
+ return `Your version of localclawd (${"1.2.1"}) is too old for Remote Control.
504208
504323
  Version ${cfg.min_version} or higher is required. Run \`localclawd update\` to update.`;
504209
504324
  }
504210
504325
  return null;
@@ -504676,7 +504791,7 @@ async function initBridgeCore(params) {
504676
504791
  const rawApi = createBridgeApiClient({
504677
504792
  baseUrl,
504678
504793
  getAccessToken,
504679
- runnerVersion: "1.2.0",
504794
+ runnerVersion: "1.2.1",
504680
504795
  onDebug: logForDebugging,
504681
504796
  onAuth401,
504682
504797
  getTrustedDeviceToken
@@ -510395,7 +510510,7 @@ async function startMCPServer(cwd3, debug4, verbose) {
510395
510510
  setCwd(cwd3);
510396
510511
  const server = new Server({
510397
510512
  name: "claude/tengu",
510398
- version: "1.2.0"
510513
+ version: "1.2.1"
510399
510514
  }, {
510400
510515
  capabilities: {
510401
510516
  tools: {}
@@ -511476,7 +511591,7 @@ function WelcomeLogo() {
511476
511591
  dimColor: true,
511477
511592
  children: [
511478
511593
  "v",
511479
- "1.2.0"
511594
+ "1.2.1"
511480
511595
  ]
511481
511596
  }, undefined, true, undefined, this)
511482
511597
  ]
@@ -511667,7 +511782,7 @@ __export(exports_update, {
511667
511782
  });
511668
511783
  async function update() {
511669
511784
  logEvent("tengu_update_check", {});
511670
- writeToStdout(`Current version: ${"1.2.0"}
511785
+ writeToStdout(`Current version: ${"1.2.1"}
511671
511786
  `);
511672
511787
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
511673
511788
  writeToStdout(`Checking for updates to ${channel} version...
@@ -511742,8 +511857,8 @@ async function update() {
511742
511857
  writeToStdout(`localclawd is managed by Homebrew.
511743
511858
  `);
511744
511859
  const latest = await getLatestVersion(channel);
511745
- if (latest && !gte("1.2.0", latest)) {
511746
- writeToStdout(`Update available: ${"1.2.0"} → ${latest}
511860
+ if (latest && !gte("1.2.1", latest)) {
511861
+ writeToStdout(`Update available: ${"1.2.1"} → ${latest}
511747
511862
  `);
511748
511863
  writeToStdout(`
511749
511864
  `);
@@ -511759,8 +511874,8 @@ async function update() {
511759
511874
  writeToStdout(`localclawd is managed by winget.
511760
511875
  `);
511761
511876
  const latest = await getLatestVersion(channel);
511762
- if (latest && !gte("1.2.0", latest)) {
511763
- writeToStdout(`Update available: ${"1.2.0"} → ${latest}
511877
+ if (latest && !gte("1.2.1", latest)) {
511878
+ writeToStdout(`Update available: ${"1.2.1"} → ${latest}
511764
511879
  `);
511765
511880
  writeToStdout(`
511766
511881
  `);
@@ -511774,8 +511889,8 @@ async function update() {
511774
511889
  writeToStdout(`localclawd is managed by apk.
511775
511890
  `);
511776
511891
  const latest = await getLatestVersion(channel);
511777
- if (latest && !gte("1.2.0", latest)) {
511778
- writeToStdout(`Update available: ${"1.2.0"} → ${latest}
511892
+ if (latest && !gte("1.2.1", latest)) {
511893
+ writeToStdout(`Update available: ${"1.2.1"} → ${latest}
511779
511894
  `);
511780
511895
  writeToStdout(`
511781
511896
  `);
@@ -511840,11 +511955,11 @@ async function update() {
511840
511955
  `);
511841
511956
  await gracefulShutdown(1);
511842
511957
  }
511843
- if (result.latestVersion === "1.2.0") {
511844
- writeToStdout(source_default.green(`localclawd is up to date (${"1.2.0"})`) + `
511958
+ if (result.latestVersion === "1.2.1") {
511959
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.2.1"})`) + `
511845
511960
  `);
511846
511961
  } else {
511847
- writeToStdout(source_default.green(`Successfully updated from ${"1.2.0"} to version ${result.latestVersion}`) + `
511962
+ writeToStdout(source_default.green(`Successfully updated from ${"1.2.1"} to version ${result.latestVersion}`) + `
511848
511963
  `);
511849
511964
  await regenerateCompletionCache();
511850
511965
  }
@@ -511904,12 +512019,12 @@ async function update() {
511904
512019
  `);
511905
512020
  await gracefulShutdown(1);
511906
512021
  }
511907
- if (latestVersion === "1.2.0") {
511908
- writeToStdout(source_default.green(`localclawd is up to date (${"1.2.0"})`) + `
512022
+ if (latestVersion === "1.2.1") {
512023
+ writeToStdout(source_default.green(`localclawd is up to date (${"1.2.1"})`) + `
511909
512024
  `);
511910
512025
  await gracefulShutdown(0);
511911
512026
  }
511912
- writeToStdout(`New version available: ${latestVersion} (current: ${"1.2.0"})
512027
+ writeToStdout(`New version available: ${latestVersion} (current: ${"1.2.1"})
511913
512028
  `);
511914
512029
  writeToStdout(`Installing update...
511915
512030
  `);
@@ -511954,7 +512069,7 @@ async function update() {
511954
512069
  logForDebugging(`update: Installation status: ${status2}`);
511955
512070
  switch (status2) {
511956
512071
  case "success":
511957
- writeToStdout(source_default.green(`Successfully updated from ${"1.2.0"} to version ${latestVersion}`) + `
512072
+ writeToStdout(source_default.green(`Successfully updated from ${"1.2.1"} to version ${latestVersion}`) + `
511958
512073
  `);
511959
512074
  await regenerateCompletionCache();
511960
512075
  break;
@@ -513196,7 +513311,7 @@ Run with --debug for more details.
513196
513311
  }
513197
513312
  }
513198
513313
  logForDiagnosticsNoPII("info", "started", {
513199
- version: "1.2.0",
513314
+ version: "1.2.1",
513200
513315
  is_native_binary: isInBundledMode()
513201
513316
  });
513202
513317
  registerCleanup(async () => {
@@ -513980,7 +514095,7 @@ Usage: localclawd --remote "your task description"`, () => gracefulShutdown(1));
513980
514095
  pendingHookMessages
513981
514096
  }, renderAndRun);
513982
514097
  }
513983
- }).version("1.2.0 (localclawd)", "-v, --version", "Output the version number");
514098
+ }).version("1.2.1 (localclawd)", "-v, --version", "Output the version number");
513984
514099
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
513985
514100
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
513986
514101
  if (canUserConfigureAdvisor()) {
@@ -514480,7 +514595,7 @@ if (false) {}
514480
514595
  async function main2() {
514481
514596
  const args = process.argv.slice(2);
514482
514597
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
514483
- console.log(`${"1.2.0"} (localclawd)`);
514598
+ console.log(`${"1.2.1"} (localclawd)`);
514484
514599
  return;
514485
514600
  }
514486
514601
  const {
@@ -514563,4 +514678,4 @@ localclawd crashed: ${msg}
514563
514678
  process.exit(1);
514564
514679
  });
514565
514680
 
514566
- //# debugId=0699A41E241B05D864756E2164756E21
514681
+ //# debugId=5E9ABEC662C27B3364756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "localclawd",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Local-first coding CLI for vLLM, Ollama, and OpenAI-compatible backends.",
5
5
  "private": false,
6
6
  "type": "module",