@full-self-browsing/lattice 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/agent-run-C6miAzwI.d.ts +45 -0
  2. package/dist/agent-run-C6miAzwI.d.ts.map +1 -0
  3. package/dist/agent-run-CgPVFl0Z.js +47 -0
  4. package/dist/agent-run-CgPVFl0Z.js.map +1 -0
  5. package/dist/agents.d.ts +5 -0
  6. package/dist/agents.js +6 -0
  7. package/dist/artifact-Bg6mJGnm.d.ts +125 -0
  8. package/dist/artifact-Bg6mJGnm.d.ts.map +1 -0
  9. package/dist/artifact-DOfpeXLb.js +140 -0
  10. package/dist/artifact-DOfpeXLb.js.map +1 -0
  11. package/dist/artifacts.d.ts +2 -0
  12. package/dist/artifacts.js +2 -0
  13. package/dist/audit.d.ts +3 -0
  14. package/dist/audit.js +4 -0
  15. package/dist/catalog-CAfYwB_-.js +91 -0
  16. package/dist/catalog-CAfYwB_-.js.map +1 -0
  17. package/dist/context-pack-Bz3GXmjv.js +99 -0
  18. package/dist/context-pack-Bz3GXmjv.js.map +1 -0
  19. package/dist/context.d.ts +2 -0
  20. package/dist/context.js +2 -0
  21. package/dist/contract-S3oJGlc9.d.ts +74 -0
  22. package/dist/contract-S3oJGlc9.d.ts.map +1 -0
  23. package/dist/core.d.ts +48 -0
  24. package/dist/core.d.ts.map +1 -0
  25. package/dist/core.js +95 -0
  26. package/dist/core.js.map +1 -0
  27. package/dist/errors-eEuEIx6X.js +407 -0
  28. package/dist/errors-eEuEIx6X.js.map +1 -0
  29. package/dist/eval.d.ts +2 -0
  30. package/dist/eval.js +2 -0
  31. package/dist/fingerprint-DodDbQKN.js +34 -0
  32. package/dist/fingerprint-DodDbQKN.js.map +1 -0
  33. package/dist/index-DpnHGHVL.d.ts +53 -0
  34. package/dist/index-DpnHGHVL.d.ts.map +1 -0
  35. package/dist/index.d.ts +90 -3533
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +26 -15968
  38. package/dist/index.js.map +1 -1
  39. package/dist/infer-DLqp5QIM.d.ts +96 -0
  40. package/dist/infer-DLqp5QIM.d.ts.map +1 -0
  41. package/dist/lineage-DBgoPWAZ.js +137 -0
  42. package/dist/lineage-DBgoPWAZ.js.map +1 -0
  43. package/dist/local-CXOGPJ1f.js +139 -0
  44. package/dist/local-CXOGPJ1f.js.map +1 -0
  45. package/dist/local-Dy--7peL.d.ts +10 -0
  46. package/dist/local-Dy--7peL.d.ts.map +1 -0
  47. package/dist/memory-CkQEW6m5.js +62 -0
  48. package/dist/memory-CkQEW6m5.js.map +1 -0
  49. package/dist/memory-DRig5EHV.d.ts +10 -0
  50. package/dist/memory-DRig5EHV.d.ts.map +1 -0
  51. package/dist/negotiate-ClD88hkc.js +10967 -0
  52. package/dist/negotiate-ClD88hkc.js.map +1 -0
  53. package/dist/otel-BgM4e55_.d.ts +421 -0
  54. package/dist/otel-BgM4e55_.d.ts.map +1 -0
  55. package/dist/permission-context-CUKMo79F.js +134 -0
  56. package/dist/permission-context-CUKMo79F.js.map +1 -0
  57. package/dist/plan-DFm8Llep.js +125 -0
  58. package/dist/plan-DFm8Llep.js.map +1 -0
  59. package/dist/preflight-DNHWuJ46.d.ts +64 -0
  60. package/dist/preflight-DNHWuJ46.d.ts.map +1 -0
  61. package/dist/provider-C2IfKsvz.d.ts +1178 -0
  62. package/dist/provider-C2IfKsvz.d.ts.map +1 -0
  63. package/dist/providers.d.ts +4 -0
  64. package/dist/providers.js +4 -0
  65. package/dist/rate-limit-group-nDsBJqSu.d.ts +235 -0
  66. package/dist/rate-limit-group-nDsBJqSu.d.ts.map +1 -0
  67. package/dist/receipt-FYouoPHv.js +205 -0
  68. package/dist/receipt-FYouoPHv.js.map +1 -0
  69. package/dist/replay-CtIhpLek.js +964 -0
  70. package/dist/replay-CtIhpLek.js.map +1 -0
  71. package/dist/result-DLEx2WvU.d.ts +38 -0
  72. package/dist/result-DLEx2WvU.d.ts.map +1 -0
  73. package/dist/router-DU4Z3pTd.js +314 -0
  74. package/dist/router-DU4Z3pTd.js.map +1 -0
  75. package/dist/router-Yo1-aDOv.d.ts +42 -0
  76. package/dist/router-Yo1-aDOv.d.ts.map +1 -0
  77. package/dist/routing.d.ts +6 -0
  78. package/dist/routing.js +4 -0
  79. package/dist/{run-crew-CKdBjh5P.js → run-crew-B2fQLmgB.js} +7 -136
  80. package/dist/run-crew-B2fQLmgB.js.map +1 -0
  81. package/dist/run-crew-Bnve5dyI.d.ts +721 -0
  82. package/dist/run-crew-Bnve5dyI.d.ts.map +1 -0
  83. package/dist/{runtime-D25ehzCj.js → runtime-Dxiet5YS.js} +98 -641
  84. package/dist/runtime-Dxiet5YS.js.map +1 -0
  85. package/dist/scaffolds-DKQrCRqh.d.ts +535 -0
  86. package/dist/scaffolds-DKQrCRqh.d.ts.map +1 -0
  87. package/dist/scaffolds-ekPIlBeU.js +3139 -0
  88. package/dist/scaffolds-ekPIlBeU.js.map +1 -0
  89. package/dist/schema-CNfa_VEy.d.ts +15 -0
  90. package/dist/schema-CNfa_VEy.d.ts.map +1 -0
  91. package/dist/storage-DJKmsaEI.d.ts +26 -0
  92. package/dist/storage-DJKmsaEI.d.ts.map +1 -0
  93. package/dist/storage.d.ts +10 -0
  94. package/dist/storage.d.ts.map +1 -0
  95. package/dist/storage.js +4 -0
  96. package/dist/tool-call-validation-BFoXkwbf.js +107 -0
  97. package/dist/tool-call-validation-BFoXkwbf.js.map +1 -0
  98. package/dist/tools-C4wHgGKQ.js +49 -0
  99. package/dist/tools-C4wHgGKQ.js.map +1 -0
  100. package/dist/tools.d.ts +46 -0
  101. package/dist/tools.d.ts.map +1 -0
  102. package/dist/tools.js +106 -0
  103. package/dist/tools.js.map +1 -0
  104. package/dist/validate-c7EL5uuH.js +224 -0
  105. package/dist/validate-c7EL5uuH.js.map +1 -0
  106. package/package.json +99 -2
  107. package/dist/run-crew-CKdBjh5P.js.map +0 -1
  108. package/dist/runtime-D25ehzCj.js.map +0 -1
