@rewind-ai/cli 0.6.2 → 0.6.4

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.
@@ -1,8 +1,17 @@
1
1
  /**
2
2
  * Agent client integration layer.
3
3
  * Cursor is the first proven integration. Do not advertise untested clients.
4
+ *
5
+ * Strategy (observed Cursor behaviour):
6
+ * Project-level `.cursor/mcp.json` may be discovered but remain disconnected.
7
+ * User-level `~/.cursor/mcp.json` connects reliably.
8
+ * Therefore: one user-level MCP server entry per REWIND project
9
+ * (`rewind-<slug>`) with absolute REWIND_PROJECT_ROOT — never overwrite
10
+ * a single global entry when setting up another project.
4
11
  */
5
- export type ClientConnectionStatus = "not_detected" | "detected" | "configured" | "connected" | "invalid";
12
+ import { type CursorIntegrationState } from "./project-registry.js";
13
+ import { isLegacySourceMcpEntry, type McpServerEntry } from "./mcp-json.js";
14
+ export type ClientConnectionStatus = "not_detected" | "detected" | "configured" | "connected" | "needs_reload" | "invalid";
6
15
  export interface ClientStatus {
7
16
  id: string;
8
17
  displayName: string;
@@ -11,6 +20,9 @@ export interface ClientStatus {
11
20
  configPath: string | null;
12
21
  message: string;
13
22
  supported: boolean;
23
+ /** Honest integration state for setup/doctor */
24
+ integrationState?: CursorIntegrationState | "not_configured";
25
+ serverName?: string | null;
14
26
  }
15
27
  export interface AgentClientIntegration {
16
28
  readonly id: string;
@@ -19,10 +31,7 @@ export interface AgentClientIntegration {
19
31
  detect(): Promise<boolean>;
20
32
  getConfigPath(): Promise<string | null>;
21
33
  readConfig(): Promise<unknown | null>;
22
- install(projectRoot: string): Promise<{
23
- path: string;
24
- changed: boolean;
25
- }>;
34
+ install(projectRoot: string): Promise<CursorInstallResult>;
26
35
  validate(projectRoot: string): Promise<{
27
36
  ok: boolean;
28
37
  message: string;
@@ -33,32 +42,47 @@ export interface AgentClientIntegration {
33
42
  }>;
34
43
  status(projectRoot: string): Promise<ClientStatus>;
35
44
  }
45
+ export interface CursorInstallResult {
46
+ path: string;
47
+ changed: boolean;
48
+ serverName: string;
49
+ backupPath: string | null;
50
+ removedKeys: string[];
51
+ legacyCleaned: string[];
52
+ projectMcpCleaned: boolean;
53
+ state: CursorIntegrationState;
54
+ notes: string[];
55
+ }
36
56
  /** Portable MCP entry — installed CLI only (never tsx + src/cli.ts). */
37
- export declare function rewindMcpEntry(projectRoot: string): Record<string, unknown>;
38
- /** True if MCP entry still points at source-repo-only tooling. */
39
- export declare function isLegacySourceMcpEntry(entry: {
40
- command?: string;
41
- args?: string[];
42
- }): boolean;
57
+ export declare function rewindMcpEntry(projectRoot: string): McpServerEntry;
58
+ export { isLegacySourceMcpEntry };
59
+ /**
60
+ * Evidence that Cursor has actually loaded/used REWIND MCP for this project.
61
+ * Config presence alone is NOT connection.
62
+ */
63
+ export declare function observeCursorMcpConnection(projectRoot: string): Promise<{
64
+ connected: boolean;
65
+ detail: string;
66
+ }>;
43
67
  export declare class CursorIntegration implements AgentClientIntegration {
44
68
  readonly id = "cursor";
45
69
  readonly displayName = "Cursor";
46
70
  readonly supported = true;
47
71
  detect(): Promise<boolean>;
48
72
  getConfigPath(): Promise<string | null>;
73
+ /** @deprecated Prefer user-level config; kept for cleanup of old installs */
49
74
  projectMcpPath(projectRoot: string): string;
50
75
  readConfig(): Promise<unknown | null>;
51
- install(projectRoot: string): Promise<{
52
- path: string;
53
- changed: boolean;
54
- }>;
76
+ install(projectRoot: string): Promise<CursorInstallResult>;
55
77
  validate(projectRoot: string): Promise<{
56
78
  ok: boolean;
57
79
  message: string;
58
80
  }>;
81
+ private findServerNameForProject;
59
82
  remove(projectRoot: string): Promise<{
60
83
  removed: boolean;
61
84
  path: string | null;
85
+ serverName?: string;
62
86
  }>;
63
87
  status(projectRoot: string): Promise<ClientStatus>;
64
88
  }
@@ -71,10 +95,7 @@ export declare class UnsupportedClientStub implements AgentClientIntegration {
71
95
  detect(): Promise<boolean>;
72
96
  getConfigPath(): Promise<string | null>;
73
97
  readConfig(): Promise<unknown | null>;
74
- install(): Promise<{
75
- path: string;
76
- changed: boolean;
77
- }>;
98
+ install(): Promise<CursorInstallResult>;
78
99
  validate(): Promise<{
79
100
  ok: boolean;
80
101
  message: string;
@@ -1,12 +1,22 @@
1
1
  /**
2
2
  * Agent client integration layer.
3
3
  * Cursor is the first proven integration. Do not advertise untested clients.
4
+ *
5
+ * Strategy (observed Cursor behaviour):
6
+ * Project-level `.cursor/mcp.json` may be discovered but remain disconnected.
7
+ * User-level `~/.cursor/mcp.json` connects reliably.
8
+ * Therefore: one user-level MCP server entry per REWIND project
9
+ * (`rewind-<slug>`) with absolute REWIND_PROJECT_ROOT — never overwrite
10
+ * a single global entry when setting up another project.
4
11
  */
5
12
  import path from "node:path";
6
13
  import os from "node:os";
7
- import { access, mkdir, readFile, writeFile, rename } from "node:fs/promises";
14
+ import { access } from "node:fs/promises";
8
15
  import { constants as fsConstants } from "node:fs";
9
- import { resolveRewindCliInvocation } from "../paths.js";
16
+ import { resolveRewindCliInvocation, getPackageRoot } from "../paths.js";
17
+ import { allocateServerName, findRegisteredProject, loadProjectRegistry, markProjectIntegration, removeRegisteredProject, upsertRegisteredProject, } from "./project-registry.js";
18
+ import { entryProjectRoot, getUserMcpConfigPath, isLegacySourceMcpEntry, isRewindServerKey, looksLikeRewindEntry, McpConfigError, mutateMcpConfig, projectMcpConfigPath, readMcpConfig, } from "./mcp-json.js";
19
+ import { listTransactions } from "../ledger/query.js";
10
20
  async function exists(p) {
11
21
  try {
12
22
  await access(p, fsConstants.F_OK);
@@ -16,34 +26,65 @@ async function exists(p) {
16
26
  return false;
17
27
  }
18
28
  }
19
- async function writeJsonAtomic(file, data) {
20
- await mkdir(path.dirname(file), { recursive: true });
21
- const tmp = `${file}.tmp-${process.pid}`;
22
- await writeFile(tmp, JSON.stringify(data, null, 2) + "\n", "utf8");
23
- await rename(tmp, file);
24
- }
25
29
  /** Portable MCP entry — installed CLI only (never tsx + src/cli.ts). */
26
30
  export function rewindMcpEntry(projectRoot) {
27
31
  const { command, args } = resolveRewindCliInvocation(["mcp"]);
32
+ const absoluteRoot = path.resolve(projectRoot);
28
33
  return {
29
34
  command,
30
35
  args,
31
- env: { REWIND_PROJECT_ROOT: projectRoot },
36
+ env: { REWIND_PROJECT_ROOT: absoluteRoot },
32
37
  };
33
38
  }
34
- /** True if MCP entry still points at source-repo-only tooling. */
35
- export function isLegacySourceMcpEntry(entry) {
36
- const cmd = entry.command ?? "";
37
- const joined = [cmd, ...(entry.args ?? [])].join(" ");
38
- if (/tsx/i.test(joined) && /src[/\\]cli\.ts/i.test(joined))
39
+ export { isLegacySourceMcpEntry };
40
+ function sameProjectRoot(a, b) {
41
+ return path.resolve(a) === path.resolve(b);
42
+ }
43
+ function isStaleSourceRepoEntry(entry, packageRoot = getPackageRoot()) {
44
+ if (isLegacySourceMcpEntry(entry))
39
45
  return true;
40
- if (/node_modules[/\\]\.bin[/\\]tsx/i.test(cmd))
46
+ const root = entryProjectRoot(entry);
47
+ if (root && sameProjectRoot(root, packageRoot)) {
48
+ // Pinned to the REWIND package/source tree — unsafe for consumers
41
49
  return true;
42
- if (/src[/\\]cli\.ts/i.test(joined) && !/dist[/\\]src[/\\]cli\.js/i.test(joined)) {
50
+ }
51
+ const joined = [entry.command ?? "", ...(entry.args ?? [])].join(" ");
52
+ if (joined.includes(packageRoot) && /src[/\\]cli\.ts/i.test(joined)) {
43
53
  return true;
44
54
  }
45
55
  return false;
46
56
  }
57
+ /**
58
+ * Evidence that Cursor has actually loaded/used REWIND MCP for this project.
59
+ * Config presence alone is NOT connection.
60
+ */
61
+ export async function observeCursorMcpConnection(projectRoot) {
62
+ try {
63
+ const txns = await listTransactions(projectRoot);
64
+ const recent = txns
65
+ .filter((t) => {
66
+ const client = String(t.actor?.client ?? "");
67
+ const source = String(t.source ?? "");
68
+ return (source === "MCP" &&
69
+ (/cursor/i.test(client) || /cursor-vscode/i.test(client)));
70
+ })
71
+ .sort((a, b) => String(b.createdAt).localeCompare(String(a.createdAt)));
72
+ if (recent.length > 0) {
73
+ const latest = recent[0];
74
+ return {
75
+ connected: true,
76
+ detail: `Observed MCP transaction ${latest?.id ?? "?"} via ${latest?.actor?.client ?? "cursor"}`,
77
+ };
78
+ }
79
+ }
80
+ catch {
81
+ /* ledger may be empty / missing */
82
+ }
83
+ return {
84
+ connected: false,
85
+ detail: "No Cursor MCP session evidence yet — restart/reload Cursor, then use a REWIND tool",
86
+ };
87
+ }
47
88
  export class CursorIntegration {
48
89
  id = "cursor";
49
90
  displayName = "Cursor";
@@ -54,6 +95,10 @@ export class CursorIntegration {
54
95
  path.join(os.homedir(), "Library", "Application Support", "Cursor"),
55
96
  "/Applications/Cursor.app",
56
97
  ];
98
+ // Honour test override
99
+ if (process.env.REWIND_CURSOR_DIR) {
100
+ return exists(process.env.REWIND_CURSOR_DIR);
101
+ }
57
102
  for (const c of candidates) {
58
103
  if (await exists(c))
59
104
  return true;
@@ -61,53 +106,161 @@ export class CursorIntegration {
61
106
  return false;
62
107
  }
63
108
  async getConfigPath() {
64
- return null;
109
+ return getUserMcpConfigPath();
65
110
  }
111
+ /** @deprecated Prefer user-level config; kept for cleanup of old installs */
66
112
  projectMcpPath(projectRoot) {
67
- return path.join(projectRoot, ".cursor", "mcp.json");
113
+ return projectMcpConfigPath(projectRoot);
68
114
  }
69
115
  async readConfig() {
70
- return null;
116
+ try {
117
+ const { config } = await readMcpConfig(getUserMcpConfigPath());
118
+ return config;
119
+ }
120
+ catch {
121
+ return null;
122
+ }
71
123
  }
72
124
  async install(projectRoot) {
73
- const configPath = this.projectMcpPath(projectRoot);
74
- let existing = {};
125
+ const abs = path.resolve(projectRoot);
126
+ const notes = [];
127
+ const legacyCleaned = [];
128
+ const userPath = getUserMcpConfigPath();
129
+ const registry = await loadProjectRegistry();
130
+ const serverName = allocateServerName(abs, registry.projects);
131
+ const entry = rewindMcpEntry(abs);
132
+ let backupPath = null;
133
+ let removedKeys = [];
134
+ let changed = false;
75
135
  try {
76
- existing = JSON.parse(await readFile(configPath, "utf8"));
136
+ const result = await mutateMcpConfig(userPath, (servers) => {
137
+ const removed = [];
138
+ const upserted = [];
139
+ // Clean legacy / colliding REWIND entries for this install
140
+ for (const [key, value] of Object.entries(servers)) {
141
+ if (!looksLikeRewindEntry(key, value))
142
+ continue;
143
+ const entryRoot = entryProjectRoot(value);
144
+ const stale = isStaleSourceRepoEntry(value);
145
+ const forThisProject = entryRoot
146
+ ? sameProjectRoot(entryRoot, abs)
147
+ : key === "rewind" || key === serverName;
148
+ const duplicateName = key === "rewind" ||
149
+ (isRewindServerKey(key) && key !== serverName && forThisProject);
150
+ if (stale) {
151
+ delete servers[key];
152
+ removed.push(key);
153
+ legacyCleaned.push(`${key} (legacy/source-repo entry → ${entryRoot ?? "unknown root"})`);
154
+ continue;
155
+ }
156
+ if (forThisProject && key !== serverName) {
157
+ // Migrate bare "rewind" or old name for this project
158
+ delete servers[key];
159
+ removed.push(key);
160
+ legacyCleaned.push(`${key} (migrated to ${serverName} for this project)`);
161
+ continue;
162
+ }
163
+ if (key === serverName &&
164
+ entryRoot &&
165
+ !sameProjectRoot(entryRoot, abs)) {
166
+ // Should not happen with allocateServerName — treat as conflict
167
+ throw new McpConfigError(`MCP server name ${serverName} is already pinned to ${entryRoot}`);
168
+ }
169
+ void duplicateName;
170
+ }
171
+ const prev = JSON.stringify(servers[serverName] ?? null);
172
+ const next = JSON.stringify(entry);
173
+ if (prev !== next) {
174
+ servers[serverName] = entry;
175
+ upserted.push(serverName);
176
+ }
177
+ const didChange = removed.length > 0 || upserted.length > 0;
178
+ return { changed: didChange, removedKeys: removed, upsertedKeys: upserted };
179
+ });
180
+ changed = result.changed;
181
+ backupPath = result.backupPath;
182
+ removedKeys = result.removedKeys;
77
183
  }
78
- catch {
79
- existing = { mcpServers: {} };
80
- }
81
- if (!existing.mcpServers)
82
- existing.mcpServers = {};
83
- const entry = rewindMcpEntry(projectRoot);
84
- const prev = JSON.stringify(existing.mcpServers["rewind"] ?? null);
85
- existing.mcpServers["rewind"] = entry;
86
- const next = JSON.stringify(entry);
87
- const changed = prev !== next;
88
- if (changed) {
89
- try {
90
- const raw = await readFile(configPath, "utf8");
91
- await writeFile(`${configPath}.rewind-backup`, raw, "utf8");
184
+ catch (err) {
185
+ if (err instanceof McpConfigError)
186
+ throw err;
187
+ throw err;
188
+ }
189
+ if (legacyCleaned.length > 0) {
190
+ notes.push(`Cleaned legacy REWIND MCP entries: ${legacyCleaned.join("; ")}`);
191
+ }
192
+ if (backupPath) {
193
+ notes.push(`Backup written: ${backupPath}`);
194
+ }
195
+ // Clean project-level mcp.json rewind entries (discovered-but-disconnected trap)
196
+ let projectMcpCleaned = false;
197
+ const projectPath = projectMcpConfigPath(abs);
198
+ try {
199
+ const projectResult = await mutateMcpConfig(projectPath, (servers) => {
200
+ const removed = [];
201
+ for (const [key, value] of Object.entries(servers)) {
202
+ if (!looksLikeRewindEntry(key, value))
203
+ continue;
204
+ delete servers[key];
205
+ removed.push(key);
206
+ }
207
+ return { changed: removed.length > 0, removedKeys: removed };
208
+ });
209
+ if (projectResult.changed) {
210
+ projectMcpCleaned = true;
211
+ notes.push(`Removed project-level REWIND MCP entries from ${projectPath} ` +
212
+ `(user-level config is authoritative on this Cursor build)`);
213
+ if (projectResult.backupPath) {
214
+ notes.push(`Project MCP backup: ${projectResult.backupPath}`);
215
+ }
92
216
  }
93
- catch {
94
- /* no prior */
217
+ }
218
+ catch (err) {
219
+ if (err instanceof McpConfigError) {
220
+ notes.push(`Project MCP config malformed — left untouched: ${err.message}`);
95
221
  }
96
- await writeJsonAtomic(configPath, existing);
222
+ // Missing project mcp is fine
97
223
  }
98
- return { path: configPath, changed };
224
+ await upsertRegisteredProject(abs, {
225
+ serverName,
226
+ cursorIntegration: "needs_reload",
227
+ displayName: path.basename(abs),
228
+ });
229
+ return {
230
+ path: userPath,
231
+ changed,
232
+ serverName,
233
+ backupPath,
234
+ removedKeys,
235
+ legacyCleaned,
236
+ projectMcpCleaned,
237
+ state: "needs_reload",
238
+ notes,
239
+ };
99
240
  }
100
241
  async validate(projectRoot) {
101
- const configPath = this.projectMcpPath(projectRoot);
242
+ const abs = path.resolve(projectRoot);
243
+ const userPath = getUserMcpConfigPath();
102
244
  try {
103
- const raw = await readFile(configPath, "utf8");
104
- const cfg = JSON.parse(raw);
105
- const rewind = cfg.mcpServers?.["rewind"];
245
+ const { config } = await readMcpConfig(userPath);
246
+ const registered = await findRegisteredProject(abs);
247
+ const serverName = registered?.serverName ??
248
+ (await this.findServerNameForProject(abs, config.mcpServers ?? {}));
249
+ if (!serverName) {
250
+ return {
251
+ ok: false,
252
+ message: `No REWIND MCP entry for this project in ${userPath}`,
253
+ };
254
+ }
255
+ const rewind = config.mcpServers?.[serverName];
106
256
  if (!rewind) {
107
- return { ok: false, message: "mcp.json has no rewind server entry" };
257
+ return {
258
+ ok: false,
259
+ message: `mcp.json missing server "${serverName}"`,
260
+ };
108
261
  }
109
262
  if (!rewind.command) {
110
- return { ok: false, message: "rewind MCP entry missing command" };
263
+ return { ok: false, message: "REWIND MCP entry missing command" };
111
264
  }
112
265
  if (isLegacySourceMcpEntry(rewind)) {
113
266
  return {
@@ -117,65 +270,140 @@ export class CursorIntegration {
117
270
  }
118
271
  const args = rewind.args ?? [];
119
272
  if (!args.includes("mcp")) {
120
- return { ok: false, message: "rewind MCP entry missing mcp args" };
273
+ return { ok: false, message: "REWIND MCP entry missing mcp args" };
274
+ }
275
+ const root = entryProjectRoot(rewind);
276
+ if (!root || !sameProjectRoot(root, abs)) {
277
+ return {
278
+ ok: false,
279
+ message: `REWIND MCP entry root mismatch (expected ${abs}, got ${root ?? "none"})`,
280
+ };
281
+ }
282
+ // Guard against package-root leakage in command
283
+ const joined = [rewind.command, ...args].join(" ");
284
+ if (/tsx/i.test(joined) && /src[/\\]cli\.ts/i.test(joined)) {
285
+ return { ok: false, message: "Source-repo MCP command detected" };
121
286
  }
122
287
  return {
123
288
  ok: true,
124
- message: `Cursor MCP config valid at ${configPath}`,
289
+ message: `Cursor MCP config valid: ${serverName} @ ${userPath}`,
125
290
  };
126
291
  }
127
292
  catch (err) {
128
293
  return {
129
294
  ok: false,
130
- message: `Cannot read MCP config: ${err instanceof Error ? err.message : String(err)}`,
295
+ message: err instanceof Error ? err.message : `Cannot read MCP config: ${String(err)}`,
131
296
  };
132
297
  }
133
298
  }
299
+ async findServerNameForProject(projectRoot, servers) {
300
+ const abs = path.resolve(projectRoot);
301
+ for (const [key, value] of Object.entries(servers)) {
302
+ if (!looksLikeRewindEntry(key, value))
303
+ continue;
304
+ const root = entryProjectRoot(value);
305
+ if (root && sameProjectRoot(root, abs))
306
+ return key;
307
+ }
308
+ return null;
309
+ }
134
310
  async remove(projectRoot) {
135
- const configPath = this.projectMcpPath(projectRoot);
311
+ const abs = path.resolve(projectRoot);
312
+ const userPath = getUserMcpConfigPath();
313
+ const registered = await findRegisteredProject(abs);
314
+ let removed = false;
315
+ let serverName = registered?.serverName;
136
316
  try {
137
- const raw = await readFile(configPath, "utf8");
138
- const cfg = JSON.parse(raw);
139
- if (!cfg.mcpServers?.["rewind"]) {
140
- return { removed: false, path: configPath };
141
- }
142
- delete cfg.mcpServers["rewind"];
143
- await writeJsonAtomic(configPath, cfg);
144
- return { removed: true, path: configPath };
317
+ const result = await mutateMcpConfig(userPath, (servers) => {
318
+ const removedKeys = [];
319
+ for (const [key, value] of Object.entries(servers)) {
320
+ if (!looksLikeRewindEntry(key, value))
321
+ continue;
322
+ const root = entryProjectRoot(value);
323
+ const match = (root && sameProjectRoot(root, abs)) ||
324
+ (registered && key === registered.serverName);
325
+ if (match) {
326
+ delete servers[key];
327
+ removedKeys.push(key);
328
+ serverName = key;
329
+ }
330
+ }
331
+ return { changed: removedKeys.length > 0, removedKeys };
332
+ });
333
+ removed = result.changed;
334
+ }
335
+ catch (err) {
336
+ if (err instanceof McpConfigError)
337
+ throw err;
338
+ // No user mcp file
339
+ }
340
+ // Also strip project-level if present
341
+ try {
342
+ await mutateMcpConfig(projectMcpConfigPath(abs), (servers) => {
343
+ const removedKeys = [];
344
+ for (const [key, value] of Object.entries(servers)) {
345
+ if (!looksLikeRewindEntry(key, value))
346
+ continue;
347
+ delete servers[key];
348
+ removedKeys.push(key);
349
+ }
350
+ return { changed: removedKeys.length > 0, removedKeys };
351
+ });
145
352
  }
146
353
  catch {
147
- return { removed: false, path: null };
354
+ /* ignore */
355
+ }
356
+ await removeRegisteredProject(abs);
357
+ if (serverName) {
358
+ return { removed, path: userPath, serverName };
148
359
  }
360
+ return { removed, path: userPath };
149
361
  }
150
362
  async status(projectRoot) {
363
+ const abs = path.resolve(projectRoot);
151
364
  const detected = await this.detect();
152
- const configPath = this.projectMcpPath(projectRoot);
153
- const hasConfig = await exists(configPath);
154
- let configured = false;
155
- if (hasConfig) {
156
- const v = await this.validate(projectRoot);
157
- configured = v.ok;
158
- }
365
+ const configPath = getUserMcpConfigPath();
366
+ const registered = await findRegisteredProject(abs);
367
+ const v = await this.validate(abs);
368
+ const configured = v.ok;
159
369
  let status = "not_detected";
160
370
  let message = "Cursor not detected on this machine";
371
+ let integrationState = "not_configured";
161
372
  if (detected && !configured) {
162
373
  status = "detected";
163
- message = "Cursor detected — REWIND MCP not configured for this project";
374
+ message =
375
+ "Cursor detected — REWIND MCP not configured for this project (run: rewind setup)";
376
+ integrationState = "not_configured";
164
377
  }
165
378
  else if (detected && configured) {
166
- status = "configured";
167
- message =
168
- "CURSOR Detected. REWIND MCP connected (mediated actions will be recorded). " +
169
- "Native Cursor writes outside MCP are NOT mediated.";
379
+ const obs = await observeCursorMcpConnection(abs);
380
+ if (obs.connected) {
381
+ status = "connected";
382
+ integrationState = "connected";
383
+ message =
384
+ `CURSOR — CONNECTED (${registered?.serverName ?? "rewind"}). ` +
385
+ `${obs.detail}. Native Cursor writes outside MCP are NOT mediated.`;
386
+ await markProjectIntegration(abs, "connected").catch(() => undefined);
387
+ }
388
+ else {
389
+ status = "needs_reload";
390
+ integrationState = "needs_reload";
391
+ message =
392
+ `CURSOR — CONFIGURED (${registered?.serverName ?? "rewind"} @ ${configPath}). ` +
393
+ `NEEDS RELOAD: ${obs.detail}. ` +
394
+ `Native Cursor writes outside MCP are NOT mediated.`;
395
+ }
170
396
  }
171
397
  return {
172
398
  id: this.id,
173
399
  displayName: this.displayName,
174
400
  detected,
175
401
  status,
176
- configPath: hasConfig ? configPath : null,
402
+ configPath: configured || (await exists(configPath)) ? configPath : null,
177
403
  message,
178
404
  supported: true,
405
+ integrationState,
406
+ serverName: registered?.serverName ?? null,
179
407
  };
180
408
  }
181
409
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/clients/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/clients/types.ts"],"names":[],"mappings":"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"}