projscan 1.5.0 → 1.6.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 +13 -3
- package/dist/cli/commands/applyFix.d.ts +7 -0
- package/dist/cli/commands/applyFix.js +113 -0
- package/dist/cli/commands/applyFix.js.map +1 -0
- package/dist/cli/commands/coverage.js +13 -0
- package/dist/cli/commands/coverage.js.map +1 -1
- package/dist/cli/commands/impact.js +25 -1
- package/dist/cli/commands/impact.js.map +1 -1
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.js +70 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/installHook.d.ts +9 -0
- package/dist/cli/commands/installHook.js +90 -0
- package/dist/cli/commands/installHook.js.map +1 -0
- package/dist/cli/commands/taint.d.ts +6 -0
- package/dist/cli/commands/taint.js +74 -0
- package/dist/cli/commands/taint.js.map +1 -0
- package/dist/cli/commands/workspace.d.ts +11 -0
- package/dist/cli/commands/workspace.js +115 -0
- package/dist/cli/commands/workspace.js.map +1 -0
- package/dist/cli/index.js +10 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/applyFix.d.ts +52 -0
- package/dist/core/applyFix.js +220 -0
- package/dist/core/applyFix.js.map +1 -0
- package/dist/core/ast.d.ts +9 -0
- package/dist/core/ast.js +35 -4
- package/dist/core/ast.js.map +1 -1
- package/dist/core/fixSuggest.d.ts +6 -0
- package/dist/core/fixSuggest.js +195 -0
- package/dist/core/fixSuggest.js.map +1 -1
- package/dist/core/impact.d.ts +8 -0
- package/dist/core/impact.js +41 -3
- package/dist/core/impact.js.map +1 -1
- package/dist/core/indexCache.js +4 -1
- package/dist/core/indexCache.js.map +1 -1
- package/dist/core/review.js +50 -3
- package/dist/core/review.js.map +1 -1
- package/dist/core/taint.d.ts +91 -0
- package/dist/core/taint.js +185 -0
- package/dist/core/taint.js.map +1 -0
- package/dist/core/workspace.d.ts +62 -0
- package/dist/core/workspace.js +127 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/mcp/prompts.js +6 -4
- package/dist/mcp/prompts.js.map +1 -1
- package/dist/mcp/tools/applyFix.d.ts +16 -0
- package/dist/mcp/tools/applyFix.js +91 -0
- package/dist/mcp/tools/applyFix.js.map +1 -0
- package/dist/mcp/tools/impact.js +34 -1
- package/dist/mcp/tools/impact.js.map +1 -1
- package/dist/mcp/tools/taint.d.ts +15 -0
- package/dist/mcp/tools/taint.js +67 -0
- package/dist/mcp/tools/taint.js.map +1 -0
- package/dist/mcp/tools/workspaceGraph.d.ts +18 -0
- package/dist/mcp/tools/workspaceGraph.js +188 -0
- package/dist/mcp/tools/workspaceGraph.js.map +1 -0
- package/dist/mcp/tools.js +6 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/tool-manifest.json +89 -3
- package/dist/types.d.ts +46 -0
- package/dist/utils/config.js +15 -0
- package/dist/utils/config.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { CodeGraph } from './codeGraph.js';
|
|
2
|
+
/**
|
|
3
|
+
* Lightweight taint flow analysis (1.6+).
|
|
4
|
+
*
|
|
5
|
+
* Source-to-sink reachability over the existing per-function call
|
|
6
|
+
* graph. Sources and sinks are *declared* by name (config-driven);
|
|
7
|
+
* anything in between is treated as a function that might propagate
|
|
8
|
+
* taint. We do NOT do general dataflow — we only ask "does some
|
|
9
|
+
* call chain reach from a function that calls a source to a function
|
|
10
|
+
* that calls a sink?"
|
|
11
|
+
*
|
|
12
|
+
* That heuristic catches the common case: a route handler reads
|
|
13
|
+
* `process.env.SECRET` (source) and somewhere downstream it ends up
|
|
14
|
+
* in `child_process.spawn` (sink). It misses any flow that goes
|
|
15
|
+
* through code we can't see (eval'd strings, plugin loaders), and it
|
|
16
|
+
* over-reports when functions read sources but launder them safely
|
|
17
|
+
* before reaching sinks. Both are documented limitations.
|
|
18
|
+
*
|
|
19
|
+
* Strict scope discipline (per ROADMAP 1.6 guardrail): no CFG, no
|
|
20
|
+
* variable-level dataflow, no AST inspection beyond what callSites
|
|
21
|
+
* already gives us. If this drifts toward "general dataflow" cut it.
|
|
22
|
+
*/
|
|
23
|
+
export interface TaintConfig {
|
|
24
|
+
/**
|
|
25
|
+
* Bare callee names treated as taint sources. Examples:
|
|
26
|
+
* "process.env" — environment variables (read sensitive config)
|
|
27
|
+
* "req.body" — HTTP request body
|
|
28
|
+
* "readFileSync" — disk read (could be user-controlled paths)
|
|
29
|
+
*
|
|
30
|
+
* Match is by bare name (the rightmost identifier in a member-access
|
|
31
|
+
* chain). "process.env.SECRET" → "env"; "req.body.userId" → "body".
|
|
32
|
+
* The default list captures the most common JS / Python / Go sources;
|
|
33
|
+
* users override via .projscanrc taint.sources.
|
|
34
|
+
*/
|
|
35
|
+
sources: string[];
|
|
36
|
+
/**
|
|
37
|
+
* Bare callee names treated as taint sinks. Examples:
|
|
38
|
+
* "exec" — child_process.exec
|
|
39
|
+
* "spawn" — child_process.spawn
|
|
40
|
+
* "writeFile" — fs.writeFile
|
|
41
|
+
* "query" — raw SQL (db.query("SELECT...${user}"))
|
|
42
|
+
* "eval" — JS eval / Python eval / etc.
|
|
43
|
+
*/
|
|
44
|
+
sinks: string[];
|
|
45
|
+
}
|
|
46
|
+
export declare const DEFAULT_TAINT_SOURCES: ReadonlyArray<string>;
|
|
47
|
+
export declare const DEFAULT_TAINT_SINKS: ReadonlyArray<string>;
|
|
48
|
+
export interface TaintFlow {
|
|
49
|
+
/** Bare function name where the source was called. */
|
|
50
|
+
sourceFn: string;
|
|
51
|
+
/** Bare function name where the sink was called. */
|
|
52
|
+
sinkFn: string;
|
|
53
|
+
/** The source identifier (e.g. "env"). */
|
|
54
|
+
source: string;
|
|
55
|
+
/** The sink identifier (e.g. "exec"). */
|
|
56
|
+
sink: string;
|
|
57
|
+
/**
|
|
58
|
+
* Sequence of fully-qualified function names from sourceFn to sinkFn,
|
|
59
|
+
* inclusive at both ends. Length 1 means the same function reads the
|
|
60
|
+
* source and calls the sink (the most direct flow).
|
|
61
|
+
*/
|
|
62
|
+
path: string[];
|
|
63
|
+
/** Files touched by the path (in order, deduped). */
|
|
64
|
+
files: string[];
|
|
65
|
+
}
|
|
66
|
+
export interface TaintReport {
|
|
67
|
+
available: boolean;
|
|
68
|
+
reason?: string;
|
|
69
|
+
flowCount: number;
|
|
70
|
+
flows: TaintFlow[];
|
|
71
|
+
/** The effective sources/sinks list used for this run (after merging defaults + config). */
|
|
72
|
+
effectiveSources: string[];
|
|
73
|
+
effectiveSinks: string[];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Compute taint flows over the given code graph. Per-function callSites
|
|
77
|
+
* are required (1.5+ ships these for every adapter); functions without
|
|
78
|
+
* callSites can't be analyzed and are skipped.
|
|
79
|
+
*
|
|
80
|
+
* Algorithm:
|
|
81
|
+
* 1. Build a function-name → {file, callees, hasSource, hasSink} index.
|
|
82
|
+
* 2. For each function with hasSource=true, BFS its callees (and their
|
|
83
|
+
* callees, transitively) following the bare-name lookup, recording
|
|
84
|
+
* the path.
|
|
85
|
+
* 3. When a hasSink=true function is reached, emit a TaintFlow.
|
|
86
|
+
* 4. Deduplicate by (sourceFn, sinkFn).
|
|
87
|
+
*
|
|
88
|
+
* Same-function flows (sourceFn calls source AND sink in the same body)
|
|
89
|
+
* are reported with path length 1.
|
|
90
|
+
*/
|
|
91
|
+
export declare function computeTaint(graph: CodeGraph, config: TaintConfig): TaintReport;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
export const DEFAULT_TAINT_SOURCES = [
|
|
2
|
+
'env', // process.env.X
|
|
3
|
+
'argv', // process.argv
|
|
4
|
+
'body', // req.body
|
|
5
|
+
'query', // req.query — note: this clashes with sink "query"; sink wins by precedence
|
|
6
|
+
'params', // req.params
|
|
7
|
+
'headers', // req.headers
|
|
8
|
+
'cookies', // req.cookies
|
|
9
|
+
'readFile', // user-controlled paths
|
|
10
|
+
'readFileSync',
|
|
11
|
+
'stdin', // process.stdin
|
|
12
|
+
'getInput', // common test/CLI input
|
|
13
|
+
];
|
|
14
|
+
export const DEFAULT_TAINT_SINKS = [
|
|
15
|
+
'exec', // child_process.exec
|
|
16
|
+
'execSync',
|
|
17
|
+
'spawn', // child_process.spawn
|
|
18
|
+
'spawnSync',
|
|
19
|
+
'eval', // global eval
|
|
20
|
+
'Function', // new Function(string) — JS dynamic eval
|
|
21
|
+
'writeFile', // fs.writeFile to user paths
|
|
22
|
+
'writeFileSync',
|
|
23
|
+
'unlink', // fs.unlink — destructive write
|
|
24
|
+
'rmSync',
|
|
25
|
+
'rm',
|
|
26
|
+
'query', // raw SQL via db.query
|
|
27
|
+
'execute', // raw SQL via db.execute
|
|
28
|
+
'system', // os.system in Python
|
|
29
|
+
'os.system',
|
|
30
|
+
'subprocess', // python subprocess module
|
|
31
|
+
'innerHTML', // DOM XSS — actually a property assignment, not a call;
|
|
32
|
+
// included only when call-shaped helpers wrap it (e.g. setInnerHtml).
|
|
33
|
+
];
|
|
34
|
+
/**
|
|
35
|
+
* Compute taint flows over the given code graph. Per-function callSites
|
|
36
|
+
* are required (1.5+ ships these for every adapter); functions without
|
|
37
|
+
* callSites can't be analyzed and are skipped.
|
|
38
|
+
*
|
|
39
|
+
* Algorithm:
|
|
40
|
+
* 1. Build a function-name → {file, callees, hasSource, hasSink} index.
|
|
41
|
+
* 2. For each function with hasSource=true, BFS its callees (and their
|
|
42
|
+
* callees, transitively) following the bare-name lookup, recording
|
|
43
|
+
* the path.
|
|
44
|
+
* 3. When a hasSink=true function is reached, emit a TaintFlow.
|
|
45
|
+
* 4. Deduplicate by (sourceFn, sinkFn).
|
|
46
|
+
*
|
|
47
|
+
* Same-function flows (sourceFn calls source AND sink in the same body)
|
|
48
|
+
* are reported with path length 1.
|
|
49
|
+
*/
|
|
50
|
+
export function computeTaint(graph, config) {
|
|
51
|
+
const sources = new Set([...DEFAULT_TAINT_SOURCES, ...config.sources]);
|
|
52
|
+
const sinks = new Set([...DEFAULT_TAINT_SINKS, ...config.sinks]);
|
|
53
|
+
const fnByQual = new Map();
|
|
54
|
+
const fnsByBareName = new Map();
|
|
55
|
+
let totalCallSites = 0;
|
|
56
|
+
for (const [file, gf] of graph.files) {
|
|
57
|
+
if (!gf.functions)
|
|
58
|
+
continue;
|
|
59
|
+
for (const fn of gf.functions) {
|
|
60
|
+
const callees = fn.callSites ?? [];
|
|
61
|
+
const references = fn.references ?? [];
|
|
62
|
+
totalCallSites += callees.length;
|
|
63
|
+
// Sources match callSites OR references (covers `process.env.X`-style
|
|
64
|
+
// property reads). Sinks are call-shaped, so callSites only.
|
|
65
|
+
const hasSource = callees.some((c) => sources.has(c)) || references.some((r) => sources.has(r));
|
|
66
|
+
const hasSink = callees.some((c) => sinks.has(c));
|
|
67
|
+
const node = {
|
|
68
|
+
qualName: fn.name,
|
|
69
|
+
bareName: bareName(fn.name),
|
|
70
|
+
file,
|
|
71
|
+
callees,
|
|
72
|
+
references,
|
|
73
|
+
hasSource,
|
|
74
|
+
hasSink,
|
|
75
|
+
};
|
|
76
|
+
fnByQual.set(`${file}::${fn.name}`, node);
|
|
77
|
+
let list = fnsByBareName.get(node.bareName);
|
|
78
|
+
if (!list) {
|
|
79
|
+
list = [];
|
|
80
|
+
fnsByBareName.set(node.bareName, list);
|
|
81
|
+
}
|
|
82
|
+
list.push(node);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (fnByQual.size === 0 || totalCallSites === 0) {
|
|
86
|
+
return {
|
|
87
|
+
available: false,
|
|
88
|
+
reason: 'No functions with callSites in the graph. Taint requires per-function callSites (1.5+).',
|
|
89
|
+
flowCount: 0,
|
|
90
|
+
flows: [],
|
|
91
|
+
effectiveSources: [...sources],
|
|
92
|
+
effectiveSinks: [...sinks],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const flows = [];
|
|
96
|
+
const seen = new Set(); // dedupe key: sourceFnQual::sinkFnQual
|
|
97
|
+
for (const sourceFn of fnByQual.values()) {
|
|
98
|
+
if (!sourceFn.hasSource)
|
|
99
|
+
continue;
|
|
100
|
+
// Same-function shortcut.
|
|
101
|
+
if (sourceFn.hasSink) {
|
|
102
|
+
const key = `${sourceFn.file}::${sourceFn.qualName}::${sourceFn.file}::${sourceFn.qualName}`;
|
|
103
|
+
if (!seen.has(key)) {
|
|
104
|
+
seen.add(key);
|
|
105
|
+
flows.push({
|
|
106
|
+
sourceFn: sourceFn.qualName,
|
|
107
|
+
sinkFn: sourceFn.qualName,
|
|
108
|
+
source: pickHit([...sourceFn.callees, ...sourceFn.references], sources),
|
|
109
|
+
sink: pickHit(sourceFn.callees, sinks),
|
|
110
|
+
path: [sourceFn.qualName],
|
|
111
|
+
files: [sourceFn.file],
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// BFS through callees.
|
|
116
|
+
const visited = new Set([`${sourceFn.file}::${sourceFn.qualName}`]);
|
|
117
|
+
let frontier = [{ node: sourceFn, path: [sourceFn] }];
|
|
118
|
+
let depth = 0;
|
|
119
|
+
const MAX_DEPTH = 8;
|
|
120
|
+
while (frontier.length > 0 && depth < MAX_DEPTH) {
|
|
121
|
+
depth += 1;
|
|
122
|
+
const next = [];
|
|
123
|
+
for (const entry of frontier) {
|
|
124
|
+
for (const calleeName of entry.node.callees) {
|
|
125
|
+
const candidates = fnsByBareName.get(calleeName) ?? [];
|
|
126
|
+
for (const candidate of candidates) {
|
|
127
|
+
const key = `${candidate.file}::${candidate.qualName}`;
|
|
128
|
+
if (visited.has(key))
|
|
129
|
+
continue;
|
|
130
|
+
visited.add(key);
|
|
131
|
+
const newPath = [...entry.path, candidate];
|
|
132
|
+
if (candidate.hasSink) {
|
|
133
|
+
const flowKey = `${sourceFn.file}::${sourceFn.qualName}::${candidate.file}::${candidate.qualName}`;
|
|
134
|
+
if (!seen.has(flowKey)) {
|
|
135
|
+
seen.add(flowKey);
|
|
136
|
+
const filesInPath = [];
|
|
137
|
+
for (const n of newPath) {
|
|
138
|
+
if (filesInPath[filesInPath.length - 1] !== n.file)
|
|
139
|
+
filesInPath.push(n.file);
|
|
140
|
+
}
|
|
141
|
+
flows.push({
|
|
142
|
+
sourceFn: sourceFn.qualName,
|
|
143
|
+
sinkFn: candidate.qualName,
|
|
144
|
+
source: pickHit([...sourceFn.callees, ...sourceFn.references], sources),
|
|
145
|
+
sink: pickHit(candidate.callees, sinks),
|
|
146
|
+
path: newPath.map((n) => n.qualName),
|
|
147
|
+
files: filesInPath,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// Don't continue past a sink — the flow is reported.
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
next.push({ node: candidate, path: newPath });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
frontier = next;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
flows.sort((a, b) => {
|
|
161
|
+
if (a.sourceFn !== b.sourceFn)
|
|
162
|
+
return a.sourceFn.localeCompare(b.sourceFn);
|
|
163
|
+
return a.sinkFn.localeCompare(b.sinkFn);
|
|
164
|
+
});
|
|
165
|
+
return {
|
|
166
|
+
available: true,
|
|
167
|
+
flowCount: flows.length,
|
|
168
|
+
flows,
|
|
169
|
+
effectiveSources: [...sources].sort(),
|
|
170
|
+
effectiveSinks: [...sinks].sort(),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function bareName(qualified) {
|
|
174
|
+
const dot = qualified.lastIndexOf('.');
|
|
175
|
+
if (dot < 0)
|
|
176
|
+
return qualified;
|
|
177
|
+
return qualified.slice(dot + 1);
|
|
178
|
+
}
|
|
179
|
+
function pickHit(callees, set) {
|
|
180
|
+
for (const c of callees)
|
|
181
|
+
if (set.has(c))
|
|
182
|
+
return c;
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=taint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taint.js","sourceRoot":"","sources":["../../src/core/taint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-repo workspace (1.6+).
|
|
3
|
+
*
|
|
4
|
+
* A workspace is a collection of registered sibling repos under a
|
|
5
|
+
* common root directory. Used for multi-repo intelligence — e.g.
|
|
6
|
+
* "what consumer apps import this SDK function?" or "did this PR
|
|
7
|
+
* to the SDK introduce a taint flow that reaches consumer X?"
|
|
8
|
+
*
|
|
9
|
+
* Disambiguation: this is DIFFERENT from `src/core/monorepo.ts`'s
|
|
10
|
+
* `WorkspaceInfo`, which detects intra-repo packages (npm/yarn/pnpm/
|
|
11
|
+
* Lerna/Nx) within a single repo. The cross-repo workspace lives at
|
|
12
|
+
* `<cwd>/.projscan-workspace.json`; the monorepo workspace is
|
|
13
|
+
* detected from package.json/pnpm-workspace.yaml/etc.
|
|
14
|
+
*
|
|
15
|
+
* Local-only state. No network. Schema-versioned. Best-effort writes
|
|
16
|
+
* (mirrors the session and memory modules' posture).
|
|
17
|
+
*/
|
|
18
|
+
export declare const WORKSPACE_SCHEMA_VERSION = 1;
|
|
19
|
+
export interface WorkspaceRepo {
|
|
20
|
+
/** Absolute path to the registered repo's root. */
|
|
21
|
+
path: string;
|
|
22
|
+
/** Optional human-readable name. Defaults to basename(path). */
|
|
23
|
+
name: string;
|
|
24
|
+
}
|
|
25
|
+
export interface Workspace {
|
|
26
|
+
schemaVersion: number;
|
|
27
|
+
/** ISO 8601 timestamp of workspace creation. */
|
|
28
|
+
createdAt: string;
|
|
29
|
+
/**
|
|
30
|
+
* Registered sibling repos. Order is insertion order; first-registered
|
|
31
|
+
* appears first. Duplicates (by absolute path) are rejected at add time.
|
|
32
|
+
*/
|
|
33
|
+
repos: WorkspaceRepo[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Load the workspace at `rootPath` (the directory whose
|
|
37
|
+
* `.projscan-workspace.json` we read). Returns null if the file is
|
|
38
|
+
* missing, corrupt, or schema-mismatched. Never throws.
|
|
39
|
+
*/
|
|
40
|
+
export declare function loadWorkspace(rootPath: string): Promise<Workspace | null>;
|
|
41
|
+
/**
|
|
42
|
+
* Load the workspace, or create a fresh empty one. Useful for the
|
|
43
|
+
* `add` flow where the file may not yet exist.
|
|
44
|
+
*/
|
|
45
|
+
export declare function loadOrCreateWorkspace(rootPath: string): Promise<Workspace>;
|
|
46
|
+
/**
|
|
47
|
+
* Add a sibling repo to the workspace. `repoPath` is resolved to an
|
|
48
|
+
* absolute path. Duplicate detection is by absolute path. Returns
|
|
49
|
+
* the resulting repo entry; throws on validation errors.
|
|
50
|
+
*/
|
|
51
|
+
export declare function addRepo(workspace: Workspace, repoPath: string, name?: string): WorkspaceRepo;
|
|
52
|
+
/**
|
|
53
|
+
* Remove a sibling repo by absolute path or by name. Returns the
|
|
54
|
+
* removed entry, or null if no match was found.
|
|
55
|
+
*/
|
|
56
|
+
export declare function removeRepo(workspace: Workspace, pathOrName: string): WorkspaceRepo | null;
|
|
57
|
+
/**
|
|
58
|
+
* Persist the workspace. Best-effort — failures are swallowed so a
|
|
59
|
+
* transient disk error doesn't break the calling tool. Mirrors the
|
|
60
|
+
* session / memory modules.
|
|
61
|
+
*/
|
|
62
|
+
export declare function saveWorkspace(rootPath: string, workspace: Workspace): Promise<void>;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Cross-repo workspace (1.6+).
|
|
5
|
+
*
|
|
6
|
+
* A workspace is a collection of registered sibling repos under a
|
|
7
|
+
* common root directory. Used for multi-repo intelligence — e.g.
|
|
8
|
+
* "what consumer apps import this SDK function?" or "did this PR
|
|
9
|
+
* to the SDK introduce a taint flow that reaches consumer X?"
|
|
10
|
+
*
|
|
11
|
+
* Disambiguation: this is DIFFERENT from `src/core/monorepo.ts`'s
|
|
12
|
+
* `WorkspaceInfo`, which detects intra-repo packages (npm/yarn/pnpm/
|
|
13
|
+
* Lerna/Nx) within a single repo. The cross-repo workspace lives at
|
|
14
|
+
* `<cwd>/.projscan-workspace.json`; the monorepo workspace is
|
|
15
|
+
* detected from package.json/pnpm-workspace.yaml/etc.
|
|
16
|
+
*
|
|
17
|
+
* Local-only state. No network. Schema-versioned. Best-effort writes
|
|
18
|
+
* (mirrors the session and memory modules' posture).
|
|
19
|
+
*/
|
|
20
|
+
export const WORKSPACE_SCHEMA_VERSION = 1;
|
|
21
|
+
const WORKSPACE_FILENAME = '.projscan-workspace.json';
|
|
22
|
+
/**
|
|
23
|
+
* Load the workspace at `rootPath` (the directory whose
|
|
24
|
+
* `.projscan-workspace.json` we read). Returns null if the file is
|
|
25
|
+
* missing, corrupt, or schema-mismatched. Never throws.
|
|
26
|
+
*/
|
|
27
|
+
export async function loadWorkspace(rootPath) {
|
|
28
|
+
const filePath = workspaceFilePath(rootPath);
|
|
29
|
+
let raw;
|
|
30
|
+
try {
|
|
31
|
+
raw = await fs.readFile(filePath, 'utf-8');
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
let parsed;
|
|
37
|
+
try {
|
|
38
|
+
parsed = JSON.parse(raw);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
if (!isWorkspaceShape(parsed) || parsed.schemaVersion !== WORKSPACE_SCHEMA_VERSION) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return parsed;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Load the workspace, or create a fresh empty one. Useful for the
|
|
50
|
+
* `add` flow where the file may not yet exist.
|
|
51
|
+
*/
|
|
52
|
+
export async function loadOrCreateWorkspace(rootPath) {
|
|
53
|
+
const loaded = await loadWorkspace(rootPath);
|
|
54
|
+
if (loaded)
|
|
55
|
+
return loaded;
|
|
56
|
+
return {
|
|
57
|
+
schemaVersion: WORKSPACE_SCHEMA_VERSION,
|
|
58
|
+
createdAt: new Date().toISOString(),
|
|
59
|
+
repos: [],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Add a sibling repo to the workspace. `repoPath` is resolved to an
|
|
64
|
+
* absolute path. Duplicate detection is by absolute path. Returns
|
|
65
|
+
* the resulting repo entry; throws on validation errors.
|
|
66
|
+
*/
|
|
67
|
+
export function addRepo(workspace, repoPath, name) {
|
|
68
|
+
if (typeof repoPath !== 'string' || repoPath.length === 0) {
|
|
69
|
+
throw new Error('Repo path is required.');
|
|
70
|
+
}
|
|
71
|
+
const absolute = path.resolve(repoPath);
|
|
72
|
+
const existing = workspace.repos.find((r) => r.path === absolute);
|
|
73
|
+
if (existing) {
|
|
74
|
+
throw new Error(`Repo "${absolute}" is already registered (as "${existing.name}").`);
|
|
75
|
+
}
|
|
76
|
+
const repoName = (name && name.trim()) || path.basename(absolute);
|
|
77
|
+
if (workspace.repos.some((r) => r.name === repoName)) {
|
|
78
|
+
throw new Error(`A repo named "${repoName}" is already registered. Pass --name <new-name> to disambiguate.`);
|
|
79
|
+
}
|
|
80
|
+
const entry = { path: absolute, name: repoName };
|
|
81
|
+
workspace.repos.push(entry);
|
|
82
|
+
return entry;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Remove a sibling repo by absolute path or by name. Returns the
|
|
86
|
+
* removed entry, or null if no match was found.
|
|
87
|
+
*/
|
|
88
|
+
export function removeRepo(workspace, pathOrName) {
|
|
89
|
+
if (typeof pathOrName !== 'string' || pathOrName.length === 0)
|
|
90
|
+
return null;
|
|
91
|
+
const absoluteCandidate = path.isAbsolute(pathOrName) ? pathOrName : path.resolve(pathOrName);
|
|
92
|
+
const idx = workspace.repos.findIndex((r) => r.path === absoluteCandidate || r.name === pathOrName);
|
|
93
|
+
if (idx < 0)
|
|
94
|
+
return null;
|
|
95
|
+
const [removed] = workspace.repos.splice(idx, 1);
|
|
96
|
+
return removed;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Persist the workspace. Best-effort — failures are swallowed so a
|
|
100
|
+
* transient disk error doesn't break the calling tool. Mirrors the
|
|
101
|
+
* session / memory modules.
|
|
102
|
+
*/
|
|
103
|
+
export async function saveWorkspace(rootPath, workspace) {
|
|
104
|
+
try {
|
|
105
|
+
const filePath = workspaceFilePath(rootPath);
|
|
106
|
+
await fs.writeFile(filePath, JSON.stringify(workspace, null, 2), 'utf-8');
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// best-effort
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function workspaceFilePath(rootPath) {
|
|
113
|
+
return path.join(rootPath, WORKSPACE_FILENAME);
|
|
114
|
+
}
|
|
115
|
+
function isWorkspaceShape(value) {
|
|
116
|
+
if (!value || typeof value !== 'object')
|
|
117
|
+
return false;
|
|
118
|
+
const v = value;
|
|
119
|
+
return (typeof v.schemaVersion === 'number' &&
|
|
120
|
+
typeof v.createdAt === 'string' &&
|
|
121
|
+
Array.isArray(v.repos) &&
|
|
122
|
+
v.repos.every((r) => r !== null &&
|
|
123
|
+
typeof r === 'object' &&
|
|
124
|
+
typeof r.path === 'string' &&
|
|
125
|
+
typeof r.name === 'string'));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/core/workspace.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/prompts.js
CHANGED
|
@@ -270,6 +270,7 @@ async function reviewThisPrPrompt(args, rootPath) {
|
|
|
270
270
|
newCycles: review.newCycles.slice(0, 3),
|
|
271
271
|
riskyFunctions: review.riskyFunctions.slice(0, 5),
|
|
272
272
|
dependencyChanges: review.dependencyChanges.slice(0, 5),
|
|
273
|
+
newTaintFlows: review.newTaintFlows.slice(0, 5),
|
|
273
274
|
...(pkg ? { scopedToPackage: pkg } : {}),
|
|
274
275
|
}, null, 2);
|
|
275
276
|
const text = [
|
|
@@ -284,10 +285,11 @@ async function reviewThisPrPrompt(args, rootPath) {
|
|
|
284
285
|
'Produce a PR-comment-ready review in this order:',
|
|
285
286
|
'',
|
|
286
287
|
'1. **Verdict line** — restate projscan\'s verdict and whether you concur after looking at the structural data.',
|
|
287
|
-
'2. **
|
|
288
|
-
'3. **
|
|
289
|
-
'4. **
|
|
290
|
-
'5. **
|
|
288
|
+
'2. **Security: NEW taint flows** — if `newTaintFlows` is non-empty, this is the lead concern. Name each flow (`source → sink` in `sourceFn`), say what an attacker would need to exploit it, and demand the author either neutralize it or justify why the source is trusted. A new taint flow is presumed `request-changes` unless the author closes the loop.',
|
|
289
|
+
'3. **Must-look-at** — the highest-risk file(s) from `topChangedFiles` and `riskyFunctions`. For each: one sentence on why, and a concrete question to ask the author.',
|
|
290
|
+
'4. **Cycle / coupling concerns** — if `newCycles` is non-empty, name each and propose how to break or document it.',
|
|
291
|
+
'5. **Dependency concerns** — call out anything in `dependencyChanges` that warrants a closer look (major bumps, new deps with unclear purpose).',
|
|
292
|
+
'6. **Approval recommendation** — `approve` / `request-changes` / `comment` with rationale.',
|
|
291
293
|
'',
|
|
292
294
|
'Stay grounded in the data above. Do not speculate about code you can\'t see; if you need to inspect a file, request `projscan_file <path>` for it.',
|
|
293
295
|
].join('\n');
|
package/dist/mcp/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/mcp/prompts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/mcp/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { McpTool } from './_shared.js';
|
|
2
|
+
/**
|
|
3
|
+
* `projscan_apply_fix` (1.6+) — closes the suggest-and-apply loop for
|
|
4
|
+
* the small set of issue ids whose templates declare apply support.
|
|
5
|
+
*
|
|
6
|
+
* Default is dry-run: returns the would-change list without writing.
|
|
7
|
+
* Pass `confirm: true` to actually mutate disk. Every applied change
|
|
8
|
+
* gets a rollback record under `.projscan-cache/rollbacks/<id>.json`
|
|
9
|
+
* that can be reversed with `action: "rollback", rollback_id: ...`.
|
|
10
|
+
*
|
|
11
|
+
* Mechanical templates only — no codemods, no semantic rename, no
|
|
12
|
+
* inference. If a template doesn't declare apply support, this tool
|
|
13
|
+
* returns `applicable: false` and points at `projscan_fix_suggest`
|
|
14
|
+
* instead.
|
|
15
|
+
*/
|
|
16
|
+
export declare const applyFixTool: McpTool;
|