@quickchatai/pi-quickreview 1.1.0 → 1.3.1
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 +79 -27
- package/assets/config.example.toml +60 -14
- package/assets/prompts/onboarding.md +58 -18
- package/assets/schemas/review-result.v1.json +60 -0
- package/dist/extensions/quickreview.d.ts +13 -5
- package/dist/extensions/quickreview.d.ts.map +1 -1
- package/dist/extensions/quickreview.js +77 -25
- package/dist/extensions/quickreview.js.map +1 -1
- package/dist/src/engine/auth.d.ts +4 -0
- package/dist/src/engine/auth.d.ts.map +1 -1
- package/dist/src/engine/auth.js +11 -2
- package/dist/src/engine/auth.js.map +1 -1
- package/dist/src/engine/envmap.d.ts.map +1 -1
- package/dist/src/engine/envmap.js +5 -0
- package/dist/src/engine/envmap.js.map +1 -1
- package/dist/src/engine/lens/activity.d.ts +45 -0
- package/dist/src/engine/lens/activity.d.ts.map +1 -0
- package/dist/src/engine/lens/activity.js +118 -0
- package/dist/src/engine/lens/activity.js.map +1 -0
- package/dist/src/engine/lens/runlens.d.ts +7 -0
- package/dist/src/engine/lens/runlens.d.ts.map +1 -1
- package/dist/src/engine/lens/runlens.js +30 -1
- package/dist/src/engine/lens/runlens.js.map +1 -1
- package/dist/src/engine/lens/tool.d.ts +7 -0
- package/dist/src/engine/lens/tool.d.ts.map +1 -1
- package/dist/src/engine/lens/tool.js +101 -18
- package/dist/src/engine/lens/tool.js.map +1 -1
- package/dist/src/engine/lens/wave.d.ts +6 -0
- package/dist/src/engine/lens/wave.d.ts.map +1 -1
- package/dist/src/engine/lens/wave.js +16 -0
- package/dist/src/engine/lens/wave.js.map +1 -1
- package/dist/src/engine/pisdk.d.ts +9 -0
- package/dist/src/engine/pisdk.d.ts.map +1 -1
- package/dist/src/engine/pisdk.js +29 -4
- package/dist/src/engine/pisdk.js.map +1 -1
- package/dist/src/githubAuth.d.ts +39 -1
- package/dist/src/githubAuth.d.ts.map +1 -1
- package/dist/src/githubAuth.js +75 -8
- package/dist/src/githubAuth.js.map +1 -1
- package/dist/src/guards.d.ts +14 -1
- package/dist/src/guards.d.ts.map +1 -1
- package/dist/src/guards.js +61 -2
- package/dist/src/guards.js.map +1 -1
- package/dist/src/homes.js +1 -1
- package/dist/src/homes.js.map +1 -1
- package/dist/src/identity.d.ts +34 -0
- package/dist/src/identity.d.ts.map +1 -0
- package/dist/src/identity.js +67 -0
- package/dist/src/identity.js.map +1 -0
- package/dist/src/live/events.d.ts +3 -0
- package/dist/src/live/events.d.ts.map +1 -1
- package/dist/src/live/events.js.map +1 -1
- package/dist/src/live/lensline.d.ts +20 -0
- package/dist/src/live/lensline.d.ts.map +1 -0
- package/dist/src/live/lensline.js +70 -0
- package/dist/src/live/lensline.js.map +1 -0
- package/dist/src/live/projection.d.ts +55 -0
- package/dist/src/live/projection.d.ts.map +1 -0
- package/dist/src/live/projection.js +465 -0
- package/dist/src/live/projection.js.map +1 -0
- package/dist/src/live/read.d.ts +24 -0
- package/dist/src/live/read.d.ts.map +1 -0
- package/dist/src/live/read.js +60 -0
- package/dist/src/live/read.js.map +1 -0
- package/dist/src/live/writer.d.ts +3 -0
- package/dist/src/live/writer.d.ts.map +1 -1
- package/dist/src/live/writer.js +6 -1
- package/dist/src/live/writer.js.map +1 -1
- package/dist/src/localreview.d.ts +18 -8
- package/dist/src/localreview.d.ts.map +1 -1
- package/dist/src/localreview.js +103 -43
- package/dist/src/localreview.js.map +1 -1
- package/dist/src/modelroute.d.ts +42 -0
- package/dist/src/modelroute.d.ts.map +1 -0
- package/dist/src/modelroute.js +126 -0
- package/dist/src/modelroute.js.map +1 -0
- package/dist/src/plugin/args.d.ts +38 -7
- package/dist/src/plugin/args.d.ts.map +1 -1
- package/dist/src/plugin/args.js +134 -37
- package/dist/src/plugin/args.js.map +1 -1
- package/dist/src/plugin/login.d.ts +11 -4
- package/dist/src/plugin/login.d.ts.map +1 -1
- package/dist/src/plugin/login.js +28 -26
- package/dist/src/plugin/login.js.map +1 -1
- package/dist/src/plugin/messages.d.ts +7 -0
- package/dist/src/plugin/messages.d.ts.map +1 -0
- package/dist/src/plugin/messages.js +13 -0
- package/dist/src/plugin/messages.js.map +1 -0
- package/dist/src/plugin/review.d.ts +52 -6
- package/dist/src/plugin/review.d.ts.map +1 -1
- package/dist/src/plugin/review.js +269 -99
- package/dist/src/plugin/review.js.map +1 -1
- package/dist/src/plugin/scan.d.ts +80 -44
- package/dist/src/plugin/scan.d.ts.map +1 -1
- package/dist/src/plugin/scan.js +450 -233
- package/dist/src/plugin/scan.js.map +1 -1
- package/dist/src/plugin/scancases.d.ts +33 -0
- package/dist/src/plugin/scancases.d.ts.map +1 -0
- package/dist/src/plugin/scancases.js +153 -0
- package/dist/src/plugin/scancases.js.map +1 -0
- package/dist/src/plugin/settings.d.ts +18 -0
- package/dist/src/plugin/settings.d.ts.map +1 -0
- package/dist/src/plugin/settings.js +47 -0
- package/dist/src/plugin/settings.js.map +1 -0
- package/dist/src/plugin/setup.d.ts +35 -12
- package/dist/src/plugin/setup.d.ts.map +1 -1
- package/dist/src/plugin/setup.js +258 -118
- package/dist/src/plugin/setup.js.map +1 -1
- package/dist/src/plugin/versiongate.js +1 -1
- package/dist/src/plugin/versiongate.js.map +1 -1
- package/dist/src/profileoverrides.d.ts +3 -0
- package/dist/src/profileoverrides.d.ts.map +1 -1
- package/dist/src/profileoverrides.js +9 -2
- package/dist/src/profileoverrides.js.map +1 -1
- package/dist/src/reviewapi.d.ts +22 -31
- package/dist/src/reviewapi.d.ts.map +1 -1
- package/dist/src/reviewapi.js +90 -66
- package/dist/src/reviewapi.js.map +1 -1
- package/dist/src/reviewconfig.d.ts +12 -0
- package/dist/src/reviewconfig.d.ts.map +1 -1
- package/dist/src/reviewconfig.js +9 -1
- package/dist/src/reviewconfig.js.map +1 -1
- package/dist/src/reviewdest.d.ts +1 -1
- package/dist/src/reviewdest.d.ts.map +1 -1
- package/dist/src/reviewdest.js +4 -3
- package/dist/src/reviewdest.js.map +1 -1
- package/dist/src/reviewtarget.d.ts +36 -0
- package/dist/src/reviewtarget.d.ts.map +1 -0
- package/dist/src/reviewtarget.js +6 -0
- package/dist/src/reviewtarget.js.map +1 -0
- package/dist/src/round-progress.d.ts +5 -0
- package/dist/src/round-progress.d.ts.map +1 -1
- package/dist/src/round-progress.js.map +1 -1
- package/dist/src/savedpost.d.ts +65 -0
- package/dist/src/savedpost.d.ts.map +1 -0
- package/dist/src/savedpost.js +131 -0
- package/dist/src/savedpost.js.map +1 -0
- package/dist/src/scan/caseread.d.ts +84 -0
- package/dist/src/scan/caseread.d.ts.map +1 -0
- package/dist/src/scan/caseread.js +263 -0
- package/dist/src/scan/caseread.js.map +1 -0
- package/dist/src/scan/channelfs.d.ts +6 -0
- package/dist/src/scan/channelfs.d.ts.map +1 -0
- package/dist/src/scan/channelfs.js +27 -0
- package/dist/src/scan/channelfs.js.map +1 -0
- package/dist/src/scan/cutrender.d.ts +13 -0
- package/dist/src/scan/cutrender.d.ts.map +1 -0
- package/dist/src/scan/cutrender.js +51 -0
- package/dist/src/scan/cutrender.js.map +1 -0
- package/dist/src/scan/facts.d.ts +72 -0
- package/dist/src/scan/facts.d.ts.map +1 -0
- package/dist/src/scan/facts.js +593 -0
- package/dist/src/scan/facts.js.map +1 -0
- package/dist/src/scan/findings.d.ts +320 -0
- package/dist/src/scan/findings.d.ts.map +1 -0
- package/dist/src/scan/findings.js +948 -0
- package/dist/src/scan/findings.js.map +1 -0
- package/dist/src/scan/ledger.d.ts +116 -0
- package/dist/src/scan/ledger.d.ts.map +1 -0
- package/dist/src/scan/ledger.js +207 -0
- package/dist/src/scan/ledger.js.map +1 -0
- package/dist/src/scan/presentation.d.ts +19 -0
- package/dist/src/scan/presentation.d.ts.map +1 -0
- package/dist/src/scan/presentation.js +9 -0
- package/dist/src/scan/presentation.js.map +1 -0
- package/dist/src/scan/scan.d.ts +354 -0
- package/dist/src/scan/scan.d.ts.map +1 -0
- package/dist/src/scan/scan.js +725 -0
- package/dist/src/scan/scan.js.map +1 -0
- package/dist/src/scan/scanagents.d.ts +23 -0
- package/dist/src/scan/scanagents.d.ts.map +1 -0
- package/dist/src/scan/scanagents.js +99 -0
- package/dist/src/scan/scanagents.js.map +1 -0
- package/dist/src/scan/scanassemble.d.ts +65 -0
- package/dist/src/scan/scanassemble.d.ts.map +1 -0
- package/dist/src/scan/scanassemble.js +93 -0
- package/dist/src/scan/scanassemble.js.map +1 -0
- package/dist/src/scan/scanfs.d.ts +26 -0
- package/dist/src/scan/scanfs.d.ts.map +1 -0
- package/dist/src/scan/scanfs.js +229 -0
- package/dist/src/scan/scanfs.js.map +1 -0
- package/dist/src/scan/scanlease.d.ts +50 -0
- package/dist/src/scan/scanlease.d.ts.map +1 -0
- package/dist/src/scan/scanlease.js +251 -0
- package/dist/src/scan/scanlease.js.map +1 -0
- package/dist/src/scan/scanleaves.d.ts +55 -0
- package/dist/src/scan/scanleaves.d.ts.map +1 -0
- package/dist/src/scan/scanleaves.js +258 -0
- package/dist/src/scan/scanleaves.js.map +1 -0
- package/dist/src/scan/scanports.d.ts +79 -0
- package/dist/src/scan/scanports.d.ts.map +1 -0
- package/dist/src/scan/scanports.js +8 -0
- package/dist/src/scan/scanports.js.map +1 -0
- package/dist/src/scan/scanrender.d.ts +128 -0
- package/dist/src/scan/scanrender.d.ts.map +1 -0
- package/dist/src/scan/scanrender.js +527 -0
- package/dist/src/scan/scanrender.js.map +1 -0
- package/dist/src/scan/scanreport.d.ts +126 -0
- package/dist/src/scan/scanreport.d.ts.map +1 -0
- package/dist/src/scan/scanreport.js +289 -0
- package/dist/src/scan/scanreport.js.map +1 -0
- package/dist/src/scan/scanrun.d.ts +472 -0
- package/dist/src/scan/scanrun.d.ts.map +1 -0
- package/dist/src/scan/scanrun.js +1733 -0
- package/dist/src/scan/scanrun.js.map +1 -0
- package/dist/src/scan/scantree.d.ts +21 -0
- package/dist/src/scan/scantree.d.ts.map +1 -0
- package/dist/src/scan/scantree.js +297 -0
- package/dist/src/scan/scantree.js.map +1 -0
- package/dist/src/scan/scanverbs.d.ts +208 -0
- package/dist/src/scan/scanverbs.d.ts.map +1 -0
- package/dist/src/scan/scanverbs.js +689 -0
- package/dist/src/scan/scanverbs.js.map +1 -0
- package/dist/src/scan/stage2.d.ts +221 -0
- package/dist/src/scan/stage2.d.ts.map +1 -0
- package/dist/src/scan/stage2.js +617 -0
- package/dist/src/scan/stage2.js.map +1 -0
- package/dist/src/scan/stage2request.d.ts +125 -0
- package/dist/src/scan/stage2request.d.ts.map +1 -0
- package/dist/src/scan/stage2request.js +259 -0
- package/dist/src/scan/stage2request.js.map +1 -0
- package/dist/src/scan/textsniff.d.ts +14 -0
- package/dist/src/scan/textsniff.d.ts.map +1 -0
- package/dist/src/scan/textsniff.js +88 -0
- package/dist/src/scan/textsniff.js.map +1 -0
- package/dist/src/scan/unitcut.d.ts +135 -0
- package/dist/src/scan/unitcut.d.ts.map +1 -0
- package/dist/src/scan/unitcut.js +437 -0
- package/dist/src/scan/unitcut.js.map +1 -0
- package/dist/src/scan/unitcutstore.d.ts +155 -0
- package/dist/src/scan/unitcutstore.d.ts.map +1 -0
- package/dist/src/scan/unitcutstore.js +381 -0
- package/dist/src/scan/unitcutstore.js.map +1 -0
- package/dist/src/setupchecklist.d.ts +240 -0
- package/dist/src/setupchecklist.d.ts.map +1 -0
- package/dist/src/setupchecklist.js +407 -0
- package/dist/src/setupchecklist.js.map +1 -0
- package/package.json +7 -3
- package/skills/qcr-review/SKILL.md +24 -0
- package/skills/qcr-scan/SKILL.md +23 -0
- package/skills/qcr-setup/SKILL.md +18 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/scan/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type BuiltAgent } from "../include.js";
|
|
2
|
+
import type { CoreConfig } from "../reviewconfig.js";
|
|
3
|
+
import { type ProfileLookup } from "../profiles.js";
|
|
4
|
+
import type { ScanSettings } from "./scanrun.js";
|
|
5
|
+
/** Where the scan build lands, relative to the state home. */
|
|
6
|
+
export declare const SCAN_AGENTS_DIR = "scan/agents";
|
|
7
|
+
/** The scan-only lens sources, relative to the app's root. */
|
|
8
|
+
export declare const SCAN_AGENTS_SRC = "agents/scan";
|
|
9
|
+
/** The config a scan runs with: `parsed` (a config.toml, or the shipped
|
|
10
|
+
* defaults) with the profile's per-lens tuning and `[scan]` overrides applied
|
|
11
|
+
* (the profile wins). Throws on a bad profile — the caller reports it. */
|
|
12
|
+
export declare function scanConfigOf<C extends CoreConfig>(parsed: C, root: string, lookup: ProfileLookup): C;
|
|
13
|
+
/** The settings a scan run takes from a resolved config. */
|
|
14
|
+
export declare function scanSettings(cfg: CoreConfig): ScanSettings;
|
|
15
|
+
/** `pass-scan`'s model spec: the `[scan] tier`'s spec at `[scan] effort`
|
|
16
|
+
* (`high` = the model's ceiling), through the same per-variant hook a
|
|
17
|
+
* lens's `effort` uses. One variant — stage 1 runs at that tier alone. */
|
|
18
|
+
export declare function scanPassModels(cfg: Pick<CoreConfig, "models" | "scan">): Record<string, string>;
|
|
19
|
+
/** Build the scan agents into `outDir` — `buildAgents` in `"scan"` mode at
|
|
20
|
+
* `cfg.scan.depth`, the profile's pack and tuning composed exactly as a PR
|
|
21
|
+
* build composes them. */
|
|
22
|
+
export declare function buildScanAgents(root: string, outDir: string, cfg: CoreConfig, lookup: ProfileLookup): BuiltAgent[];
|
|
23
|
+
//# sourceMappingURL=scanagents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanagents.d.ts","sourceRoot":"","sources":["../../../src/scan/scanagents.ts"],"names":[],"mappings":"AAkCA,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,8DAA8D;AAC9D,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,8DAA8D;AAC9D,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C;;0EAE0E;AAC1E,wBAAgB,YAAY,CAAC,CAAC,SAAS,UAAU,EAC/C,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,GACpB,CAAC,CAIH;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,YAAY,CAQ1D;AAED;;0EAE0E;AAC1E,wBAAgB,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI/F;AAED;;0BAE0B;AAC1B,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,aAAa,GACpB,UAAU,EAAE,CAyBd"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// The scan agent build and the settings a scan runs with.
|
|
2
|
+
//
|
|
3
|
+
// A scan's leaves are the production lenses — `pass-scan` for stage 1, the
|
|
4
|
+
// validator when `[scan] validator` is on (the default: the scan validator is
|
|
5
|
+
// the skeptic, composed with the `mode: "scan"` `scan-skeptic-validate`
|
|
6
|
+
// addendum and run at the tier of the lens it judges, so every tier's variant
|
|
7
|
+
// is built), and stage 2's deep lenses (every suggestible lens the profile
|
|
8
|
+
// leaves on, at the tier its row names) — built by the one agent build
|
|
9
|
+
// (`packages/pi-plugin/src/include.ts buildAgents`) in `"scan"` mode:
|
|
10
|
+
//
|
|
11
|
+
// * the scan-mode anchor addendum composes (`mode: "scan"` in PASS_ADDENDA)
|
|
12
|
+
// — in this build and in no other: the daemon's, the bench's and the
|
|
13
|
+
// replay's builds are `"pr"` builds and never carry it;
|
|
14
|
+
// * `agents/scan/` joins `agents/` as a source, so `pass-scan` exists here
|
|
15
|
+
// and nowhere else;
|
|
16
|
+
// * every variant's tools are `SCAN_LEAF_TOOLS` — a scan leaf runs with no
|
|
17
|
+
// extensions, so there is no bash guard to stand between it and a shell;
|
|
18
|
+
// * a DEEP scan (`[scan] depth = "deep"`, or a stage-2 proposal made deep)
|
|
19
|
+
// also composes the `depth: "deep"` addenda: `scan-deep-suggest` on
|
|
20
|
+
// `pass-scan` (a deep lens named for every focus file) and `scan-deep-dig`
|
|
21
|
+
// on every lens a scan may run (follow callers and siblings, the state ×
|
|
22
|
+
// obligation table, what each early exit drops). A standard scan build is
|
|
23
|
+
// byte-identical without them.
|
|
24
|
+
//
|
|
25
|
+
// Everything a PR build composes from the repo's profile composes here too
|
|
26
|
+
// (the pack, the per-lens emphasis/ceiling/guide, a lens's `effort`), so a
|
|
27
|
+
// scan reviews the way this repo's PR rounds do. `pass-scan` itself is tuned
|
|
28
|
+
// by `[scan] tier`/`effort`, config.toml's defaults under the profile's
|
|
29
|
+
// `[scan]` table — the profile wins.
|
|
30
|
+
//
|
|
31
|
+
// The build lands in `<state home>/scan/agents/`, which the scan's case
|
|
32
|
+
// runner reads; it is rebuilt at every start, so a profile edit reaches the
|
|
33
|
+
// next run without anything else to remember.
|
|
34
|
+
import { join } from "node:path";
|
|
35
|
+
import { PASS_ADDENDA, buildAgents, configAddenda, identityVars, } from "../include.js";
|
|
36
|
+
import { applyProfileTuning, effortSpec, lensModelOverrides, lensTuningAddenda, } from "../lenstuning.js";
|
|
37
|
+
import { PASS_TIER_ORDER } from "../types.js";
|
|
38
|
+
import { applyProfileScan, loadProfileAddenda, loadProfileEcosystem, loadProfileLensTuning, loadProfileScan, } from "../profiles.js";
|
|
39
|
+
import { SCAN_PASS } from "./scan.js";
|
|
40
|
+
/** Where the scan build lands, relative to the state home. */
|
|
41
|
+
export const SCAN_AGENTS_DIR = "scan/agents";
|
|
42
|
+
/** The scan-only lens sources, relative to the app's root. */
|
|
43
|
+
export const SCAN_AGENTS_SRC = "agents/scan";
|
|
44
|
+
/** The config a scan runs with: `parsed` (a config.toml, or the shipped
|
|
45
|
+
* defaults) with the profile's per-lens tuning and `[scan]` overrides applied
|
|
46
|
+
* (the profile wins). Throws on a bad profile — the caller reports it. */
|
|
47
|
+
export function scanConfigOf(parsed, root, lookup) {
|
|
48
|
+
const profile = parsed.review.profile;
|
|
49
|
+
const tuned = applyProfileTuning(parsed, loadProfileLensTuning(root, profile, lookup));
|
|
50
|
+
return applyProfileScan(tuned, loadProfileScan(root, profile, lookup));
|
|
51
|
+
}
|
|
52
|
+
/** The settings a scan run takes from a resolved config. */
|
|
53
|
+
export function scanSettings(cfg) {
|
|
54
|
+
return {
|
|
55
|
+
scan: cfg.scan,
|
|
56
|
+
// Stage 2: which deep lenses run, at which tiers and effort —
|
|
57
|
+
// the same per-lens tuning the build composes.
|
|
58
|
+
lenses: cfg.lenses,
|
|
59
|
+
riskPasses: cfg.models.risk_passes,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** `pass-scan`'s model spec: the `[scan] tier`'s spec at `[scan] effort`
|
|
63
|
+
* (`high` = the model's ceiling), through the same per-variant hook a
|
|
64
|
+
* lens's `effort` uses. One variant — stage 1 runs at that tier alone. */
|
|
65
|
+
export function scanPassModels(cfg) {
|
|
66
|
+
return {
|
|
67
|
+
[`${SCAN_PASS}--${cfg.scan.tier}`]: effortSpec(cfg.models, cfg.scan.tier, cfg.scan.effort),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/** Build the scan agents into `outDir` — `buildAgents` in `"scan"` mode at
|
|
71
|
+
* `cfg.scan.depth`, the profile's pack and tuning composed exactly as a PR
|
|
72
|
+
* build composes them. */
|
|
73
|
+
export function buildScanAgents(root, outDir, cfg, lookup) {
|
|
74
|
+
return buildAgents(join(root, "agents"), outDir, {
|
|
75
|
+
root,
|
|
76
|
+
mode: "scan",
|
|
77
|
+
scanDepth: cfg.scan.depth,
|
|
78
|
+
extraSrcDirs: [join(root, SCAN_AGENTS_SRC)],
|
|
79
|
+
tiers: cfg.models.tiers,
|
|
80
|
+
riskPasses: cfg.models.risk_passes,
|
|
81
|
+
// The skeptic runs at the tier of the lens it judges — stage 1's
|
|
82
|
+
// `[scan] tier`, a stage-2 row's own — so every tier keeps a variant
|
|
83
|
+
// (never `validate_tier`, never floored upward).
|
|
84
|
+
validateTier: PASS_TIER_ORDER[0],
|
|
85
|
+
vars: identityVars(cfg),
|
|
86
|
+
ecosystem: loadProfileEcosystem(root, cfg.review.profile, lookup),
|
|
87
|
+
models: { ...lensModelOverrides(cfg.models, cfg.lenses), ...scanPassModels(cfg) },
|
|
88
|
+
// Stage 1 runs `pass-scan--<[scan] tier>` and nothing else names it
|
|
89
|
+
// (stage 2 rows refuse it), so no other tier's variant is built.
|
|
90
|
+
onlyTiers: { [SCAN_PASS]: [cfg.scan.tier] },
|
|
91
|
+
addenda: [
|
|
92
|
+
...PASS_ADDENDA,
|
|
93
|
+
...configAddenda(cfg.review),
|
|
94
|
+
...loadProfileAddenda(root, cfg.review.profile, lookup),
|
|
95
|
+
...lensTuningAddenda(cfg.lenses),
|
|
96
|
+
],
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=scanagents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanagents.js","sourceRoot":"","sources":["../../../src/scan/scanagents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { CoreConfig } from "../reviewconfig.js";
|
|
2
|
+
import type { ProfileLookup } from "../profiles.js";
|
|
3
|
+
import { FindingsStore } from "./findings.js";
|
|
4
|
+
import type { CaseRunner, Refusal } from "./scanports.js";
|
|
5
|
+
import { type ScanLease } from "./scanlease.js";
|
|
6
|
+
import { ScanRunner, type ScanSettings } from "./scanrun.js";
|
|
7
|
+
import type { UnitCutStatusPort } from "./unitcutstore.js";
|
|
8
|
+
/** What a scan host hands the engine. */
|
|
9
|
+
export interface ScanHostPorts {
|
|
10
|
+
/** The state home: the run record, the ledger, the findings, the trees, the
|
|
11
|
+
* agent build and the transcripts all live under it. */
|
|
12
|
+
home: string;
|
|
13
|
+
/** The reviewed checkout, a git work tree, read-only. */
|
|
14
|
+
reviewedRepo: string;
|
|
15
|
+
/** The core's data root: `agents/` and `agents/scan/` are built from it. */
|
|
16
|
+
root: string;
|
|
17
|
+
/** The config the scan runs with, its profile applied (scanbuild.ts
|
|
18
|
+
* `scanConfigOf`), read again at every call — or why there is none. */
|
|
19
|
+
config: () => {
|
|
20
|
+
ok: true;
|
|
21
|
+
cfg: CoreConfig;
|
|
22
|
+
} | Refusal;
|
|
23
|
+
/** Where the repo profile is looked up. */
|
|
24
|
+
profiles: ProfileLookup;
|
|
25
|
+
/** The saved unit cut and why there is none. */
|
|
26
|
+
unitCut: UnitCutStatusPort;
|
|
27
|
+
/** The case runner over the agent build in `agentsDir`, keeping each case's
|
|
28
|
+
* event stream under `transcriptDir`; `stop` stops the run (a login a case
|
|
29
|
+
* would not outlive, say) and says why. */
|
|
30
|
+
cases: (o: {
|
|
31
|
+
agentsDir: string;
|
|
32
|
+
transcriptDir: string;
|
|
33
|
+
stop: (reason: string) => void;
|
|
34
|
+
}) => CaseRunner;
|
|
35
|
+
/** The driver lease. Omitted: the state home's file lease, shared with
|
|
36
|
+
* every other runner over it. */
|
|
37
|
+
lease?: ScanLease | null;
|
|
38
|
+
/** After a run's reconcile: close the tickets of the promoted findings it
|
|
39
|
+
* found fixed. Omitted: nothing closes. */
|
|
40
|
+
closeFixedTickets?: () => Promise<{
|
|
41
|
+
closed: readonly unknown[];
|
|
42
|
+
problems: readonly string[];
|
|
43
|
+
}>;
|
|
44
|
+
clock?: () => Date;
|
|
45
|
+
/** One diagnostics line. */
|
|
46
|
+
log: (line: string) => void;
|
|
47
|
+
}
|
|
48
|
+
/** The engine a host drives: the runner, its findings store and the settings
|
|
49
|
+
* a run would take now (null when the config cannot be read). */
|
|
50
|
+
export interface AssembledScan {
|
|
51
|
+
scan: ScanRunner;
|
|
52
|
+
findings: FindingsStore;
|
|
53
|
+
settingsOf: () => ScanSettings | null;
|
|
54
|
+
home: string;
|
|
55
|
+
}
|
|
56
|
+
/** The scan engine over `p`. */
|
|
57
|
+
export declare function assembleScan(p: ScanHostPorts): AssembledScan;
|
|
58
|
+
/** The runner's runs, newest first, as the triage sees them: a run left
|
|
59
|
+
* `running` by a driver that is gone reads as interrupted. */
|
|
60
|
+
export declare function scanRuns(scan: ScanRunner): Array<{
|
|
61
|
+
id: string;
|
|
62
|
+
sha: string;
|
|
63
|
+
state: string;
|
|
64
|
+
}>;
|
|
65
|
+
//# sourceMappingURL=scanassemble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanassemble.d.ts","sourceRoot":"","sources":["../../../src/scan/scanassemble.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAwB,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B;4DACwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb;2EACuE;IACvE,MAAM,EAAE,MAAM;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO,CAAC;IACtD,2CAA2C;IAC3C,QAAQ,EAAE,aAAa,CAAC;IACxB,gDAAgD;IAChD,OAAO,EAAE,iBAAiB,CAAC;IAC3B;;+CAE2C;IAC3C,KAAK,EAAE,CAAC,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;KAChC,KAAK,UAAU,CAAC;IACjB;qCACiC;IACjC,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB;+CAC2C;IAC3C,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC;QAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC/F,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,4BAA4B;IAC5B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED;iEACiE;AACjE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,MAAM,YAAY,GAAG,IAAI,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,gCAAgC;AAChC,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAsD5D;AAED;8DAC8D;AAC9D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAO5F"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// The scan engine, assembled over its host's ports: the reviewed checkout as
|
|
2
|
+
// a source of trees, the state home for every record, the saved unit cut, the
|
|
3
|
+
// config the scan runs with, the agent build, and a case runner over that
|
|
4
|
+
// build. Nothing here reads the process (its env, its cwd, its home) or any
|
|
5
|
+
// install's config file: a host hands each fact in.
|
|
6
|
+
//
|
|
7
|
+
// Two hosts build it:
|
|
8
|
+
// - the app (extensions/setup-scan.ts `buildScan`): the companion's pi and
|
|
9
|
+
// the `qcr scan` driver, over the live config.toml and the case runner the
|
|
10
|
+
// scan sandbox or the host process runs (piCaseRunner, the driver's SDK
|
|
11
|
+
// leaves);
|
|
12
|
+
// - the pi plugin's /qcr-scan, over the person's config or the shipped
|
|
13
|
+
// defaults, with its cases on SDK sessions in the person's own pi, each
|
|
14
|
+
// behind the bash guard.
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { FindingsStore } from "./findings.js";
|
|
17
|
+
import { stateHomeFs } from "./scanfs.js";
|
|
18
|
+
import { buildScanAgents, scanSettings, SCAN_AGENTS_DIR } from "./scanagents.js";
|
|
19
|
+
import { fileLease } from "./scanlease.js";
|
|
20
|
+
import { SCAN_TRANSCRIPTS_DIR, ScanRunner } from "./scanrun.js";
|
|
21
|
+
import { gitScanSource } from "./scantree.js";
|
|
22
|
+
/** The scan engine over `p`. */
|
|
23
|
+
export function assembleScan(p) {
|
|
24
|
+
const { home, root } = p;
|
|
25
|
+
const clock = p.clock ?? (() => new Date());
|
|
26
|
+
const state = stateHomeFs(home);
|
|
27
|
+
const agentsDir = join(home, SCAN_AGENTS_DIR);
|
|
28
|
+
const settingsOf = () => {
|
|
29
|
+
const loaded = p.config();
|
|
30
|
+
return loaded.ok ? scanSettings(loaded.cfg) : null;
|
|
31
|
+
};
|
|
32
|
+
const findings = new FindingsStore(state);
|
|
33
|
+
const transcriptDir = join(home, SCAN_TRANSCRIPTS_DIR);
|
|
34
|
+
// A token a case would not outlive stops the run, on any host.
|
|
35
|
+
const stop = (reason) => {
|
|
36
|
+
p.log(`scan: stopping — ${reason}`);
|
|
37
|
+
scan.stop();
|
|
38
|
+
};
|
|
39
|
+
const scan = new ScanRunner({
|
|
40
|
+
state,
|
|
41
|
+
clock,
|
|
42
|
+
cases: p.cases({ agentsDir, transcriptDir, stop }),
|
|
43
|
+
source: gitScanSource(p.reviewedRepo, home),
|
|
44
|
+
savedCut: () => {
|
|
45
|
+
const cut = p.unitCut.savedCut();
|
|
46
|
+
if (cut)
|
|
47
|
+
return { ok: true, cut };
|
|
48
|
+
const status = p.unitCut.status();
|
|
49
|
+
return {
|
|
50
|
+
ok: false,
|
|
51
|
+
errors: status.cut_file_unreadable
|
|
52
|
+
? status.problems
|
|
53
|
+
: ["no saved unit cut — a scan reads by unit; propose, adjust and save one first"],
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
settings: () => {
|
|
57
|
+
const loaded = p.config();
|
|
58
|
+
return loaded.ok ? { ok: true, settings: scanSettings(loaded.cfg) } : loaded;
|
|
59
|
+
},
|
|
60
|
+
// At the depth the runner planned at — a stage-2 proposal's own, which
|
|
61
|
+
// its `deep` may have set apart from `[scan] depth`.
|
|
62
|
+
buildAgents: (settings) => {
|
|
63
|
+
const loaded = p.config();
|
|
64
|
+
if (!loaded.ok)
|
|
65
|
+
return loaded;
|
|
66
|
+
const cfg = { ...loaded.cfg, scan: { ...loaded.cfg.scan, depth: settings.scan.depth } };
|
|
67
|
+
try {
|
|
68
|
+
buildScanAgents(root, agentsDir, cfg, p.profiles);
|
|
69
|
+
return { ok: true };
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
return { ok: false, errors: [err instanceof Error ? err.message : String(err)] };
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
...(p.closeFixedTickets ? { closeFixedTickets: p.closeFixedTickets } : {}),
|
|
76
|
+
lease: p.lease ?? fileLease(home),
|
|
77
|
+
log: p.log,
|
|
78
|
+
});
|
|
79
|
+
return { scan, findings, settingsOf, home };
|
|
80
|
+
}
|
|
81
|
+
/** The runner's runs, newest first, as the triage sees them: a run left
|
|
82
|
+
* `running` by a driver that is gone reads as interrupted. */
|
|
83
|
+
export function scanRuns(scan) {
|
|
84
|
+
const s = scan.status();
|
|
85
|
+
const out = [];
|
|
86
|
+
if (s.run)
|
|
87
|
+
out.push({ id: s.run.id, sha: s.run.sha, state: s.run.display });
|
|
88
|
+
for (const h of s.history)
|
|
89
|
+
if (!out.some((r) => r.id === h.id))
|
|
90
|
+
out.push({ id: h.id, sha: h.sha, state: h.state });
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=scanassemble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanassemble.js","sourceRoot":"","sources":["../../../src/scan/scanassemble.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { RepoReader, StateFs } from "./scanports.js";
|
|
2
|
+
/** Files over this are not read for facts or counted line by line — a
|
|
3
|
+
* generated dump says nothing about a repo's conventions. */
|
|
4
|
+
export declare const MAX_READ_BYTES: number;
|
|
5
|
+
/** Does `back` (a `relative(root, …)`) stay under the root? A parent
|
|
6
|
+
* traversal is the `..` COMPONENT, never a name that merely begins with two
|
|
7
|
+
* dots — a tracked `..fixtures/a.ts` is an ordinary in-root file. The scan's
|
|
8
|
+
* tree reader holds the same rule. */
|
|
9
|
+
export declare function inRoot(back: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* The reviewed checkout. Listing is `git ls-files` — what the repo tracks,
|
|
12
|
+
* so ignored build output never counts as the repo — with a plain walk as
|
|
13
|
+
* the fallback for a tree git cannot read (no `.git`, or a mount git calls
|
|
14
|
+
* "dubious ownership" despite the `safe.directory` override).
|
|
15
|
+
*/
|
|
16
|
+
export declare function checkoutReader(root: string): RepoReader;
|
|
17
|
+
/** The most commits the "most-changed" count walks. */
|
|
18
|
+
export declare const CHANGE_LOG_COMMITS = 2000;
|
|
19
|
+
/** The state home as a rooted filesystem: relative paths only, never out of
|
|
20
|
+
* the root, every write tmp+rename atomic. */
|
|
21
|
+
export declare function stateHomeFs(root: string): StateFs;
|
|
22
|
+
/** The config home, the same way (the portrait narrative). In the
|
|
23
|
+
* companion only parts of it are mounted, so its callers write only under a
|
|
24
|
+
* mounted directory. */
|
|
25
|
+
export declare function configHomeFs(root: string): StateFs;
|
|
26
|
+
//# sourceMappingURL=scanfs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanfs.d.ts","sourceRoot":"","sources":["../../../src/scan/scanfs.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG1D;6DAC6D;AAC7D,eAAO,MAAM,cAAc,QAAc,CAAC;AAa1C;;;sCAGsC;AACtC,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5C;AAQD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAqHvD;AAED,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC;8CAC8C;AAC9C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;wBAEwB;AACxB,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
// The scan's real filesystem ports: the reviewed checkout, read-only
|
|
2
|
+
// (`checkoutReader`), and a home directory as a rooted filesystem
|
|
3
|
+
// (`stateHomeFs`, `configHomeFs`). Every port is total at its edge: a
|
|
4
|
+
// missing checkout lists null, and nothing throws but the state port's
|
|
5
|
+
// "exists but cannot be read", which its callers turn into a reported,
|
|
6
|
+
// write-refusing problem.
|
|
7
|
+
import { execFileSync } from "node:child_process";
|
|
8
|
+
import { randomBytes } from "node:crypto";
|
|
9
|
+
import { lstatSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
|
|
10
|
+
import { dirname, isAbsolute, join, normalize, relative, sep } from "node:path";
|
|
11
|
+
import { isBinaryContent, textLineCount } from "./textsniff.js";
|
|
12
|
+
/** Files over this are not read for facts or counted line by line — a
|
|
13
|
+
* generated dump says nothing about a repo's conventions. */
|
|
14
|
+
export const MAX_READ_BYTES = 1024 * 1024;
|
|
15
|
+
/** Directories a walk never descends (the git-less fallback only). */
|
|
16
|
+
const WALK_SKIP = new Set([
|
|
17
|
+
".git",
|
|
18
|
+
"node_modules",
|
|
19
|
+
".venv",
|
|
20
|
+
"venv",
|
|
21
|
+
"__pycache__",
|
|
22
|
+
"dist",
|
|
23
|
+
"build",
|
|
24
|
+
]);
|
|
25
|
+
/** Does `back` (a `relative(root, …)`) stay under the root? A parent
|
|
26
|
+
* traversal is the `..` COMPONENT, never a name that merely begins with two
|
|
27
|
+
* dots — a tracked `..fixtures/a.ts` is an ordinary in-root file. The scan's
|
|
28
|
+
* tree reader holds the same rule. */
|
|
29
|
+
export function inRoot(back) {
|
|
30
|
+
return back !== "" && back !== ".." && !back.startsWith(`..${sep}`) && !isAbsolute(back);
|
|
31
|
+
}
|
|
32
|
+
function inside(root, rel) {
|
|
33
|
+
if (isAbsolute(rel))
|
|
34
|
+
return null;
|
|
35
|
+
const full = normalize(join(root, rel));
|
|
36
|
+
return inRoot(relative(root, full)) ? full : null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The reviewed checkout. Listing is `git ls-files` — what the repo tracks,
|
|
40
|
+
* so ignored build output never counts as the repo — with a plain walk as
|
|
41
|
+
* the fallback for a tree git cannot read (no `.git`, or a mount git calls
|
|
42
|
+
* "dubious ownership" despite the `safe.directory` override).
|
|
43
|
+
*/
|
|
44
|
+
export function checkoutReader(root) {
|
|
45
|
+
const git = (args) => {
|
|
46
|
+
try {
|
|
47
|
+
return execFileSync("git", ["-c", `safe.directory=${root}`, "-C", root, ...args], {
|
|
48
|
+
encoding: "utf8",
|
|
49
|
+
maxBuffer: 256 * 1024 * 1024,
|
|
50
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
// A directory it cannot list makes the whole listing unknown (null), never
|
|
58
|
+
// a shorter one that reads as complete. A directory symlink is not
|
|
59
|
+
// descended (a link back up would list the tree forever, one out of the
|
|
60
|
+
// root lists another tree); a file symlink is listed like git lists it, and
|
|
61
|
+
// `read` decides whether its target is inside.
|
|
62
|
+
const walk = () => {
|
|
63
|
+
const out = [];
|
|
64
|
+
const visit = (dir) => {
|
|
65
|
+
let names;
|
|
66
|
+
try {
|
|
67
|
+
names = readdirSync(dir);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
for (const name of names) {
|
|
73
|
+
if (WALK_SKIP.has(name))
|
|
74
|
+
continue;
|
|
75
|
+
const full = join(dir, name);
|
|
76
|
+
let st;
|
|
77
|
+
try {
|
|
78
|
+
const l = lstatSync(full);
|
|
79
|
+
if (l.isDirectory()) {
|
|
80
|
+
if (!visit(full))
|
|
81
|
+
return false;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
st = l.isSymbolicLink() ? statSync(full) : l;
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
if (err.code !== "ENOENT")
|
|
88
|
+
return false;
|
|
89
|
+
continue; // a dangling link names no file
|
|
90
|
+
}
|
|
91
|
+
if (st.isFile())
|
|
92
|
+
out.push(relative(root, full).split(sep).join("/"));
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
};
|
|
96
|
+
try {
|
|
97
|
+
if (!statSync(root).isDirectory())
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
return visit(root) ? out : null;
|
|
104
|
+
};
|
|
105
|
+
// The checkout's own resolved path, for the symlink check below; a root
|
|
106
|
+
// that cannot be resolved reads nothing.
|
|
107
|
+
let realRoot;
|
|
108
|
+
const resolvedRoot = () => {
|
|
109
|
+
if (realRoot === undefined) {
|
|
110
|
+
try {
|
|
111
|
+
realRoot = realpathSync(root);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
realRoot = null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return realRoot;
|
|
118
|
+
};
|
|
119
|
+
const readText = (rel) => {
|
|
120
|
+
const full = inside(root, rel);
|
|
121
|
+
if (full === null)
|
|
122
|
+
return null;
|
|
123
|
+
try {
|
|
124
|
+
// The lexical check above cannot see a symlink: a tracked link to a
|
|
125
|
+
// file outside the checkout is not the checkout's content.
|
|
126
|
+
const top = resolvedRoot();
|
|
127
|
+
if (top === null || !inRoot(relative(top, realpathSync(full))))
|
|
128
|
+
return null;
|
|
129
|
+
const st = statSync(full);
|
|
130
|
+
if (!st.isFile() || st.size > MAX_READ_BYTES)
|
|
131
|
+
return null;
|
|
132
|
+
const buf = readFileSync(full);
|
|
133
|
+
if (isBinaryContent(buf, rel))
|
|
134
|
+
return null; // binary — one stray NUL is not
|
|
135
|
+
return buf.toString("utf8");
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
return {
|
|
142
|
+
location: root,
|
|
143
|
+
listFiles: () => {
|
|
144
|
+
const listed = git(["ls-files", "-z"]);
|
|
145
|
+
if (listed !== null)
|
|
146
|
+
return listed.split("\0").filter((p) => p !== "");
|
|
147
|
+
return walk();
|
|
148
|
+
},
|
|
149
|
+
read: readText,
|
|
150
|
+
lines: (rel) => {
|
|
151
|
+
const text = readText(rel);
|
|
152
|
+
if (text === null)
|
|
153
|
+
return null;
|
|
154
|
+
return textLineCount(text);
|
|
155
|
+
},
|
|
156
|
+
head: () => git(["rev-parse", "HEAD"])?.trim() || null,
|
|
157
|
+
changeCounts: () => {
|
|
158
|
+
// Six months, bounded twice over: a busy repo's whole history is not
|
|
159
|
+
// what "most-changed" means, and the listing must stay cheap.
|
|
160
|
+
const log = git([
|
|
161
|
+
"log",
|
|
162
|
+
"--since=6.months",
|
|
163
|
+
"--no-merges",
|
|
164
|
+
"-n",
|
|
165
|
+
String(CHANGE_LOG_COMMITS),
|
|
166
|
+
"--name-only",
|
|
167
|
+
"-z",
|
|
168
|
+
"--format=",
|
|
169
|
+
]);
|
|
170
|
+
if (log === null)
|
|
171
|
+
return null;
|
|
172
|
+
const counts = {};
|
|
173
|
+
for (const p of log.split("\0")) {
|
|
174
|
+
if (p !== "")
|
|
175
|
+
counts[p] = (counts[p] ?? 0) + 1;
|
|
176
|
+
}
|
|
177
|
+
return counts;
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/** The most commits the "most-changed" count walks. */
|
|
182
|
+
export const CHANGE_LOG_COMMITS = 2000;
|
|
183
|
+
/** The state home as a rooted filesystem: relative paths only, never out of
|
|
184
|
+
* the root, every write tmp+rename atomic. */
|
|
185
|
+
export function stateHomeFs(root) {
|
|
186
|
+
return homeFs(root, "state home");
|
|
187
|
+
}
|
|
188
|
+
/** The config home, the same way (the portrait narrative). In the
|
|
189
|
+
* companion only parts of it are mounted, so its callers write only under a
|
|
190
|
+
* mounted directory. */
|
|
191
|
+
export function configHomeFs(root) {
|
|
192
|
+
return homeFs(root, "config home");
|
|
193
|
+
}
|
|
194
|
+
function homeFs(root, what) {
|
|
195
|
+
const resolve = (rel) => {
|
|
196
|
+
const full = inside(root, rel);
|
|
197
|
+
if (full === null)
|
|
198
|
+
throw new Error(`path ${JSON.stringify(rel)} leaves the ${what}`);
|
|
199
|
+
return full;
|
|
200
|
+
};
|
|
201
|
+
return {
|
|
202
|
+
location: root,
|
|
203
|
+
read: (rel) => {
|
|
204
|
+
const full = resolve(rel);
|
|
205
|
+
try {
|
|
206
|
+
return readFileSync(full, "utf8");
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
if (err.code === "ENOENT")
|
|
210
|
+
return null;
|
|
211
|
+
throw err;
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
write: (rel, text) => {
|
|
215
|
+
const full = resolve(rel);
|
|
216
|
+
mkdirSync(dirname(full), { recursive: true });
|
|
217
|
+
const tmp = join(dirname(full), `.${full.split("/").at(-1)}.${process.pid}.${randomBytes(6).toString("hex")}.tmp`);
|
|
218
|
+
try {
|
|
219
|
+
writeFileSync(tmp, text);
|
|
220
|
+
renameSync(tmp, full);
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
rmSync(tmp, { force: true });
|
|
224
|
+
throw err;
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=scanfs.js.map
|