projscan 3.0.3 → 3.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +54 -27
  2. package/dist/cli/commands/dogfood.d.ts +1 -0
  3. package/dist/cli/commands/dogfood.js +62 -0
  4. package/dist/cli/commands/dogfood.js.map +1 -0
  5. package/dist/cli/commands/evidencePack.js +6 -0
  6. package/dist/cli/commands/evidencePack.js.map +1 -1
  7. package/dist/cli/commands/init.js +143 -1
  8. package/dist/cli/commands/init.js.map +1 -1
  9. package/dist/cli/commands/mcp.js +67 -3
  10. package/dist/cli/commands/mcp.js.map +1 -1
  11. package/dist/cli/commands/start.d.ts +1 -0
  12. package/dist/cli/commands/start.js +86 -0
  13. package/dist/cli/commands/start.js.map +1 -0
  14. package/dist/cli/commands/workplan.js +17 -11
  15. package/dist/cli/commands/workplan.js.map +1 -1
  16. package/dist/cli/index.js +4 -0
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/core/adoption.d.ts +86 -0
  19. package/dist/core/adoption.js +463 -0
  20. package/dist/core/adoption.js.map +1 -1
  21. package/dist/core/ast.d.ts +6 -0
  22. package/dist/core/ast.js +59 -11
  23. package/dist/core/ast.js.map +1 -1
  24. package/dist/core/bugHunt.js +19 -7
  25. package/dist/core/bugHunt.js.map +1 -1
  26. package/dist/core/dataflow.js +98 -9
  27. package/dist/core/dataflow.js.map +1 -1
  28. package/dist/core/dogfood.d.ts +6 -0
  29. package/dist/core/dogfood.js +116 -0
  30. package/dist/core/dogfood.js.map +1 -0
  31. package/dist/core/fixFirst.d.ts +8 -0
  32. package/dist/core/fixFirst.js +109 -0
  33. package/dist/core/fixFirst.js.map +1 -0
  34. package/dist/core/frameworkSources.d.ts +3 -1
  35. package/dist/core/frameworkSources.js +44 -3
  36. package/dist/core/frameworkSources.js.map +1 -1
  37. package/dist/core/indexCache.js +5 -1
  38. package/dist/core/indexCache.js.map +1 -1
  39. package/dist/core/preflight.js +32 -7
  40. package/dist/core/preflight.js.map +1 -1
  41. package/dist/core/qualityScorecard.js +5 -1
  42. package/dist/core/qualityScorecard.js.map +1 -1
  43. package/dist/core/releaseEvidence.d.ts +6 -1
  44. package/dist/core/releaseEvidence.js +478 -10
  45. package/dist/core/releaseEvidence.js.map +1 -1
  46. package/dist/core/start.d.ts +8 -0
  47. package/dist/core/start.js +193 -0
  48. package/dist/core/start.js.map +1 -0
  49. package/dist/core/taint.js +89 -9
  50. package/dist/core/taint.js.map +1 -1
  51. package/dist/core/workplan.d.ts +2 -1
  52. package/dist/core/workplan.js +80 -3
  53. package/dist/core/workplan.js.map +1 -1
  54. package/dist/index.d.ts +7 -5
  55. package/dist/index.js +5 -3
  56. package/dist/index.js.map +1 -1
  57. package/dist/mcp/tools/adoption.js +7 -3
  58. package/dist/mcp/tools/adoption.js.map +1 -1
  59. package/dist/mcp/tools/evidencePack.js +5 -0
  60. package/dist/mcp/tools/evidencePack.js.map +1 -1
  61. package/dist/mcp/tools/start.d.ts +2 -0
  62. package/dist/mcp/tools/start.js +58 -0
  63. package/dist/mcp/tools/start.js.map +1 -0
  64. package/dist/mcp/tools.js +2 -0
  65. package/dist/mcp/tools.js.map +1 -1
  66. package/dist/projscan-sbom.cdx.json +6 -6
  67. package/dist/tool-manifest.json +48 -5
  68. package/dist/types.d.ts +188 -0
  69. package/dist/utils/baseline.js +62 -1
  70. package/dist/utils/baseline.js.map +1 -1
  71. package/dist/utils/formatSupport.d.ts +6 -0
  72. package/dist/utils/formatSupport.js +6 -0
  73. package/dist/utils/formatSupport.js.map +1 -1
  74. package/docs/PLUGIN-GALLERY.md +25 -0
  75. package/docs/examples/plugins/api-route-ownership.mjs +60 -0
  76. package/docs/examples/plugins/api-route-ownership.projscan-plugin.json +8 -0
  77. package/docs/examples/plugins/monorepo-boundary.mjs +37 -0
  78. package/docs/examples/plugins/monorepo-boundary.projscan-plugin.json +8 -0
  79. package/docs/examples/plugins/security-sensitive-files.mjs +18 -0
  80. package/docs/examples/plugins/security-sensitive-files.projscan-plugin.json +8 -0
  81. package/package.json +2 -2
