@iruidong/code 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/QUICKSTART.md CHANGED
@@ -10,7 +10,7 @@ ruidong --version
10
10
  Expected output:
11
11
 
12
12
  ```bash
13
- Ruidong Code v0.1.8
13
+ Ruidong Code v0.1.10
14
14
  ```
15
15
 
16
16
  ## 2. Configure your shell
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // ruidong v0.1.8 (built from source)
2
+ // ruidong v0.1.10 (built from source)
3
3
  // Copyright (c) Anthropic PBC. All rights reserved.
4
4
  import { createRequire as __createRequire } from "module";const require=__createRequire(import.meta.url);
5
5
  var __defProp = Object.defineProperty;
@@ -81,8 +81,8 @@ var __callDispose = (stack, error, hasError) => {
81
81
  var PUBLIC_CLI_VERSION, BUILD_TIME, API_COMPAT_VERSION, API_COMPAT_VERSION_BASE;
82
82
  var init_version = __esm({
83
83
  "build-src/src/constants/version.ts"() {
84
- PUBLIC_CLI_VERSION = "0.1.8";
85
- BUILD_TIME = "2026-04-03T12:30:00.000Z";
84
+ PUBLIC_CLI_VERSION = "0.1.10";
85
+ BUILD_TIME = "2026-04-04T03:45:00.000Z";
86
86
  API_COMPAT_VERSION = "2.1.88";
87
87
  API_COMPAT_VERSION_BASE = API_COMPAT_VERSION.match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/)?.[0];
88
88
  }
@@ -24967,6 +24967,100 @@ var init_fullscreen = __esm({
24967
24967
  }
24968
24968
  });
24969
24969
 
24970
+ // build-src/src/utils/inputTrace.ts
24971
+ function isInputTraceEnabled() {
24972
+ return isEnvTruthy(process.env.RUIDONG_DEBUG_INPUT) || isEnvTruthy(process.env.CLAUDE_CODE_DEBUG_INPUT);
24973
+ }
24974
+ function ensureInputTraceLogging() {
24975
+ if (!isInputTraceEnabled() || inputTraceInitialized) {
24976
+ return;
24977
+ }
24978
+ inputTraceInitialized = true;
24979
+ enableDebugLogging();
24980
+ logForDebugging(
24981
+ `${INPUT_TRACE_PREFIX} enabled pid=${process.pid} term=${process.env.TERM ?? "unset"} termProgram=${process.env.TERM_PROGRAM ?? "unset"} ssh=${process.env.SSH_CONNECTION ? "yes" : "no"} debugLog=${getDebugLogPath()}`
24982
+ );
24983
+ }
24984
+ function logInputTrace(message) {
24985
+ if (!isInputTraceEnabled()) {
24986
+ return;
24987
+ }
24988
+ ensureInputTraceLogging();
24989
+ logForDebugging(`${INPUT_TRACE_PREFIX} ${message}`);
24990
+ }
24991
+ function previewTraceValue(value) {
24992
+ if (value == null) {
24993
+ return String(value);
24994
+ }
24995
+ if (value.length <= MAX_PREVIEW_CHARS) {
24996
+ return JSON.stringify(value);
24997
+ }
24998
+ const preview = JSON.stringify(value.slice(0, MAX_PREVIEW_CHARS));
24999
+ return `${preview}...(+${value.length - MAX_PREVIEW_CHARS} chars)`;
25000
+ }
25001
+ function formatHexBytes(input) {
25002
+ const values = Array.from(input.slice(0, MAX_HEX_BYTES)).map(
25003
+ (byte) => byte.toString(16).padStart(2, "0")
25004
+ );
25005
+ if (input.length > MAX_HEX_BYTES) {
25006
+ values.push(`...(+${input.length - MAX_HEX_BYTES} bytes)`);
25007
+ }
25008
+ return values.join(" ");
25009
+ }
25010
+ function formatChunkForTrace(input) {
25011
+ if (input === null) {
25012
+ return "flush";
25013
+ }
25014
+ const text = typeof input === "string" ? input : input.toString("utf8");
25015
+ const bytes = typeof input === "string" ? Buffer.from(input, "utf8") : input;
25016
+ return `text=${previewTraceValue(text)} hex=${formatHexBytes(bytes)}`;
25017
+ }
25018
+ function summarizeParsedKey(item) {
25019
+ const flags = [
25020
+ item.ctrl ? "ctrl" : null,
25021
+ item.shift ? "shift" : null,
25022
+ item.meta ? "meta" : null,
25023
+ item.option ? "option" : null,
25024
+ item.super ? "super" : null,
25025
+ item.fn ? "fn" : null,
25026
+ item.isPasted ? "pasted" : null
25027
+ ].filter(Boolean).join("+");
25028
+ return `key(name=${item.name ?? ""}, seq=${previewTraceValue(item.sequence)}, raw=${previewTraceValue(item.raw)}, flags=${flags || "plain"})`;
25029
+ }
25030
+ function summarizeParsedMouse(item) {
25031
+ return `mouse(button=${item.button}, col=${item.x}, row=${item.y}, seq=${previewTraceValue(item.sequence)})`;
25032
+ }
25033
+ function summarizeParsedInputs(items) {
25034
+ if (items.length === 0) {
25035
+ return "none";
25036
+ }
25037
+ return items.map((item) => {
25038
+ switch (item.kind) {
25039
+ case "key":
25040
+ return summarizeParsedKey(item);
25041
+ case "mouse":
25042
+ return summarizeParsedMouse(item);
25043
+ case "response":
25044
+ return `response(type=${item.response.type}, seq=${previewTraceValue(item.sequence)})`;
25045
+ }
25046
+ }).join(" | ");
25047
+ }
25048
+ function summarizeInputKey(key) {
25049
+ const active = Object.entries(key).filter(([, value]) => value).map(([name]) => name);
25050
+ return active.length > 0 ? active.join("+") : "plain";
25051
+ }
25052
+ var INPUT_TRACE_PREFIX, MAX_PREVIEW_CHARS, MAX_HEX_BYTES, inputTraceInitialized;
25053
+ var init_inputTrace = __esm({
25054
+ "build-src/src/utils/inputTrace.ts"() {
25055
+ init_debug();
25056
+ init_envUtils();
25057
+ INPUT_TRACE_PREFIX = "[input-trace]";
25058
+ MAX_PREVIEW_CHARS = 120;
25059
+ MAX_HEX_BYTES = 64;
25060
+ inputTraceInitialized = false;
25061
+ }
25062
+ });
25063
+
24970
25064
  // build-src/src/ink/termio/ansi.ts
24971
25065
  function isEscFinal(byte) {
24972
25066
  return byte >= 48 && byte <= 126;
@@ -30737,6 +30831,7 @@ var init_App = __esm({
30737
30831
  init_earlyInput();
30738
30832
  init_envUtils();
30739
30833
  init_fullscreen();
30834
+ init_inputTrace();
30740
30835
  init_log();
30741
30836
  init_emitter();
30742
30837
  init_input_event();
@@ -30827,6 +30922,7 @@ var init_App = __esm({
30827
30922
  }), children: this.state.error ? /* @__PURE__ */ jsx7(ErrorOverview, { error: this.state.error }) : this.props.children }) }) }) }) }) });
