projscan 3.0.3 → 3.0.5

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 (81) hide show
  1. package/README.md +54 -27
  2. package/dist/cli/commands/dogfood.d.ts +1 -0
  3. package/dist/cli/commands/dogfood.js +62 -0
  4. package/dist/cli/commands/dogfood.js.map +1 -0
  5. package/dist/cli/commands/evidencePack.js +6 -0
  6. package/dist/cli/commands/evidencePack.js.map +1 -1
  7. package/dist/cli/commands/init.js +143 -1
  8. package/dist/cli/commands/init.js.map +1 -1
  9. package/dist/cli/commands/mcp.js +67 -3
  10. package/dist/cli/commands/mcp.js.map +1 -1
  11. package/dist/cli/commands/start.d.ts +1 -0
  12. package/dist/cli/commands/start.js +86 -0
  13. package/dist/cli/commands/start.js.map +1 -0
  14. package/dist/cli/commands/workplan.js +17 -11
  15. package/dist/cli/commands/workplan.js.map +1 -1
  16. package/dist/cli/index.js +4 -0
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/core/adoption.d.ts +86 -0
  19. package/dist/core/adoption.js +463 -0
  20. package/dist/core/adoption.js.map +1 -1
  21. package/dist/core/ast.d.ts +6 -0
  22. package/dist/core/ast.js +59 -11
  23. package/dist/core/ast.js.map +1 -1
  24. package/dist/core/bugHunt.js +19 -7
  25. package/dist/core/bugHunt.js.map +1 -1
  26. package/dist/core/dataflow.js +98 -9
  27. package/dist/core/dataflow.js.map +1 -1
  28. package/dist/core/dogfood.d.ts +6 -0
  29. package/dist/core/dogfood.js +116 -0
  30. package/dist/core/dogfood.js.map +1 -0
  31. package/dist/core/fixFirst.d.ts +8 -0
  32. package/dist/core/fixFirst.js +109 -0
  33. package/dist/core/fixFirst.js.map +1 -0
  34. package/dist/core/frameworkSources.d.ts +3 -1
  35. package/dist/core/frameworkSources.js +44 -3
  36. package/dist/core/frameworkSources.js.map +1 -1
  37. package/dist/core/indexCache.js +5 -1
  38. package/dist/core/indexCache.js.map +1 -1
  39. package/dist/core/preflight.js +32 -7
  40. package/dist/core/preflight.js.map +1 -1
  41. package/dist/core/qualityScorecard.js +5 -1
  42. package/dist/core/qualityScorecard.js.map +1 -1
  43. package/dist/core/releaseEvidence.d.ts +6 -1
  44. package/dist/core/releaseEvidence.js +478 -10
  45. package/dist/core/releaseEvidence.js.map +1 -1
  46. package/dist/core/start.d.ts +8 -0
  47. package/dist/core/start.js +193 -0
  48. package/dist/core/start.js.map +1 -0
  49. package/dist/core/taint.js +89 -9
  50. package/dist/core/taint.js.map +1 -1
  51. package/dist/core/workplan.d.ts +2 -1
  52. package/dist/core/workplan.js +80 -3
  53. package/dist/core/workplan.js.map +1 -1
  54. package/dist/index.d.ts +7 -5
  55. package/dist/index.js +5 -3
  56. package/dist/index.js.map +1 -1
  57. package/dist/mcp/tools/adoption.js +7 -3
  58. package/dist/mcp/tools/adoption.js.map +1 -1
  59. package/dist/mcp/tools/evidencePack.js +5 -0
  60. package/dist/mcp/tools/evidencePack.js.map +1 -1
  61. package/dist/mcp/tools/start.d.ts +2 -0
  62. package/dist/mcp/tools/start.js +58 -0
  63. package/dist/mcp/tools/start.js.map +1 -0
  64. package/dist/mcp/tools.js +2 -0
  65. package/dist/mcp/tools.js.map +1 -1
  66. package/dist/projscan-sbom.cdx.json +6 -6
  67. package/dist/tool-manifest.json +48 -5
  68. package/dist/types.d.ts +188 -0
  69. package/dist/utils/baseline.js +62 -1
  70. package/dist/utils/baseline.js.map +1 -1
  71. package/dist/utils/formatSupport.d.ts +6 -0
  72. package/dist/utils/formatSupport.js +6 -0
  73. package/dist/utils/formatSupport.js.map +1 -1
  74. package/docs/PLUGIN-GALLERY.md +25 -0
  75. package/docs/examples/plugins/api-route-ownership.mjs +60 -0
  76. package/docs/examples/plugins/api-route-ownership.projscan-plugin.json +8 -0
  77. package/docs/examples/plugins/monorepo-boundary.mjs +37 -0
  78. package/docs/examples/plugins/monorepo-boundary.projscan-plugin.json +8 -0
  79. package/docs/examples/plugins/security-sensitive-files.mjs +18 -0
  80. package/docs/examples/plugins/security-sensitive-files.projscan-plugin.json +8 -0
  81. package/package.json +2 -2
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.2/docs/GUIDE.md) · [Roadmap](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/ROADMAP.md)
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.5/docs/GUIDE.md) · [Roadmap](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.5/docs/ROADMAP.md)
13
13
 
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">
14
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/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
 
