@koda-sl/baker-bridge 0.171.0-dev.289ff1b9d → 0.172.0-dev.b570aa3f2

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.
@@ -0,0 +1,64 @@
1
+ import type { HookCallbackMatcher, HookEvent } from "@anthropic-ai/claude-agent-sdk";
2
+ import type { Judge } from "./jev.ts";
3
+ import { type TurnSignals } from "./turn-route.ts";
4
+ /**
5
+ * What the subagents a turn spawns are given, beyond what the CLI decides.
6
+ *
7
+ * **The workspace's instructions.** The main conversation reads the scaffold's
8
+ * CLAUDE.md as its system prompt (`workspace-instructions.ts`), which takes the
9
+ * file out of the CLI's memory files — and every subagent that used to load it
10
+ * from there (`general-purpose`, `claude`, `research`: any agent without
11
+ * `omitClaudeMd`) would lose it. A `SubagentStart` hook hands it back to exactly
12
+ * those. A fork never gets it twice: it carries the parent's system prompt.
13
+ *
14
+ * **The model and effort of a built-in subagent.** The scaffold's own agents pin
15
+ * theirs in frontmatter; the CLI's built-ins inherit the parent's, so on an Opus
16
+ * chat a `general-purpose` worker runs on Opus whatever it was asked to do. A
17
+ * `PreToolUse` hook on `Agent` asks Jev the main router's questions about the
18
+ * spawn's prompt: clearly reading or analysing runs on Sonnet, finished work in a
19
+ * Sonnet chat moves up to Opus, anything else is left as the CLI resolves it.
20
+ * Measured over 3 days (Oct 2026), these built-ins were ~$67 of ~$130 of
21
+ * subagent spend, and most of them rewrote landing pages — work that stays on
22
+ * Opus. A fork is never moved (the CLI keeps it on the parent's model so it can
23
+ * share the parent's cache), nor is a call that names a model itself.
24
+ */
25
+ export type AgentDefinition = {
26
+ model?: string;
27
+ omitClaudeMd: boolean;
28
+ };
29
+ export type AgentDefinitions = ReadonlyMap<string, AgentDefinition>;
30
+ export type SubagentRoute = {
31
+ model: "sonnet" | "opus";
32
+ effort: "medium" | "high";
33
+ reason: "read_only" | "deliverable" | "explore";
34
+ };
35
+ /** An agent file's name, model and `omitClaudeMd`, or null when it has no name. Pure. */
36
+ export declare function parseAgentDefinition(text: string): ({
37
+ name: string;
38
+ } & AgentDefinition) | null;
39
+ /** The workspace's own agents (`.claude/agents/*.md`); empty when they cannot be read. */
40
+ export declare function readAgentDefinitions(projectRoot: string): Promise<AgentDefinitions>;
41
+ /** Whether a subagent of `agentType` would have loaded the workspace's CLAUDE.md. Pure. */
42
+ export declare function wantsInstructions(agentType: string, definitions: AgentDefinitions): boolean;
43
+ /** The model and effort to give a spawn, or null to leave it as the CLI resolves it. Pure. */
44
+ export declare function routeSubagent(input: {
45
+ agentType: string;
46
+ /** The `model` the Agent call names itself, if any. */
47
+ explicitModel?: string;
48
+ signals: TurnSignals | null;
49
+ parentModel: string;
50
+ definitions: AgentDefinitions;
51
+ }): SubagentRoute | null;
52
+ type SubagentHookOptions = {
53
+ /** The workspace's instructions, when the main conversation reads them as its system prompt. */
54
+ instructions: string | null;
55
+ definitions: AgentDefinitions;
56
+ /** Null when the Runtime pins every subagent's model (`BAKER_AGENT_MODEL`). */
57
+ judge: Judge | null;
58
+ parentModel: string;
59
+ /** Told each spawn that was moved, for the turn's record. */
60
+ onRoute: (agentType: string, route: SubagentRoute) => void;
61
+ };
62
+ export declare function subagentHooks(options: SubagentHookOptions): Partial<Record<HookEvent, HookCallbackMatcher[]>>;
63
+ export {};
64
+ //# sourceMappingURL=subagent-route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-route.d.ts","sourceRoot":"","sources":["../../src/hono/subagent-route.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAErF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EAAqE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEtH;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC;AACxE,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEpE,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC1B,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;CACjD,CAAC;AASF,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,CAAC,GAAG,IAAI,CAmB9F;AAED,0FAA0F;AAC1F,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmBzF;AAED,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAK3F;AAED,8FAA8F;AAC9F,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,gBAAgB,CAAC;CAC/B,GAAG,aAAa,GAAG,IAAI,CAYvB;AAgBD,KAAK,mBAAmB,GAAG;IACzB,gGAAgG;IAChG,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,+EAA+E;IAC/E,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC5D,CAAC;AAEF,wBAAgB,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC,CA8B7G"}
@@ -0,0 +1,147 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { parse as parseYaml } from "yaml";
4
+ import { normalizeModel, READING_MODEL } from "./model-capabilities.js";
5
+ import { asksForFinishedWork, askTurnSignals, isOnlyReading, needsJudgment } from "./turn-route.js";
6
+ /** Built-ins that skip CLAUDE.md themselves, and a fork, which already carries the parent's system prompt. */
7
+ const WITHOUT_INSTRUCTIONS = new Set(["Explore", "Plan", "fork"]);
8
+ /** Built-ins whose model follows the parent's, routed by what they are asked. */
9
+ const ROUTED_BUILT_INS = new Set(["general-purpose", "claude"]);
10
+ const FRONTMATTER = /^---\r?\n([\s\S]*?)\r?\n---/;
11
+ /** An agent file's name, model and `omitClaudeMd`, or null when it has no name. Pure. */
12
+ export function parseAgentDefinition(text) {
13
+ const block = FRONTMATTER.exec(text)?.[1];
14
+ if (block === undefined) {
15
+ return null;
16
+ }
17
+ let data;
18
+ try {
19
+ data = parseYaml(block);
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ if (typeof data !== "object" || data === null) {
25
+ return null;
26
+ }
27
+ const { name, model, omitClaudeMd } = data;
28
+ if (typeof name !== "string" || name.length === 0) {
29
+ return null;
30
+ }
31
+ return { name, ...(typeof model === "string" ? { model } : {}), omitClaudeMd: omitClaudeMd === true };
32
+ }
33
+ /** The workspace's own agents (`.claude/agents/*.md`); empty when they cannot be read. */
34
+ export async function readAgentDefinitions(projectRoot) {
35
+ const dir = join(projectRoot, ".claude", "agents");
36
+ const definitions = new Map();
37
+ let files;
38
+ try {
39
+ files = (await readdir(dir)).filter((file) => file.endsWith(".md"));
40
+ }
41
+ catch {
42
+ return definitions;
43
+ }
44
+ for (const file of files) {
45
+ const parsed = await readFile(join(dir, file), "utf8")
46
+ .then(parseAgentDefinition)
47
+ .catch(() => null);
48
+ if (parsed) {
49
+ const { name, ...definition } = parsed;
50
+ definitions.set(name, definition);
51
+ }
52
+ }
53
+ return definitions;
54
+ }
55
+ /** Whether a subagent of `agentType` would have loaded the workspace's CLAUDE.md. Pure. */
56
+ export function wantsInstructions(agentType, definitions) {
57
+ if (WITHOUT_INSTRUCTIONS.has(agentType)) {
58
+ return false;
59
+ }
60
+ return definitions.get(agentType)?.omitClaudeMd !== true;
61
+ }
62
+ /** The model and effort to give a spawn, or null to leave it as the CLI resolves it. Pure. */
63
+ export function routeSubagent(input) {
64
+ if (input.explicitModel !== undefined || input.definitions.has(input.agentType)) {
65
+ return null;
66
+ }
67
+ const parentOnSonnet = normalizeModel(input.parentModel) === READING_MODEL;
68
+ if (input.agentType === "Explore") {
69
+ return parentOnSonnet ? null : { model: "sonnet", effort: "medium", reason: "explore" };
70
+ }
71
+ if (!ROUTED_BUILT_INS.has(input.agentType) || !input.signals) {
72
+ return null;
73
+ }
74
+ return routeBuiltIn(input.signals, parentOnSonnet);
75
+ }
76
+ function routeBuiltIn(signals, parentOnSonnet) {
77
+ if (isOnlyReading(signals)) {
78
+ // On a Sonnet parent it inherits Sonnet already; only the effort can still rise.
79
+ if (parentOnSonnet && !needsJudgment(signals)) {
80
+ return null;
81
+ }
82
+ return { model: "sonnet", effort: needsJudgment(signals) ? "high" : "medium", reason: "read_only" };
83
+ }
84
+ if (parentOnSonnet && asksForFinishedWork(signals)) {
85
+ return { model: "opus", effort: "medium", reason: "deliverable" };
86
+ }
87
+ return null;
88
+ }
89
+ export function subagentHooks(options) {
90
+ const hooks = {};
91
+ const { instructions } = options;
92
+ if (instructions) {
93
+ hooks.SubagentStart = [
94
+ {
95
+ hooks: [
96
+ (input) => {
97
+ if (input.hook_event_name !== "SubagentStart" ||
98
+ !wantsInstructions(input.agent_type, options.definitions)) {
99
+ return Promise.resolve({});
100
+ }
101
+ return Promise.resolve({
102
+ hookSpecificOutput: {
103
+ hookEventName: "SubagentStart",
104
+ additionalContext: `Contents of the workspace's CLAUDE.md (project instructions, checked into the codebase):\n\n${instructions}`,
105
+ },
106
+ });
107
+ },
108
+ ],
109
+ },
110
+ ];
111
+ }
112
+ const { judge } = options;
113
+ if (judge) {
114
+ hooks.PreToolUse = [{ matcher: "Agent", hooks: [async (input) => await routedSpawn(input, judge, options)] }];
115
+ }
116
+ return hooks;
117
+ }
118
+ async function routedSpawn(input, judge, options) {
119
+ const call = input;
120
+ const toolInput = call.tool_input;
121
+ if (call.hook_event_name !== "PreToolUse" || !toolInput) {
122
+ return {};
123
+ }
124
+ const agentType = typeof toolInput.subagent_type === "string" ? toolInput.subagent_type : "general-purpose";
125
+ const explicitModel = typeof toolInput.model === "string" ? toolInput.model : undefined;
126
+ const prompt = typeof toolInput.prompt === "string" ? toolInput.prompt : "";
127
+ const asks = ROUTED_BUILT_INS.has(agentType) && explicitModel === undefined && !options.definitions.has(agentType);
128
+ const signals = asks ? await askTurnSignals({ message: prompt, previousReply: "", judge }).catch(() => null) : null;
129
+ const route = routeSubagent({
130
+ agentType,
131
+ explicitModel,
132
+ signals,
133
+ parentModel: options.parentModel,
134
+ definitions: options.definitions,
135
+ });
136
+ if (!route) {
137
+ return {};
138
+ }
139
+ options.onRoute(agentType, route);
140
+ return {
141
+ hookSpecificOutput: {
142
+ hookEventName: "PreToolUse",
143
+ updatedInput: { ...toolInput, model: route.model, effort: route.effort },
144
+ },
145
+ };
146
+ }
147
+ //# sourceMappingURL=subagent-route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-route.js","sourceRoot":"","sources":["../../src/hono/subagent-route.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=subagent-route.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-route.test.d.ts","sourceRoot":"","sources":["../../src/hono/subagent-route.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { parseAgentDefinition, routeSubagent, wantsInstructions } from "./subagent-route.js";
3
+ const OPUS = "claude-opus-5-5";
4
+ const SONNET = "claude-sonnet-5-5";
5
+ const reading = { small: 0.2, complex: 0.8, readOnly: 0.85, deliverable: 0.1 };
6
+ const building = { small: 0.1, complex: 0.95, readOnly: 0.1, deliverable: 0.9 };
7
+ const scaffold = new Map([
8
+ ["research", { model: SONNET, omitClaudeMd: false }],
9
+ ["claim-checker", { model: SONNET, omitClaudeMd: true }],
10
+ ]);
11
+ describe("parseAgentDefinition", () => {
12
+ it("reads the name, model and whether the agent skips CLAUDE.md from its frontmatter", () => {
13
+ const file = "---\nname: claim-checker\ntools: Bash, Read\nmodel: claude-sonnet-5-5\neffort: medium\nomitClaudeMd: true\n---\n\nCheck claims.";
14
+ expect(parseAgentDefinition(file)).toEqual({ name: "claim-checker", model: SONNET, omitClaudeMd: true });
15
+ });
16
+ it("is null for a file with no name", () => {
17
+ expect(parseAgentDefinition("---\nmodel: x\n---\nbody")).toBeNull();
18
+ expect(parseAgentDefinition("no frontmatter")).toBeNull();
19
+ });
20
+ });
21
+ describe("wantsInstructions", () => {
22
+ it("gives the workspace's instructions to every subagent that loaded CLAUDE.md before they moved to the system prompt", () => {
23
+ expect(wantsInstructions("general-purpose", scaffold)).toBe(true);
24
+ expect(wantsInstructions("claude", scaffold)).toBe(true);
25
+ expect(wantsInstructions("research", scaffold)).toBe(true);
26
+ });
27
+ it("leaves out an agent that opts out, the built-in readers, and a fork, which already carries the parent's", () => {
28
+ for (const agentType of ["claim-checker", "Explore", "Plan", "fork"]) {
29
+ expect(wantsInstructions(agentType, scaffold)).toBe(false);
30
+ }
31
+ });
32
+ });
33
+ describe("routeSubagent", () => {
34
+ const spawn = { agentType: "general-purpose", parentModel: OPUS, definitions: scaffold };
35
+ it("runs a built-in subagent that only reads or analyses on Sonnet", () => {
36
+ expect(routeSubagent({ ...spawn, signals: reading })).toEqual({
37
+ model: "sonnet",
38
+ effort: "high",
39
+ reason: "read_only",
40
+ });
41
+ });
42
+ it("leaves a built-in subagent doing finished work on the parent's Opus", () => {
43
+ expect(routeSubagent({ ...spawn, signals: building })).toBeNull();
44
+ });
45
+ it("moves finished work to Opus when the parent chat runs on Sonnet", () => {
46
+ expect(routeSubagent({ ...spawn, parentModel: SONNET, signals: building })).toEqual({
47
+ model: "opus",
48
+ effort: "medium",
49
+ reason: "deliverable",
50
+ });
51
+ });
52
+ it("runs Explore, which only searches, on Sonnet without asking", () => {
53
+ expect(routeSubagent({ ...spawn, agentType: "Explore", signals: null })).toEqual({
54
+ model: "sonnet",
55
+ effort: "medium",
56
+ reason: "explore",
57
+ });
58
+ });
59
+ it.each([
60
+ ["a fork, which must share the parent's cache", { agentType: "fork" }],
61
+ ["a scaffold agent, which pins its own model", { agentType: "research" }],
62
+ ["a call that already names a model", { explicitModel: "opus" }],
63
+ ["no answer from Jev", { signals: null }],
64
+ ])("leaves %s alone", (_label, overrides) => {
65
+ expect(routeSubagent({ ...spawn, signals: reading, ...overrides })).toBeNull();
66
+ });
67
+ });
68
+ //# sourceMappingURL=subagent-route.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-route.test.js","sourceRoot":"","sources":["../../src/hono/subagent-route.test.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,13 @@ export type TurnRoute = {
39
39
  effort: TurnEffort;
40
40
  reason: EffortReason;
41
41
  signals?: TurnSignals;
42
+ /** The subagents this turn spawned that were moved to another model (`subagent-route.ts`). */
43
+ subagents?: {
44
+ agentType: string;
45
+ model: string;
46
+ effort: string;
47
+ reason: string;
48
+ }[];
42
49
  };
