council-review 0.1.1 → 0.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/README.md +12 -2
- package/dist/blast-radius.d.ts +228 -0
- package/dist/blast-radius.d.ts.map +1 -0
- package/dist/blast-radius.js +913 -0
- package/dist/blast-radius.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +46 -5
- package/dist/cli.js.map +1 -1
- package/dist/codegraph.d.ts +36 -0
- package/dist/codegraph.d.ts.map +1 -0
- package/dist/codegraph.js +95 -0
- package/dist/codegraph.js.map +1 -0
- package/dist/config.d.ts +22 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +31 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/picker.d.ts +26 -3
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +78 -18
- package/dist/picker.js.map +1 -1
- package/dist/report.d.ts +16 -0
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +36 -1
- package/dist/report.js.map +1 -1
- package/dist/reviewer-spawn.d.ts +4 -2
- package/dist/reviewer-spawn.d.ts.map +1 -1
- package/dist/reviewer-spawn.js +4 -2
- package/dist/reviewer-spawn.js.map +1 -1
- package/dist/reviewer-tools.d.ts +21 -0
- package/dist/reviewer-tools.d.ts.map +1 -1
- package/dist/reviewer-tools.js +250 -3
- package/dist/reviewer-tools.js.map +1 -1
- package/dist/runner.d.ts +7 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +33 -12
- package/dist/runner.js.map +1 -1
- package/dist/snapshot.d.ts +11 -0
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +71 -6
- package/dist/snapshot.js.map +1 -1
- package/dist/status.d.ts +9 -3
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +47 -6
- package/dist/status.js.map +1 -1
- package/package.json +1 -1
- package/src/blast-radius.ts +1136 -0
- package/src/cli.ts +50 -4
- package/src/codegraph.ts +118 -0
- package/src/config.ts +61 -0
- package/src/index.ts +2 -0
- package/src/picker.ts +96 -19
- package/src/report.ts +58 -2
- package/src/reviewer-spawn.ts +5 -2
- package/src/reviewer-tools.ts +294 -3
- package/src/runner.ts +48 -14
- package/src/snapshot.ts +93 -8
- package/src/status.ts +46 -6
package/README.md
CHANGED
|
@@ -20,12 +20,22 @@ handoff prompt addressed to a coding agent (`HANDOFF.md`).
|
|
|
20
20
|
npm install -g council-review
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
For unreleased changes from `main`,
|
|
23
|
+
For unreleased changes from `main`, build from a clone:
|
|
24
24
|
|
|
25
25
|
```
|
|
26
|
-
|
|
26
|
+
git clone https://github.com/ad-005/council-review
|
|
27
|
+
cd council-review
|
|
28
|
+
npm install
|
|
29
|
+
npm pack
|
|
30
|
+
npm install -g ./council-review-*.tgz
|
|
27
31
|
```
|
|
28
32
|
|
|
33
|
+
Installing straight from the git URL is unreliable across npm versions: on the npm bundled with
|
|
34
|
+
Node 22 (10.x) `npm install -g github:ad-005/council-review` fails, because npm installs no
|
|
35
|
+
dependencies into its temporary clone and the `prepare` build cannot run; npm 12 fixed that but
|
|
36
|
+
disables git fetching by default, so it needs `--allow-git=all`. `npx github:ad-005/council-review`
|
|
37
|
+
works on npm 10, and needs `--allow-git=all` on npm 12.
|
|
38
|
+
|
|
29
39
|
Requires the `pi` coding-agent CLI (`@earendil-works/pi-coding-agent`) on `PATH`, authenticated
|
|
30
40
|
for at least one provider through `pi`'s own credential store — a key that exists only as a shell
|
|
31
41
|
variable never reaches a reviewer, because reviewer processes get a tight environment allowlist.
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import type { ResolvedScope } from './scope.js';
|
|
2
|
+
/** Maximum callers shown per symbol at render time. */
|
|
3
|
+
export declare const BLAST_RADIUS_CALLERS_LIMIT = 20;
|
|
4
|
+
/** `--limit` passed to every `callers` query: one past the render cap, so a full page
|
|
5
|
+
* proves truncation and the block can disclose it instead of rendering a truncated
|
|
6
|
+
* list as complete. The binary reports no total count, so this detects truncation
|
|
7
|
+
* honestly without claiming an exact hidden remainder. */
|
|
8
|
+
export declare const BLAST_RADIUS_CALLERS_QUERY_LIMIT: number;
|
|
9
|
+
/** `impact` is traced when a symbol's caller count exceeds this, or when the symbol's kind
|
|
10
|
+
* marks it as shared surface (see `IMPACT_ALWAYS_KINDS`). Keeps the common small-change
|
|
11
|
+
* case to one query per symbol. */
|
|
12
|
+
export declare const BLAST_RADIUS_IMPACT_CALLER_THRESHOLD = 2;
|
|
13
|
+
/** Symbol kinds treated as exported/shared surface: `impact` is always traced for these,
|
|
14
|
+
* even with few direct callers. */
|
|
15
|
+
export declare const IMPACT_ALWAYS_KINDS: ReadonlySet<string>;
|
|
16
|
+
/** Per-query subprocess timeout. */
|
|
17
|
+
export declare const BLAST_RADIUS_QUERY_TIMEOUT_MS = 60000;
|
|
18
|
+
/** Maximum concurrent `codegraph` subprocesses. */
|
|
19
|
+
export declare const BLAST_RADIUS_CONCURRENCY = 4;
|
|
20
|
+
export type PatchFileStatus = 'modified' | 'added' | 'deleted' | 'renamed';
|
|
21
|
+
export interface PatchHunk {
|
|
22
|
+
/** 1-based start line on the new-file (+) side. 0 for a pure context-less deletion hunk
|
|
23
|
+
* (`+0,0`), which maps to no end-state symbol. */
|
|
24
|
+
start: number;
|
|
25
|
+
/** Number of new-side lines in the hunk (0 for deletion-only hunks). */
|
|
26
|
+
count: number;
|
|
27
|
+
}
|
|
28
|
+
export interface PatchFile {
|
|
29
|
+
/** Post-image path, or the pre-image path for deleted files. */
|
|
30
|
+
path: string;
|
|
31
|
+
/** Pre-image path. */
|
|
32
|
+
oldPath: string;
|
|
33
|
+
status: PatchFileStatus;
|
|
34
|
+
hunks: PatchHunk[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parses a unified `git diff` into per-file paths, hunk ranges, and change kinds. Pure
|
|
38
|
+
* function of its input. Handles new files (`--- /dev/null`), deleted files
|
|
39
|
+
* (`+++ /dev/null`), renames (`rename from/to` or differing `---`/`+++` paths), binary
|
|
40
|
+
* diffs (emitted with zero hunks so they still feed the `affected` query), and multi-hunk
|
|
41
|
+
* files. Only headers are inspected, and `---`/`+++` path headers are only accepted
|
|
42
|
+
* before the first hunk header of each file section (real headers always precede the
|
|
43
|
+
* hunks, including `/dev/null` ones): a deleted `-- x` or added `++ y` content line
|
|
44
|
+
* would otherwise mimic a path header once prefixed with `-`/`+` and corrupt the paths.
|
|
45
|
+
*/
|
|
46
|
+
export declare function parsePatchHunks(patch: string): PatchFile[];
|
|
47
|
+
export interface FileSymbol {
|
|
48
|
+
name: string;
|
|
49
|
+
kind: string;
|
|
50
|
+
startLine: number;
|
|
51
|
+
}
|
|
52
|
+
export type SymbolsOnlyParse = {
|
|
53
|
+
status: 'ok';
|
|
54
|
+
symbols: FileSymbol[];
|
|
55
|
+
dependents: string[];
|
|
56
|
+
} | {
|
|
57
|
+
status: 'not-in-index';
|
|
58
|
+
} | {
|
|
59
|
+
status: 'malformed';
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Parses `codegraph node --file <rel> --symbols-only` (text; the one subcommand with no
|
|
63
|
+
* JSON mode). `not-in-index` (the binary's `No indexed file matches` message) and
|
|
64
|
+
* `malformed` are distinct: the former names a removed/unindexed file, the latter degrades
|
|
65
|
+
* that file to a file-level entry while other files keep symbol granularity. Unparseable
|
|
66
|
+
* lines inside an otherwise well-formed map are ignored for forward compatibility; only a
|
|
67
|
+
* map with no `**Symbols**` section at all is `malformed`.
|
|
68
|
+
*/
|
|
69
|
+
export declare function parseSymbolsOnlyMap(output: string): SymbolsOnlyParse;
|
|
70
|
+
export interface ChangedSymbol {
|
|
71
|
+
name: string;
|
|
72
|
+
kind: string;
|
|
73
|
+
file: string;
|
|
74
|
+
startLine: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Maps each hunk to its enclosing symbol: the last symbol with
|
|
78
|
+
* `startLine <= hunk.start` in the same file (end lines are inferred positionally, so a
|
|
79
|
+
* hunk above the first symbol maps to nothing). Deduped and sorted by
|
|
80
|
+
* (file, startLine, name).
|
|
81
|
+
*/
|
|
82
|
+
export declare function mapHunksToSymbols(file: string, hunks: readonly PatchHunk[], symbols: readonly FileSymbol[]): ChangedSymbol[];
|
|
83
|
+
/** `node --file <rel> --symbols-only`: the per-file symbol map (text output). */
|
|
84
|
+
export declare function buildNodeSymbolsOnlyArgv(snapshotRoot: string, relPath: string): string[];
|
|
85
|
+
/** `callers -j`: direct callers of one symbol as JSON. Name-only: codegraph v1.6.0
|
|
86
|
+
* accepts no file scope for `callers` (verified empirically — no flag, no
|
|
87
|
+
* `file:symbol` syntax), so same-named symbols elsewhere merge into the result. */
|
|
88
|
+
export declare function buildCallersArgv(snapshotRoot: string, symbol: string, limit?: number): string[];
|
|
89
|
+
/** `impact -j`: transitive impact of one symbol as JSON. Name-only, like `callers`:
|
|
90
|
+
* no file scope exists, so same-named symbols elsewhere merge into the result. */
|
|
91
|
+
export declare function buildImpactArgv(snapshotRoot: string, symbol: string, depth: number): string[];
|
|
92
|
+
/** `affected -j`: affected tests for all changed files in one call. */
|
|
93
|
+
export declare function buildAffectedArgv(snapshotRoot: string, files: readonly string[]): string[];
|
|
94
|
+
export interface CodeRef {
|
|
95
|
+
name: string;
|
|
96
|
+
kind: string;
|
|
97
|
+
filePath: string;
|
|
98
|
+
startLine: number;
|
|
99
|
+
}
|
|
100
|
+
export type RefsParse = {
|
|
101
|
+
status: 'ok';
|
|
102
|
+
refs: CodeRef[];
|
|
103
|
+
} | {
|
|
104
|
+
status: 'not-found';
|
|
105
|
+
} | {
|
|
106
|
+
status: 'malformed';
|
|
107
|
+
};
|
|
108
|
+
export type AffectedParse = {
|
|
109
|
+
status: 'ok';
|
|
110
|
+
changedFiles: string[];
|
|
111
|
+
affectedTests: string[];
|
|
112
|
+
} | {
|
|
113
|
+
status: 'malformed';
|
|
114
|
+
};
|
|
115
|
+
/** Parses `callers -j` (`{ symbol, callers: [...] }`). Unknown symbols yield `not-found`,
|
|
116
|
+
* not `malformed`. */
|
|
117
|
+
export declare function parseCallersJson(output: string): RefsParse;
|
|
118
|
+
/** Parses `impact -j` (`{ symbol, depth, ..., affected: [...] }`). */
|
|
119
|
+
export declare function parseImpactJson(output: string): RefsParse;
|
|
120
|
+
/** Parses `affected -j` (`{ changedFiles: [...], affectedTests: [...] }`). Unknown files
|
|
121
|
+
* simply contribute no tests — there is no not-found shape. */
|
|
122
|
+
export declare function parseAffectedJson(output: string): AffectedParse;
|
|
123
|
+
/**
|
|
124
|
+
* Best-effort filtering for one symbol's refs (callers or impact nodes):
|
|
125
|
+
* - drops same-name symbols from other files (ambiguous with this symbol's own
|
|
126
|
+
* definition; a same-name ref only counts with a file match),
|
|
127
|
+
* - drops file-level-only (`kind: 'file'`) refs unless nothing else references the
|
|
128
|
+
* symbol, in which case they are kept rather than reporting zero refs,
|
|
129
|
+
* - dedupes and sorts (codepoint order) for determinism.
|
|
130
|
+
*
|
|
131
|
+
* Residual over-approximation, stated explicitly: the queries are name-only —
|
|
132
|
+
* codegraph v1.6.0 offers no file scoping for `callers`/`impact` (verified empirically:
|
|
133
|
+
* no flag, no `file:symbol` syntax) and the JSON exposes no resolved definition site
|
|
134
|
+
* for caller refs, which carry caller identity only. When two files define the same
|
|
135
|
+
* symbol name, their callers merge indistinguishably and this filter cannot attribute
|
|
136
|
+
* them, so the block over-approximates by design. Only same-name definition entries
|
|
137
|
+
* (notably `impact` root nodes) are attributable, via the file match above.
|
|
138
|
+
*/
|
|
139
|
+
export declare function filterRefs(refs: readonly CodeRef[], opts: {
|
|
140
|
+
symbolName: string;
|
|
141
|
+
symbolFile: string;
|
|
142
|
+
}): CodeRef[];
|
|
143
|
+
/**
|
|
144
|
+
* Whether `impact` is worth tracing for a symbol: always for shared-surface kinds, or
|
|
145
|
+
* when the caller count exceeds the threshold (narrowly-referenced private symbols keep
|
|
146
|
+
* the run to one query each).
|
|
147
|
+
*/
|
|
148
|
+
export declare function shouldTraceImpact(symbol: Pick<ChangedSymbol, 'kind'>, callerCount: number): boolean;
|
|
149
|
+
export type SymbolQueryFailure = 'query-failed' | 'parse-failed';
|
|
150
|
+
export interface SymbolBlast {
|
|
151
|
+
symbol: ChangedSymbol;
|
|
152
|
+
/** Filtered direct callers. Null when the callers query itself failed. */
|
|
153
|
+
callers: CodeRef[] | null;
|
|
154
|
+
/** True when the callers query returned a full page (`BLAST_RADIUS_CALLERS_QUERY_LIMIT`
|
|
155
|
+
* raw refs), proving truncation: more callers may exist beyond those listed. */
|
|
156
|
+
callersTruncated?: boolean;
|
|
157
|
+
/** Filtered transitive impact, minus the symbol's own root entry. Null when impact was
|
|
158
|
+
* not traced (below threshold) or its query failed — see `impactTraced`/`failure`. */
|
|
159
|
+
impact: CodeRef[] | null;
|
|
160
|
+
impactTraced: boolean;
|
|
161
|
+
/** Set when a per-symbol query failed; the symbol still renders with an in-block note. */
|
|
162
|
+
failure?: SymbolQueryFailure;
|
|
163
|
+
}
|
|
164
|
+
export interface FileFallbackBlast {
|
|
165
|
+
file: string;
|
|
166
|
+
/** Best-effort dependents from the symbol-map header; empty when unknown. */
|
|
167
|
+
dependents: string[];
|
|
168
|
+
}
|
|
169
|
+
export interface RenderInput {
|
|
170
|
+
symbols: readonly SymbolBlast[];
|
|
171
|
+
fileFallbacks: readonly FileFallbackBlast[];
|
|
172
|
+
removedSymbols: readonly ChangedSymbol[];
|
|
173
|
+
/** Files deleted by the patch. */
|
|
174
|
+
removedFiles: readonly string[];
|
|
175
|
+
/** Files present in the patch but absent from the index (not deleted). */
|
|
176
|
+
unindexedFiles: readonly string[];
|
|
177
|
+
affectedTests: readonly string[];
|
|
178
|
+
/** `affected` query outcome when no test list could be produced. */
|
|
179
|
+
affectedFailure?: SymbolQueryFailure;
|
|
180
|
+
/** Symbols cut by `maxSymbols` (sorted first, so these are the trailing ones). */
|
|
181
|
+
omittedSymbols: number;
|
|
182
|
+
omittedTests?: number;
|
|
183
|
+
depth: number;
|
|
184
|
+
maxBlockChars: number;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Renders the blast-radius block: compact text with `file:line` anchors. Inputs are
|
|
188
|
+
* re-sorted defensively so rendering is a pure, deterministic function. Overflow (symbol
|
|
189
|
+
* cap) and removals are disclosed in-block; when the rendered text exceeds
|
|
190
|
+
* `maxBlockChars` it is truncated to exactly the cap with a trailing truncation note.
|
|
191
|
+
*/
|
|
192
|
+
export declare function renderBlastRadiusBlock(input: RenderInput): string;
|
|
193
|
+
export type BlastRadiusReason = 'disabled' | 'index-unavailable' | 'query-failed' | 'parse-failed' | 'empty';
|
|
194
|
+
export interface BlastRadiusStats {
|
|
195
|
+
/** Traced changed symbols rendered in the block (excludes removed/file-level entries). */
|
|
196
|
+
symbols: number;
|
|
197
|
+
/** Total callers listed across traced symbols. */
|
|
198
|
+
callers: number;
|
|
199
|
+
/** Affected tests listed. */
|
|
200
|
+
tests: number;
|
|
201
|
+
}
|
|
202
|
+
export interface BlastRadiusResult {
|
|
203
|
+
available: boolean;
|
|
204
|
+
reason?: BlastRadiusReason;
|
|
205
|
+
/** The rendered block, or '' when unavailable. */
|
|
206
|
+
block: string;
|
|
207
|
+
stats: BlastRadiusStats;
|
|
208
|
+
}
|
|
209
|
+
export interface ComputeBlastRadiusOptions {
|
|
210
|
+
enabled?: boolean;
|
|
211
|
+
indexAvailable?: boolean;
|
|
212
|
+
bin?: string;
|
|
213
|
+
depth?: number;
|
|
214
|
+
maxSymbols?: number;
|
|
215
|
+
maxBlockChars?: number;
|
|
216
|
+
timeoutMs?: number;
|
|
217
|
+
concurrency?: number;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Computes the blast radius for one run. Never throws for a blast-radius outcome: every
|
|
221
|
+
* spawn failure, timeout, and parse failure degrades to a reason (or, where a per-file /
|
|
222
|
+
* per-symbol fallback applies, to a partial block with an in-block note), as do
|
|
223
|
+
* data-dependent argv-validation failures (odd paths from the diff, odd symbol names
|
|
224
|
+
* from the index). Throws only for caller bugs (invalid snapshot root / options),
|
|
225
|
+
* matching `buildCodegraphArgv`'s validate-then-spawn precedent.
|
|
226
|
+
*/
|
|
227
|
+
export declare function computeBlastRadius(snapshotRoot: string, scope: ResolvedScope, opts?: ComputeBlastRadiusOptions): Promise<BlastRadiusResult>;
|
|
228
|
+
//# sourceMappingURL=blast-radius.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blast-radius.d.ts","sourceRoot":"","sources":["../src/blast-radius.ts"],"names":[],"mappings":"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"}
|