@@ -25,6 +25,8 @@ AI coding agents are becoming the primary interface to code. Today, when you ask
25
25
 
26
26
  The stable local plugin platform turns that same pipeline into a team substrate: analyzer plugins add project-specific findings, and reporter plugins render `doctor`, `analyze`, and `ci` in your team's own voice without changing the underlying scan.
27
27
 
28
+ The 3.0.5 loop focuses on the first useful team PR: `projscan init team` creates policy, CI, ownership, and baseline memory; `projscan evidence-pack --pr-comment` posts a compact verdict with trust calibration, top risks, a First Fix, owner routing, baseline trend memory, reviewer feedback prompts, and exact next commands; `projscan dogfood` checks whether that loop is ready across real repos.
29
+
28
30
  Humans get the same thing through the CLI.
29
31
 
30
32
  **Everything is offline-first. Zero network calls. No API keys.**
@@ -33,7 +35,7 @@ Humans get the same thing through the CLI.
33
35
  npx projscan
34
36
  ```
35
37
 
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">
38
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/docs/projscan-reporter-plugin.gif" alt="projscan doctor rendered through a local reporter plugin in a macOS-style terminal window" width="700">
37
39
 
38
40
  Run `projscan doctor` for a focused health check:
39
41
 
@@ -41,7 +43,7 @@ Run `projscan doctor` for a focused health check:
41
43
  npx projscan doctor
42
44
  ```
43
45
 
44
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20doctor.gif" alt="npx projscan doctor" width="700">
46
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/docs/npx%20projscan%20doctor.gif" alt="npx projscan doctor" width="700">
45
47
 
46
48
  ## Install
47
49
 
@@ -61,17 +63,25 @@ Run inside any repository:
61
63
 
62
64
  ```bash
63
65
  projscan # Full project analysis
66
+ projscan start # First-60-seconds workflow orientation
64
67
  projscan first-run # First-run setup diagnostics for CLI + MCP
65
68
  projscan init mcp --client all # Ready-to-paste MCP client configs
66
- projscan recipes # Agent workflow recipes
69
+ projscan mcp doctor --client codex # Verify MCP setup and paste config
70
+ projscan init policy --team security # Team policy starter .projscanrc.json
71
+ projscan init team --team security # Policy + PR workflow + CODEOWNERS + baseline + first-PR checklist
72
+ projscan init github-action # PR workflow with validated evidence comments + block enforcement
73
+ projscan recipes # Agent workflow recipes, including team bootstrap + PR automation
67
74
  projscan workplan --mode bug_hunt # Prioritized agent execution plan
68
75
  projscan bug-hunt --format json # Bug-hunt fix queue with verification commands
69
76
  projscan agent-brief --intent bug_hunt # Compact next-agent context packet
70
77
  projscan quality-scorecard --format json # Dimensioned quality view
71
78
  projscan release-train --format json # Product readiness plan
72
79
  projscan evidence-pack --website-prompt # Approval packet with product evidence
80
+ projscan evidence-pack --pr-comment # PR comment with trust calibration + First Fix
81
+ projscan dogfood --repo ../api --repo ../web --format json # Multi-repo adoption proof loop
73
82
  projscan regression-plan --level full # Risk-based verification matrix
74
83
  projscan handoff # Concise next-agent handoff
84
+ projscan handoff --write docs/agent-handoff.md # Persist next-agent handoff artifact
75
85
  projscan preflight --format json # Agent safety gate with supply-chain evidence
76
86
  projscan doctor # Health check, including security and supply-chain risks
77
87
  projscan hotspots # Rank files by risk (churn × complexity × issues × ownership)
@@ -97,24 +107,30 @@ projscan plugin test .projscan-plugins/policy.projscan-plugin.json
97
107
  PROJSCAN_PLUGINS_PREVIEW=1 projscan doctor --reporter team-radar
98
108
  ```
99
109
 
100
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20--help.gif" alt="npx projscan --help" width="700">
110
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/docs/npx%20projscan%20--help.gif" alt="npx projscan --help" width="700">
101
111
 