package/dist/index.d.ts CHANGED
@@ -34,15 +34,17 @@ export { computeReview } from './core/review.js';
34
34
  export { buildSemanticGraph } from './core/semanticGraph.js';
35
35
  export { computeDataflow, type DataflowOptions } from './core/dataflow.js';
36
36
  export { computeGraphCorpus } from './core/graphCorpus.js';
37
- export { computeWorkplan } from './core/workplan.js';
37
+ export { buildWorkplanHandoff, computeWorkplan } from './core/workplan.js';
38
38
  export { computeReleaseTrain } from './core/releaseTrain.js';
39
39
  export { computeBugHunt } from './core/bugHunt.js';
40
- export { computeEvidencePack } from './core/releaseEvidence.js';
40
+ export { computeEvidencePack, renderEvidencePackPrComment, validateEvidencePackPrComment } from './core/releaseEvidence.js';
41
41
  export { computeRegressionPlan } from './core/regressionPlan.js';
42
42
  export { computeAgentBrief } from './core/agentBrief.js';
43
43
  export { computeQualityScorecard } from './core/qualityScorecard.js';
44
- export { computeFirstRunDiagnostics, getMcpConfigGuide, getWorkflowRecipes } from './core/adoption.js';
45
- export type { AgentWorkflowRecipe, FirstRunDiagnostic, FirstRunReport, McpConfigCatalog, McpConfigGuide, McpClientId, WorkflowRecipeCatalog, } from './core/adoption.js';
44
+ export { computeStartReport } from './core/start.js';
45
+ export { computeDogfoodReport } from './core/dogfood.js';
46
+ export { computeFirstRunDiagnostics, computeMcpSetupDoctor, getGithubActionStarter, getMcpConfigGuide, getPolicyStarterKit, getWorkflowRecipes, isPolicyStarterTeam, writeGithubActionStarter, writePolicyStarterKit, writeTeamStarterKit, } from './core/adoption.js';
47
+ export type { AgentWorkflowRecipe, FirstRunDiagnostic, FirstRunReport, McpConfigCatalog, McpConfigGuide, McpClientId, McpSetupDoctorCheck, McpSetupDoctorReport, TeamStarterKit, TeamOnboardingStep, WorkflowRecipeCatalog, GithubActionStarter, PolicyStarterKit, PolicyStarterTeam, WriteGithubActionStarterResult, WritePolicyStarterResult, } from './core/adoption.js';
46
48
  export { suggestFixForIssue, previewSuggestionForIssue, syntheticIssue, findIssue } from './core/fixSuggest.js';
47
49
  export { explainIssue } from './core/explainIssue.js';
48
50
  export { computeImpact } from './core/impact.js';
@@ -54,4 +56,4 @@ export { getPromptDefinitions } from './mcp/prompts.js';
54
56
  export { getResourceDefinitions } from './mcp/resources.js';
55
57
  export { BUILTIN_LANGUAGE_IDS } from './core/languages/LanguageAdapter.js';
56
58
  export type { BuiltinLanguageId, LanguageId, LanguageAdapter } from './core/languages/LanguageAdapter.js';
