devsmind-mcp 2.1.1 → 2.2.0
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 +110 -28
- package/dist/cli/index.js +38 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.js +48 -56
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/integrations/mcp.d.ts +8 -0
- package/dist/cli/integrations/mcp.js +164 -0
- package/dist/cli/integrations/mcp.js.map +1 -0
- package/dist/cli/integrations/prompt.d.ts +52 -0
- package/dist/cli/integrations/prompt.js +352 -0
- package/dist/cli/integrations/prompt.js.map +1 -0
- package/dist/cli/integrations/registry.d.ts +67 -0
- package/dist/cli/integrations/registry.js +271 -0
- package/dist/cli/integrations/registry.js.map +1 -0
- package/dist/cli/rule.d.ts +14 -1
- package/dist/cli/rule.js +92 -40
- package/dist/cli/rule.js.map +1 -1
- package/dist/cli/sync.d.ts +13 -0
- package/dist/cli/sync.js +119 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/db/database.d.ts +6 -0
- package/dist/db/database.js +17 -0
- package/dist/db/database.js.map +1 -1
- package/dist/utils/config.d.ts +11 -0
- package/dist/utils/config.js +31 -0
- package/dist/utils/config.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry of AI coding tools DevsMind can integrate with. This single table
|
|
3
|
+
* drives both `devsmind mcp` (add the MCP server) and `devsmind rule` (write the
|
|
4
|
+
* workspace rule). To fix or add a tool, edit an entry here — nothing else.
|
|
5
|
+
*/
|
|
6
|
+
export type Transport = 'stdio' | 'http';
|
|
7
|
+
export type ConfigFormat = 'json' | 'toml';
|
|
8
|
+
export type Scope = 'project' | 'global';
|
|
9
|
+
/** A path that may differ per-OS. Strings may contain a leading `~` for the home dir. */
|
|
10
|
+
export type OsPath = string | {
|
|
11
|
+
win32: string;
|
|
12
|
+
darwin: string;
|
|
13
|
+
linux: string;
|
|
14
|
+
};
|
|
15
|
+
export interface McpScope {
|
|
16
|
+
scope: Scope;
|
|
17
|
+
/** Project paths are relative to the workspace root; global paths are absolute (may start with `~`). */
|
|
18
|
+
file: OsPath;
|
|
19
|
+
format: ConfigFormat;
|
|
20
|
+
/** Key-path to the server map, e.g. ['mcpServers'] or ['servers'] or ['mcp_servers']. */
|
|
21
|
+
serverMapPath: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface RuleScope {
|
|
24
|
+
scope: Scope;
|
|
25
|
+
file: OsPath;
|
|
26
|
+
}
|
|
27
|
+
export interface IdeTarget {
|
|
28
|
+
id: string;
|
|
29
|
+
label: string;
|
|
30
|
+
kind: 'ide' | 'cli';
|
|
31
|
+
mcp: {
|
|
32
|
+
scopes: McpScope[];
|
|
33
|
+
/** Supported transports; first is the preferred default. */
|
|
34
|
+
transports: Transport[];
|
|
35
|
+
/** The value object placed under serverMap['devsmind'] for a given transport. */
|
|
36
|
+
entry: (t: Transport, ctx: EntryContext) => Record<string, unknown>;
|
|
37
|
+
/** Optional CLI one-liner installer (e.g. `claude mcp add ...`). */
|
|
38
|
+
cliInstaller?: (t: Transport, ctx: EntryContext) => string;
|
|
39
|
+
/** Extra guidance printed in manual mode. */
|
|
40
|
+
note?: string;
|
|
41
|
+
};
|
|
42
|
+
rules: {
|
|
43
|
+
scopes: RuleScope[];
|
|
44
|
+
/** `standalone` = dedicated devsmind file; `append-section` = merge a delimited block into a shared file. */
|
|
45
|
+
style: 'standalone' | 'append-section';
|
|
46
|
+
/** Optional transform of the rule body before writing (e.g. Cursor .mdc frontmatter). */
|
|
47
|
+
wrap?: (body: string) => string;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/** Context available when rendering a server entry. */
|
|
51
|
+
export interface EntryContext {
|
|
52
|
+
devmindDir: string;
|
|
53
|
+
port: number;
|
|
54
|
+
}
|
|
55
|
+
/** Standard stdio entry: the IDE spawns `devsmind start --stdio`. */
|
|
56
|
+
export declare function stdioEntry(): Record<string, unknown>;
|
|
57
|
+
/** Standard HTTP entry: connect to the already-running server. */
|
|
58
|
+
export declare function httpEntry(ctx: EntryContext): Record<string, unknown>;
|
|
59
|
+
/** Resolve an {@link OsPath} to a concrete string for the current platform, expanding a leading `~`. */
|
|
60
|
+
export declare function resolveOsPath(p: OsPath): string;
|
|
61
|
+
/**
|
|
62
|
+
* Resolve the absolute file path for a config/rule scope.
|
|
63
|
+
* Project scopes are joined onto `workspaceRoot`; global scopes are absolute.
|
|
64
|
+
*/
|
|
65
|
+
export declare function resolveScopeFile(file: OsPath, scope: Scope, workspaceRoot: string): string;
|
|
66
|
+
export declare const TARGETS: IdeTarget[];
|
|
67
|
+
export declare function getTarget(id: string): IdeTarget | undefined;
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TARGETS = void 0;
|
|
37
|
+
exports.stdioEntry = stdioEntry;
|
|
38
|
+
exports.httpEntry = httpEntry;
|
|
39
|
+
exports.resolveOsPath = resolveOsPath;
|
|
40
|
+
exports.resolveScopeFile = resolveScopeFile;
|
|
41
|
+
exports.getTarget = getTarget;
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
// ─── Shared entry payloads ───────────────────────────────────────────────────
|
|
45
|
+
/** Standard stdio entry: the IDE spawns `devsmind start --stdio`. */
|
|
46
|
+
function stdioEntry() {
|
|
47
|
+
return { command: 'devsmind', args: ['start', '--stdio'] };
|
|
48
|
+
}
|
|
49
|
+
/** Standard HTTP entry: connect to the already-running server. */
|
|
50
|
+
function httpEntry(ctx) {
|
|
51
|
+
return { url: `http://localhost:${ctx.port}/mcp` };
|
|
52
|
+
}
|
|
53
|
+
// ─── OS-aware path resolution ────────────────────────────────────────────────
|
|
54
|
+
/** Resolve an {@link OsPath} to a concrete string for the current platform, expanding a leading `~`. */
|
|
55
|
+
function resolveOsPath(p) {
|
|
56
|
+
const raw = typeof p === 'string' ? p : p[process.platform] ?? p.linux;
|
|
57
|
+
if (raw.startsWith('~')) {
|
|
58
|
+
return path.join(os.homedir(), raw.slice(1));
|
|
59
|
+
}
|
|
60
|
+
return raw;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Resolve the absolute file path for a config/rule scope.
|
|
64
|
+
* Project scopes are joined onto `workspaceRoot`; global scopes are absolute.
|
|
65
|
+
*/
|
|
66
|
+
function resolveScopeFile(file, scope, workspaceRoot) {
|
|
67
|
+
const resolved = resolveOsPath(file);
|
|
68
|
+
if (scope === 'project') {
|
|
69
|
+
return path.isAbsolute(resolved) ? resolved : path.join(workspaceRoot, resolved);
|
|
70
|
+
}
|
|
71
|
+
return path.resolve(resolved);
|
|
72
|
+
}
|
|
73
|
+
// ─── Transport-specific entry helpers ────────────────────────────────────────
|
|
74
|
+
// Different tools key the HTTP endpoint differently (url / serverUrl / httpUrl)
|
|
75
|
+
// and some require an explicit `type`. These builders capture each tool's shape.
|
|
76
|
+
const httpUrl = (ctx) => `http://localhost:${ctx.port}/mcp`;
|
|
77
|
+
/** Cursor / Kiro: bare `url`, no type. */
|
|
78
|
+
const entryUrl = (t, ctx) => t === 'stdio' ? stdioEntry() : { url: httpUrl(ctx) };
|
|
79
|
+
/** VS Code / Claude Code: explicit `type` + url. */
|
|
80
|
+
const entryTyped = (t, ctx) => t === 'stdio'
|
|
81
|
+
? { type: 'stdio', ...stdioEntry() }
|
|
82
|
+
: { type: 'http', url: httpUrl(ctx) };
|
|
83
|
+
/** Windsurf / Antigravity: HTTP endpoint keyed as `serverUrl`. */
|
|
84
|
+
const entryServerUrl = (t, ctx) => t === 'stdio' ? stdioEntry() : { serverUrl: httpUrl(ctx) };
|
|
85
|
+
/** Qwen Code: Streamable-HTTP endpoint keyed as `httpUrl`. */
|
|
86
|
+
const entryHttpUrl = (t, ctx) => t === 'stdio' ? stdioEntry() : { httpUrl: httpUrl(ctx) };
|
|
87
|
+
const cursorMdcWrap = (body) => `---\ndescription: DevsMind — Team AI Brain workspace rule\nalwaysApply: true\n---\n\n${body}\n`;
|
|
88
|
+
// VS Code user-profile mcp.json lives in the platform user-data dir.
|
|
89
|
+
const VSCODE_GLOBAL = {
|
|
90
|
+
win32: '~/AppData/Roaming/Code/User/mcp.json',
|
|
91
|
+
darwin: '~/Library/Application Support/Code/User/mcp.json',
|
|
92
|
+
linux: '~/.config/Code/User/mcp.json',
|
|
93
|
+
};
|
|
94
|
+
// ─── The registry ────────────────────────────────────────────────────────────
|
|
95
|
+
// IDEs first, then CLIs, for the picker menu. Each tool's HTTP-key quirk and
|
|
96
|
+
// rules location are encoded here — the rest of the code is tool-agnostic.
|
|
97
|
+
exports.TARGETS = [
|
|
98
|
+
// ── IDEs ──────────────────────────────────────────────────────────────────
|
|
99
|
+
{
|
|
100
|
+
id: 'cursor',
|
|
101
|
+
label: 'Cursor',
|
|
102
|
+
kind: 'ide',
|
|
103
|
+
mcp: {
|
|
104
|
+
scopes: [
|
|
105
|
+
{ scope: 'project', file: '.cursor/mcp.json', format: 'json', serverMapPath: ['mcpServers'] },
|
|
106
|
+
{ scope: 'global', file: '~/.cursor/mcp.json', format: 'json', serverMapPath: ['mcpServers'] },
|
|
107
|
+
],
|
|
108
|
+
transports: ['stdio', 'http'],
|
|
109
|
+
entry: entryUrl,
|
|
110
|
+
},
|
|
111
|
+
rules: {
|
|
112
|
+
scopes: [{ scope: 'project', file: '.cursor/rules/devsmind.mdc' }],
|
|
113
|
+
style: 'standalone',
|
|
114
|
+
wrap: cursorMdcWrap,
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
id: 'vscode',
|
|
119
|
+
label: 'VS Code (GitHub Copilot)',
|
|
120
|
+
kind: 'ide',
|
|
121
|
+
mcp: {
|
|
122
|
+
scopes: [
|
|
123
|
+
{ scope: 'project', file: '.vscode/mcp.json', format: 'json', serverMapPath: ['servers'] },
|
|
124
|
+
{ scope: 'global', file: VSCODE_GLOBAL, format: 'json', serverMapPath: ['servers'] },
|
|
125
|
+
],
|
|
126
|
+
transports: ['stdio', 'http'],
|
|
127
|
+
entry: entryTyped,
|
|
128
|
+
note: 'VS Code uses the "servers" key (not "mcpServers").',
|
|
129
|
+
},
|
|
130
|
+
rules: {
|
|
131
|
+
scopes: [{ scope: 'project', file: '.github/copilot-instructions.md' }],
|
|
132
|
+
style: 'append-section',
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
id: 'windsurf',
|
|
137
|
+
label: 'Windsurf (Cascade)',
|
|
138
|
+
kind: 'ide',
|
|
139
|
+
mcp: {
|
|
140
|
+
scopes: [
|
|
141
|
+
{ scope: 'global', file: '~/.codeium/windsurf/mcp_config.json', format: 'json', serverMapPath: ['mcpServers'] },
|
|
142
|
+
],
|
|
143
|
+
transports: ['stdio', 'http'],
|
|
144
|
+
entry: entryServerUrl,
|
|
145
|
+
note: 'Windsurf keys the remote endpoint as "serverUrl". Config is global-only.',
|
|
146
|
+
},
|
|
147
|
+
rules: {
|
|
148
|
+
scopes: [{ scope: 'project', file: '.windsurf/rules/devsmind.md' }],
|
|
149
|
+
style: 'standalone',
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
id: 'kiro',
|
|
154
|
+
label: 'Kiro',
|
|
155
|
+
kind: 'ide',
|
|
156
|
+
mcp: {
|
|
157
|
+
scopes: [
|
|
158
|
+
{ scope: 'project', file: '.kiro/settings/mcp.json', format: 'json', serverMapPath: ['mcpServers'] },
|
|
159
|
+
{ scope: 'global', file: '~/.kiro/settings/mcp.json', format: 'json', serverMapPath: ['mcpServers'] },
|
|
160
|
+
],
|
|
161
|
+
transports: ['stdio', 'http'],
|
|
162
|
+
entry: entryUrl,
|
|
163
|
+
},
|
|
164
|
+
rules: {
|
|
165
|
+
scopes: [{ scope: 'project', file: '.kiro/steering/devsmind.md' }],
|
|
166
|
+
style: 'standalone',
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
id: 'antigravity',
|
|
171
|
+
label: 'Google Antigravity (IDE)',
|
|
172
|
+
kind: 'ide',
|
|
173
|
+
mcp: {
|
|
174
|
+
scopes: [
|
|
175
|
+
{ scope: 'global', file: '~/.gemini/config/mcp_config.json', format: 'json', serverMapPath: ['mcpServers'] },
|
|
176
|
+
{ scope: 'project', file: '.agents/mcp_config.json', format: 'json', serverMapPath: ['mcpServers'] },
|
|
177
|
+
],
|
|
178
|
+
transports: ['stdio', 'http'],
|
|
179
|
+
entry: entryServerUrl,
|
|
180
|
+
note: 'Antigravity keys the remote endpoint as "serverUrl".',
|
|
181
|
+
},
|
|
182
|
+
rules: {
|
|
183
|
+
scopes: [{ scope: 'project', file: 'AGENTS.md' }],
|
|
184
|
+
style: 'append-section',
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
// ── CLI tools ───────────────────────────────────────────────────────────────
|
|
188
|
+
{
|
|
189
|
+
id: 'claude-code',
|
|
190
|
+
label: 'Claude Code (claude CLI / IDE extension)',
|
|
191
|
+
kind: 'cli',
|
|
192
|
+
mcp: {
|
|
193
|
+
scopes: [
|
|
194
|
+
{ scope: 'project', file: '.mcp.json', format: 'json', serverMapPath: ['mcpServers'] },
|
|
195
|
+
],
|
|
196
|
+
transports: ['stdio', 'http'],
|
|
197
|
+
entry: entryTyped,
|
|
198
|
+
cliInstaller: (t, ctx) => t === 'stdio'
|
|
199
|
+
? 'claude mcp add --transport stdio devsmind -- devsmind start --stdio'
|
|
200
|
+
: `claude mcp add --transport http devsmind ${httpUrl(ctx)}`,
|
|
201
|
+
},
|
|
202
|
+
rules: {
|
|
203
|
+
scopes: [{ scope: 'project', file: 'CLAUDE.md' }],
|
|
204
|
+
style: 'append-section',
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
id: 'antigravity-cli',
|
|
209
|
+
label: 'Antigravity CLI',
|
|
210
|
+
kind: 'cli',
|
|
211
|
+
mcp: {
|
|
212
|
+
scopes: [
|
|
213
|
+
{ scope: 'project', file: '.agents/mcp_config.json', format: 'json', serverMapPath: ['mcpServers'] },
|
|
214
|
+
{ scope: 'global', file: '~/.gemini/config/mcp_config.json', format: 'json', serverMapPath: ['mcpServers'] },
|
|
215
|
+
],
|
|
216
|
+
transports: ['stdio', 'http'],
|
|
217
|
+
entry: entryServerUrl,
|
|
218
|
+
note: 'Shares config with the Antigravity IDE; keys the remote endpoint as "serverUrl".',
|
|
219
|
+
},
|
|
220
|
+
rules: {
|
|
221
|
+
scopes: [{ scope: 'project', file: 'AGENTS.md' }],
|
|
222
|
+
style: 'append-section',
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
id: 'codex',
|
|
227
|
+
label: 'OpenAI Codex CLI',
|
|
228
|
+
kind: 'cli',
|
|
229
|
+
mcp: {
|
|
230
|
+
scopes: [
|
|
231
|
+
{ scope: 'global', file: '~/.codex/config.toml', format: 'toml', serverMapPath: ['mcp_servers'] },
|
|
232
|
+
{ scope: 'project', file: '.codex/config.toml', format: 'toml', serverMapPath: ['mcp_servers'] },
|
|
233
|
+
],
|
|
234
|
+
transports: ['stdio', 'http'],
|
|
235
|
+
entry: entryUrl,
|
|
236
|
+
cliInstaller: (t) => t === 'stdio'
|
|
237
|
+
? 'codex mcp add devsmind -- devsmind start --stdio'
|
|
238
|
+
: '# Codex: add the [mcp_servers.devsmind] url entry to ~/.codex/config.toml (no CLI flag for remote)',
|
|
239
|
+
note: 'Codex config is TOML. Remote (url) servers must be added by editing config.toml.',
|
|
240
|
+
},
|
|
241
|
+
rules: {
|
|
242
|
+
scopes: [{ scope: 'project', file: 'AGENTS.md' }],
|
|
243
|
+
style: 'append-section',
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
id: 'qwen',
|
|
248
|
+
label: 'Qwen Code CLI',
|
|
249
|
+
kind: 'cli',
|
|
250
|
+
mcp: {
|
|
251
|
+
scopes: [
|
|
252
|
+
{ scope: 'project', file: '.qwen/settings.json', format: 'json', serverMapPath: ['mcpServers'] },
|
|
253
|
+
{ scope: 'global', file: '~/.qwen/settings.json', format: 'json', serverMapPath: ['mcpServers'] },
|
|
254
|
+
],
|
|
255
|
+
transports: ['stdio', 'http'],
|
|
256
|
+
entry: entryHttpUrl,
|
|
257
|
+
cliInstaller: (t, ctx) => t === 'stdio'
|
|
258
|
+
? 'qwen mcp add devsmind devsmind start --stdio'
|
|
259
|
+
: `qwen mcp add --transport http devsmind ${httpUrl(ctx)}`,
|
|
260
|
+
note: 'Qwen keys the Streamable-HTTP endpoint as "httpUrl".',
|
|
261
|
+
},
|
|
262
|
+
rules: {
|
|
263
|
+
scopes: [{ scope: 'project', file: 'QWEN.md' }],
|
|
264
|
+
style: 'append-section',
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
];
|
|
268
|
+
function getTarget(id) {
|
|
269
|
+
return exports.TARGETS.find(t => t.id === id);
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cli/integrations/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/rule.d.ts
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
import { DevMindConfig } from '../utils/config';
|
|
2
|
+
/**
|
|
3
|
+
* Build the ready-to-paste DevsMind workspace rule from a project's config.
|
|
4
|
+
* Pure string builder — no I/O — so it can be printed or written to a file.
|
|
5
|
+
*/
|
|
6
|
+
export declare function buildRule(config: DevMindConfig, devmindDir: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* `devsmind rule` — print the workspace rule and, interactively, help place it
|
|
9
|
+
* in the chosen tool's native rules file (manual snippet or automatic write).
|
|
10
|
+
* Falls back to plain printing when piped/non-TTY or when `--print` is passed,
|
|
11
|
+
* preserving `devsmind rule > file` usage.
|
|
12
|
+
*/
|
|
1
13
|
export declare function handleRule(opts: {
|
|
2
14
|
path?: string;
|
|
3
|
-
|
|
15
|
+
print?: boolean;
|
|
16
|
+
}): Promise<void>;
|
package/dist/cli/rule.js
CHANGED
|
@@ -33,46 +33,18 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.buildRule = buildRule;
|
|
36
37
|
exports.handleRule = handleRule;
|
|
37
38
|
const fs = __importStar(require("fs"));
|
|
38
39
|
const path = __importStar(require("path"));
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (parent === current)
|
|
48
|
-
return null;
|
|
49
|
-
current = parent;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
function handleRule(opts) {
|
|
53
|
-
const cwd = process.cwd();
|
|
54
|
-
let devmindDir;
|
|
55
|
-
if (opts.path) {
|
|
56
|
-
const resolved = path.resolve(opts.path);
|
|
57
|
-
devmindDir = fs.existsSync(path.join(resolved, 'config.json')) ? resolved : null;
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
devmindDir = findDevmindDir(cwd);
|
|
61
|
-
}
|
|
62
|
-
if (!devmindDir) {
|
|
63
|
-
console.error(`❌ No .devmind directory found.\n` +
|
|
64
|
-
` Run from inside a DevsMind brain folder, or pass --path <devmind_path>.`);
|
|
65
|
-
process.exit(1);
|
|
66
|
-
}
|
|
67
|
-
const configPath = path.join(devmindDir, 'config.json');
|
|
68
|
-
let config;
|
|
69
|
-
try {
|
|
70
|
-
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
console.error(`❌ Failed to read config.json at ${configPath}`);
|
|
74
|
-
process.exit(1);
|
|
75
|
-
}
|
|
40
|
+
const config_1 = require("../utils/config");
|
|
41
|
+
const prompt_1 = require("./integrations/prompt");
|
|
42
|
+
const registry_1 = require("./integrations/registry");
|
|
43
|
+
/**
|
|
44
|
+
* Build the ready-to-paste DevsMind workspace rule from a project's config.
|
|
45
|
+
* Pure string builder — no I/O — so it can be printed or written to a file.
|
|
46
|
+
*/
|
|
47
|
+
function buildRule(config, devmindDir) {
|
|
76
48
|
const projectName = config.project_name;
|
|
77
49
|
const mode = config.mode;
|
|
78
50
|
const notes = config.notes;
|
|
@@ -176,7 +148,9 @@ function handleRule(opts) {
|
|
|
176
148
|
'',
|
|
177
149
|
'> All tool argument schemas are exposed automatically by the MCP server.'
|
|
178
150
|
];
|
|
179
|
-
|
|
151
|
+
return lines.filter(l => l !== null).join('\n');
|
|
152
|
+
}
|
|
153
|
+
function printRuleBanner(rule, projectName, tip) {
|
|
180
154
|
const divider = '═'.repeat(70);
|
|
181
155
|
console.log(`\n${divider}`);
|
|
182
156
|
console.log(` DevsMind Workspace Rule — "${projectName}"`);
|
|
@@ -184,8 +158,86 @@ function handleRule(opts) {
|
|
|
184
158
|
console.log(`${divider}\n`);
|
|
185
159
|
console.log(rule);
|
|
186
160
|
console.log(`\n${divider}`);
|
|
187
|
-
|
|
188
|
-
|
|
161
|
+
if (tip) {
|
|
162
|
+
console.log(tip);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.log(` 💡 Tip: save this to .agents/AGENTS.md in your workspace root`);
|
|
166
|
+
console.log(` or paste directly into your IDE's AI rules/instructions panel.`);
|
|
167
|
+
}
|
|
189
168
|
console.log(`${divider}\n`);
|
|
190
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* `devsmind rule` — print the workspace rule and, interactively, help place it
|
|
172
|
+
* in the chosen tool's native rules file (manual snippet or automatic write).
|
|
173
|
+
* Falls back to plain printing when piped/non-TTY or when `--print` is passed,
|
|
174
|
+
* preserving `devsmind rule > file` usage.
|
|
175
|
+
*/
|
|
176
|
+
async function handleRule(opts) {
|
|
177
|
+
const devmindDir = (0, config_1.resolveDevmindDir)(opts.path);
|
|
178
|
+
if (!devmindDir) {
|
|
179
|
+
console.error(`❌ No .devmind directory found.\n` +
|
|
180
|
+
` Run from inside a DevsMind brain folder, or pass --path <devmind_path>.`);
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
const configPath = path.join(devmindDir, 'config.json');
|
|
184
|
+
let config;
|
|
185
|
+
try {
|
|
186
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
console.error(`❌ Failed to read config.json at ${configPath}`);
|
|
190
|
+
process.exit(1);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const rule = buildRule(config, devmindDir);
|
|
194
|
+
const projectName = config.project_name;
|
|
195
|
+
// Backward-compat: piped/redirected output or explicit --print → plain print.
|
|
196
|
+
if (opts.print || !process.stdout.isTTY) {
|
|
197
|
+
printRuleBanner(rule, projectName);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const workspaceRoot = path.dirname(devmindDir);
|
|
201
|
+
try {
|
|
202
|
+
const target = await (0, prompt_1.pickTarget)();
|
|
203
|
+
const mode = await (0, prompt_1.pickMode)();
|
|
204
|
+
if (mode === 'manual') {
|
|
205
|
+
const scope = target.rules.scopes[0];
|
|
206
|
+
const file = (0, registry_1.resolveScopeFile)(scope.file, scope.scope, workspaceRoot);
|
|
207
|
+
const noteFrontmatter = target.rules.wrap
|
|
208
|
+
? '\n (this file needs frontmatter — automatic mode adds it for you)'
|
|
209
|
+
: '';
|
|
210
|
+
printRuleBanner(rule, projectName, ` 💡 Save this to ${file.replace(/\\/g, '/')}${noteFrontmatter}`);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
// Automatic mode.
|
|
214
|
+
const scope = await (0, prompt_1.pickRuleScope)(target);
|
|
215
|
+
let filePath;
|
|
216
|
+
if (scope.scope === 'project') {
|
|
217
|
+
const base = await (0, prompt_1.pickDirectory)(workspaceRoot, `Where is the project root for ${target.label}?`);
|
|
218
|
+
filePath = path.join(base, (0, registry_1.resolveOsPath)(scope.file));
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
filePath = (0, registry_1.resolveScopeFile)(scope.file, 'global', workspaceRoot);
|
|
222
|
+
}
|
|
223
|
+
const merged = (0, prompt_1.mergeRuleFile)(filePath, rule, target.rules.style, target.rules.wrap);
|
|
224
|
+
console.log(`\n📝 Target: ${filePath.replace(/\\/g, '/')} (${merged.existed ? (target.rules.style === 'append-section' ? 'merge DevsMind block into existing' : 'overwrite dedicated file') : 'create new'})`);
|
|
225
|
+
console.log(`\n${target.rules.style === 'append-section' ? 'The DevsMind block to be written:' : 'File contents to be written:'}\n`);
|
|
226
|
+
console.log(merged.preview.split('\n').map(l => ' ' + l).join('\n'));
|
|
227
|
+
const ok = await (0, prompt_1.confirmPrompt)('Write this?', true);
|
|
228
|
+
if (!ok) {
|
|
229
|
+
console.log('\nAborted — nothing written.');
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
(0, prompt_1.writeConfigFile)(filePath, merged.content);
|
|
233
|
+
console.log(`\n✅ DevsMind rule written to ${filePath.replace(/\\/g, '/')} for ${target.label}.`);
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
if (err instanceof prompt_1.CancelledError) {
|
|
237
|
+
console.log('\nCancelled.');
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
throw err;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
191
243
|
//# sourceMappingURL=rule.js.map
|
package/dist/cli/rule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/cli/rule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/cli/rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `devsmind sync` — force the on-disk graph (`graph/**`) and history
|
|
3
|
+
* (`history/*.json`) into the local `brain.db`.
|
|
4
|
+
*
|
|
5
|
+
* Under `--stdio` (VS Code and other IDE-managed setups) the MCP process is
|
|
6
|
+
* spawned by the editor and never serves the HTTP routes that would otherwise
|
|
7
|
+
* trigger a sync, and the DB's constructor-time `syncFromDisk()` only runs once
|
|
8
|
+
* per process. So after a `git pull` the committed graph changes never reach the
|
|
9
|
+
* local DB without a restart. This command applies them on demand.
|
|
10
|
+
*/
|
|
11
|
+
export declare function handleSync(opts: {
|
|
12
|
+
path?: string;
|
|
13
|
+
}): Promise<void>;
|