@funnycode/myclaude 0.1.34 → 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 +1 -23
- package/README.zh-CN.md +1 -23
- package/dist/myclaude.js +101 -83
- package/dist/myclaude.mjs +101 -83
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -225,17 +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
|
|
229
|
-
|
|
230
|
-
ECC is pre-registered as a marketplace — no manual setup needed.
|
|
231
|
-
|
|
232
|
-
```bash
|
|
233
|
-
# Browse available ECC plugins
|
|
234
|
-
/plugin
|
|
235
|
-
|
|
236
|
-
# Install a plugin from ECC marketplace
|
|
237
|
-
/plugin install <plugin-name>@ecc
|
|
238
|
-
```
|
|
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.
|
|
239
229
|
|
|
240
230
|
---
|
|
241
231
|
|
|
@@ -321,18 +311,6 @@ src/
|
|
|
321
311
|
|
|
322
312
|
---
|
|
323
313
|
|
|
324
|
-
## Roadmap
|
|
325
|
-
|
|
326
|
-
See [docs/ROADMAP.md](docs/ROADMAP.md) for the full iteration plan:
|
|
327
|
-
|
|
328
|
-
- **P0** — Activate hidden features (BUDDY, Auto Memory) ✅
|
|
329
|
-
- **P1** — Growth system (Achievements, skill recommendations)
|
|
330
|
-
- **P2** — Interactive experience (multi-interaction, events)
|
|
331
|
-
- **P3** — Extension ecosystem (plugin marketplace, Skill Studio)
|
|
332
|
-
- **P4** — Intelligent evolution (personalized fine-tuning, offline mode)
|
|
333
|
-
|
|
334
|
-
---
|
|
335
|
-
|
|
336
314
|
## Contributing
|
|
337
315
|
|
|
338
316
|
Pull requests are welcome!
|
package/README.zh-CN.md
CHANGED
|
@@ -246,17 +246,7 @@ codegraph init
|
|
|
246
246
|
|
|
247
247
|
### ECC — 跨平台代理操作系统
|
|
248
248
|
|
|
249
|
-
[ECC](https://github.com/affaan-m/ECC) 是一个跨 harness 的代理生态系统,包含 200+ 技能、代理、hooks
|
|
250
|
-
|
|
251
|
-
ECC 已预注册为市场源,无需手动添加。
|
|
252
|
-
|
|
253
|
-
```bash
|
|
254
|
-
# 浏览可用的 ECC 插件
|
|
255
|
-
/plugin
|
|
256
|
-
|
|
257
|
-
# 从 ECC 市场安装插件
|
|
258
|
-
/plugin install <插件名>@ecc
|
|
259
|
-
```
|
|
249
|
+
[ECC](https://github.com/affaan-m/ECC) 是一个跨 harness 的代理生态系统,包含 200+ 技能、代理、hooks、规则和 MCP 服务器。**开箱即用** — 首次启动时自动安装所有 ECC 插件,无需手动配置。技能、代理和命令立即通过 `/` 命令可用。
|
|
260
250
|
|
|
261
251
|
---
|
|
262
252
|
|
|
@@ -316,18 +306,6 @@ src/
|
|
|
316
306
|
|
|
317
307
|
---
|
|
318
308
|
|
|
319
|
-
## 路线图
|
|
320
|
-
|
|
321
|
-
详见 [docs/ROADMAP.md](docs/ROADMAP.md):
|
|
322
|
-
|
|
323
|
-
- **P0** — 激活隐藏功能(BUDDY、Auto Memory)✅
|
|
324
|
-
- **P1** — 成长系统(成就、技能推荐)
|
|
325
|
-
- **P2** — 互动体验(多交互模式、节日事件)
|
|
326
|
-
- **P3** — 扩展生态(插件市场、Skill Studio)
|
|
327
|
-
- **P4** — 智能进化(个性化微调、离线模式)
|
|
328
|
-
|
|
329
|
-
---
|
|
330
|
-
|
|
331
309
|
## 贡献
|
|
332
310
|
|
|
333
311
|
欢迎提交 PR 参与贡献!
|
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.
|
|
8
|
-
BUILD_TIME: "2026-06-23T13:
|
|
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,78 +554538,6 @@ var init_codegraphCheck = __esm(() => {
|
|
|
554538
554538
|
init_execFileNoThrow();
|
|
554539
554539
|
});
|
|
554540
554540
|
|
|
554541
|
-
// src/plugins/bundled/eccMarketplace.ts
|
|
554542
|
-
import { join as join150 } from "path";
|
|
554543
|
-
function getKnownMarketplacesFile2() {
|
|
554544
|
-
const homeDir = process.env.CLAUDE_CODE_PLUGIN_CACHE_DIR || join150(process.env.HOME || process.env.USERPROFILE || "~", ".claude", "plugins");
|
|
554545
|
-
return join150(homeDir, "known_marketplaces.json");
|
|
554546
|
-
}
|
|
554547
|
-
async function ensureEccMarketplaceRegistered() {
|
|
554548
|
-
const fs12 = getFsImplementation();
|
|
554549
|
-
const configFile = getKnownMarketplacesFile2();
|
|
554550
|
-
try {
|
|
554551
|
-
let config5 = {};
|
|
554552
|
-
try {
|
|
554553
|
-
const content = await fs12.readFile(configFile, { encoding: "utf-8" });
|
|
554554
|
-
config5 = jsonParse(content);
|
|
554555
|
-
} catch {}
|
|
554556
|
-
if (config5["ecc"])
|
|
554557
|
-
return false;
|
|
554558
|
-
config5["ecc"] = {
|
|
554559
|
-
source: {
|
|
554560
|
-
source: "git",
|
|
554561
|
-
url: ECC_MARKETPLACE_URL
|
|
554562
|
-
},
|
|
554563
|
-
autoUpdate: false,
|
|
554564
|
-
lastUpdated: new Date().toISOString()
|
|
554565
|
-
};
|
|
554566
|
-
await fs12.writeFile(configFile, jsonStringify(config5, null, 2), {
|
|
554567
|
-
encoding: "utf-8"
|
|
554568
|
-
});
|
|
554569
|
-
logForDebugging("Registered ECC marketplace in known_marketplaces.json");
|
|
554570
|
-
return true;
|
|
554571
|
-
} catch (error49) {
|
|
554572
|
-
logForDebugging(`Failed to register ECC marketplace: ${error49}`, {
|
|
554573
|
-
level: "warn"
|
|
554574
|
-
});
|
|
554575
|
-
return false;
|
|
554576
|
-
}
|
|
554577
|
-
}
|
|
554578
|
-
var ECC_MARKETPLACE_URL = "https://github.com/affaan-m/ECC.git";
|
|
554579
|
-
var init_eccMarketplace = __esm(() => {
|
|
554580
|
-
init_fsOperations();
|
|
554581
|
-
init_debug();
|
|
554582
|
-
init_slowOperations();
|
|
554583
|
-
});
|
|
554584
|
-
|
|
554585
|
-
// src/plugins/bundled/index.ts
|
|
554586
|
-
function initBuiltinPlugins() {
|
|
554587
|
-
registerBuiltinPlugin({
|
|
554588
|
-
name: "codegraph",
|
|
554589
|
-
description: "Semantic code intelligence — surgical context, fewer tool calls",
|
|
554590
|
-
version: "1.0.0",
|
|
554591
|
-
defaultEnabled: false,
|
|
554592
|
-
isAvailable: () => {
|
|
554593
|
-
isCodeGraphInstalled().catch(() => {});
|
|
554594
|
-
return false;
|
|
554595
|
-
},
|
|
554596
|
-
mcpServers: {
|
|
554597
|
-
codegraph: {
|
|
554598
|
-
command: "codegraph",
|
|
554599
|
-
args: ["mcp"]
|
|
554600
|
-
}
|
|
554601
|
-
}
|
|
554602
|
-
});
|
|
554603
|
-
}
|
|
554604
|
-
async function initSeedMarketplaces() {
|
|
554605
|
-
await ensureEccMarketplaceRegistered();
|
|
554606
|
-
}
|
|
554607
|
-
var init_bundled = __esm(() => {
|
|
554608
|
-
init_builtinPlugins();
|
|
554609
|
-
init_codegraphCheck();
|
|
554610
|
-
init_eccMarketplace();
|
|
554611
|
-
});
|
|
554612
|
-
|
|
554613
554541
|
// src/services/plugins/pluginCliCommands.ts
|
|
554614
554542
|
function handlePluginCommandError(error49, command8, plugin2) {
|
|
554615
554543
|
logError2(error49);
|
|
@@ -554770,6 +554698,96 @@ var init_pluginCliCommands = __esm(() => {
|
|
|
554770
554698
|
init_pluginOperations();
|
|
554771
554699
|
});
|
|
554772
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
|
+
|
|
554773
554791
|
// src/skills/bundled/batch.ts
|
|
554774
554792
|
function buildPrompt(instruction) {
|
|
554775
554793
|
return `# Batch: Parallel Work Orchestration
|
|
@@ -561287,11 +561305,11 @@ var init_sessionUrl = __esm(() => {
|
|
|
561287
561305
|
});
|
|
561288
561306
|
|
|
561289
561307
|
// src/utils/plugins/zipCacheAdapters.ts
|
|
561290
|
-
import { readFile as
|
|
561308
|
+
import { readFile as readFile52 } from "fs/promises";
|
|
561291
561309
|
import { join as join154 } from "path";
|
|
561292
561310
|
async function readZipCacheKnownMarketplaces() {
|
|
561293
561311
|
try {
|
|
561294
|
-
const content = await
|
|
561312
|
+
const content = await readFile52(getZipCacheKnownMarketplacesPath(), "utf-8");
|
|
561295
561313
|
const parsed = KnownMarketplacesFileSchema().safeParse(jsonParse(content));
|
|
561296
561314
|
if (!parsed.success) {
|
|
561297
561315
|
logForDebugging(`Invalid known_marketplaces.json in zip cache: ${parsed.error.message}`, { level: "error" });
|
|
@@ -561324,7 +561342,7 @@ async function readMarketplaceJsonContent(dir) {
|
|
|
561324
561342
|
];
|
|
561325
561343
|
for (const candidate of candidates) {
|
|
561326
561344
|
try {
|
|
561327
|
-
return await
|
|
561345
|
+
return await readFile52(candidate, "utf-8");
|
|
561328
561346
|
} catch {}
|
|
561329
561347
|
}
|
|
561330
561348
|
return null;
|
|
@@ -561777,7 +561795,7 @@ __export(exports_bridgePointer, {
|
|
|
561777
561795
|
clearBridgePointer: () => clearBridgePointer,
|
|
561778
561796
|
BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
|
|
561779
561797
|
});
|
|
561780
|
-
import { mkdir as mkdir43, readFile as
|
|
561798
|
+
import { mkdir as mkdir43, readFile as readFile53, stat as stat50, unlink as unlink22, writeFile as writeFile47 } from "fs/promises";
|
|
561781
561799
|
import { dirname as dirname65, join as join155 } from "path";
|
|
561782
561800
|
function getBridgePointerPath(dir) {
|
|
561783
561801
|
return join155(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
|
|
@@ -561798,7 +561816,7 @@ async function readBridgePointer(dir) {
|
|
|
561798
561816
|
let mtimeMs;
|
|
561799
561817
|
try {
|
|
561800
561818
|
mtimeMs = (await stat50(path24)).mtimeMs;
|
|
561801
|
-
raw = await
|
|
561819
|
+
raw = await readFile53(path24, "utf8");
|
|
561802
561820
|
} catch {
|
|
561803
561821
|
return null;
|
|
561804
561822
|
}
|
|
@@ -563787,7 +563805,7 @@ __export(exports_print, {
|
|
|
563787
563805
|
createCanUseToolWithPermissionPrompt: () => createCanUseToolWithPermissionPrompt,
|
|
563788
563806
|
canBatchWith: () => canBatchWith
|
|
563789
563807
|
});
|
|
563790
|
-
import { readFile as
|
|
563808
|
+
import { readFile as readFile54, stat as stat51 } from "fs/promises";
|
|
563791
563809
|
import { dirname as dirname66 } from "path";
|
|
563792
563810
|
import { cwd as cwd2 } from "process";
|
|
563793
563811
|
import { randomUUID as randomUUID51 } from "crypto";
|
|
@@ -565137,7 +565155,7 @@ ${m2.text}
|
|
|
565137
565155
|
const normalizedPath = expandPath(message.request.path);
|
|
565138
565156
|
const diskMtime = Math.floor((await stat51(normalizedPath)).mtimeMs);
|
|
565139
565157
|
if (diskMtime <= message.request.mtime) {
|
|
565140
|
-
const raw = await
|
|
565158
|
+
const raw = await readFile54(normalizedPath, "utf-8");
|
|
565141
565159
|
const content = (raw.charCodeAt(0) === 65279 ? raw.slice(1) : raw).replaceAll(`\r
|
|
565142
565160
|
`, `
|
|
565143
565161
|
`);
|
|
@@ -567715,7 +567733,7 @@ __export(exports_claudeDesktop, {
|
|
|
567715
567733
|
readClaudeDesktopMcpServers: () => readClaudeDesktopMcpServers,
|
|
567716
567734
|
getClaudeDesktopConfigPath: () => getClaudeDesktopConfigPath
|
|
567717
567735
|
});
|
|
567718
|
-
import { readdir as readdir30, readFile as
|
|
567736
|
+
import { readdir as readdir30, readFile as readFile55, stat as stat52 } from "fs/promises";
|
|
567719
567737
|
import { homedir as homedir40 } from "os";
|
|
567720
567738
|
import { join as join156 } from "path";
|
|
567721
567739
|
async function getClaudeDesktopConfigPath() {
|
|
@@ -567763,7 +567781,7 @@ async function readClaudeDesktopMcpServers() {
|
|
|
567763
567781
|
const configPath = await getClaudeDesktopConfigPath();
|
|
567764
567782
|
let configContent;
|
|
567765
567783
|
try {
|
|
567766
|
-
configContent = await
|
|
567784
|
+
configContent = await readFile55(configPath, { encoding: "utf8" });
|
|
567767
567785
|
} catch (e) {
|
|
567768
567786
|
const code = getErrnoCode(e);
|
|
567769
567787
|
if (code === "ENOENT") {
|
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.
|
|
8
|
-
BUILD_TIME: "2026-06-23T13:
|
|
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,78 +554538,6 @@ var init_codegraphCheck = __esm(() => {
|
|
|
554538
554538
|
init_execFileNoThrow();
|
|
554539
554539
|
});
|
|
554540
554540
|
|
|
554541
|
-
// src/plugins/bundled/eccMarketplace.ts
|
|
554542
|
-
import { join as join150 } from "path";
|
|
554543
|
-
function getKnownMarketplacesFile2() {
|
|
554544
|
-
const homeDir = process.env.CLAUDE_CODE_PLUGIN_CACHE_DIR || join150(process.env.HOME || process.env.USERPROFILE || "~", ".claude", "plugins");
|
|
554545
|
-
return join150(homeDir, "known_marketplaces.json");
|
|
554546
|
-
}
|
|
554547
|
-
async function ensureEccMarketplaceRegistered() {
|
|
554548
|
-
const fs12 = getFsImplementation();
|
|
554549
|
-
const configFile = getKnownMarketplacesFile2();
|
|
554550
|
-
try {
|
|
554551
|
-
let config5 = {};
|
|
554552
|
-
try {
|
|
554553
|
-
const content = await fs12.readFile(configFile, { encoding: "utf-8" });
|
|
554554
|
-
config5 = jsonParse(content);
|
|
554555
|
-
} catch {}
|
|
554556
|
-
if (config5["ecc"])
|
|
554557
|
-
return false;
|
|
554558
|
-
config5["ecc"] = {
|
|
554559
|
-
source: {
|
|
554560
|
-
source: "git",
|
|
554561
|
-
url: ECC_MARKETPLACE_URL
|
|
554562
|
-
},
|
|
554563
|
-
autoUpdate: false,
|
|
554564
|
-
lastUpdated: new Date().toISOString()
|
|
554565
|
-
};
|
|
554566
|
-
await fs12.writeFile(configFile, jsonStringify(config5, null, 2), {
|
|
554567
|
-
encoding: "utf-8"
|
|
554568
|
-
});
|
|
554569
|
-
logForDebugging("Registered ECC marketplace in known_marketplaces.json");
|
|
554570
|
-
return true;
|
|
554571
|
-
} catch (error49) {
|
|
554572
|
-
logForDebugging(`Failed to register ECC marketplace: ${error49}`, {
|
|
554573
|
-
level: "warn"
|
|
554574
|
-
});
|
|
554575
|
-
return false;
|
|
554576
|
-
}
|
|
554577
|
-
}
|
|
554578
|
-
var ECC_MARKETPLACE_URL = "https://github.com/affaan-m/ECC.git";
|
|
554579
|
-
var init_eccMarketplace = __esm(() => {
|
|
554580
|
-
init_fsOperations();
|
|
554581
|
-
init_debug();
|
|
554582
|
-
init_slowOperations();
|
|
554583
|
-
});
|
|
554584
|
-
|
|
554585
|
-
// src/plugins/bundled/index.ts
|
|
554586
|
-
function initBuiltinPlugins() {
|
|
554587
|
-
registerBuiltinPlugin({
|
|
554588
|
-
name: "codegraph",
|
|
554589
|
-
description: "Semantic code intelligence — surgical context, fewer tool calls",
|
|
554590
|
-
version: "1.0.0",
|
|
554591
|
-
defaultEnabled: false,
|
|
554592
|
-
isAvailable: () => {
|
|
554593
|
-
isCodeGraphInstalled().catch(() => {});
|
|
554594
|
-
return false;
|
|
554595
|
-
},
|
|
554596
|
-
mcpServers: {
|
|
554597
|
-
codegraph: {
|
|
554598
|
-
command: "codegraph",
|
|
554599
|
-
args: ["mcp"]
|
|
554600
|
-
}
|
|
554601
|
-
}
|
|
554602
|
-
});
|
|
554603
|
-
}
|
|
554604
|
-
async function initSeedMarketplaces() {
|
|
554605
|
-
await ensureEccMarketplaceRegistered();
|
|
554606
|
-
}
|
|
554607
|
-
var init_bundled = __esm(() => {
|
|
554608
|
-
init_builtinPlugins();
|
|
554609
|
-
init_codegraphCheck();
|
|
554610
|
-
init_eccMarketplace();
|
|
554611
|
-
});
|
|
554612
|
-
|
|
554613
554541
|
// src/services/plugins/pluginCliCommands.ts
|
|
554614
554542
|
function handlePluginCommandError(error49, command8, plugin2) {
|
|
554615
554543
|
logError2(error49);
|
|
@@ -554770,6 +554698,96 @@ var init_pluginCliCommands = __esm(() => {
|
|
|
554770
554698
|
init_pluginOperations();
|
|
554771
554699
|
});
|
|
554772
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
|
+
|
|
554773
554791
|
// src/skills/bundled/batch.ts
|
|
554774
554792
|
function buildPrompt(instruction) {
|
|
554775
554793
|
return `# Batch: Parallel Work Orchestration
|
|
@@ -561287,11 +561305,11 @@ var init_sessionUrl = __esm(() => {
|
|
|
561287
561305
|
});
|
|
561288
561306
|
|
|
561289
561307
|
// src/utils/plugins/zipCacheAdapters.ts
|
|
561290
|
-
import { readFile as
|
|
561308
|
+
import { readFile as readFile52 } from "fs/promises";
|
|
561291
561309
|
import { join as join154 } from "path";
|
|
561292
561310
|
async function readZipCacheKnownMarketplaces() {
|
|
561293
561311
|
try {
|
|
561294
|
-
const content = await
|
|
561312
|
+
const content = await readFile52(getZipCacheKnownMarketplacesPath(), "utf-8");
|
|
561295
561313
|
const parsed = KnownMarketplacesFileSchema().safeParse(jsonParse(content));
|
|
561296
561314
|
if (!parsed.success) {
|
|
561297
561315
|
logForDebugging(`Invalid known_marketplaces.json in zip cache: ${parsed.error.message}`, { level: "error" });
|
|
@@ -561324,7 +561342,7 @@ async function readMarketplaceJsonContent(dir) {
|
|
|
561324
561342
|
];
|
|
561325
561343
|
for (const candidate of candidates) {
|
|
561326
561344
|
try {
|
|
561327
|
-
return await
|
|
561345
|
+
return await readFile52(candidate, "utf-8");
|
|
561328
561346
|
} catch {}
|
|
561329
561347
|
}
|
|
561330
561348
|
return null;
|
|
@@ -561777,7 +561795,7 @@ __export(exports_bridgePointer, {
|
|
|
561777
561795
|
clearBridgePointer: () => clearBridgePointer,
|
|
561778
561796
|
BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
|
|
561779
561797
|
});
|
|
561780
|
-
import { mkdir as mkdir43, readFile as
|
|
561798
|
+
import { mkdir as mkdir43, readFile as readFile53, stat as stat50, unlink as unlink22, writeFile as writeFile47 } from "fs/promises";
|
|
561781
561799
|
import { dirname as dirname65, join as join155 } from "path";
|
|
561782
561800
|
function getBridgePointerPath(dir) {
|
|
561783
561801
|
return join155(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
|
|
@@ -561798,7 +561816,7 @@ async function readBridgePointer(dir) {
|
|
|
561798
561816
|
let mtimeMs;
|
|
561799
561817
|
try {
|
|
561800
561818
|
mtimeMs = (await stat50(path24)).mtimeMs;
|
|
561801
|
-
raw = await
|
|
561819
|
+
raw = await readFile53(path24, "utf8");
|
|
561802
561820
|
} catch {
|
|
561803
561821
|
return null;
|
|
561804
561822
|
}
|
|
@@ -563787,7 +563805,7 @@ __export(exports_print, {
|
|
|
563787
563805
|
createCanUseToolWithPermissionPrompt: () => createCanUseToolWithPermissionPrompt,
|
|
563788
563806
|
canBatchWith: () => canBatchWith
|
|
563789
563807
|
});
|
|
563790
|
-
import { readFile as
|
|
563808
|
+
import { readFile as readFile54, stat as stat51 } from "fs/promises";
|
|
563791
563809
|
import { dirname as dirname66 } from "path";
|
|
563792
563810
|
import { cwd as cwd2 } from "process";
|
|
563793
563811
|
import { randomUUID as randomUUID51 } from "crypto";
|
|
@@ -565137,7 +565155,7 @@ ${m2.text}
|
|
|
565137
565155
|
const normalizedPath = expandPath(message.request.path);
|
|
565138
565156
|
const diskMtime = Math.floor((await stat51(normalizedPath)).mtimeMs);
|
|
565139
565157
|
if (diskMtime <= message.request.mtime) {
|
|
565140
|
-
const raw = await
|
|
565158
|
+
const raw = await readFile54(normalizedPath, "utf-8");
|
|
565141
565159
|
const content = (raw.charCodeAt(0) === 65279 ? raw.slice(1) : raw).replaceAll(`\r
|
|
565142
565160
|
`, `
|
|
565143
565161
|
`);
|
|
@@ -567715,7 +567733,7 @@ __export(exports_claudeDesktop, {
|
|
|
567715
567733
|
readClaudeDesktopMcpServers: () => readClaudeDesktopMcpServers,
|
|
567716
567734
|
getClaudeDesktopConfigPath: () => getClaudeDesktopConfigPath
|
|
567717
567735
|
});
|
|
567718
|
-
import { readdir as readdir30, readFile as
|
|
567736
|
+
import { readdir as readdir30, readFile as readFile55, stat as stat52 } from "fs/promises";
|
|
567719
567737
|
import { homedir as homedir40 } from "os";
|
|
567720
567738
|
import { join as join156 } from "path";
|
|
567721
567739
|
async function getClaudeDesktopConfigPath() {
|
|
@@ -567763,7 +567781,7 @@ async function readClaudeDesktopMcpServers() {
|
|
|
567763
567781
|
const configPath = await getClaudeDesktopConfigPath();
|
|
567764
567782
|
let configContent;
|
|
567765
567783
|
try {
|
|
567766
|
-
configContent = await
|
|
567784
|
+
configContent = await readFile55(configPath, { encoding: "utf8" });
|
|
567767
567785
|
} catch (e) {
|
|
567768
567786
|
const code = getErrnoCode(e);
|
|
567769
567787
|
if (code === "ENOENT") {
|