@funnycode/myclaude 0.1.85 → 0.1.87

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.85",
8
- BUILD_TIME: "2026-07-16T22:30:57.193Z",
7
+ VERSION: "0.1.87",
8
+ BUILD_TIME: "2026-07-17T07:39:42.011Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -117484,7 +117484,7 @@ var package_default;
117484
117484
  var init_package = __esm(() => {
117485
117485
  package_default = {
117486
117486
  name: "@funnycode/myclaude",
117487
- version: "0.1.85",
117487
+ version: "0.1.87",
117488
117488
  private: false,
117489
117489
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
117490
117490
  license: "MIT",
@@ -210190,8 +210190,7 @@ function addApiRequestToCache(requestData) {
210190
210190
  const metadata = {
210191
210191
  timestamp: new Date().toISOString(),
210192
210192
  request: {
210193
- model: requestData.model,
210194
- requestHash: hashString3(JSON.stringify(requestData))
210193
+ model: requestData.model
210195
210194
  }
210196
210195
  };
210197
210196
  cachedApiRequests.push(metadata);
@@ -210237,7 +210236,11 @@ function dumpRequest(body, ts, state, filePath) {
210237
210236
  }
210238
210237
  for (const msg of messages.slice(state.messageCountSeen)) {
210239
210238
  if (msg.role === "user") {
210240
- entries.push(jsonStringify({ type: "message", timestamp: ts, data: msg }));
210239
+ try {
210240
+ entries.push(jsonStringify({ type: "message", timestamp: ts, data: msg }));
210241
+ } catch (err2) {
210242
+ logError2(`dumpPrompts.dumpRequest: failed to stringify message: ${err2}`);
210243
+ }
210241
210244
  }
210242
210245
  }
210243
210246
  if (shouldWriteInitData) {
@@ -210334,6 +210337,7 @@ var init_dumpPrompts = __esm(() => {
210334
210337
  init_envUtils();
210335
210338
  init_slowOperations();
210336
210339
  init_debug();
210340
+ init_log3();
210337
210341
  cachedApiRequests = [];
210338
210342
  dumpState = new Map;
210339
210343
  dumpRequestQueue = new Map;
@@ -300872,6 +300876,30 @@ var init_gracefulShutdown = __esm(() => {
300872
300876
  });
300873
300877
 
300874
300878
  // src/services/api/grove.ts
300879
+ function memoizeWithTTL(fn, ttlMs) {
300880
+ let lastCachedAt = 0;
300881
+ const memoized = memoize_default(fn);
300882
+ const originalClear = memoized.cache.clear.bind(memoized.cache);
300883
+ const wrapped = async (...args) => {
300884
+ const now2 = Date.now();
300885
+ if (lastCachedAt !== 0 && now2 - lastCachedAt >= ttlMs) {
300886
+ originalClear();
300887
+ lastCachedAt = 0;
300888
+ }
300889
+ const result = await memoized(...args);
300890
+ if (result && typeof result === "object" && "success" in result && result.success === true) {
300891
+ lastCachedAt = Date.now();
300892
+ }
300893
+ return result;
300894
+ };
300895
+ wrapped.cache = {
300896
+ clear: () => {
300897
+ originalClear();
300898
+ lastCachedAt = 0;
300899
+ }
300900
+ };
300901
+ return wrapped;
300902
+ }
300875
300903
  async function markGroveNoticeViewed() {
300876
300904
  try {
300877
300905
  await withOAuth401Retry(() => {
@@ -301038,7 +301066,7 @@ var init_grove = __esm(() => {
301038
301066
  init_log3();
301039
301067
  groveConfigLocks = new Map;
301040
301068
  GROVE_CACHE_EXPIRATION_MS = 24 * 60 * 60 * 1000;
301041
- getGroveSettings = memoize_default(async () => {
301069
+ getGroveSettings = memoizeWithTTL(async () => {
301042
301070
  if (isEssentialTrafficOnly()) {
301043
301071
  return { success: false };
301044
301072
  }
@@ -301061,8 +301089,8 @@ var init_grove = __esm(() => {
301061
301089
  getGroveSettings.cache.clear?.();
301062
301090
  return { success: false };
301063
301091
  }
301064
- });
301065
- getGroveNoticeConfig = memoize_default(async () => {
301092
+ }, GROVE_CACHE_EXPIRATION_MS);
301093
+ getGroveNoticeConfig = memoizeWithTTL(async () => {
301066
301094
  if (isEssentialTrafficOnly()) {
301067
301095
  return { success: false };
301068
301096
  }
@@ -301096,11 +301124,11 @@ var init_grove = __esm(() => {
301096
301124
  }
301097
301125
  };
301098
301126
  } catch (err2) {
301099
- logForDebugging(`Failed to fetch Grove notice config: ${err2}`);
301127
+ logError2(err2);
301100
301128
  getGroveNoticeConfig.cache.clear?.();
301101
301129
  return { success: false };
301102
301130
  }
301103
- });
301131
+ }, GROVE_CACHE_EXPIRATION_MS);
301104
301132
  });
301105
301133
 
301106
301134
  // src/services/policyLimits/index.ts
@@ -342157,9 +342185,14 @@ async function getTeleportEvents(sessionId, accessToken, orgUUID) {
342157
342185
  logForDebugging(`[teleport] Fetching events from: ${baseUrl}`);
342158
342186
  const all4 = [];
342159
342187
  let cursor;
342188
+ let previousCursor;
342160
342189
  let pages = 0;
342161
342190
  const maxPages = 100;
342162
342191
  while (pages < maxPages) {
342192
+ if (pages > 0 && cursor === previousCursor) {
342193
+ logForDebugging(`[teleport] Cursor stalled (unchanged from page ${pages}); treating as end-of-stream`);
342194
+ break;
342195
+ }
342163
342196
  const params = { limit: 1000 };
342164
342197
  if (cursor !== undefined) {
342165
342198
  params.cursor = cursor;
@@ -342207,6 +342240,7 @@ async function getTeleportEvents(sessionId, accessToken, orgUUID) {
342207
342240
  if (next_cursor == null) {
342208
342241
  break;
342209
342242
  }
342243
+ previousCursor = cursor;
342210
342244
  cursor = next_cursor;
342211
342245
  }
342212
342246
  if (pages >= maxPages) {
@@ -342263,7 +342297,13 @@ function findLastUuid(logs2) {
342263
342297
  if (!logs2) {
342264
342298
  return;
342265
342299
  }
342266
- const entry = logs2.findLast((e) => ("uuid" in e) && e.uuid);
342300
+ let entry;
342301
+ for (let i3 = logs2.length - 1;i3 >= 0; i3--) {
342302
+ if ("uuid" in logs2[i3] && logs2[i3].uuid) {
342303
+ entry = logs2[i3];
342304
+ break;
342305
+ }
342306
+ }
342267
342307
  return entry && "uuid" in entry ? entry.uuid : undefined;
342268
342308
  }
342269
342309
  function clearAllSessions() {
@@ -453609,7 +453649,7 @@ async function prefetchPassesEligibility() {
453609
453649
  if (isEssentialTrafficOnly()) {
453610
453650
  return;
453611
453651
  }
453612
- getCachedOrFetchPassesEligibility();
453652
+ getCachedOrFetchPassesEligibility().catch(() => {});
453613
453653
  }
453614
453654
  var CACHE_EXPIRATION_MS, fetchInProgress = null, CURRENCY_SYMBOLS;
453615
453655
  var init_referral = __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.85",
8
- BUILD_TIME: "2026-07-16T22:30:57.193Z",
7
+ VERSION: "0.1.87",
8
+ BUILD_TIME: "2026-07-17T07:39:42.011Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -117484,7 +117484,7 @@ var package_default;
117484
117484
  var init_package = __esm(() => {
117485
117485
  package_default = {
117486
117486
  name: "@funnycode/myclaude",
117487
- version: "0.1.85",
117487
+ version: "0.1.87",
117488
117488
  private: false,
117489
117489
  description: "An open-source AI coding assistant in your terminal - powered by Claude",
117490
117490
  license: "MIT",
@@ -210190,8 +210190,7 @@ function addApiRequestToCache(requestData) {
210190
210190
  const metadata = {
210191
210191
  timestamp: new Date().toISOString(),
210192
210192
  request: {
210193
- model: requestData.model,
210194
- requestHash: hashString3(JSON.stringify(requestData))
210193
+ model: requestData.model
210195
210194
  }
210196
210195
  };
210197
210196
  cachedApiRequests.push(metadata);
@@ -210237,7 +210236,11 @@ function dumpRequest(body, ts, state, filePath) {
210237
210236
  }
210238
210237
  for (const msg of messages.slice(state.messageCountSeen)) {
210239
210238
  if (msg.role === "user") {
210240
- entries.push(jsonStringify({ type: "message", timestamp: ts, data: msg }));
210239
+ try {
210240
+ entries.push(jsonStringify({ type: "message", timestamp: ts, data: msg }));
210241
+ } catch (err2) {
210242
+ logError2(`dumpPrompts.dumpRequest: failed to stringify message: ${err2}`);
210243
+ }
210241
210244
  }
210242
210245
  }
210243
210246
  if (shouldWriteInitData) {
@@ -210334,6 +210337,7 @@ var init_dumpPrompts = __esm(() => {
210334
210337
  init_envUtils();
210335
210338
  init_slowOperations();
210336
210339
  init_debug();
210340
+ init_log3();
210337
210341
  cachedApiRequests = [];
210338
210342
  dumpState = new Map;
210339
210343
  dumpRequestQueue = new Map;
@@ -300872,6 +300876,30 @@ var init_gracefulShutdown = __esm(() => {
300872
300876
  });
300873
300877
 
300874
300878
  // src/services/api/grove.ts
300879
+ function memoizeWithTTL(fn, ttlMs) {
300880
+ let lastCachedAt = 0;
300881
+ const memoized = memoize_default(fn);
300882
+ const originalClear = memoized.cache.clear.bind(memoized.cache);
300883
+ const wrapped = async (...args) => {
300884
+ const now2 = Date.now();
300885
+ if (lastCachedAt !== 0 && now2 - lastCachedAt >= ttlMs) {
300886
+ originalClear();
300887
+ lastCachedAt = 0;
300888
+ }
300889
+ const result = await memoized(...args);
300890
+ if (result && typeof result === "object" && "success" in result && result.success === true) {
300891
+ lastCachedAt = Date.now();
300892
+ }
300893
+ return result;
300894
+ };
300895
+ wrapped.cache = {
300896
+ clear: () => {
300897
+ originalClear();
300898
+ lastCachedAt = 0;
300899
+ }
300900
+ };
300901
+ return wrapped;
300902
+ }
300875
300903
  async function markGroveNoticeViewed() {
300876
300904
  try {
300877
300905
  await withOAuth401Retry(() => {
@@ -301038,7 +301066,7 @@ var init_grove = __esm(() => {
301038
301066
  init_log3();
301039
301067
  groveConfigLocks = new Map;
301040
301068
  GROVE_CACHE_EXPIRATION_MS = 24 * 60 * 60 * 1000;
301041
- getGroveSettings = memoize_default(async () => {
301069
+ getGroveSettings = memoizeWithTTL(async () => {
301042
301070
  if (isEssentialTrafficOnly()) {
301043
301071
  return { success: false };
301044
301072
  }
@@ -301061,8 +301089,8 @@ var init_grove = __esm(() => {
301061
301089
  getGroveSettings.cache.clear?.();
301062
301090
  return { success: false };
301063
301091
  }
301064
- });
301065
- getGroveNoticeConfig = memoize_default(async () => {
301092
+ }, GROVE_CACHE_EXPIRATION_MS);
301093
+ getGroveNoticeConfig = memoizeWithTTL(async () => {
301066
301094
  if (isEssentialTrafficOnly()) {
301067
301095
  return { success: false };
301068
301096
  }
@@ -301096,11 +301124,11 @@ var init_grove = __esm(() => {
301096
301124
  }
301097
301125
  };
301098
301126
  } catch (err2) {
301099
- logForDebugging(`Failed to fetch Grove notice config: ${err2}`);
301127
+ logError2(err2);
301100
301128
  getGroveNoticeConfig.cache.clear?.();
301101
301129
  return { success: false };
301102
301130
  }
301103
- });
301131
+ }, GROVE_CACHE_EXPIRATION_MS);
301104
301132
  });
301105
301133
 
301106
301134
  // src/services/policyLimits/index.ts
@@ -342157,9 +342185,14 @@ async function getTeleportEvents(sessionId, accessToken, orgUUID) {
342157
342185
  logForDebugging(`[teleport] Fetching events from: ${baseUrl}`);
342158
342186
  const all4 = [];
342159
342187
  let cursor;
342188
+ let previousCursor;
342160
342189
  let pages = 0;
342161
342190
  const maxPages = 100;
342162
342191
  while (pages < maxPages) {
342192
+ if (pages > 0 && cursor === previousCursor) {
342193
+ logForDebugging(`[teleport] Cursor stalled (unchanged from page ${pages}); treating as end-of-stream`);
342194
+ break;
342195
+ }
342163
342196
  const params = { limit: 1000 };
342164
342197
  if (cursor !== undefined) {
342165
342198
  params.cursor = cursor;
@@ -342207,6 +342240,7 @@ async function getTeleportEvents(sessionId, accessToken, orgUUID) {
342207
342240
  if (next_cursor == null) {
342208
342241
  break;
342209
342242
  }
342243
+ previousCursor = cursor;
342210
342244
  cursor = next_cursor;
342211
342245
  }
342212
342246
  if (pages >= maxPages) {
@@ -342263,7 +342297,13 @@ function findLastUuid(logs2) {
342263
342297
  if (!logs2) {
342264
342298
  return;
342265
342299
  }
342266
- const entry = logs2.findLast((e) => ("uuid" in e) && e.uuid);
342300
+ let entry;
342301
+ for (let i3 = logs2.length - 1;i3 >= 0; i3--) {
342302
+ if ("uuid" in logs2[i3] && logs2[i3].uuid) {
342303
+ entry = logs2[i3];
342304
+ break;
342305
+ }
342306
+ }
342267
342307
  return entry && "uuid" in entry ? entry.uuid : undefined;
342268
342308
  }
342269
342309
  function clearAllSessions() {
@@ -453609,7 +453649,7 @@ async function prefetchPassesEligibility() {
453609
453649
  if (isEssentialTrafficOnly()) {
453610
453650
  return;
453611
453651
  }
453612
- getCachedOrFetchPassesEligibility();
453652
+ getCachedOrFetchPassesEligibility().catch(() => {});
453613
453653
  }
453614
453654
  var CACHE_EXPIRATION_MS, fetchInProgress = null, CURRENCY_SYMBOLS;
453615
453655
  var init_referral = __esm(() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funnycode/myclaude",
3
- "version": "0.1.85",
3
+ "version": "0.1.87",
4
4
  "private": false,
5
5
  "description": "An open-source AI coding assistant in your terminal - powered by Claude",
6
6
  "license": "MIT",