57
- export type { ScanResult, FileEntry, DirectoryNode, LanguageBreakdown, LanguageStat, FrameworkResult, DetectedFramework, DependencyReport, DependencyRisk, Issue, IssueLocation, IssueSeverity, Fix, FixResult, FileExplanation, FileInspection, FunctionDetail, ImportInfo, ExportInfo, ArchitectureLayer, AnalysisReport, AgentBriefGuardrail, AgentBriefIntent, AgentBriefItem, AgentBriefReport, ReportFormat, FileHotspot, HotspotReport, AuthorShare, BaselineHotspot, HotspotDelta, HotspotDiffSummary, McpToolDefinition, McpPromptDefinition, McpResourceDefinition, ProjscanConfig, LoadedConfig, SemverDrift, OutdatedPackage, OutdatedReport, AuditSeverity, AuditFinding, AuditReport, UpgradePreview, CoverageSource, FileCoverage, CoverageReport, CoverageJoinedHotspot, CoverageJoinedReport, ReviewReport, ReviewFile, ReviewCycle, ReviewDataflowRisk, ReviewFunction, ReviewDependencyChange, FixSuggestion, IssueExplanation, ImportPolicyRule, ImpactReport, ImpactNode, GraphCorpusFixtureMetrics, GraphCorpusReport, DataflowReport, DataflowRisk, DataflowRiskConfidence, DataflowRiskKind, DataflowRiskSeverity, SemanticGraphEdge, SemanticGraphEdgeKind, SemanticGraphNode, SemanticGraphNodeKind, SemanticGraphReport, BugHuntFinding, BugHuntReport, BugHuntVerdict, EvidencePackArtifact, EvidencePackArtifactStatus, EvidencePackReport, EvidencePackVerdict, RegressionPlanLevel, RegressionPlanReport, RegressionPlanTarget, RegressionPlanVerdict, QualityScorecardDimension, QualityScorecardReport, QualityScorecardRisk, QualityScorecardStatus, QualityScorecardVerdict, ReleaseTrainReport, ReleaseTrainTask, ReleaseTrainTrack, WorkplanCoordination, WorkplanEvidence, WorkplanMode, WorkplanPriority, WorkplanReport, WorkplanTask, WorkplanTopRisk, WorkplanVerification, } from './types.js';
59
+ export type { ScanResult, FileEntry, DirectoryNode, LanguageBreakdown, LanguageStat, FrameworkResult, DetectedFramework, DependencyReport, DependencyRisk, Issue, IssueLocation, IssueSeverity, Fix, FixResult, FileExplanation, FileInspection, FunctionDetail, ImportInfo, ExportInfo, ArchitectureLayer, AnalysisReport, AgentBriefGuardrail, AgentBriefIntent, AgentBriefItem, AgentBriefReport, ReportFormat, FileHotspot, HotspotReport, AuthorShare, BaselineHotspot, HotspotDelta, HotspotDiffSummary, McpToolDefinition, McpPromptDefinition, McpResourceDefinition, ProjscanConfig, LoadedConfig, SemverDrift, OutdatedPackage, OutdatedReport, AuditSeverity, AuditFinding, AuditReport, UpgradePreview, CoverageSource, FileCoverage, CoverageReport, CoverageJoinedHotspot, CoverageJoinedReport, ReviewReport, ReviewFile, ReviewCycle, ReviewDataflowRisk, ReviewFunction, ReviewDependencyChange, FixSuggestion, IssueExplanation, ImportPolicyRule, ImpactReport, ImpactNode, GraphCorpusFixtureMetrics, GraphCorpusReport, DataflowReport, DataflowRisk, DataflowRiskConfidence, DataflowRiskKind, DataflowRiskSeverity, SemanticGraphEdge, SemanticGraphEdgeKind, SemanticGraphNode, SemanticGraphNodeKind, SemanticGraphReport, BugHuntFinding, BugHuntReport, BugHuntVerdict, EvidencePackArtifact, EvidencePackArtifactStatus, EvidencePackPrCommentValidation, EvidencePackPrCommentValidationCheck, EvidencePackReport, EvidencePackTrustCalibration, EvidencePackVerdict, RegressionPlanLevel, RegressionPlanReport, RegressionPlanTarget, RegressionPlanVerdict, QualityScorecardDimension, QualityScorecardReport, QualityScorecardRisk, QualityScorecardStatus, QualityScorecardVerdict, StartAdoptionGap, StartAdoptionLoop, StartAdoptionLoopMetric, StartReport, StartRisk, StartWorkflowRecommendation, DogfoodReport, DogfoodRepoResult, DogfoodRepoStatus, ReleaseTrainReport, ReleaseTrainTask, ReleaseTrainTrack, WorkplanCoordination, WorkplanHandoffPayload, WorkplanEvidence, WorkplanMode, WorkplanPriority, WorkplanReport, WorkplanTask, WorkplanTopRisk, WorkplanVerification, } from './types.js';
package/dist/index.js CHANGED
@@ -32,14 +32,16 @@ export { computeReview } from './core/review.js';
32
32
  export { buildSemanticGraph } from './core/semanticGraph.js';
33
33
  export { computeDataflow } from './core/dataflow.js';
34
34
  export { computeGraphCorpus } from './core/graphCorpus.js';
35
- export { computeWorkplan } from './core/workplan.js';
35
+ export { buildWorkplanHandoff, computeWorkplan } from './core/workplan.js';
36
36
  export { computeReleaseTrain } from './core/releaseTrain.js';
37
37
  export { computeBugHunt } from './core/bugHunt.js';
38
- export { computeEvidencePack } from './core/releaseEvidence.js';
38
+ export { computeEvidencePack, renderEvidencePackPrComment, validateEvidencePackPrComment } from './core/releaseEvidence.js';
39
39
  export { computeRegressionPlan } from './core/regressionPlan.js';
40
40
  export { computeAgentBrief } from './core/agentBrief.js';
41
41
  export { computeQualityScorecard } from './core/qualityScorecard.js';
42
- export { computeFirstRunDiagnostics, getMcpConfigGuide, getWorkflowRecipes } from './core/adoption.js';
42
+ export { computeStartReport } from './core/start.js';
43
+ export { computeDogfoodReport } from './core/dogfood.js';
44
+ export { computeFirstRunDiagnostics, computeMcpSetupDoctor, getGithubActionStarter, getMcpConfigGuide, getPolicyStarterKit, getWorkflowRecipes, isPolicyStarterTeam, writeGithubActionStarter, writePolicyStarterKit, writeTeamStarterKit, } from './core/adoption.js';
43
45
  export { suggestFixForIssue, previewSuggestionForIssue, syntheticIssue, findIssue } from './core/fixSuggest.js';
44
46
  export { explainIssue } from './core/explainIssue.js';
45
47
  export { computeImpact } from './core/impact.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { computeFirstRunDiagnostics, getMcpConfigGuide, getWorkflowRecipes, isMcpClientId, } from '../../core/adoption.js';
