agentcache 0.4.2 → 0.5.0-beta.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.
Files changed (38) hide show
  1. package/README.md +282 -151
  2. package/dist/{chunk-T4COG3XD.js → chunk-R5I6WWSD.js} +31 -14
  3. package/dist/chunk-RXGW4Q3G.js +109 -0
  4. package/dist/chunk-XRJ6QW6N.js +92 -0
  5. package/dist/chunk-YKG6CDGT.js +1818 -0
  6. package/dist/chunk-YY7QXBG5.js +6610 -0
  7. package/dist/cli.js +2535 -292
  8. package/dist/device-id-RV7RO5RB.js +7 -0
  9. package/dist/ide-detector-ETGAVVXO.js +8 -0
  10. package/dist/mcp.d.ts +734 -2
  11. package/dist/mcp.js +1126 -446
  12. package/dist/{paths-5LZRKNYY.js → paths-NTZ2357O.js} +3 -2
  13. package/dist/postinstall.js +1 -65
  14. package/dist/setup-7JJPW3VG.js +48 -0
  15. package/docs/compatibility.md +152 -0
  16. package/docs/demo-script.md +121 -0
  17. package/docs/launch-copy.md +125 -0
  18. package/docs/privacy.md +173 -0
  19. package/docs/troubleshooting.md +209 -0
  20. package/package.json +32 -14
  21. package/dist/3-canonicalizer-HIN2F7SZ.js +0 -11
  22. package/dist/chunk-5UO7NJPQ.js +0 -71
  23. package/dist/chunk-CUBZRYS5.js +0 -580
  24. package/dist/chunk-GGAATZKM.js +0 -120
  25. package/dist/chunk-JUDLOBOC.js +0 -77
  26. package/dist/chunk-KFQGP6VL.js +0 -33
  27. package/dist/chunk-PSASDZQE.js +0 -490
  28. package/dist/chunk-SLRKWMSE.js +0 -202
  29. package/dist/chunk-T7BJPANN.js +0 -45
  30. package/dist/chunk-WTXSZBQE.js +0 -388
  31. package/dist/compile-all-PTWTZVP5.js +0 -495
  32. package/dist/ide-detector-5TRCR4F5.js +0 -7
  33. package/dist/pre-tool-use-A4AJHZOJ.js +0 -30
  34. package/dist/session-start-DGMGEAJU.js +0 -78
  35. package/dist/setup-CVG35TUZ.js +0 -51
  36. package/dist/sqlite-NM2BVHUY.js +0 -7
  37. package/dist/stop-WGGRX6TQ.js +0 -38
  38. package/dist/transcript-JWSGSDSF.js +0 -24
