@duetso/agent 0.2.2 → 0.2.3
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 +19 -11
- package/dist/package.json +4 -4
- package/dist/src/cli/config.d.ts +10 -0
- package/dist/src/cli/config.d.ts.map +1 -0
- package/dist/src/cli/config.js +24 -0
- package/dist/src/cli/config.js.map +1 -0
- package/dist/src/cli/help.d.ts.map +1 -1
- package/dist/src/cli/help.js +11 -9
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/inline-slash.d.ts +2 -1
- package/dist/src/cli/inline-slash.d.ts.map +1 -1
- package/dist/src/cli/inline-slash.js +14 -5
- package/dist/src/cli/inline-slash.js.map +1 -1
- package/dist/src/cli/memory-query.d.ts +1 -1
- package/dist/src/cli/model.d.ts +1 -1
- package/dist/src/cli/model.d.ts.map +1 -1
- package/dist/src/cli/model.js +1 -1
- package/dist/src/cli/model.js.map +1 -1
- package/dist/src/cli/route.d.ts +84 -0
- package/dist/src/cli/route.d.ts.map +1 -0
- package/dist/src/cli/route.js +261 -0
- package/dist/src/cli/route.js.map +1 -0
- package/dist/src/cli/rpc.d.ts +43 -2
- package/dist/src/cli/rpc.d.ts.map +1 -1
- package/dist/src/cli/rpc.js +176 -23
- package/dist/src/cli/rpc.js.map +1 -1
- package/dist/src/cli/run.d.ts +8 -1
- package/dist/src/cli/run.d.ts.map +1 -1
- package/dist/src/cli/run.js +24 -7
- package/dist/src/cli/run.js.map +1 -1
- package/dist/src/cli/shared.d.ts +4 -3
- package/dist/src/cli/shared.d.ts.map +1 -1
- package/dist/src/cli/shared.js +3 -4
- package/dist/src/cli/shared.js.map +1 -1
- package/dist/src/cli/shutdown.d.ts +4 -2
- package/dist/src/cli/shutdown.d.ts.map +1 -1
- package/dist/src/cli/shutdown.js +4 -2
- package/dist/src/cli/shutdown.js.map +1 -1
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +12 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/core/structured-output.d.ts +2 -0
- package/dist/src/core/structured-output.d.ts.map +1 -1
- package/dist/src/core/structured-output.js +1 -0
- package/dist/src/core/structured-output.js.map +1 -1
- package/dist/src/lib/system-reminder.d.ts +14 -0
- package/dist/src/lib/system-reminder.d.ts.map +1 -0
- package/dist/src/lib/system-reminder.js +53 -0
- package/dist/src/lib/system-reminder.js.map +1 -0
- package/dist/src/lib/walk-ancestors.d.ts +9 -0
- package/dist/src/lib/walk-ancestors.d.ts.map +1 -0
- package/dist/src/lib/walk-ancestors.js +28 -0
- package/dist/src/lib/walk-ancestors.js.map +1 -0
- package/dist/src/memory/observational-prompts.d.ts.map +1 -1
- package/dist/src/memory/observational-prompts.js +2 -1
- package/dist/src/memory/observational-prompts.js.map +1 -1
- package/dist/src/memory/observational.d.ts +31 -4
- package/dist/src/memory/observational.d.ts.map +1 -1
- package/dist/src/memory/observational.js +43 -4
- package/dist/src/memory/observational.js.map +1 -1
- package/dist/src/model-resolution/catalog.d.ts +2 -2
- package/dist/src/model-resolution/catalog.d.ts.map +1 -1
- package/dist/src/model-resolution/catalog.js +61 -33
- package/dist/src/model-resolution/catalog.js.map +1 -1
- package/dist/src/model-resolution/duet-gateway.d.ts +3 -3
- package/dist/src/model-resolution/duet-gateway.d.ts.map +1 -1
- package/dist/src/model-resolution/duet-gateway.js +119 -19
- package/dist/src/model-resolution/duet-gateway.js.map +1 -1
- package/dist/src/model-resolution/model-gateway.d.ts.map +1 -0
- package/dist/src/{cli → model-resolution}/model-gateway.js +10 -6
- package/dist/src/model-resolution/model-gateway.js.map +1 -0
- package/dist/src/model-resolution/resolver.d.ts +11 -4
- package/dist/src/model-resolution/resolver.d.ts.map +1 -1
- package/dist/src/model-resolution/resolver.js +39 -8
- package/dist/src/model-resolution/resolver.js.map +1 -1
- package/dist/src/model-routing/advisor-transcript.d.ts +36 -0
- package/dist/src/model-routing/advisor-transcript.d.ts.map +1 -0
- package/dist/src/model-routing/advisor-transcript.js +103 -0
- package/dist/src/model-routing/advisor-transcript.js.map +1 -0
- package/dist/src/model-routing/advisor.d.ts +27 -0
- package/dist/src/model-routing/advisor.d.ts.map +1 -0
- package/dist/src/model-routing/advisor.js +20 -0
- package/dist/src/model-routing/advisor.js.map +1 -0
- package/dist/src/model-routing/classifier.d.ts +57 -0
- package/dist/src/model-routing/classifier.d.ts.map +1 -0
- package/dist/src/model-routing/classifier.js +63 -0
- package/dist/src/model-routing/classifier.js.map +1 -0
- package/dist/src/model-routing/loader.d.ts +48 -0
- package/dist/src/model-routing/loader.d.ts.map +1 -0
- package/dist/src/model-routing/loader.js +79 -0
- package/dist/src/model-routing/loader.js.map +1 -0
- package/dist/src/model-routing/prompts.d.ts +22 -0
- package/dist/src/model-routing/prompts.d.ts.map +1 -0
- package/dist/src/model-routing/prompts.js +87 -0
- package/dist/src/model-routing/prompts.js.map +1 -0
- package/dist/src/model-routing/resolve.d.ts +40 -0
- package/dist/src/model-routing/resolve.d.ts.map +1 -0
- package/dist/src/model-routing/resolve.js +76 -0
- package/dist/src/model-routing/resolve.js.map +1 -0
- package/dist/src/model-routing/router.d.ts +149 -0
- package/dist/src/model-routing/router.d.ts.map +1 -0
- package/dist/src/model-routing/router.js +235 -0
- package/dist/src/model-routing/router.js.map +1 -0
- package/dist/src/model-routing/step-triggers.d.ts +27 -0
- package/dist/src/model-routing/step-triggers.d.ts.map +1 -0
- package/dist/src/model-routing/step-triggers.js +20 -0
- package/dist/src/model-routing/step-triggers.js.map +1 -0
- package/dist/src/model-routing/table.d.ts +126 -0
- package/dist/src/model-routing/table.d.ts.map +1 -0
- package/dist/src/model-routing/table.js +351 -0
- package/dist/src/model-routing/table.js.map +1 -0
- package/dist/src/session/session.d.ts +40 -23
- package/dist/src/session/session.d.ts.map +1 -1
- package/dist/src/session/session.js +173 -97
- package/dist/src/session/session.js.map +1 -1
- package/dist/src/tasks/quiescence.d.ts +13 -0
- package/dist/src/tasks/quiescence.d.ts.map +1 -0
- package/dist/src/tasks/quiescence.js +11 -0
- package/dist/src/tasks/quiescence.js.map +1 -0
- package/dist/src/tasks/task-manager.d.ts +101 -0
- package/dist/src/tasks/task-manager.d.ts.map +1 -0
- package/dist/src/tasks/task-manager.js +311 -0
- package/dist/src/tasks/task-manager.js.map +1 -0
- package/dist/src/tasks/types.d.ts +85 -0
- package/dist/src/tasks/types.d.ts.map +1 -0
- package/dist/src/tasks/types.js +2 -0
- package/dist/src/tasks/types.js.map +1 -0
- package/dist/src/tui/app.d.ts +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +12 -2
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/initial-prompt.d.ts.map +1 -1
- package/dist/src/tui/initial-prompt.js +0 -3
- package/dist/src/tui/initial-prompt.js.map +1 -1
- package/dist/src/tui/session-subscription.d.ts +3 -0
- package/dist/src/tui/session-subscription.d.ts.map +1 -1
- package/dist/src/tui/session-subscription.js +29 -5
- package/dist/src/tui/session-subscription.js.map +1 -1
- package/dist/src/tui/sidebar.d.ts +3 -0
- package/dist/src/tui/sidebar.d.ts.map +1 -1
- package/dist/src/tui/sidebar.js +19 -3
- package/dist/src/tui/sidebar.js.map +1 -1
- package/dist/src/tui/slash-commands.d.ts +12 -9
- package/dist/src/tui/slash-commands.d.ts.map +1 -1
- package/dist/src/tui/slash-commands.js +48 -10
- package/dist/src/tui/slash-commands.js.map +1 -1
- package/dist/src/tui/status-controller.d.ts +14 -9
- package/dist/src/tui/status-controller.d.ts.map +1 -1
- package/dist/src/tui/status-controller.js +26 -7
- package/dist/src/tui/status-controller.js.map +1 -1
- package/dist/src/tui/task-lane-renderer.d.ts +30 -0
- package/dist/src/tui/task-lane-renderer.d.ts.map +1 -0
- package/dist/src/tui/task-lane-renderer.js +93 -0
- package/dist/src/tui/task-lane-renderer.js.map +1 -0
- package/dist/src/tui/task-tree.d.ts +47 -0
- package/dist/src/tui/task-tree.d.ts.map +1 -0
- package/dist/src/tui/task-tree.js +190 -0
- package/dist/src/tui/task-tree.js.map +1 -0
- package/dist/src/tui/tool-formatters.js +3 -0
- package/dist/src/tui/tool-formatters.js.map +1 -1
- package/dist/src/turn-runner/agent-events.d.ts.map +1 -1
- package/dist/src/turn-runner/agent-events.js +1 -0
- package/dist/src/turn-runner/agent-events.js.map +1 -1
- package/dist/src/turn-runner/duration.d.ts +2 -2
- package/dist/src/turn-runner/duration.js +3 -3
- package/dist/src/turn-runner/duration.js.map +1 -1
- package/dist/src/turn-runner/prompts.d.ts +5 -1
- package/dist/src/turn-runner/prompts.d.ts.map +1 -1
- package/dist/src/turn-runner/prompts.js +30 -6
- package/dist/src/turn-runner/prompts.js.map +1 -1
- package/dist/src/turn-runner/runtime-clock.d.ts +20 -0
- package/dist/src/turn-runner/runtime-clock.d.ts.map +1 -0
- package/dist/src/turn-runner/runtime-clock.js +38 -0
- package/dist/src/turn-runner/runtime-clock.js.map +1 -0
- package/dist/src/turn-runner/shell-state-handle.d.ts +0 -3
- package/dist/src/turn-runner/shell-state-handle.d.ts.map +1 -1
- package/dist/src/turn-runner/shell-state-handle.js +5 -55
- package/dist/src/turn-runner/shell-state-handle.js.map +1 -1
- package/dist/src/turn-runner/skill-context.d.ts +6 -7
- package/dist/src/turn-runner/skill-context.d.ts.map +1 -1
- package/dist/src/turn-runner/skill-context.js +10 -10
- package/dist/src/turn-runner/skill-context.js.map +1 -1
- package/dist/src/turn-runner/skills.d.ts.map +1 -1
- package/dist/src/turn-runner/skills.js +2 -22
- package/dist/src/turn-runner/skills.js.map +1 -1
- package/dist/src/turn-runner/state-compaction.d.ts +7 -5
- package/dist/src/turn-runner/state-compaction.d.ts.map +1 -1
- package/dist/src/turn-runner/state-compaction.js +69 -10
- package/dist/src/turn-runner/state-compaction.js.map +1 -1
- package/dist/src/turn-runner/state-machine-decisions.d.ts +135 -0
- package/dist/src/turn-runner/state-machine-decisions.d.ts.map +1 -0
- package/dist/src/turn-runner/state-machine-decisions.js +443 -0
- package/dist/src/turn-runner/state-machine-decisions.js.map +1 -0
- package/dist/src/turn-runner/state-machine-session.d.ts +13 -28
- package/dist/src/turn-runner/state-machine-session.d.ts.map +1 -1
- package/dist/src/turn-runner/state-machine-session.js +18 -55
- package/dist/src/turn-runner/state-machine-session.js.map +1 -1
- package/dist/src/turn-runner/subagent.d.ts +156 -0
- package/dist/src/turn-runner/subagent.d.ts.map +1 -0
- package/dist/src/turn-runner/subagent.js +164 -0
- package/dist/src/turn-runner/subagent.js.map +1 -0
- package/dist/src/turn-runner/task-tools.d.ts +76 -0
- package/dist/src/turn-runner/task-tools.d.ts.map +1 -0
- package/dist/src/turn-runner/task-tools.js +370 -0
- package/dist/src/turn-runner/task-tools.js.map +1 -0
- package/dist/src/turn-runner/tools.d.ts +65 -17
- package/dist/src/turn-runner/tools.d.ts.map +1 -1
- package/dist/src/turn-runner/tools.js +173 -59
- package/dist/src/turn-runner/tools.js.map +1 -1
- package/dist/src/turn-runner/turn-runner.d.ts +198 -134
- package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
- package/dist/src/turn-runner/turn-runner.js +1302 -713
- package/dist/src/turn-runner/turn-runner.js.map +1 -1
- package/dist/src/turn-runner/usage-accounting.d.ts +4 -0
- package/dist/src/turn-runner/usage-accounting.d.ts.map +1 -1
- package/dist/src/turn-runner/usage-accounting.js +19 -0
- package/dist/src/turn-runner/usage-accounting.js.map +1 -1
- package/dist/src/types/config.d.ts +9 -1
- package/dist/src/types/config.d.ts.map +1 -1
- package/dist/src/types/config.js +2 -1
- package/dist/src/types/config.js.map +1 -1
- package/dist/src/types/protocol.d.ts +110 -30
- package/dist/src/types/protocol.d.ts.map +1 -1
- package/dist/src/types/state-machine.d.ts +10 -12
- package/dist/src/types/state-machine.d.ts.map +1 -1
- package/dist/src/types/state-machine.js.map +1 -1
- package/package.json +4 -4
- package/dist/src/cli/model-gateway.d.ts.map +0 -1
- package/dist/src/cli/model-gateway.js.map +0 -1
- package/dist/src/turn-runner/state-machine-controller.d.ts +0 -140
- package/dist/src/turn-runner/state-machine-controller.d.ts.map +0 -1
- package/dist/src/turn-runner/state-machine-controller.js +0 -501
- package/dist/src/turn-runner/state-machine-controller.js.map +0 -1
- /package/dist/src/{cli → model-resolution}/model-gateway.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/model-resolution/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/model-resolution/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,9 +35,9 @@ export declare function resolveDuetGatewayModel(modelId: string): Model<any>;
|
|
|
35
35
|
/**
|
|
36
36
|
* Clone a known sibling on the same provider to build a Model pi-ai has not
|
|
37
37
|
* shipped yet; returns undefined when the provider/modelId pair is not a
|
|
38
|
-
* pending clone. Shared by the `duet-gateway` path (above) and
|
|
39
|
-
* `vercel-ai-gateway`
|
|
40
|
-
* ships that model
|
|
38
|
+
* pending clone. Shared by the `duet-gateway` path (above) and direct
|
|
39
|
+
* `vercel-ai-gateway`/`openrouter` resolution in resolver.ts. Delete a clone
|
|
40
|
+
* entry once pi-ai ships that provider/model pair and it resolves directly.
|
|
41
41
|
*/
|
|
42
42
|
export declare function resolveMissingModel(provider: string, modelId: string): Model<any> | undefined;
|
|
43
43
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duet-gateway.d.ts","sourceRoot":"","sources":["../../../src/model-resolution/duet-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"duet-gateway.d.ts","sourceRoot":"","sources":["../../../src/model-resolution/duet-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAwD3E;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AACvD,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AAEjE,wBAAgB,qBAAqB,IAAI,MAAM,CAI9C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CASnE;AAoGD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAY7F;AA4CD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK1E"}
|
|
@@ -3,6 +3,46 @@ const DEFAULT_DUET_GATEWAY_BASE_URL = "https://gateway.duet.so";
|
|
|
3
3
|
const OPENAI_MODEL_PREFIX = "openai/";
|
|
4
4
|
const VERCEL_GATEWAY_BASE_URL = "https://ai-gateway.vercel.sh";
|
|
5
5
|
const OPENAI_BASE_URL = "https://api.openai.com/v1";
|
|
6
|
+
// Published USD-per-million-token prices (input / output / cacheRead / cacheWrite),
|
|
7
|
+
// verified against the OpenRouter listing 2026-07-18. Clones inherit their
|
|
8
|
+
// sibling's cost and synthesized passthroughs zero it out, so every model that
|
|
9
|
+
// resolves through an override below must carry its real price here or cost
|
|
10
|
+
// accounting (sidebar, usage events, advisor-preview) silently lies.
|
|
11
|
+
const GPT_5_6_GATEWAY_CAPABILITIES = {
|
|
12
|
+
input: ["text", "image"],
|
|
13
|
+
contextWindow: 1_050_000,
|
|
14
|
+
maxTokens: 128_000,
|
|
15
|
+
};
|
|
16
|
+
const OPENAI_GATEWAY_MODEL_OVERRIDES = {
|
|
17
|
+
"openai/gpt-5.6-sol": {
|
|
18
|
+
...GPT_5_6_GATEWAY_CAPABILITIES,
|
|
19
|
+
cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 6.25 },
|
|
20
|
+
},
|
|
21
|
+
"openai/gpt-5.6-terra": {
|
|
22
|
+
...GPT_5_6_GATEWAY_CAPABILITIES,
|
|
23
|
+
cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 3.125 },
|
|
24
|
+
},
|
|
25
|
+
"openai/gpt-5.6-luna": {
|
|
26
|
+
...GPT_5_6_GATEWAY_CAPABILITIES,
|
|
27
|
+
cost: { input: 1, output: 6, cacheRead: 0.1, cacheWrite: 1.25 },
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
const KIMI_K3_CAPABILITIES = {
|
|
31
|
+
input: ["text", "image"],
|
|
32
|
+
contextWindow: 1_000_000,
|
|
33
|
+
maxTokens: 131_072,
|
|
34
|
+
cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 },
|
|
35
|
+
// K3 currently exposes one reasoning setting. Mapping app-level `high` to
|
|
36
|
+
// `max` keeps the selection honest on both supported transports.
|
|
37
|
+
thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "max", xhigh: null },
|
|
38
|
+
};
|
|
39
|
+
const FABLE_5_COST = {
|
|
40
|
+
cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 },
|
|
41
|
+
};
|
|
42
|
+
// Sonnet 5 introductory pricing (through 2026-08-31); bump to 3/15/0.3/3.75 after.
|
|
43
|
+
const SONNET_5_COST = {
|
|
44
|
+
cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 },
|
|
45
|
+
};
|
|
6
46
|
/**
|
|
7
47
|
* The Duet gateway proxies Vercel's AI Gateway path layout and authenticates
|
|
8
48
|
* with a `DUET_API_KEY` token scoped to a single org. Rather than ship a
|
|
@@ -61,9 +101,7 @@ export function resolveDuetGatewayModel(modelId) {
|
|
|
61
101
|
*/
|
|
62
102
|
function resolveDuetGatewayUpstream(modelId) {
|
|
63
103
|
if (modelId.startsWith(OPENAI_MODEL_PREFIX)) {
|
|
64
|
-
|
|
65
|
-
return (getModel("openai", slug) ??
|
|
66
|
-
synthesizePassthroughModel(modelId, "openai-responses"));
|
|
104
|
+
return resolveOpenAIResponsesModel(modelId);
|
|
67
105
|
}
|
|
68
106
|
return (getModel("vercel-ai-gateway", modelId) ??
|
|
69
107
|
resolveMissingModel("vercel-ai-gateway", modelId) ??
|
|
@@ -93,34 +131,96 @@ function synthesizePassthroughModel(modelId, api) {
|
|
|
93
131
|
};
|
|
94
132
|
}
|
|
95
133
|
/**
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* resolves through the `vercel-ai-gateway` catalog, so these entries cover it
|
|
102
|
-
* too. `to` scopes each clone to one id so other catalog-missing ids are not
|
|
103
|
-
* rewritten. Drop an entry the moment pi-ai ships that model to the gateway.
|
|
134
|
+
* Known sibling specs cloned for models pi-ai's catalog has not shipped yet.
|
|
135
|
+
* The `duet-gateway` route resolves through the `vercel-ai-gateway` catalog, so
|
|
136
|
+
* those entries cover it too. Per-model overrides replace sibling metadata
|
|
137
|
+
* only where the new model's published contract differs. Drop an entry the
|
|
138
|
+
* moment pi-ai ships that provider/model pair.
|
|
104
139
|
*/
|
|
105
|
-
const
|
|
140
|
+
const MISSING_MODEL_CLONES = {
|
|
106
141
|
"vercel-ai-gateway": [
|
|
107
|
-
{ from: "anthropic/claude-opus-4.8", to: "anthropic/claude-fable-5" },
|
|
108
|
-
{
|
|
142
|
+
{ from: "anthropic/claude-opus-4.8", to: "anthropic/claude-fable-5", overrides: FABLE_5_COST },
|
|
143
|
+
{
|
|
144
|
+
from: "anthropic/claude-opus-4.8",
|
|
145
|
+
to: "anthropic/claude-sonnet-5",
|
|
146
|
+
overrides: SONNET_5_COST,
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
from: "moonshotai/kimi-k2.6",
|
|
150
|
+
to: "moonshotai/kimi-k3",
|
|
151
|
+
overrides: {
|
|
152
|
+
...KIMI_K3_CAPABILITIES,
|
|
153
|
+
compat: { forceAdaptiveThinking: true },
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
openrouter: [
|
|
158
|
+
{
|
|
159
|
+
from: "moonshotai/kimi-k2.6",
|
|
160
|
+
to: "moonshotai/kimi-k3",
|
|
161
|
+
overrides: KIMI_K3_CAPABILITIES,
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
from: "openai/gpt-5.5",
|
|
165
|
+
to: "openai/gpt-5.6-sol",
|
|
166
|
+
overrides: OPENAI_GATEWAY_MODEL_OVERRIDES["openai/gpt-5.6-sol"],
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
from: "openai/gpt-5.5",
|
|
170
|
+
to: "openai/gpt-5.6-terra",
|
|
171
|
+
overrides: OPENAI_GATEWAY_MODEL_OVERRIDES["openai/gpt-5.6-terra"],
|
|
172
|
+
},
|
|
109
173
|
],
|
|
110
174
|
};
|
|
111
175
|
/**
|
|
112
176
|
* Clone a known sibling on the same provider to build a Model pi-ai has not
|
|
113
177
|
* shipped yet; returns undefined when the provider/modelId pair is not a
|
|
114
|
-
* pending clone. Shared by the `duet-gateway` path (above) and
|
|
115
|
-
* `vercel-ai-gateway`
|
|
116
|
-
* ships that model
|
|
178
|
+
* pending clone. Shared by the `duet-gateway` path (above) and direct
|
|
179
|
+
* `vercel-ai-gateway`/`openrouter` resolution in resolver.ts. Delete a clone
|
|
180
|
+
* entry once pi-ai ships that provider/model pair and it resolves directly.
|
|
117
181
|
*/
|
|
118
182
|
export function resolveMissingModel(provider, modelId) {
|
|
119
|
-
|
|
183
|
+
if (provider === "vercel-ai-gateway" && modelId.startsWith(OPENAI_MODEL_PREFIX)) {
|
|
184
|
+
return resolveVercelGatewayOpenAIModel(modelId);
|
|
185
|
+
}
|
|
186
|
+
const clone = MISSING_MODEL_CLONES[provider]?.find((entry) => entry.to === modelId);
|
|
120
187
|
if (!clone)
|
|
121
188
|
return undefined;
|
|
122
189
|
const sibling = getModel(provider, clone.from);
|
|
123
|
-
|
|
190
|
+
if (!sibling)
|
|
191
|
+
return undefined;
|
|
192
|
+
const compat = clone.overrides?.compat
|
|
193
|
+
? { ...sibling.compat, ...clone.overrides.compat }
|
|
194
|
+
: sibling.compat;
|
|
195
|
+
return { ...sibling, ...clone.overrides, compat, id: modelId, name: modelId };
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Synthesize a `vercel-ai-gateway` OpenAI model pi-ai's catalog has not shipped
|
|
199
|
+
* yet, keeping it on the openai-responses transport pointed at the Vercel
|
|
200
|
+
* gateway's OpenAI-compatible `/v1` route. pi-ai serves gateway OpenAI models
|
|
201
|
+
* over the anthropic-messages transport, which drops OpenAI reasoning stream
|
|
202
|
+
* semantics AND silently ignores `reasoningEffort` — so a memory model resolved
|
|
203
|
+
* here (e.g. the default gpt-5.6-luna) could never run at the low effort the
|
|
204
|
+
* observer/reflectors request. This mirrors the deliberate openai-responses
|
|
205
|
+
* routing documented on `resolveDuetGatewayModel`. Auth is unaffected:
|
|
206
|
+
* `resolveProviderApiKey`/pi-ai key resolution keys off `provider`, which stays
|
|
207
|
+
* `vercel-ai-gateway`, so `AI_GATEWAY_API_KEY` still applies.
|
|
208
|
+
*/
|
|
209
|
+
function resolveVercelGatewayOpenAIModel(modelId) {
|
|
210
|
+
const upstream = resolveOpenAIResponsesModel(modelId);
|
|
211
|
+
return {
|
|
212
|
+
...upstream,
|
|
213
|
+
provider: "vercel-ai-gateway",
|
|
214
|
+
id: modelId,
|
|
215
|
+
name: modelId,
|
|
216
|
+
baseUrl: `${VERCEL_GATEWAY_BASE_URL}/v1`,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
function resolveOpenAIResponsesModel(modelId) {
|
|
220
|
+
const slug = modelId.slice(OPENAI_MODEL_PREFIX.length);
|
|
221
|
+
const upstream = getModel("openai", slug) ??
|
|
222
|
+
synthesizePassthroughModel(modelId, "openai-responses");
|
|
223
|
+
return { ...upstream, ...OPENAI_GATEWAY_MODEL_OVERRIDES[modelId] };
|
|
124
224
|
}
|
|
125
225
|
function getDuetGatewayBaseUrlForModel(model) {
|
|
126
226
|
if (model.api === "openai-completions" || model.api === "openai-responses") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duet-gateway.js","sourceRoot":"","sources":["../../../src/model-resolution/duet-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAc,MAAM,uBAAuB,CAAC;AAE3E,MAAM,6BAA6B,GAAG,yBAAyB,CAAC;AAChE,MAAM,mBAAmB,GAAG,SAAS,CAAC;AACtC,MAAM,uBAAuB,GAAG,8BAA8B,CAAC;AAC/D,MAAM,eAAe,GAAG,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"duet-gateway.js","sourceRoot":"","sources":["../../../src/model-resolution/duet-gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-gateway.d.ts","sourceRoot":"","sources":["../../../src/model-resolution/model-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAGnC;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAM/C,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,OAAO,GACP,OAAO,GACP,WAAW,GACX,UAAU,GACV,WAAW,GACX,QAAQ,GACR,eAAe,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,UAAU,CAAC,OAAO,aAAa,CAAC,CAkBzE;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAazE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createGateway } from "ai";
|
|
2
|
-
import { getDuetGatewayBaseUrl } from "
|
|
2
|
+
import { getDuetGatewayBaseUrl } from "./duet-gateway.js";
|
|
3
3
|
/**
|
|
4
4
|
* The `duet model` subcommand talks to models directly through the Vercel AI
|
|
5
5
|
* SDK (`ai@^7`), pointed at the Duet gateway instead of the pi harness. The
|
|
@@ -22,11 +22,15 @@ export function createDuetModelGateway() {
|
|
|
22
22
|
// Preserve `fetch.preconnect` so the wrapper still satisfies the platform
|
|
23
23
|
// fetch signature; only the abort timeout is overridden.
|
|
24
24
|
const longTimeoutFetch = Object.assign((input, init) => fetch(input, { ...init, signal: AbortSignal.timeout(GENERATION_TIMEOUT_MS) }), { preconnect: fetch.preconnect });
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
// Credential precedence mirrors the harness: the Duet proxy when its key is
|
|
26
|
+
// present, else Vercel's AI Gateway (same /v4/ai protocol path) with the
|
|
27
|
+
// Vercel key. One owner for this fallback — callers never bridge env vars.
|
|
28
|
+
const duetKey = process.env[DUET_API_KEY_ENV]?.trim();
|
|
29
|
+
const vercelKey = process.env.AI_GATEWAY_API_KEY?.trim();
|
|
30
|
+
const upstream = duetKey || !vercelKey
|
|
31
|
+
? { baseURL: `${getDuetGatewayBaseUrl()}/v4/ai`, apiKey: process.env[DUET_API_KEY_ENV] }
|
|
32
|
+
: { baseURL: "https://ai-gateway.vercel.sh/v4/ai", apiKey: vercelKey };
|
|
33
|
+
return createGateway({ ...upstream, fetch: longTimeoutFetch });
|
|
30
34
|
}
|
|
31
35
|
/**
|
|
32
36
|
* Fetch the gateway model catalog and return a map of model id -> capability
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-gateway.js","sourceRoot":"","sources":["../../../src/model-resolution/model-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAE/C,6EAA6E;AAC7E,wEAAwE;AACxE,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAa7C;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB;IACpC,0EAA0E;IAC1E,yDAAyD;IACzD,MAAM,gBAAgB,GAAiB,MAAM,CAAC,MAAM,CAClD,CAAC,KAAkC,EAAE,IAAkC,EAAE,EAAE,CACzE,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAC/E,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CACjC,CAAC;IACF,4EAA4E;IAC5E,yEAAyE;IACzE,2EAA2E;IAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC;IACtD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACzD,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,SAAS;QACnB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;QACxF,CAAC,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC3E,OAAO,aAAa,CAAC,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,qBAAqB,EAAE,YAAY,EAAE;QACnE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE;KAC5E,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsD,CAAC;IAC1F,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Model } from "@earendil-works/pi-ai";
|
|
2
|
+
import { type RoutingCatalogAdapter, type RoutingTable } from "../model-routing/table.js";
|
|
2
3
|
export { DEFAULT_CLI_MEMORY_MODEL, DEFAULT_CLI_MODEL } from "./catalog.js";
|
|
3
4
|
/**
|
|
4
5
|
* Resolves which provider:modelId the CLI talks to, plus the provenance for
|
|
@@ -9,14 +10,20 @@ export { DEFAULT_CLI_MEMORY_MODEL, DEFAULT_CLI_MODEL } from "./catalog.js";
|
|
|
9
10
|
export interface ModelResolution {
|
|
10
11
|
/** Model name retained for config, display, and later runtime resolution. */
|
|
11
12
|
modelName: string;
|
|
12
|
-
/** explicit: CLI flag; inferred: provider env var present; default:
|
|
13
|
+
/** explicit: CLI flag; inferred: provider env var present; default: active routing-table fallback. */
|
|
13
14
|
source: "explicit" | "inferred" | "default";
|
|
14
|
-
/** Provider env var that triggered inference, e.g. "
|
|
15
|
+
/** Provider env var that triggered inference, e.g. "AI_GATEWAY_API_KEY". */
|
|
15
16
|
envVar?: string;
|
|
16
17
|
/** True when the env var was loaded from a CLI env file rather than the shell. */
|
|
17
18
|
fromDotenv?: boolean;
|
|
19
|
+
/** True when the retained name is a virtual tier owned by model routing. */
|
|
20
|
+
routed?: boolean;
|
|
18
21
|
}
|
|
19
22
|
export declare function resolveModelName(model: string): Model<any>;
|
|
23
|
+
/** Shared concrete-catalog boundary used by every model-routing composition site. */
|
|
24
|
+
export declare const routingCatalogAdapter: RoutingCatalogAdapter;
|
|
25
|
+
/** Resolve a concrete catalog name to the provider-pinned reference used for model calls. */
|
|
26
|
+
export declare function pinnedModelReference(name: string): string;
|
|
20
27
|
/**
|
|
21
28
|
* Same selection logic as resolveCliModel, but picks each provider's cheaper
|
|
22
29
|
* observational-memory model.
|
|
@@ -24,8 +31,8 @@ export declare function resolveModelName(model: string): Model<any>;
|
|
|
24
31
|
export declare function resolveCliMemoryModel(memoryModelName: string | undefined, dotenvKeys: Set<string>): ModelResolution;
|
|
25
32
|
/**
|
|
26
33
|
* Resolve the user-visible model and report provenance so callers can show
|
|
27
|
-
* "inferred from
|
|
34
|
+
* "inferred from AI_GATEWAY_API_KEY in an env file" etc.
|
|
28
35
|
*/
|
|
29
|
-
export declare function resolveCliModel(modelName: string | undefined, dotenvKeys: Set<string
|
|
36
|
+
export declare function resolveCliModel(modelName: string | undefined, dotenvKeys: Set<string>, routingTable?: RoutingTable): ModelResolution;
|
|
30
37
|
export declare function describeModelResolution(resolution: ModelResolution): string;
|
|
31
38
|
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/model-resolution/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/model-resolution/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AAkBnC,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE3E;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,sGAAsG;IACtG,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IAC5C,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAmC1D;AAED,qFAAqF;AACrF,eAAO,MAAM,qBAAqB,EAAE,qBAMnC,CAAC;AAEF,6FAA6F;AAC7F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGzD;AAiBD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,eAAe,CAOjB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,YAAY,GAAE,YAAqC,GAClD,eAAe,CAQjB;AA8ED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,CAU3E"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { findEnvKeys, getModel } from "@earendil-works/pi-ai";
|
|
2
|
+
import { BUILT_IN_ROUTING_TABLE, isVirtualModel, } from "../model-routing/table.js";
|
|
2
3
|
import { resolveDuetGatewayModel, resolveMissingModel } from "./duet-gateway.js";
|
|
3
|
-
import { canonicalizeModelName, canonicalizeProviderModelId, clampModelOutputTokens, DEFAULT_CLI_MEMORY_MODEL,
|
|
4
|
+
import { canonicalizeModelName, canonicalizeProviderModelId, clampModelOutputTokens, DEFAULT_CLI_MEMORY_MODEL, getModelCandidates, getProviderDefaultModel, getProviderMemoryModel, isKnownShorthand, isProviderPinnedModelName, PROVIDER_ORDER, resolveProviderShorthand, } from "./catalog.js";
|
|
4
5
|
export { DEFAULT_CLI_MEMORY_MODEL, DEFAULT_CLI_MODEL } from "./catalog.js";
|
|
5
6
|
export function resolveModelName(model) {
|
|
6
7
|
model = resolveModelReference(model);
|
|
@@ -10,6 +11,14 @@ export function resolveModelName(model) {
|
|
|
10
11
|
}
|
|
11
12
|
const rawProvider = model.slice(0, separator);
|
|
12
13
|
const rawModelId = model.slice(separator + 1);
|
|
14
|
+
// The CLI supports only the router providers (duet-gateway, vercel-ai-gateway,
|
|
15
|
+
// openrouter). Any other explicit pin — e.g. `anthropic:claude-opus-4-8` or
|
|
16
|
+
// `openai:gpt-5.5` — is an unknown provider here: `resolveProviderShorthand`
|
|
17
|
+
// returns undefined, the raw provider passes through, and `getModel` below
|
|
18
|
+
// forwards it to pi-ai unchanged. That's incidental passthrough, not a
|
|
19
|
+
// supported path: pi-ai resolves it if it ships that provider/id and the
|
|
20
|
+
// caller supplies the credential, otherwise it resolves to an undefined
|
|
21
|
+
// model. No catalog canonicalization applies to unknown providers.
|
|
13
22
|
const provider = resolveProviderShorthand(rawProvider) ?? rawProvider;
|
|
14
23
|
const modelId = isKnownProvider(provider)
|
|
15
24
|
? canonicalizeProviderModelId(provider, rawModelId)
|
|
@@ -26,6 +35,16 @@ export function resolveModelName(model) {
|
|
|
26
35
|
const resolved = getModel(provider, modelId) ?? resolveMissingModel(provider, modelId);
|
|
27
36
|
return clampModelOutputTokens(resolved);
|
|
28
37
|
}
|
|
38
|
+
/** Shared concrete-catalog boundary used by every model-routing composition site. */
|
|
39
|
+
export const routingCatalogAdapter = {
|
|
40
|
+
isCatalogName: isKnownShorthand,
|
|
41
|
+
modelAcceptsImages: (name) => resolveModelName(isProviderPinnedModelName(name) ? name : `duet-gateway:${name}`).input.includes("image"),
|
|
42
|
+
};
|
|
43
|
+
/** Resolve a concrete catalog name to the provider-pinned reference used for model calls. */
|
|
44
|
+
export function pinnedModelReference(name) {
|
|
45
|
+
const model = resolveModelName(name);
|
|
46
|
+
return `${model.provider}:${model.id}`;
|
|
47
|
+
}
|
|
29
48
|
function isKnownProvider(provider) {
|
|
30
49
|
return PROVIDER_ORDER.some((entry) => entry.provider === provider);
|
|
31
50
|
}
|
|
@@ -45,13 +64,19 @@ export function resolveCliMemoryModel(memoryModelName, dotenvKeys) {
|
|
|
45
64
|
}
|
|
46
65
|
/**
|
|
47
66
|
* Resolve the user-visible model and report provenance so callers can show
|
|
48
|
-
* "inferred from
|
|
67
|
+
* "inferred from AI_GATEWAY_API_KEY in an env file" etc.
|
|
49
68
|
*/
|
|
50
|
-
export function resolveCliModel(modelName, dotenvKeys) {
|
|
51
|
-
return resolveCliModelWith(modelName, getDefaultModelCandidates(), dotenvKeys,
|
|
69
|
+
export function resolveCliModel(modelName, dotenvKeys, routingTable = BUILT_IN_ROUTING_TABLE) {
|
|
70
|
+
return resolveCliModelWith(modelName, getDefaultModelCandidates(), dotenvKeys, routingTable.defaultTier, routingTable);
|
|
52
71
|
}
|
|
53
|
-
function resolveCliModelWith(modelName, providerInference, dotenvKeys, defaultModel) {
|
|
72
|
+
function resolveCliModelWith(modelName, providerInference, dotenvKeys, defaultModel, routingTable = BUILT_IN_ROUTING_TABLE) {
|
|
54
73
|
if (modelName) {
|
|
74
|
+
if (isVirtualModel(modelName, routingTable)) {
|
|
75
|
+
return { modelName, source: "explicit", routed: true };
|
|
76
|
+
}
|
|
77
|
+
if (isVirtualModel(modelName, BUILT_IN_ROUTING_TABLE)) {
|
|
78
|
+
throw new Error(`Unknown virtual model tier "${modelName}" in the active routing table.`);
|
|
79
|
+
}
|
|
55
80
|
return {
|
|
56
81
|
modelName: isProviderPinnedModelName(modelName)
|
|
57
82
|
? modelName
|
|
@@ -59,6 +84,9 @@ function resolveCliModelWith(modelName, providerInference, dotenvKeys, defaultMo
|
|
|
59
84
|
source: "explicit",
|
|
60
85
|
};
|
|
61
86
|
}
|
|
87
|
+
if (isVirtualModel(defaultModel, routingTable)) {
|
|
88
|
+
return { modelName: defaultModel, source: "default", routed: true };
|
|
89
|
+
}
|
|
62
90
|
const inferred = findInferredProviderEntry(providerInference);
|
|
63
91
|
if (inferred) {
|
|
64
92
|
return {
|
|
@@ -105,12 +133,15 @@ function resolveModelReference(modelName) {
|
|
|
105
133
|
throw new Error(`Unknown model shorthand: ${modelName}`);
|
|
106
134
|
}
|
|
107
135
|
export function describeModelResolution(resolution) {
|
|
136
|
+
const routed = resolution.routed ? `${resolution.modelName} (routed) — ` : "";
|
|
108
137
|
if (resolution.source === "explicit")
|
|
109
|
-
return
|
|
138
|
+
return `${routed}explicit CLI flag`;
|
|
110
139
|
if (resolution.source === "inferred") {
|
|
111
140
|
const where = resolution.fromDotenv ? "an env file" : "shell environment";
|
|
112
|
-
return
|
|
141
|
+
return `${routed}inferred from ${resolution.envVar} in ${where}`;
|
|
113
142
|
}
|
|
114
|
-
return
|
|
143
|
+
return resolution.routed
|
|
144
|
+
? `${routed}routing-table default`
|
|
145
|
+
: "built-in default (no provider env vars set)";
|
|
115
146
|
}
|
|
116
147
|
//# sourceMappingURL=resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/model-resolution/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAc,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/model-resolution/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAc,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EACL,sBAAsB,EACtB,cAAc,GAGf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,yBAAyB,EACzB,cAAc,EAGd,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAsB3E,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAC9C,+EAA+E;IAC/E,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,uEAAuE;IACvE,yEAAyE;IACzE,wEAAwE;IACxE,mEAAmE;IACnE,MAAM,QAAQ,GAAG,wBAAwB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC;IACtE,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC;QACvC,CAAC,CAAC,2BAA2B,CAAC,QAAQ,EAAE,UAAU,CAAC;QACnD,CAAC,CAAC,UAAU,CAAC;IACf,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QAChC,qEAAqE;QACrE,wEAAwE;QACxE,sEAAsE;QACtE,OAAO,sBAAsB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,6EAA6E;IAC7E,0EAA0E;IAC1E,wEAAwE;IACxE,MAAM,QAAQ,GACZ,QAAQ,CACN,QAA0C,EAC1C,OAAyC,CAC1C,IAAK,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAgB,CAAC;IAC9D,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,MAAM,qBAAqB,GAA0B;IAC1D,aAAa,EAAE,gBAAgB;IAC/B,kBAAkB,EAAE,CAAC,IAAY,EAAE,EAAE,CACnC,gBAAgB,CACd,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,IAAI,EAAE,CAChE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;CAC5B,CAAC;AAEF,6FAA6F;AAC7F,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,oBAAoB,CAAC,KAG7B;IACC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,YAAY,EAAE,IAAI,SAAS,CAAC;IAC3C,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,eAAmC,EACnC,UAAuB;IAEvB,OAAO,mBAAmB,CACxB,eAAe,EACf,wBAAwB,EAAE,EAC1B,UAAU,EACV,wBAAwB,CACzB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,SAA6B,EAC7B,UAAuB,EACvB,eAA6B,sBAAsB;IAEnD,OAAO,mBAAmB,CACxB,SAAS,EACT,yBAAyB,EAAE,EAC3B,UAAU,EACV,YAAY,CAAC,WAAW,EACxB,YAAY,CACb,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,SAA6B,EAC7B,iBAA2C,EAC3C,UAAuB,EACvB,YAAoB,EACpB,eAA6B,sBAAsB;IAEnD,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACzD,CAAC;QACD,IAAI,cAAc,CAAC,SAAS,EAAE,sBAAsB,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,gCAAgC,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO;YACL,SAAS,EAAE,yBAAyB,CAAC,SAAS,CAAC;gBAC7C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC;YACpC,MAAM,EAAE,UAAU;SACnB,CAAC;IACJ,CAAC;IACD,IAAI,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;QAC/C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACtE,CAAC;IACD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;IAC9D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS;YACnC,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC5C,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,yBAAyB,CAChC,iBAAoD;IAEpD,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3F,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,yBAAyB;IAChC,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,QAAQ;QACR,SAAS,EAAE,uBAAuB,CAAC,QAAQ,CAAC;KAC7C,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,wBAAwB;IAC/B,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,QAAQ;QACR,SAAS,EAAE,sBAAsB,CAAC,QAAQ,CAAC;KAC5C,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB;IAC9C,IAAI,yBAAyB,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAE3D,MAAM,QAAQ,GAAG,yBAAyB,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1E,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;IAE9C,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,kEAAkE,SAAS,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,UAA2B;IACjE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,GAAG,MAAM,mBAAmB,CAAC;IAC1E,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC1E,OAAO,GAAG,MAAM,iBAAiB,UAAU,CAAC,MAAM,OAAO,KAAK,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,UAAU,CAAC,MAAM;QACtB,CAAC,CAAC,GAAG,MAAM,uBAAuB;QAClC,CAAC,CAAC,6CAA6C,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { serializeMessageForObserver } from "../memory/observational.js";
|
|
2
|
+
/**
|
|
3
|
+
* Text projection produced by {@link serializeMessageForObserver}. The future
|
|
4
|
+
* advisor tool can pass that projection directly after serializing the
|
|
5
|
+
* `AgentMessage` values in `agent.state.messages`.
|
|
6
|
+
*/
|
|
7
|
+
export type SerializedAdvisorMessage = ReturnType<typeof serializeMessageForObserver>;
|
|
8
|
+
/** Inputs needed to assemble advisor context without runtime or persistence dependencies. */
|
|
9
|
+
export interface BuildAdvisorTranscriptInput {
|
|
10
|
+
/** Serialized first user turn, pinned ahead of every lower-priority section. */
|
|
11
|
+
firstUserMessage: SerializedAdvisorMessage;
|
|
12
|
+
/** Fully resolved executor prompt; rendered as quoted transcript content, not instructions. */
|
|
13
|
+
executorSystemPrompt: string;
|
|
14
|
+
/** Chronological `Observation.content` values from `readSessionObservations`. */
|
|
15
|
+
observations: readonly string[];
|
|
16
|
+
/** Serialized recent messages in oldest-to-newest order. */
|
|
17
|
+
tailMessages: readonly SerializedAdvisorMessage[];
|
|
18
|
+
/** Maximum estimated tokens allowed in the returned text. */
|
|
19
|
+
budgetTokens: number;
|
|
20
|
+
}
|
|
21
|
+
/** A budgeted advisor payload and the memory system's estimate for that exact text. */
|
|
22
|
+
export interface AdvisorTranscript {
|
|
23
|
+
/** Curated transcript to send as advisor-call content. */
|
|
24
|
+
text: string;
|
|
25
|
+
/** Heuristic token estimate for `text`, using the memory system's estimator. */
|
|
26
|
+
tokens: number;
|
|
27
|
+
/** True when any source content was omitted or shortened to meet the budget. */
|
|
28
|
+
truncated: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Assemble the executor context in descending retention priority. Higher-priority
|
|
32
|
+
* prose consumes the budget first; recent messages are retained newest-first at
|
|
33
|
+
* whole-message boundaries.
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildAdvisorTranscript(input: BuildAdvisorTranscriptInput): AdvisorTranscript;
|
|
36
|
+
//# sourceMappingURL=advisor-transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advisor-transcript.d.ts","sourceRoot":"","sources":["../../../src/model-routing/advisor-transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,2BAA2B,EAE5B,MAAM,4BAA4B,CAAC;AAEpC;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEtF,6FAA6F;AAC7F,MAAM,WAAW,2BAA2B;IAC1C,gFAAgF;IAChF,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,+FAA+F;IAC/F,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iFAAiF;IACjF,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,4DAA4D;IAC5D,YAAY,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAClD,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,uFAAuF;AACvF,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,SAAS,EAAE,OAAO,CAAC;CACpB;AAOD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,iBAAiB,CA0C5F"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { estimateTokens, trimMessagesToTranscriptBudget, } from "../memory/observational.js";
|
|
2
|
+
const FIRST_USER_HEADING = "## Pinned first user message";
|
|
3
|
+
const SYSTEM_PROMPT_HEADING = "## Executor system prompt (quoted content)";
|
|
4
|
+
const OBSERVATIONS_HEADING = "## Observations";
|
|
5
|
+
const TAIL_HEADING = "## Recent transcript";
|
|
6
|
+
/**
|
|
7
|
+
* Assemble the executor context in descending retention priority. Higher-priority
|
|
8
|
+
* prose consumes the budget first; recent messages are retained newest-first at
|
|
9
|
+
* whole-message boundaries.
|
|
10
|
+
*/
|
|
11
|
+
export function buildAdvisorTranscript(input) {
|
|
12
|
+
const budgetTokens = normalizeBudget(input.budgetTokens);
|
|
13
|
+
let text = "";
|
|
14
|
+
let truncated = false;
|
|
15
|
+
({ text, truncated } = appendPriorityContent(text, `${FIRST_USER_HEADING}\n\n${input.firstUserMessage.textPreview}`, budgetTokens, truncated));
|
|
16
|
+
const quotedSystemPrompt = quoteAsContent(input.executorSystemPrompt);
|
|
17
|
+
({ text, truncated } = appendPriorityContent(text, `${SYSTEM_PROMPT_HEADING}\n\nThe executor is operating under this system prompt:\n\n${quotedSystemPrompt}`, budgetTokens, truncated));
|
|
18
|
+
if (input.observations.length > 0) {
|
|
19
|
+
const observations = input.observations
|
|
20
|
+
.map((observation, index) => `[Observation ${index + 1}]\n${observation}`)
|
|
21
|
+
.join("\n\n");
|
|
22
|
+
({ text, truncated } = appendPriorityContent(text, `${OBSERVATIONS_HEADING}\n\n${observations}`, budgetTokens, truncated));
|
|
23
|
+
}
|
|
24
|
+
if (estimateTokens(text) < budgetTokens && !truncated) {
|
|
25
|
+
const tail = withoutPinnedDuplicate(input.tailMessages, input.firstUserMessage);
|
|
26
|
+
const tailResult = buildTailSection(text, tail, budgetTokens);
|
|
27
|
+
text = tailResult.text;
|
|
28
|
+
truncated = tailResult.truncated;
|
|
29
|
+
}
|
|
30
|
+
else if (input.tailMessages.length > 0) {
|
|
31
|
+
truncated = true;
|
|
32
|
+
}
|
|
33
|
+
return { text, tokens: estimateTokens(text), truncated };
|
|
34
|
+
}
|
|
35
|
+
function normalizeBudget(budgetTokens) {
|
|
36
|
+
if (!Number.isFinite(budgetTokens))
|
|
37
|
+
return 0;
|
|
38
|
+
return Math.max(0, Math.floor(budgetTokens));
|
|
39
|
+
}
|
|
40
|
+
function quoteAsContent(prompt) {
|
|
41
|
+
return prompt
|
|
42
|
+
.split("\n")
|
|
43
|
+
.map((line) => `> ${line}`)
|
|
44
|
+
.join("\n");
|
|
45
|
+
}
|
|
46
|
+
function appendPriorityContent(existing, content, budgetTokens, alreadyTruncated) {
|
|
47
|
+
if (alreadyTruncated)
|
|
48
|
+
return { text: existing, truncated: true };
|
|
49
|
+
const separator = existing.length > 0 ? "\n\n" : "";
|
|
50
|
+
const candidate = `${existing}${separator}${content}`;
|
|
51
|
+
if (estimateTokens(candidate) <= budgetTokens) {
|
|
52
|
+
return { text: candidate, truncated: false };
|
|
53
|
+
}
|
|
54
|
+
let low = 0;
|
|
55
|
+
let high = content.length;
|
|
56
|
+
while (low < high) {
|
|
57
|
+
const midpoint = Math.ceil((low + high) / 2);
|
|
58
|
+
if (estimateTokens(`${existing}${separator}${content.slice(0, midpoint)}`) <= budgetTokens) {
|
|
59
|
+
low = midpoint;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
high = midpoint - 1;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return { text: `${existing}${separator}${content.slice(0, low)}`, truncated: true };
|
|
66
|
+
}
|
|
67
|
+
function withoutPinnedDuplicate(tailMessages, firstUserMessage) {
|
|
68
|
+
const duplicateIndex = tailMessages.findIndex((message) => message.textPreview === firstUserMessage.textPreview);
|
|
69
|
+
return tailMessages.filter((_message, index) => index !== duplicateIndex);
|
|
70
|
+
}
|
|
71
|
+
function buildTailSection(existing, tailMessages, budgetTokens) {
|
|
72
|
+
if (tailMessages.length === 0)
|
|
73
|
+
return { text: existing, truncated: false };
|
|
74
|
+
const remainingTokens = Math.max(0, budgetTokens - estimateTokens(existing));
|
|
75
|
+
const rawMessages = tailMessages.map((message, index) => ({
|
|
76
|
+
id: String(index),
|
|
77
|
+
createdAt: index,
|
|
78
|
+
role: "assistant",
|
|
79
|
+
content: [{ type: "text", text: message.textPreview }],
|
|
80
|
+
textPreview: message.textPreview,
|
|
81
|
+
estimatedTokens: estimateTokens(message.textPreview),
|
|
82
|
+
}));
|
|
83
|
+
const trimmed = trimMessagesToTranscriptBudget(rawMessages, remainingTokens);
|
|
84
|
+
let kept = trimmed.filter((message) => {
|
|
85
|
+
const source = rawMessages[Number(message.id)];
|
|
86
|
+
return source?.textPreview === message.textPreview;
|
|
87
|
+
});
|
|
88
|
+
while (true) {
|
|
89
|
+
const elidedCount = tailMessages.length - kept.length;
|
|
90
|
+
const elision = elidedCount > 0 ? `[earlier transcript elided: ${elidedCount} messages]\n\n` : "";
|
|
91
|
+
const body = kept.map((message) => message.textPreview).join("\n\n");
|
|
92
|
+
const section = `${TAIL_HEADING}\n\n${elision}${body}`.trimEnd();
|
|
93
|
+
const candidate = `${existing}\n\n${section}`;
|
|
94
|
+
if (estimateTokens(candidate) <= budgetTokens) {
|
|
95
|
+
return { text: candidate, truncated: elidedCount > 0 };
|
|
96
|
+
}
|
|
97
|
+
if (kept.length === 0) {
|
|
98
|
+
return appendPriorityContent(existing, section, budgetTokens, false);
|
|
99
|
+
}
|
|
100
|
+
kept = kept.slice(1);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=advisor-transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advisor-transcript.js","sourceRoot":"","sources":["../../../src/model-routing/advisor-transcript.ts"],"names":[],"mappings":"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"}
|