@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
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
// The host-side GitHub token refresher — `qcr github-token sync`.
|
|
2
|
+
//
|
|
3
|
+
// On the own-account route (`[github] auth = "user"`) the daemon runs on the
|
|
4
|
+
// person's own GitHub credential instead of a GitHub App, and that credential
|
|
5
|
+
// reaches it as ONE FILE: `<secrets dir>/github_token`, mode 0600, the token
|
|
6
|
+
// alone with no newline, rewritten atomically. Never env, never argv: the
|
|
7
|
+
// daemon's UserTokenSource re-reads the file, and nothing here hands it a
|
|
8
|
+
// token any other way.
|
|
9
|
+
//
|
|
10
|
+
// This module is the only writer of that file. It runs on the HOST, as the
|
|
11
|
+
// person, where their GitHub sign-in lives:
|
|
12
|
+
//
|
|
13
|
+
// 1. the token comes from `gh auth token` — the gh binary the wizard
|
|
14
|
+
// resolved (`--gh <abs path>`, recorded at onboarding because cron's PATH
|
|
15
|
+
// is not the wizard's: on a Boxes VM the signed-in gh is the broker
|
|
16
|
+
// wrapper in /usr/local/bin, and a /usr/bin/gh beside it has no login) —
|
|
17
|
+
// or, when there is no gh at all, from GH_TOKEN / GITHUB_TOKEN;
|
|
18
|
+
// 2. `GET /user` with it proves it works and names the login;
|
|
19
|
+
// 3. only then is the file rewritten (tmp + rename, 0600 under a 0700 dir).
|
|
20
|
+
//
|
|
21
|
+
// It prints the login and the token's KIND (ghu_/gho_/ghp_/github_pat_), and
|
|
22
|
+
// the expiry GitHub states for it, never the token: no line this module
|
|
23
|
+
// produces carries a token value.
|
|
24
|
+
//
|
|
25
|
+
// The wizard installs a user crontab entry that runs this every 20 minutes,
|
|
26
|
+
// marked `# qcr github-token sync` so a re-run replaces it instead of adding a
|
|
27
|
+
// second. Boxes' gh hands out an 8 h `ghu_` token from its broker, so there the
|
|
28
|
+
// refresh is what keeps the reviewer signed in; a `gho_`/`ghp_` token does not
|
|
29
|
+
// expire and the entry is merely harmless.
|
|
30
|
+
//
|
|
31
|
+
// The daemon never imports this module (it reads no personal token itself):
|
|
32
|
+
// the CLI and the onboarding wizard are its only callers.
|
|
33
|
+
import { execFile } from "node:child_process";
|
|
34
|
+
import { chmodSync, mkdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
35
|
+
import { dirname, join, resolve } from "node:path";
|
|
36
|
+
import { fileURLToPath } from "node:url";
|
|
37
|
+
import { USER_TOKEN_FILE } from "@quickchatai/pi-quickreview/src/githubAuth.js";
|
|
38
|
+
/** The token file's name in the secrets dir — the one the daemon's UserTokenSource reads. */
|
|
39
|
+
export const GITHUB_TOKEN_FILE = USER_TOKEN_FILE;
|
|
40
|
+
/** The marker that makes the crontab entry idempotent. */
|
|
41
|
+
export const CRON_MARKER = "# qcr github-token sync";
|
|
42
|
+
/** How often the crontab entry refreshes the file. */
|
|
43
|
+
export const CRON_SCHEDULE = "*/20 * * * *";
|
|
44
|
+
export function tokenKind(token) {
|
|
45
|
+
if (token.startsWith("github_pat_"))
|
|
46
|
+
return {
|
|
47
|
+
prefix: "github_pat_",
|
|
48
|
+
label: "fine-grained personal access token (expires on the date you set)",
|
|
49
|
+
expires: true,
|
|
50
|
+
};
|
|
51
|
+
if (token.startsWith("ghu_"))
|
|
52
|
+
return {
|
|
53
|
+
prefix: "ghu_",
|
|
54
|
+
label: "GitHub App user token (expires after 8 hours — the crontab refresh keeps it current)",
|
|
55
|
+
expires: true,
|
|
56
|
+
};
|
|
57
|
+
if (token.startsWith("gho_"))
|
|
58
|
+
return { prefix: "gho_", label: "OAuth token from gh (does not expire)", expires: false };
|
|
59
|
+
if (token.startsWith("ghp_"))
|
|
60
|
+
return {
|
|
61
|
+
prefix: "ghp_",
|
|
62
|
+
label: "classic personal access token (expires only if you set one)",
|
|
63
|
+
expires: null,
|
|
64
|
+
};
|
|
65
|
+
if (token.startsWith("ghs_"))
|
|
66
|
+
return {
|
|
67
|
+
prefix: "ghs_",
|
|
68
|
+
label: "GitHub App installation token (expires within the hour)",
|
|
69
|
+
expires: true,
|
|
70
|
+
};
|
|
71
|
+
return { prefix: "unknown", label: "token of an unrecognised kind", expires: null };
|
|
72
|
+
}
|
|
73
|
+
/** A token is one line of word characters; anything else is not a token. */
|
|
74
|
+
const TOKEN_RE = /^[A-Za-z0-9_]{20,255}$/;
|
|
75
|
+
/** The absolute path of the `gh` the CALLER's environment resolves, or null.
|
|
76
|
+
* Recorded at onboarding so the crontab entry runs that same binary. */
|
|
77
|
+
export async function resolveGhPath(runner) {
|
|
78
|
+
const r = await runner.run("sh", ["-c", "command -v gh"]);
|
|
79
|
+
const path = r.code === 0 ? r.stdout.trim().split("\n")[0].trim() : "";
|
|
80
|
+
return path.startsWith("/") ? path : null;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The person's token: `gh auth token` first (the named binary, else `gh` on
|
|
84
|
+
* PATH), then GH_TOKEN, then GITHUB_TOKEN. Env is read only when gh cannot
|
|
85
|
+
* answer at all — a gh that exists but is signed out is said as itself.
|
|
86
|
+
*/
|
|
87
|
+
export async function readPersonToken(o) {
|
|
88
|
+
const gh = o.gh && o.gh.trim() !== "" ? o.gh : "gh";
|
|
89
|
+
const r = await o.runner.run(gh, ["auth", "token"]);
|
|
90
|
+
const out = r.code === 0 ? r.stdout.trim() : "";
|
|
91
|
+
if (out !== "") {
|
|
92
|
+
if (!TOKEN_RE.test(out))
|
|
93
|
+
return { ok: false, problem: `\`${gh} auth token\` printed something that is not a token` };
|
|
94
|
+
return { ok: true, token: out, source: "gh" };
|
|
95
|
+
}
|
|
96
|
+
for (const name of ["GH_TOKEN", "GITHUB_TOKEN"]) {
|
|
97
|
+
const v = (o.env[name] ?? "").trim();
|
|
98
|
+
if (v === "")
|
|
99
|
+
continue;
|
|
100
|
+
if (!TOKEN_RE.test(v))
|
|
101
|
+
return { ok: false, problem: `${name} is set but is not a token` };
|
|
102
|
+
return { ok: true, token: v, source: `env:${name}` };
|
|
103
|
+
}
|
|
104
|
+
const why = (r.stderr || r.stdout).trim().split("\n")[0]?.slice(0, 160) ?? "";
|
|
105
|
+
return {
|
|
106
|
+
ok: false,
|
|
107
|
+
problem: `no GitHub sign-in found: \`${gh} auth token\` gave no token${why ? ` (${why})` : ""} and neither GH_TOKEN nor ` +
|
|
108
|
+
"GITHUB_TOKEN is set. Sign in with `gh auth login`, then run this again",
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/** `GET /user` — which account the token is, and when GitHub says it lapses. */
|
|
112
|
+
export async function githubLogin(fetchFn, token, apiBase = "https://api.github.com") {
|
|
113
|
+
try {
|
|
114
|
+
const res = await fetchFn(`${apiBase}/user`, {
|
|
115
|
+
headers: {
|
|
116
|
+
authorization: `Bearer ${token}`,
|
|
117
|
+
accept: "application/vnd.github+json",
|
|
118
|
+
"user-agent": "quickreview-github-token-sync",
|
|
119
|
+
},
|
|
120
|
+
signal: AbortSignal.timeout(10_000),
|
|
121
|
+
});
|
|
122
|
+
const text = await res.text();
|
|
123
|
+
let body = null;
|
|
124
|
+
try {
|
|
125
|
+
body = text ? JSON.parse(text) : null;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
body = null;
|
|
129
|
+
}
|
|
130
|
+
const login = body?.login;
|
|
131
|
+
if (res.status === 200 && typeof login === "string" && login !== "") {
|
|
132
|
+
const expiry = res.headers?.get?.("github-authentication-token-expiration") ?? null;
|
|
133
|
+
return { ok: true, login, expiry: expiry && expiry.trim() !== "" ? expiry.trim() : null };
|
|
134
|
+
}
|
|
135
|
+
const message = body?.message;
|
|
136
|
+
return {
|
|
137
|
+
ok: false,
|
|
138
|
+
status: res.status,
|
|
139
|
+
detail: `GET /user answered HTTP ${res.status}${typeof message === "string" ? `: ${message}` : ""}`,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
return { ok: false, status: 0, detail: `GET /user failed: ${String(err)}` };
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/** Write the token file: 0600 under a 0700 dir, the token alone, tmp+rename so
|
|
147
|
+
* a reader never sees half a token. Returns the file's path. */
|
|
148
|
+
export function writeTokenFile(secretsDir, token) {
|
|
149
|
+
if (!TOKEN_RE.test(token))
|
|
150
|
+
throw new Error("refusing to write something that is not a token");
|
|
151
|
+
mkdirSync(secretsDir, { recursive: true, mode: 0o700 });
|
|
152
|
+
chmodSync(secretsDir, 0o700);
|
|
153
|
+
const path = join(secretsDir, GITHUB_TOKEN_FILE);
|
|
154
|
+
const tmp = join(secretsDir, `.${GITHUB_TOKEN_FILE}.${process.pid}.tmp`);
|
|
155
|
+
try {
|
|
156
|
+
writeFileSync(tmp, token, { mode: 0o600 });
|
|
157
|
+
chmodSync(tmp, 0o600);
|
|
158
|
+
renameSync(tmp, path);
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
rmSync(tmp, { force: true });
|
|
162
|
+
}
|
|
163
|
+
return path;
|
|
164
|
+
}
|
|
165
|
+
/** The whole refresh: read the person's token, prove it with `GET /user`, and
|
|
166
|
+
* only then rewrite the file. A token GitHub refuses never reaches the file. */
|
|
167
|
+
export async function syncGithubToken(o) {
|
|
168
|
+
const got = await readPersonToken(o);
|
|
169
|
+
if (!got.ok)
|
|
170
|
+
return got;
|
|
171
|
+
const who = await githubLogin(o.fetch, got.token, o.apiBase);
|
|
172
|
+
if (!who.ok)
|
|
173
|
+
return {
|
|
174
|
+
ok: false,
|
|
175
|
+
problem: who.status === 401
|
|
176
|
+
? `GitHub rejected the token from ${got.source} (${who.detail}) — sign in again (\`gh auth login\`); the token file was left as it was`
|
|
177
|
+
: `could not check the token from ${got.source} with GitHub (${who.detail}); the token file was left as it was`,
|
|
178
|
+
};
|
|
179
|
+
let path;
|
|
180
|
+
try {
|
|
181
|
+
path = writeTokenFile(o.secretsDir, got.token);
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
return {
|
|
185
|
+
ok: false,
|
|
186
|
+
problem: `could not write ${join(o.secretsDir, GITHUB_TOKEN_FILE)}: ${String(err)}`,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
ok: true,
|
|
191
|
+
login: who.login,
|
|
192
|
+
kind: tokenKind(got.token),
|
|
193
|
+
source: got.source,
|
|
194
|
+
expiry: who.expiry,
|
|
195
|
+
path,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/** The one line a sync reports. No token value can appear in it. */
|
|
199
|
+
export function renderSync(r) {
|
|
200
|
+
if (!r.ok)
|
|
201
|
+
return `✗ github-token sync: ${r.problem}`;
|
|
202
|
+
return (`✓ github-token sync: signed in as ${r.login} — ${r.kind.prefix} ${r.kind.label}` +
|
|
203
|
+
`${r.expiry ? `, GitHub says it expires ${r.expiry}` : ""}; from ${r.source}, written to ${r.path} (0600)`);
|
|
204
|
+
}
|
|
205
|
+
// ---- the crontab entry -------------------------------------------------------
|
|
206
|
+
/** POSIX single-quoting for one word of the crontab command. */
|
|
207
|
+
function shq(word) {
|
|
208
|
+
return /^[A-Za-z0-9_./=:@%+-]+$/.test(word) ? word : `'${word.replace(/'/g, `'\\''`)}'`;
|
|
209
|
+
}
|
|
210
|
+
/** The app's own cli.js, beside this module in the built tree. */
|
|
211
|
+
export function defaultCliPath() {
|
|
212
|
+
return resolve(dirname(fileURLToPath(import.meta.url)), "cli.js");
|
|
213
|
+
}
|
|
214
|
+
/** The command a refresh runs: absolute node, absolute cli.js, the gh the
|
|
215
|
+
* wizard resolved and the secrets dir it wrote to — cron's environment knows
|
|
216
|
+
* none of them. */
|
|
217
|
+
export function syncCommandWords(o) {
|
|
218
|
+
return [
|
|
219
|
+
o.node,
|
|
220
|
+
o.cli,
|
|
221
|
+
"github-token",
|
|
222
|
+
"sync",
|
|
223
|
+
...(o.gh ? ["--gh", o.gh] : []),
|
|
224
|
+
"--secrets-dir",
|
|
225
|
+
o.secretsDir,
|
|
226
|
+
];
|
|
227
|
+
}
|
|
228
|
+
export function syncCommandLine(o) {
|
|
229
|
+
return syncCommandWords(o).map(shq).join(" ");
|
|
230
|
+
}
|
|
231
|
+
export function cronLine(o) {
|
|
232
|
+
return `${CRON_SCHEDULE} ${syncCommandLine(o)} >/dev/null 2>&1 ${CRON_MARKER}`;
|
|
233
|
+
}
|
|
234
|
+
/** Replace every marked line with `line` (or add it). Idempotent: a crontab
|
|
235
|
+
* that already carries exactly this line comes back unchanged. */
|
|
236
|
+
export function mergeCrontab(existing, line) {
|
|
237
|
+
const lines = existing.split("\n").filter((l, i, all) => !(l === "" && i === all.length - 1));
|
|
238
|
+
const kept = lines.filter((l) => !l.includes(CRON_MARKER));
|
|
239
|
+
const text = `${[...kept, line].join("\n")}\n`;
|
|
240
|
+
const before = lines.length === 0 ? "" : `${lines.join("\n")}\n`;
|
|
241
|
+
return { text, changed: text !== before };
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Install (or refresh) the marked user crontab entry, through the runner:
|
|
245
|
+
* `crontab -l`, merge, write the result to a 0600 scratch file, `crontab
|
|
246
|
+
* <file>`. A machine with no `crontab` is reported as such, never an error.
|
|
247
|
+
*/
|
|
248
|
+
export async function installCronEntry(o) {
|
|
249
|
+
const which = await o.runner.run("sh", ["-c", "command -v crontab"]);
|
|
250
|
+
if (which.code !== 0 || which.stdout.trim() === "")
|
|
251
|
+
return { kind: "no-crontab", line: o.line };
|
|
252
|
+
const current = await o.runner.run("crontab", ["-l"]);
|
|
253
|
+
let existing = "";
|
|
254
|
+
if (current.code === 0)
|
|
255
|
+
existing = current.stdout;
|
|
256
|
+
else if (!/no crontab/i.test(current.stderr + current.stdout))
|
|
257
|
+
return {
|
|
258
|
+
kind: "failed",
|
|
259
|
+
line: o.line,
|
|
260
|
+
detail: `crontab -l exited ${current.code}: ${(current.stderr || current.stdout).trim().slice(0, 200)}`,
|
|
261
|
+
};
|
|
262
|
+
const merged = mergeCrontab(existing, o.line);
|
|
263
|
+
if (!merged.changed)
|
|
264
|
+
return { kind: "unchanged", line: o.line };
|
|
265
|
+
mkdirSync(o.scratchDir, { recursive: true });
|
|
266
|
+
const file = join(o.scratchDir, "crontab.qcr.new");
|
|
267
|
+
try {
|
|
268
|
+
writeFileSync(file, merged.text, { mode: 0o600 });
|
|
269
|
+
const put = await o.runner.run("crontab", [file]);
|
|
270
|
+
if (put.code !== 0)
|
|
271
|
+
return {
|
|
272
|
+
kind: "failed",
|
|
273
|
+
line: o.line,
|
|
274
|
+
detail: `crontab ${file} exited ${put.code}: ${(put.stderr || put.stdout).trim().slice(0, 200)}`,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
finally {
|
|
278
|
+
rmSync(file, { force: true });
|
|
279
|
+
}
|
|
280
|
+
return { kind: "installed", line: o.line };
|
|
281
|
+
}
|
|
282
|
+
/** Does the user crontab carry the marked entry, and does it run THIS gh? */
|
|
283
|
+
export async function cronEntryState(runner, gh) {
|
|
284
|
+
const which = await runner.run("sh", ["-c", "command -v crontab"]);
|
|
285
|
+
if (which.code !== 0 || which.stdout.trim() === "")
|
|
286
|
+
return "no-crontab";
|
|
287
|
+
const current = await runner.run("crontab", ["-l"]);
|
|
288
|
+
const line = (current.code === 0 ? current.stdout : "")
|
|
289
|
+
.split("\n")
|
|
290
|
+
.find((l) => l.includes(CRON_MARKER));
|
|
291
|
+
if (!line)
|
|
292
|
+
return "absent";
|
|
293
|
+
if (gh && !line.includes(` --gh ${shq(gh)} `))
|
|
294
|
+
return "stale";
|
|
295
|
+
return "present";
|
|
296
|
+
}
|
|
297
|
+
// ---- the CLI verb ------------------------------------------------------------
|
|
298
|
+
export const GITHUB_TOKEN_USAGE = "usage: qcr github-token sync [--gh <path to gh>] [--secrets-dir <dir>]";
|
|
299
|
+
export function parseGithubTokenArgs(rest) {
|
|
300
|
+
if (rest[0] !== "sync")
|
|
301
|
+
throw new Error(GITHUB_TOKEN_USAGE);
|
|
302
|
+
let gh = null;
|
|
303
|
+
let secretsDir = null;
|
|
304
|
+
for (let i = 1; i < rest.length; i++) {
|
|
305
|
+
const a = rest[i];
|
|
306
|
+
const v = rest[i + 1];
|
|
307
|
+
if ((a === "--gh" || a === "--secrets-dir") && v !== undefined && v.trim() !== "") {
|
|
308
|
+
if (a === "--gh")
|
|
309
|
+
gh = v;
|
|
310
|
+
else
|
|
311
|
+
secretsDir = v;
|
|
312
|
+
i++;
|
|
313
|
+
}
|
|
314
|
+
else
|
|
315
|
+
throw new Error(GITHUB_TOKEN_USAGE);
|
|
316
|
+
}
|
|
317
|
+
return { gh, secretsDir };
|
|
318
|
+
}
|
|
319
|
+
/** A real runner for the CLI: execFile, never a shell, never a throw. */
|
|
320
|
+
export const execRunner = {
|
|
321
|
+
run: (cmd, args) => new Promise((done) => {
|
|
322
|
+
execFile(cmd, args, { timeout: 30_000 }, (err, stdout, stderr) => {
|
|
323
|
+
const code = err === null ? 0 : typeof err.code === "number" ? err.code : 1;
|
|
324
|
+
done({
|
|
325
|
+
code,
|
|
326
|
+
stdout: String(stdout),
|
|
327
|
+
stderr: err && !stderr ? String(err.message) : String(stderr),
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
}),
|
|
331
|
+
};
|
|
332
|
+
/** `qcr github-token sync`. Exit 0 on a written, proven token; 1 otherwise. */
|
|
333
|
+
export async function cmdGithubToken(rest, deps) {
|
|
334
|
+
const args = parseGithubTokenArgs(rest);
|
|
335
|
+
const log = deps.log ?? ((l) => console.log(l));
|
|
336
|
+
const result = await syncGithubToken({
|
|
337
|
+
runner: deps.runner ?? execRunner,
|
|
338
|
+
env: deps.env ?? process.env,
|
|
339
|
+
fetch: deps.fetch ?? fetch,
|
|
340
|
+
secretsDir: args.secretsDir ?? deps.secretsDir(),
|
|
341
|
+
gh: args.gh,
|
|
342
|
+
});
|
|
343
|
+
log(renderSync(result));
|
|
344
|
+
return result.ok ? 0 : 1;
|
|
345
|
+
}
|
|
346
|
+
//# sourceMappingURL=githubtoken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubtoken.js","sourceRoot":"","sources":["../../src/githubtoken.ts"],"names":[],"mappings":"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"}
|
package/dist/src/loginhint.js
CHANGED
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
// provider the review's models run on? A login in pi's agent dir counts, and
|
|
3
3
|
// so does the provider's own API key in the environment. An API key for some
|
|
4
4
|
// OTHER provider never does: the review runs on the models its config names,
|
|
5
|
-
// or not at all, and it never switches models to use a key. The
|
|
6
|
-
// `
|
|
5
|
+
// or not at all, and it never switches models to use a key. The one exception
|
|
6
|
+
// is the OpenAI family: an `openai-codex/` model runs on an `openai` login or
|
|
7
|
+
// OPENAI_API_KEY (and back), the same model id on either
|
|
8
|
+
// (packages/pi-plugin/src/modelroute.ts), so either login counts for it. The
|
|
9
|
+
// refusal names `qcr login`, the way to get the login.
|
|
7
10
|
import { readFileSync } from "node:fs";
|
|
8
11
|
import { join } from "node:path";
|
|
9
12
|
import { loginSummary, RUNTIME_KEY_ENVS, } from "@quickchatai/pi-quickreview/src/engine/auth.js";
|
|
13
|
+
import { routeProvider } from "@quickchatai/pi-quickreview/src/modelroute.js";
|
|
10
14
|
/** pi's stored logins in `agentDir`; empty when it holds none. */
|
|
11
15
|
export function readLogins(agentDir, read = (p) => readFileSync(p, "utf8")) {
|
|
12
16
|
try {
|
|
@@ -24,8 +28,9 @@ export function reviewLoginRefusal(o) {
|
|
|
24
28
|
const name = RUNTIME_KEY_ENVS[p];
|
|
25
29
|
return name !== undefined && (o.env[name] ?? "").trim() !== "" ? name : null;
|
|
26
30
|
};
|
|
31
|
+
const usable = (p) => logins[p] !== undefined || keyOf(p) !== null;
|
|
27
32
|
for (const p of o.providers) {
|
|
28
|
-
if (
|
|
33
|
+
if (usable(routeProvider(p, "", { hasCredential: usable })))
|
|
29
34
|
continue;
|
|
30
35
|
const otherKeys = Object.keys(RUNTIME_KEY_ENVS)
|
|
31
36
|
.filter((q) => q !== p)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loginhint.js","sourceRoot":"","sources":["../../src/loginhint.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,8EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"loginhint.js","sourceRoot":"","sources":["../../src/loginhint.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,yDAAyD;AACzD,6EAA6E;AAC7E,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,YAAY,EACZ,gBAAgB,GAEjB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAE9E,kEAAkE;AAClE,MAAM,UAAU,UAAU,CACxB,QAAgB,EAChB,OAAiC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;IAE/D,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;sCACsC;AACtC,MAAM,UAAU,kBAAkB,CAAC,CAKlC;IACC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAiB,EAAE;QACzC,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACpF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;YAAE,SAAS;QACtE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;aAC5C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;aACtB,GAAG,CAAC,KAAK,CAAC;aACV,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,GACR,SAAS,CAAC,MAAM,GAAG,CAAC;YAClB,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,sDAAsD,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,oFAAoF;YACtP,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,CACL,sBAAsB,CAAC,gDAAgD,CAAC,CAAC,QAAQ,KAAK;YACtF,uEAAuE,IAAI,EAAE,CAC9E,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -17,6 +17,9 @@ const PI_AI = "@earendil-works/pi-ai";
|
|
|
17
17
|
export const OAUTH_LOADERS = {
|
|
18
18
|
anthropic: "loadAnthropicOAuth",
|
|
19
19
|
"openai-codex": "loadOpenAICodexOAuth",
|
|
20
|
+
// pi 1.4's "Sign in with ChatGPT" (the provider `openai`, type oauth): a
|
|
21
|
+
// newer OpenAI login is refreshed by the same owner.
|
|
22
|
+
openai: "loadOpenAIChatGPTOAuth",
|
|
20
23
|
"github-copilot": "loadGitHubCopilotOAuth",
|
|
21
24
|
openrouter: "loadOpenRouterOAuth",
|
|
22
25
|
"kimi-coding": "loadKimiCodingOAuth",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pirefresh.js","sourceRoot":"","sources":["../../../src/loginrefresh/pirefresh.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,+FAA+F;AAC/F,4EAA4E;AAC5E,yCAAyC;AACzC,EAAE;AACF,+FAA+F;AAC/F,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,KAAK,GAAG,uBAAuB,CAAC;AAEtC,kFAAkF;AAClF,MAAM,CAAC,MAAM,aAAa,GAAqC;IAC7D,SAAS,EAAE,oBAAoB;IAC/B,cAAc,EAAE,sBAAsB;IACtC,gBAAgB,EAAE,wBAAwB;IAC1C,UAAU,EAAE,qBAAqB;IACjC,aAAa,EAAE,qBAAqB;IACpC,IAAI,EAAE,eAAe;IACrB,GAAG,EAAE,cAAc;CACpB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,UAAU,OAAO;IACrB,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;IACxD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,sCAAsC,CAAC,CAAC;AAClE,CAAC;AAMD,MAAM,CAAC,MAAM,cAAc,GAAc,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;IAC9E,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,EAAE,CAAC,CAAC;IAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAA4B,CAAC;IAChF,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/B,IAAI,OAAO,MAAM,KAAK,UAAU;QAC9B,MAAM,IAAI,KAAK,CACb,WAAW,UAAU,iBAAiB,IAAI,yCAAyC,CACpF,CAAC;IACJ,MAAM,IAAI,GAAG,MAAO,MAAmC,EAAE,CAAC;IAC1D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"pirefresh.js","sourceRoot":"","sources":["../../../src/loginrefresh/pirefresh.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,+FAA+F;AAC/F,4EAA4E;AAC5E,yCAAyC;AACzC,EAAE;AACF,+FAA+F;AAC/F,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,KAAK,GAAG,uBAAuB,CAAC;AAEtC,kFAAkF;AAClF,MAAM,CAAC,MAAM,aAAa,GAAqC;IAC7D,SAAS,EAAE,oBAAoB;IAC/B,cAAc,EAAE,sBAAsB;IACtC,yEAAyE;IACzE,qDAAqD;IACrD,MAAM,EAAE,wBAAwB;IAChC,gBAAgB,EAAE,wBAAwB;IAC1C,UAAU,EAAE,qBAAqB;IACjC,aAAa,EAAE,qBAAqB;IACpC,IAAI,EAAE,eAAe;IACrB,GAAG,EAAE,cAAc;CACpB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,UAAU,OAAO;IACrB,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;IACxD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,sCAAsC,CAAC,CAAC;AAClE,CAAC;AAMD,MAAM,CAAC,MAAM,cAAc,GAAc,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;IAC9E,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,EAAE,CAAC,CAAC;IAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAA4B,CAAC;IAChF,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/B,IAAI,OAAO,MAAM,KAAK,UAAU;QAC9B,MAAM,IAAI,KAAK,CACb,WAAW,UAAU,iBAAiB,IAAI,yCAAyC,CACpF,CAAC;IACJ,MAAM,IAAI,GAAG,MAAO,MAAmC,EAAE,CAAC;IAC1D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
|
package/dist/src/npmverbs.js
CHANGED
|
@@ -117,8 +117,10 @@ export async function cmdLogin(args, deps) {
|
|
|
117
117
|
"",
|
|
118
118
|
"Opens pi's own /login in the pi qcr runs on, so the review sessions can use it.",
|
|
119
119
|
"The login is kept in pi's agent dir ($PI_CODING_AGENT_DIR, default ~/.pi/agent).",
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
'Any OpenAI login serves the default review models: "OpenAI Codex (legacy)" or "OpenAI"',
|
|
121
|
+
'(Sign in with ChatGPT) under "Sign in with an account", or an OpenAI API key (at /login, or',
|
|
122
|
+
"OPENAI_API_KEY in the environment). A key for another provider does not stand in for it:",
|
|
123
|
+
"log in, or set the review's models in your qcr config.",
|
|
122
124
|
].join("\n"));
|
|
123
125
|
return 0;
|
|
124
126
|
}
|
package/dist/src/npmverbs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npmverbs.js","sourceRoot":"","sources":["../../src/npmverbs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"npmverbs.js","sourceRoot":"","sources":["../../src/npmverbs.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,10 @@ export const INGRESS_CHOICES = ["quick", "ngrok", "named", "polling"];
|
|
|
33
33
|
/** The LLM auth routes. "api" is the API-key route — not "api_key": the value
|
|
34
34
|
* the LLM step writes is the value every reader must test for. */
|
|
35
35
|
export const AUTH_ROUTES = ["oauth", "api"];
|
|
36
|
+
/** How the daemon authenticates to GitHub (`config.toml [github] auth`):
|
|
37
|
+
* "user" is the person's own account (polling only, no App), "app" a GitHub
|
|
38
|
+
* App. Answered as the github_account step's input; absent ⇒ unanswered. */
|
|
39
|
+
export const GITHUB_AUTH_CHOICES = ["user", "app"];
|
|
36
40
|
/** "owner/name" — the reviewed repo as the interview records it and the App
|
|
37
41
|
* step parses it: no URL, no trailing `.git`. */
|
|
38
42
|
export const REPO_SLUG_RE = /^([A-Za-z0-9._-]+)\/([A-Za-z0-9._-]+)$/;
|
|
@@ -56,6 +60,19 @@ export const CHOICE_KEYS = {
|
|
|
56
60
|
sshUser: "vm_ssh_user",
|
|
57
61
|
/** `AuthRoute`. Written by the LLM step; read by the interview's shape line. */
|
|
58
62
|
authRoute: "llm_auth_route",
|
|
63
|
+
/** `GithubAuth`. Written by the github_account step (the operator's answer,
|
|
64
|
+
* defaulted to "user" where `gh auth token` works); read by everything that
|
|
65
|
+
* differs between the own-account route and the App route — which of
|
|
66
|
+
* github_account / github_app / app_slug_reconcile is enabled, the
|
|
67
|
+
* interview's App questions, the ingress shapes on offer, verification. */
|
|
68
|
+
githubAuth: "github_auth",
|
|
69
|
+
/** The person's GitHub login, from `GET /user` with their own token (own-
|
|
70
|
+
* account route). The interview's owner-login answer and `[github]
|
|
71
|
+
* bot_login` both come from it. */
|
|
72
|
+
accountLogin: "github_account_login",
|
|
73
|
+
/** "owner/name" the person picked from the repos their account reaches
|
|
74
|
+
* (own-account route). The interview reads it as its repo answer. */
|
|
75
|
+
accountRepo: "github_account_repo",
|
|
59
76
|
/** "owner/name" of the reviewed repo. Written by the interview; read by the
|
|
60
77
|
* GitHub App step and the proof round. */
|
|
61
78
|
repo: "reviewed_repo",
|
|
@@ -119,6 +136,9 @@ export const CHOICE_KEYS = {
|
|
|
119
136
|
*/
|
|
120
137
|
export const CHOICE_WRITERS = {
|
|
121
138
|
uid: ["preflight"],
|
|
139
|
+
githubAuth: ["github_account"],
|
|
140
|
+
accountLogin: ["github_account"],
|
|
141
|
+
accountRepo: ["github_account"],
|
|
122
142
|
topology: ["topology"],
|
|
123
143
|
sshAlias: ["topology"],
|
|
124
144
|
sshUser: ["ssh_preflight"],
|
|
@@ -133,7 +153,7 @@ export const CHOICE_WRITERS = {
|
|
|
133
153
|
dryRun: ["config_fill"],
|
|
134
154
|
labels: ["config_fill"],
|
|
135
155
|
appSlug: ["config_fill", "github_app", "app_slug_reconcile"],
|
|
136
|
-
botLogin: ["github_app", "app_slug_reconcile"],
|
|
156
|
+
botLogin: ["github_account", "github_app", "app_slug_reconcile"],
|
|
137
157
|
appId: ["github_app"],
|
|
138
158
|
appTarget: ["github_app"],
|
|
139
159
|
appName: ["github_app"],
|
|
@@ -184,6 +204,14 @@ export function memberOf(vocabulary, value) {
|
|
|
184
204
|
export function authRouteOf(choices) {
|
|
185
205
|
return memberOf(AUTH_ROUTES, raw(choices, CHOICE_KEYS.authRoute));
|
|
186
206
|
}
|
|
207
|
+
/** The recorded GitHub auth route, or null while unanswered. */
|
|
208
|
+
export function githubAuthOf(choices) {
|
|
209
|
+
return memberOf(GITHUB_AUTH_CHOICES, raw(choices, CHOICE_KEYS.githubAuth));
|
|
210
|
+
}
|
|
211
|
+
/** Is the own-account route recorded? (Unanswered is NOT user mode.) */
|
|
212
|
+
export function userAuthRecorded(choices) {
|
|
213
|
+
return githubAuthOf(choices) === "user";
|
|
214
|
+
}
|
|
187
215
|
/** The recorded ingress shape, or null when the ingress step has not run. */
|
|
188
216
|
export function ingressChoiceOf(choices) {
|
|
189
217
|
return memberOf(INGRESS_CHOICES, raw(choices, CHOICE_KEYS.ingress));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choices.js","sourceRoot":"","sources":["../../../src/onboard/choices.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"choices.js","sourceRoot":"","sources":["../../../src/onboard/choices.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,3 @@
|
|
|
1
|
-
// OnboardingEngine — the seam of the onboarding wizard: a checklist state
|
|
2
|
-
// machine plus deterministic step implementations behind injected adapters.
|
|
3
|
-
// pi is a thin driver over this engine (extensions/onboarding.ts registers one
|
|
4
|
-
// tool per step); the engine
|
|
5
|
-
// itself is fully drivable from tests and from a non-LLM fallback entry, and
|
|
6
|
-
// nothing in here touches the network, Docker, or a real pi except through
|
|
7
|
-
// the adapters.
|
|
8
|
-
//
|
|
9
|
-
// Resumability contract:
|
|
10
|
-
// - checklist state persists to state/onboarding/checklist.json after every
|
|
11
|
-
// step, tmp+rename atomic (the verdicts.ts convention);
|
|
12
|
-
// - startup reconciles claimed state against reality: a step claimed done is
|
|
13
|
-
// re-verified with its verify(), never trusted from the file alone;
|
|
14
|
-
// - a fully-done checklist re-runs as verify-only (the wizard doubles as a
|
|
15
|
-
// diagnostic);
|
|
16
|
-
// - a corrupt/unreadable checklist degrades to a fresh one (the resume
|
|
17
|
-
// re-verifies everything anyway) — never a crash.
|
|
18
|
-
//
|
|
19
|
-
// The finish path writes the first-run marker state/companion/first-run.json
|
|
20
|
-
// ({"completed_at": "<iso>"}) exactly once — the contract the companion's
|
|
21
|
-
// first-run greeting consumes. Keep the path and shape stable.
|
|
22
1
|
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
23
2
|
import { basename, dirname, join, resolve } from "node:path";
|
|
24
3
|
export function failures(checks) {
|
|
@@ -187,6 +166,7 @@ export class OnboardingEngine {
|
|
|
187
166
|
explain: step.explain,
|
|
188
167
|
status: this.enabled(step) ? (rec?.status ?? "pending") : "disabled",
|
|
189
168
|
note: rec?.note ?? null,
|
|
169
|
+
...(step.optional ? { optional: true } : {}),
|
|
190
170
|
};
|
|
191
171
|
});
|
|
192
172
|
}
|
|
@@ -309,10 +289,15 @@ export class OnboardingEngine {
|
|
|
309
289
|
rec.note = "verified green without a recorded run";
|
|
310
290
|
}
|
|
311
291
|
}
|
|
312
|
-
results.push({
|
|
292
|
+
results.push({
|
|
293
|
+
id: step.id,
|
|
294
|
+
ok: outcome.ok,
|
|
295
|
+
failures: failures(outcome.checks),
|
|
296
|
+
...(step.optional ? { optional: true } : {}),
|
|
297
|
+
});
|
|
313
298
|
}
|
|
314
299
|
this.save();
|
|
315
|
-
return { ok: results.every((r) => r.ok), results };
|
|
300
|
+
return { ok: results.every((r) => r.ok || r.optional === true), results };
|
|
316
301
|
}
|
|
317
302
|
/**
|
|
318
303
|
* The finish tool's engine half: re-run the full verification checklist.
|