1
+ import { computeFirstRunDiagnostics, computeMcpSetupDoctor, getMcpConfigGuide, getWorkflowRecipes, isMcpClientId, } from '../../core/adoption.js';
2
2
  export const adoptionTool = {
3
3
  name: 'projscan_adoption',
4
4
  description: 'Adoption helper for new projscan users and agents. Returns ready-to-paste MCP client configs, workflow recipes, or first-run diagnostics without mutating the repo.',
@@ -7,12 +7,12 @@ export const adoptionTool = {
7
7
  properties: {
8
8
  action: {
9
9
  type: 'string',
10
- enum: ['mcp_config', 'recipes', 'first_run'],
10
+ enum: ['mcp_config', 'recipes', 'first_run', 'mcp_doctor'],
11
11
  description: 'What to return. mcp_config returns client snippets, recipes returns agent workflow recipes, first_run checks setup diagnostics. Default: recipes.',
12
12
  },
13
13
  client: {
14
14
  type: 'string',
15
- description: 'For action=mcp_config: all, claude-desktop, claude-code, cursor, codex, continue, windsurf, cline, zed, or gemini. Default: all.',
15
+ description: 'For action=mcp_config or action=mcp_doctor: all, claude-desktop, claude-code, cursor, codex, continue, windsurf, cline, zed, or gemini. Default: all.',
16
16
  },
17
17
  max_tokens: {
18
18
  type: 'number',
@@ -26,6 +26,10 @@ export const adoptionTool = {
26
26
  const client = isMcpClientId(args.client) ? args.client : 'all';
27
27
  return { config: getMcpConfigGuide(client) };
28
28
  }
29
+ if (action === 'mcp_doctor') {
30
+ const client = isMcpClientId(args.client) ? args.client : 'all';
31
+ return { mcpDoctor: await computeMcpSetupDoctor(rootPath, client) };
32
+ }
29
33
  if (action === 'first_run') {
30
34
  return { firstRun: await computeFirstRunDiagnostics(rootPath) };
31
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"adoption.js","sourceRoot":"","sources":["../../../src/mcp/tools/adoption.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAGhC,MAAM,CAAC,MAAM,YAAY,GAAY;IACnC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,qKAAqK;IACvK,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC;gBAC5C,WAAW,EACT,mJAAmJ;aACtJ;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,kIAAkI;aACrI;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+CAA+C;aAC7D;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;YAChE,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC;IAC3C,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"adoption.js","sourceRoot":"","sources":["../../../src/mcp/tools/adoption.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAGhC,MAAM,CAAC,MAAM,YAAY,GAAY;IACnC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,qKAAqK;IACvK,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC;gBAC1D,WAAW,EACT,mJAAmJ;aACtJ;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,uJAAuJ;aAC1J;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+CAA+C;aAC7D;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;YAChE,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;YAChE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QACtE,CAAC;QACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC;IAC3C,CAAC;CACF,CAAC"}
@@ -14,6 +14,10 @@ export const evidencePackTool = {
14
14
  type: 'boolean',
15
15
  description: 'Include website-update prompt text in the response.',
16
16
  },
17
+ pr_comment: {
18
+ type: 'boolean',
19
+ description: 'Include a concise GitHub PR comment markdown artifact in the response.',
20
+ },
17
21
  max_findings: {
18
22
  type: 'number',
19
23
  description: 'Maximum bug-hunt findings to include. Default: 10, max: 25.',
@@ -30,6 +34,7 @@ export const evidencePackTool = {
30
34
  ? args.lines.filter((line) => typeof line === 'string')
31
35
  : undefined,
32
36
  includeWebsitePrompt: args.website_prompt === true,
37
+ includePrComment: args.pr_comment === true,
33
38
  maxFindings: typeof args.max_findings === 'number' && Number.isFinite(args.max_findings)
34
39
  ? args.max_findings
35
40
  : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"evidencePack.js","sourceRoot":"","sources":["../../../src/mcp/tools/evidencePack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGpE,MAAM,CAAC,MAAM,gBAAgB,GAAY;IACvC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,iGAAiG;IACnG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,0DAA0D;aACxE;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,qDAAqD;aACnE;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6DAA6D;aAC3E;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+CAA+C;aAC7D;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClC,YAAY,EAAE,MAAM,mBAAmB,CAAC,QAAQ,EAAE;YAChD,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC9B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;gBACvE,CAAC,CAAC,SAAS;YACb,oBAAoB,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI;YAClD,WAAW,EACT,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;gBACzE,CAAC,CAAC,IAAI,CAAC,YAAY;gBACnB,CAAC,CAAC,SAAS;SAChB,CAAC;KACH,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"evidencePack.js","sourceRoot":"","sources":["../../../src/mcp/tools/evidencePack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGpE,MAAM,CAAC,MAAM,gBAAgB,GAAY;IACvC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,iGAAiG;IACnG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,0DAA0D;aACxE;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,qDAAqD;aACnE;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,wEAAwE;aACtF;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6DAA6D;aAC3E;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+CAA+C;aAC7D;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClC,YAAY,EAAE,MAAM,mBAAmB,CAAC,QAAQ,EAAE;YAChD,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC9B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;gBACvE,CAAC,CAAC,SAAS;YACb,oBAAoB,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI;YAClD,gBAAgB,EAAE,IAAI,CAAC,UAAU,KAAK,IAAI;YAC1C,WAAW,EACT,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;gBACzE,CAAC,CAAC,IAAI,CAAC,YAAY;gBACnB,CAAC,CAAC,SAAS;SAChB,CAAC;KACH,CAAC;CACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpTool } from './_shared.js';
2
+ export declare const startTool: McpTool;
@@ -0,0 +1,58 @@
1
+ import { computeStartReport } from '../../core/start.js';
2
+ import { isWorkplanMode } from '../../core/workplan.js';
3
+ const START_MODES = [
4
+ 'before_edit',
5
+ 'before_commit',
6
+ 'before_merge',
7
+ 'refactor',
8
+ 'release',
9
+ 'bug_hunt',
10
+ 'hardening',
11
+ ];
12
+ export const startTool = {
13
+ name: 'projscan_start',
14
+ description: 'First-60-seconds repo orientation for agents and developers. Composes setup diagnostics, workplan, quality scorecard, adoption gaps, top risks, and next commands into one read-only workflow recommendation.',
15
+ inputSchema: {
16
+ type: 'object',
17
+ properties: {
18
+ mode: {
19
+ type: 'string',
20
+ enum: START_MODES,
21
+ description: 'Workflow mode to orient around. Default: before_edit.',
22
+ },
23
+ max_tasks: {
24
+ type: 'number',
25
+ description: 'Maximum workplan tasks to inspect. Default: 5, max: 12.',
26
+ },
27
+ max_risks: {
28
+ type: 'number',
29
+ description: 'Maximum top risks to return. Default: 5, max: 12.',
30
+ },
31
+ include_handoff: {
32
+ type: 'boolean',
33
+ description: 'Include a compact handoff payload for the next agent.',
34
+ },
35
+ max_tokens: {
36
+ type: 'number',
37
+ description: 'Cap the response to roughly this many tokens.',
38
+ },
39
+ },
40
+ },
41
+ handler: async (args, rootPath) => ({
42
+ start: await computeStartReport(rootPath, {
43
+ mode: readMode(args.mode),
44
+ maxTasks: readNumber(args.max_tasks),
45
+ maxRisks: readNumber(args.max_risks),
46
+ includeHandoff: args.include_handoff === true,
47
+ }),
48
+ }),
49
+ };
50
+ function readMode(value) {
51
+ if (typeof value === 'string' && isWorkplanMode(value))
52
+ return value;
53
+ return 'before_edit';
54
+ }
55
+ function readNumber(value) {
56
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
57
+ }
58
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/mcp/tools/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAIxD,MAAM,WAAW,GAA4B;IAC3C,aAAa;IACb,eAAe;IACf,cAAc;IACd,UAAU;IACV,SAAS;IACT,UAAU;IACV,WAAW;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAY;IAChC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,+MAA+M;IACjN,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,uDAAuD;aACrE;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yDAAyD;aACvE;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mDAAmD;aACjE;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,uDAAuD;aACrE;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+CAA+C;aAC7D;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClC,KAAK,EAAE,MAAM,kBAAkB,CAAC,QAAQ,EAAE;YACxC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YACpC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YACpC,cAAc,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI;SAC9C,CAAC;KACH,CAAC;CACH,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC"}
package/dist/mcp/tools.js CHANGED
@@ -47,6 +47,7 @@ import { regressionPlanTool } from './tools/regressionPlan.js';
47
47
  import { agentBriefTool } from './tools/agentBrief.js';
48
48
  import { qualityScorecardTool } from './tools/qualityScorecard.js';
49
49
  import { adoptionTool } from './tools/adoption.js';
50
+ import { startTool } from './tools/start.js';
50
51
  const tools = [
51
52
  analyzeTool,
52
53
  doctorTool,
@@ -87,6 +88,7 @@ const tools = [
87
88
  agentBriefTool,
88
89
  qualityScorecardTool,
89
90
  adoptionTool,
91
+ startTool,
90
92
  ];
91
93
  export function getToolDefinitions() {
92
94
  return tools.map(({ name, description, inputSchema }) => ({ name, description, inputSchema }));
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMnD,MAAM,KAAK,GAAc;IACvB,WAAW;IACX,UAAU;IACV,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,YAAY;IACZ,SAAS;IACT,WAAW;IACX,YAAY;IACZ,SAAS;IACT,iBAAiB;IACjB,YAAY;IACZ,cAAc;IACd,UAAU;IACV,UAAU;IACV,cAAc;IACd,gBAAgB;IAChB,UAAU;IACV,UAAU;IACV,WAAW;IACX,UAAU;IACV,kBAAkB;IAClB,YAAY;IACZ,SAAS;IACT,YAAY;IACZ,eAAe;IACf,eAAe;IACf,UAAU;IACV,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,WAAW;IACX,gBAAgB;IAChB,kBAAkB;IAClB,cAAc;IACd,oBAAoB;IACpB,YAAY;CACb,CAAC;AAEF,MAAM,UAAU,kBAAkB;IAChC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,OAAO,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.5",
4
- "serialNumber": "urn:uuid:d0175b29-5bae-42dd-846b-ff89ac180c1b",
4
+ "serialNumber": "urn:uuid:393240fc-bbc5-4a20-8554-f9eb09eeeade",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2026-05-27T17:24:30.602Z",
7
+ "timestamp": "2026-05-30T15:00:35.686Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "projscan",
11
11
  "name": "projscan-sbom-generator",
12
- "version": "3.0.3"
12
+ "version": "3.0.5"
13
13
  }
14
14
  ],
15
15
  "component": {
16
16
  "type": "application",
17
- "bom-ref": "pkg:npm/projscan@3.0.3",
17
+ "bom-ref": "pkg:npm/projscan@3.0.5",
18
18
  "name": "projscan",
19
- "version": "3.0.3",
20
- "purl": "pkg:npm/projscan@3.0.3"
19
+ "version": "3.0.5",
20
+ "purl": "pkg:npm/projscan@3.0.5"
21
21
  }
22
22
  },
23
23
  "components": [
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "projscan",
3
- "version": "3.0.3",
3
+ "version": "3.0.5",
4
4
  "mcpProtocolVersion": "2025-03-26",
5
- "generatedAt": "2026-05-27T17:24:35.773Z",
6
- "toolCount": 39,
5
+ "generatedAt": "2026-05-30T15:00:40.929Z",
6
+ "toolCount": 40,
7
7
  "tools": [
8
8
  {
9
9
  "name": "projscan_analyze",
@@ -931,6 +931,10 @@
931
931
  "type": "boolean",
932
932
  "description": "Include website-update prompt text in the response."
933
933
  },
934
+ "pr_comment": {
935
+ "type": "boolean",
936
+ "description": "Include a concise GitHub PR comment markdown artifact in the response."
937
+ },
934
938
  "max_findings": {
935
939
  "type": "number",
936
940
  "description": "Maximum bug-hunt findings to include. Default: 10, max: 25."
@@ -1031,13 +1035,52 @@
1031
1035
  "enum": [
1032
1036
  "mcp_config",
1033
1037
  "recipes",
1034
- "first_run"
1038
+ "first_run",
1039
+ "mcp_doctor"
1035
1040
  ],
1036
1041
  "description": "What to return. mcp_config returns client snippets, recipes returns agent workflow recipes, first_run checks setup diagnostics. Default: recipes."
1037
1042
  },
1038
1043
  "client": {
1039
1044
  "type": "string",
1040
- "description": "For action=mcp_config: all, claude-desktop, claude-code, cursor, codex, continue, windsurf, cline, zed, or gemini. Default: all."
1045
+ "description": "For action=mcp_config or action=mcp_doctor: all, claude-desktop, claude-code, cursor, codex, continue, windsurf, cline, zed, or gemini. Default: all."
1046
+ },
1047
+ "max_tokens": {
1048
+ "type": "number",
1049
+ "description": "Cap the response to roughly this many tokens."
1050
+ }
1051
+ }
1052
+ }
1053
+ },
1054
+ {
1055
+ "name": "projscan_start",
1056
+ "description": "First-60-seconds repo orientation for agents and developers. Composes setup diagnostics, workplan, quality scorecard, adoption gaps, top risks, and next commands into one read-only workflow recommendation.",
1057
+ "inputSchema": {
1058
+ "type": "object",
1059
+ "properties": {
1060
+ "mode": {
1061
+ "type": "string",
1062
+ "enum": [
1063
+ "before_edit",
1064
+ "before_commit",
1065
+ "before_merge",
1066
+ "refactor",
1067
+ "release",
1068
+ "bug_hunt",
1069
+ "hardening"
1070
+ ],
1071
+ "description": "Workflow mode to orient around. Default: before_edit."
1072
+ },
1073
+ "max_tasks": {
1074
+ "type": "number",
1075
+ "description": "Maximum workplan tasks to inspect. Default: 5, max: 12."
1076
+ },
1077
+ "max_risks": {
1078
+ "type": "number",
1079
+ "description": "Maximum top risks to return. Default: 5, max: 12."
1080
+ },
1081
+ "include_handoff": {
1082
+ "type": "boolean",
1083
+ "description": "Include a compact handoff payload for the next agent."
1041
1084
  },
1042
1085
  "max_tokens": {
1043
1086
  "type": "number",
package/dist/types.d.ts CHANGED
@@ -311,6 +311,17 @@ export interface WorkplanVerification {
311
311
  commands: string[];
312
312
  expected: string;
313
313
  }
314
+ export interface FixFirstRecommendation {
315
+ id: string;
316
+ title: string;
317
+ source: string;
318
+ priority: WorkplanPriority;
319
+ whyFirst: string;
320
+ files: string[];
321
+ owner?: string;
322
+ commands: string[];
323
+ expected?: string;
324
+ }
314
325
  export interface WorkplanTask {
315
326
  id: string;
316
327
  priority: WorkplanPriority;
@@ -318,12 +329,14 @@ export interface WorkplanTask {
318
329
  why: string;
319
330
  evidence: WorkplanEvidence[];
320
331
  files: string[];
332
+ owner?: string;
321
333
  suggestedTools: string[];
322
334
  verification: WorkplanVerification;
323
335
  handoffText: string;
324
336
  }
325
337
  export interface WorkplanTopRisk extends WorkplanEvidence {
326
338
  priority: WorkplanPriority;
339
+ owner?: string;
327
340
  }
328
341
  export interface WorkplanCoordination {
329
342
  touchedFiles: string[];
@@ -337,6 +350,7 @@ export interface WorkplanReport {
337
350
  summary: string;
338
351
  topRisks: WorkplanTopRisk[];
339
352
  tasks: WorkplanTask[];
353
+ fixFirst?: FixFirstRecommendation;
340
354
  coordination: WorkplanCoordination;
341
355
  suggestedNextActions: PreflightSuggestedAction[];
342
356
  truncated?: boolean;
@@ -406,6 +420,7 @@ export interface BugHuntReport {
406
420
  };
407
421
  topSuspects: BugHuntFinding[];
408
422
  fixQueue: BugHuntFinding[];
423
+ fixFirst?: FixFirstRecommendation;
409
424
  verificationMatrix: Array<{
410
425
  command: string;
411
426
  reason: string;
@@ -423,6 +438,45 @@ export interface EvidencePackArtifact {
423
438
  evidence: string[];
424
439
  commands: string[];
425
440
  }
441
+ export interface EvidencePackTopRisk {
442
+ priority: WorkplanPriority;
443
+ title: string;
444
+ files: string[];
445
+ owner?: string;
446
+ command: string;
447
+ }
448
+ export interface EvidencePackTeamRoute {
449
+ owner: string;
450
+ files: string[];
451
+ reason: string;
452
+ }
453
+ export interface EvidencePackTrustCalibration {
454
+ verdict: 'clean' | 'manual_review' | 'actual_defect';
455
+ summary: string;
456
+ concreteBlockers: string[];
457
+ manualReviewSignals: string[];
458
+ watchSignals: string[];
459
+ }
460
+ export interface EvidencePackPrSummary {
461
+ verdictLabel: string;
462
+ decision: string;
463
+ trust: EvidencePackTrustCalibration;
464
+ topRisks: EvidencePackTopRisk[];
465
+ teamRoutes: EvidencePackTeamRoute[];
466
+ ownershipSuggestion?: string;
467
+ fixFirst?: FixFirstRecommendation;
468
+ nextCommands: string[];
469
+ baselineTrend?: BaselineTrend;
470
+ }
471
+ export interface EvidencePackPrCommentValidationCheck {
472
+ id: string;
473
+ status: 'pass' | 'warn' | 'fail';
474
+ summary: string;
475
+ }
476
+ export interface EvidencePackPrCommentValidation {
477
+ status: 'pass' | 'warn' | 'fail';
478
+ checks: EvidencePackPrCommentValidationCheck[];
479
+ }
426
480
  export interface EvidencePackReport {
427
481
  schemaVersion: 1;
428
482
  currentVersion: string | null;
@@ -441,6 +495,9 @@ export interface EvidencePackReport {
441
495
  artifacts: EvidencePackArtifact[];
442
496
  changelogEntries: string[];
443
497
  websitePrompt?: string;
498
+ prComment?: string;
499
+ prCommentValidation?: EvidencePackPrCommentValidation;
500
+ prSummary?: EvidencePackPrSummary;
444
501
  suggestedNextActions: PreflightSuggestedAction[];
445
502
  }
446
503
  export type RegressionPlanLevel = 'smoke' | 'focused' | 'full';
@@ -518,6 +575,115 @@ export interface AgentBriefReport {
518
575
  suggestedNextActions: PreflightSuggestedAction[];
519
576
  truncated?: boolean;
520
577
  }
578
+ export interface WorkplanHandoffPayload {
579
+ summary: string;
580
+ verdict: PreflightVerdict;
581
+ mode: WorkplanMode;
582
+ next: string[];
583
+ verificationCommands: string[];
584
+ coordination: WorkplanCoordination;
585
+ markdown: string;
586
+ }
587
+ export interface StartWorkflowRecommendation {
588
+ id: string;
589
+ name: string;
590
+ why: string;
591
+ commands: string[];
592
+ mcpTools: string[];
593
+ }
594
+ export interface StartRisk {
595
+ id: string;
596
+ priority: WorkplanPriority;
597
+ title: string;
598
+ source: string;
599
+ files: string[];
600
+ command: string;
601
+ }
602
+ export interface StartAdoptionGap {
603
+ id: string;
604
+ status: 'info' | 'warn' | 'fail';
605
+ title: string;
606
+ summary: string;
607
+ command?: string;
608
+ }
609
+ export interface StartAdoptionLoopMetric {
610
+ id: string;
611
+ label: string;
612
+ target: string;
613
+ command?: string;
614
+ }
615
+ export interface StartAdoptionLoop {
616
+ cadence: 'every_pr';
617
+ why: string;
618
+ metrics: StartAdoptionLoopMetric[];
619
+ nextCommands: string[];
620
+ }
621
+ export interface StartReport {
622
+ schemaVersion: 1;
623
+ readOnly: true;
624
+ rootPath: string;
625
+ mode: WorkplanMode;
626
+ summary: string;
627
+ setup: {
628
+ overall: 'pass' | 'warn' | 'fail' | 'info';
629
+ diagnostics: Array<{
630
+ id: string;
631
+ label: string;
632
+ status: 'pass' | 'warn' | 'fail' | 'info';
633
+ summary: string;
634
+ detail?: string;
635
+ command?: string;
636
+ }>;
637
+ };
638
+ recommendedWorkflow: StartWorkflowRecommendation;
639
+ evidence: {
640
+ workplanVerdict: PreflightVerdict;
641
+ workplanSummary: string;
642
+ qualityVerdict: QualityScorecardVerdict;
643
+ qualitySummary: string;
644
+ healthScore: number;
645
+ mcpReady: boolean;
646
+ };
647
+ topRisks: StartRisk[];
648
+ fixFirst?: FixFirstRecommendation;
649
+ adoptionGaps: StartAdoptionGap[];
650
+ adoptionLoop?: StartAdoptionLoop;
651
+ nextActions: PreflightSuggestedAction[];
652
+ handoff?: WorkplanHandoffPayload;
653
+ truncated?: boolean;
654
+ }
655
+ export type DogfoodRepoStatus = 'pass' | 'warn' | 'fail';
656
+ export interface DogfoodRepoResult {
657
+ path: string;
658
+ name: string;
659
+ status: DogfoodRepoStatus;
660
+ healthScore: number;
661
+ mcpReady: boolean;
662
+ prCommentReady: boolean;
663
+ repeatUseReady: boolean;
664
+ verdict: EvidencePackVerdict;
665
+ gaps: string[];
666
+ feedbackQuestions: string[];
667
+ nextCommands: string[];
668
+ }
669
+ export interface DogfoodReport {
670
+ schemaVersion: 1;
671
+ readOnly: true;
672
+ rootPath: string;
673
+ targetRepoCount: number;
674
+ summary: string;
675
+ repos: DogfoodRepoResult[];
676
+ totals: {
677
+ reposEvaluated: number;
678
+ passingRepos: number;
679
+ warningRepos: number;
680
+ failingRepos: number;
681
+ prCommentReady: number;
682
+ repeatUseReady: number;
683
+ mcpReady: number;
684
+ };
685
+ suggestedNextActions: PreflightSuggestedAction[];
686
+ }
521
687
  export interface GraphCorpusFixtureMetrics {
522
688
  name: string;
523
689
  fixture: string;
@@ -560,6 +726,7 @@ export interface QualityScorecardReport {
560
726
  health: HealthScore;
561
727
  dimensions: QualityScorecardDimension[];
562
728
  topRisks: QualityScorecardRisk[];
729
+ fixFirst?: FixFirstRecommendation;
563
730
  commands: string[];
564
731
  suggestedNextActions: PreflightSuggestedAction[];
565
732
  truncated?: boolean;
@@ -637,6 +804,7 @@ export interface Baseline {
637
804
  severity: IssueSeverity;
638
805
  }[];
639
806
  hotspots?: BaselineHotspot[];
807
+ issueRuleCounts?: Record<string, number>;
640
808
  timestamp: string;
641
809
  }
642
810
  export interface HotspotDelta {
@@ -651,6 +819,25 @@ export interface HotspotDiffSummary {
651
819
  appeared: HotspotDelta[];
652
820
  resolved: HotspotDelta[];
653
821
  }
822
+ export interface BaselineRecurringRule {
823
+ id: string;
824
+ before: number;
825
+ after: number;
826
+ }
827
+ export interface BaselineTrend {
828
+ scoreDirection: 'up' | 'down' | 'flat';
829
+ scoreDelta: number;
830
+ riskDirection?: 'up' | 'down' | 'flat';
831
+ riskDelta?: number;
832
+ qualityScoreBefore?: number;
833
+ qualityScoreAfter?: number;
834
+ newIssueCount?: number;
835
+ resolvedIssueCount?: number;
836
+ changedSinceBaseline?: string[];
837
+ newHotspots: string[];
838
+ recurringNoisyRules: BaselineRecurringRule[];
839
+ summary: string;
840
+ }
654
841
  export interface DiffResult {
655
842
  before: Baseline;
656
843
  after: Baseline;
@@ -658,6 +845,7 @@ export interface DiffResult {
658
845
  newIssues: string[];
659
846
  resolvedIssues: string[];
660
847
  hotspotDiff?: HotspotDiffSummary;
848
+ trend: BaselineTrend;
661
849
  }
662
850
  export type ReportFormat = 'console' | 'json' | 'markdown' | 'sarif' | 'html';
663
851
  export type SemverDrift = 'patch' | 'minor' | 'major' | 'same' | 'unknown';