@roarpeng/graphflow 1.15.0 → 1.15.2

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/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## [1.15.2] - 2026-09-05
6
+
7
+ ### Added
8
+
9
+ - **飞轮公开复现包(path A)**:`npm run proof:flywheel` 串起已有的检索 / skill A/B / memory A/B 离线基准,打印机器可读摘要 + 人类 checklist;`--dry-run` / `--help` 不重跑基准。冻结数字目录 [`benchmarks/flywheel-proof-claims.json`](benchmarks/flywheel-proof-claims.json);第三方入口 [`docs/flywheel-reproduction.md`](docs/flywheel-reproduction.md)。不发明新数字,只接线仓库里已提交的自测 RESULTS。
10
+ - **GraphFlow + Serena 联合方案独立指南**:把 `docs/comparison.md` 里的 "better together" 提升为一等文档 [`docs/graphflow-serena.md`](docs/graphflow-serena.md) / [中文](docs/graphflow-serena.zh.md)——并列安装两个 MCP、谁做什么(context/plan → Serena 编辑 → `report_outcome`)、常见坑。README(EN/中文)与 comparison 互链;配置示例 [`examples/graphflow-serena.mcp.json`](examples/graphflow-serena.mcp.json)(仅 MCP 片段,不把 Serena 写入 `package.json`)。无运行时代码改动。
11
+
12
+ ## [1.15.1] - 2026-09-05
13
+
14
+ ### Changed
15
+
16
+ - Cursor and Claude Code install / uninstall / doctor now go through the HostAdapter registry (`installViaHostAdapter("cursor")` / `installViaHostAdapter("claude-code")`), including Claude Code hooks. Remaining hosts (Trae, VS Code, Windsurf, Codex, Gemini, and others) still use the legacy installers.
17
+
18
+ ### Tests
19
+
20
+ - Extended `host-adapter-install` with Cursor / Claude Code install-uninstall-status slices and M16-style CLI doctor wiring.
21
+
5
22
  ## [1.15.0] - 2026-09-05
6
23
 
7
24
  ### Added
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  English | [中文](README.zh.md)
4
4
 
