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.
Files changed (64) hide show
  1. package/README.md +13 -3
  2. package/dist/cli/commands/applyFix.d.ts +7 -0
  3. package/dist/cli/commands/applyFix.js +113 -0
  4. package/dist/cli/commands/applyFix.js.map +1 -0
  5. package/dist/cli/commands/coverage.js +13 -0
  6. package/dist/cli/commands/coverage.js.map +1 -1
  7. package/dist/cli/commands/impact.js +25 -1
  8. package/dist/cli/commands/impact.js.map +1 -1
  9. package/dist/cli/commands/init.d.ts +6 -0
  10. package/dist/cli/commands/init.js +70 -0
  11. package/dist/cli/commands/init.js.map +1 -0
  12. package/dist/cli/commands/installHook.d.ts +9 -0
  13. package/dist/cli/commands/installHook.js +90 -0
  14. package/dist/cli/commands/installHook.js.map +1 -0
  15. package/dist/cli/commands/taint.d.ts +6 -0
  16. package/dist/cli/commands/taint.js +74 -0
  17. package/dist/cli/commands/taint.js.map +1 -0
  18. package/dist/cli/commands/workspace.d.ts +11 -0
  19. package/dist/cli/commands/workspace.js +115 -0
  20. package/dist/cli/commands/workspace.js.map +1 -0
  21. package/dist/cli/index.js +10 -0
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/core/applyFix.d.ts +52 -0
  24. package/dist/core/applyFix.js +220 -0
  25. package/dist/core/applyFix.js.map +1 -0
  26. package/dist/core/ast.d.ts +9 -0
  27. package/dist/core/ast.js +35 -4
  28. package/dist/core/ast.js.map +1 -1
  29. package/dist/core/fixSuggest.d.ts +6 -0
  30. package/dist/core/fixSuggest.js +195 -0
  31. package/dist/core/fixSuggest.js.map +1 -1
  32. package/dist/core/impact.d.ts +8 -0
  33. package/dist/core/impact.js +41 -3
  34. package/dist/core/impact.js.map +1 -1
  35. package/dist/core/indexCache.js +4 -1
  36. package/dist/core/indexCache.js.map +1 -1
  37. package/dist/core/review.js +50 -3
  38. package/dist/core/review.js.map +1 -1
  39. package/dist/core/taint.d.ts +91 -0
  40. package/dist/core/taint.js +185 -0
  41. package/dist/core/taint.js.map +1 -0
  42. package/dist/core/workspace.d.ts +62 -0
  43. package/dist/core/workspace.js +127 -0
  44. package/dist/core/workspace.js.map +1 -0
  45. package/dist/mcp/prompts.js +6 -4
  46. package/dist/mcp/prompts.js.map +1 -1
  47. package/dist/mcp/tools/applyFix.d.ts +16 -0
  48. package/dist/mcp/tools/applyFix.js +91 -0
  49. package/dist/mcp/tools/applyFix.js.map +1 -0
  50. package/dist/mcp/tools/impact.js +34 -1
  51. package/dist/mcp/tools/impact.js.map +1 -1
  52. package/dist/mcp/tools/taint.d.ts +15 -0
  53. package/dist/mcp/tools/taint.js +67 -0
  54. package/dist/mcp/tools/taint.js.map +1 -0
  55. package/dist/mcp/tools/workspaceGraph.d.ts +18 -0
  56. package/dist/mcp/tools/workspaceGraph.js +188 -0
  57. package/dist/mcp/tools/workspaceGraph.js.map +1 -0
  58. package/dist/mcp/tools.js +6 -0
  59. package/dist/mcp/tools.js.map +1 -1
  60. package/dist/tool-manifest.json +89 -3
  61. package/dist/types.d.ts +46 -0
  62. package/dist/utils/config.js +15 -0
  63. package/dist/utils/config.js.map +1 -1
  64. 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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"}
@@ -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. **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.',
288
- '3. **Cycle / coupling concerns** if `newCycles` is non-empty, name each and propose how to break or document it.',
289
- '4. **Dependency concerns** — call out anything in `dependencyChanges` that warrants a closer look (major bumps, new deps with unclear purpose).',
290
- '5. **Approval recommendation** — `approve` / `request-changes` / `comment` with rationale.',
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');
@@ -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;