projscan 4.7.0 → 4.8.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/README.md +22 -22
- package/dist/cli/commands/start.js +5 -28
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/startOptionsRegistration.d.ts +2 -0
- package/dist/cli/commands/startOptionsRegistration.js +29 -0
- package/dist/cli/commands/startOptionsRegistration.js.map +1 -0
- package/dist/core/ast.d.ts +2 -17
- package/dist/core/ast.js +4 -33
- package/dist/core/ast.js.map +1 -1
- package/dist/core/astResult.d.ts +20 -0
- package/dist/core/astResult.js +39 -0
- package/dist/core/astResult.js.map +1 -0
- package/dist/core/codeGraph.d.ts +1 -16
- package/dist/core/codeGraph.js +4 -89
- package/dist/core/codeGraph.js.map +1 -1
- package/dist/core/codeGraphAdapterContexts.d.ts +8 -0
- package/dist/core/codeGraphAdapterContexts.js +14 -0
- package/dist/core/codeGraphAdapterContexts.js.map +1 -0
- package/dist/core/codeGraphIncremental.d.ts +17 -0
- package/dist/core/codeGraphIncremental.js +64 -0
- package/dist/core/codeGraphIncremental.js.map +1 -0
- package/dist/core/collisionDetector.d.ts +1 -0
- package/dist/core/collisionDetector.js +3 -0
- package/dist/core/collisionDetector.js.map +1 -1
- package/dist/core/coordination.js +23 -5
- package/dist/core/coordination.js.map +1 -1
- package/dist/core/coordinationEvidence.d.ts +1 -0
- package/dist/core/coordinationEvidence.js.map +1 -1
- package/dist/core/frameworkExpressSources.js +6 -31
- package/dist/core/frameworkExpressSources.js.map +1 -1
- package/dist/core/frameworkFastifySources.js +5 -22
- package/dist/core/frameworkFastifySources.js.map +1 -1
- package/dist/core/frameworkHonoSources.js +5 -24
- package/dist/core/frameworkHonoSources.js.map +1 -1
- package/dist/core/frameworkKoaSources.js +5 -24
- package/dist/core/frameworkKoaSources.js.map +1 -1
- package/dist/core/frameworkSourceContext.d.ts +15 -0
- package/dist/core/frameworkSourceContext.js +2 -0
- package/dist/core/frameworkSourceContext.js.map +1 -0
- package/dist/core/frameworkSourceMatching.d.ts +6 -0
- package/dist/core/frameworkSourceMatching.js +29 -0
- package/dist/core/frameworkSourceMatching.js.map +1 -0
- package/dist/core/frameworkSourceResolvers.d.ts +2 -0
- package/dist/core/frameworkSourceResolvers.js +45 -0
- package/dist/core/frameworkSourceResolvers.js.map +1 -0
- package/dist/core/frameworkSources.d.ts +2 -14
- package/dist/core/frameworkSources.js +9 -38
- package/dist/core/frameworkSources.js.map +1 -1
- package/dist/core/frameworkSvelteKitSources.d.ts +2 -0
- package/dist/core/frameworkSvelteKitSources.js +118 -0
- package/dist/core/frameworkSvelteKitSources.js.map +1 -0
- package/dist/core/intentRouter.d.ts +1 -1
- package/dist/core/intentRouter.js +2 -8
- package/dist/core/intentRouter.js.map +1 -1
- package/dist/core/intentRouterCatalog.js +32 -0
- package/dist/core/intentRouterCatalog.js.map +1 -1
- package/dist/core/intentRouterKeywordToolGuards.js +5 -0
- package/dist/core/intentRouterKeywordToolGuards.js.map +1 -1
- package/dist/core/intentRouterKeywordWeights.js +23 -0
- package/dist/core/intentRouterKeywordWeights.js.map +1 -1
- package/dist/core/intentRouterReleaseSignals.js +3 -18
- package/dist/core/intentRouterReleaseSignals.js.map +1 -1
- package/dist/core/intentRouterResolution.d.ts +3 -0
- package/dist/core/intentRouterResolution.js +11 -0
- package/dist/core/intentRouterResolution.js.map +1 -0
- package/dist/core/languages/pythonManifests.js +6 -19
- package/dist/core/languages/pythonManifests.js.map +1 -1
- package/dist/core/languages/pythonPep508.js +1 -1
- package/dist/core/languages/pythonPep508.js.map +1 -1
- package/dist/core/languages/pythonProjectEvidence.js +4 -4
- package/dist/core/languages/pythonProjectEvidence.js.map +1 -1
- package/dist/core/languages/pythonPyproject.js +1 -1
- package/dist/core/languages/pythonPyproject.js.map +1 -1
- package/dist/core/languages/pythonPyprojectEvidence.d.ts +7 -0
- package/dist/core/languages/pythonPyprojectEvidence.js +23 -0
- package/dist/core/languages/pythonPyprojectEvidence.js.map +1 -0
- package/dist/core/languages/pythonRequirements.d.ts +2 -0
- package/dist/core/languages/pythonRequirements.js +74 -9
- package/dist/core/languages/pythonRequirements.js.map +1 -1
- package/dist/core/pluginAnalyzerLoading.d.ts +3 -0
- package/dist/core/pluginAnalyzerLoading.js +55 -0
- package/dist/core/pluginAnalyzerLoading.js.map +1 -0
- package/dist/core/pluginAnalyzerRunning.d.ts +10 -0
- package/dist/core/pluginAnalyzerRunning.js +32 -0
- package/dist/core/pluginAnalyzerRunning.js.map +1 -0
- package/dist/core/pluginIssueValidation.d.ts +2 -0
- package/dist/core/pluginIssueValidation.js +22 -0
- package/dist/core/pluginIssueValidation.js.map +1 -0
- package/dist/core/pluginManifestDiscovery.d.ts +25 -0
- package/dist/core/pluginManifestDiscovery.js +80 -0
- package/dist/core/pluginManifestDiscovery.js.map +1 -0
- package/dist/core/pluginModuleLoading.d.ts +8 -0
- package/dist/core/pluginModuleLoading.js +91 -0
- package/dist/core/pluginModuleLoading.js.map +1 -0
- package/dist/core/pluginReporterLoading.d.ts +41 -0
- package/dist/core/pluginReporterLoading.js +105 -0
- package/dist/core/pluginReporterLoading.js.map +1 -0
- package/dist/core/pluginRuntimeTypes.d.ts +20 -0
- package/dist/core/pluginRuntimeTypes.js +2 -0
- package/dist/core/pluginRuntimeTypes.js.map +1 -0
- package/dist/core/plugins.d.ts +9 -86
- package/dist/core/plugins.js +12 -350
- package/dist/core/plugins.js.map +1 -1
- package/dist/core/preflight.d.ts +1 -2
- package/dist/core/preflight.js +4 -91
- package/dist/core/preflight.js.map +1 -1
- package/dist/core/preflightEvidence.js +11 -0
- package/dist/core/preflightEvidence.js.map +1 -1
- package/dist/core/preflightInputs.d.ts +1 -0
- package/dist/core/preflightInputs.js.map +1 -1
- package/dist/core/preflightReasons.d.ts +21 -0
- package/dist/core/preflightReasons.js +28 -0
- package/dist/core/preflightReasons.js.map +1 -0
- package/dist/core/preflightReport.d.ts +9 -0
- package/dist/core/preflightReport.js +67 -0
- package/dist/core/preflightReport.js.map +1 -0
- package/dist/core/review.js +2 -47
- package/dist/core/review.js.map +1 -1
- package/dist/core/reviewChangedReport.d.ts +13 -0
- package/dist/core/reviewChangedReport.js +38 -0
- package/dist/core/reviewChangedReport.js.map +1 -0
- package/dist/core/reviewComputation.d.ts +9 -0
- package/dist/core/reviewComputation.js +14 -0
- package/dist/core/reviewComputation.js.map +1 -0
- package/dist/core/reviewContractChanges.js +22 -8
- package/dist/core/reviewContractChanges.js.map +1 -1
- package/dist/core/reviewDataflow.js +18 -0
- package/dist/core/reviewDataflow.js.map +1 -1
- package/dist/core/roadmapCatalog.js +7 -203
- package/dist/core/roadmapCatalog.js.map +1 -1
- package/dist/core/roadmapCatalogPost44.d.ts +2 -0
- package/dist/core/roadmapCatalogPost44.js +205 -0
- package/dist/core/roadmapCatalogPost44.js.map +1 -0
- package/dist/core/roadmapCatalogTypes.d.ts +6 -0
- package/dist/core/roadmapCatalogTypes.js +2 -0
- package/dist/core/roadmapCatalogTypes.js.map +1 -0
- package/dist/core/startClaimRouteCriteria.d.ts +7 -0
- package/dist/core/startClaimRouteCriteria.js +16 -0
- package/dist/core/startClaimRouteCriteria.js.map +1 -0
- package/dist/core/startCouplingRouteCriteria.d.ts +2 -0
- package/dist/core/startCouplingRouteCriteria.js +13 -0
- package/dist/core/startCouplingRouteCriteria.js.map +1 -0
- package/dist/core/startDependencyRouteCriteria.d.ts +2 -0
- package/dist/core/startDependencyRouteCriteria.js +43 -0
- package/dist/core/startDependencyRouteCriteria.js.map +1 -0
- package/dist/core/startFileRouteCriteria.d.ts +2 -0
- package/dist/core/startFileRouteCriteria.js +56 -0
- package/dist/core/startFileRouteCriteria.js.map +1 -0
- package/dist/core/startFixedRouteCriteria.d.ts +1 -0
- package/dist/core/startFixedRouteCriteria.js +90 -0
- package/dist/core/startFixedRouteCriteria.js.map +1 -0
- package/dist/core/startImpactRouteCriteria.d.ts +7 -0
- package/dist/core/startImpactRouteCriteria.js +14 -0
- package/dist/core/startImpactRouteCriteria.js.map +1 -0
- package/dist/core/startIntentTargets.d.ts +1 -0
- package/dist/core/startIntentTargets.js +28 -0
- package/dist/core/startIntentTargets.js.map +1 -1
- package/dist/core/startMissionControl.js +8 -2
- package/dist/core/startMissionControl.js.map +1 -1
- package/dist/core/startMissionPolicy.js +2 -0
- package/dist/core/startMissionPolicy.js.map +1 -1
- package/dist/core/startMode.d.ts +1 -0
- package/dist/core/startMode.js +10 -2
- package/dist/core/startMode.js.map +1 -1
- package/dist/core/startPreflightRouteCriteria.d.ts +11 -0
- package/dist/core/startPreflightRouteCriteria.js +29 -0
- package/dist/core/startPreflightRouteCriteria.js.map +1 -0
- package/dist/core/startProductPlanningRouteCriteria.d.ts +8 -0
- package/dist/core/startProductPlanningRouteCriteria.js +29 -0
- package/dist/core/startProductPlanningRouteCriteria.js.map +1 -0
- package/dist/core/startRegressionRouteCriteria.d.ts +3 -0
- package/dist/core/startRegressionRouteCriteria.js +62 -0
- package/dist/core/startRegressionRouteCriteria.js.map +1 -0
- package/dist/core/startRouteActions.js +39 -1
- package/dist/core/startRouteActions.js.map +1 -1
- package/dist/core/startSuccessCriteria.d.ts +2 -3
- package/dist/core/startSuccessCriteria.js +15 -419
- package/dist/core/startSuccessCriteria.js.map +1 -1
- package/dist/core/startUnderstandRouteCriteria.d.ts +3 -0
- package/dist/core/startUnderstandRouteCriteria.js +97 -0
- package/dist/core/startUnderstandRouteCriteria.js.map +1 -0
- package/dist/core/telemetry.d.ts +9 -89
- package/dist/core/telemetry.js +33 -391
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/telemetryConfig.d.ts +58 -0
- package/dist/core/telemetryConfig.js +171 -0
- package/dist/core/telemetryConfig.js.map +1 -0
- package/dist/core/telemetryEvents.d.ts +57 -0
- package/dist/core/telemetryEvents.js +143 -0
- package/dist/core/telemetryEvents.js.map +1 -0
- package/dist/core/telemetryFlushing.d.ts +10 -0
- package/dist/core/telemetryFlushing.js +42 -0
- package/dist/core/telemetryFlushing.js.map +1 -0
- package/dist/core/telemetryRecording.d.ts +26 -0
- package/dist/core/telemetryRecording.js +38 -0
- package/dist/core/telemetryRecording.js.map +1 -0
- package/dist/core/telemetrySender.d.ts +9 -0
- package/dist/core/telemetrySender.js +22 -0
- package/dist/core/telemetrySender.js.map +1 -0
- package/dist/index.d.ts +4 -60
- package/dist/index.js +4 -60
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +2 -13
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/serverMessageHandling.d.ts +3 -0
- package/dist/mcp/serverMessageHandling.js +16 -0
- package/dist/mcp/serverMessageHandling.js.map +1 -0
- package/dist/mcp/toolDefinitions.d.ts +3 -0
- package/dist/mcp/toolDefinitions.js +15 -0
- package/dist/mcp/toolDefinitions.js.map +1 -0
- package/dist/mcp/tools.js +2 -12
- package/dist/mcp/tools.js.map +1 -1
- package/dist/projscan-sbom.cdx.json +6 -6
- package/dist/publicAgent.d.ts +22 -0
- package/dist/publicAgent.js +23 -0
- package/dist/publicAgent.js.map +1 -0
- package/dist/publicCore.d.ts +29 -0
- package/dist/publicCore.js +30 -0
- package/dist/publicCore.js.map +1 -0
- package/dist/publicLanguages.d.ts +1 -0
- package/dist/publicLanguages.js +2 -0
- package/dist/publicLanguages.js.map +1 -0
- package/dist/publicMcp.d.ts +8 -0
- package/dist/publicMcp.js +9 -0
- package/dist/publicMcp.js.map +1 -0
- package/dist/reporters/htmlAnalysisReporter.d.ts +3 -0
- package/dist/reporters/htmlAnalysisReporter.js +98 -0
- package/dist/reporters/htmlAnalysisReporter.js.map +1 -0
- package/dist/reporters/htmlCoverageReporter.d.ts +2 -0
- package/dist/reporters/htmlCoverageReporter.js +52 -0
- package/dist/reporters/htmlCoverageReporter.js.map +1 -0
- package/dist/reporters/htmlImpactReporter.d.ts +2 -0
- package/dist/reporters/htmlImpactReporter.js +41 -0
- package/dist/reporters/htmlImpactReporter.js.map +1 -0
- package/dist/reporters/htmlPrDiffReporter.d.ts +2 -0
- package/dist/reporters/htmlPrDiffReporter.js +84 -0
- package/dist/reporters/htmlPrDiffReporter.js.map +1 -0
- package/dist/reporters/htmlReporter.d.ts +20 -9
- package/dist/reporters/htmlReporter.js +7 -365
- package/dist/reporters/htmlReporter.js.map +1 -1
- package/dist/reporters/htmlReviewReporter.d.ts +2 -0
- package/dist/reporters/htmlReviewReporter.js +94 -0
- package/dist/reporters/htmlReviewReporter.js.map +1 -0
- package/dist/reporters/htmlShared.d.ts +7 -0
- package/dist/reporters/htmlShared.js +106 -0
- package/dist/reporters/htmlShared.js.map +1 -0
- package/dist/tool-manifest.json +2 -2
- package/dist/types/preflight.d.ts +19 -0
- package/dist/types/start.d.ts +7 -451
- package/dist/types/startCommon.d.ts +79 -0
- package/dist/types/startCommon.js +2 -0
- package/dist/types/startCommon.js.map +1 -0
- package/dist/types/startExecution.d.ts +44 -0
- package/dist/types/startExecution.js +2 -0
- package/dist/types/startExecution.js.map +1 -0
- package/dist/types/startMissionControl.d.ts +91 -0
- package/dist/types/startMissionControl.js +2 -0
- package/dist/types/startMissionControl.js.map +1 -0
- package/dist/types/startMissionProof.d.ts +91 -0
- package/dist/types/startMissionProof.js +2 -0
- package/dist/types/startMissionProof.js.map +1 -0
- package/dist/types/startMissionResume.d.ts +100 -0
- package/dist/types/startMissionResume.js +2 -0
- package/dist/types/startMissionResume.js.map +1 -0
- package/dist/types/startMissionReview.d.ts +45 -0
- package/dist/types/startMissionReview.js +2 -0
- package/dist/types/startMissionReview.js.map +1 -0
- package/dist/types/startMissionTooling.d.ts +16 -0
- package/dist/types/startMissionTooling.js +2 -0
- package/dist/types/startMissionTooling.js.map +1 -0
- package/dist/utils/changedFiles.d.ts +1 -0
- package/dist/utils/changedFiles.js +7 -4
- package/dist/utils/changedFiles.js.map +1 -1
- package/docs/GUIDE.md +9 -7
- package/docs/ROADMAP.md +2 -2
- package/docs/examples/adoption-workflows.md +12 -1
- package/docs/examples/swarm-coordination.md +11 -2
- package/package.json +1 -1
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { PreflightSuggestedAction } from './preflight.js';
|
|
2
|
+
export type MissionRunStatus = 'not_run' | 'running' | 'passed' | 'failed' | 'unknown';
|
|
3
|
+
export interface MissionProofStatusRow {
|
|
4
|
+
id: string;
|
|
5
|
+
label?: string;
|
|
6
|
+
log?: string;
|
|
7
|
+
command?: string;
|
|
8
|
+
exitCode?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface MissionReviewDecisionRecord {
|
|
11
|
+
decision: 'approve_next_slice' | 'request_changes' | 'review_version_candidate' | string;
|
|
12
|
+
reviewer?: string;
|
|
13
|
+
at?: string;
|
|
14
|
+
note?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface MissionOutcome {
|
|
17
|
+
schemaVersion: 1;
|
|
18
|
+
available: boolean;
|
|
19
|
+
missionDir: string;
|
|
20
|
+
status: MissionRunStatus;
|
|
21
|
+
reason?: string;
|
|
22
|
+
nextAction?: string;
|
|
23
|
+
proof: {
|
|
24
|
+
completedCommands: number;
|
|
25
|
+
failedCommands: number;
|
|
26
|
+
reruns: number;
|
|
27
|
+
totalCommands?: number;
|
|
28
|
+
failedStep?: string;
|
|
29
|
+
failedLog?: string;
|
|
30
|
+
exitCode?: number;
|
|
31
|
+
rows: MissionProofStatusRow[];
|
|
32
|
+
};
|
|
33
|
+
review: {
|
|
34
|
+
decisions: MissionReviewDecisionRecord[];
|
|
35
|
+
approvals: number;
|
|
36
|
+
changeRequests: number;
|
|
37
|
+
versionCandidateReviews: number;
|
|
38
|
+
};
|
|
39
|
+
whatChanged: string[];
|
|
40
|
+
whatRemains: string[];
|
|
41
|
+
versionCandidate: {
|
|
42
|
+
recommendation: 'run_proof' | 'wait' | 'review_candidate' | 'do_not_cut';
|
|
43
|
+
summary: string;
|
|
44
|
+
};
|
|
45
|
+
resumePrompt: string;
|
|
46
|
+
}
|
|
47
|
+
export interface MissionProofBaselineRun {
|
|
48
|
+
id: string;
|
|
49
|
+
status: MissionRunStatus;
|
|
50
|
+
failedGates?: number;
|
|
51
|
+
reruns?: number;
|
|
52
|
+
minutesSpent?: number;
|
|
53
|
+
reviewerApprovals?: number;
|
|
54
|
+
}
|
|
55
|
+
export interface MissionProofTotals {
|
|
56
|
+
missions: number;
|
|
57
|
+
passed: number;
|
|
58
|
+
failed: number;
|
|
59
|
+
running: number;
|
|
60
|
+
notRun: number;
|
|
61
|
+
unavailable: number;
|
|
62
|
+
proofCompletionRate: number;
|
|
63
|
+
reruns: number;
|
|
64
|
+
failedGates: number;
|
|
65
|
+
reviewerApprovals: number;
|
|
66
|
+
}
|
|
67
|
+
export interface MissionProofReport {
|
|
68
|
+
schemaVersion: 1;
|
|
69
|
+
readOnly: true;
|
|
70
|
+
rootPath: string;
|
|
71
|
+
summary: string;
|
|
72
|
+
missionControl: {
|
|
73
|
+
missions: MissionOutcome[];
|
|
74
|
+
totals: MissionProofTotals;
|
|
75
|
+
};
|
|
76
|
+
baseline?: {
|
|
77
|
+
path: string;
|
|
78
|
+
runs: MissionProofBaselineRun[];
|
|
79
|
+
totals: MissionProofTotals & {
|
|
80
|
+
minutesSpent: number;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
comparison?: {
|
|
84
|
+
completionRateDelta: number;
|
|
85
|
+
rerunsAvoided: number;
|
|
86
|
+
failedGatesAvoided: number;
|
|
87
|
+
minutesSaved: number;
|
|
88
|
+
};
|
|
89
|
+
riskAvoided: string[];
|
|
90
|
+
nextActions: PreflightSuggestedAction[];
|
|
91
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startMissionProof.js","sourceRoot":"","sources":["../../src/types/startMissionProof.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { PreflightSuggestedAction } from './preflight.js';
|
|
2
|
+
import type { StartMissionControlStatus, StartUnresolvedInput } from './startCommon.js';
|
|
3
|
+
import type { StartExecutionCursor, StartExecutionPhaseId, StartExecutionStatus, StartExecutionStepKind } from './startExecution.js';
|
|
4
|
+
import type { StartMissionReviewGate } from './startMissionReview.js';
|
|
5
|
+
import type { StartMissionProofItem, StartMissionProofToolCall, StartMissionToolCall } from './startMissionTooling.js';
|
|
6
|
+
export interface StartMissionResumeReference {
|
|
7
|
+
id: string;
|
|
8
|
+
phaseId: StartExecutionPhaseId;
|
|
9
|
+
kind: StartExecutionStepKind;
|
|
10
|
+
status: StartExecutionStatus;
|
|
11
|
+
label: string;
|
|
12
|
+
instruction?: string;
|
|
13
|
+
command?: string;
|
|
14
|
+
placeholder?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface StartMissionInputBinding {
|
|
17
|
+
inputId: string;
|
|
18
|
+
label: string;
|
|
19
|
+
placeholder: string;
|
|
20
|
+
instruction: string;
|
|
21
|
+
followUpIds: string[];
|
|
22
|
+
}
|
|
23
|
+
export type StartMissionResumeChecklistItemKind = 'run_current' | 'resolve_input' | 'run_follow_up' | 'run_proof' | 'confirm_done';
|
|
24
|
+
export interface StartMissionResumeChecklistItem {
|
|
25
|
+
id: string;
|
|
26
|
+
kind: StartMissionResumeChecklistItemKind;
|
|
27
|
+
phaseId: StartExecutionPhaseId;
|
|
28
|
+
stepId: string;
|
|
29
|
+
status: StartExecutionStatus;
|
|
30
|
+
label: string;
|
|
31
|
+
command?: string;
|
|
32
|
+
tool?: string;
|
|
33
|
+
args?: Record<string, unknown>;
|
|
34
|
+
placeholder?: string;
|
|
35
|
+
instruction?: string;
|
|
36
|
+
blockedBy?: string[];
|
|
37
|
+
dependsOn?: string[];
|
|
38
|
+
unlocks?: string[];
|
|
39
|
+
followUpIds?: string[];
|
|
40
|
+
}
|
|
41
|
+
export interface StartMissionResumeFollowUp {
|
|
42
|
+
id: string;
|
|
43
|
+
phaseId: StartExecutionPhaseId;
|
|
44
|
+
kind: StartExecutionStepKind;
|
|
45
|
+
status: StartExecutionStatus;
|
|
46
|
+
label: string;
|
|
47
|
+
command?: string;
|
|
48
|
+
tool?: string;
|
|
49
|
+
args?: Record<string, unknown>;
|
|
50
|
+
blockedBy?: string[];
|
|
51
|
+
dependsOn?: string[];
|
|
52
|
+
}
|
|
53
|
+
export interface StartMissionResume {
|
|
54
|
+
currentStep: StartExecutionCursor;
|
|
55
|
+
status: StartExecutionStatus;
|
|
56
|
+
instruction: string;
|
|
57
|
+
prompt: string;
|
|
58
|
+
commandBlock?: string;
|
|
59
|
+
toolCall?: StartMissionToolCall;
|
|
60
|
+
followUps?: StartMissionResumeFollowUp[];
|
|
61
|
+
inputBindings?: StartMissionInputBinding[];
|
|
62
|
+
checklist?: StartMissionResumeChecklistItem[];
|
|
63
|
+
remainingProofItems?: StartMissionProofItem[];
|
|
64
|
+
remainingProofCommands?: string[];
|
|
65
|
+
remainingProofToolCalls?: StartMissionProofToolCall[];
|
|
66
|
+
unlocks?: StartMissionResumeReference[];
|
|
67
|
+
blockedBy?: StartMissionResumeReference[];
|
|
68
|
+
}
|
|
69
|
+
export interface StartMissionHandoff {
|
|
70
|
+
currentStep: StartExecutionCursor;
|
|
71
|
+
resume: StartMissionResume;
|
|
72
|
+
reviewGate: StartMissionReviewGate;
|
|
73
|
+
nextAction: PreflightSuggestedAction;
|
|
74
|
+
readyActions: PreflightSuggestedAction[];
|
|
75
|
+
needsInput: StartUnresolvedInput[];
|
|
76
|
+
doneWhen: string[];
|
|
77
|
+
readyProof: {
|
|
78
|
+
summary: string;
|
|
79
|
+
commands: string[];
|
|
80
|
+
toolCalls?: StartMissionProofToolCall[];
|
|
81
|
+
items?: StartMissionProofItem[];
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export interface StartMissionRunbook {
|
|
85
|
+
title: string;
|
|
86
|
+
status: StartMissionControlStatus;
|
|
87
|
+
currentPhase: StartExecutionPhaseId;
|
|
88
|
+
currentStep: StartExecutionCursor;
|
|
89
|
+
resume: StartMissionResume;
|
|
90
|
+
readyCommandBlock: string;
|
|
91
|
+
blockedInputSummary?: string;
|
|
92
|
+
markdown: string;
|
|
93
|
+
}
|
|
94
|
+
export interface StartMissionTaskCard {
|
|
95
|
+
title: string;
|
|
96
|
+
status: StartMissionControlStatus;
|
|
97
|
+
currentPhase: StartExecutionPhaseId;
|
|
98
|
+
currentStep: StartExecutionCursor;
|
|
99
|
+
markdown: string;
|
|
100
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startMissionResume.js","sourceRoot":"","sources":["../../src/types/startMissionResume.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { StartMissionControlStatus } from './startCommon.js';
|
|
2
|
+
import type { StartMissionProofItem, StartMissionProofToolCall } from './startMissionTooling.js';
|
|
3
|
+
export interface StartMissionReviewWorktree {
|
|
4
|
+
available: boolean;
|
|
5
|
+
clean: boolean;
|
|
6
|
+
changedFileCount: number;
|
|
7
|
+
files: string[];
|
|
8
|
+
baseRef: string | null;
|
|
9
|
+
summary: string;
|
|
10
|
+
reason?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface StartMissionReviewProof {
|
|
13
|
+
summary: string;
|
|
14
|
+
commands: string[];
|
|
15
|
+
toolCalls?: StartMissionProofToolCall[];
|
|
16
|
+
items?: StartMissionProofItem[];
|
|
17
|
+
}
|
|
18
|
+
export type StartMissionReviewBlockedAction = 'next_slice' | 'release' | 'publish' | 'deploy' | 'push' | 'merge' | 'version_bump';
|
|
19
|
+
export interface StartMissionReviewPolicy {
|
|
20
|
+
approvalRequired: true;
|
|
21
|
+
blockedActions: StartMissionReviewBlockedAction[];
|
|
22
|
+
summary: string;
|
|
23
|
+
}
|
|
24
|
+
export interface StartMissionReviewDecision {
|
|
25
|
+
id: 'approve_next_slice' | 'request_changes' | 'review_version_candidate';
|
|
26
|
+
label: string;
|
|
27
|
+
description: string;
|
|
28
|
+
consequence: string;
|
|
29
|
+
reply: string;
|
|
30
|
+
}
|
|
31
|
+
export interface StartMissionReviewGate {
|
|
32
|
+
title: string;
|
|
33
|
+
required: true;
|
|
34
|
+
status: StartMissionControlStatus;
|
|
35
|
+
stopCondition: string;
|
|
36
|
+
reviewPrompt: string;
|
|
37
|
+
checklist: string[];
|
|
38
|
+
doneWhen: string[];
|
|
39
|
+
policy: StartMissionReviewPolicy;
|
|
40
|
+
decisions: StartMissionReviewDecision[];
|
|
41
|
+
commands: string[];
|
|
42
|
+
worktree: StartMissionReviewWorktree;
|
|
43
|
+
proof: StartMissionReviewProof;
|
|
44
|
+
markdown: string;
|
|
45
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startMissionReview.js","sourceRoot":"","sources":["../../src/types/startMissionReview.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { StartExecutionStatus } from './startExecution.js';
|
|
2
|
+
export interface StartMissionToolCall {
|
|
3
|
+
tool: string;
|
|
4
|
+
args?: Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
export interface StartMissionProofToolCall extends StartMissionToolCall {
|
|
7
|
+
stepId: string;
|
|
8
|
+
command: string;
|
|
9
|
+
}
|
|
10
|
+
export interface StartMissionProofItem {
|
|
11
|
+
stepId: string;
|
|
12
|
+
status: StartExecutionStatus;
|
|
13
|
+
label: string;
|
|
14
|
+
command: string;
|
|
15
|
+
toolCall?: StartMissionToolCall;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startMissionTooling.js","sourceRoot":"","sources":["../../src/types/startMissionTooling.ts"],"names":[],"mappings":""}
|
|
@@ -18,6 +18,7 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
|
|
|
18
18
|
reason: 'not a git repository',
|
|
19
19
|
baseRef: null,
|
|
20
20
|
files: [],
|
|
21
|
+
uncommittedFiles: [],
|
|
21
22
|
};
|
|
22
23
|
}
|
|
23
24
|
const candidates = explicitBaseRef ? [explicitBaseRef] : [...DEFAULT_BASE_REFS, 'HEAD~1'];
|
|
@@ -29,8 +30,8 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
|
|
|
29
30
|
continue;
|
|
30
31
|
}
|
|
31
32
|
try {
|
|
32
|
-
const files = await diffNames(rootPath, ref);
|
|
33
|
-
return { available: true, baseRef: ref, files };
|
|
33
|
+
const { files, uncommittedFiles } = await diffNames(rootPath, ref);
|
|
34
|
+
return { available: true, baseRef: ref, files, uncommittedFiles };
|
|
34
35
|
}
|
|
35
36
|
catch (err) {
|
|
36
37
|
// 1.10+ — surface stdio-too-large explicitly instead of letting it
|
|
@@ -46,6 +47,7 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
|
|
|
46
47
|
'(typically > 100K files changed). Use --base-ref to pin a closer ref.',
|
|
47
48
|
baseRef: null,
|
|
48
49
|
files: [],
|
|
50
|
+
uncommittedFiles: [],
|
|
49
51
|
};
|
|
50
52
|
}
|
|
51
53
|
lastError = err instanceof Error ? err.message : String(err);
|
|
@@ -55,7 +57,7 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
|
|
|
55
57
|
try {
|
|
56
58
|
const files = await statusNames(rootPath);
|
|
57
59
|
if (files.length > 0) {
|
|
58
|
-
return { available: true, baseRef: '(working tree)', files };
|
|
60
|
+
return { available: true, baseRef: '(working tree)', files, uncommittedFiles: files };
|
|
59
61
|
}
|
|
60
62
|
}
|
|
61
63
|
catch (err) {
|
|
@@ -66,6 +68,7 @@ export async function getChangedFiles(rootPath, explicitBaseRef) {
|
|
|
66
68
|
reason: lastError ?? 'no usable base ref found',
|
|
67
69
|
baseRef: null,
|
|
68
70
|
files: [],
|
|
71
|
+
uncommittedFiles: [],
|
|
69
72
|
};
|
|
70
73
|
}
|
|
71
74
|
async function isGitRepo(rootPath) {
|
|
@@ -104,7 +107,7 @@ async function diffNames(rootPath, baseRef) {
|
|
|
104
107
|
}
|
|
105
108
|
for (const f of uncommitted)
|
|
106
109
|
set.add(f);
|
|
107
|
-
return [...set].sort();
|
|
110
|
+
return { files: [...set].sort(), uncommittedFiles: uncommitted };
|
|
108
111
|
}
|
|
109
112
|
async function statusNames(rootPath) {
|
|
110
113
|
const { stdout } = await execFileAsync('git', ['status', '--porcelain', '--untracked-files=all'], { cwd: rootPath, maxBuffer: 10 * 1024 * 1024 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changedFiles.js","sourceRoot":"","sources":["../../src/utils/changedFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,iBAAiB,GAAG,CAAC,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"changedFiles.js","sourceRoot":"","sources":["../../src/utils/changedFiles.ts"],"names":[],"mappings":"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"}
|
package/docs/GUIDE.md
CHANGED
|
@@ -167,6 +167,7 @@ When the agent first opens a repo, or before starting a refactor, the question i
|
|
|
167
167
|
For risky-file, complexity, refactor-priority, and codebase-performance questions, such as `projscan start --intent "what files are risky to touch?"`, `projscan start --intent "which files are too complex?"`, `projscan start --intent "what file should I refactor first?"`, `projscan start --intent "find performance bottlenecks"`, or `projscan start --intent "where are the slow files?"`, it routes to `projscan_hotspots` so the developer sees the highest-risk files before editing. For exact-file risk questions, such as `projscan start --intent "why is src/core/start.ts risky?"`, it routes to `projscan_file` so the file's hotspot, ownership, issue, import, and export context explains the risk. For cleanup questions, such as `projscan start --intent "find dead code"`, `projscan start --intent "find dead code and unused exports I can delete"`, `projscan start --intent "what can I safely delete?"`, or `projscan start --intent "what can I remove safely?"`, it routes to `projscan_doctor` so dead code, unused exports, and adjacent health issues are reviewed before files are removed.
|
|
168
168
|
For tech-debt and simplification questions, such as `projscan start --intent "what tech debt should I pay down?"` or `projscan start --intent "what code should I simplify?"`, it routes to `projscan_hotspots` instead of incident handling for the word `down`.
|
|
169
169
|
For reviewer-proof requests, such as `projscan start --intent "write a PR comment for reviewers"`, `projscan start --intent "write a PR description"`, `projscan start --intent "what should my PR say?"`, `projscan start --intent "make a PR checklist"`, `projscan start --intent "summarize my changes for reviewers"`, or `projscan start --intent "what should I tell my team about this change?"`, it routes to `projscan_evidence_pack` with `pr_comment: true` so the developer gets a paste-ready verdict, top risks, owner routing, and next commands.
|
|
170
|
+
For shareable scoped-evidence requests, such as `projscan start --intent "share redacted evidence for src/api with a partner"`, it routes to `projscan_analyze` and returns ready analyze, doctor, and CI commands with `--report-scope` and `--redact-paths` so security reviewers and partners can receive path-safe artifacts without a full repo map.
|
|
170
171
|
For reviewer-routing questions, such as `projscan start --intent "who should review this PR?"`, it routes to `projscan_evidence_pack` so likely owners and reviewer-facing context are prepared before a full review.
|
|
171
172
|
For PR-readiness questions, such as `projscan start --intent "am I ready to open a PR?"`, it routes to `projscan_evidence_pack` so preflight, owner routing, top risks, and reviewer-facing proof are prepared before review starts.
|
|
172
173
|
For changed-file owner questions, such as `projscan start --intent "who owns the changed files?"`, it routes to `projscan_evidence_pack` so changed-file owner routing is prepared without confusing it with single-file ownership inspection.
|
|
@@ -180,7 +181,7 @@ When the agent first opens a repo, or before starting a refactor, the question i
|
|
|
180
181
|
For short proof-command phrasing, such as `projscan start --intent "give me proof commands"`, it also routes to `projscan_regression_plan --level focused`; reviewer-proof wording with PR comments still routes to `projscan_evidence_pack`.
|
|
181
182
|
For pre-push command questions, such as `projscan start --intent "what commands should I run before pushing?"`, it routes to `projscan_regression_plan --level focused` so the branch has a small verification loop before it leaves the workstation.
|
|
182
183
|
For release-readiness wording, such as `projscan start --intent "what should I check before release?"`, `projscan start --intent "can I deploy this?"`, `projscan start --intent "prepare this branch for deployment"`, `projscan start --intent "what changed since last release?"`, `projscan start --intent "write a release note for this change"`, or `projscan start --intent "draft changelog entry"`, it routes to `projscan_release_train` so changelog, package, SBOM, provenance, and blockers are reviewed before deploying or publishing.
|
|
183
|
-
For
|
|
184
|
+
For generic build-next questions, such as `projscan start --intent "what should we build next?"`, it routes to `projscan_workplan --mode before_edit` so the next implementation slice starts with an ordered plan and verification instead of release readiness. For explicit product-roadmap questions, such as `projscan start --intent "plan the product roadmap"`, it routes to `projscan_release_train` / `projscan release-train` so broad product direction becomes read-only roadmap planning with current post-4.4 workstreams and `evidence.roadmapPreview`.
|
|
184
185
|
For broad improvement-planning questions, such as `projscan start --intent "what should we improve next?"`, it routes to `projscan_bug_hunt` so the agent gets an actionable ranked queue; technical variants such as tests, performance, release, dependencies, or safety keep their specialized routes.
|
|
185
186
|
For quick-win and low-risk improvement wording, such as `projscan start --intent "find a quick win"`, `projscan start --intent "what is a low risk improvement?"`, or `projscan start --intent "pick a small safe task"`, it routes to `projscan_bug_hunt` so a ranked, verifiable action queue is selected instead of a generic quality readout.
|
|
186
187
|
For tiny-task and beginner-safe wording, such as `projscan start --intent "what can I do in five minutes?"`, `projscan start --intent "pick an easy task for me"`, or `projscan start --intent "what should an intern work on?"`, it also routes to `projscan_bug_hunt`.
|
|
@@ -204,7 +205,7 @@ When the agent first opens a repo, or before starting a refactor, the question i
|
|
|
204
205
|
- **`projscan_preflight` / `projscan preflight`** — agent safety gate. Returns `proceed`, `caution`, or `block` with health, changed-file, review, remembered session, hotspot, plugin-policy, supply-chain, and release-scale evidence. `evidence.riskSources.currentWorktree` is current Git/worktree evidence; `evidence.riskSources.sessionMemory` is remembered handoff context. Use `--mode before_edit` at the start of work and `--mode before_commit` / `--mode before_merge` before handing off or merging; scale-only commit blocks are cautions, while merge gates still require manual release sign-off.
|
|
205
206
|
- **`projscan_hotspots` / `projscan hotspots`** — files ranked by `git churn × AST cyclomatic complexity × open issues × ownership × coverage`. Pass `view: "functions"` for top-N risky individual functions across the repo (0.13+).
|
|
206
207
|
- **`projscan_semantic_graph` / `projscan semantic-graph`** — stable v3 graph contract with file, function, package, and symbol nodes plus imports, exports, definitions, and calls edges. Use it when an agent needs one normalized graph shape instead of several targeted queries.
|
|
207
|
-
- **`projscan_dataflow` / `projscan dataflow`** — direct, propagated, and bridge source-to-sink dataflow risks, including framework-aware Next.js
|
|
208
|
+
- **`projscan_dataflow` / `projscan dataflow`** — direct, propagated, and bridge source-to-sink dataflow risks, including framework-aware Next.js, Remix, SvelteKit, Hono, Express, Fastify, and Koa request sources. Use it for a focused safety pass before touching command execution, raw SQL, filesystem writes, or DOM sinks.
|
|
208
209
|
- **`projscan_coupling` / `projscan coupling`** — per-file fan-in / fan-out / instability plus circular-import cycles (Tarjan SCC). Use `direction: cycles_only` or `projscan coupling --cycles-only` to surface architectural debt directly.
|
|
209
210
|
- **`projscan_analyze` / `projscan analyze`** — the everything report; useful at session start but verbose.
|
|
210
211
|
|
|
@@ -434,8 +435,9 @@ graph. Bridge risks are graph-backed dataflow additions: a wrapper that calls a
|
|
|
434
435
|
and a sink wrapper is surfaced even when legacy taint reachability cannot see a
|
|
435
436
|
downstream call path from source to sink. By default, dataflow suppresses test-file paths,
|
|
436
437
|
broad readFile/writeFile-style noise, and JavaScript RegExp.exec false positives.
|
|
437
|
-
Framework request-source detection covers narrow tested patterns for Next.js,
|
|
438
|
-
Express, Fastify, and Koa handlers, including
|
|
438
|
+
Framework request-source detection covers narrow tested patterns for Next.js, Remix,
|
|
439
|
+
SvelteKit, Hono, Express, Fastify, and Koa handlers, including SvelteKit
|
|
440
|
+
`RequestEvent` request/body/url/params/cookies evidence, Hono validator output,
|
|
439
441
|
Express/Fastify/Koa request IP metadata, Fastify host/hostname and raw
|
|
440
442
|
URL/header evidence, and Express/Koa header accessors plus Express
|
|
441
443
|
`req.param(...)` and `req.originalUrl`, while
|
|
@@ -702,8 +704,8 @@ Preview the impact of upgrading a package. The default path is fully offline; pa
|
|
|
702
704
|
- Breaking-change markers found in the CHANGELOG: scans for `BREAKING CHANGE`, `deprecated`, `removed support`, `no longer supported`, and section headers containing "breaking"
|
|
703
705
|
- CHANGELOG excerpt sliced to the relevant version range (read from `node_modules/<pkg>/CHANGELOG.md`)
|
|
704
706
|
- Importer list - every file in your source tree that imports the package (direct or sub-path)
|
|
705
|
-
- Python manifest evidence for packages declared in `pyproject.toml` (including PEP 735 `dependency-groups`, Poetry dependency groups, and legacy `tool.poetry.dev-dependencies`), `setup.cfg`, `setup.py`,
|
|
706
|
-
- Python current-version evidence from `poetry.lock` / `uv.lock` / `pdm.lock` package blocks, `conda-lock.yml` / `conda-lock.yaml` package entries, `Pipfile.lock` exact versions, pinned root `requirements
|
|
707
|
+
- Python manifest evidence for packages declared in `pyproject.toml` (including PEP 735 `dependency-groups`, Poetry dependency groups, and legacy `tool.poetry.dev-dependencies`), `setup.cfg`, `setup.py`, root `requirements*.txt`, or common `requirements/*.txt` / `requirements/*.in` manifests such as `requirements/base.txt` and `requirements/dev.in`. Python manifests are sufficient local evidence even before `.py` files exist.
|
|
708
|
+
- Python current-version evidence from `poetry.lock` / `uv.lock` / `pdm.lock` package blocks, `conda-lock.yml` / `conda-lock.yaml` package entries, `Pipfile.lock` exact versions, pinned root or recognized nested `requirements/*.txt`, or pinned root or recognized nested `constraints/*.txt` entries
|
|
707
709
|
|
|
708
710
|
**Example:**
|
|
709
711
|
|
|
@@ -725,7 +727,7 @@ $ projscan upgrade react --format markdown
|
|
|
725
727
|
|
|
726
728
|
- Reads the CHANGELOG that npm already placed in `node_modules/`. If the package author doesn't ship one, you'll see "No local CHANGELOG found."
|
|
727
729
|
- Without `--check-registry`, works with what's **installed** and reports `latestSource: "installed"`. With `--check-registry`, npm registry lookup is attempted and failures fall back to the installed version with `registryError`.
|
|
728
|
-
- Python previews stay offline. They do not query PyPI; current-version evidence comes from supported local lockfiles, pinned root requirements, or pinned root constraints.
|
|
730
|
+
- Python previews stay offline. They do not query PyPI; current-version evidence comes from supported local lockfiles, pinned root or recognized nested requirements, or pinned root or recognized nested constraints.
|
|
729
731
|
|
|
730
732
|
### coverage
|
|
731
733
|
|
package/docs/ROADMAP.md
CHANGED
|
@@ -65,7 +65,7 @@ The active validation lines are:
|
|
|
65
65
|
- **Swarm coordination evidence.** Validate how real agents use `collisions`, `claim`, `merge-risk`, `coordinate`, and `coordinate --watch`; deepen only the coordination paths that prevent integration failures.
|
|
66
66
|
- **Evidence export adoption.** Prove scoped/redacted report controls work for partner, security, and release-review handoffs without leaking unnecessary repo structure.
|
|
67
67
|
- **Python upgrade coverage.** Extend lockfile support only after Poetry and pinned-requirement evidence prove useful in real repos.
|
|
68
|
-
- **Framework dataflow precision.** Add more framework patterns only when each has a narrow request source, sink, and false-positive fixture.
|
|
68
|
+
- **Framework dataflow precision.** Add more framework patterns only when each has a narrow request source, sink, and false-positive fixture; current validation includes Remix route data and SvelteKit `RequestEvent` coverage.
|
|
69
69
|
- **Hotspot maintainability.** Continue extracting and covering high-churn start/review/type surfaces when they show concrete review or defect risk.
|
|
70
70
|
|
|
71
71
|
Strictly **local-first** throughout: same-repo / same-machine evidence, no daemon, no cloud, no hidden network calls, no new telemetry, and no secret-value reads.
|
|
@@ -90,7 +90,7 @@ Success signals: teams copy the adoption examples into real reviews, scoped/reda
|
|
|
90
90
|
- Roadmap and release-train planning now default to the current post-4.4 product lines instead of stale shipped work.
|
|
91
91
|
- Adoption examples cover agent orchestration, package ownership, custom policy plugins, swarm coordination, and scoped evidence exports.
|
|
92
92
|
- `analyze`, `doctor`, and `ci` can scope and redact shareable evidence with direct flags or named `reportPolicies` presets.
|
|
93
|
-
- `projscan upgrade` and MCP `projscan_upgrade` support offline Python previews from manifests, Poetry/Pipfile/uv/PDM/Conda lockfiles,
|
|
93
|
+
- `projscan upgrade` and MCP `projscan_upgrade` support offline Python previews from manifests, Poetry/Pipfile/uv/PDM/Conda lockfiles, root and recognized nested requirements/constraints, and Python importers.
|
|
94
94
|
- Dataflow detects narrow Fastify and Koa request-source patterns, including Fastify raw URL/header and Koa IP evidence, while suppressing lookalike helpers and Koa response-body writes.
|
|
95
95
|
- Start next-action assembly and taint function identity were tightened during release readiness cleanup.
|
|
96
96
|
|
|
@@ -50,7 +50,9 @@ projscan agent-brief --intent "handoff package ownership for fastapi" --format j
|
|
|
50
50
|
For Node packages, `upgrade` reads local `package.json`, `node_modules`, local
|
|
51
51
|
CHANGELOG files, and importer evidence. For Python packages, it reads
|
|
52
52
|
`pyproject.toml`, `setup.cfg`, `setup.py`, root `requirements*.txt` files,
|
|
53
|
-
|
|
53
|
+
common `requirements/*.txt` / `requirements/*.in` manifests,
|
|
54
|
+
Poetry/Pipfile/uv/PDM/Conda lockfiles, and pinned root or recognized nested
|
|
55
|
+
requirements/constraints, then
|
|
54
56
|
returns declared scope, current-version source, drift, and Python importers.
|
|
55
57
|
|
|
56
58
|
Decision loop:
|
|
@@ -93,6 +95,15 @@ Decision loop:
|
|
|
93
95
|
Use this when a team wants to share a health or CI artifact without exposing
|
|
94
96
|
repo layout or sensitive paths.
|
|
95
97
|
|
|
98
|
+
Start from Mission Control when the reviewer asks in plain language:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
projscan start --intent "share redacted evidence for src/api with a partner" --format json
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
The routed start output returns the three artifact commands below as ready
|
|
105
|
+
actions, using the requested scope when one is present in the intent.
|
|
106
|
+
|
|
96
107
|
```bash
|
|
97
108
|
projscan analyze --report-scope src/api --redact-paths --format json > reports/api-analysis.json
|
|
98
109
|
projscan doctor --report-scope src/api --redact-paths --format markdown > reports/api-health.md
|
|
@@ -56,11 +56,20 @@ with the active command path, current worktree state, local-only source signals,
|
|
|
56
56
|
the validation workflow above, and a reminder that session memory is separate
|
|
57
57
|
from current Git/worktree evidence. The default `coordinate` console view prints
|
|
58
58
|
the same session-boundary reminder inside its `Evidence` section.
|
|
59
|
+
Read `currentWorktree.changedFileCount` as the branch/base delta used for
|
|
60
|
+
collision detection, including local commits and any dirty files. Read
|
|
61
|
+
`currentWorktree.uncommittedChangedFileCount` as the current dirty worktree
|
|
62
|
+
count from `git status`. A clean worktree can therefore show changed files
|
|
63
|
+
against `origin/main` while still reporting `0` uncommitted files.
|
|
59
64
|
When multiple worktrees are present, `agent-brief` also carries a
|
|
60
65
|
`context.coordinationHints` entry even for a clear swarm, so the next agent knows
|
|
61
66
|
to validate locally with `projscan coordinate --format json`,
|
|
62
67
|
`projscan coordinate --watch --interval 5 --format json`, and
|
|
63
68
|
`projscan agent-brief --format json` before continuing parallel edits.
|
|
69
|
+
`preflight` also carries this proof path under `evidence.coordination`: it keeps
|
|
70
|
+
the compact readiness counts and adds the local-only command path, current
|
|
71
|
+
worktree summary, validation workflow, and session-boundary reminder used by
|
|
72
|
+
`coordinate`.
|
|
64
73
|
|
|
65
74
|
For MCP clients that support long-running notifications, use the watch tool:
|
|
66
75
|
|
|
@@ -116,5 +125,5 @@ These are the next hardening targets for real swarm usage:
|
|
|
116
125
|
- transitive collision recall: prove dependent-file conflicts are caught, not
|
|
117
126
|
only same-file conflicts
|
|
118
127
|
- live watch adoption: prove agents notice and act on coordination changes
|
|
119
|
-
- preflight and
|
|
120
|
-
|
|
128
|
+
- preflight and handoff adoption: prove agents consistently cite the shared
|
|
129
|
+
coordination proof path before editing, committing, and handing off
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projscan",
|
|
3
3
|
"mcpName": "io.github.abhiyoheswaran1/projscan",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.8.0",
|
|
5
5
|
"description": "Agent-first code intelligence. MCP server (2025-03-26) with 11 AST adapters covering 12 named languages: JavaScript, TypeScript, Python, Go, Java, Ruby, Rust, PHP, C#, Kotlin, Swift, and C++; repo understanding maps (projscan_understand), stable v3 semantic graph (projscan_semantic_graph), dataflow risk engine with bridge-helper detection (projscan_dataflow), code graph, file + per-function AST cyclomatic complexity, per-function fan-in + fan-out, coupling + cycle detection, structural PR diff with HTML reporter, coverage report with HTML reporter, intent-grounded one-call PR review (projscan_review with optional `intent` arg, new taint flows, contract changes, and newDataflowRisks) and long-running PR-watch mode with structured per-bucket deltas (projscan_review_watch), first-60-seconds workflow orientation (projscan_start), agent workplans (projscan_workplan), bug-hunt queues (projscan_bug_hunt), product-line planning (projscan_release_train), evidence packs (projscan_evidence_pack), regression planning (projscan_regression_plan), agent briefs (projscan_agent_brief), quality scorecards (projscan_quality_scorecard), and preflight with supply-chain IOC evidence, rule-driven fix suggestions + mechanical apply layer with rollback (projscan_apply_fix, projscan_fix_suggest, projscan_explain_issue), source-to-sink taint analysis (projscan_taint) with truncation reporting, transitive blast-radius analysis with cross-repo mode (projscan_impact for files and symbols), cross-repo workspace registration + intelligence (projscan_workspace_graph), per-function semantic search chunks (sub-file embeddings), per-rule confidence + severity drift + cost-summary analytics with live streaming (projscan_cost_summary), stable local analyzer + reporter plugin API (projscan_plugin, CLI --reporter, opt-in via PROJSCAN_PLUGINS_PREVIEW=1), monorepo workspace awareness with cross-package import policy + per-package dependencies / outdated / audit, BM25 + optional semantic search, cursor pagination, progress notifications, context-budgeted output, and a stable-surface CI guard. CLI on the side.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|