30828
30923
  }
30829
30924
  componentDidMount() {
30925
+ logInputTrace(`mount stdinTTY=${this.props.stdin.isTTY} stdoutTTY=${this.props.stdout.isTTY} columns=${this.props.terminalColumns} rows=${this.props.terminalRows}`);
30830
30926
  if (this.props.stdout.isTTY && !isEnvTruthy(process.env.CLAUDE_CODE_ACCESSIBILITY)) {
30831
30927
  this.props.stdout.write(HIDE_CURSOR);
30832
30928
  }
@@ -30863,11 +30959,13 @@ var init_App = __esm({
30863
30959
  }
30864
30960
  stdin.setEncoding("utf8");
30865
30961
  if (isEnabled2) {
30962
+ logInputTrace(`setRawMode(enable) count=${this.rawModeEnabledCount} listeners=${stdin.listenerCount("readable")}`);
30866
30963
  if (this.rawModeEnabledCount === 0) {
30867
30964
  stopCapturingEarlyInput();
30868
30965
  stdin.ref();
30869
30966
  stdin.setRawMode(true);
30870
30967
  stdin.addListener("readable", this.handleReadable);
30968
+ logInputTrace(`rawMode enabled listeners=${stdin.listenerCount("readable")}`);
30871
30969
  this.props.stdout.write(EBP);
30872
30970
  this.props.stdout.write(EFE);
30873
30971
  if (supportsExtendedKeys()) {
@@ -30889,6 +30987,7 @@ var init_App = __esm({
30889
30987
  return;
30890
30988
  }
30891
30989
  if (--this.rawModeEnabledCount === 0) {
30990
+ logInputTrace(`setRawMode(disable) listeners=${stdin.listenerCount("readable")}`);
30892
30991
  this.props.stdout.write(DISABLE_MODIFY_OTHER_KEYS);
30893
30992
  this.props.stdout.write(DISABLE_KITTY_KEYBOARD);
30894
30993
  this.props.stdout.write(DFE);
@@ -30910,8 +31009,10 @@ var init_App = __esm({
30910
31009
  };
30911
31010
  // Process input through the parser and handle the results
30912
31011
  processInput = (input) => {
31012
+ logInputTrace(`processInput raw=${formatChunkForTrace(input)} prevMode=${this.keyParseState.mode} prevIncomplete=${previewTraceValue(this.keyParseState.incomplete)}`);
30913
31013
  const [keys, newState] = parseMultipleKeypresses(this.keyParseState, input);
30914
31014
  this.keyParseState = newState;
31015
+ logInputTrace(`processInput parsed count=${keys.length} nextMode=${this.keyParseState.mode} incomplete=${previewTraceValue(this.keyParseState.incomplete)} items=${summarizeParsedInputs(keys)}`);
30915
31016
  if (keys.length > 0) {
30916
31017
  reconciler_default.discreteUpdates(processKeysInBatch, this, keys, void 0, void 0);
30917
31018
  }
@@ -30925,14 +31026,18 @@ var init_App = __esm({
30925
31026
  handleReadable = () => {
30926
31027
  const now = Date.now();
30927
31028
  if (now - this.lastStdinTime > STDIN_RESUME_GAP_MS) {
31029
+ logInputTrace(`stdin resume gap=${now - this.lastStdinTime}ms`);
30928
31030
  this.props.onStdinResume?.();
30929
31031
  }
30930
31032
  this.lastStdinTime = now;
30931
31033
  try {
31034
+ logInputTrace(`readable start buffered=${this.props.stdin.readableLength} listeners=${this.props.stdin.listenerCount("readable")}`);
30932
31035
  let chunk2;
30933
31036
  while ((chunk2 = this.props.stdin.read()) !== null) {
31037
+ logInputTrace(`readable chunk ${formatChunkForTrace(chunk2)}`);
30934
31038
  this.processInput(chunk2);
30935
31039
  }
31040
+ logInputTrace("readable drained");
30936
31041
  } catch (error) {
30937
31042
  logError(error);
30938
31043
  const {
@@ -30944,6 +31049,7 @@ var init_App = __esm({
30944
31049
  });
30945
31050
  stdin.addListener("readable", this.handleReadable);
30946
31051
  }
31052
+ logInputTrace(`readable error recovered listeners=${stdin.listenerCount("readable")}`);
30947
31053
  }
30948
31054
  };
30949
31055
  handleInput = (input) => {
@@ -75148,7 +75254,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
75148
75254
  {
75149
75255
  name: "ruidong-code",
75150
75256
  title: "ruidong",
75151
- version: "0.1.8",
75257
+ version: "0.1.10",
75152
75258
  description: "Ruidong Code agentic coding tool",
75153
75259
  websiteUrl: PRODUCT_URL
75154
75260
  },
@@ -75571,7 +75677,7 @@ var init_client3 = __esm({
75571
75677
  {
75572
75678
  name: "ruidong-code",
75573
75679
  title: "ruidong",
75574
- version: "0.1.8",
75680
+ version: "0.1.10",
75575
75681
  description: "Ruidong Code agentic coding tool",
75576
75682
  websiteUrl: PRODUCT_URL
75577
75683
  },
@@ -87270,7 +87376,7 @@ async function installGlobalPackage(specificVersion) {
87270
87376
  );
87271
87377
  logEvent("tengu_auto_updater_lock_contention", {
87272
87378
  pid: process.pid,
87273
- currentVersion: "0.1.8"
87379
+ currentVersion: "0.1.10"
87274
87380
  });
87275
87381
  return "in_progress";
87276
87382
  }
@@ -87279,7 +87385,7 @@ async function installGlobalPackage(specificVersion) {
87279
87385
  if (!env.isRunningWithBun() && env.isNpmFromWindowsPath()) {
87280
87386
  logError(new Error("Windows NPM detected in WSL environment"));
87281
87387
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
87282
- currentVersion: "0.1.8"
87388
+ currentVersion: "0.1.10"
87283
87389
  });
87284
87390
  console.error(`
87285
87391
  Error: Windows NPM detected in WSL
@@ -87946,7 +88052,7 @@ function detectLinuxGlobPatternWarnings() {
87946
88052
  }
87947
88053
  async function getDoctorDiagnostic() {
87948
88054
  const installationType = await getCurrentInstallationType();
87949
- const version2 = typeof MACRO !== "undefined" && "0.1.8" ? "0.1.8" : "unknown";
88055
+ const version2 = typeof MACRO !== "undefined" && "0.1.10" ? "0.1.10" : "unknown";
87950
88056
  const installationPath = await getInstallationPath();
87951
88057
  const invokedBinary = getInvokedBinary();
87952
88058
  const multipleInstallations = await detectMultipleInstallations();
@@ -89026,7 +89132,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
89026
89132
  version2 = maxVersion;
89027
89133
  }
89028
89134
  }
89029
- if (!forceReinstall && version2 === "0.1.8" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
89135
+ if (!forceReinstall && version2 === "0.1.10" && await versionIsAvailable(version2) && await isPossibleClaudeBinary(executablePath)) {
89030
89136
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
89031
89137
  logEvent("tengu_native_update_complete", {
89032
89138
  latency_ms: Date.now() - startTime,
@@ -170987,6 +171093,73 @@ import { writeFile as writeFile28 } from "fs/promises";
170987
171093
  import isEqual6 from "lodash-es/isEqual.js";
170988
171094
  import memoize55 from "lodash-es/memoize.js";
170989
171095
  import { basename as basename30, dirname as dirname37, isAbsolute as isAbsolute22, join as join94, resolve as resolve29, sep as sep20 } from "path";
171096
+ function isLegacyRuidongMarketplaceEntry(name, entry) {
171097
+ return name === LEGACY_RUIDONG_MARKETPLACE_NAME || entry.source.source === "github" && entry.source.repo === LEGACY_RUIDONG_MARKETPLACE_REPO;
171098
+ }
171099
+ function tryMigrateLegacyRuidongMarketplaceCache(entry) {
171100
+ const fs6 = getFsImplementation();
171101
+ const officialInstallLocation = join94(
171102
+ getMarketplacesCacheDir(),
171103
+ OFFICIAL_MARKETPLACE_NAME
171104
+ );
171105
+ const candidatePaths = [
171106
+ join94(entry.installLocation, ".claude-plugin", "marketplace.json"),
171107
+ entry.installLocation
171108
+ ];
171109
+ for (const sourcePath of candidatePaths) {
171110
+ if (!fs6.existsSync(sourcePath)) {
171111
+ continue;
171112
+ }
171113
+ try {
171114
+ fs6.mkdirSync(dirname37(officialInstallLocation));
171115
+ fs6.copyFileSync(sourcePath, officialInstallLocation);
171116
+ return officialInstallLocation;
171117
+ } catch (error) {
171118
+ logForDebugging(
171119
+ `Failed migrating legacy Ruidong marketplace cache from ${sourcePath}: ${errorMessage(error)}`,
171120
+ { level: "warn" }
171121
+ );
171122
+ }
171123
+ }
171124
+ return null;
171125
+ }
171126
+ async function normalizeKnownMarketplacesConfig(config2) {
171127
+ const legacyEntries = Object.entries(config2).filter(([
171128
+ name,
171129
+ entry
171130
+ ]) => isLegacyRuidongMarketplaceEntry(name, entry));
171131
+ if (legacyEntries.length === 0) {
171132
+ return config2;
171133
+ }
171134
+ const normalized = { ...config2 };
171135
+ let changed = false;
171136
+ if (!normalized[OFFICIAL_MARKETPLACE_NAME]) {
171137
+ const [, legacyEntry] = legacyEntries[0];
171138
+ const migratedInstallLocation = tryMigrateLegacyRuidongMarketplaceCache(legacyEntry) ?? join94(getMarketplacesCacheDir(), OFFICIAL_MARKETPLACE_NAME);
171139
+ normalized[OFFICIAL_MARKETPLACE_NAME] = {
171140
+ source: OFFICIAL_MARKETPLACE_SOURCE,
171141
+ installLocation: migratedInstallLocation,
171142
+ lastUpdated: legacyEntry.lastUpdated,
171143
+ autoUpdate: true
171144
+ };
171145
+ changed = true;
171146
+ logForDebugging(
171147
+ `Migrated legacy marketplace '${legacyEntries[0][0]}' to official source ${formatSourceForDisplay(OFFICIAL_MARKETPLACE_SOURCE)}`,
171148
+ { level: "info" }
171149
+ );
171150
+ }
171151
+ for (const [name] of legacyEntries) {
171152
+ if (name === OFFICIAL_MARKETPLACE_NAME) {
171153
+ continue;
171154
+ }
171155
+ delete normalized[name];
171156
+ changed = true;
171157
+ }
171158
+ if (changed) {
171159
+ await saveKnownMarketplacesConfig(normalized);
171160
+ }
171161
+ return normalized;
171162
+ }
170990
171163
  function getKnownMarketplacesFile() {
170991
171164
  return join94(getPluginsDirectory(), "known_marketplaces.json");
170992
171165
  }
@@ -171049,7 +171222,7 @@ async function loadKnownMarketplacesConfig() {
171049
171222
  });
171050
171223
  throw new ConfigParseError(errorMsg, configFile, data);
171051
171224
  }
171052
- return parsed.data;
171225
+ return await normalizeKnownMarketplacesConfig(parsed.data);
171053
171226
  } catch (error) {
171054
171227
  if (isENOENT(error)) {
171055
171228
  return {};
@@ -171342,6 +171515,8 @@ async function gitClone(gitUrl, targetPath, ref, sparsePaths) {
171342
171515
  const args = [
171343
171516
  "-c",
171344
171517
  "core.sshCommand=ssh -o BatchMode=yes -o StrictHostKeyChecking=yes",
171518
+ "-c",
171519
+ "credential.helper=",
171345
171520
  "clone",
171346
171521
  "--depth",
171347
171522
  "1"
@@ -172437,7 +172612,7 @@ async function setMarketplaceAutoUpdate(name, autoUpdate) {
172437
172612
  }
172438
172613
  logForDebugging(`Set autoUpdate=${autoUpdate} for marketplace: ${name}`);
172439
172614
  }
172440
- var GIT_NO_PROMPT_ENV, DEFAULT_PLUGIN_GIT_TIMEOUT_MS, getMarketplace;
172615
+ var LEGACY_RUIDONG_MARKETPLACE_NAME, LEGACY_RUIDONG_MARKETPLACE_REPO, GIT_NO_PROMPT_ENV, DEFAULT_PLUGIN_GIT_TIMEOUT_MS, getMarketplace;
172441
172616
  var init_marketplaceManager = __esm({
172442
172617
  "build-src/src/utils/plugins/marketplaceManager.ts"() {
172443
172618
  init_growthbook();
@@ -172461,6 +172636,8 @@ var init_marketplaceManager = __esm({
172461
172636
  init_pluginIdentifier();
172462
172637
  init_pluginOptionsStorage();
172463
172638
  init_schemas();
172639
+ LEGACY_RUIDONG_MARKETPLACE_NAME = "ruidong-marketplace-seed";
172640
+ LEGACY_RUIDONG_MARKETPLACE_REPO = "Jackwwg83/ruidong-marketplace-seed";
172464
172641
  GIT_NO_PROMPT_ENV = {
172465
172642
  GIT_TERMINAL_PROMPT: "0",
172466
172643
  // Prevent terminal credential prompts
@@ -185082,31 +185259,49 @@ var init_Cursor = __esm({
185082
185259
  });
185083
185260
 
185084
185261
  // build-src/src/utils/modifiers.ts
185262
+ function loadNativeModifiers() {
185263
+ if (process.platform !== "darwin") {
185264
+ return null;
185265
+ }
185266
+ if (nativeModuleAvailable === false) {
185267
+ return null;
185268
+ }
185269
+ try {
185270
+ const nativeModule4 = __require("modifiers-napi");
185271
+ nativeModuleAvailable = true;
185272
+ return nativeModule4;
185273
+ } catch (error) {
185274
+ nativeModuleAvailable = false;
185275
+ logForDebugging(
185276
+ `modifiers-napi unavailable; Apple Terminal modifier probing disabled: ${error instanceof Error ? error.message : String(error)}`,
185277
+ { level: "warn" }
185278
+ );
185279
+ return null;
185280
+ }
185281
+ }
185085
185282
  function prewarmModifiers() {
185086
185283
  if (prewarmed || process.platform !== "darwin") {
185087
185284
  return;
185088
185285
  }
185089
185286
  prewarmed = true;
185090
- try {
185091
- const { prewarm } = __require("modifiers-napi");
185092
- prewarm();
185093
- } catch {
185094
- }
185287
+ loadNativeModifiers()?.prewarm?.();
185095
185288
  }
185096
185289
  function isModifierPressed(modifier) {
185097
185290
  if (process.platform !== "darwin") {
185098
185291
  return false;
185099
185292
  }
185100
- const { isModifierPressed: nativeIsModifierPressed } = (
185101
- // eslint-disable-next-line @typescript-eslint/no-require-imports
185102
- __require("modifiers-napi")
185103
- );
185104
- return nativeIsModifierPressed(modifier);
185293
+ const nativeModule4 = loadNativeModifiers();
185294
+ if (!nativeModule4) {
185295
+ return false;
185296
+ }
185297
+ return nativeModule4.isModifierPressed(modifier);
185105
185298
  }
185106
- var prewarmed;
185299
+ var prewarmed, nativeModuleAvailable;
185107
185300
  var init_modifiers = __esm({
185108
185301
  "build-src/src/utils/modifiers.ts"() {
185302
+ init_debug();
185109
185303
  prewarmed = false;
185304
+ nativeModuleAvailable = null;
185110
185305
  }
185111
185306
  });
185112
185307
 
@@ -185223,6 +185418,9 @@ function useTextInput({
185223
185418
  return cursor.del();
185224
185419
  }
185225
185420
  function submitCurrentValue() {
185421
+ logInputTrace(
185422
+ `text-input submit reason=ctrl-submit text=${previewTraceValue(originalValue)}`
185423
+ );
185226
185424
  onSubmit?.(originalValue);
185227
185425
  return cursor;
185228
185426
  }
@@ -185292,14 +185490,22 @@ function useTextInput({
185292
185490
  function handleEnter(key) {
185293
185491
  if (multiline && cursor.offset > 0 && cursor.text[cursor.offset - 1] === "\\") {
185294
185492
  markBackslashReturnUsed();
185493
+ logInputTrace("text-input enter reason=backslash-return inserts-newline");
185295
185494
  return cursor.backspace().insert("\n");
185296
185495
  }
185297
185496
  if (key.meta || key.shift) {
185497
+ logInputTrace(
185498
+ `text-input enter reason=modifier-newline key=${summarizeInputKey(key)}`
185499
+ );
185298
185500
  return cursor.insert("\n");
185299
185501
  }
185300
185502
  if (env.terminal === "Apple_Terminal" && isModifierPressed("shift")) {
185503
+ logInputTrace("text-input enter reason=apple-terminal-shift-newline");
185301
185504
  return cursor.insert("\n");
185302
185505
  }
185506
+ logInputTrace(
185507
+ `text-input submit reason=enter key=${summarizeInputKey(key)} text=${previewTraceValue(originalValue)}`
185508
+ );
185303
185509
  onSubmit?.(originalValue);
185304
185510
  }
185305
185511
  function upOrHistoryUp() {
@@ -185425,7 +185631,11 @@ function useTextInput({
185425
185631
  }
185426
185632
  function onInput(input, key) {
185427
185633
  const filteredInput = inputFilter ? inputFilter(input, key) : input;
185634
+ logInputTrace(
185635
+ `text-input onInput raw=${previewTraceValue(input)} filtered=${previewTraceValue(filteredInput)} key=${summarizeInputKey(key)} before=${previewTraceValue(cursor.text)} offset=${cursor.offset}`
185636
+ );
185428
185637
  if (filteredInput === "" && input !== "") {
185638
+ logInputTrace("text-input filtered-out input event");
185429
185639
  return;
185430
185640
  }
185431
185641
  const coalescedSubmitSuffix = key.return ? null : getCoalescedSubmitSuffix(filteredInput);
@@ -185445,9 +185655,15 @@ function useTextInput({
185445
185655
  }
185446
185656
  setOffset(currentCursor.offset);
185447
185657
  }
185658
+ logInputTrace(
185659
+ `text-input coalesced-edit after=${previewTraceValue(currentCursor.text)} offset=${currentCursor.offset} submitSuffix=${coalescedSubmitSuffix ?? "none"}`
185660
+ );
185448
185661
  resetKillAccumulation();
185449
185662
  resetYankState();
185450
185663
  if (coalescedSubmitSuffix) {
185664
+ logInputTrace(
185665
+ `text-input submit reason=coalesced-suffix text=${previewTraceValue(currentCursor.text)}`
185666
+ );
185451
185667
  onSubmit?.(currentCursor.text);
185452
185668
  }
185453
185669
  return;
@@ -185466,10 +185682,18 @@ function useTextInput({
185466
185682
  }
185467
185683
  setOffset(nextCursor.offset);
185468
185684
  }
185685
+ logInputTrace(
185686
+ `text-input nextCursor after=${previewTraceValue(nextCursor.text)} offset=${nextCursor.offset} submitSuffix=${coalescedSubmitSuffix ?? "none"}`
185687
+ );
185469
185688
  if (coalescedSubmitSuffix) {
185689
+ logInputTrace(
185690
+ `text-input submit reason=coalesced-suffix text=${previewTraceValue(nextCursor.text)}`
185691
+ );
185470
185692
  onSubmit?.(nextCursor.text);
185471
185693
  }
185694
+ return;
185472
185695
  }
185696
+ logInputTrace("text-input handled without cursor update");
185473
185697
  }
185474
185698
  const ghostTextForRender = inlineGhostText && dim && inlineGhostText.insertPosition === offset ? { text: inlineGhostText.text, dim } : void 0;
185475
185699
  const cursorPos = cursor.getPosition();
@@ -185500,6 +185724,7 @@ var init_useTextInput = __esm({
185500
185724
  init_Cursor();
185501
185725
  init_env();
185502
185726
  init_fullscreen();
185727
+ init_inputTrace();
185503
185728
  init_modifiers();
185504
185729
  init_useDoublePress();
185505
185730
  NOOP_HANDLER = () => {
@@ -187908,7 +188133,7 @@ ${sanitizedDescription}
187908
188133
  **Environment Info**
187909
188134
  - Platform: ${env.platform}
187910
188135
  - Terminal: ${env.terminal}
187911
- - Version: ${"0.1.8"}
188136
+ - Version: ${"0.1.10"}
187912
188137
  - Feedback ID: ${feedbackId}
187913
188138
 
187914
188139
  **Errors**
@@ -254222,7 +254447,7 @@ function generateHtmlReport(data, insights) {
254222
254447
  </html>`;
254223
254448
  }
254224
254449
  function buildExportData(data, insights, facets, remoteStats) {
254225
- const version2 = typeof MACRO !== "undefined" ? "0.1.8" : "unknown";
254450
+ const version2 = typeof MACRO !== "undefined" ? "0.1.10" : "unknown";
254226
254451
  const remote_hosts_collected = remoteStats?.hosts.filter((h) => h.sessionCount > 0).map((h) => h.name);
254227
254452
  const facets_summary = {
254228
254453
  total: facets.size,
@@ -257986,7 +258211,7 @@ var init_sessionStorage = __esm({
257986
258211
  init_settings2();
257987
258212
  init_slowOperations();
257988
258213
  init_uuid();
257989
- VERSION2 = typeof MACRO !== "undefined" ? "0.1.8" : "unknown";
258214
+ VERSION2 = typeof MACRO !== "undefined" ? "0.1.10" : "unknown";
257990
258215
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
257991
258216
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
257992
258217
  EPHEMERAL_PROGRESS_TYPES = /* @__PURE__ */ new Set([
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iruidong/code",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "Ruidong Code CLI for anthropic-compatible coding workflows",
5
5
  "type": "module",
6
6
  "private": false,