@quickchatai/pi-quickreview 1.2.0 → 1.3.2
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 +25 -7
- package/assets/prompts/onboarding.md +8 -7
- package/assets/schemas/review-result.v1.json +60 -0
- package/dist/extensions/quickreview.d.ts +17 -5
- package/dist/extensions/quickreview.d.ts.map +1 -1
- package/dist/extensions/quickreview.js +79 -26
- 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/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/homes.js +1 -1
- package/dist/src/homes.js.map +1 -1
- 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 +4 -0
- package/dist/src/modelroute.d.ts.map +1 -1
- package/dist/src/modelroute.js +21 -0
- package/dist/src/modelroute.js.map +1 -1
- 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/index.d.ts.map +1 -1
- package/dist/src/plugin/index.js +5 -1
- package/dist/src/plugin/index.js.map +1 -1
- package/dist/src/plugin/login.d.ts +8 -4
- package/dist/src/plugin/login.d.ts.map +1 -1
- package/dist/src/plugin/login.js +25 -32
- 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/peers.d.ts +17 -0
- package/dist/src/plugin/peers.d.ts.map +1 -0
- package/dist/src/plugin/peers.js +55 -0
- package/dist/src/plugin/peers.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 +261 -95
- 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.d.ts +3 -0
- package/dist/src/plugin/versiongate.d.ts.map +1 -1
- package/dist/src/plugin/versiongate.js +9 -4
- 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/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/round-stage-deadlines.d.ts +26 -1
- package/dist/src/round-stage-deadlines.d.ts.map +1 -1
- package/dist/src/round-stage-deadlines.js +45 -2
- package/dist/src/round-stage-deadlines.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
package/README.md
CHANGED
|
@@ -9,21 +9,67 @@ pi install npm:@quickchatai/pi-quickreview
|
|
|
9
9
|
|
|
10
10
|
## Commands
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
12
|
+
Each command is also a skill of the same name, so the model in your session
|
|
13
|
+
knows the command and can tell you the line to type.
|
|
14
|
+
|
|
15
|
+
- `/qcr-review [preset] [target]` reviews in the background: the command
|
|
16
|
+
returns at once, you keep chatting, the status line shows the review's
|
|
17
|
+
progress, and the result arrives in the session as a message (and is kept
|
|
18
|
+
as markdown and JSON under the qcr state home).
|
|
19
|
+
- The target: nothing reviews the current branch against its base together
|
|
20
|
+
with its uncommitted changes, as one review; `123`, `#123` or a pull
|
|
21
|
+
request URL reviews a PR; a branch name reviews that branch;
|
|
22
|
+
`--uncommitted` reviews the uncommitted changes alone.
|
|
23
|
+
- The preset, first when given: `quick` (lower reasoning, about half the
|
|
24
|
+
cost), `full` (the whole target again at the highest reasoning) or
|
|
25
|
+
`security` (only the security and data-safety lenses the change
|
|
26
|
+
triggers).
|
|
27
|
+
- `--preview` shows the plan and the price without running anything;
|
|
28
|
+
`--stop` stops the review that is running. One review runs per session
|
|
29
|
+
at a time, and ending the session stops it.
|
|
30
|
+
- After a PR review, your posting rule decides whether it goes to the PR
|
|
31
|
+
as a comment-only review (see Settings).
|
|
32
|
+
- `/qcr-scan [--delta] [--sha REF] [--preview]` scans the whole repo for
|
|
33
|
+
defects, priced first and started only on your yes. It runs in the
|
|
34
|
+
background in this pi, like a review: a status line while it runs, the new
|
|
35
|
+
findings as a message when it ends, `/qcr-scan stop` to stop it. Its cases
|
|
36
|
+
are SDK sessions of this pi behind the same read-only bash guard as the
|
|
37
|
+
review's lenses. `/qcr-scan findings`, `status`, `units` and the other
|
|
38
|
+
scan subcommands pass through as typed. The scan sandbox (a container) and
|
|
39
|
+
dismissing a finding are the `qcr` app's (`qcr scan`).
|
|
40
|
+
- `/qcr-setup` checks the pi version, the login, git and GitHub access for
|
|
41
|
+
PR targets. It then offers to set up this repo's profile (`.qcr/`), No
|
|
42
|
+
first: on your yes, your agent in the session surveys the repo, reads its
|
|
43
|
+
review history, interviews you and writes the profile for you to commit.
|
|
44
|
+
`/qcr-setup profile` starts that straight away. Its checks are steps on a
|
|
45
|
+
setup checklist (`src/setupchecklist.ts`) that the `qcr` app extends with
|
|
46
|
+
its own steps.
|
|
47
|
+
|
|
48
|
+
`/review`, `/scan` and `/selfimprove` are gone: pi's command namespace is
|
|
49
|
+
shared with every other extension, so the commands carry the `qcr-` prefix.
|
|
50
|
+
`/review` is `/qcr-review`, `/scan` is `/qcr-scan`, and `/selfimprove` is a
|
|
51
|
+
command of the `qcr` app's own pi (`qcr pi`).
|
|
52
|
+
|
|
53
|
+
## Settings
|
|
54
|
+
|
|
55
|
+
Your own defaults live in pi's settings (`~/.pi/agent/settings.json`, or the
|
|
56
|
+
project's `.pi/settings.json`), under `quickreview`:
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"quickreview": {
|
|
61
|
+
"posting": "ask",
|
|
62
|
+
"preset": "quick"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
- `posting` decides what happens after a PR review: `ask` (the default)
|
|
68
|
+
asks, with "No, keep it here" offered first; `never` keeps every review in
|
|
69
|
+
the session; `always` posts without asking.
|
|
70
|
+
- `preset` is the preset a `/qcr-review` without one runs under.
|
|
71
|
+
|
|
72
|
+
Rules for one repository live in its profile, not here.
|
|
27
73
|
|
|
28
74
|
## Which pi
|
|
29
75
|
|
|
@@ -42,32 +88,38 @@ exactly instead; `qcr pi` starts that pinned pi with this plugin preloaded.
|
|
|
42
88
|
- A pi login for the review's models (`/login` in pi). The review borrows
|
|
43
89
|
it: pi refreshes it when needed, and the review only ever reads a copy.
|
|
44
90
|
An API key for another provider is not used in its place: with no login
|
|
45
|
-
for the review's provider, `/review` stops and names `/login`.
|
|
91
|
+
for the review's provider, `/qcr-review` stops and names `/login`. The
|
|
92
|
+
scan borrows it the same way.
|
|
46
93
|
- For a PR: the App when a qcr install configures one, else `GITHUB_TOKEN`,
|
|
47
94
|
`GH_TOKEN` or `gh auth login`, in that order.
|
|
48
|
-
- For posting
|
|
49
|
-
|
|
95
|
+
- For posting: a qcr config with `dry_run = false`. The shipped defaults keep
|
|
96
|
+
`dry_run` on, and then a post is recorded under the qcr state home
|
|
97
|
+
(`review/dryrun/`) and nothing is sent; the post question says so.
|
|
50
98
|
|
|
51
99
|
## What it never does
|
|
52
100
|
|
|
53
|
-
- The review never
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
- It never
|
|
58
|
-
|
|
59
|
-
|
|
101
|
+
- The review and the scan never write to your checkout: they read the tree
|
|
102
|
+
as it is.
|
|
103
|
+
- The review and the scan never run your code, tests or app: they read code
|
|
104
|
+
(and the review, CI).
|
|
105
|
+
- It never runs the `qcr` CLI.
|
|
106
|
+
- It never posts unless you say yes to the post question (or your posting
|
|
107
|
+
rule is `always`), and then it posts one comment-only review through the
|
|
108
|
+
same mutation gate the bot uses. It never approves, requests changes or
|
|
109
|
+
dismisses a review.
|
|
60
110
|
- It never refreshes your login itself, and never hands a token to the
|
|
61
111
|
model's tools.
|
|
62
112
|
- It never gives your session a tool. The review's lens passes run in their
|
|
63
113
|
own sessions, with none of your pi extensions, skills or settings, and
|
|
64
|
-
your session only sees the result.
|
|
114
|
+
your session only sees the result. The skills it ships are instructions
|
|
115
|
+
for your session's model, naming the commands.
|
|
65
116
|
- It never sets or flips `dry_run`.
|
|
66
117
|
- It never starts `claude`.
|
|
67
118
|
|
|
68
119
|
## What ships in the package
|
|
69
120
|
|
|
70
|
-
The compiled review core and the plugin (`dist/`),
|
|
121
|
+
The compiled review core and the plugin (`dist/`), one skill per command
|
|
122
|
+
(`skills/`), and under `assets/` the
|
|
71
123
|
data the core reads: the agents, prompts and seeds, the schemas, the
|
|
72
124
|
profiles and the shipped config defaults. `assets/` is copied from the
|
|
73
125
|
repository at pack time and checked file by file against its source, so the
|
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
# supply are marked "← FILL (n)" — grep for FILL. Flip dry_run to false only
|
|
7
7
|
# as a deliberate cutover act, never as part of setup.
|
|
8
8
|
#
|
|
9
|
-
# YOU DO NOT HAVE TO FILL THIS BY HAND: `
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
9
|
+
# YOU DO NOT HAVE TO FILL THIS BY HAND: a bare `qcr` (the home) writes the
|
|
10
|
+
# repository you choose and its defaults, and the setup wizard's steps
|
|
11
|
+
# interview you for the rest, derive what they can, and patch this file in
|
|
12
|
+
# place — every comment survives, and a re-run edits only what changed.
|
|
13
|
+
# Neither writes dry_run in either direction; going live is its own explicit
|
|
13
14
|
# step. See docs/onboarding.md.
|
|
14
15
|
# ONE mutation class is exempt and executes for real even here: the App
|
|
15
16
|
# re-pointing its OWN webhook URL (see [ingress] below) — it can never touch
|
|
@@ -131,7 +132,11 @@ session_command_start_lease_s = 120
|
|
|
131
132
|
session_command_running_max_min = 45
|
|
132
133
|
# Command-correlated execution milestones: no first pass, incomplete pass plan,
|
|
133
134
|
# and all-passes-done/no-verdict. Absolute start-derived bounds; activity cannot
|
|
134
|
-
# renew them.
|
|
135
|
+
# renew them. The first pass is any discovery lens the daemon dispatched, a
|
|
136
|
+
# planned one or one of the round's optional rows. A plan above 20 discovery
|
|
137
|
+
# rows gets a minute per row more on both the passes bound and the running cap,
|
|
138
|
+
# up to 20 (packages/pi-plugin/src/round-stage-deadlines.ts); it does not stack
|
|
139
|
+
# with the follow-up sweep's allowance.
|
|
135
140
|
round_first_pass_max_min = 5
|
|
136
141
|
round_passes_max_min = 35
|
|
137
142
|
round_finalize_grace_min = 5
|
|
@@ -286,7 +291,7 @@ small_diff_lines = 150
|
|
|
286
291
|
# EMPTY ssh_host), the TUI never runs `ssh ""`: on a compose project (the
|
|
287
292
|
# checklist recorded the local topology, or the project .env pins
|
|
288
293
|
# QCR_VERSION) it reads the local stack and says so once; otherwise every
|
|
289
|
-
# surface says "ssh_host is empty —
|
|
294
|
+
# surface says "ssh_host is empty — set it to the VM's ssh alias".
|
|
290
295
|
target = "ssh"
|
|
291
296
|
ssh_host = "" # ← FILL (7): ssh alias of the VM running the container
|
|
292
297
|
# (leave "" when target = "local" — it is unused)
|
|
@@ -367,6 +372,19 @@ session_dir = "state/pi-sessions"
|
|
|
367
372
|
# lens_cache_stagger_ms = 2500
|
|
368
373
|
# lens_pass_deadline_min = 8
|
|
369
374
|
|
|
375
|
+
[home]
|
|
376
|
+
# The home: a bare `qcr` opens the app's own pinned pi, on your own pi login
|
|
377
|
+
# ($PI_CODING_AGENT_DIR, default ~/.pi/agent), with a panel of the
|
|
378
|
+
# repository's pull requests. Every key is optional.
|
|
379
|
+
# model — the chat's model, "provider/id". The panel counts only this
|
|
380
|
+
# model's provider as signed in: a login under another provider
|
|
381
|
+
# cannot run the chat.
|
|
382
|
+
# tools — "reviewer": the model may call the plugin's tools, the home's
|
|
383
|
+
# own home_* tools and pi's read tools (read, grep, find, ls), and
|
|
384
|
+
# no MCP server starts. "full": every tool pi has.
|
|
385
|
+
model = "openai-codex/gpt-6.1-sol"
|
|
386
|
+
tools = "reviewer"
|
|
387
|
+
|
|
370
388
|
[memory]
|
|
371
389
|
# Round seeding — how much memory rides each round prompt and how
|
|
372
390
|
# long the daemon waits for it. Memory NEVER blocks or delays a round: past
|
|
@@ -891,7 +909,7 @@ extra_vendored_segments = [] # extra third-party markers (case-insensitive)
|
|
|
891
909
|
# whatever — the system BEHAVES exactly as a build without the feature.
|
|
892
910
|
# (The placeholder that renders empty leaves a blank line in the prompt, like
|
|
893
911
|
# the sibling notes beside it.)
|
|
894
|
-
#
|
|
912
|
+
# The setup wizard's escalation step writes this section.
|
|
895
913
|
#
|
|
896
914
|
# The configuration cannot be half-done: `enabled = true` with no `targets`,
|
|
897
915
|
# or a rule pointing at a login that is not a target, or a rule that declares
|
|
@@ -94,20 +94,21 @@ the own-account route: it is skipped there.
|
|
|
94
94
|
`onboard_go_live` are marked "after setup": setup finishes without them. Do
|
|
95
95
|
not run them here unless the person asks. Say plainly that the installation
|
|
96
96
|
stays in dry-run (every intended GitHub write is recorded, nothing is
|
|
97
|
-
posted), and that going live is their decision later
|
|
98
|
-
|
|
97
|
+
posted), and that going live is their decision later, from the home
|
|
98
|
+
(Advanced → "Dry-run or live"), once a review has shown them what it says.
|
|
99
99
|
|
|
100
100
|
## Finishing
|
|
101
101
|
|
|
102
102
|
When every setup step reports done (the "after setup" ones need not be), say
|
|
103
103
|
that `finish_and_exit` will re-verify the whole checklist one last time and,
|
|
104
|
-
only if all green, close this session
|
|
105
|
-
|
|
104
|
+
only if all green, close this session: the home then lists the repository's
|
|
105
|
+
pull requests, and they select one and press `alt+r` to review it now. If it
|
|
106
|
+
returns red checks, that is the answer: explain them, fix
|
|
106
107
|
what can be fixed through the step tools, and try again. Never present
|
|
107
108
|
onboarding as finished while anything is red, and never tell the operator to
|
|
108
109
|
quit around a red check.
|
|
109
110
|
|
|
110
|
-
Before `finish_and_exit`, pass on what comes next: the first review is `
|
|
111
|
-
a pull request
|
|
112
|
-
the
|
|
111
|
+
Before `finish_and_exit`, pass on what comes next: the first review is `alt+r`
|
|
112
|
+
on a pull request in the home; then tune the reviewer to the repository with
|
|
113
|
+
the home's "Tune to this repo" (`t` on the panel). Until then the reviewer knows nothing about this codebase. It is a
|
|
113
114
|
recommendation, once — never start it from here.
|
|
@@ -137,6 +137,10 @@
|
|
|
137
137
|
"post": {
|
|
138
138
|
"$ref": "#/$defs/post"
|
|
139
139
|
},
|
|
140
|
+
"post_ready": {
|
|
141
|
+
"type": "string",
|
|
142
|
+
"description": "A finished PR review that was not posted: the file it is kept in, which a host that asks the person later posts through the gate exactly as `--to pr` would have."
|
|
143
|
+
},
|
|
140
144
|
"run_id": {
|
|
141
145
|
"type": "string",
|
|
142
146
|
"description": "A detached run's id (start, status, stop)."
|
|
@@ -149,6 +153,14 @@
|
|
|
149
153
|
"type": "string",
|
|
150
154
|
"description": "What a detached run reviews."
|
|
151
155
|
},
|
|
156
|
+
"started_at": {
|
|
157
|
+
"type": "number",
|
|
158
|
+
"description": "When a detached run was started, ms since the epoch."
|
|
159
|
+
},
|
|
160
|
+
"ended_at": {
|
|
161
|
+
"type": "number",
|
|
162
|
+
"description": "When a detached run ended (its exit or its stop), ms since the epoch; absent while it runs."
|
|
163
|
+
},
|
|
152
164
|
"elapsed_s": {
|
|
153
165
|
"type": "integer",
|
|
154
166
|
"minimum": 0
|
|
@@ -165,6 +177,50 @@
|
|
|
165
177
|
"items": {
|
|
166
178
|
"type": "string"
|
|
167
179
|
}
|
|
180
|
+
},
|
|
181
|
+
"live": {
|
|
182
|
+
"type": "object",
|
|
183
|
+
"description": "The running round's live log, projected: what the parent and each lens are doing now.",
|
|
184
|
+
"properties": {
|
|
185
|
+
"round": { "type": "integer", "minimum": 1 },
|
|
186
|
+
"parent_status": { "enum": ["active", "settled"] },
|
|
187
|
+
"last_activity": { "type": "string" },
|
|
188
|
+
"updated_at": { "type": "string" },
|
|
189
|
+
"active_tool": { "type": "string" },
|
|
190
|
+
"agents": {
|
|
191
|
+
"type": "array",
|
|
192
|
+
"items": {
|
|
193
|
+
"type": "object",
|
|
194
|
+
"required": ["agent", "status", "duration_ms", "tool_count"],
|
|
195
|
+
"properties": {
|
|
196
|
+
"agent": { "type": "string" },
|
|
197
|
+
"status": { "enum": ["running", "completed", "failed"] },
|
|
198
|
+
"duration_ms": {
|
|
199
|
+
"type": "number",
|
|
200
|
+
"minimum": 0,
|
|
201
|
+
"description": "The lens's time so far; a running lens's counts from its start between updates."
|
|
202
|
+
},
|
|
203
|
+
"tool_count": {
|
|
204
|
+
"type": "number",
|
|
205
|
+
"minimum": 0,
|
|
206
|
+
"description": "Tool calls the lens has started; a finished lens keeps its final count."
|
|
207
|
+
},
|
|
208
|
+
"current_tool": {
|
|
209
|
+
"type": "string",
|
|
210
|
+
"description": "The running (or last) tool, as `<tool>: <args>` or the bare name."
|
|
211
|
+
},
|
|
212
|
+
"current_target": {
|
|
213
|
+
"type": "string",
|
|
214
|
+
"description": "While the lens runs: the path its current tool works on, when it names one."
|
|
215
|
+
},
|
|
216
|
+
"line": {
|
|
217
|
+
"type": "string",
|
|
218
|
+
"description": "The lens as one line a person reads: `security · read src/x.ts · 7 tools · 0:41`."
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
168
224
|
}
|
|
169
225
|
}
|
|
170
226
|
},
|
|
@@ -234,6 +290,10 @@
|
|
|
234
290
|
"kind": {
|
|
235
291
|
"enum": ["pr", "branch", "uncommitted", "diff"],
|
|
236
292
|
"description": "What is reviewed: a pull request, the current branch against its base, the uncommitted working tree, or a unified diff handed in (`--diff`). Only a pr target can be posted."
|
|
293
|
+
},
|
|
294
|
+
"uncommitted": {
|
|
295
|
+
"const": true,
|
|
296
|
+
"description": "A branch target reviewed together with the working tree's uncommitted edits, as one review. Absent otherwise."
|
|
237
297
|
}
|
|
238
298
|
}
|
|
239
299
|
},
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { type ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
-
import type {
|
|
1
|
+
import { type ExtensionAPI, type ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { HostAuth } from "../src/plugin/login.js";
|
|
3
|
+
import { type ReviewCommandDeps } from "../src/plugin/review.js";
|
|
4
|
+
import type { Runner, SessionUi } from "../src/plugin/session.js";
|
|
3
5
|
/** What the host entry hands the plugin. */
|
|
4
6
|
export interface QuickReviewConfig {
|
|
5
7
|
/** The process environment, read once by the host entry. */
|
|
@@ -9,13 +11,23 @@ export interface QuickReviewConfig {
|
|
|
9
11
|
runner: Runner;
|
|
10
12
|
/** Standard output (pi's print mode shows a command's result there). */
|
|
11
13
|
print: (text: string) => void;
|
|
12
|
-
/**
|
|
14
|
+
/** Resolve pi's own packages from the running pi's package dir for what the
|
|
15
|
+
* plugin imports later with Node's import() (src/plugin/peers.ts). */
|
|
16
|
+
peers?: (piDir: string) => void;
|
|
17
|
+
/** Test seams: the running pi's version and package dir, its agent dir, the
|
|
18
|
+
* range, the review's core. */
|
|
13
19
|
piVersion?: string;
|
|
20
|
+
piDir?: string;
|
|
14
21
|
agentDir?: string;
|
|
15
22
|
range?: string;
|
|
23
|
+
review?: ReviewCommandDeps;
|
|
16
24
|
}
|
|
17
|
-
/** The commands,
|
|
18
|
-
export declare const QUICKREVIEW_COMMANDS: readonly ["review", "scan", "qcr-setup"
|
|
25
|
+
/** The commands, each also a skill of the same name (skills/<name>/SKILL.md). */
|
|
26
|
+
export declare const QUICKREVIEW_COMMANDS: readonly ["qcr-review", "qcr-scan", "qcr-setup"];
|
|
27
|
+
/** The host pi's auth, by the shape the plugin asks of it. */
|
|
28
|
+
export declare function hostAuth(ctx: ExtensionCommandContext, agentDir: string): HostAuth;
|
|
29
|
+
/** The session's ways to reach the person, from a command's context. */
|
|
30
|
+
export declare function sessionUi(pi: ExtensionAPI, ctx: ExtensionCommandContext, print: (t: string) => void): SessionUi;
|
|
19
31
|
/** The plugin's extension factory over `config`. */
|
|
20
32
|
export declare function createQuickReview(config: QuickReviewConfig): (pi: ExtensionAPI) => void;
|
|
21
33
|
//# sourceMappingURL=quickreview.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quickreview.d.ts","sourceRoot":"","sources":["../../extensions/quickreview.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"quickreview.d.ts","sourceRoot":"","sources":["../../extensions/quickreview.ts"],"names":[],"mappings":"AAsBA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAIzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAc,MAAM,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAK9E,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B;0EACsE;IACtE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC;mCAC+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,kDAAmD,CAAC;AAErF,8DAA8D;AAC9D,wBAAgB,QAAQ,CAAC,GAAG,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CA8BjF;AAKD,wEAAwE;AACxE,wBAAgB,SAAS,CACvB,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,uBAAuB,EAC5B,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GACzB,SAAS,CA6BX;AAED,oDAAoD;AACpD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,CAAC,EAAE,EAAE,YAAY,KAAK,IAAI,CAoGvF"}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
|
-
// The QuickReview pi plugin: /review, /scan
|
|
2
|
-
// user's own pi
|
|
1
|
+
// The QuickReview pi plugin: /qcr-review, /qcr-scan and /qcr-setup in a
|
|
2
|
+
// user's own pi, each also shipped as a skill of the same name (the
|
|
3
|
+
// package's skills/). A factory over its config (the host entry,
|
|
3
4
|
// src/plugin/index.ts, reads the process's env and home once and hands them
|
|
4
5
|
// in); the commands themselves are src/plugin/.
|
|
5
6
|
//
|
|
7
|
+
// The names are namespaced because pi's command namespace is shared with
|
|
8
|
+
// every other extension: the unprefixed /review, /scan and /selfimprove are
|
|
9
|
+
// gone (ADR 0001), and /selfimprove is the app's (its own pi, `qcr pi`).
|
|
10
|
+
//
|
|
11
|
+
// /qcr-review and /qcr-scan run in the background: the command returns at
|
|
12
|
+
// once, one review and one scan run per session, and the session's end stops
|
|
13
|
+
// them. /qcr-setup runs in the foreground: the plugin's setup checklist
|
|
14
|
+
// (src/setupchecklist.ts), the plugin's own steps only.
|
|
15
|
+
//
|
|
6
16
|
// At load the running pi's VERSION is checked against the range the package
|
|
7
17
|
// declares (src/plugin/versiongate.ts). Outside it the plugin registers no
|
|
8
18
|
// command and says so once, at the session's start.
|
|
@@ -10,18 +20,19 @@
|
|
|
10
20
|
// The person's own session gets commands and messages from the plugin, never
|
|
11
21
|
// a tool: the review's lens tools exist only inside the engine's own nested
|
|
12
22
|
// sessions (passes are leaves: the single-shepherd invariant in AGENTS.md).
|
|
13
|
-
import { VERSION, getAgentDir, } from "@earendil-works/pi-coding-agent";
|
|
23
|
+
import { VERSION, getAgentDir, getPackageDir, } from "@earendil-works/pi-coding-agent";
|
|
14
24
|
import { existsSync, readFileSync } from "node:fs";
|
|
15
25
|
import { join } from "node:path";
|
|
16
26
|
import { loginSummary } from "../src/engine/auth.js";
|
|
17
|
-
import { REVIEW_MESSAGE,
|
|
18
|
-
import { runScanCommand,
|
|
27
|
+
import { REVIEW_DEPS, REVIEW_MESSAGE, ReviewSlot, startReviewCommand, } from "../src/plugin/review.js";
|
|
28
|
+
import { runScanCommand, ScanSessions } from "../src/plugin/scan.js";
|
|
29
|
+
import { readQuickReviewSettings } from "../src/plugin/settings.js";
|
|
19
30
|
import { runSetupCommand } from "../src/plugin/setup.js";
|
|
20
31
|
import { declaredPiRange, piGate } from "../src/plugin/versiongate.js";
|
|
21
|
-
/** The commands,
|
|
22
|
-
export const QUICKREVIEW_COMMANDS = ["review", "scan", "qcr-setup"
|
|
32
|
+
/** The commands, each also a skill of the same name (skills/<name>/SKILL.md). */
|
|
33
|
+
export const QUICKREVIEW_COMMANDS = ["qcr-review", "qcr-scan", "qcr-setup"];
|
|
23
34
|
/** The host pi's auth, by the shape the plugin asks of it. */
|
|
24
|
-
function hostAuth(ctx, agentDir) {
|
|
35
|
+
export function hostAuth(ctx, agentDir) {
|
|
25
36
|
const registry = ctx.modelRegistry;
|
|
26
37
|
return {
|
|
27
38
|
logins() {
|
|
@@ -51,7 +62,8 @@ function hostAuth(ctx, agentDir) {
|
|
|
51
62
|
}
|
|
52
63
|
/** Is `data` the Esc key, as the terminal sends it? */
|
|
53
64
|
const isEscape = (data) => data === "\x1b" || data === "\x1b[27u";
|
|
54
|
-
|
|
65
|
+
/** The session's ways to reach the person, from a command's context. */
|
|
66
|
+
export function sessionUi(pi, ctx, print) {
|
|
55
67
|
return {
|
|
56
68
|
mode: ctx.mode,
|
|
57
69
|
interactive: ctx.hasUI,
|
|
@@ -67,7 +79,9 @@ function sessionUi(pi, ctx, print) {
|
|
|
67
79
|
return { consume: true };
|
|
68
80
|
})
|
|
69
81
|
: () => { },
|
|
70
|
-
|
|
82
|
+
// Shown, never a turn of its own: while the agent streams, the message
|
|
83
|
+
// waits for the turn to end instead of steering it.
|
|
84
|
+
show: (markdown, details) => pi.sendMessage({ customType: REVIEW_MESSAGE, content: markdown, display: true, details }, { triggerTurn: false }),
|
|
71
85
|
tellAgent: (text) => ctx.isIdle() ? pi.sendUserMessage(text) : pi.sendUserMessage(text, { deliverAs: "followUp" }),
|
|
72
86
|
print,
|
|
73
87
|
};
|
|
@@ -88,6 +102,7 @@ export function createQuickReview(config) {
|
|
|
88
102
|
});
|
|
89
103
|
return;
|
|
90
104
|
}
|
|
105
|
+
config.peers?.(config.piDir ?? getPackageDir());
|
|
91
106
|
// The current session's end: a run in flight stops with it.
|
|
92
107
|
let shutdown = new AbortController();
|
|
93
108
|
pi.on("session_start", () => {
|
|
@@ -95,6 +110,34 @@ export function createQuickReview(config) {
|
|
|
95
110
|
shutdown = new AbortController();
|
|
96
111
|
});
|
|
97
112
|
pi.on("session_shutdown", () => shutdown.abort());
|
|
113
|
+
const hostOf = (ctx) => {
|
|
114
|
+
const agentDir = config.agentDir ?? getAgentDir();
|
|
115
|
+
return {
|
|
116
|
+
cwd: ctx.cwd,
|
|
117
|
+
env: config.env,
|
|
118
|
+
home: config.home,
|
|
119
|
+
piVersion: version,
|
|
120
|
+
agentDir,
|
|
121
|
+
auth: hostAuth(ctx, agentDir),
|
|
122
|
+
runner: config.runner,
|
|
123
|
+
shutdown: shutdown.signal,
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
// The person's own defaults, as pi's settings hold them now.
|
|
127
|
+
const settings = (ui) => {
|
|
128
|
+
let all;
|
|
129
|
+
try {
|
|
130
|
+
all = pi.getSettings();
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
all = undefined;
|
|
134
|
+
}
|
|
135
|
+
const read = readQuickReviewSettings(all);
|
|
136
|
+
for (const w of read.warnings)
|
|
137
|
+
ui.notify(w, "warning");
|
|
138
|
+
return read.settings;
|
|
139
|
+
};
|
|
140
|
+
// /qcr-setup: in the foreground, one at a time.
|
|
98
141
|
let busy = false;
|
|
99
142
|
const command = (name, description, run) => pi.registerCommand(name, {
|
|
100
143
|
description,
|
|
@@ -105,28 +148,38 @@ export function createQuickReview(config) {
|
|
|
105
148
|
}
|
|
106
149
|
busy = true;
|
|
107
150
|
try {
|
|
108
|
-
|
|
109
|
-
const host = {
|
|
110
|
-
cwd: ctx.cwd,
|
|
111
|
-
env: config.env,
|
|
112
|
-
home: config.home,
|
|
113
|
-
piVersion: version,
|
|
114
|
-
agentDir,
|
|
115
|
-
auth: hostAuth(ctx, agentDir),
|
|
116
|
-
runner: config.runner,
|
|
117
|
-
shutdown: shutdown.signal,
|
|
118
|
-
};
|
|
119
|
-
await run(args.trim(), host, sessionUi(pi, ctx, config.print));
|
|
151
|
+
await run(args.trim(), hostOf(ctx), sessionUi(pi, ctx, config.print));
|
|
120
152
|
}
|
|
121
153
|
finally {
|
|
122
154
|
busy = false;
|
|
123
155
|
}
|
|
124
156
|
},
|
|
125
157
|
});
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
158
|
+
// /qcr-review: in the background, one review at a time in this session.
|
|
159
|
+
const reviews = new ReviewSlot();
|
|
160
|
+
pi.registerCommand("qcr-review", {
|
|
161
|
+
description: "QuickReview: review this branch with its uncommitted changes, a PR, a branch or --uncommitted, in the background ([quick|full|security] first; --preview prices it, --stop stops it)",
|
|
162
|
+
handler: async (args, ctx) => {
|
|
163
|
+
const ui = sessionUi(pi, ctx, config.print);
|
|
164
|
+
await startReviewCommand(args.trim(), hostOf(ctx), ui, {
|
|
165
|
+
slot: reviews,
|
|
166
|
+
deps: config.review ?? REVIEW_DEPS,
|
|
167
|
+
settings: settings(ui),
|
|
168
|
+
});
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
// /qcr-scan: the plugin's own scan engine, in the background, one scan at
|
|
172
|
+
// a time in this session; a subcommand is answered in the foreground.
|
|
173
|
+
const scans = new ScanSessions();
|
|
174
|
+
pi.registerCommand("qcr-scan", {
|
|
175
|
+
description: "QuickReview: scan the whole repo in the background (--delta, --sha REF, --preview; or a scan subcommand: status, stop, findings, units …)",
|
|
176
|
+
handler: async (args, ctx) => {
|
|
177
|
+
await runScanCommand(args.trim(), hostOf(ctx), sessionUi(pi, ctx, config.print), {
|
|
178
|
+
sessions: scans,
|
|
179
|
+
});
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
command("qcr-setup", "QuickReview: check what the plugin needs (pi, login, git, GitHub); `profile` sets up this repo's profile", (args, host, ui) => runSetupCommand(args, host, ui, { range }));
|
|
130
183
|
};
|
|
131
184
|
}
|
|
132
185
|
//# sourceMappingURL=quickreview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quickreview.js","sourceRoot":"","sources":["../../extensions/quickreview.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"quickreview.js","sourceRoot":"","sources":["../../extensions/quickreview.ts"],"names":[],"mappings":"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"}
|
|
@@ -125,6 +125,10 @@ export declare function engineCredentials(o: {
|
|
|
125
125
|
words?: AuthCopyWords;
|
|
126
126
|
/** The refusal margin on top of `needMs`; default pi's refresh margin. */
|
|
127
127
|
marginMs?: number;
|
|
128
|
+
/** Check only the logins these providers run on (each OpenAI one on the
|
|
129
|
+
* login that exists, modelroute.ts): a shared pi home's login for a
|
|
130
|
+
* provider the run never uses cannot refuse it. Omitted: every OAuth entry. */
|
|
131
|
+
providers?: readonly string[];
|
|
128
132
|
}): EngineAuth;
|
|
129
133
|
/**
|
|
130
134
|
* Write the refresh-disabled copy of `srcDir/auth.json` to `dstDir/auth.json`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/engine/auth.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAIV,eAAe,EAChB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/engine/auth.ts"],"names":[],"mappings":"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"}
|