projscan 3.6.0 → 3.8.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.
Files changed (36) hide show
  1. package/README.md +22 -21
  2. package/dist/cli/commands/collision.js +8 -1
  3. package/dist/cli/commands/collision.js.map +1 -1
  4. package/dist/cli/commands/coordinate.d.ts +4 -2
  5. package/dist/cli/commands/coordinate.js +73 -18
  6. package/dist/cli/commands/coordinate.js.map +1 -1
  7. package/dist/cli/commands/explain.js +6 -0
  8. package/dist/cli/commands/explain.js.map +1 -1
  9. package/dist/core/agentBrief.js +32 -2
  10. package/dist/core/agentBrief.js.map +1 -1
  11. package/dist/core/collisionDetector.d.ts +10 -0
  12. package/dist/core/collisionDetector.js +67 -1
  13. package/dist/core/collisionDetector.js.map +1 -1
  14. package/dist/core/coordination.d.ts +13 -0
  15. package/dist/core/coordination.js +53 -3
  16. package/dist/core/coordination.js.map +1 -1
  17. package/dist/core/deprecations.d.ts +30 -0
  18. package/dist/core/deprecations.js +34 -0
  19. package/dist/core/deprecations.js.map +1 -0
  20. package/dist/core/preflight.js +50 -0
  21. package/dist/core/preflight.js.map +1 -1
  22. package/dist/mcp/tools/collision.js +15 -1
  23. package/dist/mcp/tools/collision.js.map +1 -1
  24. package/dist/mcp/tools/coordinateWatch.d.ts +4 -0
  25. package/dist/mcp/tools/coordinateWatch.js +138 -0
  26. package/dist/mcp/tools/coordinateWatch.js.map +1 -0
  27. package/dist/mcp/tools/explain.js +5 -0
  28. package/dist/mcp/tools/explain.js.map +1 -1
  29. package/dist/mcp/tools/graph.js +5 -0
  30. package/dist/mcp/tools/graph.js.map +1 -1
  31. package/dist/mcp/tools.js +13 -1
  32. package/dist/mcp/tools.js.map +1 -1
  33. package/dist/projscan-sbom.cdx.json +6 -6
  34. package/dist/tool-manifest.json +43 -5
  35. package/dist/types.d.ts +26 -2
  36. package/package.json +1 -1
