@funnycode/myclaude 0.1.163 → 0.1.165

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.163",
8
- BUILD_TIME: "2026-07-30T20:44:03.824Z",
7
+ VERSION: "0.1.165",
8
+ BUILD_TIME: "2026-07-31T00:20:09.749Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -61328,6 +61328,30 @@ function updateSettingsForSource(source, settings) {
61328
61328
  }
61329
61329
  return { error: null };
61330
61330
  }
61331
+ function deleteSettingsField(source, field) {
61332
+ if (source === "policySettings" || source === "flagSettings") {
61333
+ return { error: null };
61334
+ }
61335
+ const filePath = getSettingsFilePathForSource(source);
61336
+ if (!filePath) {
61337
+ return { error: null };
61338
+ }
61339
+ try {
61340
+ getFsImplementation().mkdirSync(dirname13(filePath));
61341
+ let existingSettings = getSettingsForSourceUncached(source);
61342
+ if (!existingSettings) {
61343
+ return { error: null };
61344
+ }
61345
+ delete existingSettings[field];
61346
+ writeFileSyncAndFlush_DEPRECATED(filePath, jsonStringify(existingSettings));
61347
+ resetSettingsCache();
61348
+ return { error: null };
61349
+ } catch (e) {
61350
+ const error49 = new Error(`Failed to delete field ${field} from settings source ${source}: ${e}`);
61351
+ logError2(error49);
61352
+ return { error: error49 };
61353
+ }
61354
+ }
61331
61355
  function mergeArrays(targetArray, sourceArray) {
61332
61356
  return uniq([...targetArray, ...sourceArray]);
61333
61357
  }
