@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.
Files changed (225) hide show
  1. package/README.md +35 -19
  2. package/config.example.toml +41 -9
  3. package/dist/extensions/cli/login-route.js +5 -0
  4. package/dist/extensions/cli/login-route.js.map +1 -0
  5. package/dist/extensions/login-route.js +180 -0
  6. package/dist/extensions/login-route.js.map +1 -0
  7. package/dist/extensions/onboarding.js +29 -6
  8. package/dist/extensions/onboarding.js.map +1 -1
  9. package/dist/src/ciretry.js +2 -1
  10. package/dist/src/ciretry.js.map +1 -1
  11. package/dist/src/cli.js +43 -12
  12. package/dist/src/cli.js.map +1 -1
  13. package/dist/src/cliops.js +3 -2
  14. package/dist/src/cliops.js.map +1 -1
  15. package/dist/src/commands.js +25 -2
  16. package/dist/src/commands.js.map +1 -1
  17. package/dist/src/config.js +16 -2
  18. package/dist/src/config.js.map +1 -1
  19. package/dist/src/daemon.js +24 -8
  20. package/dist/src/daemon.js.map +1 -1
  21. package/dist/src/debugroundpi.js +5 -1
  22. package/dist/src/debugroundpi.js.map +1 -1
  23. package/dist/src/dispatch.js +5 -4
  24. package/dist/src/dispatch.js.map +1 -1
  25. package/dist/src/engine/debugpi.js +17 -5
  26. package/dist/src/engine/debugpi.js.map +1 -1
  27. package/dist/src/execboundary.js +10 -3
  28. package/dist/src/execboundary.js.map +1 -1
  29. package/dist/src/github.js +51 -16
  30. package/dist/src/github.js.map +1 -1
  31. package/dist/src/githubtoken.js +346 -0
  32. package/dist/src/githubtoken.js.map +1 -0
  33. package/dist/src/loginhint.js +8 -3
  34. package/dist/src/loginhint.js.map +1 -1
  35. package/dist/src/loginrefresh/pirefresh.js +3 -0
  36. package/dist/src/loginrefresh/pirefresh.js.map +1 -1
  37. package/dist/src/npmverbs.js +4 -2
  38. package/dist/src/npmverbs.js.map +1 -1
  39. package/dist/src/onboard/choices.js +29 -1
  40. package/dist/src/onboard/choices.js.map +1 -1
  41. package/dist/src/onboard/engine.js +8 -23
  42. package/dist/src/onboard/engine.js.map +1 -1
  43. package/dist/src/onboard/launch.js +12 -20
  44. package/dist/src/onboard/launch.js.map +1 -1
  45. package/dist/src/onboard/pipin.js +22 -0
  46. package/dist/src/onboard/pipin.js.map +1 -0
  47. package/dist/src/onboard/stepforward.js +41 -0
  48. package/dist/src/onboard/stepforward.js.map +1 -0
  49. package/dist/src/onboard/steps/appslug.js +4 -1
  50. package/dist/src/onboard/steps/appslug.js.map +1 -1
  51. package/dist/src/onboard/steps/compose.js +29 -0
  52. package/dist/src/onboard/steps/compose.js.map +1 -1
  53. package/dist/src/onboard/steps/configfill.js +102 -32
  54. package/dist/src/onboard/steps/configfill.js.map +1 -1
  55. package/dist/src/onboard/steps/githubaccount.js +595 -0
  56. package/dist/src/onboard/steps/githubaccount.js.map +1 -0
  57. package/dist/src/onboard/steps/githubapp.js +65 -7
  58. package/dist/src/onboard/steps/githubapp.js.map +1 -1
  59. package/dist/src/onboard/steps/golive.js +2 -0
  60. package/dist/src/onboard/steps/golive.js.map +1 -1
  61. package/dist/src/onboard/steps/index.js +11 -0
  62. package/dist/src/onboard/steps/index.js.map +1 -1
  63. package/dist/src/onboard/steps/ingress.js +80 -25
  64. package/dist/src/onboard/steps/ingress.js.map +1 -1
  65. package/dist/src/onboard/steps/llmauth.js +103 -30
  66. package/dist/src/onboard/steps/llmauth.js.map +1 -1
  67. package/dist/src/onboard/steps/memory.js +53 -1
  68. package/dist/src/onboard/steps/memory.js.map +1 -1
  69. package/dist/src/onboard/steps/proof.js +366 -56
  70. package/dist/src/onboard/steps/proof.js.map +1 -1
  71. package/dist/src/onboard/steps/topology.js +6 -6
  72. package/dist/src/onboard/steps/topology.js.map +1 -1
  73. package/dist/src/onboard/steps/transport.js +9 -1
  74. package/dist/src/onboard/steps/transport.js.map +1 -1
  75. package/dist/src/onboard/steps/tuiroute.js +102 -0
  76. package/dist/src/onboard/steps/tuiroute.js.map +1 -0
  77. package/dist/src/onboard/steps/verifyup.js +17 -1
  78. package/dist/src/onboard/steps/verifyup.js.map +1 -1
  79. package/dist/src/onboard/toolnames.js +30 -0
  80. package/dist/src/onboard/toolnames.js.map +1 -0
  81. package/dist/src/operatorwrite.js +23 -0
  82. package/dist/src/operatorwrite.js.map +1 -0
  83. package/dist/src/outcomes.js +4 -1
  84. package/dist/src/outcomes.js.map +1 -1
  85. package/dist/src/posting-journal.js +2 -1
  86. package/dist/src/posting-journal.js.map +1 -1
  87. package/dist/src/posting-outbox.js +6 -2
  88. package/dist/src/posting-outbox.js.map +1 -1
  89. package/dist/src/posting-receipt.js +14 -1
  90. package/dist/src/posting-receipt.js.map +1 -1
  91. package/dist/src/recheck.js +2 -1
  92. package/dist/src/recheck.js.map +1 -1
  93. package/dist/src/reconcile.js +22 -2
  94. package/dist/src/reconcile.js.map +1 -1
  95. package/dist/src/reviewhistory.js +32 -6
  96. package/dist/src/reviewhistory.js.map +1 -1
  97. package/dist/src/reviewnow.js +45 -0
  98. package/dist/src/reviewnow.js.map +1 -0
  99. package/dist/src/state.js.map +1 -1
  100. package/dist/src/statemachine.js +4 -1
  101. package/dist/src/statemachine.js.map +1 -1
  102. package/dist/src/takeoverpi.js +13 -0
  103. package/dist/src/takeoverpi.js.map +1 -1
  104. package/dist/src/tui/app.js +49 -0
  105. package/dist/src/tui/app.js.map +1 -1
  106. package/dist/src/tui/board.js +88 -12
  107. package/dist/src/tui/board.js.map +1 -1
  108. package/dist/src/tui/cmdbar.js +4 -1
  109. package/dist/src/tui/cmdbar.js.map +1 -1
  110. package/dist/src/tui/companion.js +74 -10
  111. package/dist/src/tui/companion.js.map +1 -1
  112. package/dist/src/tui/connect.js +7 -1
  113. package/dist/src/tui/connect.js.map +1 -1
  114. package/dist/src/tui/filters.js +5 -2
  115. package/dist/src/tui/filters.js.map +1 -1
  116. package/dist/src/tui/ghread.js +61 -5
  117. package/dist/src/tui/ghread.js.map +1 -1
  118. package/dist/src/tui/index.js +106 -20
  119. package/dist/src/tui/index.js.map +1 -1
  120. package/dist/src/tui/memforward.js +39 -2
  121. package/dist/src/tui/memforward.js.map +1 -1
  122. package/dist/src/tui/model.js +25 -0
  123. package/dist/src/tui/model.js.map +1 -1
  124. package/dist/src/tui/prpause.js +7 -0
  125. package/dist/src/tui/prpause.js.map +1 -1
  126. package/dist/src/tui/remote.js +7 -1
  127. package/dist/src/tui/remote.js.map +1 -1
  128. package/dist/src/tui/route.js +143 -0
  129. package/dist/src/tui/route.js.map +1 -0
  130. package/dist/src/tui/setupstate.js +29 -0
  131. package/dist/src/tui/setupstate.js.map +1 -0
  132. package/dist/src/tui/sshtriage.js +102 -5
  133. package/dist/src/tui/sshtriage.js.map +1 -1
  134. package/dist/src/tui/theme.js +2 -1
  135. package/dist/src/tui/theme.js.map +1 -1
  136. package/dist/src/tui/unwedge.js +2 -12
  137. package/dist/src/tui/unwedge.js.map +1 -1
  138. package/dist/src/verdicts.js +17 -5
  139. package/dist/src/verdicts.js.map +1 -1
  140. package/dist/src/version.js +1 -1
  141. package/dist/src/version.js.map +1 -1
  142. package/dist/src/webhook.js +12 -1
  143. package/dist/src/webhook.js.map +1 -1
  144. package/dist/src/wire.js +28 -6
  145. package/dist/src/wire.js.map +1 -1
  146. package/dist/src/workerworld.js +7 -1
  147. package/dist/src/workerworld.js.map +1 -1
  148. package/docker/companion/entrypoint.sh +20 -1
  149. package/docker/entrypoint.sh +17 -0
  150. package/extensions/cli/login-route.ts +10 -0
  151. package/extensions/login-route.ts +220 -0
  152. package/extensions/onboarding.ts +35 -6
  153. package/package.json +2 -2
  154. package/prompts/onboarding.md +57 -18
  155. package/scripts/mint-token.sh +25 -4
  156. package/src/ciretry.ts +2 -1
  157. package/src/cli.ts +49 -14
  158. package/src/cliops.ts +3 -2
  159. package/src/commands.ts +28 -2
  160. package/src/config.ts +24 -4
  161. package/src/daemon.ts +32 -7
  162. package/src/debugroundpi.ts +11 -1
  163. package/src/dispatch.ts +5 -4
  164. package/src/engine/debugpi.ts +17 -5
  165. package/src/execboundary.ts +16 -4
  166. package/src/github.ts +57 -15
  167. package/src/githubtoken.ts +435 -0
  168. package/src/loginhint.ts +8 -3
  169. package/src/loginrefresh/pirefresh.ts +3 -0
  170. package/src/npmverbs.ts +4 -2
  171. package/src/onboard/choices.ts +34 -1
  172. package/src/onboard/engine.ts +22 -3
  173. package/src/onboard/launch.ts +17 -29
  174. package/src/onboard/pipin.ts +31 -0
  175. package/src/onboard/stepforward.ts +61 -0
  176. package/src/onboard/steps/appslug.ts +4 -1
  177. package/src/onboard/steps/compose.ts +31 -0
  178. package/src/onboard/steps/configfill.ts +121 -33
  179. package/src/onboard/steps/githubaccount.ts +716 -0
  180. package/src/onboard/steps/githubapp.ts +92 -8
  181. package/src/onboard/steps/golive.ts +2 -0
  182. package/src/onboard/steps/index.ts +11 -0
  183. package/src/onboard/steps/ingress.ts +98 -31
  184. package/src/onboard/steps/llmauth.ts +114 -29
  185. package/src/onboard/steps/memory.ts +58 -1
  186. package/src/onboard/steps/proof.ts +473 -55
  187. package/src/onboard/steps/topology.ts +7 -6
  188. package/src/onboard/steps/transport.ts +15 -0
  189. package/src/onboard/steps/tuiroute.ts +119 -0
  190. package/src/onboard/steps/verifyup.ts +20 -1
  191. package/src/onboard/toolnames.ts +34 -0
  192. package/src/operatorwrite.ts +25 -0
  193. package/src/outcomes.ts +8 -1
  194. package/src/posting-journal.ts +6 -1
  195. package/src/posting-outbox.ts +10 -2
  196. package/src/posting-receipt.ts +17 -0
  197. package/src/recheck.ts +2 -1
  198. package/src/reconcile.ts +29 -3
  199. package/src/reviewhistory.ts +20 -6
  200. package/src/reviewnow.ts +76 -0
  201. package/src/state.ts +18 -0
  202. package/src/statemachine.ts +4 -1
  203. package/src/takeoverpi.ts +13 -0
  204. package/src/tui/app.ts +47 -0
  205. package/src/tui/board.ts +111 -14
  206. package/src/tui/cmdbar.ts +4 -1
  207. package/src/tui/companion.ts +78 -10
  208. package/src/tui/connect.ts +7 -1
  209. package/src/tui/filters.ts +7 -3
  210. package/src/tui/ghread.ts +74 -7
  211. package/src/tui/index.ts +114 -23
  212. package/src/tui/memforward.ts +52 -3
  213. package/src/tui/model.ts +36 -2
  214. package/src/tui/prpause.ts +11 -2
  215. package/src/tui/remote.ts +9 -1
  216. package/src/tui/route.ts +173 -0
  217. package/src/tui/setupstate.ts +52 -0
  218. package/src/tui/sshtriage.ts +127 -6
  219. package/src/tui/theme.ts +2 -1
  220. package/src/tui/unwedge.ts +2 -14
  221. package/src/verdicts.ts +23 -5
  222. package/src/version.ts +1 -1
  223. package/src/webhook.ts +10 -1
  224. package/src/wire.ts +36 -7
  225. 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":"AAAA,kEAAkE;AAClE,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAC7E,0EAA0E;AAC1E,0EAA0E;AAC1E,uBAAuB;AACvB,EAAE;AACF,2EAA2E;AAC3E,4CAA4C;AAC5C,EAAE;AACF,uEAAuE;AACvE,+EAA+E;AAC/E,yEAAyE;AACzE,8EAA8E;AAC9E,qEAAqE;AACrE,gEAAgE;AAChE,8EAA8E;AAC9E,EAAE;AACF,6EAA6E;AAC7E,wEAAwE;AACxE,kCAAkC;AAClC,EAAE;AACF,4EAA4E;AAC5E,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,2CAA2C;AAC3C,EAAE;AACF,4EAA4E;AAC5E,0DAA0D;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAEhF,6FAA6F;AAC7F,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAEjD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,WAAW,GAAG,yBAAyB,CAAC;AAErD,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAgB5C,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC;QACjC,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,kEAAkE;YACzE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;QAC1B,OAAO;YACL,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,sFAAsF;YAC7F,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,uCAAuC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5F,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;QAC1B,OAAO;YACL,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,6DAA6D;YACpE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;QAC1B,OAAO;YACL,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,yDAAyD;YAChE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,+BAA+B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACtF,CAAC;AAED,4EAA4E;AAC5E,MAAM,QAAQ,GAAG,wBAAwB,CAAC;AAO1C;wEACwE;AACxE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAmB;IACrD,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,CAIrC;IACC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACf,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACrB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,qDAAqD,EAAE,CAAC;QAC9F,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,cAAc,CAAU,EAAE,CAAC;QACzD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE;YAAE,SAAS;QACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,4BAA4B,EAAE,CAAC;QAC1F,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;IACvD,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9E,OAAO;QACL,EAAE,EAAE,KAAK;QACT,OAAO,EACL,8BAA8B,EAAE,8BAA8B,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,4BAA4B;YAChH,wEAAwE;KAC3E,CAAC;AACJ,CAAC;AAMD,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAqB,EACrB,KAAa,EACb,OAAO,GAAG,wBAAwB;IAElC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,OAAO,EAAE;YAC3C,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,MAAM,EAAE,6BAA6B;gBACrC,YAAY,EAAE,+BAA+B;aAC9C;YACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,IAAI,GAAY,IAAI,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,GAAI,IAAmC,EAAE,KAAK,CAAC;QAC1D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACpE,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,wCAAwC,CAAC,IAAI,IAAI,CAAC;YACpF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5F,CAAC;QACD,MAAM,OAAO,GAAI,IAAqC,EAAE,OAAO,CAAC;QAChE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,2BAA2B,GAAG,CAAC,MAAM,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;SACpG,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,qBAAqB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC9E,CAAC;AACH,CAAC;AAED;gEACgE;AAChE,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,KAAa;IAC9D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC9F,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,iBAAiB,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3C,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAaD;gFACgF;AAChF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,CAOrC;IACC,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,CAAC,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,GAAG,CAAC;IACxB,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,GAAG,CAAC,MAAM,KAAK,GAAG;gBAChB,CAAC,CAAC,kCAAkC,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,0EAA0E;gBACvI,CAAC,CAAC,kCAAkC,GAAG,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAM,sCAAsC;SACpH,CAAC;IACJ,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,mBAAmB,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE;SACpF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI;KACL,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,CAAa;IACtC,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,wBAAwB,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,OAAO,CACL,qCAAqC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;QACjF,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,MAAM,gBAAgB,CAAC,CAAC,IAAI,SAAS,CAC3G,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF,gEAAgE;AAChE,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC1F,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED;;mBAEmB;AACnB,MAAM,UAAU,gBAAgB,CAAC,CAKhC;IACC,OAAO;QACL,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,GAAG;QACL,cAAc;QACd,MAAM;QACN,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,eAAe;QACf,CAAC,CAAC,UAAU;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAyC;IACvE,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAyC;IAChE,OAAO,GAAG,aAAa,IAAI,eAAe,CAAC,CAAC,CAAC,oBAAoB,WAAW,EAAE,CAAC;AACjF,CAAC;AAED;kEACkE;AAClE,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,IAAY;IACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;AAC5C,CAAC;AAQD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,CAItC;IACC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChG,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;SAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC3D,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,qBAAqB,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SACxG,CAAC;IACJ,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;YAChB,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,WAAW,IAAI,WAAW,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aACjG,CAAC;IACN,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAmB,EACnB,EAAiB;IAEjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,YAAY,CAAC;IACxE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,KAAK,CAAC,IAAI,CAAC;SACX,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,MAAM,kBAAkB,GAC7B,wEAAwE,CAAC;AAE3E,MAAM,UAAU,oBAAoB,CAAC,IAAuB;IAI1D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5D,IAAI,EAAE,GAAkB,IAAI,CAAC;IAC7B,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,eAAe,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAClF,IAAI,CAAC,KAAK,MAAM;gBAAE,EAAE,GAAG,CAAC,CAAC;;gBACpB,UAAU,GAAG,CAAC,CAAC;YACpB,CAAC,EAAE,CAAC;QACN,CAAC;;YAAM,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;AAC5B,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CACjB,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACnB,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAC/D,MAAM,IAAI,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,IAAI,CAAC;gBACH,IAAI;gBACJ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;gBACtB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;CACL,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAuB,EACvB,IAOC;IAED,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,UAAU;QACjC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;QAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK;QAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;QAChD,EAAE,EAAE,IAAI,CAAC,EAAE;KACZ,CAAC,CAAC;IACH,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC"}
@@ -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 refusal names
6
- // `qcr login`, the way to get the login.
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 (logins[p] !== undefined || keyOf(p) !== null)
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,yCAAyC;AACzC,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;AAExD,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,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,SAAS;QAC3D,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"}
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"}
@@ -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
- "The default review models run on a ChatGPT login (openai-codex); an API key in the",
121
- "environment does not stand in for it: log in, or set the review's models in your qcr config.",
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
  }
@@ -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({ id: step.id, ok: outcome.ok, failures: failures(outcome.checks) });
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.