projscan 3.0.7 → 3.0.8
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/CONTRIBUTING.md +209 -0
- package/DISCLAIMER.md +9 -0
- package/PRIVACY.md +35 -0
- package/README.md +39 -33
- package/SECURITY.md +42 -0
- package/THIRD-PARTY-NOTICES.md +52 -0
- package/TRADEMARKS.md +29 -0
- package/dist/grammars/tree-sitter-swift.wasm +0 -0
- package/dist/projscan-sbom.cdx.json +6 -6
- package/dist/tool-manifest.json +2 -2
- package/package.json +9 -2
- package/public/projscan-icon.svg +23 -0
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Contributing to projscan
|
|
2
|
+
|
|
3
|
+
Thanks for your interest in contributing! Here's how to get started.
|
|
4
|
+
|
|
5
|
+
## Development Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
git clone https://github.com/abhiyoheswaran1/projscan.git
|
|
9
|
+
cd projscan
|
|
10
|
+
npm install
|
|
11
|
+
npm run build
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### Running locally
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Run the CLI directly from source
|
|
18
|
+
node dist/cli/index.js doctor
|
|
19
|
+
|
|
20
|
+
# Watch mode for development
|
|
21
|
+
npm run dev
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Running tests
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm test # Run all tests
|
|
28
|
+
npm run test:watch # Watch mode
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Linting and formatting
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm run lint # ESLint
|
|
35
|
+
npm run format # Prettier
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## How to Contribute
|
|
39
|
+
|
|
40
|
+
### Reporting Bugs
|
|
41
|
+
|
|
42
|
+
For security vulnerabilities, do not open a public issue. Follow [SECURITY.md](SECURITY.md).
|
|
43
|
+
|
|
44
|
+
For ordinary bugs, open an [issue](https://github.com/abhiyoheswaran1/projscan/issues/new?template=bug_report.md) with:
|
|
45
|
+
- Steps to reproduce
|
|
46
|
+
- Expected vs actual behavior
|
|
47
|
+
- Node.js version and OS
|
|
48
|
+
|
|
49
|
+
### Suggesting Features
|
|
50
|
+
|
|
51
|
+
Open an [issue](https://github.com/abhiyoheswaran1/projscan/issues/new?template=feature_request.md) describing:
|
|
52
|
+
- The problem you're trying to solve
|
|
53
|
+
- Your proposed solution
|
|
54
|
+
- Alternative approaches you've considered
|
|
55
|
+
|
|
56
|
+
### Submitting Pull Requests
|
|
57
|
+
|
|
58
|
+
1. Fork the repo and create a branch from `main`
|
|
59
|
+
2. Make your changes
|
|
60
|
+
3. Add or update tests as needed
|
|
61
|
+
4. Run `npm test` and `npm run lint` to verify
|
|
62
|
+
5. Write a clear PR description explaining the change
|
|
63
|
+
|
|
64
|
+
## Legal requirements for contributions
|
|
65
|
+
|
|
66
|
+
By contributing to projscan, you agree that your contribution will be licensed under the MIT License.
|
|
67
|
+
|
|
68
|
+
You also certify the [Developer Certificate of Origin 1.1](https://developercertificate.org/) for your contribution. In practical terms:
|
|
69
|
+
|
|
70
|
+
- you wrote the contribution, or you have the right to submit it under the project license
|
|
71
|
+
- you are not adding code, docs, images, datasets, or generated output that you cannot license to this project
|
|
72
|
+
- you understand that contributions are public and may be redistributed under the MIT License
|
|
73
|
+
|
|
74
|
+
Maintainers may ask for signed-off commits. Add a sign-off with:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
git commit --amend --signoff
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Do not include secrets, private customer data, proprietary source code, or confidential vulnerability details in issues, pull requests, examples, screenshots, or fixtures.
|
|
81
|
+
|
|
82
|
+
The MIT License covers project code and docs. It does not grant rights to use the projscan or Baseframe Labs names, icons, or wordmarks in a way that implies endorsement. See [TRADEMARKS.md](TRADEMARKS.md).
|
|
83
|
+
|
|
84
|
+
## Project Structure
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
src/
|
|
88
|
+
├── cli/ # Command definitions (Commander.js)
|
|
89
|
+
├── core/ # Scanners, detectors, issue engine, hotspots, file inspector
|
|
90
|
+
│ └── languages/ # LanguageAdapter + per-language parsers (JS via babel, Python via tree-sitter)
|
|
91
|
+
├── analyzers/ # Issue checkers (eslint, prettier, test, architecture, deps, security, python*)
|
|
92
|
+
├── fixes/ # Auto-fix implementations (ESLint, Prettier, Vitest, EditorConfig)
|
|
93
|
+
├── reporters/ # Output formatters (console, JSON, markdown, SARIF)
|
|
94
|
+
├── mcp/ # MCP server - tools, prompts, resources for AI agents
|
|
95
|
+
└── utils/ # Shared utilities (config loader, changed-files, baseline, banner, logger)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Adding a language
|
|
99
|
+
|
|
100
|
+
As of 0.10, projscan has a `LanguageAdapter` interface (`src/core/languages/LanguageAdapter.ts`). Adding a new language means:
|
|
101
|
+
|
|
102
|
+
1. Implement the interface in `src/core/languages/<lang>Adapter.ts`. The Python adapter (`pythonAdapter.ts`) is the reference - it wraps a tree-sitter grammar, extracts imports/exports/symbol defs, resolves imports, and detects package roots.
|
|
103
|
+
2. Register the adapter in `src/core/languages/registry.ts`.
|
|
104
|
+
3. If the parser needs a grammar binary (e.g. another tree-sitter language), vendor the wasm under `dist/grammars/` via `scripts/copy-wasm.mjs` and add a test in `tests/integration/packSmokeTest.test.ts` that asserts it ships in the tarball.
|
|
105
|
+
4. Add language-specific analyzers under `src/analyzers/<lang>*.ts` (see `pythonTestCheck.ts`, `pythonLinterCheck.ts` for the pattern) and wire them into `src/core/issueEngine.ts`.
|
|
106
|
+
5. Add tests mirroring `tests/core/languages/pythonAdapter.*.test.ts` coverage (parse, imports, exports, resolver, package roots).
|
|
107
|
+
|
|
108
|
+
## Code Style
|
|
109
|
+
|
|
110
|
+
- TypeScript with strict mode
|
|
111
|
+
- ESLint + Prettier for formatting
|
|
112
|
+
- Keep dependencies minimal - avoid adding new runtime dependencies unless necessary
|
|
113
|
+
- Write tests for new analyzers and fixers
|
|
114
|
+
|
|
115
|
+
## Stable surface
|
|
116
|
+
|
|
117
|
+
The MCP tool inventory, CLI command list, and exit codes documented in `docs/STABILITY.md` are the **public contract**. CI runs `npm run check:stability` which compares the current build against `stability-baseline.json` checked into the repo root.
|
|
118
|
+
|
|
119
|
+
- **Adding** a new MCP tool, optional argument, or CLI command is fine - the guard prints additions but does not fail.
|
|
120
|
+
- **Removing** or **renaming** anything in the stable surface fails the guard. Either restore the surface or, if the change is intentional and warrants a major version bump, regenerate the baseline:
|
|
121
|
+
|
|
122
|
+
```sh
|
|
123
|
+
npm run build
|
|
124
|
+
node scripts/check-stability.mjs --update
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Only run `--update` when you genuinely intend to break the contract (i.e. a major-version release). The friction is the point.
|
|
128
|
+
|
|
129
|
+
## Areas wanting help
|
|
130
|
+
|
|
131
|
+
Concrete on-ramps for new contributors. Each is scoped to fit a first PR. Pre-drafted starter tasks live under [`.github/seed-issues/`](.github/seed-issues/) — pick one and either claim its corresponding GitHub issue or open one and link the file.
|
|
132
|
+
|
|
133
|
+
- **New language adapters.** The `LanguageAdapter` interface (`src/core/languages/LanguageAdapter.ts`) is the cleanest entry point. Seven languages are wired today (JS, TS, Python, Go, Java, Ruby, Rust). The Python and Rust adapters are good references — Python for the simplest shape, Rust for a recent end-to-end example. Each adapter is ~200 LOC plus walkers (imports, exports, CC, per-fn CC, callSites) and a vendored tree-sitter grammar wasm. Pre-drafted tickets: [PHP](.github/seed-issues/02-add-php-language-adapter.md), [C#](.github/seed-issues/03-add-c-sharp-language-adapter.md). Plus a [step-by-step walkthrough doc](.github/seed-issues/08-doc-walkthrough-language-adapter.md) is itself an open issue.
|
|
134
|
+
- **New analyzers.** Issue checkers live in `src/analyzers/`. Each is a pure function `(rootPath, files) => Promise<Issue[]>`. Existing ones (`testCheck`, `prettierCheck`, `securityCheck`, `dependencyRiskCheck`, `cycleCheck`) are good shape templates. Wire into `src/core/issueEngine.ts`. Tests in `tests/analyzers/`.
|
|
135
|
+
- **New reporters.** Output formatters in `src/reporters/`. Implement the same surface as `consoleReporter.ts` / `markdownReporter.ts` / `jsonReporter.ts` / `htmlReporter.ts`. Pre-drafted tickets: [HTML for `pr-diff`](.github/seed-issues/04-html-reporter-for-pr-diff.md), [HTML for `coverage`](.github/seed-issues/05-html-reporter-for-coverage.md).
|
|
136
|
+
- **MCP tools.** Each tool is a `{name, description, inputSchema, handler}` object exported from `src/mcp/tools/<name>.ts` and registered in `src/mcp/tools.ts`. Mirror an existing one (e.g. `src/mcp/tools/coupling.ts` is a clean shape). Add a `tools/list` assertion to `tests/mcp/server.test.ts`.
|
|
137
|
+
- **Fix-suggest templates.** The rule-driven action-prompt registry in `src/core/fixSuggest.ts` covers ~12 issue families. Each new template is ~25 LOC. Pre-drafted ticket: [eslint-* template](.github/seed-issues/06-eslint-fix-suggest-template.md).
|
|
138
|
+
- **UX polish.** Small, high-leverage CLI ergonomics. Pre-drafted ticket: [impact-symbol disambiguation warning](.github/seed-issues/07-impact-cli-symbol-disambiguation.md).
|
|
139
|
+
- **Documentation.** `docs/GUIDE.md` covers the agent journey + per-command reference; tighter sections still wanted: per-analyzer "what triggers / how to silence" tables, monorepo setup walkthroughs, framework-specific guides.
|
|
140
|
+
|
|
141
|
+
### First-time contributor walkthrough
|
|
142
|
+
|
|
143
|
+
If you've never landed a PR on this repo before, the smallest possible loop:
|
|
144
|
+
|
|
145
|
+
```sh
|
|
146
|
+
# 1. Fork on GitHub, then locally:
|
|
147
|
+
git clone git@github.com:<your-username>/projscan.git
|
|
148
|
+
cd projscan
|
|
149
|
+
|
|
150
|
+
# 2. Verify the baseline works (no code changes yet)
|
|
151
|
+
npm install
|
|
152
|
+
npm test # 800+ tests, ~6s
|
|
153
|
+
npm run lint # eslint, no errors expected
|
|
154
|
+
npm run build # tsc + wasm copy + manifest generation
|
|
155
|
+
npm run check:stability # baseline diff; should be clean
|
|
156
|
+
|
|
157
|
+
# 3. Pick a seed issue, mirror the template it points at
|
|
158
|
+
# e.g. .github/seed-issues/06-eslint-fix-suggest-template.md
|
|
159
|
+
# -> open src/core/fixSuggest.ts, find the existing templates,
|
|
160
|
+
# mirror one, write tests, run npm test
|
|
161
|
+
|
|
162
|
+
# 4. Commit + push to your fork
|
|
163
|
+
git checkout -b feat/eslint-fix-template
|
|
164
|
+
git add -A
|
|
165
|
+
git commit -m "Add fix-suggest template for eslint-* rules"
|
|
166
|
+
git push origin feat/eslint-fix-template
|
|
167
|
+
|
|
168
|
+
# 5. Open a PR back to abhiyoheswaran1/projscan:main
|
|
169
|
+
# Reference the seed issue file in the PR description.
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
CI runs the same checks (`npm test`, `npm run lint`, `npm run check:stability`) on every PR. As long as those pass, a maintainer will review.
|
|
173
|
+
|
|
174
|
+
For larger work (refactors, cross-cutting changes), open an issue first to discuss the approach. We'd rather agree on the shape before you spend a weekend on it.
|
|
175
|
+
|
|
176
|
+
## Releasing
|
|
177
|
+
|
|
178
|
+
A release is a four-step ritual now that `.github/workflows/release.yml` does the heavy lifting. Steps 1-3 prep and ship the npm, GitHub Release, and MCP Registry surfaces; step 4 is the website surface that lives in the separate website repo.
|
|
179
|
+
|
|
180
|
+
1. **Bump version + write the CHANGELOG entry** in a PR against `main`:
|
|
181
|
+
- `package.json#version` → new semver (patch for fixes, minor for features, major if anything breaks).
|
|
182
|
+
- `.github/mcp-registry/server.json` — bump BOTH `version` fields (top-level and `packages[0].version`). Description must stay ≤ 100 chars (registry limit).
|
|
183
|
+
- `CHANGELOG.md` — add a `## [X.Y.Z] — YYYY-MM-DD` section at the top in Keep-a-Changelog format. Cover Added / Changed / Removed / Notes; be honest about tradeoffs. The release workflow slices this verbatim into the GitHub Release body.
|
|
184
|
+
- Sweep for "X tools" / "Y languages" counts in `README.md`, `docs/GUIDE.md`, `docs/ROADMAP.md` and update them.
|
|
185
|
+
- **Regenerate the dogfood health badge.** Run `npx projscan badge` against the prepped tree. If the letter or score in the README badge changed, update `README.md` to match. **A drop in letter (e.g., A → B) is a release blocker** — fix the underlying signal before tagging. (The badge is a static `img.shields.io/badge` snapshot, not a live endpoint, so it stays consistent until the next release intentionally moves it.)
|
|
186
|
+
- Run `npm run release:check`. It reports version/changelog drift, dirty worktree state, tag state, and the next release action. When there are no metadata or git blockers, it also runs the build, release gate, tests, lint, stability check, SBOM generation, and packed install smoke.
|
|
187
|
+
|
|
188
|
+
2. **Merge the PR.** Per the project's PR-and-review rule, every change including release prep goes through review. Wait for CI to pass on the merged `main` commit before tagging.
|
|
189
|
+
|
|
190
|
+
3. **Tag and push.** Tags are allowed from `main` only. Never tag or publish from a feature, fix, release, or temporary branch. From a clean, current `main` checkout, run:
|
|
191
|
+
```
|
|
192
|
+
git switch main
|
|
193
|
+
git pull --ff-only origin main
|
|
194
|
+
npm run release:check
|
|
195
|
+
git tag -a vX.Y.Z -m "Release vX.Y.Z"
|
|
196
|
+
git push origin vX.Y.Z
|
|
197
|
+
```
|
|
198
|
+
The `Release` workflow fires automatically. It validates versions, runs the full build / test / lint / stability gate, slices the CHANGELOG entry, publishes to npm with provenance, creates the GitHub Release with `dist/tool-manifest.json` and the SBOM attached, and republishes the MCP Registry metadata through GitHub OIDC. If anything fails before npm, no GitHub Release is created and no npm publish happens. If anything fails after npm, fix it and use the workflow's `workflow_dispatch` re-run with the same tag; npm, GitHub Release, and MCP Registry steps are idempotent.
|
|
199
|
+
|
|
200
|
+
4. **Bump the website's expectations** (separate repo). In the personal-website repo, open `tools.astro` (or wherever the EXPECTED block lives) and edit:
|
|
201
|
+
- The hardcoded **manifest URL pin** → swap `releases/download/vX.Y.Z/tool-manifest.json` for the new tag.
|
|
202
|
+
- `EXPECTED.minVersion` → the new version.
|
|
203
|
+
- `EXPECTED.requiredTools` → append any new MCP tool names the release added.
|
|
204
|
+
|
|
205
|
+
The website build refuses to run until all three edits are in. That friction is the feature — it prevents the docs page from drifting out of sync with the published tool surface. The changelog page is regenerated from `CHANGELOG.md` on `main` at build time, so the next site build naturally picks up the new entry.
|
|
206
|
+
|
|
207
|
+
## License
|
|
208
|
+
|
|
209
|
+
By contributing, you agree that your contributions will be licensed under the MIT License. See [LICENSE](LICENSE), [DISCLAIMER.md](DISCLAIMER.md), and [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md).
|
package/DISCLAIMER.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Disclaimer
|
|
2
|
+
|
|
3
|
+
projscan is provided under the MIT License and ships without warranties. See [LICENSE](LICENSE) for the binding license terms.
|
|
4
|
+
|
|
5
|
+
projscan reports are developer-assistance signals. They are not legal, security, compliance, financial, or professional advice. A human maintainer remains responsible for release decisions, vulnerability handling, dependency review, and production changes.
|
|
6
|
+
|
|
7
|
+
Security, dataflow, supply-chain, and quality findings can be incomplete or wrong. Treat `block`, `caution`, and `proceed` verdicts as review inputs, not guarantees.
|
|
8
|
+
|
|
9
|
+
Local plugins run as local code when enabled. Only run plugins you trust.
|
package/PRIVACY.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# projscan Privacy Notice
|
|
2
|
+
|
|
3
|
+
projscan is a local, open-source developer tool. This notice applies to the projscan CLI, MCP server, package contents, generated local artifacts, and repository docs.
|
|
4
|
+
|
|
5
|
+
projscan is part of the Baseframe Labs family of products (https://www.baseframelabs.com). Baseframe Labs is an umbrella brand, not the legal subject of this notice. This notice applies to projscan only.
|
|
6
|
+
|
|
7
|
+
## Local-first behavior
|
|
8
|
+
|
|
9
|
+
By default, projscan runs on your machine and reads files in the repository where you run it. It does not upload source code, dependency data, scan results, telemetry, or usage analytics to a projscan service.
|
|
10
|
+
|
|
11
|
+
projscan may write local files when you ask it to, such as `.projscan-cache/`, `.projscan-feedback.json`, baselines, handoff files, generated policies, generated GitHub Actions, or reports.
|
|
12
|
+
|
|
13
|
+
## Commands that can involve network access
|
|
14
|
+
|
|
15
|
+
Some workflows can involve network access because they call external tooling or package managers:
|
|
16
|
+
|
|
17
|
+
- installing projscan with npm or running it through npx contacts the npm registry before projscan starts
|
|
18
|
+
- `projscan audit` shells out to npm audit behavior for the current project
|
|
19
|
+
- commands or modes that explicitly ask for registry checks may contact the configured package registry
|
|
20
|
+
- semantic search can download an optional local embedding model when the optional `@xenova/transformers` peer is installed and the user opts into semantic mode
|
|
21
|
+
- local analyzer or reporter plugins can do anything their code does; only enable plugins you trust
|
|
22
|
+
|
|
23
|
+
## Environment variables and secrets
|
|
24
|
+
|
|
25
|
+
projscan may pass `process.env` to child processes such as Git or npm so those tools work normally. projscan does not intentionally inspect `.env` values, API keys, session tokens, or private credentials for telemetry or product analytics.
|
|
26
|
+
|
|
27
|
+
Security analyzers may flag committed secret-looking strings in repository files. Those findings stay in local output unless you choose to copy, save, or publish them.
|
|
28
|
+
|
|
29
|
+
## Feedback artifacts
|
|
30
|
+
|
|
31
|
+
`projscan feedback` creates local JSON evidence about reviewer usefulness, minutes saved, prevented bad edits, false positives, owner clarity, next-command clarity, and repeat PR use. Treat that artifact as team data. Do not commit it if it contains private PR URLs, reviewer handles, or internal notes you do not want public.
|
|
32
|
+
|
|
33
|
+
## Contact
|
|
34
|
+
|
|
35
|
+
For privacy or security questions about projscan, contact support@baseframelabs.com.
|
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.8/docs/GUIDE.md) · [Roadmap](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.8/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.8/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
|
|
|
@@ -19,15 +19,13 @@
|
|
|
19
19
|
|
|
20
20
|
## Why?
|
|
21
21
|
|
|
22
|
-
AI coding agents are becoming the primary interface to code.
|
|
22
|
+
AI coding agents are becoming the primary interface to code. When you ask an agent *"which files implement auth?"* or *"what breaks if I bump React from 18 to 19?"*, it needs structured repo context, not raw grep output.
|
|
23
23
|
|
|
24
|
-
**projscan is
|
|
24
|
+
**projscan is code intelligence built for agents.** MCP clients get a fast, AST-backed, context-budget-aware view of your codebase: semantic graph, dataflow risks, review verdicts, hotspots, ownership, preflight gates, fix prompts, impact analysis, and durable session context. Everything is local and offline.
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
For teams, projscan turns that context into a repeatable PR habit. `projscan init team` creates policy, CI, ownership, and baseline memory. `projscan evidence-pack --pr-comment` gives reviewers a compact verdict with top risks, First Fix, owner routing, baseline trend memory, and exact next commands. `projscan feedback`, `projscan dogfood`, and `projscan trial` measure whether the loop actually saved time, prevented risky edits, and stayed trustworthy across real repos.
|
|
27
27
|
|
|
28
|
-
The
|
|
29
|
-
|
|
30
|
-
Humans get the same thing through the CLI.
|
|
28
|
+
The local plugin platform lets teams add project-specific findings and render `doctor`, `analyze`, and `ci` in their own voice without changing the scan pipeline. Humans get the same information through the CLI.
|
|
31
29
|
|
|
32
30
|
**Everything is offline-first. Zero network calls. No API keys.**
|
|
33
31
|
|
|
@@ -35,7 +33,7 @@ Humans get the same thing through the CLI.
|
|
|
35
33
|
npx projscan
|
|
36
34
|
```
|
|
37
35
|
|
|
38
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
36
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.8/docs/projscan-reporter-plugin.gif" alt="projscan doctor rendered through a local reporter plugin in a macOS-style terminal window" width="700">
|
|
39
37
|
|
|
40
38
|
Run `projscan doctor` for a focused health check:
|
|
41
39
|
|
|
@@ -43,7 +41,7 @@ Run `projscan doctor` for a focused health check:
|
|
|
43
41
|
npx projscan doctor
|
|
44
42
|
```
|
|
45
43
|
|
|
46
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
44
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.8/docs/npx%20projscan%20doctor.gif" alt="npx projscan doctor" width="700">
|
|
47
45
|
|
|
48
46
|
## Install
|
|
49
47
|
|
|
@@ -80,7 +78,7 @@ projscan evidence-pack --website-prompt # Approval packet with product evidence
|
|
|
80
78
|
projscan evidence-pack --pr-comment # PR comment with trust calibration + First Fix
|
|
81
79
|
projscan feedback init --output .projscan-feedback.json # Create reviewer feedback evidence
|
|
82
80
|
projscan dogfood --repo ../api --repo ../web --format json # Multi-repo adoption proof loop
|
|
83
|
-
projscan trial --repo ../api --repo ../web --feedback .projscan-feedback.json --format json #
|
|
81
|
+
projscan trial --repo ../api --repo ../web --feedback .projscan-feedback.json --format json # Adoption-readiness report
|
|
84
82
|
projscan regression-plan --level full # Risk-based verification matrix
|
|
85
83
|
projscan handoff # Concise next-agent handoff
|
|
86
84
|
projscan handoff --write docs/agent-handoff.md # Persist next-agent handoff artifact
|
|
@@ -109,9 +107,9 @@ projscan plugin test .projscan-plugins/policy.projscan-plugin.json
|
|
|
109
107
|
PROJSCAN_PLUGINS_PREVIEW=1 projscan doctor --reporter team-radar
|
|
110
108
|
```
|
|
111
109
|
|
|
112
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
110
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.8/docs/npx%20projscan%20--help.gif" alt="npx projscan --help" width="700">
|
|
113
111
|
|
|
114
|
-
For a comprehensive walkthrough, see the **[Full Guide](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.
|
|
112
|
+
For a comprehensive walkthrough, see the **[Full Guide](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.8/docs/GUIDE.md)**.
|
|
115
113
|
|
|
116
114
|
## Commands
|
|
117
115
|
|
|
@@ -175,31 +173,31 @@ projscan --help
|
|
|
175
173
|
<details>
|
|
176
174
|
<summary><strong>projscan structure</strong> - Directory tree with file counts</summary>
|
|
177
175
|
|
|
178
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
176
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.8/docs/npx%20projscan%20structure.gif" alt="npx projscan structure" width="700">
|
|
179
177
|
</details>
|
|
180
178
|
|
|
181
179
|
<details>
|
|
182
180
|
<summary><strong>projscan diagram</strong> - Architecture visualization</summary>
|
|
183
181
|
|
|
184
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
182
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.8/docs/npx%20projscan%20diagram.gif" alt="npx projscan diagram" width="700">
|
|
185
183
|
</details>
|
|
186
184
|
|
|
187
185
|
<details>
|
|
188
186
|
<summary><strong>projscan dependencies</strong> - Dependency analysis</summary>
|
|
189
187
|
|
|
190
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
188
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.8/docs/npx%20projscan%20dependencies.gif" alt="npx projscan dependencies" width="700">
|
|
191
189
|
</details>
|
|
192
190
|
|
|
193
191
|
<details>
|
|
194
192
|
<summary><strong>projscan explain</strong> - File explanation</summary>
|
|
195
193
|
|
|
196
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
194
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.8/docs/npx%20projscan%20explain.gif" alt="npx projscan explain" width="700">
|
|
197
195
|
</details>
|
|
198
196
|
|
|
199
197
|
<details>
|
|
200
198
|
<summary><strong>projscan badge</strong> - Health badge generation</summary>
|
|
201
199
|
|
|
202
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
200
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.8/docs/npx%20projscan%20badge.gif" alt="npx projscan badge" width="700">
|
|
203
201
|
</details>
|
|
204
202
|
|
|
205
203
|
### Output Formats
|
|
@@ -221,7 +219,7 @@ Run `projscan help` for the generated command-by-command support matrix.
|
|
|
221
219
|
|
|
222
220
|
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.
|
|
223
221
|
|
|
224
|
-
**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.
|
|
222
|
+
**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.8/docs/2.0-MIGRATION.md), then use [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.8/docs/PLUGIN-AUTHORING.md), the [Plugin Gallery](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.8/docs/PLUGIN-GALLERY.md), and the [manifest schema](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.8/docs/plugin.schema.json) as the stable contract.
|
|
225
223
|
|
|
226
224
|
```bash
|
|
227
225
|
projscan plugin list
|
|
@@ -230,9 +228,9 @@ PROJSCAN_PLUGINS_PREVIEW=1 projscan doctor --reporter team-radar
|
|
|
230
228
|
PROJSCAN_PLUGINS_PREVIEW=1 projscan ci --reporter team-radar --min-score 80
|
|
231
229
|
```
|
|
232
230
|
|
|
233
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
231
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.8/docs/projscan-reporter-plugin.gif" alt="projscan local reporter plugin rendering a team health report" width="700">
|
|
234
232
|
|
|
235
|
-
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.
|
|
233
|
+
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.8/docs/PLUGIN-AUTHORING.md) for manifest shape, `render(context)`, validation, and the trust model.
|
|
236
234
|
|
|
237
235
|
### Options
|
|
238
236
|
|
|
@@ -393,7 +391,7 @@ If you read projscan's [Socket report](https://socket.dev/npm/package/projscan),
|
|
|
393
391
|
### Audit it yourself
|
|
394
392
|
|
|
395
393
|
- **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.
|
|
396
|
-
- **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.
|
|
394
|
+
- **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.8/docs/STABILITY.md).
|
|
397
395
|
- **Run it offline:** `npm install -g projscan` followed by anything except `audit` and `--mode semantic` works without network.
|
|
398
396
|
- **Drop privilege further:** in CI, run projscan in a sandbox that disallows network egress; everything except `audit` will pass.
|
|
399
397
|
|
|
@@ -423,14 +421,15 @@ For adoption proof, run the product against multiple real repos and capture firs
|
|
|
423
421
|
```sh
|
|
424
422
|
projscan evidence-pack --pr-comment
|
|
425
423
|
projscan feedback init --output .projscan-feedback.json
|
|
426
|
-
projscan feedback add --file .projscan-feedback.json --repo api --pr https://github.com/acme/api/pull/42 --reviewer @alice --useful true --minutes-saved 10
|
|
424
|
+
projscan feedback add --file .projscan-feedback.json --repo api --pr https://github.com/acme/api/pull/42 --reviewer @alice --useful true --minutes-saved 10 --owner-routing-clear true --next-command-clear true
|
|
425
|
+
projscan feedback summary --file .projscan-feedback.json --format json
|
|
427
426
|
projscan dogfood --repo ../api --repo ../web --repo ../worker --feedback .projscan-feedback.json --format json
|
|
428
427
|
projscan trial --repo ../api --repo ../web --repo ../worker --feedback .projscan-feedback.json --format json
|
|
429
428
|
```
|
|
430
429
|
|
|
431
|
-
The dogfood
|
|
430
|
+
The dogfood and trial reports check PR-comment readiness, repeat-use commands, MCP readiness, measured minutes saved, prevented bad edits, false positives, owner clarity, next-command clarity, and repeat PR usage before rollout.
|
|
432
431
|
|
|
433
|
-
The hotspots projscan finds in itself are real signals — the reporters in particular have grown organically across releases and
|
|
432
|
+
The hotspots projscan finds in itself are real signals — the reporters in particular have grown organically across releases and remain future refactor candidates in the roadmap. We choose to ship the signal honestly rather than tune the score to hide it.
|
|
434
433
|
|
|
435
434
|
## CI/CD Integration
|
|
436
435
|
|
|
@@ -443,7 +442,7 @@ projscan ci --changed-only # Gate only on this PR's diff
|
|
|
443
442
|
projscan ci --format sarif > projscan.sarif # SARIF for Code Scanning
|
|
444
443
|
```
|
|
445
444
|
|
|
446
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
445
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.8/docs/npx%20projscan%20ci%20--min-score%2070.gif" alt="npx projscan ci --min-score 70" width="700">
|
|
447
446
|
|
|
448
447
|
### GitHub Action (recommended)
|
|
449
448
|
|
|
@@ -512,7 +511,7 @@ Fields:
|
|
|
512
511
|
- `hotspots.limit` / `hotspots.since` - defaults for the `hotspots` command
|
|
513
512
|
- `monorepo.importPolicy` - cross-package import allow/deny rules in monorepos *(0.14+)*
|
|
514
513
|
|
|
515
|
-
See [`docs/GUIDE.md` → Configuration](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.
|
|
514
|
+
See [`docs/GUIDE.md` → Configuration](https://github.com/abhiyoheswaran1/projscan/blob/v3.0.8/docs/GUIDE.md#configuration-projscanrc) for the full reference (field types, validation behavior, embedding config in `package.json`, monorepo `importPolicy` semantics).
|
|
516
515
|
|
|
517
516
|
## Tracking Health Over Time
|
|
518
517
|
|
|
@@ -525,7 +524,7 @@ projscan diff # Compare against baseline
|
|
|
525
524
|
projscan diff --format markdown # Markdown diff for PRs
|
|
526
525
|
```
|
|
527
526
|
|
|
528
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
527
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.8/docs/npx%20projscan%20diff%20--save-baseline.gif" alt="npx projscan diff --save-baseline" width="700">
|
|
529
528
|
|
|
530
529
|
## Hotspots - Where to Fix First
|
|
531
530
|
|
|
@@ -614,7 +613,7 @@ Coverage is also automatically joined into `projscan hotspots` when one of those
|
|
|
614
613
|
|
|
615
614
|
**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.
|
|
616
615
|
|
|
617
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.
|
|
616
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v3.0.8/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">
|
|
618
617
|
|
|
619
618
|
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.
|
|
620
619
|
|
|
@@ -811,7 +810,7 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
|
|
|
811
810
|
- **`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`.
|
|
812
811
|
- **`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.
|
|
813
812
|
|
|
814
|
-
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.
|
|
813
|
+
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.8/docs/PLUGIN-AUTHORING.md).
|
|
815
814
|
|
|
816
815
|
### Context-window budgeting
|
|
817
816
|
|
|
@@ -880,11 +879,18 @@ projscan caches parsed ASTs at `.projscan-cache/graph.json` (auto-gitignored). F
|
|
|
880
879
|
|
|
881
880
|
## Contributing
|
|
882
881
|
|
|
883
|
-
Contributions are welcome
|
|
882
|
+
Contributions are welcome. Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a PR. Contributions are accepted under the MIT License and the DCO 1.1 certification described there.
|
|
883
|
+
|
|
884
|
+
## Legal and Trust
|
|
884
885
|
|
|
885
|
-
|
|
886
|
+
- License: [MIT](LICENSE)
|
|
887
|
+
- Disclaimer: [DISCLAIMER.md](DISCLAIMER.md)
|
|
888
|
+
- Security policy: [SECURITY.md](SECURITY.md)
|
|
889
|
+
- Privacy notice: [PRIVACY.md](PRIVACY.md)
|
|
890
|
+
- Trademark and brand policy: [TRADEMARKS.md](TRADEMARKS.md)
|
|
891
|
+
- Third-party notices: [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md)
|
|
886
892
|
|
|
887
|
-
|
|
893
|
+
projscan is free and open source. The CLI and MCP server are local-first and do not upload source code, scan results, telemetry, or usage analytics to a projscan service.
|
|
888
894
|
|
|
889
895
|
<p align="center">
|
|
890
896
|
<a href="https://www.baseframelabs.com" target="_blank" rel="noopener" title="Part of Baseframe Labs">
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Reporting a vulnerability
|
|
4
|
+
|
|
5
|
+
Please do not report security vulnerabilities in public GitHub issues.
|
|
6
|
+
|
|
7
|
+
Email vulnerability reports to support@baseframelabs.com with:
|
|
8
|
+
|
|
9
|
+
- affected projscan version
|
|
10
|
+
- operating system and Node.js version
|
|
11
|
+
- steps to reproduce
|
|
12
|
+
- impact you believe the issue has
|
|
13
|
+
- whether the report includes secret material or private repository data
|
|
14
|
+
|
|
15
|
+
We will acknowledge reports as soon as practical and will coordinate a fix, disclosure notes, and release timing based on severity.
|
|
16
|
+
|
|
17
|
+
## Supported versions
|
|
18
|
+
|
|
19
|
+
Security fixes target the latest published npm version of `projscan`. Older versions may receive guidance, but we do not promise backports unless a maintainer explicitly says so in the advisory.
|
|
20
|
+
|
|
21
|
+
## Scope
|
|
22
|
+
|
|
23
|
+
In scope:
|
|
24
|
+
|
|
25
|
+
- vulnerabilities in the `projscan` CLI, MCP server, local plugin loader, generated GitHub Action templates, and packaged runtime artifacts
|
|
26
|
+
- cases where projscan unintentionally reads, exposes, uploads, or persists sensitive local data
|
|
27
|
+
- supply-chain or package-integrity issues in the published npm package
|
|
28
|
+
|
|
29
|
+
Out of scope:
|
|
30
|
+
|
|
31
|
+
- vulnerabilities in a user's repository that projscan reports
|
|
32
|
+
- issues caused only by untrusted local plugins enabled through `PROJSCAN_PLUGINS_PREVIEW=1`
|
|
33
|
+
- npm, Git, or operating-system behavior outside projscan's control
|
|
34
|
+
- social engineering, spam, or denial-of-service reports without a concrete projscan defect
|
|
35
|
+
|
|
36
|
+
## Safe harbor
|
|
37
|
+
|
|
38
|
+
Good-faith testing is welcome when it avoids harm, privacy violations, data destruction, service disruption, and access to systems or data you do not own. Stop testing and contact us if you reach sensitive data.
|
|
39
|
+
|
|
40
|
+
## Security contact and brand note
|
|
41
|
+
|
|
42
|
+
Baseframe Labs is the umbrella brand for this product family. It is not currently a formed legal entity. Please do not address legal notices to Baseframe Labs with any corporate designator.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Third-Party Notices
|
|
2
|
+
|
|
3
|
+
projscan is licensed under MIT. It also depends on third-party open-source packages that keep their own licenses.
|
|
4
|
+
|
|
5
|
+
This notice summarizes direct runtime dependencies, optional peer dependencies, and bundled grammar artifacts used by the published package. Transitive dependencies keep their package metadata and license files through npm.
|
|
6
|
+
|
|
7
|
+
## Direct runtime dependencies
|
|
8
|
+
|
|
9
|
+
| Package | License |
|
|
10
|
+
|---|---|
|
|
11
|
+
| `@babel/parser` | MIT |
|
|
12
|
+
| `@babel/types` | MIT |
|
|
13
|
+
| `chalk` | MIT |
|
|
14
|
+
| `commander` | MIT |
|
|
15
|
+
| `fast-glob` | MIT |
|
|
16
|
+
| `ora` | MIT |
|
|
17
|
+
| `tree-sitter-c-sharp` | MIT |
|
|
18
|
+
| `tree-sitter-go` | MIT |
|
|
19
|
+
| `tree-sitter-java` | MIT |
|
|
20
|
+
| `tree-sitter-php` | MIT |
|
|
21
|
+
| `tree-sitter-python` | MIT |
|
|
22
|
+
| `tree-sitter-ruby` | MIT |
|
|
23
|
+
| `tree-sitter-rust` | MIT |
|
|
24
|
+
| `web-tree-sitter` | MIT |
|
|
25
|
+
|
|
26
|
+
## Optional peer dependency
|
|
27
|
+
|
|
28
|
+
| Package | License | Notes |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| `@xenova/transformers` | Apache-2.0 | Optional semantic-search peer. Not required for default BM25 search. |
|
|
31
|
+
|
|
32
|
+
## Bundled grammar artifacts
|
|
33
|
+
|
|
34
|
+
projscan packages Tree-sitter wasm grammars under `dist/grammars/` so scans work offline after install.
|
|
35
|
+
|
|
36
|
+
| Artifact | Source package | License |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| `web-tree-sitter.wasm` | `web-tree-sitter` | MIT |
|
|
39
|
+
| `tree-sitter-python.wasm` | `tree-sitter-python` | MIT |
|
|
40
|
+
| `tree-sitter-go.wasm` | `tree-sitter-go` | MIT |
|
|
41
|
+
| `tree-sitter-java.wasm` | `tree-sitter-java` | MIT |
|
|
42
|
+
| `tree-sitter-ruby.wasm` | `tree-sitter-ruby` | MIT |
|
|
43
|
+
| `tree-sitter-rust.wasm` | `tree-sitter-rust` | MIT |
|
|
44
|
+
| `tree-sitter-php.wasm` | `tree-sitter-php` | MIT |
|
|
45
|
+
| `tree-sitter-c_sharp.wasm` | `tree-sitter-c-sharp` | MIT |
|
|
46
|
+
| `tree-sitter-kotlin.wasm` | `tree-sitter-kotlin` | MIT |
|
|
47
|
+
| `tree-sitter-swift.wasm` | `tree-sitter-swift` | MIT |
|
|
48
|
+
| `tree-sitter-cpp.wasm` | `tree-sitter-cpp` | MIT |
|
|
49
|
+
|
|
50
|
+
## Notes for redistributors
|
|
51
|
+
|
|
52
|
+
If you redistribute projscan, keep the projscan MIT license and preserve required third-party license notices for the packages you redistribute.
|
package/TRADEMARKS.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Trademark and Brand Policy
|
|
2
|
+
|
|
3
|
+
The MIT License covers the projscan source code and documentation. It does not grant trademark rights in the projscan name, projscan icon, Baseframe Labs name, Baseframe Labs wordmarks, or related branding.
|
|
4
|
+
|
|
5
|
+
## Allowed uses
|
|
6
|
+
|
|
7
|
+
You may use the projscan name to:
|
|
8
|
+
|
|
9
|
+
- describe the unmodified projscan project or package
|
|
10
|
+
- link to the official repository or npm package
|
|
11
|
+
- state that your project works with projscan
|
|
12
|
+
- include the unmodified projscan icon in documentation that clearly refers to projscan
|
|
13
|
+
|
|
14
|
+
## Uses that need permission
|
|
15
|
+
|
|
16
|
+
Please ask before you:
|
|
17
|
+
|
|
18
|
+
- use projscan or Baseframe Labs branding in a product, company, domain, social handle, conference booth, paid course, or merchandise
|
|
19
|
+
- imply endorsement, certification, partnership, or official status
|
|
20
|
+
- use a confusingly similar name or logo for a fork, plugin marketplace, hosted service, or commercial wrapper
|
|
21
|
+
- modify the official icon or wordmarks in a way that makes the source or endorsement unclear
|
|
22
|
+
|
|
23
|
+
## Forks and plugins
|
|
24
|
+
|
|
25
|
+
Forks and plugins should make their status clear. Use names like "plugin for projscan" or "fork of projscan" instead of names that suggest official ownership.
|
|
26
|
+
|
|
27
|
+
## Baseframe Labs note
|
|
28
|
+
|
|
29
|
+
Baseframe Labs is an umbrella brand for related products. It is not currently a formed legal entity. Do not use Baseframe Labs with any corporate designator.
|
|
Binary file
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bomFormat": "CycloneDX",
|
|
3
3
|
"specVersion": "1.5",
|
|
4
|
-
"serialNumber": "urn:uuid:
|
|
4
|
+
"serialNumber": "urn:uuid:47448f57-6e78-4632-8ae7-fb9a97d0daaa",
|
|
5
5
|
"version": 1,
|
|
6
6
|
"metadata": {
|
|
7
|
-
"timestamp": "2026-
|
|
7
|
+
"timestamp": "2026-06-01T06:27:58.024Z",
|
|
8
8
|
"tools": [
|
|
9
9
|
{
|
|
10
10
|
"vendor": "projscan",
|
|
11
11
|
"name": "projscan-sbom-generator",
|
|
12
|
-
"version": "3.0.
|
|
12
|
+
"version": "3.0.8"
|
|
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.8",
|
|
18
18
|
"name": "projscan",
|
|
19
|
-
"version": "3.0.
|
|
20
|
-
"purl": "pkg:npm/projscan@3.0.
|
|
19
|
+
"version": "3.0.8",
|
|
20
|
+
"purl": "pkg:npm/projscan@3.0.8"
|
|
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.8",
|
|
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), first-60-seconds workflow orientation (projscan_start), agent workplans (projscan_workplan), bug-hunt queues (projscan_bug_hunt), product-line planning (projscan_release_train), evidence packs (projscan_evidence_pack), regression planning (projscan_regression_plan), agent briefs (projscan_agent_brief), quality scorecards (projscan_quality_scorecard), and preflight with supply-chain IOC evidence, rule-driven fix suggestions + mechanical apply layer with rollback (projscan_apply_fix, projscan_fix_suggest, projscan_explain_issue), source-to-sink taint analysis (projscan_taint) with truncation reporting, transitive blast-radius analysis with cross-repo mode (projscan_impact for files and symbols), cross-repo workspace registration + intelligence (projscan_workspace_graph), per-function semantic search chunks (sub-file embeddings), per-rule confidence + severity drift + cost-summary analytics with live streaming (projscan_cost_summary), stable local analyzer + reporter plugin API (projscan_plugin, CLI --reporter, opt-in via PROJSCAN_PLUGINS_PREVIEW=1), monorepo workspace awareness with cross-package import policy + per-package dependencies / outdated / audit, BM25 + optional semantic search, cursor pagination, progress notifications, context-budgeted output, and a stable-surface CI guard. CLI on the side.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
@@ -18,7 +18,14 @@
|
|
|
18
18
|
"docs/plugin.schema.json",
|
|
19
19
|
"docs/examples/plugins",
|
|
20
20
|
"public/brand/baseframe-labs",
|
|
21
|
-
"public/.well-known/security.txt"
|
|
21
|
+
"public/.well-known/security.txt",
|
|
22
|
+
"CONTRIBUTING.md",
|
|
23
|
+
"SECURITY.md",
|
|
24
|
+
"PRIVACY.md",
|
|
25
|
+
"DISCLAIMER.md",
|
|
26
|
+
"TRADEMARKS.md",
|
|
27
|
+
"THIRD-PARTY-NOTICES.md",
|
|
28
|
+
"public/projscan-icon.svg"
|
|
22
29
|
],
|
|
23
30
|
"scripts": {
|
|
24
31
|
"build": "tsc && node scripts/copy-wasm.mjs && node scripts/generate-tool-manifest.mjs",
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">
|
|
2
|
+
<defs>
|
|
3
|
+
<clipPath id="projscan-icon-mask">
|
|
4
|
+
<rect x="0" y="0" width="512" height="512" rx="114" ry="114" />
|
|
5
|
+
</clipPath>
|
|
6
|
+
</defs>
|
|
7
|
+
<g clip-path="url(#projscan-icon-mask)">
|
|
8
|
+
<!-- App icon background: dark rounded square, matching the site's gray-900 -->
|
|
9
|
+
<rect x="0" y="0" width="512" height="512" fill="#111827" />
|
|
10
|
+
<!-- Terminal / code icon (Heroicons command-line, scaled to fill ~62% of the tile) -->
|
|
11
|
+
<!-- Original viewBox 0 0 24 24, scaled to 320x320, centered at (256,256) = offset 96,96 -->
|
|
12
|
+
<g transform="translate(96,96) scale(13.333)">
|
|
13
|
+
<path
|
|
14
|
+
fill="none"
|
|
15
|
+
stroke="#4ade80"
|
|
16
|
+
stroke-width="1.5"
|
|
17
|
+
stroke-linecap="round"
|
|
18
|
+
stroke-linejoin="round"
|
|
19
|
+
d="M6.75 7.5l3 2.25-3 2.25m4.5 0h3M5.25 20.25h13.5A2.25 2.25 0 0021 18V6a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 6v12a2.25 2.25 0 002.25 2.25z"
|
|
20
|
+
/>
|
|
21
|
+
</g>
|
|
22
|
+
</g>
|
|
23
|
+
</svg>
|