projscan 3.5.0 → 3.6.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 (60) hide show
  1. package/README.md +26 -21
  2. package/dist/cli/commands/claim.d.ts +5 -0
  3. package/dist/cli/commands/claim.js +139 -0
  4. package/dist/cli/commands/claim.js.map +1 -0
  5. package/dist/cli/commands/collision.d.ts +5 -0
  6. package/dist/cli/commands/collision.js +55 -0
  7. package/dist/cli/commands/collision.js.map +1 -0
  8. package/dist/cli/commands/coordinate.d.ts +5 -0
  9. package/dist/cli/commands/coordinate.js +43 -0
  10. package/dist/cli/commands/coordinate.js.map +1 -0
  11. package/dist/cli/commands/mergeRisk.d.ts +5 -0
  12. package/dist/cli/commands/mergeRisk.js +58 -0
  13. package/dist/cli/commands/mergeRisk.js.map +1 -0
  14. package/dist/cli/commands/route.d.ts +5 -0
  15. package/dist/cli/commands/route.js +53 -0
  16. package/dist/cli/commands/route.js.map +1 -0
  17. package/dist/cli/index.js +10 -0
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/core/claims.d.ts +60 -0
  20. package/dist/core/claims.js +139 -0
  21. package/dist/core/claims.js.map +1 -0
  22. package/dist/core/collisionDetector.d.ts +55 -0
  23. package/dist/core/collisionDetector.js +156 -0
  24. package/dist/core/collisionDetector.js.map +1 -0
  25. package/dist/core/coordination.d.ts +49 -0
  26. package/dist/core/coordination.js +71 -0
  27. package/dist/core/coordination.js.map +1 -0
  28. package/dist/core/embeddings.js +30 -17
  29. package/dist/core/embeddings.js.map +1 -1
  30. package/dist/core/intentRouter.d.ts +40 -0
  31. package/dist/core/intentRouter.js +213 -0
  32. package/dist/core/intentRouter.js.map +1 -0
  33. package/dist/core/mergeRisk.d.ts +42 -0
  34. package/dist/core/mergeRisk.js +71 -0
  35. package/dist/core/mergeRisk.js.map +1 -0
  36. package/dist/core/roadmapCatalog.js +50 -50
  37. package/dist/core/roadmapCatalog.js.map +1 -1
  38. package/dist/mcp/tools/claim.d.ts +7 -0
  39. package/dist/mcp/tools/claim.js +69 -0
  40. package/dist/mcp/tools/claim.js.map +1 -0
  41. package/dist/mcp/tools/collision.d.ts +7 -0
  42. package/dist/mcp/tools/collision.js +24 -0
  43. package/dist/mcp/tools/collision.js.map +1 -0
  44. package/dist/mcp/tools/coordinate.d.ts +7 -0
  45. package/dist/mcp/tools/coordinate.js +24 -0
  46. package/dist/mcp/tools/coordinate.js.map +1 -0
  47. package/dist/mcp/tools/mergeRisk.d.ts +7 -0
  48. package/dist/mcp/tools/mergeRisk.js +24 -0
  49. package/dist/mcp/tools/mergeRisk.js.map +1 -0
  50. package/dist/mcp/tools/route.d.ts +7 -0
  51. package/dist/mcp/tools/route.js +24 -0
  52. package/dist/mcp/tools/route.js.map +1 -0
  53. package/dist/mcp/tools.js +10 -0
  54. package/dist/mcp/tools.js.map +1 -1
  55. package/dist/projscan-sbom.cdx.json +6 -6
  56. package/dist/tool-manifest.json +94 -3
  57. package/dist/utils/formatSupport.d.ts +9 -0
  58. package/dist/utils/formatSupport.js +9 -0
  59. package/dist/utils/formatSupport.js.map +1 -1
  60. package/package.json +1 -1
