@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 +17 -0
- package/README.md +10 -7
- package/README.zh.md +5 -3
- package/dist/integrations/claude-code-host-installer.d.ts +42 -0
- package/dist/integrations/claude-code-host-installer.d.ts.map +1 -0
- package/dist/integrations/claude-code-host-installer.js +341 -0
- package/dist/integrations/claude-code-host-installer.js.map +1 -0
- package/dist/integrations/cursor-host-installer.d.ts +38 -0
- package/dist/integrations/cursor-host-installer.d.ts.map +1 -0
- package/dist/integrations/cursor-host-installer.js +291 -0
- package/dist/integrations/cursor-host-installer.js.map +1 -0
- package/dist/integrations/host-adapter-install.d.ts +39 -4
- package/dist/integrations/host-adapter-install.d.ts.map +1 -1
- package/dist/integrations/host-adapter-install.js +90 -9
- package/dist/integrations/host-adapter-install.js.map +1 -1
- package/dist/integrations/host-adapter.d.ts +2 -2
- package/dist/surfaces/cli/init.d.ts.map +1 -1
- package/dist/surfaces/cli/init.js +115 -59
- package/dist/surfaces/cli/init.js.map +1 -1
- package/package.json +2 -1
- package/plugin.json +1 -1
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
|
-
[](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
|
-
|
|
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.
|
|
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/
|
|
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 +
|
|
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
|
-
[](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"}
|