@funnycode/myclaude 0.1.182 → 0.1.184

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.182",
8
- BUILD_TIME: "2026-08-04T13:41:43.377Z",
7
+ VERSION: "0.1.184",
8
+ BUILD_TIME: "2026-08-10T02:03:01.135Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -113846,11 +113846,15 @@ class AwsAuthStatusManager {
113846
113846
  var init_awsAuthStatusManager = () => {};
113847
113847
 
113848
113848
  // src/constants/betas.ts
113849
- var CLAUDE_CODE_20250219_BETA_HEADER = "claude-code-20250219", INTERLEAVED_THINKING_BETA_HEADER = "interleaved-thinking-2025-05-14", CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07", CONTEXT_MANAGEMENT_BETA_HEADER = "context-management-2025-06-27", STRUCTURED_OUTPUTS_BETA_HEADER = "structured-outputs-2025-12-15", WEB_SEARCH_BETA_HEADER = "web-search-2025-03-05", TOOL_SEARCH_BETA_HEADER_1P = "advanced-tool-use-2025-11-20", TOOL_SEARCH_BETA_HEADER_3P = "tool-search-tool-2025-10-19", EFFORT_BETA_HEADER = "effort-2025-11-24", TASK_BUDGETS_BETA_HEADER = "task-budgets-2026-03-13", PROMPT_CACHING_SCOPE_BETA_HEADER = "prompt-caching-scope-2026-01-05", FAST_MODE_BETA_HEADER = "fast-mode-2026-02-01", REDACT_THINKING_BETA_HEADER = "redact-thinking-2026-02-12", TOKEN_EFFICIENT_TOOLS_BETA_HEADER = "token-efficient-tools-2026-03-28", SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER, AFK_MODE_BETA_HEADER, CLI_INTERNAL_BETA_HEADER = "", ADVISOR_BETA_HEADER = "advisor-tool-2026-03-01", BEDROCK_EXTRA_PARAMS_HEADERS, VERTEX_COUNT_TOKENS_ALLOWED_BETAS;
113849
+ function getSummarizeConnectorTextBetaHeader() {
113850
+ return getFeatureValue_CACHED_MAY_BE_STALE("CONNECTOR_TEXT", false) ? "summarize-connector-text-2026-03-13" : "";
113851
+ }
113852
+ function getAfkModeBetaHeader() {
113853
+ return getFeatureValue_CACHED_MAY_BE_STALE("TRANSCRIPT_CLASSIFIER", false) ? "afk-mode-2026-01-31" : "";
113854
+ }
113855
+ var CLAUDE_CODE_20250219_BETA_HEADER = "claude-code-20250219", INTERLEAVED_THINKING_BETA_HEADER = "interleaved-thinking-2025-05-14", CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07", CONTEXT_MANAGEMENT_BETA_HEADER = "context-management-2025-06-27", STRUCTURED_OUTPUTS_BETA_HEADER = "structured-outputs-2025-12-15", WEB_SEARCH_BETA_HEADER = "web-search-2025-03-05", TOOL_SEARCH_BETA_HEADER_1P = "advanced-tool-use-2025-11-20", TOOL_SEARCH_BETA_HEADER_3P = "tool-search-tool-2025-10-19", EFFORT_BETA_HEADER = "effort-2025-11-24", TASK_BUDGETS_BETA_HEADER = "task-budgets-2026-03-13", PROMPT_CACHING_SCOPE_BETA_HEADER = "prompt-caching-scope-2026-01-05", FAST_MODE_BETA_HEADER = "fast-mode-2026-02-01", REDACT_THINKING_BETA_HEADER = "redact-thinking-2026-02-12", TOKEN_EFFICIENT_TOOLS_BETA_HEADER = "token-efficient-tools-2026-03-28", CLI_INTERNAL_BETA_HEADER = "", ADVISOR_BETA_HEADER = "advisor-tool-2026-03-01", BEDROCK_EXTRA_PARAMS_HEADERS, VERTEX_COUNT_TOKENS_ALLOWED_BETAS;
113850
113856
  var init_betas = __esm(() => {
113851
113857
  init_growthbook();
113852
- SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER = getFeatureValue_CACHED_MAY_BE_STALE("CONNECTOR_TEXT", false) ? "summarize-connector-text-2026-03-13" : "";
113853
- AFK_MODE_BETA_HEADER = getFeatureValue_CACHED_MAY_BE_STALE("TRANSCRIPT_CLASSIFIER", false) ? "afk-mode-2026-01-31" : "";
113854
113858
  BEDROCK_EXTRA_PARAMS_HEADERS = new Set([
113855
113859
  INTERLEAVED_THINKING_BETA_HEADER,
113856
113860
  CONTEXT_1M_BETA_HEADER,
@@ -115531,8 +115535,9 @@ var init_betas2 = __esm(() => {
115531
115535
  if (includeFirstPartyOnlyBetas && modelSupportsISP(model) && !getIsNonInteractiveSession() && getInitialSettings().showThinkingSummaries !== true) {
115532
115536
  betaHeaders.push(REDACT_THINKING_BETA_HEADER);
115533
115537
  }
115534
- if (SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER && process.env.USER_TYPE === "ant" && includeFirstPartyOnlyBetas && !isEnvDefinedFalsy(process.env.USE_CONNECTOR_TEXT_SUMMARIZATION) && (isEnvTruthy(process.env.USE_CONNECTOR_TEXT_SUMMARIZATION) || getFeatureValue_CACHED_MAY_BE_STALE("tengu_slate_prism", false))) {
115535
- betaHeaders.push(SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER);
115538
+ const summarizeConnectorTextBetaHeader = getSummarizeConnectorTextBetaHeader();
115539
+ if (summarizeConnectorTextBetaHeader && process.env.USER_TYPE === "ant" && includeFirstPartyOnlyBetas && !isEnvDefinedFalsy(process.env.USE_CONNECTOR_TEXT_SUMMARIZATION) && (isEnvTruthy(process.env.USE_CONNECTOR_TEXT_SUMMARIZATION) || getFeatureValue_CACHED_MAY_BE_STALE("tengu_slate_prism", false))) {
115540
+ betaHeaders.push(summarizeConnectorTextBetaHeader);
115536
115541
  }
115537
115542
  const antOptedIntoToolClearing = isEnvTruthy(process.env.USE_API_CONTEXT_MANAGEMENT) && process.env.USER_TYPE === "ant";
115538
115543
  const thinkingPreservationEnabled = modelSupportsContextManagement(model);
@@ -117146,7 +117151,7 @@ var package_default;
117146
117151
  var init_package = __esm(() => {
117147
117152
  package_default = {
117148
117153
  name: "@funnycode/myclaude",
117149
- version: "0.1.182",
117154
+ version: "0.1.184",
117150
117155
  private: false,
117151
117156
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
117152
117157
  license: "MIT",
@@ -117169,6 +117174,7 @@ var init_package = __esm(() => {
117169
117174
  start: "bun run ./src/dev-entry.ts",
117170
117175
  test: "bun test",
117171
117176
  "test:watch": "bun test --watch",
117177
+ "test:perf": "bun test src/tests/performance-regression.test.ts",
117172
117178
  build: "bun run ./scripts/build.ts",
117173
117179
  prepublishOnly: "bun run build",
117174
117180
  version: "bun run ./src/dev-entry.ts --version"
@@ -209355,6 +209361,18 @@ function parseEventData(event) {
209355
209361
  function hashString3(str) {
209356
209362
  return createHash5("sha256").update(str).digest("hex");
209357
209363
  }
209364
+ function trimDumpState() {
209365
+ if (dumpState.size <= MAX_DUMP_STATE_SESSIONS)
209366
+ return;
209367
+ const excess = dumpState.size - MAX_DUMP_STATE_SESSIONS;
209368
+ let evicted = 0;
209369
+ for (const key2 of dumpState.keys()) {
209370
+ if (evicted >= excess)
209371
+ break;
209372
+ dumpState.delete(key2);
209373
+ evicted++;
209374
+ }
209375
+ }
209358
209376
  function enqueueDumpRequest(agentIdOrSessionId, callback) {
209359
209377
  if (!dumpRequestQueue.has(agentIdOrSessionId)) {
209360
209378
  dumpRequestQueue.set(agentIdOrSessionId, []);
@@ -209410,7 +209428,8 @@ function addApiRequestToCache(requestData) {
209410
209428
  }
209411
209429
  }
209412
209430
  function getDumpPromptsPath(agentIdOrSessionId) {
209413
- return join48(getClaudeConfigHomeDir(), "dump-prompts", `${agentIdOrSessionId ?? getSessionId()}.jsonl`);
209431
+ const safeId = (agentIdOrSessionId ?? getSessionId()).replace(/[^a-zA-Z0-9._-]/g, "_");
209432
+ return join48(getClaudeConfigHomeDir(), "dump-prompts", `${safeId}.jsonl`);
209414
209433
  }
209415
209434
  async function appendToFile(filePath, entries) {
209416
209435
  if (entries.length === 0)
@@ -209489,6 +209508,7 @@ function createDumpPromptsFetch(agentIdOrSessionId) {
209489
209508
  lastInitFingerprint: ""
209490
209509
  };
209491
209510
  dumpState.set(agentIdOrSessionId, state);
209511
+ trimDumpState();
209492
209512
  let timestamp;
209493
209513
  if (init2?.method === "POST" && init2.body) {
209494
209514
  if (process.env.USER_TYPE === "ant") {
@@ -209595,7 +209615,7 @@ function createDumpPromptsFetch(agentIdOrSessionId) {
209595
209615
  return response;
209596
209616
  };
209597
209617
  }
209598
- var MAX_CACHED_REQUESTS = 5, cachedApiRequests, dumpState, dumpRequestQueue, processingPromises, enqueueMutexes;
209618
+ var MAX_CACHED_REQUESTS = 5, cachedApiRequests, dumpState, MAX_DUMP_STATE_SESSIONS = 200, dumpRequestQueue, processingPromises, enqueueMutexes;
209599
209619
  var init_dumpPrompts = __esm(() => {
209600
209620
  init_state();
209601
209621
  init_envUtils();
@@ -341711,6 +341731,20 @@ var init_KeybindingProviderSetup = __esm(() => {
341711
341731
  });
341712
341732
 
341713
341733
  // src/services/api/sessionIngress.ts
341734
+ function trimSessionCaches() {
341735
+ for (const map3 of [lastUuidMap, sequentialBySession]) {
341736
+ if (map3.size <= MAX_CACHED_SESSIONS)
341737
+ continue;
341738
+ const excess = map3.size - MAX_CACHED_SESSIONS;
341739
+ let evicted = 0;
341740
+ for (const key2 of map3.keys()) {
341741
+ if (evicted >= excess)
341742
+ break;
341743
+ map3.delete(key2);
341744
+ evicted++;
341745
+ }
341746
+ }
341747
+ }
341714
341748
  function getOrCreateSequential(sessionId) {
341715
341749
  let wrapper = sequentialBySession.get(sessionId);
341716
341750
  if (!wrapper) {
@@ -341724,6 +341758,7 @@ function getOrCreateSequential(sessionId) {
341724
341758
  }
341725
341759
  });
341726
341760
  sequentialBySession.set(sessionId, wrapper);
341761
+ trimSessionCaches();
341727
341762
  }
341728
341763
  return wrapper;
341729
341764
  }
@@ -342002,7 +342037,7 @@ function clearAllSessions() {
342002
342037
  lastUuidMap.clear();
342003
342038
  sequentialBySession.clear();
342004
342039
  }
342005
- var lastUuidMap, MAX_RETRIES = 5, BASE_DELAY_MS2 = 500, sequentialBySession;
342040
+ var lastUuidMap, MAX_CACHED_SESSIONS = 500, MAX_RETRIES = 5, BASE_DELAY_MS2 = 500, sequentialBySession;
342006
342041
  var init_sessionIngress = __esm(() => {
342007
342042
  init_axios2();
342008
342043
  init_oauth();
@@ -404036,7 +404071,8 @@ function getAssistantMessageFromError(error49, model, options) {
404036
404071
  errorDetails: error49.message
404037
404072
  });
404038
404073
  }
404039
- if (AFK_MODE_BETA_HEADER && error49 instanceof APIError && error49.status === 400 && error49.message.includes(AFK_MODE_BETA_HEADER) && error49.message.includes("anthropic-beta")) {
404074
+ const afkModeBetaHeader = getAfkModeBetaHeader();
404075
+ if (afkModeBetaHeader && error49 instanceof APIError && error49.status === 400 && error49.message.includes(afkModeBetaHeader) && error49.message.includes("anthropic-beta")) {
404040
404076
  return createAssistantAPIErrorMessage({
404041
404077
  content: "Auto mode is unavailable for your plan",
404042
404078
  error: "invalid_request"
@@ -563346,7 +563382,8 @@ function migrateBypassPermissionsAcceptedToSettings() {
563346
563382
  }
563347
563383
  try {
563348
563384
  if (!hasSkipDangerousModePermissionPrompt()) {
563349
- const userExplicitlyOptedOut = getSettingsForSource("userSettings")?.skipDangerousModePermissionPrompt === false || getSettingsForSource("localSettings")?.skipDangerousModePermissionPrompt === false || getSettingsForSource("flagSettings")?.skipDangerousModePermissionPrompt === false || getSettingsForSource("policySettings")?.skipDangerousModePermissionPrompt === false;
563385
+ const effectiveSkip = ["userSettings", "localSettings", "flagSettings", "policySettings"].map((source) => getSettingsForSource(source)?.skipDangerousModePermissionPrompt).find((value) => value !== undefined);
563386
+ const userExplicitlyOptedOut = effectiveSkip === false;
563350
563387
  if (!userExplicitlyOptedOut) {
563351
563388
  updateSettingsForSource("userSettings", {
563352
563389
  skipDangerousModePermissionPrompt: true
@@ -563373,6 +563410,7 @@ var init_migrateBypassPermissionsAcceptedToSettings = __esm(() => {
563373
563410
  });
563374
563411
 
563375
563412
  // src/migrations/migrateEnableAllProjectMcpServersToSettings.ts
563413
+ import { createHash as createHash21 } from "crypto";
563376
563414
  function migrateEnableAllProjectMcpServersToSettings() {
563377
563415
  const globalConfig2 = getGlobalConfig();
563378
563416
  if (globalConfig2.hasCompletedMcpServerMigration) {
@@ -563425,8 +563463,9 @@ function migrateEnableAllProjectMcpServersToSettings() {
563425
563463
  }
563426
563464
  const overlappingServers = existingEnabledServers.filter((server) => existingDisabledServers.includes(server));
563427
563465
  if (overlappingServers.length > 0) {
563466
+ const hashedServers = overlappingServers.map((server) => createHash21("sha256").update(server).digest("hex").slice(0, 16));
563428
563467
  logEvent("tengu_migrate_mcp_server_conflict_resolved", {
563429
- overlappingServers: overlappingServers.join(","),
563468
+ overlappingServers: hashedServers.join(","),
563430
563469
  conflictResolution: "removed_from_disabled"
563431
563470
  });
563432
563471
  }
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.182",
8
- BUILD_TIME: "2026-08-04T13:41:43.377Z",
7
+ VERSION: "0.1.184",
8
+ BUILD_TIME: "2026-08-10T02:03:01.135Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -113846,11 +113846,15 @@ class AwsAuthStatusManager {
113846
113846
  var init_awsAuthStatusManager = () => {};
113847
113847
 
113848
113848
  // src/constants/betas.ts
113849
- var CLAUDE_CODE_20250219_BETA_HEADER = "claude-code-20250219", INTERLEAVED_THINKING_BETA_HEADER = "interleaved-thinking-2025-05-14", CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07", CONTEXT_MANAGEMENT_BETA_HEADER = "context-management-2025-06-27", STRUCTURED_OUTPUTS_BETA_HEADER = "structured-outputs-2025-12-15", WEB_SEARCH_BETA_HEADER = "web-search-2025-03-05", TOOL_SEARCH_BETA_HEADER_1P = "advanced-tool-use-2025-11-20", TOOL_SEARCH_BETA_HEADER_3P = "tool-search-tool-2025-10-19", EFFORT_BETA_HEADER = "effort-2025-11-24", TASK_BUDGETS_BETA_HEADER = "task-budgets-2026-03-13", PROMPT_CACHING_SCOPE_BETA_HEADER = "prompt-caching-scope-2026-01-05", FAST_MODE_BETA_HEADER = "fast-mode-2026-02-01", REDACT_THINKING_BETA_HEADER = "redact-thinking-2026-02-12", TOKEN_EFFICIENT_TOOLS_BETA_HEADER = "token-efficient-tools-2026-03-28", SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER, AFK_MODE_BETA_HEADER, CLI_INTERNAL_BETA_HEADER = "", ADVISOR_BETA_HEADER = "advisor-tool-2026-03-01", BEDROCK_EXTRA_PARAMS_HEADERS, VERTEX_COUNT_TOKENS_ALLOWED_BETAS;
113849
+ function getSummarizeConnectorTextBetaHeader() {
113850
+ return getFeatureValue_CACHED_MAY_BE_STALE("CONNECTOR_TEXT", false) ? "summarize-connector-text-2026-03-13" : "";
113851
+ }
113852
+ function getAfkModeBetaHeader() {
113853
+ return getFeatureValue_CACHED_MAY_BE_STALE("TRANSCRIPT_CLASSIFIER", false) ? "afk-mode-2026-01-31" : "";
113854
+ }
113855
+ var CLAUDE_CODE_20250219_BETA_HEADER = "claude-code-20250219", INTERLEAVED_THINKING_BETA_HEADER = "interleaved-thinking-2025-05-14", CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07", CONTEXT_MANAGEMENT_BETA_HEADER = "context-management-2025-06-27", STRUCTURED_OUTPUTS_BETA_HEADER = "structured-outputs-2025-12-15", WEB_SEARCH_BETA_HEADER = "web-search-2025-03-05", TOOL_SEARCH_BETA_HEADER_1P = "advanced-tool-use-2025-11-20", TOOL_SEARCH_BETA_HEADER_3P = "tool-search-tool-2025-10-19", EFFORT_BETA_HEADER = "effort-2025-11-24", TASK_BUDGETS_BETA_HEADER = "task-budgets-2026-03-13", PROMPT_CACHING_SCOPE_BETA_HEADER = "prompt-caching-scope-2026-01-05", FAST_MODE_BETA_HEADER = "fast-mode-2026-02-01", REDACT_THINKING_BETA_HEADER = "redact-thinking-2026-02-12", TOKEN_EFFICIENT_TOOLS_BETA_HEADER = "token-efficient-tools-2026-03-28", CLI_INTERNAL_BETA_HEADER = "", ADVISOR_BETA_HEADER = "advisor-tool-2026-03-01", BEDROCK_EXTRA_PARAMS_HEADERS, VERTEX_COUNT_TOKENS_ALLOWED_BETAS;
113850
113856
  var init_betas = __esm(() => {
113851
113857
  init_growthbook();
113852
- SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER = getFeatureValue_CACHED_MAY_BE_STALE("CONNECTOR_TEXT", false) ? "summarize-connector-text-2026-03-13" : "";
113853
- AFK_MODE_BETA_HEADER = getFeatureValue_CACHED_MAY_BE_STALE("TRANSCRIPT_CLASSIFIER", false) ? "afk-mode-2026-01-31" : "";
113854
113858
  BEDROCK_EXTRA_PARAMS_HEADERS = new Set([
113855
113859
  INTERLEAVED_THINKING_BETA_HEADER,
113856
113860
  CONTEXT_1M_BETA_HEADER,
@@ -115531,8 +115535,9 @@ var init_betas2 = __esm(() => {
115531
115535
  if (includeFirstPartyOnlyBetas && modelSupportsISP(model) && !getIsNonInteractiveSession() && getInitialSettings().showThinkingSummaries !== true) {
115532
115536
  betaHeaders.push(REDACT_THINKING_BETA_HEADER);
115533
115537
  }
115534
- if (SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER && process.env.USER_TYPE === "ant" && includeFirstPartyOnlyBetas && !isEnvDefinedFalsy(process.env.USE_CONNECTOR_TEXT_SUMMARIZATION) && (isEnvTruthy(process.env.USE_CONNECTOR_TEXT_SUMMARIZATION) || getFeatureValue_CACHED_MAY_BE_STALE("tengu_slate_prism", false))) {
115535
- betaHeaders.push(SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER);
115538
+ const summarizeConnectorTextBetaHeader = getSummarizeConnectorTextBetaHeader();
115539
+ if (summarizeConnectorTextBetaHeader && process.env.USER_TYPE === "ant" && includeFirstPartyOnlyBetas && !isEnvDefinedFalsy(process.env.USE_CONNECTOR_TEXT_SUMMARIZATION) && (isEnvTruthy(process.env.USE_CONNECTOR_TEXT_SUMMARIZATION) || getFeatureValue_CACHED_MAY_BE_STALE("tengu_slate_prism", false))) {
115540
+ betaHeaders.push(summarizeConnectorTextBetaHeader);
115536
115541
  }
115537
115542
  const antOptedIntoToolClearing = isEnvTruthy(process.env.USE_API_CONTEXT_MANAGEMENT) && process.env.USER_TYPE === "ant";
115538
115543
  const thinkingPreservationEnabled = modelSupportsContextManagement(model);
@@ -117146,7 +117151,7 @@ var package_default;
117146
117151
  var init_package = __esm(() => {
117147
117152
  package_default = {
117148
117153
  name: "@funnycode/myclaude",
117149
- version: "0.1.182",
117154
+ version: "0.1.184",
117150
117155
  private: false,
117151
117156
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
117152
117157
  license: "MIT",
@@ -117169,6 +117174,7 @@ var init_package = __esm(() => {
117169
117174
  start: "bun run ./src/dev-entry.ts",
117170
117175
  test: "bun test",
117171
117176
  "test:watch": "bun test --watch",
117177
+ "test:perf": "bun test src/tests/performance-regression.test.ts",
117172
117178
  build: "bun run ./scripts/build.ts",
117173
117179
  prepublishOnly: "bun run build",
117174
117180
  version: "bun run ./src/dev-entry.ts --version"
@@ -209355,6 +209361,18 @@ function parseEventData(event) {
209355
209361
  function hashString3(str) {
209356
209362
  return createHash5("sha256").update(str).digest("hex");
209357
209363
  }
209364
+ function trimDumpState() {
209365
+ if (dumpState.size <= MAX_DUMP_STATE_SESSIONS)
209366
+ return;
209367
+ const excess = dumpState.size - MAX_DUMP_STATE_SESSIONS;
209368
+ let evicted = 0;
209369
+ for (const key2 of dumpState.keys()) {
209370
+ if (evicted >= excess)
209371
+ break;
209372
+ dumpState.delete(key2);
209373
+ evicted++;
209374
+ }
209375
+ }
209358
209376
  function enqueueDumpRequest(agentIdOrSessionId, callback) {
209359
209377
  if (!dumpRequestQueue.has(agentIdOrSessionId)) {
209360
209378
  dumpRequestQueue.set(agentIdOrSessionId, []);
@@ -209410,7 +209428,8 @@ function addApiRequestToCache(requestData) {
209410
209428
  }
209411
209429
  }
209412
209430
  function getDumpPromptsPath(agentIdOrSessionId) {
209413
- return join48(getClaudeConfigHomeDir(), "dump-prompts", `${agentIdOrSessionId ?? getSessionId()}.jsonl`);
209431
+ const safeId = (agentIdOrSessionId ?? getSessionId()).replace(/[^a-zA-Z0-9._-]/g, "_");
209432
+ return join48(getClaudeConfigHomeDir(), "dump-prompts", `${safeId}.jsonl`);
209414
209433
  }
209415
209434
  async function appendToFile(filePath, entries) {
209416
209435
  if (entries.length === 0)
@@ -209489,6 +209508,7 @@ function createDumpPromptsFetch(agentIdOrSessionId) {
209489
209508
  lastInitFingerprint: ""
209490
209509
  };
209491
209510
  dumpState.set(agentIdOrSessionId, state);
209511
+ trimDumpState();
209492
209512
  let timestamp;
209493
209513
  if (init2?.method === "POST" && init2.body) {
209494
209514
  if (process.env.USER_TYPE === "ant") {
@@ -209595,7 +209615,7 @@ function createDumpPromptsFetch(agentIdOrSessionId) {
209595
209615
  return response;
209596
209616
  };
209597
209617
  }
209598
- var MAX_CACHED_REQUESTS = 5, cachedApiRequests, dumpState, dumpRequestQueue, processingPromises, enqueueMutexes;
209618
+ var MAX_CACHED_REQUESTS = 5, cachedApiRequests, dumpState, MAX_DUMP_STATE_SESSIONS = 200, dumpRequestQueue, processingPromises, enqueueMutexes;
209599
209619
  var init_dumpPrompts = __esm(() => {
209600
209620
  init_state();
209601
209621
  init_envUtils();
@@ -341711,6 +341731,20 @@ var init_KeybindingProviderSetup = __esm(() => {
341711
341731
  });
341712
341732
 
341713
341733
  // src/services/api/sessionIngress.ts
341734
+ function trimSessionCaches() {
341735
+ for (const map3 of [lastUuidMap, sequentialBySession]) {
341736
+ if (map3.size <= MAX_CACHED_SESSIONS)
341737
+ continue;
341738
+ const excess = map3.size - MAX_CACHED_SESSIONS;
341739
+ let evicted = 0;
341740
+ for (const key2 of map3.keys()) {
341741
+ if (evicted >= excess)
341742
+ break;
341743
+ map3.delete(key2);
341744
+ evicted++;
341745
+ }
341746
+ }
341747
+ }
341714
341748
  function getOrCreateSequential(sessionId) {
341715
341749
  let wrapper = sequentialBySession.get(sessionId);
341716
341750
  if (!wrapper) {
@@ -341724,6 +341758,7 @@ function getOrCreateSequential(sessionId) {
341724
341758
  }
341725
341759
  });
341726
341760
  sequentialBySession.set(sessionId, wrapper);
341761
+ trimSessionCaches();
341727
341762
  }
341728
341763
  return wrapper;
341729
341764
  }
@@ -342002,7 +342037,7 @@ function clearAllSessions() {
342002
342037
  lastUuidMap.clear();
342003
342038
  sequentialBySession.clear();
342004
342039
  }
342005
- var lastUuidMap, MAX_RETRIES = 5, BASE_DELAY_MS2 = 500, sequentialBySession;
342040
+ var lastUuidMap, MAX_CACHED_SESSIONS = 500, MAX_RETRIES = 5, BASE_DELAY_MS2 = 500, sequentialBySession;
342006
342041
  var init_sessionIngress = __esm(() => {
342007
342042
  init_axios2();
342008
342043
  init_oauth();
@@ -404036,7 +404071,8 @@ function getAssistantMessageFromError(error49, model, options) {
404036
404071
  errorDetails: error49.message
404037
404072
  });
404038
404073
  }
404039
- if (AFK_MODE_BETA_HEADER && error49 instanceof APIError && error49.status === 400 && error49.message.includes(AFK_MODE_BETA_HEADER) && error49.message.includes("anthropic-beta")) {
404074
+ const afkModeBetaHeader = getAfkModeBetaHeader();
404075
+ if (afkModeBetaHeader && error49 instanceof APIError && error49.status === 400 && error49.message.includes(afkModeBetaHeader) && error49.message.includes("anthropic-beta")) {
404040
404076
  return createAssistantAPIErrorMessage({
404041
404077
  content: "Auto mode is unavailable for your plan",
404042
404078
  error: "invalid_request"
@@ -563346,7 +563382,8 @@ function migrateBypassPermissionsAcceptedToSettings() {
563346
563382
  }
563347
563383
  try {
563348
563384
  if (!hasSkipDangerousModePermissionPrompt()) {
563349
- const userExplicitlyOptedOut = getSettingsForSource("userSettings")?.skipDangerousModePermissionPrompt === false || getSettingsForSource("localSettings")?.skipDangerousModePermissionPrompt === false || getSettingsForSource("flagSettings")?.skipDangerousModePermissionPrompt === false || getSettingsForSource("policySettings")?.skipDangerousModePermissionPrompt === false;
563385
+ const effectiveSkip = ["userSettings", "localSettings", "flagSettings", "policySettings"].map((source) => getSettingsForSource(source)?.skipDangerousModePermissionPrompt).find((value) => value !== undefined);
563386
+ const userExplicitlyOptedOut = effectiveSkip === false;
563350
563387
  if (!userExplicitlyOptedOut) {
563351
563388
  updateSettingsForSource("userSettings", {
563352
563389
  skipDangerousModePermissionPrompt: true
@@ -563373,6 +563410,7 @@ var init_migrateBypassPermissionsAcceptedToSettings = __esm(() => {
563373
563410
  });
563374
563411
 
563375
563412
  // src/migrations/migrateEnableAllProjectMcpServersToSettings.ts
563413
+ import { createHash as createHash21 } from "crypto";
563376
563414
  function migrateEnableAllProjectMcpServersToSettings() {
563377
563415
  const globalConfig2 = getGlobalConfig();
563378
563416
  if (globalConfig2.hasCompletedMcpServerMigration) {
@@ -563425,8 +563463,9 @@ function migrateEnableAllProjectMcpServersToSettings() {
563425
563463
  }
563426
563464
  const overlappingServers = existingEnabledServers.filter((server) => existingDisabledServers.includes(server));
563427
563465
  if (overlappingServers.length > 0) {
563466
+ const hashedServers = overlappingServers.map((server) => createHash21("sha256").update(server).digest("hex").slice(0, 16));
563428
563467
  logEvent("tengu_migrate_mcp_server_conflict_resolved", {
563429
- overlappingServers: overlappingServers.join(","),
563468
+ overlappingServers: hashedServers.join(","),
563430
563469
  conflictResolution: "removed_from_disabled"
563431
563470
  });
563432
563471
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funnycode/myclaude",
3
- "version": "0.1.182",
3
+ "version": "0.1.184",
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"