@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
|
@@ -1,19 +1,50 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import type { ReviewTarget } from "../reviewtarget.js";
|
|
2
|
+
/** The lenses the security preset keeps; every other lens is skipped. */
|
|
3
|
+
export declare const SECURITY_LENSES: readonly string[];
|
|
4
|
+
/** The presets /qcr-review takes, each as the core's review options. */
|
|
5
|
+
export declare const REVIEW_PRESETS: {
|
|
6
|
+
/** The default plan at low reasoning: about half the cost and time. */
|
|
7
|
+
readonly quick: {
|
|
8
|
+
readonly levers: "review.preset=low";
|
|
9
|
+
readonly full: false;
|
|
10
|
+
};
|
|
11
|
+
/** The full lever plan at the highest reasoning, over the whole target
|
|
12
|
+
* again (what an earlier review left is ignored). */
|
|
13
|
+
readonly full: {
|
|
14
|
+
readonly levers: "review.preset=max";
|
|
15
|
+
readonly full: true;
|
|
16
|
+
};
|
|
17
|
+
/** Only the risk lenses the change triggers (security, data safety,
|
|
18
|
+
* bounds, contracts), with the baseline and the validator. */
|
|
19
|
+
readonly security: {
|
|
20
|
+
readonly levers: `review.skip_lenses=${string}`;
|
|
21
|
+
readonly full: false;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export type ReviewPresetName = keyof typeof REVIEW_PRESETS;
|
|
25
|
+
export declare const REVIEW_PRESET_NAMES: ReviewPresetName[];
|
|
26
|
+
export declare const isPresetName: (w: string | undefined) => w is ReviewPresetName;
|
|
3
27
|
export interface ReviewCommand {
|
|
28
|
+
preset: ReviewPresetName | null;
|
|
4
29
|
target: ReviewTarget;
|
|
5
30
|
preview: boolean;
|
|
6
31
|
json: boolean;
|
|
7
|
-
full: boolean;
|
|
8
|
-
to: Destination[];
|
|
9
32
|
profile?: string;
|
|
10
33
|
limitUsd?: number;
|
|
11
34
|
}
|
|
12
|
-
export declare const REVIEW_COMMAND_USAGE
|
|
35
|
+
export declare const REVIEW_COMMAND_USAGE: string;
|
|
13
36
|
/** The words of a command line; double quotes group, nothing else is special. */
|
|
14
37
|
export declare function splitArgs(line: string): string[];
|
|
15
|
-
/**
|
|
16
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Parse `/qcr-review`'s arguments; a usage error is `{ error }`, `--stop` is
|
|
40
|
+
* `{ stop: true }`. `defaultPreset` is the person's own (pi's settings): a
|
|
41
|
+
* preset typed as the first word wins over it.
|
|
42
|
+
*/
|
|
43
|
+
export declare function parseReviewCommand(line: string, defaultPreset?: ReviewPresetName | null): ReviewCommand | {
|
|
44
|
+
stop: true;
|
|
45
|
+
} | {
|
|
17
46
|
error: string;
|
|
18
47
|
};
|
|
48
|
+
/** What a review is of, in the words a person reads ("PR #12 (quick)"). */
|
|
49
|
+
export declare function reviewLabel(cmd: Pick<ReviewCommand, "target" | "preset">): string;
|
|
19
50
|
//# sourceMappingURL=args.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../src/plugin/args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../src/plugin/args.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,yEAAyE;AACzE,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAO5C,CAAC;AAMF,wEAAwE;AACxE,eAAO,MAAM,cAAc;IACzB,uEAAuE;;;;;IAEvE;yDACqD;;;;;IAErD;kEAC8D;;;;;CAEtD,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,cAAc,CAAC;AAE3D,eAAO,MAAM,mBAAmB,EAAkC,gBAAgB,EAAE,CAAC;AAErF,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,GAAG,SAAS,KAAG,CAAC,IAAI,gBACiB,CAAC;AAE5E,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,oBAAoB,QAE4E,CAAC;AAE9G,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKhD;AAQD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,aAAa,GAAE,gBAAgB,GAAG,IAAW,GAC5C,aAAa,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CA6GpD;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,QAAQ,CAAC,GAAG,MAAM,CAajF"}
|
package/dist/src/plugin/args.js
CHANGED
|
@@ -1,18 +1,59 @@
|
|
|
1
|
-
//
|
|
1
|
+
// /qcr-review's arguments, as a person types them after the command:
|
|
2
2
|
//
|
|
3
|
-
// /review
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
// --
|
|
13
|
-
// --
|
|
14
|
-
|
|
15
|
-
|
|
3
|
+
// /qcr-review [preset] [target] [flags]
|
|
4
|
+
//
|
|
5
|
+
// preset quick | full | security: the first word, when it names one
|
|
6
|
+
// (else the `quickreview.preset` pi setting, else none)
|
|
7
|
+
// target nothing this branch against its base, with its
|
|
8
|
+
// uncommitted changes, as one review
|
|
9
|
+
// 123 | #123 | URL a pull request
|
|
10
|
+
// NAME the branch NAME against its base (its commits)
|
|
11
|
+
// --uncommitted the uncommitted changes alone, against HEAD
|
|
12
|
+
// --base REF the base a branch is reviewed against
|
|
13
|
+
// --preview the plan and the price; nothing runs
|
|
14
|
+
// --json the result as JSON (pi's print mode)
|
|
15
|
+
// --profile NAME review under that profile
|
|
16
|
+
// --limit USD this run's limit (above it the run asks)
|
|
17
|
+
// --repo O/N the PR's repo, when it is not the cwd's
|
|
18
|
+
// --stop stop the review running in this session
|
|
19
|
+
//
|
|
20
|
+
// A preset is the review options the core already takes, named: a lens plan
|
|
21
|
+
// (`[review] preset`, `skip_lenses`) and a scope (`full`). It is never a code
|
|
22
|
+
// path of its own.
|
|
23
|
+
//
|
|
24
|
+
// Retired spellings stay accepted (tests/legacy-acceptance.test.ts), folded
|
|
25
|
+
// to the current ones and never named in the usage: `--full` is the `full`
|
|
26
|
+
// preset, `--branch` the bare command's branch, and `--to LIST` the old
|
|
27
|
+
// destination list, of which only `json` still means anything (a result is
|
|
28
|
+
// always shown and kept, and a post is the posting rule's).
|
|
29
|
+
import { ALL_PASSES } from "../passes.js";
|
|
30
|
+
/** The lenses the security preset keeps; every other lens is skipped. */
|
|
31
|
+
export const SECURITY_LENSES = [
|
|
32
|
+
"pass-baseline",
|
|
33
|
+
"pass-security",
|
|
34
|
+
"pass-data-safety",
|
|
35
|
+
"pass-bounds",
|
|
36
|
+
"pass-contracts",
|
|
37
|
+
"pass-validate",
|
|
38
|
+
];
|
|
39
|
+
function securitySkips() {
|
|
40
|
+
return ALL_PASSES.filter((p) => !SECURITY_LENSES.includes(p));
|
|
41
|
+
}
|
|
42
|
+
/** The presets /qcr-review takes, each as the core's review options. */
|
|
43
|
+
export const REVIEW_PRESETS = {
|
|
44
|
+
/** The default plan at low reasoning: about half the cost and time. */
|
|
45
|
+
quick: { levers: "review.preset=low", full: false },
|
|
46
|
+
/** The full lever plan at the highest reasoning, over the whole target
|
|
47
|
+
* again (what an earlier review left is ignored). */
|
|
48
|
+
full: { levers: "review.preset=max", full: true },
|
|
49
|
+
/** Only the risk lenses the change triggers (security, data safety,
|
|
50
|
+
* bounds, contracts), with the baseline and the validator. */
|
|
51
|
+
security: { levers: `review.skip_lenses=${securitySkips().join("|")}`, full: false },
|
|
52
|
+
};
|
|
53
|
+
export const REVIEW_PRESET_NAMES = Object.keys(REVIEW_PRESETS);
|
|
54
|
+
export const isPresetName = (w) => w !== undefined && REVIEW_PRESET_NAMES.includes(w);
|
|
55
|
+
export const REVIEW_COMMAND_USAGE = `usage: /qcr-review [${REVIEW_PRESET_NAMES.join("|")}] [PR number or URL | BRANCH | --uncommitted] ` +
|
|
56
|
+
"[--base REF] [--preview] [--json] [--profile NAME] [--limit USD] [--repo OWNER/NAME] | /qcr-review --stop";
|
|
16
57
|
/** The words of a command line; double quotes group, nothing else is special. */
|
|
17
58
|
export function splitArgs(line) {
|
|
18
59
|
const out = [];
|
|
@@ -21,15 +62,30 @@ export function splitArgs(line) {
|
|
|
21
62
|
out.push(m[1] ?? m[2]);
|
|
22
63
|
return out;
|
|
23
64
|
}
|
|
24
|
-
/**
|
|
25
|
-
|
|
65
|
+
/** The destinations the retired `--to` took. */
|
|
66
|
+
const LEGACY_DESTINATIONS = ["terminal", "file", "json", "pr"];
|
|
67
|
+
/** A word that names a pull request: a number, `#N`, or a pull URL. */
|
|
68
|
+
const isPrWord = (w) => /^#?\d+$/.test(w) || /^https?:\/\/\S+\/pull\/\d+/.test(w);
|
|
69
|
+
/**
|
|
70
|
+
* Parse `/qcr-review`'s arguments; a usage error is `{ error }`, `--stop` is
|
|
71
|
+
* `{ stop: true }`. `defaultPreset` is the person's own (pi's settings): a
|
|
72
|
+
* preset typed as the first word wins over it.
|
|
73
|
+
*/
|
|
74
|
+
export function parseReviewCommand(line, defaultPreset = null) {
|
|
26
75
|
const a = splitArgs(line);
|
|
27
|
-
|
|
76
|
+
if (a.length === 1 && a[0] === "--stop")
|
|
77
|
+
return { stop: true };
|
|
78
|
+
let preset = defaultPreset;
|
|
79
|
+
const typed = isPresetName(a[0]);
|
|
80
|
+
if (typed)
|
|
81
|
+
preset = a.shift();
|
|
82
|
+
let word;
|
|
28
83
|
let repo;
|
|
29
84
|
let base;
|
|
30
|
-
let branch = false;
|
|
31
85
|
let uncommitted = false;
|
|
32
|
-
|
|
86
|
+
let full = false;
|
|
87
|
+
let branch = false;
|
|
88
|
+
const cmd = { preview: false, json: false };
|
|
33
89
|
const value = (i, flag) => {
|
|
34
90
|
const v = a[i + 1];
|
|
35
91
|
if (v === undefined || v.startsWith("--"))
|
|
@@ -46,12 +102,6 @@ export function parseReviewCommand(line) {
|
|
|
46
102
|
case "--json":
|
|
47
103
|
cmd.json = true;
|
|
48
104
|
break;
|
|
49
|
-
case "--full":
|
|
50
|
-
cmd.full = true;
|
|
51
|
-
break;
|
|
52
|
-
case "--branch":
|
|
53
|
-
branch = true;
|
|
54
|
-
break;
|
|
55
105
|
case "--uncommitted":
|
|
56
106
|
uncommitted = true;
|
|
57
107
|
break;
|
|
@@ -64,9 +114,6 @@ export function parseReviewCommand(line) {
|
|
|
64
114
|
case "--profile":
|
|
65
115
|
cmd.profile = value(i++, w);
|
|
66
116
|
break;
|
|
67
|
-
case "--to":
|
|
68
|
-
cmd.to = [...cmd.to, ...parseDestinations(value(i++, w))];
|
|
69
|
-
break;
|
|
70
117
|
case "--limit": {
|
|
71
118
|
const n = Number(value(i++, w));
|
|
72
119
|
if (!Number.isFinite(n) || n <= 0)
|
|
@@ -74,12 +121,32 @@ export function parseReviewCommand(line) {
|
|
|
74
121
|
cmd.limitUsd = n;
|
|
75
122
|
break;
|
|
76
123
|
}
|
|
124
|
+
case "--full":
|
|
125
|
+
full = true;
|
|
126
|
+
break;
|
|
127
|
+
case "--branch":
|
|
128
|
+
branch = true;
|
|
129
|
+
break;
|
|
130
|
+
case "--to":
|
|
131
|
+
for (const d of value(i++, w)
|
|
132
|
+
.split(",")
|
|
133
|
+
.map((x) => x.trim())) {
|
|
134
|
+
if (!LEGACY_DESTINATIONS.includes(d))
|
|
135
|
+
throw new Error(`unknown destination ${d || "(empty)"}`);
|
|
136
|
+
if (d === "json")
|
|
137
|
+
cmd.json = true;
|
|
138
|
+
}
|
|
139
|
+
break;
|
|
140
|
+
case "--stop":
|
|
141
|
+
throw new Error("--stop goes alone");
|
|
77
142
|
default:
|
|
78
143
|
if (w.startsWith("--"))
|
|
79
144
|
throw new Error(`unknown flag ${w}`);
|
|
80
|
-
if (
|
|
81
|
-
throw new Error(`
|
|
82
|
-
|
|
145
|
+
if (isPresetName(w) && word === undefined && i > 0)
|
|
146
|
+
throw new Error(`the preset goes first: /qcr-review ${w} …`);
|
|
147
|
+
if (word !== undefined)
|
|
148
|
+
throw new Error(`one target at a time (got ${word} and ${w})`);
|
|
149
|
+
word = w;
|
|
83
150
|
}
|
|
84
151
|
}
|
|
85
152
|
}
|
|
@@ -88,20 +155,50 @@ export function parseReviewCommand(line) {
|
|
|
88
155
|
error: `${err instanceof Error ? err.message : String(err)}\n${REVIEW_COMMAND_USAGE}`,
|
|
89
156
|
};
|
|
90
157
|
}
|
|
91
|
-
|
|
92
|
-
|
|
158
|
+
if (full) {
|
|
159
|
+
if (typed && preset !== "full")
|
|
160
|
+
return {
|
|
161
|
+
error: `--full is the full preset, and ${preset} was asked for: pick one\n${REVIEW_COMMAND_USAGE}`,
|
|
162
|
+
};
|
|
163
|
+
preset = "full";
|
|
164
|
+
}
|
|
165
|
+
if (branch && (word !== undefined || uncommitted))
|
|
93
166
|
return {
|
|
94
|
-
error:
|
|
167
|
+
error: `--branch is this branch: a PR, a branch name and --uncommitted are each a whole target\n${REVIEW_COMMAND_USAGE}`,
|
|
168
|
+
};
|
|
169
|
+
const pr = word !== undefined && isPrWord(word) ? word : undefined;
|
|
170
|
+
const head = word !== undefined && pr === undefined ? word : undefined;
|
|
171
|
+
if (word !== undefined && uncommitted)
|
|
172
|
+
return {
|
|
173
|
+
error: `${word} and --uncommitted are each a whole target: pick one\n${REVIEW_COMMAND_USAGE}`,
|
|
95
174
|
};
|
|
96
175
|
if (base !== undefined && (pr !== undefined || uncommitted))
|
|
97
|
-
return { error: `--base goes with
|
|
176
|
+
return { error: `--base goes with a branch review\n${REVIEW_COMMAND_USAGE}` };
|
|
98
177
|
if (repo !== undefined && pr === undefined)
|
|
99
178
|
return { error: `--repo names the PR's repo: give a PR too\n${REVIEW_COMMAND_USAGE}` };
|
|
100
179
|
const target = pr !== undefined
|
|
101
180
|
? { kind: "pr", pr, ...(repo !== undefined ? { repo } : {}) }
|
|
102
181
|
: uncommitted
|
|
103
182
|
? { kind: "uncommitted" }
|
|
104
|
-
: {
|
|
105
|
-
|
|
183
|
+
: {
|
|
184
|
+
kind: "branch",
|
|
185
|
+
...(base !== undefined ? { base } : {}),
|
|
186
|
+
...(head !== undefined ? { head } : { uncommitted: true }),
|
|
187
|
+
};
|
|
188
|
+
return { ...cmd, preset, target };
|
|
189
|
+
}
|
|
190
|
+
/** What a review is of, in the words a person reads ("PR #12 (quick)"). */
|
|
191
|
+
export function reviewLabel(cmd) {
|
|
192
|
+
const t = cmd.target;
|
|
193
|
+
const what = t.kind === "pr"
|
|
194
|
+
? `PR ${/^\d+$/.test(String(t.pr)) ? `#${t.pr}` : String(t.pr)}`
|
|
195
|
+
: t.kind === "uncommitted"
|
|
196
|
+
? "the uncommitted changes"
|
|
197
|
+
: t.kind === "branch" && t.head !== undefined
|
|
198
|
+
? `the branch ${t.head}`
|
|
199
|
+
: t.kind === "branch"
|
|
200
|
+
? "this branch with its uncommitted changes"
|
|
201
|
+
: "the diff";
|
|
202
|
+
return cmd.preset !== null ? `${what} (${cmd.preset})` : what;
|
|
106
203
|
}
|
|
107
204
|
//# sourceMappingURL=args.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/plugin/args.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/plugin/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { CoreConfig } from "../reviewconfig.js";
|
|
2
1
|
import type { LoginSummary } from "../engine/auth.js";
|
|
3
2
|
/** What the plugin asks of the host pi's auth, by shape (the extension wires
|
|
4
3
|
* it to `ctx.modelRegistry` and the host's auth file). */
|
|
@@ -12,18 +11,26 @@ export interface HostAuth {
|
|
|
12
11
|
* `minValidityMs` more: it refreshes it if not. Rejects when it cannot. */
|
|
13
12
|
refresh(provider: string, minValidityMs: number): Promise<void>;
|
|
14
13
|
}
|
|
15
|
-
/** The providers the review's sessions run on: every model spec's
|
|
16
|
-
* `provider/` prefix, in first-seen order. */
|
|
17
|
-
export declare function reviewProviders(cfg: Pick<CoreConfig, "models">): string[];
|
|
18
14
|
export type BorrowResult = {
|
|
19
15
|
ok: true;
|
|
20
16
|
refreshed: string[];
|
|
17
|
+
/** The providers the run uses, each OpenAI one on the login that exists:
|
|
18
|
+
* the run's login copy carries exactly these. */
|
|
19
|
+
providers: string[];
|
|
21
20
|
} | {
|
|
22
21
|
ok: false;
|
|
23
22
|
error: string;
|
|
24
23
|
};
|
|
25
24
|
/** The hint for a provider pi has no credential for. */
|
|
26
25
|
export declare function noLoginHint(provider: string, keyed: readonly string[]): string;
|
|
26
|
+
/** The providers a run actually uses for the review's `providers`: each one
|
|
27
|
+
* itself, or its OpenAI twin when only the twin has a credential
|
|
28
|
+
* (modelroute.ts). One reading for the setup checklist and `borrowLogin`, so
|
|
29
|
+
* setup never calls a login missing that a review can run on. */
|
|
30
|
+
export declare function routedProviders(providers: readonly string[], host: Pick<HostAuth, "logins" | "configured">): string[];
|
|
31
|
+
/** Can a run use `provider` at all: an OAuth login (pi refreshes a short one
|
|
32
|
+
* before the run), or any other credential pi has. */
|
|
33
|
+
export declare function canUseProvider(provider: string, host: Pick<HostAuth, "logins" | "configured">): boolean;
|
|
27
34
|
/**
|
|
28
35
|
* Make sure every provider the review needs is usable for `needMs` from now,
|
|
29
36
|
* refreshing a short OAuth login through the host. `marginMs` is added to the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/plugin/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/plugin/login.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;0DAC0D;AAC1D,MAAM,WAAW,QAAQ;IACvB,8EAA8E;IAC9E,MAAM,IAAI,YAAY,CAAC;IACvB;2BACuB;IACvB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACtC;+EAC2E;IAC3E,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED,MAAM,MAAM,YAAY,GACpB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;qDACiD;IACjD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,wDAAwD;AACxD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAS9E;AAED;;;iEAGiE;AACjE,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,GAC5C,MAAM,EAAE,CAUV;AAED;sDACsD;AACtD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,GAC5C,OAAO,CAET;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE;IACnC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,YAAY,CAAC,CAmCxB"}
|
package/dist/src/plugin/login.js
CHANGED
|
@@ -1,31 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
* `provider/` prefix, in first-seen order. */
|
|
3
|
-
export function reviewProviders(cfg) {
|
|
4
|
-
const m = cfg.models;
|
|
5
|
-
const specs = [
|
|
6
|
-
m.conversation,
|
|
7
|
-
m.default,
|
|
8
|
-
...Object.values(m.tiers),
|
|
9
|
-
...Object.values(m.pass_models),
|
|
10
|
-
];
|
|
11
|
-
const out = [];
|
|
12
|
-
for (const spec of specs) {
|
|
13
|
-
const slash = spec.indexOf("/");
|
|
14
|
-
if (slash <= 0)
|
|
15
|
-
continue;
|
|
16
|
-
const p = spec.slice(0, slash);
|
|
17
|
-
if (!out.includes(p))
|
|
18
|
-
out.push(p);
|
|
19
|
-
}
|
|
20
|
-
return out;
|
|
21
|
-
}
|
|
1
|
+
import { routeProvider } from "../modelroute.js";
|
|
22
2
|
/** The hint for a provider pi has no credential for. */
|
|
23
3
|
export function noLoginHint(provider, keyed) {
|
|
24
4
|
const keys = keyed.length > 0
|
|
25
5
|
? ` pi has a key for ${keyed.join(", ")}, and the review does not switch models to use it: to review on that provider, set the review's models to it in your qcr config.`
|
|
26
6
|
: "";
|
|
27
7
|
return (`the review runs on ${provider}, and this pi has no login for it. ` +
|
|
28
|
-
`Run /login ${provider} in pi, then /review again.${keys}`);
|
|
8
|
+
`Run /login ${provider} in pi, then /qcr-review again.${keys}`);
|
|
9
|
+
}
|
|
10
|
+
/** The providers a run actually uses for the review's `providers`: each one
|
|
11
|
+
* itself, or its OpenAI twin when only the twin has a credential
|
|
12
|
+
* (modelroute.ts). One reading for the setup checklist and `borrowLogin`, so
|
|
13
|
+
* setup never calls a login missing that a review can run on. */
|
|
14
|
+
export function routedProviders(providers, host) {
|
|
15
|
+
const logins = host.logins();
|
|
16
|
+
const out = [];
|
|
17
|
+
for (const named of providers) {
|
|
18
|
+
const p = routeProvider(named, "", {
|
|
19
|
+
hasCredential: (q) => logins[q] !== undefined || host.configured(q),
|
|
20
|
+
});
|
|
21
|
+
if (!out.includes(p))
|
|
22
|
+
out.push(p);
|
|
23
|
+
}
|
|
24
|
+
return out;
|
|
25
|
+
}
|
|
26
|
+
/** Can a run use `provider` at all: an OAuth login (pi refreshes a short one
|
|
27
|
+
* before the run), or any other credential pi has. */
|
|
28
|
+
export function canUseProvider(provider, host) {
|
|
29
|
+
return host.logins()[provider]?.type === "oauth" || host.configured(provider);
|
|
29
30
|
}
|
|
30
31
|
/**
|
|
31
32
|
* Make sure every provider the review needs is usable for `needMs` from now,
|
|
@@ -37,7 +38,8 @@ export async function borrowLogin(o) {
|
|
|
37
38
|
const want = o.needMs + o.marginMs;
|
|
38
39
|
const refreshed = [];
|
|
39
40
|
let logins = o.host.logins();
|
|
40
|
-
|
|
41
|
+
const providers = routedProviders(o.providers, o.host);
|
|
42
|
+
for (const p of providers) {
|
|
41
43
|
const login = logins[p];
|
|
42
44
|
if (login?.type === "oauth") {
|
|
43
45
|
if (login.expires !== null && login.expires >= now() + want)
|
|
@@ -48,7 +50,7 @@ export async function borrowLogin(o) {
|
|
|
48
50
|
catch (err) {
|
|
49
51
|
return {
|
|
50
52
|
ok: false,
|
|
51
|
-
error: `pi could not refresh your ${p} login (${err instanceof Error ? err.message : String(err)}). Run /login ${p} in pi, then /review again.`,
|
|
53
|
+
error: `pi could not refresh your ${p} login (${err instanceof Error ? err.message : String(err)}). Run /login ${p} in pi, then /qcr-review again.`,
|
|
52
54
|
};
|
|
53
55
|
}
|
|
54
56
|
logins = o.host.logins();
|
|
@@ -56,7 +58,7 @@ export async function borrowLogin(o) {
|
|
|
56
58
|
if (after?.type !== "oauth" || after.expires === null || after.expires < now() + want)
|
|
57
59
|
return {
|
|
58
60
|
ok: false,
|
|
59
|
-
error: `your ${p} login does not last this review's ${Math.round(o.needMs / 60_000)} minutes even after pi refreshed it. Run /login ${p} in pi, then /review again.`,
|
|
61
|
+
error: `your ${p} login does not last this review's ${Math.round(o.needMs / 60_000)} minutes even after pi refreshed it. Run /login ${p} in pi, then /qcr-review again.`,
|
|
60
62
|
};
|
|
61
63
|
refreshed.push(p);
|
|
62
64
|
continue;
|
|
@@ -68,6 +70,6 @@ export async function borrowLogin(o) {
|
|
|
68
70
|
.map(([name]) => name);
|
|
69
71
|
return { ok: false, error: noLoginHint(p, keyed) };
|
|
70
72
|
}
|
|
71
|
-
return { ok: true, refreshed };
|
|
73
|
+
return { ok: true, refreshed, providers };
|
|
72
74
|
}
|
|
73
75
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/plugin/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/plugin/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** The custom message type the review is shown as. */
|
|
2
|
+
export declare const REVIEW_MESSAGE = "qcr-review";
|
|
3
|
+
/** The answers the post question offers: No first, as pi's own confirm
|
|
4
|
+
* would start on Yes. */
|
|
5
|
+
export declare const KEEP_IT_HERE = "No, keep it here";
|
|
6
|
+
export declare const postAnswer: (dryRun: boolean) => string;
|
|
7
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/plugin/messages.ts"],"names":[],"mappings":"AAKA,sDAAsD;AACtD,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C;yBACyB;AACzB,eAAO,MAAM,YAAY,qBAAqB,CAAC;AAC/C,eAAO,MAAM,UAAU,GAAI,QAAQ,OAAO,KAAG,MAGA,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// What the plugin shows of a review in a pi session, in a module of its own:
|
|
2
|
+
// the custom message type and the post question's answers. A host that only
|
|
3
|
+
// shows a review (the app's home) imports this and never the review's
|
|
4
|
+
// runtime.
|
|
5
|
+
/** The custom message type the review is shown as. */
|
|
6
|
+
export const REVIEW_MESSAGE = "qcr-review";
|
|
7
|
+
/** The answers the post question offers: No first, as pi's own confirm
|
|
8
|
+
* would start on Yes. */
|
|
9
|
+
export const KEEP_IT_HERE = "No, keep it here";
|
|
10
|
+
export const postAnswer = (dryRun) => dryRun
|
|
11
|
+
? "Yes, post it (dry run: the review is recorded, not sent)"
|
|
12
|
+
: "Yes, post it as a comment-only review";
|
|
13
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/plugin/messages.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,sEAAsE;AACtE,WAAW;AAEX,sDAAsD;AACtD,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAE3C;yBACyB;AACzB,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAC/C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAe,EAAU,EAAE,CACpD,MAAM;IACJ,CAAC,CAAC,0DAA0D;IAC5D,CAAC,CAAC,uCAAuC,CAAC"}
|
|
@@ -3,14 +3,14 @@ import { type ReviewRuntimeOptions } from "../engine/reviewruntime.js";
|
|
|
3
3
|
import { preview as corePreview, review as coreReview, type ReviewRuntime } from "../reviewapi.js";
|
|
4
4
|
import type { CoreConfig } from "../reviewconfig.js";
|
|
5
5
|
import type { PluginHost, SessionUi } from "./session.js";
|
|
6
|
-
|
|
7
|
-
export
|
|
6
|
+
import { type QuickReviewSettings } from "./settings.js";
|
|
7
|
+
export { KEEP_IT_HERE, postAnswer, REVIEW_MESSAGE } from "./messages.js";
|
|
8
8
|
/** A review's wall clock, as `qcr review`'s. */
|
|
9
9
|
export declare const REVIEW_TIMEOUT_MS: number;
|
|
10
10
|
/** What a refused login says inside pi: pi's own /login is the fix. */
|
|
11
11
|
export declare const PLUGIN_AUTH_WORDS: AuthCopyWords;
|
|
12
|
-
/** How long a stopped review (
|
|
13
|
-
* before /review gives up waiting on it
|
|
12
|
+
/** How long a stopped review (`--stop`, the session ending) gets to wind
|
|
13
|
+
* down before /qcr-review gives up waiting on it. */
|
|
14
14
|
export declare const STOP_GRACE_MS = 30000;
|
|
15
15
|
/** The seams a test replaces. */
|
|
16
16
|
export interface ReviewCommandDeps {
|
|
@@ -22,6 +22,52 @@ export interface ReviewCommandDeps {
|
|
|
22
22
|
runtime: (cfg: CoreConfig, o: ReviewRuntimeOptions) => ReviewRuntime;
|
|
23
23
|
}
|
|
24
24
|
export declare const REVIEW_DEPS: ReviewCommandDeps;
|
|
25
|
-
/**
|
|
26
|
-
export
|
|
25
|
+
/** What the status line knows of the review in flight. */
|
|
26
|
+
export interface ReviewProgress {
|
|
27
|
+
/** What is reviewed ("PR #12 (quick)", args.ts `reviewLabel`). */
|
|
28
|
+
label: string;
|
|
29
|
+
stage: "pricing" | "preparing" | "running" | "asking" | "posting";
|
|
30
|
+
/** When the command started it (ms). */
|
|
31
|
+
startedAt: number;
|
|
32
|
+
/** From the round's start (`ReviewIo.started`). */
|
|
33
|
+
lenses?: number;
|
|
34
|
+
estimateUsd?: number;
|
|
35
|
+
capUsd?: number | null;
|
|
36
|
+
/** What each running lens is doing, from the round's live log
|
|
37
|
+
* (`liveLensLines`); empty until a lens has started. */
|
|
38
|
+
running?: readonly string[];
|
|
39
|
+
}
|
|
40
|
+
/** The status line for the review in flight: what it reviews, its stage, and
|
|
41
|
+
* what the round's start said (lenses, price, hard stop), with the time
|
|
42
|
+
* since it started. Every status line /qcr-review shows is built here. */
|
|
43
|
+
export declare function reviewStatusLine(p: ReviewProgress, now: number): string;
|
|
44
|
+
/** One line per running lens of the review in `runDir`, read from its live
|
|
45
|
+
* log: none when the log is missing or unreadable, which never costs the
|
|
46
|
+
* review its status line. */
|
|
47
|
+
export declare function liveLensLines(runDir: string, now: number): string[];
|
|
48
|
+
/** The one review a session runs at a time. */
|
|
49
|
+
export declare class ReviewSlot {
|
|
50
|
+
private current;
|
|
51
|
+
/** What is being reviewed now; null when nothing is. */
|
|
52
|
+
get running(): string | null;
|
|
53
|
+
/** Stop the review in flight; what it was reviewing, or null when none runs. */
|
|
54
|
+
stop(): string | null;
|
|
55
|
+
/** Resolves once no review runs. */
|
|
56
|
+
idle(): Promise<void>;
|
|
57
|
+
/** Hold `done` as the review in flight until it settles. */
|
|
58
|
+
hold(label: string, stop: AbortController, done: Promise<void>): void;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* /qcr-review. Starts the review and returns at once (pi's print mode and a
|
|
62
|
+
* preview wait for it); the review then runs in `slot`, one at a time. Never
|
|
63
|
+
* throws: every refusal reaches the person.
|
|
64
|
+
*/
|
|
65
|
+
export declare function startReviewCommand(line: string, host: PluginHost, ui: SessionUi, o: {
|
|
66
|
+
slot: ReviewSlot;
|
|
67
|
+
deps?: ReviewCommandDeps;
|
|
68
|
+
settings?: QuickReviewSettings;
|
|
69
|
+
}): Promise<void>;
|
|
70
|
+
/** One /qcr-review, waited for to its end (its result shown, its post asked):
|
|
71
|
+
* the command's work without the background. */
|
|
72
|
+
export declare function runReviewCommand(line: string, host: PluginHost, ui: SessionUi, deps?: ReviewCommandDeps, settings?: QuickReviewSettings): Promise<void>;
|
|
27
73
|
//# sourceMappingURL=review.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/plugin/review.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/plugin/review.ts"],"names":[],"mappings":"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"}
|