@cleocode/core 2026.6.5 → 2026.6.6
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/dist/docs/export-document.js +189 -137
- package/dist/docs/export-document.js.map +2 -2
- package/dist/llm/api-mode.d.ts +64 -0
- package/dist/llm/api-mode.d.ts.map +1 -0
- package/dist/llm/api-mode.js +72 -0
- package/dist/llm/api-mode.js.map +1 -0
- package/dist/llm/api.d.ts.map +1 -1
- package/dist/llm/api.js +6 -37
- package/dist/llm/api.js.map +1 -1
- package/dist/llm/auxiliary-fallback.d.ts.map +1 -1
- package/dist/llm/auxiliary-fallback.js +24 -38
- package/dist/llm/auxiliary-fallback.js.map +1 -1
- package/dist/llm/model-runner.d.ts +127 -0
- package/dist/llm/model-runner.d.ts.map +1 -0
- package/dist/llm/model-runner.js +282 -0
- package/dist/llm/model-runner.js.map +1 -0
- package/dist/llm/plugin-facade.js +29391 -1473
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/llm/role-executor.d.ts +6 -5
- package/dist/llm/role-executor.d.ts.map +1 -1
- package/dist/llm/role-executor.js +40 -86
- package/dist/llm/role-executor.js.map +1 -1
- package/dist/llm/role-resolver.d.ts +28 -1
- package/dist/llm/role-resolver.d.ts.map +1 -1
- package/dist/llm/role-resolver.js +10 -0
- package/dist/llm/role-resolver.js.map +1 -1
- package/dist/llm/session-factory.d.ts +4 -6
- package/dist/llm/session-factory.d.ts.map +1 -1
- package/dist/llm/session-factory.js +6 -72
- package/dist/llm/session-factory.js.map +1 -1
- package/dist/llm/system-resolver.d.ts.map +1 -1
- package/dist/llm/system-resolver.js +6 -0
- package/dist/llm/system-resolver.js.map +1 -1
- package/dist/llm/tool-loop.d.ts.map +1 -1
- package/dist/llm/tool-loop.js +9 -32
- package/dist/llm/tool-loop.js.map +1 -1
- package/dist/release/reconcile.d.ts +61 -0
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +187 -2
- package/dist/release/reconcile.js.map +1 -1
- package/dist/store/exodus/column-transforms.d.ts +248 -0
- package/dist/store/exodus/column-transforms.d.ts.map +1 -0
- package/dist/store/exodus/column-transforms.js +444 -0
- package/dist/store/exodus/column-transforms.js.map +1 -0
- package/dist/store/exodus/migrate.d.ts.map +1 -1
- package/dist/store/exodus/migrate.js +5 -267
- package/dist/store/exodus/migrate.js.map +1 -1
- package/dist/store/exodus/verify-migration.d.ts.map +1 -1
- package/dist/store/exodus/verify-migration.js +61 -3
- package/dist/store/exodus/verify-migration.js.map +1 -1
- package/package.json +12 -12
|
@@ -7,11 +7,12 @@
|
|
|
7
7
|
*
|
|
8
8
|
* 1. {@link resolveLLMForRole}(role) — picks provider + model + credential
|
|
9
9
|
* from the standard config chain (roles → default → daemon → fallback).
|
|
10
|
-
* 2.
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
10
|
+
* 2. {@link deriveApiWire}(provider, authType) — stamps the wire protocol +
|
|
11
|
+
* implied base URL for the resolved pair (E9 · T11745).
|
|
12
|
+
* 3. {@link ModelRunner.buildTransportFromCredential} — the single SSoT
|
|
13
|
+
* factory builds the exact transport for ANY provider (anthropic incl. the
|
|
14
|
+
* OAuth beta header, kimi-code, openai-OAuth/codex, OpenAI-compat) from the
|
|
15
|
+
* descriptor data alone — no per-provider branching here.
|
|
15
16
|
*
|
|
16
17
|
* Replaces the hardcoded `fetch('https://api.anthropic.com/v1/messages')`
|
|
17
18
|
* in {@link memory/sleep-consolidation.ts} and {@link memory/observer-reflector.ts}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-executor.d.ts","sourceRoot":"","sources":["../../src/llm/role-executor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"role-executor.d.ts","sourceRoot":"","sources":["../../src/llm/role-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,gDAAgD,CAAC;AAQxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA2BxD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,KAAK,EAAE,eAAe,CAAC;IACvB,uDAAuD;IACvD,QAAQ,EAAE,cAAc,CAAC;IACzB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;CACf;AAKD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAiHtC"}
|
|
@@ -7,11 +7,12 @@
|
|
|
7
7
|
*
|
|
8
8
|
* 1. {@link resolveLLMForRole}(role) — picks provider + model + credential
|
|
9
9
|
* from the standard config chain (roles → default → daemon → fallback).
|
|
10
|
-
* 2.
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
10
|
+
* 2. {@link deriveApiWire}(provider, authType) — stamps the wire protocol +
|
|
11
|
+
* implied base URL for the resolved pair (E9 · T11745).
|
|
12
|
+
* 3. {@link ModelRunner.buildTransportFromCredential} — the single SSoT
|
|
13
|
+
* factory builds the exact transport for ANY provider (anthropic incl. the
|
|
14
|
+
* OAuth beta header, kimi-code, openai-OAuth/codex, OpenAI-compat) from the
|
|
15
|
+
* descriptor data alone — no per-provider branching here.
|
|
15
16
|
*
|
|
16
17
|
* Replaces the hardcoded `fetch('https://api.anthropic.com/v1/messages')`
|
|
17
18
|
* in {@link memory/sleep-consolidation.ts} and {@link memory/observer-reflector.ts}
|
|
@@ -28,16 +29,12 @@
|
|
|
28
29
|
* @epic T9261 T-LLM-CRED-CENTRALIZATION
|
|
29
30
|
* @see ADR-072 §Type lock-in
|
|
30
31
|
*/
|
|
32
|
+
import { deriveApiWire } from './api-mode.js';
|
|
31
33
|
import { CredentialPool } from './credential-pool.js';
|
|
32
34
|
import { classifyError } from './error-classifier.js';
|
|
33
|
-
import {
|
|
35
|
+
import { ModelRunner } from './model-runner.js';
|
|
36
|
+
import { isKimiCodeApiKey } from './provider-registry/builtin/kimi-code.js';
|
|
34
37
|
import { resolveLLMForRole } from './role-resolver.js';
|
|
35
|
-
import { AnthropicTransport } from './transports/anthropic.js';
|
|
36
|
-
import { ChatCompletionsTransport } from './transports/chat-completions.js';
|
|
37
|
-
import { buildCodexOAuthHeaders, CODEX_OAUTH_BASE_URL } from './transports/codex-oauth-headers.js';
|
|
38
|
-
import { CodexResponsesTransport } from './transports/codex-responses.js';
|
|
39
|
-
/** Kimi Code chat endpoint — speaks Anthropic Messages protocol. */
|
|
40
|
-
const KIMI_CODE_BASE_URL = 'https://api.kimi.com/coding';
|
|
41
38
|
/**
|
|
42
39
|
* Process-lifetime latch set of `role|provider|label` keys that have already
|
|
43
40
|
* emitted a credential-failure warning. Prevents a dead/rejected credential
|
|
@@ -114,82 +111,39 @@ export async function executeForRole(role, systemPrompt, userContent, opts = {})
|
|
|
114
111
|
...(opts.signal !== undefined ? { signal: opts.signal } : {}),
|
|
115
112
|
};
|
|
116
113
|
try {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
114
|
+
// Single SSoT transport construction (E9 · T11745). The resolver gives us
|
|
115
|
+
// (provider, authType); `deriveApiWire` stamps the wire protocol + implied
|
|
116
|
+
// base URL; the one {@link ModelRunner} builds the exact transport for ANY
|
|
117
|
+
// provider — anthropic (incl. the OAuth beta header), kimi-code (Anthropic
|
|
118
|
+
// protocol + mandatory X-Msh headers), openai-OAuth/codex (codex_responses +
|
|
119
|
+
// ChatGPT-backend Cloudflare headers), or OpenAI-compatible chat_completions
|
|
120
|
+
// — with NO per-provider branching here. This replaces the four inline
|
|
121
|
+
// transport blocks that had each drifted from `session-factory` (the
|
|
122
|
+
// anthropic block hardcoded the OAuth beta header; the others omitted it).
|
|
123
|
+
const authType = llm.credential.authType === 'oauth' ? 'oauth' : 'api_key';
|
|
124
|
+
// Diagnostic (preserved): a non-`sk-kimi-`, non-OAuth key routed to
|
|
125
|
+
// kimi-code will likely fail — the legacy Moonshot `mk-*` path lives on the
|
|
126
|
+
// separate `moonshot` provider.
|
|
127
|
+
if (llm.provider === 'kimi-code' &&
|
|
128
|
+
authType !== 'oauth' &&
|
|
129
|
+
!isKimiCodeApiKey(llm.credential.apiKey)) {
|
|
130
|
+
console.warn(`[role-executor] kimi-code credential is not sk-kimi- prefixed and not OAuth; ` +
|
|
131
|
+
`the request may fail. Configure a coding-plan key from kimi.com/code or ` +
|
|
132
|
+
`switch the provider to 'moonshot' for legacy mk- keys.`);
|
|
136
133
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
// api.kimi.com/coding. Both `sk-kimi-*` API keys and OAuth bearer
|
|
140
|
-
// tokens authenticate via `Authorization: Bearer …` — the legacy
|
|
141
|
-
// Moonshot `mk-*` API-key path lives on the separate `moonshot`
|
|
142
|
-
// provider, not here. Mandatory `X-Msh-*` headers are merged in.
|
|
143
|
-
// (Defensive: also check the key prefix in case a misconfigured key
|
|
144
|
-
// routed to kimi-code despite being a legacy moonshot key.)
|
|
145
|
-
if (!isKimiCodeApiKey(llm.credential.apiKey) && llm.credential.authType !== 'oauth') {
|
|
146
|
-
console.warn(`[role-executor] kimi-code credential is not sk-kimi- prefixed and not OAuth; ` +
|
|
147
|
-
`the request may fail. Configure a coding-plan key from kimi.com/code or ` +
|
|
148
|
-
`switch the provider to 'moonshot' for legacy mk- keys.`);
|
|
149
|
-
}
|
|
150
|
-
const transport = new AnthropicTransport({
|
|
151
|
-
authToken: llm.credential.apiKey,
|
|
152
|
-
baseUrl: KIMI_CODE_BASE_URL,
|
|
153
|
-
defaultHeaders: getKimiCodeMshHeaders(),
|
|
154
|
-
});
|
|
155
|
-
const resp = await transport.complete(request);
|
|
156
|
-
return {
|
|
157
|
-
content: resp.content ?? '',
|
|
158
|
-
usage: resp.usage,
|
|
159
|
-
provider: llm.provider,
|
|
160
|
-
model: resp.model,
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
if (llm.provider === 'openai' && llm.credential.authType === 'oauth') {
|
|
164
|
-
// OpenAI Codex OAuth path. A ChatGPT-issued OAuth bearer token is NOT
|
|
165
|
-
// accepted at `api.openai.com`; it authenticates against the Codex
|
|
166
|
-
// backend (`chatgpt.com/backend-api/codex`) via the Responses API, with
|
|
167
|
-
// the Cloudflare-bypass headers hermes-agent documented (originator +
|
|
168
|
-
// ChatGPT-Account-ID). This is the branch the RCA found missing — it lets
|
|
169
|
-
// a background role be fulfilled by the live `openai/codex-cli` OAuth
|
|
170
|
-
// credential in the pool. (api_key OpenAI keeps the chat_completions
|
|
171
|
-
// path below.)
|
|
172
|
-
const transport = new CodexResponsesTransport({
|
|
173
|
-
provider: llm.provider,
|
|
174
|
-
apiKey: llm.credential.apiKey,
|
|
175
|
-
baseUrl: CODEX_OAUTH_BASE_URL,
|
|
176
|
-
defaultHeaders: buildCodexOAuthHeaders(llm.credential.apiKey),
|
|
177
|
-
});
|
|
178
|
-
const resp = await transport.complete(request);
|
|
179
|
-
return {
|
|
180
|
-
content: resp.content ?? '',
|
|
181
|
-
usage: resp.usage,
|
|
182
|
-
provider: llm.provider,
|
|
183
|
-
model: resp.model,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
// openai (api_key) / openrouter / deepseek / xai / groq / moonshot /
|
|
187
|
-
// gemini-via-shim — all speak OpenAI chat_completions. ChatCompletionsTransport
|
|
188
|
-
// routes through the OpenAI SDK which sets Authorization: Bearer from apiKey.
|
|
189
|
-
const transport = new ChatCompletionsTransport({
|
|
134
|
+
const wire = deriveApiWire(llm.provider, authType);
|
|
135
|
+
const resolvedCredential = {
|
|
190
136
|
provider: llm.provider,
|
|
191
|
-
|
|
192
|
-
|
|
137
|
+
label: llm.credentialLabel ?? 'default',
|
|
138
|
+
token: llm.credential.apiKey,
|
|
139
|
+
authType,
|
|
140
|
+
expiresAt: null,
|
|
141
|
+
refreshToken: null,
|
|
142
|
+
extraHeaders: {},
|
|
143
|
+
baseUrl: wire.baseUrl,
|
|
144
|
+
awsProfile: null,
|
|
145
|
+
};
|
|
146
|
+
const transport = ModelRunner.buildTransportFromCredential(llm.provider, resolvedCredential, wire.apiMode);
|
|
193
147
|
const resp = await transport.complete(request);
|
|
194
148
|
return {
|
|
195
149
|
content: resp.content ?? '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-executor.js","sourceRoot":"","sources":["../../src/llm/role-executor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"role-executor.js","sourceRoot":"","sources":["../../src/llm/role-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* @module llm/role-resolver
|
|
27
27
|
*/
|
|
28
28
|
import type { Anthropic } from '@anthropic-ai/sdk';
|
|
29
|
-
import type { ResolutionSource, ResolveLLMForRoleOptions, RoleName } from '@cleocode/contracts';
|
|
29
|
+
import type { ApiMode, ModelCaps, ResolutionSource, ResolveLLMForRoleOptions, RoleName } from '@cleocode/contracts';
|
|
30
30
|
import type { OpenAI } from 'openai';
|
|
31
31
|
import { type CredentialResult } from './credentials.js';
|
|
32
32
|
import { IMPLICIT_FALLBACK_MODEL } from './fallback-model.js';
|
|
@@ -118,6 +118,33 @@ export interface ResolvedLLM {
|
|
|
118
118
|
source: ResolutionSource;
|
|
119
119
|
/** When `roles[role].credentialLabel` was set, the label that was used. */
|
|
120
120
|
credentialLabel?: string;
|
|
121
|
+
/**
|
|
122
|
+
* Wire protocol spoken by the resolved provider/credential pair (E9 · T11745).
|
|
123
|
+
*
|
|
124
|
+
* The load-bearing SSoT addition: the single {@link import('./model-runner.js').ModelRunner}
|
|
125
|
+
* branches on this to construct the correct transport — `'codex_responses'`
|
|
126
|
+
* routes a ChatGPT OAuth token through the Responses API; everything else
|
|
127
|
+
* follows {@link deriveApiWire}. Derived in {@link resolveLLMForRole} from the
|
|
128
|
+
* resolved `provider` + `credential.authType`.
|
|
129
|
+
*/
|
|
130
|
+
apiMode: ApiMode;
|
|
131
|
+
/**
|
|
132
|
+
* Per-provider API endpoint override implied by the resolution. `null` when
|
|
133
|
+
* the transport's own default (or the credential's `baseUrl`) should win.
|
|
134
|
+
* Currently carries the codex ChatGPT-backend URL for OAuth openai resolution.
|
|
135
|
+
*/
|
|
136
|
+
baseUrl: string | null;
|
|
137
|
+
/**
|
|
138
|
+
* Scheme used to present the credential. Mirrors `credential.authType`,
|
|
139
|
+
* surfaced at the top level so the runner does not have to reach into the
|
|
140
|
+
* credential. `null` when no credential was resolved.
|
|
141
|
+
*/
|
|
142
|
+
authType: 'api_key' | 'oauth' | 'aws_sdk' | null;
|
|
143
|
+
/**
|
|
144
|
+
* Coarse capability hints (tools/json/vision/thinking) so a runner can pick
|
|
145
|
+
* the right call shape. Optional — absent means "unknown".
|
|
146
|
+
*/
|
|
147
|
+
capabilities?: ModelCaps;
|
|
121
148
|
}
|
|
122
149
|
/**
|
|
123
150
|
* Resolve the LLM client + credential for a logical role.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-resolver.d.ts","sourceRoot":"","sources":["../../src/llm/role-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"role-resolver.d.ts","sourceRoot":"","sources":["../../src/llm/role-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EACV,OAAO,EAMP,SAAS,EACT,gBAAgB,EAChB,wBAAwB,EACxB,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,EAAE,KAAK,gBAAgB,EAAsB,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,cAA4B,CAAC;AAEtE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAKrE,YAAY,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;AAE3D;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,QAAQ,EAAE,cAAc,CAAC;IACzB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB;;;OAGG;IACH,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,kDAAkD;IAClD,MAAM,EAAE,gBAAgB,CAAC;IACzB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;OAQG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;OAIG;IACH,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACjD;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAoLD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,QAAQ,EACd,IAAI,CAAC,EAAE,wBAAwB,GAC9B,OAAO,CAAC,WAAW,CAAC,CAsEtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,QAAQ,EACd,IAAI,CAAC,EAAE,wBAAwB,GAC9B,OAAO,CAAC;IACT,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,gBAAgB,CAAC;CAC9B,GAAG,IAAI,CAAC,CAmBR"}
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
* @module llm/role-resolver
|
|
27
27
|
*/
|
|
28
28
|
import { resolveOrCwd } from '../paths.js';
|
|
29
|
+
import { deriveApiWire } from './api-mode.js';
|
|
29
30
|
import { CredentialPool } from './credential-pool.js';
|
|
30
31
|
import { resolveCredentials } from './credentials.js';
|
|
31
32
|
import { getCredentialByLabel, pickCredentialForProvider } from './credentials-store.js';
|
|
@@ -296,6 +297,12 @@ export async function resolveLLMForRole(role, opts) {
|
|
|
296
297
|
client = null;
|
|
297
298
|
}
|
|
298
299
|
}
|
|
300
|
+
// Step 5 — derive the SSoT wire facts (E9 · T11745). `apiMode`/`baseUrl` let
|
|
301
|
+
// the single ModelRunner construct the correct transport from descriptor data
|
|
302
|
+
// alone (codex routes purely on `apiMode === 'codex_responses'`). `authType`
|
|
303
|
+
// is surfaced from the resolved credential (or null when none).
|
|
304
|
+
const authType = credential?.authType ?? null;
|
|
305
|
+
const wire = deriveApiWire(provider, authType);
|
|
299
306
|
return {
|
|
300
307
|
provider,
|
|
301
308
|
model,
|
|
@@ -303,6 +310,9 @@ export async function resolveLLMForRole(role, opts) {
|
|
|
303
310
|
credential,
|
|
304
311
|
source,
|
|
305
312
|
credentialLabel: usedLabel,
|
|
313
|
+
apiMode: wire.apiMode,
|
|
314
|
+
baseUrl: wire.baseUrl,
|
|
315
|
+
authType,
|
|
306
316
|
};
|
|
307
317
|
}
|
|
308
318
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-resolver.js","sourceRoot":"","sources":["../../src/llm/role-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;
|
|
1
|
+
{"version":3,"file":"role-resolver.js","sourceRoot":"","sources":["../../src/llm/role-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,12 +17,10 @@ import type { ModelTransport } from './types-config.js';
|
|
|
17
17
|
/**
|
|
18
18
|
* Instantiate the correct {@link LlmTransport} for a provider/credential pair.
|
|
19
19
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* - `apiMode === 'codex_responses'` → {@link CodexResponsesTransport}
|
|
25
|
-
* - everything else → {@link ChatCompletionsTransport} (OpenAI-compatible)
|
|
20
|
+
* Thin shim over the single SSoT factory {@link ModelRunner.buildTransportFromCredential}
|
|
21
|
+
* (E9 · T11745). The provider→transport mapping (anthropic / bedrock / gemini /
|
|
22
|
+
* ollama / codex_responses / chat-completions) now lives in ONE place — this
|
|
23
|
+
* function delegates so existing callers keep their signature.
|
|
26
24
|
*
|
|
27
25
|
* `apiMode` takes precedence over provider name when `'codex_responses'` is
|
|
28
26
|
* supplied — this allows xAI `grok-*` models to be served via the Responses
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-factory.d.ts","sourceRoot":"","sources":["../../src/llm/session-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACtB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"session-factory.d.ts","sourceRoot":"","sources":["../../src/llm/session-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACtB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AAIzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMxD;;;;;;;;;;;;;;;;;GAiBG;AACH,iBAAS,oBAAoB,CAC3B,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,kBAAkB,EAC9B,OAAO,CAAC,EAAE,OAAO,GAChB,YAAY,CAEd;AAuCD;;;;;;;;;;;;;GAaG;AACH,qBAAa,wBAAyB,YAAW,iBAAiB;IAChE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA0B;IAE9D;;;OAGG;gBACS,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE;IAIhD;;;;;;;;;OASG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAItD;;;;;;;;;;OAUG;IACG,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC;CA0C/D;AAMD;;;;;;GAMG;AACH,OAAO,EAAE,oBAAoB,IAAI,+BAA+B,EAAE,CAAC"}
|
|
@@ -10,25 +10,18 @@
|
|
|
10
10
|
* @see ADR-072 §2.2
|
|
11
11
|
*/
|
|
12
12
|
import { ConcreteSession } from './concrete-session.js';
|
|
13
|
+
import { ModelRunner } from './model-runner.js';
|
|
13
14
|
import { resolveLLMForRole } from './role-resolver.js';
|
|
14
|
-
import { AnthropicTransport } from './transports/anthropic.js';
|
|
15
|
-
import { BedrockTransport } from './transports/bedrock.js';
|
|
16
|
-
import { ChatCompletionsTransport } from './transports/chat-completions.js';
|
|
17
|
-
import { CodexResponsesTransport } from './transports/codex-responses.js';
|
|
18
|
-
import { GeminiTransport } from './transports/gemini.js';
|
|
19
|
-
import { OllamaTransport } from './transports/ollama.js';
|
|
20
15
|
// ---------------------------------------------------------------------------
|
|
21
16
|
// Transport factory
|
|
22
17
|
// ---------------------------------------------------------------------------
|
|
23
18
|
/**
|
|
24
19
|
* Instantiate the correct {@link LlmTransport} for a provider/credential pair.
|
|
25
20
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* - `apiMode === 'codex_responses'` → {@link CodexResponsesTransport}
|
|
31
|
-
* - everything else → {@link ChatCompletionsTransport} (OpenAI-compatible)
|
|
21
|
+
* Thin shim over the single SSoT factory {@link ModelRunner.buildTransportFromCredential}
|
|
22
|
+
* (E9 · T11745). The provider→transport mapping (anthropic / bedrock / gemini /
|
|
23
|
+
* ollama / codex_responses / chat-completions) now lives in ONE place — this
|
|
24
|
+
* function delegates so existing callers keep their signature.
|
|
32
25
|
*
|
|
33
26
|
* `apiMode` takes precedence over provider name when `'codex_responses'` is
|
|
34
27
|
* supplied — this allows xAI `grok-*` models to be served via the Responses
|
|
@@ -41,66 +34,7 @@ import { OllamaTransport } from './transports/ollama.js';
|
|
|
41
34
|
* @returns The appropriate transport instance.
|
|
42
35
|
*/
|
|
43
36
|
function transportForProvider(provider, credential, apiMode) {
|
|
44
|
-
|
|
45
|
-
const opts = credential.authType === 'oauth'
|
|
46
|
-
? { authToken: credential.token, baseUrl: credential.baseUrl ?? undefined }
|
|
47
|
-
: {
|
|
48
|
-
apiKey: credential.token,
|
|
49
|
-
baseUrl: credential.baseUrl ?? undefined,
|
|
50
|
-
defaultHeaders: Object.keys(credential.extraHeaders).length
|
|
51
|
-
? credential.extraHeaders
|
|
52
|
-
: undefined,
|
|
53
|
-
};
|
|
54
|
-
return new AnthropicTransport(opts);
|
|
55
|
-
}
|
|
56
|
-
if (provider === 'bedrock') {
|
|
57
|
-
// BedrockTransport resolves credentials via fromNodeProviderChain() internally.
|
|
58
|
-
// The credential.awsProfile field carries the optional profile override.
|
|
59
|
-
return new BedrockTransport({
|
|
60
|
-
awsProfile: credential.awsProfile ?? undefined,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
if (provider === 'gemini') {
|
|
64
|
-
return new GeminiTransport({
|
|
65
|
-
apiKey: credential.token,
|
|
66
|
-
baseUrl: credential.baseUrl ?? undefined,
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
if (provider === 'ollama') {
|
|
70
|
-
// Ollama typically requires no auth key for local deployments; the token
|
|
71
|
-
// is passed through anyway so remote/proxied deployments work transparently.
|
|
72
|
-
return new OllamaTransport({
|
|
73
|
-
baseUrl: credential.baseUrl ?? undefined,
|
|
74
|
-
apiKey: credential.token || undefined,
|
|
75
|
-
defaultHeaders: Object.keys(credential.extraHeaders).length
|
|
76
|
-
? credential.extraHeaders
|
|
77
|
-
: undefined,
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
if (apiMode === 'codex_responses') {
|
|
81
|
-
const defaultHeaders = { ...credential.extraHeaders };
|
|
82
|
-
if (credential.authType === 'oauth') {
|
|
83
|
-
defaultHeaders['Authorization'] = `Bearer ${credential.token}`;
|
|
84
|
-
}
|
|
85
|
-
return new CodexResponsesTransport({
|
|
86
|
-
apiKey: credential.token,
|
|
87
|
-
baseUrl: credential.baseUrl ?? undefined,
|
|
88
|
-
defaultHeaders: Object.keys(defaultHeaders).length ? defaultHeaders : undefined,
|
|
89
|
-
provider,
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
// All other providers (openai, moonshot, openrouter, deepseek, xai, groq,
|
|
93
|
-
// kimi-code, …) use ChatCompletionsTransport.
|
|
94
|
-
const defaultHeaders = { ...credential.extraHeaders };
|
|
95
|
-
if (credential.authType === 'oauth') {
|
|
96
|
-
defaultHeaders['Authorization'] = `Bearer ${credential.token}`;
|
|
97
|
-
}
|
|
98
|
-
return new ChatCompletionsTransport({
|
|
99
|
-
apiKey: credential.token,
|
|
100
|
-
baseUrl: credential.baseUrl ?? undefined,
|
|
101
|
-
defaultHeaders: Object.keys(defaultHeaders).length ? defaultHeaders : undefined,
|
|
102
|
-
provider,
|
|
103
|
-
});
|
|
37
|
+
return ModelRunner.buildTransportFromCredential(provider, credential, apiMode);
|
|
104
38
|
}
|
|
105
39
|
// ---------------------------------------------------------------------------
|
|
106
40
|
// Credential bridging helper
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-factory.js","sourceRoot":"","sources":["../../src/llm/session-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"session-factory.js","sourceRoot":"","sources":["../../src/llm/session-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-resolver.d.ts","sourceRoot":"","sources":["../../src/llm/system-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,0BAA0B,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAG7F,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,oBAAoB,CAAC;AAI5B;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD;;;;OAIG;IACH,MAAM,EAAE,WAAW,CAAC;IAEpB;;;;;OAKG;IACH,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC/B;AAqED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE,0BAA0B,GAChC,OAAO,CAAC,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"system-resolver.d.ts","sourceRoot":"","sources":["../../src/llm/system-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,0BAA0B,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAG7F,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,oBAAoB,CAAC;AAI5B;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD;;;;OAIG;IACH,MAAM,EAAE,WAAW,CAAC;IAEpB;;;;;OAKG;IACH,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC/B;AAqED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE,0BAA0B,GAChC,OAAO,CAAC,oBAAoB,CAAC,CA+C/B"}
|
|
@@ -151,6 +151,12 @@ export async function resolveLLMForSystem(system, opts) {
|
|
|
151
151
|
client: null,
|
|
152
152
|
credential: null,
|
|
153
153
|
source: 'implicit-fallback',
|
|
154
|
+
// SSoT wire facts (E9 · T11745): the implicit-fallback provider is
|
|
155
|
+
// anthropic and there is no credential, so the descriptor advertises the
|
|
156
|
+
// anthropic_messages protocol with no override / no auth.
|
|
157
|
+
apiMode: 'anthropic_messages',
|
|
158
|
+
baseUrl: null,
|
|
159
|
+
authType: null,
|
|
154
160
|
};
|
|
155
161
|
}
|
|
156
162
|
// Upgrade the implicit-fallback model to the SSoT catalog default unless
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-resolver.js","sourceRoot":"","sources":["../../src/llm/system-resolver.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"system-resolver.js","sourceRoot":"","sources":["../../src/llm/system-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-loop.d.ts","sourceRoot":"","sources":["../../src/llm/tool-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"tool-loop.d.ts","sourceRoot":"","sources":["../../src/llm/tool-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAaH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,6BAA6B,EAC7B,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,KAAK,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEzF,gBAAgB;AAChB,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAChD,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE,YAAY,EAAE,cAAc,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,aAAa,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,cAAc,EAAE,MAAM,WAAW,CAAC;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,mBAAmB,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC7C,kEAAkE;IAClE,WAAW,EAAE,WAAW,CAAC;CAC1B;AAiED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,6BAA6B,CAAC,CA2InE"}
|
package/dist/llm/tool-loop.js
CHANGED
|
@@ -23,9 +23,7 @@
|
|
|
23
23
|
import { ConcreteExecutor } from './concrete-executor.js';
|
|
24
24
|
import { ConcreteSession } from './concrete-session.js';
|
|
25
25
|
import { truncateMessagesToFit } from './conversation.js';
|
|
26
|
-
import {
|
|
27
|
-
import { ChatCompletionsTransport } from './transports/chat-completions.js';
|
|
28
|
-
import { GeminiTransport } from './transports/gemini.js';
|
|
26
|
+
import { ModelRunner } from './model-runner.js';
|
|
29
27
|
export const MIN_TOOL_ITERATIONS = 1;
|
|
30
28
|
export const MAX_TOOL_ITERATIONS = 100;
|
|
31
29
|
// ---------------------------------------------------------------------------
|
|
@@ -45,37 +43,16 @@ function _resolvedCredentialFromConfig(config) {
|
|
|
45
43
|
awsProfile: null,
|
|
46
44
|
};
|
|
47
45
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
defaultHeaders: Object.keys(cred.extraHeaders).length ? cred.extraHeaders : undefined,
|
|
56
|
-
};
|
|
57
|
-
return new AnthropicTransport(opts);
|
|
58
|
-
}
|
|
59
|
-
if (provider === 'gemini') {
|
|
60
|
-
return new GeminiTransport({
|
|
61
|
-
apiKey: cred.token,
|
|
62
|
-
baseUrl: cred.baseUrl ?? undefined,
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
const defaultHeaders = { ...cred.extraHeaders };
|
|
66
|
-
if (cred.authType === 'oauth') {
|
|
67
|
-
defaultHeaders['Authorization'] = `Bearer ${cred.token}`;
|
|
68
|
-
}
|
|
69
|
-
return new ChatCompletionsTransport({
|
|
70
|
-
apiKey: cred.token,
|
|
71
|
-
baseUrl: cred.baseUrl ?? undefined,
|
|
72
|
-
defaultHeaders: Object.keys(defaultHeaders).length ? defaultHeaders : undefined,
|
|
73
|
-
provider,
|
|
74
|
-
});
|
|
75
|
-
}
|
|
46
|
+
/**
|
|
47
|
+
* Build a one-shot {@link LlmSession} from a {@link ModelConfig}.
|
|
48
|
+
*
|
|
49
|
+
* Transport construction is delegated to the single SSoT factory
|
|
50
|
+
* {@link ModelRunner.buildTransportFromCredential} (E9 · T11745) — the
|
|
51
|
+
* previously-duplicated local `_transportForProvider` is gone.
|
|
52
|
+
*/
|
|
76
53
|
function _sessionFromConfig(config, model) {
|
|
77
54
|
const cred = _resolvedCredentialFromConfig(config);
|
|
78
|
-
const transport =
|
|
55
|
+
const transport = ModelRunner.buildTransportFromCredential(config.transport, cred);
|
|
79
56
|
return new ConcreteSession({ transport, model, credential: cred });
|
|
80
57
|
}
|
|
81
58
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-loop.js","sourceRoot":"","sources":["../../src/llm/tool-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AASH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-loop.js","sourceRoot":"","sources":["../../src/llm/tool-loop.ts"],"names":[],"mappings":"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"}
|