@funnycode/myclaude 0.1.35 → 0.1.36

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/README.md CHANGED
@@ -225,15 +225,7 @@ Once enabled, CodeGraph's MCP server starts automatically and provides semantic
225
225
 
226
226
  ### ECC — Agent Operating System
227
227
 
228
- [ECC](https://github.com/affaan-m/ECC) is a cross-harness agent ecosystem with 200+ skills, agents, hooks, and rules. **Pre-installed out of the box** — browse and install plugins immediately:
229
-
230
- ```bash
231
- # Browse available ECC plugins
232
- /plugin
233
-
234
- # Install a plugin from ECC marketplace
235
- /plugin install <plugin-name>@ecc
236
- ```
228
+ [ECC](https://github.com/affaan-m/ECC) is a cross-harness agent ecosystem with 200+ skills, agents, hooks, rules, and MCP servers. **Built-in out of the box** — all ECC plugins are auto-installed on first startup, no manual setup needed. Skills, agents, and commands are immediately available via `/` commands.
237
229
 
238
230
  ---
239
231
 
package/README.zh-CN.md CHANGED
@@ -246,15 +246,7 @@ codegraph init
246
246
 
247
247
  ### ECC — 跨平台代理操作系统
248
248
 
249
- [ECC](https://github.com/affaan-m/ECC) 是一个跨 harness 的代理生态系统,包含 200+ 技能、代理、hooks 和规则。**开箱即用**可直接浏览和安装插件:
250
-
251
- ```bash
252
- # 浏览可用的 ECC 插件
253
- /plugin
254
-
255
- # 从 ECC 市场安装插件
256
- /plugin install <插件名>@ecc
257
- ```
249
+ [ECC](https://github.com/affaan-m/ECC) 是一个跨 harness 的代理生态系统,包含 200+ 技能、代理、hooks、规则和 MCP 服务器。**开箱即用** 首次启动时自动安装所有 ECC 插件,无需手动配置。技能、代理和命令立即通过 `/` 命令可用。
258
250
 
259
251
  ---
260
252
 
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.35",
8
- BUILD_TIME: "2026-06-23T13:24:08.880Z",
7
+ VERSION: "0.1.36",
8
+ BUILD_TIME: "2026-06-23T13:32:30.386Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -554538,61 +554538,6 @@ var init_codegraphCheck = __esm(() => {
554538
554538
  init_execFileNoThrow();
554539
554539
  });
554540
554540
 
554541
- // src/plugins/bundled/eccMarketplace.ts
554542
- async function ensureEccMarketplaceRegistered() {
554543
- try {
554544
- const existing = await loadKnownMarketplacesConfig();
554545
- if (existing["ecc"]) {
554546
- logForDebugging("ECC marketplace already registered, skipping");
554547
- return true;
554548
- }
554549
- const result = await addMarketplaceSource({
554550
- source: "git",
554551
- url: ECC_MARKETPLACE_URL
554552
- });
554553
- logForDebugging(`ECC marketplace registered as '${result.name}' (materialized: ${!result.alreadyMaterialized})`);
554554
- return true;
554555
- } catch (error49) {
554556
- logForDebugging(`Failed to register ECC marketplace: ${error49}`, {
554557
- level: "warn"
554558
- });
554559
- return false;
554560
- }
554561
- }
554562
- var ECC_MARKETPLACE_URL = "https://github.com/affaan-m/ECC.git";
554563
- var init_eccMarketplace = __esm(() => {
554564
- init_debug();
554565
- init_marketplaceManager();
554566
- });
554567
-
554568
- // src/plugins/bundled/index.ts
554569
- function initBuiltinPlugins() {
554570
- registerBuiltinPlugin({
554571
- name: "codegraph",
554572
- description: "Semantic code intelligence — surgical context, fewer tool calls",
554573
- version: "1.0.0",
554574
- defaultEnabled: false,
554575
- isAvailable: () => {
554576
- isCodeGraphInstalled().catch(() => {});
554577
- return false;
554578
- },
554579
- mcpServers: {
554580
- codegraph: {
554581
- command: "codegraph",
554582
- args: ["mcp"]
554583
- }
554584
- }
554585
- });
554586
- }
554587
- async function initSeedMarketplaces() {
554588
- await ensureEccMarketplaceRegistered();
554589
- }
554590
- var init_bundled = __esm(() => {
554591
- init_builtinPlugins();
554592
- init_codegraphCheck();
554593
- init_eccMarketplace();
554594
- });
554595
-
554596
554541
  // src/services/plugins/pluginCliCommands.ts
554597
554542
  function handlePluginCommandError(error49, command8, plugin2) {
554598
554543
  logError2(error49);
@@ -554753,6 +554698,96 @@ var init_pluginCliCommands = __esm(() => {
554753
554698
  init_pluginOperations();
554754
554699
  });
554755
554700
 
554701
+ // src/plugins/bundled/eccMarketplace.ts
554702
+ import { join as join150 } from "path";
554703
+ import { readFile as readFile51 } from "fs/promises";
554704
+ async function ensureEccMarketplaceRegistered() {
554705
+ try {
554706
+ const result = await addMarketplaceSource({
554707
+ source: "git",
554708
+ url: ECC_MARKETPLACE_URL
554709
+ });
554710
+ const eccName = result.name;
554711
+ logForDebugging(`ECC marketplace registered as '${eccName}' (materialized: ${!result.alreadyMaterialized})`);
554712
+ await installEccPlugins(eccName);
554713
+ return true;
554714
+ } catch (error49) {
554715
+ logForDebugging(`Failed to register ECC marketplace: ${error49}`, {
554716
+ level: "warn"
554717
+ });
554718
+ return false;
554719
+ }
554720
+ }
554721
+ async function installEccPlugins(marketplaceName) {
554722
+ try {
554723
+ const cacheDir = getMarketplacesCacheDir();
554724
+ const marketplaceDir = join150(cacheDir, marketplaceName);
554725
+ const marketplaceJsonPath = join150(marketplaceDir, ".claude-plugin", "marketplace.json");
554726
+ let marketplaceData;
554727
+ try {
554728
+ const content = await readFile51(marketplaceJsonPath, "utf-8");
554729
+ marketplaceData = JSON.parse(content);
554730
+ } catch {
554731
+ logForDebugging("ECC marketplace.json not found yet, skipping auto-install");
554732
+ return;
554733
+ }
554734
+ const plugins = marketplaceData?.plugins ?? [];
554735
+ if (plugins.length === 0) {
554736
+ logForDebugging("No plugins found in ECC marketplace");
554737
+ return;
554738
+ }
554739
+ let installed = 0;
554740
+ for (const plugin2 of plugins) {
554741
+ try {
554742
+ const pluginId = `${plugin2.name}@${marketplaceName}`;
554743
+ await installPlugin(pluginId, "user");
554744
+ installed++;
554745
+ } catch (pluginError) {
554746
+ logForDebugging(`Failed to auto-install ECC plugin '${plugin2.name}': ${pluginError}`, { level: "warn" });
554747
+ }
554748
+ }
554749
+ logForDebugging(`Auto-installed ${installed}/${plugins.length} ECC plugins`);
554750
+ } catch (error49) {
554751
+ logForDebugging(`Failed to auto-install ECC plugins: ${error49}`, {
554752
+ level: "warn"
554753
+ });
554754
+ }
554755
+ }
554756
+ var ECC_MARKETPLACE_URL = "https://github.com/affaan-m/ECC.git";
554757
+ var init_eccMarketplace = __esm(() => {
554758
+ init_debug();
554759
+ init_marketplaceManager();
554760
+ init_pluginCliCommands();
554761
+ });
554762
+
554763
+ // src/plugins/bundled/index.ts
554764
+ function initBuiltinPlugins() {
554765
+ registerBuiltinPlugin({
554766
+ name: "codegraph",
554767
+ description: "Semantic code intelligence — surgical context, fewer tool calls",
554768
+ version: "1.0.0",
554769
+ defaultEnabled: false,
554770
+ isAvailable: () => {
554771
+ isCodeGraphInstalled().catch(() => {});
554772
+ return false;
554773
+ },
554774
+ mcpServers: {
554775
+ codegraph: {
554776
+ command: "codegraph",
554777
+ args: ["mcp"]
554778
+ }
554779
+ }
554780
+ });
554781
+ }
554782
+ async function initSeedMarketplaces() {
554783
+ await ensureEccMarketplaceRegistered();
554784
+ }
554785
+ var init_bundled = __esm(() => {
554786
+ init_builtinPlugins();
554787
+ init_codegraphCheck();
554788
+ init_eccMarketplace();
554789
+ });
554790
+
554756
554791
  // src/skills/bundled/batch.ts
554757
554792
  function buildPrompt(instruction) {
554758
554793
  return `# Batch: Parallel Work Orchestration
@@ -557398,12 +557433,12 @@ var init_createDirectConnectSession = __esm(() => {
557398
557433
  });
557399
557434
 
557400
557435
  // src/utils/errorLogSink.ts
557401
- import { dirname as dirname64, join as join150 } from "path";
557436
+ import { dirname as dirname64, join as join151 } from "path";
557402
557437
  function getErrorsPath() {
557403
- return join150(CACHE_PATHS.errors(), DATE + ".jsonl");
557438
+ return join151(CACHE_PATHS.errors(), DATE + ".jsonl");
557404
557439
  }
557405
557440
  function getMCPLogsPath(serverName) {
557406
- return join150(CACHE_PATHS.mcpLogs(serverName), DATE + ".jsonl");
557441
+ return join151(CACHE_PATHS.mcpLogs(serverName), DATE + ".jsonl");
557407
557442
  }
557408
557443
  function createJsonlWriter(options) {
557409
557444
  const writer = createBufferedWriter(options);
@@ -557746,7 +557781,7 @@ var init_sessionMemory = __esm(() => {
557746
557781
  // src/utils/iTermBackup.ts
557747
557782
  import { copyFile as copyFile12, stat as stat49 } from "fs/promises";
557748
557783
  import { homedir as homedir39 } from "os";
557749
- import { join as join151 } from "path";
557784
+ import { join as join152 } from "path";
557750
557785
  function markITerm2SetupComplete() {
557751
557786
  saveGlobalConfig((current) => ({
557752
557787
  ...current,
@@ -557761,7 +557796,7 @@ function getIterm2RecoveryInfo() {
557761
557796
  };
557762
557797
  }
557763
557798
  function getITerm2PlistPath() {
557764
- return join151(homedir39(), "Library", "Preferences", "com.googlecode.iterm2.plist");
557799
+ return join152(homedir39(), "Library", "Preferences", "com.googlecode.iterm2.plist");
557765
557800
  }
557766
557801
  async function checkAndRestoreITerm2Backup() {
557767
557802
  const { inProgress, backupPath } = getIterm2RecoveryInfo();
@@ -561126,7 +561161,7 @@ var init_idleTimeout = __esm(() => {
561126
561161
  // src/bridge/inboundAttachments.ts
561127
561162
  import { randomUUID as randomUUID48 } from "crypto";
561128
561163
  import { mkdir as mkdir42, writeFile as writeFile46 } from "fs/promises";
561129
- import { basename as basename58, join as join152 } from "path";
561164
+ import { basename as basename58, join as join153 } from "path";
561130
561165
  function debug3(msg) {
561131
561166
  logForDebugging(`[bridge:inbound-attach] ${msg}`);
561132
561167
  }
@@ -561142,7 +561177,7 @@ function sanitizeFileName(name) {
561142
561177
  return base2 || "attachment";
561143
561178
  }
561144
561179
  function uploadsDir() {
561145
- return join152(getClaudeConfigHomeDir(), "uploads", getSessionId());
561180
+ return join153(getClaudeConfigHomeDir(), "uploads", getSessionId());
561146
561181
  }
561147
561182
  async function resolveOne(att) {
561148
561183
  const token = getBridgeAccessToken();
@@ -561171,7 +561206,7 @@ async function resolveOne(att) {
561171
561206
  const safeName = sanitizeFileName(att.file_name);
561172
561207
  const prefix = (att.file_uuid.slice(0, 8) || randomUUID48().slice(0, 8)).replace(/[^a-zA-Z0-9_-]/g, "_");
561173
561208
  const dir = uploadsDir();
561174
- const outPath = join152(dir, `${prefix}-${safeName}`);
561209
+ const outPath = join153(dir, `${prefix}-${safeName}`);
561175
561210
  try {
561176
561211
  await mkdir42(dir, { recursive: true });
561177
561212
  await writeFile46(outPath, data);
@@ -561270,11 +561305,11 @@ var init_sessionUrl = __esm(() => {
561270
561305
  });
561271
561306
 
561272
561307
  // src/utils/plugins/zipCacheAdapters.ts
561273
- import { readFile as readFile51 } from "fs/promises";
561274
- import { join as join153 } from "path";
561308
+ import { readFile as readFile52 } from "fs/promises";
561309
+ import { join as join154 } from "path";
561275
561310
  async function readZipCacheKnownMarketplaces() {
561276
561311
  try {
561277
- const content = await readFile51(getZipCacheKnownMarketplacesPath(), "utf-8");
561312
+ const content = await readFile52(getZipCacheKnownMarketplacesPath(), "utf-8");
561278
561313
  const parsed = KnownMarketplacesFileSchema().safeParse(jsonParse(content));
561279
561314
  if (!parsed.success) {
561280
561315
  logForDebugging(`Invalid known_marketplaces.json in zip cache: ${parsed.error.message}`, { level: "error" });
@@ -561296,18 +561331,18 @@ async function saveMarketplaceJsonToZipCache(marketplaceName, installLocation) {
561296
561331
  const content = await readMarketplaceJsonContent(installLocation);
561297
561332
  if (content !== null) {
561298
561333
  const relPath = getMarketplaceJsonRelativePath(marketplaceName);
561299
- await atomicWriteToZipCache(join153(zipCachePath, relPath), content);
561334
+ await atomicWriteToZipCache(join154(zipCachePath, relPath), content);
561300
561335
  }
561301
561336
  }
561302
561337
  async function readMarketplaceJsonContent(dir) {
561303
561338
  const candidates = [
561304
- join153(dir, ".claude-plugin", "marketplace.json"),
561305
- join153(dir, "marketplace.json"),
561339
+ join154(dir, ".claude-plugin", "marketplace.json"),
561340
+ join154(dir, "marketplace.json"),
561306
561341
  dir
561307
561342
  ];
561308
561343
  for (const candidate of candidates) {
561309
561344
  try {
561310
- return await readFile51(candidate, "utf-8");
561345
+ return await readFile52(candidate, "utf-8");
561311
561346
  } catch {}
561312
561347
  }
561313
561348
  return null;
@@ -561760,10 +561795,10 @@ __export(exports_bridgePointer, {
561760
561795
  clearBridgePointer: () => clearBridgePointer,
561761
561796
  BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
561762
561797
  });
561763
- import { mkdir as mkdir43, readFile as readFile52, stat as stat50, unlink as unlink22, writeFile as writeFile47 } from "fs/promises";
561764
- import { dirname as dirname65, join as join154 } from "path";
561798
+ import { mkdir as mkdir43, readFile as readFile53, stat as stat50, unlink as unlink22, writeFile as writeFile47 } from "fs/promises";
561799
+ import { dirname as dirname65, join as join155 } from "path";
561765
561800
  function getBridgePointerPath(dir) {
561766
- return join154(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
561801
+ return join155(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
561767
561802
  }
561768
561803
  async function writeBridgePointer(dir, pointer) {
561769
561804
  const path24 = getBridgePointerPath(dir);
@@ -561781,7 +561816,7 @@ async function readBridgePointer(dir) {
561781
561816
  let mtimeMs;
561782
561817
  try {
561783
561818
  mtimeMs = (await stat50(path24)).mtimeMs;
561784
- raw = await readFile52(path24, "utf8");
561819
+ raw = await readFile53(path24, "utf8");
561785
561820
  } catch {
561786
561821
  return null;
561787
561822
  }
@@ -563770,7 +563805,7 @@ __export(exports_print, {
563770
563805
  createCanUseToolWithPermissionPrompt: () => createCanUseToolWithPermissionPrompt,
563771
563806
  canBatchWith: () => canBatchWith
563772
563807
  });
563773
- import { readFile as readFile53, stat as stat51 } from "fs/promises";
563808
+ import { readFile as readFile54, stat as stat51 } from "fs/promises";
563774
563809
  import { dirname as dirname66 } from "path";
563775
563810
  import { cwd as cwd2 } from "process";
563776
563811
  import { randomUUID as randomUUID51 } from "crypto";
@@ -565120,7 +565155,7 @@ ${m2.text}
565120
565155
  const normalizedPath = expandPath(message.request.path);
565121
565156
  const diskMtime = Math.floor((await stat51(normalizedPath)).mtimeMs);
565122
565157
  if (diskMtime <= message.request.mtime) {
565123
- const raw = await readFile53(normalizedPath, "utf-8");
565158
+ const raw = await readFile54(normalizedPath, "utf-8");
565124
565159
  const content = (raw.charCodeAt(0) === 65279 ? raw.slice(1) : raw).replaceAll(`\r
565125
565160
  `, `
565126
565161
  `);
@@ -567698,16 +567733,16 @@ __export(exports_claudeDesktop, {
567698
567733
  readClaudeDesktopMcpServers: () => readClaudeDesktopMcpServers,
567699
567734
  getClaudeDesktopConfigPath: () => getClaudeDesktopConfigPath
567700
567735
  });
567701
- import { readdir as readdir30, readFile as readFile54, stat as stat52 } from "fs/promises";
567736
+ import { readdir as readdir30, readFile as readFile55, stat as stat52 } from "fs/promises";
567702
567737
  import { homedir as homedir40 } from "os";
567703
- import { join as join155 } from "path";
567738
+ import { join as join156 } from "path";
567704
567739
  async function getClaudeDesktopConfigPath() {
567705
567740
  const platform6 = getPlatform();
567706
567741
  if (!SUPPORTED_PLATFORMS.includes(platform6)) {
567707
567742
  throw new Error(`Unsupported platform: ${platform6} - Claude Desktop integration only works on macOS and WSL.`);
567708
567743
  }
567709
567744
  if (platform6 === "macos") {
567710
- return join155(homedir40(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
567745
+ return join156(homedir40(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
567711
567746
  }
567712
567747
  const windowsHome = process.env.USERPROFILE ? process.env.USERPROFILE.replace(/\\/g, "/") : null;
567713
567748
  if (windowsHome) {
@@ -567726,7 +567761,7 @@ async function getClaudeDesktopConfigPath() {
567726
567761
  if (user.name === "Public" || user.name === "Default" || user.name === "Default User" || user.name === "All Users") {
567727
567762
  continue;
567728
567763
  }
567729
- const potentialConfigPath = join155(usersDir, user.name, "AppData", "Roaming", "Claude", "claude_desktop_config.json");
567764
+ const potentialConfigPath = join156(usersDir, user.name, "AppData", "Roaming", "Claude", "claude_desktop_config.json");
567730
567765
  try {
567731
567766
  await stat52(potentialConfigPath);
567732
567767
  return potentialConfigPath;
@@ -567746,7 +567781,7 @@ async function readClaudeDesktopMcpServers() {
567746
567781
  const configPath = await getClaudeDesktopConfigPath();
567747
567782
  let configContent;
567748
567783
  try {
567749
- configContent = await readFile54(configPath, { encoding: "utf8" });
567784
+ configContent = await readFile55(configPath, { encoding: "utf8" });
567750
567785
  } catch (e) {
567751
567786
  const code = getErrnoCode(e);
567752
567787
  if (code === "ENOENT") {
@@ -568635,12 +568670,12 @@ __export(exports_install, {
568635
568670
  install: () => install
568636
568671
  });
568637
568672
  import { homedir as homedir41 } from "node:os";
568638
- import { join as join156 } from "node:path";
568673
+ import { join as join157 } from "node:path";
568639
568674
  function getInstallationPath2() {
568640
568675
  const isWindows2 = env4.platform === "win32";
568641
568676
  const homeDir = homedir41();
568642
568677
  if (isWindows2) {
568643
- const windowsPath = join156(homeDir, ".local", "bin", "claude.exe");
568678
+ const windowsPath = join157(homeDir, ".local", "bin", "claude.exe");
568644
568679
  return windowsPath.replace(/\//g, "\\");
568645
568680
  }
568646
568681
  return "~/.local/bin/claude";
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.35",
8
- BUILD_TIME: "2026-06-23T13:24:08.880Z",
7
+ VERSION: "0.1.36",
8
+ BUILD_TIME: "2026-06-23T13:32:30.386Z",
9
9
  PACKAGE_URL: "@funnycode/myclaude",
10
10
  NATIVE_PACKAGE_URL: "@funnycode/myclaude",
11
11
  VERSION_CHANGELOG: '',
@@ -554538,61 +554538,6 @@ var init_codegraphCheck = __esm(() => {
554538
554538
  init_execFileNoThrow();
554539
554539
  });
554540
554540
 
554541
- // src/plugins/bundled/eccMarketplace.ts
554542
- async function ensureEccMarketplaceRegistered() {
554543
- try {
554544
- const existing = await loadKnownMarketplacesConfig();
554545
- if (existing["ecc"]) {
554546
- logForDebugging("ECC marketplace already registered, skipping");
554547
- return true;
554548
- }
554549
- const result = await addMarketplaceSource({
554550
- source: "git",
554551
- url: ECC_MARKETPLACE_URL
554552
- });
554553
- logForDebugging(`ECC marketplace registered as '${result.name}' (materialized: ${!result.alreadyMaterialized})`);
554554
- return true;
554555
- } catch (error49) {
554556
- logForDebugging(`Failed to register ECC marketplace: ${error49}`, {
554557
- level: "warn"
554558
- });
554559
- return false;
554560
- }
554561
- }
554562
- var ECC_MARKETPLACE_URL = "https://github.com/affaan-m/ECC.git";
554563
- var init_eccMarketplace = __esm(() => {
554564
- init_debug();
554565
- init_marketplaceManager();
554566
- });
554567
-
554568
- // src/plugins/bundled/index.ts
554569
- function initBuiltinPlugins() {
554570
- registerBuiltinPlugin({
554571
- name: "codegraph",
554572
- description: "Semantic code intelligence — surgical context, fewer tool calls",
554573
- version: "1.0.0",
554574
- defaultEnabled: false,
554575
- isAvailable: () => {
554576
- isCodeGraphInstalled().catch(() => {});
554577
- return false;
554578
- },
554579
- mcpServers: {
554580
- codegraph: {
554581
- command: "codegraph",
554582
- args: ["mcp"]
554583
- }
554584
- }
554585
- });
554586
- }
554587
- async function initSeedMarketplaces() {
554588
- await ensureEccMarketplaceRegistered();
554589
- }
554590
- var init_bundled = __esm(() => {
554591
- init_builtinPlugins();
554592
- init_codegraphCheck();
554593
- init_eccMarketplace();
554594
- });
554595
-
554596
554541
  // src/services/plugins/pluginCliCommands.ts
554597
554542
  function handlePluginCommandError(error49, command8, plugin2) {
554598
554543
  logError2(error49);
@@ -554753,6 +554698,96 @@ var init_pluginCliCommands = __esm(() => {
554753
554698
  init_pluginOperations();
554754
554699
  });
554755
554700
 
554701
+ // src/plugins/bundled/eccMarketplace.ts
554702
+ import { join as join150 } from "path";
554703
+ import { readFile as readFile51 } from "fs/promises";
554704
+ async function ensureEccMarketplaceRegistered() {
554705
+ try {
554706
+ const result = await addMarketplaceSource({
554707
+ source: "git",
554708
+ url: ECC_MARKETPLACE_URL
554709
+ });
554710
+ const eccName = result.name;
554711
+ logForDebugging(`ECC marketplace registered as '${eccName}' (materialized: ${!result.alreadyMaterialized})`);
554712
+ await installEccPlugins(eccName);
554713
+ return true;
554714
+ } catch (error49) {
554715
+ logForDebugging(`Failed to register ECC marketplace: ${error49}`, {
554716
+ level: "warn"
554717
+ });
554718
+ return false;
554719
+ }
554720
+ }
554721
+ async function installEccPlugins(marketplaceName) {
554722
+ try {
554723
+ const cacheDir = getMarketplacesCacheDir();
554724
+ const marketplaceDir = join150(cacheDir, marketplaceName);
554725
+ const marketplaceJsonPath = join150(marketplaceDir, ".claude-plugin", "marketplace.json");
554726
+ let marketplaceData;
554727
+ try {
554728
+ const content = await readFile51(marketplaceJsonPath, "utf-8");
554729
+ marketplaceData = JSON.parse(content);
554730
+ } catch {
554731
+ logForDebugging("ECC marketplace.json not found yet, skipping auto-install");
554732
+ return;
554733
+ }
554734
+ const plugins = marketplaceData?.plugins ?? [];
554735
+ if (plugins.length === 0) {
554736
+ logForDebugging("No plugins found in ECC marketplace");
554737
+ return;
554738
+ }
554739
+ let installed = 0;
554740
+ for (const plugin2 of plugins) {
554741
+ try {
554742
+ const pluginId = `${plugin2.name}@${marketplaceName}`;
554743
+ await installPlugin(pluginId, "user");
554744
+ installed++;
554745
+ } catch (pluginError) {
554746
+ logForDebugging(`Failed to auto-install ECC plugin '${plugin2.name}': ${pluginError}`, { level: "warn" });
554747
+ }
554748
+ }
554749
+ logForDebugging(`Auto-installed ${installed}/${plugins.length} ECC plugins`);
554750
+ } catch (error49) {
554751
+ logForDebugging(`Failed to auto-install ECC plugins: ${error49}`, {
554752
+ level: "warn"
554753
+ });
554754
+ }
554755
+ }
554756
+ var ECC_MARKETPLACE_URL = "https://github.com/affaan-m/ECC.git";
554757
+ var init_eccMarketplace = __esm(() => {
554758
+ init_debug();
554759
+ init_marketplaceManager();
554760
+ init_pluginCliCommands();
554761
+ });
554762
+
554763
+ // src/plugins/bundled/index.ts
554764
+ function initBuiltinPlugins() {
554765
+ registerBuiltinPlugin({
554766
+ name: "codegraph",
554767
+ description: "Semantic code intelligence — surgical context, fewer tool calls",
554768
+ version: "1.0.0",
554769
+ defaultEnabled: false,
554770
+ isAvailable: () => {
554771
+ isCodeGraphInstalled().catch(() => {});
554772
+ return false;
554773
+ },
554774
+ mcpServers: {
554775
+ codegraph: {
554776
+ command: "codegraph",
554777
+ args: ["mcp"]
554778
+ }
554779
+ }
554780
+ });
554781
+ }
554782
+ async function initSeedMarketplaces() {
554783
+ await ensureEccMarketplaceRegistered();
554784
+ }
554785
+ var init_bundled = __esm(() => {
554786
+ init_builtinPlugins();
554787
+ init_codegraphCheck();
554788
+ init_eccMarketplace();
554789
+ });
554790
+
554756
554791
  // src/skills/bundled/batch.ts
554757
554792
  function buildPrompt(instruction) {
554758
554793
  return `# Batch: Parallel Work Orchestration
@@ -557398,12 +557433,12 @@ var init_createDirectConnectSession = __esm(() => {
557398
557433
  });
557399
557434
 
557400
557435
  // src/utils/errorLogSink.ts
557401
- import { dirname as dirname64, join as join150 } from "path";
557436
+ import { dirname as dirname64, join as join151 } from "path";
557402
557437
  function getErrorsPath() {
557403
- return join150(CACHE_PATHS.errors(), DATE + ".jsonl");
557438
+ return join151(CACHE_PATHS.errors(), DATE + ".jsonl");
557404
557439
  }
557405
557440
  function getMCPLogsPath(serverName) {
557406
- return join150(CACHE_PATHS.mcpLogs(serverName), DATE + ".jsonl");
557441
+ return join151(CACHE_PATHS.mcpLogs(serverName), DATE + ".jsonl");
557407
557442
  }
557408
557443
  function createJsonlWriter(options) {
557409
557444
  const writer = createBufferedWriter(options);
@@ -557746,7 +557781,7 @@ var init_sessionMemory = __esm(() => {
557746
557781
  // src/utils/iTermBackup.ts
557747
557782
  import { copyFile as copyFile12, stat as stat49 } from "fs/promises";
557748
557783
  import { homedir as homedir39 } from "os";
557749
- import { join as join151 } from "path";
557784
+ import { join as join152 } from "path";
557750
557785
  function markITerm2SetupComplete() {
557751
557786
  saveGlobalConfig((current) => ({
557752
557787
  ...current,
@@ -557761,7 +557796,7 @@ function getIterm2RecoveryInfo() {
557761
557796
  };
557762
557797
  }
557763
557798
  function getITerm2PlistPath() {
557764
- return join151(homedir39(), "Library", "Preferences", "com.googlecode.iterm2.plist");
557799
+ return join152(homedir39(), "Library", "Preferences", "com.googlecode.iterm2.plist");
557765
557800
  }
557766
557801
  async function checkAndRestoreITerm2Backup() {
557767
557802
  const { inProgress, backupPath } = getIterm2RecoveryInfo();
@@ -561126,7 +561161,7 @@ var init_idleTimeout = __esm(() => {
561126
561161
  // src/bridge/inboundAttachments.ts
561127
561162
  import { randomUUID as randomUUID48 } from "crypto";
561128
561163
  import { mkdir as mkdir42, writeFile as writeFile46 } from "fs/promises";
561129
- import { basename as basename58, join as join152 } from "path";
561164
+ import { basename as basename58, join as join153 } from "path";
561130
561165
  function debug3(msg) {
561131
561166
  logForDebugging(`[bridge:inbound-attach] ${msg}`);
561132
561167
  }
@@ -561142,7 +561177,7 @@ function sanitizeFileName(name) {
561142
561177
  return base2 || "attachment";
561143
561178
  }
561144
561179
  function uploadsDir() {
561145
- return join152(getClaudeConfigHomeDir(), "uploads", getSessionId());
561180
+ return join153(getClaudeConfigHomeDir(), "uploads", getSessionId());
561146
561181
  }
561147
561182
  async function resolveOne(att) {
561148
561183
  const token = getBridgeAccessToken();
@@ -561171,7 +561206,7 @@ async function resolveOne(att) {
561171
561206
  const safeName = sanitizeFileName(att.file_name);
561172
561207
  const prefix = (att.file_uuid.slice(0, 8) || randomUUID48().slice(0, 8)).replace(/[^a-zA-Z0-9_-]/g, "_");
561173
561208
  const dir = uploadsDir();
561174
- const outPath = join152(dir, `${prefix}-${safeName}`);
561209
+ const outPath = join153(dir, `${prefix}-${safeName}`);
561175
561210
  try {
561176
561211
  await mkdir42(dir, { recursive: true });
561177
561212
  await writeFile46(outPath, data);
@@ -561270,11 +561305,11 @@ var init_sessionUrl = __esm(() => {
561270
561305
  });
561271
561306
 
561272
561307
  // src/utils/plugins/zipCacheAdapters.ts
561273
- import { readFile as readFile51 } from "fs/promises";
561274
- import { join as join153 } from "path";
561308
+ import { readFile as readFile52 } from "fs/promises";
561309
+ import { join as join154 } from "path";
561275
561310
  async function readZipCacheKnownMarketplaces() {
561276
561311
  try {
561277
- const content = await readFile51(getZipCacheKnownMarketplacesPath(), "utf-8");
561312
+ const content = await readFile52(getZipCacheKnownMarketplacesPath(), "utf-8");
561278
561313
  const parsed = KnownMarketplacesFileSchema().safeParse(jsonParse(content));
561279
561314
  if (!parsed.success) {
561280
561315
  logForDebugging(`Invalid known_marketplaces.json in zip cache: ${parsed.error.message}`, { level: "error" });
@@ -561296,18 +561331,18 @@ async function saveMarketplaceJsonToZipCache(marketplaceName, installLocation) {
561296
561331
  const content = await readMarketplaceJsonContent(installLocation);
561297
561332
  if (content !== null) {
561298
561333
  const relPath = getMarketplaceJsonRelativePath(marketplaceName);
561299
- await atomicWriteToZipCache(join153(zipCachePath, relPath), content);
561334
+ await atomicWriteToZipCache(join154(zipCachePath, relPath), content);
561300
561335
  }
561301
561336
  }
561302
561337
  async function readMarketplaceJsonContent(dir) {
561303
561338
  const candidates = [
561304
- join153(dir, ".claude-plugin", "marketplace.json"),
561305
- join153(dir, "marketplace.json"),
561339
+ join154(dir, ".claude-plugin", "marketplace.json"),
561340
+ join154(dir, "marketplace.json"),
561306
561341
  dir
561307
561342
  ];
561308
561343
  for (const candidate of candidates) {
561309
561344
  try {
561310
- return await readFile51(candidate, "utf-8");
561345
+ return await readFile52(candidate, "utf-8");
561311
561346
  } catch {}
561312
561347
  }
561313
561348
  return null;
@@ -561760,10 +561795,10 @@ __export(exports_bridgePointer, {
561760
561795
  clearBridgePointer: () => clearBridgePointer,
561761
561796
  BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
561762
561797
  });
561763
- import { mkdir as mkdir43, readFile as readFile52, stat as stat50, unlink as unlink22, writeFile as writeFile47 } from "fs/promises";
561764
- import { dirname as dirname65, join as join154 } from "path";
561798
+ import { mkdir as mkdir43, readFile as readFile53, stat as stat50, unlink as unlink22, writeFile as writeFile47 } from "fs/promises";
561799
+ import { dirname as dirname65, join as join155 } from "path";
561765
561800
  function getBridgePointerPath(dir) {
561766
- return join154(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
561801
+ return join155(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
561767
561802
  }
561768
561803
  async function writeBridgePointer(dir, pointer) {
561769
561804
  const path24 = getBridgePointerPath(dir);
@@ -561781,7 +561816,7 @@ async function readBridgePointer(dir) {
561781
561816
  let mtimeMs;
561782
561817
  try {
561783
561818
  mtimeMs = (await stat50(path24)).mtimeMs;
561784
- raw = await readFile52(path24, "utf8");
561819
+ raw = await readFile53(path24, "utf8");
561785
561820
  } catch {
561786
561821
  return null;
561787
561822
  }
@@ -563770,7 +563805,7 @@ __export(exports_print, {
563770
563805
  createCanUseToolWithPermissionPrompt: () => createCanUseToolWithPermissionPrompt,
563771
563806
  canBatchWith: () => canBatchWith
563772
563807
  });
563773
- import { readFile as readFile53, stat as stat51 } from "fs/promises";
563808
+ import { readFile as readFile54, stat as stat51 } from "fs/promises";
563774
563809
  import { dirname as dirname66 } from "path";
563775
563810
  import { cwd as cwd2 } from "process";
563776
563811
  import { randomUUID as randomUUID51 } from "crypto";
@@ -565120,7 +565155,7 @@ ${m2.text}
565120
565155
  const normalizedPath = expandPath(message.request.path);
565121
565156
  const diskMtime = Math.floor((await stat51(normalizedPath)).mtimeMs);
565122
565157
  if (diskMtime <= message.request.mtime) {
565123
- const raw = await readFile53(normalizedPath, "utf-8");
565158
+ const raw = await readFile54(normalizedPath, "utf-8");
565124
565159
  const content = (raw.charCodeAt(0) === 65279 ? raw.slice(1) : raw).replaceAll(`\r
565125
565160
  `, `
565126
565161
  `);
@@ -567698,16 +567733,16 @@ __export(exports_claudeDesktop, {
567698
567733
  readClaudeDesktopMcpServers: () => readClaudeDesktopMcpServers,
567699
567734
  getClaudeDesktopConfigPath: () => getClaudeDesktopConfigPath
567700
567735
  });
567701
- import { readdir as readdir30, readFile as readFile54, stat as stat52 } from "fs/promises";
567736
+ import { readdir as readdir30, readFile as readFile55, stat as stat52 } from "fs/promises";
567702
567737
  import { homedir as homedir40 } from "os";
567703
- import { join as join155 } from "path";
567738
+ import { join as join156 } from "path";
567704
567739
  async function getClaudeDesktopConfigPath() {
567705
567740
  const platform6 = getPlatform();
567706
567741
  if (!SUPPORTED_PLATFORMS.includes(platform6)) {
567707
567742
  throw new Error(`Unsupported platform: ${platform6} - Claude Desktop integration only works on macOS and WSL.`);
567708
567743
  }
567709
567744
  if (platform6 === "macos") {
567710
- return join155(homedir40(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
567745
+ return join156(homedir40(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
567711
567746
  }
567712
567747
  const windowsHome = process.env.USERPROFILE ? process.env.USERPROFILE.replace(/\\/g, "/") : null;
567713
567748
  if (windowsHome) {
@@ -567726,7 +567761,7 @@ async function getClaudeDesktopConfigPath() {
567726
567761
  if (user.name === "Public" || user.name === "Default" || user.name === "Default User" || user.name === "All Users") {
567727
567762
  continue;
567728
567763
  }
567729
- const potentialConfigPath = join155(usersDir, user.name, "AppData", "Roaming", "Claude", "claude_desktop_config.json");
567764
+ const potentialConfigPath = join156(usersDir, user.name, "AppData", "Roaming", "Claude", "claude_desktop_config.json");
567730
567765
  try {
567731
567766
  await stat52(potentialConfigPath);
567732
567767
  return potentialConfigPath;
@@ -567746,7 +567781,7 @@ async function readClaudeDesktopMcpServers() {
567746
567781
  const configPath = await getClaudeDesktopConfigPath();
567747
567782
  let configContent;
567748
567783
  try {
567749
- configContent = await readFile54(configPath, { encoding: "utf8" });
567784
+ configContent = await readFile55(configPath, { encoding: "utf8" });
567750
567785
  } catch (e) {
567751
567786
  const code = getErrnoCode(e);
567752
567787
  if (code === "ENOENT") {
@@ -568635,12 +568670,12 @@ __export(exports_install, {
568635
568670
  install: () => install
568636
568671
  });
568637
568672
  import { homedir as homedir41 } from "node:os";
568638
- import { join as join156 } from "node:path";
568673
+ import { join as join157 } from "node:path";
568639
568674
  function getInstallationPath2() {
568640
568675
  const isWindows2 = env4.platform === "win32";
568641
568676
  const homeDir = homedir41();
568642
568677
  if (isWindows2) {
568643
- const windowsPath = join156(homeDir, ".local", "bin", "claude.exe");
568678
+ const windowsPath = join157(homeDir, ".local", "bin", "claude.exe");
568644
568679
  return windowsPath.replace(/\//g, "\\");
568645
568680
  }
568646
568681
  return "~/.local/bin/claude";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@funnycode/myclaude",
3
- "version": "0.1.35",
3
+ "version": "0.1.36",
4
4
  "private": false,
5
5
  "description": "An open-source AI coding assistant in your terminal - powered by Claude",
6
6
  "license": "MIT",