projscan 4.3.1 → 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 +253 -229
- 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 +13 -12
- 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 +8 -6
- package/dist/core/missionProof.js.map +1 -1
- package/dist/core/missionProofBaseline.d.ts +1 -1
- package/dist/core/missionProofBaseline.js +8 -2
- package/dist/core/missionProofBaseline.js.map +1 -1
- package/dist/core/missionProofMarkdown.d.ts +1 -1
- package/dist/core/missionProofMarkdown.js +4 -1
- package/dist/core/missionProofMarkdown.js.map +1 -1
- package/dist/core/missionProofSummary.d.ts +1 -1
- 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 +9 -9
- package/dist/index.js +7 -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 +1 -1
- package/dist/utils/formatSupport.js +7 -1
- package/dist/utils/formatSupport.js.map +1 -1
- package/dist/utils/packageJsonLocator.js.map +1 -1
- package/docs/GUIDE.md +186 -146
- 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/examples/plugins/graph-context.mjs +1 -2
- package/docs/examples/plugins/security-sensitive-files.mjs +2 -1
- package/package.json +10 -5
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
|
|
|
@@ -35,16 +35,16 @@ npx projscan
|
|
|
35
35
|
|
|
36
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
|
-
- **
|
|
46
|
-
- **
|
|
47
|
-
- **
|
|
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.
|
|
48
48
|
|
|
49
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">
|
|
50
50
|
|
|
@@ -64,6 +64,8 @@ npm run docs:demos
|
|
|
64
64
|
|
|
65
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.
|
|
66
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
|
+
|
|
67
69
|
Use the index when you want the menu, or call one shortcut directly:
|
|
68
70
|
|
|
69
71
|
```bash
|
|
@@ -170,7 +172,7 @@ Proof Queue
|
|
|
170
172
|
|
|
171
173
|
Runbook handoff example:
|
|
172
174
|
|
|
173
|
-
|
|
175
|
+
````text
|
|
174
176
|
Agent Runbook
|
|
175
177
|
# Mission Runbook
|
|
176
178
|
Intent: what breaks if I rename the auth token loader
|
|
@@ -187,37 +189,41 @@ Current phase: ready_now
|
|
|
187
189
|
Run now:
|
|
188
190
|
```sh
|
|
189
191
|
projscan search "auth token loader" --format json
|
|
190
|
-
|
|
192
|
+
````
|
|
193
|
+
|
|
191
194
|
MCP call: projscan_search {"query":"auth token loader"}
|
|
192
195
|
After running, resolve:
|
|
196
|
+
|
|
193
197
|
- input-1 (symbol): Replace <symbol-from-search> with an exported symbol returned by the search step.
|
|
194
198
|
- input-2 (file): Replace <file-from-search> with a file path returned by the search step.
|
|
195
|
-
Template inputs:
|
|
199
|
+
Template inputs:
|
|
196
200
|
- <symbol-from-search> -> input-1 (symbol): Replace <symbol-from-search> with an exported symbol returned by the search step.
|
|
197
201
|
- <file-from-search> -> input-2 (file): Replace <file-from-search> with a file path returned by the search step.
|
|
198
|
-
Resume checklist:
|
|
202
|
+
Resume checklist:
|
|
199
203
|
- [ready] run_current ready-1: projscan search "auth token loader" --format json (MCP: projscan_search {"query":"auth token loader"})
|
|
200
204
|
- [blocked] resolve_input input-1: <symbol-from-search> -> Replace <symbol-from-search> with an exported symbol returned by the search step.
|
|
201
205
|
- [ready] run_proof proof-2: projscan preflight --mode before_edit --format json (MCP: projscan_preflight {"mode":"before_edit"})
|
|
202
206
|
- [pending] confirm_done criterion-1: An exact symbol or file path is selected from search results before impact analysis continues.
|
|
203
|
-
Proof queue:
|
|
207
|
+
Proof queue:
|
|
204
208
|
- proof-2: `projscan preflight --mode before_edit --format json` (MCP: projscan_preflight {"mode":"before_edit"})
|
|
205
209
|
- proof-3: `projscan understand --view verify --format json` (MCP: projscan_understand {"view":"verify"})
|
|
206
|
-
Remaining proof:
|
|
210
|
+
Remaining proof:
|
|
207
211
|
- `projscan preflight --mode before_edit --format json`
|
|
208
212
|
- `projscan understand --view verify --format json`
|
|
209
|
-
MCP proof calls:
|
|
213
|
+
MCP proof calls:
|
|
210
214
|
- proof-2: projscan_preflight {"mode":"before_edit"}
|
|
211
215
|
- proof-3: projscan_understand {"view":"verify"}
|
|
212
|
-
Then use:
|
|
216
|
+
Then use:
|
|
213
217
|
- follow-up-1 (If search returns an exported symbol): projscan impact --symbol <symbol-from-search> --format json
|
|
214
218
|
- follow-up-2 (If search returns a file path): projscan impact <file-from-search> --format json
|
|
215
|
-
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).
|
|
216
220
|
|
|
217
221
|
## Handoff Prompt
|
|
222
|
+
|
|
218
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.
|
|
219
224
|
|
|
220
225
|
## Review Gate
|
|
226
|
+
|
|
221
227
|
- [ ] Complete this task card and remaining proof.
|
|
222
228
|
- [ ] Capture `git status --short`.
|
|
223
229
|
- [ ] Capture `git diff --stat`.
|
|
@@ -226,17 +232,20 @@ Resume: Resume at ready-1 in ready_now: run `projscan search "auth token loader"
|
|
|
226
232
|
Review the completed mission, proof output, and working-tree summary before approving another slice, release, publish, or deploy.
|
|
227
233
|
|
|
228
234
|
## Ready Commands
|
|
235
|
+
|
|
229
236
|
- `projscan search "auth token loader" --format json`
|
|
230
237
|
|
|
231
238
|
## Blocked Inputs
|
|
239
|
+
|
|
232
240
|
- symbol: Replace <symbol-from-search> with an exported symbol returned by the search step.
|
|
233
|
-
|
|
241
|
+
|
|
242
|
+
````
|
|
234
243
|
|
|
235
244
|
Run `projscan doctor` for a focused health check:
|
|
236
245
|
|
|
237
246
|
```bash
|
|
238
247
|
npx projscan doctor
|
|
239
|
-
|
|
248
|
+
````
|
|
240
249
|
|
|
241
250
|
<img src="https://raw.githubusercontent.com/abhiyoheswaran1/projscan/v4.3.1/docs/npx%20projscan%20doctor.gif" alt="npx projscan doctor" width="700">
|
|
242
251
|
|
|
@@ -478,6 +487,7 @@ projscan start --intent "what should an intern work on?" # Routes to bug-hunt pr
|
|
|
478
487
|
projscan start --intent "what is a low risk improvement?" # Routes to bug-hunt prioritization
|
|
479
488
|
projscan start --intent "pick a small safe task" # Routes to bug-hunt prioritization
|
|
480
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
|
|
481
491
|
projscan start --intent "explain issue missing-test-framework" # Routes to deep issue context
|
|
482
492
|
projscan start --intent "fix issue missing-test-framework" # Routes to a concrete fix suggestion
|
|
483
493
|
projscan start --intent "is user input reaching SQL sinks?" # Routes to hardening dataflow analysis
|
|
@@ -591,58 +601,58 @@ The report includes file/symbol-backed `claims`, `readFirst` files, entrypoints,
|
|
|
591
601
|
|
|
592
602
|
## Commands
|
|
593
603
|
|
|
594
|
-
| Command
|
|
595
|
-
|
|
596
|
-
| `projscan analyze`
|
|
597
|
-
| `projscan route`
|
|
598
|
-
| `projscan start`
|
|
599
|
-
| `projscan mission-proof`
|
|
600
|
-
| `projscan first-run`
|
|
601
|
-
| `projscan init mcp`
|
|
602
|
-
| `projscan mcp doctor`
|
|
603
|
-
| `projscan init policy`
|
|
604
|
-
| `projscan init team`
|
|
605
|
-
| `projscan init github-action` | GitHub Actions PR workflow that validates and posts projscan evidence comments, then fails only on preflight blocks
|
|
606
|
-
| `projscan recipes`
|
|
607
|
-
| `projscan workplan`
|
|
608
|
-
| `projscan bug-hunt`
|
|
609
|
-
| `projscan agent-brief`
|
|
610
|
-
| `projscan quality-scorecard`
|
|
611
|
-
| `projscan understand`
|
|
612
|
-
| `projscan release-train`
|
|
613
|
-
| `projscan evidence-pack`
|
|
614
|
-
| `projscan trial`
|
|
615
|
-
| `projscan feedback`
|
|
616
|
-
| `projscan privacy-check`
|
|
617
|
-
| `projscan telemetry`
|
|
618
|
-
| `projscan dogfood`
|
|
619
|
-
| `projscan regression-plan`
|
|
620
|
-
| `projscan handoff`
|
|
621
|
-
| `projscan doctor`
|
|
622
|
-
| `projscan preflight`
|
|
623
|
-
| `projscan hotspots`
|
|
624
|
-
| `projscan semantic-graph`
|
|
625
|
-
| `projscan dataflow`
|
|
626
|
-
| `projscan search <query>`
|
|
627
|
-
| `projscan file <path>`
|
|
628
|
-
| `projscan fix`
|
|
629
|
-
| `projscan ci`
|
|
630
|
-
| `projscan diff`
|
|
631
|
-
| `projscan diagram`
|
|
632
|
-
| `projscan structure`
|
|
633
|
-
| `projscan dependencies`
|
|
634
|
-
| `projscan outdated`
|
|
635
|
-
| `projscan audit`
|
|
636
|
-
| `projscan upgrade <pkg>`
|
|
637
|
-
| `projscan coverage`
|
|
638
|
-
| `projscan badge`
|
|
639
|
-
| `projscan init`
|
|
640
|
-
| `projscan install-hook`
|
|
641
|
-
| `projscan workspace`
|
|
642
|
-
| `projscan apply-fix <id>`
|
|
643
|
-
| `projscan taint`
|
|
644
|
-
| `projscan plugin`
|
|
645
|
-
| `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, …) |
|
|
646
656
|
|
|
647
657
|
To see all commands and options, run:
|
|
648
658
|
|
|
@@ -714,65 +724,65 @@ Reporter plugins are intentionally CLI-only. MCP tools keep returning structured
|
|
|
714
724
|
|
|
715
725
|
### Options
|
|
716
726
|
|
|
717
|
-
| Flag
|
|
718
|
-
|
|
719
|
-
| `--format <type>`
|
|
720
|
-
| `--config <path>`
|
|
721
|
-
| `--include-ignored`
|
|
722
|
-
| `--scan-env-values`
|
|
723
|
-
| `--offline`
|
|
724
|
-
| `--shortcuts`
|
|
725
|
-
| `--shortcuts-json`
|
|
726
|
-
| `--handoff-prompt`
|
|
727
|
-
| `--next-command`
|
|
728
|
-
| `--next-tool-call`
|
|
729
|
-
| `--ready-tool-calls`
|
|
730
|
-
| `--proof-commands`
|
|
731
|
-
| `--checklist`
|
|
732
|
-
| `--resume-json`
|
|
733
|
-
| `--handoff-json`
|
|
734
|
-
| `--mission-script`
|
|
735
|
-
| `--save-mission <dir>`
|
|
736
|
-
| `--mission <dir>`
|
|
737
|
-
| `--list`
|
|
738
|
-
| `--needs-attention`
|
|
739
|
-
| `--mission-status <status>`
|
|
740
|
-
| `--latest`
|
|
741
|
-
| `--all`
|
|
742
|
-
| `--baseline <path>`
|
|
743
|
-
| `--init-baseline <file>`
|
|
744
|
-
| `--add-baseline-run <file>`
|
|
745
|
-
| `--check-baseline <file>`
|
|
746
|
-
| `--id <id>` / `--status <status>`
|
|
747
|
-
| `--minutes-spent`, `--reruns`, `--failed-gates`, `--reviewer-approvals` | Numeric fields for `--add-baseline-run` (`mission-proof`)
|
|
748
|
-
| `--write <file>`
|
|
749
|
-
| `--require-passed`
|
|
750
|
-
| `--summary`
|
|
751
|
-
| `--task-card`
|
|
752
|
-
| `--review-gate`
|
|
753
|
-
| `--review-gate-json`
|
|
754
|
-
| `--review-policy`
|
|
755
|
-
| `--review-replies`
|
|
756
|
-
| `--runbook`
|
|
757
|
-
| `--changed-only`
|
|
758
|
-
| `--base-ref <ref>`
|
|
759
|
-
| `--reporter <name>`
|
|
760
|
-
| `--verbose`
|
|
761
|
-
| `--quiet`
|
|
762
|
-
| `-V, --version`
|
|
763
|
-
| `-h, --help`
|
|
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 |
|
|
764
774
|
|
|
765
775
|
## Health Score
|
|
766
776
|
|
|
767
777
|
Every `projscan doctor` run calculates a health score (0–100) and letter grade:
|
|
768
778
|
|
|
769
|
-
| Grade | Score
|
|
770
|
-
|
|
771
|
-
| A
|
|
772
|
-
| B
|
|
773
|
-
| C
|
|
774
|
-
| D
|
|
775
|
-
| 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 |
|
|
776
786
|
|
|
777
787
|
Generate a badge for your README:
|
|
778
788
|
|
|
@@ -831,10 +841,10 @@ Cache version bumped 2 → 3 in 0.11 (CC stored per file). Existing v2 caches ar
|
|
|
831
841
|
|
|
832
842
|
Reference numbers from `npm run bench` on an Apple M3 Pro running Node 25 (cold / warm cache, milliseconds), refreshed for 1.5.0:
|
|
833
843
|
|
|
834
|
-
| Repo
|
|
835
|
-
|
|
836
|
-
| projscan itself
|
|
837
|
-
| 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 |
|
|
838
848
|
|
|
839
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`.
|
|
840
850
|
|
|
@@ -844,19 +854,19 @@ Run `npm run bench` against your own machine to recalibrate.
|
|
|
844
854
|
- **14 runtime dependencies** — still minimal
|
|
845
855
|
- **~21 MB of vendored tree-sitter grammars**, broken down:
|
|
846
856
|
|
|
847
|
-
| Grammar
|
|
848
|
-
|
|
849
|
-
| `web-tree-sitter`
|
|
850
|
-
| `tree-sitter-python`
|
|
851
|
-
| `tree-sitter-go`
|
|
852
|
-
| `tree-sitter-java`
|
|
853
|
-
| `tree-sitter-ruby`
|
|
854
|
-
| `tree-sitter-rust`
|
|
855
|
-
| `tree-sitter-php`
|
|
856
|
-
| `tree-sitter-c-sharp` | ~5.2 MB | C#
|
|
857
|
-
| `tree-sitter-cpp`
|
|
858
|
-
| `tree-sitter-kotlin`
|
|
859
|
-
| `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 |
|
|
860
870
|
|
|
861
871
|
JavaScript and TypeScript use the bundled `@babel/parser` instead of a tree-sitter grammar, so they don't appear in this table.
|
|
862
872
|
|
|
@@ -887,16 +897,16 @@ projscan reads your source code so it can be useful; it does not send your sourc
|
|
|
887
897
|
|
|
888
898
|
### What projscan DOES do, and what it costs
|
|
889
899
|
|
|
890
|
-
| Action
|
|
891
|
-
|
|
892
|
-
| Read source files
|
|
893
|
-
| Spawn `git`
|
|
894
|
-
| Spawn `npm audit`
|
|
895
|
-
| Scan supply-chain IOCs | `doctor`, `preflight`, release validation
|
|
896
|
-
| Anonymous telemetry
|
|
897
|
-
| Load local plugins
|
|
898
|
-
| Load wasm grammars
|
|
899
|
-
| 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 |
|
|
900
910
|
|
|
901
911
|
### Patterns supply-chain scanners flag, and why they're benign here
|
|
902
912
|
|
|
@@ -925,13 +935,13 @@ projscan runs against itself in CI on every PR. The dogfood loop is the most dir
|
|
|
925
935
|
|
|
926
936
|
Current state of the projscan codebase as scored by projscan itself:
|
|
927
937
|
|
|
928
|
-
| Metric
|
|
929
|
-
|
|
930
|
-
| Health score
|
|
931
|
-
| Open issues
|
|
932
|
-
| Circular imports
|
|
933
|
-
| Top hotspot
|
|
934
|
-
| 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) |
|
|
935
945
|
|
|
936
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.
|
|
937
947
|
|
|
@@ -976,14 +986,14 @@ on:
|
|
|
976
986
|
|
|
977
987
|
permissions:
|
|
978
988
|
contents: read
|
|
979
|
-
security-events: write
|
|
989
|
+
security-events: write # required for SARIF upload
|
|
980
990
|
|
|
981
991
|
jobs:
|
|
982
992
|
scan:
|
|
983
993
|
runs-on: ubuntu-latest
|
|
984
994
|
steps:
|
|
985
995
|
- uses: actions/checkout@v4
|
|
986
|
-
with: { fetch-depth: 0 }
|
|
996
|
+
with: { fetch-depth: 0 } # needed for --changed-only
|
|
987
997
|
- uses: actions/setup-node@v4
|
|
988
998
|
with: { node-version: 20 }
|
|
989
999
|
- uses: abhiyoheswaran1/projscan@v1
|
|
@@ -1036,7 +1046,7 @@ Fields:
|
|
|
1036
1046
|
- `disableRules` - silence rules by id; supports wildcard `prefix-*`
|
|
1037
1047
|
- `severityOverrides` - remap a rule's severity (`info` / `warning` / `error`)
|
|
1038
1048
|
- `hotspots.limit` / `hotspots.since` - defaults for the `hotspots` command
|
|
1039
|
-
- `monorepo.importPolicy` - cross-package import allow/deny rules in monorepos
|
|
1049
|
+
- `monorepo.importPolicy` - cross-package import allow/deny rules in monorepos _(0.14+)_
|
|
1040
1050
|
|
|
1041
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).
|
|
1042
1052
|
|
|
@@ -1142,7 +1152,7 @@ Coverage is also automatically joined into `projscan hotspots` when one of those
|
|
|
1142
1152
|
|
|
1143
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">
|
|
1144
1154
|
|
|
1145
|
-
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.
|
|
1146
1156
|
|
|
1147
1157
|
### Claude Code
|
|
1148
1158
|
|
|
@@ -1267,88 +1277,95 @@ Capability is advertised under `experimental.fileChanged` on `initialize` so cli
|
|
|
1267
1277
|
|
|
1268
1278
|
### What agents can ask
|
|
1269
1279
|
|
|
1270
|
-
-
|
|
1271
|
-
-
|
|
1272
|
-
-
|
|
1273
|
-
-
|
|
1274
|
-
-
|
|
1275
|
-
-
|
|
1276
|
-
-
|
|
1277
|
-
-
|
|
1278
|
-
-
|
|
1279
|
-
-
|
|
1280
|
-
-
|
|
1281
|
-
-
|
|
1282
|
-
-
|
|
1283
|
-
-
|
|
1284
|
-
-
|
|
1285
|
-
-
|
|
1286
|
-
-
|
|
1287
|
-
-
|
|
1288
|
-
-
|
|
1289
|
-
-
|
|
1290
|
-
-
|
|
1291
|
-
-
|
|
1292
|
-
-
|
|
1293
|
-
-
|
|
1294
|
-
-
|
|
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" }`
|
|
1295
1305
|
|
|
1296
1306
|
### The 45 MCP tools
|
|
1297
1307
|
|
|
1298
1308
|
**Structural (0.6.0 / 0.11 / 0.13 / 0.14 / 0.15 - agent-native):**
|
|
1299
|
-
|
|
1300
|
-
- **`
|
|
1301
|
-
- **`
|
|
1302
|
-
- **`
|
|
1303
|
-
- **`
|
|
1304
|
-
- **`
|
|
1305
|
-
- **`
|
|
1306
|
-
- **`
|
|
1307
|
-
- **`
|
|
1308
|
-
- **`
|
|
1309
|
-
- **`
|
|
1310
|
-
- **`
|
|
1311
|
-
- **`
|
|
1312
|
-
- **`
|
|
1313
|
-
- **`
|
|
1314
|
-
- **`
|
|
1315
|
-
- **`
|
|
1316
|
-
- **`
|
|
1317
|
-
- **`
|
|
1318
|
-
- **`
|
|
1319
|
-
- **`
|
|
1320
|
-
- **`
|
|
1321
|
-
- **`
|
|
1322
|
-
- **`
|
|
1323
|
-
- **`
|
|
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`.
|
|
1324
1335
|
|
|
1325
1336
|
**Analysis:**
|
|
1337
|
+
|
|
1326
1338
|
- `projscan_analyze` - full project report
|
|
1327
1339
|
- `projscan_doctor` - health score + issues (now includes `cycle-detected-N` for circular imports as of 0.13)
|
|
1328
|
-
- `projscan_hotspots` - risk-ranked files (churn × **AST cyclomatic complexity** × issues × ownership × coverage; falls back to LOC for non-AST languages). Pass `view: "functions"`
|
|
1329
|
-
- `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)_
|
|
1330
1342
|
- `projscan_structure` - directory tree
|
|
1331
1343
|
- `projscan_coverage` - scariest untested files (coverage × hotspots)
|
|
1332
1344
|
|
|
1333
1345
|
**Dependencies:**
|
|
1334
|
-
|
|
1346
|
+
|
|
1347
|
+
- `projscan_dependencies` - declared deps, risks. In a monorepo: aggregated totals + `byWorkspace` breakdown; `package` arg scopes to one _(0.13)_.
|
|
1335
1348
|
- `projscan_outdated` - declared-vs-installed drift (offline). Per-package `byWorkspace`; `package` arg.
|
|
1336
|
-
- `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)_.
|
|
1337
1350
|
- `projscan_upgrade` - upgrade preview (CHANGELOG + importers, offline)
|
|
1338
1351
|
|
|
1339
1352
|
**Workspace (0.11):**
|
|
1353
|
+
|
|
1340
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.
|
|
1341
1355
|
|
|
1342
1356
|
**Session (1.4):**
|
|
1343
|
-
|
|
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.
|
|
1344
1359
|
|
|
1345
1360
|
**Memory (1.5):**
|
|
1346
|
-
|
|
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.
|
|
1347
1363
|
|
|
1348
1364
|
**Operator (1.6):**
|
|
1349
|
-
|
|
1350
|
-
- **`
|
|
1351
|
-
- **`
|
|
1365
|
+
|
|
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.
|
|
1352
1369
|
|
|
1353
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).
|
|
1354
1371
|
|
|
@@ -1362,7 +1379,7 @@ Analyzer plugins can optionally read graph/dataflow context through `check(rootP
|
|
|
1362
1379
|
|
|
1363
1380
|
### Semantic search (0.9.0+, opt-in)
|
|
1364
1381
|
|
|
1365
|
-
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:
|
|
1366
1383
|
|
|
1367
1384
|
```bash
|
|
1368
1385
|
npm install @xenova/transformers
|
|
@@ -1370,11 +1387,16 @@ projscan search "verifying user credentials" --mode semantic
|
|
|
1370
1387
|
```
|
|
1371
1388
|
|
|
1372
1389
|
Or via the MCP tool:
|
|
1390
|
+
|
|
1373
1391
|
```json
|
|
1374
|
-
{
|
|
1392
|
+
{
|
|
1393
|
+
"name": "projscan_search",
|
|
1394
|
+
"arguments": { "query": "verifying user credentials", "mode": "semantic" }
|
|
1395
|
+
}
|
|
1375
1396
|
```
|
|
1376
1397
|
|
|
1377
1398
|
Modes on `projscan_search`:
|
|
1399
|
+
|
|
1378
1400
|
- `lexical` (default) - BM25 over content + symbol + path boosts. No peer needed.
|
|
1379
1401
|
- `semantic` - cosine similarity on `Xenova/all-MiniLM-L6-v2` embeddings. Requires peer.
|
|
1380
1402
|
- `hybrid` - both, fused via Reciprocal Rank Fusion. Requires peer.
|
|
@@ -1396,14 +1418,16 @@ All opt-in - default behavior is unchanged.
|
|
|
1396
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.
|
|
1397
1419
|
|
|
1398
1420
|
### Prompts (6, parameterized with live project data)
|
|
1421
|
+
|
|
1399
1422
|
- `prioritize_refactoring` - ranked plan grounded in current hotspots
|
|
1400
1423
|
- `investigate_file` - senior-engineer brief for a specific file
|
|
1401
|
-
- **`refactor_hotspot`**
|
|
1402
|
-
- **`triage_doctor_issues`**
|
|
1403
|
-
- **`review_this_pr`**
|
|
1404
|
-
- **`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
|
|
1405
1428
|
|
|
1406
1429
|
### Resources (3, readable on demand)
|
|
1430
|
+
|
|
1407
1431
|
- `projscan://health` · `projscan://hotspots` · `projscan://structure`
|
|
1408
1432
|
|
|
1409
1433
|
## Use Cases
|