@@ -119829,7 +119853,7 @@ var package_default;
119829
119853
  var init_package = __esm(() => {
119830
119854
  package_default = {
119831
119855
  name: "@funnycode/myclaude",
119832
- version: "0.1.163",
119856
+ version: "0.1.165",
119833
119857
  private: false,
119834
119858
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
119835
119859
  license: "MIT",
@@ -410020,6 +410044,9 @@ function getDirectoryFingerprint(dirPath) {
410020
410044
  const fullPath = join105(dirPath, entry);
410021
410045
  const stat37 = fs13.statSync(fullPath);
410022
410046
  if (stat37.isDirectory()) {
410047
+ if (entry === "node_modules" || entry === ".git" || entry === "dist" || entry === "build" || entry === ".next" || entry === "out" || entry === "coverage") {
410048
+ continue;
410049
+ }
410023
410050
  fingerprintParts.push(entry + "/");
410024
410051
  fingerprintParts.push(getDirectoryFingerprint(fullPath));
410025
410052
  } else {
@@ -501863,25 +501890,50 @@ function isBlockedV6(address) {
501863
501890
  return false;
501864
501891
  if (lower === "::")
501865
501892
  return true;
501866
- const mappedV4 = extractMappedIPv4(lower);
501867
- if (mappedV4 !== null) {
501868
- return isBlockedV4(mappedV4);
501893
+ const g2 = expandIPv6Groups(lower);
501894
+ if (!g2)
501895
+ return false;
501896
+ const embeddedV4 = extractEmbeddedIPv4(g2);
501897
+ if (embeddedV4 !== null) {
501898
+ return isBlockedV4(embeddedV4);
501869
501899
  }
501870
- if (lower.startsWith("fc") || lower.startsWith("fd")) {
501900
+ if (g2[0] >= 64512 && g2[0] <= 65023) {
501871
501901
  return true;
501872
501902
  }
501873
- const firstHextet = lower.split(":")[0];
501874
- if (firstHextet && firstHextet.length === 4 && firstHextet >= "fe80" && firstHextet <= "febf") {
501903
+ if (g2[0] >= 65152 && g2[0] <= 65215) {
501875
501904
  return true;
501876
501905
  }
501877
501906
  return false;
501878
501907
  }
501908
+ function extractEmbeddedIPv4(g2) {
501909
+ if (g2.length !== 8)
501910
+ return null;
501911
+ if (g2[0] === 0 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 65535) {
501912
+ return composeV4(g2[6], g2[7]);
501913
+ }
501914
+ if (g2[0] === 0 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 0) {
501915
+ return composeV4(g2[6], g2[7]);
501916
+ }
501917
+ if (g2[0] === 8194) {
501918
+ return composeV4(g2[1], g2[2]);
501919
+ }
501920
+ if (g2[0] >= 65152 && g2[0] <= 65215 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 24318) {
501921
+ return composeV4(g2[6], g2[7]);
501922
+ }
501923
+ return null;
501924
+ }
501925
+ function composeV4(hi, lo) {
501926
+ return `${hi >> 8}.${hi & 255}.${lo >> 8}.${lo & 255}`;
501927
+ }
501879
501928
  function expandIPv6Groups(addr) {
501880
501929
  let tailHextets = [];
501881
501930
  if (addr.includes(".")) {
501882
501931
  const lastColon = addr.lastIndexOf(":");
501883
501932
  const v4 = addr.slice(lastColon + 1);
501884
501933
  addr = addr.slice(0, lastColon);
501934
+ if (addr === ":") {
501935
+ addr = "::";
501936
+ }
501885
501937
  const octets = v4.split(".").map(Number);
501886
501938
  if (octets.length !== 4 || octets.some((n3) => !Number.isInteger(n3) || n3 < 0 || n3 > 255)) {
501887
501939
  return null;
@@ -501915,17 +501967,6 @@ function expandIPv6Groups(addr) {
501915
501967
  nums.push(...tailHextets);
501916
501968
  return nums.length === 8 ? nums : null;
501917
501969
  }
501918
- function extractMappedIPv4(addr) {
501919
- const g2 = expandIPv6Groups(addr);
501920
- if (!g2)
501921
- return null;
501922
- if (g2[0] === 0 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 65535) {
501923
- const hi = g2[6];
501924
- const lo = g2[7];
501925
- return `${hi >> 8}.${hi & 255}.${lo >> 8}.${lo & 255}`;
501926
- }
501927
- return null;
501928
- }
501929
501970
  function ssrfGuardedLookup(hostname4, options, callback) {
501930
501971
  const wantsAll = "all" in options && options.all === true;
501931
501972
  const ipVersion = isIP4(hostname4);
@@ -566386,6 +566427,7 @@ function migrateEnableAllProjectMcpServersToSettings() {
566386
566427
  }
566387
566428
  const originalSettings = getSettingsForSource("localSettings") || {};
566388
566429
  const originalProjectConfig = { ...projectConfig };
566430
+ const originalSettingsHash = JSON.stringify(originalSettings);
566389
566431
  const migratedFields = [];
566390
566432
  const updates = {};
566391
566433
  try {
@@ -566450,6 +566492,11 @@ function migrateEnableAllProjectMcpServersToSettings() {
566450
566492
  }
566451
566493
  return updated;
566452
566494
  });
566495
+ const currentSettings = getSettingsForSource("localSettings") || {};
566496
+ const currentSettingsHash = JSON.stringify(currentSettings);
566497
+ if (currentSettingsHash !== originalSettingsHash) {
566498
+ logError2("MIGRATION WARNING: Settings file was modified concurrently during migration. " + "The migration will overwrite concurrent changes, potentially causing data loss. " + "Original settings hash: " + originalSettingsHash + ", Current settings hash: " + currentSettingsHash);
566499
+ }
566453
566500
  updateSettingsForSource("localSettings", updates);
566454
566501
  saveGlobalConfig((c6) => ({ ...c6, hasCompletedMcpServerMigration: true }));
566455
566502
  logEvent("tengu_migrate_enable_all_project_mcp_servers_to_settings", {
@@ -566459,15 +566506,20 @@ function migrateEnableAllProjectMcpServersToSettings() {
566459
566506
  } catch (error49) {
566460
566507
  logError2("Failed to migrate MCP server settings, rolling back", error49);
566461
566508
  let rollbackFailed = false;
566462
- const rollbackUpdates = {};
566463
- for (const field of migratedFields) {
566464
- if (field in originalSettings) {
566465
- rollbackUpdates[field] = originalSettings[field];
566466
- } else {
566467
- rollbackUpdates[field] = undefined;
566468
- }
566469
- }
566470
566509
  try {
566510
+ const currentSettings = getSettingsForSource("localSettings") || {};
566511
+ const currentSettingsHash = JSON.stringify(currentSettings);
566512
+ if (currentSettingsHash !== originalSettingsHash) {
566513
+ logError2("MIGRATION WARNING: Settings file was modified concurrently. " + "The rollback will overwrite concurrent changes, potentially causing data loss. " + "Original settings hash: " + originalSettingsHash + ", Current settings hash: " + currentSettingsHash);
566514
+ }
566515
+ const rollbackUpdates = {};
566516
+ for (const field of migratedFields) {
566517
+ if (field in originalSettings) {
566518
+ rollbackUpdates[field] = originalSettings[field];
566519
+ } else {
566520
+ deleteSettingsField("localSettings", field);
566521
+ }
566522
+ }
566471
566523
  updateSettingsForSource("localSettings", rollbackUpdates);
566472
566524
  } catch (rollbackError) {
566473
566525
  logError2("Rollback of settings failed", rollbackError);
@@ -566564,9 +566616,23 @@ function migrateReplBridgeEnabledToRemoteControlAtStartup() {
566564
566616
  return prev;
566565
566617
  if (prev.remoteControlAtStartup !== undefined)
566566
566618
  return prev;
566567
- const { replBridgeEnabled: _2, ...next } = prev;
566568
566619
  const newValue = typeof oldValue === "string" ? oldValue === "true" : Boolean(oldValue);
566569
- return { ...next, remoteControlAtStartup: newValue };
566620
+ return { ...prev, remoteControlAtStartup: newValue };
566621
+ });
566622
+ saveGlobalConfig((prev) => {
566623
+ const oldValue = prev["replBridgeEnabled"];
566624
+ if (oldValue === undefined)
566625
+ return prev;
566626
+ if (prev.remoteControlAtStartup === undefined) {
566627
+ const newValue = typeof oldValue === "string" ? oldValue === "true" : Boolean(oldValue);
566628
+ return {
566629
+ ...prev,
566630
+ remoteControlAtStartup: newValue,
566631
+ replBridgeEnabled: undefined
566632
+ };
566633
+ }
566634
+ const { replBridgeEnabled: _2, ...next } = prev;
566635
+ return next;
566570
566636
  });
566571
566637
  }
566572
566638
  var init_migrateReplBridgeEnabledToRemoteControlAtStartup = __esm(() => {
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.163",
8
- BUILD_TIME: "2026-07-30T20:44:03.824Z",
7
+ VERSION: "0.1.165",
8
+ BUILD_TIME: "2026-07-31T00:20:09.749Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -61328,6 +61328,30 @@ function updateSettingsForSource(source, settings) {
61328
61328
  }
61329
61329
  return { error: null };
61330
61330
  }
61331
+ function deleteSettingsField(source, field) {
61332
+ if (source === "policySettings" || source === "flagSettings") {
61333
+ return { error: null };
61334
+ }
61335
+ const filePath = getSettingsFilePathForSource(source);
61336
+ if (!filePath) {
61337
+ return { error: null };
61338
+ }
61339
+ try {
61340
+ getFsImplementation().mkdirSync(dirname13(filePath));
61341
+ let existingSettings = getSettingsForSourceUncached(source);
61342
+ if (!existingSettings) {
61343
+ return { error: null };
61344
+ }
61345
+ delete existingSettings[field];
61346
+ writeFileSyncAndFlush_DEPRECATED(filePath, jsonStringify(existingSettings));
61347
+ resetSettingsCache();
61348
+ return { error: null };
61349
+ } catch (e) {
61350
+ const error49 = new Error(`Failed to delete field ${field} from settings source ${source}: ${e}`);
61351
+ logError2(error49);
61352
+ return { error: error49 };
61353
+ }
61354
+ }
61331
61355
  function mergeArrays(targetArray, sourceArray) {
61332
61356
  return uniq([...targetArray, ...sourceArray]);
61333
61357
  }
@@ -119829,7 +119853,7 @@ var package_default;
119829
119853
  var init_package = __esm(() => {
119830
119854
  package_default = {
119831
119855
  name: "@funnycode/myclaude",
119832
- version: "0.1.163",
119856
+ version: "0.1.165",
119833
119857
  private: false,
119834
119858
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
119835
119859
  license: "MIT",
@@ -410020,6 +410044,9 @@ function getDirectoryFingerprint(dirPath) {
410020
410044
  const fullPath = join105(dirPath, entry);
410021
410045
  const stat37 = fs13.statSync(fullPath);
410022
410046
  if (stat37.isDirectory()) {
410047
+ if (entry === "node_modules" || entry === ".git" || entry === "dist" || entry === "build" || entry === ".next" || entry === "out" || entry === "coverage") {
410048
+ continue;
410049
+ }
410023
410050
  fingerprintParts.push(entry + "/");
410024
410051
  fingerprintParts.push(getDirectoryFingerprint(fullPath));
410025
410052
  } else {
@@ -501863,25 +501890,50 @@ function isBlockedV6(address) {
501863
501890
  return false;
501864
501891
  if (lower === "::")
501865
501892
  return true;
501866
- const mappedV4 = extractMappedIPv4(lower);
501867
- if (mappedV4 !== null) {
501868
- return isBlockedV4(mappedV4);
501893
+ const g2 = expandIPv6Groups(lower);
501894
+ if (!g2)
501895
+ return false;
501896
+ const embeddedV4 = extractEmbeddedIPv4(g2);
501897
+ if (embeddedV4 !== null) {
501898
+ return isBlockedV4(embeddedV4);
501869
501899
  }
501870
- if (lower.startsWith("fc") || lower.startsWith("fd")) {
501900
+ if (g2[0] >= 64512 && g2[0] <= 65023) {
501871
501901
  return true;
501872
501902
  }
501873
- const firstHextet = lower.split(":")[0];
501874
- if (firstHextet && firstHextet.length === 4 && firstHextet >= "fe80" && firstHextet <= "febf") {
501903
+ if (g2[0] >= 65152 && g2[0] <= 65215) {
501875
501904
  return true;
501876
501905
  }
501877
501906
  return false;
501878
501907
  }
501908
+ function extractEmbeddedIPv4(g2) {
501909
+ if (g2.length !== 8)
501910
+ return null;
501911
+ if (g2[0] === 0 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 65535) {
501912
+ return composeV4(g2[6], g2[7]);
501913
+ }
501914
+ if (g2[0] === 0 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 0) {
501915
+ return composeV4(g2[6], g2[7]);
501916
+ }
501917
+ if (g2[0] === 8194) {
501918
+ return composeV4(g2[1], g2[2]);
501919
+ }
501920
+ if (g2[0] >= 65152 && g2[0] <= 65215 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 24318) {
501921
+ return composeV4(g2[6], g2[7]);
501922
+ }
501923
+ return null;
501924
+ }
501925
+ function composeV4(hi, lo) {
501926
+ return `${hi >> 8}.${hi & 255}.${lo >> 8}.${lo & 255}`;
501927
+ }
501879
501928
  function expandIPv6Groups(addr) {
501880
501929
  let tailHextets = [];
501881
501930
  if (addr.includes(".")) {
501882
501931
  const lastColon = addr.lastIndexOf(":");
501883
501932
  const v4 = addr.slice(lastColon + 1);
501884
501933
  addr = addr.slice(0, lastColon);
501934
+ if (addr === ":") {
501935
+ addr = "::";
501936
+ }
501885
501937
  const octets = v4.split(".").map(Number);
501886
501938
  if (octets.length !== 4 || octets.some((n3) => !Number.isInteger(n3) || n3 < 0 || n3 > 255)) {
501887
501939
  return null;
@@ -501915,17 +501967,6 @@ function expandIPv6Groups(addr) {
501915
501967
  nums.push(...tailHextets);
501916
501968
  return nums.length === 8 ? nums : null;
501917
501969
  }
501918
- function extractMappedIPv4(addr) {
501919
- const g2 = expandIPv6Groups(addr);
501920
- if (!g2)
501921
- return null;
501922
- if (g2[0] === 0 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 65535) {
501923
- const hi = g2[6];
501924
- const lo = g2[7];
501925
- return `${hi >> 8}.${hi & 255}.${lo >> 8}.${lo & 255}`;
501926
- }
501927
- return null;
501928
- }
501929
501970
  function ssrfGuardedLookup(hostname4, options, callback) {
501930
501971
  const wantsAll = "all" in options && options.all === true;
501931
501972
  const ipVersion = isIP4(hostname4);
@@ -566386,6 +566427,7 @@ function migrateEnableAllProjectMcpServersToSettings() {
566386
566427
  }
566387
566428
  const originalSettings = getSettingsForSource("localSettings") || {};
566388
566429
  const originalProjectConfig = { ...projectConfig };
566430
+ const originalSettingsHash = JSON.stringify(originalSettings);
566389
566431
  const migratedFields = [];
566390
566432
  const updates = {};
566391
566433
  try {
@@ -566450,6 +566492,11 @@ function migrateEnableAllProjectMcpServersToSettings() {
566450
566492
  }
566451
566493
  return updated;
566452
566494
  });
566495
+ const currentSettings = getSettingsForSource("localSettings") || {};
566496
+ const currentSettingsHash = JSON.stringify(currentSettings);
566497
+ if (currentSettingsHash !== originalSettingsHash) {
566498
+ logError2("MIGRATION WARNING: Settings file was modified concurrently during migration. " + "The migration will overwrite concurrent changes, potentially causing data loss. " + "Original settings hash: " + originalSettingsHash + ", Current settings hash: " + currentSettingsHash);
566499
+ }
566453
566500
  updateSettingsForSource("localSettings", updates);
566454
566501
  saveGlobalConfig((c6) => ({ ...c6, hasCompletedMcpServerMigration: true }));
566455
566502
  logEvent("tengu_migrate_enable_all_project_mcp_servers_to_settings", {
@@ -566459,15 +566506,20 @@ function migrateEnableAllProjectMcpServersToSettings() {
566459
566506
  } catch (error49) {
566460
566507
  logError2("Failed to migrate MCP server settings, rolling back", error49);
566461
566508
  let rollbackFailed = false;
566462
- const rollbackUpdates = {};
566463
- for (const field of migratedFields) {
566464
- if (field in originalSettings) {
566465
- rollbackUpdates[field] = originalSettings[field];
566466
- } else {
566467
- rollbackUpdates[field] = undefined;
566468
- }
566469
- }
566470
566509
  try {
566510
+ const currentSettings = getSettingsForSource("localSettings") || {};
566511
+ const currentSettingsHash = JSON.stringify(currentSettings);
566512
+ if (currentSettingsHash !== originalSettingsHash) {
566513
+ logError2("MIGRATION WARNING: Settings file was modified concurrently. " + "The rollback will overwrite concurrent changes, potentially causing data loss. " + "Original settings hash: " + originalSettingsHash + ", Current settings hash: " + currentSettingsHash);
566514
+ }
566515
+ const rollbackUpdates = {};
566516
+ for (const field of migratedFields) {
566517
+ if (field in originalSettings) {
566518
+ rollbackUpdates[field] = originalSettings[field];
566519
+ } else {
566520
+ deleteSettingsField("localSettings", field);
566521
+ }
566522
+ }
566471
566523
  updateSettingsForSource("localSettings", rollbackUpdates);
566472
566524
  } catch (rollbackError) {
566473
566525
  logError2("Rollback of settings failed", rollbackError);
@@ -566564,9 +566616,23 @@ function migrateReplBridgeEnabledToRemoteControlAtStartup() {
566564
566616
  return prev;
566565
566617
  if (prev.remoteControlAtStartup !== undefined)
566566
566618
  return prev;
566567
- const { replBridgeEnabled: _2, ...next } = prev;
566568
566619
  const newValue = typeof oldValue === "string" ? oldValue === "true" : Boolean(oldValue);
566569
- return { ...next, remoteControlAtStartup: newValue };
566620
+ return { ...prev, remoteControlAtStartup: newValue };
566621
+ });
566622
+ saveGlobalConfig((prev) => {
566623
+ const oldValue = prev["replBridgeEnabled"];
566624
+ if (oldValue === undefined)
566625
+ return prev;
566626
+ if (prev.remoteControlAtStartup === undefined) {
566627
+ const newValue = typeof oldValue === "string" ? oldValue === "true" : Boolean(oldValue);
566628
+ return {
566629
+ ...prev,
566630
+ remoteControlAtStartup: newValue,
566631
+ replBridgeEnabled: undefined
566632
+ };
566633
+ }
566634
+ const { replBridgeEnabled: _2, ...next } = prev;
566635
+ return next;
566570
566636
  });
566571
566637
  }
566572
566638
  var init_migrateReplBridgeEnabledToRemoteControlAtStartup = __esm(() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funnycode/myclaude",
3
- "version": "0.1.163",
3
+ "version": "0.1.165",
4
4
  "private": false,
5
5
  "description": "An open-source AI coding assistant in your terminal - powered by Claude",
6
6
  "license": "MIT",