102
- For a comprehensive walkthrough, see the **[Full Guide](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.2/docs/GUIDE.md)**.
112
+ For a comprehensive walkthrough, see the **[Full Guide](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.5/docs/GUIDE.md)**.
103
113
 
104
114
  ## Commands
105
115
 
106
116
  | Command | Description |
107
117
  |---------|-------------|
108
118
  | `projscan analyze` | Full analysis - languages, frameworks, dependencies, issues |
119
+ | `projscan start` | First-60-seconds workflow orientation with setup diagnostics, top risks, and next commands |
109
120
  | `projscan first-run` | First-run setup diagnostics for Node, Git, config, plugins, and MCP startup |
110
121
  | `projscan init mcp` | Ready-to-paste MCP client configs for popular agent clients |
111
- | `projscan recipes` | Agent workflow recipes for before edit, bug hunt, approval, handoff, and pre-merge |
122
+ | `projscan mcp doctor` | Verify MCP setup and print paste-ready client config with checks |
123
+ | `projscan init policy` | Team policy starter kits for frontend, platform, security, and monorepo teams |
124
+ | `projscan init team` | Bootstrap policy, PR workflow, CODEOWNERS starter, baseline memory, start report, and first-PR onboarding checklist |
125
+ | `projscan init github-action` | GitHub Actions PR workflow that validates and posts projscan evidence comments, then fails only on preflight blocks |
126
+ | `projscan recipes` | Agent workflow recipes for team bootstrap, PR automation, before edit, bug hunt, approval, handoff, and pre-merge |
112
127
  | `projscan workplan` | Agent execution plan - prioritized tasks with evidence, tools, verification, and handoff text |
113
- | `projscan bug-hunt` | Prioritized bug-hunt fix queue from doctor, preflight, hotspot, and session evidence |
128
+ | `projscan bug-hunt` | Prioritized bug-hunt fix queue from doctor, preflight, and session evidence, with hotspot-only churn kept as a watchlist signal |
114
129
  | `projscan agent-brief` | Compact next-agent context packet with focus items, guardrails, repo context, and next actions |
115
130
  | `projscan quality-scorecard` | Dimensioned quality view with health, security, tests, maintainability, coordination, and top risks |
116
131
  | `projscan release-train` | Plan upcoming product lines with readiness evidence |
117
- | `projscan evidence-pack` | Assemble approval evidence from planning, bug-hunt, workplan, and preflight signals |
132
+ | `projscan evidence-pack` | Assemble approval evidence from planning, bug-hunt, workplan, preflight, trust calibration, First Fix, owner routing, and baseline trend memory |
133
+ | `projscan dogfood` | Evaluate 1+ real repos for PR-comment readiness, repeat-use readiness, MCP readiness, and reviewer feedback prompts |
118
134
  | `projscan regression-plan` | Build a smoke, focused, or full regression matrix from product risk signals |
119
135
  | `projscan handoff` | Concise next-agent handoff from the current workplan |
120
136
  | `projscan doctor` | Health check - missing tooling, architecture smells, security and supply-chain risks |
@@ -155,31 +171,31 @@ projscan --help
155
171
  <details>
156
172
  <summary><strong>projscan structure</strong> - Directory tree with file counts</summary>
157
173
 
158
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20structure.gif" alt="npx projscan structure" width="700">
174
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/docs/npx%20projscan%20structure.gif" alt="npx projscan structure" width="700">
159
175
  </details>
160
176
 
161
177
  <details>
162
178
  <summary><strong>projscan diagram</strong> - Architecture visualization</summary>
163
179
 
164
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20diagram.gif" alt="npx projscan diagram" width="700">
180
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/docs/npx%20projscan%20diagram.gif" alt="npx projscan diagram" width="700">
165
181
  </details>
166
182
 
167
183
  <details>
168
184
  <summary><strong>projscan dependencies</strong> - Dependency analysis</summary>
169
185
 
170
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20dependencies.gif" alt="npx projscan dependencies" width="700">
186
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/docs/npx%20projscan%20dependencies.gif" alt="npx projscan dependencies" width="700">
171
187
  </details>
172
188
 
173
189
  <details>
174
190
  <summary><strong>projscan explain</strong> - File explanation</summary>
175
191
 
176
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20explain.gif" alt="npx projscan explain" width="700">
192
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/docs/npx%20projscan%20explain.gif" alt="npx projscan explain" width="700">
177
193
  </details>
178
194
 
179
195
  <details>
180
196
  <summary><strong>projscan badge</strong> - Health badge generation</summary>
181
197
 
182
- <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.2/docs/npx%20projscan%20badge.gif" alt="npx projscan badge" width="700">
198
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/docs/npx%20projscan%20badge.gif" alt="npx projscan badge" width="700">
183
199
  </details>
