@kaleidorg/mind 0.7.0 → 0.8.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 (125) hide show
  1. package/README.md +96 -8
  2. package/dist/context/compress.d.ts.map +1 -1
  3. package/dist/context/compress.js +1 -0
  4. package/dist/context/compress.js.map +1 -1
  5. package/dist/context/rgb-units.d.ts +18 -0
  6. package/dist/context/rgb-units.d.ts.map +1 -0
  7. package/dist/context/rgb-units.js +86 -0
  8. package/dist/context/rgb-units.js.map +1 -0
  9. package/dist/engine.d.ts +53 -1
  10. package/dist/engine.d.ts.map +1 -1
  11. package/dist/engine.js +179 -17
  12. package/dist/engine.js.map +1 -1
  13. package/dist/funnel.d.ts.map +1 -1
  14. package/dist/funnel.js +23 -4
  15. package/dist/funnel.js.map +1 -1
  16. package/dist/guards.d.ts +63 -0
  17. package/dist/guards.d.ts.map +1 -0
  18. package/dist/guards.js +284 -0
  19. package/dist/guards.js.map +1 -0
  20. package/dist/index.d.ts +9 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +7 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/kaleidoswap/contract.d.ts +3 -4
  25. package/dist/kaleidoswap/contract.d.ts.map +1 -1
  26. package/dist/kaleidoswap/contract.js +3 -17
  27. package/dist/kaleidoswap/contract.js.map +1 -1
  28. package/dist/providers/openai.d.ts +64 -0
  29. package/dist/providers/openai.d.ts.map +1 -0
  30. package/dist/providers/openai.js +233 -0
  31. package/dist/providers/openai.js.map +1 -0
  32. package/dist/providers/types.d.ts +20 -0
  33. package/dist/providers/types.d.ts.map +1 -1
  34. package/dist/qvac/config.d.ts +1 -1
  35. package/dist/qvac/config.js +1 -1
  36. package/dist/qvac/index.d.ts +1 -0
  37. package/dist/qvac/index.d.ts.map +1 -1
  38. package/dist/qvac/index.js +1 -0
  39. package/dist/qvac/index.js.map +1 -1
  40. package/dist/qvac/models.d.ts +31 -0
  41. package/dist/qvac/models.d.ts.map +1 -0
  42. package/dist/qvac/models.js +80 -0
  43. package/dist/qvac/models.js.map +1 -0
  44. package/dist/qvac/parse.d.ts +11 -0
  45. package/dist/qvac/parse.d.ts.map +1 -1
  46. package/dist/qvac/parse.js +29 -7
  47. package/dist/qvac/parse.js.map +1 -1
  48. package/dist/qvac/provider.d.ts +5 -4
  49. package/dist/qvac/provider.d.ts.map +1 -1
  50. package/dist/qvac/provider.js +22 -8
  51. package/dist/qvac/provider.js.map +1 -1
  52. package/dist/qvac/stream.d.ts +3 -5
  53. package/dist/qvac/stream.d.ts.map +1 -1
  54. package/dist/qvac/stream.js.map +1 -1
  55. package/dist/qvac/tools.d.ts +5 -0
  56. package/dist/qvac/tools.d.ts.map +1 -1
  57. package/dist/qvac/tools.js +10 -0
  58. package/dist/qvac/tools.js.map +1 -1
  59. package/dist/recipe/issue-asset.d.ts.map +1 -1
  60. package/dist/recipe/issue-asset.js +42 -16
  61. package/dist/recipe/issue-asset.js.map +1 -1
  62. package/dist/recipe/runner.d.ts.map +1 -1
  63. package/dist/recipe/runner.js +1 -0
  64. package/dist/recipe/runner.js.map +1 -1
  65. package/dist/recipe/submarine-pay.d.ts +17 -0
  66. package/dist/recipe/submarine-pay.d.ts.map +1 -0
  67. package/dist/recipe/submarine-pay.js +79 -0
  68. package/dist/recipe/submarine-pay.js.map +1 -0
  69. package/dist/skills/registry.js +1 -1
  70. package/dist/skills/select.d.ts +20 -0
  71. package/dist/skills/select.d.ts.map +1 -0
  72. package/dist/skills/select.js +32 -0
  73. package/dist/skills/select.js.map +1 -0
  74. package/dist/submarine/contract.d.ts +42 -0
  75. package/dist/submarine/contract.d.ts.map +1 -0
  76. package/dist/submarine/contract.js +73 -0
  77. package/dist/submarine/contract.js.map +1 -0
  78. package/dist/testing/mock-wallet.d.ts +24 -0
  79. package/dist/testing/mock-wallet.d.ts.map +1 -1
  80. package/dist/testing/mock-wallet.js +75 -6
  81. package/dist/testing/mock-wallet.js.map +1 -1
  82. package/dist/wallet/confirm.d.ts.map +1 -1
  83. package/dist/wallet/confirm.js +27 -9
  84. package/dist/wallet/confirm.js.map +1 -1
  85. package/package.json +6 -1
  86. package/skills/README.md +1 -0
  87. package/skills/kaleido-trading/SKILL.md +22 -28
  88. package/skills/kaleido-trading/references/api.md +3 -3
  89. package/skills/rgb-lightning-node/SKILL.md +32 -12
  90. package/skills/spark-wallet/SKILL.md +1 -0
  91. package/skills/submarine-swaps/SKILL.md +48 -0
  92. package/src/context/compress.ts +1 -0
  93. package/src/context/rgb-units.test.ts +42 -0
  94. package/src/context/rgb-units.ts +89 -0
  95. package/src/engine.test.ts +94 -3
  96. package/src/engine.ts +234 -19
  97. package/src/funnel.mind.test.ts +4 -2
  98. package/src/funnel.ts +23 -4
  99. package/src/guards.test.ts +399 -0
  100. package/src/guards.ts +299 -0
  101. package/src/index.ts +37 -1
  102. package/src/kaleidoswap/contract.test.ts +8 -16
  103. package/src/kaleidoswap/contract.ts +4 -32
  104. package/src/providers/openai.test.ts +127 -0
  105. package/src/providers/openai.ts +282 -0
  106. package/src/providers/types.ts +22 -0
  107. package/src/qvac/config.ts +1 -1
  108. package/src/qvac/index.ts +10 -0
  109. package/src/qvac/models.ts +98 -0
  110. package/src/qvac/parse.test.ts +7 -0
  111. package/src/qvac/parse.ts +33 -1
  112. package/src/qvac/provider.test.ts +34 -1
  113. package/src/qvac/provider.ts +30 -13
  114. package/src/qvac/stream.ts +3 -5
  115. package/src/qvac/tools.ts +10 -0
  116. package/src/recipe/issue-asset.test.ts +39 -0
  117. package/src/recipe/issue-asset.ts +41 -13
  118. package/src/recipe/runner.ts +1 -0
  119. package/src/recipe/submarine-pay.test.ts +87 -0
  120. package/src/recipe/submarine-pay.ts +78 -0
  121. package/src/skills/registry.ts +1 -1
  122. package/src/skills/select.ts +41 -0
  123. package/src/submarine/contract.ts +112 -0
  124. package/src/testing/mock-wallet.ts +73 -6
  125. package/src/wallet/confirm.ts +27 -9
