@quickchatai/pi-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/assets/config.example.toml +41 -9
- package/assets/prompts/onboarding.md +57 -18
- package/dist/src/engine/envmap.d.ts.map +1 -1
- package/dist/src/engine/envmap.js +5 -0
- package/dist/src/engine/envmap.js.map +1 -1
- package/dist/src/engine/pisdk.d.ts +9 -0
- package/dist/src/engine/pisdk.d.ts.map +1 -1
- package/dist/src/engine/pisdk.js +29 -4
- package/dist/src/engine/pisdk.js.map +1 -1
- package/dist/src/githubAuth.d.ts +39 -1
- package/dist/src/githubAuth.d.ts.map +1 -1
- package/dist/src/githubAuth.js +75 -8
- package/dist/src/githubAuth.js.map +1 -1
- package/dist/src/guards.d.ts +14 -1
- package/dist/src/guards.d.ts.map +1 -1
- package/dist/src/guards.js +61 -2
- package/dist/src/guards.js.map +1 -1
- package/dist/src/identity.d.ts +34 -0
- package/dist/src/identity.d.ts.map +1 -0
- package/dist/src/identity.js +67 -0
- package/dist/src/identity.js.map +1 -0
- package/dist/src/modelroute.d.ts +38 -0
- package/dist/src/modelroute.d.ts.map +1 -0
- package/dist/src/modelroute.js +105 -0
- package/dist/src/modelroute.js.map +1 -0
- package/dist/src/plugin/login.d.ts +3 -0
- package/dist/src/plugin/login.d.ts.map +1 -1
- package/dist/src/plugin/login.js +11 -2
- package/dist/src/plugin/login.js.map +1 -1
- package/dist/src/plugin/review.d.ts.map +1 -1
- package/dist/src/plugin/review.js +8 -4
- package/dist/src/plugin/review.js.map +1 -1
- package/dist/src/reviewconfig.d.ts +12 -0
- package/dist/src/reviewconfig.d.ts.map +1 -1
- package/dist/src/reviewconfig.js +9 -1
- package/dist/src/reviewconfig.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"githubAuth.js","sourceRoot":"","sources":["../../src/githubAuth.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"githubAuth.js","sourceRoot":"","sources":["../../src/githubAuth.ts"],"names":[],"mappings":"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"}
|
package/dist/src/guards.d.ts
CHANGED
|
@@ -4,7 +4,9 @@ import type { MutationGuard } from "./gate.js";
|
|
|
4
4
|
import type { ReviewedHeadRow } from "./storerows.js";
|
|
5
5
|
/** A bot's login: the App's own, or any `[bot]` account. Bot-authored PRs
|
|
6
6
|
* never enter the state machine (spec §3, src/statemachine.ts re-exports
|
|
7
|
-
* this), and a bot's approval is no human's.
|
|
7
|
+
* this), and a bot's approval is no human's. `botLogin` is the bot ACCOUNT
|
|
8
|
+
* (identity.ts `botAccountLogin`); "" — person mode, which has none — names
|
|
9
|
+
* no login, so only `[bot]` accounts match. */
|
|
8
10
|
export declare function isBotAuthor(author: string, botLogin: string): boolean;
|
|
9
11
|
/** Mutation kinds that put words on a PR — the ones the guards inspect. */
|
|
10
12
|
export declare const POSTING_KINDS: ReadonlySet<string>;
|
|
@@ -50,6 +52,10 @@ export interface GuardDeps {
|
|
|
50
52
|
adapter: GuardAdapter;
|
|
51
53
|
botLogin: string;
|
|
52
54
|
guards: GuardsConfig;
|
|
55
|
+
/** `[github] auth = "user"` (person mode): the review posts on the person's
|
|
56
|
+
* own account, so every APPROVE / REQUEST_CHANGES is posted as a COMMENT
|
|
57
|
+
* whose body states the verdict (`personModeComment`). */
|
|
58
|
+
personMode?: boolean;
|
|
53
59
|
log?: (msg: string, extra?: unknown) => void;
|
|
54
60
|
}
|
|
55
61
|
/** The review payload as it appears inside a `create_review` intent — the
|
|
@@ -88,6 +94,13 @@ export declare function hasNewEvidence(mark: ReviewedHeadRow | undefined, headSh
|
|
|
88
94
|
/** Why a posting mutation was refused. Short tags — they land in the event log
|
|
89
95
|
* and in `GateResult.blocked`. */
|
|
90
96
|
export type BlockReason = "pr-merged" | "pr-closed" | "pr-unreadable" | "no-new-evidence" | "head-drift";
|
|
97
|
+
/** The line a person-mode review carries in place of the GitHub event it
|
|
98
|
+
* could not use. The verdict is the session's, decided on the merits; only
|
|
99
|
+
* the event changed. */
|
|
100
|
+
export declare function personModeNote(verdict: "APPROVE" | "REQUEST_CHANGES"): string;
|
|
101
|
+
/** APPROVE / REQUEST_CHANGES → COMMENT, findings untouched, the verdict
|
|
102
|
+
* stated in the body. A COMMENT (and anything else) passes as it is. */
|
|
103
|
+
export declare function personModeComment(body: ReviewBody): ReviewBody;
|
|
91
104
|
export declare function makePostingGuard(deps: GuardDeps): MutationGuard;
|
|
92
105
|
export {};
|
|
93
106
|
//# sourceMappingURL=guards.d.ts.map
|
package/dist/src/guards.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"AAwCA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,YAAY,EAElB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"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"}
|
package/dist/src/guards.js
CHANGED
|
@@ -42,9 +42,11 @@ import { ciBlocksApproval, classifyCi, withholdApproval, } from "./cigate.js";
|
|
|
42
42
|
import { standingReview } from "./standing-review.js";
|
|
43
43
|
/** A bot's login: the App's own, or any `[bot]` account. Bot-authored PRs
|
|
44
44
|
* never enter the state machine (spec §3, src/statemachine.ts re-exports
|
|
45
|
-
* this), and a bot's approval is no human's.
|
|
45
|
+
* this), and a bot's approval is no human's. `botLogin` is the bot ACCOUNT
|
|
46
|
+
* (identity.ts `botAccountLogin`); "" — person mode, which has none — names
|
|
47
|
+
* no login, so only `[bot]` accounts match. */
|
|
46
48
|
export function isBotAuthor(author, botLogin) {
|
|
47
|
-
return author === botLogin || author.endsWith("[bot]");
|
|
49
|
+
return (botLogin !== "" && author === botLogin) || author.endsWith("[bot]");
|
|
48
50
|
}
|
|
49
51
|
/** Mutation kinds that put words on a PR — the ones the guards inspect. */
|
|
50
52
|
export const POSTING_KINDS = new Set([
|
|
@@ -146,7 +148,64 @@ async function readCi(deps, pr, head, log) {
|
|
|
146
148
|
return null;
|
|
147
149
|
}
|
|
148
150
|
}
|
|
151
|
+
// ---- person mode: every review is a COMMENT ------------------------------
|
|
152
|
+
/** The line a person-mode review carries in place of the GitHub event it
|
|
153
|
+
* could not use. The verdict is the session's, decided on the merits; only
|
|
154
|
+
* the event changed. */
|
|
155
|
+
export function personModeNote(verdict) {
|
|
156
|
+
const said = verdict === "APPROVE"
|
|
157
|
+
? "**Verdict: APPROVE** — no blockers found."
|
|
158
|
+
: "**Verdict: REQUEST_CHANGES** — the blockers above need fixing before this merges.";
|
|
159
|
+
return (`_${said} Posted as a comment: this reviewer runs on a person's own GitHub account, ` +
|
|
160
|
+
"and an automated verdict must never count as that person's approval or block " +
|
|
161
|
+
"(GitHub refuses both on an author's own pull request)._");
|
|
162
|
+
}
|
|
163
|
+
/** APPROVE / REQUEST_CHANGES → COMMENT, findings untouched, the verdict
|
|
164
|
+
* stated in the body. A COMMENT (and anything else) passes as it is. */
|
|
165
|
+
export function personModeComment(body) {
|
|
166
|
+
const event = (body.event ?? "").toUpperCase();
|
|
167
|
+
if (event !== "APPROVE" && event !== "REQUEST_CHANGES")
|
|
168
|
+
return body;
|
|
169
|
+
return {
|
|
170
|
+
...body,
|
|
171
|
+
event: "COMMENT",
|
|
172
|
+
body: `${body.body ?? ""}\n\n${personModeNote(event)}`,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/** The person-mode step, after every other guard: whatever they decided
|
|
176
|
+
* (refuse, soften, nothing), a review that would still post a verdict event
|
|
177
|
+
* posts as a COMMENT. Never on a refused intent; only `body` and `note`
|
|
178
|
+
* change, as every guard rewrite. */
|
|
179
|
+
function personModeStep(intent, decision) {
|
|
180
|
+
if (decision.block)
|
|
181
|
+
return decision;
|
|
182
|
+
const current = decision.intent ?? intent;
|
|
183
|
+
if (current.kind !== "create_review")
|
|
184
|
+
return decision;
|
|
185
|
+
const body = (current.body ?? {});
|
|
186
|
+
const rewritten = personModeComment(body);
|
|
187
|
+
if (rewritten === body)
|
|
188
|
+
return decision;
|
|
189
|
+
return {
|
|
190
|
+
intent: {
|
|
191
|
+
...current,
|
|
192
|
+
body: rewritten,
|
|
193
|
+
note: `post COMMENT review on #${current.pr ?? "?"} (person mode: verdict ${(body.event ?? "").toUpperCase()} stated in the body)`,
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
}
|
|
149
197
|
export function makePostingGuard(deps) {
|
|
198
|
+
const guard = makeAppPostingGuard(deps);
|
|
199
|
+
if (!deps.personMode)
|
|
200
|
+
return guard;
|
|
201
|
+
return {
|
|
202
|
+
async before(intent) {
|
|
203
|
+
return personModeStep(intent, await guard.before(intent));
|
|
204
|
+
},
|
|
205
|
+
...(guard.after ? { after: guard.after.bind(guard) } : {}),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function makeAppPostingGuard(deps) {
|
|
150
209
|
const log = deps.log ?? (() => { });
|
|
151
210
|
const refuse = (intent, pr, reason, extra = {}) => {
|
|
152
211
|
log(`guard: refused ${intent.kind} on #${pr} — ${reason}`);
|
package/dist/src/guards.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,8CAA8C;AAC9C,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,yEAAyE;AACzE,iEAAiE;AACjE,8DAA8D;AAC9D,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AAC7E,kCAAkC;AAClC,6EAA6E;AAC7E,4EAA4E;AAC5E,0EAA0E;AAC1E,2EAA2E;AAC3E,gEAAgE;AAChE,8EAA8E;AAC9E,6EAA6E;AAC7E,+BAA+B;AAC/B,2EAA2E;AAC3E,+EAA+E;AAC/E,6EAA6E;AAC7E,qBAAqB;AACrB,EAAE;AACF,+EAA+E;AAC/E,yEAAyE;AACzE,iEAAiE;AACjE,4EAA4E;AAC5E,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,SAAS;AACT,0EAA0E;AAC1E,sEAAsE;AACtE,EAAE;AACF,+EAA+E;AAC/E,yEAAyE;AACzE,2EAA2E;AAC3E,uBAAuB;AACvB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,gBAAgB,GAIjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKtD
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { GithubAuthMode, GithubConfig } from "./reviewconfig.js";
|
|
2
|
+
/** What the identity rules read off `[github]`. */
|
|
3
|
+
export type GithubIdentity = Pick<GithubConfig, "auth" | "bot_login" | "app_slug">;
|
|
4
|
+
export declare function authMode(g: Pick<GithubConfig, "auth">): GithubAuthMode;
|
|
5
|
+
/** `[github] auth = "user"`: the person's own credential, posting as them. */
|
|
6
|
+
export declare function isPersonMode(g: Pick<GithubConfig, "auth">): boolean;
|
|
7
|
+
/** The body carries something only the reviewer writes. */
|
|
8
|
+
export declare function carriesOwnMarker(body: string | null | undefined): boolean;
|
|
9
|
+
/** The logins the reviewer's content is posted under. App mode: the
|
|
10
|
+
* configured bot login and the App's `<slug>[bot]` (when a slug is set).
|
|
11
|
+
* Person mode: the person's login alone. Never an empty string. */
|
|
12
|
+
export declare function ownLogins(g: GithubIdentity): string[];
|
|
13
|
+
/** GraphQL's bare App actor, only for a matching configured bot login, and
|
|
14
|
+
* never in person mode (there is no App). */
|
|
15
|
+
export declare function ownActorAlias(g: GithubIdentity): string | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Is this review or comment the reviewer's own? App mode: by its login (one
|
|
18
|
+
* of `ownLogins`, or the bare App actor), as it always was. Person mode: by
|
|
19
|
+
* the person's login AND a marker or the footer in its body — a comment the
|
|
20
|
+
* person typed themselves is a human comment.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isOwnContent(g: GithubIdentity, author: string | null | undefined, body: string | null | undefined): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* The login that is a BOT ACCOUNT, for the questions "is this PR a bot's PR"
|
|
25
|
+
* and "is this captured comment a bot's": the App's login in app mode, and ""
|
|
26
|
+
* in person mode — there the person's login is a person's, and only the
|
|
27
|
+
* `[bot]`-suffixed / `Bot`-typed accounts the call sites already exclude are
|
|
28
|
+
* bots.
|
|
29
|
+
*/
|
|
30
|
+
export declare function botAccountLogin(g: GithubIdentity): string;
|
|
31
|
+
/** The search qualifier that keeps the App's own PRs out of a search, or ""
|
|
32
|
+
* when there is no App slug (person mode, or an unset slug). */
|
|
33
|
+
export declare function excludeOwnAppQualifier(g: GithubIdentity): string;
|
|
34
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/identity.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtE,mDAAmD;AACnD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC,CAAC;AAEnF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,cAAc,CAEtE;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,OAAO,CAEnE;AASD,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAGzE;AAED;;mEAEmE;AACnE,wBAAgB,SAAS,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,EAAE,CAKrD;AAED;6CAC6C;AAC7C,wBAAgB,aAAa,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAGnE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,CAAC,EAAE,cAAc,EACjB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,OAAO,CAKT;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAEzD;AAED;gEACgE;AAChE,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAEhE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export function authMode(g) {
|
|
2
|
+
return g.auth === "user" ? "user" : "app";
|
|
3
|
+
}
|
|
4
|
+
/** `[github] auth = "user"`: the person's own credential, posting as them. */
|
|
5
|
+
export function isPersonMode(g) {
|
|
6
|
+
return authMode(g) === "user";
|
|
7
|
+
}
|
|
8
|
+
/** Every hidden marker the system writes opens `<!-- qcr-` or `<!-- qcr:`
|
|
9
|
+
* (posting key, finding, round, recheck, reply, migration, escalation,
|
|
10
|
+
* filing, author response). */
|
|
11
|
+
const OWN_MARKER_RE = /<!--\s*qcr[-:]/;
|
|
12
|
+
/** The review footer's fixed words (`renderedFooter`, reviewrender.ts). */
|
|
13
|
+
const OWN_FOOTER_RE = /\(quickreview sandbox\)/;
|
|
14
|
+
/** The body carries something only the reviewer writes. */
|
|
15
|
+
export function carriesOwnMarker(body) {
|
|
16
|
+
if (typeof body !== "string" || body === "")
|
|
17
|
+
return false;
|
|
18
|
+
return OWN_MARKER_RE.test(body) || OWN_FOOTER_RE.test(body);
|
|
19
|
+
}
|
|
20
|
+
/** The logins the reviewer's content is posted under. App mode: the
|
|
21
|
+
* configured bot login and the App's `<slug>[bot]` (when a slug is set).
|
|
22
|
+
* Person mode: the person's login alone. Never an empty string. */
|
|
23
|
+
export function ownLogins(g) {
|
|
24
|
+
const out = new Set();
|
|
25
|
+
if (g.bot_login)
|
|
26
|
+
out.add(g.bot_login);
|
|
27
|
+
if (!isPersonMode(g) && g.app_slug)
|
|
28
|
+
out.add(`${g.app_slug}[bot]`);
|
|
29
|
+
return [...out];
|
|
30
|
+
}
|
|
31
|
+
/** GraphQL's bare App actor, only for a matching configured bot login, and
|
|
32
|
+
* never in person mode (there is no App). */
|
|
33
|
+
export function ownActorAlias(g) {
|
|
34
|
+
if (isPersonMode(g) || !g.app_slug)
|
|
35
|
+
return undefined;
|
|
36
|
+
return g.bot_login === `${g.app_slug}[bot]` ? g.app_slug : undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Is this review or comment the reviewer's own? App mode: by its login (one
|
|
40
|
+
* of `ownLogins`, or the bare App actor), as it always was. Person mode: by
|
|
41
|
+
* the person's login AND a marker or the footer in its body — a comment the
|
|
42
|
+
* person typed themselves is a human comment.
|
|
43
|
+
*/
|
|
44
|
+
export function isOwnContent(g, author, body) {
|
|
45
|
+
const login = author ?? "";
|
|
46
|
+
if (login === "")
|
|
47
|
+
return false;
|
|
48
|
+
if (isPersonMode(g))
|
|
49
|
+
return login === g.bot_login && carriesOwnMarker(body);
|
|
50
|
+
return ownLogins(g).includes(login) || login === ownActorAlias(g);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The login that is a BOT ACCOUNT, for the questions "is this PR a bot's PR"
|
|
54
|
+
* and "is this captured comment a bot's": the App's login in app mode, and ""
|
|
55
|
+
* in person mode — there the person's login is a person's, and only the
|
|
56
|
+
* `[bot]`-suffixed / `Bot`-typed accounts the call sites already exclude are
|
|
57
|
+
* bots.
|
|
58
|
+
*/
|
|
59
|
+
export function botAccountLogin(g) {
|
|
60
|
+
return isPersonMode(g) ? "" : g.bot_login;
|
|
61
|
+
}
|
|
62
|
+
/** The search qualifier that keeps the App's own PRs out of a search, or ""
|
|
63
|
+
* when there is no App slug (person mode, or an unset slug). */
|
|
64
|
+
export function excludeOwnAppQualifier(g) {
|
|
65
|
+
return !isPersonMode(g) && g.app_slug ? ` -author:app/${g.app_slug}` : "";
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/identity.ts"],"names":[],"mappings":"AAuBA,MAAM,UAAU,QAAQ,CAAC,CAA6B;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5C,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,CAA6B;IACxD,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;AAChC,CAAC;AAED;;+BAE+B;AAC/B,MAAM,aAAa,GAAG,gBAAgB,CAAC;AACvC,2EAA2E;AAC3E,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAEhD,2DAA2D;AAC3D,MAAM,UAAU,gBAAgB,CAAC,IAA+B;IAC9D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAC1D,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED;;mEAEmE;AACnE,MAAM,UAAU,SAAS,CAAC,CAAiB;IACzC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,CAAC,CAAC,SAAS;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ;QAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC;AAED;6CAC6C;AAC7C,MAAM,UAAU,aAAa,CAAC,CAAiB;IAC7C,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IACrD,OAAO,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,CAAiB,EACjB,MAAiC,EACjC,IAA+B;IAE/B,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;IAC3B,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAC/B,IAAI,YAAY,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5E,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,CAAiB;IAC/C,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED;gEACgE;AAChE,MAAM,UAAU,sBAAsB,CAAC,CAAiB;IACtD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** The OpenAI providers, each the other's twin. */
|
|
2
|
+
export declare const OPENAI_PROVIDERS: readonly string[];
|
|
3
|
+
/** The provider that serves the same models on another OpenAI login, or
|
|
4
|
+
* undefined for a provider outside the family. */
|
|
5
|
+
export declare function twinProvider(provider: string): string | undefined;
|
|
6
|
+
/** A spec taken apart at its first `/`: `provider/rest`, where `rest` is the
|
|
7
|
+
* model id with any `:thinking` suffix left on. Null for a bare id. */
|
|
8
|
+
export declare function splitProvider(spec: string): {
|
|
9
|
+
provider: string;
|
|
10
|
+
rest: string;
|
|
11
|
+
} | null;
|
|
12
|
+
/** The model id of a spec's `rest`: the `:thinking` suffix dropped. */
|
|
13
|
+
export declare function modelIdOf(rest: string): string;
|
|
14
|
+
export interface ProviderProbe {
|
|
15
|
+
/** Does this provider have a usable credential? */
|
|
16
|
+
hasCredential(provider: string): boolean;
|
|
17
|
+
/** Does this provider serve this model id? Omitted: assume it does (the
|
|
18
|
+
* OpenAI twins carry the same catalog). */
|
|
19
|
+
hasModel?(provider: string, modelId: string): boolean;
|
|
20
|
+
}
|
|
21
|
+
/** The provider to run `provider`'s model `modelId` on: `provider` itself when
|
|
22
|
+
* it has a credential (or when nothing better exists), else its OpenAI twin
|
|
23
|
+
* when the twin has one and serves the model. */
|
|
24
|
+
export declare function routeProvider(provider: string, modelId: string, probe: ProviderProbe): string;
|
|
25
|
+
/** A whole spec (`provider/id[:thinking]`) rerouted by `routeProvider`; a spec
|
|
26
|
+
* with no provider prefix is returned as given. */
|
|
27
|
+
export declare function routeModelSpec(spec: string, probe: ProviderProbe): string;
|
|
28
|
+
/** The providers a pi `auth.json` holds a credential for: every entry of type
|
|
29
|
+
* "oauth" or "api_key" (pi's two stored credential shapes; an api_key's `key`
|
|
30
|
+
* may be a literal, an env name or a `!command`, all of which count). An API key
|
|
31
|
+
* in `OPENAI_API_KEY` counts for `openai`, as pi's own env lookup does. Text
|
|
32
|
+
* that does not parse holds nothing. */
|
|
33
|
+
export declare function providersInAuthJson(raw: string | null, env?: Readonly<Record<string, string | undefined>>): Set<string>;
|
|
34
|
+
/** `routeModelSpec` over a login file's text (null: no file) and the env the
|
|
35
|
+
* pi will run with: for a host that starts a CLI pi on a login it holds as a
|
|
36
|
+
* file (a takeover's or a debug round's borrowed copy). */
|
|
37
|
+
export declare function routeModelSpecForLogin(spec: string, authJson: string | null, env?: Readonly<Record<string, string | undefined>>): string;
|
|
38
|
+
//# sourceMappingURL=modelroute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelroute.d.ts","sourceRoot":"","sources":["../../src/modelroute.ts"],"names":[],"mappings":"AAoBA,mDAAmD;AACnD,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAA+B,CAAC;AAE9E;kDACkD;AAClD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIjE;AAED;uEACuE;AACvE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIrF;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC;+CAC2C;IAC3C,QAAQ,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;CACvD;AAED;;iDAEiD;AACjD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAM7F;AAED;mDACmD;AACnD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAKzE;AAED;;;;wCAIwC;AACxC,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAM,GACrD,GAAG,CAAC,MAAM,CAAC,CAqBb;AAED;;2DAE2D;AAC3D,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAM,GACrD,MAAM,CAGR"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// Which provider a model spec runs on, given the logins that exist.
|
|
2
|
+
//
|
|
3
|
+
// pi offers three OpenAI logins, and they land on two providers:
|
|
4
|
+
// - "OpenAI Codex (legacy)" (an OAuth login) is the provider `openai-codex`;
|
|
5
|
+
// - "Sign in with ChatGPT" (pi 1.4's newer OAuth login) is the provider `openai`;
|
|
6
|
+
// - an OpenAI API key (stored by /login, or OPENAI_API_KEY) is also `openai`.
|
|
7
|
+
// Both providers serve the same model ids (pi-ai's catalogs carry gpt-6.1-sol
|
|
8
|
+
// on each), so one login is as good as the other for a review. The shipped
|
|
9
|
+
// specs name `openai-codex/…`, the route the production install logged in
|
|
10
|
+
// with, and stay that way: this module only reroutes a spec whose named
|
|
11
|
+
// provider has no usable credential while its twin has one. The provider a
|
|
12
|
+
// spec names always wins when its credential exists, so an install that works
|
|
13
|
+
// today runs exactly as before.
|
|
14
|
+
//
|
|
15
|
+
// Pure: the caller says which providers have a credential. The SDK host asks
|
|
16
|
+
// pi's own ModelRuntime (packages/pi-plugin/src/engine/pisdk.ts); a CLI pi is
|
|
17
|
+
// rerouted by its own extension from pi's model registry
|
|
18
|
+
// (extensions/login-route.ts); a host that only has a login FILE (the companion
|
|
19
|
+
// entrypoint's default model) reads it with `providersInAuthJson`.
|
|
20
|
+
/** The OpenAI providers, each the other's twin. */
|
|
21
|
+
export const OPENAI_PROVIDERS = ["openai-codex", "openai"];
|
|
22
|
+
/** The provider that serves the same models on another OpenAI login, or
|
|
23
|
+
* undefined for a provider outside the family. */
|
|
24
|
+
export function twinProvider(provider) {
|
|
25
|
+
if (provider === "openai-codex")
|
|
26
|
+
return "openai";
|
|
27
|
+
if (provider === "openai")
|
|
28
|
+
return "openai-codex";
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
/** A spec taken apart at its first `/`: `provider/rest`, where `rest` is the
|
|
32
|
+
* model id with any `:thinking` suffix left on. Null for a bare id. */
|
|
33
|
+
export function splitProvider(spec) {
|
|
34
|
+
const at = spec.indexOf("/");
|
|
35
|
+
if (at <= 0 || at === spec.length - 1)
|
|
36
|
+
return null;
|
|
37
|
+
return { provider: spec.slice(0, at), rest: spec.slice(at + 1) };
|
|
38
|
+
}
|
|
39
|
+
/** The model id of a spec's `rest`: the `:thinking` suffix dropped. */
|
|
40
|
+
export function modelIdOf(rest) {
|
|
41
|
+
const colon = rest.lastIndexOf(":");
|
|
42
|
+
return colon > 0 ? rest.slice(0, colon) : rest;
|
|
43
|
+
}
|
|
44
|
+
/** The provider to run `provider`'s model `modelId` on: `provider` itself when
|
|
45
|
+
* it has a credential (or when nothing better exists), else its OpenAI twin
|
|
46
|
+
* when the twin has one and serves the model. */
|
|
47
|
+
export function routeProvider(provider, modelId, probe) {
|
|
48
|
+
if (probe.hasCredential(provider))
|
|
49
|
+
return provider;
|
|
50
|
+
const twin = twinProvider(provider);
|
|
51
|
+
if (twin === undefined || !probe.hasCredential(twin))
|
|
52
|
+
return provider;
|
|
53
|
+
if (probe.hasModel && !probe.hasModel(twin, modelId))
|
|
54
|
+
return provider;
|
|
55
|
+
return twin;
|
|
56
|
+
}
|
|
57
|
+
/** A whole spec (`provider/id[:thinking]`) rerouted by `routeProvider`; a spec
|
|
58
|
+
* with no provider prefix is returned as given. */
|
|
59
|
+
export function routeModelSpec(spec, probe) {
|
|
60
|
+
const parts = splitProvider(spec);
|
|
61
|
+
if (parts === null)
|
|
62
|
+
return spec;
|
|
63
|
+
const provider = routeProvider(parts.provider, modelIdOf(parts.rest), probe);
|
|
64
|
+
return provider === parts.provider ? spec : `${provider}/${parts.rest}`;
|
|
65
|
+
}
|
|
66
|
+
/** The providers a pi `auth.json` holds a credential for: every entry of type
|
|
67
|
+
* "oauth" or "api_key" (pi's two stored credential shapes; an api_key's `key`
|
|
68
|
+
* may be a literal, an env name or a `!command`, all of which count). An API key
|
|
69
|
+
* in `OPENAI_API_KEY` counts for `openai`, as pi's own env lookup does. Text
|
|
70
|
+
* that does not parse holds nothing. */
|
|
71
|
+
export function providersInAuthJson(raw, env = {}) {
|
|
72
|
+
const out = new Set();
|
|
73
|
+
if (raw !== null) {
|
|
74
|
+
try {
|
|
75
|
+
const parsed = JSON.parse(raw);
|
|
76
|
+
if (typeof parsed === "object" && parsed !== null)
|
|
77
|
+
for (const [name, v] of Object.entries(parsed)) {
|
|
78
|
+
if (typeof v !== "object" || v === null)
|
|
79
|
+
continue;
|
|
80
|
+
const type = v["type"];
|
|
81
|
+
if (type === "oauth")
|
|
82
|
+
out.add(name);
|
|
83
|
+
else if (type === "api_key") {
|
|
84
|
+
const key = v["key"];
|
|
85
|
+
if (typeof key === "string" && key.trim() !== "")
|
|
86
|
+
out.add(name);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// an unreadable login holds no credential
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if ((env["OPENAI_API_KEY"] ?? "").trim() !== "")
|
|
95
|
+
out.add("openai");
|
|
96
|
+
return out;
|
|
97
|
+
}
|
|
98
|
+
/** `routeModelSpec` over a login file's text (null: no file) and the env the
|
|
99
|
+
* pi will run with: for a host that starts a CLI pi on a login it holds as a
|
|
100
|
+
* file (a takeover's or a debug round's borrowed copy). */
|
|
101
|
+
export function routeModelSpecForLogin(spec, authJson, env = {}) {
|
|
102
|
+
const have = providersInAuthJson(authJson, env);
|
|
103
|
+
return routeModelSpec(spec, { hasCredential: (p) => have.has(p) });
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=modelroute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelroute.js","sourceRoot":"","sources":["../../src/modelroute.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,9 @@ export declare function reviewProviders(cfg: Pick<CoreConfig, "models">): string
|
|
|
18
18
|
export type BorrowResult = {
|
|
19
19
|
ok: true;
|
|
20
20
|
refreshed: string[];
|
|
21
|
+
/** The providers the run uses, each OpenAI one on the login that exists:
|
|
22
|
+
* the run's login copy carries exactly these. */
|
|
23
|
+
providers: string[];
|
|
21
24
|
} | {
|
|
22
25
|
ok: false;
|
|
23
26
|
error: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/plugin/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/plugin/login.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;0DAC0D;AAC1D,MAAM,WAAW,QAAQ;IACvB,8EAA8E;IAC9E,MAAM,IAAI,YAAY,CAAC;IACvB;2BACuB;IACvB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACtC;+EAC2E;IAC3E,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED;8CAC8C;AAC9C,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,MAAM,EAAE,CAgBzE;AAED,MAAM,MAAM,YAAY,GACpB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;qDACiD;IACjD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,wDAAwD;AACxD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAS9E;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE;IACnC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,YAAY,CAAC,CAyCxB"}
|
package/dist/src/plugin/login.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { routeProvider } from "../modelroute.js";
|
|
1
2
|
/** The providers the review's sessions run on: every model spec's
|
|
2
3
|
* `provider/` prefix, in first-seen order. */
|
|
3
4
|
export function reviewProviders(cfg) {
|
|
@@ -37,7 +38,15 @@ export async function borrowLogin(o) {
|
|
|
37
38
|
const want = o.needMs + o.marginMs;
|
|
38
39
|
const refreshed = [];
|
|
39
40
|
let logins = o.host.logins();
|
|
40
|
-
|
|
41
|
+
const providers = [];
|
|
42
|
+
for (const named of o.providers) {
|
|
43
|
+
const p = routeProvider(named, "", {
|
|
44
|
+
hasCredential: (q) => logins[q] !== undefined || o.host.configured(q),
|
|
45
|
+
});
|
|
46
|
+
if (!providers.includes(p))
|
|
47
|
+
providers.push(p);
|
|
48
|
+
}
|
|
49
|
+
for (const p of providers) {
|
|
41
50
|
const login = logins[p];
|
|
42
51
|
if (login?.type === "oauth") {
|
|
43
52
|
if (login.expires !== null && login.expires >= now() + want)
|
|
@@ -68,6 +77,6 @@ export async function borrowLogin(o) {
|
|
|
68
77
|
.map(([name]) => name);
|
|
69
78
|
return { ok: false, error: noLoginHint(p, keyed) };
|
|
70
79
|
}
|
|
71
|
-
return { ok: true, refreshed };
|
|
80
|
+
return { ok: true, refreshed, providers };
|
|
72
81
|
}
|
|
73
82
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/plugin/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/plugin/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/plugin/review.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAqB,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAE1F,OAAO,EACL,OAAO,IAAI,WAAW,EACtB,MAAM,IAAI,UAAU,EAIpB,KAAK,aAAa,EAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAUrD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,sDAAsD;AACtD,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,QAAc,CAAC;AAE7C,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,EAAE,aAI/B,CAAC;AAEF;wDACwD;AACxD,eAAO,MAAM,aAAa,QAAS,CAAC;AAEpC,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,UAAU,CAAC;IAC1B,OAAO,EAAE,OAAO,WAAW,CAAC;IAC5B,4BAA4B;IAC5B,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,4DAA4D;IAC5D,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,oBAAoB,KAAK,aAAa,CAAC;CACtE;AAED,eAAO,MAAM,WAAW,EAAE,iBAKzB,CAAC;AAIF,0EAA0E;AAC1E,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,SAAS,EACb,IAAI,GAAE,iBAA+B,GACpC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/plugin/review.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAqB,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAE1F,OAAO,EACL,OAAO,IAAI,WAAW,EACtB,MAAM,IAAI,UAAU,EAIpB,KAAK,aAAa,EAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAUrD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,sDAAsD;AACtD,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,QAAc,CAAC;AAE7C,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,EAAE,aAI/B,CAAC;AAEF;wDACwD;AACxD,eAAO,MAAM,aAAa,QAAS,CAAC;AAEpC,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,UAAU,CAAC;IAC1B,OAAO,EAAE,OAAO,WAAW,CAAC;IAC5B,4BAA4B;IAC5B,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,4DAA4D;IAC5D,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,oBAAoB,KAAK,aAAa,CAAC;CACtE;AAED,eAAO,MAAM,WAAW,EAAE,iBAKzB,CAAC;AAIF,0EAA0E;AAC1E,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,SAAS,EACb,IAAI,GAAE,iBAA+B,GACpC,OAAO,CAAC,IAAI,CAAC,CA4Mf"}
|
|
@@ -91,18 +91,22 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
|
|
|
91
91
|
: `posting needs dry_run = false, and ${configPath} keeps dry_run on`);
|
|
92
92
|
if (!cmd.preview && target.kind !== "diff" && target.kind !== "pr" && !isGitWorkTree(host.cwd))
|
|
93
93
|
return fail(`${host.cwd} is not inside a git repository: /review reviews a git checkout`);
|
|
94
|
+
// The providers whose logins ride into the run: the config's, routed by
|
|
95
|
+
// borrowLogin to the OpenAI login that exists.
|
|
96
|
+
let runProviders = reviewProviders(cfg);
|
|
94
97
|
if (!cmd.preview) {
|
|
95
98
|
// The borrowed login first: refreshed by the host when short, refused
|
|
96
99
|
// with a hint when pi has none for a provider the review runs on, before
|
|
97
100
|
// the person is asked anything.
|
|
98
101
|
const borrowed = await borrowLogin({
|
|
99
|
-
providers:
|
|
102
|
+
providers: runProviders,
|
|
100
103
|
host: host.auth,
|
|
101
104
|
needMs: REVIEW_TIMEOUT_MS,
|
|
102
105
|
marginMs: PI_REFRESH_MARGIN_MS,
|
|
103
106
|
});
|
|
104
107
|
if (!borrowed.ok)
|
|
105
108
|
return fail(borrowed.error);
|
|
109
|
+
runProviders = borrowed.providers;
|
|
106
110
|
if (postBlocked && cmd.to.includes("pr"))
|
|
107
111
|
return fail(`${postBlocked}; the review was not started.`);
|
|
108
112
|
const plan = planDestinations({
|
|
@@ -191,13 +195,13 @@ export async function runReviewCommand(line, host, ui, deps = REVIEW_DEPS) {
|
|
|
191
195
|
});
|
|
192
196
|
},
|
|
193
197
|
// Only the review's providers ride into the run, as borrowLogin renewed
|
|
194
|
-
// them: a person's pi holds other
|
|
195
|
-
// refuse the run.
|
|
198
|
+
// (and, for an OpenAI model, routed) them: a person's pi holds other
|
|
199
|
+
// logins, which neither go along nor refuse the run.
|
|
196
200
|
prepareHost: (req) => prepareReviewHost({
|
|
197
201
|
...req,
|
|
198
202
|
profile: req.profile,
|
|
199
203
|
authWords: PLUGIN_AUTH_WORDS,
|
|
200
|
-
authProviders:
|
|
204
|
+
authProviders: runProviders,
|
|
201
205
|
}),
|
|
202
206
|
memory: null,
|
|
203
207
|
destinations,
|