184
200
 
185
201
  ### Output Formats
@@ -201,7 +217,7 @@ Run `projscan help` for the generated command-by-command support matrix.
201
217
 
202
218
  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
219
 
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.
220
+ **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.5/docs/2.0-MIGRATION.md), then use [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.5/docs/PLUGIN-AUTHORING.md), the [Plugin Gallery](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.5/docs/PLUGIN-GALLERY.md), and the [manifest schema](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.5/docs/plugin.schema.json) as the stable contract.
205
221
 
206
222
  ```bash
207
223
  projscan plugin list
@@ -210,9 +226,9 @@ PROJSCAN_PLUGINS_PREVIEW=1 projscan doctor --reporter team-radar
210
226
  PROJSCAN_PLUGINS_PREVIEW=1 projscan ci --reporter team-radar --min-score 80
211
227
  ```
212
228
 
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">
229
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/docs/projscan-reporter-plugin.gif" alt="projscan local reporter plugin rendering a team health report" width="700">
214
230
 
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.
231
+ 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.5/docs/PLUGIN-AUTHORING.md) for manifest shape, `render(context)`, validation, and the trust model.
216
232
 
217
233
  ### Options
218
234
 
@@ -373,7 +389,7 @@ If you read projscan's [Socket report](https://socket.dev/npm/package/projscan),
373
389
  ### Audit it yourself
374
390
 
375
391
  - **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.2/docs/STABILITY.md).
392
+ - **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.5/docs/STABILITY.md).
377
393
  - **Run it offline:** `npm install -g projscan` followed by anything except `audit` and `--mode semantic` works without network.
378
394
  - **Drop privilege further:** in CI, run projscan in a sandbox that disallows network egress; everything except `audit` will pass.
379
395
 
@@ -398,6 +414,15 @@ Current state of the projscan codebase as scored by projscan itself:
398
414
 
399
415
  The `--min-score 90` threshold is deliberately tight: a regression that drops the score by more than ten points fails the build. The current ten-point margin (90 → 100) is for room to breathe, not slack.
400
416
 
417
+ For adoption proof, run the product against multiple real repos and capture first-PR feedback:
418
+
419
+ ```sh
420
+ projscan dogfood --repo ../api --repo ../web --repo ../worker --format json
421
+ projscan evidence-pack --pr-comment
422
+ ```
423
+
424
+ The dogfood report checks PR-comment readiness, repeat-use commands, MCP readiness, and the exact feedback questions a reviewer should answer before rollout.
425
+
401
426
  The hotspots projscan finds in itself are real signals — the reporters in particular have grown organically across releases and are candidates for a 2.0-era refactor (tracked in `docs/ROADMAP.md` "Under consideration"). We choose to ship the signal honestly rather than tune the score to hide it.
402
427
 
403
428
  ## CI/CD Integration
@@ -411,7 +436,7 @@ projscan ci --changed-only # Gate only on this PR's diff
411
436
  projscan ci --format sarif > projscan.sarif # SARIF for Code Scanning
412
437
  ```
413
438
 
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">
439
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/docs/npx%20projscan%20ci%20--min-score%2070.gif" alt="npx projscan ci --min-score 70" width="700">
415
440
 
416
441
  ### GitHub Action (recommended)
417
442
 
@@ -480,7 +505,7 @@ Fields:
480
505
  - `hotspots.limit` / `hotspots.since` - defaults for the `hotspots` command
481
506
  - `monorepo.importPolicy` - cross-package import allow/deny rules in monorepos *(0.14+)*
482
507
 
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).
508
+ See [`docs/GUIDE.md` → Configuration](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.5/docs/GUIDE.md#configuration-projscanrc) for the full reference (field types, validation behavior, embedding config in `package.json`, monorepo `importPolicy` semantics).
484
509
 
485
510
  ## Tracking Health Over Time
486
511
 
@@ -493,7 +518,7 @@ projscan diff # Compare against baseline
493
518
  projscan diff --format markdown # Markdown diff for PRs
494
519
  ```
495
520
 
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">
521
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/docs/npx%20projscan%20diff%20--save-baseline.gif" alt="npx projscan diff --save-baseline" width="700">
497
522
 
498
523
  ## Hotspots - Where to Fix First
499
524
 
@@ -582,7 +607,7 @@ Coverage is also automatically joined into `projscan hotspots` when one of those
582
607
 
583
608
  **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
609
 
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">
610
+ <img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.5/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
611
 
587
612
  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
613
 
@@ -717,6 +742,7 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
717
742
  - *"What are the scariest untested files?"* → `projscan_coverage`