@@ -0,0 +1,535 @@
1
+ import { $ as XaiQuirks, E as NegotiatedCapabilities, H as RecommendedPromptStrategy, J as LiteLLMQuirks, K as AnthropicQuirks, Q as OpenRouterQuirks, X as OpenAICompatQuirks, Y as LmStudioQuirks, Z as OpenAIQuirks, bn as RunEventSink, d as ProviderRunRequest, f as ProviderRunResponse, n as ModelCapability, nt as ValidateToolCallsOption, p as ProviderStream, q as GeminiQuirks, r as ProviderAdapter } from "./provider-C2IfKsvz.js";
2
+ import { b as GatewayPolicy, r as ArtifactInput } from "./artifact-Bg6mJGnm.js";
3
+ import { StandardSchemaV1 } from "@standard-schema/spec";
4
+
5
+ //#region src/sanitizers/sanitizers.d.ts
6
+ interface SanitizerContext {
7
+ readonly providerId: string;
8
+ readonly modelId?: string;
9
+ readonly outputName: string;
10
+ }
11
+ type SanitizerFn = (text: string, context: SanitizerContext) => string | Promise<string>;
12
+ type SanitizeOutputOption = SanitizerFn | readonly SanitizerFn[];
13
+ interface InternalEnvelopeOptions {
14
+ readonly field?: string;
15
+ readonly path?: string;
16
+ readonly schema?: StandardSchemaV1;
17
+ }
18
+ declare function stripReasoningTags(): SanitizerFn;
19
+ declare function stripChatTemplateArtifacts(): SanitizerFn;
20
+ declare function unwrapInternalEnvelope(schemaOrPath: string | InternalEnvelopeOptions | StandardSchemaV1): SanitizerFn;
21
+ //#endregion
22
+ //#region src/providers/adapters.d.ts
23
+ interface OpenAICompatibleProviderOptions {
24
+ readonly id?: string;
25
+ readonly model: string;
26
+ readonly baseUrl: string;
27
+ readonly apiKey?: string;
28
+ readonly gateway?: GatewayPolicy;
29
+ readonly fetch?: typeof fetch;
30
+ /**
31
+ * Phase 7 addition: caller-supplied per-1k pricing. When provided, the
32
+ * adapter computes `normalizedUsage.costUsd` from the API-reported token
33
+ * counts. When omitted, `normalizedUsage.costUsd` is `null` so downstream
34
+ * consumers can distinguish "unmeasured" from "free" (per 07-CONTEXT.md).
35
+ */
36
+ readonly pricing?: {
37
+ readonly inputPer1kTokens?: number;
38
+ readonly outputPer1kTokens?: number;
39
+ };
40
+ /**
41
+ * Phase 34 — D-05/D-06/D-08 — TTL for the per-instance models cache.
42
+ * Default 300_000ms (5 minutes). Set to 0 to disable caching.
43
+ * Set to Infinity for process-lifetime caching.
44
+ *
45
+ * NOTE: for createOpenAICompatibleProvider, this option is accepted for
46
+ * option-bag uniformity but is NOT USED — openai-compat has no /models
47
+ * endpoint (D-04). Document in JSDoc for consumers pointing at known servers.
48
+ */
49
+ readonly modelsCacheTtlMs?: number;
50
+ /**
51
+ * Phase 34 — D-11 — Number of retry attempts on transient /models errors
52
+ * (5xx, network, timeout). Default 2. Set to 0 to disable retries.
53
+ *
54
+ * NOTE: for createOpenAICompatibleProvider, this option is accepted for
55
+ * option-bag uniformity but is NOT USED — openai-compat has no /models
56
+ * endpoint (D-04).
57
+ */
58
+ readonly modelsRetryCount?: number;
59
+ /**
60
+ * Phase 34 — D-12 — Optional RunEventSink for capability negotiation events.
61
+ * When provided, emits the "capabilities.negotiation.fallback" event on
62
+ * transient /models errors (5xx, network, timeout).
63
+ *
64
+ * NOTE: for createOpenAICompatibleProvider, this option is accepted for
65
+ * option-bag uniformity but the event is NOT FIRED for source: "registry"
66
+ * (the documented happy path for openai-compat). Emitting events for the
67
+ * intentional no-endpoint path would produce noisy false-positives.
68
+ */
69
+ readonly runEventSink?: RunEventSink;
70
+ /**
71
+ * Phase 36 — Optional output sanitizer pipeline. When provided, string
72
+ * rawOutputs are transformed in order after provider text extraction and
73
+ * before the adapter returns.
74
+ */
75
+ readonly sanitizeOutput?: SanitizeOutputOption;
76
+ /**
77
+ * Phase 37 — Optional returned tool-call validator. When provided, the
78
+ * adapter parses prompt-reencoded tool_calls envelopes and returns
79
+ * normalized validated calls without mutating rawOutputs or rawResponse.
80
+ */
81
+ readonly validateToolCalls?: ValidateToolCallsOption;
82
+ }
83
+ interface SdkLikeProviderOptions {
84
+ readonly id?: string;
85
+ readonly model: string;
86
+ readonly generate: (input: {
87
+ readonly task: string;
88
+ readonly outputNames: readonly string[];
89
+ }) => Promise<ProviderRunResponse> | ProviderRunResponse;
90
+ }
91
+ /**
92
+ * Phase 34 — D-04 / QUIRK-02 — OpenAI-compatible provider factory.
93
+ *
94
+ * This factory is the prototypical "intentional no remote /models endpoint"
95
+ * adapter per D-04. The consumer points this adapter at any OpenAI-shaped
96
+ * endpoint (vLLM, TGI, Ollama, custom), and the factory returns conservative
97
+ * defaults for the quirks block because the server could be anything.
98
+ *
99
+ * The `negotiateCapabilities` method performs NO fetch; it returns
100
+ * synthesizeNegotiatedCapabilitiesFromRegistry with source: "registry"
101
+ * (the intentional-no-endpoint signal, as distinct from "registry-fallback"
102
+ * which signals a transient failure). Plan 34-05 (LM Studio) reuses this
103
+ * same pattern.
104
+ *
105
+ * D-04 citation: "consumer adapters without a /models endpoint skip the
106
+ * fetch layer entirely and delegate to synthesizeNegotiatedCapabilitiesFromRegistry."
107
+ */
108
+ declare function createOpenAICompatibleProvider(options: OpenAICompatibleProviderOptions): ProviderAdapter & {
109
+ readonly quirks: OpenAICompatQuirks;
110
+ readonly negotiateCapabilities: (modelId: string) => Promise<NegotiatedCapabilities>;
111
+ };
112
+ /**
113
+ * Phase 34 — QUIRK-02 / NEG-01 / NEG-02 — OpenAI provider factory.
114
+ *
115
+ * Extends the base OpenAI-compat factory with:
116
+ * 1. `quirks: OpenAIQuirks` — verified per RESEARCH §Q6 OpenAI vocabulary.
117
+ * 2. `negotiateCapabilities(modelId)` — queries OpenAI /v1/models GET with
118
+ * Authorization: Bearer header; SPARSE response; intersects with Phase 33
119
+ * registry for supports.* (per RESEARCH §Anti-patterns — don't assume
120
+ * OpenAI /v1/models returns capability flags, it doesn't).
121
+ *
122
+ * The negotiate() pattern mirrors Plan 34-02 (Anthropic thick reference):
123
+ * - Per-instance TTL cache (modelsCacheTtlMs, default 300_000ms)
124
+ * - Single-flight inflight coalescing with .finally cleanup (Pitfall 4)
125
+ * - Retry with [0, 200, 1000]ms backoff (modelsRetryCount, default 2)
126
+ * - 401/403 throws NegotiationAuthError (D-10: no retry, no fallback, no event)
127
+ * - 5xx/network/timeout falls back to registry with source: "registry-fallback"
128
+ * - emitFallbackEvent fires the "capabilities.negotiation.fallback" RunEvent
129
+ *
130
+ * SECURITY (T-34-03-07): inflight Map MUST use .finally cleanup to prevent
131
+ * leak on rejection. Verifiable: grep `.finally` in this file.
132
+ */
133
+ declare function createOpenAIProvider(options: OpenAICompatibleProviderOptions): ProviderAdapter & {
134
+ readonly quirks: OpenAIQuirks;
135
+ readonly negotiateCapabilities: (modelId: string) => Promise<NegotiatedCapabilities>;
136
+ };
137
+ declare function createAISdkProvider(options: SdkLikeProviderOptions): ProviderAdapter;
138
+ //#endregion
139
+ //#region src/providers/anthropic.d.ts
140
+ /**
141
+ * Options for {@link createAnthropicProvider}.
142
+ *
143
+ * Mirrors `OpenAICompatibleProviderOptions` ergonomics (Phase 7 pattern) but
144
+ * for the Anthropic Messages API at `/v1/messages` -- which uses a top-level
145
+ * `system` field and a `content[0].text` response shape that diverges from
146
+ * the OpenAI Chat Completions schema (see FSB v0.9.x `extension/ai/universal-provider.js`
147
+ * lines 280-297 + 566-573 for the production reference).
148
+ *
149
+ * SECURITY: `apiKey` is a runtime parameter -- do NOT hardcode or log it.
150
+ *
151
+ * STREAMING (Phase 44): supported through native Anthropic Messages SSE events.
152
+ *
153
+ * DEFERRED (Phase 4 carryforward notes):
154
+ * - prompt caching (Phase 39: opt-in via `ProviderRunRequest.cacheSystemPrefix` —
155
+ * emitted as a cache_control-marked system block when present)
156
+ * - resume-from-eviction -- see Phase 5 (MV3-survivability adapter contract)
157
+ *
158
+ * Ref: FSB v0.10.0-attempt-2 Phase 4 (D-02 + D-07: full custom adapter; preserve top-level `system`).
159
+ */
160
+ interface AnthropicProviderOptions {
161
+ readonly id?: string;
162
+ readonly model: string;
163
+ readonly apiKey: string;
164
+ /** Defaults to `https://api.anthropic.com`. Override for proxies. */
165
+ readonly baseUrl?: string;
166
+ /** Defaults to `2023-06-01`. Override only if the consumer has tested a newer pinned version. */
167
+ readonly anthropicVersion?: string;
168
+ readonly fetch?: typeof fetch;
169
+ readonly pricing?: {
170
+ readonly inputPer1kTokens?: number;
171
+ readonly outputPer1kTokens?: number;
172
+ };
173
+ /**
174
+ * D-08: Per-instance TTL for the /v1/models response cache (milliseconds).
175
+ * Default 300_000 (5 minutes). `0` disables caching (always re-fetch -- for testing).
176
+ * `Infinity` disables expiry (process-lifetime for the instance).
177
+ */
178
+ readonly modelsCacheTtlMs?: number;
179
+ /**
180
+ * D-11: Number of retries for transient /v1/models fetch failures (5xx, network,
181
+ * timeout). Default 2 (3 total attempts). `0` disables retries.
182
+ * Backoff schedule: [0ms, 200ms, 1000ms].
183
+ */
184
+ readonly modelsRetryCount?: number;
185
+ /**
186
+ * D-12: Optional RunEventSink for emitting `capabilities.negotiation.fallback`
187
+ * events when the /v1/models fetch falls back to the Phase 33 static registry.
188
+ * If absent, fallback emits no event (no-op). Auth errors (401/403) never emit
189
+ * the fallback event -- they throw `NegotiationAuthError` instead.
190
+ */
191
+ readonly runEventSink?: RunEventSink;
192
+ readonly sanitizeOutput?: SanitizeOutputOption;
193
+ readonly validateToolCalls?: ValidateToolCallsOption;
194
+ }
195
+ declare function createAnthropicProvider(options: AnthropicProviderOptions): ProviderAdapter & {
196
+ readonly quirks: AnthropicQuirks;
197
+ readonly negotiateCapabilities: (modelId: string) => Promise<NegotiatedCapabilities>;
198
+ };
199
+ //#endregion
200
+ //#region src/providers/fake.d.ts
201
+ interface FakeProviderOptions {
202
+ readonly id?: string;
203
+ readonly modelId?: string;
204
+ readonly response?: ProviderRunResponse | ((request: ProviderRunRequest) => ProviderRunResponse | Promise<ProviderRunResponse>);
205
+ readonly artifacts?: readonly ArtifactInput[];
206
+ /**
207
+ * Phase 7 addition: when provided, REPLACES the default single-capability
208
+ * array so callers (notably Plan 07-04's modality/privacy reject tests)
209
+ * can construct a fake adapter with arbitrary
210
+ * `inputModalities` / `outputModalities` / `dataPolicy` / `pricing`
211
+ * without mutating the returned adapter's readonly `capabilities` array.
212
+ * When omitted, the existing default capability is used.
213
+ */
214
+ readonly capabilities?: readonly ModelCapability[];
215
+ }
216
+ declare function createFakeProvider(options?: FakeProviderOptions): ProviderAdapter;
217
+ //#endregion
218
+ //#region src/providers/gemini.d.ts
219
+ /**
220
+ * Options for {@link createGeminiProvider}.
221
+ *
222
+ * Mirrors `OpenAICompatibleProviderOptions` ergonomics (Phase 7 pattern) but
223
+ * for Google's Generative Language API at
224
+ * `/v1beta/models/{model}:generateContent` -- which uses `contents[].parts[].text`
225
+ * (NOT OpenAI's `messages[]`), `role: "model"` for assistant turns (NOT
226
+ * `"assistant"`), authenticates via `?key=` query string for execute(), and applies a
227
+ * 4-category `safetySettings` block at `BLOCK_NONE` thresholds (FSB convention
228
+ * mirrored from `extension/ai/universal-provider.js:255-272`).
229
+ *
230
+ * SECURITY: `apiKey` is a runtime parameter -- do NOT hardcode or log it.
231
+ *
232
+ * STREAMING (Phase 44): supported through native `streamGenerateContent` SSE events.
233
+ *
234
+ * DEFERRED (Phase 4 carryforward notes):
235
+ * - multimodal (vision) -- deferred
236
+ * - resume-from-eviction -- see Phase 5 (MV3-survivability adapter contract)
237
+ *
238
+ * NOTE (Phase 34): negotiate() uses x-goog-api-key HEADER (preferred per RESEARCH §Q3).
239
+ * The existing execute() path uses ?key= query string -- execute() migration is out-of-scope
240
+ * for Phase 34 (additive only; T-34-04-01).
241
+ *
242
+ * Ref: FSB v0.10.0-attempt-2 Phase 4 (D-02 + D-07: full custom adapter; preserve role:"model").
243
+ */
244
+ interface GeminiProviderOptions {
245
+ readonly id?: string;
246
+ readonly model: string;
247
+ readonly apiKey: string;
248
+ /** Defaults to `https://generativelanguage.googleapis.com`. */
249
+ readonly baseUrl?: string;
250
+ readonly fetch?: typeof fetch;
251
+ readonly pricing?: {
252
+ readonly inputPer1kTokens?: number;
253
+ readonly outputPer1kTokens?: number;
254
+ };
255
+ /**
256
+ * D-08: TTL for per-instance /models response cache, in milliseconds.
257
+ * Default: 300_000ms (5 minutes). 0 = always refetch (tests). Infinity = process-lifetime.
258
+ */
259
+ readonly modelsCacheTtlMs?: number;
260
+ /**
261
+ * D-11: Number of retries on transient /models fetch errors. Default: 2.
262
+ * Retry schedule: immediate + 200ms + 1000ms (3 total attempts at retryCount=2).
263
+ * 0 = no retries (1 attempt total).
264
+ */
265
+ readonly modelsRetryCount?: number;
266
+ /**
267
+ * D-12: Optional event sink for observability. When provided, the adapter
268
+ * emits a "capabilities.negotiation.fallback" RunEvent on transient /models failure.
269
+ * If absent, no event is emitted (silent fallback).
270
+ */
271
+ readonly runEventSink?: RunEventSink;
272
+ readonly sanitizeOutput?: SanitizeOutputOption;
273
+ readonly validateToolCalls?: ValidateToolCallsOption;
274
+ }
275
+ /**
276
+ * Phase 34 — D-03 / D-05..D-12 — Extended Gemini provider factory.
277
+ *
278
+ * Returns a `ProviderAdapter` narrowed to expose:
279
+ * - `quirks: GeminiQuirks` — static adapter capability flags
280
+ * - `negotiateCapabilities(modelId)` — live /v1beta/models fetch with medium-thick
281
+ * derivation (inputTokenLimit + thinking + supportedGenerationMethods from upstream)
282
+ * intersected with Phase 33 registry; TTL cache + inflight coalescing + retry +
283
+ * auth-throw + transient-fallback + event.
284
+ *
285
+ * NOTE on auth strategy (T-34-04-01): negotiate() uses x-goog-api-key HEADER
286
+ * (preferred per RESEARCH §Q3 -- avoids leaking the key in server-side logs that
287
+ * capture URL query strings). The existing execute() path uses ?key= query string
288
+ * and is NOT changed by Phase 34 (out-of-scope migration).
289
+ */
290
+ declare function createGeminiProvider(options: GeminiProviderOptions): ProviderAdapter & {
291
+ readonly quirks: GeminiQuirks;
292
+ readonly negotiateCapabilities: (modelId: string) => Promise<NegotiatedCapabilities>;
293
+ };
294
+ //#endregion
295
+ //#region src/providers/litellm.d.ts
296
+ /**
297
+ * Options for {@link createLiteLLMProvider}.
298
+ *
299
+ * Thin wrapper around {@link createOpenAICompatibleProvider} pinned to the
300
+ * documented local LiteLLM proxy URL. LiteLLM is treated as an
301
+ * OpenAI-compatible gateway over HTTP; this helper does not start, embed, or
302
+ * depend on a LiteLLM gateway process.
303
+ */
304
+ interface LiteLLMProviderOptions extends Omit<OpenAICompatibleProviderOptions, "id" | "baseUrl" | "gateway"> {
305
+ readonly id?: string;
306
+ /** Defaults to `http://localhost:4000`. Override for hosted proxies or `/v1` deployments. */
307
+ readonly baseUrl?: string;
308
+ readonly gateway?: GatewayPolicy;
309
+ }
310
+ declare function createLiteLLMProvider(options: LiteLLMProviderOptions): ProviderAdapter & {
311
+ readonly quirks: LiteLLMQuirks;
312
+ readonly negotiateCapabilities: (modelId: string) => Promise<NegotiatedCapabilities>;
313
+ };
314
+ //#endregion
315
+ //#region src/providers/lm-studio.d.ts
316
+ /**
317
+ * Options for {@link createLmStudioProvider}.
318
+ *
319
+ * Thin wrapper around {@link createOpenAICompatibleProvider} pinned to
320
+ * LM Studio's default local server URL `http://localhost:1234/v1`. Wire
321
+ * shape is OpenAI Chat Completions. LM Studio is no-auth by convention
322
+ * (CD-03): `apiKey` is OPTIONAL; when omitted, the underlying factory
323
+ * sends no `Authorization` header (see
324
+ * `lattice/packages/lattice/src/providers/adapters.ts:53` for the
325
+ * conditional auth-header wiring).
326
+ *
327
+ * Phase 34 additions:
328
+ * - `modelsCacheTtlMs` -- Reserved for future /models discovery; LM Studio
329
+ * currently has no remote /models endpoint. Accepted for option-bag
330
+ * uniformity but NOT USED (D-04 intentional no-endpoint pattern).
331
+ * - `runEventSink` -- Accepted for option-bag uniformity but NEVER fired
332
+ * because source: "registry" is the documented happy path for LM Studio
333
+ * (no event for intentional no-endpoint per RESEARCH Open Question 5).
334
+ *
335
+ * STREAMING (Phase 44): supported through the OpenAI-compatible stream path.
336
+ *
337
+ * DEFERRED (D-16 carryforward):
338
+ * - latency-tail diagnostics -- observability concern; LM Studio is
339
+ * the canary for latency tails (INV-03);
340
+ * diagnostics module deferred to a
341
+ * follow-on observability phase.
342
+ * - resume-from-eviction -- see Phase 5 (MV3-survivability adapter).
343
+ *
344
+ * Ref: FSB v0.10.0-attempt-2 Phase 4 (D-03: thin wrapper; D-16: latency-tail deferred; CD-03 no-opt-out).
345
+ */
346
+ interface LmStudioProviderOptions extends Omit<OpenAICompatibleProviderOptions, "id" | "baseUrl" | "apiKey"> {
347
+ readonly id?: string;
348
+ /** Defaults to `http://localhost:1234/v1`. Override for non-localhost deployments. */
349
+ readonly baseUrl?: string;
350
+ /**
351
+ * Optional. LM Studio is no-auth by convention (CD-03 default).
352
+ * When provided, sent as `Authorization: Bearer <apiKey>` (matches the
353
+ * underlying OpenAI-compat factory). Use only for proxied LM Studio
354
+ * deployments that have a token gate in front.
355
+ */
356
+ readonly apiKey?: string;
357
+ }
358
+ /**
359
+ * Phase 34 — D-04 / QUIRK-02 — LM Studio provider factory.
360
+ *
361
+ * LM Studio is the prototypical "intentional no remote /models endpoint"
362
+ * adapter per D-04 (alongside OpenAI-compat). The factory returns conservative
363
+ * defaults for the quirks block because LM Studio runs LOCAL quantized models
364
+ * whose capabilities vary wildly by chat template + model file.
365
+ *
366
+ * The `negotiateCapabilities` method performs NO fetch; it returns
367
+ * `synthesizeNegotiatedCapabilitiesFromRegistry` with source: "registry"
368
+ * (the intentional-no-endpoint signal, distinct from "registry-fallback"
369
+ * which signals a transient failure). Mirrors Plan 34-03 Task 2 (OpenAI-compat
370
+ * registry-only pattern) verbatim.
371
+ *
372
+ * D-04 citation: "consumer adapters without a /models endpoint skip the
373
+ * fetch layer entirely and delegate to synthesizeNegotiatedCapabilitiesFromRegistry."
374
+ *
375
+ * Open Question 5 (RESEARCH §): no event emitted for source: "registry" because
376
+ * this is the intentional happy path for LM Studio -- emitting a "fallback" event
377
+ * would produce false-positive noise for consumers monitoring the event stream.
378
+ */
379
+ declare function createLmStudioProvider(options: LmStudioProviderOptions): ProviderAdapter & {
380
+ readonly quirks: LmStudioQuirks;
381
+ readonly negotiateCapabilities: (modelId: string) => Promise<NegotiatedCapabilities>;
382
+ };
383
+ //#endregion
384
+ //#region src/providers/openrouter.d.ts
385
+ /**
386
+ * Options for {@link createOpenRouterProvider}.
387
+ *
388
+ * Thin wrapper around {@link createOpenAICompatibleProvider} pinned to
389
+ * OpenRouter's base URL `https://openrouter.ai/api/v1`. Wire shape is
390
+ * OpenAI Chat Completions; no provider-specific quirks at the
391
+ * single-shot Promise contract level.
392
+ *
393
+ * SECURITY: `apiKey` is a runtime parameter -- do NOT hardcode or log it.
394
+ *
395
+ * STREAMING (Phase 44): supported through the OpenAI-compatible stream path.
396
+ *
397
+ * DEFERRED (D-17 carryforward; Phase 4 ships the named adapter as a
398
+ * first-class OpenAI-compat wrapper):
399
+ * - per-message routing -- deferred.
400
+ * - resume-from-eviction -- see Phase 5 (MV3-survivability adapter).
401
+ *
402
+ * Ref: FSB v0.10.0-attempt-2 Phase 4 (D-03: thin wrapper; D-17: model-routing deferred).
403
+ */
404
+ interface OpenRouterProviderOptions extends Omit<OpenAICompatibleProviderOptions, "id" | "baseUrl"> {
405
+ readonly id?: string;
406
+ /** Defaults to `https://openrouter.ai/api/v1`. Override for proxies. */
407
+ readonly baseUrl?: string;
408
+ /**
409
+ * D-08: TTL for per-instance /models response cache, in milliseconds.
410
+ * Default: 300_000ms (5 minutes). 0 = always refetch (tests). Infinity = process-lifetime.
411
+ */
412
+ readonly modelsCacheTtlMs?: number;
413
+ /**
414
+ * D-11: Number of retries on transient /models fetch errors. Default: 2.
415
+ * Retry schedule: immediate + 200ms + 1000ms (3 total attempts at retryCount=2).
416
+ * 0 = no retries (1 attempt total).
417
+ */
418
+ readonly modelsRetryCount?: number;
419
+ /**
420
+ * D-12: Optional event sink for observability. When provided, the adapter
421
+ * emits a "capabilities.negotiation.fallback" RunEvent on transient /models failure.
422
+ * If absent, no event is emitted (silent fallback).
423
+ */
424
+ readonly runEventSink?: RunEventSink;
425
+ /**
426
+ * Ordered OpenRouter model fallback candidates. The primary `model` remains
427
+ * the Lattice-selected route; these candidates serialize as OpenRouter's
428
+ * top-level `models` request field when non-empty.
429
+ */
430
+ readonly fallbackModels?: readonly string[];
431
+ }
432
+ /**
433
+ * Phase 34 — D-03 / D-05..D-12 — Extended OpenRouter provider factory.
434
+ *
435
+ * Returns a `ProviderAdapter` narrowed to expose:
436
+ * - `quirks: OpenRouterQuirks` — static adapter capability flags (8 booleans)
437
+ * - `negotiateCapabilities(modelId)` — live /api/v1/models fetch with rich /models
438
+ * intersection (supported_parameters -> nativeToolCalling + structuredOutputs,
439
+ * top_provider.context_length -> contextWindow) intersected with Phase 33 registry
440
+ * for knownFailureModes + recommendedSanitizers.
441
+ *
442
+ * CRITICAL for ANCHOR CASE STUDY (session_1780792387779):
443
+ * negotiate("openai/gpt-oss-120b:free") MUST resolve to:
444
+ * - result.knownFailureModes.includes("internal_envelope_leak") -> TRUE
445
+ * - result.recommendedSanitizers.includes("unwrapInternalEnvelope") -> TRUE
446
+ * - result.source === "live" -> TRUE
447
+ * This proves: live-fetch -> id suffix-strip via stripOpenRouterVariant
448
+ * -> registry intersection -> getRecommendedSanitizers derivation.
449
+ *
450
+ * Anti-pattern (RESEARCH §Anti-pattern, lines 534-535):
451
+ * The /api/v1/models endpoint is UNAUTHENTICATED (public discovery surface verified
452
+ * Phase 33). Do NOT send Authorization Bearer to this endpoint -- it is NOT required
453
+ * and would add unnecessary API key exposure surface in transit logs.
454
+ */
455
+ declare function createOpenRouterProvider(options: OpenRouterProviderOptions): ProviderAdapter & {
456
+ readonly quirks: OpenRouterQuirks;
457
+ readonly negotiateCapabilities: (modelId: string) => Promise<NegotiatedCapabilities>;
458
+ };
459
+ //#endregion
460
+ //#region src/providers/xai.d.ts
461
+ /**
462
+ * Options for {@link createXaiProvider}.
463
+ *
464
+ * Thin wrapper around {@link createOpenAICompatibleProvider} pinned to
465
+ * xAI's base URL `https://api.x.ai/v1`. The wire shape is identical to
466
+ * OpenAI Chat Completions, with one provider-specific quirk preserved:
467
+ * `response.usage.completion_tokens_details.reasoning_tokens` (xAI's
468
+ * separate reasoning-token accounting; see FSB
469
+ * `extension/ai/universal-provider.js:585-594` for the production reference).
470
+ *
471
+ * SECURITY: `apiKey` is a runtime parameter -- do NOT hardcode or log it.
472
+ *
473
+ * STREAMING (Phase 44): supported through the OpenAI-compatible stream path.
474
+ *
475
+ * DEFERRED (Phase 4 carryforward notes):
476
+ * - tool-streaming -- deferred
477
+ * - resume-from-eviction -- see Phase 5 (MV3-survivability adapter contract)
478
+ *
479
+ * Ref: FSB v0.10.0-attempt-2 Phase 4 (D-03 + D-07: thin wrapper; reasoning_tokens quirk preserved).
480
+ *
481
+ * Phase 34 additions:
482
+ * - `modelsCacheTtlMs?` — D-05/D-06/D-08; default 300_000ms; 0 disables; Infinity = process-lifetime
483
+ * - `modelsRetryCount?` — D-11; default 2; 0 disables retry
484
+ * - `runEventSink?` — D-12; fires "capabilities.negotiation.fallback" on transient errors
485
+ */
486
+ interface XaiProviderOptions extends Omit<OpenAICompatibleProviderOptions, "id" | "baseUrl"> {
487
+ readonly id?: string;
488
+ /** Defaults to `https://api.x.ai/v1`. Override for proxies. */
489
+ readonly baseUrl?: string;
490
+ }
491
+ /**
492
+ * Phase 34 — QUIRK-02 / NEG-01 / NEG-02 — xAI provider factory.
493
+ *
494
+ * Extends the base OpenAI-compat execution wrapper with:
495
+ * 1. `quirks: XaiQuirks` — verified per RESEARCH §Q6 xAI vocabulary.
496
+ * 2. `negotiateCapabilities(modelId)` — queries xAI /v1/models GET with
497
+ * Authorization: Bearer header; LENIENT-PARSE sparse OpenAI-shaped
498
+ * response; intersects with Phase 33 registry for supports.*.
499
+ *
500
+ * CITED: RESEARCH §Q4 (INFERRED) — xAI /v1/models shape is undocumented;
501
+ * assumed OpenAI-compatible based on the chat completions wire format.
502
+ *
503
+ * CITED: RESEARCH §A1 — Pitfall 1 lenient parse: if xAI publishes a
504
+ * different /models shape, only the parsing logic updates; the contract
505
+ * (source values, NegotiatedCapabilities shape) holds.
506
+ *
507
+ * The negotiate() pattern mirrors Plan 34-02 (Anthropic thick reference):
508
+ * - Per-instance TTL cache (modelsCacheTtlMs, default 300_000ms)
509
+ * - Single-flight inflight coalescing with .finally cleanup (Pitfall 4)
510
+ * - Retry with [0, 200, 1000]ms backoff (modelsRetryCount, default 2)
511
+ * - 401/403 throws NegotiationAuthError with adapter: "xai" (D-10)
512
+ * - 5xx/network/timeout falls back to registry + emits fallback event
513
+ *
514
+ * SECURITY (T-34-03-07): inflight Map MUST use .finally cleanup to prevent
515
+ * leak on rejection. Verifiable: grep `.finally` in this file.
516
+ */
517
+ declare function createXaiProvider(options: XaiProviderOptions): ProviderAdapter & {
518
+ readonly quirks: XaiQuirks;
519
+ readonly negotiateCapabilities: (modelId: string) => Promise<NegotiatedCapabilities>;
520
+ };
521
+ //#endregion
522
+ //#region src/providers/streaming.d.ts
523
+ interface CollectStreamOptions {
524
+ readonly defaultOutput?: string;
525
+ }
526
+ declare function collectStream(stream: ProviderStream, options?: CollectStreamOptions): Promise<ProviderRunResponse>;
527
+ //#endregion
528
+ //#region src/prompts/scaffolds.d.ts
529
+ declare const PROMPT_SCAFFOLD_VERSION: "lattice.prompt-scaffold/v1";
530
+ declare const PROMPT_STRATEGIES: readonly ["frontier", "mid_tier", "open_weight", "reasoning", "local"];
531
+ declare function getStructuredOutputContract(strategy: RecommendedPromptStrategy, schema: unknown): string;
532
+ declare function getToolUseContract(strategy: RecommendedPromptStrategy, tools: unknown): string;
533
+ //#endregion
534
+ export { stripChatTemplateArtifacts as A, createAISdkProvider as C, SanitizeOutputOption as D, InternalEnvelopeOptions as E, unwrapInternalEnvelope as M, SanitizerContext as O, SdkLikeProviderOptions as S, createOpenAIProvider as T, FakeProviderOptions as _, CollectStreamOptions as a, createAnthropicProvider as b, createXaiProvider as c, LmStudioProviderOptions as d, createLmStudioProvider as f, createGeminiProvider as g, GeminiProviderOptions as h, getToolUseContract as i, stripReasoningTags as j, SanitizerFn as k, OpenRouterProviderOptions as l, createLiteLLMProvider as m, PROMPT_STRATEGIES as n, collectStream as o, LiteLLMProviderOptions as p, getStructuredOutputContract as r, XaiProviderOptions as s, PROMPT_SCAFFOLD_VERSION as t, createOpenRouterProvider as u, createFakeProvider as v, createOpenAICompatibleProvider as w, OpenAICompatibleProviderOptions as x, AnthropicProviderOptions as y };
535
+ //# sourceMappingURL=scaffolds-DKQrCRqh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolds-DKQrCRqh.d.ts","names":[],"sources":["../src/sanitizers/sanitizers.ts","../src/providers/adapters.ts","../src/providers/anthropic.ts","../src/providers/fake.ts","../src/providers/gemini.ts","../src/providers/litellm.ts","../src/providers/lm-studio.ts","../src/providers/openrouter.ts","../src/providers/xai.ts","../src/providers/streaming.ts","../src/prompts/scaffolds.ts"],"mappings":"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"}