@funnycode/myclaude 0.1.162 → 0.1.164

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.162",
8
- BUILD_TIME: "2026-07-30T18:43:12.950Z",
7
+ VERSION: "0.1.164",
8
+ BUILD_TIME: "2026-07-30T22:29:53.074Z",
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.162",
119856
+ version: "0.1.164",
119833
119857
  private: false,
119834
119858
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
119835
119859
  license: "MIT",
@@ -501863,25 +501887,50 @@ function isBlockedV6(address) {
501863
501887
  return false;
501864
501888
  if (lower === "::")
501865
501889
  return true;
501866
- const mappedV4 = extractMappedIPv4(lower);
501867
- if (mappedV4 !== null) {
501868
- return isBlockedV4(mappedV4);
501890
+ const g2 = expandIPv6Groups(lower);
501891
+ if (!g2)
501892
+ return false;
501893
+ const embeddedV4 = extractEmbeddedIPv4(g2);
501894
+ if (embeddedV4 !== null) {
501895
+ return isBlockedV4(embeddedV4);
501869
501896
  }
501870
- if (lower.startsWith("fc") || lower.startsWith("fd")) {
501897
+ if (g2[0] >= 64512 && g2[0] <= 65023) {
501871
501898
  return true;
501872
501899
  }
501873
- const firstHextet = lower.split(":")[0];
501874
- if (firstHextet && firstHextet.length === 4 && firstHextet >= "fe80" && firstHextet <= "febf") {
501900
+ if (g2[0] >= 65152 && g2[0] <= 65215) {
501875
501901
  return true;
501876
501902
  }
501877
501903
  return false;
501878
501904
  }
501905
+ function extractEmbeddedIPv4(g2) {
501906
+ if (g2.length !== 8)
501907
+ return null;
501908
+ if (g2[0] === 0 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 65535) {
501909
+ return composeV4(g2[6], g2[7]);
501910
+ }
501911
+ if (g2[0] === 0 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 0) {
501912
+ return composeV4(g2[6], g2[7]);
501913
+ }
501914
+ if (g2[0] === 8194) {
501915
+ return composeV4(g2[1], g2[2]);
501916
+ }
501917
+ if (g2[0] >= 65152 && g2[0] <= 65215 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 24318) {
501918
+ return composeV4(g2[6], g2[7]);
501919
+ }
501920
+ return null;
501921
+ }
501922
+ function composeV4(hi, lo) {
501923
+ return `${hi >> 8}.${hi & 255}.${lo >> 8}.${lo & 255}`;
501924
+ }
501879
501925
  function expandIPv6Groups(addr) {
501880
501926
  let tailHextets = [];
501881
501927
  if (addr.includes(".")) {
501882
501928
  const lastColon = addr.lastIndexOf(":");
501883
501929
  const v4 = addr.slice(lastColon + 1);
501884
501930
  addr = addr.slice(0, lastColon);
501931
+ if (addr === ":") {
501932
+ addr = "::";
501933
+ }
501885
501934
  const octets = v4.split(".").map(Number);
501886
501935
  if (octets.length !== 4 || octets.some((n3) => !Number.isInteger(n3) || n3 < 0 || n3 > 255)) {
501887
501936
  return null;
@@ -501915,17 +501964,6 @@ function expandIPv6Groups(addr) {
501915
501964
  nums.push(...tailHextets);
501916
501965
  return nums.length === 8 ? nums : null;
501917
501966
  }
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
501967
  function ssrfGuardedLookup(hostname4, options, callback) {
501930
501968
  const wantsAll = "all" in options && options.all === true;
501931
501969
  const ipVersion = isIP4(hostname4);
@@ -566443,7 +566481,6 @@ function migrateEnableAllProjectMcpServersToSettings() {
566443
566481
  if (existingHadDisabledServers || hasDisabledServersArray) {
566444
566482
  updates.disabledMcpjsonServers = existingDisabledServers;
566445
566483
  }
566446
- updateSettingsForSource("localSettings", updates);
566447
566484
  saveCurrentProjectConfig((config5) => {
566448
566485
  const updated = { ...config5 };
566449
566486
  for (const field of migratedFields) {
@@ -566451,6 +566488,7 @@ function migrateEnableAllProjectMcpServersToSettings() {
566451
566488
  }
566452
566489
  return updated;
566453
566490
  });
566491
+ updateSettingsForSource("localSettings", updates);
566454
566492
  saveGlobalConfig((c6) => ({ ...c6, hasCompletedMcpServerMigration: true }));
566455
566493
  logEvent("tengu_migrate_enable_all_project_mcp_servers_to_settings", {
566456
566494
  migration: "enableAllProjectMcpServersToSettings",
@@ -566459,15 +566497,15 @@ function migrateEnableAllProjectMcpServersToSettings() {
566459
566497
  } catch (error49) {
566460
566498
  logError2("Failed to migrate MCP server settings, rolling back", error49);
566461
566499
  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
566500
  try {
566501
+ const rollbackUpdates = {};
566502
+ for (const field of migratedFields) {
566503
+ if (field in originalSettings) {
566504
+ rollbackUpdates[field] = originalSettings[field];
566505
+ } else {
566506
+ deleteSettingsField("localSettings", field);
566507
+ }
566508
+ }
566471
566509
  updateSettingsForSource("localSettings", rollbackUpdates);
566472
566510
  } catch (rollbackError) {
566473
566511
  logError2("Rollback of settings failed", rollbackError);
@@ -566486,9 +566524,11 @@ function migrateEnableAllProjectMcpServersToSettings() {
566486
566524
  rollbackFailed = true;
566487
566525
  }
566488
566526
  if (rollbackFailed) {
566527
+ logError2("MIGRATION WARNING: Rollback was incomplete. The system may be in an inconsistent " + "state with duplicate or conflicting MCP server configuration. Manual intervention " + "may be required to restore consistency between project config and settings.", 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))));
566489
566528
  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)));
566529
+ } else {
566530
+ logError2("Rollback completed successfully: original MCP server settings restored", error49);
566490
566531
  }
566491
- logError2("Rollback completed successfully: original MCP server settings restored", error49);
566492
566532
  }
566493
566533
  }
566494
566534
  var init_migrateEnableAllProjectMcpServersToSettings = __esm(() => {
@@ -566562,9 +566602,23 @@ function migrateReplBridgeEnabledToRemoteControlAtStartup() {
566562
566602
  return prev;
566563
566603
  if (prev.remoteControlAtStartup !== undefined)
566564
566604
  return prev;
566565
- const { replBridgeEnabled: _2, ...next } = prev;
566566
566605
  const newValue = typeof oldValue === "string" ? oldValue === "true" : Boolean(oldValue);
566567
- return { ...next, remoteControlAtStartup: newValue };
566606
+ return { ...prev, remoteControlAtStartup: newValue };
566607
+ });
566608
+ saveGlobalConfig((prev) => {
566609
+ const oldValue = prev["replBridgeEnabled"];
566610
+ if (oldValue === undefined)
566611
+ return prev;
566612
+ if (prev.remoteControlAtStartup === undefined) {
566613
+ const newValue = typeof oldValue === "string" ? oldValue === "true" : Boolean(oldValue);
566614
+ return {
566615
+ ...prev,
566616
+ remoteControlAtStartup: newValue,
566617
+ replBridgeEnabled: undefined
566618
+ };
566619
+ }
566620
+ const { replBridgeEnabled: _2, ...next } = prev;
566621
+ return next;
566568
566622
  });
566569
566623
  }
566570
566624
  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.162",
8
- BUILD_TIME: "2026-07-30T18:43:12.950Z",
7
+ VERSION: "0.1.164",
8
+ BUILD_TIME: "2026-07-30T22:29:53.074Z",
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.162",
119856
+ version: "0.1.164",
119833
119857
  private: false,
119834
119858
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
119835
119859
  license: "MIT",
@@ -501863,25 +501887,50 @@ function isBlockedV6(address) {
501863
501887
  return false;
501864
501888
  if (lower === "::")
501865
501889
  return true;
501866
- const mappedV4 = extractMappedIPv4(lower);
501867
- if (mappedV4 !== null) {
501868
- return isBlockedV4(mappedV4);
501890
+ const g2 = expandIPv6Groups(lower);
501891
+ if (!g2)
501892
+ return false;
501893
+ const embeddedV4 = extractEmbeddedIPv4(g2);
501894
+ if (embeddedV4 !== null) {
501895
+ return isBlockedV4(embeddedV4);
501869
501896
  }
501870
- if (lower.startsWith("fc") || lower.startsWith("fd")) {
501897
+ if (g2[0] >= 64512 && g2[0] <= 65023) {
501871
501898
  return true;
501872
501899
  }
501873
- const firstHextet = lower.split(":")[0];
501874
- if (firstHextet && firstHextet.length === 4 && firstHextet >= "fe80" && firstHextet <= "febf") {
501900
+ if (g2[0] >= 65152 && g2[0] <= 65215) {
501875
501901
  return true;
501876
501902
  }
501877
501903
  return false;
501878
501904
  }
501905
+ function extractEmbeddedIPv4(g2) {
501906
+ if (g2.length !== 8)
501907
+ return null;
501908
+ if (g2[0] === 0 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 65535) {
501909
+ return composeV4(g2[6], g2[7]);
501910
+ }
501911
+ if (g2[0] === 0 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 0) {
501912
+ return composeV4(g2[6], g2[7]);
501913
+ }
501914
+ if (g2[0] === 8194) {
501915
+ return composeV4(g2[1], g2[2]);
501916
+ }
501917
+ if (g2[0] >= 65152 && g2[0] <= 65215 && g2[1] === 0 && g2[2] === 0 && g2[3] === 0 && g2[4] === 0 && g2[5] === 24318) {
501918
+ return composeV4(g2[6], g2[7]);
501919
+ }
501920
+ return null;
501921
+ }
501922
+ function composeV4(hi, lo) {
501923
+ return `${hi >> 8}.${hi & 255}.${lo >> 8}.${lo & 255}`;
501924
+ }
501879
501925
  function expandIPv6Groups(addr) {
501880
501926
  let tailHextets = [];
501881
501927
  if (addr.includes(".")) {
501882
501928
  const lastColon = addr.lastIndexOf(":");
501883
501929
  const v4 = addr.slice(lastColon + 1);
501884
501930
  addr = addr.slice(0, lastColon);
501931
+ if (addr === ":") {
501932
+ addr = "::";
501933
+ }
501885
501934
  const octets = v4.split(".").map(Number);
501886
501935
  if (octets.length !== 4 || octets.some((n3) => !Number.isInteger(n3) || n3 < 0 || n3 > 255)) {
501887
501936
  return null;
@@ -501915,17 +501964,6 @@ function expandIPv6Groups(addr) {
501915
501964
  nums.push(...tailHextets);
501916
501965
  return nums.length === 8 ? nums : null;
501917
501966
  }
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
501967
  function ssrfGuardedLookup(hostname4, options, callback) {
501930
501968
  const wantsAll = "all" in options && options.all === true;
501931
501969
  const ipVersion = isIP4(hostname4);
@@ -566443,7 +566481,6 @@ function migrateEnableAllProjectMcpServersToSettings() {
566443
566481
  if (existingHadDisabledServers || hasDisabledServersArray) {
566444
566482
  updates.disabledMcpjsonServers = existingDisabledServers;
566445
566483
  }
566446
- updateSettingsForSource("localSettings", updates);
566447
566484
  saveCurrentProjectConfig((config5) => {
566448
566485
  const updated = { ...config5 };
566449
566486
  for (const field of migratedFields) {
@@ -566451,6 +566488,7 @@ function migrateEnableAllProjectMcpServersToSettings() {
566451
566488
  }
566452
566489
  return updated;
566453
566490
  });
566491
+ updateSettingsForSource("localSettings", updates);
566454
566492
  saveGlobalConfig((c6) => ({ ...c6, hasCompletedMcpServerMigration: true }));
566455
566493
  logEvent("tengu_migrate_enable_all_project_mcp_servers_to_settings", {
566456
566494
  migration: "enableAllProjectMcpServersToSettings",
@@ -566459,15 +566497,15 @@ function migrateEnableAllProjectMcpServersToSettings() {
566459
566497
  } catch (error49) {
566460
566498
  logError2("Failed to migrate MCP server settings, rolling back", error49);
566461
566499
  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
566500
  try {
566501
+ const rollbackUpdates = {};
566502
+ for (const field of migratedFields) {
566503
+ if (field in originalSettings) {
566504
+ rollbackUpdates[field] = originalSettings[field];
566505
+ } else {
566506
+ deleteSettingsField("localSettings", field);
566507
+ }
566508
+ }
566471
566509
  updateSettingsForSource("localSettings", rollbackUpdates);
566472
566510
  } catch (rollbackError) {
566473
566511
  logError2("Rollback of settings failed", rollbackError);
@@ -566486,9 +566524,11 @@ function migrateEnableAllProjectMcpServersToSettings() {
566486
566524
  rollbackFailed = true;
566487
566525
  }
566488
566526
  if (rollbackFailed) {
566527
+ logError2("MIGRATION WARNING: Rollback was incomplete. The system may be in an inconsistent " + "state with duplicate or conflicting MCP server configuration. Manual intervention " + "may be required to restore consistency between project config and settings.", 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))));
566489
566528
  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)));
566529
+ } else {
566530
+ logError2("Rollback completed successfully: original MCP server settings restored", error49);
566490
566531
  }
566491
- logError2("Rollback completed successfully: original MCP server settings restored", error49);
566492
566532
  }
566493
566533
  }
566494
566534
  var init_migrateEnableAllProjectMcpServersToSettings = __esm(() => {
@@ -566562,9 +566602,23 @@ function migrateReplBridgeEnabledToRemoteControlAtStartup() {
566562
566602
  return prev;
566563
566603
  if (prev.remoteControlAtStartup !== undefined)
566564
566604
  return prev;
566565
- const { replBridgeEnabled: _2, ...next } = prev;
566566
566605
  const newValue = typeof oldValue === "string" ? oldValue === "true" : Boolean(oldValue);
566567
- return { ...next, remoteControlAtStartup: newValue };
566606
+ return { ...prev, remoteControlAtStartup: newValue };
566607
+ });
566608
+ saveGlobalConfig((prev) => {
566609
+ const oldValue = prev["replBridgeEnabled"];
566610
+ if (oldValue === undefined)
566611
+ return prev;
566612
+ if (prev.remoteControlAtStartup === undefined) {
566613
+ const newValue = typeof oldValue === "string" ? oldValue === "true" : Boolean(oldValue);
566614
+ return {
566615
+ ...prev,
566616
+ remoteControlAtStartup: newValue,
566617
+ replBridgeEnabled: undefined
566618
+ };
566619
+ }
566620
+ const { replBridgeEnabled: _2, ...next } = prev;
566621
+ return next;
566568
566622
  });
566569
566623
  }
566570
566624
  var init_migrateReplBridgeEnabledToRemoteControlAtStartup = __esm(() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funnycode/myclaude",
3
- "version": "0.1.162",
3
+ "version": "0.1.164",
4
4
  "private": false,
5
5
  "description": "An open-source AI coding assistant in your terminal - powered by Claude",
6
6
  "license": "MIT",