718
743
  - *"What breaks if I bump chalk to 6?"* → `projscan_upgrade { package: "chalk" }`
719
744
  - *"Where should I refactor first?"* → `projscan_hotspots`
745
+ - *"What should my agent do first in this repo?"* → `projscan_start { mode: "before_edit" }`
720
746
  - *"What should my agent do next?"* → `projscan_workplan { mode: "bug_hunt" }`
721
747
  - *"Give the next agent a compact brief."* → `projscan_agent_brief { intent: "bug_hunt" }`
722
748
  - *"Show the product quality picture."* → `projscan_quality_scorecard`
@@ -726,12 +752,13 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
726
752
  - *"How do I plan the next six product lines?"* → `projscan_release_train`
727
753
  - *"How do I wire projscan into this MCP client?"* → `projscan_adoption { action: "mcp_config", client: "codex" }`
728
754
 
729
- ### The 39 MCP tools
755
+ ### The 40 MCP tools
730
756
 
731
757
  **Structural (0.6.0 / 0.11 / 0.13 / 0.14 / 0.15 - agent-native):**
758
+ - **`projscan_start`** *(3.0.4)* - first-60-seconds repo orientation. Composes setup diagnostics, workflow recipes, workplan, quality scorecard, top risks, adoption gaps, next commands, and optional handoff payload.
732
759
  - **`projscan_graph`** - query the AST-based code graph. Directions: `imports`, `exports`, `importers`, `symbol_defs`, `package_importers`. Millisecond responses on a warm cache.
733
760
  - **`projscan_semantic_graph`** *(3.0)* - stable v3 semantic graph contract with file, function, package, and symbol nodes plus `defines`, `imports`, `imports_package`, `exports`, and `calls` edges.
734
- - **`projscan_dataflow`** *(3.0)* - focused direct, propagated, and bridge source-to-sink dataflow risks. Defaults suppress test-file paths, broad readFile/writeFile noise, and JavaScript RegExp.exec false positives; opt into those with `include_tests` / `include_broad_file_io` or the matching CLI flags.
761
+ - **`projscan_dataflow`** *(3.0)* - focused direct, propagated, and bridge source-to-sink dataflow risks. Next.js and Express request sources are framework-aware, DB/write sinks are receiver-sensitive, and defaults suppress test-file paths, broad readFile/writeFile noise, JavaScript RegExp.exec false positives, and generated-code anxiety; opt into broader scans with `include_tests` / `include_broad_file_io` / `include_generated` or the matching CLI flags.
735
762
  - **`projscan_search`** - fast search across `symbols` (exported names), `files` (path substring), or `content` (source substring with line + excerpt). Sub-file mode (`sub_file: true`) embeds per-function for sharper semantic results *(0.15)*.
736
763
  - **`projscan_coupling`** *(0.11)* - per-file fan-in / fan-out / instability + circular-import cycles (Tarjan SCC). Filter by `direction: cycles_only | high_fan_in | high_fan_out`.
737
764
  - **`projscan_pr_diff`** *(0.11)* - structural diff between two git refs. Returns added/removed/modified files with explicit lists of exports, imports, and call sites that changed, plus ΔCC and Δfan-in.
@@ -739,7 +766,7 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
739
766
  - **`projscan_workplan`** *(2.3)* - agent mission-control plan. Composes preflight, review, session, hotspot, plugin, and supply-chain evidence into prioritized tasks with verification commands and handoff text.
740
767
  - **`projscan_bug_hunt`** *(2.3)* - ranked bug-hunt queue. Composes doctor issues, preflight, hotspots, and session coordination into fix targets with verification commands.
741
768
  - **`projscan_release_train`** *(2.3)* - product-line readiness planner. Reads version, scope, readiness evidence, and next actions.
742
- - **`projscan_evidence_pack`** *(2.3)* - approval packet. Composes planning, bug-hunt, workplan, preflight, changelog, and optional website prompt evidence.
769
+ - **`projscan_evidence_pack`** *(2.3)* - approval packet. Composes planning, bug-hunt, workplan, preflight, changelog, optional website prompt evidence, and PR comments with trust calibration, First Fix, owner routing, baseline trend memory, and exact next commands.
743
770
  - **`projscan_regression_plan`** *(2.3)* - smoke/focused/full regression matrix. Turns bug-hunt, preflight, and product risk into deduplicated verification commands.
744
771
  - **`projscan_agent_brief`** *(2.3)* - compact next-agent context packet with focus items, repo context, guardrails, and suggested next actions.
745
772
  - **`projscan_quality_scorecard`** *(2.3)* - dimensioned quality view across health, security, tests, maintainability, coordination, top risks, and verification commands.
@@ -777,7 +804,7 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
777
804
  - **`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
805
  - **`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
