projscan 4.0.0 → 4.2.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.
Files changed (39) hide show
  1. package/README.md +480 -24
  2. package/dist/cli/commands/route.js +1 -0
  3. package/dist/cli/commands/route.js.map +1 -1
  4. package/dist/cli/commands/semanticGraph.js +27 -0
  5. package/dist/cli/commands/semanticGraph.js.map +1 -1
  6. package/dist/cli/commands/start.js +1095 -2
  7. package/dist/cli/commands/start.js.map +1 -1
  8. package/dist/core/dependencyAnalyzer.js +172 -0
  9. package/dist/core/dependencyAnalyzer.js.map +1 -1
  10. package/dist/core/intentRouter.d.ts +8 -1
  11. package/dist/core/intentRouter.js +2186 -22
  12. package/dist/core/intentRouter.js.map +1 -1
  13. package/dist/core/issueEngine.js +6 -7
  14. package/dist/core/issueEngine.js.map +1 -1
  15. package/dist/core/onboarding.d.ts +2 -2
  16. package/dist/core/onboarding.js +29 -5
  17. package/dist/core/onboarding.js.map +1 -1
  18. package/dist/core/start.d.ts +1 -0
  19. package/dist/core/start.js +3047 -10
  20. package/dist/core/start.js.map +1 -1
  21. package/dist/mcp/server.d.ts +1 -1
  22. package/dist/mcp/server.js +14 -5
  23. package/dist/mcp/server.js.map +1 -1
  24. package/dist/mcp/tools/start.js +6 -1
  25. package/dist/mcp/tools/start.js.map +1 -1
  26. package/dist/projscan-sbom.cdx.json +6 -6
  27. package/dist/reporters/consoleReporter.js +19 -0
  28. package/dist/reporters/consoleReporter.js.map +1 -1
  29. package/dist/reporters/markdownReporter.js +19 -0
  30. package/dist/reporters/markdownReporter.js.map +1 -1
  31. package/dist/tool-manifest.json +6 -2
  32. package/dist/types.d.ts +275 -0
  33. package/docs/GUIDE.md +1567 -0
  34. package/docs/ROADMAP.md +219 -0
  35. package/docs/demos/projscan-4-1-demo.html +677 -0
  36. package/docs/projscan-mission-control.png +0 -0
  37. package/docs/projscan-proof-router.png +0 -0
  38. package/package.json +8 -1
  39. package/scripts/capture-readme-assets.mjs +60 -0
