@context-forge/mcp 0.4.1 → 0.5.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/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/contextTools.d.ts.map +1 -1
- package/dist/tools/contextTools.js +100 -38
- package/dist/tools/contextTools.js.map +1 -1
- package/dist/tools/projectTools.d.ts.map +1 -1
- package/dist/tools/projectTools.js +82 -5
- package/dist/tools/projectTools.js.map +1 -1
- package/dist/tools/workflowTools.d.ts.map +1 -1
- package/dist/tools/workflowTools.js +64 -5
- package/dist/tools/workflowTools.js.map +1 -1
- package/dist/tools/worktreeTools.d.ts +3 -0
- package/dist/tools/worktreeTools.d.ts.map +1 -0
- package/dist/tools/worktreeTools.js +235 -0
- package/dist/tools/worktreeTools.js.map +1 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ import { registerStateTools } from './tools/stateTools.js';
|
|
|
10
10
|
import { registerConfigTools } from './tools/configTools.js';
|
|
11
11
|
import { registerIntrospectionTools } from './tools/introspectionTools.js';
|
|
12
12
|
import { registerWorkflowTools } from './tools/workflowTools.js';
|
|
13
|
+
import { registerWorktreeTools } from './tools/worktreeTools.js';
|
|
13
14
|
import { registerVersionTool } from './tools/versionTool.js';
|
|
14
15
|
import { registerGuideTools } from './tools/guideTools.js';
|
|
15
16
|
const require = createRequire(import.meta.url);
|
|
@@ -29,6 +30,7 @@ async function main() {
|
|
|
29
30
|
registerConfigTools(server);
|
|
30
31
|
registerIntrospectionTools(server);
|
|
31
32
|
registerWorkflowTools(server);
|
|
33
|
+
registerWorktreeTools(server);
|
|
32
34
|
registerGuideTools(server);
|
|
33
35
|
registerVersionTool(server, SERVER_NAME, SERVER_VERSION);
|
|
34
36
|
const transport = new StdioServerTransport();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,qEAAqE;AACrE,2CAA2C;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AACtF,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAExC,SAAS,GAAG,CAAC,OAAe;IAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAEzD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACxB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,kBAAkB,OAAO,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,qEAAqE;AACrE,2CAA2C;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AACtF,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAExC,SAAS,GAAG,CAAC,OAAe;IAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAEzD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACxB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,kBAAkB,OAAO,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextTools.d.ts","sourceRoot":"","sources":["../../src/tools/contextTools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contextTools.d.ts","sourceRoot":"","sources":["../../src/tools/contextTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKvD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAEzG;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAEtF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAEvF;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAChC,sBAAsB,CAAC,EAAE,MAAM,GAC9B,OAAO,CAAC,MAAM,CAAC,CAkCjB;AAoCD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqN5D"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import * as path from 'node:path';
|
|
2
1
|
import { z } from 'zod';
|
|
3
|
-
import { FileProjectStore, createContextPipeline, SystemPromptParser } from '@context-forge/core/node';
|
|
2
|
+
import { FileProjectStore, createContextPipeline, SystemPromptParser, resolvePromptFilePath, WorktreeService } from '@context-forge/core/node';
|
|
4
3
|
import { resolveProjectId } from './resolveProjectId.js';
|
|
5
|
-
import {
|
|
4
|
+
import { applyWorktreeOverlay } from '@context-forge/core';
|
|
6
5
|
// --- Shared helpers ---
|
|
7
6
|
export function errorResult(message) {
|
|
8
7
|
return { content: [{ type: 'text', text: message }], isError: true };
|
|
@@ -51,8 +50,28 @@ const contextOverridesSchema = {
|
|
|
51
50
|
instructionType: z.string().optional().describe('Override instruction type for profile-aware filtering (ephemeral — does not write to store). Takes precedence over instruction if both are provided.'),
|
|
52
51
|
developmentPhase: z.string().optional().describe('Override the current development phase'),
|
|
53
52
|
workType: z.enum(['start', 'continue']).optional().describe('Override whether starting or continuing work'),
|
|
53
|
+
worktree: z.string().optional().describe('Worktree ID or name. When provided, overlays worktree fields onto the project before applying explicit overrides.'),
|
|
54
54
|
additionalInstructions: z.string().optional().describe('Additional instructions to append to the generated context'),
|
|
55
55
|
};
|
|
56
|
+
/**
|
|
57
|
+
* Resolve the prompt file path for prompt_list/prompt_get.
|
|
58
|
+
* Tries project-local first; falls back to bundled prompt when no project is available.
|
|
59
|
+
*/
|
|
60
|
+
async function resolvePromptFileForTools(projectId) {
|
|
61
|
+
try {
|
|
62
|
+
const resolvedId = await resolveProjectId(projectId);
|
|
63
|
+
const store = new FileProjectStore();
|
|
64
|
+
const project = await store.getById(resolvedId);
|
|
65
|
+
if (project?.projectPath) {
|
|
66
|
+
return resolvePromptFilePath(project.projectPath);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// No project resolved — fall through to bundled
|
|
71
|
+
}
|
|
72
|
+
// Fall back to bundled prompt
|
|
73
|
+
return resolvePromptFilePath();
|
|
74
|
+
}
|
|
56
75
|
// --- Tool registration ---
|
|
57
76
|
export function registerContextTools(server) {
|
|
58
77
|
// --- context_build ---
|
|
@@ -61,20 +80,53 @@ export function registerContextTools(server) {
|
|
|
61
80
|
description: 'Build a complete context prompt for a Context Forge project. This is the primary tool for generating structured context blocks. Optionally override project parameters (fileSlice, instruction, etc.) without modifying the stored project. Returns the assembled context ready for use.',
|
|
62
81
|
inputSchema: contextOverridesSchema,
|
|
63
82
|
annotations: { readOnlyHint: false, idempotentHint: true, openWorldHint: false },
|
|
64
|
-
}, async ({ projectId, additionalInstructions, instructionType, ...overrideFields }) => {
|
|
83
|
+
}, async ({ projectId, additionalInstructions, instructionType, worktree: worktreeIdOrName, ...overrideFields }) => {
|
|
65
84
|
try {
|
|
66
85
|
const resolvedId = await resolveProjectId(projectId);
|
|
67
|
-
//
|
|
68
|
-
|
|
86
|
+
// When worktree is specified, apply overlay before explicit overrides
|
|
87
|
+
let worktreeOverrides;
|
|
88
|
+
if (worktreeIdOrName) {
|
|
89
|
+
const store = new FileProjectStore();
|
|
90
|
+
const project = await store.getById(resolvedId);
|
|
91
|
+
if (!project) {
|
|
92
|
+
return errorResult(`Project not found: '${resolvedId}'. Use the project_list tool to see available projects.`);
|
|
93
|
+
}
|
|
94
|
+
const service = new WorktreeService(store);
|
|
95
|
+
let wt = await service.getWorktree(resolvedId, worktreeIdOrName);
|
|
96
|
+
if (!wt) {
|
|
97
|
+
wt = await service.getWorktreeByName(resolvedId, worktreeIdOrName);
|
|
98
|
+
}
|
|
99
|
+
if (!wt) {
|
|
100
|
+
return errorResult(`Worktree '${worktreeIdOrName}' not found. Use worktree_list to see available worktrees.`);
|
|
101
|
+
}
|
|
102
|
+
// Build overlay as overrides — generateContext will apply them
|
|
103
|
+
const overlaid = applyWorktreeOverlay(project, wt.id);
|
|
104
|
+
worktreeOverrides = {
|
|
105
|
+
fileSlice: overlaid.fileSlice,
|
|
106
|
+
fileTasks: overlaid.fileTasks,
|
|
107
|
+
instruction: overlaid.instruction,
|
|
108
|
+
developmentPhase: overlaid.developmentPhase,
|
|
109
|
+
workType: overlaid.workType,
|
|
110
|
+
fileArch: overlaid.fileArch,
|
|
111
|
+
fileSlicePlan: overlaid.fileSlicePlan,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Collect defined explicit overrides (these win over worktree overlay)
|
|
115
|
+
const explicitOverrides = {};
|
|
69
116
|
for (const [key, value] of Object.entries(overrideFields)) {
|
|
70
117
|
if (value !== undefined) {
|
|
71
|
-
|
|
118
|
+
explicitOverrides[key] = value;
|
|
72
119
|
}
|
|
73
120
|
}
|
|
74
121
|
if (instructionType !== undefined) {
|
|
75
|
-
|
|
122
|
+
explicitOverrides.instruction = instructionType;
|
|
76
123
|
}
|
|
77
|
-
|
|
124
|
+
// Merge: worktree overlay first, then explicit overrides win
|
|
125
|
+
const mergedOverrides = {
|
|
126
|
+
...worktreeOverrides,
|
|
127
|
+
...explicitOverrides,
|
|
128
|
+
};
|
|
129
|
+
const contextString = await generateContext(resolvedId, Object.keys(mergedOverrides).length > 0 ? mergedOverrides : undefined, additionalInstructions);
|
|
78
130
|
return textResult(contextString);
|
|
79
131
|
}
|
|
80
132
|
catch (error) {
|
|
@@ -88,16 +140,44 @@ export function registerContextTools(server) {
|
|
|
88
140
|
description: 'Preview a context prompt with specified parameters without modifying the stored project or triggering any side effects. Use this to explore what context would be generated with different configurations before committing to a context_build.',
|
|
89
141
|
inputSchema: contextOverridesSchema,
|
|
90
142
|
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
|
|
91
|
-
}, async ({ projectId, additionalInstructions, ...overrideFields }) => {
|
|
143
|
+
}, async ({ projectId, additionalInstructions, worktree: wtIdOrName, instructionType, ...overrideFields }) => {
|
|
92
144
|
try {
|
|
93
145
|
const resolvedId = await resolveProjectId(projectId);
|
|
94
|
-
|
|
146
|
+
// Worktree overlay (same logic as context_build)
|
|
147
|
+
let worktreeOverrides;
|
|
148
|
+
if (wtIdOrName) {
|
|
149
|
+
const store = new FileProjectStore();
|
|
150
|
+
const project = await store.getById(resolvedId);
|
|
151
|
+
if (project) {
|
|
152
|
+
const service = new WorktreeService(store);
|
|
153
|
+
let wt = await service.getWorktree(resolvedId, wtIdOrName);
|
|
154
|
+
if (!wt)
|
|
155
|
+
wt = await service.getWorktreeByName(resolvedId, wtIdOrName);
|
|
156
|
+
if (wt) {
|
|
157
|
+
const overlaid = applyWorktreeOverlay(project, wt.id);
|
|
158
|
+
worktreeOverrides = {
|
|
159
|
+
fileSlice: overlaid.fileSlice,
|
|
160
|
+
fileTasks: overlaid.fileTasks,
|
|
161
|
+
instruction: overlaid.instruction,
|
|
162
|
+
developmentPhase: overlaid.developmentPhase,
|
|
163
|
+
workType: overlaid.workType,
|
|
164
|
+
fileArch: overlaid.fileArch,
|
|
165
|
+
fileSlicePlan: overlaid.fileSlicePlan,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const explicitOverrides = {};
|
|
95
171
|
for (const [key, value] of Object.entries(overrideFields)) {
|
|
96
172
|
if (value !== undefined) {
|
|
97
|
-
|
|
173
|
+
explicitOverrides[key] = value;
|
|
98
174
|
}
|
|
99
175
|
}
|
|
100
|
-
|
|
176
|
+
if (instructionType !== undefined) {
|
|
177
|
+
explicitOverrides.instruction = instructionType;
|
|
178
|
+
}
|
|
179
|
+
const mergedOverrides = { ...worktreeOverrides, ...explicitOverrides };
|
|
180
|
+
const contextString = await generateContext(resolvedId, Object.keys(mergedOverrides).length > 0 ? mergedOverrides : undefined, additionalInstructions);
|
|
101
181
|
return textResult(contextString);
|
|
102
182
|
}
|
|
103
183
|
catch (error) {
|
|
@@ -108,23 +188,14 @@ export function registerContextTools(server) {
|
|
|
108
188
|
// --- prompt_list ---
|
|
109
189
|
server.registerTool('prompt_list', {
|
|
110
190
|
title: 'List Prompts',
|
|
111
|
-
description: 'List available prompt templates
|
|
191
|
+
description: 'List available prompt templates. When a project is resolved, prefers the project-local prompt file; otherwise falls back to the bundled prompt shipped with @context-forge/core. Returns template names and metadata. Use prompt_get to retrieve the full content of a specific template.',
|
|
112
192
|
inputSchema: {
|
|
113
|
-
projectId: z.string().optional().describe('Project ID. Use project_list to find IDs. Omit to use default_project config.'),
|
|
193
|
+
projectId: z.string().optional().describe('Project ID. Use project_list to find IDs. Omit to use default_project config. If no project can be resolved, bundled prompts are returned.'),
|
|
114
194
|
},
|
|
115
195
|
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
116
196
|
}, async ({ projectId }) => {
|
|
117
197
|
try {
|
|
118
|
-
const
|
|
119
|
-
const store = new FileProjectStore();
|
|
120
|
-
const project = await store.getById(resolvedId);
|
|
121
|
-
if (!project) {
|
|
122
|
-
return errorResult(`Project not found: '${resolvedId}'. Use the project_list tool to see available projects and their IDs.`);
|
|
123
|
-
}
|
|
124
|
-
if (!project.projectPath) {
|
|
125
|
-
return errorResult(`Project '${project.name}' has no configured project path. Set a project path before listing prompts.`);
|
|
126
|
-
}
|
|
127
|
-
const promptFilePath = path.join(project.projectPath, PROMPT_FILE_RELATIVE_PATH);
|
|
198
|
+
const promptFilePath = await resolvePromptFileForTools(projectId);
|
|
128
199
|
const parser = new SystemPromptParser(promptFilePath);
|
|
129
200
|
const prompts = await parser.getAllPrompts();
|
|
130
201
|
const templates = prompts.map((p) => ({
|
|
@@ -142,31 +213,22 @@ export function registerContextTools(server) {
|
|
|
142
213
|
// --- prompt_get ---
|
|
143
214
|
server.registerTool('prompt_get', {
|
|
144
215
|
title: 'Get Prompt',
|
|
145
|
-
description: 'Get the full content of a specific prompt template.
|
|
216
|
+
description: 'Get the full content of a specific prompt template. When a project is resolved, prefers the project-local prompt file; otherwise falls back to the bundled prompt. Returns the raw template text.',
|
|
146
217
|
inputSchema: {
|
|
147
|
-
projectId: z.string().optional().describe('Project ID. Use project_list to find IDs. Omit to use default_project config.'),
|
|
218
|
+
projectId: z.string().optional().describe('Project ID. Use project_list to find IDs. Omit to use default_project config. If no project can be resolved, bundled prompts are used.'),
|
|
148
219
|
templateName: z.string().describe('Template name or key to match. Use prompt_list to see available templates.'),
|
|
149
220
|
},
|
|
150
221
|
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
151
222
|
}, async ({ projectId, templateName }) => {
|
|
152
223
|
try {
|
|
153
|
-
const
|
|
154
|
-
const store = new FileProjectStore();
|
|
155
|
-
const project = await store.getById(resolvedId);
|
|
156
|
-
if (!project) {
|
|
157
|
-
return errorResult(`Project not found: '${resolvedId}'. Use the project_list tool to see available projects and their IDs.`);
|
|
158
|
-
}
|
|
159
|
-
if (!project.projectPath) {
|
|
160
|
-
return errorResult(`Project '${project.name}' has no configured project path. Set a project path before retrieving prompts.`);
|
|
161
|
-
}
|
|
162
|
-
const promptFilePath = path.join(project.projectPath, PROMPT_FILE_RELATIVE_PATH);
|
|
224
|
+
const promptFilePath = await resolvePromptFileForTools(projectId);
|
|
163
225
|
const parser = new SystemPromptParser(promptFilePath);
|
|
164
226
|
const prompts = await parser.getAllPrompts();
|
|
165
227
|
// Match by name (case-insensitive) or key (exact)
|
|
166
228
|
const templateNameLower = templateName.toLowerCase();
|
|
167
229
|
const match = prompts.find((p) => p.name.toLowerCase() === templateNameLower || p.key === templateName);
|
|
168
230
|
if (!match) {
|
|
169
|
-
return errorResult(`Template not found: '${templateName}'. Use the prompt_list tool to see available templates
|
|
231
|
+
return errorResult(`Template not found: '${templateName}'. Use the prompt_list tool to see available templates.`);
|
|
170
232
|
}
|
|
171
233
|
// Return metadata header followed by template content
|
|
172
234
|
const header = `# ${match.name}\nKey: ${match.key}\nParameters: ${match.parameters.join(', ') || 'none'}\n\n---\n\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextTools.js","sourceRoot":"","sources":["../../src/tools/contextTools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contextTools.js","sourceRoot":"","sources":["../../src/tools/contextTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectTools.d.ts","sourceRoot":"","sources":["../../src/tools/projectTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"projectTools.d.ts","sourceRoot":"","sources":["../../src/tools/projectTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4DpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0P5D"}
|
|
@@ -1,7 +1,27 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { FileProjectStore, ArtifactIntrospector, resolveFileByIndex } from '@context-forge/core/node';
|
|
2
|
+
import { FileProjectStore, ArtifactIntrospector, resolveFileByIndex, WorktreeService } from '@context-forge/core/node';
|
|
3
3
|
import { getSchema } from '@context-forge/core';
|
|
4
4
|
import { resolveProjectId } from './resolveProjectId.js';
|
|
5
|
+
/** Fields that are routed to the worktree context when worktreeId is provided. */
|
|
6
|
+
const WORKTREE_SCOPED_FIELDS = new Set([
|
|
7
|
+
'developmentPhase',
|
|
8
|
+
'instruction',
|
|
9
|
+
'workType',
|
|
10
|
+
'fileArch',
|
|
11
|
+
'fileSlicePlan',
|
|
12
|
+
'fileSlice',
|
|
13
|
+
'fileTasks',
|
|
14
|
+
]);
|
|
15
|
+
/** Map ProjectData field names to their WorktreeContext counterparts. */
|
|
16
|
+
const PROJECT_TO_WORKTREE_FIELD = {
|
|
17
|
+
fileSlice: 'activeSlice',
|
|
18
|
+
fileTasks: 'activeTaskFile',
|
|
19
|
+
fileArch: 'archDoc',
|
|
20
|
+
fileSlicePlan: 'slicePlan',
|
|
21
|
+
developmentPhase: 'developmentPhase',
|
|
22
|
+
instruction: 'instruction',
|
|
23
|
+
workType: 'workType',
|
|
24
|
+
};
|
|
5
25
|
function toSummary(project) {
|
|
6
26
|
return {
|
|
7
27
|
id: project.id,
|
|
@@ -80,6 +100,7 @@ export function registerProjectTools(server) {
|
|
|
80
100
|
description: 'Update configuration fields on an existing Context Forge project. Provide the project ID and any fields to change (e.g., fileSlice, instruction, developmentPhase). Returns the full updated project. Does not delete or replace — only modifies specified fields.',
|
|
81
101
|
inputSchema: {
|
|
82
102
|
id: z.string().optional().describe('Project ID to update. Omit to use default_project config.'),
|
|
103
|
+
worktreeId: z.string().optional().describe('Worktree ID or name. When provided, workflow fields (fileSlice, instruction, etc.) are routed to the worktree context instead of the project.'),
|
|
83
104
|
name: z.string().optional().describe('Project display name'),
|
|
84
105
|
template: z.string().optional().describe('Template name'),
|
|
85
106
|
fileSlice: z.string().optional().describe('Current slice name'),
|
|
@@ -104,17 +125,17 @@ export function registerProjectTools(server) {
|
|
|
104
125
|
.describe('Custom data fields for context generation'),
|
|
105
126
|
},
|
|
106
127
|
annotations: { destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
107
|
-
}, async ({ id, ...fields }) => {
|
|
128
|
+
}, async ({ id, worktreeId, ...fields }) => {
|
|
108
129
|
try {
|
|
109
130
|
const resolvedId = await resolveProjectId(id);
|
|
110
131
|
// Collect defined update fields (exclude undefined values)
|
|
111
|
-
const
|
|
132
|
+
const allUpdates = {};
|
|
112
133
|
for (const [key, value] of Object.entries(fields)) {
|
|
113
134
|
if (value !== undefined) {
|
|
114
|
-
|
|
135
|
+
allUpdates[key] = value;
|
|
115
136
|
}
|
|
116
137
|
}
|
|
117
|
-
if (Object.keys(
|
|
138
|
+
if (Object.keys(allUpdates).length === 0) {
|
|
118
139
|
return errorResult('No update fields provided. Specify at least one field to update (e.g., fileSlice, instruction, name).');
|
|
119
140
|
}
|
|
120
141
|
const store = new FileProjectStore();
|
|
@@ -123,6 +144,62 @@ export function registerProjectTools(server) {
|
|
|
123
144
|
if (!existing) {
|
|
124
145
|
return errorResult(`Project not found: '${resolvedId}'. Use the project_list tool to see available projects and their IDs.`);
|
|
125
146
|
}
|
|
147
|
+
// --- Worktree-aware field routing ---
|
|
148
|
+
if (worktreeId) {
|
|
149
|
+
const service = new WorktreeService(store);
|
|
150
|
+
let wt = await service.getWorktree(resolvedId, worktreeId);
|
|
151
|
+
if (!wt) {
|
|
152
|
+
wt = await service.getWorktreeByName(resolvedId, worktreeId);
|
|
153
|
+
}
|
|
154
|
+
if (!wt) {
|
|
155
|
+
return errorResult(`Worktree '${worktreeId}' not found. Use worktree_list to see available worktrees.`);
|
|
156
|
+
}
|
|
157
|
+
// Split fields into worktree-scoped and project-level
|
|
158
|
+
const worktreeUpdates = {};
|
|
159
|
+
const projectUpdates = {};
|
|
160
|
+
for (const [key, value] of Object.entries(allUpdates)) {
|
|
161
|
+
if (WORKTREE_SCOPED_FIELDS.has(key)) {
|
|
162
|
+
const wtKey = PROJECT_TO_WORKTREE_FIELD[key] ?? key;
|
|
163
|
+
worktreeUpdates[wtKey] = value;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
projectUpdates[key] = value;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Auto-set instruction when developmentPhase changes on worktree
|
|
170
|
+
if ('developmentPhase' in worktreeUpdates && !('instruction' in worktreeUpdates)) {
|
|
171
|
+
worktreeUpdates.instruction = worktreeUpdates.developmentPhase;
|
|
172
|
+
}
|
|
173
|
+
// Auto-set activeTaskFile when activeSlice changes on worktree
|
|
174
|
+
if ('activeSlice' in worktreeUpdates && !('activeTaskFile' in worktreeUpdates) && existing.projectPath) {
|
|
175
|
+
const sliceValue = worktreeUpdates.activeSlice;
|
|
176
|
+
const sliceIndex = /^(\d+)-/.exec(sliceValue);
|
|
177
|
+
if (sliceIndex) {
|
|
178
|
+
try {
|
|
179
|
+
const resolved = resolveFileByIndex(existing.projectPath, 'fileTasks', sliceIndex[1]);
|
|
180
|
+
worktreeUpdates.activeTaskFile = resolved;
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
const derived = sliceValue.replace(/^(\d+)-slice\./, '$1-tasks.');
|
|
184
|
+
if (derived !== sliceValue) {
|
|
185
|
+
worktreeUpdates.activeTaskFile = derived;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Apply worktree updates
|
|
191
|
+
if (Object.keys(worktreeUpdates).length > 0) {
|
|
192
|
+
await service.updateWorktree(resolvedId, wt.id, worktreeUpdates);
|
|
193
|
+
}
|
|
194
|
+
// Apply project-level updates
|
|
195
|
+
if (Object.keys(projectUpdates).length > 0) {
|
|
196
|
+
await store.update(resolvedId, projectUpdates);
|
|
197
|
+
}
|
|
198
|
+
const updated = await store.getById(resolvedId);
|
|
199
|
+
return jsonResult({ ...updated, _worktreeUpdated: wt.id });
|
|
200
|
+
}
|
|
201
|
+
// --- Standard (non-worktree) path ---
|
|
202
|
+
const updates = allUpdates;
|
|
126
203
|
// Auto-set instruction when developmentPhase changes (unless instruction is explicitly provided)
|
|
127
204
|
if ('developmentPhase' in updates && !('instruction' in updates)) {
|
|
128
205
|
updates.instruction = updates.developmentPhase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectTools.js","sourceRoot":"","sources":["../../src/tools/projectTools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"projectTools.js","sourceRoot":"","sources":["../../src/tools/projectTools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEvH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,kFAAkF;AAClF,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,kBAAkB;IAClB,aAAa;IACb,UAAU;IACV,UAAU;IACV,eAAe;IACf,WAAW;IACX,WAAW;CACZ,CAAC,CAAC;AAEH,yEAAyE;AACzE,MAAM,yBAAyB,GAA2B;IACxD,SAAS,EAAE,aAAa;IACxB,SAAS,EAAE,gBAAgB;IAC3B,QAAQ,EAAE,SAAS;IACnB,aAAa,EAAE,WAAW;IAC1B,gBAAgB,EAAE,kBAAkB;IACpC,WAAW,EAAE,aAAa;IAC1B,QAAQ,EAAE,UAAU;CACrB,CAAC;AAaF,SAAS,SAAS,CAAC,OAAoB;IACrC,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,uBAAuB;IACvB,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,yMAAyM;QAC3M,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KAC1D,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,WAAW,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,+eAA+e;QACjf,WAAW,EAAE;YACX,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC;SAC9G;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KAC1D,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAChD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,WAAW,CAChB,uBAAuB,UAAU,uEAAuE,CACzG,CAAC;YACJ,CAAC;YAED,0DAA0D;YAC1D,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,IAAI,oBAAoB,EAAE,CAAC;oBAChD,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;oBAC5D,OAAO,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;gBACnD,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBACpB,8DAA8D;oBAC9D,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACvD,OAAO,CAAC,KAAK,CAAC,oCAAoC,UAAU,KAAK,GAAG,EAAE,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;YACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,WAAW,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,oQAAoQ;QACtQ,WAAW,EAAE;YACX,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;YAC/F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+IAA+I,CAAC;YAC3L,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACzD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC/D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC3D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;YACtG,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAC7E,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YAClG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAClE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAC5E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;YAC1F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;YACpG,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;YAC9F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;YAC3F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;YAClG,UAAU,EAAE,CAAC;iBACV,MAAM,CAAC;gBACN,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBACnC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBACtC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aACtC,CAAC;iBACD,QAAQ,EAAE;iBACV,QAAQ,CAAC,2CAA2C,CAAC;SACzD;QACD,WAAW,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACpF,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAE9C,2DAA2D;YAC3D,MAAM,UAAU,GAA4B,EAAE,CAAC;YAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC1B,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzC,OAAO,WAAW,CAChB,uGAAuG,CACxG,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;YAErC,uBAAuB;YACvB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,WAAW,CAChB,uBAAuB,UAAU,uEAAuE,CACzG,CAAC;YACJ,CAAC;YAED,uCAAuC;YACvC,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAC3D,IAAI,CAAC,EAAE,EAAE,CAAC;oBACR,EAAE,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAC/D,CAAC;gBACD,IAAI,CAAC,EAAE,EAAE,CAAC;oBACR,OAAO,WAAW,CAChB,aAAa,UAAU,4DAA4D,CACpF,CAAC;gBACJ,CAAC;gBAED,sDAAsD;gBACtD,MAAM,eAAe,GAAwB,EAAE,CAAC;gBAChD,MAAM,cAAc,GAAsB,EAAE,CAAC;gBAE7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;oBACtD,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACpC,MAAM,KAAK,GAAG,yBAAyB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;wBACnD,eAA2C,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;oBAC9D,CAAC;yBAAM,CAAC;wBACL,cAA0C,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBAC3D,CAAC;gBACH,CAAC;gBAED,iEAAiE;gBACjE,IAAI,kBAAkB,IAAI,eAAe,IAAI,CAAC,CAAC,aAAa,IAAI,eAAe,CAAC,EAAE,CAAC;oBACjF,eAAe,CAAC,WAAW,GAAG,eAAe,CAAC,gBAAgB,CAAC;gBACjE,CAAC;gBAED,+DAA+D;gBAC/D,IAAI,aAAa,IAAI,eAAe,IAAI,CAAC,CAAC,gBAAgB,IAAI,eAAe,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;oBACvG,MAAM,UAAU,GAAG,eAAe,CAAC,WAAqB,CAAC;oBACzD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC9C,IAAI,UAAU,EAAE,CAAC;wBACf,IAAI,CAAC;4BACH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;4BACrF,eAA2C,CAAC,cAAc,GAAG,QAAQ,CAAC;wBACzE,CAAC;wBAAC,MAAM,CAAC;4BACP,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;4BAClE,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;gCAC1B,eAA2C,CAAC,cAAc,GAAG,OAAO,CAAC;4BACxE,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,yBAAyB;gBACzB,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5C,MAAM,OAAO,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;gBACnE,CAAC;gBAED,8BAA8B;gBAC9B,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3C,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;gBACjD,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAChD,OAAO,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7D,CAAC;YAED,uCAAuC;YACvC,MAAM,OAAO,GAAsB,UAA+B,CAAC;YAEnE,iGAAiG;YACjG,IAAI,kBAAkB,IAAI,OAAO,IAAI,CAAC,CAAC,aAAa,IAAI,OAAO,CAAC,EAAE,CAAC;gBAChE,OAAmC,CAAC,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAC9E,CAAC;YAED,sFAAsF;YACtF,IAAI,YAAY,GAAkB,IAAI,CAAC;YACvC,IAAI,WAAW,IAAI,OAAO,IAAI,CAAC,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAChF,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAU,CAAC,CAAC;gBACtD,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,CAAC;wBACH,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtF,CAAC;oBAAC,MAAM,CAAC;wBACP,wDAAwD;wBACxD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAU,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;wBAC1E,IAAI,OAAO,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;4BAClC,YAAY,GAAG,OAAO,CAAC;wBACzB,CAAC;oBACH,CAAC;oBACD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;wBACzB,OAAmC,CAAC,SAAS,GAAG,YAAY,CAAC;oBAChE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAExC,4BAA4B;YAC5B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAChD,MAAM,MAAM,GAA4B,EAAE,GAAG,OAAO,EAAE,CAAC;YACvD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,CAAC,QAAQ,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;YAChD,CAAC;YACD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,WAAW,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,+NAA+N;QACjO,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KAC1D,EACD,KAAK,IAAI,EAAE;QACT,OAAO,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;IACjC,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflowTools.d.ts","sourceRoot":"","sources":["../../src/tools/workflowTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"workflowTools.d.ts","sourceRoot":"","sources":["../../src/tools/workflowTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwBpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyS7D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { FileProjectStore, FutureWorkCollector, WorkflowNavigator, ArtifactIntrospector, ConsistencyChecker, ConfigManager, } from '@context-forge/core/node';
|
|
2
|
+
import { FileProjectStore, FutureWorkCollector, WorkflowNavigator, ArtifactIntrospector, ConsistencyChecker, ConfigManager, getStoragePath, createVersionedBackup, WorktreeService, } from '@context-forge/core/node';
|
|
3
|
+
import { applyWorktreeOverlay } from '@context-forge/core';
|
|
3
4
|
import { resolveProjectId } from './resolveProjectId.js';
|
|
4
5
|
function errorResult(message) {
|
|
5
6
|
return { content: [{ type: 'text', text: message }], isError: true };
|
|
@@ -70,19 +71,37 @@ export function registerWorkflowTools(server) {
|
|
|
70
71
|
.string()
|
|
71
72
|
.optional()
|
|
72
73
|
.describe('Project ID. Omit to use default_project config.'),
|
|
74
|
+
worktreeId: z
|
|
75
|
+
.string()
|
|
76
|
+
.optional()
|
|
77
|
+
.describe('Worktree ID or name. When provided, overlays worktree fields onto the project before computing status.'),
|
|
73
78
|
},
|
|
74
79
|
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
75
80
|
}, async (args) => {
|
|
76
81
|
try {
|
|
77
82
|
const resolvedId = await resolveProjectId(args.projectId);
|
|
78
83
|
const store = new FileProjectStore();
|
|
79
|
-
|
|
84
|
+
let project = await store.getById(resolvedId);
|
|
80
85
|
if (!project) {
|
|
81
86
|
return errorResult(`Project not found: '${resolvedId}'. Use the project_list tool to see available projects.`);
|
|
82
87
|
}
|
|
88
|
+
let worktreeField;
|
|
89
|
+
if (args.worktreeId) {
|
|
90
|
+
const service = new WorktreeService(store);
|
|
91
|
+
let wt = await service.getWorktree(resolvedId, args.worktreeId);
|
|
92
|
+
if (!wt) {
|
|
93
|
+
wt = await service.getWorktreeByName(resolvedId, args.worktreeId);
|
|
94
|
+
}
|
|
95
|
+
if (!wt) {
|
|
96
|
+
return errorResult(`Worktree '${args.worktreeId}' not found. Use worktree_list to see available worktrees.`);
|
|
97
|
+
}
|
|
98
|
+
project = applyWorktreeOverlay(project, wt.id);
|
|
99
|
+
worktreeField = { id: wt.id, name: wt.name };
|
|
100
|
+
}
|
|
83
101
|
const nav = new WorkflowNavigator();
|
|
84
102
|
const status = await nav.getStatus(project);
|
|
85
|
-
|
|
103
|
+
const result = worktreeField ? { ...status, worktree: worktreeField } : status;
|
|
104
|
+
return jsonResult(result);
|
|
86
105
|
}
|
|
87
106
|
catch (error) {
|
|
88
107
|
const msg = error instanceof Error ? error.message : String(error);
|
|
@@ -100,19 +119,37 @@ export function registerWorkflowTools(server) {
|
|
|
100
119
|
.string()
|
|
101
120
|
.optional()
|
|
102
121
|
.describe('Project ID. Omit to use default_project config.'),
|
|
122
|
+
worktreeId: z
|
|
123
|
+
.string()
|
|
124
|
+
.optional()
|
|
125
|
+
.describe('Worktree ID or name. When provided, overlays worktree fields onto the project before computing next action.'),
|
|
103
126
|
},
|
|
104
127
|
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
105
128
|
}, async (args) => {
|
|
106
129
|
try {
|
|
107
130
|
const resolvedId = await resolveProjectId(args.projectId);
|
|
108
131
|
const store = new FileProjectStore();
|
|
109
|
-
|
|
132
|
+
let project = await store.getById(resolvedId);
|
|
110
133
|
if (!project) {
|
|
111
134
|
return errorResult(`Project not found: '${resolvedId}'. Use the project_list tool to see available projects.`);
|
|
112
135
|
}
|
|
136
|
+
let worktreeField;
|
|
137
|
+
if (args.worktreeId) {
|
|
138
|
+
const service = new WorktreeService(store);
|
|
139
|
+
let wt = await service.getWorktree(resolvedId, args.worktreeId);
|
|
140
|
+
if (!wt) {
|
|
141
|
+
wt = await service.getWorktreeByName(resolvedId, args.worktreeId);
|
|
142
|
+
}
|
|
143
|
+
if (!wt) {
|
|
144
|
+
return errorResult(`Worktree '${args.worktreeId}' not found. Use worktree_list to see available worktrees.`);
|
|
145
|
+
}
|
|
146
|
+
project = applyWorktreeOverlay(project, wt.id);
|
|
147
|
+
worktreeField = { id: wt.id, name: wt.name };
|
|
148
|
+
}
|
|
113
149
|
const nav = new WorkflowNavigator();
|
|
114
150
|
const next = await nav.getNext(project);
|
|
115
|
-
|
|
151
|
+
const result = worktreeField ? { ...next, worktree: worktreeField } : next;
|
|
152
|
+
return jsonResult(result);
|
|
116
153
|
}
|
|
117
154
|
catch (error) {
|
|
118
155
|
const msg = error instanceof Error ? error.message : String(error);
|
|
@@ -190,5 +227,27 @@ export function registerWorkflowTools(server) {
|
|
|
190
227
|
return errorResult(`Error: ${msg}`);
|
|
191
228
|
}
|
|
192
229
|
});
|
|
230
|
+
// --- storage_backup ---
|
|
231
|
+
server.registerTool('storage_backup', {
|
|
232
|
+
title: 'Create Versioned Backup',
|
|
233
|
+
description: 'Create a versioned timestamped backup of the projects.json data file. ' +
|
|
234
|
+
'Keeps the last 10 backups, automatically pruning older ones. ' +
|
|
235
|
+
'Response shape: { storagePath, backedUp: string[] }.',
|
|
236
|
+
inputSchema: {},
|
|
237
|
+
annotations: { readOnlyHint: false, openWorldHint: false },
|
|
238
|
+
}, async () => {
|
|
239
|
+
try {
|
|
240
|
+
const storagePath = getStoragePath();
|
|
241
|
+
const files = ['projects.json'];
|
|
242
|
+
for (const file of files) {
|
|
243
|
+
await createVersionedBackup(storagePath, file);
|
|
244
|
+
}
|
|
245
|
+
return jsonResult({ storagePath, backedUp: files });
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
249
|
+
return errorResult(`Error: ${msg}`);
|
|
250
|
+
}
|
|
251
|
+
});
|
|
193
252
|
}
|
|
194
253
|
//# sourceMappingURL=workflowTools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflowTools.js","sourceRoot":"","sources":["../../src/tools/workflowTools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,
|
|
1
|
+
{"version":3,"file":"workflowTools.js","sourceRoot":"","sources":["../../src/tools/workflowTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktreeTools.d.ts","sourceRoot":"","sources":["../../src/tools/worktreeTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyDpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyO7D"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { FileProjectStore, WorktreeService, GitWorktreeDiscovery } from '@context-forge/core/node';
|
|
3
|
+
import { resolveProjectId } from './resolveProjectId.js';
|
|
4
|
+
import { errorResult, jsonResult } from './contextTools.js';
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a worktree by ID or name (case-insensitive).
|
|
7
|
+
* Returns the project and worktree, or an error result.
|
|
8
|
+
*/
|
|
9
|
+
async function resolveWorktree(projectId, worktreeIdOrName, store) {
|
|
10
|
+
const project = await store.getById(projectId);
|
|
11
|
+
if (!project) {
|
|
12
|
+
return errorResult(`Project not found: '${projectId}'. Use the project_list tool to see available projects.`);
|
|
13
|
+
}
|
|
14
|
+
const service = new WorktreeService(store);
|
|
15
|
+
// Try exact ID first
|
|
16
|
+
let worktree = await service.getWorktree(projectId, worktreeIdOrName);
|
|
17
|
+
if (!worktree) {
|
|
18
|
+
// Fall back to case-insensitive name match
|
|
19
|
+
worktree = await service.getWorktreeByName(projectId, worktreeIdOrName);
|
|
20
|
+
}
|
|
21
|
+
if (!worktree) {
|
|
22
|
+
return errorResult(`Worktree '${worktreeIdOrName}' not found in project '${projectId}'. ` +
|
|
23
|
+
'Use the worktree_list tool to see available worktrees.');
|
|
24
|
+
}
|
|
25
|
+
return { project, worktree };
|
|
26
|
+
}
|
|
27
|
+
/** Check if a result is an error (has isError field). */
|
|
28
|
+
function isErrorResult(result) {
|
|
29
|
+
return typeof result === 'object' && result !== null && 'isError' in result;
|
|
30
|
+
}
|
|
31
|
+
/** Parse an index range string "start-end" into a [number, number] tuple. */
|
|
32
|
+
function parseIndexRange(value) {
|
|
33
|
+
const match = /^(\d+)-(\d+)$/.exec(value);
|
|
34
|
+
if (!match)
|
|
35
|
+
return null;
|
|
36
|
+
return [parseInt(match[1], 10), parseInt(match[2], 10)];
|
|
37
|
+
}
|
|
38
|
+
export function registerWorktreeTools(server) {
|
|
39
|
+
// --- worktree_list ---
|
|
40
|
+
server.registerTool('worktree_list', {
|
|
41
|
+
title: 'List Worktrees',
|
|
42
|
+
description: 'List all worktree contexts for a project. Returns worktree IDs, names, index ranges, and workflow state. ' +
|
|
43
|
+
'Use this to discover available worktrees before calling worktree_get or worktree_update.',
|
|
44
|
+
inputSchema: {
|
|
45
|
+
projectId: z.string().optional().describe('Project ID. Omit to use default_project config.'),
|
|
46
|
+
},
|
|
47
|
+
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
48
|
+
}, async (args) => {
|
|
49
|
+
try {
|
|
50
|
+
const resolvedId = await resolveProjectId(args.projectId);
|
|
51
|
+
const store = new FileProjectStore();
|
|
52
|
+
const service = new WorktreeService(store);
|
|
53
|
+
const worktrees = await service.listWorktrees(resolvedId);
|
|
54
|
+
// Validate worktree paths if project has a projectPath
|
|
55
|
+
const project = await store.getById(resolvedId);
|
|
56
|
+
let pathStatuses;
|
|
57
|
+
if (project?.projectPath && worktrees.length > 0) {
|
|
58
|
+
try {
|
|
59
|
+
const gitWorktrees = await new GitWorktreeDiscovery().listWorktrees(project.projectPath);
|
|
60
|
+
pathStatuses = await service.validateWorktreePaths(resolvedId, gitWorktrees);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Git discovery failure — omit pathStatuses
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return jsonResult({ worktrees, count: worktrees.length, ...(pathStatuses ? { pathStatuses } : {}) });
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
70
|
+
return errorResult(`Error: ${msg}`);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
// --- worktree_get ---
|
|
74
|
+
server.registerTool('worktree_get', {
|
|
75
|
+
title: 'Get Worktree',
|
|
76
|
+
description: 'Get full details for a specific worktree context by ID or name. ' +
|
|
77
|
+
'Returns all worktree fields including index range, workflow state, and paths.',
|
|
78
|
+
inputSchema: {
|
|
79
|
+
projectId: z.string().optional().describe('Project ID. Omit to use default_project config.'),
|
|
80
|
+
worktree: z.string().describe('Worktree ID or name to look up.'),
|
|
81
|
+
},
|
|
82
|
+
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
83
|
+
}, async (args) => {
|
|
84
|
+
try {
|
|
85
|
+
const resolvedId = await resolveProjectId(args.projectId);
|
|
86
|
+
const store = new FileProjectStore();
|
|
87
|
+
const result = await resolveWorktree(resolvedId, args.worktree, store);
|
|
88
|
+
if (isErrorResult(result))
|
|
89
|
+
return result;
|
|
90
|
+
return jsonResult(result.worktree);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
94
|
+
return errorResult(`Error: ${msg}`);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
// --- worktree_init ---
|
|
98
|
+
server.registerTool('worktree_init', {
|
|
99
|
+
title: 'Initialize Worktree',
|
|
100
|
+
description: 'Create a new worktree context for a project. The first worktree triggers forward migration, ' +
|
|
101
|
+
'moving existing workflow fields into a "Default" worktree. Returns the created worktree, ' +
|
|
102
|
+
'whether migration occurred, and any index range overlaps.',
|
|
103
|
+
inputSchema: {
|
|
104
|
+
projectId: z.string().optional().describe('Project ID. Omit to use default_project config.'),
|
|
105
|
+
name: z.string().describe('Display name for the worktree context.'),
|
|
106
|
+
indexRange: z.string().describe('Slice index range as "start-end" (e.g., "100-199").'),
|
|
107
|
+
worktreePath: z.string().optional().describe('Absolute path to the git worktree directory.'),
|
|
108
|
+
archDoc: z.string().optional().describe('Architecture document reference.'),
|
|
109
|
+
slicePlan: z.string().optional().describe('Slice plan document reference.'),
|
|
110
|
+
developmentPhase: z.string().optional().describe('Initial development phase.'),
|
|
111
|
+
},
|
|
112
|
+
annotations: { destructiveHint: false, idempotentHint: false },
|
|
113
|
+
}, async (args) => {
|
|
114
|
+
try {
|
|
115
|
+
const range = parseIndexRange(args.indexRange);
|
|
116
|
+
if (!range) {
|
|
117
|
+
return errorResult(`Invalid indexRange format: '${args.indexRange}'. Expected "start-end" (e.g., "100-199").`);
|
|
118
|
+
}
|
|
119
|
+
const resolvedId = await resolveProjectId(args.projectId);
|
|
120
|
+
const store = new FileProjectStore();
|
|
121
|
+
const service = new WorktreeService(store);
|
|
122
|
+
const result = await service.addWorktree(resolvedId, {
|
|
123
|
+
name: args.name,
|
|
124
|
+
indexRange: range,
|
|
125
|
+
worktreePath: args.worktreePath,
|
|
126
|
+
archDoc: args.archDoc,
|
|
127
|
+
slicePlan: args.slicePlan,
|
|
128
|
+
});
|
|
129
|
+
// Set developmentPhase via update if provided
|
|
130
|
+
if (args.developmentPhase) {
|
|
131
|
+
await service.updateWorktree(resolvedId, result.worktree.id, {
|
|
132
|
+
developmentPhase: args.developmentPhase,
|
|
133
|
+
});
|
|
134
|
+
result.worktree.developmentPhase = args.developmentPhase;
|
|
135
|
+
}
|
|
136
|
+
return jsonResult(result);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
140
|
+
return errorResult(`Error: ${msg}`);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
// --- worktree_update ---
|
|
144
|
+
server.registerTool('worktree_update', {
|
|
145
|
+
title: 'Update Worktree',
|
|
146
|
+
description: 'Update fields on an existing worktree context. Provide the worktree ID or name and any fields to change. ' +
|
|
147
|
+
'Returns the full updated worktree context.',
|
|
148
|
+
inputSchema: {
|
|
149
|
+
projectId: z.string().optional().describe('Project ID. Omit to use default_project config.'),
|
|
150
|
+
worktree: z.string().describe('Worktree ID or name to update.'),
|
|
151
|
+
name: z.string().optional().describe('New display name.'),
|
|
152
|
+
indexRange: z.string().optional().describe('New index range as "start-end".'),
|
|
153
|
+
worktreePath: z.string().optional().describe('New worktree directory path.'),
|
|
154
|
+
archDoc: z.string().optional().describe('Architecture document reference.'),
|
|
155
|
+
slicePlan: z.string().optional().describe('Slice plan document reference.'),
|
|
156
|
+
developmentPhase: z.string().optional().describe('Development phase.'),
|
|
157
|
+
activeSlice: z.string().optional().describe('Active slice name.'),
|
|
158
|
+
activeTaskFile: z.string().optional().describe('Active task file name.'),
|
|
159
|
+
instruction: z.string().optional().describe('Instruction type.'),
|
|
160
|
+
workType: z.enum(['start', 'continue']).optional().describe('Work type.'),
|
|
161
|
+
},
|
|
162
|
+
annotations: { destructiveHint: false, idempotentHint: true },
|
|
163
|
+
}, async (args) => {
|
|
164
|
+
try {
|
|
165
|
+
const resolvedId = await resolveProjectId(args.projectId);
|
|
166
|
+
const store = new FileProjectStore();
|
|
167
|
+
const resolved = await resolveWorktree(resolvedId, args.worktree, store);
|
|
168
|
+
if (isErrorResult(resolved))
|
|
169
|
+
return resolved;
|
|
170
|
+
// Parse indexRange if provided
|
|
171
|
+
let indexRange;
|
|
172
|
+
if (args.indexRange) {
|
|
173
|
+
const parsed = parseIndexRange(args.indexRange);
|
|
174
|
+
if (!parsed) {
|
|
175
|
+
return errorResult(`Invalid indexRange format: '${args.indexRange}'. Expected "start-end" (e.g., "100-199").`);
|
|
176
|
+
}
|
|
177
|
+
indexRange = parsed;
|
|
178
|
+
}
|
|
179
|
+
// Collect non-undefined update fields
|
|
180
|
+
const updates = {};
|
|
181
|
+
const fieldKeys = [
|
|
182
|
+
'name', 'worktreePath', 'archDoc', 'slicePlan',
|
|
183
|
+
'developmentPhase', 'activeSlice', 'activeTaskFile',
|
|
184
|
+
'instruction', 'workType',
|
|
185
|
+
];
|
|
186
|
+
for (const key of fieldKeys) {
|
|
187
|
+
if (args[key] !== undefined) {
|
|
188
|
+
updates[key] = args[key];
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (indexRange) {
|
|
192
|
+
updates.indexRange = indexRange;
|
|
193
|
+
}
|
|
194
|
+
const service = new WorktreeService(store);
|
|
195
|
+
const updated = await service.updateWorktree(resolvedId, resolved.worktree.id, updates);
|
|
196
|
+
// Check for overlaps when range changed
|
|
197
|
+
let overlaps;
|
|
198
|
+
if (indexRange) {
|
|
199
|
+
overlaps = await service.findOverlaps(resolvedId, indexRange, resolved.worktree.id);
|
|
200
|
+
}
|
|
201
|
+
return jsonResult({ worktree: updated, ...(overlaps ? { overlaps } : {}) });
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
205
|
+
return errorResult(`Error: ${msg}`);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
// --- worktree_rm ---
|
|
209
|
+
server.registerTool('worktree_rm', {
|
|
210
|
+
title: 'Remove Worktree',
|
|
211
|
+
description: 'Remove a worktree context from a project. If this is the last worktree, triggers reverse migration ' +
|
|
212
|
+
'restoring workflow fields to the project. Returns the removed worktree and whether migration occurred.',
|
|
213
|
+
inputSchema: {
|
|
214
|
+
projectId: z.string().optional().describe('Project ID. Omit to use default_project config.'),
|
|
215
|
+
worktree: z.string().describe('Worktree ID or name to remove.'),
|
|
216
|
+
},
|
|
217
|
+
annotations: { destructiveHint: true, idempotentHint: false },
|
|
218
|
+
}, async (args) => {
|
|
219
|
+
try {
|
|
220
|
+
const resolvedId = await resolveProjectId(args.projectId);
|
|
221
|
+
const store = new FileProjectStore();
|
|
222
|
+
const resolved = await resolveWorktree(resolvedId, args.worktree, store);
|
|
223
|
+
if (isErrorResult(resolved))
|
|
224
|
+
return resolved;
|
|
225
|
+
const service = new WorktreeService(store);
|
|
226
|
+
const result = await service.removeWorktree(resolvedId, resolved.worktree.id);
|
|
227
|
+
return jsonResult(result);
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
231
|
+
return errorResult(`Error: ${msg}`);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=worktreeTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktreeTools.js","sourceRoot":"","sources":["../../src/tools/worktreeTools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@context-forge/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
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.
|
|
37
|
+
"@context-forge/core": "0.5.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^25.3.0",
|