806
 
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).
807
+ 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.5/docs/PLUGIN-AUTHORING.md).
781
808
 
782
809
  ### Context-window budgeting
783
810
 
@@ -0,0 +1 @@
1
+ export declare function registerDogfood(): void;
@@ -0,0 +1,62 @@
1
+ import chalk from 'chalk';
2
+ import { assertFormatSupported, getRootPath, maybeCompactBanner, program, setupLogLevel, } from '../_shared.js';
3
+ import { computeDogfoodReport } from '../../core/dogfood.js';
4
+ export function registerDogfood() {
5
+ program
6
+ .command('dogfood')
7
+ .description('Run projscan adoption proof across real repos and report usefulness gaps')
8
+ .option('--repo <path>', 'repo path to evaluate, repeatable (default: current repo)', collectRepo, [])
9
+ .option('--target-repos <count>', 'target number of repos before adoption is considered proven', parsePositiveInt)
10
+ .action(async (cmdOpts) => {
11
+ setupLogLevel();
12
+ maybeCompactBanner();
13
+ const format = assertFormatSupported('dogfood');
14
+ try {
15
+ const report = await computeDogfoodReport(getRootPath(), {
16
+ repos: cmdOpts.repo,
17
+ targetRepoCount: cmdOpts.targetRepos,
18
+ });
19
+ if (format === 'json') {
20
+ console.log(JSON.stringify(report, null, 2));
21
+ return;
22
+ }
23
+ printDogfood(report);
24
+ }
25
+ catch (err) {
26
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
27
+ process.exit(1);
28
+ }
29
+ });
30
+ }
31
+ function collectRepo(value, previous) {
32
+ return [...previous, value];
33
+ }
34
+ function parsePositiveInt(value) {
35
+ const parsed = Number.parseInt(value, 10);
36
+ if (!Number.isFinite(parsed) || parsed <= 0) {
37
+ throw new Error('value must be a positive integer');
38
+ }
39
+ return parsed;
40
+ }
41
+ function printDogfood(report) {
42
+ const color = report.totals.failingRepos > 0 ? chalk.red : report.totals.warningRepos > 0 ? chalk.yellow : chalk.green;
43
+ console.log(color('Dogfood: ' + report.totals.reposEvaluated + ' repo(s)'));
44
+ console.log(report.summary);
45
+ console.log('Target repos: ' + report.targetRepoCount);
46
+ console.log('');
47
+ for (const repo of report.repos)
48
+ printRepo(repo);
49
+ console.log('');
50
+ console.log(chalk.bold('Next Commands'));
51
+ for (const action of report.suggestedNextActions) {
52
+ if (action.command)
53
+ console.log('- ' + action.command);
54
+ }
55
+ }
56
+ function printRepo(repo) {
57
+ console.log('- [' + repo.status + '] ' + repo.name + ' health=' + repo.healthScore + ' prComment=' + repo.prCommentReady + ' repeatUse=' + repo.repeatUseReady);
58
+ for (const gap of repo.gaps.slice(0, 3))
59
+ console.log(' gap: ' + gap);
60
+ console.log(' ask: ' + repo.feedbackQuestions[0]);
61
+ }
62
+ //# sourceMappingURL=dogfood.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dogfood.js","sourceRoot":"","sources":["../../../src/cli/commands/dogfood.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export function registerEvidencePack() {
7
7
  .description('Assemble approval evidence from product planning, bug-hunt, workplan, and preflight signals')
8
8
  .option('--line <line>', 'product line to include, repeatable (default: next six minor lines)', collectLine, [])
9
9
  .option('--website-prompt', 'include website-update prompt text')
10
+ .option('--pr-comment', 'print a GitHub PR comment markdown artifact')
10
11
  .option('--max-findings <count>', 'maximum bug-hunt findings to include', parsePositiveInt)