@@ -0,0 +1,233 @@
1
+ import { extractTextToolCalls } from '../qvac/parse.js';
2
+ import { toolParametersSchema } from '../qvac/tools.js';
3
+ const TOOL_CALL_BLOCK = /<tool_call\b[^>]*>[\s\S]*?<\/tool_call>/gi;
4
+ /** The assistant frame the Engine stores: visible text plus one block per call. */
5
+ export function encodeToolCalls(text, calls) {
6
+ const blocks = calls.map((c) => `<tool_call>${JSON.stringify({ name: c.name, arguments: c.arguments })}</tool_call>`);
7
+ return [text.trim(), ...blocks].filter(Boolean).join('\n');
8
+ }
9
+ /** Engine history → Chat Completions messages, with ids pairing calls and results. */
10
+ export function toWireMessages(messages, system) {
11
+ const out = system ? [{ role: 'system', content: system }] : [];
12
+ let pending = [];
13
+ messages.forEach((m, i) => {
14
+ if (m.role === 'assistant') {
15
+ const calls = extractTextToolCalls(m.content);
16
+ const text = m.content.replace(TOOL_CALL_BLOCK, '').trim();
17
+ pending = calls.map((_, j) => `call_${i}_${j}`);
18
+ out.push(calls.length
19
+ ? {
20
+ role: 'assistant',
21
+ content: text || null,
22
+ tool_calls: calls.map((c, j) => ({
23
+ id: pending[j],
24
+ type: 'function',
25
+ function: { name: c.name, arguments: JSON.stringify(c.arguments) },
26
+ })),
27
+ }
28
+ : { role: 'assistant', content: m.content });
29
+ }
30
+ else if (m.role === 'tool') {
31
+ const id = pending.shift();
32
+ // A tool message with no call to answer (e.g. a parse-error note) would
33
+ // be rejected by the server; send it as user context instead.
34
+ out.push(id ? { role: 'tool', content: m.content, tool_call_id: id } : { role: 'user', content: `Tool result: ${m.content}` });
35
+ }
36
+ else {
37
+ pending = [];
38
+ out.push({ role: m.role, content: m.content });
39
+ }
40
+ });
41
+ return out;
42
+ }
43
+ function wireToolChoice(choice) {
44
+ if (!choice)
45
+ return undefined;
46
+ if (choice === 'auto' || choice === 'none' || choice === 'required')
47
+ return choice;
48
+ return { type: 'function', function: { name: choice } };
49
+ }
50
+ function absorbDelta(acc, delta, onToken, onThinking) {
51
+ if (typeof delta?.content === 'string' && delta.content) {
52
+ acc.content += delta.content;
53
+ onToken?.(delta.content);
54
+ }
55
+ const reasoning = delta?.reasoning_content ?? delta?.reasoning;
56
+ if (typeof reasoning === 'string' && reasoning)
57
+ onThinking?.(reasoning);
58
+ for (const tc of delta?.tool_calls ?? []) {
59
+ const index = typeof tc.index === 'number' ? tc.index : acc.calls.size;
60
+ const cur = acc.calls.get(index) ?? { name: '', args: '' };
61
+ if (tc.id)
62
+ cur.id = tc.id;
63
+ if (tc.function?.name)
64
+ cur.name += tc.function.name;
65
+ if (tc.function?.arguments) {
66
+ cur.args += typeof tc.function.arguments === 'string' ? tc.function.arguments : JSON.stringify(tc.function.arguments);
67
+ }
68
+ acc.calls.set(index, cur);
69
+ }
70
+ }
71
+ async function readSse(body, onEvent) {
72
+ const reader = body.getReader();
73
+ const decoder = new TextDecoder();
74
+ let buffer = '';
75
+ for (;;) {
76
+ const { value, done } = await reader.read();
77
+ if (done)
78
+ break;
79
+ buffer += decoder.decode(value, { stream: true });
80
+ let nl;
81
+ while ((nl = buffer.indexOf('\n')) >= 0) {
82
+ const line = buffer.slice(0, nl).trim();
83
+ buffer = buffer.slice(nl + 1);
84
+ if (line.startsWith('data:'))
85
+ onEvent(line.slice(5).trim());
86
+ }
87
+ }
88
+ const last = buffer.trim();
89
+ if (last.startsWith('data:'))
90
+ onEvent(last.slice(5).trim());
91
+ }
92
+ export function createOpenAICompatibleProvider(options) {
93
+ const doFetch = options.fetch ?? globalThis.fetch;
94
+ if (!doFetch)
95
+ throw new Error('No fetch available; pass options.fetch');
96
+ const url = `${options.baseUrl.replace(/\/+$/, '')}/chat/completions`;
97
+ const inflight = new Map();
98
+ let seq = 0;
99
+ return {
100
+ name: 'openai-compatible',
101
+ async runTurn(input) {
102
+ const requestId = `oai-${Date.now().toString(36)}-${++seq}`;
103
+ const controller = new AbortController();
104
+ inflight.set(requestId, controller);
105
+ const onAbort = () => controller.abort();
106
+ input.signal?.addEventListener('abort', onAbort, { once: true });
107
+ if (input.signal?.aborted)
108
+ controller.abort();
109
+ const stream = options.stream ?? true;
110
+ const temperature = input.temperature ?? options.defaultTemperature;
111
+ const maxTokens = input.maxTokens ?? options.defaultMaxTokens;
112
+ const tools = input.tools.map((t) => ({
113
+ type: 'function',
114
+ function: { name: t.name, description: t.description ?? '', parameters: toolParametersSchema(t) },
115
+ }));
116
+ const toolChoice = tools.length ? wireToolChoice(input.toolChoice) : undefined;
117
+ const body = {
118
+ model: options.model,
119
+ messages: toWireMessages(input.messages, input.system),
120
+ stream,
121
+ ...(stream ? { stream_options: { include_usage: true } } : {}),
122
+ ...(temperature !== undefined ? { temperature } : {}),
123
+ ...(maxTokens !== undefined ? { max_tokens: maxTokens } : {}),
124
+ ...(tools.length ? { tools } : {}),
125
+ ...(toolChoice ? { tool_choice: toolChoice } : {}),
126
+ ...options.extraBody,
127
+ };
128
+ const startedAt = Date.now();
129
+ let firstTokenAt;
130
+ const mark = (f) => (t) => {
131
+ firstTokenAt ??= Date.now();
132
+ f?.(t);
133
+ };
134
+ const acc = { content: '', calls: new Map() };
135
+ let cancelled = false;
136
+ try {
137
+ const res = await doFetch(url, {
138
+ method: 'POST',
139
+ headers: {
140
+ 'content-type': 'application/json',
141
+ ...(options.apiKey ? { authorization: `Bearer ${options.apiKey}` } : {}),
142
+ ...options.headers,
143
+ },
144
+ body: JSON.stringify(body),
145
+ signal: controller.signal,
146
+ });
147
+ if (!res.ok) {
148
+ const detail = await res.text().catch(() => '');
149
+ throw new Error(`${options.baseUrl} returned ${res.status}: ${detail.slice(0, 300)}`);
150
+ }
151
+ if (stream && res.body) {
152
+ await readSse(res.body, (data) => {
153
+ if (data === '[DONE]')
154
+ return;
155
+ let chunk;
156
+ try {
157
+ chunk = JSON.parse(data);
158
+ }
159
+ catch {
160
+ return;
161
+ }
162
+ if (chunk.usage)
163
+ acc.usage = chunk.usage;
164
+ const choice = chunk.choices?.[0];
165
+ if (!choice)
166
+ return;
167
+ absorbDelta(acc, choice.delta, mark(input.onToken), mark(options.onThinking));
168
+ if (choice.finish_reason)
169
+ acc.finishReason = choice.finish_reason;
170
+ });
171
+ }
172
+ else {
173
+ const json = await res.json();
174
+ const choice = json.choices?.[0];
175
+ absorbDelta(acc, { ...choice?.message, tool_calls: choice?.message?.tool_calls?.map((c, index) => ({ index, ...c })) }, input.onToken, options.onThinking);
176
+ acc.finishReason = choice?.finish_reason;
177
+ acc.usage = json.usage;
178
+ }
179
+ }
180
+ catch (err) {
181
+ if (!controller.signal.aborted)
182
+ throw err;
183
+ cancelled = true;
184
+ }
185
+ finally {
186
+ inflight.delete(requestId);
187
+ input.signal?.removeEventListener('abort', onAbort);
188
+ }
189
+ const toolCalls = [];
190
+ const toolErrors = [];
191
+ for (const c of [...acc.calls.entries()].sort(([a], [b]) => a - b).map(([, v]) => v)) {
192
+ if (!c.name)
193
+ continue;
194
+ try {
195
+ const args = c.args.trim() ? JSON.parse(c.args) : {};
196
+ toolCalls.push({ ...(c.id ? { id: c.id } : {}), name: c.name, arguments: args && typeof args === 'object' ? args : {} });
197
+ }
198
+ catch {
199
+ toolErrors.push({ code: 'PARSE_ERROR', message: `arguments for ${c.name} are not valid JSON`, raw: c.args });
200
+ }
201
+ }
202
+ // Models that ignore the tools API sometimes write the call as text.
203
+ if (!toolCalls.length && !toolErrors.length) {
204
+ for (const c of extractTextToolCalls(acc.content))
205
+ toolCalls.push(c);
206
+ }
207
+ const text = acc.content.replace(TOOL_CALL_BLOCK, '').trim();
208
+ const truncated = acc.finishReason === 'length';
209
+ const inference = {
210
+ requestId,
211
+ durationMs: Date.now() - startedAt,
212
+ status: cancelled ? 'cancelled' : truncated ? 'truncated' : 'completed',
213
+ ...(firstTokenAt !== undefined ? { ttftMs: firstTokenAt - startedAt } : {}),
214
+ ...(acc.usage?.prompt_tokens !== undefined ? { promptTokens: acc.usage.prompt_tokens } : {}),
215
+ ...(acc.usage?.completion_tokens !== undefined ? { completionTokens: acc.usage.completion_tokens } : {}),
216
+ ...(acc.usage?.total_tokens !== undefined ? { totalTokens: acc.usage.total_tokens } : {}),
217
+ ...(acc.finishReason ? { stopReason: acc.finishReason } : {}),
218
+ };
219
+ return {
220
+ text,
221
+ rawContent: encodeToolCalls(text, toolCalls),
222
+ toolCalls,
223
+ ...(toolErrors.length && !toolCalls.length ? { toolErrors } : {}),
224
+ requestId,
225
+ inference,
226
+ };
227
+ },
228
+ async cancel(requestId) {
229
+ inflight.get(requestId)?.abort();
230
+ },
231
+ };
232
+ }
233
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -15,10 +15,23 @@ export interface TurnInput {
15
15
  tools: ToolDef[];
16
16
  /** System prompt, when not already present as a message. */
17
17
  system?: string;
18
+ /**
19
+ * `'required'` forces a tool call, a tool name forces that tool, `'none'`
20
+ * forbids tools. Omit for the model's own choice. Ignored when `tools` is
21
+ * empty or the provider has no such control.
22
+ */
23
+ toolChoice?: ToolChoice;
18
24
  /** Visible content tokens as they stream. */
19
25
  onToken?: (token: string) => void;
20
26
  signal?: AbortSignal;
21
27
  }
