@funnycode/myclaude 0.1.160 → 0.1.162

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.160",
8
- BUILD_TIME: "2026-07-30T03:10:11.108Z",
7
+ VERSION: "0.1.162",
8
+ BUILD_TIME: "2026-07-30T18:43:12.950Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -119829,7 +119829,7 @@ var package_default;
119829
119829
  var init_package = __esm(() => {
119830
119830
  package_default = {
119831
119831
  name: "@funnycode/myclaude",
119832
- version: "0.1.160",
119832
+ version: "0.1.162",
119833
119833
  private: false,
119834
119834
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
119835
119835
  license: "MIT",
@@ -410011,10 +410011,28 @@ function isInputModeCharacter(input) {
410011
410011
 
410012
410012
  // src/projectOnboardingState.ts
410013
410013
  import { join as join105 } from "path";
410014
+ function getDirectoryFingerprint(dirPath) {
410015
+ const fs13 = getFsImplementation();
410016
+ const entries = fs13.readdirStringSync(dirPath);
410017
+ const sortedEntries = entries.sort();
410018
+ const fingerprintParts = [];
410019
+ for (const entry of sortedEntries) {
410020
+ const fullPath = join105(dirPath, entry);
410021
+ const stat37 = fs13.statSync(fullPath);
410022
+ if (stat37.isDirectory()) {
410023
+ fingerprintParts.push(entry + "/");
410024
+ fingerprintParts.push(getDirectoryFingerprint(fullPath));
410025
+ } else {
410026
+ fingerprintParts.push(entry);
410027
+ }
410028
+ }
410029
+ return fingerprintParts.join(`
410030
+ `);
410031
+ }
410014
410032
  function clearCachedSteps() {
410015
410033
  cachedSteps = null;
410016
410034
  cachedClaudeMdMtime = -1;
410017
- cachedDirMtime = -1;
410035
+ cachedDirFingerprint = "";
410018
410036
  cachedAt = null;
410019
410037
  }
410020
410038
  function isCacheValid() {
@@ -410031,8 +410049,8 @@ function isCacheValid() {
410031
410049
  return false;
410032
410050
  }
410033
410051
  try {
410034
- const currentDirMtime = getFileModificationTime(cwd2);
410035
- if (currentDirMtime !== cachedDirMtime)
410052
+ const currentFingerprint = getDirectoryFingerprint(cwd2);
410053
+ if (currentFingerprint !== cachedDirFingerprint)
410036
410054
  return false;
410037
410055
  } catch {
410038
410056
  return false;
@@ -410057,9 +410075,9 @@ function getSteps() {
410057
410075
  cachedClaudeMdMtime = -1;
410058
410076
  }
410059
410077
  try {
410060
- cachedDirMtime = getFileModificationTime(cwd2);
410078
+ cachedDirFingerprint = getDirectoryFingerprint(cwd2);
410061
410079
  } catch {
410062
- cachedDirMtime = -1;
410080
+ cachedDirFingerprint = "";
410063
410081
  }
410064
410082
  cachedAt = Date.now();
410065
410083
  cachedSteps = [
@@ -410107,7 +410125,7 @@ function incrementProjectOnboardingSeenCount() {
410107
410125
  projectOnboardingSeenCount: current.projectOnboardingSeenCount + 1
410108
410126
  }));
410109
410127
  }
410110
- var cachedSteps = null, cachedClaudeMdMtime = -1, cachedDirMtime = -1, cachedAt = null, CACHE_MAX_AGE_MS = 30000;
410128
+ var cachedSteps = null, cachedClaudeMdMtime = -1, cachedDirFingerprint = "", cachedAt = null, CACHE_MAX_AGE_MS = 300000;
410111
410129
  var init_projectOnboardingState = __esm(() => {
410112
410130
  init_config();
410113
410131
  init_cwd2();
@@ -566342,6 +566360,7 @@ function migrateBypassPermissionsAcceptedToSettings() {
566342
566360
  });
566343
566361
  } catch (error49) {
566344
566362
  logError2(new Error(`Failed to migrate bypass permissions accepted: ${error49}`));
566363
+ throw error49;
566345
566364
  }
566346
566365
  }
566347
566366
  var init_migrateBypassPermissionsAcceptedToSettings = __esm(() => {
@@ -566367,14 +566386,13 @@ function migrateEnableAllProjectMcpServersToSettings() {
566367
566386
  }
566368
566387
  const originalSettings = getSettingsForSource("localSettings") || {};
566369
566388
  const originalProjectConfig = { ...projectConfig };
566370
- const originalSettingsKeys = new Set(Object.keys(originalSettings));
566371
- const fieldsToRemove = [];
566389
+ const migratedFields = [];
566372
566390
  const updates = {};
566373
566391
  try {
566374
566392
  const existingSettings = originalSettings;
566375
566393
  if (hasEnableAll) {
566376
566394
  updates.enableAllProjectMcpServers = projectConfig.enableAllProjectMcpServers;
566377
- fieldsToRemove.push("enableAllProjectMcpServers");
566395
+ migratedFields.push("enableAllProjectMcpServers");
566378
566396
  }
566379
566397
  const existingEnabledServers = Array.isArray(existingSettings.enabledMcpjsonServers) ? [...existingSettings.enabledMcpjsonServers] : [];
566380
566398
  const existingDisabledServers = Array.isArray(existingSettings.disabledMcpjsonServers) ? [...existingSettings.disabledMcpjsonServers] : [];
@@ -566388,7 +566406,7 @@ function migrateEnableAllProjectMcpServersToSettings() {
566388
566406
  }
566389
566407
  }
566390
566408
  }
566391
- fieldsToRemove.push("enabledMcpjsonServers");
566409
+ migratedFields.push("enabledMcpjsonServers");
566392
566410
  }
566393
566411
  if (hasDisabledServers) {
566394
566412
  if (Array.isArray(projectConfig.disabledMcpjsonServers) && projectConfig.disabledMcpjsonServers.length > 0) {
@@ -566400,21 +566418,19 @@ function migrateEnableAllProjectMcpServersToSettings() {
566400
566418
  }
566401
566419
  }
566402
566420
  }
566403
- fieldsToRemove.push("disabledMcpjsonServers");
566421
+ migratedFields.push("disabledMcpjsonServers");
566404
566422
  }
566405
566423
  const enabledSet = new Set(existingEnabledServers);
566406
566424
  const overlappingServers = existingDisabledServers.filter((server) => enabledSet.has(server));
566407
- if (overlappingServers.length > 0) {
566408
- const overlappingSet = new Set(overlappingServers);
566409
- for (let i3 = existingDisabledServers.length - 1;i3 >= 0; i3--) {
566410
- if (overlappingSet.has(existingDisabledServers[i3])) {
566411
- existingDisabledServers.splice(i3, 1);
566412
- }
566425
+ for (const server of overlappingServers) {
566426
+ const index = existingDisabledServers.indexOf(server);
566427
+ if (index !== -1) {
566428
+ existingDisabledServers.splice(index, 1);
566413
566429
  }
566430
+ }
566431
+ if (overlappingServers.length > 0) {
566414
566432
  logEvent("tengu_migrate_mcp_server_overlap_in_both_lists", {
566415
- migration: "enableAllProjectMcpServersToSettings",
566416
- overlappingServers: overlappingServers.join(","),
566417
- message: "MCP server(s) appear in both enabled and disabled lists. Removed from disabled list to resolve conflict."
566433
+ overlappingServers: overlappingServers.join(",")
566418
566434
  });
566419
566435
  }
566420
566436
  const existingHadEnabledServers = Array.isArray(existingSettings.enabledMcpjsonServers);
@@ -566430,7 +566446,7 @@ function migrateEnableAllProjectMcpServersToSettings() {
566430
566446
  updateSettingsForSource("localSettings", updates);
566431
566447
  saveCurrentProjectConfig((config5) => {
566432
566448
  const updated = { ...config5 };
566433
- for (const field of fieldsToRemove) {
566449
+ for (const field of migratedFields) {
566434
566450
  delete updated[field];
566435
566451
  }
566436
566452
  return updated;
@@ -566438,17 +566454,12 @@ function migrateEnableAllProjectMcpServersToSettings() {
566438
566454
  saveGlobalConfig((c6) => ({ ...c6, hasCompletedMcpServerMigration: true }));
566439
566455
  logEvent("tengu_migrate_enable_all_project_mcp_servers_to_settings", {
566440
566456
  migration: "enableAllProjectMcpServersToSettings",
566441
- fieldsMigrated: fieldsToRemove.join(",")
566457
+ fieldsMigrated: migratedFields.join(",")
566442
566458
  });
566443
566459
  } catch (error49) {
566444
566460
  logError2("Failed to migrate MCP server settings, rolling back", error49);
566445
566461
  let rollbackFailed = false;
566446
566462
  const rollbackUpdates = {};
566447
- const migratedFields = [
566448
- "enableAllProjectMcpServers",
566449
- "enabledMcpjsonServers",
566450
- "disabledMcpjsonServers"
566451
- ];
566452
566463
  for (const field of migratedFields) {
566453
566464
  if (field in originalSettings) {
566454
566465
  rollbackUpdates[field] = originalSettings[field];
@@ -566456,10 +566467,8 @@ function migrateEnableAllProjectMcpServersToSettings() {
566456
566467
  rollbackUpdates[field] = undefined;
566457
566468
  }
566458
566469
  }
566459
- let settingsRollbackSucceeded = false;
566460
566470
  try {
566461
566471
  updateSettingsForSource("localSettings", rollbackUpdates);
566462
- settingsRollbackSucceeded = true;
566463
566472
  } catch (rollbackError) {
566464
566473
  logError2("Rollback of settings failed", rollbackError);
566465
566474
  rollbackFailed = true;
@@ -566467,7 +566476,7 @@ function migrateEnableAllProjectMcpServersToSettings() {
566467
566476
  try {
566468
566477
  saveCurrentProjectConfig((config5) => {
566469
566478
  const updated = { ...config5 };
566470
- for (const field of fieldsToRemove) {
566479
+ for (const field of migratedFields) {
566471
566480
  updated[field] = originalProjectConfig[field];
566472
566481
  }
566473
566482
  return updated;
@@ -566475,22 +566484,6 @@ function migrateEnableAllProjectMcpServersToSettings() {
566475
566484
  } catch (rollbackError) {
566476
566485
  logError2("Rollback of project config failed", rollbackError);
566477
566486
  rollbackFailed = true;
566478
- if (settingsRollbackSucceeded) {
566479
- try {
566480
- const reapplyUpdates = {};
566481
- for (const field of migratedFields) {
566482
- if (updates[field] !== undefined) {
566483
- reapplyUpdates[field] = updates[field];
566484
- }
566485
- }
566486
- updateSettingsForSource("localSettings", reapplyUpdates);
566487
- logError2("Re-applied migrated state to settings after project config rollback failure. " + "System is now consistent (migration state re-applied).", rollbackError);
566488
- } catch (reapplyError) {
566489
- logError2("Failed to re-apply migrated state to settings after project config rollback failure. " + "System is in an inconsistent state. Manual intervention may be required.", reapplyError);
566490
- }
566491
- } else {
566492
- logError2("Settings rollback succeeded but project config rollback failed. " + "System is in an inconsistent state. Manual intervention may be required.", rollbackError);
566493
- }
566494
566487
  }
566495
566488
  if (rollbackFailed) {
566496
566489
  throw new Error("Migration failed and rollback was incomplete. The system may be in an inconsistent state. " + "Original error: " + (error49 instanceof Error ? error49.message : String(error49)));
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.160",
8
- BUILD_TIME: "2026-07-30T03:10:11.108Z",
7
+ VERSION: "0.1.162",
8
+ BUILD_TIME: "2026-07-30T18:43:12.950Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -119829,7 +119829,7 @@ var package_default;
119829
119829
  var init_package = __esm(() => {
119830
119830
  package_default = {
119831
119831
  name: "@funnycode/myclaude",
119832
- version: "0.1.160",
119832
+ version: "0.1.162",
119833
119833
  private: false,
119834
119834
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
119835
119835
  license: "MIT",
@@ -410011,10 +410011,28 @@ function isInputModeCharacter(input) {
410011
410011
 
410012
410012
  // src/projectOnboardingState.ts
410013
410013
  import { join as join105 } from "path";
410014
+ function getDirectoryFingerprint(dirPath) {
410015
+ const fs13 = getFsImplementation();
410016
+ const entries = fs13.readdirStringSync(dirPath);
410017
+ const sortedEntries = entries.sort();
410018
+ const fingerprintParts = [];
410019
+ for (const entry of sortedEntries) {
410020
+ const fullPath = join105(dirPath, entry);
410021
+ const stat37 = fs13.statSync(fullPath);
410022
+ if (stat37.isDirectory()) {
410023
+ fingerprintParts.push(entry + "/");
410024
+ fingerprintParts.push(getDirectoryFingerprint(fullPath));
410025
+ } else {
410026
+ fingerprintParts.push(entry);
410027
+ }
410028
+ }
410029
+ return fingerprintParts.join(`
410030
+ `);
410031
+ }
410014
410032
  function clearCachedSteps() {
410015
410033
  cachedSteps = null;
410016
410034
  cachedClaudeMdMtime = -1;
410017
- cachedDirMtime = -1;
410035
+ cachedDirFingerprint = "";
410018
410036
  cachedAt = null;
410019
410037
  }
410020
410038
  function isCacheValid() {
@@ -410031,8 +410049,8 @@ function isCacheValid() {
410031
410049
  return false;
410032
410050
  }
410033
410051
  try {
410034
- const currentDirMtime = getFileModificationTime(cwd2);
410035
- if (currentDirMtime !== cachedDirMtime)
410052
+ const currentFingerprint = getDirectoryFingerprint(cwd2);
410053
+ if (currentFingerprint !== cachedDirFingerprint)
410036
410054
  return false;
410037
410055
  } catch {
410038
410056
  return false;
@@ -410057,9 +410075,9 @@ function getSteps() {
410057
410075
  cachedClaudeMdMtime = -1;
410058
410076
  }
410059
410077
  try {
410060
- cachedDirMtime = getFileModificationTime(cwd2);
410078
+ cachedDirFingerprint = getDirectoryFingerprint(cwd2);
410061
410079
  } catch {
410062
- cachedDirMtime = -1;
410080
+ cachedDirFingerprint = "";
410063
410081
  }
410064
410082
  cachedAt = Date.now();
410065
410083
  cachedSteps = [
@@ -410107,7 +410125,7 @@ function incrementProjectOnboardingSeenCount() {
410107
410125
  projectOnboardingSeenCount: current.projectOnboardingSeenCount + 1
410108
410126
  }));
410109
410127
  }
410110
- var cachedSteps = null, cachedClaudeMdMtime = -1, cachedDirMtime = -1, cachedAt = null, CACHE_MAX_AGE_MS = 30000;
410128
+ var cachedSteps = null, cachedClaudeMdMtime = -1, cachedDirFingerprint = "", cachedAt = null, CACHE_MAX_AGE_MS = 300000;
410111
410129
  var init_projectOnboardingState = __esm(() => {
410112
410130
  init_config();
410113
410131
  init_cwd2();
@@ -566342,6 +566360,7 @@ function migrateBypassPermissionsAcceptedToSettings() {
566342
566360
  });
566343
566361
  } catch (error49) {
566344
566362
  logError2(new Error(`Failed to migrate bypass permissions accepted: ${error49}`));
566363
+ throw error49;
566345
566364
  }
566346
566365
  }
566347
566366
  var init_migrateBypassPermissionsAcceptedToSettings = __esm(() => {
@@ -566367,14 +566386,13 @@ function migrateEnableAllProjectMcpServersToSettings() {
566367
566386
  }
566368
566387
  const originalSettings = getSettingsForSource("localSettings") || {};
566369
566388
  const originalProjectConfig = { ...projectConfig };
566370
- const originalSettingsKeys = new Set(Object.keys(originalSettings));
566371
- const fieldsToRemove = [];
566389
+ const migratedFields = [];
566372
566390
  const updates = {};
566373
566391
  try {
566374
566392
  const existingSettings = originalSettings;
566375
566393
  if (hasEnableAll) {
566376
566394
  updates.enableAllProjectMcpServers = projectConfig.enableAllProjectMcpServers;
566377
- fieldsToRemove.push("enableAllProjectMcpServers");
566395
+ migratedFields.push("enableAllProjectMcpServers");
566378
566396
  }
566379
566397
  const existingEnabledServers = Array.isArray(existingSettings.enabledMcpjsonServers) ? [...existingSettings.enabledMcpjsonServers] : [];
566380
566398
  const existingDisabledServers = Array.isArray(existingSettings.disabledMcpjsonServers) ? [...existingSettings.disabledMcpjsonServers] : [];
@@ -566388,7 +566406,7 @@ function migrateEnableAllProjectMcpServersToSettings() {
566388
566406
  }
566389
566407
  }
566390
566408
  }
566391
- fieldsToRemove.push("enabledMcpjsonServers");
566409
+ migratedFields.push("enabledMcpjsonServers");
566392
566410
  }
566393
566411
  if (hasDisabledServers) {
566394
566412
  if (Array.isArray(projectConfig.disabledMcpjsonServers) && projectConfig.disabledMcpjsonServers.length > 0) {
@@ -566400,21 +566418,19 @@ function migrateEnableAllProjectMcpServersToSettings() {
566400
566418
  }
566401
566419
  }
566402
566420
  }
566403
- fieldsToRemove.push("disabledMcpjsonServers");
566421
+ migratedFields.push("disabledMcpjsonServers");
566404
566422
  }
566405
566423
  const enabledSet = new Set(existingEnabledServers);
566406
566424
  const overlappingServers = existingDisabledServers.filter((server) => enabledSet.has(server));
566407
- if (overlappingServers.length > 0) {
566408
- const overlappingSet = new Set(overlappingServers);
566409
- for (let i3 = existingDisabledServers.length - 1;i3 >= 0; i3--) {
566410
- if (overlappingSet.has(existingDisabledServers[i3])) {
566411
- existingDisabledServers.splice(i3, 1);
566412
- }
566425
+ for (const server of overlappingServers) {
566426
+ const index = existingDisabledServers.indexOf(server);
566427
+ if (index !== -1) {
566428
+ existingDisabledServers.splice(index, 1);
566413
566429
  }
566430
+ }
566431
+ if (overlappingServers.length > 0) {
566414
566432
  logEvent("tengu_migrate_mcp_server_overlap_in_both_lists", {
566415
- migration: "enableAllProjectMcpServersToSettings",
566416
- overlappingServers: overlappingServers.join(","),
566417
- message: "MCP server(s) appear in both enabled and disabled lists. Removed from disabled list to resolve conflict."
566433
+ overlappingServers: overlappingServers.join(",")
566418
566434
  });
566419
566435
  }
566420
566436
  const existingHadEnabledServers = Array.isArray(existingSettings.enabledMcpjsonServers);
@@ -566430,7 +566446,7 @@ function migrateEnableAllProjectMcpServersToSettings() {
566430
566446
  updateSettingsForSource("localSettings", updates);
566431
566447
  saveCurrentProjectConfig((config5) => {
566432
566448
  const updated = { ...config5 };
566433
- for (const field of fieldsToRemove) {
566449
+ for (const field of migratedFields) {
566434
566450
  delete updated[field];
566435
566451
  }
566436
566452
  return updated;
@@ -566438,17 +566454,12 @@ function migrateEnableAllProjectMcpServersToSettings() {
566438
566454
  saveGlobalConfig((c6) => ({ ...c6, hasCompletedMcpServerMigration: true }));
566439
566455
  logEvent("tengu_migrate_enable_all_project_mcp_servers_to_settings", {
566440
566456
  migration: "enableAllProjectMcpServersToSettings",
566441
- fieldsMigrated: fieldsToRemove.join(",")
566457
+ fieldsMigrated: migratedFields.join(",")
566442
566458
  });
566443
566459
  } catch (error49) {
566444
566460
  logError2("Failed to migrate MCP server settings, rolling back", error49);
566445
566461
  let rollbackFailed = false;
566446
566462
  const rollbackUpdates = {};
566447
- const migratedFields = [
566448
- "enableAllProjectMcpServers",
566449
- "enabledMcpjsonServers",
566450
- "disabledMcpjsonServers"
566451
- ];
566452
566463
  for (const field of migratedFields) {
566453
566464
  if (field in originalSettings) {
566454
566465
  rollbackUpdates[field] = originalSettings[field];
@@ -566456,10 +566467,8 @@ function migrateEnableAllProjectMcpServersToSettings() {
566456
566467
  rollbackUpdates[field] = undefined;
566457
566468
  }
566458
566469
  }
566459
- let settingsRollbackSucceeded = false;
566460
566470
  try {
566461
566471
  updateSettingsForSource("localSettings", rollbackUpdates);
566462
- settingsRollbackSucceeded = true;
566463
566472
  } catch (rollbackError) {
566464
566473
  logError2("Rollback of settings failed", rollbackError);
566465
566474
  rollbackFailed = true;
@@ -566467,7 +566476,7 @@ function migrateEnableAllProjectMcpServersToSettings() {
566467
566476
  try {
566468
566477
  saveCurrentProjectConfig((config5) => {
566469
566478
  const updated = { ...config5 };
566470
- for (const field of fieldsToRemove) {
566479
+ for (const field of migratedFields) {
566471
566480
  updated[field] = originalProjectConfig[field];
566472
566481
  }
566473
566482
  return updated;
@@ -566475,22 +566484,6 @@ function migrateEnableAllProjectMcpServersToSettings() {
566475
566484
  } catch (rollbackError) {
566476
566485
  logError2("Rollback of project config failed", rollbackError);
566477
566486
  rollbackFailed = true;
566478
- if (settingsRollbackSucceeded) {
566479
- try {
566480
- const reapplyUpdates = {};
566481
- for (const field of migratedFields) {
566482
- if (updates[field] !== undefined) {
566483
- reapplyUpdates[field] = updates[field];
566484
- }
566485
- }
566486
- updateSettingsForSource("localSettings", reapplyUpdates);
566487
- logError2("Re-applied migrated state to settings after project config rollback failure. " + "System is now consistent (migration state re-applied).", rollbackError);
566488
- } catch (reapplyError) {
566489
- logError2("Failed to re-apply migrated state to settings after project config rollback failure. " + "System is in an inconsistent state. Manual intervention may be required.", reapplyError);
566490
- }
566491
- } else {
566492
- logError2("Settings rollback succeeded but project config rollback failed. " + "System is in an inconsistent state. Manual intervention may be required.", rollbackError);
566493
- }
566494
566487
  }
566495
566488
  if (rollbackFailed) {
566496
566489
  throw new Error("Migration failed and rollback was incomplete. The system may be in an inconsistent state. " + "Original error: " + (error49 instanceof Error ? error49.message : String(error49)));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funnycode/myclaude",
3
- "version": "0.1.160",
3
+ "version": "0.1.162",
4
4
  "private": false,
5
5
  "description": "An open-source AI coding assistant in your terminal - powered by Claude",
6
6
  "license": "MIT",