@@ -0,0 +1,173 @@
1
+ # Privacy and trust boundary
2
+
3
+ AgentCache `0.5.0-beta.2` is local-first and same-machine only. Its v2 database
4
+ and coordination state live on your machine. That statement is about where
5
+ AgentCache stores data; it is not a promise that an AI coding client or its
6
+ model provider operates offline.
7
+
8
+ ## The provider boundary
9
+
10
+ When a handoff is consumed, the destination provider may receive the capsule as
11
+ part of the destination agent's model context. In the prescribed prompt-based
12
+ workflow, the handoff ID and one-use token may also be sent to the destination
13
+ provider before the tool call. The token is a temporary bearer secret: together
14
+ with its handoff ID, it authorizes one correctly bound resume until use or
15
+ expiry. The provider's network, retention, training, logging, residency, and
16
+ account policies apply to those values and the capsule. Installing AgentCache
17
+ can also contact the npm registry in the normal way.
18
+
19
+ AgentCache's own default session-continuity path does not initiate an
20
+ application-level cloud sync, telemetry upload, or background LLM compilation.
21
+ That narrower statement must not be shortened to “nothing leaves the machine.”
22
+
23
+ Before continuing a sensitive session in a different hosted client, verify
24
+ that the destination provider is allowed to receive the material in the
25
+ capsule.
26
+
27
+ ## What is stored locally
28
+
29
+ The v2 session store is:
30
+
31
+ ```text
32
+ ~/.agentcache/agentcache-v2.db
33
+ ```
34
+
35
+ It contains portable workspaces and locations, session metadata, client legs,
36
+ normalized events, checkpoints, forks, source cursors, one-use handoffs, and
37
+ writer leases. A newly prepared handoff stores the exact bounded resume capsule
38
+ shown during confirmation plus an integrity digest; migrated pre-capsule beta
39
+ handoffs remain listable but fail closed on consumption. The data directory is
40
+ set to mode `0700` and the database to
41
+ mode `0600` on platforms that implement POSIX permissions. Session-store
42
+ startup refuses symbolic, special, or multiply linked database files and
43
+ SQLite `-wal`, `-shm`, and rollback-journal sidecars. It validates file and
44
+ directory identity around initialization instead of following a pre-created
45
+ redirecting path.
46
+
47
+ The v2 store uses a persistent `TRUNCATE` rollback journal so overlapping CLI
48
+ and MCP processes retain one canonical journal pathname and inode. WAL/SHM
49
+ paths are still rejected when pre-created unsafely because older databases or
50
+ interrupted upgrades can leave those sidecars behind.
51
+
52
+ Workspace access is authorized only by an existing mapping for the same device
53
+ and exact canonical root. Repository-controlled `.agentcache/workspace.json`
54
+ content and matching Git remotes are not authority to join another root's
55
+ workspace; they cannot expose that workspace's session list, inspection,
56
+ history, or handoffs.
57
+
58
+ The legacy `~/.agentcache/agentcache.db` is left beside v2 and is not translated
59
+ or mutated by the v2 session repository. Full database encryption is not
60
+ implemented in this beta; the local boundary is OS-user isolation plus
61
+ restrictive permissions. Device malware or another process running as the same
62
+ OS user is outside that boundary.
63
+
64
+ ## Native transcripts are read-only
65
+
66
+ Native transcripts remain owned by Claude Code, Cursor, Roo Code, Continue,
67
+ Codex, Windsurf, or Goose. AgentCache adapters have no transcript-write method.
68
+ Supported historical readers:
69
+
70
+ - accept only canonical files below adapter-owned roots;
71
+ - reject symbolic links and non-regular files;
72
+ - open sources read-only with no-follow semantics when the platform supports
73
+ them;
74
+ - verify file identity before and after a read;
75
+ - enforce byte, event, and time budgets; and
76
+ - retain a durable cursor so a failed import can be retried without rewriting
77
+ the source.
78
+
79
+ Windsurf and Goose historical recovery are unsupported in this beta. Cursor
80
+ and Roo Code sources currently lack verified workspace identity, so AgentCache
81
+ does not infer ownership from a similar title, time, or path alone.
82
+
83
+ ## What crosses an AgentCache handoff
84
+
85
+ A checkpoint may include:
86
+
87
+ - the objective and next step;
88
+ - explicit constraints, decisions, blockers, rejected approaches, completed
89
+ work, and open work;
90
+ - portable Git branch/commit metadata and repository-relative paths; and
91
+ - a bounded set of recent user, assistant, and compact tool-outcome events.
92
+
93
+ The default capsule budget is 24,000 encoded characters, with at most 12 recent
94
+ events and 2,000 characters per recent event. Tool results are excluded by
95
+ default. If content does not fit, the capsule is marked partial and includes an
96
+ opaque cursor for bounded history retrieval.
97
+
98
+ Before an interactive token is disclosed, the CLI displays the same bounded
99
+ public capsule projection returned by the destination MCP tool. The user may
100
+ exclude up to 50 displayed events and inspect the replacement capsule again.
101
+ This marks that capsule partial and affects only its initial payload. It is not
102
+ deletion or access control: the durable timeline is unchanged, and the same
103
+ workspace can still retrieve excluded events through `session_history`.
104
+ Cancelling or a handled prompt failure before confirmation removes the pending
105
+ handoff. If the process is killed before cleanup runs, the unconsumed handoff
106
+ expires after ten minutes.
107
+
108
+ Capsules omit hidden reasoning, system prompts, tool-approval state, token
109
+ hashes, native source locators, unrestricted file bodies, and unrestricted tool
110
+ output by default.
111
+
112
+ Every returned capsule is labelled:
113
+
114
+ ```text
115
+ untrusted_prior_session_context
116
+ ```
117
+
118
+ That content is data from a prior session. It cannot grant permissions, change
119
+ tool policy, or authenticate a caller. A destination agent should restate the
120
+ goal and proposed next step, then obtain normal approval for destructive or
121
+ expensive work.
122
+
123
+ ## Redaction and limits
124
+
125
+ Portable text is redacted for known credential-shaped fields and tokens,
126
+ private-key blocks, credential-bearing URLs, environment assignments, common
127
+ provider token formats, and absolute local paths. Payloads reject reserved
128
+ identity, location, authority, and credential fields. Public CLI and MCP output
129
+ is bounded. Terminal-facing CLI output neutralizes terminal control characters.
130
+
131
+ Redaction is defense in depth, not a perfect secret detector. Novel credential
132
+ formats, secrets embedded in ordinary prose, source code, screenshots, and
133
+ other provider-visible context may still be disclosed. Review the selected
134
+ session and use the destination provider's own data controls.
135
+
136
+ ## Handoff and writer credentials
137
+
138
+ - A handoff token is random, stored only as a hash bound to the capsule digest,
139
+ expires after ten minutes, and can be consumed once. Interactive mode reveals
140
+ it only after confirmation; the explicit noninteractive `--json` mode returns
141
+ the token and public capsule immediately.
142
+ - It is bound to an exact workspace and destination adapter.
143
+ - Writer lease credentials remain inside the destination MCP process rather
144
+ than being returned to the model. Leases expire after ten minutes and slide
145
+ forward during authorized append/checkpoint operations.
146
+ - A continuing destination cannot take over a live writer without explicit
147
+ human confirmation tied to the exact lease generation. Forking avoids that
148
+ takeover.
149
+
150
+ Treat the printed handoff token as a temporary bearer secret. Do not put it in
151
+ an issue, commit, shell history, or screen recording intended for publication.
152
+
153
+ ## Configuration changes
154
+
155
+ `agentcache setup` is explicit. It updates only recognized AgentCache MCP
156
+ entries, preserves unrelated settings, and writes a user-only
157
+ `.agentcache-backup-...` sibling before changing an existing file. Malformed or
158
+ ambiguous configurations are preserved. The beta does not add broad automatic
159
+ tool approvals and removes recognized legacy AgentCache hooks and allow-list
160
+ entries during setup.
161
+
162
+ ## Out of scope
163
+
164
+ - Cloud storage and cross-device sync
165
+ - Accounts, organization sharing, or team access controls
166
+ - Full database encryption
167
+ - Provider policy enforcement
168
+ - Transfer of hidden model state or native conversation identifiers
169
+ - Automatic Git operations
170
+ - A guarantee that all secrets can be detected
171
+
172
+ See [Troubleshooting](troubleshooting.md) for removal, retained data, config
173
+ backups, and rollback.
@@ -0,0 +1,209 @@
1
+ # Troubleshooting, uninstall, and rollback
2
+
3
+ Run commands from the repository whose sessions you want to inspect. AgentCache
4
+ binds session operations to the current workspace.
5
+
6
+ ## First checks
7
+
8
+ ```bash
9
+ node --version
10
+ agentcache --version
11
+ agentcache doctor
12
+ agentcache adapter list --json
13
+ agentcache adapter doctor <adapter-id> --json
14
+ ```
15
+
16
+ AgentCache `0.5.0-beta.2` requires Node.js 22 or newer. Setup pins the exact
17
+ active Node executable and installed AgentCache CLI into each client config.
18
+ After changing Node versions or version managers, changing the global npm
19
+ prefix, reinstalling/upgrading AgentCache, or upgrading a client, rerun
20
+ `agentcache setup` and restart the client so it reloads that configuration.
21
+
22
+ The global `agentcache doctor` verifies exact adapter-bound MCP registration
23
+ commands and, after initialization, the v2 data store. On a fresh setup before
24
+ the first session operation, no v2 database exists yet; the informational
25
+ message `will initialize on first session operation` is expected and is not a
26
+ failure. `agentcache adapter doctor <adapter-id>` probes that client's current
27
+ capability evidence. Neither command turns an experimental capability into a
28
+ stable one.
29
+
30
+ ## No sessions appear
31
+
32
+ ```bash
33
+ agentcache session list --json
34
+ ```
35
+
36
+ The output reports which adapters were searched and returns bounded discovery
37
+ diagnostics. Common causes are:
38
+
39
+ - no portable session has been opened in this workspace;
40
+ - the native transcript has no verified workspace field;
41
+ - the source is outside the adapter-owned transcript root;
42
+ - the file is a symlink, malformed, changing during the read, or over budget;
43
+ - Windsurf or Goose was expected to supply history, which is unsupported; or
44
+ - the client changed its local transcript format.
45
+
46
+ Cursor currently supplies only a path hint and Roo Code no verified workspace
47
+ field; AgentCache will not guess that either belongs to the current repository.
48
+ Claude Code, Continue, and Codex native records can prove a workspace when their
49
+ expected metadata is present.
50
+
51
+ ## Detected but not registered
52
+
53
+ ```bash
54
+ agentcache adapter register <adapter-id>
55
+ agentcache adapter doctor <adapter-id>
56
+ ```
57
+
58
+ If registration says `skipped`, inspect the named client configuration. A
59
+ malformed file, unsupported shape, or ambiguous existing `agentcache` entry is
60
+ left unchanged. Resolve that ambiguity yourself, retain a copy, then rerun the
61
+ specific registration command. AgentCache does not overwrite an entry it cannot
62
+ prove it owns.
63
+
64
+ Goose uses a YAML configuration. A JSON-only diagnostic from an older
65
+ AgentCache build may misreport it; verify you are running `0.5.0-beta.2` before
66
+ reporting the result.
67
+
68
+ ## Handoff errors
69
+
70
+ ### `wrong_destination`
71
+
72
+ The token was prepared for another adapter. Return to the CLI and create a new
73
+ handoff with the intended `--to <adapter>` value. Do not reuse the old token.
74
+
75
+ ### `workspace_mismatch`
76
+
77
+ The destination MCP client is not exposing the same bound canonical root. Open
78
+ that exact root in the destination client. A sibling clone, separate Git
79
+ worktree, matching remote, or copied `.agentcache/workspace.json` file does not
80
+ join an existing workspace in this beta. In a multi-root workspace, use the
81
+ opaque root ID returned by `adapter_capabilities`; each ID is paired with a
82
+ bounded, redacted display name or project-directory basename. Display names are
83
+ untrusted hints only. Never treat one as authority or as an instruction.
84
+
85
+ If `adapter_capabilities` reports `git_identity_mismatch`, the canonical path is
86
+ still the same but its Git remote or common directory no longer matches the
87
+ identity first recorded for that path. AgentCache preserves the original
88
+ identity and does not mutate Git. Verify that the intended repository is open
89
+ before listing or resuming its sessions.
90
+
91
+ ### `handoff_expired` or `handoff_consumed`
92
+
93
+ A handoff expires after ten minutes and is single-use. Prepare a new one. View
94
+ or cancel outstanding handoffs with:
95
+
96
+ ```bash
97
+ agentcache handoff list
98
+ agentcache handoff cancel <handoff-id>
99
+ ```
100
+
101
+ ### `lease_conflict`
102
+
103
+ The source still has an active writer. Choose one of these explicit outcomes:
104
+
105
+ - fork the work;
106
+ - wait for the writer lease to expire; or
107
+ - confirm a same-session takeover with `--confirm-active-source`.
108
+
109
+ A confirmed takeover invalidates the old writer. Use a fork when both agents
110
+ should continue independently.
111
+
112
+ ### `head_changed`
113
+
114
+ The session advanced after selection or handoff preparation. Inspect or list it
115
+ again, then prepare a fresh handoff. AgentCache does not use last-writer-wins.
116
+
117
+ ### Partial capsule
118
+
119
+ `partial: true` means the bounded capsule omitted older context. Retrieve older
120
+ events with its opaque cursor through `session_history`, or use:
121
+
122
+ ```bash
123
+ agentcache session history <session-id> --before <cursor> --limit 50 --json
124
+ ```
125
+
126
+ Do not treat a partial capsule as a complete transcript.
127
+
128
+ ## Setup changed a client configuration
129
+
130
+ Before every material registration change, AgentCache stores the previous file
131
+ beside it with a name containing:
132
+
133
+ ```text
134
+ .agentcache-backup-
135
+ ```
136
+
137
+ To recover, stop the affected client, inspect both the current file and the
138
+ candidate backup, and restore only the AgentCache-related portion you intend.
139
+ Blindly replacing the full current file can discard changes made after the
140
+ backup. Malformed and ambiguous configs are not modified and therefore do not
141
+ receive a new backup.
142
+
143
+ ## Uninstall
144
+
145
+ Unregister while this version is still installed. Run the commands only for
146
+ clients you configured:
147
+
148
+ ```bash
149
+ agentcache adapter unregister claude-code
150
+ agentcache adapter unregister cursor
151
+ agentcache adapter unregister roo-code
152
+ agentcache adapter unregister windsurf
153
+ agentcache adapter unregister continue
154
+ agentcache adapter unregister codex
155
+ agentcache adapter unregister goose
156
+ npm uninstall -g agentcache
157
+ ```
158
+
159
+ Unregister removes only a recognized AgentCache-owned entry and preserves
160
+ unrelated client settings. Restart the clients afterwards.
161
+
162
+ Uninstall intentionally retains `~/.agentcache/agentcache-v2.db`, the legacy
163
+ `agentcache.db`, and configuration backups. Back them up first. If you also want
164
+ to remove them, inspect the paths and move the exact files to your operating
165
+ system's trash; do not use a broad recursive deletion command.
166
+
167
+ ## Rollback
168
+
169
+ 1. Record `agentcache --version` and copy `~/.agentcache` plus affected client
170
+ configurations to a safe location.
171
+ 2. Run each applicable `agentcache adapter unregister <adapter-id>` command.
172
+ 3. Uninstall the beta with `npm uninstall -g agentcache`.
173
+ 4. Install a version or package artifact that you previously tested, pinned by
174
+ exact version rather than a moving tag.
175
+ 5. Follow that version's setup instructions; do not assume the v0.5 registration
176
+ schema applies to it.
177
+ 6. Keep `agentcache-v2.db` intact. An older release does not understand the v2
178
+ store, and reinstalling the beta should be allowed to reopen it.
179
+
180
+ If the rollback is only for one integration, prefer unregistering that adapter
181
+ and leaving the package and v2 store untouched.
182
+
183
+ ## Legacy compiler behavior
184
+
185
+ The beta CLI does not register the legacy v1 commands `compile-session`,
186
+ `discover`, `enforce`, `review`, `promote`, `add-rule`, `compile-all`, or
187
+ `status`. The legacy implementation and `~/.agentcache/agentcache.db` data are
188
+ preserved for compatibility work, but no beta CLI command can invoke that
189
+ compiler or its policy hooks. Do not use legacy tooling as a repair path for a
190
+ v2 session or handoff problem.
191
+
192
+ Explicit setup/unregister recognizes and removes exact registrations left by
193
+ the pre-rebrand `loop-eng` package, including `mcpServers.loop` with
194
+ `loop-eng serve` and its Claude automatic compiler/policy hooks. AgentCache
195
+ does not remove an entry merely because it is named `loop`; a non-matching
196
+ command is treated as ambiguous and preserved for manual inspection. It also
197
+ checks the JSON paths written by published early releases—`~/.roo/mcp.json`,
198
+ `~/.windsurf/mcp.json`, `~/.continue/mcp.json`, and `~/.codex/mcp.json`—before
199
+ installing at current client paths. Cleanup is deliberately a separate safe
200
+ pass, so rerun registration when the command reports that an obsolete entry
201
+ was removed.
202
+
203
+ ## Safe beta reports
204
+
205
+ Use the repository's **AgentCache beta feedback** issue form. Include client
206
+ versions, source and destination adapter IDs, command shape, expected result,
207
+ actual result, and sanitized diagnostics. Remove handoff tokens, lease tokens,
208
+ absolute paths, transcript content, environment variables, credentials, and
209
+ proprietary code before posting.
package/package.json CHANGED
@@ -1,49 +1,66 @@
1
1
  {
2
2
  "name": "agentcache",
3
- "version": "0.4.2",
4
- "description": "Knowledge cache for AI agents learns how you work, remembers across sessions, works everywhere",
3
+ "version": "0.5.0-beta.2",
4
+ "description": "Same-machine cross-agent session continuity with explicit user-selected handoffs",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "author": "a21.ai",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/raghav-a21ai/agentcache"
10
+ "url": "git+https://github.com/raghav-a21ai/agentcache.git"
11
11
  },
