projscan 4.1.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.
package/dist/types.d.ts CHANGED
@@ -720,7 +720,88 @@ export interface StartUnresolvedInput {
720
720
  sourceAction: string;
721
721
  instruction: string;
722
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
+ }
723
801
  export interface StartMissionHandoff {
802
+ currentStep: StartExecutionCursor;
803
+ resume: StartMissionResume;
804
+ reviewGate: StartMissionReviewGate;
724
805
  nextAction: PreflightSuggestedAction;
725
806
  readyActions: PreflightSuggestedAction[];
726
807
  needsInput: StartUnresolvedInput[];
@@ -728,8 +809,114 @@ export interface StartMissionHandoff {
728
809
  readyProof: {
729
810
  summary: string;
730
811
  commands: string[];
812
+ toolCalls?: StartMissionProofToolCall[];
813
+ items?: StartMissionProofItem[];
731
814
  };
732
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
+ }
733
920
  export interface StartMissionControl {
734
921
  intent?: string;
735
922
  status: StartMissionControlStatus;
@@ -745,7 +932,12 @@ export interface StartMissionControl {
745
932
  successCriteria: string[];
746
933
  proofSummary: string;
747
934
  proofCommands: string[];
935
+ resume: StartMissionResume;
748
936
  handoff: StartMissionHandoff;
937
+ executionPlan: StartExecutionPlan;
938
+ runbook: StartMissionRunbook;
939
+ reviewGate: StartMissionReviewGate;
940
+ taskCard: StartMissionTaskCard;
749
941
  handoffPrompt: string;
750
942
  }
751
943
  export interface StartReport {
package/docs/GUIDE.md CHANGED
@@ -205,7 +205,9 @@ When the agent first opens a repo, or before starting a refactor, the question i
205
205
  - **`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.
206
206
  - **`projscan_analyze` / `projscan analyze`** — the everything report; useful at session start but verbose.
207
207
 
208
- **Typical agent flow:** start with `projscan privacy-check`, then `projscan_start` with an optional plain-language intent. If no explicit mode is supplied, start infers the workflow mode from the intent, such as `before_commit` for commit-safety checks; read `modeSource` and `modeReason` to see whether the mode was explicit, inferred, or defaulted. `modeReason` distinguishes workflow-mode defaulting from action routing, so an impact intent can still route through Mission Control while the workflow stays `before_edit`. The `firstTenMinutes` path and current-worktree coordination hint follow that resolved mode, so a commit-safety start does not send the developer back through a before-edit gate. Follow `missionControl.actionPlan`, call `missionControl.readyActions` immediately, use routed-intent weighted `confidence`, `score`, and `matchedKeywords` to judge weak or ambiguous matches, and read the same confidence line in console output when working manually. Fill any `missionControl.unresolvedInputs` before running placeholder follow-ups, inspect `missionControl.alternatives` when the intent mixes goals, stop only when `missionControl.successCriteria` is satisfied, and hand off with `missionControl.handoff` or the concise `missionControl.handoffPrompt`. Cite `missionControl.proofSummary` plus the runnable-only `missionControl.proofCommands` in the handoff. MCP agents should call each action by its `tool` and `args`; humans can run the matching `command`. Use `projscan_understand` and `projscan_preflight` when you need broader context or a safety gate. Use `projscan_workplan` when you need an ordered execution plan, `projscan_agent_brief` for a compact handoff, and `projscan_evidence_pack --pr-comment` when you need reviewer-facing proof. Deeper tools such as `doctor`, `hotspots`, `dataflow`, `review`, `bug-hunt`, `quality-scorecard`, `dogfood`, and `trial` are follow-up tools.
208
+ **Typical agent flow:** start with `projscan privacy-check`, then `projscan_start` with an optional plain-language intent. If no explicit mode is supplied, start infers the workflow mode from the intent, such as `before_commit` for commit-safety checks; read `modeSource` and `modeReason` to see whether the mode was explicit, inferred, or defaulted. `modeReason` distinguishes workflow-mode defaulting from action routing, so an impact intent can still route through Mission Control while the workflow stays `before_edit`. The `firstTenMinutes` path and current-worktree coordination hint follow that resolved mode, so a commit-safety start does not send the developer back through a before-edit gate. Follow `missionControl.actionPlan`, call `missionControl.readyActions` immediately, use `missionControl.executionPlan.currentPhase` as the cursor-aligned phase pointer, and use `missionControl.executionPlan.cursor.tool` / `args` when the cursor is directly MCP-callable. Use routed-intent weighted `confidence`, `score`, and `matchedKeywords` to judge weak or ambiguous matches, and read the same confidence line in console output when working manually. Fill any `missionControl.unresolvedInputs` before running placeholder follow-ups, inspect `missionControl.alternatives` when the intent mixes goals, stop only when `missionControl.successCriteria` is satisfied, and hand off with `missionControl.handoff`, `missionControl.runbook`, or the concise `missionControl.handoffPrompt`. Use `missionControl.reviewGate` as the autonomous-work stop boundary: finish the current checklist and proof, capture `git status --short` and `git diff --stat`, then wait for approval before another slice, release, publish, or deploy. Read `missionControl.reviewGate.worktree` for current worktree availability, changed-file count, base ref, and visible changed files. Use `missionControl.reviewGate.proof` when the reviewer needs the remaining proof queue without reading the full resume object. Read `missionControl.reviewGate.doneWhen` for the success criteria the reviewer must confirm before approving more work. Read `missionControl.reviewGate.policy` before continuing from a review handoff; it lists the actions blocked until explicit reviewer approval: another slice, release, publish, deploy, push, merge, and version bump. Use `projscan start --review-gate-json --intent "<goal>"` or saved `review-gate.json` when a script needs proof, worktree evidence, done criteria, decisions, and policy in one review object. Use `projscan start --review-policy --intent "<goal>"` or saved `review-policy.json` when a script only needs that approval boundary. Use `missionControl.reviewGate.decisions` as the approval menu in review gates, task cards, and runbooks; each decision includes copyable reviewer reply text so agents do not infer permission to continue, release, or publish. The default console review gate, saved mission bundle README, concise handoff prompt, `--review-replies`, and saved `review-replies.txt` show those replies for first-open review. `missionControl.handoff.reviewGate`, `--handoff-json`, and saved `handoff.json` carry that same gate for transfer-only flows. The handoff prompt starts with `missionControl.resume.prompt`, so it carries the current cursor, runnable command or blocked input instruction, labeled unlocks or blockers, done criteria, ready proof, review stop condition, and reviewer replies in one copyable sentence; the normal console prints that same value as `Handoff Prompt` without requiring JSON or `--include-handoff`, `projscan start --handoff-prompt --intent "<goal>"` prints only that prompt for piping or copy/paste, and the Markdown runbook renders it as `## Handoff Prompt` so copied runbooks carry the same next-agent prompt. When a human just needs the runnable shell step, `projscan start --next-command --intent "<goal>"` prints only the current cursor command; when an MCP agent needs the callable equivalent, `projscan start --next-tool-call --intent "<goal>"` prints the current cursor tool call as compact JSON. Cite `missionControl.proofSummary` plus the runnable-only `missionControl.proofCommands` in broad handoff notes, and use `missionControl.handoff.readyProof.items` when resuming because it is the complete ordered remaining-proof queue; each item carries its CLI command and an optional MCP `toolCall`. `missionControl.handoff.readyProof.commands` and `toolCalls` remain convenient command-only and MCP-callable views. MCP agents should use `missionControl.resume.toolCall` when present, use `missionControl.resume.inputBindings` to map unlocked placeholders to input steps, then call `missionControl.resume.followUps` as the next template calls; when they need one ordered sequence, follow `missionControl.resume.checklist`, whose `run_proof` rows include `tool` and `args` for MCP-callable proof steps. The normal console `Resume Checklist` and Markdown runbook checklist print callable rows inline as `(MCP: ...)` and mark unmapped proof rows as `(CLI only)`, so a copied runbook or default terminal run remains self-contained even outside the JSON payload. After the current action, prefer `missionControl.resume.remainingProofItems` for complete proof, using `remainingProofToolCalls` for the callable MCP subset without rerunning the current command. Humans can run the matching `command`; the normal console `Ready Proof` command list, normal console `Proof Queue`, and runbook `Proof queue` all use remaining proof so the current cursor command is not repeated, and each queued item shows either its MCP call or `CLI only`. Use `projscan_understand` and `projscan_preflight` when you need broader context or a safety gate. Use `projscan_workplan` when you need an ordered execution plan, `projscan_agent_brief` for a compact handoff, and `projscan_evidence_pack --pr-comment` when you need reviewer-facing proof. Deeper tools such as `doctor`, `hotspots`, `dataflow`, `review`, `bug-hunt`, `quality-scorecard`, `dogfood`, and `trial` are follow-up tools.
209
+
210
+ For shortcut discovery, `projscan start --shortcuts --intent "<goal>"` prints the copyable command menu for the current mission, and `projscan start --shortcuts-json --intent "<goal>"` prints the same menu as JSON for agents and scripts. For shell copy/paste, `projscan start --mission-script --intent "<goal>"` prints a POSIX script that runs the current cursor command, then the remaining proof queue, then prints the review evidence commands. For MCP queue copy/paste, `projscan start --ready-tool-calls --intent "<goal>"` prints the current cursor call followed by remaining MCP-callable proof as compact JSON. For structured resume handoff, `projscan start --resume-json --intent "<goal>"` prints only `missionControl.resume`. For the complete transfer object, `projscan start --handoff-json --intent "<goal>"` prints only `missionControl.handoff`. For a file bundle, `projscan start --save-mission .projscan/mission --intent "<goal>"` writes `README.md`, `next-command.txt`, `next-tool-call.json`, `handoff-prompt.txt`, `resume-prompt.txt`, `task-card.md`, `review-gate.md`, `review-gate.json`, `review-policy.json`, `review-replies.txt`, the runbook, handoff JSON, resume JSON, `ready-tool-calls.json`, `shortcuts.json`, `mission.sh`, `status.sh`, `proof-logs/README.md`, `proof-logs/status.jsonl`, `proof-logs/run-report.md`, `proof-logs/summary.json`, proof commands, and manifest. Saved `mission.sh` writes current-command and proof-command output under `proof-logs/`, appends exit-code rows to `status.jsonl`, refreshes `run-report.md`, and writes `summary.json`, so reviewers and wrappers can scan pass/fail proof before opening raw logs. Bundle `status.sh` reads `summary.json` and uses exit codes `0`, `1`, and `2` for passed, failed, and not-ready states. For verification-only copy/paste, `projscan start --proof-commands --intent "<goal>"` prints the remaining ready proof commands one per line without the rest of the start report. For an ordered checklist without the full report, `projscan start --checklist --intent "<goal>"` prints only the resume checklist rows. For paste-ready PR, issue, or handoff notes, `projscan start --task-card --intent "<goal>"` prints the Markdown task card. MCP agents can read `missionControl.taskCard.markdown` when they need the same checklist without rendering it from `resume.checklist`. For stop-and-review notes, `projscan start --review-gate --intent "<goal>"` prints only `missionControl.reviewGate.markdown`, `projscan start --review-gate-json --intent "<goal>"` prints only the review gate JSON, `projscan start --review-policy --intent "<goal>"` prints only the review policy JSON, and `projscan start --review-replies --intent "<goal>"` prints only the copyable reviewer replies. For a full Markdown artifact, `projscan start --runbook --intent "<goal>"` prints the mission runbook.
209
211
 
210
212
  ### 2. Review — "is this PR safe to merge?"
211
213
 
@@ -422,18 +422,19 @@
422
422
  <section class="hero" aria-label="projscan Mission Control">
423
423
  <div class="intro">
424
424
  <div>
425
- <p class="eyebrow">Unreleased developer-life upgrade</p>
426
- <h1>Plain-language repo work, routed to proof.</h1>
425
+ <p class="eyebrow">Developer-life upgrade</p>
426
+ <h1>Tell projscan what you are doing.</h1>
427
427
  <p class="lead">
428
- projscan now turns a developer's intent into the right local
429
- command, the first files to trust, the ready actions, and the
430
- proof commands that make a PR reviewable.
428
+ projscan routes a developer goal to the next safe command, the
429
+ MCP call an agent can run, and the proof that makes a handoff
430
+ reviewable.
431
431
  </p>
432
432
  <div class="pills" aria-label="Product capabilities">
433
433
  <span class="pill">Mission Control</span>
434
434
  <span class="pill">Local-first</span>
435
435
  <span class="pill">MCP-ready</span>
436
- <span class="pill">No source upload</span>
436
+ <span class="pill">Copyable handoff</span>
437
+ <span class="pill">Review gate</span>
437
438
  </div>
438
439
  </div>
439
440
 
@@ -443,12 +444,12 @@
443
444
  <span>intent to workflow</span>
444
445
  </div>
445
446
  <div class="metric">
446
- <strong>45</strong>
447
- <span>MCP tools preserved</span>
447
+ <strong>1 JSON</strong>
448
+ <span>next MCP call</span>
448
449
  </div>
449
450
  <div class="metric">
450
- <strong>A</strong>
451
- <span>dogfood health gate</span>
451
+ <strong>0</strong>
452
+ <span>source uploads</span>
452
453
  </div>
453
454
  </div>
454
455
  </div>
@@ -458,63 +459,93 @@
458
459
  <span class="dot red"></span>
459
460
  <span class="dot amber"></span>
460
461
  <span class="dot green"></span>
461
- <span class="terminal-title">projscan start --intent</span>
462
+ <span class="terminal-title">projscan start shortcuts</span>
462
463
  </div>
463
464
  <div class="terminal-body">
464
465
  <span class="line"
465
466
  ><span class="prompt">$</span>
466
467
  <span class="cmd"
467
- >projscan start --intent "is it safe to commit this
468
- change?"</span
468
+ >projscan start --intent "what breaks if I rename the auth
469
+ token loader"</span
469
470
  ></span
470
471
  >
471
472
  <span class="line dim">ProjScan Mission Control</span>
472
- <span class="line">Intent: is it safe to commit this change?</span>
473
+ <span class="line">Intent: what breaks if I rename the auth token loader</span>
473
474
  <span class="line">Status: <span class="warn">needs_attention</span></span>
474
475
  <span class="line"
475
476
  >Route:
476
- <span class="notice">Safety gate via projscan_preflight</span></span
477
+ <span class="notice">Impact analysis via projscan_search</span></span
477
478
  >
478
479
  <span class="line dim"
479
- >confidence: high; matched: safe, commit</span
480
+ >confidence: high; matched: breaks, rename</span
480
481
  >
481
482
 
482
483
  <div class="term-section">
483
- <span class="line term-heading">Action Plan</span>
484
+ <span class="line term-heading">Run Cursor</span>
484
485
  <span class="line"
485
- >- Use projscan_preflight before broader workflow
486
- commands</span
486
+ >command: projscan search "auth token loader" --format
487
+ json</span
487
488
  >
488
489
  <span class="line"
489
- >- Preserve the original goal across follow-up evidence</span
490
+ >MCP call: projscan_search {"query":"auth token loader"}</span
490
491
  >
491
- <span class="line"
492
- >- Surface blockers with owner, file, or next command</span
492
+ <span class="line">unlocks: symbol input, file input</span>
493
+ </div>
494
+
495
+ <div class="term-section">
496
+ <span class="line term-heading">Copyable Shortcuts</span>
497
+ <span class="line success"
498
+ >projscan start --shortcuts --intent "..."</span
499
+ >
500
+ <span class="line success"
501
+ >projscan start --next-command --intent "..."</span
502
+ >
503
+ <span class="line success"
504
+ >projscan start --next-tool-call --intent "..."</span
505
+ >
506
+ <span class="line success"
507
+ >projscan start --task-card --intent "..."</span
508
+ >
509
+ <span class="line success"
510
+ >projscan start --mission-script --intent "..."</span
511
+ >
512
+ <span class="line success"
513
+ >projscan start --review-gate --intent "..."</span
514
+ >
515
+ <span class="line success"
516
+ >projscan start --save-mission .projscan/mission --intent
517
+ "..."</span
493
518
  >
519
+ <span class="line dim">writes task card, review gate, mission.sh</span>
494
520
  </div>
495
521
 
496
522
  <div class="term-section">
497
523
  <span class="line term-heading">Ready Proof</span>
498
524
  <span class="line success"
499
- >- projscan preflight --mode before_commit --format json</span
525
+ >- projscan preflight --mode before_edit --format json</span
500
526
  >
501
527
  <span class="line success"
502
528
  >- projscan understand --view verify --format json</span
503
529
  >
504
- <span class="line success"
505
- >- projscan session touched --format json</span
506
- >
507
530
  </div>
508
531
 
509
532
  <div class="term-section">
510
533
  <span class="line term-heading">Done When</span>
511
534
  <span class="line"
512
- >- Preflight returns proceed or documented manual review</span
535
+ >- Search returns an exact symbol or file path</span
513
536
  >
514
537
  <span class="line"
515
- >- Every blocker has a concrete follow-up command</span
538
+ >- Impact is reviewed before code edits</span
516
539
  >
517
540
  </div>
541
+
542
+ <div class="term-section">
543
+ <span class="line term-heading">Review Gate</span>
544
+ <span class="line">capture: git status --short</span>
545
+ <span class="line">capture: git diff --stat</span>
546
+ <span class="line success">reply: Approved, one bounded slice</span>
547
+ <span class="line warn">stop before another slice or release</span>
548
+ </div>
518
549
  </div>
519
550
  </section>
520
551
  </section>
@@ -552,12 +583,13 @@
552
583
  <section class="proof" id="proof" aria-label="Proof and dependency view">
553
584
  <div class="proof-header">
554
585
  <div>
555
- <p class="eyebrow">Intent, graph, and dependency intelligence</p>
556
- <h2>Fewer dead-end agent turns.</h2>
586
+ <p class="eyebrow">Intent, graph, and handoff intelligence</p>
587
+ <h2>Copy the next move.</h2>
557
588
  </div>
558
589
  <p>
559
- The new flow is built for a developer asking "what now?" after a
560
- change, a failed run, a risky rename, or a dependency question.
590
+ Developers and agents can list the shortcut menu, pull the next
591
+ shell command, fetch the MCP call, or copy the checklist and
592
+ Markdown runbook without reading the full report.
561
593
  </p>
562
594
  </div>
563
595
 
@@ -567,34 +599,33 @@
567
599
  <span class="dot red"></span>
568
600
  <span class="dot amber"></span>
569
601
  <span class="dot green"></span>
570
- <span class="terminal-title">projscan route</span>
602
+ <span class="terminal-title">projscan start --next-tool-call</span>
571
603
  </div>
572
604
  <div class="terminal-body">
573
605
  <span class="line"
574
606
  ><span class="prompt">$</span>
575
607
  <span class="cmd"
576
- >projscan route "what breaks if I rename the auth token
577
- loader"</span
608
+ >projscan start --next-tool-call --intent "what breaks if I
609
+ rename the auth token loader"</span
578
610
  ></span
579
611
  >
580
- <span class="line dim">Best tools for the developer goal</span>
612
+ <span class="line dim">Current cursor as MCP JSON</span>
581
613
  <span class="line">&nbsp;</span>
582
- <span class="line term-heading">1. projscan_impact</span>
583
- <span class="line">confidence: high</span>
584
- <span class="line">matched: breaks, rename</span>
585
- <span class="line notice"
586
- >Before renaming or deleting, see every caller that
587
- breaks.</span
588
- >
614
+ <span class="line term-heading">{"tool":"projscan_search",</span>
589
615
  <span class="line success"
590
- >projscan impact --symbol buildCodeGraph --format json</span
616
+ >&nbsp;"args":{"query":"auth token loader"}}</span
591
617
  >
592
618
  <span class="line">&nbsp;</span>
593
- <span class="line term-heading">2. projscan_dataflow</span>
594
- <span class="line">confidence: high</span>
595
- <span class="line">matched: token</span>
619
+ <span class="line term-heading">Checklist handoff</span>
620
+ <span class="line success"
621
+ >- [ready] run_current ready-1</span
622
+ >
623
+ <span class="line success"
624
+ >- [blocked] resolve_input input-1</span
625
+ >
626
+ <span class="line success">- [ready] run_proof proof-2</span>
596
627
  <span class="line notice"
597
- >Spot request-data reaching dangerous sinks.</span
628
+ >Review gate: capture status, diff, then wait.</span
598
629
  >
599
630
  </div>
600
631
  </section>
@@ -603,35 +634,33 @@
603
634
  <div class="signal">
604
635
  <span class="tag green">Verify</span>
605
636
  <span>
606
- <strong>Proof selection</strong>
607
- Which tests should I run? now routes to
608
- <code>understand --view verify</code> instead of generic
609
- regression planning.
637
+ <strong>Proof commands</strong>
638
+ <code>--proof-commands</code> returns the remaining
639
+ verification commands, one per line.
610
640
  </span>
611
641
  </div>
612
642
  <div class="signal">
613
- <span class="tag blue">Setup</span>
643
+ <span class="tag blue">MCP</span>
614
644
  <span>
615
- <strong>Local command discovery</strong>
616
- npm scripts, lint, typecheck, Storybook, Cypress, Playwright,
617
- Docker Compose, migrations, and seed/reset commands are called
618
- out where agents need them.
645
+ <strong>MCP call shortcut</strong>
646
+ <code>--next-tool-call</code> returns the cursor tool and args
647
+ as compact JSON.
619
648
  </span>
620
649
  </div>
621
650
  <div class="signal">
622
- <span class="tag amber">License</span>
651
+ <span class="tag amber">List</span>
623
652
  <span>
624
- <strong>Dependency intelligence</strong>
625
- Dependency reports now summarize known licenses, copyleft risk,
626
- installed package sizes, and package importer lookups.
653
+ <strong>Checklist shortcut</strong>
654
+ <code>--checklist</code> returns current, blocked, follow-up,
655
+ proof, and done rows.
627
656
  </span>
628
657
  </div>
629
658
  <div class="signal">
630
- <span class="tag red">Trust</span>
659
+ <span class="tag red">Gate</span>
631
660
  <span>
632
- <strong>Release review guardrails</strong>
633
- Stable-surface checks preserve public CLI and MCP contracts
634
- while allowing additive intent support.
661
+ <strong>Review gate</strong>
662
+ <code>--review-gate</code> returns the stop checklist before
663
+ another slice, release, publish, or deploy.
635
664
  </span>
636
665
  </div>
637
666
  </div>
Binary file
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "projscan",
3
3
  "mcpName": "io.github.abhiyoheswaran1/projscan",
4
- "version": "4.1.0",
4
+ "version": "4.2.0",
5
5
  "description": "Agent-first code intelligence. MCP server (2025-03-26) with AST parsing for 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",
@@ -16,7 +16,7 @@ const captures = [
16
16
  name: 'Mission Control hero',
17
17
  url: pathToFileURL(demoPath).href,
18
18
  output: path.join(repoRoot, 'docs', 'projscan-mission-control.png'),
19
- viewport: '1440,960',
19
+ viewport: '1440,1120',
20
20
  },
21
21
  {
22
22
  name: 'Intent and proof workflow',