@context-forge/mcp 0.6.10 → 0.6.11
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/dist/tools/introspectionTools.d.ts.map +1 -1
- package/dist/tools/introspectionTools.js +73 -24
- package/dist/tools/introspectionTools.js.map +1 -1
- package/dist/tools/resolveOperationPath.d.ts +16 -0
- package/dist/tools/resolveOperationPath.d.ts.map +1 -0
- package/dist/tools/resolveOperationPath.js +34 -0
- package/dist/tools/resolveOperationPath.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"introspectionTools.d.ts","sourceRoot":"","sources":["../../src/tools/introspectionTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"introspectionTools.d.ts","sourceRoot":"","sources":["../../src/tools/introspectionTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwFpE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0OlE"}
|
|
@@ -2,6 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import { FileProjectStore, ArtifactIntrospector, buildModel, } from '@context-forge/core/node';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { resolveProjectId } from './resolveProjectId.js';
|
|
5
|
+
import { resolveOperationContext } from './resolveOperationPath.js';
|
|
5
6
|
function errorResult(message) {
|
|
6
7
|
return { content: [{ type: 'text', text: message }], isError: true };
|
|
7
8
|
}
|
|
@@ -20,23 +21,13 @@ async function resolveIntrospectionPath(args) {
|
|
|
20
21
|
if (!args.path) {
|
|
21
22
|
throw new Error('Either filePath (absolute) or projectId + path (relative) must be provided.');
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
throw new Error(`Project '${resolvedId}' has no projectPath configured. Set it with project_update.`);
|
|
31
|
-
}
|
|
32
|
-
return join(project.projectPath, args.path);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Resolve a project's absolute path from projectId or explicit projectPath.
|
|
36
|
-
*/
|
|
37
|
-
async function resolveProjectPath(args) {
|
|
38
|
-
if (args.projectPath) {
|
|
39
|
-
return args.projectPath;
|
|
24
|
+
// Use worktree-aware resolution when worktreeId is provided
|
|
25
|
+
if (args.worktreeId) {
|
|
26
|
+
const { operationPath } = await resolveOperationContext({
|
|
27
|
+
projectId: args.projectId,
|
|
28
|
+
worktreeId: args.worktreeId,
|
|
29
|
+
});
|
|
30
|
+
return join(operationPath, args.path);
|
|
40
31
|
}
|
|
41
32
|
const resolvedId = await resolveProjectId(args.projectId);
|
|
42
33
|
const store = new FileProjectStore();
|
|
@@ -47,7 +38,7 @@ async function resolveProjectPath(args) {
|
|
|
47
38
|
if (!project.projectPath) {
|
|
48
39
|
throw new Error(`Project '${resolvedId}' has no projectPath configured. Set it with project_update.`);
|
|
49
40
|
}
|
|
50
|
-
return project.projectPath;
|
|
41
|
+
return join(project.projectPath, args.path);
|
|
51
42
|
}
|
|
52
43
|
// Common input schema fragments
|
|
53
44
|
const filePathSchema = {
|
|
@@ -63,6 +54,10 @@ const filePathSchema = {
|
|
|
63
54
|
.string()
|
|
64
55
|
.optional()
|
|
65
56
|
.describe('Absolute path to the target file. Overrides projectId + path.'),
|
|
57
|
+
worktreeId: z
|
|
58
|
+
.string()
|
|
59
|
+
.optional()
|
|
60
|
+
.describe('Worktree name or ID. Omit to use project root.'),
|
|
66
61
|
};
|
|
67
62
|
export function registerIntrospectionTools(server) {
|
|
68
63
|
// --- introspection_slice_plan ---
|
|
@@ -77,6 +72,18 @@ export function registerIntrospectionTools(server) {
|
|
|
77
72
|
const resolved = await resolveIntrospectionPath(args);
|
|
78
73
|
const introspector = new ArtifactIntrospector();
|
|
79
74
|
const result = await introspector.parseSlicePlan(resolved);
|
|
75
|
+
// Filter by worktree index range if applicable
|
|
76
|
+
if (args.worktreeId) {
|
|
77
|
+
const { indexRange } = await resolveOperationContext({
|
|
78
|
+
projectId: args.projectId,
|
|
79
|
+
worktreeId: args.worktreeId,
|
|
80
|
+
});
|
|
81
|
+
if (indexRange) {
|
|
82
|
+
result.entries = result.entries.filter((e) => e.index >= indexRange[0] && e.index <= indexRange[1]);
|
|
83
|
+
result.totalSlices = result.entries.length;
|
|
84
|
+
result.completedSlices = result.entries.filter((e) => e.isChecked).length;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
80
87
|
return jsonResult(result);
|
|
81
88
|
}
|
|
82
89
|
catch (error) {
|
|
@@ -136,6 +143,10 @@ export function registerIntrospectionTools(server) {
|
|
|
136
143
|
.string()
|
|
137
144
|
.optional()
|
|
138
145
|
.describe('Absolute path to project root. Overrides projectId.'),
|
|
146
|
+
worktreeId: z
|
|
147
|
+
.string()
|
|
148
|
+
.optional()
|
|
149
|
+
.describe('Worktree name or ID. Omit to use project root.'),
|
|
139
150
|
sliceIndex: z
|
|
140
151
|
.number()
|
|
141
152
|
.describe('Numeric slice index to check (e.g., 163).'),
|
|
@@ -143,10 +154,17 @@ export function registerIntrospectionTools(server) {
|
|
|
143
154
|
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
144
155
|
}, async (args) => {
|
|
145
156
|
try {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
157
|
+
let resolved;
|
|
158
|
+
if (args.projectPath) {
|
|
159
|
+
resolved = args.projectPath;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
const ctx = await resolveOperationContext({
|
|
163
|
+
projectId: args.projectId,
|
|
164
|
+
worktreeId: args.worktreeId,
|
|
165
|
+
});
|
|
166
|
+
resolved = ctx.operationPath;
|
|
167
|
+
}
|
|
150
168
|
const introspector = new ArtifactIntrospector();
|
|
151
169
|
const result = await introspector.detectDocuments(resolved, args.sliceIndex);
|
|
152
170
|
return jsonResult(result);
|
|
@@ -174,6 +192,21 @@ export function registerIntrospectionTools(server) {
|
|
|
174
192
|
const resolved = await resolveIntrospectionPath(args);
|
|
175
193
|
const introspector = new ArtifactIntrospector();
|
|
176
194
|
const result = await introspector.parseFutureWork(resolved, args.nextIndex);
|
|
195
|
+
// Filter by worktree index range if applicable
|
|
196
|
+
if (args.worktreeId) {
|
|
197
|
+
const { indexRange } = await resolveOperationContext({
|
|
198
|
+
projectId: args.projectId,
|
|
199
|
+
worktreeId: args.worktreeId,
|
|
200
|
+
});
|
|
201
|
+
if (indexRange && result.items) {
|
|
202
|
+
result.items = result.items.filter((item) => {
|
|
203
|
+
if (!item.index)
|
|
204
|
+
return true;
|
|
205
|
+
const idx = parseInt(item.index, 10);
|
|
206
|
+
return isNaN(idx) || (idx >= indexRange[0] && idx <= indexRange[1]);
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
177
210
|
return jsonResult(result);
|
|
178
211
|
}
|
|
179
212
|
catch (error) {
|
|
@@ -193,17 +226,33 @@ export function registerIntrospectionTools(server) {
|
|
|
193
226
|
.string()
|
|
194
227
|
.optional()
|
|
195
228
|
.describe('Project ID. Omit to resolve from CWD.'),
|
|
229
|
+
worktreeId: z
|
|
230
|
+
.string()
|
|
231
|
+
.optional()
|
|
232
|
+
.describe('Worktree name or ID. Omit to use project root.'),
|
|
196
233
|
name: z.string().optional().describe('Override project name in output.'),
|
|
197
234
|
description: z.string().optional().describe('Override project description in output.'),
|
|
198
235
|
},
|
|
199
236
|
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
200
237
|
}, async (args) => {
|
|
201
238
|
try {
|
|
202
|
-
const
|
|
203
|
-
|
|
239
|
+
const { operationPath, indexRange } = await resolveOperationContext({
|
|
240
|
+
projectId: args.projectId,
|
|
241
|
+
worktreeId: args.worktreeId,
|
|
242
|
+
});
|
|
243
|
+
const result = await buildModel(operationPath, {
|
|
204
244
|
name: args.name,
|
|
205
245
|
description: args.description,
|
|
206
246
|
});
|
|
247
|
+
// Filter initiatives by index range when in a non-default worktree
|
|
248
|
+
if (indexRange) {
|
|
249
|
+
for (const key of Object.keys(result.initiatives)) {
|
|
250
|
+
const idx = parseInt(key, 10);
|
|
251
|
+
if (idx < indexRange[0] || idx > indexRange[1]) {
|
|
252
|
+
delete result.initiatives[key];
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
207
256
|
return jsonResult(result);
|
|
208
257
|
}
|
|
209
258
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"introspectionTools.js","sourceRoot":"","sources":["../../src/tools/introspectionTools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,GACX,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"introspectionTools.js","sourceRoot":"","sources":["../../src/tools/introspectionTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ResolvedOperation {
|
|
2
|
+
operationPath: string;
|
|
3
|
+
indexRange?: [number, number];
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Resolve the operation path and optional index range for a worktree-aware
|
|
7
|
+
* MCP tool call. When worktreeId is provided, looks up the worktree by
|
|
8
|
+
* ID or name and returns its path and index range.
|
|
9
|
+
*
|
|
10
|
+
* For the default worktree, indexRange is undefined (no filtering).
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveOperationContext(args: {
|
|
13
|
+
projectId?: string;
|
|
14
|
+
worktreeId?: string;
|
|
15
|
+
}): Promise<ResolvedOperation>;
|
|
16
|
+
//# sourceMappingURL=resolveOperationPath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveOperationPath.d.ts","sourceRoot":"","sources":["../../src/tools/resolveOperationPath.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,iBAAiB,CAAC,CAoC5B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { FileProjectStore } from '@context-forge/core/node';
|
|
2
|
+
import { resolveProjectId } from './resolveProjectId.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the operation path and optional index range for a worktree-aware
|
|
5
|
+
* MCP tool call. When worktreeId is provided, looks up the worktree by
|
|
6
|
+
* ID or name and returns its path and index range.
|
|
7
|
+
*
|
|
8
|
+
* For the default worktree, indexRange is undefined (no filtering).
|
|
9
|
+
*/
|
|
10
|
+
export async function resolveOperationContext(args) {
|
|
11
|
+
const resolvedId = await resolveProjectId(args.projectId);
|
|
12
|
+
const store = new FileProjectStore();
|
|
13
|
+
const project = await store.getById(resolvedId);
|
|
14
|
+
if (!project) {
|
|
15
|
+
throw new Error(`Project not found: '${resolvedId}'. Use the project_list tool to see available projects.`);
|
|
16
|
+
}
|
|
17
|
+
if (!project.projectPath) {
|
|
18
|
+
throw new Error(`Project '${resolvedId}' has no projectPath configured. Set it with project_update.`);
|
|
19
|
+
}
|
|
20
|
+
if (!args.worktreeId) {
|
|
21
|
+
return { operationPath: project.projectPath };
|
|
22
|
+
}
|
|
23
|
+
if (!project.worktrees) {
|
|
24
|
+
return { operationPath: project.projectPath };
|
|
25
|
+
}
|
|
26
|
+
const wt = project.worktrees.find((w) => w.id === args.worktreeId || w.name.toLowerCase() === args.worktreeId.toLowerCase());
|
|
27
|
+
if (!wt) {
|
|
28
|
+
return { operationPath: project.projectPath };
|
|
29
|
+
}
|
|
30
|
+
const operationPath = wt.worktreePath ?? project.projectPath;
|
|
31
|
+
const indexRange = wt.name === 'default' ? undefined : wt.indexRange;
|
|
32
|
+
return { operationPath, indexRange };
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=resolveOperationPath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveOperationPath.js","sourceRoot":"","sources":["../../src/tools/resolveOperationPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAOzD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAiD;IAEjD,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,uBAAuB,UAAU,yDAAyD,CAC3F,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,YAAY,UAAU,8DAA8D,CACrF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,UAAW,CAAC,WAAW,EAAE,CAC3F,CAAC;IAEF,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC;IAC7D,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;IACrE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACvC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@context-forge/mcp",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.11",
|
|
4
4
|
"description": "MCP server for Context Forge — generates structured AI context prompts from project configuration and templates",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
36
36
|
"zod": "^4.1.5",
|
|
37
|
-
"@context-forge/core": "0.6.
|
|
37
|
+
"@context-forge/core": "0.6.11"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^25.3.0",
|