@@ -0,0 +1,138 @@
1
+ import { computeCoordination, coordinationSignature } from '../../core/coordination.js';
2
+ const watches = new Map();
3
+ const DEFAULT_INTERVAL_S = 15;
4
+ const MIN_INTERVAL_S = 5;
5
+ const MAX_INTERVAL_S = 600;
6
+ export const coordinateWatchTool = {
7
+ name: 'projscan_coordinate_watch',
8
+ description: "Long-running swarm coordination watch across the repo's in-flight git worktrees. Polls on an interval and emits a `notifications/projscan/coordination_changed` notification whenever the coordination state changes — readiness (clear/caution/conflicted), collision counts, contended claims, or merge hotspots. Pairs with projscan_coordinate (one-shot): use this when an agent wants to react to other agents' changes without re-asking. Local-first. Actions: \"start\" (returns the initial summary + a watchId), \"stop\" (by watchId), \"list\".",
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ action: {
13
+ type: 'string',
14
+ enum: ['start', 'stop', 'list'],
15
+ description: '"start" begins polling (returns initial summary + watchId). "stop" cancels by id. "list" enumerates active watches.',
16
+ },
17
+ base_ref: { type: 'string', description: 'Base ref each worktree is diffed against. (start only)' },
18
+ interval_seconds: {
19
+ type: 'number',
20
+ description: `Poll interval in seconds. Default ${DEFAULT_INTERVAL_S}, min ${MIN_INTERVAL_S}, max ${MAX_INTERVAL_S}. (start only)`,
21
+ },
22
+ watchId: { type: 'string', description: 'Watch id from a previous "start". (stop only)' },
23
+ },
24
+ },
25
+ handler: async (args, rootPath, context) => {
26
+ const action = typeof args.action === 'string' ? args.action : 'start';
27
+ if (action === 'list')
28
+ return listWatches();
29
+ if (action === 'stop')
30
+ return stopWatch(args, context);
31
+ if (action === 'start')
32
+ return startWatch(args, rootPath, context);
33
+ throw new Error(`Unknown action "${action}". Valid actions: start, stop, list.`);
34
+ },
35
+ };
36
+ function clamp(value, min, max) {
37
+ return Math.min(max, Math.max(min, value));
38
+ }
39
+ async function startWatch(args, rootPath, context) {
40
+ const baseRef = typeof args.base_ref === 'string' && args.base_ref ? args.base_ref : undefined;
41
+ const detectOptions = baseRef ? { baseRef } : {};
42
+ const requested = typeof args.interval_seconds === 'number' && Number.isFinite(args.interval_seconds)
43
+ ? args.interval_seconds
44
+ : DEFAULT_INTERVAL_S;
45
+ const intervalSeconds = clamp(requested, MIN_INTERVAL_S, MAX_INTERVAL_S);
46
+ const intervalMs = Math.round(intervalSeconds * 1000);
47
+ const initial = await computeCoordination(rootPath, detectOptions);
48
+ const initialSignature = coordinationSignature(initial);
49
+ if (!context?.registerWatch || !context.notify) {
50
+ return {
51
+ action: 'start',
52
+ watchId: null,
53
+ registered: false,
54
+ reason: 'No notify channel — server was started without one (or this is a non-MCP caller). Initial summary attached; subscribe to the MCP notify channel for incremental updates.',
55
+ intervalSeconds,
56
+ report: initial,
57
+ };
58
+ }
59
+ const watchId = context.registerWatch(() => {
60
+ const state = watches.get(watchId);
61
+ if (state?.timer)
62
+ clearInterval(state.timer);
63
+ watches.delete(watchId);
64
+ });
65
+ const state = {
66
+ watchId,
67
+ intervalMs,
68
+ startedAt: new Date().toISOString(),
69
+ ticks: 0,
70
+ lastSignature: initialSignature,
71
+ inFlight: false,
72
+ timer: null,
73
+ };
74
+ state.timer = setInterval(() => void runTick(watchId, rootPath, detectOptions, context), intervalMs);
75
+ watches.set(watchId, state);
76
+ return { action: 'start', watchId, registered: true, intervalSeconds, report: initial };
77
+ }
78
+ async function runTick(watchId, rootPath, detectOptions, context) {
79
+ const state = watches.get(watchId);
80
+ // Drop overlapping ticks: one computeCoordination at a time per watch.
81
+ if (!state || state.inFlight)
82
+ return;
83
+ state.inFlight = true;
84
+ try {
85
+ const report = await computeCoordination(rootPath, detectOptions);
86
+ const signature = coordinationSignature(report);
87
+ state.ticks += 1;
88
+ if (signature !== state.lastSignature) {
89
+ state.lastSignature = signature;
90
+ context.notify?.('notifications/projscan/coordination_changed', { watchId, report });
91
+ }
92
+ }
93
+ catch (err) {
94
+ context.notify?.('notifications/projscan/coordination_error', {
95
+ watchId,
96
+ error: err instanceof Error ? err.message : String(err),
97
+ });
98
+ }
99
+ finally {
100
+ const current = watches.get(watchId);
101
+ if (current)
102
+ current.inFlight = false;
103
+ }
104
+ }
105
+ function stopWatch(args, context) {
106
+ const watchId = typeof args.watchId === 'string' ? args.watchId : '';
107
+ if (!watchId)
108
+ throw new Error('stop action requires a `watchId` from a previous "start".');
109
+ // unregisterWatch runs the registered cancel (clears the timer + drops state).
110
+ const stopped = context?.unregisterWatch ? context.unregisterWatch(watchId) : false;
111
+ if (!stopped) {
112
+ const state = watches.get(watchId);
113
+ if (state?.timer)
114
+ clearInterval(state.timer);
115
+ watches.delete(watchId);
116
+ }
117
+ return { action: 'stop', watchId, stopped };
118
+ }
119
+ function listWatches() {
120
+ return {
121
+ action: 'list',
122
+ watches: [...watches.values()].map((w) => ({
123
+ watchId: w.watchId,
124
+ startedAt: w.startedAt,
125
+ intervalSeconds: w.intervalMs / 1000,
126
+ ticks: w.ticks,
127
+ })),
128
+ };
129
+ }
130
+ /** Test-only: cancel all timers and drop watch state. */
131
+ export function __resetCoordinateWatchesForTests() {
132
+ for (const state of watches.values()) {
133
+ if (state.timer)
134
+ clearInterval(state.timer);
135
+ }
136
+ watches.clear();
137
+ }
138
+ //# sourceMappingURL=coordinateWatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinateWatch.js","sourceRoot":"","sources":["../../../src/mcp/tools/coordinateWatch.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,11 @@ import path from 'node:path';
2
2
  import { explainFile } from './_shared.js';
