github-router 0.3.285 → 0.3.288
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -5
- package/dist/{attribution-settings-B8M2fvhz.js → attribution-settings-CofaqSzw.js} +44 -17
- package/dist/attribution-settings-CofaqSzw.js.map +1 -0
- package/dist/{auth-VUL2Zxvw.js → auth-DG4vh8-F.js} +3 -3
- package/dist/{auth-VUL2Zxvw.js.map → auth-DG4vh8-F.js.map} +1 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/{check-usage-CcLdFPGr.js → check-usage-BqN7mBYv.js} +4 -4
- package/dist/{check-usage-CcLdFPGr.js.map → check-usage-BqN7mBYv.js.map} +1 -1
- package/dist/{claude-e-JIQGhR.js → claude-CoZKRNB8.js} +21 -16
- package/dist/claude-CoZKRNB8.js.map +1 -0
- package/dist/{codex-DSnVZ9oK.js → codex-y2OyLIdv.js} +5 -5
- package/dist/{codex-DSnVZ9oK.js.map → codex-y2OyLIdv.js.map} +1 -1
- package/dist/{debug-CtzYWxpJ.js → debug-B5TjPTTH.js} +2 -2
- package/dist/{debug-CtzYWxpJ.js.map → debug-B5TjPTTH.js.map} +1 -1
- package/dist/engine-B5nVGH4b.js +2 -0
- package/dist/{gate-discovery-BCFwLm0q.js → gate-discovery-LQZ-enJa.js} +5 -5
- package/dist/{gate-discovery-BCFwLm0q.js.map → gate-discovery-LQZ-enJa.js.map} +1 -1
- package/dist/{get-copilot-usage-B-EDAqQb.js → get-copilot-usage-BjA0nyGR.js} +2 -2
- package/dist/{get-copilot-usage-B-EDAqQb.js.map → get-copilot-usage-BjA0nyGR.js.map} +1 -1
- package/dist/{internal-artifact-open-Dj5Nlq0L.js → internal-artifact-open-BskmUpnb.js} +2 -2
- package/dist/{internal-artifact-open-Dj5Nlq0L.js.map → internal-artifact-open-BskmUpnb.js.map} +1 -1
- package/dist/{internal-first-mate-guard-DOgFVki5.js → internal-first-mate-guard-5XEHMaqy.js} +3 -3
- package/dist/{internal-first-mate-guard-DOgFVki5.js.map → internal-first-mate-guard-5XEHMaqy.js.map} +1 -1
- package/dist/{internal-first-mate-guard-B7p4NttK.js → internal-first-mate-guard-DHDQ6hFz.js} +1 -1
- package/dist/{internal-plan-review-DRFHET_B.js → internal-plan-review-BUuMx4ku.js} +3 -3
- package/dist/{internal-plan-review-DRFHET_B.js.map → internal-plan-review-BUuMx4ku.js.map} +1 -1
- package/dist/{internal-prompt-submit-f1LR2P2G.js → internal-prompt-submit-CQQ15xdO.js} +4 -4
- package/dist/{internal-prompt-submit-f1LR2P2G.js.map → internal-prompt-submit-CQQ15xdO.js.map} +1 -1
- package/dist/{internal-session-bind-DhZhxJ3T.js → internal-session-bind-D04W2yWI.js} +2 -2
- package/dist/{internal-session-bind-DhZhxJ3T.js.map → internal-session-bind-D04W2yWI.js.map} +1 -1
- package/dist/{internal-stop-hook-Cf-7w3RH.js → internal-stop-hook-DSbaDb_m.js} +5 -5
- package/dist/{internal-stop-hook-Cf-7w3RH.js.map → internal-stop-hook-DSbaDb_m.js.map} +1 -1
- package/dist/{internal-stop-review-BBsLcbPG.js → internal-stop-review-CdByyJLc.js} +2 -2
- package/dist/{internal-stop-review-BBsLcbPG.js.map → internal-stop-review-CdByyJLc.js.map} +1 -1
- package/dist/{internal-worker-guard-CKgYFiFO.js → internal-worker-guard-BIPN6Rv9.js} +2 -2
- package/dist/{internal-worker-guard-CKgYFiFO.js.map → internal-worker-guard-BIPN6Rv9.js.map} +1 -1
- package/dist/{internal-workspace-header-OYgHEnFt.js → internal-workspace-header-BKqejstG.js} +2 -2
- package/dist/{internal-workspace-header-OYgHEnFt.js.map → internal-workspace-header-BKqejstG.js.map} +1 -1
- package/dist/lifecycle-BTodQvn4.js +2 -0
- package/dist/lifecycle-C7JYNz-F.js +2 -0
- package/dist/{lifecycle-B7CHqKlF.js → lifecycle-DbM29FLK.js} +2 -2
- package/dist/{lifecycle-B7CHqKlF.js.map → lifecycle-DbM29FLK.js.map} +1 -1
- package/dist/{lifecycle-D-rL81tT.js → lifecycle-SXaWssN9.js} +2 -2
- package/dist/{lifecycle-D-rL81tT.js.map → lifecycle-SXaWssN9.js.map} +1 -1
- package/dist/main.js +17 -17
- package/dist/{mcp-workspace-header-ucs2SDST.js → mcp-workspace-header-DRCCWlOi.js} +2 -2
- package/dist/{mcp-workspace-header-ucs2SDST.js.map → mcp-workspace-header-DRCCWlOi.js.map} +1 -1
- package/dist/{models-C16mBK2M.js → models-Dz8d_SnI.js} +3 -3
- package/dist/{models-C16mBK2M.js.map → models-Dz8d_SnI.js.map} +1 -1
- package/dist/{orchestration-CtM6FYNx.js → orchestration-BrJwZxMN.js} +2 -2
- package/dist/{orchestration-CtM6FYNx.js.map → orchestration-BrJwZxMN.js.map} +1 -1
- package/dist/paths-CTr59UC6.js +2 -0
- package/dist/{paths-wLC0InjX.js → paths-D7_SAaIQ.js} +4 -4
- package/dist/{paths-wLC0InjX.js.map → paths-D7_SAaIQ.js.map} +1 -1
- package/dist/{peer-mcp-personas-V6stFvpq.js → peer-mcp-personas-B5Wp6wIn.js} +150 -36
- package/dist/peer-mcp-personas-B5Wp6wIn.js.map +1 -0
- package/dist/{plan-review-hook-Lf9ISdF6.js → plan-review-hook-CVZsG9MZ.js} +3 -3
- package/dist/{plan-review-hook-Lf9ISdF6.js.map → plan-review-hook-CVZsG9MZ.js.map} +1 -1
- package/dist/{prompt-submit-hook-BlijaOn7.js → prompt-submit-hook-BW92FX2D.js} +3 -3
- package/dist/{prompt-submit-hook-BlijaOn7.js.map → prompt-submit-hook-BW92FX2D.js.map} +1 -1
- package/dist/{provision-BpL6gZIt.js → provision-CUqPki1z.js} +4 -4
- package/dist/{provision-BpL6gZIt.js.map → provision-CUqPki1z.js.map} +1 -1
- package/dist/{self-invocation-CKMjcA5F.js → self-invocation-CP_SOkrr.js} +2 -2
- package/dist/{self-invocation-CKMjcA5F.js.map → self-invocation-CP_SOkrr.js.map} +1 -1
- package/dist/{serve-CXUf7RtJ.js → serve-BASqoXb3.js} +37 -24
- package/dist/serve-BASqoXb3.js.map +1 -0
- package/dist/{server-setup-Bppjt9xO.js → server-setup-D5hilphf.js} +15 -13
- package/dist/{server-setup-Bppjt9xO.js.map → server-setup-D5hilphf.js.map} +1 -1
- package/dist/{start-C1-jrHfU.js → start-Rfim4TeF.js} +3 -3
- package/dist/{start-C1-jrHfU.js.map → start-Rfim4TeF.js.map} +1 -1
- package/dist/{stop-gate-hook-DgJ6sW8N.js → stop-gate-hook-DriRc9xN.js} +3 -3
- package/dist/{stop-gate-hook-DgJ6sW8N.js.map → stop-gate-hook-DriRc9xN.js.map} +1 -1
- package/dist/{stop-gate-policy-DG5yYWGn.js → stop-gate-policy-DMPanpoR.js} +2 -2
- package/dist/{stop-gate-policy-DG5yYWGn.js.map → stop-gate-policy-DMPanpoR.js.map} +1 -1
- package/dist/{token-CnlB0884.js → token-BGCjZwtj.js} +2 -2
- package/dist/{token-CnlB0884.js.map → token-BGCjZwtj.js.map} +1 -1
- package/dist/{worker-dispatch-zW8Zi69V.js → worker-dispatch-BCTMyNE-.js} +2 -2
- package/dist/{worker-dispatch-zW8Zi69V.js.map → worker-dispatch-BCTMyNE-.js.map} +1 -1
- package/package.json +1 -1
- package/dist/attribution-settings-B8M2fvhz.js.map +0 -1
- package/dist/claude-e-JIQGhR.js.map +0 -1
- package/dist/engine-DMveEa9x.js +0 -2
- package/dist/lifecycle-CbmHMMSD.js +0 -2
- package/dist/lifecycle-DTcZwa7U.js +0 -2
- package/dist/paths-CV9K7Xqm.js +0 -2
- package/dist/peer-mcp-personas-V6stFvpq.js.map +0 -1
- package/dist/serve-CXUf7RtJ.js.map +0 -1
package/README.md
CHANGED
|
@@ -98,15 +98,18 @@ Each persona is exposed both as a Claude Code subagent (callable via the `Task`
|
|
|
98
98
|
|
|
99
99
|
### Native subagents
|
|
100
100
|
|
|
101
|
-
The launcher also registers focused native subagents that run in their own contexts. `implementer`, `reviewer`, `brainstorm`, and `scribe` are always present. Each uses its preferred model when the live catalog provides one with tool calls, otherwise it inherits the lead model; `scout`
|
|
101
|
+
The launcher also registers focused native subagents that run in their own contexts. `implementer`, `reviewer`, `brainstorm`, and `scribe` are always present. Each uses its preferred model when the live catalog provides one with tool calls, otherwise it inherits the lead model; `scout`, `implementer-fast`, `reviewer-fast`, and `general-purpose-fast` are present only when their cheap-tier model chains resolve, so the work they exist to make cheaper does not silently run at the lead's model rate.
|
|
102
102
|
|
|
103
103
|
| Subagent | Use for | Preferred model chain | Tools |
|
|
104
104
|
|---|---|---|---|
|
|
105
|
-
| `implementer` |
|
|
106
|
-
| `
|
|
107
|
-
| `
|
|
108
|
-
| `
|
|
105
|
+
| `implementer` | Coding changes needing judgment or with ambiguous scope | gpt-5.6-sol → gpt-5.5 | Full inherited toolset |
|
|
106
|
+
| `implementer-fast` | Well-specified, mechanical coding changes | gpt-5.6-terra → gemini-3.1-pro-preview | Full inherited toolset |
|
|
107
|
+
| `reviewer` | Assessing an existing diff, plan, document, or failure | gemini-3.1-pro-preview → gemini-3.7-flash → OpenAI frontier | Full inherited toolset |
|
|
108
|
+
| `reviewer-fast` | Lower-stakes assessment on a cheaper cross-lab model | gemini-3.7-flash | Full inherited toolset |
|
|
109
|
+
| `brainstorm` | Divergent approaches before selecting one | gemini-3.1-pro-preview → gemini-3.7-flash → OpenAI frontier | Read-only allowlist |
|
|
110
|
+
| `scout` | Low-cost repository exploration | gpt-5.6-luna → gemini-3.7-flash | Read-only allowlist |
|
|
109
111
|
| `scribe` | Documentation that trails the code | gpt-5.6-terra → OpenAI frontier | Full inherited toolset |
|
|
112
|
+
| `general-purpose-fast` | Work no specialist fits | gpt-5.6-luna | Full inherited toolset |
|
|
110
113
|
|
|
111
114
|
For codex-side write capability (a `codex-implementer` persona that can mutate files via Codex's tool-use sandbox), pass `--codex-cli`. Requires `codex` CLI 0.129+ on `PATH`; falls back to HTTP-only with a warning if codex is missing or older. Pass `--codex-mcp-only` to also pass `--strict-mcp-config` to Claude Code so only the proxy's MCP servers are loaded (hides any MCP servers in your existing `~/.claude/mcp.json`).
|
|
112
115
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as isUnderClaudeConfigMirror, d as writeRuntimeFileSecure, t as PATHS } from "./paths-
|
|
3
|
-
import "./self-invocation-
|
|
4
|
-
import { a as STRIPPED_AUTH_ROUTING_ENV_KEYS, n as buildCodexProviderConfigFlags } from "./provision-
|
|
5
|
-
import { n as buildWorkspaceHeaderHelperCommand } from "./mcp-workspace-header-
|
|
6
|
-
import { a as dispatcherAgentName, c as dispatcherTools, n as activeDispatchModes, o as dispatcherDescription, s as dispatcherPrompt } from "./worker-dispatch-
|
|
1
|
+
import { Bt as CONDENSED_OPERATING_SEQUENCE, Vt as DEFINITION_OF_GREATNESS, c as personasFor, i as buildAgentPrompt, n as MCP_GROUPS, on as withOneMSuffix, t as GROUP_META } from "./peer-mcp-personas-B5Wp6wIn.js";
|
|
2
|
+
import { a as isUnderClaudeConfigMirror, d as writeRuntimeFileSecure, t as PATHS } from "./paths-D7_SAaIQ.js";
|
|
3
|
+
import "./self-invocation-CP_SOkrr.js";
|
|
4
|
+
import { a as STRIPPED_AUTH_ROUTING_ENV_KEYS, n as buildCodexProviderConfigFlags } from "./provision-CUqPki1z.js";
|
|
5
|
+
import { n as buildWorkspaceHeaderHelperCommand } from "./mcp-workspace-header-DRCCWlOi.js";
|
|
6
|
+
import { a as dispatcherAgentName, c as dispatcherTools, n as activeDispatchModes, o as dispatcherDescription, s as dispatcherPrompt } from "./worker-dispatch-BCTMyNE-.js";
|
|
7
7
|
import consola from "consola";
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import { randomBytes } from "node:crypto";
|
|
@@ -280,7 +280,8 @@ function buildPeerAgentDefinitions(opts) {
|
|
|
280
280
|
const out = {};
|
|
281
281
|
const personas = personasFor({
|
|
282
282
|
codexCli: opts.codexCli,
|
|
283
|
-
geminiAvailable: opts.geminiAvailable
|
|
283
|
+
geminiAvailable: opts.geminiAvailable,
|
|
284
|
+
geminiModel: opts.geminiModel
|
|
284
285
|
});
|
|
285
286
|
const peersKey = peersKeyOf(opts.groupKeys);
|
|
286
287
|
const peersMcp = opts.serverUrl ? { mcpServers: { [peersKey]: httpEntryFor(opts.serverUrl, "peers", opts.nonce, opts.workspaceHeaderCmd) } } : {};
|
|
@@ -301,6 +302,7 @@ function buildPeerAgentDefinitions(opts) {
|
|
|
301
302
|
};
|
|
302
303
|
const nativeModel = nonEmptyModel(opts.nativeSubagentModel);
|
|
303
304
|
const reviewerModel = nonEmptyModel(opts.reviewerModel);
|
|
305
|
+
const reviewerFastModel = nonEmptyModel(opts.reviewerFastModel);
|
|
304
306
|
const brainstormModel = nonEmptyModel(opts.brainstormModel);
|
|
305
307
|
const scoutModel = nonEmptyModel(opts.scoutModel);
|
|
306
308
|
const scribeModel = nonEmptyModel(opts.scribeModel);
|
|
@@ -314,11 +316,17 @@ function buildPeerAgentDefinitions(opts) {
|
|
|
314
316
|
prompt: "You are a bounded implementation subagent for well-scoped coding tasks. Implement the requested change surgically, matching the surrounding code style and minimizing unrelated churn. " + fileToolSteer("builds") + " Verify with the project's build or tests where applicable. Do the work yourself — do not spawn further subagents. Report exactly what changed and any risks.",
|
|
315
317
|
...modelField
|
|
316
318
|
};
|
|
319
|
+
const reviewerPrompt = "You are a feedback subagent. Your job is to tell the caller what is actually true about the artifact you are given — code, a plan, a document, a failure report — and what is wrong with it. Verify against the ACTUAL code by reading it; never assume. Do whatever the assessment requires: reproduce a failure end to end as close to how a real user hits it as you can, form hypotheses and test them against the code and runtime, and isolate the true root cause rather than a symptom. Where the change warrants it, author tests that try to BREAK the implementation (edge cases, error paths, and the acceptance criteria as executable checks), run them, and report which pass and which fail; do NOT modify production code just to make tests pass. " + fileToolSteer("builds") + " Do the work yourself — do not spawn further subagents. Report severity-ranked findings with `file:line` citations, the evidence behind each, and end with a clear go/no-go.";
|
|
317
320
|
out.reviewer = {
|
|
318
321
|
description: reviewerModel ? `Feedback subagent running ${reviewerModel}, a DIFFERENT lab from both the lead and the implementer, so its blind spots are decorrelated from whoever produced the work. Use proactively when something already exists and you want it assessed: a diff, a plan, a document, a failing test. Unlike the stateless peer critics, it reads the repo and can RUN things, so prefer it whenever the assessment needs execution or repo context (reproduce a failure, run the suite, bisect); prefer a peer critic when you already hold the artifact and want a fresh-context opinion on it. It can also REVIEW SCREENSHOTS and other images: just point it at the file and it will look at them. Model is overridable at spawn.` : `Feedback subagent (native tools, runs on the lead's model in its own context). Use proactively when something already exists and you want it assessed: a diff, a plan, a document, a failing test. Unlike the stateless peer critics, it reads the repo and can RUN things, so prefer it whenever the assessment needs execution or repo context; prefer a peer critic when you already hold the artifact and want a fresh-context opinion on it. Model is overridable at spawn.`,
|
|
319
|
-
prompt:
|
|
322
|
+
prompt: reviewerPrompt,
|
|
320
323
|
...reviewerModel ? { model: withOneMSuffix(reviewerModel) } : {}
|
|
321
324
|
};
|
|
325
|
+
if (reviewerFastModel) out["reviewer-fast"] = {
|
|
326
|
+
description: `Cheaper feedback subagent running ${reviewerFastModel} (1M context, typically faster than the pro-tier reviewer and cross-lab from the OpenAI-backed implementer). Use for lower-stakes assessments that still need repository access or execution; escalate higher-stakes review to reviewer. Full toolset, so it can read the repo and run builds, tests, and reproductions in its own context. Model is overridable at spawn.`,
|
|
327
|
+
prompt: reviewerPrompt,
|
|
328
|
+
model: withOneMSuffix(reviewerFastModel)
|
|
329
|
+
};
|
|
322
330
|
out.brainstorm = {
|
|
323
331
|
description: brainstormModel ? `Divergent-options subagent running ${brainstormModel} (third lab, for approaches the lead would not generate). Use proactively BEFORE an approach is chosen. Pass the decision, the constraints, what you have already ruled out, and the cost of being wrong; pass your current leading approach too if you have one, and it will try to beat it rather than restate it. Read-only; it proposes, then hands off to implementer. Model is overridable at spawn.` : `Divergent-options subagent (runs on the lead's model in its own context). Use proactively BEFORE an approach is chosen. Pass the decision, the constraints, what you have already ruled out, and the cost of being wrong; pass your current leading approach too if you have one, and it will try to beat it rather than restate it. Read-only; it proposes, then hands off to implementer. Model is overridable at spawn.`,
|
|
324
332
|
prompt: "You are a divergent-options subagent: the lead's sounding board while an approach is still open. Your job is to surface the option the lead would not have reached on its own. If the caller states its current leading approach, your job is to try to beat it, and you close with one verdict: `replace`, `retain`, or `insufficient evidence`. `replace` requires naming a concrete alternative that dominates it and the evidence that decides between them. `retain` is a real answer and a useful one: say it plainly when the approach survives a genuine attempt to beat it. Manufactured disagreement is as useless as agreement; do neither. If the caller states no leading approach, generate independently and let the lead compare. Return 3 to 5 approaches that differ in MECHANISM, not in phrasing. For each: how it works, what it costs, what would have to be true for it to be the right answer, and the failure mode that would kill it. Near-duplicate options are the failure mode to avoid — if only one real approach exists, say so plainly and explain why the alternatives are dead, because one honest option beats four padded ones. Screen EVERY candidate against this repository and this environment before you rank them, then verify the one you are about to recommend can actually run here: read the code path it depends on, the guard that would refuse it, the artifact it assumes exists. A recommendation that cannot execute is worse than no recommendation. If checking kills your front-runner, rerank and say so. Ground every option in what the repository actually contains, and prefer reusing what is already there over inventing something new. " + readOnlyToolSteer() + " Do the work yourself — do not spawn further subagents.",
|
|
@@ -673,6 +681,7 @@ async function writePeerMcpRuntimeFiles(serverUrl, opts) {
|
|
|
673
681
|
const mcpConfig = buildPeerMcpConfig(serverUrl, {
|
|
674
682
|
codexCli: opts.codexCli,
|
|
675
683
|
geminiAvailable: opts.geminiAvailable,
|
|
684
|
+
geminiModel: opts.geminiModel,
|
|
676
685
|
groupKeys: opts.groupKeys,
|
|
677
686
|
nonce,
|
|
678
687
|
codexHome,
|
|
@@ -681,11 +690,13 @@ async function writePeerMcpRuntimeFiles(serverUrl, opts) {
|
|
|
681
690
|
const agents = buildPeerAgentDefinitions({
|
|
682
691
|
codexCli: opts.codexCli,
|
|
683
692
|
geminiAvailable: opts.geminiAvailable,
|
|
693
|
+
geminiModel: opts.geminiModel,
|
|
684
694
|
groupKeys: opts.groupKeys,
|
|
685
695
|
workerToolsAvailable: opts.workerToolsAvailable,
|
|
686
696
|
browseAvailable: opts.browseAvailable,
|
|
687
697
|
nativeSubagentModel: opts.nativeSubagentModel,
|
|
688
698
|
reviewerModel: opts.reviewerModel,
|
|
699
|
+
reviewerFastModel: opts.reviewerFastModel,
|
|
689
700
|
brainstormModel: opts.brainstormModel,
|
|
690
701
|
scoutModel: opts.scoutModel,
|
|
691
702
|
scribeModel: opts.scribeModel,
|
|
@@ -709,7 +720,8 @@ async function writePeerMcpRuntimeFiles(serverUrl, opts) {
|
|
|
709
720
|
});
|
|
710
721
|
const personas = personasFor({
|
|
711
722
|
codexCli: opts.codexCli,
|
|
712
|
-
geminiAvailable: opts.geminiAvailable
|
|
723
|
+
geminiAvailable: opts.geminiAvailable,
|
|
724
|
+
geminiModel: opts.geminiModel
|
|
713
725
|
});
|
|
714
726
|
const cleanup = async () => {
|
|
715
727
|
await Promise.allSettled([
|
|
@@ -1763,21 +1775,36 @@ function joinClauses(parts) {
|
|
|
1763
1775
|
}
|
|
1764
1776
|
/** The "Reach for X when Y" list, omitting any agent this launch did not emit.
|
|
1765
1777
|
*
|
|
1766
|
-
* On a budget lead the coding clauses swap order so the cheap tier
|
|
1767
|
-
* the frontier tier is named as the complexity escalation. Choosing a
|
|
1768
|
-
* lead is a decision to spend less while holding quality, and a roster
|
|
1769
|
-
* names the expensive `implementer` first works against
|
|
1770
|
-
* ORDERING AND WORDING ONLY: no agent's model changes,
|
|
1771
|
-
* named so work beyond the fast tier still has
|
|
1778
|
+
* On a budget lead the coding AND review clauses swap order so the cheap tier
|
|
1779
|
+
* leads and the frontier tier is named as the complexity escalation. Choosing a
|
|
1780
|
+
* lighter lead is a decision to spend less while holding quality, and a roster
|
|
1781
|
+
* that names the expensive `implementer` / `reviewer` first works against
|
|
1782
|
+
* exactly that. This is ORDERING AND WORDING ONLY: no agent's model changes,
|
|
1783
|
+
* and both frontier tiers stay named so work beyond the fast tier still has
|
|
1784
|
+
* somewhere to go.
|
|
1785
|
+
*
|
|
1786
|
+
* Review gets the same treatment as implementation because the cost gap is the
|
|
1787
|
+
* same shape: `reviewer` runs the pro tier (200/1200 per 1M) against
|
|
1788
|
+
* `reviewer-fast`'s flash tier (75/375), and measured 2026-08-13 the flash
|
|
1789
|
+
* model was also the FASTER of the two on every axis (tool-call p50 ~1.2s vs
|
|
1790
|
+
* ~2.8s, TTFT ~1.9s vs ~3.7s, decode ~326 vs ~165 tok/s). So on a budget lead
|
|
1791
|
+
* there is no quality-for-cost trade being hidden by leading with the cheap
|
|
1792
|
+
* tier; reserve `reviewer` for the higher-stakes assessment it is there for. */
|
|
1772
1793
|
function buildNativeReachClauses(opts) {
|
|
1773
1794
|
const clauses = [];
|
|
1774
1795
|
const implementerFast = opts.implementerFastAvailable !== false;
|
|
1796
|
+
const reviewerFast = opts.reviewerFastAvailable !== false;
|
|
1775
1797
|
if (opts.budgetLead === true && implementerFast) clauses.push("`implementer-fast` first for coding changes, since it is the cheaper and faster tier and this session is running a lighter lead", "`implementer` when the change needs judgment, its scope is ambiguous, or its complexity is beyond what the fast tier can carry");
|
|
1776
1798
|
else {
|
|
1777
1799
|
clauses.push("`implementer` for coding changes that need judgment or have ambiguous scope");
|
|
1778
1800
|
if (implementerFast) clauses.push("`implementer-fast` for well-specified, mechanical coding changes");
|
|
1779
1801
|
}
|
|
1780
|
-
clauses.push("`reviewer` when something exists and you want it assessed
|
|
1802
|
+
if (opts.budgetLead === true && reviewerFast) clauses.push("`reviewer-fast` first when something exists and you want it assessed, since it is the cheaper and faster review tier", "`reviewer` when the assessment is higher-stakes or needs deeper reproduction and root-causing than the fast tier can carry");
|
|
1803
|
+
else {
|
|
1804
|
+
clauses.push("`reviewer` when something exists and you want it assessed (including reproducing and root-causing a failure)");
|
|
1805
|
+
if (reviewerFast) clauses.push("`reviewer-fast` for lower-stakes assessments");
|
|
1806
|
+
}
|
|
1807
|
+
clauses.push("`brainstorm` when you do not yet know which approach to take");
|
|
1781
1808
|
if (opts.scoutAvailable !== false) clauses.push("`scout` to find or understand something in the repo");
|
|
1782
1809
|
clauses.push("`scribe` for docs and ADRs that trail the code");
|
|
1783
1810
|
if (opts.generalPurposeFastAvailable !== false) clauses.push(opts.budgetLead === true ? "`general-purpose-fast` for work no specialist fits, in preference to carrying it inline yourself" : "`general-purpose-fast` for work no specialist fits");
|
|
@@ -2359,4 +2386,4 @@ async function injectAttributionSuppressionIntoSettingsFile(settingsPath) {
|
|
|
2359
2386
|
//#endregion
|
|
2360
2387
|
export { injectPeerMcpIntoMirror as _, appendPeerAwarenessToMirroredClaudeMd as a, workersKeyOf as b, prependArtifactPanelDirectiveToMirroredClaudeMd as c, SEAMLESS_BUILTIN_TOOLS as d, configureServeDefaultPermissionMode as f, BUILTIN_SUBAGENT_DEFINITIONS as g, sanitizeServeSettingsEnv as h, OPERATING_DEFAULTS_DIGEST as i, prependOperatingDefaultsToMirroredClaudeMd as l, planModeAllowRules as m, INJECTED_SKILLS as n, appendToolbeltAwarenessToMirroredClaudeMd as o, injectAllowRules as p, writeInjectedSkill as r, buildOperatingDefaultsDirective as s, injectAttributionSuppressionIntoSettingsFile as t, prependStyleDirectiveToMirroredClaudeMd as u, resolveCodexCliBackend as v, writePeerMcpRuntimeFiles as x, resolveGroupKeysFromMirror as y };
|
|
2361
2388
|
|
|
2362
|
-
//# sourceMappingURL=attribution-settings-
|
|
2389
|
+
//# sourceMappingURL=attribution-settings-CofaqSzw.js.map
|