projscan 1.4.0 → 1.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/README.md +13 -6
- package/dist/cli/commands/doctor.js +18 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/explain.js +1 -0
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/memory.d.ts +11 -0
- package/dist/cli/commands/memory.js +175 -0
- package/dist/cli/commands/memory.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/codeGraph.js +190 -241
- package/dist/core/codeGraph.js.map +1 -1
- package/dist/core/fileInspector.js +40 -44
- package/dist/core/fileInspector.js.map +1 -1
- package/dist/core/hotspotAnalyzer.js +65 -19
- package/dist/core/hotspotAnalyzer.js.map +1 -1
- package/dist/core/issueEngine.js +24 -0
- package/dist/core/issueEngine.js.map +1 -1
- package/dist/core/languages/csharpImports.js +6 -4
- package/dist/core/languages/csharpImports.js.map +1 -1
- package/dist/core/memory.d.ts +154 -0
- package/dist/core/memory.js +277 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/review.d.ts +25 -1
- package/dist/core/review.js +84 -0
- package/dist/core/review.js.map +1 -1
- package/dist/mcp/prompts.js +272 -0
- package/dist/mcp/prompts.js.map +1 -1
- package/dist/mcp/server.js +162 -146
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tokenBudget.d.ts +22 -0
- package/dist/mcp/tokenBudget.js +26 -0
- package/dist/mcp/tokenBudget.js.map +1 -1
- package/dist/mcp/tools/doctor.js +65 -2
- package/dist/mcp/tools/doctor.js.map +1 -1
- package/dist/mcp/tools/explain.js +4 -3
- package/dist/mcp/tools/explain.js.map +1 -1
- package/dist/mcp/tools/explainIssue.js +3 -2
- package/dist/mcp/tools/explainIssue.js.map +1 -1
- package/dist/mcp/tools/file.js +3 -2
- package/dist/mcp/tools/file.js.map +1 -1
- package/dist/mcp/tools/graph.js +16 -11
- package/dist/mcp/tools/graph.js.map +1 -1
- package/dist/mcp/tools/impact.js +2 -2
- package/dist/mcp/tools/impact.js.map +1 -1
- package/dist/mcp/tools/memory.d.ts +19 -0
- package/dist/mcp/tools/memory.js +134 -0
- package/dist/mcp/tools/memory.js.map +1 -0
- package/dist/mcp/tools/review.js +25 -4
- package/dist/mcp/tools/review.js.map +1 -1
- package/dist/mcp/tools/upgrade.js +3 -2
- package/dist/mcp/tools/upgrade.js.map +1 -1
- package/dist/mcp/tools.js +2 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/reporters/consoleReporter.d.ts +12 -1
- package/dist/reporters/consoleReporter.js +289 -179
- package/dist/reporters/consoleReporter.js.map +1 -1
- package/dist/reporters/markdownReporter.js +185 -128
- package/dist/reporters/markdownReporter.js.map +1 -1
- package/dist/tool-manifest.json +43 -6
- package/dist/types.d.ts +21 -0
- package/dist/utils/config.js +76 -51
- package/dist/utils/config.js.map +1 -1
- package/package.json +8 -1
package/dist/mcp/server.js
CHANGED
|
@@ -5,7 +5,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
5
5
|
import { getToolDefinitions, getToolHandler } from './tools.js';
|
|
6
6
|
import { getPromptDefinitions, getPrompt } from './prompts.js';
|
|
7
7
|
import { getResourceDefinitions, readResource } from './resources.js';
|
|
8
|
-
import { applyBudget } from './tokenBudget.js';
|
|
8
|
+
import { applyBudget, attachCostSidecar, estimateTokens } from './tokenBudget.js';
|
|
9
9
|
import { withProgress } from './progress.js';
|
|
10
10
|
import { toContentBlocks } from './chunker.js';
|
|
11
11
|
import { startWatcher } from '../core/watcher.js';
|
|
@@ -57,39 +57,11 @@ export function createMcpServer(rootPath, options = {}) {
|
|
|
57
57
|
}
|
|
58
58
|
async function dispatch(request) {
|
|
59
59
|
const id = request.id ?? null;
|
|
60
|
-
// Notifications (no id) - no response expected.
|
|
61
60
|
const isNotification = request.id === undefined || request.id === null;
|
|
62
61
|
try {
|
|
63
62
|
switch (request.method) {
|
|
64
|
-
case 'initialize':
|
|
65
|
-
|
|
66
|
-
initialized = true;
|
|
67
|
-
// Negotiate: echo the client's version if we support it; otherwise
|
|
68
|
-
// respond with our newest version.
|
|
69
|
-
const requested = params.protocolVersion;
|
|
70
|
-
const negotiated = requested && SUPPORTED_PROTOCOL_VERSIONS.includes(requested)
|
|
71
|
-
? requested
|
|
72
|
-
: PROTOCOL_VERSION;
|
|
73
|
-
if (watchEnabled && !watchStartPromise) {
|
|
74
|
-
watchStartPromise = startFileWatcher();
|
|
75
|
-
}
|
|
76
|
-
return ok(id, {
|
|
77
|
-
protocolVersion: negotiated,
|
|
78
|
-
serverInfo: {
|
|
79
|
-
name: 'projscan',
|
|
80
|
-
version: serverVersion,
|
|
81
|
-
},
|
|
82
|
-
capabilities: {
|
|
83
|
-
tools: { listChanged: false },
|
|
84
|
-
prompts: { listChanged: false },
|
|
85
|
-
resources: { listChanged: false, subscribe: false },
|
|
86
|
-
logging: {},
|
|
87
|
-
...(watchEnabled
|
|
88
|
-
? { experimental: { fileChanged: { method: 'notifications/file_changed' } } }
|
|
89
|
-
: {}),
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
}
|
|
63
|
+
case 'initialize':
|
|
64
|
+
return handleInitialize(id, request.params);
|
|
93
65
|
case 'notifications/initialized':
|
|
94
66
|
case 'initialized':
|
|
95
67
|
return null;
|
|
@@ -97,124 +69,18 @@ export function createMcpServer(rootPath, options = {}) {
|
|
|
97
69
|
return ok(id, {});
|
|
98
70
|
case 'shutdown':
|
|
99
71
|
return ok(id, null);
|
|
100
|
-
case 'tools/list':
|
|
72
|
+
case 'tools/list':
|
|
101
73
|
return ok(id, { tools: getToolDefinitions() });
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const name = params.name;
|
|
106
|
-
if (!name) {
|
|
107
|
-
return fail(id, JSONRPC_ERROR.InvalidParams, 'Missing tool name');
|
|
108
|
-
}
|
|
109
|
-
const handler = getToolHandler(name);
|
|
110
|
-
if (!handler) {
|
|
111
|
-
return fail(id, JSONRPC_ERROR.MethodNotFound, `Unknown tool: ${name}`);
|
|
112
|
-
}
|
|
113
|
-
try {
|
|
114
|
-
const args = params.arguments ?? {};
|
|
115
|
-
// Progress emitter: if the client supplied a progressToken AND
|
|
116
|
-
// the transport gave us a notify channel, forward progress events.
|
|
117
|
-
const progressToken = params._meta?.progressToken;
|
|
118
|
-
const emit = progressToken !== undefined && options.notify
|
|
119
|
-
? (progress, total, message) => {
|
|
120
|
-
const payload = JSON.stringify({
|
|
121
|
-
jsonrpc: '2.0',
|
|
122
|
-
method: 'notifications/progress',
|
|
123
|
-
params: {
|
|
124
|
-
progressToken,
|
|
125
|
-
progress,
|
|
126
|
-
...(total !== undefined ? { total } : {}),
|
|
127
|
-
...(message !== undefined ? { message } : {}),
|
|
128
|
-
},
|
|
129
|
-
});
|
|
130
|
-
options.notify(payload);
|
|
131
|
-
}
|
|
132
|
-
: undefined;
|
|
133
|
-
const result = await withProgress(emit, () => handler(args, rootPath));
|
|
134
|
-
// 1.4 — auto-record session touches from any file paths the
|
|
135
|
-
// tool returned, plus an event for the call itself. The
|
|
136
|
-
// session tool itself is excluded so reading the session
|
|
137
|
-
// doesn't pollute it.
|
|
138
|
-
if (name !== 'projscan_session') {
|
|
139
|
-
try {
|
|
140
|
-
const sess = await ensureSession();
|
|
141
|
-
recordEvent(sess, `tool-call:${name}`);
|
|
142
|
-
sessionDirty = true;
|
|
143
|
-
const paths = extractTouchedPaths(result);
|
|
144
|
-
for (const p of paths) {
|
|
145
|
-
recordTouch(sess, p, 'tool-result');
|
|
146
|
-
}
|
|
147
|
-
await persistSessionIfDirty();
|
|
148
|
-
}
|
|
149
|
-
catch {
|
|
150
|
-
// Session is best-effort — never break a tool call.
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
const rawMaxTokens = args.max_tokens;
|
|
154
|
-
const maxTokens = typeof rawMaxTokens === 'number' && Number.isFinite(rawMaxTokens) && rawMaxTokens > 0
|
|
155
|
-
? rawMaxTokens
|
|
156
|
-
: undefined;
|
|
157
|
-
const budgeted = applyBudget(result, maxTokens !== undefined ? { maxTokens } : {});
|
|
158
|
-
const payload = budgeted.truncated
|
|
159
|
-
? attachBudgetSidecar(budgeted.value, {
|
|
160
|
-
truncated: true,
|
|
161
|
-
estimatedTokens: budgeted.estimatedTokens,
|
|
162
|
-
maxTokens,
|
|
163
|
-
})
|
|
164
|
-
: budgeted.value;
|
|
165
|
-
// Opt-in response chunking: agents that want streaming set
|
|
166
|
-
// `stream: true`. Default stays single-block for backcompat.
|
|
167
|
-
const wantsStreaming = args.stream === true;
|
|
168
|
-
const content = wantsStreaming
|
|
169
|
-
? toContentBlocks(payload)
|
|
170
|
-
: [{ type: 'text', text: safeStringify(payload) }];
|
|
171
|
-
return ok(id, {
|
|
172
|
-
content,
|
|
173
|
-
isError: false,
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
catch (err) {
|
|
177
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
178
|
-
return ok(id, {
|
|
179
|
-
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
180
|
-
isError: true,
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
case 'prompts/list': {
|
|
74
|
+
case 'tools/call':
|
|
75
|
+
return await handleToolsCall(id, request.params);
|
|
76
|
+
case 'prompts/list':
|
|
185
77
|
return ok(id, { prompts: getPromptDefinitions() });
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
if (!params.name) {
|
|
190
|
-
return fail(id, JSONRPC_ERROR.InvalidParams, 'Missing prompt name');
|
|
191
|
-
}
|
|
192
|
-
try {
|
|
193
|
-
const result = await getPrompt(params.name, params.arguments ?? {}, rootPath);
|
|
194
|
-
return ok(id, result);
|
|
195
|
-
}
|
|
196
|
-
catch (err) {
|
|
197
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
198
|
-
return fail(id, JSONRPC_ERROR.InvalidParams, message);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
case 'resources/list': {
|
|
78
|
+
case 'prompts/get':
|
|
79
|
+
return await handlePromptsGet(id, request.params);
|
|
80
|
+
case 'resources/list':
|
|
202
81
|
return ok(id, { resources: getResourceDefinitions() });
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
const params = (request.params ?? {});
|
|
206
|
-
if (!params.uri) {
|
|
207
|
-
return fail(id, JSONRPC_ERROR.InvalidParams, 'Missing resource uri');
|
|
208
|
-
}
|
|
209
|
-
try {
|
|
210
|
-
const content = await readResource(params.uri, rootPath);
|
|
211
|
-
return ok(id, { contents: [content] });
|
|
212
|
-
}
|
|
213
|
-
catch (err) {
|
|
214
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
215
|
-
return fail(id, JSONRPC_ERROR.InvalidParams, message);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
82
|
+
case 'resources/read':
|
|
83
|
+
return await handleResourcesRead(id, request.params);
|
|
218
84
|
default:
|
|
219
85
|
if (isNotification)
|
|
220
86
|
return null;
|
|
@@ -231,6 +97,156 @@ export function createMcpServer(rootPath, options = {}) {
|
|
|
231
97
|
void initialized;
|
|
232
98
|
}
|
|
233
99
|
}
|
|
100
|
+
function handleInitialize(id, rawParams) {
|
|
101
|
+
const params = (rawParams ?? {});
|
|
102
|
+
initialized = true;
|
|
103
|
+
const requested = params.protocolVersion;
|
|
104
|
+
const negotiated = requested && SUPPORTED_PROTOCOL_VERSIONS.includes(requested) ? requested : PROTOCOL_VERSION;
|
|
105
|
+
if (watchEnabled && !watchStartPromise) {
|
|
106
|
+
watchStartPromise = startFileWatcher();
|
|
107
|
+
}
|
|
108
|
+
return ok(id, {
|
|
109
|
+
protocolVersion: negotiated,
|
|
110
|
+
serverInfo: { name: 'projscan', version: serverVersion },
|
|
111
|
+
capabilities: {
|
|
112
|
+
tools: { listChanged: false },
|
|
113
|
+
prompts: { listChanged: false },
|
|
114
|
+
resources: { listChanged: false, subscribe: false },
|
|
115
|
+
logging: {},
|
|
116
|
+
...(watchEnabled
|
|
117
|
+
? { experimental: { fileChanged: { method: 'notifications/file_changed' } } }
|
|
118
|
+
: {}),
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
async function handleToolsCall(id, rawParams) {
|
|
123
|
+
const params = (rawParams ?? {});
|
|
124
|
+
const name = params.name;
|
|
125
|
+
if (!name)
|
|
126
|
+
return fail(id, JSONRPC_ERROR.InvalidParams, 'Missing tool name');
|
|
127
|
+
const handler = getToolHandler(name);
|
|
128
|
+
if (!handler)
|
|
129
|
+
return fail(id, JSONRPC_ERROR.MethodNotFound, `Unknown tool: ${name}`);
|
|
130
|
+
try {
|
|
131
|
+
const args = params.arguments ?? {};
|
|
132
|
+
const emit = buildProgressEmitter(params._meta?.progressToken);
|
|
133
|
+
const result = await withProgress(emit, () => handler(args, rootPath));
|
|
134
|
+
await recordSessionTouches(name, result);
|
|
135
|
+
const payload = applyBudgetAndCost(result, args);
|
|
136
|
+
const content = formatToolContent(payload, args.stream === true);
|
|
137
|
+
return ok(id, { content, isError: false });
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
141
|
+
return ok(id, {
|
|
142
|
+
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
143
|
+
isError: true,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async function handlePromptsGet(id, rawParams) {
|
|
148
|
+
const params = (rawParams ?? {});
|
|
149
|
+
if (!params.name)
|
|
150
|
+
return fail(id, JSONRPC_ERROR.InvalidParams, 'Missing prompt name');
|
|
151
|
+
try {
|
|
152
|
+
const result = await getPrompt(params.name, params.arguments ?? {}, rootPath);
|
|
153
|
+
return ok(id, result);
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
157
|
+
return fail(id, JSONRPC_ERROR.InvalidParams, message);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async function handleResourcesRead(id, rawParams) {
|
|
161
|
+
const params = (rawParams ?? {});
|
|
162
|
+
if (!params.uri)
|
|
163
|
+
return fail(id, JSONRPC_ERROR.InvalidParams, 'Missing resource uri');
|
|
164
|
+
try {
|
|
165
|
+
const content = await readResource(params.uri, rootPath);
|
|
166
|
+
return ok(id, { contents: [content] });
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
170
|
+
return fail(id, JSONRPC_ERROR.InvalidParams, message);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Build a progress emitter that forwards progress events to the
|
|
175
|
+
* client over the notify channel — IFF the client supplied a
|
|
176
|
+
* progressToken AND the transport gave us a notify channel.
|
|
177
|
+
*/
|
|
178
|
+
function buildProgressEmitter(progressToken) {
|
|
179
|
+
if (progressToken === undefined || !options.notify)
|
|
180
|
+
return undefined;
|
|
181
|
+
const notify = options.notify;
|
|
182
|
+
return (progress, total, message) => {
|
|
183
|
+
const payload = JSON.stringify({
|
|
184
|
+
jsonrpc: '2.0',
|
|
185
|
+
method: 'notifications/progress',
|
|
186
|
+
params: {
|
|
187
|
+
progressToken,
|
|
188
|
+
progress,
|
|
189
|
+
...(total !== undefined ? { total } : {}),
|
|
190
|
+
...(message !== undefined ? { message } : {}),
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
notify(payload);
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 1.4 — record session touches from any file paths the tool surfaced,
|
|
198
|
+
* plus an event for the call itself. Skipped when the call IS for
|
|
199
|
+
* `projscan_session` (don't pollute the read with the read).
|
|
200
|
+
* Best-effort: failures here never break the tool call.
|
|
201
|
+
*/
|
|
202
|
+
async function recordSessionTouches(name, result) {
|
|
203
|
+
if (name === 'projscan_session')
|
|
204
|
+
return;
|
|
205
|
+
try {
|
|
206
|
+
const sess = await ensureSession();
|
|
207
|
+
recordEvent(sess, `tool-call:${name}`);
|
|
208
|
+
sessionDirty = true;
|
|
209
|
+
const paths = extractTouchedPaths(result);
|
|
210
|
+
for (const p of paths)
|
|
211
|
+
recordTouch(sess, p, 'tool-result');
|
|
212
|
+
await persistSessionIfDirty();
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// Session is best-effort.
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Apply the agent's `max_tokens` budget (post-hoc truncation) then
|
|
220
|
+
* attach the `_cost` sidecar (1.5+) reflecting the final payload.
|
|
221
|
+
* Budget and cost coexist when both fire; both are non-destructive.
|
|
222
|
+
*/
|
|
223
|
+
function applyBudgetAndCost(result, args) {
|
|
224
|
+
const rawMaxTokens = args.max_tokens;
|
|
225
|
+
const maxTokens = typeof rawMaxTokens === 'number' && Number.isFinite(rawMaxTokens) && rawMaxTokens > 0
|
|
226
|
+
? rawMaxTokens
|
|
227
|
+
: undefined;
|
|
228
|
+
const budgeted = applyBudget(result, maxTokens !== undefined ? { maxTokens } : {});
|
|
229
|
+
const withBudget = budgeted.truncated
|
|
230
|
+
? attachBudgetSidecar(budgeted.value, {
|
|
231
|
+
truncated: true,
|
|
232
|
+
estimatedTokens: budgeted.estimatedTokens,
|
|
233
|
+
maxTokens,
|
|
234
|
+
})
|
|
235
|
+
: budgeted.value;
|
|
236
|
+
const finalEstimatedTokens = estimateTokens(JSON.stringify(withBudget) ?? '');
|
|
237
|
+
return attachCostSidecar(withBudget, finalEstimatedTokens);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Format the post-budget payload into MCP content blocks. With
|
|
241
|
+
* `stream: true` the payload is split into multiple blocks (header
|
|
242
|
+
* + N record blocks); the default is a single text block for
|
|
243
|
+
* backwards compatibility.
|
|
244
|
+
*/
|
|
245
|
+
function formatToolContent(payload, wantsStreaming) {
|
|
246
|
+
return wantsStreaming
|
|
247
|
+
? toContentBlocks(payload)
|
|
248
|
+
: [{ type: 'text', text: safeStringify(payload) }];
|
|
249
|
+
}
|
|
234
250
|
async function handleMessage(line) {
|
|
235
251
|
const trimmed = line.trim();
|
|
236
252
|
if (!trimmed)
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,3 +23,25 @@ export interface BudgetResult<T> {
|
|
|
23
23
|
* fields and trim them until we fit (or give up and mark truncated).
|
|
24
24
|
*/
|
|
25
25
|
export declare function applyBudget<T>(value: T, options?: BudgetOptions): BudgetResult<T>;
|
|
26
|
+
/**
|
|
27
|
+
* 1.5+ — `_cost` sidecar shape attached to every MCP tool result.
|
|
28
|
+
* `estimatedTokens` is the chars-divided-by-4 approximation of the
|
|
29
|
+
* serialized output's token count. `tier` is set by tools that
|
|
30
|
+
* implement adaptive shaping (e.g., projscan_review) to tell the
|
|
31
|
+
* caller which shape they got.
|
|
32
|
+
*/
|
|
33
|
+
export interface CostSidecar {
|
|
34
|
+
estimatedTokens: number;
|
|
35
|
+
tier?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Attach a `_cost` sidecar to the result. Mirrors the shape of
|
|
39
|
+
* `attachBudgetSidecar` in server.ts so arrays and primitives are
|
|
40
|
+
* wrapped rather than spread (object spread over an array yields a
|
|
41
|
+
* garbled `{ "0": ..., "1": ..., _cost }` object).
|
|
42
|
+
*
|
|
43
|
+
* If the result already has a `tier` field at top level (set by
|
|
44
|
+
* adaptive tools like projscan_review), it's lifted into the sidecar
|
|
45
|
+
* so the agent sees the chosen shape in one place.
|
|
46
|
+
*/
|
|
47
|
+
export declare function attachCostSidecar(value: unknown, estimatedTokens: number): unknown;
|
package/dist/mcp/tokenBudget.js
CHANGED
|
@@ -54,6 +54,32 @@ function safeStringify(value) {
|
|
|
54
54
|
return String(value);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Attach a `_cost` sidecar to the result. Mirrors the shape of
|
|
59
|
+
* `attachBudgetSidecar` in server.ts so arrays and primitives are
|
|
60
|
+
* wrapped rather than spread (object spread over an array yields a
|
|
61
|
+
* garbled `{ "0": ..., "1": ..., _cost }` object).
|
|
62
|
+
*
|
|
63
|
+
* If the result already has a `tier` field at top level (set by
|
|
64
|
+
* adaptive tools like projscan_review), it's lifted into the sidecar
|
|
65
|
+
* so the agent sees the chosen shape in one place.
|
|
66
|
+
*/
|
|
67
|
+
export function attachCostSidecar(value, estimatedTokens) {
|
|
68
|
+
const cost = { estimatedTokens };
|
|
69
|
+
if (value !== null &&
|
|
70
|
+
typeof value === 'object' &&
|
|
71
|
+
!Array.isArray(value) &&
|
|
72
|
+
typeof value.tier === 'string') {
|
|
73
|
+
cost.tier = value.tier;
|
|
74
|
+
}
|
|
75
|
+
if (Array.isArray(value)) {
|
|
76
|
+
return { value, _cost: cost };
|
|
77
|
+
}
|
|
78
|
+
if (value === null || typeof value !== 'object') {
|
|
79
|
+
return { value, _cost: cost };
|
|
80
|
+
}
|
|
81
|
+
return { ...value, _cost: cost };
|
|
82
|
+
}
|
|
57
83
|
/**
|
|
58
84
|
* Find top-level array field names - our convention is that MCP results
|
|
59
85
|
* expose a primary array (hotspots, entries, findings, files) worth
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenBudget.js","sourceRoot":"","sources":["../../src/mcp/tokenBudget.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tokenBudget.js","sourceRoot":"","sources":["../../src/mcp/tokenBudget.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/tools/doctor.js
CHANGED
|
@@ -4,11 +4,15 @@ import { calculateScore } from '../../utils/scoreCalculator.js';
|
|
|
4
4
|
import { PACKAGE_ARG_SCHEMA, resolvePackageFilter } from './_shared.js';
|
|
5
5
|
export const doctorTool = {
|
|
6
6
|
name: 'projscan_doctor',
|
|
7
|
-
description: 'Run a health check on the project. Returns a 0-100 score, letter grade, and the list of issues (linting, formatting, tests, security, architecture).',
|
|
7
|
+
description: 'Run a health check on the project. Returns a 0-100 score, letter grade, and the list of issues (linting, formatting, tests, security, architecture). Pass `max_cost_tokens` (1.5+) for adaptive shaping: <3000 returns verdict-only (score + counts), <7000 returns a summary (top issues), otherwise full.',
|
|
8
8
|
inputSchema: {
|
|
9
9
|
type: 'object',
|
|
10
10
|
properties: {
|
|
11
11
|
package: PACKAGE_ARG_SCHEMA,
|
|
12
|
+
max_cost_tokens: {
|
|
13
|
+
type: 'number',
|
|
14
|
+
description: '1.5+ — adaptive shape budget. <3000 returns verdict-only (score + grade + per-severity counts); <7000 returns a summary (top-5 issues by severity, no descriptions); otherwise the full issue list. Different from `max_tokens` (post-hoc truncation): the tool reshapes BEFORE serializing.',
|
|
15
|
+
},
|
|
12
16
|
},
|
|
13
17
|
},
|
|
14
18
|
handler: async (args, rootPath) => {
|
|
@@ -24,7 +28,66 @@ export const doctorTool = {
|
|
|
24
28
|
});
|
|
25
29
|
}
|
|
26
30
|
const health = calculateScore(issues);
|
|
27
|
-
|
|
31
|
+
// 1.5+ — adaptive shape based on max_cost_tokens. With no budget,
|
|
32
|
+
// returns the full report unchanged (preserves 1.4-and-earlier
|
|
33
|
+
// shape; no `tier` field). With a budget, picks a tier and shapes
|
|
34
|
+
// — `tier` is surfaced and lifted into _cost.tier by the dispatcher.
|
|
35
|
+
const maxCostTokens = typeof args.max_cost_tokens === 'number' && Number.isFinite(args.max_cost_tokens)
|
|
36
|
+
? args.max_cost_tokens
|
|
37
|
+
: undefined;
|
|
38
|
+
if (maxCostTokens === undefined)
|
|
39
|
+
return { health, issues };
|
|
40
|
+
return shapeDoctorForBudget(health, issues, maxCostTokens);
|
|
28
41
|
},
|
|
29
42
|
};
|
|
43
|
+
function selectDoctorTier(maxCostTokens) {
|
|
44
|
+
if (!Number.isFinite(maxCostTokens) || maxCostTokens <= 0)
|
|
45
|
+
return 'full';
|
|
46
|
+
if (maxCostTokens < 3000)
|
|
47
|
+
return 'verdict-only';
|
|
48
|
+
if (maxCostTokens < 7000)
|
|
49
|
+
return 'summary';
|
|
50
|
+
return 'full';
|
|
51
|
+
}
|
|
52
|
+
function shapeDoctorForBudget(health, issues, maxCostTokens) {
|
|
53
|
+
const tier = selectDoctorTier(maxCostTokens);
|
|
54
|
+
const counts = countBySeverityAndCategory(issues);
|
|
55
|
+
if (tier === 'verdict-only') {
|
|
56
|
+
return { health, counts, tier };
|
|
57
|
+
}
|
|
58
|
+
if (tier === 'summary') {
|
|
59
|
+
// Top 5 of each severity, with the heavy `description` and
|
|
60
|
+
// `locations` fields stripped.
|
|
61
|
+
const top = (sev) => issues
|
|
62
|
+
.filter((i) => i.severity === sev)
|
|
63
|
+
.slice(0, 5)
|
|
64
|
+
.map((i) => ({ id: i.id, title: i.title, severity: i.severity, category: i.category }));
|
|
65
|
+
return {
|
|
66
|
+
health,
|
|
67
|
+
counts,
|
|
68
|
+
topIssues: {
|
|
69
|
+
error: top('error'),
|
|
70
|
+
warning: top('warning'),
|
|
71
|
+
info: top('info'),
|
|
72
|
+
},
|
|
73
|
+
tier,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return { health, issues, counts, tier };
|
|
77
|
+
}
|
|
78
|
+
function countBySeverityAndCategory(issues) {
|
|
79
|
+
const bySeverity = { error: 0, warning: 0, info: 0 };
|
|
80
|
+
const byCategory = {};
|
|
81
|
+
for (const i of issues) {
|
|
82
|
+
if (i.severity === 'error')
|
|
83
|
+
bySeverity.error += 1;
|
|
84
|
+
else if (i.severity === 'warning')
|
|
85
|
+
bySeverity.warning += 1;
|
|
86
|
+
else if (i.severity === 'info')
|
|
87
|
+
bySeverity.info += 1;
|
|
88
|
+
const cat = i.category ?? 'other';
|
|
89
|
+
byCategory[cat] = (byCategory[cat] ?? 0) + 1;
|
|
90
|
+
}
|
|
91
|
+
return { bySeverity, byCategory };
|
|
92
|
+
}
|
|
30
93
|
//# sourceMappingURL=doctor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/mcp/tools/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAgB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/mcp/tools/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,12 +16,13 @@ export const explainTool = {
|
|
|
16
16
|
},
|
|
17
17
|
handler: async (args, rootPath) => {
|
|
18
18
|
const rel = typeof args.file === 'string' ? args.file : '';
|
|
19
|
-
if (!rel)
|
|
20
|
-
throw new Error('file argument is required');
|
|
19
|
+
if (!rel) {
|
|
20
|
+
throw new Error('file argument is required: pass a repo-relative path (e.g. "src/auth.ts").');
|
|
21
|
+
}
|
|
21
22
|
const absolutePath = path.resolve(rootPath, rel);
|
|
22
23
|
const resolvedRoot = path.resolve(rootPath);
|
|
23
24
|
if (!absolutePath.startsWith(resolvedRoot + path.sep) && absolutePath !== resolvedRoot) {
|
|
24
|
-
throw new Error(
|
|
25
|
+
throw new Error(`file must be inside the project root (got "${rel}"; absolute or "../" paths are rejected for security).`);
|
|
25
26
|
}
|
|
26
27
|
const content = await fs.readFile(absolutePath, 'utf-8');
|
|
27
28
|
return explainFile(absolutePath, content, rootPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/mcp/tools/explain.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,kIAAkI;IACpI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gDAAgD;aAC9D;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,GAAG;
|
|
1
|
+
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/mcp/tools/explain.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,kIAAkI;IACpI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gDAAgD;aAC9D;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,KAAK,YAAY,EAAE,CAAC;YACvF,MAAM,IAAI,KAAK,CACb,8CAA8C,GAAG,wDAAwD,CAC1G,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACzD,OAAO,WAAW,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;CACF,CAAC"}
|
|
@@ -16,8 +16,9 @@ export const explainIssueTool = {
|
|
|
16
16
|
},
|
|
17
17
|
handler: async (args, rootPath) => {
|
|
18
18
|
const issueId = typeof args.issue_id === 'string' ? args.issue_id : '';
|
|
19
|
-
if (!issueId)
|
|
20
|
-
throw new Error('issue_id is required');
|
|
19
|
+
if (!issueId) {
|
|
20
|
+
throw new Error('issue_id is required. Get one from projscan_doctor or projscan_analyze (each issue has an `id` field).');
|
|
21
|
+
}
|
|
21
22
|
const scan = await scanRepository(rootPath);
|
|
22
23
|
const issues = await collectIssues(rootPath, scan.files);
|
|
23
24
|
const explanation = await explainIssue(rootPath, issues, issueId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explainIssue.js","sourceRoot":"","sources":["../../../src/mcp/tools/explainIssue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,MAAM,CAAC,MAAM,gBAAgB,GAAY;IACvC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,0TAA0T;IAC5T,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uEAAuE;aACrF;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"explainIssue.js","sourceRoot":"","sources":["../../../src/mcp/tools/explainIssue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,MAAM,CAAC,MAAM,gBAAgB,GAAY;IACvC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,0TAA0T;IAC5T,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uEAAuE;aACrF;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,OAAO,0BAA0B,EAAE,CAAC;QACjG,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACxC,CAAC;CACF,CAAC"}
|
package/dist/mcp/tools/file.js
CHANGED
|
@@ -14,8 +14,9 @@ export const fileTool = {
|
|
|
14
14
|
},
|
|
15
15
|
handler: async (args, rootPath) => {
|
|
16
16
|
const rel = typeof args.file === 'string' ? args.file : '';
|
|
17
|
-
if (!rel)
|
|
18
|
-
throw new Error('file argument is required');
|
|
17
|
+
if (!rel) {
|
|
18
|
+
throw new Error('file argument is required: pass a repo-relative path (e.g. "src/auth.ts"). Use projscan_search { scope: "files" } to find one.');
|
|
19
|
+
}
|
|
19
20
|
return await inspectFile(rootPath, rel);
|
|
20
21
|
},
|
|
21
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/mcp/tools/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC/B,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,2RAA2R;IAC7R,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gDAAgD;aAC9D;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,GAAG;
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/mcp/tools/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC/B,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,2RAA2R;IAC7R,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gDAAgD;aAC9D;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,gIAAgI,CACjI,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
|