projscan 3.8.0 → 4.1.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 +337 -38
- package/dist/cli/commands/route.js +1 -0
- package/dist/cli/commands/route.js.map +1 -1
- package/dist/cli/commands/semanticGraph.js +27 -0
- package/dist/cli/commands/semanticGraph.js.map +1 -1
- package/dist/cli/commands/start.js +74 -1
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +0 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/core/dependencyAnalyzer.js +172 -0
- package/dist/core/dependencyAnalyzer.js.map +1 -1
- package/dist/core/fixSuggest.js +5 -5
- package/dist/core/fixSuggest.js.map +1 -1
- package/dist/core/graphQuery.d.ts +23 -0
- package/dist/core/graphQuery.js +48 -0
- package/dist/core/graphQuery.js.map +1 -0
- package/dist/core/intentRouter.d.ts +8 -1
- package/dist/core/intentRouter.js +2186 -22
- package/dist/core/intentRouter.js.map +1 -1
- package/dist/core/issueEngine.js +6 -7
- package/dist/core/issueEngine.js.map +1 -1
- package/dist/core/onboarding.d.ts +2 -2
- package/dist/core/onboarding.js +29 -5
- package/dist/core/onboarding.js.map +1 -1
- package/dist/core/start.d.ts +1 -0
- package/dist/core/start.js +2010 -10
- package/dist/core/start.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.js +14 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/costSummary.js +0 -2
- package/dist/mcp/tools/costSummary.js.map +1 -1
- package/dist/mcp/tools/semanticGraph.js +28 -3
- package/dist/mcp/tools/semanticGraph.js.map +1 -1
- package/dist/mcp/tools/start.js +6 -1
- package/dist/mcp/tools/start.js.map +1 -1
- package/dist/mcp/tools.js +0 -4
- package/dist/mcp/tools.js.map +1 -1
- package/dist/projscan-sbom.cdx.json +6 -6
- package/dist/reporters/consoleReporter.js +19 -0
- package/dist/reporters/consoleReporter.js.map +1 -1
- package/dist/reporters/markdownReporter.js +19 -0
- package/dist/reporters/markdownReporter.js.map +1 -1
- package/dist/tool-manifest.json +41 -60
- package/dist/types.d.ts +83 -0
- package/docs/GUIDE.md +1565 -0
- package/docs/ROADMAP.md +219 -0
- package/docs/demos/projscan-4-1-demo.html +648 -0
- package/docs/projscan-mission-control.png +0 -0
- package/docs/projscan-proof-router.png +0 -0
- package/package.json +8 -1
- package/scripts/capture-readme-assets.mjs +60 -0
- package/dist/cli/commands/explain.d.ts +0 -1
- package/dist/cli/commands/explain.js +0 -48
- package/dist/cli/commands/explain.js.map +0 -1
- package/dist/mcp/tools/explain.d.ts +0 -2
- package/dist/mcp/tools/explain.js +0 -34
- package/dist/mcp/tools/explain.js.map +0 -1
- package/dist/mcp/tools/graph.d.ts +0 -2
- package/dist/mcp/tools/graph.js +0 -79
- package/dist/mcp/tools/graph.js.map +0 -1
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>projscan Mission Control README capture</title>
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
color-scheme: light;
|
|
10
|
+
--paper: #f4f1ea;
|
|
11
|
+
--panel: #fffdf8;
|
|
12
|
+
--ink: #17202a;
|
|
13
|
+
--muted: #5d6673;
|
|
14
|
+
--line: #d9d1c2;
|
|
15
|
+
--terminal: #111418;
|
|
16
|
+
--terminal-line: #2b3139;
|
|
17
|
+
--terminal-muted: #8d98a8;
|
|
18
|
+
--green: #247a52;
|
|
19
|
+
--green-soft: #e6f4ec;
|
|
20
|
+
--blue: #2f5f90;
|
|
21
|
+
--blue-soft: #e4eef8;
|
|
22
|
+
--amber: #9b5a00;
|
|
23
|
+
--amber-soft: #fff2d8;
|
|
24
|
+
--red: #a5403a;
|
|
25
|
+
--red-soft: #fae7e4;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
* {
|
|
29
|
+
box-sizing: border-box;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
body {
|
|
33
|
+
margin: 0;
|
|
34
|
+
background: var(--paper);
|
|
35
|
+
color: var(--ink);
|
|
36
|
+
font-family:
|
|
37
|
+
Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
|
|
38
|
+
"Segoe UI", sans-serif;
|
|
39
|
+
line-height: 1.45;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.page {
|
|
43
|
+
width: min(1280px, calc(100vw - 80px));
|
|
44
|
+
margin: 0 auto;
|
|
45
|
+
padding: 42px 0 72px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.hero {
|
|
49
|
+
display: grid;
|
|
50
|
+
grid-template-columns: minmax(0, 0.92fr) minmax(620px, 1.08fr);
|
|
51
|
+
gap: 28px;
|
|
52
|
+
align-items: stretch;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.intro {
|
|
56
|
+
padding: 8px 4px 0;
|
|
57
|
+
display: flex;
|
|
58
|
+
flex-direction: column;
|
|
59
|
+
justify-content: space-between;
|
|
60
|
+
min-height: 620px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.eyebrow {
|
|
64
|
+
margin: 0 0 18px;
|
|
65
|
+
color: var(--blue);
|
|
66
|
+
font-size: 14px;
|
|
67
|
+
font-weight: 800;
|
|
68
|
+
text-transform: uppercase;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
h1,
|
|
72
|
+
h2,
|
|
73
|
+
h3,
|
|
74
|
+
p {
|
|
75
|
+
margin-top: 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
h1 {
|
|
79
|
+
max-width: 540px;
|
|
80
|
+
margin-bottom: 22px;
|
|
81
|
+
font-size: 58px;
|
|
82
|
+
line-height: 1.02;
|
|
83
|
+
letter-spacing: 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.lead {
|
|
87
|
+
max-width: 560px;
|
|
88
|
+
margin-bottom: 28px;
|
|
89
|
+
color: var(--muted);
|
|
90
|
+
font-size: 21px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.pills {
|
|
94
|
+
display: flex;
|
|
95
|
+
flex-wrap: wrap;
|
|
96
|
+
gap: 10px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.pill {
|
|
100
|
+
min-height: 34px;
|
|
101
|
+
padding: 7px 12px;
|
|
102
|
+
border: 1px solid var(--line);
|
|
103
|
+
border-radius: 999px;
|
|
104
|
+
background: rgba(255, 253, 248, 0.72);
|
|
105
|
+
color: var(--ink);
|
|
106
|
+
font-size: 14px;
|
|
107
|
+
font-weight: 700;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.metric-row {
|
|
111
|
+
display: grid;
|
|
112
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
113
|
+
gap: 12px;
|
|
114
|
+
margin-top: 38px;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.metric {
|
|
118
|
+
min-height: 116px;
|
|
119
|
+
padding: 16px;
|
|
120
|
+
border: 1px solid var(--line);
|
|
121
|
+
border-radius: 8px;
|
|
122
|
+
background: var(--panel);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.metric strong {
|
|
126
|
+
display: block;
|
|
127
|
+
margin-bottom: 4px;
|
|
128
|
+
font-size: 27px;
|
|
129
|
+
line-height: 1;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.metric span {
|
|
133
|
+
color: var(--muted);
|
|
134
|
+
font-size: 13px;
|
|
135
|
+
font-weight: 700;
|
|
136
|
+
text-transform: uppercase;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.terminal {
|
|
140
|
+
overflow: hidden;
|
|
141
|
+
border: 1px solid #262d34;
|
|
142
|
+
border-radius: 8px;
|
|
143
|
+
background: var(--terminal);
|
|
144
|
+
color: #edf2f7;
|
|
145
|
+
box-shadow: 0 18px 45px rgba(23, 32, 42, 0.18);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.terminal-bar {
|
|
149
|
+
display: flex;
|
|
150
|
+
align-items: center;
|
|
151
|
+
gap: 9px;
|
|
152
|
+
height: 42px;
|
|
153
|
+
padding: 0 16px;
|
|
154
|
+
border-bottom: 1px solid var(--terminal-line);
|
|
155
|
+
color: var(--terminal-muted);
|
|
156
|
+
font-size: 13px;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.dot {
|
|
160
|
+
width: 10px;
|
|
161
|
+
height: 10px;
|
|
162
|
+
border-radius: 50%;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.dot.red {
|
|
166
|
+
background: #ef6a5b;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.dot.amber {
|
|
170
|
+
background: #f4bf4f;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.dot.green {
|
|
174
|
+
background: #63c554;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.terminal-title {
|
|
178
|
+
margin-left: 8px;
|
|
179
|
+
font-weight: 700;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.terminal-body {
|
|
183
|
+
padding: 26px;
|
|
184
|
+
font-family:
|
|
185
|
+
"SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
|
|
186
|
+
font-size: 15px;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.prompt {
|
|
190
|
+
color: #9ad8b1;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.cmd {
|
|
194
|
+
color: #ffffff;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.dim {
|
|
198
|
+
color: var(--terminal-muted);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.term-section {
|
|
202
|
+
margin-top: 22px;
|
|
203
|
+
padding-top: 18px;
|
|
204
|
+
border-top: 1px solid var(--terminal-line);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.term-heading {
|
|
208
|
+
color: #ffd58a;
|
|
209
|
+
font-weight: 800;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.line {
|
|
213
|
+
display: block;
|
|
214
|
+
min-height: 22px;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.success {
|
|
218
|
+
color: #9ad8b1;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.notice {
|
|
222
|
+
color: #90c7ff;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.warn {
|
|
226
|
+
color: #ffd58a;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.grid {
|
|
230
|
+
display: grid;
|
|
231
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
232
|
+
gap: 18px;
|
|
233
|
+
margin-top: 30px;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.card {
|
|
237
|
+
min-height: 196px;
|
|
238
|
+
padding: 20px;
|
|
239
|
+
border: 1px solid var(--line);
|
|
240
|
+
border-radius: 8px;
|
|
241
|
+
background: var(--panel);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.label {
|
|
245
|
+
display: inline-flex;
|
|
246
|
+
align-items: center;
|
|
247
|
+
min-height: 28px;
|
|
248
|
+
margin-bottom: 16px;
|
|
249
|
+
padding: 4px 9px;
|
|
250
|
+
border-radius: 999px;
|
|
251
|
+
font-size: 12px;
|
|
252
|
+
font-weight: 800;
|
|
253
|
+
text-transform: uppercase;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.label.green {
|
|
257
|
+
background: var(--green-soft);
|
|
258
|
+
color: var(--green);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.label.blue {
|
|
262
|
+
background: var(--blue-soft);
|
|
263
|
+
color: var(--blue);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.label.amber {
|
|
267
|
+
background: var(--amber-soft);
|
|
268
|
+
color: var(--amber);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.card h2,
|
|
272
|
+
.card h3 {
|
|
273
|
+
margin-bottom: 10px;
|
|
274
|
+
font-size: 24px;
|
|
275
|
+
line-height: 1.16;
|
|
276
|
+
letter-spacing: 0;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.card p {
|
|
280
|
+
margin-bottom: 0;
|
|
281
|
+
color: var(--muted);
|
|
282
|
+
font-size: 15px;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.proof {
|
|
286
|
+
padding-top: 74px;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.proof-header {
|
|
290
|
+
display: grid;
|
|
291
|
+
grid-template-columns: minmax(0, 0.78fr) minmax(0, 1.22fr);
|
|
292
|
+
gap: 24px;
|
|
293
|
+
align-items: end;
|
|
294
|
+
margin-bottom: 24px;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.proof-header h2 {
|
|
298
|
+
margin-bottom: 10px;
|
|
299
|
+
font-size: 44px;
|
|
300
|
+
line-height: 1.06;
|
|
301
|
+
letter-spacing: 0;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.proof-header p {
|
|
305
|
+
margin-bottom: 0;
|
|
306
|
+
color: var(--muted);
|
|
307
|
+
font-size: 18px;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.workflow {
|
|
311
|
+
display: grid;
|
|
312
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
313
|
+
gap: 22px;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
.compact-terminal .terminal-body {
|
|
317
|
+
min-height: 390px;
|
|
318
|
+
padding: 22px;
|
|
319
|
+
font-size: 14px;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.signal-list {
|
|
323
|
+
display: grid;
|
|
324
|
+
gap: 12px;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.signal {
|
|
328
|
+
display: grid;
|
|
329
|
+
grid-template-columns: 124px minmax(0, 1fr);
|
|
330
|
+
gap: 14px;
|
|
331
|
+
align-items: start;
|
|
332
|
+
padding: 16px;
|
|
333
|
+
border: 1px solid var(--line);
|
|
334
|
+
border-radius: 8px;
|
|
335
|
+
background: var(--panel);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.signal strong {
|
|
339
|
+
display: block;
|
|
340
|
+
color: var(--ink);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.signal span:not(.tag) {
|
|
344
|
+
color: var(--muted);
|
|
345
|
+
font-size: 14px;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.tag {
|
|
349
|
+
width: 124px;
|
|
350
|
+
min-height: 30px;
|
|
351
|
+
padding: 6px 8px;
|
|
352
|
+
border-radius: 6px;
|
|
353
|
+
color: #fff;
|
|
354
|
+
font-size: 12px;
|
|
355
|
+
font-weight: 800;
|
|
356
|
+
text-align: center;
|
|
357
|
+
text-transform: uppercase;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.tag.green {
|
|
361
|
+
background: var(--green);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
.tag.blue {
|
|
365
|
+
background: var(--blue);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.tag.amber {
|
|
369
|
+
background: var(--amber);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
.tag.red {
|
|
373
|
+
background: var(--red);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
@media (max-width: 980px) {
|
|
377
|
+
.page {
|
|
378
|
+
width: min(100% - 32px, 760px);
|
|
379
|
+
padding-top: 28px;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.hero,
|
|
383
|
+
.proof-header,
|
|
384
|
+
.workflow,
|
|
385
|
+
.grid {
|
|
386
|
+
grid-template-columns: 1fr;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.intro {
|
|
390
|
+
min-height: auto;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
h1 {
|
|
394
|
+
font-size: 42px;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
.metric-row {
|
|
398
|
+
grid-template-columns: 1fr;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
.terminal-body {
|
|
402
|
+
overflow-x: auto;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
body.proof-only .hero,
|
|
407
|
+
body.proof-only .grid {
|
|
408
|
+
display: none;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
body.proof-only .proof {
|
|
412
|
+
padding-top: 0;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
body.proof-only .proof-header {
|
|
416
|
+
margin-top: 0;
|
|
417
|
+
}
|
|
418
|
+
</style>
|
|
419
|
+
</head>
|
|
420
|
+
<body>
|
|
421
|
+
<main class="page">
|
|
422
|
+
<section class="hero" aria-label="projscan Mission Control">
|
|
423
|
+
<div class="intro">
|
|
424
|
+
<div>
|
|
425
|
+
<p class="eyebrow">Unreleased developer-life upgrade</p>
|
|
426
|
+
<h1>Plain-language repo work, routed to proof.</h1>
|
|
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.
|
|
431
|
+
</p>
|
|
432
|
+
<div class="pills" aria-label="Product capabilities">
|
|
433
|
+
<span class="pill">Mission Control</span>
|
|
434
|
+
<span class="pill">Local-first</span>
|
|
435
|
+
<span class="pill">MCP-ready</span>
|
|
436
|
+
<span class="pill">No source upload</span>
|
|
437
|
+
</div>
|
|
438
|
+
</div>
|
|
439
|
+
|
|
440
|
+
<div class="metric-row" aria-label="Release candidate signals">
|
|
441
|
+
<div class="metric">
|
|
442
|
+
<strong>1 call</strong>
|
|
443
|
+
<span>intent to workflow</span>
|
|
444
|
+
</div>
|
|
445
|
+
<div class="metric">
|
|
446
|
+
<strong>45</strong>
|
|
447
|
+
<span>MCP tools preserved</span>
|
|
448
|
+
</div>
|
|
449
|
+
<div class="metric">
|
|
450
|
+
<strong>A</strong>
|
|
451
|
+
<span>dogfood health gate</span>
|
|
452
|
+
</div>
|
|
453
|
+
</div>
|
|
454
|
+
</div>
|
|
455
|
+
|
|
456
|
+
<section class="terminal" aria-label="Mission Control terminal output">
|
|
457
|
+
<div class="terminal-bar">
|
|
458
|
+
<span class="dot red"></span>
|
|
459
|
+
<span class="dot amber"></span>
|
|
460
|
+
<span class="dot green"></span>
|
|
461
|
+
<span class="terminal-title">projscan start --intent</span>
|
|
462
|
+
</div>
|
|
463
|
+
<div class="terminal-body">
|
|
464
|
+
<span class="line"
|
|
465
|
+
><span class="prompt">$</span>
|
|
466
|
+
<span class="cmd"
|
|
467
|
+
>projscan start --intent "is it safe to commit this
|
|
468
|
+
change?"</span
|
|
469
|
+
></span
|
|
470
|
+
>
|
|
471
|
+
<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">Status: <span class="warn">needs_attention</span></span>
|
|
474
|
+
<span class="line"
|
|
475
|
+
>Route:
|
|
476
|
+
<span class="notice">Safety gate via projscan_preflight</span></span
|
|
477
|
+
>
|
|
478
|
+
<span class="line dim"
|
|
479
|
+
>confidence: high; matched: safe, commit</span
|
|
480
|
+
>
|
|
481
|
+
|
|
482
|
+
<div class="term-section">
|
|
483
|
+
<span class="line term-heading">Action Plan</span>
|
|
484
|
+
<span class="line"
|
|
485
|
+
>- Use projscan_preflight before broader workflow
|
|
486
|
+
commands</span
|
|
487
|
+
>
|
|
488
|
+
<span class="line"
|
|
489
|
+
>- Preserve the original goal across follow-up evidence</span
|
|
490
|
+
>
|
|
491
|
+
<span class="line"
|
|
492
|
+
>- Surface blockers with owner, file, or next command</span
|
|
493
|
+
>
|
|
494
|
+
</div>
|
|
495
|
+
|
|
496
|
+
<div class="term-section">
|
|
497
|
+
<span class="line term-heading">Ready Proof</span>
|
|
498
|
+
<span class="line success"
|
|
499
|
+
>- projscan preflight --mode before_commit --format json</span
|
|
500
|
+
>
|
|
501
|
+
<span class="line success"
|
|
502
|
+
>- projscan understand --view verify --format json</span
|
|
503
|
+
>
|
|
504
|
+
<span class="line success"
|
|
505
|
+
>- projscan session touched --format json</span
|
|
506
|
+
>
|
|
507
|
+
</div>
|
|
508
|
+
|
|
509
|
+
<div class="term-section">
|
|
510
|
+
<span class="line term-heading">Done When</span>
|
|
511
|
+
<span class="line"
|
|
512
|
+
>- Preflight returns proceed or documented manual review</span
|
|
513
|
+
>
|
|
514
|
+
<span class="line"
|
|
515
|
+
>- Every blocker has a concrete follow-up command</span
|
|
516
|
+
>
|
|
517
|
+
</div>
|
|
518
|
+
</div>
|
|
519
|
+
</section>
|
|
520
|
+
</section>
|
|
521
|
+
|
|
522
|
+
<section class="grid" aria-label="New developer workflows">
|
|
523
|
+
<article class="card">
|
|
524
|
+
<span class="label green">Goal routing</span>
|
|
525
|
+
<h2>Ask in human language.</h2>
|
|
526
|
+
<p>
|
|
527
|
+
Route privacy, merge readiness, refactor risk, local setup,
|
|
528
|
+
ownership, dependency, release, and handoff questions to the right
|
|
529
|
+
command with matched keywords and confidence.
|
|
530
|
+
</p>
|
|
531
|
+
</article>
|
|
532
|
+
<article class="card">
|
|
533
|
+
<span class="label blue">Repo context</span>
|
|
534
|
+
<h2>Start from cited evidence.</h2>
|
|
535
|
+
<p>
|
|
536
|
+
Repo maps now include read-first files, package contracts, runtime
|
|
537
|
+
flows, public exports, proof tiers, setup commands, and unknowns
|
|
538
|
+
that need human input.
|
|
539
|
+
</p>
|
|
540
|
+
</article>
|
|
541
|
+
<article class="card">
|
|
542
|
+
<span class="label amber">Review proof</span>
|
|
543
|
+
<h2>Make PRs easier to approve.</h2>
|
|
544
|
+
<p>
|
|
545
|
+
Mission Control carries the original intent into preflight,
|
|
546
|
+
verification, session memory, evidence packs, and reviewer-ready
|
|
547
|
+
next commands.
|
|
548
|
+
</p>
|
|
549
|
+
</article>
|
|
550
|
+
</section>
|
|
551
|
+
|
|
552
|
+
<section class="proof" id="proof" aria-label="Proof and dependency view">
|
|
553
|
+
<div class="proof-header">
|
|
554
|
+
<div>
|
|
555
|
+
<p class="eyebrow">Intent, graph, and dependency intelligence</p>
|
|
556
|
+
<h2>Fewer dead-end agent turns.</h2>
|
|
557
|
+
</div>
|
|
558
|
+
<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.
|
|
561
|
+
</p>
|
|
562
|
+
</div>
|
|
563
|
+
|
|
564
|
+
<div class="workflow">
|
|
565
|
+
<section class="terminal compact-terminal" aria-label="Intent router">
|
|
566
|
+
<div class="terminal-bar">
|
|
567
|
+
<span class="dot red"></span>
|
|
568
|
+
<span class="dot amber"></span>
|
|
569
|
+
<span class="dot green"></span>
|
|
570
|
+
<span class="terminal-title">projscan route</span>
|
|
571
|
+
</div>
|
|
572
|
+
<div class="terminal-body">
|
|
573
|
+
<span class="line"
|
|
574
|
+
><span class="prompt">$</span>
|
|
575
|
+
<span class="cmd"
|
|
576
|
+
>projscan route "what breaks if I rename the auth token
|
|
577
|
+
loader"</span
|
|
578
|
+
></span
|
|
579
|
+
>
|
|
580
|
+
<span class="line dim">Best tools for the developer goal</span>
|
|
581
|
+
<span class="line"> </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
|
+
>
|
|
589
|
+
<span class="line success"
|
|
590
|
+
>projscan impact --symbol buildCodeGraph --format json</span
|
|
591
|
+
>
|
|
592
|
+
<span class="line"> </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>
|
|
596
|
+
<span class="line notice"
|
|
597
|
+
>Spot request-data reaching dangerous sinks.</span
|
|
598
|
+
>
|
|
599
|
+
</div>
|
|
600
|
+
</section>
|
|
601
|
+
|
|
602
|
+
<div class="signal-list" aria-label="Developer proof signals">
|
|
603
|
+
<div class="signal">
|
|
604
|
+
<span class="tag green">Verify</span>
|
|
605
|
+
<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.
|
|
610
|
+
</span>
|
|
611
|
+
</div>
|
|
612
|
+
<div class="signal">
|
|
613
|
+
<span class="tag blue">Setup</span>
|
|
614
|
+
<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.
|
|
619
|
+
</span>
|
|
620
|
+
</div>
|
|
621
|
+
<div class="signal">
|
|
622
|
+
<span class="tag amber">License</span>
|
|
623
|
+
<span>
|
|
624
|
+
<strong>Dependency intelligence</strong>
|
|
625
|
+
Dependency reports now summarize known licenses, copyleft risk,
|
|
626
|
+
installed package sizes, and package importer lookups.
|
|
627
|
+
</span>
|
|
628
|
+
</div>
|
|
629
|
+
<div class="signal">
|
|
630
|
+
<span class="tag red">Trust</span>
|
|
631
|
+
<span>
|
|
632
|
+
<strong>Release review guardrails</strong>
|
|
633
|
+
Stable-surface checks preserve public CLI and MCP contracts
|
|
634
|
+
while allowing additive intent support.
|
|
635
|
+
</span>
|
|
636
|
+
</div>
|
|
637
|
+
</div>
|
|
638
|
+
</div>
|
|
639
|
+
</section>
|
|
640
|
+
</main>
|
|
641
|
+
<script>
|
|
642
|
+
if (window.location.hash === "#proof") {
|
|
643
|
+
document.body.classList.add("proof-only");
|
|
644
|
+
}
|
|
645
|
+
document.documentElement.dataset.ready = "true";
|
|
646
|
+
</script>
|
|
647
|
+
</body>
|
|
648
|
+
</html>
|
|
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
|
+
"version": "4.1.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",
|
|
@@ -13,10 +13,16 @@
|
|
|
13
13
|
"dist",
|
|
14
14
|
"README.md",
|
|
15
15
|
"docs/2.0-MIGRATION.md",
|
|
16
|
+
"docs/GUIDE.md",
|
|
16
17
|
"docs/PLUGIN-AUTHORING.md",
|
|
17
18
|
"docs/PLUGIN-GALLERY.md",
|
|
19
|
+
"docs/ROADMAP.md",
|
|
20
|
+
"docs/demos/projscan-4-1-demo.html",
|
|
18
21
|
"docs/plugin.schema.json",
|
|
22
|
+
"docs/projscan-mission-control.png",
|
|
23
|
+
"docs/projscan-proof-router.png",
|
|
19
24
|
"docs/examples/plugins",
|
|
25
|
+
"scripts/capture-readme-assets.mjs",
|
|
20
26
|
"public/brand/baseframe-labs",
|
|
21
27
|
"public/.well-known/security.txt",
|
|
22
28
|
"CONTRIBUTING.md",
|
|
@@ -37,6 +43,7 @@
|
|
|
37
43
|
"format": "prettier --write .",
|
|
38
44
|
"bench": "node scripts/bench.mjs",
|
|
39
45
|
"bench:references": "node scripts/bench-references.mjs",
|
|
46
|
+
"docs:screenshots": "node scripts/capture-readme-assets.mjs",
|
|
40
47
|
"smoke:packed-install": "node scripts/packed-install-smoke.mjs",
|
|
41
48
|
"check:stability": "node scripts/check-stability.mjs",
|
|
42
49
|
"release:check": "node scripts/release-check.mjs",
|