projscan 3.0.1 → 3.0.2
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 +21 -21
- package/dist/core/dataflowFilters.js +4 -2
- package/dist/core/dataflowFilters.js.map +1 -1
- package/dist/core/impact.d.ts +3 -0
- package/dist/core/impact.js +15 -5
- package/dist/core/impact.js.map +1 -1
- package/dist/core/ownership.d.ts +3 -0
- package/dist/core/ownership.js +84 -0
- package/dist/core/ownership.js.map +1 -0
- package/dist/core/releaseTrain.js +68 -0
- package/dist/core/releaseTrain.js.map +1 -1
- package/dist/mcp/tools/impact.js +12 -7
- package/dist/mcp/tools/impact.js.map +1 -1
- package/dist/projscan-sbom.cdx.json +6 -6
- package/dist/tool-manifest.json +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
|
|
10
10
|
**Agent-first code intelligence.** An MCP server that lets AI coding agents (Claude Code, Codex, Cursor, Gemini, Windsurf, Cline, Continue, Zed — any MCP-aware client) query your codebase — with a CLI for humans and a local plugin layer for team-specific policy and reporting.
|
|
11
11
|
|
|
12
|
-
[AI Agent Quick Start](#ai-agent-integration-mcp) · [CLI Quick Start](#quick-start) · [Commands](#commands) · [Full Guide](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.
|
|
12
|
+
[AI Agent Quick Start](#ai-agent-integration-mcp) · [CLI Quick Start](#quick-start) · [Commands](#commands) · [Full Guide](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/GUIDE.md) · [Roadmap](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/ROADMAP.md)
|
|
13
13
|
|
|
14
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
14
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/projscan-reporter-plugin.png" alt="projscan reporter plugin running in a macOS-style terminal window with a team health summary" width="700">
|
|
15
15
|
|
|
16
16
|
</div>
|
|
17
17
|
|
|
@@ -33,7 +33,7 @@ Humans get the same thing through the CLI.
|
|
|
33
33
|
npx projscan
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
36
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/projscan-reporter-plugin.gif" alt="projscan doctor rendered through a local reporter plugin in a macOS-style terminal window" width="700">
|
|
37
37
|
|
|
38
38
|
Run `projscan doctor` for a focused health check:
|
|
39
39
|
|
|
@@ -41,7 +41,7 @@ Run `projscan doctor` for a focused health check:
|
|
|
41
41
|
npx projscan doctor
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
44
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20doctor.gif" alt="npx projscan doctor" width="700">
|
|
45
45
|
|
|
46
46
|
## Install
|
|
47
47
|
|
|
@@ -97,9 +97,9 @@ projscan plugin test .projscan-plugins/policy.projscan-plugin.json
|
|
|
97
97
|
PROJSCAN_PLUGINS_PREVIEW=1 projscan doctor --reporter team-radar
|
|
98
98
|
```
|
|
99
99
|
|
|
100
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
100
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20--help.gif" alt="npx projscan --help" width="700">
|
|
101
101
|
|
|
102
|
-
For a comprehensive walkthrough, see the **[Full Guide](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.
|
|
102
|
+
For a comprehensive walkthrough, see the **[Full Guide](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/GUIDE.md)**.
|
|
103
103
|
|
|
104
104
|
## Commands
|
|
105
105
|
|
|
@@ -155,31 +155,31 @@ projscan --help
|
|
|
155
155
|
<details>
|
|
156
156
|
<summary><strong>projscan structure</strong> - Directory tree with file counts</summary>
|
|
157
157
|
|
|
158
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
158
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20structure.gif" alt="npx projscan structure" width="700">
|
|
159
159
|
</details>
|
|
160
160
|
|
|
161
161
|
<details>
|
|
162
162
|
<summary><strong>projscan diagram</strong> - Architecture visualization</summary>
|
|
163
163
|
|
|
164
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
164
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20diagram.gif" alt="npx projscan diagram" width="700">
|
|
165
165
|
</details>
|
|
166
166
|
|
|
167
167
|
<details>
|
|
168
168
|
<summary><strong>projscan dependencies</strong> - Dependency analysis</summary>
|
|
169
169
|
|
|
170
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
170
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20dependencies.gif" alt="npx projscan dependencies" width="700">
|
|
171
171
|
</details>
|
|
172
172
|
|
|
173
173
|
<details>
|
|
174
174
|
<summary><strong>projscan explain</strong> - File explanation</summary>
|
|
175
175
|
|
|
176
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
176
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20explain.gif" alt="npx projscan explain" width="700">
|
|
177
177
|
</details>
|
|
178
178
|
|
|
179
179
|
<details>
|
|
180
180
|
<summary><strong>projscan badge</strong> - Health badge generation</summary>
|
|
181
181
|
|
|
182
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
182
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20badge.gif" alt="npx projscan badge" width="700">
|
|
183
183
|
</details>
|
|
184
184
|
|
|
185
185
|
### Output Formats
|
|
@@ -201,7 +201,7 @@ Run `projscan help` for the generated command-by-command support matrix.
|
|
|
201
201
|
|
|
202
202
|
projscan can load local plugins from `.projscan-plugins/` when `PROJSCAN_PLUGINS_PREVIEW=1` is set. The environment flag is kept for explicit local-code opt-in. Analyzer plugins emit normal projscan issues; reporter plugins render supported CLI commands with team-specific output.
|
|
203
203
|
|
|
204
|
-
**2.0 upgrade notes:** migrating from 1.x or authoring plugins? Start with the [2.0 Migration Guide](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.
|
|
204
|
+
**2.0 upgrade notes:** migrating from 1.x or authoring plugins? Start with the [2.0 Migration Guide](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/2.0-MIGRATION.md), then use [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/PLUGIN-AUTHORING.md), the [Plugin Gallery](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/PLUGIN-GALLERY.md), and the [manifest schema](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/plugin.schema.json) as the stable contract.
|
|
205
205
|
|
|
206
206
|
```bash
|
|
207
207
|
projscan plugin list
|
|
@@ -210,9 +210,9 @@ PROJSCAN_PLUGINS_PREVIEW=1 projscan doctor --reporter team-radar
|
|
|
210
210
|
PROJSCAN_PLUGINS_PREVIEW=1 projscan ci --reporter team-radar --min-score 80
|
|
211
211
|
```
|
|
212
212
|
|
|
213
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
213
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/projscan-reporter-plugin.gif" alt="projscan local reporter plugin rendering a team health report" width="700">
|
|
214
214
|
|
|
215
|
-
Reporter plugins are intentionally CLI-only. MCP tools keep returning structured JSON-compatible payloads so agents can reason over stable data, while humans can get a polished local report for their team. Custom presentation, team-branded summaries, and white-label reports belong in reporter plugins rather than new core HTML theming flags. See [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.
|
|
215
|
+
Reporter plugins are intentionally CLI-only. MCP tools keep returning structured JSON-compatible payloads so agents can reason over stable data, while humans can get a polished local report for their team. Custom presentation, team-branded summaries, and white-label reports belong in reporter plugins rather than new core HTML theming flags. See [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/PLUGIN-AUTHORING.md) for manifest shape, `render(context)`, validation, and the trust model.
|
|
216
216
|
|
|
217
217
|
### Options
|
|
218
218
|
|
|
@@ -373,7 +373,7 @@ If you read projscan's [Socket report](https://socket.dev/npm/package/projscan),
|
|
|
373
373
|
### Audit it yourself
|
|
374
374
|
|
|
375
375
|
- **Source is open** at [github.com/abhiyoheswaran1/projscan](https://github.com/abhiyoheswaran1/projscan). The npm tarball matches the `dist/` produced by `npm run build` at the matching tag.
|
|
376
|
-
- **Public API surface is locked** by `scripts/check-stability.mjs`, which runs in CI on every PR and fails on any rename or removal of an MCP tool, CLI command, or exit code. See [`docs/STABILITY.md`](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.
|
|
376
|
+
- **Public API surface is locked** by `scripts/check-stability.mjs`, which runs in CI on every PR and fails on any rename or removal of an MCP tool, CLI command, or exit code. See [`docs/STABILITY.md`](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/STABILITY.md).
|
|
377
377
|
- **Run it offline:** `npm install -g projscan` followed by anything except `audit` and `--mode semantic` works without network.
|
|
378
378
|
- **Drop privilege further:** in CI, run projscan in a sandbox that disallows network egress; everything except `audit` will pass.
|
|
379
379
|
|
|
@@ -411,7 +411,7 @@ projscan ci --changed-only # Gate only on this PR's diff
|
|
|
411
411
|
projscan ci --format sarif > projscan.sarif # SARIF for Code Scanning
|
|
412
412
|
```
|
|
413
413
|
|
|
414
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
414
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20ci%20--min-score%2070.gif" alt="npx projscan ci --min-score 70" width="700">
|
|
415
415
|
|
|
416
416
|
### GitHub Action (recommended)
|
|
417
417
|
|
|
@@ -480,7 +480,7 @@ Fields:
|
|
|
480
480
|
- `hotspots.limit` / `hotspots.since` - defaults for the `hotspots` command
|
|
481
481
|
- `monorepo.importPolicy` - cross-package import allow/deny rules in monorepos *(0.14+)*
|
|
482
482
|
|
|
483
|
-
See [`docs/GUIDE.md` → Configuration](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.
|
|
483
|
+
See [`docs/GUIDE.md` → Configuration](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/GUIDE.md#configuration-projscanrc) for the full reference (field types, validation behavior, embedding config in `package.json`, monorepo `importPolicy` semantics).
|
|
484
484
|
|
|
485
485
|
## Tracking Health Over Time
|
|
486
486
|
|
|
@@ -493,7 +493,7 @@ projscan diff # Compare against baseline
|
|
|
493
493
|
projscan diff --format markdown # Markdown diff for PRs
|
|
494
494
|
```
|
|
495
495
|
|
|
496
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
496
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20diff%20--save-baseline.gif" alt="npx projscan diff --save-baseline" width="700">
|
|
497
497
|
|
|
498
498
|
## Hotspots - Where to Fix First
|
|
499
499
|
|
|
@@ -582,7 +582,7 @@ Coverage is also automatically joined into `projscan hotspots` when one of those
|
|
|
582
582
|
|
|
583
583
|
**This is the primary way to use projscan.** `projscan mcp` starts an [MCP](https://modelcontextprotocol.io) server over stdio so AI coding agents can query your codebase with real structural accuracy - not regex, not grep.
|
|
584
584
|
|
|
585
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
585
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/projscan-agent-demo.gif" alt="projscan answering two agent questions: what breaks if I rename buildCodeGraph (impact analysis with definitions, direct callers, transitive reach), and where should I fix first (ranked hotspots with cyclomatic complexity)" width="700">
|
|
586
586
|
|
|
587
587
|
Two questions an agent asks; structural answers in milliseconds. *"What breaks if I rename `buildCodeGraph`?"* → 31 direct callers, 97 files reachable. *"Where should I fix first?"* → ranked hotspots with AST cyclomatic complexity, churn, and ownership signals.
|
|
588
588
|
|
|
@@ -775,9 +775,9 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
|
|
|
775
775
|
**Operator (1.6):**
|
|
776
776
|
- **`projscan_workspace_graph`** *(1.6)* - cross-repo intelligence over sibling repos registered with `projscan workspace add`. Subactions: `list` (registered repos + parsed-file + export counts), `graph` (every symbol exported by ≥ 2 repos — the candidate refactor / API contract surface), `file_importers` (given a file in one repo, every other repo whose graph imports it). Read-only.
|
|
777
777
|
- **`projscan_apply_fix`** *(1.6)* - mechanically execute the safe fix templates. Default is dry-run; pass `confirm: true` to write. Atomic writes, per-apply rollback record at `.projscan-cache/rollbacks/<id>.json`. Reverse with `action: "rollback", rollback_id: ...`. Six templates supported at this release: `unused-dependency-*`, `missing-test-framework`, `missing-eslint`, `missing-prettier`, `missing-editorconfig`, `missing-readme`.
|
|
778
|
-
- **`projscan_taint`** *(1.6)* - source-to-sink reachability over the per-function call graph. Built-in defaults cover common JS / Python sources (`process.env`, `req.body`, etc.) and sinks (`exec`, `eval`, `db.query`, etc.). Project-specific names go in `.projscanrc.json` `taint`. `projscan_review` automatically diffs taint flows between base and head and **blocks any PR that introduces a new flow**. In 3.0.
|
|
778
|
+
- **`projscan_taint`** *(1.6)* - source-to-sink reachability over the per-function call graph. Built-in defaults cover common JS / Python sources (`process.env`, `req.body`, etc.) and sinks (`exec`, `eval`, `db.query`, etc.). Project-specific names go in `.projscanrc.json` `taint`. `projscan_review` automatically diffs taint flows between base and head and **blocks any PR that introduces a new flow**. In 3.0.2, review surfaces hardened `newDataflowRisks`, compact `graphEvidence`, and graph-readiness gates for safer handoff.
|
|
779
779
|
|
|
780
|
-
Analyzer plugins can optionally read graph/dataflow context through `check(rootPath, files, context)` while staying on manifest schema v1. The packaged `graph-context` example shows `context.getSemanticGraph()` and `context.getDataflow()` in a real analyzer. For analyzer and reporter plugin authoring, manifest validation, `--reporter <name>`, and the trust model, see [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.
|
|
780
|
+
Analyzer plugins can optionally read graph/dataflow context through `check(rootPath, files, context)` while staying on manifest schema v1. The packaged `graph-context` example shows `context.getSemanticGraph()` and `context.getDataflow()` in a real analyzer. For analyzer and reporter plugin authoring, manifest validation, `--reporter <name>`, and the trust model, see [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/PLUGIN-AUTHORING.md).
|
|
781
781
|
|
|
782
782
|
### Context-window budgeting
|
|
783
783
|
|
|
@@ -13,8 +13,10 @@ export function shouldIncludeDataflowRisk(risk, context, sinkFile = risk.files[r
|
|
|
13
13
|
function isDefaultBroadFileIoRisk(risk, context) {
|
|
14
14
|
const defaultSource = !context.customSources.has(risk.source);
|
|
15
15
|
const defaultSink = !context.customSinks.has(risk.sink);
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
if (!defaultSource || !defaultSink)
|
|
17
|
+
return false;
|
|
18
|
+
return (BROAD_FILE_IO_DATAFLOW_SOURCES.has(risk.source) ||
|
|
19
|
+
BROAD_FILE_IO_DATAFLOW_SINKS.has(risk.sink));
|
|
18
20
|
}
|
|
19
21
|
function isDefaultMisidentifiedJavaScriptShellSink(risk, context, sinkFile) {
|
|
20
22
|
if (!sinkFile)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataflowFilters.js","sourceRoot":"","sources":["../../src/core/dataflowFilters.ts"],"names":[],"mappings":"AAWA,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;AAC7E,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AACvG,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAE3F,MAAM,UAAU,yBAAyB,CACvC,IAAkB,EAClB,OAAkC,EAClC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3E,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACzF,IAAI,yCAAyC,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACrF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAkB,EAAE,OAAkC;IACtF,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,
|
|
1
|
+
{"version":3,"file":"dataflowFilters.js","sourceRoot":"","sources":["../../src/core/dataflowFilters.ts"],"names":[],"mappings":"AAWA,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;AAC7E,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AACvG,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAE3F,MAAM,UAAU,yBAAyB,CACvC,IAAkB,EAClB,OAAkC,EAClC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3E,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACzF,IAAI,yCAAyC,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACrF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAkB,EAAE,OAAkC;IACtF,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IACjD,OAAO,CACL,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/C,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,yCAAyC,CAChD,IAAkB,EAClB,OAAkC,EAClC,QAA4B;IAE5B,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7E,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CACxB,CAAC,GAAG,EAAE,EAAE,CACN,CAAC,GAAG,CAAC,MAAM,KAAK,oBAAoB,IAAI,GAAG,CAAC,MAAM,KAAK,eAAe,CAAC;QACvE,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CACtE,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,SAAkB;IAC5D,OAAO,SAAS,KAAK,YAAY,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5C,OAAO,CACL,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;QAC9B,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC/B,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7B,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC9B,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC;QAClC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CACzC,CAAC;AACJ,CAAC"}
|
package/dist/core/impact.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CodeGraph } from './codeGraph.js';
|
|
2
|
+
import type { OwnershipLookup } from './ownership.js';
|
|
2
3
|
import type { ImpactReport } from '../types.js';
|
|
3
4
|
export interface ImpactOptions {
|
|
4
5
|
/** Stop BFS after this many hops. Default 10. Capped at 1 (lower bound). */
|
|
@@ -11,6 +12,8 @@ export interface ImpactOptions {
|
|
|
11
12
|
* name from the workspace); values are the per-repo CodeGraph.
|
|
12
13
|
*/
|
|
13
14
|
crossRepoGraphs?: Map<string, CodeGraph>;
|
|
15
|
+
/** Optional per-repo owner lookup used to annotate cross-repo boundary summaries. */
|
|
16
|
+
crossRepoOwnership?: Map<string, OwnershipLookup>;
|
|
14
17
|
}
|
|
15
18
|
/**
|
|
16
19
|
* Compute the transitive blast radius of a file or symbol against the local
|
package/dist/core/impact.js
CHANGED
|
@@ -27,11 +27,11 @@ export function computeImpact(graph, target, options = {}) {
|
|
|
27
27
|
// mode: any sibling-repo file whose callSites includes the symbol
|
|
28
28
|
// name is a cross-repo direct caller (distance 1).
|
|
29
29
|
if (options.crossRepoGraphs && options.crossRepoGraphs.size > 0) {
|
|
30
|
-
return foldInCrossRepo(base, target, options.crossRepoGraphs);
|
|
30
|
+
return foldInCrossRepo(base, target, options.crossRepoGraphs, options.crossRepoOwnership);
|
|
31
31
|
}
|
|
32
32
|
return base;
|
|
33
33
|
}
|
|
34
|
-
function foldInCrossRepo(base, target, crossRepoGraphs) {
|
|
34
|
+
function foldInCrossRepo(base, target, crossRepoGraphs, crossRepoOwnership) {
|
|
35
35
|
if (!base.available)
|
|
36
36
|
return base;
|
|
37
37
|
if (target.kind !== 'symbol') {
|
|
@@ -53,7 +53,7 @@ function foldInCrossRepo(base, target, crossRepoGraphs) {
|
|
|
53
53
|
}
|
|
54
54
|
if (count > 0)
|
|
55
55
|
totalsByRepo[repoName] = count;
|
|
56
|
-
boundarySummary.push(...boundarySummariesForRepo(repoName, repoGraph, target.value));
|
|
56
|
+
boundarySummary.push(...boundarySummariesForRepo(repoName, repoGraph, target.value, crossRepoOwnership?.get(repoName)));
|
|
57
57
|
}
|
|
58
58
|
const reachable = [...base.reachable, ...extra].sort(compareNodes);
|
|
59
59
|
const sortedBoundaries = boundarySummary.sort((a, b) => a.repo.localeCompare(b.repo) || a.packageName.localeCompare(b.packageName));
|
|
@@ -65,7 +65,7 @@ function foldInCrossRepo(base, target, crossRepoGraphs) {
|
|
|
65
65
|
...(sortedBoundaries.length > 0 ? { boundarySummary: sortedBoundaries } : {}),
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
|
-
function boundarySummariesForRepo(repoName, repoGraph, targetValue) {
|
|
68
|
+
function boundarySummariesForRepo(repoName, repoGraph, targetValue, ownerForFile) {
|
|
69
69
|
const out = [];
|
|
70
70
|
for (const [packageName, importers] of repoGraph.packageImporters) {
|
|
71
71
|
if (!packageMatchesTarget(packageName, targetValue))
|
|
@@ -74,13 +74,23 @@ function boundarySummariesForRepo(repoName, repoGraph, targetValue) {
|
|
|
74
74
|
out.push({
|
|
75
75
|
repo: repoName,
|
|
76
76
|
packageName,
|
|
77
|
-
owner: repoName,
|
|
77
|
+
owner: ownerForBoundary(files, ownerForFile) ?? repoName,
|
|
78
78
|
files,
|
|
79
79
|
reachableFiles: files.length,
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
82
|
return out;
|
|
83
83
|
}
|
|
84
|
+
function ownerForBoundary(files, ownerForFile) {
|
|
85
|
+
if (!ownerForFile)
|
|
86
|
+
return undefined;
|
|
87
|
+
for (const file of files) {
|
|
88
|
+
const owner = ownerForFile(file);
|
|
89
|
+
if (owner)
|
|
90
|
+
return owner;
|
|
91
|
+
}
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
84
94
|
function packageMatchesTarget(packageName, targetValue) {
|
|
85
95
|
const normalizedTarget = targetValue
|
|
86
96
|
.split(/[/#]/)
|
package/dist/core/impact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/core/impact.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/core/impact.ts"],"names":[],"mappings":"AAIA,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAiBhC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAgB,EAChB,MAAkD,EAClD,UAAyB,EAAE;IAE3B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC,CAAC;IAE7E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM;QACjC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC;QACjD,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAEtD,6DAA6D;IAC7D,6DAA6D;IAC7D,gEAAgE;IAChE,kEAAkE;IAClE,mDAAmD;IACnD,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAChE,OAAO,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CACtB,IAAkB,EAClB,MAAkD,EAClD,eAAuC,EACvC,kBAAiD;IAEjD,IAAI,CAAC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,+DAA+D;QAC/D,gEAAgE;QAChE,gCAAgC;QAChC,OAAO,EAAE,GAAG,IAAI,EAAE,oBAAoB,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;IACnF,CAAC;IACD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,eAAe,GAA4B,EAAE,CAAC;IACpD,MAAM,YAAY,GAA2B,EAAE,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACpF,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,eAAe,EAAE,CAAC;QACpD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YAC7C,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC5D,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QACD,IAAI,KAAK,GAAG,CAAC;YAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QAC9C,eAAe,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1H,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAC3C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CACrF,CAAC;IACF,OAAO;QACL,GAAG,IAAI;QACP,SAAS;QACT,cAAc,EAAE,SAAS,CAAC,MAAM;QAChC,oBAAoB,EAAE,YAAY;QAClC,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,QAAgB,EAChB,SAAoB,EACpB,WAAmB,EACnB,YAA8B;IAE9B,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAClE,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,WAAW,CAAC;YAAE,SAAS;QAC9D,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QACpC,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,QAAQ;YACd,WAAW;YACX,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,QAAQ;YACxD,KAAK;YACL,cAAc,EAAE,KAAK,CAAC,MAAM;SAC7B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAe,EAAE,YAA8B;IACvE,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB,EAAE,WAAmB;IACpE,MAAM,gBAAgB,GAAG,WAAW;SACjC,KAAK,CAAC,MAAM,CAAC;SACb,GAAG,EAAE;QACN,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACxB,WAAW,EAAE,CAAC;IACjB,IAAI,CAAC,gBAAgB;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,WAAW;SACf,WAAW,EAAE;SACb,KAAK,CAAC,UAAU,CAAC;SACjB,MAAM,CAAC,OAAO,CAAC;SACf,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,aAAa,CAAC,KAAgB,EAAE,IAAY,EAAE,WAAmB;IACxE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,SAAS,IAAI,2EAA2E;YAChG,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;YACrC,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,EAAE;YACjB,SAAS,EAAE,EAAE;YACb,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,KAAK;YAChB,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO;QACL,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;QACrC,eAAe,EAAE,EAAE;QACnB,aAAa,EAAE,EAAE;QACjB,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;QACvC,cAAc,EAAE,SAAS,CAAC,MAAM;QAChC,SAAS;QACT,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAgB,EAAE,IAAY,EAAE,WAAmB;IAC1E,yEAAyE;IACzE,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;IAC/D,MAAM,eAAe,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAE3C,uEAAuE;IACvE,wEAAwE;IACxE,yEAAyE;IACzE,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,aAAa,CAAC,IAAI,EAAE,CAAC;IAErB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/D,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,WAAW,IAAI,mDAAmD;YAC1E,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;YACvC,eAAe;YACf,aAAa;YACb,SAAS,EAAE,EAAE;YACb,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,KAAK;YAChB,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,sEAAsE;IACtE,qEAAqE;IACrE,wDAAwD;IACxD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,eAAe,CAAC,CAAC;IACjD,MAAM,SAAS,GAAiB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,cAAc;IACd,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACpG,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAEzB,OAAO;QACL,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;QACvC,eAAe;QACf,aAAa;QACb,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;QACvC,cAAc,EAAE,SAAS,CAAC,MAAM;QAChC,SAAS;QACT,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CACnB,KAAgB,EAChB,KAAe,EACf,WAAmB,EACnB,OAAoB,EACpB,aAAa,GAAG,CAAC;IAEjB,MAAM,SAAS,GAAiB,EAAE,CAAC;IACnC,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAI,QAAQ,GAAG,aAAa,CAAC;IAC7B,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC3B,kDAAkD;YAClD,+DAA+D;YAC/D,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,SAAS;gBAAE,SAAS;YACzB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,SAAS;gBACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACtB,iEAAiE;gBACjE,8DAA8D;gBAC9D,IAAI,QAAQ,IAAI,aAAa,EAAE,CAAC;oBAC9B,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC/C,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC;QAChB,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,KAAgB,EAAE,QAAkB,EAAE,OAAoB;IAC7E,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,CAAa,EAAE,CAAa;IAChD,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;QAAE,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC9D,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
const CODEOWNERS_CANDIDATES = ['.github/CODEOWNERS', 'CODEOWNERS', 'docs/CODEOWNERS'];
|
|
4
|
+
export async function loadOwnership(rootPath) {
|
|
5
|
+
for (const candidate of CODEOWNERS_CANDIDATES) {
|
|
6
|
+
try {
|
|
7
|
+
const content = await fs.readFile(path.join(rootPath, candidate), 'utf-8');
|
|
8
|
+
return createOwnershipLookup(content);
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
const code = typeof error === 'object' && error !== null && 'code' in error ? String(error.code) : '';
|
|
12
|
+
if (code !== 'ENOENT')
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
export function createOwnershipLookup(content) {
|
|
19
|
+
const rules = parseOwnershipRules(content);
|
|
20
|
+
return (relativePath) => {
|
|
21
|
+
const normalizedPath = normalizePath(relativePath);
|
|
22
|
+
let owner;
|
|
23
|
+
for (const rule of rules) {
|
|
24
|
+
if (matchesRule(rule, normalizedPath))
|
|
25
|
+
owner = rule.owner;
|
|
26
|
+
}
|
|
27
|
+
return owner;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function parseOwnershipRules(content) {
|
|
31
|
+
return content
|
|
32
|
+
.split(/\r?\n/)
|
|
33
|
+
.map((line) => line.trim())
|
|
34
|
+
.filter((line) => line.length > 0 && !line.startsWith('#'))
|
|
35
|
+
.map((line) => line.split(/\s+/))
|
|
36
|
+
.filter((parts) => parts.length >= 2)
|
|
37
|
+
.map(([rawPattern, ...owners]) => buildRule(rawPattern, owners.join(' ')))
|
|
38
|
+
.filter((rule) => rule !== null);
|
|
39
|
+
}
|
|
40
|
+
function buildRule(rawPattern, owner) {
|
|
41
|
+
if (!rawPattern || owner.length === 0)
|
|
42
|
+
return null;
|
|
43
|
+
const pattern = normalizePattern(rawPattern);
|
|
44
|
+
if (!pattern)
|
|
45
|
+
return null;
|
|
46
|
+
if (pattern.endsWith('/')) {
|
|
47
|
+
return {
|
|
48
|
+
pattern,
|
|
49
|
+
owner,
|
|
50
|
+
matcher: /^$/,
|
|
51
|
+
basenameOnly: false,
|
|
52
|
+
directoryPrefix: pattern,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
pattern,
|
|
57
|
+
owner,
|
|
58
|
+
matcher: wildcardToRegExp(pattern),
|
|
59
|
+
basenameOnly: !pattern.includes('/'),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function matchesRule(rule, relativePath) {
|
|
63
|
+
if (rule.directoryPrefix)
|
|
64
|
+
return relativePath.startsWith(rule.directoryPrefix);
|
|
65
|
+
if (rule.basenameOnly) {
|
|
66
|
+
const base = relativePath.split('/').pop() ?? relativePath;
|
|
67
|
+
return rule.matcher.test(base);
|
|
68
|
+
}
|
|
69
|
+
return rule.matcher.test(relativePath);
|
|
70
|
+
}
|
|
71
|
+
function normalizePattern(pattern) {
|
|
72
|
+
return normalizePath(pattern.replace(/^\/+/, ''));
|
|
73
|
+
}
|
|
74
|
+
function normalizePath(value) {
|
|
75
|
+
return value.replace(/\\/g, '/').replace(/^\.\//, '');
|
|
76
|
+
}
|
|
77
|
+
function wildcardToRegExp(pattern) {
|
|
78
|
+
const escaped = pattern
|
|
79
|
+
.split('*')
|
|
80
|
+
.map((part) => part.replace(/[.+?^${}()|[\]\\]/g, '\\$&'))
|
|
81
|
+
.join('.*');
|
|
82
|
+
return new RegExp(`^${escaped}$`);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=ownership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ownership.js","sourceRoot":"","sources":["../../src/core/ownership.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,6 +57,42 @@ export async function computeReleaseTrain(rootPath, options = {}) {
|
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
function trackForLine(line) {
|
|
60
|
+
if (line.startsWith('3.0')) {
|
|
61
|
+
return {
|
|
62
|
+
line,
|
|
63
|
+
theme: 'Graph Operations Readiness',
|
|
64
|
+
outcome: 'Agents can trust graph-backed review, impact, dataflow, and release gates during everyday repo work.',
|
|
65
|
+
includedInPlan: true,
|
|
66
|
+
scope: [
|
|
67
|
+
'graph corpus release gate',
|
|
68
|
+
'dataflow precision hardening',
|
|
69
|
+
'ownership-aware impact',
|
|
70
|
+
],
|
|
71
|
+
successCriteria: [
|
|
72
|
+
'release readiness runs the graph corpus baseline gate',
|
|
73
|
+
'custom dataflow rules stay visible when users configure them',
|
|
74
|
+
'impact boundary summaries identify likely owners when metadata exists',
|
|
75
|
+
],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (line.startsWith('3.1')) {
|
|
79
|
+
return {
|
|
80
|
+
line,
|
|
81
|
+
theme: 'Graph Intelligence Expansion',
|
|
82
|
+
outcome: 'Agents get narrower package-scoped evidence and richer framework-aware dataflow before editing high-risk paths.',
|
|
83
|
+
includedInPlan: true,
|
|
84
|
+
scope: [
|
|
85
|
+
'package-scoped review evidence',
|
|
86
|
+
'framework route dataflow precision',
|
|
87
|
+
'deeper ownership and package boundary metadata',
|
|
88
|
+
],
|
|
89
|
+
successCriteria: [
|
|
90
|
+
'review package filters apply to taint, dataflow, graph evidence, and verdicts',
|
|
91
|
+
'route and request-handler dataflow avoids generated-code noise',
|
|
92
|
+
'impact reports keep ownership context without expanding the stable schema',
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
60
96
|
if (line.startsWith('2.3')) {
|
|
61
97
|
return {
|
|
62
98
|
line,
|
|
@@ -175,6 +211,38 @@ function trackForLine(line) {
|
|
|
175
211
|
};
|
|
176
212
|
}
|
|
177
213
|
function tasksForTrack(track) {
|
|
214
|
+
if (track.line.startsWith('3.0')) {
|
|
215
|
+
return [
|
|
216
|
+
{
|
|
217
|
+
id: 'rt-3-0-graph-readiness',
|
|
218
|
+
priority: 'p0',
|
|
219
|
+
title: 'Harden graph operations readiness',
|
|
220
|
+
why: 'Agents trust projscan when graph/dataflow signals are gated, precise, and routed to the right owners.',
|
|
221
|
+
track: track.line,
|
|
222
|
+
files: ['scripts/release-check.mjs', 'src/core/dataflowFilters.ts', 'src/core/impact.ts'],
|
|
223
|
+
verification: {
|
|
224
|
+
commands: ['npm run release:check', 'npm run check:graph-corpus', 'projscan impact --symbol foo --cross-repo --format json'],
|
|
225
|
+
expected: 'Release readiness includes graph corpus checks, custom dataflow rules remain visible, and impact reports ownership boundaries.',
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
];
|
|
229
|
+
}
|
|
230
|
+
if (track.line.startsWith('3.1')) {
|
|
231
|
+
return [
|
|
232
|
+
{
|
|
233
|
+
id: 'rt-3-1-graph-expansion',
|
|
234
|
+
priority: 'p1',
|
|
235
|
+
title: 'Expand graph intelligence precision',
|
|
236
|
+
why: 'The next product step should make high-risk review evidence narrower and framework-aware without forcing agents to inspect full graphs.',
|
|
237
|
+
track: track.line,
|
|
238
|
+
files: ['src/core/review.ts', 'src/core/dataflow.ts', 'src/core/impact.ts'],
|
|
239
|
+
verification: {
|
|
240
|
+
commands: ['projscan review --base main --head HEAD --format json', 'projscan dataflow --format json'],
|
|
241
|
+
expected: 'Review and dataflow evidence are scoped to the relevant package, route, and ownership boundaries.',
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
];
|
|
245
|
+
}
|
|
178
246
|
if (track.line.startsWith('2.3')) {
|
|
179
247
|
return [
|
|
180
248
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"releaseTrain.js","sourceRoot":"","sources":["../../src/core/releaseTrain.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"releaseTrain.js","sourceRoot":"","sources":["../../src/core/releaseTrain.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/tools/impact.js
CHANGED
|
@@ -2,6 +2,7 @@ import { scanRepository } from '../../core/repositoryScanner.js';
|
|
|
2
2
|
import { buildCodeGraph } from '../../core/codeGraph.js';
|
|
3
3
|
import { loadCachedGraph, saveCachedGraph } from '../../core/indexCache.js';
|
|
4
4
|
import { computeImpact } from '../../core/impact.js';
|
|
5
|
+
import { loadOwnership } from '../../core/ownership.js';
|
|
5
6
|
import { loadWorkspace } from '../../core/workspace.js';
|
|
6
7
|
import { paginate, listChecksum, readPageParams } from '../pagination.js';
|
|
7
8
|
import { emitProgress } from '../progress.js';
|
|
@@ -51,10 +52,10 @@ export const impactTool = {
|
|
|
51
52
|
emitProgress(2, 3, 'computing impact');
|
|
52
53
|
const target = file ? { kind: 'file', value: file } : { kind: 'symbol', value: symbol };
|
|
53
54
|
const crossRepo = args.cross_repo === true;
|
|
54
|
-
const
|
|
55
|
+
const crossRepoContext = crossRepo ? await buildCrossRepoContext(rootPath) : undefined;
|
|
55
56
|
const report = computeImpact(graph, target, {
|
|
56
57
|
...(maxDistance !== undefined ? { maxDistance } : {}),
|
|
57
|
-
...(
|
|
58
|
+
...(crossRepoContext ? { crossRepoGraphs: crossRepoContext.graphs, crossRepoOwnership: crossRepoContext.ownership } : {}),
|
|
58
59
|
});
|
|
59
60
|
const page = paginate(report.reachable, readPageParams(args), listChecksum(report.reachable));
|
|
60
61
|
emitProgress(3, 3, 'done');
|
|
@@ -72,21 +73,25 @@ export const impactTool = {
|
|
|
72
73
|
* registered or no siblings exist; the impact module handles that
|
|
73
74
|
* case as a no-op cross-repo fold.
|
|
74
75
|
*/
|
|
75
|
-
async function
|
|
76
|
-
const
|
|
76
|
+
async function buildCrossRepoContext(rootPath) {
|
|
77
|
+
const graphs = new Map();
|
|
78
|
+
const ownership = new Map();
|
|
77
79
|
const workspace = await loadWorkspace(rootPath);
|
|
78
80
|
if (!workspace || workspace.repos.length === 0)
|
|
79
|
-
return
|
|
81
|
+
return { graphs, ownership };
|
|
80
82
|
for (const repo of workspace.repos) {
|
|
81
83
|
try {
|
|
82
84
|
const scan = await scanRepository(repo.path);
|
|
83
85
|
const repoGraph = await buildCodeGraph(repo.path, scan.files);
|
|
84
|
-
|
|
86
|
+
graphs.set(repo.name, repoGraph);
|
|
87
|
+
const ownerLookup = await loadOwnership(repo.path);
|
|
88
|
+
if (ownerLookup)
|
|
89
|
+
ownership.set(repo.name, ownerLookup);
|
|
85
90
|
}
|
|
86
91
|
catch {
|
|
87
92
|
// Skip repos that fail to scan (transient I/O, missing dir, etc.).
|
|
88
93
|
}
|
|
89
94
|
}
|
|
90
|
-
return
|
|
95
|
+
return { graphs, ownership };
|
|
91
96
|
}
|
|
92
97
|
//# sourceMappingURL=impact.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impact.js","sourceRoot":"","sources":["../../../src/mcp/tools/impact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAkB,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,CAAC,MAAM,UAAU,GAAY;IACjC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,qaAAqa;IACva,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4DAA4D;aAC1E;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uDAAuD;aACrE;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wFAAwF;aACtG;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,SAAS;gBACf,WAAW,EACT,gQAAgQ;aACnQ;YACD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;YAClF,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;YACnF,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;SACzF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACtF,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,IAAI,CAAC;QAC9F,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,6MAA6M,CAC9M,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,2IAA2I,CAC5I,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAE1F,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC5C,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAC1C,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,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,MAAO,EAAE,CAAC;QAC3G,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;QAC3C,MAAM,
|
|
1
|
+
{"version":3,"file":"impact.js","sourceRoot":"","sources":["../../../src/mcp/tools/impact.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:
|
|
4
|
+
"serialNumber": "urn:uuid:03f28292-6293-424b-8acd-d2d4715032c7",
|
|
5
5
|
"version": 1,
|
|
6
6
|
"metadata": {
|
|
7
|
-
"timestamp": "2026-05-
|
|
7
|
+
"timestamp": "2026-05-27T03:57:27.876Z",
|
|
8
8
|
"tools": [
|
|
9
9
|
{
|
|
10
10
|
"vendor": "projscan",
|
|
11
11
|
"name": "projscan-sbom-generator",
|
|
12
|
-
"version": "3.0.
|
|
12
|
+
"version": "3.0.2"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
15
|
"component": {
|
|
16
16
|
"type": "application",
|
|
17
|
-
"bom-ref": "pkg:npm/projscan@3.0.
|
|
17
|
+
"bom-ref": "pkg:npm/projscan@3.0.2",
|
|
18
18
|
"name": "projscan",
|
|
19
|
-
"version": "3.0.
|
|
20
|
-
"purl": "pkg:npm/projscan@3.0.
|
|
19
|
+
"version": "3.0.2",
|
|
20
|
+
"purl": "pkg:npm/projscan@3.0.2"
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
"components": [
|
package/dist/tool-manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projscan",
|
|
3
3
|
"mcpName": "io.github.abhiyoheswaran1/projscan",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.2",
|
|
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++; 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), 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",
|