projscan 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +5 -1
- package/PRIVACY.md +1 -0
- package/README.md +307 -234
- package/THIRD-PARTY-NOTICES.md +31 -31
- package/dist/analyzers/architectureCheck.js.map +1 -1
- package/dist/analyzers/crossPackageImportCheck.js +3 -2
- package/dist/analyzers/crossPackageImportCheck.js.map +1 -1
- package/dist/analyzers/deadCodeCheck.js +10 -2
- package/dist/analyzers/deadCodeCheck.js.map +1 -1
- package/dist/analyzers/dependencyRiskCheck.js +1 -5
- package/dist/analyzers/dependencyRiskCheck.js.map +1 -1
- package/dist/analyzers/eslintCheck.js +3 -1
- package/dist/analyzers/eslintCheck.js.map +1 -1
- package/dist/analyzers/prettierCheck.js +16 -3
- package/dist/analyzers/prettierCheck.js.map +1 -1
- package/dist/analyzers/pythonDependencyRiskCheck.js +4 -17
- package/dist/analyzers/pythonDependencyRiskCheck.js.map +1 -1
- package/dist/analyzers/pythonLinterCheck.js +2 -12
- package/dist/analyzers/pythonLinterCheck.js.map +1 -1
- package/dist/analyzers/securityCheck.js +26 -9
- package/dist/analyzers/securityCheck.js.map +1 -1
- package/dist/analyzers/supplyChainCheck.js +6 -2
- package/dist/analyzers/supplyChainCheck.js.map +1 -1
- package/dist/analyzers/testCheck.js +10 -1
- package/dist/analyzers/testCheck.js.map +1 -1
- package/dist/analyzers/unusedDependencyCheck.js +8 -8
- package/dist/analyzers/unusedDependencyCheck.js.map +1 -1
- package/dist/cli/_shared.d.ts +2 -1
- package/dist/cli/_shared.js +14 -2
- package/dist/cli/_shared.js.map +1 -1
- package/dist/cli/commands/agentBrief.js +7 -1
- package/dist/cli/commands/agentBrief.js.map +1 -1
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/applyFix.js +1 -1
- package/dist/cli/commands/applyFix.js.map +1 -1
- package/dist/cli/commands/audit.js +4 -2
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/badge.js.map +1 -1
- package/dist/cli/commands/bugHunt.js +2 -2
- package/dist/cli/commands/bugHunt.js.map +1 -1
- package/dist/cli/commands/ci.js.map +1 -1
- package/dist/cli/commands/claim.js +3 -3
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/collision.js +4 -2
- package/dist/cli/commands/collision.js.map +1 -1
- package/dist/cli/commands/coordinate.js +4 -2
- package/dist/cli/commands/coordinate.js.map +1 -1
- package/dist/cli/commands/coupling.js.map +1 -1
- package/dist/cli/commands/coverage.js.map +1 -1
- package/dist/cli/commands/dataflow.js.map +1 -1
- package/dist/cli/commands/dependencies.js +1 -1
- package/dist/cli/commands/dependencies.js.map +1 -1
- package/dist/cli/commands/diff.js.map +1 -1
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/dogfood.js +30 -5
- package/dist/cli/commands/dogfood.js.map +1 -1
- package/dist/cli/commands/evidencePack.js.map +1 -1
- package/dist/cli/commands/explainIssue.js +1 -1
- package/dist/cli/commands/explainIssue.js.map +1 -1
- package/dist/cli/commands/feedback.js +19 -5
- package/dist/cli/commands/feedback.js.map +1 -1
- package/dist/cli/commands/file.js +1 -1
- package/dist/cli/commands/file.js.map +1 -1
- package/dist/cli/commands/fix.js.map +1 -1
- package/dist/cli/commands/fixSuggest.js +12 -4
- package/dist/cli/commands/fixSuggest.js.map +1 -1
- package/dist/cli/commands/hotspots.js.map +1 -1
- package/dist/cli/commands/impact.js +1 -1
- package/dist/cli/commands/impact.js.map +1 -1
- package/dist/cli/commands/init.js +13 -5
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/installHook.js +2 -2
- package/dist/cli/commands/installHook.js.map +1 -1
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/memory.js +5 -2
- package/dist/cli/commands/memory.js.map +1 -1
- package/dist/cli/commands/mergeRisk.js +1 -1
- package/dist/cli/commands/mergeRisk.js.map +1 -1
- package/dist/cli/commands/missionProof.js +422 -3
- package/dist/cli/commands/missionProof.js.map +1 -1
- package/dist/cli/commands/outdated.js +1 -1
- package/dist/cli/commands/outdated.js.map +1 -1
- package/dist/cli/commands/plugin.js +10 -6
- package/dist/cli/commands/plugin.js.map +1 -1
- package/dist/cli/commands/prDiff.js +1 -1
- package/dist/cli/commands/prDiff.js.map +1 -1
- package/dist/cli/commands/preflight.js +1 -5
- package/dist/cli/commands/preflight.js.map +1 -1
- package/dist/cli/commands/privacyCheck.js +3 -1
- package/dist/cli/commands/privacyCheck.js.map +1 -1
- package/dist/cli/commands/qualityScorecard.js.map +1 -1
- package/dist/cli/commands/recipes.js.map +1 -1
- package/dist/cli/commands/regressionPlan.js.map +1 -1
- package/dist/cli/commands/releaseTrain.js.map +1 -1
- package/dist/cli/commands/review.js +1 -1
- package/dist/cli/commands/review.js.map +1 -1
- package/dist/cli/commands/route.js.map +1 -1
- package/dist/cli/commands/search.js +5 -2
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/semanticGraph.js.map +1 -1
- package/dist/cli/commands/session.js +2 -2
- package/dist/cli/commands/session.js.map +1 -1
- package/dist/cli/commands/start.js +3 -1177
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/startAction.d.ts +36 -0
- package/dist/cli/commands/startAction.js +70 -0
- package/dist/cli/commands/startAction.js.map +1 -0
- package/dist/cli/commands/startConsole.d.ts +7 -0
- package/dist/cli/commands/startConsole.js +309 -0
- package/dist/cli/commands/startConsole.js.map +1 -0
- package/dist/cli/commands/startMissionBundle.d.ts +41 -0
- package/dist/cli/commands/startMissionBundle.js +645 -0
- package/dist/cli/commands/startMissionBundle.js.map +1 -0
- package/dist/cli/commands/startOutput.d.ts +31 -0
- package/dist/cli/commands/startOutput.js +232 -0
- package/dist/cli/commands/startOutput.js.map +1 -0
- package/dist/cli/commands/startShortcuts.d.ts +26 -0
- package/dist/cli/commands/startShortcuts.js +117 -0
- package/dist/cli/commands/startShortcuts.js.map +1 -0
- package/dist/cli/commands/telemetry.js +2 -1
- package/dist/cli/commands/telemetry.js.map +1 -1
- package/dist/cli/commands/trial.js +19 -4
- package/dist/cli/commands/trial.js.map +1 -1
- package/dist/cli/commands/understand.js +3 -1
- package/dist/cli/commands/understand.js.map +1 -1
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/watch.js +1 -1
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/commands/workplan.js.map +1 -1
- package/dist/cli/commands/workspace.js +1 -1
- package/dist/cli/commands/workspace.js.map +1 -1
- package/dist/cli/commands/workspaces.js +1 -1
- package/dist/cli/commands/workspaces.js.map +1 -1
- package/dist/cli/index.js +2 -117
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/registerCommands.d.ts +4 -0
- package/dist/cli/registerCommands.js +125 -0
- package/dist/cli/registerCommands.js.map +1 -0
- package/dist/core/adoption.d.ts +2 -1
- package/dist/core/adoption.js +40 -13
- package/dist/core/adoption.js.map +1 -1
- package/dist/core/agentBrief.js +19 -6
- package/dist/core/agentBrief.js.map +1 -1
- package/dist/core/applyFix.js.map +1 -1
- package/dist/core/ast.js +30 -19
- package/dist/core/ast.js.map +1 -1
- package/dist/core/auditRunner.js.map +1 -1
- package/dist/core/bugHunt.js +119 -17
- package/dist/core/bugHunt.js.map +1 -1
- package/dist/core/claims.js +5 -2
- package/dist/core/claims.js.map +1 -1
- package/dist/core/codeGraph.js +10 -0
- package/dist/core/codeGraph.js.map +1 -1
- package/dist/core/codeGraphReexports.d.ts +9 -0
- package/dist/core/codeGraphReexports.js +59 -0
- package/dist/core/codeGraphReexports.js.map +1 -0
- package/dist/core/collisionDetector.js +14 -4
- package/dist/core/collisionDetector.js.map +1 -1
- package/dist/core/coordination.js +4 -6
- package/dist/core/coordination.js.map +1 -1
- package/dist/core/couplingAnalyzer.d.ts +2 -1
- package/dist/core/couplingAnalyzer.js.map +1 -1
- package/dist/core/coverageParser.js.map +1 -1
- package/dist/core/dataflow.js +11 -2
- package/dist/core/dataflow.js.map +1 -1
- package/dist/core/dataflowFilters.js +8 -3
- package/dist/core/dataflowFilters.js.map +1 -1
- package/dist/core/dependencyAnalyzer.js +4 -1
- package/dist/core/dependencyAnalyzer.js.map +1 -1
- package/dist/core/dogfood.d.ts +1 -1
- package/dist/core/dogfood.js +39 -5
- package/dist/core/dogfood.js.map +1 -1
- package/dist/core/embeddings.js.map +1 -1
- package/dist/core/evidenceComment.js +34 -12
- package/dist/core/evidenceComment.js.map +1 -1
- package/dist/core/explainIssue.js +1 -2
- package/dist/core/explainIssue.js.map +1 -1
- package/dist/core/feedback.d.ts +1 -1
- package/dist/core/feedback.js +15 -4
- package/dist/core/feedback.js.map +1 -1
- package/dist/core/fileInspector.js +8 -2
- package/dist/core/fileInspector.js.map +1 -1
- package/dist/core/fixFirst.d.ts +3 -1
- package/dist/core/fixFirst.js +17 -4
- package/dist/core/fixFirst.js.map +1 -1
- package/dist/core/fixSuggest.js +20 -12
- package/dist/core/fixSuggest.js.map +1 -1
- package/dist/core/frameworkDetector.js +5 -3
- package/dist/core/frameworkDetector.js.map +1 -1
- package/dist/core/frameworkSources.js +22 -2
- package/dist/core/frameworkSources.js.map +1 -1
- package/dist/core/graphCorpus.d.ts +1 -1
- package/dist/core/graphCorpus.js +9 -1
- package/dist/core/graphCorpus.js.map +1 -1
- package/dist/core/graphQuery.js.map +1 -1
- package/dist/core/hotspotAnalyzer.js +26 -6
- package/dist/core/hotspotAnalyzer.js.map +1 -1
- package/dist/core/impact.d.ts +1 -1
- package/dist/core/impact.js.map +1 -1
- package/dist/core/importGraph.js.map +1 -1
- package/dist/core/indexCache.js.map +1 -1
- package/dist/core/intent.d.ts +1 -1
- package/dist/core/intent.js +143 -46
- package/dist/core/intent.js.map +1 -1
- package/dist/core/intentRouter.js +5467 -445
- package/dist/core/intentRouter.js.map +1 -1
- package/dist/core/issueEngine.js +1 -1
- package/dist/core/issueEngine.js.map +1 -1
- package/dist/core/languageDetector.js +1 -9
- package/dist/core/languageDetector.js.map +1 -1
- package/dist/core/languages/cppAdapter.js +3 -1
- package/dist/core/languages/cppAdapter.js.map +1 -1
- package/dist/core/languages/cppExports.js +6 -1
- package/dist/core/languages/cppExports.js.map +1 -1
- package/dist/core/languages/cppFunctions.js +3 -1
- package/dist/core/languages/cppFunctions.js.map +1 -1
- package/dist/core/languages/csharpAdapter.js.map +1 -1
- package/dist/core/languages/csharpFunctions.js +3 -1
- package/dist/core/languages/csharpFunctions.js.map +1 -1
- package/dist/core/languages/csharpImports.js +2 -1
- package/dist/core/languages/csharpImports.js.map +1 -1
- package/dist/core/languages/goAdapter.js.map +1 -1
- package/dist/core/languages/goExports.js.map +1 -1
- package/dist/core/languages/goFunctions.js +9 -3
- package/dist/core/languages/goFunctions.js.map +1 -1
- package/dist/core/languages/javaAdapter.js +1 -2
- package/dist/core/languages/javaAdapter.js.map +1 -1
- package/dist/core/languages/javaFunctions.js +6 -2
- package/dist/core/languages/javaFunctions.js.map +1 -1
- package/dist/core/languages/javascriptAdapter.js +43 -8
- package/dist/core/languages/javascriptAdapter.js.map +1 -1
- package/dist/core/languages/kotlinAdapter.js +5 -2
- package/dist/core/languages/kotlinAdapter.js.map +1 -1
- package/dist/core/languages/kotlinFunctions.js +5 -6
- package/dist/core/languages/kotlinFunctions.js.map +1 -1
- package/dist/core/languages/kotlinImports.js +3 -1
- package/dist/core/languages/kotlinImports.js.map +1 -1
- package/dist/core/languages/kotlinManifests.js +7 -1
- package/dist/core/languages/kotlinManifests.js.map +1 -1
- package/dist/core/languages/phpAdapter.js +4 -1
- package/dist/core/languages/phpAdapter.js.map +1 -1
- package/dist/core/languages/phpExports.js.map +1 -1
- package/dist/core/languages/phpFunctions.js +18 -6
- package/dist/core/languages/phpFunctions.js.map +1 -1
- package/dist/core/languages/phpManifests.js.map +1 -1
- package/dist/core/languages/pythonAdapter.js.map +1 -1
- package/dist/core/languages/pythonFunctions.js +9 -3
- package/dist/core/languages/pythonFunctions.js.map +1 -1
- package/dist/core/languages/pythonManifests.js.map +1 -1
- package/dist/core/languages/rubyAdapter.js.map +1 -1
- package/dist/core/languages/rubyFunctions.js +6 -2
- package/dist/core/languages/rubyFunctions.js.map +1 -1
- package/dist/core/languages/rustAdapter.js.map +1 -1
- package/dist/core/languages/rustFunctions.js +6 -2
- package/dist/core/languages/rustFunctions.js.map +1 -1
- package/dist/core/languages/swiftAdapter.js +3 -1
- package/dist/core/languages/swiftAdapter.js.map +1 -1
- package/dist/core/languages/swiftCyclomatic.js.map +1 -1
- package/dist/core/languages/swiftFunctions.js +3 -1
- package/dist/core/languages/swiftFunctions.js.map +1 -1
- package/dist/core/languages/swiftImports.js.map +1 -1
- package/dist/core/mergeRisk.js +5 -1
- package/dist/core/mergeRisk.js.map +1 -1
- package/dist/core/missionOutcome.d.ts +1 -1
- package/dist/core/missionOutcome.js +9 -4
- package/dist/core/missionOutcome.js.map +1 -1
- package/dist/core/missionProof.d.ts +1 -1
- package/dist/core/missionProof.js +10 -39
- package/dist/core/missionProof.js.map +1 -1
- package/dist/core/missionProofBaseline.d.ts +10 -0
- package/dist/core/missionProofBaseline.js +137 -0
- package/dist/core/missionProofBaseline.js.map +1 -0
- package/dist/core/missionProofMarkdown.d.ts +2 -0
- package/dist/core/missionProofMarkdown.js +83 -0
- package/dist/core/missionProofMarkdown.js.map +1 -0
- package/dist/core/missionProofSummary.d.ts +2 -0
- package/dist/core/missionProofSummary.js +16 -0
- package/dist/core/missionProofSummary.js.map +1 -0
- package/dist/core/monorepo.d.ts +1 -1
- package/dist/core/monorepo.js +4 -2
- package/dist/core/monorepo.js.map +1 -1
- package/dist/core/onboarding.d.ts +2 -1
- package/dist/core/onboarding.js.map +1 -1
- package/dist/core/outdatedDetector.js +5 -1
- package/dist/core/outdatedDetector.js.map +1 -1
- package/dist/core/ownership.js +3 -1
- package/dist/core/ownership.js.map +1 -1
- package/dist/core/pathClassifiers.js.map +1 -1
- package/dist/core/pluginDx.js +2 -1
- package/dist/core/pluginDx.js.map +1 -1
- package/dist/core/pluginTrust.js +1 -3
- package/dist/core/pluginTrust.js.map +1 -1
- package/dist/core/plugins.js +5 -5
- package/dist/core/plugins.js.map +1 -1
- package/dist/core/prDiff.d.ts +1 -2
- package/dist/core/prDiff.js +5 -1
- package/dist/core/prDiff.js.map +1 -1
- package/dist/core/preflight.js +15 -6
- package/dist/core/preflight.js.map +1 -1
- package/dist/core/privacy.js.map +1 -1
- package/dist/core/qualityScorecard.d.ts +1 -1
- package/dist/core/qualityScorecard.js +43 -11
- package/dist/core/qualityScorecard.js.map +1 -1
- package/dist/core/regressionPlan.js +25 -7
- package/dist/core/regressionPlan.js.map +1 -1
- package/dist/core/releaseEvidence.js +41 -17
- package/dist/core/releaseEvidence.js.map +1 -1
- package/dist/core/releaseTrain.js +66 -38
- package/dist/core/releaseTrain.js.map +1 -1
- package/dist/core/repositoryScanner.js +1 -3
- package/dist/core/repositoryScanner.js.map +1 -1
- package/dist/core/review.d.ts +1 -1
- package/dist/core/review.js +72 -10
- package/dist/core/review.js.map +1 -1
- package/dist/core/reviewDataflow.js +7 -1
- package/dist/core/reviewDataflow.js.map +1 -1
- package/dist/core/reviewPublicSurface.d.ts +13 -0
- package/dist/core/reviewPublicSurface.js +134 -0
- package/dist/core/reviewPublicSurface.js.map +1 -0
- package/dist/core/roadmapCatalog.js +122 -23
- package/dist/core/roadmapCatalog.js.map +1 -1
- package/dist/core/searchIndex.js +124 -17
- package/dist/core/searchIndex.js.map +1 -1
- package/dist/core/semanticGraph.js.map +1 -1
- package/dist/core/semanticSearch.js +20 -4
- package/dist/core/semanticSearch.js.map +1 -1
- package/dist/core/session.js +1 -2
- package/dist/core/session.js.map +1 -1
- package/dist/core/sessionResources.js +6 -2
- package/dist/core/sessionResources.js.map +1 -1
- package/dist/core/start.d.ts +3 -9
- package/dist/core/start.js +22 -3231
- package/dist/core/start.js.map +1 -1
- package/dist/core/startAdoptionLoop.d.ts +2 -0
- package/dist/core/startAdoptionLoop.js +41 -0
- package/dist/core/startAdoptionLoop.js.map +1 -0
- package/dist/core/startEvidence.d.ts +5 -0
- package/dist/core/startEvidence.js +62 -0
- package/dist/core/startEvidence.js.map +1 -0
- package/dist/core/startExecutionPlan.d.ts +16 -0
- package/dist/core/startExecutionPlan.js +185 -0
- package/dist/core/startExecutionPlan.js.map +1 -0
- package/dist/core/startHarness.d.ts +3 -0
- package/dist/core/startHarness.js +47 -0
- package/dist/core/startHarness.js.map +1 -0
- package/dist/core/startIntentTargets.d.ts +24 -0
- package/dist/core/startIntentTargets.js +1106 -0
- package/dist/core/startIntentTargets.js.map +1 -0
- package/dist/core/startMissionControl.d.ts +16 -0
- package/dist/core/startMissionControl.js +145 -0
- package/dist/core/startMissionControl.js.map +1 -0
- package/dist/core/startMissionPolicy.d.ts +19 -0
- package/dist/core/startMissionPolicy.js +246 -0
- package/dist/core/startMissionPolicy.js.map +1 -0
- package/dist/core/startMode.d.ts +11 -0
- package/dist/core/startMode.js +139 -0
- package/dist/core/startMode.js.map +1 -0
- package/dist/core/startOptions.d.ts +18 -0
- package/dist/core/startOptions.js +29 -0
- package/dist/core/startOptions.js.map +1 -0
- package/dist/core/startResume.d.ts +7 -0
- package/dist/core/startResume.js +468 -0
- package/dist/core/startResume.js.map +1 -0
- package/dist/core/startReviewGate.d.ts +11 -0
- package/dist/core/startReviewGate.js +200 -0
- package/dist/core/startReviewGate.js.map +1 -0
- package/dist/core/startRouteActions.d.ts +7 -0
- package/dist/core/startRouteActions.js +497 -0
- package/dist/core/startRouteActions.js.map +1 -0
- package/dist/core/startRunbook.d.ts +24 -0
- package/dist/core/startRunbook.js +271 -0
- package/dist/core/startRunbook.js.map +1 -0
- package/dist/core/startSuccessCriteria.d.ts +14 -0
- package/dist/core/startSuccessCriteria.js +497 -0
- package/dist/core/startSuccessCriteria.js.map +1 -0
- package/dist/core/taint.js +12 -3
- package/dist/core/taint.js.map +1 -1
- package/dist/core/telemetry.js +19 -5
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/trial.d.ts +1 -1
- package/dist/core/trial.js +15 -6
- package/dist/core/trial.js.map +1 -1
- package/dist/core/understand.d.ts +1 -1
- package/dist/core/understand.js +165 -51
- package/dist/core/understand.js.map +1 -1
- package/dist/core/upgradePreview.js +1 -1
- package/dist/core/upgradePreview.js.map +1 -1
- package/dist/core/watcher.js +18 -3
- package/dist/core/watcher.js.map +1 -1
- package/dist/core/workplan.js +87 -17
- package/dist/core/workplan.js.map +1 -1
- package/dist/core/workspace.js.map +1 -1
- package/dist/index.d.ts +12 -9
- package/dist/index.js +10 -7
- package/dist/index.js.map +1 -1
- package/dist/mcp/pagination.js.map +1 -1
- package/dist/mcp/prompts.js +28 -20
- package/dist/mcp/prompts.js.map +1 -1
- package/dist/mcp/server.js +6 -74
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/serverPayload.d.ts +13 -0
- package/dist/mcp/serverPayload.js +61 -0
- package/dist/mcp/serverPayload.js.map +1 -0
- package/dist/mcp/tokenBudget.js.map +1 -1
- package/dist/mcp/tools/_shared.js.map +1 -1
- package/dist/mcp/tools/agentBrief.js +7 -1
- package/dist/mcp/tools/agentBrief.js.map +1 -1
- package/dist/mcp/tools/applyFix.js +1 -1
- package/dist/mcp/tools/applyFix.js.map +1 -1
- package/dist/mcp/tools/audit.js.map +1 -1
- package/dist/mcp/tools/bugHunt.js +2 -2
- package/dist/mcp/tools/bugHunt.js.map +1 -1
- package/dist/mcp/tools/claim.js +8 -3
- package/dist/mcp/tools/claim.js.map +1 -1
- package/dist/mcp/tools/collision.js +3 -1
- package/dist/mcp/tools/collision.js.map +1 -1
- package/dist/mcp/tools/coordinate.js.map +1 -1
- package/dist/mcp/tools/coordinateWatch.js +5 -2
- package/dist/mcp/tools/coordinateWatch.js.map +1 -1
- package/dist/mcp/tools/costSummary.js.map +1 -1
- package/dist/mcp/tools/coupling.js.map +1 -1
- package/dist/mcp/tools/coverage.js.map +1 -1
- package/dist/mcp/tools/dataflow.js.map +1 -1
- package/dist/mcp/tools/dependencies.js +4 -1
- package/dist/mcp/tools/dependencies.js.map +1 -1
- package/dist/mcp/tools/doctor.js.map +1 -1
- package/dist/mcp/tools/explainIssue.js +4 -1
- package/dist/mcp/tools/explainIssue.js.map +1 -1
- package/dist/mcp/tools/fixSuggest.js +5 -2
- package/dist/mcp/tools/fixSuggest.js.map +1 -1
- package/dist/mcp/tools/hotspots.js +4 -1
- package/dist/mcp/tools/hotspots.js.map +1 -1
- package/dist/mcp/tools/impact.js +10 -3
- package/dist/mcp/tools/impact.js.map +1 -1
- package/dist/mcp/tools/mergeRisk.js.map +1 -1
- package/dist/mcp/tools/plugin.js +6 -1
- package/dist/mcp/tools/plugin.js.map +1 -1
- package/dist/mcp/tools/prDiff.js.map +1 -1
- package/dist/mcp/tools/preflight.js +1 -5
- package/dist/mcp/tools/preflight.js.map +1 -1
- package/dist/mcp/tools/review.js.map +1 -1
- package/dist/mcp/tools/reviewWatch.d.ts +1 -1
- package/dist/mcp/tools/reviewWatch.js +9 -9
- package/dist/mcp/tools/reviewWatch.js.map +1 -1
- package/dist/mcp/tools/route.js +1 -1
- package/dist/mcp/tools/route.js.map +1 -1
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/mcp/tools/semanticGraph.js +8 -2
- package/dist/mcp/tools/semanticGraph.js.map +1 -1
- package/dist/mcp/tools/start.js.map +1 -1
- package/dist/mcp/tools/structure.js +7 -1
- package/dist/mcp/tools/structure.js.map +1 -1
- package/dist/mcp/tools/understand.js.map +1 -1
- package/dist/mcp/tools/workspaceGraph.js +10 -1
- package/dist/mcp/tools/workspaceGraph.js.map +1 -1
- package/dist/mcp/tools.js +3 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/projscan-sbom.cdx.json +2136 -904
- package/dist/reporters/consoleAnalysisReporter.d.ts +2 -0
- package/dist/reporters/consoleAnalysisReporter.js +89 -0
- package/dist/reporters/consoleAnalysisReporter.js.map +1 -0
- package/dist/reporters/consoleArchitectureReporter.d.ts +3 -0
- package/dist/reporters/consoleArchitectureReporter.js +47 -0
- package/dist/reporters/consoleArchitectureReporter.js.map +1 -0
- package/dist/reporters/consoleAuditReporter.d.ts +2 -0
- package/dist/reporters/consoleAuditReporter.js +46 -0
- package/dist/reporters/consoleAuditReporter.js.map +1 -0
- package/dist/reporters/consoleCiReporter.d.ts +2 -0
- package/dist/reporters/consoleCiReporter.js +27 -0
- package/dist/reporters/consoleCiReporter.js.map +1 -0
- package/dist/reporters/consoleCouplingReporter.d.ts +2 -0
- package/dist/reporters/consoleCouplingReporter.js +53 -0
- package/dist/reporters/consoleCouplingReporter.js.map +1 -0
- package/dist/reporters/consoleCoverageReporter.d.ts +2 -0
- package/dist/reporters/consoleCoverageReporter.js +62 -0
- package/dist/reporters/consoleCoverageReporter.js.map +1 -0
- package/dist/reporters/consoleDependencyReporter.d.ts +2 -0
- package/dist/reporters/consoleDependencyReporter.js +64 -0
- package/dist/reporters/consoleDependencyReporter.js.map +1 -0
- package/dist/reporters/consoleDiffReporter.d.ts +2 -0
- package/dist/reporters/consoleDiffReporter.js +80 -0
- package/dist/reporters/consoleDiffReporter.js.map +1 -0
- package/dist/reporters/consoleExplanationReporter.d.ts +2 -0
- package/dist/reporters/consoleExplanationReporter.js +33 -0
- package/dist/reporters/consoleExplanationReporter.js.map +1 -0
- package/dist/reporters/consoleFileReporter.d.ts +2 -0
- package/dist/reporters/consoleFileReporter.js +133 -0
- package/dist/reporters/consoleFileReporter.js.map +1 -0
- package/dist/reporters/consoleFixGuidanceReporter.d.ts +8 -0
- package/dist/reporters/consoleFixGuidanceReporter.js +135 -0
- package/dist/reporters/consoleFixGuidanceReporter.js.map +1 -0
- package/dist/reporters/consoleHealthReporter.d.ts +13 -0
- package/dist/reporters/consoleHealthReporter.js +111 -0
- package/dist/reporters/consoleHealthReporter.js.map +1 -0
- package/dist/reporters/consoleHotspotReporter.d.ts +2 -0
- package/dist/reporters/consoleHotspotReporter.js +68 -0
- package/dist/reporters/consoleHotspotReporter.js.map +1 -0
- package/dist/reporters/consoleImpactReporter.d.ts +2 -0
- package/dist/reporters/consoleImpactReporter.js +65 -0
- package/dist/reporters/consoleImpactReporter.js.map +1 -0
- package/dist/reporters/consoleOutdatedReporter.d.ts +2 -0
- package/dist/reporters/consoleOutdatedReporter.js +54 -0
- package/dist/reporters/consoleOutdatedReporter.js.map +1 -0
- package/dist/reporters/consolePrDiffReporter.d.ts +2 -0
- package/dist/reporters/consolePrDiffReporter.js +75 -0
- package/dist/reporters/consolePrDiffReporter.js.map +1 -0
- package/dist/reporters/consoleReporter.d.ts +21 -38
- package/dist/reporters/consoleReporter.js +19 -1000
- package/dist/reporters/consoleReporter.js.map +1 -1
- package/dist/reporters/consoleReviewReporter.d.ts +2 -0
- package/dist/reporters/consoleReviewReporter.js +101 -0
- package/dist/reporters/consoleReviewReporter.js.map +1 -0
- package/dist/reporters/consoleUpgradeReporter.d.ts +2 -0
- package/dist/reporters/consoleUpgradeReporter.js +67 -0
- package/dist/reporters/consoleUpgradeReporter.js.map +1 -0
- package/dist/reporters/consoleWorkspaceReporter.d.ts +2 -0
- package/dist/reporters/consoleWorkspaceReporter.js +24 -0
- package/dist/reporters/consoleWorkspaceReporter.js.map +1 -0
- package/dist/reporters/htmlReporter.d.ts +2 -1
- package/dist/reporters/htmlReporter.js +9 -3
- package/dist/reporters/htmlReporter.js.map +1 -1
- package/dist/reporters/jsonReporter.d.ts +2 -1
- package/dist/reporters/jsonReporter.js.map +1 -1
- package/dist/reporters/markdownAnalysisReporter.d.ts +2 -0
- package/dist/reporters/markdownAnalysisReporter.js +40 -0
- package/dist/reporters/markdownAnalysisReporter.js.map +1 -0
- package/dist/reporters/markdownAuditReporter.d.ts +2 -0
- package/dist/reporters/markdownAuditReporter.js +27 -0
- package/dist/reporters/markdownAuditReporter.js.map +1 -0
- package/dist/reporters/markdownDependencyReporter.d.ts +2 -0
- package/dist/reporters/markdownDependencyReporter.js +33 -0
- package/dist/reporters/markdownDependencyReporter.js.map +1 -0
- package/dist/reporters/markdownDiffReporter.d.ts +2 -0
- package/dist/reporters/markdownDiffReporter.js +65 -0
- package/dist/reporters/markdownDiffReporter.js.map +1 -0
- package/dist/reporters/markdownFileReporter.d.ts +2 -0
- package/dist/reporters/markdownFileReporter.js +92 -0
- package/dist/reporters/markdownFileReporter.js.map +1 -0
- package/dist/reporters/markdownFixGuidanceReporter.d.ts +8 -0
- package/dist/reporters/markdownFixGuidanceReporter.js +95 -0
- package/dist/reporters/markdownFixGuidanceReporter.js.map +1 -0
- package/dist/reporters/markdownImpactReporter.d.ts +2 -0
- package/dist/reporters/markdownImpactReporter.js +52 -0
- package/dist/reporters/markdownImpactReporter.js.map +1 -0
- package/dist/reporters/markdownReporter.d.ts +10 -16
- package/dist/reporters/markdownReporter.js +9 -452
- package/dist/reporters/markdownReporter.js.map +1 -1
- package/dist/reporters/markdownReviewReporter.d.ts +2 -0
- package/dist/reporters/markdownReviewReporter.js +84 -0
- package/dist/reporters/markdownReviewReporter.js.map +1 -0
- package/dist/reporters/markdownUpgradeReporter.d.ts +2 -0
- package/dist/reporters/markdownUpgradeReporter.js +47 -0
- package/dist/reporters/markdownUpgradeReporter.js.map +1 -0
- package/dist/reporters/sarifReporter.js.map +1 -1
- package/dist/tool-manifest.json +4 -4
- package/dist/types/agentBrief.d.ts +48 -0
- package/dist/types/agentBrief.js +2 -0
- package/dist/types/agentBrief.js.map +1 -0
- package/dist/types/analysis.d.ts +32 -0
- package/dist/types/analysis.js +2 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/baseline.d.ts +59 -0
- package/dist/types/baseline.js +2 -0
- package/dist/types/baseline.js.map +1 -0
- package/dist/types/bugHunt.d.ts +41 -0
- package/dist/types/bugHunt.js +2 -0
- package/dist/types/bugHunt.js.map +1 -0
- package/dist/types/common.d.ts +34 -0
- package/dist/types/common.js +2 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/config.d.ts +56 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/coupling.d.ts +40 -0
- package/dist/types/coupling.js +2 -0
- package/dist/types/coupling.js.map +1 -0
- package/dist/types/coverage.d.ts +32 -0
- package/dist/types/coverage.js +2 -0
- package/dist/types/coverage.js.map +1 -0
- package/dist/types/dependencyHealth.d.ts +61 -0
- package/dist/types/dependencyHealth.js +2 -0
- package/dist/types/dependencyHealth.js.map +1 -0
- package/dist/types/dogfood.d.ts +185 -0
- package/dist/types/dogfood.js +2 -0
- package/dist/types/dogfood.js.map +1 -0
- package/dist/types/evidencePack.d.ts +76 -0
- package/dist/types/evidencePack.js +2 -0
- package/dist/types/evidencePack.js.map +1 -0
- package/dist/types/fixes.d.ts +77 -0
- package/dist/types/fixes.js +2 -0
- package/dist/types/fixes.js.map +1 -0
- package/dist/types/graph.d.ts +80 -0
- package/dist/types/graph.js +2 -0
- package/dist/types/graph.js.map +1 -0
- package/dist/types/graphCorpus.d.ts +16 -0
- package/dist/types/graphCorpus.js +2 -0
- package/dist/types/graphCorpus.js.map +1 -0
- package/dist/types/hotspots.d.ts +42 -0
- package/dist/types/hotspots.js +2 -0
- package/dist/types/hotspots.js.map +1 -0
- package/dist/types/impact.d.ts +62 -0
- package/dist/types/impact.js +2 -0
- package/dist/types/impact.js.map +1 -0
- package/dist/types/inspection.d.ts +47 -0
- package/dist/types/inspection.js +2 -0
- package/dist/types/inspection.js.map +1 -0
- package/dist/types/mcp.d.ts +39 -0
- package/dist/types/mcp.js +2 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/pluginDx.d.ts +42 -0
- package/dist/types/pluginDx.js +2 -0
- package/dist/types/pluginDx.js.map +1 -0
- package/dist/types/prDiff.d.ts +41 -0
- package/dist/types/prDiff.js +2 -0
- package/dist/types/prDiff.js.map +1 -0
- package/dist/types/preflight.d.ts +122 -0
- package/dist/types/preflight.js +2 -0
- package/dist/types/preflight.js.map +1 -0
- package/dist/types/qualityScorecard.d.ts +34 -0
- package/dist/types/qualityScorecard.js +2 -0
- package/dist/types/qualityScorecard.js.map +1 -0
- package/dist/types/regressionPlan.d.ts +32 -0
- package/dist/types/regressionPlan.js +2 -0
- package/dist/types/regressionPlan.js.map +1 -0
- package/dist/types/releaseTrain.d.ts +37 -0
- package/dist/types/releaseTrain.js +2 -0
- package/dist/types/releaseTrain.js.map +1 -0
- package/dist/types/review.d.ts +203 -0
- package/dist/types/review.js +2 -0
- package/dist/types/review.js.map +1 -0
- package/dist/types/reviewContract.d.ts +9 -0
- package/dist/types/reviewContract.js +2 -0
- package/dist/types/reviewContract.js.map +1 -0
- package/dist/types/scanning.d.ts +111 -0
- package/dist/types/scanning.js +2 -0
- package/dist/types/scanning.js.map +1 -0
- package/dist/types/session.d.ts +42 -0
- package/dist/types/session.js +2 -0
- package/dist/types/session.js.map +1 -0
- package/dist/types/start.d.ts +437 -0
- package/dist/types/start.js +2 -0
- package/dist/types/start.js.map +1 -0
- package/dist/types/trial.d.ts +27 -0
- package/dist/types/trial.js +2 -0
- package/dist/types/trial.js.map +1 -0
- package/dist/types/understand.d.ts +153 -0
- package/dist/types/understand.js +2 -0
- package/dist/types/understand.js.map +1 -0
- package/dist/types/workplan.d.ts +67 -0
- package/dist/types/workplan.js +2 -0
- package/dist/types/workplan.js.map +1 -0
- package/dist/types/workplanHandoff.d.ts +11 -0
- package/dist/types/workplanHandoff.js +2 -0
- package/dist/types/workplanHandoff.js.map +1 -0
- package/dist/types/workspace.d.ts +18 -0
- package/dist/types/workspace.js +2 -0
- package/dist/types/workspace.js.map +1 -0
- package/dist/types.d.ts +34 -2348
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/banner.js +15 -6
- package/dist/utils/banner.js.map +1 -1
- package/dist/utils/baseline.js +11 -9
- package/dist/utils/baseline.js.map +1 -1
- package/dist/utils/changedFiles.js +1 -1
- package/dist/utils/changedFiles.js.map +1 -1
- package/dist/utils/config.d.ts +2 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/formatSupport.d.ts +2 -2
- package/dist/utils/formatSupport.js +8 -2
- package/dist/utils/formatSupport.js.map +1 -1
- package/dist/utils/packageJsonLocator.js.map +1 -1
- package/docs/GUIDE.md +209 -147
- package/docs/PLUGIN-GALLERY.md +9 -1
- package/docs/ROADMAP.md +69 -68
- package/docs/demos/projscan-4-1-demo.html +46 -79
- package/docs/demos/projscan-mission-control.tape +13 -0
- package/docs/demos/projscan-mission-proof.tape +25 -0
- package/docs/examples/plugins/graph-context.mjs +1 -2
- package/docs/examples/plugins/security-sensitive-files.mjs +2 -1
- package/docs/projscan-mission-control.gif +0 -0
- package/docs/projscan-mission-proof.gif +0 -0
- package/package.json +17 -5
- package/scripts/capture-vhs-demos.mjs +80 -0
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
## Why?
|
|
21
21
|
|
|
22
|
-
AI coding agents are becoming the primary interface to code. When you ask an agent
|
|
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
24
|
**projscan is code intelligence built for agents.** MCP clients get a fast, AST-backed, context-budget-aware view of your codebase: cited repo understanding, 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
|
|
|
@@ -33,23 +33,29 @@ The local plugin platform lets teams add project-specific findings and render `d
|
|
|
33
33
|
npx projscan
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
<img src="
|
|
36
|
+
<img src="docs/projscan-mission-control.gif" alt="projscan Mission Control turning a plain-language goal into shortcut commands, proof commands, and review gates" width="760">
|
|
37
37
|
|
|
38
|
-
## What's New in 4.
|
|
38
|
+
## What's New in 4.4.0
|
|
39
39
|
|
|
40
|
-
4.
|
|
40
|
+
4.4.0 turns the Mission Control loop into a release-ready agent harness. Agents get repo-local AgentLoopKit task contracts, AgentFlight verification, explicit personas for decisions, clearer release sign-off queues, and tighter public-surface checks.
|
|
41
41
|
|
|
42
|
-
- **
|
|
43
|
-
- **
|
|
44
|
-
- **
|
|
45
|
-
- **
|
|
42
|
+
- **Agent harness proof.** `projscan start` now surfaces `npm exec agentloop -- status` and `npm exec agentflight -- verify` when this repo's harness files exist, so handoffs include the local task and verification loop without executing it.
|
|
43
|
+
- **Release-owner bug pass.** `projscan bug-hunt`, release-train, evidence-pack, and review wording now distinguish concrete fix targets from manual release sign-off actions, with review-useful files ranked first.
|
|
44
|
+
- **Product planning routes.** Broad prompts like `what should we build next?` and `what should we improve next?` now route to bug-hunt/action planning instead of generic orientation.
|
|
45
|
+
- **Public surface discipline.** Public type contracts move into focused modules with dedicated typecheck coverage, while review contract detection follows package entrypoints and re-exports instead of treating internal helper exports as public API.
|
|
46
|
+
- **Audit-clean dev chain.** The release gate now clears npm audit after moving the dev test infrastructure to Vite 8 and refreshing protobuf transitive packages.
|
|
47
|
+
- **Persona-backed decisions.** `docs/PERSONAS.md` records the team and user personas used for agent prioritization, review safety, and adoption tradeoffs.
|
|
46
48
|
|
|
47
49
|
<img src="docs/projscan-proof-router.png" alt="projscan intent router and proof workflow showing impact routing, setup discovery, dependency intelligence, and stable-surface guardrails" width="760">
|
|
48
50
|
|
|
49
|
-
|
|
51
|
+
<img src="docs/projscan-mission-proof.gif" alt="projscan saving a Mission Control bundle, reporting local mission proof, and resuming from saved proof state" width="760">
|
|
52
|
+
|
|
53
|
+
Regenerate the README media with Playwright and VHS:
|
|
50
54
|
|
|
51
55
|
```bash
|
|
56
|
+
npm run docs:assets
|
|
52
57
|
npm run docs:screenshots
|
|
58
|
+
npm run docs:demos
|
|
53
59
|
```
|
|
54
60
|
|
|
55
61
|
## Mission Execution Plan + Copyable Handoffs
|
|
@@ -58,6 +64,8 @@ npm run docs:screenshots
|
|
|
58
64
|
|
|
59
65
|
Projscan also returns a Markdown runbook, a task card, a review gate, and a resume object. A resumed agent gets the current command, the MCP tool call, placeholder bindings, follow-up templates, the ordered checklist, and the remaining proof queue without walking the full plan. MCP and JSON clients can read `missionControl.taskCard.markdown`, the same Markdown printed by `--task-card` and written to `task-card.md`. They can also read `missionControl.reviewGate.markdown` to know when to stop, report proof, and wait for approval before starting another slice, release, publish, or deploy. `missionControl.reviewGate.worktree` adds the current worktree evidence summary and visible changed files, so review handoffs keep the state projscan computed for the start report. `missionControl.reviewGate.proof` carries the remaining proof queue with commands, MCP calls, and structured proof items for review-only handoffs. `missionControl.reviewGate.doneWhen` mirrors the mission success criteria, so review-only handoffs show the approval target beside proof and worktree evidence. `missionControl.reviewGate.policy` lists the actions blocked until explicit reviewer approval: another slice, release, publish, deploy, push, merge, and version bump. `--review-gate-json` and saved `review-gate.json` expose the full review packet without requiring callers to parse the full handoff. `--review-policy` and saved `review-policy.json` expose only the approval boundary. `missionControl.reviewGate.decisions` gives the reviewer the allowed next choices and copyable reply text: approve another slice, request changes, or review a version candidate without publishing; the same menu appears in default console output, saved bundle README files, task cards, handoff prompts, and runbook Markdown. `--review-replies` and saved `review-replies.txt` print only those reply lines when a reviewer wants the smallest approval surface. The complete handoff object carries the same gate at `missionControl.handoff.reviewGate`, so `--handoff-json` and saved `handoff.json` include the stop boundary.
|
|
60
66
|
|
|
67
|
+
Repo-local agent harnesses are surfaced in the same proof queue. When `AGENTLOOP.md` or `agentloop.config.json` exists, `projscan start` adds `npm exec agentloop -- status` as a coordination/proof command; when `.agentflight/config.json` exists, it adds `npm exec agentflight -- verify`. These commands are reported for copy/paste, saved mission bundles, and JSON clients; `projscan start` does not execute them.
|
|
68
|
+
|
|
61
69
|
Use the index when you want the menu, or call one shortcut directly:
|
|
62
70
|
|
|
63
71
|
```bash
|
|
@@ -80,7 +88,18 @@ projscan start --review-replies --intent "<goal>" # Copy-only reviewer replies
|
|
|
80
88
|
projscan start --runbook --intent "<goal>" # Markdown mission runbook
|
|
81
89
|
projscan start --handoff-prompt --intent "<goal>" # One-line handoff prompt
|
|
82
90
|
projscan start --mission .projscan/mission # Resume from saved proof state
|
|
83
|
-
projscan mission-proof --mission .projscan/mission --format
|
|
91
|
+
projscan mission-proof --mission .projscan/mission --format markdown # Paste-ready proof report
|
|
92
|
+
projscan mission-proof --list --format json # List saved mission bundles
|
|
93
|
+
projscan mission-proof --list --needs-attention --format json # List bundles that are not passed
|
|
94
|
+
projscan mission-proof --latest --format markdown # Report the newest saved mission bundle
|
|
95
|
+
projscan mission-proof --all --format markdown # Roll up local saved mission bundles
|
|
96
|
+
projscan mission-proof --all --require-passed # Fail if any selected bundle is not passed
|
|
97
|
+
projscan mission-proof --all --summary # One-line proof status for CI logs
|
|
98
|
+
projscan mission-proof --mission .projscan/mission --format json # Local proof summary for scripts
|
|
99
|
+
projscan mission-proof --init-baseline manual-runs.json # Create baseline template
|
|
100
|
+
projscan mission-proof --add-baseline-run manual-runs.json --id manual-1 --status passed --minutes-spent 25 # Record manual run
|
|
101
|
+
projscan mission-proof --check-baseline manual-runs.json # Validate baseline file
|
|
102
|
+
projscan mission-proof --mission .projscan/mission --write reports/mission-proof.md # Save a proof artifact
|
|
84
103
|
```
|
|
85
104
|
|
|
86
105
|
Saved mission bundles include `README.md`, `next-command.txt`, `next-tool-call.json`, `handoff-prompt.txt`, `resume-prompt.txt`, `task-card.md`, `review-gate.md`, `review-gate.json`, `review-policy.json`, `review-replies.txt`, the Markdown runbook, structured handoff/resume JSON, `ready-tool-calls.json`, `shortcuts.json`, `mission.sh`, `status.sh`, `review.sh`, `proof-logs/README.md`, `proof-logs/status.jsonl`, `proof-logs/run-report.md`, `proof-logs/summary.json`, proof commands, and a manifest. The saved bundle README starts with quick commands for `./mission.sh`, `./status.sh`, and `./review.sh`; `manifest.json` exposes the same quick commands under `quickCommands` for agents and JSON clients. Running saved `mission.sh` writes current and proof command output under `proof-logs/`, appends exit codes to `status.jsonl`, refreshes `run-report.md` for review, and writes the latest run state plus next action to `summary.json` for agents. Run `./status.sh` from the bundle to print the latest mission state and next action; it exits `0` for passed, `1` for failed, and `2` for not-run or running states. Run `./review.sh` from the bundle to print the status, review gate, run report, evidence command checklist, and reviewer replies in one terminal view.
|
|
@@ -94,10 +113,27 @@ projscan start --mission .projscan/mission
|
|
|
94
113
|
`projscan start` reads `proof-logs/summary.json`, `proof-logs/status.jsonl`, and local review decision files. The report tells the next agent what changed, what remains, which command failed if proof did not pass, and whether the bundle is ready for a version-candidate review. For a local measurement report, run:
|
|
95
114
|
|
|
96
115
|
```bash
|
|
116
|
+
projscan mission-proof --mission .projscan/mission --format markdown
|
|
117
|
+
projscan mission-proof --list --format json
|
|
118
|
+
projscan mission-proof --list --needs-attention --format json
|
|
119
|
+
projscan mission-proof --list --mission-status failed --format json
|
|
120
|
+
projscan mission-proof --latest --format markdown
|
|
121
|
+
projscan mission-proof --all --format markdown
|
|
122
|
+
projscan mission-proof --all --require-passed
|
|
123
|
+
projscan mission-proof --all --summary --require-passed
|
|
124
|
+
projscan mission-proof --all --write reports/mission-proof.md
|
|
125
|
+
projscan mission-proof --mission .projscan/mission --write reports/mission-proof.md
|
|
126
|
+
projscan mission-proof --init-baseline manual-runs.json
|
|
127
|
+
projscan mission-proof --init-baseline manual-runs.json --format json
|
|
128
|
+
projscan mission-proof --add-baseline-run manual-runs.json --id manual-1 --status passed --minutes-spent 25 --reruns 1 --failed-gates 0 --reviewer-approvals 1
|
|
129
|
+
projscan mission-proof --add-baseline-run manual-runs.json --id manual-2 --status failed --format json
|
|
130
|
+
projscan mission-proof --check-baseline manual-runs.json
|
|
131
|
+
projscan mission-proof --check-baseline manual-runs.json --format json
|
|
97
132
|
projscan mission-proof --mission .projscan/mission --baseline manual-runs.json --format json
|
|
133
|
+
projscan mission-proof --mission .projscan/mission --baseline manual-runs.json --format json --write reports/mission-proof.json
|
|
98
134
|
```
|
|
99
135
|
|
|
100
|
-
The baseline file is optional. When present, it can list manual runs with minutes spent, reruns, failed gates, and reviewer approvals; projscan compares that local baseline with Mission Control proof without uploading source.
|
|
136
|
+
The Markdown report is ready for PR notes, release review, and handoff docs. Add `--list` to show saved mission bundles, status, update time, totals, and copyable resume/proof commands before choosing a target. Add `--needs-attention` or `--mission-status failed` to focus that list. Add `--latest` to select the saved mission bundle with the newest `proof-logs/summary.json`. Add `--all` to discover `.projscan/mission` plus direct child bundles under `.projscan/missions/`. Add `--summary` when terminal logs need one status line. Add `--require-passed` when a local script or CI job should exit nonzero unless every selected bundle passed. Add `--write reports/mission-proof.md` to save the report as a local artifact; `.md` and `.markdown` paths write Markdown by default. Use JSON when agents or scripts need the same proof data, and add `--write reports/mission-proof.json` when CI should archive it. Run `--init-baseline manual-runs.json` to create the local baseline template, then use `--add-baseline-run` to record measured manual runs without editing JSON. Add `--format json` to baseline init, append, or check commands when a wrapper needs the written path, run count, added run, or totals. If `--baseline` or `--check-baseline` points at a missing or malformed file, projscan prints the exact template command or expected JSON shape. Baseline run IDs must be non-empty and unique. Baseline run statuses must be `passed`, `failed`, `running`, `not_run`, or `unknown`; metric fields must be non-negative numbers. The baseline file is optional. When present, it can list manual runs with minutes spent, reruns, failed gates, and reviewer approvals; projscan compares that local baseline with Mission Control proof without uploading source.
|
|
101
137
|
|
|
102
138
|
Default console output shows the same sections inline: `Run Cursor`, `Resume Checklist`, `Handoff Prompt`, `Ready Proof`, and `Proof Queue`. The proof views use the resume-aware remaining queue, so projscan does not repeat the current cursor command as proof.
|
|
103
139
|
|
|
@@ -136,7 +172,7 @@ Proof Queue
|
|
|
136
172
|
|
|
137
173
|
Runbook handoff example:
|
|
138
174
|
|
|
139
|
-
|
|
175
|
+
````text
|
|
140
176
|
Agent Runbook
|
|
141
177
|
# Mission Runbook
|
|
142
178
|
Intent: what breaks if I rename the auth token loader
|
|
@@ -153,37 +189,41 @@ Current phase: ready_now
|
|
|
153
189
|
Run now:
|
|
154
190
|
```sh
|
|
155
191
|
projscan search "auth token loader" --format json
|
|
156
|
-
|
|
192
|
+
````
|
|
193
|
+
|
|
157
194
|
MCP call: projscan_search {"query":"auth token loader"}
|
|
158
195
|
After running, resolve:
|
|
196
|
+
|
|
159
197
|
- input-1 (symbol): Replace <symbol-from-search> with an exported symbol returned by the search step.
|
|
160
198
|
- input-2 (file): Replace <file-from-search> with a file path returned by the search step.
|
|
161
|
-
Template inputs:
|
|
199
|
+
Template inputs:
|
|
162
200
|
- <symbol-from-search> -> input-1 (symbol): Replace <symbol-from-search> with an exported symbol returned by the search step.
|
|
163
201
|
- <file-from-search> -> input-2 (file): Replace <file-from-search> with a file path returned by the search step.
|
|
164
|
-
Resume checklist:
|
|
202
|
+
Resume checklist:
|
|
165
203
|
- [ready] run_current ready-1: projscan search "auth token loader" --format json (MCP: projscan_search {"query":"auth token loader"})
|
|
166
204
|
- [blocked] resolve_input input-1: <symbol-from-search> -> Replace <symbol-from-search> with an exported symbol returned by the search step.
|
|
167
205
|
- [ready] run_proof proof-2: projscan preflight --mode before_edit --format json (MCP: projscan_preflight {"mode":"before_edit"})
|
|
168
206
|
- [pending] confirm_done criterion-1: An exact symbol or file path is selected from search results before impact analysis continues.
|
|
169
|
-
Proof queue:
|
|
207
|
+
Proof queue:
|
|
170
208
|
- proof-2: `projscan preflight --mode before_edit --format json` (MCP: projscan_preflight {"mode":"before_edit"})
|
|
171
209
|
- proof-3: `projscan understand --view verify --format json` (MCP: projscan_understand {"view":"verify"})
|
|
172
|
-
Remaining proof:
|
|
210
|
+
Remaining proof:
|
|
173
211
|
- `projscan preflight --mode before_edit --format json`
|
|
174
212
|
- `projscan understand --view verify --format json`
|
|
175
|
-
MCP proof calls:
|
|
213
|
+
MCP proof calls:
|
|
176
214
|
- proof-2: projscan_preflight {"mode":"before_edit"}
|
|
177
215
|
- proof-3: projscan_understand {"view":"verify"}
|
|
178
|
-
Then use:
|
|
216
|
+
Then use:
|
|
179
217
|
- follow-up-1 (If search returns an exported symbol): projscan impact --symbol <symbol-from-search> --format json
|
|
180
218
|
- follow-up-2 (If search returns a file path): projscan impact <file-from-search> --format json
|
|
181
|
-
Prompt: Resume at ready-1 in ready_now: run `projscan search "auth token loader" --format json`. This can unlock input-1 (symbol), input-2 (file).
|
|
219
|
+
Prompt: Resume at ready-1 in ready_now: run `projscan search "auth token loader" --format json`. This can unlock input-1 (symbol), input-2 (file).
|
|
182
220
|
|
|
183
221
|
## Handoff Prompt
|
|
222
|
+
|
|
184
223
|
Resume: Resume at ready-1 in ready_now: run `projscan search "auth token loader" --format json`. This can unlock input-1 (symbol), input-2 (file). Done when: An exact symbol or file path is selected from search results before impact analysis continues. Needs input: symbol=<symbol-from-search>, file=<file-from-search>. Ready proof: Ready-to-run proof commands; placeholder follow-ups are excluded until Needs Input is resolved. projscan preflight --mode before_edit --format json && projscan understand --view verify --format json.
|
|
185
224
|
|
|
186
225
|
## Review Gate
|
|
226
|
+
|
|
187
227
|
- [ ] Complete this task card and remaining proof.
|
|
188
228
|
- [ ] Capture `git status --short`.
|
|
189
229
|
- [ ] Capture `git diff --stat`.
|
|
@@ -192,19 +232,22 @@ Resume: Resume at ready-1 in ready_now: run `projscan search "auth token loader"
|
|
|
192
232
|
Review the completed mission, proof output, and working-tree summary before approving another slice, release, publish, or deploy.
|
|
193
233
|
|
|
194
234
|
## Ready Commands
|
|
235
|
+
|
|
195
236
|
- `projscan search "auth token loader" --format json`
|
|
196
237
|
|
|
197
238
|
## Blocked Inputs
|
|
239
|
+
|
|
198
240
|
- symbol: Replace <symbol-from-search> with an exported symbol returned by the search step.
|
|
199
|
-
|
|
241
|
+
|
|
242
|
+
````
|
|
200
243
|
|
|
201
244
|
Run `projscan doctor` for a focused health check:
|
|
202
245
|
|
|
203
246
|
```bash
|
|
204
247
|
npx projscan doctor
|
|
205
|
-
|
|
248
|
+
````
|
|
206
249
|
|
|
207
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.
|
|
250
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20doctor.gif" alt="npx projscan doctor" width="700">
|
|
208
251
|
|
|
209
252
|
## Install
|
|
210
253
|
|
|
@@ -444,6 +487,7 @@ projscan start --intent "what should an intern work on?" # Routes to bug-hunt pr
|
|
|
444
487
|
projscan start --intent "what is a low risk improvement?" # Routes to bug-hunt prioritization
|
|
445
488
|
projscan start --intent "pick a small safe task" # Routes to bug-hunt prioritization
|
|
446
489
|
projscan start --intent "what should I do next?" # Routes to an ordered before-edit workplan
|
|
490
|
+
projscan start --intent "what should we build next?" # Routes to a bug-hunt product-planning workplan
|
|
447
491
|
projscan start --intent "explain issue missing-test-framework" # Routes to deep issue context
|
|
448
492
|
projscan start --intent "fix issue missing-test-framework" # Routes to a concrete fix suggestion
|
|
449
493
|
projscan start --intent "is user input reaching SQL sinks?" # Routes to hardening dataflow analysis
|
|
@@ -537,9 +581,9 @@ npm run test:trust-smoke
|
|
|
537
581
|
|
|
538
582
|
The full command catalog is below. Most users should start with the five-command path above instead of scanning the catalog.
|
|
539
583
|
|
|
540
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.
|
|
584
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20--help.gif" alt="npx projscan --help" width="700">
|
|
541
585
|
|
|
542
|
-
For a comprehensive walkthrough, see the **[Full Guide](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.
|
|
586
|
+
For a comprehensive walkthrough, see the **[Full Guide](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/GUIDE.md)**.
|
|
543
587
|
|
|
544
588
|
## Repo Understanding
|
|
545
589
|
|
|
@@ -557,58 +601,58 @@ The report includes file/symbol-backed `claims`, `readFirst` files, entrypoints,
|
|
|
557
601
|
|
|
558
602
|
## Commands
|
|
559
603
|
|
|
560
|
-
| Command
|
|
561
|
-
|
|
562
|
-
| `projscan analyze`
|
|
563
|
-
| `projscan route`
|
|
564
|
-
| `projscan start`
|
|
565
|
-
| `projscan mission-proof`
|
|
566
|
-
| `projscan first-run`
|
|
567
|
-
| `projscan init mcp`
|
|
568
|
-
| `projscan mcp doctor`
|
|
569
|
-
| `projscan init policy`
|
|
570
|
-
| `projscan init team`
|
|
571
|
-
| `projscan init github-action` | GitHub Actions PR workflow that validates and posts projscan evidence comments, then fails only on preflight blocks
|
|
572
|
-
| `projscan recipes`
|
|
573
|
-
| `projscan workplan`
|
|
574
|
-
| `projscan bug-hunt`
|
|
575
|
-
| `projscan agent-brief`
|
|
576
|
-
| `projscan quality-scorecard`
|
|
577
|
-
| `projscan understand`
|
|
578
|
-
| `projscan release-train`
|
|
579
|
-
| `projscan evidence-pack`
|
|
580
|
-
| `projscan trial`
|
|
581
|
-
| `projscan feedback`
|
|
582
|
-
| `projscan privacy-check`
|
|
583
|
-
| `projscan telemetry`
|
|
584
|
-
| `projscan dogfood`
|
|
585
|
-
| `projscan regression-plan`
|
|
586
|
-
| `projscan handoff`
|
|
587
|
-
| `projscan doctor`
|
|
588
|
-
| `projscan preflight`
|
|
589
|
-
| `projscan hotspots`
|
|
590
|
-
| `projscan semantic-graph`
|
|
591
|
-
| `projscan dataflow`
|
|
592
|
-
| `projscan search <query>`
|
|
593
|
-
| `projscan file <path>`
|
|
594
|
-
| `projscan fix`
|
|
595
|
-
| `projscan ci`
|
|
596
|
-
| `projscan diff`
|
|
597
|
-
| `projscan diagram`
|
|
598
|
-
| `projscan structure`
|
|
599
|
-
| `projscan dependencies`
|
|
600
|
-
| `projscan outdated`
|
|
601
|
-
| `projscan audit`
|
|
602
|
-
| `projscan upgrade <pkg>`
|
|
603
|
-
| `projscan coverage`
|
|
604
|
-
| `projscan badge`
|
|
605
|
-
| `projscan init`
|
|
606
|
-
| `projscan install-hook`
|
|
607
|
-
| `projscan workspace`
|
|
608
|
-
| `projscan apply-fix <id>`
|
|
609
|
-
| `projscan taint`
|
|
610
|
-
| `projscan plugin`
|
|
611
|
-
| `projscan mcp`
|
|
604
|
+
| Command | Description |
|
|
605
|
+
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
606
|
+
| `projscan analyze` | Full analysis - languages, frameworks, dependencies, issues |
|
|
607
|
+
| `projscan route` | Map a plain-language goal to the best projscan tool with weighted confidence and matched keywords |
|
|
608
|
+
| `projscan start` | First-60-seconds workflow orientation with setup diagnostics, Mission Control, top risks, and next commands. Add `--intent "<goal>"` to route a plain-language goal to route confidence, phased execution plan, ready actions, done criteria, and proof commands |
|
|
609
|
+
| `projscan mission-proof` | Summarize saved Mission Control proof, reviewer decisions, reruns, failed gates, and optional manual-baseline comparison |
|
|
610
|
+
| `projscan first-run` | First-run setup diagnostics plus the shared `firstTenMinutes` command path |
|
|
611
|
+
| `projscan init mcp` | Ready-to-paste MCP client configs for popular agent clients |
|
|
612
|
+
| `projscan mcp doctor` | Verify MCP setup and print paste-ready client config with checks |
|
|
613
|
+
| `projscan init policy` | Team policy starter kits for frontend, platform, security, and monorepo teams |
|
|
614
|
+
| `projscan init team` | Bootstrap policy, PR workflow, CODEOWNERS starter, baseline memory, start report, and first-PR onboarding checklist |
|
|
615
|
+
| `projscan init github-action` | GitHub Actions PR workflow that validates and posts projscan evidence comments, then fails only on preflight blocks |
|
|
616
|
+
| `projscan recipes` | Agent workflow recipes for team bootstrap, PR automation, before edit, bug hunt, approval, handoff, and pre-merge |
|
|
617
|
+
| `projscan workplan` | Agent execution plan - prioritized tasks with evidence, tools, verification, and handoff text |
|
|
618
|
+
| `projscan bug-hunt` | Prioritized bug-hunt action queue from doctor, preflight, and session evidence, with hotspot-only churn kept as a watchlist signal |
|
|
619
|
+
| `projscan agent-brief` | Compact next-agent context packet with focus items, coordination hints, guardrails, repo context, and next actions |
|
|
620
|
+
| `projscan quality-scorecard` | Dimensioned quality view with health, security, tests, maintainability, coordination, and top risks |
|
|
621
|
+
| `projscan understand` | Cited repo map, runtime flows, public contracts, change readiness, verification tiers, unknowns, and next commands |
|
|
622
|
+
| `projscan release-train` | Plan upcoming product lines with readiness evidence |
|
|
623
|
+
| `projscan evidence-pack` | Assemble approval evidence from planning, bug-hunt, workplan, preflight, trust calibration, First Fix, owner routing, and baseline trend memory |
|
|
624
|
+
| `projscan trial` | Produce one adoption-readiness report from onboarding, dogfood, feedback, trust signals, and website proof |
|
|
625
|
+
| `projscan feedback` | Capture measured reviewer feedback: minutes saved, prevented bad edits, false positives, and repeat PR use |
|
|
626
|
+
| `projscan privacy-check` | Verify the local trust boundary: telemetry, offline mode, scan root, .gitignore handling, ignored-file count, .env content scanning, and network-capable endpoints |
|
|
627
|
+
| `projscan telemetry` | Explicit default-off telemetry controls: status, enable, disable, and explain |
|
|
628
|
+
| `projscan dogfood` | Evaluate 1+ real repos for PR-comment readiness, repeat-use readiness, MCP readiness, and reviewer feedback prompts |
|
|
629
|
+
| `projscan regression-plan` | Build a smoke, focused, or full regression matrix from product risk signals |
|
|
630
|
+
| `projscan handoff` | Concise next-agent handoff from the current workplan |
|
|
631
|
+
| `projscan doctor` | Health check - missing tooling, architecture smells, security and supply-chain risks |
|
|
632
|
+
| `projscan preflight` | Agent safety gate - `proceed`, `caution`, or `block` with health, change, plugin, and supply-chain evidence |
|
|
633
|
+
| `projscan hotspots` | Rank files by risk - churn × complexity × issues × ownership |
|
|
634
|
+
| `projscan semantic-graph` | Stable v3 graph contract, plus targeted `--query importers/imports/exports/...` lookups |
|
|
635
|
+
| `projscan dataflow` | Focused direct, propagated, and bridge source-to-sink dataflow risks |
|
|
636
|
+
| `projscan search <query>` | **BM25-ranked search** - content + symbols + path, with excerpts |
|
|
637
|
+
| `projscan file <path>` | Drill into a file - purpose, risk, ownership, related issues |
|
|
638
|
+
| `projscan fix` | Auto-fix issues (ESLint, Prettier, Vitest, .editorconfig) |
|
|
639
|
+
| `projscan ci` | CI health gate - SARIF output, `--changed-only` PR-diff mode, exits 1 if score below threshold |
|
|
640
|
+
| `projscan diff` | Compare current health **and hotspot trends** against a baseline |
|
|
641
|
+
| `projscan diagram` | ASCII architecture diagram of your project |
|
|
642
|
+
| `projscan structure` | Directory tree with file counts |
|
|
643
|
+
| `projscan dependencies` | Dependency analysis - counts, license summary, risks, recommendations |
|
|
644
|
+
| `projscan outdated` | Declared-vs-installed drift check (offline) |
|
|
645
|
+
| `projscan audit` | `npm audit`-powered vulnerability report - SARIF-ready for Code Scanning |
|
|
646
|
+
| `projscan upgrade <pkg>` | Preview upgrade impact - local CHANGELOG + importer list, offline |
|
|
647
|
+
| `projscan coverage` | **Coverage × hotspots - rank the scariest untested files** (`--changed-only` for diff mode) |
|
|
648
|
+
| `projscan badge` | Generate a health score badge for your README |
|
|
649
|
+
| `projscan init` | _(1.6)_ Scaffold `.projscanrc.json` with sensible defaults |
|
|
650
|
+
| `projscan install-hook` | _(1.6)_ Install a `pre-commit` hook running `projscan ci --changed-only` |
|
|
651
|
+
| `projscan workspace` | _(1.6)_ Register sibling repos for cross-repo intelligence (`add` / `list` / `remove`) |
|
|
652
|
+
| `projscan apply-fix <id>` | _(1.6)_ Mechanically execute the safe fix templates with rollback (default dry-run) |
|
|
653
|
+
| `projscan taint` | _(1.6)_ Source-to-sink reachability over the call graph |
|
|
654
|
+
| `projscan plugin` | Discover, scaffold, validate, and test local analyzer/reporter plugins |
|
|
655
|
+
| `projscan mcp` | Run as an MCP server for AI coding agents (Claude Code, Codex, Cursor, Gemini, Windsurf, …) |
|
|
612
656
|
|
|
613
657
|
To see all commands and options, run:
|
|
614
658
|
|
|
@@ -621,25 +665,25 @@ projscan --help
|
|
|
621
665
|
<details>
|
|
622
666
|
<summary><strong>projscan structure</strong> - Directory tree with file counts</summary>
|
|
623
667
|
|
|
624
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.
|
|
668
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20structure.gif" alt="npx projscan structure" width="700">
|
|
625
669
|
</details>
|
|
626
670
|
|
|
627
671
|
<details>
|
|
628
672
|
<summary><strong>projscan diagram</strong> - Architecture visualization</summary>
|
|
629
673
|
|
|
630
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.
|
|
674
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20diagram.gif" alt="npx projscan diagram" width="700">
|
|
631
675
|
</details>
|
|
632
676
|
|
|
633
677
|
<details>
|
|
634
678
|
<summary><strong>projscan dependencies</strong> - Dependency analysis</summary>
|
|
635
679
|
|
|
636
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.
|
|
680
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20dependencies.gif" alt="npx projscan dependencies" width="700">
|
|
637
681
|
</details>
|
|
638
682
|
|
|
639
683
|
<details>
|
|
640
684
|
<summary><strong>projscan badge</strong> - Health badge generation</summary>
|
|
641
685
|
|
|
642
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.
|
|
686
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20badge.gif" alt="npx projscan badge" width="700">
|
|
643
687
|
</details>
|
|
644
688
|
|
|
645
689
|
### Output Formats
|
|
@@ -650,6 +694,8 @@ Commands accept `--format` for different output targets. Supported formats are c
|
|
|
650
694
|
projscan analyze --format json # Machine-readable JSON
|
|
651
695
|
projscan analyze --format html # Self-contained HTML report
|
|
652
696
|
projscan doctor --format markdown # Markdown for docs/PRs
|
|
697
|
+
projscan mission-proof --format markdown # Mission proof report for handoffs
|
|
698
|
+
projscan mission-proof --write reports/mission-proof.md # Save Markdown proof
|
|
653
699
|
projscan ci --format sarif # SARIF 2.1.0 for GitHub Code Scanning
|
|
654
700
|
```
|
|
655
701
|
|
|
@@ -661,7 +707,7 @@ Run `projscan help` for the generated command-by-command support matrix.
|
|
|
661
707
|
|
|
662
708
|
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.
|
|
663
709
|
|
|
664
|
-
**2.0 upgrade notes:** migrating from 1.x or authoring plugins? Start with the [2.0 Migration Guide](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.
|
|
710
|
+
**2.0 upgrade notes:** migrating from 1.x or authoring plugins? Start with the [2.0 Migration Guide](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/2.0-MIGRATION.md), then use [Plugin Authoring](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/PLUGIN-AUTHORING.md), the [Plugin Gallery](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/PLUGIN-GALLERY.md), and the [manifest schema](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/plugin.schema.json) as the stable contract.
|
|
665
711
|
|
|
666
712
|
```bash
|
|
667
713
|
projscan plugin list
|
|
@@ -672,58 +718,71 @@ PROJSCAN_PLUGINS_PREVIEW=1 projscan doctor --reporter team-radar
|
|
|
672
718
|
PROJSCAN_PLUGINS_PREVIEW=1 projscan ci --reporter team-radar --min-score 80
|
|
673
719
|
```
|
|
674
720
|
|
|
675
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.
|
|
721
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/projscan-reporter-plugin.gif" alt="projscan local reporter plugin rendering a team health report" width="700">
|
|
676
722
|
|
|
677
|
-
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/v4.3.
|
|
723
|
+
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/v4.3.1/docs/PLUGIN-AUTHORING.md) for manifest shape, `render(context)`, validation, and the trust model.
|
|
678
724
|
|
|
679
725
|
### Options
|
|
680
726
|
|
|
681
|
-
| Flag
|
|
682
|
-
|
|
683
|
-
| `--format <type>`
|
|
684
|
-
| `--config <path>`
|
|
685
|
-
| `--include-ignored`
|
|
686
|
-
| `--scan-env-values`
|
|
687
|
-
| `--offline`
|
|
688
|
-
| `--shortcuts`
|
|
689
|
-
| `--shortcuts-json`
|
|
690
|
-
| `--handoff-prompt`
|
|
691
|
-
| `--next-command`
|
|
692
|
-
| `--next-tool-call`
|
|
693
|
-
| `--ready-tool-calls`
|
|
694
|
-
| `--proof-commands`
|
|
695
|
-
| `--checklist`
|
|
696
|
-
| `--resume-json`
|
|
697
|
-
| `--handoff-json`
|
|
698
|
-
| `--mission-script`
|
|
699
|
-
| `--save-mission <dir>`
|
|
700
|
-
| `--mission <dir>`
|
|
701
|
-
| `--
|
|
702
|
-
| `--
|
|
703
|
-
| `--
|
|
704
|
-
| `--
|
|
705
|
-
| `--
|
|
706
|
-
| `--
|
|
707
|
-
| `--
|
|
708
|
-
| `--
|
|
709
|
-
| `--
|
|
710
|
-
| `--
|
|
711
|
-
| `--
|
|
712
|
-
| `--
|
|
713
|
-
|
|
|
714
|
-
|
|
|
727
|
+
| Flag | Description |
|
|
728
|
+
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
729
|
+
| `--format <type>` | Output format: console, json, markdown, sarif, html (command-dependent) |
|
|
730
|
+
| `--config <path>` | Path to a `.projscanrc` config file |
|
|
731
|
+
| `--include-ignored` | Explicitly include files hidden by Git ignore rules |
|
|
732
|
+
| `--scan-env-values` | Explicitly read `.env*` contents during secret checks |
|
|
733
|
+
| `--offline` | Block projscan network-capable features for this run |
|
|
734
|
+
| `--shortcuts` | Print the Mission Control shortcut command index (`start`) |
|
|
735
|
+
| `--shortcuts-json` | Print the Mission Control shortcut command index as JSON (`start`) |
|
|
736
|
+
| `--handoff-prompt` | Print only the concise Mission Control handoff prompt (`start`) |
|
|
737
|
+
| `--next-command` | Print only the current Mission Control cursor command (`start`) |
|
|
738
|
+
| `--next-tool-call` | Print only the current Mission Control cursor MCP tool call as JSON (`start`) |
|
|
739
|
+
| `--ready-tool-calls` | Print the current cursor and remaining MCP-callable proof queue as JSON (`start`) |
|
|
740
|
+
| `--proof-commands` | Print only ready Mission Control proof commands (`start`) |
|
|
741
|
+
| `--checklist` | Print only the Mission Control resume checklist (`start`) |
|
|
742
|
+
| `--resume-json` | Print only the Mission Control resume object as JSON (`start`) |
|
|
743
|
+
| `--handoff-json` | Print only the Mission Control handoff object as JSON (`start`) |
|
|
744
|
+
| `--mission-script` | Print the Mission Control shell script (`start`) |
|
|
745
|
+
| `--save-mission <dir>` | Write the Mission Control bundle to a directory (`start`) |
|
|
746
|
+
| `--mission <dir>` | Read a saved Mission Control bundle and include proof outcome in `start`; repeatable mission selector for `mission-proof` |
|
|
747
|
+
| `--list` | List saved Mission Control bundles with status and update time (`mission-proof`) |
|
|
748
|
+
| `--needs-attention` | Filter `mission-proof --list` to bundles that are not passed |
|
|
749
|
+
| `--mission-status <status>` | Filter `mission-proof --list` by `passed`, `failed`, `running`, `not_run`, or `unknown` |
|
|
750
|
+
| `--latest` | Select the saved Mission Control bundle with the newest `proof-logs/summary.json` (`mission-proof`) |
|
|
751
|
+
| `--all` | Discover `.projscan/mission` and direct child bundles under `.projscan/missions/` (`mission-proof`) |
|
|
752
|
+
| `--baseline <path>` | Compare `mission-proof` with a local manual-run baseline JSON file |
|
|
753
|
+
| `--init-baseline <file>` | Write a local manual-run baseline JSON template (`mission-proof`) |
|
|
754
|
+
| `--add-baseline-run <file>` | Append one measured manual run to a local baseline JSON file (`mission-proof`) |
|
|
755
|
+
| `--check-baseline <file>` | Validate a local manual-run baseline JSON file (`mission-proof`) |
|
|
756
|
+
| `--id <id>` / `--status <status>` | Identify a run added with `--add-baseline-run` (`mission-proof`) |
|
|
757
|
+
| `--minutes-spent`, `--reruns`, `--failed-gates`, `--reviewer-approvals` | Numeric fields for `--add-baseline-run` (`mission-proof`) |
|
|
758
|
+
| `--write <file>` | Write a Markdown or JSON artifact (`mission-proof`, `handoff`) |
|
|
759
|
+
| `--require-passed` | Exit nonzero unless every selected mission bundle passed proof (`mission-proof`) |
|
|
760
|
+
| `--summary` | Print one compact Mission Proof status line (`mission-proof`) |
|
|
761
|
+
| `--task-card` | Print only the Mission Control Markdown task card (`start`) |
|
|
762
|
+
| `--review-gate` | Print only the Mission Control stop-and-review gate (`start`) |
|
|
763
|
+
| `--review-gate-json` | Print only the Mission Control review gate as JSON (`start`) |
|
|
764
|
+
| `--review-policy` | Print only the Mission Control review policy as JSON (`start`) |
|
|
765
|
+
| `--review-replies` | Print only copyable Mission Control reviewer replies (`start`) |
|
|
766
|
+
| `--runbook` | Print only the Mission Control Markdown runbook (`start`) |
|
|
767
|
+
| `--changed-only` | Scope to files changed vs base ref (ci/analyze/doctor) |
|
|
768
|
+
| `--base-ref <ref>` | Git base ref for `--changed-only` (default: origin/main) |
|
|
769
|
+
| `--reporter <name>` | Render `doctor`, `analyze`, or `ci` with a local reporter plugin |
|
|
770
|
+
| `--verbose` | Enable debug output |
|
|
771
|
+
| `--quiet` | Suppress non-essential output |
|
|
772
|
+
| `-V, --version` | Show version |
|
|
773
|
+
| `-h, --help` | Show help |
|
|
715
774
|
|
|
716
775
|
## Health Score
|
|
717
776
|
|
|
718
777
|
Every `projscan doctor` run calculates a health score (0–100) and letter grade:
|
|
719
778
|
|
|
720
|
-
| Grade | Score
|
|
721
|
-
|
|
722
|
-
| A
|
|
723
|
-
| B
|
|
724
|
-
| C
|
|
725
|
-
| D
|
|
726
|
-
| F
|
|
779
|
+
| Grade | Score | Meaning |
|
|
780
|
+
| ----- | ------ | ------------------------------------------ |
|
|
781
|
+
| A | 90–100 | Excellent - project follows best practices |
|
|
782
|
+
| B | 80–89 | Good - minor improvements possible |
|
|
783
|
+
| C | 70–79 | Fair - several issues to address |
|
|
784
|
+
| D | 60–69 | Poor - significant issues found |
|
|
785
|
+
| F | < 60 | Critical - major issues need attention |
|
|
727
786
|
|
|
728
787
|
Generate a badge for your README:
|
|
729
788
|
|
|
@@ -782,10 +841,10 @@ Cache version bumped 2 → 3 in 0.11 (CC stored per file). Existing v2 caches ar
|
|
|
782
841
|
|
|
783
842
|
Reference numbers from `npm run bench` on an Apple M3 Pro running Node 25 (cold / warm cache, milliseconds), refreshed for 1.5.0:
|
|
784
843
|
|
|
785
|
-
| Repo
|
|
786
|
-
|
|
787
|
-
| projscan itself
|
|
788
|
-
| Synthetic medium | 500
|
|
844
|
+
| Repo | Files | analyze | doctor | hotspots | coupling | search |
|
|
845
|
+
| ---------------- | ----- | --------- | --------- | --------- | --------- | --------- |
|
|
846
|
+
| projscan itself | ~120 | 650 / 576 | 659 / 574 | 794 / 622 | 405 / 186 | 485 / 277 |
|
|
847
|
+
| Synthetic medium | 500 | 284 / 257 | 277 / 255 | 300 / 278 | 224 / 177 | 239 / 196 |
|
|
789
848
|
|
|
790
849
|
For real-world numbers against larger codebases, `npm run bench:references` shallow-clones TypeScript, Django, and kubernetes/client-go into `.bench-cache/` (gitignored) and runs the same suite. First run is network-bound; later runs reuse the cache. Restrict to one target with `-- --only ts|django|k8s-client-go`.
|
|
791
850
|
|
|
@@ -795,19 +854,19 @@ Run `npm run bench` against your own machine to recalibrate.
|
|
|
795
854
|
- **14 runtime dependencies** — still minimal
|
|
796
855
|
- **~21 MB of vendored tree-sitter grammars**, broken down:
|
|
797
856
|
|
|
798
|
-
| Grammar
|
|
799
|
-
|
|
800
|
-
| `web-tree-sitter`
|
|
801
|
-
| `tree-sitter-python`
|
|
802
|
-
| `tree-sitter-go`
|
|
803
|
-
| `tree-sitter-java`
|
|
804
|
-
| `tree-sitter-ruby`
|
|
805
|
-
| `tree-sitter-rust`
|
|
806
|
-
| `tree-sitter-php`
|
|
807
|
-
| `tree-sitter-c-sharp` | ~5.2 MB | C#
|
|
808
|
-
| `tree-sitter-cpp`
|
|
809
|
-
| `tree-sitter-kotlin`
|
|
810
|
-
| `tree-sitter-swift`
|
|
857
|
+
| Grammar | Size | Languages |
|
|
858
|
+
| --------------------- | ------: | ---------------------------------- |
|
|
859
|
+
| `web-tree-sitter` | ~190 KB | runtime, all tree-sitter languages |
|
|
860
|
+
| `tree-sitter-python` | ~450 KB | Python |
|
|
861
|
+
| `tree-sitter-go` | ~210 KB | Go |
|
|
862
|
+
| `tree-sitter-java` | ~405 KB | Java |
|
|
863
|
+
| `tree-sitter-ruby` | ~2.0 MB | Ruby |
|
|
864
|
+
| `tree-sitter-rust` | ~1.1 MB | Rust |
|
|
865
|
+
| `tree-sitter-php` | ~785 KB | PHP |
|
|
866
|
+
| `tree-sitter-c-sharp` | ~5.2 MB | C# |
|
|
867
|
+
| `tree-sitter-cpp` | ~3.3 MB | C, C++ |
|
|
868
|
+
| `tree-sitter-kotlin` | ~3.9 MB | Kotlin |
|
|
869
|
+
| `tree-sitter-swift` | ~3.6 MB | Swift |
|
|
811
870
|
|
|
812
871
|
JavaScript and TypeScript use the bundled `@babel/parser` instead of a tree-sitter grammar, so they don't appear in this table.
|
|
813
872
|
|
|
@@ -838,16 +897,16 @@ projscan reads your source code so it can be useful; it does not send your sourc
|
|
|
838
897
|
|
|
839
898
|
### What projscan DOES do, and what it costs
|
|
840
899
|
|
|
841
|
-
| Action
|
|
842
|
-
|
|
843
|
-
| Read source files
|
|
844
|
-
| Spawn `git`
|
|
845
|
-
| Spawn `npm audit`
|
|
846
|
-
| Scan supply-chain IOCs | `doctor`, `preflight`, release validation
|
|
847
|
-
| Anonymous telemetry
|
|
848
|
-
| Load local plugins
|
|
849
|
-
| Load wasm grammars
|
|
850
|
-
| Build embeddings
|
|
900
|
+
| Action | When | Network? | Notes |
|
|
901
|
+
| ---------------------- | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
902
|
+
| Read source files | every command | no | parses with tree-sitter / Babel; results cached at `.projscan-cache/` |
|
|
903
|
+
| Spawn `git` | `hotspots`, `pr-diff`, `review`, `diff` | git itself may fetch if you run `git fetch` separately; **projscan never invokes `git fetch`** | `env: process.env` is passed so `git` can find its config |
|
|
904
|
+
| Spawn `npm audit` | `audit` only | yes — by `npm`, not by projscan | runs against your local lockfile |
|
|
905
|
+
| Scan supply-chain IOCs | `doctor`, `preflight`, release validation | no | checks manifests, lockfiles, hidden editor hooks, and suspicious install-time payloads against bundled indicators |
|
|
906
|
+
| Anonymous telemetry | only after `projscan telemetry enable` or accepting the `projscan init team` prompt | yes — projscan-owned, default off | sends product-health buckets only; see [TELEMETRY.md](TELEMETRY.md) |
|
|
907
|
+
| Load local plugins | only with `PROJSCAN_PLUGINS_PREVIEW=1` and an execution path such as `--execute`, `doctor`, `ci`, or `analyze` | no | imports local JS modules declared in `.projscan-plugins/`; only enable plugins you trust |
|
|
908
|
+
| Load wasm grammars | first parse of a non-JS file | no | served from `dist/grammars/` inside the package; no fetch |
|
|
909
|
+
| Build embeddings | semantic search opt-in only | yes — by `@xenova/transformers`, on first use | model cached locally after first download; remove the peer dep to remove this code path entirely |
|
|
851
910
|
|
|
852
911
|
### Patterns supply-chain scanners flag, and why they're benign here
|
|
853
912
|
|
|
@@ -861,7 +920,7 @@ If you read projscan's [Socket report](https://socket.dev/npm/package/projscan),
|
|
|
861
920
|
### Audit it yourself
|
|
862
921
|
|
|
863
922
|
- **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.
|
|
864
|
-
- **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/v4.3.
|
|
923
|
+
- **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/v4.3.1/docs/STABILITY.md).
|
|
865
924
|
- **Run it offline:** `npm install -g projscan` followed by anything except `audit` and `--mode semantic` works without network.
|
|
866
925
|
- **Drop privilege further:** in CI, run projscan in a sandbox that disallows network egress; everything except `audit` will pass.
|
|
867
926
|
|
|
@@ -876,13 +935,13 @@ projscan runs against itself in CI on every PR. The dogfood loop is the most dir
|
|
|
876
935
|
|
|
877
936
|
Current state of the projscan codebase as scored by projscan itself:
|
|
878
937
|
|
|
879
|
-
| Metric
|
|
880
|
-
|
|
881
|
-
| Health score
|
|
882
|
-
| Open issues
|
|
883
|
-
| Circular imports
|
|
884
|
-
| Top hotspot
|
|
885
|
-
| Dogfood threshold | `--min-score 90` (CI fails below this)
|
|
938
|
+
| Metric | Value |
|
|
939
|
+
| ----------------- | ------------------------------------------------------------------------------------------------ |
|
|
940
|
+
| Health score | **A (100 / 100)** |
|
|
941
|
+
| Open issues | 0 errors, 0 warnings, 0 info |
|
|
942
|
+
| Circular imports | 0 |
|
|
943
|
+
| Top hotspot | `src/reporters/consoleReporter.ts` (CC 288, 1108 lines) — known refactor candidate, not a defect |
|
|
944
|
+
| Dogfood threshold | `--min-score 90` (CI fails below this) |
|
|
886
945
|
|
|
887
946
|
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.
|
|
888
947
|
|
|
@@ -912,7 +971,7 @@ projscan ci --changed-only # Gate only on this PR's diff
|
|
|
912
971
|
projscan ci --format sarif > projscan.sarif # SARIF for Code Scanning
|
|
913
972
|
```
|
|
914
973
|
|
|
915
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.
|
|
974
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20ci%20--min-score%2070.gif" alt="npx projscan ci --min-score 70" width="700">
|
|
916
975
|
|
|
917
976
|
### GitHub Action (recommended)
|
|
918
977
|
|
|
@@ -927,14 +986,14 @@ on:
|
|
|
927
986
|
|
|
928
987
|
permissions:
|
|
929
988
|
contents: read
|
|
930
|
-
security-events: write
|
|
989
|
+
security-events: write # required for SARIF upload
|
|
931
990
|
|
|
932
991
|
jobs:
|
|
933
992
|
scan:
|
|
934
993
|
runs-on: ubuntu-latest
|
|
935
994
|
steps:
|
|
936
995
|
- uses: actions/checkout@v4
|
|
937
|
-
with: { fetch-depth: 0 }
|
|
996
|
+
with: { fetch-depth: 0 } # needed for --changed-only
|
|
938
997
|
- uses: actions/setup-node@v4
|
|
939
998
|
with: { node-version: 20 }
|
|
940
999
|
- uses: abhiyoheswaran1/projscan@v1
|
|
@@ -987,9 +1046,9 @@ Fields:
|
|
|
987
1046
|
- `disableRules` - silence rules by id; supports wildcard `prefix-*`
|
|
988
1047
|
- `severityOverrides` - remap a rule's severity (`info` / `warning` / `error`)
|
|
989
1048
|
- `hotspots.limit` / `hotspots.since` - defaults for the `hotspots` command
|
|
990
|
-
- `monorepo.importPolicy` - cross-package import allow/deny rules in monorepos
|
|
1049
|
+
- `monorepo.importPolicy` - cross-package import allow/deny rules in monorepos _(0.14+)_
|
|
991
1050
|
|
|
992
|
-
See [`docs/GUIDE.md` -> Configuration](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.
|
|
1051
|
+
See [`docs/GUIDE.md` -> Configuration](https://github.com/abhiyoheswaran1/projscan/blob/v4.3.1/docs/GUIDE.md#configuration-projscanrc) for the full reference (field types, validation behavior, embedding config in `package.json`, monorepo `importPolicy` semantics).
|
|
993
1052
|
|
|
994
1053
|
## Tracking Health Over Time
|
|
995
1054
|
|
|
@@ -1002,7 +1061,7 @@ projscan diff # Compare against baseline
|
|
|
1002
1061
|
projscan diff --format markdown # Markdown diff for PRs
|
|
1003
1062
|
```
|
|
1004
1063
|
|
|
1005
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.
|
|
1064
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20diff%20--save-baseline.gif" alt="npx projscan diff --save-baseline" width="700">
|
|
1006
1065
|
|
|
1007
1066
|
## Hotspots - Where to Fix First
|
|
1008
1067
|
|
|
@@ -1091,9 +1150,9 @@ Coverage is also automatically joined into `projscan hotspots` when one of those
|
|
|
1091
1150
|
|
|
1092
1151
|
**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.
|
|
1093
1152
|
|
|
1094
|
-
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.
|
|
1153
|
+
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/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">
|
|
1095
1154
|
|
|
1096
|
-
Two questions an agent asks; structural answers in milliseconds.
|
|
1155
|
+
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.
|
|
1097
1156
|
|
|
1098
1157
|
### Claude Code
|
|
1099
1158
|
|
|
@@ -1218,90 +1277,97 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
|
|
|
1218
1277
|
|
|
1219
1278
|
### What agents can ask
|
|
1220
1279
|
|
|
1221
|
-
-
|
|
1222
|
-
-
|
|
1223
|
-
-
|
|
1224
|
-
-
|
|
1225
|
-
-
|
|
1226
|
-
-
|
|
1227
|
-
-
|
|
1228
|
-
-
|
|
1229
|
-
-
|
|
1230
|
-
-
|
|
1231
|
-
-
|
|
1232
|
-
-
|
|
1233
|
-
-
|
|
1234
|
-
-
|
|
1235
|
-
-
|
|
1236
|
-
-
|
|
1237
|
-
-
|
|
1238
|
-
-
|
|
1239
|
-
-
|
|
1240
|
-
-
|
|
1241
|
-
-
|
|
1242
|
-
-
|
|
1243
|
-
-
|
|
1244
|
-
-
|
|
1245
|
-
-
|
|
1280
|
+
- _"Who imports `src/auth/jwt.ts`?"_ → `projscan_semantic_graph { query: { direction: "importers", file: "src/auth/jwt.ts" } }` or `projscan semantic-graph --query importers --file src/auth/jwt.ts --format json`
|
|
1281
|
+
- _"Which files import `chalk`?"_ or _"Which files import package `chalk`?"_ → `projscan_semantic_graph { query: { direction: "package_importers", symbol: "chalk" } }` or `projscan semantic-graph --query package_importers --symbol chalk --format json`
|
|
1282
|
+
- _"Give me the whole agent-safe graph contract."_ → `projscan_semantic_graph`
|
|
1283
|
+
- _"Did this wrapper connect a source reader to a dangerous sink?"_ → `projscan_dataflow`
|
|
1284
|
+
- _"Explain issue `missing-test-framework`."_ → `projscan_explain_issue { issue_id: "missing-test-framework" }`
|
|
1285
|
+
- _"Where is `runAudit` defined?"_ → `projscan_semantic_graph { query: { direction: "symbol_defs", symbol: "runAudit" } }` or `projscan semantic-graph --query symbol_defs --symbol runAudit --format json`
|
|
1286
|
+
- _"Which files implement auth?"_ → `projscan_search { query: "auth", scope: "content" }`
|
|
1287
|
+
- _"Who should I ask about auth?"_ → `projscan_search { query: "auth" }`
|
|
1288
|
+
- _"Which tests cover auth?"_ → `projscan_search { query: "tests for auth" }`
|
|
1289
|
+
- _"What are the scariest untested files?"_ → `projscan_coverage`
|
|
1290
|
+
- _"Which files have no tests?"_ → `projscan_coverage`
|
|
1291
|
+
- _"What breaks if I bump chalk to 6?"_ → `projscan_upgrade { package: "chalk" }`
|
|
1292
|
+
- _"Show circular dependencies."_ → `projscan_coupling { direction: "cycles_only" }` or `projscan coupling --cycles-only --format json`
|
|
1293
|
+
- _"What modules are tightly coupled?"_ → `projscan_coupling` or `projscan coupling --format json`
|
|
1294
|
+
- _"Where should I refactor first?"_ → `projscan_hotspots`
|
|
1295
|
+
- _"What should my agent do first in this repo?"_ → `projscan_start { mode: "before_edit" }`
|
|
1296
|
+
- _"How do I understand the repo before editing?"_ → `projscan_understand { view: "map" }`
|
|
1297
|
+
- _"What should my agent do next?"_ → `projscan_workplan { mode: "bug_hunt" }`
|
|
1298
|
+
- _"Give the next agent a compact brief."_ → `projscan_agent_brief { intent: "bug_hunt" }`
|
|
1299
|
+
- _"Show the product quality picture."_ → `projscan_quality_scorecard`
|
|
1300
|
+
- _"What should I fix before a big release?"_ → `projscan_bug_hunt`
|
|
1301
|
+
- _"What evidence do I need before approval?"_ → `projscan_evidence_pack { website_prompt: true }`
|
|
1302
|
+
- _"Which checks prove this bigger product update?"_ → `projscan_regression_plan { level: "full" }`
|
|
1303
|
+
- _"How do I plan the next six product lines?"_ → `projscan_release_train`
|
|
1304
|
+
- _"How do I wire projscan into this MCP client?"_ → `projscan_adoption { action: "mcp_config", client: "codex" }`
|
|
1246
1305
|
|
|
1247
1306
|
### The 45 MCP tools
|
|
1248
1307
|
|
|
1249
1308
|
**Structural (0.6.0 / 0.11 / 0.13 / 0.14 / 0.15 - agent-native):**
|
|
1250
|
-
|
|
1251
|
-
- **`
|
|
1252
|
-
- **`
|
|
1253
|
-
- **`
|
|
1254
|
-
- **`
|
|
1255
|
-
- **`
|
|
1256
|
-
- **`
|
|
1257
|
-
- **`
|
|
1258
|
-
- **`
|
|
1259
|
-
- **`
|
|
1260
|
-
- **`
|
|
1261
|
-
- **`
|
|
1262
|
-
- **`
|
|
1263
|
-
- **`
|
|
1264
|
-
- **`
|
|
1265
|
-
- **`
|
|
1266
|
-
- **`
|
|
1267
|
-
- **`
|
|
1268
|
-
- **`
|
|
1269
|
-
- **`
|
|
1270
|
-
- **`
|
|
1271
|
-
- **`
|
|
1272
|
-
- **`
|
|
1273
|
-
- **`
|
|
1274
|
-
- **`
|
|
1309
|
+
|
|
1310
|
+
- **`projscan_start`** _(3.0.4)_ - first-60-seconds repo orientation. Composes setup diagnostics, `firstTenMinutes`, workflow recipes, workplan, quality scorecard, top risks, adoption gaps, next commands, and optional handoff payload.
|
|
1311
|
+
- **`projscan_understand`** _(3.4)_ - cited repo-comprehension report with `map`, `flow`, `contracts`, `change`, and `verify` views, read-first files, unknowns, change readiness, verification tiers, and exact next commands.
|
|
1312
|
+
- **`projscan_semantic_graph`** _(3.0; query mode 4.0)_ - the code graph, two ways. With no `query`: the stable v3 semantic graph contract (file, function, package, and symbol nodes plus `defines`, `imports`, `imports_package`, `exports`, and `calls` edges). With `query: { direction, file?, symbol? }`: one cheap targeted lookup — `imports`, `exports`, `importers`, `symbol_defs`, `package_importers` — with millisecond responses on a warm cache. (Subsumes the former `projscan_graph`, removed in 4.0.)
|
|
1313
|
+
- **`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.
|
|
1314
|
+
- **`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)_.
|
|
1315
|
+
- **`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`.
|
|
1316
|
+
- **`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.
|
|
1317
|
+
- **`projscan_review`** _(0.13)_ - one-call PR review. Composes `pr_diff` + per-changed-file risk + new/expanded import cycles + risky function additions + dependency changes + a verdict (`ok` / `review` / `block`).
|
|
1318
|
+
- **`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.
|
|
1319
|
+
- **`projscan_bug_hunt`** _(2.3)_ - ranked bug-hunt action queue. Composes doctor issues, preflight, hotspots, and session coordination into ranked actions with verification commands.
|
|
1320
|
+
- **`projscan_release_train`** _(2.3)_ - product-line readiness planner. Reads version, scope, readiness evidence, and next actions.
|
|
1321
|
+
- **`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.
|
|
1322
|
+
- **`projscan_regression_plan`** _(2.3)_ - smoke/focused/full regression matrix. Turns bug-hunt, preflight, and product risk into deduplicated verification commands.
|
|
1323
|
+
- **`projscan_agent_brief`** _(2.3)_ - compact next-agent context packet with focus items, repo context, coordination hints, guardrails, and suggested next actions.
|
|
1324
|
+
- **`projscan_quality_scorecard`** _(2.3)_ - dimensioned quality view across health, security, tests, maintainability, coordination, top risks, and verification commands.
|
|
1325
|
+
- **`projscan_adoption`** _(2.9)_ - adoption helper for MCP config snippets, workflow recipes, and first-run diagnostics with the shared `firstTenMinutes` path.
|
|
1326
|
+
- **`projscan_fix_suggest`** _(0.14)_ - structured action prompt for any open issue: headline, why it matters, where, one-paragraph instruction, optional suggested test. Closes the diagnose → fix loop.
|
|
1327
|
+
- **`projscan_explain_issue`** _(0.14)_ - deep dive on one issue: code excerpt, related issues in the same file, similar past commits via `git log --grep`, plus the structured FixSuggestion.
|
|
1328
|
+
- **`projscan_impact`** _(0.15)_ - transitive blast-radius for a file or symbol. BFS over reverse imports + symbol callsites. Use BEFORE renaming or deleting to see what breaks.
|
|
1329
|
+
- **`projscan_collision`** _(3.6)_ - detect change collisions across the repo's in-flight git worktrees (parallel agents). Flags same-file edits and dependency overlaps (one worktree edits a file another's change imports) before the branches merge. Local-first; needs ≥2 worktrees.
|
|
1330
|
+
- **`projscan_claim`** _(3.6)_ - advisory claims/leases over files, directories, or symbols, shared across the repo's worktrees. `add` returns contention when another agent already holds an overlapping target; `list` / `release` manage them. Local-first.
|
|
1331
|
+
- **`projscan_merge_risk`** _(3.6)_ - merge-risk preflight across in-flight worktrees: a safe integration order (merge the least-entangled branch first) plus conflict hotspots (files changed by 2+ worktrees). Builds on `projscan_collision`. Local-first.
|
|
1332
|
+
- **`projscan_route`** _(3.6)_ - map a stated goal (e.g. "what breaks if I rename X") to the right projscan tool with the exact call, or list the full capability catalog. A discovery entry point over the tool surface; deterministic, no LLM.
|
|
1333
|
+
- **`projscan_coordinate`** _(3.6)_ - one-call swarm coordination read: composes collisions, claims, and merge-risk into a `readiness` verdict (clear / caution / conflicted) with counts and the recommended integration order. The single entry point for the coordination arc. Local-first.
|
|
1334
|
+
- **`projscan_coordinate_watch`** _(3.7)_ - long-running coordination watch: polls the in-flight worktrees and emits a `notifications/projscan/coordination_changed` notification whenever the swarm state changes. Pairs with `projscan_coordinate`. `start` / `stop` / `list`.
|
|
1275
1335
|
|
|
1276
1336
|
**Analysis:**
|
|
1337
|
+
|
|
1277
1338
|
- `projscan_analyze` - full project report
|
|
1278
1339
|
- `projscan_doctor` - health score + issues (now includes `cycle-detected-N` for circular imports as of 0.13)
|
|
1279
|
-
- `projscan_hotspots` - risk-ranked files (churn × **AST cyclomatic complexity** × issues × ownership × coverage; falls back to LOC for non-AST languages). Pass `view: "functions"`
|
|
1280
|
-
- `projscan_file` - per-file purpose, imports, exports, smells + risk + ownership + related issues + CC + fan-in/fan-out + per-function CC table
|
|
1340
|
+
- `projscan_hotspots` - risk-ranked files (churn × **AST cyclomatic complexity** × issues × ownership × coverage; falls back to LOC for non-AST languages). Pass `view: "functions"` _(0.13)_ for top-N risky individual functions.
|
|
1341
|
+
- `projscan_file` - per-file purpose, imports, exports, smells + risk + ownership + related issues + CC + fan-in/fan-out + per-function CC table _(0.13)_
|
|
1281
1342
|
- `projscan_structure` - directory tree
|
|
1282
1343
|
- `projscan_coverage` - scariest untested files (coverage × hotspots)
|
|
1283
1344
|
|
|
1284
1345
|
**Dependencies:**
|
|
1285
|
-
|
|
1346
|
+
|
|
1347
|
+
- `projscan_dependencies` - declared deps, risks. In a monorepo: aggregated totals + `byWorkspace` breakdown; `package` arg scopes to one _(0.13)_.
|
|
1286
1348
|
- `projscan_outdated` - declared-vs-installed drift (offline). Per-package `byWorkspace`; `package` arg.
|
|
1287
|
-
- `projscan_audit` - normalized `npm audit`. `package` arg scopes findings to one workspace's direct deps
|
|
1349
|
+
- `projscan_audit` - normalized `npm audit`. `package` arg scopes findings to one workspace's direct deps _(0.13)_.
|
|
1288
1350
|
- `projscan_upgrade` - upgrade preview (CHANGELOG + importers, offline)
|
|
1289
1351
|
|
|
1290
1352
|
**Workspace (0.11):**
|
|
1353
|
+
|
|
1291
1354
|
- `projscan_workspaces` - list monorepo packages (npm/yarn/pnpm/Nx/Turbo/Lerna). Use the `name` as the `package` arg on `projscan_hotspots` / `projscan_coupling` to scope.
|
|
1292
1355
|
|
|
1293
1356
|
**Session (1.4):**
|
|
1294
|
-
|
|
1357
|
+
|
|
1358
|
+
- **`projscan_session`** _(1.4)_ - durable cross-invocation session. Subactions: `current` (id + counts), `touched` (files touched this session, sorted by recency, filterable by source: `tool-result` / `fs-watch` / `explicit`), `events` (chronological log), `reset` (start a fresh session). Auto-populated from every tool result and from `notifications/file_changed` push events when `--watch` is on. MCP resources and agent briefs add `coordinationHints` so agents can separate current worktree checks from remembered session context before parallel edits continue.
|
|
1295
1359
|
|
|
1296
1360
|
**Memory (1.5):**
|
|
1297
|
-
|
|
1361
|
+
|
|
1362
|
+
- **`projscan_memory`** _(1.5)_ - durable, local-only feedback loop. Records, per analyzer rule id, how many runs surfaced it and how many fixed it. Subactions: `current` (aggregate counts), `stable` (rules surfaced across ≥ 3 runs over ≥ 7 days without ever being fixed — paired with a ready-to-paste `.projscanrc.json disableRules` snippet), `runs` (every tracked rule with full history), `forget` (drop a single rule). Stored at `.projscan-memory/memory.json`; never leaves the machine. Lets an agent ask "what is this project tolerating?" and propose quieting it.
|
|
1298
1363
|
|
|
1299
1364
|
**Operator (1.6):**
|
|
1300
|
-
- **`projscan_workspace_graph`** *(1.6)* - cross-repo intelligence over locally trusted sibling repos registered with `projscan workspace add` and stored under `.projscan-cache/workspace.json`. Subactions: `list` (registered repos + parsed-file + export counts), `graph` (every symbol exported by ≥ 2 repos — the candidate refactor / API contract surface), `file_importers` (given a file in one repo, every other repo whose graph imports it). Read-only.
|
|
1301
|
-
- **`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`.
|
|
1302
|
-
- **`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.
|
|
1303
1365
|
|
|
1304
|
-
|
|
1366
|
+
- **`projscan_workspace_graph`** _(1.6)_ - cross-repo intelligence over locally trusted sibling repos registered with `projscan workspace add` and stored under `.projscan-cache/workspace.json`. Subactions: `list` (registered repos + parsed-file + export counts), `graph` (every symbol exported by ≥ 2 repos — the candidate refactor / API contract surface), `file_importers` (given a file in one repo, every other repo whose graph imports it). Read-only.
|
|
1367
|
+
- **`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`.
|
|
1368
|
+
- **`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.
|
|
1369
|
+
|
|
1370
|
+
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/v4.3.1/docs/PLUGIN-AUTHORING.md).
|
|
1305
1371
|
|
|
1306
1372
|
### Context-window budgeting
|
|
1307
1373
|
|
|
@@ -1313,7 +1379,7 @@ Analyzer plugins can optionally read graph/dataflow context through `check(rootP
|
|
|
1313
1379
|
|
|
1314
1380
|
### Semantic search (0.9.0+, opt-in)
|
|
1315
1381
|
|
|
1316
|
-
projscan ships with BM25-ranked lexical search by default. To unlock **true semantic search** - embeddings over file content so queries like
|
|
1382
|
+
projscan ships with BM25-ranked lexical search by default. To unlock **true semantic search** - embeddings over file content so queries like _"which file implements auth"_ hit files that don't literally contain the word "auth" - install the optional peer:
|
|
1317
1383
|
|
|
1318
1384
|
```bash
|
|
1319
1385
|
npm install @xenova/transformers
|
|
@@ -1321,11 +1387,16 @@ projscan search "verifying user credentials" --mode semantic
|
|
|
1321
1387
|
```
|
|
1322
1388
|
|
|
1323
1389
|
Or via the MCP tool:
|
|
1390
|
+
|
|
1324
1391
|
```json
|
|
1325
|
-
{
|
|
1392
|
+
{
|
|
1393
|
+
"name": "projscan_search",
|
|
1394
|
+
"arguments": { "query": "verifying user credentials", "mode": "semantic" }
|
|
1395
|
+
}
|
|
1326
1396
|
```
|
|
1327
1397
|
|
|
1328
1398
|
Modes on `projscan_search`:
|
|
1399
|
+
|
|
1329
1400
|
- `lexical` (default) - BM25 over content + symbol + path boosts. No peer needed.
|
|
1330
1401
|
- `semantic` - cosine similarity on `Xenova/all-MiniLM-L6-v2` embeddings. Requires peer.
|
|
1331
1402
|
- `hybrid` - both, fused via Reciprocal Rank Fusion. Requires peer.
|
|
@@ -1347,14 +1418,16 @@ All opt-in - default behavior is unchanged.
|
|
|
1347
1418
|
projscan caches parsed ASTs at `.projscan-cache/graph.json` (auto-gitignored). First run populates it; subsequent runs re-parse only files whose `mtime` changed. Agent queries on a warm cache are milliseconds, not seconds.
|
|
1348
1419
|
|
|
1349
1420
|
### Prompts (6, parameterized with live project data)
|
|
1421
|
+
|
|
1350
1422
|
- `prioritize_refactoring` - ranked plan grounded in current hotspots
|
|
1351
1423
|
- `investigate_file` - senior-engineer brief for a specific file
|
|
1352
|
-
- **`refactor_hotspot`**
|
|
1353
|
-
- **`triage_doctor_issues`**
|
|
1354
|
-
- **`review_this_pr`**
|
|
1355
|
-
- **`safely_rename_symbol`**
|
|
1424
|
+
- **`refactor_hotspot`** _(1.5)_ - step-by-step refactor plan for one hotspot file
|
|
1425
|
+
- **`triage_doctor_issues`** _(1.5)_ - critical / important / backlog ordering of open issues
|
|
1426
|
+
- **`review_this_pr`** _(1.5)_ - PR-comment-ready review primed with the structural diff and verdict
|
|
1427
|
+
- **`safely_rename_symbol`** _(1.5)_ - ordered rename + verification checklist via `projscan_impact` blast radius
|
|
1356
1428
|
|
|
1357
1429
|
### Resources (3, readable on demand)
|
|
1430
|
+
|
|
1358
1431
|
- `projscan://health` · `projscan://hotspots` · `projscan://structure`
|
|
1359
1432
|
|
|
1360
1433
|
## Use Cases
|