@@ -76,23 +76,23 @@ const ROADMAP_3_2_CATALOG = {
76
76
  '3.5.x': {
77
77
  line: '3.5.x',
78
78
  track: {
79
- theme: 'First 10 Minutes UX',
80
- outcome: 'A new user gets a single guided path from trust boundary to first PR evidence.',
79
+ theme: 'Plugin Trust',
80
+ outcome: 'The surfaces that touch untrusted repositories cannot execute their code without explicit approval.',
81
81
  includedInPlan: true,
82
- scope: ['first-ten-minutes command path', 'start report guidance', 'adoption docs alignment'],
83
- successCriteria: ['start output includes the guided path', 'docs lead with the same path', 'MCP and CLI onboarding stay consistent'],
82
+ scope: ['fix-layer --ignore-scripts', 'plugin trust-on-first-use', 'embedding model graceful degradation'],
83
+ successCriteria: ['projscan fix never runs a scanned repo lifecycle script', 'plugins execute only after projscan plugin trust', 'an embedding model-load failure degrades to BM25 instead of throwing'],
84
84
  },
85
85
  tasks: [
86
86
  {
87
- id: 'rt-3-5-first-10-minutes-ux',
87
+ id: 'rt-3-5-plugin-trust',
88
88
  priority: 'p1',
89
- title: 'Add first-ten-minutes guidance',
90
- why: 'The broad command catalog should not be the first experience for a new team.',
89
+ title: 'Gate untrusted-repo code execution',
90
+ why: 'A scanned repo is untrusted input; fix-layer installs and local plugins must not execute its code without explicit, per-artifact approval.',
91
91
  track: '3.5.x',
92
- files: ['src/core/start.ts', 'src/core/adoption.ts', 'docs/FIRST-10-MINUTES.md'],
92
+ files: ['src/fixes/eslintFix.ts', 'src/core/pluginTrust.ts', 'src/core/plugins.ts'],
93
93
  verification: {
94
- commands: ['projscan start --mode before_edit --format json', 'projscan first-run --format json'],
95
- expected: 'Start and first-run surfaces point to the same first-ten-minutes path.',
94
+ commands: ['npm test', 'projscan plugin trust --all'],
95
+ expected: 'Fix installs use --ignore-scripts and plugins run only once trusted.',
96
96
  },
97
97
  },
98
98
  ],
@@ -100,23 +100,23 @@ const ROADMAP_3_2_CATALOG = {
100
100
  '3.6.x': {
101
101
  line: '3.6.x',
102
102
  track: {
103
- theme: 'Maintainability Hardening',
104
- outcome: 'Future roadmap and evidence changes land in smaller focused modules instead of growing hotspots.',
103
+ theme: 'Swarm Collision Detection',
104
+ outcome: 'When two in-flight worktrees have overlapping blast radius, an agent learns before the changes collide.',
105
105
  includedInPlan: true,
106
- scope: ['roadmap catalog extraction', 'evidence formatting boundaries', 'stable public exports'],
107
- successCriteria: ['core orchestration remains small and readable', 'public API exports remain stable', 'focused tests cover extracted helpers'],
106
+ scope: ['per-worktree changed-symbol blast radius', 'pairwise overlap detection', 'projscan_collision MCP + CLI'],
107
+ successCriteria: ['collision report names overlapping worktree pairs with the files and symbols at risk', 'blast radius reuses the impact graph', 'stays local-first over sibling git worktrees'],
108
108
  },
109
109
  tasks: [
110
110
  {
111
- id: 'rt-3-6-maintainability-hardening',
111
+ id: 'rt-3-6-collision-detection',
112
112
  priority: 'p1',
113
- title: 'Extract planning and evidence helpers',
114
- why: 'The product surface is large enough that static planning data and formatting helpers need clear ownership.',
113
+ title: 'Detect cross-worktree change collisions',
114
+ why: 'Parallel agents editing one repo collide when their blast radii overlap; surfacing that pre-merge is the flagship coordination value.',
115
115
  track: '3.6.x',
116
- files: ['src/core/roadmapCatalog.ts', 'src/core/releaseTrain.ts', 'src/core/releaseEvidence.ts', 'src/types.ts'],
116
+ files: ['src/core/collisionDetector.ts', 'src/mcp/tools/collision.ts', 'src/cli/commands/collision.ts'],
117
117
  verification: {
118
- commands: ['npm run build', 'npm test'],
119
- expected: 'Extraction preserves stable exports, output schemas, and test behavior.',
118
+ commands: ['projscan collisions --format json'],
119
+ expected: 'Report lists worktree pairs whose changed-symbol blast radii overlap.',
120
120
  },
121
121
  },
122
122
  ],
@@ -124,23 +124,23 @@ const ROADMAP_3_2_CATALOG = {
124
124
  '3.7.x': {
125
125
  line: '3.7.x',
126
126
  track: {
127
- theme: 'Graph And Dataflow Precision',
128
- outcome: 'Dataflow catches one more real framework source pattern while keeping false positives narrow.',
127
+ theme: 'Claims And Leases',
128
+ outcome: 'An agent can claim a file, symbol, or subsystem so the swarm sees who owns what and warns on contention.',
129
129
  includedInPlan: true,
130
- scope: ['framework request-source precision', 'review-time dataflow calibration', 'false-positive guard tests'],
131
- successCriteria: ['new source pattern is detected', 'unrelated helpers are not treated as request data', 'generated and test filters remain quiet by default'],
130
+ scope: ['local claim store under .projscan-cache', 'contention warnings', 'projscan_claim MCP + CLI'],
131
+ successCriteria: ['claims persist locally and are scoped to the active repo', 'overlapping claims surface a contention warning', 'claims can be released explicitly'],
132
132
  },
133
133
  tasks: [
134
134
  {
135
- id: 'rt-3-7-graph-dataflow-precision',
135
+ id: 'rt-3-7-claims-leases',
136
136
  priority: 'p1',
137
- title: 'Add a narrow framework dataflow precision pass',
138
- why: 'The graph/dataflow moat improves only when new precision comes with false-positive guardrails.',
137
+ title: 'Add local claims / leases for swarm work',
138
+ why: 'Coordination needs a lightweight ownership signal so two agents do not silently take the same file or symbol.',
139
139
  track: '3.7.x',
140
- files: ['src/core/frameworkSources.ts', 'src/core/dataflow.ts', 'tests/core/dataflow.test.ts'],
140
+ files: ['src/core/claims.ts', 'src/mcp/tools/claim.ts', 'src/cli/commands/claim.ts'],
141
141
  verification: {
142
- commands: ['projscan dataflow --format json', 'npm test'],
143
- expected: 'Dataflow reports the new framework source pattern and avoids unrelated helper calls.',
142
+ commands: ['projscan claim add src/auth.ts --agent a', 'projscan claim list --format json'],
143
+ expected: 'Claims persist locally and overlapping claims warn on contention.',
144
144
  },
145
145
  },
146
146
  ],
@@ -148,23 +148,23 @@ const ROADMAP_3_2_CATALOG = {
148
148
  '3.8.x': {
149
149
  line: '3.8.x',
150
150
  track: {
151
- theme: 'Plugin Ecosystem',
152
- outcome: 'Teams can validate local policy plugins with clearer trust and context-readiness guidance.',
151
+ theme: 'Merge-Risk Preflight',
152
+ outcome: 'Given the set of in-flight worktrees, preflight returns the safe integration order and where conflict risk concentrates.',
153
153
  includedInPlan: true,
154
- scope: ['plugin test result guidance', 'trust reminder', 'gallery and authoring docs'],
155
- successCriteria: ['plugin test output names trust boundaries', 'graph/dataflow context needs are visible', 'docs show copyable validation commands'],
154
+ scope: ['multi-branch preflight verdict', 'integration order', 'conflict-risk concentration'],
155
+ successCriteria: ['preflight accepts multiple in-flight worktrees', 'returns a safe integration order', 'flags files where multiple branches and blast radii concentrate'],
156
156
  },
157
157
  tasks: [
158
158
  {
159
- id: 'rt-3-8-plugin-ecosystem',
159
+ id: 'rt-3-8-merge-risk-preflight',
160
160
  priority: 'p1',
161
- title: 'Improve local plugin authoring feedback',
162
- why: 'Plugins are useful when teams can test local policy safely before enabling execution.',
161
+ title: 'Extend preflight to a multi-branch integration verdict',
162
+ why: 'Once collisions and claims exist, teams need an ordering: which in-flight branch is safe to merge first.',
163
163
  track: '3.8.x',
164
- files: ['src/core/pluginDx.ts', 'tests/core/pluginDx.test.ts', 'docs/PLUGIN-AUTHORING.md', 'docs/PLUGIN-GALLERY.md'],
164
+ files: ['src/core/preflight.ts', 'src/core/collisionDetector.ts'],
165
165
  verification: {
166
- commands: ['projscan plugin test docs/examples/plugins/policy.projscan-plugin.json --format json'],
167
- expected: 'Plugin test output includes trust guidance, validation commands, and context capability notes.',
166
+ commands: ['projscan preflight --mode before_merge --format json'],
167
+ expected: 'Preflight returns integration order and conflict-risk concentration across in-flight worktrees.',
168
168
  },
169
169
  },
170
170
  ],
@@ -172,23 +172,23 @@ const ROADMAP_3_2_CATALOG = {
172
172
  '3.9.x': {
173
173
  line: '3.9.x',
174
174
  track: {
175
- theme: 'Multi-Agent Coordination',
176
- outcome: 'Agents can tell current worktree risk from remembered session context before parallel edits continue.',
175
+ theme: 'Agent Ergonomics And Coordination Proof',
176
+ outcome: 'Agents reach the right capability through one budget-shaped entry point, and the coordination layer is measured for outcome value.',
177
177
  includedInPlan: true,
178
- scope: ['coordination hints', 'session resource clarity', 'agent brief handoff commands'],
179
- successCriteria: ['resources explain current-vs-remembered risk', 'agent briefs include conflict-resolution commands', 'start output keeps the distinction visible'],
178
+ scope: ['adaptive intent router over the tool surface', 'budget-shaped next actions', 'with/without coordination outcome metrics'],
179
+ successCriteria: ['a single entry tool routes to the right capability', 'router output is budget-shaped and shrinks the tool-list footprint', 'dogfood/trial reports compare task success and token cost with vs without coordination'],
180
180
  },
181
181
  tasks: [
182
182
  {
183
- id: 'rt-3-9-multi-agent-coordination',
183
+ id: 'rt-3-9-agent-ergonomics-and-proof',
184
184
  priority: 'p1',
185
- title: 'Add compact multi-agent coordination hints',
186
- why: 'Shared session state helps only when agents understand whether a signal is current worktree evidence or older remembered context.',
185
+ title: 'Add an intent router and coordination outcome proof',
186
+ why: 'A 41-tool surface costs context every turn; one adaptive entry point plus measured outcomes proves the coordination arc earns its keep.',
187
187
  track: '3.9.x',
188
- files: ['src/core/sessionResources.ts', 'src/core/agentBrief.ts', 'src/core/start.ts'],
188
+ files: ['src/mcp/tools', 'src/core/dogfood.ts', 'src/core/trial.ts'],
189
189
  verification: {
190
- commands: ['projscan agent-brief --format json', 'projscan session current --format json'],
191
- expected: 'Coordination surfaces include current-vs-remembered hints and exact follow-up commands.',
190
+ commands: ['projscan dogfood --format json'],
191
+ expected: 'Routing shrinks the tool footprint and proof reports compare with/without coordination.',
192
192
  },
193
193
  },
194
194
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"roadmapCatalog.js","sourceRoot":"","sources":["../../src/core/roadmapCatalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roadmapCatalog.js","sourceRoot":"","sources":["../../src/core/roadmapCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { McpTool } from './_shared.js';
2
+ /**
3
+ * `projscan_claim` (4.x coordination arc) — advisory claims / leases so parallel
4
+ * agents see who owns which file, directory, or symbol. Shared across the
5
+ * repo's git worktrees; local-first.
6
+ */
7
+ export declare const claimTool: McpTool;
@@ -0,0 +1,69 @@
1
+ import { addClaim, listClaims, releaseClaim, pruneClaims } from '../../core/claims.js';
2
+ /**
3
+ * `projscan_claim` (4.x coordination arc) — advisory claims / leases so parallel
4
+ * agents see who owns which file, directory, or symbol. Shared across the
5
+ * repo's git worktrees; local-first.
6
+ */
7
+ export const claimTool = {
8
+ name: 'projscan_claim',
9
+ description: "Coordinate parallel agents with advisory claims/leases over files, directories, or symbols, shared across the repo's git worktrees. action:\"add\" records a claim (optionally a lease with `ttl_seconds`) and returns any `contention` (another agent already holding an overlapping, non-expired claim); \"list\" returns claims; \"release\" drops a claim by `id`, by `target`, or all of an `agent`'s; \"prune\" removes expired-lease claims. Local-first and advisory — claiming an already-claimed target still succeeds, but surfaces contention so the swarm can coordinate.",
10
+ inputSchema: {
11
+ type: 'object',
12
+ properties: {
13
+ action: {
14
+ type: 'string',
15
+ enum: ['add', 'list', 'release', 'prune'],
16
+ description: 'Default "list". "add" records a claim; "release" drops one; "prune" removes expired leases.',
17
+ },
18
+ target: {
19
+ type: 'string',
20
+ description: '"add"/"release" — a repo-relative file or directory path, or a symbol name.',
21
+ },
22
+ agent: {
23
+ type: 'string',
24
+ description: '"add" — who holds the claim. "release" — scope the release to this agent.',
25
+ },
26
+ note: { type: 'string', description: '"add" — optional human-readable note.' },
27
+ ttl_seconds: { type: 'number', description: '"add" — lease duration in seconds; the claim expires after it. Omit for a permanent claim.' },
28
+ id: { type: 'string', description: '"release" — the claim id to drop.' },
29
+ },
30
+ },
31
+ handler: async (args, rootPath) => {
32
+ const action = typeof args.action === 'string' ? args.action : 'list';
33
+ switch (action) {
34
+ case 'add': {
35
+ const target = typeof args.target === 'string' ? args.target : '';
36
+ const agent = typeof args.agent === 'string' ? args.agent : '';
37
+ if (!target || !agent) {
38
+ throw new Error('projscan_claim add requires both `target` and `agent`.');
39
+ }
40
+ const note = typeof args.note === 'string' && args.note.length > 0 ? args.note : undefined;
41
+ const ttlSeconds = typeof args.ttl_seconds === 'number' && args.ttl_seconds > 0 ? args.ttl_seconds : undefined;
42
+ return addClaim(rootPath, {
43
+ target,
44
+ agent,
45
+ ...(note ? { note } : {}),
46
+ ...(ttlSeconds !== undefined ? { ttlSeconds } : {}),
47
+ });
48
+ }
49
+ case 'release': {
50
+ const selector = {
51
+ id: typeof args.id === 'string' && args.id.length > 0 ? args.id : undefined,
52
+ target: typeof args.target === 'string' && args.target.length > 0 ? args.target : undefined,
53
+ agent: typeof args.agent === 'string' && args.agent.length > 0 ? args.agent : undefined,
54
+ };
55
+ if (!selector.id && !selector.target && !selector.agent) {
56
+ throw new Error('projscan_claim release requires one of `id`, `target`, or `agent`.');
57
+ }
58
+ return { released: await releaseClaim(rootPath, selector) };
59
+ }
60
+ case 'prune':
61
+ return { pruned: await pruneClaims(rootPath) };
62
+ case 'list':
63
+ return { claims: await listClaims(rootPath) };
64
+ default:
65
+ throw new Error(`Unknown action "${action}". Known: add, list, release, prune.`);
66
+ }
67
+ },
68
+ };
69
+ //# sourceMappingURL=claim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim.js","sourceRoot":"","sources":["../../../src/mcp/tools/claim.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { McpTool } from './_shared.js';
2
+ /**
3
+ * `projscan_collision` (4.x coordination arc) — detect change collisions across
4
+ * the repo's in-flight git worktrees, so parallel agents see overlaps before
5
+ * their branches merge. Local-first; reads `git worktree list` only.
6
+ */
7
+ export declare const collisionTool: McpTool;
@@ -0,0 +1,24 @@
1
+ import { detectCollisions } from '../../core/collisionDetector.js';
2
+ /**
3
+ * `projscan_collision` (4.x coordination arc) — detect change collisions across
4
+ * the repo's in-flight git worktrees, so parallel agents see overlaps before
5
+ * their branches merge. Local-first; reads `git worktree list` only.
6
+ */
7
+ export const collisionTool = {
8
+ name: 'projscan_collision',
9
+ description: "Detect change collisions across the repo's in-flight git worktrees (parallel agents). Reports same-file edits (two worktrees changed the same file) and dependency overlaps (one worktree changed a file another's change imports, via the import graph) BEFORE the branches merge. Local-first; needs at least two worktrees. Each collision has `kind` (same-file | dependency), `severity` (high | medium), the two worktree paths, and the files at risk. Use this when coordinating multiple agents/sub-agents working the same repo.",
10
+ inputSchema: {
11
+ type: 'object',
12
+ properties: {
13
+ base_ref: {
14
+ type: 'string',
15
+ description: 'Base ref each worktree is diffed against to compute its changed files. Default: origin/main → main → master → HEAD~1, then the working tree.',
16
+ },
17
+ },
18
+ },
19
+ handler: async (args, rootPath) => {
20
+ const baseRef = typeof args.base_ref === 'string' && args.base_ref.length > 0 ? args.base_ref : undefined;
21
+ return detectCollisions(rootPath, baseRef ? { baseRef } : {});
22
+ },
23
+ };
24
+ //# sourceMappingURL=collision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collision.js","sourceRoot":"","sources":["../../../src/mcp/tools/collision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGnE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,4gBAA4gB;IAC9gB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,8IAA8I;aACjJ;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1G,OAAO,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { McpTool } from './_shared.js';
2
+ /**
3
+ * `projscan_coordinate` (4.x arc, epic 5 — capstone) — one-call coordination
4
+ * read across the repo's in-flight worktrees, composing collisions, claims, and
5
+ * merge-risk into a single readiness verdict + counts. Local-first.
6
+ */
7
+ export declare const coordinateTool: McpTool;
@@ -0,0 +1,24 @@
1
+ import { computeCoordination } from '../../core/coordination.js';
2
+ /**
3
+ * `projscan_coordinate` (4.x arc, epic 5 — capstone) — one-call coordination
4
+ * read across the repo's in-flight worktrees, composing collisions, claims, and
5
+ * merge-risk into a single readiness verdict + counts. Local-first.
6
+ */
7
+ export const coordinateTool = {
8
+ name: 'projscan_coordinate',
9
+ description: "One-call coordination read across the repo's in-flight git worktrees (parallel agents). Composes collisions, claims, and merge-risk into a `readiness` verdict (clear | caution | conflicted) plus counts (collisions by severity, contended claim targets, merge hotspots) and the recommended integration order. The single entry point for swarm coordination — use it before continuing parallel work. Local-first; needs at least two worktrees.",
10
+ inputSchema: {
11
+ type: 'object',
12
+ properties: {
13
+ base_ref: {
14
+ type: 'string',
15
+ description: 'Base ref each worktree is diffed against. Default: origin/main → main → master → HEAD~1.',
16
+ },
17
+ },
18
+ },
19
+ handler: async (args, rootPath) => {
20
+ const baseRef = typeof args.base_ref === 'string' && args.base_ref.length > 0 ? args.base_ref : undefined;
21
+ return computeCoordination(rootPath, baseRef ? { baseRef } : {});
22
+ },
23
+ };
24
+ //# sourceMappingURL=coordinate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinate.js","sourceRoot":"","sources":["../../../src/mcp/tools/coordinate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAY;IACrC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,ubAAub;IACzb,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0FAA0F;aACxG;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1G,OAAO,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { McpTool } from './_shared.js';
2
+ /**
3
+ * `projscan_merge_risk` (4.x coordination arc, epic 3) — given the repo's
4
+ * in-flight worktrees and their collisions, return a safe integration order and
5
+ * the files where conflict risk concentrates. Builds on `projscan_collision`.
6
+ */
7
+ export declare const mergeRiskTool: McpTool;
@@ -0,0 +1,24 @@
1
+ import { computeMergeRisk } from '../../core/mergeRisk.js';
2
+ /**
3
+ * `projscan_merge_risk` (4.x coordination arc, epic 3) — given the repo's
4
+ * in-flight worktrees and their collisions, return a safe integration order and
5
+ * the files where conflict risk concentrates. Builds on `projscan_collision`.
6
+ */
7
+ export const mergeRiskTool = {
8
+ name: 'projscan_merge_risk',
9
+ description: "Merge-risk preflight across the repo's in-flight git worktrees (parallel agents). Given each worktree's changes and the collisions between them, returns `integrationOrder` (merge the least-entangled branch first, each with a risk score) and `hotFiles` (files changed by two or more worktrees — where merge conflict risk concentrates). Builds on projscan_collision; local-first; needs at least two worktrees.",
10
+ inputSchema: {
11
+ type: 'object',
12
+ properties: {
13
+ base_ref: {
14
+ type: 'string',
15
+ description: 'Base ref each worktree is diffed against. Default: origin/main → main → master → HEAD~1.',
16
+ },
17
+ },
18
+ },
19
+ handler: async (args, rootPath) => {
20
+ const baseRef = typeof args.base_ref === 'string' && args.base_ref.length > 0 ? args.base_ref : undefined;
21
+ return computeMergeRisk(rootPath, baseRef ? { baseRef } : {});
22
+ },
23
+ };
24
+ //# sourceMappingURL=mergeRisk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeRisk.js","sourceRoot":"","sources":["../../../src/mcp/tools/mergeRisk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,yZAAyZ;IAC3Z,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0FAA0F;aACxG;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1G,OAAO,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { McpTool } from './_shared.js';
2
+ /**
3
+ * `projscan_route` (4.x agent-ergonomics, epic 4) — map a stated goal to the
4
+ * right projscan tool, so an agent can find the one tool it needs without
5
+ * reasoning over the whole surface. Deterministic (no LLM).
6
+ */
7
+ export declare const routeTool: McpTool;
@@ -0,0 +1,24 @@
1
+ import { routeIntent } from '../../core/intentRouter.js';
2
+ /**
3
+ * `projscan_route` (4.x agent-ergonomics, epic 4) — map a stated goal to the
4
+ * right projscan tool, so an agent can find the one tool it needs without
5
+ * reasoning over the whole surface. Deterministic (no LLM).
6
+ */
7
+ export const routeTool = {
8
+ name: 'projscan_route',
9
+ description: "Find the right projscan tool for a goal. Given `intent` (free text — e.g. \"what breaks if I rename X\", \"coordinate parallel agents\", \"is it safe to commit\"), returns the best-matching tool(s) with the exact call and why to use each. With no `intent`, returns the full capability catalog grouped by category. A discovery entry point over projscan's surface; deterministic keyword routing, no inference.",
10
+ inputSchema: {
11
+ type: 'object',
12
+ properties: {
13
+ intent: {
14
+ type: 'string',
15
+ description: 'What you want to do, in plain words. Omit to get the full grouped tool catalog.',
16
+ },
17
+ },
18
+ },
19
+ handler: async (args) => {
20
+ const intent = typeof args.intent === 'string' && args.intent.length > 0 ? args.intent : undefined;
21
+ return routeIntent(intent);
22
+ },
23
+ };
24
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/mcp/tools/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGzD;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAY;IAChC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,yZAAyZ;IAC3Z,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iFAAiF;aAC/F;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACnG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC"}
package/dist/mcp/tools.js CHANGED
@@ -28,6 +28,11 @@ import { reviewTool } from './tools/review.js';
28
28
  import { fixSuggestTool } from './tools/fixSuggest.js';
29
29
  import { explainIssueTool } from './tools/explainIssue.js';
30
30
  import { impactTool } from './tools/impact.js';
31
+ import { collisionTool } from './tools/collision.js';
32
+ import { claimTool } from './tools/claim.js';
33
+ import { mergeRiskTool } from './tools/mergeRisk.js';
34
+ import { routeTool } from './tools/route.js';
35
+ import { coordinateTool } from './tools/coordinate.js';
31
36
  import { searchTool } from './tools/search.js';
32
37
  import { sessionTool } from './tools/session.js';
33
38
  import { memoryTool } from './tools/memory.js';
@@ -91,6 +96,11 @@ const tools = [
91
96
  adoptionTool,
92
97
  startTool,
93
98
  understandTool,
99
+ collisionTool,
100
+ claimTool,
101
+ mergeRiskTool,
102
+ routeTool,
103
+ coordinateTool,
94
104
  ];
95
105
  export function getToolDefinitions() {
96
106
  return tools.map(({ name, description, inputSchema }) => ({ name, description, inputSchema }));
@@ -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:184f4802-bc14-4e4d-b946-67837b3471f9",
4
+ "serialNumber": "urn:uuid:b6adeb25-e8d9-49a4-a809-6d6ad834e51e",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2026-06-04T20:31:38.986Z",
7
+ "timestamp": "2026-06-05T10:34:04.779Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "projscan",
11
11
  "name": "projscan-sbom-generator",
12
- "version": "3.5.0"
12
+ "version": "3.6.0"
13
13
  }
14
14
  ],
15
15
  "component": {
16
16
  "type": "application",
17
- "bom-ref": "pkg:npm/projscan@3.5.0",
17
+ "bom-ref": "pkg:npm/projscan@3.6.0",
18
18
  "name": "projscan",
19
- "version": "3.5.0",
20
- "purl": "pkg:npm/projscan@3.5.0"
19
+ "version": "3.6.0",
20
+ "purl": "pkg:npm/projscan@3.6.0"
21
21
  }
22
22
  },
23
23
  "components": [