28
+ export type ToolChoice = 'auto' | 'none' | 'required' | (string & {});
29
+ /** A tool-call region the model emitted that the provider could not turn into a call. */
30
+ export interface ToolCallError {
31
+ code: 'PARSE_ERROR' | 'VALIDATION_ERROR' | 'UNKNOWN_TOOL' | (string & {});
32
+ message: string;
33
+ raw?: string;
34
+ }
22
35
  /** Judge-auditable metrics for one provider inference request. */
23
36
  export interface InferenceMetrics {
24
37
  requestId?: string;
@@ -46,10 +59,17 @@ export interface TurnOutput {
46
59
  rawContent: string;
47
60
  /** Tool calls the model requested this turn (empty ⇒ final answer). */
48
61
  toolCalls: ToolCall[];
62
+ /** Tool-call attempts that failed to parse or validate this turn. */
63
+ toolErrors?: ToolCallError[];
49
64
  /** Provider request id, for cancellation. */
50
65
  requestId?: string;
51
66
  /** Optional local-inference receipt. Hosts may persist this as JSONL evidence. */
52
67
  inference?: InferenceMetrics;
68
+ /**
69
+ * True when the turn produced no visible answer because it ran out of budget
70
+ * (e.g. reasoning used the whole output cap). `text` may hold a placeholder.
71
+ */
72
+ incomplete?: boolean;
53
73
  }
54
74
  export interface LLMProvider {
55
75
  readonly name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,kEAAkE;AAClE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;CAC5D;AAED,MAAM,WAAW,UAAU;IACzB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,2EAA2E;IAC3E,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEtE,yFAAyF;AACzF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,aAAa,GAAG,kBAAkB,GAAG,cAAc,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,kEAAkE;AAClE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;CAC5D;AAED,MAAM,WAAW,UAAU;IACzB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,qEAAqE;IACrE,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,2EAA2E;IAC3E,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C"}
@@ -27,7 +27,7 @@ export declare const LOCAL_LLM_CONFIG_GPU: {
27
27
  };
28
28
  /**
29
29
  * Delegated to a desktop provider — it has the RAM to run a big context, so give
30
- * the agentic prompt plenty of room (Qwen3-600M supports up to 32k). 2048
30
+ * the agentic prompt plenty of room (Qwen3.5 supports far more than this). 2048
31
31
  * overflowed with the system prompt + tool/skill definitions alone.
32
32
  */
33
33
  export declare const DELEGATE_LLM_CONFIG: {
@@ -27,7 +27,7 @@ export const LOCAL_LLM_CONFIG_GPU = {
27
27
  };
28
28
  /**
29
29
  * Delegated to a desktop provider — it has the RAM to run a big context, so give
30
- * the agentic prompt plenty of room (Qwen3-600M supports up to 32k). 2048
30
+ * the agentic prompt plenty of room (Qwen3.5 supports far more than this). 2048
31
31
  * overflowed with the system prompt + tool/skill definitions alone.
32
32
  */
33
33
  export const DELEGATE_LLM_CONFIG = {
@@ -10,6 +10,7 @@
10
10
  */
11
11
  export { cleanAssistantVisibleText, sanitizeForSupertonic, } from './text.js';
12
12
  export { LOCAL_LLM_CONFIG, LOCAL_LLM_CONFIG_GPU, DELEGATE_LLM_CONFIG, TTS_SAMPLE_RATE, DEFAULT_VOICE_STREAM_PARAMS, WHISPER_LANGS, normalizeWhisperLang, } from './config.js';
13
+ export { QWEN35_MODELS, DEFAULT_MODEL_ID, DEFAULT_SMALL_DEVICE_MODEL_ID, DEFAULT_QVAC_MODEL, DEFAULT_SMALL_DEVICE_QVAC_MODEL, getRecommendedModel, type RecommendedModel, } from './models.js';
13
14
  export { finalToTurn, type QvacFinalLike, type ParsedTurn, type QvacTurnStats, } from './parse.js';
14
15
  export { consumeRun, type CompletionEventLike, type CompletionRunLike, type StreamHandlers, type ConsumedTurn, } from './stream.js';
15
16
  export { toQvacTools, type QvacTool, type QvacToolProp } from './tools.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/qvac/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,2BAA2B,EAC3B,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,EACV,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3E,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,QAAQ,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/qvac/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,2BAA2B,EAC3B,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,6BAA6B,EAC7B,kBAAkB,EAClB,+BAA+B,EAC/B,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,EACV,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3E,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,QAAQ,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC"}
@@ -10,6 +10,7 @@
10
10
  */
11
11
  export { cleanAssistantVisibleText, sanitizeForSupertonic, } from './text.js';
12
12
  export { LOCAL_LLM_CONFIG, LOCAL_LLM_CONFIG_GPU, DELEGATE_LLM_CONFIG, TTS_SAMPLE_RATE, DEFAULT_VOICE_STREAM_PARAMS, WHISPER_LANGS, normalizeWhisperLang, } from './config.js';
13
+ export { QWEN35_MODELS, DEFAULT_MODEL_ID, DEFAULT_SMALL_DEVICE_MODEL_ID, DEFAULT_QVAC_MODEL, DEFAULT_SMALL_DEVICE_QVAC_MODEL, getRecommendedModel, } from './models.js';
13
14
  export { finalToTurn, } from './parse.js';
14
15
  export { consumeRun, } from './stream.js';
15
16
  export { toQvacTools } from './tools.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/qvac/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,2BAA2B,EAC3B,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,GAIZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,GAKX,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAoC,MAAM,YAAY,CAAC;AAE3E,OAAO,EACL,kBAAkB,GAGnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,GAKhB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,GAM3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GAGpB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/qvac/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,2BAA2B,EAC3B,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,6BAA6B,EAC7B,kBAAkB,EAClB,+BAA+B,EAC/B,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,GAIZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,GAKX,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAoC,MAAM,YAAY,CAAC;AAE3E,OAAO,EACL,kBAAkB,GAGnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,GAKhB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,GAM3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GAGpB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Recommended local models. Plain data (no SDK import): `qvacConstant` is the
3
+ * name of the matching @qvac/sdk registry export (present since @qvac/sdk
4
+ * 0.13.1), `hfRepo`/`hfFile` the same GGUF on Hugging Face for hosts that
5
+ * download directly. Sizes are the exact file sizes.
6
+ */
7
+ export interface RecommendedModel {
8
+ id: string;
9
+ family: string;
10
+ displayName: string;
11
+ /** Name of the @qvac/sdk model constant, e.g. `QWEN3_5_4B_MULTIMODAL_Q4_K_M`. */
12
+ qvacConstant: string;
13
+ quant: string;
14
+ sizeBytes: number;
15
+ hfRepo: string;
16
+ hfFile: string;
17
+ /** Rough RAM needed to run it with the agent's context window. */
18
+ ramHintGb: number;
19
+ notes: string;
20
+ }
21
+ export declare const QWEN35_MODELS: readonly RecommendedModel[];
22
+ /** Default model for every host (provider sidecar, CLI, examples). */
23
+ export declare const DEFAULT_MODEL_ID = "qwen3.5-2b-q4_k_m";
24
+ /** Default model for phones and other small devices. */
25
+ export declare const DEFAULT_SMALL_DEVICE_MODEL_ID = "qwen3.5-2b-q4_k_m";
26
+ export declare function getRecommendedModel(id: string): RecommendedModel | undefined;
27
+ /** @qvac/sdk constant name of the default, e.g. for `sdk[DEFAULT_QVAC_MODEL]`. */
28
+ export declare const DEFAULT_QVAC_MODEL: string;
29
+ /** @qvac/sdk constant name of the small-device default. */
30
+ export declare const DEFAULT_SMALL_DEVICE_QVAC_MODEL: string;
31
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/qvac/models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,aAAa,EAAE,SAAS,gBAAgB,EA6DpD,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AACpD,wDAAwD;AACxD,eAAO,MAAM,6BAA6B,sBAAsB,CAAC;AAEjE,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAE5E;AAED,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,QAAsD,CAAC;AACtF,2DAA2D;AAC3D,eAAO,MAAM,+BAA+B,QAAmE,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Recommended local models. Plain data (no SDK import): `qvacConstant` is the
3
+ * name of the matching @qvac/sdk registry export (present since @qvac/sdk
4
+ * 0.13.1), `hfRepo`/`hfFile` the same GGUF on Hugging Face for hosts that
5
+ * download directly. Sizes are the exact file sizes.
6
+ */
7
+ export const QWEN35_MODELS = [
8
+ {
9
+ id: 'qwen3.5-0.8b-q4_k_m',
10
+ family: 'qwen3.5',
11
+ displayName: 'Qwen 3.5 · 0.8B',
12
+ qvacConstant: 'QWEN3_5_0_8B_MULTIMODAL_Q4_K_M',
13
+ quant: 'Q4_K_M',
14
+ sizeBytes: 532_517_120,
15
+ hfRepo: 'unsloth/Qwen3.5-0.8B-GGUF',
16
+ hfFile: 'Qwen3.5-0.8B-Q4_K_M.gguf',
17
+ ramHintGb: 1.5,
18
+ notes: 'Smoke tests only. Loops on wallet actions in our signet bench; fine for chat and single read-only calls.',
19
+ },
20
+ {
21
+ id: 'qwen3.5-2b-q4_k_m',
22
+ family: 'qwen3.5',
23
+ displayName: 'Qwen 3.5 · 2B',
24
+ qvacConstant: 'QWEN3_5_2B_MULTIMODAL_Q4_K_M',
25
+ quant: 'Q4_K_M',
26
+ sizeBytes: 1_280_835_840,
27
+ hfRepo: 'unsloth/Qwen3.5-2B-GGUF',
28
+ hfFile: 'Qwen3.5-2B-Q4_K_M.gguf',
29
+ ramHintGb: 3,
30
+ notes: 'Recommended default. Passed all 7 wallet tasks of our signet RGB bench at 45–150 s per question on an M4 laptop; also fits phones.',
31
+ },
32
+ {
33
+ id: 'qwen3.5-4b-q4_k_m',
34
+ family: 'qwen3.5',
35
+ displayName: 'Qwen 3.5 · 4B',
36
+ qvacConstant: 'QWEN3_5_4B_MULTIMODAL_Q4_K_M',
37
+ quant: 'Q4_K_M',
38
+ sizeBytes: 2_740_937_888,
39
+ hfRepo: 'unsloth/Qwen3.5-4B-GGUF',
40
+ hfFile: 'Qwen3.5-4B-Q4_K_M.gguf',
41
+ ramHintGb: 5,
42
+ notes: 'Same correctness as 2B in our bench, about twice as slow (105–330 s per question on an M4). Pick it for longer free-form answers.',
43
+ },
44
+ {
45
+ id: 'qwen3.5-9b-q4_k_m',
46
+ family: 'qwen3.5',
47
+ displayName: 'Qwen 3.5 · 9B',
48
+ qvacConstant: 'QWEN3_5_9B_MULTIMODAL_Q4_K_M',
49
+ quant: 'Q4_K_M',
50
+ sizeBytes: 5_680_522_464,
51
+ hfRepo: 'unsloth/Qwen3.5-9B-GGUF',
52
+ hfFile: 'Qwen3.5-9B-Q4_K_M.gguf',
53
+ ramHintGb: 9,
54
+ notes: 'Needs 16 GB of RAM. Slow for interactive use (180–690 s per question on an M4); for unattended multi-step tasks.',
55
+ },
56
+ {
57
+ id: 'qwen3.6-35b-a3b-q4_k_m',
58
+ family: 'qwen3.6',
59
+ displayName: 'Qwen 3.6 · 35B-A3B (MoE)',
60
+ qvacConstant: 'QWEN3_6_35B_A3B_MULTIMODAL_Q4_K_M',
61
+ quant: 'UD-Q4_K_M',
62
+ sizeBytes: 22_134_528_992,
63
+ hfRepo: 'unsloth/Qwen3.6-35B-A3B-GGUF',
64
+ hfFile: 'Qwen3.6-35B-A3B-UD-Q4_K_M.gguf',
65
+ ramHintGb: 26,
66
+ notes: 'Big machines only (32 GB+). MoE with ~3B active parameters: best quality, 22 GB download.',
67
+ },
68
+ ];
69
+ /** Default model for every host (provider sidecar, CLI, examples). */
70
+ export const DEFAULT_MODEL_ID = 'qwen3.5-2b-q4_k_m';
71
+ /** Default model for phones and other small devices. */
72
+ export const DEFAULT_SMALL_DEVICE_MODEL_ID = 'qwen3.5-2b-q4_k_m';
73
+ export function getRecommendedModel(id) {
74
+ return QWEN35_MODELS.find((m) => m.id === id);
75
+ }
76
+ /** @qvac/sdk constant name of the default, e.g. for `sdk[DEFAULT_QVAC_MODEL]`. */
77
+ export const DEFAULT_QVAC_MODEL = getRecommendedModel(DEFAULT_MODEL_ID).qvacConstant;
78
+ /** @qvac/sdk constant name of the small-device default. */
79
+ export const DEFAULT_SMALL_DEVICE_QVAC_MODEL = getRecommendedModel(DEFAULT_SMALL_DEVICE_MODEL_ID).qvacConstant;
80
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/qvac/models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,MAAM,CAAC,MAAM,aAAa,GAAgC;IACxD;QACE,EAAE,EAAE,qBAAqB;QACzB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,iBAAiB;QAC9B,YAAY,EAAE,gCAAgC;QAC9C,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,WAAW;QACtB,MAAM,EAAE,2BAA2B;QACnC,MAAM,EAAE,0BAA0B;QAClC,SAAS,EAAE,GAAG;QACd,KAAK,EAAE,0GAA0G;KAClH;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,eAAe;QAC5B,YAAY,EAAE,8BAA8B;QAC5C,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,aAAa;QACxB,MAAM,EAAE,yBAAyB;QACjC,MAAM,EAAE,wBAAwB;QAChC,SAAS,EAAE,CAAC;QACZ,KAAK,EAAE,oIAAoI;KAC5I;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,eAAe;QAC5B,YAAY,EAAE,8BAA8B;QAC5C,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,aAAa;QACxB,MAAM,EAAE,yBAAyB;QACjC,MAAM,EAAE,wBAAwB;QAChC,SAAS,EAAE,CAAC;QACZ,KAAK,EAAE,mIAAmI;KAC3I;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,eAAe;QAC5B,YAAY,EAAE,8BAA8B;QAC5C,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,aAAa;QACxB,MAAM,EAAE,yBAAyB;QACjC,MAAM,EAAE,wBAAwB;QAChC,SAAS,EAAE,CAAC;QACZ,KAAK,EAAE,kHAAkH;KAC1H;IACD;QACE,EAAE,EAAE,wBAAwB;QAC5B,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,0BAA0B;QACvC,YAAY,EAAE,mCAAmC;QACjD,KAAK,EAAE,WAAW;QAClB,SAAS,EAAE,cAAc;QACzB,MAAM,EAAE,8BAA8B;QACtC,MAAM,EAAE,gCAAgC;QACxC,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,2FAA2F;KACnG;CACF,CAAC;AAEF,sEAAsE;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AACpD,wDAAwD;AACxD,MAAM,CAAC,MAAM,6BAA6B,GAAG,mBAAmB,CAAC;AAEjE,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,gBAAgB,CAAE,CAAC,YAAY,CAAC;AACtF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,+BAA+B,GAAG,mBAAmB,CAAC,6BAA6B,CAAE,CAAC,YAAY,CAAC"}
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Pure mapping from a QVAC completion `final` frame to the shape the shared
3
+ * @kaleidorg/mind Engine consumes. Kept SDK-free (structural input type) so it
4
+ * is testable without loading a model, and so the same mapping runs on mobile,
5
+ * desktop, and the eval harness.
6
+ */
7
+ import type { ToolCallError } from '../providers/types.js';
1
8
  /**
2
9
  * Per-turn inference stats from a QVAC `completion().final.stats` frame. The
3
10
  * authoritative source for which backend actually ran (`backendDevice`) and the
@@ -29,6 +36,8 @@ export interface QvacFinalLike {
29
36
  name: string;
30
37
  arguments?: Record<string, unknown>;
31
38
  }>;
39
+ /** Tool-call regions that failed to parse or validate (QVAC 0.20+; omitted when none). */
40
+ toolErrors?: ToolCallError[];
32
41
  /**
33
42
  * Why generation stopped: `"length"` when the token budget is exhausted,
34
43
  * `"cancelled"` on abort, `"eos"`/`"stopSequence"`/`undefined` on a natural stop. We surface
@@ -49,6 +58,8 @@ export interface ParsedTurn {
49
58
  name: string;
50
59
  arguments: Record<string, unknown>;
51
60
  }>;
61
+ /** Tool-call attempts the SDK could not parse, when no call was recovered from text. */
62
+ toolErrors?: ToolCallError[];
52
63
  /** True when generation was cut off by the token budget (incomplete output). */
53
64
  truncated: boolean;
54
65
  /** Raw stop reason from the SDK, when provided. */
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/qvac/parse.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,aAAa,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,uEAAuE;IACvE,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACtF;;;;OAIG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IAC7C,iFAAiF;IACjF,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACpF,gFAAgF;IAChF,SAAS,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAkCD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAc7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,SAAK,GAAG,UAAU,CAoB3E"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/qvac/parse.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,aAAa,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,uEAAuE;IACvE,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACtF,0FAA0F;IAC1F,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B;;;;OAIG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IAC7C,iFAAiF;IACjF,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACpF,wFAAwF;IACxF,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,gFAAgF;IAChF,SAAS,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AA2DD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAe7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,SAAK,GAAG,UAAU,CAqB3E"}
@@ -1,9 +1,3 @@
1
- /**
2
- * Pure mapping from a QVAC completion `final` frame to the shape the shared
3
- * @kaleidorg/mind Engine consumes. Kept SDK-free (structural input type) so it
4
- * is testable without loading a model, and so the same mapping runs on mobile,
5
- * desktop, and the eval harness.
6
- */
7
1
  import { cleanAssistantVisibleText } from './text.js';
8
2
  /** Parse the first balanced `{…}` from a string as a `{name, arguments}` call. */
9
3
  function parseCallObject(s) {
@@ -33,6 +27,32 @@ function parseCallObject(s) {
33
27
  }
34
28
  return null;
35
29
  }
30
+ /**
31
+ * Parse Qwen3.5's XML call body:
32
+ * `<function=name><parameter=key>value</parameter>…</function>`. Values that
33
+ * read as JSON (numbers, booleans, arrays, objects) are decoded; the rest stay
34
+ * strings.
35
+ */
36
+ function parseXmlCall(s) {
37
+ const fn = s.match(/<function=([^>\s]+)\s*>([\s\S]*?)(?:<\/function>|$)/i);
38
+ if (!fn?.[1])
39
+ return null;
40
+ const args = {};
41
+ for (const m of (fn[2] ?? '').matchAll(/<parameter=([^>\s]+)\s*>([\s\S]*?)<\/parameter>/gi)) {
42
+ const raw = (m[2] ?? '').trim();
43
+ let value = raw;
44
+ if (/^(-?\d+(\.\d+)?|true|false|null|\[[\s\S]*\]|\{[\s\S]*\})$/.test(raw)) {
45
+ try {
46
+ value = JSON.parse(raw);
47
+ }
48
+ catch {
49
+ value = raw;
50
+ }
51
+ }
52
+ args[m[1]] = value;
53
+ }
54
+ return { name: fn[1], arguments: args };
55
+ }
36
56
  /**
37
57
  * Recover tool calls a model emitted as PLAIN TEXT instead of structured frames
38
58
  * — `<tool_call>{"name":…,"arguments":…}</tool_call>` (Qwen/Hermes) or a bare
@@ -43,7 +63,8 @@ function parseCallObject(s) {
43
63
  export function extractTextToolCalls(text) {
44
64
  const calls = [];
45
65
  for (const m of text.matchAll(/<tool_call\b[^>]*>([\s\S]*?)<\/tool_call>/gi)) {
46
- const c = parseCallObject(m[1] ?? '');
66
+ const body = m[1] ?? '';
67
+ const c = parseCallObject(body) ?? parseXmlCall(body);
47
68
  if (c)
48
69
  calls.push(c);
49
70
  }
@@ -84,6 +105,7 @@ export function finalToTurn(final, streamed = '') {
84
105
  text,
85
106
  rawContent: final.raw?.fullText ?? rawText,
86
107
  toolCalls,
108
+ ...(toolCalls.length === 0 && final.toolErrors?.length ? { toolErrors: final.toolErrors } : {}),
87
109
  truncated: final.stopReason === 'length',
88
110
  stopReason: final.stopReason,
89
111
  stats: final.stats,
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/qvac/parse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/qvac/parse.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAyDtD,kFAAkF;AAClF,SAAS,eAAe,CACtB,CAAS;IAET,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,EAAE,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;aACnB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAG3C,CAAC;gBACF,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACxC,MAAM,IAAI,GACR,GAAG,CAAC,SAAS,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;wBAChD,CAAC,CAAE,GAAG,CAAC,SAAqC;wBAC5C,CAAC,CAAC,EAAE,CAAC;oBACT,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBAC7C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;YACjD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,CAAS;IAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC3E,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC,EAAE,CAAC;QAC5F,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,KAAK,GAAY,GAAG,CAAC;QACzB,IAAI,2DAA2D,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC;gBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,KAAK,GAAG,GAAG,CAAC;YACd,CAAC;QACH,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY;IAEZ,MAAM,KAAK,GAAgE,EAAE,CAAC;IAC9E,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,6CAA6C,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC/B,yEAAyE;IACzE,qEAAqE;IACrE,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,KAAoB,EAAE,QAAQ,GAAG,EAAE;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,IAAI,QAAQ,CAAC;IAC9C,MAAM,IAAI,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;KAC7B,CAAC,CAAC,CAAC;IACJ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,IAAI,OAAO,CAAC,CAAC;QACvE,IAAI,SAAS,CAAC,MAAM;YAAE,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,OAAO;QACL,IAAI;QACJ,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,IAAI,OAAO;QAC1C,SAAS;QACT,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,SAAS,EAAE,KAAK,CAAC,UAAU,KAAK,QAAQ;QACxC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;AACJ,CAAC"}
@@ -37,10 +37,11 @@ export interface QvacProviderOptions {
37
37
  /** Default max output tokens — caps a turn so it can't ramble. Omit for uncapped. */
38
38
  defaultMaxTokens?: number;
39
39
  /**
40
- * Cap `<think>` reasoning at this many TOKENS (not seconds — tok/s varies, and
41
- * the SDK has no numeric reasoning budget). When a turn's thinking exceeds it,
42
- * the run is cancelled and a short fallback is returned instead of hanging on
43
- * "Thinking…". Omit for unlimited reasoning.
40
+ * Cap `<think>` reasoning at this many TOKENS (not seconds — tok/s varies).
41
+ * Sent as the SDK's `reasoning_budget`, so the model closes its reasoning and
42
+ * answers. If the stream still runs well past it, the run is cancelled and a
43
+ * short fallback is returned instead of hanging on "Thinking…". Omit for
44
+ * unlimited reasoning.
44
45
  */
45
46
  maxThinkingTokens?: number;
46
47
  /** Stream the model's `<think>` reasoning, when a host wants to surface it. */
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/qvac/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,KAAK,OAAO,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAoB,WAAW,EAAE,SAAS,EAAc,MAAM,uBAAuB,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,KAAK,YAAY,GAAG,OAAO,OAAO,CAAC,UAAU,CAAC;AAC9C,KAAK,QAAQ,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,UAAU,EAAE,YAAY,CAAC;IACzB,qCAAqC;IACrC,MAAM,EAAE,QAAQ,CAAC;IACjB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAChC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC1C;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC1C;AAOD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,WAAW,CA2H5E"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/qvac/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,KAAK,OAAO,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAoB,WAAW,EAAE,SAAS,EAAc,MAAM,uBAAuB,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,KAAK,YAAY,GAAG,OAAO,OAAO,CAAC,UAAU,CAAC;AAC9C,KAAK,QAAQ,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,UAAU,EAAE,YAAY,CAAC;IACzB,qCAAqC;IACrC,MAAM,EAAE,QAAQ,CAAC;IACjB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAChC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC1C;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC1C;AAOD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,WAAW,CA2I5E"}