@funnycode/myclaude 0.1.181 → 0.1.183

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/dist/myclaude.js CHANGED
@@ -4,8 +4,8 @@
4
4
  // MACRO - build-time constants (injected by build.ts)
5
5
  // MACRO injected by build script
6
6
  globalThis.MACRO = {
7
- VERSION: "0.1.181",
8
- BUILD_TIME: "2026-08-04T12:20:17.847Z",
7
+ VERSION: "0.1.183",
8
+ BUILD_TIME: "2026-08-04T15:53:36.897Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -119986,7 +119986,7 @@ var package_default;
119986
119986
  var init_package = __esm(() => {
119987
119987
  package_default = {
119988
119988
  name: "@funnycode/myclaude",
119989
- version: "0.1.181",
119989
+ version: "0.1.183",
119990
119990
  private: false,
119991
119991
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
119992
119992
  license: "MIT",
@@ -120009,6 +120009,7 @@ var init_package = __esm(() => {
120009
120009
  start: "bun run ./src/dev-entry.ts",
120010
120010
  test: "bun test",
120011
120011
  "test:watch": "bun test --watch",
120012
+ "test:perf": "bun test src/tests/performance-regression.test.ts",
120012
120013
  build: "bun run ./scripts/build.ts",
120013
120014
  prepublishOnly: "bun run build",
120014
120015
  version: "bun run ./src/dev-entry.ts --version"
@@ -410191,111 +410192,9 @@ function isInputModeCharacter(input) {
410191
410192
 
410192
410193
  // src/projectOnboardingState.ts
410193
410194
  import { join as join105, resolve as resolve44, basename as basename37, sep as pathSep2 } from "path";
410194
- function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath, maxDepth = 100) {
410195
- const fs13 = getFsImplementation();
410196
- if (!recursionStack) {
410197
- recursionStack = [];
410198
- }
410199
- let currentRealPath;
410200
- try {
410201
- currentRealPath = fs13.realpathSync(dirPath);
410202
- } catch (err2) {
410203
- console.warn(`[getDirectoryFingerprint] Failed to resolve real path for '${dirPath}', using original path: ${err2}`);
410204
- try {
410205
- const linkTarget = fs13.readlinkSync(dirPath);
410206
- const resolvedTarget = resolve44(dirPath, linkTarget);
410207
- currentRealPath = resolvedTarget;
410208
- } catch {
410209
- currentRealPath = dirPath;
410210
- }
410211
- }
410212
- if (recursionStack.includes(currentRealPath) || recursionStack.includes(dirPath)) {
410213
- return "";
410214
- }
410215
- recursionStack.push(currentRealPath);
410216
- if (recursionStack.length > maxDepth) {
410217
- console.warn(`[getDirectoryFingerprint] Maximum recursion depth (${maxDepth}) exceeded for '${dirPath}'`);
410218
- recursionStack.pop();
410219
- return "";
410220
- }
410221
- if (rootRealPath === undefined) {
410222
- rootRealPath = currentRealPath;
410223
- }
410224
- let entries;
410225
- try {
410226
- entries = fs13.readdirSync(dirPath, { withFileTypes: true }).map((dirent) => dirent.name);
410227
- } catch (err2) {
410228
- console.warn(`[getDirectoryFingerprint] Failed to read directory '${dirPath}': ${err2}`);
410229
- recursionStack.pop();
410230
- return "";
410231
- }
410232
- const sortedEntries = entries.sort();
410233
- const fingerprintParts = [];
410234
- try {
410235
- for (const entry of sortedEntries) {
410236
- const fullPath = join105(dirPath, entry);
410237
- try {
410238
- let isSymlink = false;
410239
- try {
410240
- const linkTarget = fs13.readlinkSync(fullPath);
410241
- isSymlink = true;
410242
- const resolvedTarget = resolve44(dirPath, linkTarget);
410243
- let targetRealPath;
410244
- try {
410245
- targetRealPath = fs13.realpathSync(resolvedTarget);
410246
- } catch (err2) {
410247
- console.warn(`[getDirectoryFingerprint] Failed to resolve target real path for symlink '${fullPath}': ${err2}`);
410248
- targetRealPath = resolvedTarget;
410249
- }
410250
- const targetLower = targetRealPath.toLowerCase();
410251
- const rootLower = rootRealPath.toLowerCase();
410252
- if (targetLower === rootLower || targetLower.startsWith(rootLower + pathSep2)) {
410253
- const stat37 = fs13.statSync(resolvedTarget);
410254
- if (stat37.isDirectory()) {
410255
- const targetBasename = basename37(resolvedTarget);
410256
- if (targetBasename === "node_modules" || targetBasename === ".git" || targetBasename === "dist" || targetBasename === "build" || targetBasename === ".next" || targetBasename === "out" || targetBasename === "coverage" || targetBasename === "target" || targetBasename === "vendor" || targetBasename === "__pycache__" || targetBasename === ".cache" || targetBasename === ".mypy_cache" || targetBasename === ".svn" || targetBasename === ".hg" || targetBasename === "venv" || targetBasename === ".venv" || targetBasename === "env") {
410257
- fingerprintParts.push(entry + "/");
410258
- continue;
410259
- }
410260
- fingerprintParts.push(entry + "/");
410261
- fingerprintParts.push(getDirectoryFingerprint(resolvedTarget, recursionStack, rootRealPath, maxDepth));
410262
- } else {
410263
- fingerprintParts.push(entry);
410264
- }
410265
- } else {
410266
- fingerprintParts.push(entry + "/");
410267
- }
410268
- } catch {
410269
- if (!isSymlink) {
410270
- const lstat7 = fs13.lstatSync(fullPath);
410271
- if (lstat7.isDirectory()) {
410272
- const targetBasename = basename37(fullPath);
410273
- if (targetBasename === "node_modules" || targetBasename === ".git" || targetBasename === "dist" || targetBasename === "build" || targetBasename === ".next" || targetBasename === "out" || targetBasename === "coverage" || targetBasename === "target" || targetBasename === "vendor" || targetBasename === "__pycache__" || targetBasename === ".cache" || targetBasename === ".mypy_cache" || targetBasename === ".svn" || targetBasename === ".hg" || targetBasename === "venv" || targetBasename === ".venv" || targetBasename === "env") {
410274
- fingerprintParts.push(entry + "/");
410275
- continue;
410276
- }
410277
- fingerprintParts.push(entry + "/");
410278
- fingerprintParts.push(getDirectoryFingerprint(fullPath, recursionStack, rootRealPath, maxDepth));
410279
- } else {
410280
- fingerprintParts.push(entry);
410281
- }
410282
- }
410283
- }
410284
- } catch (err2) {
410285
- console.warn(`[getDirectoryFingerprint] Failed to access entry '${fullPath}': ${err2}`);
410286
- continue;
410287
- }
410288
- }
410289
- } finally {
410290
- recursionStack.pop();
410291
- }
410292
- return fingerprintParts.join(`
410293
- `);
410294
- }
410295
410195
  function clearCachedSteps() {
410296
410196
  cachedSteps = null;
410297
410197
  cachedClaudeMdMtime = -1;
410298
- cachedDirFingerprint = "";
410299
410198
  cachedRootMtime = -1;
410300
410199
  cachedAt = null;
410301
410200
  }
@@ -410312,19 +410211,13 @@ function isCacheValid() {
410312
410211
  } catch {
410313
410212
  return false;
410314
410213
  }
410315
- let rootMtimeChanged = false;
410316
410214
  try {
410317
410215
  const currentRootMtime = fs13.statSync(cwd2).mtimeMs;
410318
- rootMtimeChanged = Math.abs(currentRootMtime - cachedRootMtime) > 0.5;
410216
+ if (Math.abs(currentRootMtime - cachedRootMtime) > 0.5)
410217
+ return false;
410319
410218
  } catch {
410320
410219
  return false;
410321
410220
  }
410322
- if (rootMtimeChanged) {
410323
- const currentDirFingerprint = getDirectoryFingerprint(cwd2);
410324
- if (currentDirFingerprint !== cachedDirFingerprint) {
410325
- return false;
410326
- }
410327
- }
410328
410221
  if (cachedAt !== null && Date.now() - cachedAt > CACHE_MAX_AGE_MS) {
410329
410222
  return false;
410330
410223
  }
@@ -410349,13 +410242,6 @@ function getSteps() {
410349
410242
  } catch {
410350
410243
  cachedRootMtime = -1;
410351
410244
  }
410352
- if (cachedSteps !== null) {
410353
- try {
410354
- cachedDirFingerprint = getDirectoryFingerprint(cwd2);
410355
- } catch {
410356
- cachedDirFingerprint = "";
410357
- }
410358
- }
410359
410245
  cachedAt = Date.now();
410360
410246
  cachedSteps = [
410361
410247
  {
@@ -410402,7 +410288,7 @@ function incrementProjectOnboardingSeenCount() {
410402
410288
  projectOnboardingSeenCount: current.projectOnboardingSeenCount + 1
410403
410289
  }));
410404
410290
  }
410405
- var cachedSteps = null, cachedClaudeMdMtime = -1, cachedDirFingerprint = "", cachedRootMtime = -1, cachedAt = null, CACHE_MAX_AGE_MS = 60000;
410291
+ var cachedSteps = null, cachedClaudeMdMtime = -1, cachedRootMtime = -1, cachedAt = null, CACHE_MAX_AGE_MS = 60000;
410406
410292
  var init_projectOnboardingState = __esm(() => {
410407
410293
  init_config();
410408
410294
  init_cwd2();
package/dist/myclaude.mjs CHANGED
@@ -4,8 +4,8 @@
4
4
  // MACRO - build-time constants (injected by build.ts)
5
5
  // MACRO injected by build script
6
6
  globalThis.MACRO = {
7
- VERSION: "0.1.181",
8
- BUILD_TIME: "2026-08-04T12:20:17.847Z",
7
+ VERSION: "0.1.183",
8
+ BUILD_TIME: "2026-08-04T15:53:36.897Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -119986,7 +119986,7 @@ var package_default;
119986
119986
  var init_package = __esm(() => {
119987
119987
  package_default = {
119988
119988
  name: "@funnycode/myclaude",
119989
- version: "0.1.181",
119989
+ version: "0.1.183",
119990
119990
  private: false,
119991
119991
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
119992
119992
  license: "MIT",
@@ -120009,6 +120009,7 @@ var init_package = __esm(() => {
120009
120009
  start: "bun run ./src/dev-entry.ts",
120010
120010
  test: "bun test",
120011
120011
  "test:watch": "bun test --watch",
120012
+ "test:perf": "bun test src/tests/performance-regression.test.ts",
120012
120013
  build: "bun run ./scripts/build.ts",
120013
120014
  prepublishOnly: "bun run build",
120014
120015
  version: "bun run ./src/dev-entry.ts --version"
@@ -410191,111 +410192,9 @@ function isInputModeCharacter(input) {
410191
410192
 
410192
410193
  // src/projectOnboardingState.ts
410193
410194
  import { join as join105, resolve as resolve44, basename as basename37, sep as pathSep2 } from "path";
410194
- function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath, maxDepth = 100) {
410195
- const fs13 = getFsImplementation();
410196
- if (!recursionStack) {
410197
- recursionStack = [];
410198
- }
410199
- let currentRealPath;
410200
- try {
410201
- currentRealPath = fs13.realpathSync(dirPath);
410202
- } catch (err2) {
410203
- console.warn(`[getDirectoryFingerprint] Failed to resolve real path for '${dirPath}', using original path: ${err2}`);
410204
- try {
410205
- const linkTarget = fs13.readlinkSync(dirPath);
410206
- const resolvedTarget = resolve44(dirPath, linkTarget);
410207
- currentRealPath = resolvedTarget;
410208
- } catch {
410209
- currentRealPath = dirPath;
410210
- }
410211
- }
410212
- if (recursionStack.includes(currentRealPath) || recursionStack.includes(dirPath)) {
410213
- return "";
410214
- }
410215
- recursionStack.push(currentRealPath);
410216
- if (recursionStack.length > maxDepth) {
410217
- console.warn(`[getDirectoryFingerprint] Maximum recursion depth (${maxDepth}) exceeded for '${dirPath}'`);
410218
- recursionStack.pop();
410219
- return "";
410220
- }
410221
- if (rootRealPath === undefined) {
410222
- rootRealPath = currentRealPath;
410223
- }
410224
- let entries;
410225
- try {
410226
- entries = fs13.readdirSync(dirPath, { withFileTypes: true }).map((dirent) => dirent.name);
410227
- } catch (err2) {
410228
- console.warn(`[getDirectoryFingerprint] Failed to read directory '${dirPath}': ${err2}`);
410229
- recursionStack.pop();
410230
- return "";
410231
- }
410232
- const sortedEntries = entries.sort();
410233
- const fingerprintParts = [];
410234
- try {
410235
- for (const entry of sortedEntries) {
410236
- const fullPath = join105(dirPath, entry);
410237
- try {
410238
- let isSymlink = false;
410239
- try {
410240
- const linkTarget = fs13.readlinkSync(fullPath);
410241
- isSymlink = true;
410242
- const resolvedTarget = resolve44(dirPath, linkTarget);
410243
- let targetRealPath;
410244
- try {
410245
- targetRealPath = fs13.realpathSync(resolvedTarget);
410246
- } catch (err2) {
410247
- console.warn(`[getDirectoryFingerprint] Failed to resolve target real path for symlink '${fullPath}': ${err2}`);
410248
- targetRealPath = resolvedTarget;
410249
- }
410250
- const targetLower = targetRealPath.toLowerCase();
410251
- const rootLower = rootRealPath.toLowerCase();
410252
- if (targetLower === rootLower || targetLower.startsWith(rootLower + pathSep2)) {
410253
- const stat37 = fs13.statSync(resolvedTarget);
410254
- if (stat37.isDirectory()) {
410255
- const targetBasename = basename37(resolvedTarget);
410256
- if (targetBasename === "node_modules" || targetBasename === ".git" || targetBasename === "dist" || targetBasename === "build" || targetBasename === ".next" || targetBasename === "out" || targetBasename === "coverage" || targetBasename === "target" || targetBasename === "vendor" || targetBasename === "__pycache__" || targetBasename === ".cache" || targetBasename === ".mypy_cache" || targetBasename === ".svn" || targetBasename === ".hg" || targetBasename === "venv" || targetBasename === ".venv" || targetBasename === "env") {
410257
- fingerprintParts.push(entry + "/");
410258
- continue;
410259
- }
410260
- fingerprintParts.push(entry + "/");
410261
- fingerprintParts.push(getDirectoryFingerprint(resolvedTarget, recursionStack, rootRealPath, maxDepth));
410262
- } else {
410263
- fingerprintParts.push(entry);
410264
- }
410265
- } else {
410266
- fingerprintParts.push(entry + "/");
410267
- }
410268
- } catch {
410269
- if (!isSymlink) {
410270
- const lstat7 = fs13.lstatSync(fullPath);
410271
- if (lstat7.isDirectory()) {
410272
- const targetBasename = basename37(fullPath);
410273
- if (targetBasename === "node_modules" || targetBasename === ".git" || targetBasename === "dist" || targetBasename === "build" || targetBasename === ".next" || targetBasename === "out" || targetBasename === "coverage" || targetBasename === "target" || targetBasename === "vendor" || targetBasename === "__pycache__" || targetBasename === ".cache" || targetBasename === ".mypy_cache" || targetBasename === ".svn" || targetBasename === ".hg" || targetBasename === "venv" || targetBasename === ".venv" || targetBasename === "env") {
410274
- fingerprintParts.push(entry + "/");
410275
- continue;
410276
- }
410277
- fingerprintParts.push(entry + "/");
410278
- fingerprintParts.push(getDirectoryFingerprint(fullPath, recursionStack, rootRealPath, maxDepth));
410279
- } else {
410280
- fingerprintParts.push(entry);
410281
- }
410282
- }
410283
- }
410284
- } catch (err2) {
410285
- console.warn(`[getDirectoryFingerprint] Failed to access entry '${fullPath}': ${err2}`);
410286
- continue;
410287
- }
410288
- }
410289
- } finally {
410290
- recursionStack.pop();
410291
- }
410292
- return fingerprintParts.join(`
410293
- `);
410294
- }
410295
410195
  function clearCachedSteps() {
410296
410196
  cachedSteps = null;
410297
410197
  cachedClaudeMdMtime = -1;
410298
- cachedDirFingerprint = "";
410299
410198
  cachedRootMtime = -1;
410300
410199
  cachedAt = null;
410301
410200
  }
@@ -410312,19 +410211,13 @@ function isCacheValid() {
410312
410211
  } catch {
410313
410212
  return false;
410314
410213
  }
410315
- let rootMtimeChanged = false;
410316
410214
  try {
410317
410215
  const currentRootMtime = fs13.statSync(cwd2).mtimeMs;
410318
- rootMtimeChanged = Math.abs(currentRootMtime - cachedRootMtime) > 0.5;
410216
+ if (Math.abs(currentRootMtime - cachedRootMtime) > 0.5)
410217
+ return false;
410319
410218
  } catch {
410320
410219
  return false;
410321
410220
  }
410322
- if (rootMtimeChanged) {
410323
- const currentDirFingerprint = getDirectoryFingerprint(cwd2);
410324
- if (currentDirFingerprint !== cachedDirFingerprint) {
410325
- return false;
410326
- }
410327
- }
410328
410221
  if (cachedAt !== null && Date.now() - cachedAt > CACHE_MAX_AGE_MS) {
410329
410222
  return false;
410330
410223
  }
@@ -410349,13 +410242,6 @@ function getSteps() {
410349
410242
  } catch {
410350
410243
  cachedRootMtime = -1;
410351
410244
  }
410352
- if (cachedSteps !== null) {
410353
- try {
410354
- cachedDirFingerprint = getDirectoryFingerprint(cwd2);
410355
- } catch {
410356
- cachedDirFingerprint = "";
410357
- }
410358
- }
410359
410245
  cachedAt = Date.now();
410360
410246
  cachedSteps = [
410361
410247
  {
@@ -410402,7 +410288,7 @@ function incrementProjectOnboardingSeenCount() {
410402
410288
  projectOnboardingSeenCount: current.projectOnboardingSeenCount + 1
410403
410289
  }));
410404
410290
  }
410405
- var cachedSteps = null, cachedClaudeMdMtime = -1, cachedDirFingerprint = "", cachedRootMtime = -1, cachedAt = null, CACHE_MAX_AGE_MS = 60000;
410291
+ var cachedSteps = null, cachedClaudeMdMtime = -1, cachedRootMtime = -1, cachedAt = null, CACHE_MAX_AGE_MS = 60000;
410406
410292
  var init_projectOnboardingState = __esm(() => {
410407
410293
  init_config();
410408
410294
  init_cwd2();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funnycode/myclaude",
3
- "version": "0.1.181",
3
+ "version": "0.1.183",
4
4
  "private": false,
5
5
  "description": "An open-source AI coding assistant in your terminal - powered by Claude",
6
6
  "license": "MIT",
@@ -23,6 +23,7 @@
23
23
  "start": "bun run ./src/dev-entry.ts",
24
24
  "test": "bun test",
25
25
  "test:watch": "bun test --watch",
26
+ "test:perf": "bun test src/tests/performance-regression.test.ts",
26
27
  "build": "bun run ./scripts/build.ts",
27
28
  "prepublishOnly": "bun run build",
28
29
  "version": "bun run ./src/dev-entry.ts --version"
@@ -127,4 +128,4 @@
127
128
  "overrides": {
128
129
  "node-domexception": "file:./shims/node-domexception"
129
130
  }
130
- }
131
+ }