3
3
  export const explainTool = {
4
4
  name: 'projscan_explain',
5
+ deprecated: {
6
+ since: '3.8.0',
7
+ replacedBy: 'projscan_file',
8
+ note: 'projscan_file is a strict superset (same purpose/imports/exports plus churn, risk, ownership, and related health).',
9
+ },
5
10
  description: 'Explain a single file: purpose, imports, exports, and potential issues. Useful for understanding unfamiliar code before editing.',
6
11
  inputSchema: {
7
12
  type: 'object',
@@ -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,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,OAAO,MAAM,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/mcp/tools/explain.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,kBAAkB;IACxB,UAAU,EAAE;QACV,KAAK,EAAE,OAAO;QACd,UAAU,EAAE,eAAe;QAC3B,IAAI,EAAE,oHAAoH;KAC3H;IACD,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,OAAO,MAAM,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;CACF,CAAC"}
@@ -3,6 +3,11 @@ import { buildCodeGraph, filesImportingFile, filesImportingPackage, filesDefinin
3
3
  import { loadCachedGraph, saveCachedGraph } from '../../core/indexCache.js';
4
4
  export const graphTool = {
5
5
  name: 'projscan_graph',
6
+ deprecated: {
7
+ since: '3.8.0',
8
+ replacedBy: 'projscan_semantic_graph',
9
+ note: 'projscan_semantic_graph is the stable v3 successor (same nodes/edges with a versioned, supported contract).',
10
+ },
6
11
  description: 'Query the AST-based code graph directly. Returns imports, exports, importers, or symbol definitions for a file or symbol. Agents should prefer this over analyze/doctor/explain for targeted structural questions - it is much cheaper and more accurate.',
7
12
  inputSchema: {
8
13
  type: 'object',
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/mcp/tools/graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/mcp/tools/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,EACT,SAAS,GACV,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG5E,MAAM,CAAC,MAAM,SAAS,GAAY;IAChC,IAAI,EAAE,gBAAgB;IACtB,UAAU,EAAE;QACV,KAAK,EAAE,OAAO;QACd,UAAU,EAAE,yBAAyB;QACrC,IAAI,EAAE,6GAA6G;KACpH;IACD,WAAW,EACT,2PAA2P;IAC7P,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gDAAgD;aAC9D;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2GAA2G;aACzH;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,+NAA+N;gBACjO,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,CAAC;aAC9E;YACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE;YAC5E,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;SAC7F;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEvC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3F,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YACnE,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YACnE,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YAC9E,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CACb,yGAAyG,CAC1G,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YACnF,CAAC;YACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,GAAG,GAAG,MAAM,IAAI,IAAI,CAAC;gBAC3B,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,IAAI,KAAK,CACb,0GAA0G,CAC3G,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YACxF,CAAC;YACD;gBACE,MAAM,IAAI,KAAK,CACb,sBAAsB,SAAS,wEAAwE,CACxG,CAAC;QACN,CAAC;IACH,CAAC;CACF,CAAC"}
package/dist/mcp/tools.js CHANGED
@@ -33,6 +33,7 @@ import { claimTool } from './tools/claim.js';
33
33
  import { mergeRiskTool } from './tools/mergeRisk.js';
34
34
  import { routeTool } from './tools/route.js';
35
35
  import { coordinateTool } from './tools/coordinate.js';
36
+ import { coordinateWatchTool } from './tools/coordinateWatch.js';
36
37
  import { searchTool } from './tools/search.js';
37
38
  import { sessionTool } from './tools/session.js';
38
39
  import { memoryTool } from './tools/memory.js';
@@ -54,6 +55,7 @@ import { qualityScorecardTool } from './tools/qualityScorecard.js';
54
55
  import { adoptionTool } from './tools/adoption.js';
55
56
  import { startTool } from './tools/start.js';
56
57
  import { understandTool } from './tools/understand.js';
58
+ import { deprecationDescriptionPrefix } from '../core/deprecations.js';
57
59
  const tools = [
58
60
  analyzeTool,
59
61
  doctorTool,
@@ -101,9 +103,19 @@ const tools = [
101
103
  mergeRiskTool,
102
104
  routeTool,
103
105
  coordinateTool,
106
+ coordinateWatchTool,
104
107
  ];
105
108
  export function getToolDefinitions() {
106
- return tools.map(({ name, description, inputSchema }) => ({ name, description, inputSchema }));
109
+ return tools.map(({ name, description, inputSchema, deprecated }) => {
110
+ const def = {
111
+ name,
112
+ description: deprecated ? deprecationDescriptionPrefix(deprecated) + description : description,
113
+ inputSchema,
114
+ };
115
+ if (deprecated)
116
+ def.deprecated = deprecated;
117
+ return def;
118
+ });
107
119
  }
108
120
  export function getToolHandler(name) {
109
121
  return tools.find((t) => t.name === name)?.handler;
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.5",
4
- "serialNumber": "urn:uuid:b6adeb25-e8d9-49a4-a809-6d6ad834e51e",
4
+ "serialNumber": "urn:uuid:6b78bfe2-a5f6-4787-a657-a217e74615bd",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2026-06-05T10:34:04.779Z",
7
+ "timestamp": "2026-06-05T16:37:35.349Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "projscan",
11
11
  "name": "projscan-sbom-generator",
12
- "version": "3.6.0"
12
+ "version": "3.8.0"
13
13
  }
14
14
  ],
15
15
  "component": {
16
16
  "type": "application",
17
- "bom-ref": "pkg:npm/projscan@3.6.0",
17
+ "bom-ref": "pkg:npm/projscan@3.8.0",
18
18
  "name": "projscan",
19
- "version": "3.6.0",
20
- "purl": "pkg:npm/projscan@3.6.0"
19
+ "version": "3.8.0",
20
+ "purl": "pkg:npm/projscan@3.8.0"
21
21
  }
22
22
  },
23
23
  "components": [
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "projscan",
3
- "version": "3.6.0",
3
+ "version": "3.8.0",
4
4
  "mcpProtocolVersion": "2025-03-26",
5
- "generatedAt": "2026-06-05T10:34:10.700Z",
6
- "toolCount": 46,
5
+ "generatedAt": "2026-06-05T16:37:40.687Z",
6
+ "toolCount": 47,
7
7
  "tools": [
8
8
  {
9
9
  "name": "projscan_analyze",
@@ -78,7 +78,7 @@
78
78
  },
79
79
  {
80
80
  "name": "projscan_explain",
81
- "description": "Explain a single file: purpose, imports, exports, and potential issues. Useful for understanding unfamiliar code before editing.",
81
+ "description": "[DEPRECATED since 3.8.0, removed in 4.0 — use projscan_file] Explain a single file: purpose, imports, exports, and potential issues. Useful for understanding unfamiliar code before editing.",
82
82
  "inputSchema": {
83
83
  "type": "object",
84
84
  "properties": {
@@ -227,7 +227,7 @@
227
227
  },
228
228
  {
229
229
  "name": "projscan_graph",
230
- "description": "Query the AST-based code graph directly. Returns imports, exports, importers, or symbol definitions for a file or symbol. Agents should prefer this over analyze/doctor/explain for targeted structural questions - it is much cheaper and more accurate.",
230
+ "description": "[DEPRECATED since 3.8.0, removed in 4.0 — use projscan_semantic_graph] Query the AST-based code graph directly. Returns imports, exports, importers, or symbol definitions for a file or symbol. Agents should prefer this over analyze/doctor/explain for targeted structural questions - it is much cheaper and more accurate.",
231
231
  "inputSchema": {
232
232
  "type": "object",
233
233
  "properties": {
@@ -1130,6 +1130,14 @@
1130
1130
  "base_ref": {
1131
1131
  "type": "string",
1132
1132
  "description": "Base ref each worktree is diffed against to compute its changed files. Default: origin/main → main → master → HEAD~1, then the working tree."
1133
+ },
1134
+ "transitive": {
1135
+ "type": "boolean",
1136
+ "description": "Also report multi-hop dependency overlaps (one worktree changed a file another transitively imports), each with a `distance`. Default false — the 1-hop default stays precise; this trades precision for deeper recall."
1137
+ },
1138
+ "max_distance": {
1139
+ "type": "number",
1140
+ "description": "Max import hops when `transitive` is set. Default 5."
1133
1141
  }
1134
1142
  }
1135
1143
  }
@@ -1211,6 +1219,36 @@
1211
1219
  }
1212
1220
  }
1213
1221
  }
1222
+ },
1223
+ {
1224
+ "name": "projscan_coordinate_watch",
1225
+ "description": "Long-running swarm coordination watch across the repo's in-flight git worktrees. Polls on an interval and emits a `notifications/projscan/coordination_changed` notification whenever the coordination state changes — readiness (clear/caution/conflicted), collision counts, contended claims, or merge hotspots. Pairs with projscan_coordinate (one-shot): use this when an agent wants to react to other agents' changes without re-asking. Local-first. Actions: \"start\" (returns the initial summary + a watchId), \"stop\" (by watchId), \"list\".",
1226
+ "inputSchema": {
1227
+ "type": "object",
1228
+ "properties": {
1229
+ "action": {
1230
+ "type": "string",
1231
+ "enum": [
1232
+ "start",
1233
+ "stop",
1234
+ "list"
1235
+ ],
1236
+ "description": "\"start\" begins polling (returns initial summary + watchId). \"stop\" cancels by id. \"list\" enumerates active watches."
1237
+ },
1238
+ "base_ref": {
1239
+ "type": "string",
1240
+ "description": "Base ref each worktree is diffed against. (start only)"
1241
+ },
1242
+ "interval_seconds": {
1243
+ "type": "number",
1244
+ "description": "Poll interval in seconds. Default 15, min 5, max 600. (start only)"
1245
+ },
1246
+ "watchId": {
1247
+ "type": "string",
1248
+ "description": "Watch id from a previous \"start\". (stop only)"
1249
+ }
1250
+ }
1251
+ }
1214
1252
  }
1215
1253
  ]
1216
1254
  }
package/dist/types.d.ts CHANGED
@@ -219,7 +219,7 @@ export interface HealthScore {
219
219
  }
220
220
  export type PreflightMode = 'before_edit' | 'before_commit' | 'before_merge';
221
221
  export type PreflightVerdict = 'proceed' | 'caution' | 'block';
222
- export type PreflightReasonSource = 'doctor' | 'review' | 'taint' | 'session' | 'plugin' | 'supply-chain' | 'memory' | 'changed-files' | 'hotspots' | 'git' | 'format' | 'release';
222
+ export type PreflightReasonSource = 'doctor' | 'review' | 'taint' | 'session' | 'plugin' | 'supply-chain' | 'memory' | 'changed-files' | 'hotspots' | 'git' | 'format' | 'release' | 'coordination';
223
223
  export interface PreflightReason {
224
224
  severity: IssueSeverity;
225
225
  source: PreflightReasonSource;
@@ -312,6 +312,16 @@ export interface PreflightEvidence {
312
312
  warningIssues: number;
313
313
  };
314
314
  releaseScale?: PreflightReleaseScaleEvidence;
315
+ coordination?: {
316
+ available: boolean;
317
+ readiness: 'clear' | 'caution' | 'conflicted';
318
+ worktreeCount: number;
319
+ collisions: {
320
+ high: number;
321
+ medium: number;
322
+ };
323
+ contendedClaims: number;
324
+ };
315
325
  }
316
326
  export interface PreflightReport {
317
327
  schemaVersion: 1;
@@ -1119,7 +1129,7 @@ export interface UnderstandReport {
1119
1129
  truncated?: boolean;
1120
1130
  }
1121
1131
  export interface SessionCoordinationHint {
1122
- id: 'current-worktree-check' | 'remembered-session-context' | 'resolve-conflicts';
1132
+ id: 'current-worktree-check' | 'remembered-session-context' | 'resolve-conflicts' | 'swarm-coordination';
1123
1133
  label: string;
1124
1134
  message: string;
1125
1135
  command: string;
@@ -1931,6 +1941,18 @@ export interface FunctionDetail {
1931
1941
  */
1932
1942
  fanIn?: number;
1933
1943
  }
1944
+ /**
1945
+ * A reversible deprecation marker (3.8 deprecation pass). Present on a tool
1946
+ * means "still works, but slated for removal in 4.0 — prefer `replacedBy`".
1947
+ */
1948
+ export interface ToolDeprecation {
1949
+ /** Version the deprecation was announced in (e.g. "3.8.0"). */
1950
+ since: string;
1951
+ /** The recommended replacement (tool name for MCP, invocation for CLI). */
1952
+ replacedBy: string;
1953
+ /** Optional one-line rationale shown to humans/agents. */
1954
+ note?: string;
1955
+ }
1934
1956
  export interface McpToolDefinition {
1935
1957
  name: string;
1936
1958
  description: string;
@@ -1939,6 +1961,8 @@ export interface McpToolDefinition {
1939
1961
  properties: Record<string, unknown>;
1940
1962
  required?: string[];
1941
1963
  };
1964
+ /** Set when the tool is deprecated and scheduled for removal in 4.0. */
1965
+ deprecated?: ToolDeprecation;
1942
1966
  }
1943
1967
  export interface McpPromptArgument {
1944
1968
  name: string;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "projscan",
3
3
  "mcpName": "io.github.abhiyoheswaran1/projscan",
4
- "version": "3.6.0",
4
+ "version": "3.8.0",
5
5
  "description": "Agent-first code intelligence. MCP server (2025-03-26) with AST parsing for JavaScript, TypeScript, Python, Go, Java, Ruby, Rust, PHP, C#, Kotlin, Swift, and C++; repo understanding maps (projscan_understand), stable v3 semantic graph (projscan_semantic_graph), dataflow risk engine with bridge-helper detection (projscan_dataflow), code graph, file + per-function AST cyclomatic complexity, per-function fan-in + fan-out, coupling + cycle detection, structural PR diff with HTML reporter, coverage report with HTML reporter, intent-grounded one-call PR review (projscan_review with optional `intent` arg, new taint flows, contract changes, and newDataflowRisks) and long-running PR-watch mode with structured per-bucket deltas (projscan_review_watch), first-60-seconds workflow orientation (projscan_start), agent workplans (projscan_workplan), bug-hunt queues (projscan_bug_hunt), product-line planning (projscan_release_train), evidence packs (projscan_evidence_pack), regression planning (projscan_regression_plan), agent briefs (projscan_agent_brief), quality scorecards (projscan_quality_scorecard), and preflight with supply-chain IOC evidence, rule-driven fix suggestions + mechanical apply layer with rollback (projscan_apply_fix, projscan_fix_suggest, projscan_explain_issue), source-to-sink taint analysis (projscan_taint) with truncation reporting, transitive blast-radius analysis with cross-repo mode (projscan_impact for files and symbols), cross-repo workspace registration + intelligence (projscan_workspace_graph), per-function semantic search chunks (sub-file embeddings), per-rule confidence + severity drift + cost-summary analytics with live streaming (projscan_cost_summary), stable local analyzer + reporter plugin API (projscan_plugin, CLI --reporter, opt-in via PROJSCAN_PLUGINS_PREVIEW=1), monorepo workspace awareness with cross-package import policy + per-package dependencies / outdated / audit, BM25 + optional semantic search, cursor pagination, progress notifications, context-budgeted output, and a stable-surface CI guard. CLI on the side.",
6
6
  "type": "module",
7
7
  "main": "./dist/index.js",