package/dist/types.d.ts CHANGED
@@ -54,6 +54,8 @@ export interface DependencyReport {
54
54
  dependencies: Record<string, string>;
55
55
  devDependencies: Record<string, string>;
56
56
  risks: DependencyRisk[];
57
+ licenses?: DependencyLicenseSummary;
58
+ sizes?: DependencySizeSummary;
57
59
  /**
58
60
  * Per-workspace breakdown when scanning a monorepo (0.13.0+). Absent for
59
61
  * single-package repos. The top-level `totalDependencies`,
@@ -70,6 +72,36 @@ export interface DependencyReport {
70
72
  risks: DependencyRisk[];
71
73
  }>;
72
74
  }
75
+ export interface DependencyLicenseEntry {
76
+ name: string;
77
+ version: string;
78
+ scope: 'production' | 'development';
79
+ license: string | null;
80
+ workspace?: string;
81
+ }
82
+ export interface DependencyLicenseSummary {
83
+ packages: DependencyLicenseEntry[];
84
+ byLicense: Record<string, number>;
85
+ unknown: string[];
86
+ copyleft: DependencyLicenseEntry[];
87
+ noticeCandidates: DependencyLicenseEntry[];
88
+ }
89
+ export interface DependencySizeEntry {
90
+ name: string;
91
+ version: string;
92
+ scope: 'production' | 'development';
93
+ bytes: number | null;
94
+ formatted: string;
95
+ installed: boolean;
96
+ workspace?: string;
97
+ }
98
+ export interface DependencySizeSummary {
99
+ packages: DependencySizeEntry[];
100
+ largest: DependencySizeEntry[];
101
+ totalBytes: number;
102
+ formattedTotal: string;
103
+ missing: string[];
104
+ }
73
105
  export interface DependencyRisk {
74
106
  name: string;
75
107
  reason: string;
@@ -668,11 +700,253 @@ export interface StartFirstTenMinutes {
668
700
  outcome: string;
669
701
  commands: StartFirstTenMinutesStep[];
670
702
  }
703
+ export type StartModeSource = 'explicit' | 'intent' | 'default';
704
+ export type StartMissionControlStatus = 'ready' | 'needs_setup' | 'needs_attention' | 'blocked';
705
+ export interface StartRoutedIntent {
706
+ intent: string;
707
+ category: string;
708
+ tool: string;
709
+ cli: string;
710
+ why: string;
711
+ example: string;
712
+ confidence: 'high' | 'medium' | 'low';
713
+ rank: number;
714
+ score: number;
715
+ matchedKeywords: string[];
716
+ }
717
+ export interface StartUnresolvedInput {
718
+ name: string;
719
+ placeholder: string;
720
+ sourceAction: string;
721
+ instruction: string;
722
+ }
723
+ export interface StartMissionResumeReference {
724
+ id: string;
725
+ phaseId: StartExecutionPhaseId;
726
+ kind: StartExecutionStepKind;
727
+ status: StartExecutionStatus;
728
+ label: string;
729
+ instruction?: string;
730
+ command?: string;
731
+ placeholder?: string;
732
+ }
733
+ export interface StartMissionToolCall {
734
+ tool: string;
735
+ args?: Record<string, unknown>;
736
+ }
737
+ export interface StartMissionProofToolCall extends StartMissionToolCall {
738
+ stepId: string;
739
+ command: string;
740
+ }
741
+ export interface StartMissionProofItem {
742
+ stepId: string;
743
+ status: StartExecutionStatus;
744
+ label: string;
745
+ command: string;
746
+ toolCall?: StartMissionToolCall;
747
+ }
748
+ export interface StartMissionInputBinding {
749
+ inputId: string;
750
+ label: string;
751
+ placeholder: string;
752
+ instruction: string;
753
+ followUpIds: string[];
754
+ }
755
+ export type StartMissionResumeChecklistItemKind = 'run_current' | 'resolve_input' | 'run_follow_up' | 'run_proof' | 'confirm_done';
756
+ export interface StartMissionResumeChecklistItem {
757
+ id: string;
758
+ kind: StartMissionResumeChecklistItemKind;
759
+ phaseId: StartExecutionPhaseId;
760
+ stepId: string;
761
+ status: StartExecutionStatus;
762
+ label: string;
763
+ command?: string;
764
+ tool?: string;
765
+ args?: Record<string, unknown>;
766
+ placeholder?: string;
767
+ instruction?: string;
768
+ blockedBy?: string[];
769
+ dependsOn?: string[];
770
+ unlocks?: string[];
771
+ followUpIds?: string[];
772
+ }
773
+ export interface StartMissionResumeFollowUp {
774
+ id: string;
775
+ phaseId: StartExecutionPhaseId;
776
+ kind: StartExecutionStepKind;
777
+ status: StartExecutionStatus;
778
+ label: string;
779
+ command?: string;
780
+ tool?: string;
781
+ args?: Record<string, unknown>;
782
+ blockedBy?: string[];
783
+ dependsOn?: string[];
784
+ }
785
+ export interface StartMissionResume {
786
+ currentStep: StartExecutionCursor;
787
+ status: StartExecutionStatus;
788
+ instruction: string;
789
+ prompt: string;
790
+ commandBlock?: string;
791
+ toolCall?: StartMissionToolCall;
792
+ followUps?: StartMissionResumeFollowUp[];
793
+ inputBindings?: StartMissionInputBinding[];
794
+ checklist?: StartMissionResumeChecklistItem[];
795
+ remainingProofItems?: StartMissionProofItem[];
796
+ remainingProofCommands?: string[];
797
+ remainingProofToolCalls?: StartMissionProofToolCall[];
798
+ unlocks?: StartMissionResumeReference[];
799
+ blockedBy?: StartMissionResumeReference[];
800
+ }
801
+ export interface StartMissionHandoff {
802
+ currentStep: StartExecutionCursor;
803
+ resume: StartMissionResume;
804
+ reviewGate: StartMissionReviewGate;
805
+ nextAction: PreflightSuggestedAction;
806
+ readyActions: PreflightSuggestedAction[];
807
+ needsInput: StartUnresolvedInput[];
808
+ doneWhen: string[];
809
+ readyProof: {
810
+ summary: string;
811
+ commands: string[];
812
+ toolCalls?: StartMissionProofToolCall[];
813
+ items?: StartMissionProofItem[];
814
+ };
815
+ }
816
+ export type StartExecutionPhaseId = 'next_action' | 'ready_now' | 'resolve_inputs' | 'follow_up' | 'proof' | 'done_when';
817
+ export type StartExecutionStatus = 'ready' | 'blocked' | 'pending';
818
+ export type StartExecutionStepKind = 'tool' | 'input' | 'proof' | 'criterion' | 'handoff';
819
+ export interface StartExecutionStep {
820
+ id: string;
821
+ kind: StartExecutionStepKind;
822
+ status: StartExecutionStatus;
823
+ label: string;
824
+ command?: string;
825
+ tool?: string;
826
+ args?: Record<string, unknown>;
827
+ instruction?: string;
828
+ placeholder?: string;
829
+ dependsOn?: string[];
830
+ blockedBy?: string[];
831
+ unlocks?: string[];
832
+ }
833
+ export interface StartExecutionPhase {
834
+ id: StartExecutionPhaseId;
835
+ title: string;
836
+ status: StartExecutionStatus;
837
+ steps: StartExecutionStep[];
838
+ }
839
+ export interface StartExecutionCursor {
840
+ phaseId: StartExecutionPhaseId;
841
+ stepId: string;
842
+ status: StartExecutionStatus;
843
+ kind: StartExecutionStepKind;
844
+ label: string;
845
+ command?: string;
846
+ tool?: string;
847
+ args?: Record<string, unknown>;
848
+ instruction?: string;
849
+ placeholder?: string;
850
+ blockedBy?: string[];
851
+ unlocks?: string[];
852
+ reason: string;
853
+ }
854
+ export interface StartExecutionPlan {
855
+ summary: string;
856
+ currentPhase: StartExecutionPhaseId;
857
+ cursor: StartExecutionCursor;
858
+ phases: StartExecutionPhase[];
859
+ }
860
+ export interface StartMissionRunbook {
861
+ title: string;
862
+ status: StartMissionControlStatus;
863
+ currentPhase: StartExecutionPhaseId;
864
+ currentStep: StartExecutionCursor;
865
+ resume: StartMissionResume;
866
+ readyCommandBlock: string;
867
+ blockedInputSummary?: string;
868
+ markdown: string;
869
+ }
870
+ export interface StartMissionReviewWorktree {
871
+ available: boolean;
872
+ clean: boolean;
873
+ changedFileCount: number;
874
+ files: string[];
875
+ baseRef: string | null;
876
+ summary: string;
877
+ reason?: string;
878
+ }
879
+ export interface StartMissionReviewProof {
880
+ summary: string;
881
+ commands: string[];
882
+ toolCalls?: StartMissionProofToolCall[];
883
+ items?: StartMissionProofItem[];
884
+ }
885
+ export type StartMissionReviewBlockedAction = 'next_slice' | 'release' | 'publish' | 'deploy' | 'push' | 'merge' | 'version_bump';
886
+ export interface StartMissionReviewPolicy {
887
+ approvalRequired: true;
888
+ blockedActions: StartMissionReviewBlockedAction[];
889
+ summary: string;
890
+ }
891
+ export interface StartMissionReviewDecision {
892
+ id: 'approve_next_slice' | 'request_changes' | 'review_version_candidate';
893
+ label: string;
894
+ description: string;
895
+ consequence: string;
896
+ reply: string;
897
+ }
898
+ export interface StartMissionReviewGate {
899
+ title: string;
900
+ required: true;
901
+ status: StartMissionControlStatus;
902
+ stopCondition: string;
903
+ reviewPrompt: string;
904
+ checklist: string[];
905
+ doneWhen: string[];
906
+ policy: StartMissionReviewPolicy;
907
+ decisions: StartMissionReviewDecision[];
908
+ commands: string[];
909
+ worktree: StartMissionReviewWorktree;
910
+ proof: StartMissionReviewProof;
911
+ markdown: string;
912
+ }
913
+ export interface StartMissionTaskCard {
914
+ title: string;
915
+ status: StartMissionControlStatus;
916
+ currentPhase: StartExecutionPhaseId;
917
+ currentStep: StartExecutionCursor;
918
+ markdown: string;
919
+ }
920
+ export interface StartMissionControl {
921
+ intent?: string;
922
+ status: StartMissionControlStatus;
923
+ headline: string;
924
+ whyNow: string;
925
+ primaryAction: PreflightSuggestedAction;
926
+ actionPlan: PreflightSuggestedAction[];
927
+ readyActions: PreflightSuggestedAction[];
928
+ routedIntent?: StartRoutedIntent;
929
+ alternatives?: StartRoutedIntent[];
930
+ unresolvedInputs: StartUnresolvedInput[];
931
+ guardrails: PreflightSuggestedAction[];
932
+ successCriteria: string[];
933
+ proofSummary: string;
934
+ proofCommands: string[];
935
+ resume: StartMissionResume;
936
+ handoff: StartMissionHandoff;
937
+ executionPlan: StartExecutionPlan;
938
+ runbook: StartMissionRunbook;
939
+ reviewGate: StartMissionReviewGate;
940
+ taskCard: StartMissionTaskCard;
941
+ handoffPrompt: string;
942
+ }
671
943
  export interface StartReport {
672
944
  schemaVersion: 1;
673
945
  readOnly: true;
674
946
  rootPath: string;
675
947
  mode: WorkplanMode;
948
+ modeSource: StartModeSource;
949
+ modeReason: string;
676
950
  summary: string;
677
951
  setup: {
678
952
  overall: 'pass' | 'warn' | 'fail' | 'info';
@@ -687,6 +961,7 @@ export interface StartReport {
687
961
  };
688
962
  recommendedWorkflow: StartWorkflowRecommendation;
689
963
  firstTenMinutes: StartFirstTenMinutes;
964
+ missionControl: StartMissionControl;
690
965
  coordinationHints: SessionCoordinationHint[];
691
966
  evidence: {
692
967
  workplanVerdict: PreflightVerdict;