5
- [![npm version](https://img.shields.io/badge/npm-1.15.0-blue)](https://www.npmjs.com/package/@roarpeng/graphflow)
5
+ [![npm version](https://img.shields.io/badge/npm-1.15.2-blue)](https://www.npmjs.com/package/@roarpeng/graphflow)
6
6
 
7
7
  > **The memory & context harness for coding agents.** Local-first code knowledge graph · bounded context compression (~98% token savings) · cross-session learning flywheel.
8
8
 
@@ -29,14 +29,16 @@ It is also **local-first and portable**: everything runs offline with no API key
29
29
 
30
30
  ## Proof, not promises
31
31
 
32
- All headline numbers come from a **public, reproducible benchmark suite** ([benchmarks/README.md](benchmarks/README.md)) with published methodology ([docs/benchmark-standards.md](docs/benchmark-standards.md)) and machine-readable JSON dumps pinned to commits:
32
+ **Third-party reproduction entry:** `npm run proof:flywheel` — one command, offline, no API key. Guide: [docs/flywheel-reproduction.md](docs/flywheel-reproduction.md). Independent runs are welcome; open a GitHub issue titled `[benchmark] Independent reproduction — <commit>`.
33
+
34
+ All headline numbers come from a **public, reproducible benchmark suite** ([benchmarks/README.md](benchmarks/README.md)) with published methodology ([docs/benchmark-standards.md](docs/benchmark-standards.md)) and machine-readable JSON dumps pinned to commits. Authoritative percentages live in the tracked RESULTS markdown; this package does not invent new scores.
33
35
 
34
36
  - **~98% token savings** (8-query suite, 262,926 → 2,843 tokens; independently re-counted with `gpt-tokenizer`)
35
37
  - **132-query golden retrieval set** in CI (Hit@5 = 100%, MRR = 0.836, NDCG@5 = 0.601); downloadable open dataset: [`benchmarks/datasets/retrieval-golden-v1.json`](benchmarks/datasets/retrieval-golden-v1.json) — run `npm run bench:retrieval`
36
38
  - **Skill A/B: 100% vs 61.5%** task success with the flywheel on vs off (26 tasks)
37
39
  - **Memory ROI: 100% vs 56.5%** with episodic memory on vs off (62 tasks, with attribution chains)
38
40
 
39
- Results are commit-anchored so any number above can be checked out and re-run. Third-party reproduction is actively welcomed — see [ROADMAP.md](ROADMAP.md) for the open invitation.
41
+ Results are commit-anchored so any number above can be checked out and re-run. See [ROADMAP.md](ROADMAP.md) for the open invitation.
40
42
 
41
43
  ## Memory poisoning protection
42
44
 
@@ -67,7 +69,7 @@ Connect via MCP (Cursor / Claude Code / …):
67
69
  }
68
70
  ```
69
71
 
70
- The agent calls `graphflow_context` for compressed context, then `graphflow_plan` to plan; without a provider API key GraphFlow automatically bridges the ATP thinking protocol to the host agent (agent-delegated mode).
72
+ The agent calls `graphflow_context` for compressed context, then `graphflow_plan` to plan; without a provider API key GraphFlow automatically bridges the ATP thinking protocol to the host agent (agent-delegated mode). For symbol-precise edits, compose Serena as a second MCP server — [GraphFlow + Serena](docs/graphflow-serena.md) (`examples/graphflow-serena.mcp.json`).
71
73
 
72
74
  ## Why GraphFlow
73
75
 
@@ -82,7 +84,7 @@ Single-purpose tools each do one thing well; GraphFlow combines graph + compress
82
84
  | Local-first | ✅ | ✅ | ✅ | ✅ |
83
85
  | Open protocol | [ATP/IR public spec](docs/atp-ir-spec-v1.md) | — | — | — |
84
86
 
85
- > The differentiator is the **learning flywheel**: graph indexing and token compression are replicable; project-private experience (skills, lessons, decisions) accumulated across sessions is not — it compounds with use. Serena is a complement, not a competitor — see [GraphFlow + Serena: better together](docs/comparison.md#graphflow--serena-better-together联合方案).
87
+ > The differentiator is the **learning flywheel**: graph indexing and token compression are replicable; project-private experience (skills, lessons, decisions) accumulated across sessions is not — it compounds with use. Serena is a complement, not a competitor — see [GraphFlow + Serena: better together](docs/graphflow-serena.md) ([中文](docs/graphflow-serena.zh.md); [comparison](docs/comparison.md)).
86
88
 
87
89
  ## Core capabilities (v1.13+)
88
90
 
@@ -285,7 +287,7 @@ Supported: Cursor, VS Code, Trae (incl. CN), Claude Code, Windsurf, Cline, Roo C
285
287
 
286
288
  ## Protocol
287
289
 
288
- [ATP/IR — Agent Thinking Protocol public specification v1.0](docs/atp-ir-spec-v1.md): work-item registry, submit/merge contract, compatibility rules. Third-party tools can implement compatible producers / consumers. Minimal Producer example: [`examples/atp-minimal-producer/`](examples/atp-minimal-producer/).
290
+ [ATP/IR — Agent Thinking Protocol public specification v1.0](docs/atp-ir-spec-v1.md): work-item registry, submit/merge contract, compatibility rules. Third-party tools can implement compatible producers / consumers. Minimal Producer example: [`examples/atp-minimal-producer/`](examples/atp-minimal-producer/). Dual-MCP compose snippet (GraphFlow + Serena, config only): [`examples/graphflow-serena.mcp.json`](examples/graphflow-serena.mcp.json).
289
291
 
290
292
  ## Community
291
293
 
@@ -325,7 +327,8 @@ GraphFlow/
325
327
  │ └── mcp/ # MCP server (10 tools)
326
328
  ├── tests/ # 142 files / 961 tests (incl. governance foundation and MCP HTTP/stdio matrix)
327
329
  ├── benchmarks/ # comprehensive + independent + SWE-bench + token savings + skill A/B (reproducible)
328
- ├── docs/ # ATP spec + context contract + experience memory + comparisons
330
+ ├── docs/ # ATP spec + context contract + experience memory + flywheel reproduction + GraphFlow/Serena
331
+ ├── examples/ # ATP producer + team-memory config + GraphFlow/Serena dual-MCP snippet
329
332
  ├── vscode-extension/ # VS Code panel and commands
330
333
  └── CHANGELOG.md
331
334
  ```
package/README.zh.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | 中文
4
4
 
5
- [![npm version](https://img.shields.io/badge/npm-1.15.0-blue)](https://www.npmjs.com/package/@roarpeng/graphflow)
5
+ [![npm version](https://img.shields.io/badge/npm-1.15.2-blue)](https://www.npmjs.com/package/@roarpeng/graphflow)
6
6
 
7
7
  > **给编程 Agent 用的记忆与上下文 harness。** 本地优先的代码知识图谱 · 有界上下文压缩(约 98% token 节省) · 跨会话学习飞轮。
8
8
 
@@ -31,7 +31,7 @@ MCP 入口:
31
31
  }
32
32
  ```
33
33
 
34
- Agent 应先调 `graphflow_context` 拿压缩上下文,再视需要调用 `graphflow_plan`。没有 LLM API Key 时会桥接到宿主 Agent(agent-delegated)。
34
+ Agent 应先调 `graphflow_context` 拿压缩上下文,再视需要调用 `graphflow_plan`。没有 LLM API Key 时会桥接到宿主 Agent(agent-delegated)。需要符号级精确编辑时,把 Serena 作为第二个 MCP server 并列挂载——见 [GraphFlow + Serena 联合方案](docs/graphflow-serena.zh.md)(配置示例:[`examples/graphflow-serena.mcp.json`](examples/graphflow-serena.mcp.json))。
35
35
 
36
36
  ## 工作台脉络(v1.9.14)
37
37
 
@@ -136,4 +136,6 @@ dsh plugin --profile web remove @roarpeng/graphflow
136
136
 
137
137
  ## 更多
138
138
 
139
- 完整英文文档、基准与协议:[README.md](README.md) · [ATP/IR](docs/atp-ir-spec-v1.md) · [上下文合同](docs/context-contract.md) · [经验记忆](docs/experience-memory.md)
139
+ 完整英文文档、基准与协议:[README.md](README.md) · [ATP/IR](docs/atp-ir-spec-v1.md) · [上下文合同](docs/context-contract.md) · [经验记忆](docs/experience-memory.md) · [GraphFlow + Serena](docs/graphflow-serena.zh.md) · [竞品对比](docs/comparison.md)
140
+
141
+ 第三方复现飞轮 / 记忆 A/B / 检索自测:`npm run proof:flywheel`(说明见 [docs/flywheel-reproduction.md](docs/flywheel-reproduction.md))。
@@ -0,0 +1,42 @@
1
+ import { type ClaudeCodeHooksResult } from "./claude-code-hooks";
2
+ export declare const CLAUDE_CODE_HOST_ADAPTER_ID = "claude-code";
3
+ export interface ClaudeCodeHostInstallResult {
4
+ status: "created" | "updated" | "skipped" | "error";
5
+ filePath?: string;
6
+ message?: string;
7
+ hooks?: ClaudeCodeHooksResult;
8
+ }
9
+ export interface ClaudeCodeHostMcpTarget {
10
+ path: string;
11
+ installed: boolean;
12
+ scope: "user" | "workspace";
13
+ agentName: string;
14
+ }
15
+ export interface ClaudeCodeHostStatus {
16
+ hostId: string;
17
+ agent: string;
18
+ detected: boolean;
19
+ installed: boolean;
20
+ mcpInstalled: boolean;
21
+ rulesInstalled: boolean;
22
+ skillInstalled: boolean;
23
+ hooksInstalled: boolean;
24
+ home: string;
25
+ mcpPath: string;
26
+ rulesPath: string;
27
+ skillPath: string;
28
+ settingsPath: string;
29
+ hooksDir: string;
30
+ mcpTargets: ClaudeCodeHostMcpTarget[];
31
+ }
32
+ export declare function resolveClaudeCodeHostHome(override?: string): string;
33
+ export declare function getClaudeCodeHostStatus(options?: {
34
+ home?: string;
35
+ }): ClaudeCodeHostStatus;
36
+ export declare function installClaudeCodeHost(options?: {
37
+ home?: string;
38
+ }): ClaudeCodeHostInstallResult;
39
+ export declare function uninstallClaudeCodeHost(options?: {
40
+ home?: string;
41
+ }): ClaudeCodeHostInstallResult;
42
+ //# sourceMappingURL=claude-code-host-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-host-installer.d.ts","sourceRoot":"","sources":["../../src/integrations/claude-code-host-installer.ts"],"names":[],"mappings":"AAiBA,OAAO,EAML,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAW7B,eAAO,MAAM,2BAA2B,gBAAgB,CAAC;AAIzD,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,qBAAqB,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,uBAAuB,EAAE,CAAC;CACvC;AAWD,wBAAgB,yBAAyB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnE;AAgKD,wBAAgB,uBAAuB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,oBAAoB,CAkE7F;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,2BAA2B,CA0DlG;AAED,wBAAgB,uBAAuB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,2BAA2B,CAyDpG"}
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CLAUDE_CODE_HOST_ADAPTER_ID = void 0;
4
+ exports.resolveClaudeCodeHostHome = resolveClaudeCodeHostHome;
5
+ exports.getClaudeCodeHostStatus = getClaudeCodeHostStatus;
6
+ exports.installClaudeCodeHost = installClaudeCodeHost;
7
+ exports.uninstallClaudeCodeHost = uninstallClaudeCodeHost;
8
+ /**
9
+ * Claude Code HostAdapter install slice.
10
+ *
11
+ * Composes existing MCP + CLAUDE.md + skill + hooks installers. Isolated
12
+ * `home` / GRAPHFLOW_CLAUDE_HOME treats that directory as `~/.claude` and
13
+ * writes MCP to the sibling `.claude.json` so tests match production layout.
14
+ */
15
+ const node_fs_1 = require("node:fs");
16
+ const node_path_1 = require("node:path");
17
+ const agent_mcp_installer_1 = require("./agent-mcp-installer");
18
+ const claude_code_hooks_1 = require("./claude-code-hooks");
19
+ const host_adapter_1 = require("./host-adapter");
20
+ const skill_installer_1 = require("./skill-installer");
21
+ exports.CLAUDE_CODE_HOST_ADAPTER_ID = "claude-code";
22
+ const CLAUDE_PROFILE_IDS = ["claude-code", "claude-code-windows"];
23
+ function claudeDisplayName() {
24
+ return (0, host_adapter_1.getHostAdapter)(exports.CLAUDE_CODE_HOST_ADAPTER_ID)?.displayName ?? "Claude Code";
25
+ }
26
+ function isolatedClaudeHome(override) {
27
+ const explicit = override?.trim() || process.env[claude_code_hooks_1.CLAUDE_HOME_ENV]?.trim();
28
+ return explicit || undefined;
29
+ }
30
+ function resolveClaudeCodeHostHome(override) {
31
+ return isolatedClaudeHome(override) ?? (0, claude_code_hooks_1.resolveClaudeHome)();
32
+ }
33
+ function claudeMcpPath(home) {
34
+ return (0, node_path_1.join)((0, node_path_1.dirname)(home), ".claude.json");
35
+ }
36
+ function claudePaths(home) {
37
+ return {
38
+ mcpPath: claudeMcpPath(home),
39
+ rulesPath: (0, node_path_1.join)(home, "CLAUDE.md"),
40
+ skillPath: (0, node_path_1.join)(home, "skills", "graphflow", "SKILL.md"),
41
+ skillsRoot: (0, node_path_1.join)(home, "skills"),
42
+ settingsPath: (0, node_path_1.join)(home, "settings.json"),
43
+ hooksDir: (0, node_path_1.join)(home, "graphflow-hooks"),
44
+ };
45
+ }
46
+ function isMcpServerInstalled(configPath, serverName = "graphflow") {
47
+ if (!(0, node_fs_1.existsSync)(configPath))
48
+ return false;
49
+ try {
50
+ const json = JSON.parse((0, node_fs_1.readFileSync)(configPath, "utf8"));
51
+ return Boolean(json.mcpServers?.[serverName]);
52
+ }
53
+ catch {
54
+ return false;
55
+ }
56
+ }
57
+ function copyIfChanged(sourcePath, destDir, destFileName) {
58
+ const destFile = (0, node_path_1.join)(destDir, destFileName);
59
+ const existed = (0, node_fs_1.existsSync)(destFile);
60
+ if (existed && (0, node_fs_1.readFileSync)(destFile, "utf8") === (0, node_fs_1.readFileSync)(sourcePath, "utf8")) {
61
+ return { status: "skipped", filePath: destFile };
62
+ }
63
+ (0, node_fs_1.mkdirSync)(destDir, { recursive: true });
64
+ (0, node_fs_1.copyFileSync)(sourcePath, destFile);
65
+ return { status: existed ? "updated" : "created", filePath: destFile };
66
+ }
67
+ function writeClaudeMcp(configPath) {
68
+ try {
69
+ const node = (0, agent_mcp_installer_1.buildMcpServerNode)({ strategy: "npx" });
70
+ const existed = (0, node_fs_1.existsSync)(configPath);
71
+ let json = {};
72
+ if (existed) {
73
+ try {
74
+ json = JSON.parse((0, node_fs_1.readFileSync)(configPath, "utf8"));
75
+ }
76
+ catch {
77
+ json = {};
78
+ }
79
+ }
80
+ const servers = json.mcpServers && typeof json.mcpServers === "object"
81
+ ? { ...json.mcpServers }
82
+ : {};
83
+ const serverExisted = Boolean(servers.graphflow);
84
+ servers.graphflow = node;
85
+ const next = { ...json, mcpServers: servers };
86
+ const payload = `${JSON.stringify(next, null, 2)}\n`;
87
+ if (existed && (0, node_fs_1.readFileSync)(configPath, "utf8") === payload) {
88
+ return { status: "skipped", filePath: configPath, message: "already up to date" };
89
+ }
90
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(configPath), { recursive: true });
91
+ (0, node_fs_1.writeFileSync)(configPath, payload, "utf8");
92
+ if (!existed)
93
+ return { status: "created", filePath: configPath };
94
+ if (!serverExisted)
95
+ return { status: "created", filePath: configPath };
96
+ return { status: "updated", filePath: configPath };
97
+ }
98
+ catch (error) {
99
+ return {
100
+ status: "error",
101
+ filePath: configPath,
102
+ message: error instanceof Error ? error.message : String(error),
103
+ };
104
+ }
105
+ }
106
+ function rollupStatus(results) {
107
+ if (results.some((item) => item.status === "error"))
108
+ return "error";
109
+ if (results.some((item) => item.status === "created" || item.status === "injected"))
110
+ return "created";
111
+ if (results.some((item) => item.status === "updated"))
112
+ return "updated";
113
+ return "skipped";
114
+ }
115
+ function detectedClaudeProfileIds() {
116
+ const ids = (0, agent_mcp_installer_1.detectInstalledAgents)()
117
+ .map((agent) => agent.id)
118
+ .filter((id) => CLAUDE_PROFILE_IDS.includes(id));
119
+ if (ids.length === 0 && (0, node_fs_1.existsSync)((0, claude_code_hooks_1.resolveClaudeHome)())) {
120
+ return ["claude-code"];
121
+ }
122
+ return ids;
123
+ }
124
+ function installClaudeSkillAt(skillsRoot) {
125
+ const sourceDir = (0, skill_installer_1.resolveSkillSourcePath)();
126
+ const destFile = (0, node_path_1.join)(skillsRoot, "graphflow", "SKILL.md");
127
+ if (!sourceDir) {
128
+ return { status: "skipped", filePath: destFile, message: "Skill source (SKILL.md) not found" };
129
+ }
130
+ try {
131
+ return copyIfChanged((0, node_path_1.join)(sourceDir, "SKILL.md"), (0, node_path_1.join)(skillsRoot, "graphflow"), "SKILL.md");
132
+ }
133
+ catch (error) {
134
+ return {
135
+ status: "error",
136
+ filePath: destFile,
137
+ message: error instanceof Error ? error.message : String(error),
138
+ };
139
+ }
140
+ }
141
+ function installClaudeMdAt(home) {
142
+ const dest = (0, node_path_1.join)(home, "CLAUDE.md");
143
+ const sourcePath = (0, skill_installer_1.resolveClaudeMdSourcePath)();
144
+ if (!sourcePath) {
145
+ return { status: "skipped", filePath: dest, message: "CLAUDE.md source not found" };
146
+ }
147
+ try {
148
+ return copyIfChanged(sourcePath, home, "CLAUDE.md");
149
+ }
150
+ catch (error) {
151
+ return {
152
+ status: "error",
153
+ filePath: dest,
154
+ message: error instanceof Error ? error.message : String(error),
155
+ };
156
+ }
157
+ }
158
+ function resultFromParts(parts, fallbackPath, hooks) {
159
+ const status = rollupStatus(parts);
160
+ const filePath = hooks?.filePath ?? parts.find((part) => part.filePath)?.filePath ?? fallbackPath;
161
+ const message = parts
162
+ .map((part) => part.message)
163
+ .filter((item) => Boolean(item))
164
+ .join("; ");
165
+ const result = { status, filePath };
166
+ if (message)
167
+ result.message = message;
168
+ if (hooks)
169
+ result.hooks = hooks;
170
+ return result;
171
+ }
172
+ function getClaudeCodeHostStatus(options = {}) {
173
+ const isolated = isolatedClaudeHome(options.home);
174
+ const home = resolveClaudeCodeHostHome(options.home);
175
+ const paths = claudePaths(home);
176
+ const agent = claudeDisplayName();
177
+ if (isolated) {
178
+ const hooks = (0, claude_code_hooks_1.getClaudeCodeHooksStatus)({
179
+ claudeHome: home,
180
+ settingsPath: paths.settingsPath,
181
+ hooksDir: paths.hooksDir,
182
+ });
183
+ const detected = (0, node_fs_1.existsSync)(home);
184
+ const mcpInstalled = detected && isMcpServerInstalled(paths.mcpPath);
185
+ const rulesInstalled = (0, node_fs_1.existsSync)(paths.rulesPath);
186
+ const skillInstalled = (0, node_fs_1.existsSync)(paths.skillPath);
187
+ return {
188
+ hostId: exports.CLAUDE_CODE_HOST_ADAPTER_ID,
189
+ agent,
190
+ detected,
191
+ installed: mcpInstalled,
192
+ mcpInstalled,
193
+ rulesInstalled,
194
+ skillInstalled,
195
+ hooksInstalled: hooks.installed,
196
+ home,
197
+ mcpPath: paths.mcpPath,
198
+ rulesPath: paths.rulesPath,
199
+ skillPath: paths.skillPath,
200
+ settingsPath: paths.settingsPath,
201
+ hooksDir: paths.hooksDir,
202
+ mcpTargets: detected
203
+ ? [{ path: paths.mcpPath, installed: mcpInstalled, scope: "user", agentName: agent }]
204
+ : [],
205
+ };
206
+ }
207
+ const mcp = (0, agent_mcp_installer_1.getMcpInstallStatus)().filter((item) => item.agentId === "claude-code" || item.agentId === "claude-code-windows");
208
+ const skill = (0, skill_installer_1.getAgentSkillStatus)().find((item) => item.agent === "Claude Code skill");
209
+ const hooks = (0, claude_code_hooks_1.getClaudeCodeHooksStatus)();
210
+ const detected = mcp.length > 0 || hooks.detected || (0, node_fs_1.existsSync)(home) || detectedClaudeProfileIds().length > 0;
211
+ const mcpInstalled = mcp.some((item) => item.installed);
212
+ return {
213
+ hostId: exports.CLAUDE_CODE_HOST_ADAPTER_ID,
214
+ agent,
215
+ detected,
216
+ installed: mcpInstalled,
217
+ mcpInstalled,
218
+ rulesInstalled: (0, node_fs_1.existsSync)(paths.rulesPath),
219
+ skillInstalled: skill?.installed ?? (0, node_fs_1.existsSync)(paths.skillPath),
220
+ hooksInstalled: hooks.installed,
221
+ home,
222
+ mcpPath: mcp[0]?.configPath ?? paths.mcpPath,
223
+ rulesPath: paths.rulesPath,
224
+ skillPath: skill?.configPath ?? paths.skillPath,
225
+ settingsPath: hooks.settingsPath,
226
+ hooksDir: hooks.hooksDir,
227
+ mcpTargets: mcp.map((item) => ({
228
+ path: item.configPath,
229
+ installed: item.installed,
230
+ scope: item.scope,
231
+ agentName: item.agentName,
232
+ })),
233
+ };
234
+ }
235
+ function installClaudeCodeHost(options = {}) {
236
+ const isolated = isolatedClaudeHome(options.home);
237
+ const home = resolveClaudeCodeHostHome(options.home);
238
+ const paths = claudePaths(home);
239
+ if (isolated) {
240
+ if (!(0, node_fs_1.existsSync)(home)) {
241
+ return { status: "skipped", filePath: paths.mcpPath, message: `${claudeDisplayName()} not detected` };
242
+ }
243
+ const mcp = writeClaudeMcp(paths.mcpPath);
244
+ const md = installClaudeMdAt(home);
245
+ const skill = installClaudeSkillAt(paths.skillsRoot);
246
+ const hooks = (0, claude_code_hooks_1.installClaudeCodeHooks)({
247
+ settingsPath: paths.settingsPath,
248
+ hooksDir: paths.hooksDir,
249
+ });
250
+ return resultFromParts([mcp, md, skill, hooks], paths.settingsPath, hooks);
251
+ }
252
+ const ids = detectedClaudeProfileIds();
253
+ if (ids.length === 0 && !(0, node_fs_1.existsSync)(home)) {
254
+ return { status: "skipped", filePath: paths.mcpPath, message: `${claudeDisplayName()} not detected` };
255
+ }
256
+ const mcp = (0, agent_mcp_installer_1.installMcpToDetectedAgents)({
257
+ strategy: "npx",
258
+ installScope: "user",
259
+ agentIdsOverride: ids.length > 0 ? ids : ["claude-code"],
260
+ });
261
+ const md = (0, skill_installer_1.installClaudeCodeMd)();
262
+ const skill = (0, node_fs_1.existsSync)(home)
263
+ ? installClaudeSkillAt(paths.skillsRoot)
264
+ : { status: "skipped", filePath: paths.skillPath, message: "Claude Code skill marker not found" };
265
+ const hooksStatus = (0, claude_code_hooks_1.getClaudeCodeHooksStatus)();
266
+ const hooks = hooksStatus.detected
267
+ ? (0, claude_code_hooks_1.installClaudeCodeHooks)({
268
+ settingsPath: hooksStatus.settingsPath,
269
+ hooksDir: hooksStatus.hooksDir,
270
+ })
271
+ : { status: "skipped", filePath: hooksStatus.settingsPath, message: "Claude Code not detected" };
272
+ return resultFromParts([
273
+ ...mcp.map((item) => ({
274
+ status: item.status,
275
+ filePath: item.configPath,
276
+ ...(item.message ? { message: item.message } : {}),
277
+ })),
278
+ ...md.map((item) => ({
279
+ status: item.status,
280
+ ...(item.message ? { message: item.message } : {}),
281
+ })),
282
+ skill,
283
+ hooks,
284
+ ], hooks.filePath ?? mcp[0]?.configPath ?? paths.settingsPath, hooks);
285
+ }
286
+ function uninstallClaudeCodeHost(options = {}) {
287
+ const isolated = isolatedClaudeHome(options.home);
288
+ const home = resolveClaudeCodeHostHome(options.home);
289
+ const paths = claudePaths(home);
290
+ if (isolated) {
291
+ const hooks = (0, claude_code_hooks_1.uninstallClaudeCodeHooks)(paths.settingsPath, paths.hooksDir);
292
+ const mcpRemoved = (0, node_fs_1.existsSync)(paths.mcpPath) ? (0, agent_mcp_installer_1.removeMcpEntry)(paths.mcpPath, "mcpServers", "graphflow") : false;
293
+ const mdRemoved = (0, skill_installer_1.removeGraphFlowOwnedFile)(paths.rulesPath);
294
+ const skillRemoved = (0, skill_installer_1.removeAgentSkill)(paths.skillsRoot);
295
+ const hooksRemoved = hooks.status === "updated";
296
+ if (!mcpRemoved && !mdRemoved && !skillRemoved && !hooksRemoved) {
297
+ return {
298
+ status: "skipped",
299
+ filePath: paths.settingsPath,
300
+ message: "no GraphFlow Claude Code files",
301
+ hooks,
302
+ };
303
+ }
304
+ return {
305
+ status: "updated",
306
+ filePath: paths.settingsPath,
307
+ message: "removed GraphFlow Claude Code MCP + rules + skill + hooks",
308
+ hooks,
309
+ };
310
+ }
311
+ const mcp = [
312
+ ...(0, agent_mcp_installer_1.uninstallMcpFromDetectedAgents)({ agentId: "claude-code" }),
313
+ ...(0, agent_mcp_installer_1.uninstallMcpFromDetectedAgents)({ agentId: "claude-code-windows" }),
314
+ ];
315
+ const mdRemoved = (0, skill_installer_1.removeGraphFlowOwnedFile)(paths.rulesPath);
316
+ const appData = process.env.APPDATA;
317
+ const appDataMd = process.platform === "win32" && appData
318
+ ? (0, skill_installer_1.removeGraphFlowOwnedFile)((0, node_path_1.join)(appData, "Claude Code", "CLAUDE.md"))
319
+ : false;
320
+ const skillRemoved = (0, skill_installer_1.removeAgentSkill)(paths.skillsRoot);
321
+ const hooksStatus = (0, claude_code_hooks_1.getClaudeCodeHooksStatus)();
322
+ const hooks = hooksStatus.detected
323
+ ? (0, claude_code_hooks_1.uninstallClaudeCodeHooks)(hooksStatus.settingsPath, hooksStatus.hooksDir)
324
+ : { status: "skipped", filePath: hooksStatus.settingsPath, message: "Claude Code not detected" };
325
+ const mcpRemoved = mcp.some((item) => item.removed);
326
+ if (!mcpRemoved && !mdRemoved && !appDataMd && !skillRemoved && hooks.status !== "updated") {
327
+ return {
328
+ status: "skipped",
329
+ filePath: hooks.filePath ?? paths.settingsPath,
330
+ message: "no GraphFlow Claude Code files",
331
+ hooks,
332
+ };
333
+ }
334
+ return {
335
+ status: "updated",
336
+ filePath: hooks.filePath ?? paths.settingsPath,
337
+ message: "removed GraphFlow Claude Code MCP + rules + skill + hooks",
338
+ hooks,
339
+ };
340
+ }
341
+ //# sourceMappingURL=claude-code-host-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-host-installer.js","sourceRoot":"","sources":["../../src/integrations/claude-code-host-installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export declare const CURSOR_HOST_ADAPTER_ID = "cursor";
2
+ export declare const CURSOR_HOME_ENV = "GRAPHFLOW_CURSOR_HOME";
3
+ export interface CursorHostInstallResult {
4
+ status: "created" | "updated" | "skipped" | "error";
5
+ filePath?: string;
6
+ message?: string;
7
+ }
8
+ export interface CursorHostMcpTarget {
9
+ path: string;
10
+ installed: boolean;
11
+ scope: "user" | "workspace";
12
+ agentName: string;
13
+ }
14
+ export interface CursorHostStatus {
15
+ hostId: string;
16
+ agent: string;
17
+ detected: boolean;
18
+ installed: boolean;
19
+ mcpInstalled: boolean;
20
+ rulesInstalled: boolean;
21
+ skillInstalled: boolean;
22
+ home: string;
23
+ mcpPath: string;
24
+ rulesPath: string;
25
+ skillPath: string;
26
+ mcpTargets: CursorHostMcpTarget[];
27
+ }
28
+ export declare function resolveCursorHome(override?: string): string;
29
+ export declare function getCursorHostStatus(options?: {
30
+ home?: string;
31
+ }): CursorHostStatus;
32
+ export declare function installCursorHost(options?: {
33
+ home?: string;
34
+ }): CursorHostInstallResult;
35
+ export declare function uninstallCursorHost(options?: {
36
+ home?: string;
37
+ }): CursorHostInstallResult;
38
+ //# sourceMappingURL=cursor-host-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-host-installer.d.ts","sourceRoot":"","sources":["../../src/integrations/cursor-host-installer.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,sBAAsB,WAAW,CAAC;AAC/C,eAAO,MAAM,eAAe,0BAA0B,CAAC;AAIvD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACnC;AAWD,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAkJD,wBAAgB,mBAAmB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,gBAAgB,CAsDrF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,uBAAuB,CA6C1F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,uBAAuB,CAkC5F"}