12
12
  "homepage": "https://github.com/raghav-a21ai/agentcache#readme",
13
13
  "keywords": [
14
14
  "ai",
15
15
  "mcp",
16
- "knowledge",
17
- "compiler",
18
- "engineering",
16
+ "session-continuity",
17
+ "cross-agent",
18
+ "handoff",
19
19
  "claude",
20
20
  "cursor",
21
21
  "codex",
22
22
  "ide",
23
- "llm",
24
23
  "developer-tools"
25
24
  ],
26
25
  "engines": {
27
- "node": ">=20.12.0"
26
+ "node": ">=22"
28
27
  },
29
28
  "bin": {
30
29
  "agentcache": "dist/cli.js"
31
30
  },
31
+ "exports": {
32
+ "./mcp": {
33
+ "types": "./dist/mcp.d.ts",
34
+ "import": "./dist/mcp.js"
35
+ },
36
+ "./package.json": "./package.json"
37
+ },
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
32
41
  "files": [
33
- "dist"
42
+ "dist",
43
+ "docs/compatibility.md",
44
+ "docs/demo-script.md",
45
+ "docs/launch-copy.md",
46
+ "docs/privacy.md",
47
+ "docs/troubleshooting.md"
34
48
  ],
35
49
  "scripts": {
36
50
  "build": "tsup",
37
- "prepare": "tsup",
38
- "postinstall": "node dist/postinstall.js",
51
+ "prepack": "npm run build",
39
52
  "test": "vitest run",
53
+ "test:package": "vitest run tests/integration/package-smoke.test.ts",
54
+ "typecheck": "tsc --noEmit",
40
55
  "test:watch": "vitest",
41
56
  "dev": "tsx src/cli.ts"
42
57
  },