43
50
  export type TurnFacts = {
44
51
  /** Null when Jev was not asked or did not answer. */
@@ -67,5 +74,11 @@ export declare function askTurnSignals({ message, previousReply, judge, }: {
67
74
  previousReply: string;
68
75
  judge: Judge;
69
76
  }): Promise<TurnSignals | null>;
77
+ /** Jev reads the work as asking for, or approving, finished work others will see. */
78
+ export declare function asksForFinishedWork(signals: TurnSignals): boolean;
79
+ /** Jev reads the work as needing judgment: Sonnet thinks harder on it. */
80
+ export declare function needsJudgment(signals: TurnSignals): boolean;
70
81
  export declare function routeTurn(facts: TurnFacts): TurnRoute;
82
+ /** Jev clearly reads the work as reading, checking or analysing, with no finished work. */
83
+ export declare function isOnlyReading(signals: TurnSignals): boolean;
71
84
  //# sourceMappingURL=turn-route.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"turn-route.d.ts","sourceRoot":"","sources":["../../src/hono/turn-route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,KAAK,EAAE,MAAM,UAAU,CAAC;AAGnD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEnD,gEAAgE;AAChE,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpG,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC;AAC9F,MAAM,MAAM,YAAY,GACpB,OAAO,GACP,WAAW,GACX,SAAS,GACT,UAAU,GACV,MAAM,GACN,SAAS,GACT,YAAY,GACZ,aAAa,CAAC;AAElB,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,qDAAqD;IACrD,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,sFAAsF;IACtF,YAAY,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,WAAW,EAAE,OAAO,CAAC;IACrB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uDAAuD;IACvD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAsCF,0GAA0G;AAC1G,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,OAAO,CAE9G;AAED,wBAAsB,cAAc,CAAC,EACnC,OAAO,EACP,aAAa,EACb,KAAK,GACN,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;CACd,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAc9B;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAIrD"}
1
+ {"version":3,"file":"turn-route.d.ts","sourceRoot":"","sources":["../../src/hono/turn-route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,KAAK,EAAE,MAAM,UAAU,CAAC;AAGnD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEnD,gEAAgE;AAChE,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpG,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC;AAC9F,MAAM,MAAM,YAAY,GACpB,OAAO,GACP,WAAW,GACX,SAAS,GACT,UAAU,GACV,MAAM,GACN,SAAS,GACT,YAAY,GACZ,aAAa,CAAC;AAElB,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,8FAA8F;IAC9F,SAAS,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpF,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,qDAAqD;IACrD,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,sFAAsF;IACtF,YAAY,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,WAAW,EAAE,OAAO,CAAC;IACrB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uDAAuD;IACvD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAsCF,0GAA0G;AAC1G,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,OAAO,CAE9G;AAED,wBAAsB,cAAc,CAAC,EACnC,OAAO,EACP,aAAa,EACb,KAAK,GACN,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;CACd,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAc9B;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAEjE;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE3D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAIrD;AAyBD,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE3D"}
@@ -48,6 +48,14 @@ export async function askTurnSignals({ message, previousReply, judge, }) {
48
48
  const [small, complex, readOnly, deliverable] = answers;
49
49
  return { small, complex, readOnly, deliverable };
50
50
  }
51
+ /** Jev reads the work as asking for, or approving, finished work others will see. */
52
+ export function asksForFinishedWork(signals) {
53
+ return signals.deliverable >= UPGRADE_MIN_DELIVERABLE;
54
+ }
55
+ /** Jev reads the work as needing judgment: Sonnet thinks harder on it. */
56
+ export function needsJudgment(signals) {
57
+ return signals.complex >= HIGH_EFFORT_MIN_COMPLEX;
58
+ }
51
59
  export function routeTurn(facts) {
52
60
  const { model, modelReason } = modelFor(facts);
53
61
  const { effort, reason } = effortFor(facts, model);
@@ -62,7 +70,7 @@ function modelFor(facts) {
62
70
  if (facts.planMode) {
63
71
  return { model: OPUS, modelReason: "plan" };
64
72
  }
65
- if (facts.signals && facts.signals.deliverable >= UPGRADE_MIN_DELIVERABLE) {
73
+ if (facts.signals && asksForFinishedWork(facts.signals)) {
66
74
  return { model: OPUS, modelReason: "deliverable" };
67
75
  }
68
76
  return { model: READING_MODEL, modelReason: "kept" };
@@ -75,7 +83,8 @@ function modelFor(facts) {
75
83
  }
76
84
  return { model: facts.defaultModel, modelReason: "default" };
77
85
  }
78
- function isOnlyReading(signals) {
86
+ /** Jev clearly reads the work as reading, checking or analysing, with no finished work. */
87
+ export function isOnlyReading(signals) {
79
88
  return signals.readOnly >= READING_MIN_READ_ONLY && signals.deliverable <= READING_MAX_DELIVERABLE;
80
89
  }
81
90
  function effortFor(facts, model) {
@@ -92,7 +101,7 @@ function wantedEffort(facts, model) {
92
101
  const signals = facts.signals;
93
102
  if (!signals)
94
103
  return { effort: "medium", reason: "unjudged" };
95
- if (normalizeModel(model) === READING_MODEL && signals.complex >= HIGH_EFFORT_MIN_COMPLEX) {
104
+ if (normalizeModel(model) === READING_MODEL && needsJudgment(signals)) {
96
105
  return { effort: "high", reason: "complex" };
97
106
  }
98
107
  if (signals.small >= LOW_EFFORT_MIN_SMALL && signals.complex <= LOW_EFFORT_MAX_COMPLEX) {
@@ -1 +1 @@
1
- {"version":3,"file":"turn-route.js","sourceRoot":"","sources":["../../src/hono/turn-route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"turn-route.js","sourceRoot":"","sources":["../../src/hono/turn-route.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koda-sl/baker-bridge",
3
- "version": "0.171.0-dev.289ff1b9d",
3
+ "version": "0.172.0-dev.b570aa3f2",
4
4
  "description": "HTTP server wrapping the Claude Agent SDK. Persists chat events to Convex; the dashboard subscribes via Convex realtime",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -51,6 +51,7 @@
51
51
  "mockttp": "4.6.3",
52
52
  "semver": "^7.8.5",
53
53
  "unbash": "4.0.11",
54
+ "yaml": "^2.6.1",
54
55
  "zod": "^4.3.6"
55
56
  },
56
57
  "devDependencies": {