@funnycode/myclaude 0.1.177 → 0.1.179

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.177",
8
- BUILD_TIME: "2026-08-01T22:39:23.874Z",
7
+ VERSION: "0.1.179",
8
+ BUILD_TIME: "2026-08-03T15:19:01.902Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -119947,7 +119947,7 @@ var package_default;
119947
119947
  var init_package = __esm(() => {
119948
119948
  package_default = {
119949
119949
  name: "@funnycode/myclaude",
119950
- version: "0.1.177",
119950
+ version: "0.1.179",
119951
119951
  private: false,
119952
119952
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
119953
119953
  license: "MIT",
@@ -410151,8 +410151,8 @@ function isInputModeCharacter(input) {
410151
410151
  }
410152
410152
 
410153
410153
  // src/projectOnboardingState.ts
410154
- import { join as join105, resolve as resolve44, basename as basename37 } from "path";
410155
- function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath) {
410154
+ import { join as join105, resolve as resolve44, basename as basename37, sep as pathSep2 } from "path";
410155
+ function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath, maxDepth = 100) {
410156
410156
  const fs13 = getFsImplementation();
410157
410157
  if (!recursionStack) {
410158
410158
  recursionStack = [];
@@ -410163,14 +410163,9 @@ function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath) {
410163
410163
  } catch (err2) {
410164
410164
  console.warn(`[getDirectoryFingerprint] Failed to resolve real path for '${dirPath}', using original path: ${err2}`);
410165
410165
  try {
410166
- const lstat7 = fs13.lstatSync(dirPath);
410167
- if (lstat7.isSymbolicLink()) {
410168
- const linkTarget = fs13.readlinkSync(dirPath);
410169
- const resolvedTarget = resolve44(dirPath, linkTarget);
410170
- currentRealPath = resolvedTarget;
410171
- } else {
410172
- currentRealPath = dirPath;
410173
- }
410166
+ const linkTarget = fs13.readlinkSync(dirPath);
410167
+ const resolvedTarget = resolve44(dirPath, linkTarget);
410168
+ currentRealPath = resolvedTarget;
410174
410169
  } catch {
410175
410170
  currentRealPath = dirPath;
410176
410171
  }
@@ -410179,6 +410174,11 @@ function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath) {
410179
410174
  return "";
410180
410175
  }
410181
410176
  recursionStack.push(currentRealPath);
410177
+ if (recursionStack.length > maxDepth) {
410178
+ console.warn(`[getDirectoryFingerprint] Maximum recursion depth (${maxDepth}) exceeded for '${dirPath}'`);
410179
+ recursionStack.pop();
410180
+ return "";
410181
+ }
410182
410182
  if (rootRealPath === undefined) {
410183
410183
  rootRealPath = currentRealPath;
410184
410184
  }
@@ -410208,7 +410208,9 @@ function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath) {
410208
410208
  console.warn(`[getDirectoryFingerprint] Failed to resolve target real path for symlink '${fullPath}': ${err2}`);
410209
410209
  targetRealPath = resolvedTarget;
410210
410210
  }
410211
- if (targetRealPath.startsWith(rootRealPath + "/") || targetRealPath === rootRealPath) {
410211
+ const targetLower = targetRealPath.toLowerCase();
410212
+ const rootLower = rootRealPath.toLowerCase();
410213
+ if (targetLower === rootLower || targetLower.startsWith(rootLower + pathSep2)) {
410212
410214
  const stat37 = fs13.statSync(resolvedTarget);
410213
410215
  if (stat37.isDirectory()) {
410214
410216
  const targetBasename = basename37(resolvedTarget);
@@ -410217,7 +410219,7 @@ function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath) {
410217
410219
  continue;
410218
410220
  }
410219
410221
  fingerprintParts.push(entry + "/");
410220
- fingerprintParts.push(getDirectoryFingerprint(resolvedTarget, recursionStack, rootRealPath));
410222
+ fingerprintParts.push(getDirectoryFingerprint(resolvedTarget, recursionStack, rootRealPath, maxDepth));
410221
410223
  } else {
410222
410224
  fingerprintParts.push(entry);
410223
410225
  }
@@ -410233,7 +410235,7 @@ function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath) {
410233
410235
  continue;
410234
410236
  }
410235
410237
  fingerprintParts.push(entry + "/");
410236
- fingerprintParts.push(getDirectoryFingerprint(fullPath, recursionStack, rootRealPath));
410238
+ fingerprintParts.push(getDirectoryFingerprint(fullPath, recursionStack, rootRealPath, maxDepth));
410237
410239
  } else {
410238
410240
  fingerprintParts.push(entry);
410239
410241
  }
@@ -487923,7 +487925,7 @@ var init_remember = __esm(() => {
487923
487925
  // src/skills/bundledSkills.ts
487924
487926
  import { constants as fsConstants5 } from "fs";
487925
487927
  import { mkdir as mkdir37, open as open14 } from "fs/promises";
487926
- import { dirname as dirname59, isAbsolute as isAbsolute28, join as join133, normalize as normalize13, sep as pathSep2 } from "path";
487928
+ import { dirname as dirname59, isAbsolute as isAbsolute28, join as join133, normalize as normalize13, sep as pathSep3 } from "path";
487927
487929
  function registerBundledSkill(definition) {
487928
487930
  const { files: files3 } = definition;
487929
487931
  let skillRoot;
@@ -488010,7 +488012,7 @@ async function safeWriteFile(p, content) {
488010
488012
  }
488011
488013
  function resolveSkillFilePath(baseDir, relPath) {
488012
488014
  const normalized = normalize13(relPath);
488013
- if (isAbsolute28(normalized) || normalized.split(pathSep2).includes("..") || normalized.split("/").includes("..")) {
488015
+ if (isAbsolute28(normalized) || normalized.split(pathSep3).includes("..") || normalized.split("/").includes("..")) {
488014
488016
  throw new Error(`bundled skill file path escapes skill dir: ${relPath}`);
488015
488017
  }
488016
488018
  return join133(baseDir, normalized);
@@ -566637,23 +566639,31 @@ function migrateEnableAllProjectMcpServersToSettings() {
566637
566639
  const existingEnabledServers = Array.isArray(existingSettings.enabledMcpjsonServers) ? [...existingSettings.enabledMcpjsonServers] : [];
566638
566640
  const existingDisabledServers = Array.isArray(existingSettings.disabledMcpjsonServers) ? [...existingSettings.disabledMcpjsonServers] : [];
566639
566641
  if (hasEnabledServers) {
566640
- if (Array.isArray(projectConfig.enabledMcpjsonServers) && projectConfig.enabledMcpjsonServers.length > 0) {
566641
- const seen = new Set(existingEnabledServers);
566642
- for (const server of projectConfig.enabledMcpjsonServers) {
566643
- if (!seen.has(server)) {
566644
- existingEnabledServers.push(server);
566645
- seen.add(server);
566642
+ if (Array.isArray(projectConfig.enabledMcpjsonServers)) {
566643
+ if (projectConfig.enabledMcpjsonServers.length === 0) {
566644
+ existingEnabledServers.length = 0;
566645
+ } else {
566646
+ const seen = new Set(existingEnabledServers);
566647
+ for (const server of projectConfig.enabledMcpjsonServers) {
566648
+ if (!seen.has(server)) {
566649
+ existingEnabledServers.push(server);
566650
+ seen.add(server);
566651
+ }
566646
566652
  }
566647
566653
  }
566648
566654
  }
566649
566655
  }
566650
566656
  if (hasDisabledServers) {
566651
- if (Array.isArray(projectConfig.disabledMcpjsonServers) && projectConfig.disabledMcpjsonServers.length > 0) {
566652
- const seen = new Set(existingDisabledServers);
566653
- for (const server of projectConfig.disabledMcpjsonServers) {
566654
- if (!seen.has(server)) {
566655
- existingDisabledServers.push(server);
566656
- seen.add(server);
566657
+ if (Array.isArray(projectConfig.disabledMcpjsonServers)) {
566658
+ if (projectConfig.disabledMcpjsonServers.length === 0) {
566659
+ existingDisabledServers.length = 0;
566660
+ } else {
566661
+ const seen = new Set(existingDisabledServers);
566662
+ for (const server of projectConfig.disabledMcpjsonServers) {
566663
+ if (!seen.has(server)) {
566664
+ existingDisabledServers.push(server);
566665
+ seen.add(server);
566666
+ }
566657
566667
  }
566658
566668
  }
566659
566669
  }
@@ -566766,22 +566776,8 @@ function migrateReplBridgeEnabledToRemoteControlAtStartup() {
566766
566776
  return prev;
566767
566777
  if (prev.remoteControlAtStartup !== undefined)
566768
566778
  return prev;
566769
- const newValue = typeof oldValue === "string" ? oldValue === "true" : Boolean(oldValue);
566770
- return { ...prev, remoteControlAtStartup: newValue };
566771
- });
566772
- saveGlobalConfig((prev) => {
566773
- const oldValue = prev["replBridgeEnabled"];
566774
- if (oldValue === undefined)
566775
- return prev;
566776
- if (prev.remoteControlAtStartup === undefined) {
566777
- const newValue = typeof oldValue === "string" ? oldValue === "true" : Boolean(oldValue);
566778
- return {
566779
- ...prev,
566780
- remoteControlAtStartup: newValue,
566781
- replBridgeEnabled: undefined
566782
- };
566783
- }
566784
- const next = { ...prev };
566779
+ const newValue = typeof oldValue === "string" ? !["false", "0", "no", ""].includes(oldValue.toLowerCase().trim()) : Boolean(oldValue);
566780
+ const next = { ...prev, remoteControlAtStartup: newValue };
566785
566781
  delete next.replBridgeEnabled;
566786
566782
  return next;
566787
566783
  });
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.177",
8
- BUILD_TIME: "2026-08-01T22:39:23.874Z",
7
+ VERSION: "0.1.179",
8
+ BUILD_TIME: "2026-08-03T15:19:01.902Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -119947,7 +119947,7 @@ var package_default;
119947
119947
  var init_package = __esm(() => {
119948
119948
  package_default = {
119949
119949
  name: "@funnycode/myclaude",
119950
- version: "0.1.177",
119950
+ version: "0.1.179",
119951
119951
  private: false,
119952
119952
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
119953
119953
  license: "MIT",
@@ -410151,8 +410151,8 @@ function isInputModeCharacter(input) {
410151
410151
  }
410152
410152
 
410153
410153
  // src/projectOnboardingState.ts
410154
- import { join as join105, resolve as resolve44, basename as basename37 } from "path";
410155
- function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath) {
410154
+ import { join as join105, resolve as resolve44, basename as basename37, sep as pathSep2 } from "path";
410155
+ function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath, maxDepth = 100) {
410156
410156
  const fs13 = getFsImplementation();
410157
410157
  if (!recursionStack) {
410158
410158
  recursionStack = [];
@@ -410163,14 +410163,9 @@ function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath) {
410163
410163
  } catch (err2) {
410164
410164
  console.warn(`[getDirectoryFingerprint] Failed to resolve real path for '${dirPath}', using original path: ${err2}`);
410165
410165
  try {
410166
- const lstat7 = fs13.lstatSync(dirPath);
410167
- if (lstat7.isSymbolicLink()) {
410168
- const linkTarget = fs13.readlinkSync(dirPath);
410169
- const resolvedTarget = resolve44(dirPath, linkTarget);
410170
- currentRealPath = resolvedTarget;
410171
- } else {
410172
- currentRealPath = dirPath;
410173
- }
410166
+ const linkTarget = fs13.readlinkSync(dirPath);
410167
+ const resolvedTarget = resolve44(dirPath, linkTarget);
410168
+ currentRealPath = resolvedTarget;
410174
410169
  } catch {
410175
410170
  currentRealPath = dirPath;
410176
410171
  }
@@ -410179,6 +410174,11 @@ function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath) {
410179
410174
  return "";
410180
410175
  }
410181
410176
  recursionStack.push(currentRealPath);
410177
+ if (recursionStack.length > maxDepth) {
410178
+ console.warn(`[getDirectoryFingerprint] Maximum recursion depth (${maxDepth}) exceeded for '${dirPath}'`);
410179
+ recursionStack.pop();
410180
+ return "";
410181
+ }
410182
410182
  if (rootRealPath === undefined) {
410183
410183
  rootRealPath = currentRealPath;
410184
410184
  }
@@ -410208,7 +410208,9 @@ function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath) {
410208
410208
  console.warn(`[getDirectoryFingerprint] Failed to resolve target real path for symlink '${fullPath}': ${err2}`);
410209
410209
  targetRealPath = resolvedTarget;
410210
410210
  }
410211
- if (targetRealPath.startsWith(rootRealPath + "/") || targetRealPath === rootRealPath) {
410211
+ const targetLower = targetRealPath.toLowerCase();
410212
+ const rootLower = rootRealPath.toLowerCase();
410213
+ if (targetLower === rootLower || targetLower.startsWith(rootLower + pathSep2)) {
410212
410214
  const stat37 = fs13.statSync(resolvedTarget);
410213
410215
  if (stat37.isDirectory()) {
410214
410216
  const targetBasename = basename37(resolvedTarget);
@@ -410217,7 +410219,7 @@ function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath) {
410217
410219
  continue;
410218
410220
  }
410219
410221
  fingerprintParts.push(entry + "/");
410220
- fingerprintParts.push(getDirectoryFingerprint(resolvedTarget, recursionStack, rootRealPath));
410222
+ fingerprintParts.push(getDirectoryFingerprint(resolvedTarget, recursionStack, rootRealPath, maxDepth));
410221
410223
  } else {
410222
410224
  fingerprintParts.push(entry);
410223
410225
  }
@@ -410233,7 +410235,7 @@ function getDirectoryFingerprint(dirPath, recursionStack, rootRealPath) {
410233
410235
  continue;
410234
410236
  }
410235
410237
  fingerprintParts.push(entry + "/");
410236
- fingerprintParts.push(getDirectoryFingerprint(fullPath, recursionStack, rootRealPath));
410238
+ fingerprintParts.push(getDirectoryFingerprint(fullPath, recursionStack, rootRealPath, maxDepth));
410237
410239
  } else {
410238
410240
  fingerprintParts.push(entry);
410239
410241
  }
@@ -487923,7 +487925,7 @@ var init_remember = __esm(() => {
487923
487925
  // src/skills/bundledSkills.ts
487924
487926
  import { constants as fsConstants5 } from "fs";
487925
487927
  import { mkdir as mkdir37, open as open14 } from "fs/promises";
487926
- import { dirname as dirname59, isAbsolute as isAbsolute28, join as join133, normalize as normalize13, sep as pathSep2 } from "path";
487928
+ import { dirname as dirname59, isAbsolute as isAbsolute28, join as join133, normalize as normalize13, sep as pathSep3 } from "path";
487927
487929
  function registerBundledSkill(definition) {
487928
487930
  const { files: files3 } = definition;
487929
487931
  let skillRoot;
@@ -488010,7 +488012,7 @@ async function safeWriteFile(p, content) {
488010
488012
  }
488011
488013
  function resolveSkillFilePath(baseDir, relPath) {
488012
488014
  const normalized = normalize13(relPath);
488013
- if (isAbsolute28(normalized) || normalized.split(pathSep2).includes("..") || normalized.split("/").includes("..")) {
488015
+ if (isAbsolute28(normalized) || normalized.split(pathSep3).includes("..") || normalized.split("/").includes("..")) {
488014
488016
  throw new Error(`bundled skill file path escapes skill dir: ${relPath}`);
488015
488017
  }
488016
488018
  return join133(baseDir, normalized);
@@ -566637,23 +566639,31 @@ function migrateEnableAllProjectMcpServersToSettings() {
566637
566639
  const existingEnabledServers = Array.isArray(existingSettings.enabledMcpjsonServers) ? [...existingSettings.enabledMcpjsonServers] : [];
566638
566640
  const existingDisabledServers = Array.isArray(existingSettings.disabledMcpjsonServers) ? [...existingSettings.disabledMcpjsonServers] : [];
566639
566641
  if (hasEnabledServers) {
566640
- if (Array.isArray(projectConfig.enabledMcpjsonServers) && projectConfig.enabledMcpjsonServers.length > 0) {
566641
- const seen = new Set(existingEnabledServers);
566642
- for (const server of projectConfig.enabledMcpjsonServers) {
566643
- if (!seen.has(server)) {
566644
- existingEnabledServers.push(server);
566645
- seen.add(server);
566642
+ if (Array.isArray(projectConfig.enabledMcpjsonServers)) {
566643
+ if (projectConfig.enabledMcpjsonServers.length === 0) {
566644
+ existingEnabledServers.length = 0;
566645
+ } else {
566646
+ const seen = new Set(existingEnabledServers);
566647
+ for (const server of projectConfig.enabledMcpjsonServers) {
566648
+ if (!seen.has(server)) {
566649
+ existingEnabledServers.push(server);
566650
+ seen.add(server);
566651
+ }
566646
566652
  }
566647
566653
  }
566648
566654
  }
566649
566655
  }
566650
566656
  if (hasDisabledServers) {
566651
- if (Array.isArray(projectConfig.disabledMcpjsonServers) && projectConfig.disabledMcpjsonServers.length > 0) {
566652
- const seen = new Set(existingDisabledServers);
566653
- for (const server of projectConfig.disabledMcpjsonServers) {
566654
- if (!seen.has(server)) {
566655
- existingDisabledServers.push(server);
566656
- seen.add(server);
566657
+ if (Array.isArray(projectConfig.disabledMcpjsonServers)) {
566658
+ if (projectConfig.disabledMcpjsonServers.length === 0) {
566659
+ existingDisabledServers.length = 0;
566660
+ } else {
566661
+ const seen = new Set(existingDisabledServers);
566662
+ for (const server of projectConfig.disabledMcpjsonServers) {
566663
+ if (!seen.has(server)) {
566664
+ existingDisabledServers.push(server);
566665
+ seen.add(server);
566666
+ }
566657
566667
  }
566658
566668
  }
566659
566669
  }
@@ -566766,22 +566776,8 @@ function migrateReplBridgeEnabledToRemoteControlAtStartup() {
566766
566776
  return prev;
566767
566777
  if (prev.remoteControlAtStartup !== undefined)
566768
566778
  return prev;
566769
- const newValue = typeof oldValue === "string" ? oldValue === "true" : Boolean(oldValue);
566770
- return { ...prev, remoteControlAtStartup: newValue };
566771
- });
566772
- saveGlobalConfig((prev) => {
566773
- const oldValue = prev["replBridgeEnabled"];
566774
- if (oldValue === undefined)
566775
- return prev;
566776
- if (prev.remoteControlAtStartup === undefined) {
566777
- const newValue = typeof oldValue === "string" ? oldValue === "true" : Boolean(oldValue);
566778
- return {
566779
- ...prev,
566780
- remoteControlAtStartup: newValue,
566781
- replBridgeEnabled: undefined
566782
- };
566783
- }
566784
- const next = { ...prev };
566779
+ const newValue = typeof oldValue === "string" ? !["false", "0", "no", ""].includes(oldValue.toLowerCase().trim()) : Boolean(oldValue);
566780
+ const next = { ...prev, remoteControlAtStartup: newValue };
566785
566781
  delete next.replBridgeEnabled;
566786
566782
  return next;
566787
566783
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funnycode/myclaude",
3
- "version": "0.1.177",
3
+ "version": "0.1.179",
4
4
  "private": false,
5
5
  "description": "An open-source AI coding assistant in your terminal - powered by Claude",
6
6
  "license": "MIT",