@colbymchenry/codegraph 0.7.4 → 0.7.9
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 +35 -10
- package/dist/bin/codegraph.js +72 -4
- package/dist/bin/codegraph.js.map +1 -1
- package/dist/bin/uninstall.d.ts +7 -7
- package/dist/bin/uninstall.d.ts.map +1 -1
- package/dist/bin/uninstall.js +23 -135
- package/dist/bin/uninstall.js.map +1 -1
- package/dist/installer/claude-md-template.d.ts +10 -6
- package/dist/installer/claude-md-template.d.ts.map +1 -1
- package/dist/installer/claude-md-template.js +15 -40
- package/dist/installer/claude-md-template.js.map +1 -1
- package/dist/installer/config-writer.d.ts +17 -24
- package/dist/installer/config-writer.d.ts.map +1 -1
- package/dist/installer/config-writer.js +44 -239
- package/dist/installer/config-writer.js.map +1 -1
- package/dist/installer/index.d.ts +45 -4
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +214 -78
- package/dist/installer/index.js.map +1 -1
- package/dist/installer/instructions-template.d.ts +28 -0
- package/dist/installer/instructions-template.d.ts.map +1 -0
- package/dist/installer/instructions-template.js +63 -0
- package/dist/installer/instructions-template.js.map +1 -0
- package/dist/installer/targets/claude.d.ts +27 -0
- package/dist/installer/targets/claude.d.ts.map +1 -0
- package/dist/installer/targets/claude.js +246 -0
- package/dist/installer/targets/claude.js.map +1 -0
- package/dist/installer/targets/codex.d.ts +18 -0
- package/dist/installer/targets/codex.d.ts.map +1 -0
- package/dist/installer/targets/codex.js +185 -0
- package/dist/installer/targets/codex.js.map +1 -0
- package/dist/installer/targets/cursor.d.ts +35 -0
- package/dist/installer/targets/cursor.d.ts.map +1 -0
- package/dist/installer/targets/cursor.js +229 -0
- package/dist/installer/targets/cursor.js.map +1 -0
- package/dist/installer/targets/opencode.d.ts +30 -0
- package/dist/installer/targets/opencode.d.ts.map +1 -0
- package/dist/installer/targets/opencode.js +235 -0
- package/dist/installer/targets/opencode.js.map +1 -0
- package/dist/installer/targets/registry.d.ts +35 -0
- package/dist/installer/targets/registry.d.ts.map +1 -0
- package/dist/installer/targets/registry.js +83 -0
- package/dist/installer/targets/registry.js.map +1 -0
- package/dist/installer/targets/shared.d.ts +77 -0
- package/dist/installer/targets/shared.d.ts.map +1 -0
- package/dist/installer/targets/shared.js +246 -0
- package/dist/installer/targets/shared.js.map +1 -0
- package/dist/installer/targets/toml.d.ts +52 -0
- package/dist/installer/targets/toml.d.ts.map +1 -0
- package/dist/installer/targets/toml.js +147 -0
- package/dist/installer/targets/toml.js.map +1 -0
- package/dist/installer/targets/types.d.ts +116 -0
- package/dist/installer/targets/types.d.ts.map +1 -0
- package/dist/installer/targets/types.js +16 -0
- package/dist/installer/targets/types.js.map +1 -0
- package/dist/resolution/frameworks/cargo-workspace.d.ts +18 -0
- package/dist/resolution/frameworks/cargo-workspace.d.ts.map +1 -0
- package/dist/resolution/frameworks/cargo-workspace.js +225 -0
- package/dist/resolution/frameworks/cargo-workspace.js.map +1 -0
- package/dist/resolution/frameworks/rust.d.ts.map +1 -1
- package/dist/resolution/frameworks/rust.js +35 -17
- package/dist/resolution/frameworks/rust.js.map +1 -1
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +18 -0
- package/dist/resolution/index.js.map +1 -1
- package/dist/resolution/types.d.ts +9 -0
- package/dist/resolution/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/scripts/local-install.sh +41 -0
- package/scripts/release.sh +70 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Claude Code target — the historical default. Writes:
|
|
4
|
+
*
|
|
5
|
+
* - MCP server entry to `~/.claude.json` (global) or
|
|
6
|
+
* `./.claude.json` (local).
|
|
7
|
+
* - Permissions to `~/.claude/settings.json` (global) or
|
|
8
|
+
* `./.claude/settings.json` (local), gated on `autoAllow`.
|
|
9
|
+
* - Instructions to `~/.claude/CLAUDE.md` (global) or
|
|
10
|
+
* `./.claude/CLAUDE.md` (local).
|
|
11
|
+
*
|
|
12
|
+
* All paths and shapes ported verbatim from the original
|
|
13
|
+
* `config-writer.ts` so existing Claude Code installs upgrade in
|
|
14
|
+
* place — no migration on disk required.
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
33
|
+
var ownKeys = function(o) {
|
|
34
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
35
|
+
var ar = [];
|
|
36
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
37
|
+
return ar;
|
|
38
|
+
};
|
|
39
|
+
return ownKeys(o);
|
|
40
|
+
};
|
|
41
|
+
return function (mod) {
|
|
42
|
+
if (mod && mod.__esModule) return mod;
|
|
43
|
+
var result = {};
|
|
44
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
45
|
+
__setModuleDefault(result, mod);
|
|
46
|
+
return result;
|
|
47
|
+
};
|
|
48
|
+
})();
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.claudeTarget = void 0;
|
|
51
|
+
exports.writeMcpEntry = writeMcpEntry;
|
|
52
|
+
exports.writePermissionsEntry = writePermissionsEntry;
|
|
53
|
+
exports.writeInstructionsEntry = writeInstructionsEntry;
|
|
54
|
+
const fs = __importStar(require("fs"));
|
|
55
|
+
const path = __importStar(require("path"));
|
|
56
|
+
const os = __importStar(require("os"));
|
|
57
|
+
const shared_1 = require("./shared");
|
|
58
|
+
const instructions_template_1 = require("../instructions-template");
|
|
59
|
+
function configDir(loc) {
|
|
60
|
+
return loc === 'global'
|
|
61
|
+
? path.join(os.homedir(), '.claude')
|
|
62
|
+
: path.join(process.cwd(), '.claude');
|
|
63
|
+
}
|
|
64
|
+
function mcpJsonPath(loc) {
|
|
65
|
+
return loc === 'global'
|
|
66
|
+
? path.join(os.homedir(), '.claude.json')
|
|
67
|
+
: path.join(process.cwd(), '.claude.json');
|
|
68
|
+
}
|
|
69
|
+
function settingsJsonPath(loc) {
|
|
70
|
+
return path.join(configDir(loc), 'settings.json');
|
|
71
|
+
}
|
|
72
|
+
function instructionsPath(loc) {
|
|
73
|
+
return path.join(configDir(loc), 'CLAUDE.md');
|
|
74
|
+
}
|
|
75
|
+
class ClaudeCodeTarget {
|
|
76
|
+
id = 'claude';
|
|
77
|
+
displayName = 'Claude Code';
|
|
78
|
+
docsUrl = 'https://docs.claude.com/en/docs/claude-code';
|
|
79
|
+
supportsLocation(_loc) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
detect(loc) {
|
|
83
|
+
const mcpPath = mcpJsonPath(loc);
|
|
84
|
+
const config = (0, shared_1.readJsonFile)(mcpPath);
|
|
85
|
+
const alreadyConfigured = !!config.mcpServers?.codegraph;
|
|
86
|
+
// For "installed" we infer from the existence of either the dir
|
|
87
|
+
// (global) or the project marker file (local). Cheap and avoids
|
|
88
|
+
// shelling out to `claude --version`.
|
|
89
|
+
const installed = loc === 'global'
|
|
90
|
+
? fs.existsSync(configDir(loc)) || fs.existsSync(mcpPath)
|
|
91
|
+
: fs.existsSync(mcpPath) || fs.existsSync(configDir(loc));
|
|
92
|
+
return { installed, alreadyConfigured, configPath: mcpPath };
|
|
93
|
+
}
|
|
94
|
+
install(loc, opts) {
|
|
95
|
+
const files = [];
|
|
96
|
+
// 1. MCP server entry
|
|
97
|
+
files.push(writeMcpEntry(loc));
|
|
98
|
+
// 2. Permissions (only when autoAllow)
|
|
99
|
+
if (opts.autoAllow) {
|
|
100
|
+
files.push(writePermissionsEntry(loc));
|
|
101
|
+
}
|
|
102
|
+
// 3. CLAUDE.md instructions
|
|
103
|
+
files.push(writeInstructionsEntry(loc));
|
|
104
|
+
return { files };
|
|
105
|
+
}
|
|
106
|
+
uninstall(loc) {
|
|
107
|
+
const files = [];
|
|
108
|
+
// 1. MCP server entry
|
|
109
|
+
const mcpPath = mcpJsonPath(loc);
|
|
110
|
+
const config = (0, shared_1.readJsonFile)(mcpPath);
|
|
111
|
+
if (config.mcpServers?.codegraph) {
|
|
112
|
+
delete config.mcpServers.codegraph;
|
|
113
|
+
if (Object.keys(config.mcpServers).length === 0) {
|
|
114
|
+
delete config.mcpServers;
|
|
115
|
+
}
|
|
116
|
+
(0, shared_1.writeJsonFile)(mcpPath, config);
|
|
117
|
+
files.push({ path: mcpPath, action: 'removed' });
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
files.push({ path: mcpPath, action: 'not-found' });
|
|
121
|
+
}
|
|
122
|
+
// 2. Permissions
|
|
123
|
+
const settingsPath = settingsJsonPath(loc);
|
|
124
|
+
const settings = (0, shared_1.readJsonFile)(settingsPath);
|
|
125
|
+
if (Array.isArray(settings.permissions?.allow)) {
|
|
126
|
+
const before = settings.permissions.allow.length;
|
|
127
|
+
settings.permissions.allow = settings.permissions.allow.filter((p) => !p.startsWith('mcp__codegraph__'));
|
|
128
|
+
if (settings.permissions.allow.length !== before) {
|
|
129
|
+
if (settings.permissions.allow.length === 0) {
|
|
130
|
+
delete settings.permissions.allow;
|
|
131
|
+
}
|
|
132
|
+
if (Object.keys(settings.permissions).length === 0) {
|
|
133
|
+
delete settings.permissions;
|
|
134
|
+
}
|
|
135
|
+
(0, shared_1.writeJsonFile)(settingsPath, settings);
|
|
136
|
+
files.push({ path: settingsPath, action: 'removed' });
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
files.push({ path: settingsPath, action: 'not-found' });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
files.push({ path: settingsPath, action: 'not-found' });
|
|
144
|
+
}
|
|
145
|
+
// 3. Instructions
|
|
146
|
+
const instr = instructionsPath(loc);
|
|
147
|
+
const action = (0, shared_1.removeMarkedSection)(instr, instructions_template_1.CODEGRAPH_SECTION_START, instructions_template_1.CODEGRAPH_SECTION_END);
|
|
148
|
+
files.push({ path: instr, action });
|
|
149
|
+
return { files };
|
|
150
|
+
}
|
|
151
|
+
printConfig(loc) {
|
|
152
|
+
const target = mcpJsonPath(loc);
|
|
153
|
+
const snippet = JSON.stringify({ mcpServers: { codegraph: (0, shared_1.getMcpServerConfig)() } }, null, 2);
|
|
154
|
+
return `# Add to ${target}\n\n${snippet}\n`;
|
|
155
|
+
}
|
|
156
|
+
describePaths(loc) {
|
|
157
|
+
return [mcpJsonPath(loc), settingsJsonPath(loc), instructionsPath(loc)];
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Per-file write helpers, exported so the legacy `config-writer.ts`
|
|
162
|
+
* shim can call only the named operation (writeMcpConfig writes ONLY
|
|
163
|
+
* the MCP entry, etc.) instead of `claudeTarget.install()` which
|
|
164
|
+
* writes all three files. Without this split the shims silently
|
|
165
|
+
* cause side effects callers don't expect.
|
|
166
|
+
*/
|
|
167
|
+
function writeMcpEntry(loc) {
|
|
168
|
+
const file = mcpJsonPath(loc);
|
|
169
|
+
const existing = (0, shared_1.readJsonFile)(file);
|
|
170
|
+
const before = existing.mcpServers?.codegraph;
|
|
171
|
+
const after = (0, shared_1.getMcpServerConfig)();
|
|
172
|
+
if ((0, shared_1.jsonDeepEqual)(before, after)) {
|
|
173
|
+
// Already exactly what we'd write — preserve byte-identical file.
|
|
174
|
+
return { path: file, action: 'unchanged' };
|
|
175
|
+
}
|
|
176
|
+
// 'created' here means: the file itself did not exist before this
|
|
177
|
+
// write. A pre-existing `.claude.json` containing other MCP servers
|
|
178
|
+
// (no `codegraph` key) is 'updated', not 'created' — we're adding
|
|
179
|
+
// an entry to a file that was already there. Codex uses a different
|
|
180
|
+
// idiom (empty-content => 'created') because its config.toml is
|
|
181
|
+
// ours alone to manage.
|
|
182
|
+
const action = before ? 'updated' : (fs.existsSync(file) ? 'updated' : 'created');
|
|
183
|
+
if (!existing.mcpServers)
|
|
184
|
+
existing.mcpServers = {};
|
|
185
|
+
existing.mcpServers.codegraph = after;
|
|
186
|
+
(0, shared_1.writeJsonFile)(file, existing);
|
|
187
|
+
return { path: file, action };
|
|
188
|
+
}
|
|
189
|
+
function writePermissionsEntry(loc) {
|
|
190
|
+
const file = settingsJsonPath(loc);
|
|
191
|
+
const settings = (0, shared_1.readJsonFile)(file);
|
|
192
|
+
const created = !fs.existsSync(file);
|
|
193
|
+
if (!settings.permissions)
|
|
194
|
+
settings.permissions = {};
|
|
195
|
+
if (!Array.isArray(settings.permissions.allow))
|
|
196
|
+
settings.permissions.allow = [];
|
|
197
|
+
const want = (0, shared_1.getCodeGraphPermissions)();
|
|
198
|
+
const before = [...settings.permissions.allow];
|
|
199
|
+
for (const perm of want) {
|
|
200
|
+
if (!settings.permissions.allow.includes(perm)) {
|
|
201
|
+
settings.permissions.allow.push(perm);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if ((0, shared_1.jsonDeepEqual)(before, settings.permissions.allow) && !created) {
|
|
205
|
+
return { path: file, action: 'unchanged' };
|
|
206
|
+
}
|
|
207
|
+
(0, shared_1.writeJsonFile)(file, settings);
|
|
208
|
+
return { path: file, action: created ? 'created' : 'updated' };
|
|
209
|
+
}
|
|
210
|
+
function writeInstructionsEntry(loc) {
|
|
211
|
+
const file = instructionsPath(loc);
|
|
212
|
+
// Ensure config dir exists (for global ~/.claude/).
|
|
213
|
+
const dir = path.dirname(file);
|
|
214
|
+
if (!fs.existsSync(dir))
|
|
215
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
216
|
+
// Honor the legacy "unmarked ## CodeGraph" rewrite path that the
|
|
217
|
+
// original installer supported (some users hand-pasted a section
|
|
218
|
+
// before markers existed). Detect first and migrate inline.
|
|
219
|
+
if (fs.existsSync(file)) {
|
|
220
|
+
const content = fs.readFileSync(file, 'utf-8');
|
|
221
|
+
if (!content.includes(instructions_template_1.CODEGRAPH_SECTION_START)) {
|
|
222
|
+
const headerMatch = content.match(/\n## CodeGraph\n/);
|
|
223
|
+
if (headerMatch && headerMatch.index !== undefined) {
|
|
224
|
+
const sectionStart = headerMatch.index;
|
|
225
|
+
const after = content.substring(sectionStart + 1);
|
|
226
|
+
const nextHeader = after.match(/\n## (?!#)/);
|
|
227
|
+
const sectionEnd = nextHeader && nextHeader.index !== undefined
|
|
228
|
+
? sectionStart + 1 + nextHeader.index
|
|
229
|
+
: content.length;
|
|
230
|
+
const merged = content.substring(0, sectionStart) +
|
|
231
|
+
'\n' + instructions_template_1.INSTRUCTIONS_TEMPLATE +
|
|
232
|
+
content.substring(sectionEnd);
|
|
233
|
+
(0, shared_1.atomicWriteFileSync)(file, merged);
|
|
234
|
+
return { path: file, action: 'updated' };
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
const action = (0, shared_1.replaceOrAppendMarkedSection)(file, instructions_template_1.INSTRUCTIONS_TEMPLATE, instructions_template_1.CODEGRAPH_SECTION_START, instructions_template_1.CODEGRAPH_SECTION_END);
|
|
239
|
+
// Map the four-state action to WriteResult's action vocabulary.
|
|
240
|
+
const mapped = action === 'created' ? 'created'
|
|
241
|
+
: action === 'unchanged' ? 'unchanged'
|
|
242
|
+
: 'updated';
|
|
243
|
+
return { path: file, action: mapped };
|
|
244
|
+
}
|
|
245
|
+
exports.claudeTarget = new ClaudeCodeTarget();
|
|
246
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/installer/targets/claude.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuJH,sCAqBC;AAED,sDAoBC;AAED,wDA0CC;AA5OD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAQzB,qCASkB;AAClB,oEAIkC;AAElC,SAAS,SAAS,CAAC,GAAa;IAC9B,OAAO,GAAG,KAAK,QAAQ;QACrB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC;QACpC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC;AACD,SAAS,WAAW,CAAC,GAAa;IAChC,OAAO,GAAG,KAAK,QAAQ;QACrB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;AAC/C,CAAC;AACD,SAAS,gBAAgB,CAAC,GAAa;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC;AACpD,CAAC;AACD,SAAS,gBAAgB,CAAC,GAAa;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,gBAAgB;IACX,EAAE,GAAG,QAAiB,CAAC;IACvB,WAAW,GAAG,aAAa,CAAC;IAC5B,OAAO,GAAG,6CAA6C,CAAC;IAEjE,gBAAgB,CAAC,IAAc;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,GAAa;QAClB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,OAAO,CAAC,CAAC;QACrC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;QACzD,gEAAgE;QAChE,gEAAgE;QAChE,sCAAsC;QACtC,MAAM,SAAS,GAAG,GAAG,KAAK,QAAQ;YAChC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;YACzD,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IAC/D,CAAC;IAED,OAAO,CAAC,GAAa,EAAE,IAAoB;QACzC,MAAM,KAAK,GAAyB,EAAE,CAAC;QAEvC,sBAAsB;QACtB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QAE/B,uCAAuC;QACvC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,4BAA4B;QAC5B,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;QAExC,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,SAAS,CAAC,GAAa;QACrB,MAAM,KAAK,GAAyB,EAAE,CAAC;QAEvC,sBAAsB;QACtB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;YACnC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChD,OAAO,MAAM,CAAC,UAAU,CAAC;YAC3B,CAAC;YACD,IAAA,sBAAa,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,iBAAiB;QACjB,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAA,qBAAY,EAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;YACjD,QAAQ,CAAC,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAC5D,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CACjD,CAAC;YACF,IAAI,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACjD,IAAI,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5C,OAAO,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC;gBACpC,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACnD,OAAO,QAAQ,CAAC,WAAW,CAAC;gBAC9B,CAAC;gBACD,IAAA,sBAAa,EAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,kBAAkB;QAClB,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAA,4BAAmB,EAAC,KAAK,EAAE,+CAAuB,EAAE,6CAAqB,CAAC,CAAC;QAC1F,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAEpC,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,GAAa;QACvB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAA,2BAAkB,GAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7F,OAAO,YAAY,MAAM,OAAO,OAAO,IAAI,CAAC;IAC9C,CAAC;IAED,aAAa,CAAC,GAAa;QACzB,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;CACF;AAED;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,GAAa;IACzC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAA,qBAAY,EAAC,IAAI,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAA,2BAAkB,GAAE,CAAC;IAEnC,IAAI,IAAA,sBAAa,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;QACjC,kEAAkE;QAClE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC7C,CAAC;IACD,kEAAkE;IAClE,oEAAoE;IACpE,kEAAkE;IAClE,oEAAoE;IACpE,gEAAgE;IAChE,wBAAwB;IACxB,MAAM,MAAM,GAA0B,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACzG,IAAI,CAAC,QAAQ,CAAC,UAAU;QAAE,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC;IACnD,QAAQ,CAAC,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC;IACtC,IAAA,sBAAa,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAChC,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAa;IACjD,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAA,qBAAY,EAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,CAAC,QAAQ,CAAC,WAAW;QAAE,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC;QAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC;IAEhF,MAAM,IAAI,GAAG,IAAA,gCAAuB,GAAE,CAAC;IACvC,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,IAAI,IAAA,sBAAa,EAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC7C,CAAC;IACD,IAAA,sBAAa,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACjE,CAAC;AAED,SAAgB,sBAAsB,CAAC,GAAa;IAClD,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACnC,oDAAoD;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,iEAAiE;IACjE,iEAAiE;IACjE,4DAA4D;IAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,+CAAuB,CAAC,EAAE,CAAC;YAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACtD,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACnD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC;gBACvC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBAClD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC7C,MAAM,UAAU,GAAG,UAAU,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS;oBAC7D,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK;oBACrC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;gBACnB,MAAM,MAAM,GACV,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC;oBAClC,IAAI,GAAG,6CAAqB;oBAC5B,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBAChC,IAAA,4BAAmB,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAClC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,qCAA4B,EACzC,IAAI,EACJ,6CAAqB,EACrB,+CAAuB,EACvB,6CAAqB,CACtB,CAAC;IACF,gEAAgE;IAChE,MAAM,MAAM,GACV,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS;QAC9B,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW;YACpC,CAAC,CAAC,SAAS,CAAC;IAClB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC;AAEY,QAAA,YAAY,GAAgB,IAAI,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Codex CLI target.
|
|
3
|
+
*
|
|
4
|
+
* - MCP server entry to `~/.codex/config.toml` as the dotted-key
|
|
5
|
+
* table `[mcp_servers.codegraph]`. TOML — not JSON — handled by
|
|
6
|
+
* the narrow serializer in `./toml.ts`.
|
|
7
|
+
* - Instructions to `~/.codex/AGENTS.md`.
|
|
8
|
+
*
|
|
9
|
+
* Codex CLI as of 2026-05 has no project-local config concept —
|
|
10
|
+
* everything lives under `~/.codex/`. `supportsLocation('local')`
|
|
11
|
+
* returns false; the orchestrator skips Codex when the user picks
|
|
12
|
+
* the local install location.
|
|
13
|
+
*
|
|
14
|
+
* No permissions concept.
|
|
15
|
+
*/
|
|
16
|
+
import { AgentTarget } from './types';
|
|
17
|
+
export declare const codexTarget: AgentTarget;
|
|
18
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/installer/targets/codex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EACL,WAAW,EAKZ,MAAM,SAAS,CAAC;AA2JjB,eAAO,MAAM,WAAW,EAAE,WAA+B,CAAC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenAI Codex CLI target.
|
|
4
|
+
*
|
|
5
|
+
* - MCP server entry to `~/.codex/config.toml` as the dotted-key
|
|
6
|
+
* table `[mcp_servers.codegraph]`. TOML — not JSON — handled by
|
|
7
|
+
* the narrow serializer in `./toml.ts`.
|
|
8
|
+
* - Instructions to `~/.codex/AGENTS.md`.
|
|
9
|
+
*
|
|
10
|
+
* Codex CLI as of 2026-05 has no project-local config concept —
|
|
11
|
+
* everything lives under `~/.codex/`. `supportsLocation('local')`
|
|
12
|
+
* returns false; the orchestrator skips Codex when the user picks
|
|
13
|
+
* the local install location.
|
|
14
|
+
*
|
|
15
|
+
* No permissions concept.
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.codexTarget = void 0;
|
|
52
|
+
const fs = __importStar(require("fs"));
|
|
53
|
+
const path = __importStar(require("path"));
|
|
54
|
+
const os = __importStar(require("os"));
|
|
55
|
+
const shared_1 = require("./shared");
|
|
56
|
+
const instructions_template_1 = require("../instructions-template");
|
|
57
|
+
const toml_1 = require("./toml");
|
|
58
|
+
const TOML_HEADER = 'mcp_servers.codegraph';
|
|
59
|
+
function configDir() {
|
|
60
|
+
return path.join(os.homedir(), '.codex');
|
|
61
|
+
}
|
|
62
|
+
function tomlConfigPath() {
|
|
63
|
+
return path.join(configDir(), 'config.toml');
|
|
64
|
+
}
|
|
65
|
+
function instructionsPath() {
|
|
66
|
+
return path.join(configDir(), 'AGENTS.md');
|
|
67
|
+
}
|
|
68
|
+
class CodexTarget {
|
|
69
|
+
id = 'codex';
|
|
70
|
+
displayName = 'Codex CLI';
|
|
71
|
+
docsUrl = 'https://github.com/openai/codex';
|
|
72
|
+
supportsLocation(loc) {
|
|
73
|
+
return loc === 'global';
|
|
74
|
+
}
|
|
75
|
+
detect(loc) {
|
|
76
|
+
if (loc !== 'global') {
|
|
77
|
+
return { installed: false, alreadyConfigured: false };
|
|
78
|
+
}
|
|
79
|
+
const tomlPath = tomlConfigPath();
|
|
80
|
+
let alreadyConfigured = false;
|
|
81
|
+
if (fs.existsSync(tomlPath)) {
|
|
82
|
+
try {
|
|
83
|
+
const content = fs.readFileSync(tomlPath, 'utf-8');
|
|
84
|
+
alreadyConfigured = content.includes(`[${TOML_HEADER}]`);
|
|
85
|
+
}
|
|
86
|
+
catch { /* ignore */ }
|
|
87
|
+
}
|
|
88
|
+
const installed = fs.existsSync(configDir());
|
|
89
|
+
return { installed, alreadyConfigured, configPath: tomlPath };
|
|
90
|
+
}
|
|
91
|
+
install(loc, _opts) {
|
|
92
|
+
if (loc !== 'global') {
|
|
93
|
+
return {
|
|
94
|
+
files: [],
|
|
95
|
+
notes: ['Codex CLI has no project-local config — re-run with --location=global to install.'],
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const files = [];
|
|
99
|
+
files.push(writeMcpEntry());
|
|
100
|
+
files.push(writeInstructionsEntry());
|
|
101
|
+
return { files };
|
|
102
|
+
}
|
|
103
|
+
uninstall(loc) {
|
|
104
|
+
if (loc !== 'global')
|
|
105
|
+
return { files: [] };
|
|
106
|
+
const files = [];
|
|
107
|
+
const tomlPath = tomlConfigPath();
|
|
108
|
+
if (fs.existsSync(tomlPath)) {
|
|
109
|
+
const content = fs.readFileSync(tomlPath, 'utf-8');
|
|
110
|
+
const { content: nextContent, action } = (0, toml_1.removeTomlTable)(content, TOML_HEADER);
|
|
111
|
+
if (action === 'removed') {
|
|
112
|
+
if (nextContent.trim() === '') {
|
|
113
|
+
try {
|
|
114
|
+
fs.unlinkSync(tomlPath);
|
|
115
|
+
}
|
|
116
|
+
catch { /* ignore */ }
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
(0, shared_1.atomicWriteFileSync)(tomlPath, nextContent.trimEnd() + '\n');
|
|
120
|
+
}
|
|
121
|
+
files.push({ path: tomlPath, action: 'removed' });
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
files.push({ path: tomlPath, action: 'not-found' });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
files.push({ path: tomlPath, action: 'not-found' });
|
|
129
|
+
}
|
|
130
|
+
const instr = instructionsPath();
|
|
131
|
+
const instrAction = (0, shared_1.removeMarkedSection)(instr, instructions_template_1.CODEGRAPH_SECTION_START, instructions_template_1.CODEGRAPH_SECTION_END);
|
|
132
|
+
files.push({ path: instr, action: instrAction });
|
|
133
|
+
return { files };
|
|
134
|
+
}
|
|
135
|
+
printConfig(loc) {
|
|
136
|
+
if (loc !== 'global') {
|
|
137
|
+
return '# Codex CLI has no project-local config — use --location=global.\n';
|
|
138
|
+
}
|
|
139
|
+
const block = buildCodegraphBlock();
|
|
140
|
+
return `# Add to ${tomlConfigPath()}\n\n${block}\n`;
|
|
141
|
+
}
|
|
142
|
+
describePaths(loc) {
|
|
143
|
+
if (loc !== 'global')
|
|
144
|
+
return [];
|
|
145
|
+
return [tomlConfigPath(), instructionsPath()];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function buildCodegraphBlock() {
|
|
149
|
+
const mcp = (0, shared_1.getMcpServerConfig)();
|
|
150
|
+
return (0, toml_1.buildTomlTable)(TOML_HEADER, {
|
|
151
|
+
command: mcp.command,
|
|
152
|
+
args: mcp.args,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
function writeMcpEntry() {
|
|
156
|
+
const file = tomlConfigPath();
|
|
157
|
+
const dir = path.dirname(file);
|
|
158
|
+
if (!fs.existsSync(dir))
|
|
159
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
160
|
+
const block = buildCodegraphBlock();
|
|
161
|
+
// Single read — `existing === ''` derives both "is the file empty
|
|
162
|
+
// or absent" and "what was its content," avoiding a TOCTOU window
|
|
163
|
+
// between two `fs.existsSync` calls.
|
|
164
|
+
const existing = fs.existsSync(file) ? fs.readFileSync(file, 'utf-8') : '';
|
|
165
|
+
const created = existing.length === 0;
|
|
166
|
+
const { content: nextContent, action } = (0, toml_1.upsertTomlTable)(existing, TOML_HEADER, block);
|
|
167
|
+
if (action === 'unchanged') {
|
|
168
|
+
return { path: file, action: 'unchanged' };
|
|
169
|
+
}
|
|
170
|
+
(0, shared_1.atomicWriteFileSync)(file, nextContent);
|
|
171
|
+
return { path: file, action: created ? 'created' : 'updated' };
|
|
172
|
+
}
|
|
173
|
+
function writeInstructionsEntry() {
|
|
174
|
+
const file = instructionsPath();
|
|
175
|
+
const dir = path.dirname(file);
|
|
176
|
+
if (!fs.existsSync(dir))
|
|
177
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
178
|
+
const action = (0, shared_1.replaceOrAppendMarkedSection)(file, instructions_template_1.INSTRUCTIONS_TEMPLATE, instructions_template_1.CODEGRAPH_SECTION_START, instructions_template_1.CODEGRAPH_SECTION_END);
|
|
179
|
+
const mapped = action === 'created' ? 'created'
|
|
180
|
+
: action === 'unchanged' ? 'unchanged'
|
|
181
|
+
: 'updated';
|
|
182
|
+
return { path: file, action: mapped };
|
|
183
|
+
}
|
|
184
|
+
exports.codexTarget = new CodexTarget();
|
|
185
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/installer/targets/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cursor target.
|
|
3
|
+
*
|
|
4
|
+
* - MCP server entry to `~/.cursor/mcp.json` (global) or
|
|
5
|
+
* `./.cursor/mcp.json` (local). Same `{mcpServers: {...}}` shape
|
|
6
|
+
* as Claude.
|
|
7
|
+
* - Instructions to `./.cursor/rules/codegraph.mdc` (project-local
|
|
8
|
+
* ONLY). Cursor's rules system is a project-scoped surface;
|
|
9
|
+
* global cursor rules aren't a stable convention as of 2026-05.
|
|
10
|
+
* For `--location=global`, only mcp.json is written.
|
|
11
|
+
*
|
|
12
|
+
* ## Why we hardcode `--path` for Cursor
|
|
13
|
+
*
|
|
14
|
+
* Cursor launches MCP-server subprocesses with a working directory
|
|
15
|
+
* that ISN'T the workspace root AND doesn't pass `rootUri` /
|
|
16
|
+
* `workspaceFolders` in the MCP initialize call. The codegraph MCP
|
|
17
|
+
* server's `process.cwd()` fallback therefore misses the workspace's
|
|
18
|
+
* `.codegraph/` and reports "not initialized" on every tool call.
|
|
19
|
+
*
|
|
20
|
+
* So we inject `--path` into the args ourselves:
|
|
21
|
+
*
|
|
22
|
+
* - `local` install: absolute path (we know it at install time).
|
|
23
|
+
* - `global` install: `${workspaceFolder}` — Cursor expands this to
|
|
24
|
+
* the open workspace's root, giving us per-workspace behavior
|
|
25
|
+
* from a single global config.
|
|
26
|
+
*
|
|
27
|
+
* Codex and Claude do not need this — they launch MCP servers with
|
|
28
|
+
* `cwd = workspace` and pass `rootUri`, respectively.
|
|
29
|
+
*
|
|
30
|
+
* No permissions concept — Cursor doesn't have an auto-allow list
|
|
31
|
+
* the installer can populate. `autoAllow` is silently ignored.
|
|
32
|
+
*/
|
|
33
|
+
import { AgentTarget } from './types';
|
|
34
|
+
export declare const cursorTarget: AgentTarget;
|
|
35
|
+
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/installer/targets/cursor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAKH,OAAO,EACL,WAAW,EAKZ,MAAM,SAAS,CAAC;AAqMjB,eAAO,MAAM,YAAY,EAAE,WAAgC,CAAC"}
|