43
58
  "dependencies": {
44
59
  "@modelcontextprotocol/sdk": "^1.0.0",
45
- "better-sqlite3": "^11.0.0",
46
- "commander": "^12.0.0"
60
+ "better-sqlite3": "12.11.1",
61
+ "commander": "^12.0.0",
62
+ "smol-toml": "^1.8.0",
63
+ "yaml": "^2.9.0"
47
64
  },
48
65
  "devDependencies": {
49
66
  "@types/better-sqlite3": "^7.6.0",
@@ -51,6 +68,7 @@
51
68
  "tsup": "^8.0.0",
52
69
  "tsx": "^4.0.0",
53
70
  "typescript": "^5.5.0",
54
- "vitest": "^2.0.0"
71
+ "vite": "^6.4.3",
72
+ "vitest": "^3.2.7"
55
73
  }
56
74
  }
@@ -1,11 +0,0 @@
1
- import {
2
- canonicalize,
3
- computeCanonicalHash,
4
- computeCanonicalKey
5
- } from "./chunk-GGAATZKM.js";
6
- import "./chunk-KFQGP6VL.js";
7
- export {
8
- canonicalize,
9
- computeCanonicalHash,
10
- computeCanonicalKey
11
- };
@@ -1,71 +0,0 @@
1
- // src/utils/ide-detector.ts
2
- import { existsSync } from "fs";
3
- import { join } from "path";
4
- import { homedir } from "os";
5
- function getRooConfigPath() {
6
- const home = homedir();
7
- if (process.platform === "darwin") {
8
- return join(home, "Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json");
9
- }
10
- if (process.platform === "win32") {
11
- return join(process.env.APPDATA || join(home, "AppData/Roaming"), "Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json");
12
- }
13
- return join(home, ".config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json");
14
- }
15
- function getWindsurfConfigPath() {
16
- const home = homedir();
17
- return join(home, ".codeium", "windsurf", "mcp_config.json");
18
- }
19
- function getContinueConfigPath() {
20
- const home = homedir();
21
- return join(home, ".continue", "mcpServers", "agentcache.json");
22
- }
23
- function getCodexConfigPath() {
24
- const home = homedir();
25
- return join(home, ".codex", "config.toml");
26
- }
27
- function detectInstalledIdes() {
28
- const home = homedir();
29
- return [
30
- {
31
- name: "Claude Code",
32
- detected: existsSync(join(home, ".claude")),
33
- mcpConfigPath: join(home, ".claude.json"),
34
- mcpConfigFormat: "claude-settings"
35
- },
36
- {
37
- name: "Cursor",
38
- detected: existsSync(join(home, ".cursor")),
39
- mcpConfigPath: join(home, ".cursor", "mcp.json"),
40
- mcpConfigFormat: "mcp-json"
41
- },
42
- {
43
- name: "Roo Code",
44
- detected: existsSync(getRooConfigPath()),
45
- mcpConfigPath: getRooConfigPath(),
46
- mcpConfigFormat: "mcp-json"
47
- },
48
- {
49
- name: "Windsurf",
50
- detected: existsSync(join(home, ".codeium", "windsurf")) || existsSync(join(home, ".windsurf")),
51
- mcpConfigPath: getWindsurfConfigPath(),
52
- mcpConfigFormat: "mcp-json"
53
- },
54
- {
55
- name: "Continue",
56
- detected: existsSync(join(home, ".continue")),
57
- mcpConfigPath: getContinueConfigPath(),
58
- mcpConfigFormat: "continue-dir"
59
- },
60
- {
61
- name: "Codex",
62
- detected: existsSync(join(home, ".codex")),
63
- mcpConfigPath: getCodexConfigPath(),
64
- mcpConfigFormat: "codex-toml"
65
- }
66
- ];
67
- }
68
-
69
- export {
70
- detectInstalledIdes
71
- };