11
12
  .action(async (cmdOpts) => {
12
13
  setupLogLevel();
@@ -16,12 +17,17 @@ export function registerEvidencePack() {
16
17
  const report = await computeEvidencePack(getRootPath(), {
17
18
  lines: cmdOpts.line,
18
19
  includeWebsitePrompt: cmdOpts.websitePrompt === true,
20
+ includePrComment: cmdOpts.prComment === true,
19
21
  maxFindings: cmdOpts.maxFindings,
20
22
  });
21
23
  if (format === 'json') {
22
24
  console.log(JSON.stringify(report, null, 2));
23
25
  return;
24
26
  }
27
+ if (cmdOpts.prComment === true && report.prComment) {
28
+ console.log(report.prComment.trimEnd());
29
+ return;
30
+ }
25
31
  printEvidencePack(report);
26
32
  }
27
33
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"evidencePack.js","sourceRoot":"","sources":["../../../src/cli/commands/evidencePack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGpE,MAAM,UAAU,oBAAoB;IAClC,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,6FAA6F,CAAC;SAC1G,MAAM,CAAC,eAAe,EAAE,qEAAqE,EAAE,WAAW,EAAE,EAAE,CAAC;SAC/G,MAAM,CAAC,kBAAkB,EAAE,oCAAoC,CAAC;SAChE,MAAM,CAAC,wBAAwB,EAAE,sCAAsC,EAAE,gBAAgB,CAAC;SAC1F,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,aAAa,EAAE,CAAC;QAChB,kBAAkB,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;QAEtD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,WAAW,EAAE,EAAE;gBACtD,KAAK,EAAE,OAAO,CAAC,IAAI;gBACnB,oBAAoB,EAAE,OAAO,CAAC,aAAa,KAAK,IAAI;gBACpD,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;YAEH,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YACD,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,QAAkB;IACpD,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA0B;IACnD,MAAM,KAAK,GACT,MAAM,CAAC,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,KAAK,CAAC,GAAG;QACX,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS;YAC5B,CAAC,CAAC,KAAK,CAAC,MAAM;YACd,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,cAAc,IAAI,SAAS,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;IACnD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAA8B;IACnD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"evidencePack.js","sourceRoot":"","sources":["../../../src/cli/commands/evidencePack.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import chalk from 'chalk';
4
+ import { computeStartReport } from '../../core/start.js';
4
5
  import { program, getRootPath, setupLogLevel, maybeCompactBanner, assertFormatSupported } from '../_shared.js';
5
- import { getMcpConfigGuide, isMcpClientId, MCP_CLIENT_IDS } from '../../core/adoption.js';
6
+ import { getGithubActionStarter, getMcpConfigGuide, isMcpClientId, isPolicyStarterTeam, MCP_CLIENT_IDS, POLICY_STARTER_TEAMS, writeGithubActionStarter, writePolicyStarterKit, writeTeamStarterKit, } from '../../core/adoption.js';
6
7
  /**
7
8
  * `projscan init` (1.6+) — scaffold `.projscanrc.json` for new
8
9
  * adopters. Idempotent: if the config already exists, prints a diff
@@ -26,6 +27,78 @@ export function registerInit() {
26
27
  process.exit(1);
27
28
  }
28
29
  });
30
+ init
31
+ .command('github-action')
32
+ .description('Write a GitHub Actions workflow that posts projscan PR evidence')
33
+ .option('--force', 'overwrite an existing .github/workflows/projscan.yml')
34
+ .action(async (opts) => {
35
+ setupLogLevel();
36
+ maybeCompactBanner();
37
+ const format = assertFormatSupported('init github-action');
38
+ try {
39
+ const result = await writeGithubActionStarter(getRootPath(), { force: opts.force === true });
40
+ if (format === 'json') {
41
+ console.log(JSON.stringify(result, null, 2));
42
+ return;
43
+ }
44
+ printGithubActionStarterResult(result);
45
+ }
46
+ catch (error) {
47
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
48
+ process.exit(1);
49
+ }
50
+ });
51
+ init
52
+ .command('policy')
53
+ .description('Write a team policy starter .projscanrc.json')
54
+ .option('--team <team>', `team: ${POLICY_STARTER_TEAMS.join(', ')}`, 'platform')
55
+ .option('--force', 'overwrite an existing .projscanrc.json')
56
+ .action(async (opts) => {
57
+ setupLogLevel();
58
+ maybeCompactBanner();
59
+ const format = assertFormatSupported('init policy');
60
+ const team = parsePolicyTeam(opts.team);
61
+ try {
62
+ const result = await writePolicyStarterKit(getRootPath(), team, { force: opts.force === true });
63
+ if (format === 'json') {
64
+ console.log(JSON.stringify(result, null, 2));
65
+ return;
66
+ }
67
+ printPolicyStarterResult(result);
68
+ }
69
+ catch (error) {
70
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
71
+ process.exit(1);
72
+ }
73
+ });
74
+ init
75
+ .command('team')
76
+ .description('Bootstrap team policy, PR workflow, CODEOWNERS starter, baseline memory, and a start report')
77
+ .option('--team <team>', `team: ${POLICY_STARTER_TEAMS.join(', ')}`, 'platform')
78
+ .option('--force', 'overwrite existing starter files')
79
+ .action(async (opts) => {
80
+ setupLogLevel();
81
+ maybeCompactBanner();
82
+ const format = assertFormatSupported('init team');
83
+ const team = parsePolicyTeam(opts.team);
84
+ try {
85
+ const rootPath = getRootPath();
86
+ const result = {
87
+ schemaVersion: 1,
88
+ team: await writeTeamStarterKit(rootPath, team, { force: opts.force === true }),
89
+ start: await computeStartReport(rootPath, { mode: 'before_edit', maxTasks: 5, maxRisks: 5 }),
90
+ };
91
+ if (format === 'json') {
92
+ console.log(JSON.stringify(result, null, 2));
93
+ return;
94
+ }
95
+ printTeamStarterResult(result);
96
+ }
97
+ catch (error) {
98
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
99
+ process.exit(1);
100
+ }
101
+ });
29
102
  init
30
103
  .command('mcp')
31
104
  .description('Print ready-to-paste MCP client config snippets')
@@ -84,6 +157,75 @@ async function runInit(rootPath, force) {
84
157
  console.log(chalk.dim(' Tune the score threshold, ignore globs, or disabled rules as needed.'));
85
158
  console.log(chalk.dim(' Then run `projscan ci --min-score 70` (or whatever you set).'));
86
159
  }
160
+ function printGithubActionStarterResult(result) {
161
+ console.log('');
162
+ if (result.created) {
163
+ console.log(chalk.green(`✓ Created ${result.filename}`));
164
+ }
165
+ else {
166
+ console.log(chalk.yellow(`⚠ ${result.reason ?? 'GitHub Action starter was not written.'}`));
167
+ console.log(chalk.dim(' Pass --force to overwrite the existing workflow.'));
168
+ }
169
+ console.log('');
170
+ console.log(chalk.bold('Next Commands'));
171
+ for (const command of result.nextCommands)
172
+ console.log(` ${command}`);
173
+ console.log('');
174
+ console.log(chalk.bold('Workflow Preview'));
175
+ console.log(prefixIndent(getGithubActionStarter().workflow.trimEnd(), ' '));
176
+ }
177
+ function parsePolicyTeam(value) {
178
+ if (isPolicyStarterTeam(value))
179
+ return value;
180
+ console.error(chalk.red(`Unsupported --team ${String(value)}.`));
181
+ console.error(chalk.dim(`Supported teams: ${POLICY_STARTER_TEAMS.join(', ')}`));
182
+ process.exit(1);
183
+ }
184
+ function printPolicyStarterResult(result) {
185
+ console.log('');
186
+ if (result.created) {
187
+ console.log(chalk.green(`✓ Created .projscanrc.json for ${result.label}`));
188
+ }
189
+ else {
190
+ console.log(chalk.yellow(`⚠ ${result.reason ?? 'Policy starter was not written.'}`));
191
+ console.log(chalk.dim(' Pass --force to overwrite with the selected policy starter.'));
192
+ }
193
+ console.log('');
194
+ console.log(chalk.bold('Next Commands'));
195
+ for (const command of result.nextCommands)
196
+ console.log(` ${command}`);
197
+ console.log('');
198
+ console.log(chalk.bold('Policy'));
199
+ console.log(prefixIndent(JSON.stringify(result.config, null, 2), ' '));
200
+ }
201
+ function printTeamStarterResult(result) {
202
+ console.log('');
203
+ console.log(chalk.bold(`Team Bootstrap: ${result.team.team}`));
204
+ console.log(` policy ${result.team.created.policy ? chalk.green('created') : chalk.yellow('kept')}`);
205
+ console.log(` PR workflow ${result.team.created.githubAction ? chalk.green('created') : chalk.yellow('kept')}`);
206
+ console.log(` CODEOWNERS ${result.team.created.codeowners ? chalk.green('created') : chalk.yellow('kept')}`);
207
+ console.log(` baseline ${result.team.created.baseline ? chalk.green('created') : chalk.yellow('kept')}`);
208
+ if (result.team.reasons.length > 0) {
209
+ console.log('');
210
+ for (const reason of result.team.reasons)
211
+ console.log(chalk.dim(` ${reason}`));
212
+ }
213
+ console.log('');
214
+ console.log(chalk.bold('Start Summary'));
215
+ console.log(` ${result.start.summary}`);
216
+ console.log('');
217
+ console.log(chalk.bold('Onboarding'));
218
+ for (const step of result.team.onboarding) {
219
+ console.log(` ${step.title}`);
220
+ console.log(chalk.dim(` ${step.why}`));
221
+ if (step.command)
222
+ console.log(` ${step.command}`);
223
+ }
224
+ console.log('');
225
+ console.log(chalk.bold('Next Commands'));
226
+ for (const command of result.team.nextCommands)
227
+ console.log(` ${command}`);
228
+ }
87
229
  function prefixIndent(text, indent) {
88
230
  return text
89
231
  .split('\n')
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}