@quickchatai/quickreview 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -19
- package/config.example.toml +41 -9
- package/dist/extensions/cli/login-route.js +5 -0
- package/dist/extensions/cli/login-route.js.map +1 -0
- package/dist/extensions/login-route.js +180 -0
- package/dist/extensions/login-route.js.map +1 -0
- package/dist/extensions/onboarding.js +29 -6
- package/dist/extensions/onboarding.js.map +1 -1
- package/dist/src/ciretry.js +2 -1
- package/dist/src/ciretry.js.map +1 -1
- package/dist/src/cli.js +43 -12
- package/dist/src/cli.js.map +1 -1
- package/dist/src/cliops.js +3 -2
- package/dist/src/cliops.js.map +1 -1
- package/dist/src/commands.js +25 -2
- package/dist/src/commands.js.map +1 -1
- package/dist/src/config.js +16 -2
- package/dist/src/config.js.map +1 -1
- package/dist/src/daemon.js +24 -8
- package/dist/src/daemon.js.map +1 -1
- package/dist/src/debugroundpi.js +5 -1
- package/dist/src/debugroundpi.js.map +1 -1
- package/dist/src/dispatch.js +5 -4
- package/dist/src/dispatch.js.map +1 -1
- package/dist/src/engine/debugpi.js +17 -5
- package/dist/src/engine/debugpi.js.map +1 -1
- package/dist/src/execboundary.js +10 -3
- package/dist/src/execboundary.js.map +1 -1
- package/dist/src/github.js +51 -16
- package/dist/src/github.js.map +1 -1
- package/dist/src/githubtoken.js +346 -0
- package/dist/src/githubtoken.js.map +1 -0
- package/dist/src/loginhint.js +8 -3
- package/dist/src/loginhint.js.map +1 -1
- package/dist/src/loginrefresh/pirefresh.js +3 -0
- package/dist/src/loginrefresh/pirefresh.js.map +1 -1
- package/dist/src/npmverbs.js +4 -2
- package/dist/src/npmverbs.js.map +1 -1
- package/dist/src/onboard/choices.js +29 -1
- package/dist/src/onboard/choices.js.map +1 -1
- package/dist/src/onboard/engine.js +8 -23
- package/dist/src/onboard/engine.js.map +1 -1
- package/dist/src/onboard/launch.js +12 -20
- package/dist/src/onboard/launch.js.map +1 -1
- package/dist/src/onboard/pipin.js +22 -0
- package/dist/src/onboard/pipin.js.map +1 -0
- package/dist/src/onboard/stepforward.js +41 -0
- package/dist/src/onboard/stepforward.js.map +1 -0
- package/dist/src/onboard/steps/appslug.js +4 -1
- package/dist/src/onboard/steps/appslug.js.map +1 -1
- package/dist/src/onboard/steps/compose.js +29 -0
- package/dist/src/onboard/steps/compose.js.map +1 -1
- package/dist/src/onboard/steps/configfill.js +102 -32
- package/dist/src/onboard/steps/configfill.js.map +1 -1
- package/dist/src/onboard/steps/githubaccount.js +595 -0
- package/dist/src/onboard/steps/githubaccount.js.map +1 -0
- package/dist/src/onboard/steps/githubapp.js +65 -7
- package/dist/src/onboard/steps/githubapp.js.map +1 -1
- package/dist/src/onboard/steps/golive.js +2 -0
- package/dist/src/onboard/steps/golive.js.map +1 -1
- package/dist/src/onboard/steps/index.js +11 -0
- package/dist/src/onboard/steps/index.js.map +1 -1
- package/dist/src/onboard/steps/ingress.js +80 -25
- package/dist/src/onboard/steps/ingress.js.map +1 -1
- package/dist/src/onboard/steps/llmauth.js +103 -30
- package/dist/src/onboard/steps/llmauth.js.map +1 -1
- package/dist/src/onboard/steps/memory.js +53 -1
- package/dist/src/onboard/steps/memory.js.map +1 -1
- package/dist/src/onboard/steps/proof.js +366 -56
- package/dist/src/onboard/steps/proof.js.map +1 -1
- package/dist/src/onboard/steps/topology.js +6 -6
- package/dist/src/onboard/steps/topology.js.map +1 -1
- package/dist/src/onboard/steps/transport.js +9 -1
- package/dist/src/onboard/steps/transport.js.map +1 -1
- package/dist/src/onboard/steps/tuiroute.js +102 -0
- package/dist/src/onboard/steps/tuiroute.js.map +1 -0
- package/dist/src/onboard/steps/verifyup.js +17 -1
- package/dist/src/onboard/steps/verifyup.js.map +1 -1
- package/dist/src/onboard/toolnames.js +30 -0
- package/dist/src/onboard/toolnames.js.map +1 -0
- package/dist/src/operatorwrite.js +23 -0
- package/dist/src/operatorwrite.js.map +1 -0
- package/dist/src/outcomes.js +4 -1
- package/dist/src/outcomes.js.map +1 -1
- package/dist/src/posting-journal.js +2 -1
- package/dist/src/posting-journal.js.map +1 -1
- package/dist/src/posting-outbox.js +6 -2
- package/dist/src/posting-outbox.js.map +1 -1
- package/dist/src/posting-receipt.js +14 -1
- package/dist/src/posting-receipt.js.map +1 -1
- package/dist/src/recheck.js +2 -1
- package/dist/src/recheck.js.map +1 -1
- package/dist/src/reconcile.js +22 -2
- package/dist/src/reconcile.js.map +1 -1
- package/dist/src/reviewhistory.js +32 -6
- package/dist/src/reviewhistory.js.map +1 -1
- package/dist/src/reviewnow.js +45 -0
- package/dist/src/reviewnow.js.map +1 -0
- package/dist/src/state.js.map +1 -1
- package/dist/src/statemachine.js +4 -1
- package/dist/src/statemachine.js.map +1 -1
- package/dist/src/takeoverpi.js +13 -0
- package/dist/src/takeoverpi.js.map +1 -1
- package/dist/src/tui/app.js +49 -0
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/board.js +88 -12
- package/dist/src/tui/board.js.map +1 -1
- package/dist/src/tui/cmdbar.js +4 -1
- package/dist/src/tui/cmdbar.js.map +1 -1
- package/dist/src/tui/companion.js +74 -10
- package/dist/src/tui/companion.js.map +1 -1
- package/dist/src/tui/connect.js +7 -1
- package/dist/src/tui/connect.js.map +1 -1
- package/dist/src/tui/filters.js +5 -2
- package/dist/src/tui/filters.js.map +1 -1
- package/dist/src/tui/ghread.js +61 -5
- package/dist/src/tui/ghread.js.map +1 -1
- package/dist/src/tui/index.js +106 -20
- package/dist/src/tui/index.js.map +1 -1
- package/dist/src/tui/memforward.js +39 -2
- package/dist/src/tui/memforward.js.map +1 -1
- package/dist/src/tui/model.js +25 -0
- package/dist/src/tui/model.js.map +1 -1
- package/dist/src/tui/prpause.js +7 -0
- package/dist/src/tui/prpause.js.map +1 -1
- package/dist/src/tui/remote.js +7 -1
- package/dist/src/tui/remote.js.map +1 -1
- package/dist/src/tui/route.js +143 -0
- package/dist/src/tui/route.js.map +1 -0
- package/dist/src/tui/setupstate.js +29 -0
- package/dist/src/tui/setupstate.js.map +1 -0
- package/dist/src/tui/sshtriage.js +102 -5
- package/dist/src/tui/sshtriage.js.map +1 -1
- package/dist/src/tui/theme.js +2 -1
- package/dist/src/tui/theme.js.map +1 -1
- package/dist/src/tui/unwedge.js +2 -12
- package/dist/src/tui/unwedge.js.map +1 -1
- package/dist/src/verdicts.js +17 -5
- package/dist/src/verdicts.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/src/webhook.js +12 -1
- package/dist/src/webhook.js.map +1 -1
- package/dist/src/wire.js +28 -6
- package/dist/src/wire.js.map +1 -1
- package/dist/src/workerworld.js +7 -1
- package/dist/src/workerworld.js.map +1 -1
- package/docker/companion/entrypoint.sh +20 -1
- package/docker/entrypoint.sh +17 -0
- package/extensions/cli/login-route.ts +10 -0
- package/extensions/login-route.ts +220 -0
- package/extensions/onboarding.ts +35 -6
- package/package.json +2 -2
- package/prompts/onboarding.md +57 -18
- package/scripts/mint-token.sh +25 -4
- package/src/ciretry.ts +2 -1
- package/src/cli.ts +49 -14
- package/src/cliops.ts +3 -2
- package/src/commands.ts +28 -2
- package/src/config.ts +24 -4
- package/src/daemon.ts +32 -7
- package/src/debugroundpi.ts +11 -1
- package/src/dispatch.ts +5 -4
- package/src/engine/debugpi.ts +17 -5
- package/src/execboundary.ts +16 -4
- package/src/github.ts +57 -15
- package/src/githubtoken.ts +435 -0
- package/src/loginhint.ts +8 -3
- package/src/loginrefresh/pirefresh.ts +3 -0
- package/src/npmverbs.ts +4 -2
- package/src/onboard/choices.ts +34 -1
- package/src/onboard/engine.ts +22 -3
- package/src/onboard/launch.ts +17 -29
- package/src/onboard/pipin.ts +31 -0
- package/src/onboard/stepforward.ts +61 -0
- package/src/onboard/steps/appslug.ts +4 -1
- package/src/onboard/steps/compose.ts +31 -0
- package/src/onboard/steps/configfill.ts +121 -33
- package/src/onboard/steps/githubaccount.ts +716 -0
- package/src/onboard/steps/githubapp.ts +92 -8
- package/src/onboard/steps/golive.ts +2 -0
- package/src/onboard/steps/index.ts +11 -0
- package/src/onboard/steps/ingress.ts +98 -31
- package/src/onboard/steps/llmauth.ts +114 -29
- package/src/onboard/steps/memory.ts +58 -1
- package/src/onboard/steps/proof.ts +473 -55
- package/src/onboard/steps/topology.ts +7 -6
- package/src/onboard/steps/transport.ts +15 -0
- package/src/onboard/steps/tuiroute.ts +119 -0
- package/src/onboard/steps/verifyup.ts +20 -1
- package/src/onboard/toolnames.ts +34 -0
- package/src/operatorwrite.ts +25 -0
- package/src/outcomes.ts +8 -1
- package/src/posting-journal.ts +6 -1
- package/src/posting-outbox.ts +10 -2
- package/src/posting-receipt.ts +17 -0
- package/src/recheck.ts +2 -1
- package/src/reconcile.ts +29 -3
- package/src/reviewhistory.ts +20 -6
- package/src/reviewnow.ts +76 -0
- package/src/state.ts +18 -0
- package/src/statemachine.ts +4 -1
- package/src/takeoverpi.ts +13 -0
- package/src/tui/app.ts +47 -0
- package/src/tui/board.ts +111 -14
- package/src/tui/cmdbar.ts +4 -1
- package/src/tui/companion.ts +78 -10
- package/src/tui/connect.ts +7 -1
- package/src/tui/filters.ts +7 -3
- package/src/tui/ghread.ts +74 -7
- package/src/tui/index.ts +114 -23
- package/src/tui/memforward.ts +52 -3
- package/src/tui/model.ts +36 -2
- package/src/tui/prpause.ts +11 -2
- package/src/tui/remote.ts +9 -1
- package/src/tui/route.ts +173 -0
- package/src/tui/setupstate.ts +52 -0
- package/src/tui/sshtriage.ts +127 -6
- package/src/tui/theme.ts +2 -1
- package/src/tui/unwedge.ts +2 -14
- package/src/verdicts.ts +23 -5
- package/src/version.ts +1 -1
- package/src/webhook.ts +10 -1
- package/src/wire.ts +36 -7
- package/src/workerworld.ts +7 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workerworld.js","sourceRoot":"","sources":["../../src/workerworld.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workerworld.js","sourceRoot":"","sources":["../../src/workerworld.ts"],"names":[],"mappings":"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"}
|
|
@@ -237,6 +237,23 @@ if (defMatch) {
|
|
|
237
237
|
cfg.defaultProvider = defMatch[1];
|
|
238
238
|
cfg.defaultModel = defMatch[2];
|
|
239
239
|
if (defMatch[3]) cfg.defaultThinkingLevel = defMatch[3];
|
|
240
|
+
// Any OpenAI login serves the model: `openai-codex` (the legacy Codex login)
|
|
241
|
+
// and `openai` (Sign in with ChatGPT, or an API key) carry the same ids. When
|
|
242
|
+
// the named provider has no login and its twin has one, the default is the
|
|
243
|
+
// twin (the rule of packages/pi-plugin/src/modelroute.ts, which the companion's
|
|
244
|
+
// login-route extension applies again inside pi).
|
|
245
|
+
const twin = { "openai-codex": "openai", openai: "openai-codex" }[cfg.defaultProvider];
|
|
246
|
+
if (twin) {
|
|
247
|
+
let logins = {};
|
|
248
|
+
try { logins = JSON.parse(fs.readFileSync(process.env.HOME + "/.pi/agent/auth.json", "utf8")); } catch {}
|
|
249
|
+
const has = (p) => {
|
|
250
|
+
const c = logins[p];
|
|
251
|
+
if (c && c.type === "oauth") return true;
|
|
252
|
+
if (c && c.type === "api_key" && typeof c.key === "string" && c.key.trim() !== "") return true;
|
|
253
|
+
return p === "openai" && (process.env.OPENAI_API_KEY || "").trim() !== "";
|
|
254
|
+
};
|
|
255
|
+
if (!has(cfg.defaultProvider) && has(twin)) cfg.defaultProvider = twin;
|
|
256
|
+
}
|
|
240
257
|
}
|
|
241
258
|
|
|
242
259
|
fs.writeFileSync(path, JSON.stringify(cfg, null, 2) + "\n");
|
|
@@ -302,7 +319,9 @@ fi
|
|
|
302
319
|
# OpenAI auth: the OAuth route (`/login` once inside a pi session) persists in
|
|
303
320
|
# $PI_HOME_DIR/agent/auth.json on the volume and takes precedence over the env
|
|
304
321
|
# var. OPENAI_API_KEY is honored when the caller passes one.
|
|
305
|
-
#
|
|
322
|
+
# Any OpenAI login works: the shipped model prefix is `openai-codex/` (the
|
|
323
|
+
# legacy Codex login), and a model whose provider has no login runs on the
|
|
324
|
+
# other OpenAI login (`openai/`: Sign in with ChatGPT, or an API key).
|
|
306
325
|
|
|
307
326
|
# Memory health watcher: probes OpenViking through the host-owned
|
|
308
327
|
# forward and drops an alert file into /alerts when it stops answering (and a
|
package/docker/entrypoint.sh
CHANGED
|
@@ -503,6 +503,23 @@ if (defMatch) {
|
|
|
503
503
|
cfg.defaultProvider = defMatch[1];
|
|
504
504
|
cfg.defaultModel = defMatch[2];
|
|
505
505
|
if (defMatch[3]) cfg.defaultThinkingLevel = defMatch[3];
|
|
506
|
+
// Any OpenAI login serves the model: `openai-codex` (the legacy Codex login)
|
|
507
|
+
// and `openai` (Sign in with ChatGPT, or an API key) carry the same ids. When
|
|
508
|
+
// the named provider has no login and its twin has one, the default is the
|
|
509
|
+
// twin (the rule of packages/pi-plugin/src/modelroute.ts, which the
|
|
510
|
+
// companion's login-route extension applies again inside pi).
|
|
511
|
+
const twin = { "openai-codex": "openai", openai: "openai-codex" }[cfg.defaultProvider];
|
|
512
|
+
if (twin) {
|
|
513
|
+
let logins = {};
|
|
514
|
+
try { logins = JSON.parse(fs.readFileSync(path.join(home, ".pi", "agent", "auth.json"), "utf8")); } catch {}
|
|
515
|
+
const has = (p) => {
|
|
516
|
+
const c = logins[p];
|
|
517
|
+
if (c && c.type === "oauth") return true;
|
|
518
|
+
if (c && c.type === "api_key" && typeof c.key === "string" && c.key.trim() !== "") return true;
|
|
519
|
+
return p === "openai" && (process.env.OPENAI_API_KEY || "").trim() !== "";
|
|
520
|
+
};
|
|
521
|
+
if (!has(cfg.defaultProvider) && has(twin)) cfg.defaultProvider = twin;
|
|
522
|
+
}
|
|
506
523
|
}
|
|
507
524
|
fs.writeFileSync(file, JSON.stringify(cfg, null, 2) + "\n");
|
|
508
525
|
console.log("pi skills registered: " + (cfg.skills.join(", ") || "none"));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// The env shim for the login route (extensions/login-route.ts): the one place
|
|
2
|
+
// the process's env becomes its config. QCR_LOGIN_OPEN=submit opens pi's login
|
|
3
|
+
// menu when no model is usable; anything else leaves `/login` on the input
|
|
4
|
+
// line for one Enter.
|
|
5
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
6
|
+
import { createLoginRoute, loginRouteConfigFromEnv } from "../login-route.js";
|
|
7
|
+
|
|
8
|
+
export default function activate(pi: ExtensionAPI): void {
|
|
9
|
+
void createLoginRoute(loginRouteConfigFromEnv(process.env))(pi);
|
|
10
|
+
}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
// login-route — a pi that has no usable model login says so, and opens pi's
|
|
2
|
+
// own /login; a pi whose model names one OpenAI provider while the person
|
|
3
|
+
// logged in with the other runs the same model on the login that exists.
|
|
4
|
+
//
|
|
5
|
+
// Loaded by every CLI pi Quickreview starts for a person: the onboarding
|
|
6
|
+
// wizard (registered by extensions/onboarding.ts, which opens the login for
|
|
7
|
+
// the person), the companion, a takeover and a debug round (the env shim
|
|
8
|
+
// extensions/cli/login-route.ts, which prefills it). An SDK session needs none
|
|
9
|
+
// of this: PiHost routes its model the same way (packages/pi-plugin/src/engine/pisdk.ts).
|
|
10
|
+
//
|
|
11
|
+
// Three behaviours, each on pi's own API:
|
|
12
|
+
// - Model route. On session_start and before every prompt (the `input`
|
|
13
|
+
// event, which pi runs before it checks the model's credential), a model
|
|
14
|
+
// whose provider has no credential is switched to its OpenAI twin when the
|
|
15
|
+
// twin has one and serves the same id (packages/pi-plugin/src/modelroute.ts).
|
|
16
|
+
// The provider the spec names always wins when its login exists, so an
|
|
17
|
+
// install that works today is untouched. pi.setModel does not persist the
|
|
18
|
+
// switch to settings.
|
|
19
|
+
// - Login hint. When no usable model is left, a widget says exactly what to
|
|
20
|
+
// do, and pi's input line holds `/login`, so one Enter opens pi's login.
|
|
21
|
+
// The widget clears once a model is selected (`model_select`).
|
|
22
|
+
// - Open (the wizard only). pi runs `/login` only from its editor's submit
|
|
23
|
+
// (an extension cannot call the command), and the one public way to reach
|
|
24
|
+
// that submit is an editor component: pi wires its own submit handler
|
|
25
|
+
// onto every editor an extension installs. So the login is opened by
|
|
26
|
+
// installing a stock CustomEditor for an instant, submitting `/login`
|
|
27
|
+
// through the handler pi gave it, and restoring the editor that was there.
|
|
28
|
+
// When that wiring is not found, the prefilled `/login` is the fallback.
|
|
29
|
+
import {
|
|
30
|
+
CustomEditor,
|
|
31
|
+
type ExtensionAPI,
|
|
32
|
+
type ExtensionContext,
|
|
33
|
+
type ExtensionFactory,
|
|
34
|
+
type ExtensionUIContext,
|
|
35
|
+
} from "@earendil-works/pi-coding-agent";
|
|
36
|
+
import type { Api, Model } from "@earendil-works/pi-ai";
|
|
37
|
+
import { routeProvider, twinProvider } from "@quickchatai/pi-quickreview/src/modelroute.js";
|
|
38
|
+
|
|
39
|
+
/** The widget key the hint is shown under. */
|
|
40
|
+
export const LOGIN_WIDGET = "qcr-login";
|
|
41
|
+
|
|
42
|
+
/** The command the hint prefills and the wizard submits: pi's own login,
|
|
43
|
+
* with every provider it offers. */
|
|
44
|
+
export const LOGIN_COMMAND = "/login";
|
|
45
|
+
|
|
46
|
+
/** What the person reads above the input line while no model is usable:
|
|
47
|
+
* which logins work and how to reach them in pi's menu (pi 1.4.0's labels),
|
|
48
|
+
* then how to (re)open the menu. `opened` says whether the menu is on screen. */
|
|
49
|
+
export function loginHintLines(opened: boolean): string[] {
|
|
50
|
+
return [
|
|
51
|
+
"Quickreview needs a model login before it can do anything. Any OpenAI login works:",
|
|
52
|
+
' - "Sign in with an account", then "OpenAI" (Sign in with ChatGPT) or "OpenAI Codex (legacy)";',
|
|
53
|
+
' - "Sign in with an API key", then type openai, pick "OpenAI" and paste your key (sk-...).',
|
|
54
|
+
opened
|
|
55
|
+
? `pi's login menu is open below. Closed it? Type ${LOGIN_COMMAND} and press Enter.`
|
|
56
|
+
: `Press Enter to open pi's login menu (${LOGIN_COMMAND} is on the input line).`,
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** How a pi opens the login when it needs one. */
|
|
61
|
+
export type LoginOpen = "submit" | "prefill";
|
|
62
|
+
|
|
63
|
+
export interface LoginRouteConfig {
|
|
64
|
+
/** "submit" opens pi's login menu; "prefill" leaves `/login` on the input
|
|
65
|
+
* line for one Enter. */
|
|
66
|
+
open: LoginOpen;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** The config the env describes: QCR_LOGIN_OPEN=submit, else prefill. */
|
|
70
|
+
export function loginRouteConfigFromEnv(env: NodeJS.ProcessEnv): LoginRouteConfig {
|
|
71
|
+
return { open: env.QCR_LOGIN_OPEN === "submit" ? "submit" : "prefill" };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** What the model route did. */
|
|
75
|
+
export type ModelRouteOutcome =
|
|
76
|
+
/** The current model's provider has a credential. */
|
|
77
|
+
| "usable"
|
|
78
|
+
/** The model was moved to its OpenAI twin, whose login exists. */
|
|
79
|
+
| "switched"
|
|
80
|
+
/** There is a model, and neither it nor a twin has a credential. */
|
|
81
|
+
| "unusable"
|
|
82
|
+
/** There is no model at all. */
|
|
83
|
+
| "none";
|
|
84
|
+
|
|
85
|
+
type Registry = Pick<
|
|
86
|
+
ExtensionContext["modelRegistry"],
|
|
87
|
+
"find" | "getAvailable" | "getProviderAuthStatus"
|
|
88
|
+
>;
|
|
89
|
+
|
|
90
|
+
function hasCredential(registry: Registry, provider: string): boolean {
|
|
91
|
+
try {
|
|
92
|
+
return registry.getProviderAuthStatus(provider).configured;
|
|
93
|
+
} catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Keep the session's model on a login that exists: the model as it is when its
|
|
100
|
+
* provider has a credential, else its OpenAI twin when that has one.
|
|
101
|
+
*
|
|
102
|
+
* VERIFY-ON-PIN (pi 1.4.0): ModelRegistry.getProviderAuthStatus(p).configured
|
|
103
|
+
* covers a stored login, a stored or runtime key and an environment key, and
|
|
104
|
+
* the extension pi.setModel returns false (switching nothing) for a provider
|
|
105
|
+
* without a credential.
|
|
106
|
+
*/
|
|
107
|
+
export async function routeSessionModel(
|
|
108
|
+
pi: Pick<ExtensionAPI, "setModel">,
|
|
109
|
+
ctx: { model: Model<Api> | undefined; modelRegistry: Registry },
|
|
110
|
+
): Promise<ModelRouteOutcome> {
|
|
111
|
+
const model = ctx.model;
|
|
112
|
+
if (!model) return "none";
|
|
113
|
+
const registry = ctx.modelRegistry;
|
|
114
|
+
if (hasCredential(registry, model.provider)) return "usable";
|
|
115
|
+
if (twinProvider(model.provider) === undefined) return "unusable";
|
|
116
|
+
const provider = routeProvider(model.provider, model.id, {
|
|
117
|
+
hasCredential: (p) => hasCredential(registry, p),
|
|
118
|
+
hasModel: (p, id) => registry.find(p, id) !== undefined,
|
|
119
|
+
});
|
|
120
|
+
if (provider === model.provider) return "unusable";
|
|
121
|
+
const twin = registry.find(provider, model.id);
|
|
122
|
+
if (twin && (await pi.setModel(twin))) return "switched";
|
|
123
|
+
return "unusable";
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** Does this pi need a login: no usable model, and none pi could pick? */
|
|
127
|
+
export function needsLogin(outcome: ModelRouteOutcome, registry: Registry): boolean {
|
|
128
|
+
if (outcome === "usable" || outcome === "switched") return false;
|
|
129
|
+
if (outcome === "unusable") return true;
|
|
130
|
+
try {
|
|
131
|
+
return registry.getAvailable().length === 0;
|
|
132
|
+
} catch {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
type EditorUi = Pick<ExtensionUIContext, "setEditorComponent" | "getEditorComponent">;
|
|
138
|
+
type MakeEditor = Parameters<ExtensionUIContext["setEditorComponent"]>[0] & {};
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Submit `text` through pi's own editor submit, as if typed and Entered. pi
|
|
142
|
+
* runs its built-in commands (`/login` among them) only from that handler, and
|
|
143
|
+
* hands it to every editor component an extension installs: so a stock editor
|
|
144
|
+
* is installed, its handler taken, and the previous editor (pi's default, or
|
|
145
|
+
* another extension's) restored before anything renders. Returns false, having
|
|
146
|
+
* submitted nothing, when pi did not wire a handler.
|
|
147
|
+
*
|
|
148
|
+
* VERIFY-ON-PIN (pi 1.4.0, interactive-mode.js setCustomEditorComponent):
|
|
149
|
+
* `newEditor.onSubmit = this.defaultEditor.onSubmit` runs synchronously inside
|
|
150
|
+
* setEditorComponent, and setEditorComponent(undefined) restores the default
|
|
151
|
+
* editor with its text.
|
|
152
|
+
*/
|
|
153
|
+
export function submitThroughEditor(
|
|
154
|
+
ui: EditorUi,
|
|
155
|
+
text: string,
|
|
156
|
+
makeEditor: MakeEditor = (tui, theme, keybindings) => new CustomEditor(tui, theme, keybindings),
|
|
157
|
+
): boolean {
|
|
158
|
+
let made: { onSubmit?: (text: string) => void } | undefined;
|
|
159
|
+
const previous = ui.getEditorComponent();
|
|
160
|
+
try {
|
|
161
|
+
ui.setEditorComponent((tui, theme, keybindings) => {
|
|
162
|
+
const editor = makeEditor(tui, theme, keybindings);
|
|
163
|
+
made = editor;
|
|
164
|
+
return editor;
|
|
165
|
+
});
|
|
166
|
+
} catch {
|
|
167
|
+
made = undefined;
|
|
168
|
+
}
|
|
169
|
+
const submit = made?.onSubmit;
|
|
170
|
+
ui.setEditorComponent(previous);
|
|
171
|
+
if (typeof submit !== "function") return false;
|
|
172
|
+
void Promise.resolve()
|
|
173
|
+
.then(() => submit(text))
|
|
174
|
+
.catch(() => undefined);
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
type HintUi = Pick<ExtensionUIContext, "setWidget" | "setEditorText"> & EditorUi;
|
|
179
|
+
|
|
180
|
+
/** Show the hint and open (or prefill) pi's login. Returns how it was opened. */
|
|
181
|
+
export function openLogin(ui: HintUi, open: LoginOpen): "submitted" | "prefilled" {
|
|
182
|
+
if (open === "submit" && submitThroughEditor(ui, LOGIN_COMMAND)) {
|
|
183
|
+
ui.setWidget(LOGIN_WIDGET, loginHintLines(true), { placement: "aboveEditor" });
|
|
184
|
+
return "submitted";
|
|
185
|
+
}
|
|
186
|
+
ui.setWidget(LOGIN_WIDGET, loginHintLines(false), { placement: "aboveEditor" });
|
|
187
|
+
ui.setEditorText(LOGIN_COMMAND);
|
|
188
|
+
return "prefilled";
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** Register the model route and the login hint on `pi`. Exported so a host that
|
|
192
|
+
* builds its own onboarding extension (over `toolDefinitions`) gets the same
|
|
193
|
+
* first-run login as `qcr onboard`. */
|
|
194
|
+
export function registerLoginRoute(pi: ExtensionAPI, config: LoginRouteConfig): void {
|
|
195
|
+
if (typeof pi.on !== "function") return;
|
|
196
|
+
let shown = false;
|
|
197
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
198
|
+
const outcome = await routeSessionModel(pi, ctx);
|
|
199
|
+
if (!ctx.hasUI || !needsLogin(outcome, ctx.modelRegistry)) return;
|
|
200
|
+
shown = true;
|
|
201
|
+
openLogin(ctx.ui, config.open);
|
|
202
|
+
});
|
|
203
|
+
// pi checks the model's credential after this event, so a login made inside
|
|
204
|
+
// the session (its default model stays the spec's provider) is routed here.
|
|
205
|
+
pi.on("input", async (_event, ctx) => {
|
|
206
|
+
await routeSessionModel(pi, ctx);
|
|
207
|
+
return { action: "continue" };
|
|
208
|
+
});
|
|
209
|
+
pi.on("model_select", (_event, ctx) => {
|
|
210
|
+
if (!shown || !ctx.hasUI) return;
|
|
211
|
+
shown = false;
|
|
212
|
+
ctx.ui.setWidget(LOGIN_WIDGET, undefined);
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** The factory, for a pi that loads the route by path (its shim) or a host
|
|
217
|
+
* that composes factories. */
|
|
218
|
+
export function createLoginRoute(config: LoginRouteConfig): ExtensionFactory {
|
|
219
|
+
return (pi) => registerLoginRoute(pi, config);
|
|
220
|
+
}
|
package/extensions/onboarding.ts
CHANGED
|
@@ -38,7 +38,14 @@ import {
|
|
|
38
38
|
type StepStatusLine,
|
|
39
39
|
} from "../src/onboard/engine.js";
|
|
40
40
|
import { defaultSteps } from "../src/onboard/steps/index.js";
|
|
41
|
+
import { openStepMemoryForward } from "../src/onboard/stepforward.js";
|
|
41
42
|
import { locateConfig } from "../src/install.js";
|
|
43
|
+
import { registerLoginRoute } from "./login-route.js";
|
|
44
|
+
import {
|
|
45
|
+
ONBOARD_FINISH_TOOL,
|
|
46
|
+
ONBOARD_STATUS_TOOL,
|
|
47
|
+
onboardStepToolName,
|
|
48
|
+
} from "../src/onboard/toolnames.js";
|
|
42
49
|
|
|
43
50
|
const NO_PARAMS = { type: "object", properties: {} } as const;
|
|
44
51
|
|
|
@@ -71,6 +78,7 @@ export function realAdapters(root: string): OnboardAdapters {
|
|
|
71
78
|
// $QCR_CONFIG, else the install's config home (never the checkout's).
|
|
72
79
|
paths: { stateDir: join(root, "state"), configPath: locateConfig().path },
|
|
73
80
|
log: (line) => console.error(line),
|
|
81
|
+
memoryForward: (req) => openStepMemoryForward(req),
|
|
74
82
|
};
|
|
75
83
|
}
|
|
76
84
|
|
|
@@ -89,7 +97,14 @@ export function renderStatus(
|
|
|
89
97
|
reconciled: ReconcileReport,
|
|
90
98
|
): string {
|
|
91
99
|
const rows = lines.map((l) => {
|
|
92
|
-
const mark =
|
|
100
|
+
const mark =
|
|
101
|
+
l.status === "done"
|
|
102
|
+
? "[done]"
|
|
103
|
+
: l.status === "disabled"
|
|
104
|
+
? "[skipped]"
|
|
105
|
+
: l.optional
|
|
106
|
+
? "[after setup]"
|
|
107
|
+
: "[ ]";
|
|
93
108
|
return `${mark} ${l.id} — ${l.title}${l.note ? ` (${l.note})` : ""}`;
|
|
94
109
|
});
|
|
95
110
|
const demoted = reconciled.demoted.map(
|
|
@@ -114,7 +129,7 @@ export function toolDefinitions(
|
|
|
114
129
|
shutdown: (ctx?: Pick<ExtensionToolContext, "shutdown">) => void,
|
|
115
130
|
): QcrTool[] {
|
|
116
131
|
const stepTools: QcrTool[] = engine.stepDefs().map((step) => ({
|
|
117
|
-
name:
|
|
132
|
+
name: onboardStepToolName(step.id),
|
|
118
133
|
label: step.title,
|
|
119
134
|
description:
|
|
120
135
|
`${step.explain} Deterministic: runs the "${step.id}" onboarding step's real checks and returns one ✓/✗ line per check. ` +
|
|
@@ -141,7 +156,7 @@ export function toolDefinitions(
|
|
|
141
156
|
}));
|
|
142
157
|
|
|
143
158
|
const status: QcrTool = {
|
|
144
|
-
name:
|
|
159
|
+
name: ONBOARD_STATUS_TOOL,
|
|
145
160
|
label: "Onboarding status",
|
|
146
161
|
description:
|
|
147
162
|
"The checklist: every step in order with its status. Re-verifies each claimed-done step against reality first " +
|
|
@@ -155,7 +170,7 @@ export function toolDefinitions(
|
|
|
155
170
|
};
|
|
156
171
|
|
|
157
172
|
const finish: QcrTool = {
|
|
158
|
-
name:
|
|
173
|
+
name: ONBOARD_FINISH_TOOL,
|
|
159
174
|
label: "Finish onboarding",
|
|
160
175
|
description:
|
|
161
176
|
"Re-run EVERY verification. While anything is red this refuses and returns the failures — it never exits on red. " +
|
|
@@ -167,7 +182,7 @@ export function toolDefinitions(
|
|
|
167
182
|
const result = await engine.finish();
|
|
168
183
|
if (!result.ok) {
|
|
169
184
|
const red = result.results
|
|
170
|
-
.filter((r) => !r.ok)
|
|
185
|
+
.filter((r) => !r.ok && !r.optional)
|
|
171
186
|
.map((r) => `✗ ${r.id}: ${r.failures.join("; ") || "not verified"}`);
|
|
172
187
|
return text(
|
|
173
188
|
`Not finished — these verifications are red:\n${red.join("\n")}\n` +
|
|
@@ -182,7 +197,8 @@ export function toolDefinitions(
|
|
|
182
197
|
return text(
|
|
183
198
|
`Every step verified green — onboarding is complete (recorded ${result.completed_at}).\n` +
|
|
184
199
|
`${result.marker_written ? "First-run marker written for the companion greeting." : "First-run marker already present — left untouched."}\n` +
|
|
185
|
-
"This session now shuts down and the TUI opens
|
|
200
|
+
"This session now shuts down and the TUI opens: the board lists the repository's open pull requests — " +
|
|
201
|
+
"select one and press R to review it now (dry-run: nothing is posted).",
|
|
186
202
|
);
|
|
187
203
|
},
|
|
188
204
|
};
|
|
@@ -208,7 +224,20 @@ export function createOnboarding(config: OnboardingConfig): ExtensionFactory {
|
|
|
208
224
|
return (pi) => registerOnboarding(pi, config);
|
|
209
225
|
}
|
|
210
226
|
|
|
227
|
+
/**
|
|
228
|
+
* The onboarding session's first-run login: when pi has no usable model
|
|
229
|
+
* login, pi's own /login menu opens with a widget that says which logins work
|
|
230
|
+
* (any OpenAI one), and an OpenAI model whose provider has no login runs on
|
|
231
|
+
* the twin login that exists (extensions/login-route.ts). `qcr onboard`
|
|
232
|
+
* registers it with the tools; a host that builds its own onboarding
|
|
233
|
+
* extension over `toolDefinitions` + `registerQcrTool` calls it too.
|
|
234
|
+
*/
|
|
235
|
+
export function registerOnboardingSession(pi: ExtensionAPI): void {
|
|
236
|
+
registerLoginRoute(pi, { open: "submit" });
|
|
237
|
+
}
|
|
238
|
+
|
|
211
239
|
function registerOnboarding(pi: ExtensionAPI, config: OnboardingConfig): void {
|
|
240
|
+
registerOnboardingSession(pi);
|
|
212
241
|
if (typeof pi.registerTool !== "function") {
|
|
213
242
|
// Degrade loudly, never wedge: pi still starts, the guide can only talk.
|
|
214
243
|
console.error(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quickchatai/quickreview",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"//private": "The root is the published `qcr` CLI: the whole app (TUI, daemon, companion, every verb), installed with npm, pnpm or bun. It depends on the pi plugin (packages/pi-plugin) at its exact version and on pi at the exact pins below. Publishing is a release step of its own, never part of a build.",
|
|
6
6
|
"description": "A 24/7 AI code reviewer for GitHub: a deterministic daemon driving pi review sessions, with an operator TUI and a local qcr review",
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
},
|
|
117
117
|
"dependencies": {
|
|
118
118
|
"@earendil-works/pi-ai": "1.4.0",
|
|
119
|
-
"@quickchatai/pi-quickreview": "1.
|
|
119
|
+
"@quickchatai/pi-quickreview": "1.2.0",
|
|
120
120
|
"@earendil-works/pi-coding-agent": "1.4.0",
|
|
121
121
|
"better-sqlite3": "13.0.3",
|
|
122
122
|
"smol-toml": "1.9.1"
|
package/prompts/onboarding.md
CHANGED
|
@@ -26,6 +26,33 @@ never as a lecture up front.
|
|
|
26
26
|
- **On a fully-finished installation** this session doubles as a diagnostic:
|
|
27
27
|
`onboard_status` re-verifies everything; report what holds and what broke.
|
|
28
28
|
|
|
29
|
+
## What the person needs, and the fast path
|
|
30
|
+
|
|
31
|
+
Say this near the start, in two or three short lines. They need three things:
|
|
32
|
+
a **model login** (pi's `/login` opens by itself the first time — any working
|
|
33
|
+
OpenAI login is fine), their **GitHub sign-in** (`gh` logged in; on a Boxes VM
|
|
34
|
+
it already is), and **one repository**. Setup ends once the defaults are in
|
|
35
|
+
place and verified; the TUI then opens on the board, which lists the
|
|
36
|
+
repository's open pull requests — they pick one there and press `R` to review
|
|
37
|
+
it.
|
|
38
|
+
|
|
39
|
+
Recommend the fast path and take its defaults unless they ask otherwise:
|
|
40
|
+
|
|
41
|
+
- **topology** — `onboard_topology` with `choice: "local"` (this computer);
|
|
42
|
+
- **GitHub** — `onboard_github_account` with no `github_auth`: where gh is
|
|
43
|
+
signed in it uses their own account by itself. Call it once to get their
|
|
44
|
+
recent repositories, then again with `repo`;
|
|
45
|
+
- **ingress** — `onboard_ingress` with no `choice`: polling is the default
|
|
46
|
+
(the reviewer checks GitHub every few minutes; webhooks can come later);
|
|
47
|
+
- **the first review** — not part of setup: after `finish_and_exit` the board
|
|
48
|
+
lists the open pull requests, and `R` on one starts its review at once, no
|
|
49
|
+
label to add.
|
|
50
|
+
|
|
51
|
+
**Never ask for something no tool takes.** Every question you put to the person
|
|
52
|
+
is a step's input (the tool's parameters say which). If a step asks for nothing,
|
|
53
|
+
do not invent a question for it — run it. When a tool returns a refusal that
|
|
54
|
+
lists options, read those options out; do not add your own.
|
|
55
|
+
|
|
29
56
|
## What you teach, when
|
|
30
57
|
|
|
31
58
|
- **At the start** (one short paragraph): QuickReview is a deterministic
|
|
@@ -42,33 +69,45 @@ never as a lecture up front.
|
|
|
42
69
|
(what the reviewer learns and keeps). Explain each only when its step is in
|
|
43
70
|
front of you.
|
|
44
71
|
|
|
45
|
-
##
|
|
72
|
+
## GitHub, in one step
|
|
73
|
+
|
|
74
|
+
`onboard_github_account` is the GitHub question. On their own account it saves
|
|
75
|
+
their token (0600, never shown — say so), installs a refresh every 20 minutes,
|
|
76
|
+
and creates the trigger labels if their account may. Read out its refresh line
|
|
77
|
+
as it is: on a machine without `crontab` it says what lapses and gives the
|
|
78
|
+
manual command. If they want a GitHub App instead, call it with
|
|
79
|
+
`github_auth: "app"`; the App steps then take over. Never call the App step on
|
|
80
|
+
the own-account route: it is skipped there.
|
|
81
|
+
|
|
82
|
+
## The last steps
|
|
46
83
|
|
|
47
84
|
- **Bring-up is slow the first time.** Say so before you run it — the tool's
|
|
48
85
|
own warning is there to be read out — and let its streamed output show. A
|
|
49
86
|
long build is expected, not a hang.
|
|
50
|
-
- **The
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
87
|
+
- **The reviewer needs its own model login.** The review sessions run in the
|
|
88
|
+
daemon's container, and a login never transfers from this machine into it.
|
|
89
|
+
Once the stack is up, the LLM auth step's `daemon_login` check names the one
|
|
90
|
+
command that opens it; ask them to run it in a second terminal, sign in, and
|
|
91
|
+
tell you — then re-run the LLM auth step. Without it the first review on the
|
|
92
|
+
board would fail at once.
|
|
93
|
+
- **The first review and go-live come after setup.** `onboard_proof_round` and
|
|
94
|
+
`onboard_go_live` are marked "after setup": setup finishes without them. Do
|
|
95
|
+
not run them here unless the person asks. Say plainly that the installation
|
|
96
|
+
stays in dry-run (every intended GitHub write is recorded, nothing is
|
|
97
|
+
posted), and that going live is their decision later: re-run `qcr onboard`
|
|
98
|
+
and ask for it once a review on the board has shown them what it says.
|
|
61
99
|
|
|
62
100
|
## Finishing
|
|
63
101
|
|
|
64
|
-
When every step reports done
|
|
65
|
-
whole checklist one last time and,
|
|
66
|
-
|
|
102
|
+
When every setup step reports done (the "after setup" ones need not be), say
|
|
103
|
+
that `finish_and_exit` will re-verify the whole checklist one last time and,
|
|
104
|
+
only if all green, close this session and open the TUI on the board: there they
|
|
105
|
+
select a pull request and press `R` to review it now. If it returns red checks, that is the answer: explain them, fix
|
|
67
106
|
what can be fixed through the step tools, and try again. Never present
|
|
68
107
|
onboarding as finished while anything is red, and never tell the operator to
|
|
69
108
|
quit around a red check.
|
|
70
109
|
|
|
71
|
-
Before `finish_and_exit`, pass on what comes next
|
|
72
|
-
|
|
73
|
-
board). Until then the reviewer knows nothing about this codebase. It is a
|
|
110
|
+
Before `finish_and_exit`, pass on what comes next: the first review is `R` on
|
|
111
|
+
a pull request on the board; then set up the repo with `qcr setup` (or `I` on
|
|
112
|
+
the TUI board). Until then the reviewer knows nothing about this codebase. It is a
|
|
74
113
|
recommendation, once — never start it from here.
|
package/scripts/mint-token.sh
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# mint-token.sh —
|
|
2
|
+
# mint-token.sh — the daemon's GitHub token for the pi sessions' `gh` prefixing
|
|
3
|
+
# and the git credential helper.
|
|
3
4
|
#
|
|
4
|
-
#
|
|
5
|
+
# Under `[github] auth = "user"` (the person's own credential, polling-only;
|
|
6
|
+
# SECURITY.md) it prints the token file `<secrets dir>/github_token`
|
|
7
|
+
# that the host-side refresher (`qcr github-token sync`) keeps fresh, and does
|
|
8
|
+
# nothing else: no App, no JWT, no cache. --refresh re-reads the same file.
|
|
9
|
+
#
|
|
10
|
+
# Otherwise (`auth = "app"`, the default) it is the shell equivalent of
|
|
11
|
+
# packages/pi-plugin/src/githubAuth.ts:
|
|
5
12
|
# * RS256 app JWT, iat = now-60s, exp = iat+9min (≤10 min ceiling)
|
|
6
13
|
# * installation id resolved via GET /app/installations
|
|
7
14
|
# * POST /app/installations/{id}/access_tokens for the installation token
|
|
8
15
|
# * token + expires_at cached; reused while (expires_at - now) > 5 min
|
|
9
16
|
# * single-flight via an mkdir lock; --refresh re-mints (the 401 path)
|
|
10
17
|
#
|
|
11
|
-
# The app PEM is the only credential
|
|
12
|
-
# Prints the bare token to stdout. stdlib tools only: bash, openssl, curl, python3.
|
|
18
|
+
# The app PEM is the App route's only credential. Prints the bare token to stdout. stdlib tools only: bash, openssl, curl, python3.
|
|
13
19
|
#
|
|
14
20
|
# Usage: mint-token.sh [--refresh]
|
|
15
21
|
# e.g. GH_TOKEN="$(scripts/mint-token.sh)" gh pr view 123
|
|
@@ -63,6 +69,21 @@ cfg_sed() { # crude fallback: first `key = "value"` inside [section]
|
|
|
63
69
|
# ~/.config/quickreview-bot). The same answer the daemon's loader reaches.
|
|
64
70
|
SECRETS_DIR="$(qcr_locate_secrets "$(cfg github secrets_dir || true)")" || exit 1
|
|
65
71
|
|
|
72
|
+
# ---- auth = "user": the person's token file, as written ---------------------
|
|
73
|
+
|
|
74
|
+
AUTH="$(cfg github auth 2>/dev/null || true)"
|
|
75
|
+
AUTH="${AUTH:-app}"
|
|
76
|
+
if [[ "$AUTH" == "user" ]]; then
|
|
77
|
+
TOKEN_FILE="$SECRETS_DIR/github_token"
|
|
78
|
+
[[ -r "$TOKEN_FILE" ]] ||
|
|
79
|
+
die "unreadable user token: $TOKEN_FILE ([github] auth = \"user\"; run \`qcr github-token sync\` on the host)"
|
|
80
|
+
token="$(tr -d '[:space:]' < "$TOKEN_FILE")"
|
|
81
|
+
[[ -n "$token" ]] || die "empty user token file: $TOKEN_FILE (run \`qcr github-token sync\` on the host)"
|
|
82
|
+
printf '%s\n' "$token"
|
|
83
|
+
exit 0
|
|
84
|
+
fi
|
|
85
|
+
[[ "$AUTH" == "app" ]] || die "[github] auth must be \"app\" or \"user\" (got \"$AUTH\")"
|
|
86
|
+
|
|
66
87
|
APP_ID_FILE="$SECRETS_DIR/app_id"
|
|
67
88
|
PEM_FILE="$SECRETS_DIR/app.pem"
|
|
68
89
|
[[ -r "$APP_ID_FILE" ]] || die "unreadable app id: $APP_ID_FILE"
|
package/src/ciretry.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// is re-queued when its CI turns green, so its session can decide again.
|
|
5
5
|
//
|
|
6
6
|
// Nothing here triggers, re-runs or cancels CI: the one CI call is a GET.
|
|
7
|
+
import { botAccountLogin } from "@quickchatai/pi-quickreview/src/identity.js";
|
|
7
8
|
import {
|
|
8
9
|
classifyCi,
|
|
9
10
|
type CheckSummary,
|
|
@@ -125,7 +126,7 @@ export async function retryWithheldApproval(
|
|
|
125
126
|
{ type: "trigger", source: "reconcile" },
|
|
126
127
|
{},
|
|
127
128
|
{
|
|
128
|
-
botLogin: cfg.github
|
|
129
|
+
botLogin: botAccountLogin(cfg.github),
|
|
129
130
|
...(deps.now ? { now: deps.now } : {}),
|
|
130
131
|
reason: "ci-green:withheld-approval-retry",
|
|
131
132
|
},
|