@kaleidorg/mind 0.6.0 → 0.6.1

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/bitrefill/contract.d.ts +60 -0
  2. package/dist/bitrefill/contract.d.ts.map +1 -0
  3. package/dist/bitrefill/contract.js +119 -0
  4. package/dist/bitrefill/contract.js.map +1 -0
  5. package/dist/context/compress.d.ts +65 -0
  6. package/dist/context/compress.d.ts.map +1 -0
  7. package/dist/context/compress.js +181 -0
  8. package/dist/context/compress.js.map +1 -0
  9. package/dist/engine.d.ts +20 -0
  10. package/dist/engine.d.ts.map +1 -1
  11. package/dist/engine.js +23 -4
  12. package/dist/engine.js.map +1 -1
  13. package/dist/evidence.d.ts +62 -0
  14. package/dist/evidence.d.ts.map +1 -0
  15. package/dist/evidence.js +47 -0
  16. package/dist/evidence.js.map +1 -0
  17. package/dist/flashnet/contract.d.ts +56 -0
  18. package/dist/flashnet/contract.d.ts.map +1 -0
  19. package/dist/flashnet/contract.js +100 -0
  20. package/dist/flashnet/contract.js.map +1 -0
  21. package/dist/funnel.d.ts +11 -0
  22. package/dist/funnel.d.ts.map +1 -1
  23. package/dist/funnel.js +50 -7
  24. package/dist/funnel.js.map +1 -1
  25. package/dist/index.d.ts +10 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +7 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/kaleidoswap/contract.js +1 -1
  30. package/dist/kaleidoswap/contract.js.map +1 -1
  31. package/dist/knowledge/bitcoin-copilot.d.ts.map +1 -1
  32. package/dist/knowledge/bitcoin-copilot.js +83 -0
  33. package/dist/knowledge/bitcoin-copilot.js.map +1 -1
  34. package/dist/providers/types.d.ts +17 -0
  35. package/dist/providers/types.d.ts.map +1 -1
  36. package/dist/qvac/provider.d.ts.map +1 -1
  37. package/dist/qvac/provider.js +23 -0
  38. package/dist/qvac/provider.js.map +1 -1
  39. package/dist/qvac/stream.d.ts +6 -0
  40. package/dist/qvac/stream.d.ts.map +1 -1
  41. package/dist/qvac/stream.js +12 -0
  42. package/dist/qvac/stream.js.map +1 -1
  43. package/dist/recipe/flashnet-swap.d.ts +35 -0
  44. package/dist/recipe/flashnet-swap.d.ts.map +1 -0
  45. package/dist/recipe/flashnet-swap.js +239 -0
  46. package/dist/recipe/flashnet-swap.js.map +1 -0
  47. package/dist/recipe/kaleidoswap-atomic.d.ts.map +1 -1
  48. package/dist/recipe/kaleidoswap-atomic.js +37 -16
  49. package/dist/recipe/kaleidoswap-atomic.js.map +1 -1
  50. package/dist/recipe/kaleidoswap-channel-order.d.ts.map +1 -1
  51. package/dist/recipe/kaleidoswap-channel-order.js +31 -10
  52. package/dist/recipe/kaleidoswap-channel-order.js.map +1 -1
  53. package/dist/recipe/kaleidoswap-price.d.ts.map +1 -1
  54. package/dist/recipe/kaleidoswap-price.js +7 -1
  55. package/dist/recipe/kaleidoswap-price.js.map +1 -1
  56. package/dist/recipe/runner.d.ts.map +1 -1
  57. package/dist/recipe/runner.js +5 -3
  58. package/dist/recipe/runner.js.map +1 -1
  59. package/dist/recipe/swap.d.ts.map +1 -1
  60. package/dist/recipe/swap.js +14 -1
  61. package/dist/recipe/swap.js.map +1 -1
  62. package/dist/wallet/confirm.d.ts.map +1 -1
  63. package/dist/wallet/confirm.js +1 -0
  64. package/dist/wallet/confirm.js.map +1 -1
  65. package/dist/wallet/contract.d.ts.map +1 -1
  66. package/dist/wallet/contract.js +20 -4
  67. package/dist/wallet/contract.js.map +1 -1
  68. package/package.json +4 -4
  69. package/skills/bitrefill/SKILL.md +152 -52
  70. package/skills/flashnet-swaps/SKILL.md +158 -0
  71. package/skills/kaleido-lsps/SKILL.md +25 -8
  72. package/skills/kaleido-trading/SKILL.md +36 -12
  73. package/skills/merchant-finder/SKILL.md +1 -1
  74. package/skills/rgb-lightning-node/SKILL.md +35 -8
  75. package/skills/spark-wallet/SKILL.md +235 -0
  76. package/skills/wallet-assistant/SKILL.md +2 -2
  77. package/src/bitrefill/contract.test.ts +89 -0
  78. package/src/bitrefill/contract.ts +190 -0
  79. package/src/context/compress.test.ts +120 -0
  80. package/src/context/compress.ts +230 -0
  81. package/src/engine.test.ts +34 -0
  82. package/src/engine.ts +35 -4
  83. package/src/evidence.test.ts +80 -0
  84. package/src/evidence.ts +114 -0
  85. package/src/flashnet/contract.test.ts +101 -0
  86. package/src/flashnet/contract.ts +164 -0
  87. package/src/funnel.ts +59 -8
  88. package/src/index.ts +51 -1
  89. package/src/kaleidoswap/contract.ts +1 -1
  90. package/src/knowledge/bitcoin-copilot.ts +94 -0
  91. package/src/providers/types.ts +18 -0
  92. package/src/qvac/provider.ts +25 -1
  93. package/src/qvac/stream.test.ts +11 -0
  94. package/src/qvac/stream.ts +16 -0
  95. package/src/recipe/flashnet-swap.test.ts +114 -0
  96. package/src/recipe/flashnet-swap.ts +266 -0
  97. package/src/recipe/kaleidoswap-atomic.test.ts +21 -0
  98. package/src/recipe/kaleidoswap-atomic.ts +34 -16
  99. package/src/recipe/kaleidoswap-channel-order.test.ts +38 -0
  100. package/src/recipe/kaleidoswap-channel-order.ts +27 -9
  101. package/src/recipe/kaleidoswap-price.ts +7 -1
  102. package/src/recipe/recipe.test.ts +5 -0
  103. package/src/recipe/runner.ts +5 -3
  104. package/src/recipe/swap.ts +16 -1
  105. package/src/wallet/confirm.test.ts +8 -0
  106. package/src/wallet/confirm.ts +1 -0
  107. package/src/wallet/contract.test.ts +10 -0
  108. package/src/wallet/contract.ts +26 -4
@@ -53,7 +53,7 @@ export const KALEIDOSWAP_TOOLS = [
53
53
  t('orders', 'kaleidoswap_get_order_status', 'Check the status of an order by id — pending / settling / completed / failed. Poll this after place_order until the order settles. Requires the access_token returned by place_order for authenticated orders.', {
54
54
  order_id: { type: 'string', description: 'The order id returned by kaleidoswap_place_order.' },
55
55
  access_token: { type: 'string', description: 'The per-order access token returned by kaleidoswap_place_order. Required for status checks on the order.' },
56
- }, ['order_id']),
56
+ }, ['order_id', 'access_token']),
57
57
  t('orders', 'kaleidoswap_get_order_history', "Get the user's recent KaleidoSwap orders for context (last N, paginated). Read-only.", {
58
58
  limit: { type: 'number', description: 'Max rows (default 20, max 100).' },
59
59
  cursor: { type: 'string', description: 'Pagination cursor from a previous call.' },
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/kaleidoswap/contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/kaleidoswap/contract.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bitcoin-copilot.d.ts","sourceRoot":"","sources":["../../src/knowledge/bitcoin-copilot.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,eAAO,MAAM,oBAAoB,EAAE,WAAW,EAoR7C,CAAC"}
1
+ {"version":3,"file":"bitcoin-copilot.d.ts","sourceRoot":"","sources":["../../src/knowledge/bitcoin-copilot.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,eAAO,MAAM,oBAAoB,EAAE,WAAW,EAkX7C,CAAC"}
@@ -253,5 +253,88 @@ export const BITCOIN_COPILOT_DOCS = [
253
253
  "(not just inbound capacity).",
254
254
  metadata: { topic: 'rgb-channels' },
255
255
  },
256
+ // ── Layer / protocol taxonomy ─────────────────────────────────────────
257
+ // The single biggest source of model confusion is mixing up which assets
258
+ // live on which layer. Small models pattern-match on "USDT" or "Bitcoin"
259
+ // and assume every L2 supports every asset — they don't. Each L2 has its
260
+ // OWN asset family, and assets do not move between them without an
261
+ // explicit cross-layer swap or bridge.
262
+ {
263
+ id: 'kaleidomind-layers-overview',
264
+ text: 'This wallet supports THREE distinct Bitcoin L2s, each with its own ' +
265
+ 'asset family. They are NOT interchangeable: a balance on one layer ' +
266
+ 'cannot be spent on another without an explicit swap. ' +
267
+ '(1) SPARK — an off-chain BTC scaling layer (Lightspark / buildonspark, ' +
268
+ 'Statechains-based). Assets: BTC (sats) + Spark-native tokens like ' +
269
+ 'USDB. Tools: spark_* (balance/address/invoice/pay). Swap venue: ' +
270
+ 'Flashnet AMM (BTC ⇄ Spark tokens). ' +
271
+ '(2) RLN / RGB — a Lightning node that carries RGB assets over ' +
272
+ 'BOLT11 channels (colored channels). Assets: BTC + RGB assets like ' +
273
+ 'USDT, XAUT. Tools: rln_* (nodeinfo/invoice/pay/whitelist). Swap ' +
274
+ 'venue: KaleidoSwap maker (BTC ⇄ RGB assets via atomic HTLC swap). ' +
275
+ '(3) ARKADE — an Ark-based off-chain BTC layer. Assets: BTC. Tools: ' +
276
+ 'arkade_* (balance/address/send). No native non-BTC assets today.',
277
+ metadata: { topic: 'layers' },
278
+ },
279
+ {
280
+ id: 'spark-layer-assets',
281
+ text: 'Spark is an off-chain BTC scaling layer (Lightspark / buildonspark). ' +
282
+ "It holds BTC (sats) and Spark-native tokens. USDB is a Spark token. " +
283
+ 'Spark addresses look like spark1… (or sparkrt1… on regtest). ' +
284
+ 'CRITICAL: Spark does NOT carry RGB assets. USDT and XAUT are RGB ' +
285
+ 'assets that live on the RLN (RGB Lightning Node) layer — not on ' +
286
+ "Spark. A user's USDT balance, if they have one, is on RLN, NOT " +
287
+ 'Spark. Conversely, USDB lives only on Spark (and trades on ' +
288
+ 'Flashnet); it has no presence on RLN/RGB. When asked "what assets ' +
289
+ 'are on Spark / what can I trade on Spark", answer with Spark-native ' +
290
+ 'tokens (BTC + USDB and any other Spark tokens the AMM lists via ' +
291
+ 'flashnet_list_pools), NOT USDT/XAUT/RGB.',
292
+ metadata: { topic: 'layers' },
293
+ },
294
+ {
295
+ id: 'rln-layer-assets',
296
+ text: 'RLN (RGB Lightning Node) is a Lightning node that carries RGB ' +
297
+ 'assets over BOLT11 channels (a.k.a. colored channels). It holds ' +
298
+ 'BTC on standard Lightning channels and RGB assets — USDT, XAUT, ' +
299
+ 'and any other client-side-validated asset issued via RGB — on ' +
300
+ 'asset channels. Each asset needs its own channel. RGB assets do ' +
301
+ 'NOT live on Spark or Arkade; they are RLN-only. Swap venue for ' +
302
+ 'BTC ⇄ RGB asset is the KaleidoSwap maker (atomic HTLC: quote → ' +
303
+ 'init → whitelist → execute). To receive an RGB asset over ' +
304
+ 'Lightning, you first need an LSPS1-opened asset channel.',
305
+ metadata: { topic: 'layers' },
306
+ },
307
+ {
308
+ id: 'swap-venue-split',
309
+ text: "Two swap venues, two asset families — DO NOT confuse them. " +
310
+ "FLASHNET is a Spark-native AMM. It trades between BTC and " +
311
+ "Spark-native tokens (e.g. USDB). It uses the same Spark wallet " +
312
+ "as the user's balance. Tools: flashnet_list_pools, " +
313
+ "flashnet_simulate_swap, flashnet_execute_swap. Skill: " +
314
+ "flashnet-swaps. ASSETS: BTC, USDB, and anything else " +
315
+ "flashnet_list_pools returns. NEVER offer USDT/XAUT on Flashnet. " +
316
+ "KALEIDOSWAP is an atomic HTLC maker. It trades between BTC and " +
317
+ "RGB assets (USDT, XAUT). It uses the RLN node. Tools: " +
318
+ "kaleidoswap_get_quote, kaleidoswap_atomic_init, " +
319
+ "kaleidoswap_atomic_execute. Skill: kaleido-trading. ASSETS: BTC, " +
320
+ "USDT, XAUT, and other RGB assets the maker prices. NEVER offer " +
321
+ "USDB on KaleidoSwap.",
322
+ metadata: { topic: 'venues' },
323
+ },
324
+ {
325
+ id: 'asset-to-layer-routing',
326
+ text: "How to route by asset name. The asset names tell you which layer " +
327
+ "to use — don't guess: " +
328
+ "BTC / sats → all layers (Spark / RLN / Arkade / on-chain) carry " +
329
+ "BTC; pick by user context. " +
330
+ "USDB → Spark only, via Flashnet (flashnet-swaps). " +
331
+ "USDT → RLN/RGB only, via KaleidoSwap (kaleido-trading). " +
332
+ "XAUT (tether-gold) → RLN/RGB only, via KaleidoSwap. " +
333
+ "If a user names an asset you don't recognise, do NOT assume a " +
334
+ "layer — ask, or list pools/assets via the right tool first " +
335
+ "(flashnet_list_pools for Spark-side, kaleidoswap_get_pairs / " +
336
+ "kaleidoswap_get_assets for RGB-side).",
337
+ metadata: { topic: 'venues' },
338
+ },
256
339
  ];
257
340
  //# sourceMappingURL=bitcoin-copilot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitcoin-copilot.js","sourceRoot":"","sources":["../../src/knowledge/bitcoin-copilot.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD;QACE,EAAE,EAAE,mBAAmB;QACvB,IAAI,EACF,4EAA4E;YAC5E,yEAAyE;YACzE,0EAA0E;YAC1E,0EAA0E;QAC5E,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,IAAI,EACF,uEAAuE;YACvE,0EAA0E;YAC1E,6EAA6E;QAC/E,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EACF,wEAAwE;YACxE,2EAA2E;YAC3E,8EAA8E;QAChF,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EACF,0EAA0E;YAC1E,2EAA2E;YAC3E,4EAA4E;YAC5E,0CAA0C;QAC5C,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EACF,0EAA0E;YAC1E,yEAAyE;YACzE,4EAA4E;YAC5E,kCAAkC;QACpC,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;KAChC;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EACF,2EAA2E;YAC3E,4EAA4E;YAC5E,6EAA6E;YAC7E,iDAAiD;QACnD,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;KAChC;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EACF,sEAAsE;YACtE,wEAAwE;YACxE,gEAAgE;QAClE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC7B;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EACF,sEAAsE;YACtE,4EAA4E;YAC5E,6EAA6E;QAC/E,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC7B;IACD;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EACF,wEAAwE;YACxE,2EAA2E;YAC3E,gEAAgE;QAClE,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;KAC3B;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,IAAI,EACF,0EAA0E;YAC1E,0EAA0E;YAC1E,iFAAiF;QACnF,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;KAC3B;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EACF,qEAAqE;YACrE,0EAA0E;YAC1E,4DAA4D;QAC9D,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;KAC3B;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EACF,4EAA4E;YAC5E,wEAAwE;YACxE,6DAA6D;QAC/D,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;KAC/B;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EACF,yEAAyE;YACzE,4EAA4E;YAC5E,wCAAwC;QAC1C,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;KAC/B;IACD;QACE,EAAE,EAAE,KAAK;QACT,IAAI,EACF,uEAAuE;YACvE,2EAA2E;YAC3E,gDAAgD;QAClD,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EACF,4EAA4E;YAC5E,4EAA4E;YAC5E,wCAAwC;QAC1C,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;KAC5B;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EACF,0EAA0E;YAC1E,yEAAyE;YACzE,oEAAoE;QACtE,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;KAChC;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EACF,4EAA4E;YAC5E,0EAA0E;YAC1E,oEAAoE;QACtE,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;KAChC;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EACF,yEAAyE;YACzE,2EAA2E;YAC3E,mDAAmD;QACrD,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC7B;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EACF,0EAA0E;YAC1E,yEAAyE;YACzE,iDAAiD;QACnD,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC7B;IACD;QACE,EAAE,EAAE,KAAK;QACT,IAAI,EACF,0EAA0E;YAC1E,oEAAoE;YACpE,iEAAiE;QACnE,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;KAC/B;IACD;QACE,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EACF,wEAAwE;YACxE,mEAAmE;YACnE,sEAAsE;YACtE,sEAAsE;YACtE,wEAAwE;YACxE,sEAAsE;YACtE,wBAAwB;QAC1B,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,IAAI,EACF,uEAAuE;YACvE,yEAAyE;YACzE,qEAAqE;YACrE,oEAAoE;YACpE,wEAAwE;YACxE,wEAAwE;YACxE,sEAAsE;YACtE,kDAAkD;QACpD,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,IAAI,EACF,wEAAwE;YACxE,uEAAuE;YACvE,wEAAwE;YACxE,uEAAuE;YACvE,kEAAkE;YAClE,uEAAuE;YACvE,yDAAyD;QAC3D,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;KAChC;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,IAAI,EACF,kEAAkE;YAClE,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,mFAAmF;YACnF,+BAA+B;QACjC,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;KAChC;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EACF,sEAAsE;YACtE,yEAAyE;YACzE,sEAAsE;YACtE,sEAAsE;YACtE,iEAAiE;QACnE,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;KAC3B;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,IAAI,EACF,sEAAsE;YACtE,wEAAwE;YACxE,sEAAsE;YACtE,qEAAqE;YACrE,uEAAuE;YACvE,gDAAgD;QAClD,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC7B;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EACF,kEAAkE;YAClE,sEAAsE;YACtE,qEAAqE;YACrE,mEAAmE;YACnE,uEAAuE;YACvE,uEAAuE;YACvE,wEAAwE;YACxE,mEAAmE;YACnE,uDAAuD;QACzD,QAAQ,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;KACpC;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,IAAI,EACF,oEAAoE;YACpE,uEAAuE;YACvE,sEAAsE;YACtE,oEAAoE;YACpE,oEAAoE;YACpE,qEAAqE;YACrE,gEAAgE;YAChE,qEAAqE;YACrE,mEAAmE;YACnE,4BAA4B;QAC9B,QAAQ,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;KACpC;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EACF,sEAAsE;YACtE,uEAAuE;YACvE,uEAAuE;YACvE,iEAAiE;YACjE,iEAAiE;YACjE,iEAAiE;YACjE,qEAAqE;YACrE,8BAA8B;QAChC,QAAQ,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;KACpC;CACF,CAAC"}
1
+ {"version":3,"file":"bitcoin-copilot.js","sourceRoot":"","sources":["../../src/knowledge/bitcoin-copilot.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD;QACE,EAAE,EAAE,mBAAmB;QACvB,IAAI,EACF,4EAA4E;YAC5E,yEAAyE;YACzE,0EAA0E;YAC1E,0EAA0E;QAC5E,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,IAAI,EACF,uEAAuE;YACvE,0EAA0E;YAC1E,6EAA6E;QAC/E,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EACF,wEAAwE;YACxE,2EAA2E;YAC3E,8EAA8E;QAChF,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EACF,0EAA0E;YAC1E,2EAA2E;YAC3E,4EAA4E;YAC5E,0CAA0C;QAC5C,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EACF,0EAA0E;YAC1E,yEAAyE;YACzE,4EAA4E;YAC5E,kCAAkC;QACpC,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;KAChC;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EACF,2EAA2E;YAC3E,4EAA4E;YAC5E,6EAA6E;YAC7E,iDAAiD;QACnD,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;KAChC;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EACF,sEAAsE;YACtE,wEAAwE;YACxE,gEAAgE;QAClE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC7B;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EACF,sEAAsE;YACtE,4EAA4E;YAC5E,6EAA6E;QAC/E,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC7B;IACD;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EACF,wEAAwE;YACxE,2EAA2E;YAC3E,gEAAgE;QAClE,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;KAC3B;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,IAAI,EACF,0EAA0E;YAC1E,0EAA0E;YAC1E,iFAAiF;QACnF,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;KAC3B;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EACF,qEAAqE;YACrE,0EAA0E;YAC1E,4DAA4D;QAC9D,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;KAC3B;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EACF,4EAA4E;YAC5E,wEAAwE;YACxE,6DAA6D;QAC/D,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;KAC/B;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EACF,yEAAyE;YACzE,4EAA4E;YAC5E,wCAAwC;QAC1C,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;KAC/B;IACD;QACE,EAAE,EAAE,KAAK;QACT,IAAI,EACF,uEAAuE;YACvE,2EAA2E;YAC3E,gDAAgD;QAClD,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EACF,4EAA4E;YAC5E,4EAA4E;YAC5E,wCAAwC;QAC1C,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;KAC5B;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EACF,0EAA0E;YAC1E,yEAAyE;YACzE,oEAAoE;QACtE,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;KAChC;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EACF,4EAA4E;YAC5E,0EAA0E;YAC1E,oEAAoE;QACtE,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;KAChC;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EACF,yEAAyE;YACzE,2EAA2E;YAC3E,mDAAmD;QACrD,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC7B;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EACF,0EAA0E;YAC1E,yEAAyE;YACzE,iDAAiD;QACnD,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC7B;IACD;QACE,EAAE,EAAE,KAAK;QACT,IAAI,EACF,0EAA0E;YAC1E,oEAAoE;YACpE,iEAAiE;QACnE,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;KAC/B;IACD;QACE,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EACF,wEAAwE;YACxE,mEAAmE;YACnE,sEAAsE;YACtE,sEAAsE;YACtE,wEAAwE;YACxE,sEAAsE;YACtE,wBAAwB;QAC1B,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,IAAI,EACF,uEAAuE;YACvE,yEAAyE;YACzE,qEAAqE;YACrE,oEAAoE;YACpE,wEAAwE;YACxE,wEAAwE;YACxE,sEAAsE;YACtE,kDAAkD;QACpD,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;KACjC;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,IAAI,EACF,wEAAwE;YACxE,uEAAuE;YACvE,wEAAwE;YACxE,uEAAuE;YACvE,kEAAkE;YAClE,uEAAuE;YACvE,yDAAyD;QAC3D,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;KAChC;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,IAAI,EACF,kEAAkE;YAClE,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,mFAAmF;YACnF,+BAA+B;QACjC,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;KAChC;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EACF,sEAAsE;YACtE,yEAAyE;YACzE,sEAAsE;YACtE,sEAAsE;YACtE,iEAAiE;QACnE,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;KAC3B;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,IAAI,EACF,sEAAsE;YACtE,wEAAwE;YACxE,sEAAsE;YACtE,qEAAqE;YACrE,uEAAuE;YACvE,gDAAgD;QAClD,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC7B;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EACF,kEAAkE;YAClE,sEAAsE;YACtE,qEAAqE;YACrE,mEAAmE;YACnE,uEAAuE;YACvE,uEAAuE;YACvE,wEAAwE;YACxE,mEAAmE;YACnE,uDAAuD;QACzD,QAAQ,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;KACpC;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,IAAI,EACF,oEAAoE;YACpE,uEAAuE;YACvE,sEAAsE;YACtE,oEAAoE;YACpE,oEAAoE;YACpE,qEAAqE;YACrE,gEAAgE;YAChE,qEAAqE;YACrE,mEAAmE;YACnE,4BAA4B;QAC9B,QAAQ,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;KACpC;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EACF,sEAAsE;YACtE,uEAAuE;YACvE,uEAAuE;YACvE,iEAAiE;YACjE,iEAAiE;YACjE,iEAAiE;YACjE,qEAAqE;YACrE,8BAA8B;QAChC,QAAQ,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;KACpC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,mEAAmE;IACnE,uCAAuC;IAEvC;QACE,EAAE,EAAE,6BAA6B;QACjC,IAAI,EACF,qEAAqE;YACrE,qEAAqE;YACrE,uDAAuD;YACvD,yEAAyE;YACzE,oEAAoE;YACpE,kEAAkE;YAClE,qCAAqC;YACrC,gEAAgE;YAChE,oEAAoE;YACpE,kEAAkE;YAClE,oEAAoE;YACpE,qEAAqE;YACrE,kEAAkE;QACpE,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;KAC9B;IAED;QACE,EAAE,EAAE,oBAAoB;QACxB,IAAI,EACF,uEAAuE;YACvE,sEAAsE;YACtE,+DAA+D;YAC/D,mEAAmE;YACnE,kEAAkE;YAClE,iEAAiE;YACjE,6DAA6D;YAC7D,oEAAoE;YACpE,sEAAsE;YACtE,kEAAkE;YAClE,0CAA0C;QAC5C,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;KAC9B;IAED;QACE,EAAE,EAAE,kBAAkB;QACtB,IAAI,EACF,gEAAgE;YAChE,kEAAkE;YAClE,kEAAkE;YAClE,gEAAgE;YAChE,kEAAkE;YAClE,iEAAiE;YACjE,iEAAiE;YACjE,4DAA4D;YAC5D,0DAA0D;QAC5D,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;KAC9B;IAED;QACE,EAAE,EAAE,kBAAkB;QACtB,IAAI,EACF,6DAA6D;YAC7D,4DAA4D;YAC5D,iEAAiE;YACjE,qDAAqD;YACrD,wDAAwD;YACxD,uDAAuD;YACvD,kEAAkE;YAClE,iEAAiE;YACjE,wDAAwD;YACxD,kDAAkD;YAClD,mEAAmE;YACnE,iEAAiE;YACjE,sBAAsB;QACxB,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;KAC9B;IAED;QACE,EAAE,EAAE,wBAAwB;QAC5B,IAAI,EACF,mEAAmE;YACnE,wBAAwB;YACxB,kEAAkE;YAClE,6BAA6B;YAC7B,oDAAoD;YACpD,0DAA0D;YAC1D,sDAAsD;YACtD,gEAAgE;YAChE,6DAA6D;YAC7D,+DAA+D;YAC/D,uCAAuC;QACzC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;KAC9B;CACF,CAAC"}
@@ -19,6 +19,21 @@ export interface TurnInput {
19
19
  onToken?: (token: string) => void;
20
20
  signal?: AbortSignal;
21
21
  }
22
+ /** Judge-auditable metrics for one provider inference request. */
23
+ export interface InferenceMetrics {
24
+ requestId?: string;
25
+ backendDevice?: 'cpu' | 'gpu';
26
+ promptTokens?: number;
27
+ completionTokens?: number;
28
+ totalTokens?: number;
29
+ /** Milliseconds from completion() start to the first generated delta. */
30
+ ttftMs?: number;
31
+ /** End-to-end completion duration measured by the host. */
32
+ durationMs: number;
33
+ tokensPerSecond?: number;
34
+ stopReason?: string;
35
+ status: 'completed' | 'cancelled' | 'truncated' | 'failed';
36
+ }
22
37
  export interface TurnOutput {
23
38
  /** Cleaned assistant content for display. */
24
39
  text: string;
@@ -33,6 +48,8 @@ export interface TurnOutput {
33
48
  toolCalls: ToolCall[];
34
49
  /** Provider request id, for cancellation. */
35
50
  requestId?: string;
51
+ /** Optional local-inference receipt. Hosts may persist this as JSONL evidence. */
52
+ inference?: InferenceMetrics;
36
53
  }
37
54
  export interface LLMProvider {
38
55
  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,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;CACpB;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,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 +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,EAAE,WAAW,EAAE,SAAS,EAAc,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,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,CAuF5E"}
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;AAGhD,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,CA+G5E"}
@@ -62,11 +62,34 @@ export function createQvacProvider(options) {
62
62
  // A turn cut off mid-reasoning has no visible answer — return a short note
63
63
  // instead of an empty bubble so the agentic loop ends cleanly.
64
64
  const text = result.text || (result.thinkingBudgetExceeded ? THINKING_BUDGET_FALLBACK : result.text);
65
+ const totalTokens = result.stats?.totalTokens;
66
+ const promptTokens = result.stats?.promptTokens;
67
+ const inference = {
68
+ requestId: result.requestId,
69
+ durationMs: result.timing.durationMs,
70
+ status: result.stopReason === 'cancelled'
71
+ ? 'cancelled'
72
+ : result.truncated
73
+ ? 'truncated'
74
+ : 'completed',
75
+ ...(result.stats?.backendDevice ? { backendDevice: result.stats.backendDevice } : {}),
76
+ ...(typeof promptTokens === 'number' ? { promptTokens } : {}),
77
+ ...(typeof totalTokens === 'number' ? { totalTokens } : {}),
78
+ ...(typeof totalTokens === 'number' && typeof promptTokens === 'number'
79
+ ? { completionTokens: Math.max(0, totalTokens - promptTokens) }
80
+ : {}),
81
+ ...(typeof result.timing.ttftMs === 'number' ? { ttftMs: result.timing.ttftMs } : {}),
82
+ ...(typeof result.stats?.tokensPerSecond === 'number'
83
+ ? { tokensPerSecond: result.stats.tokensPerSecond }
84
+ : {}),
85
+ ...(result.stopReason ? { stopReason: result.stopReason } : {}),
86
+ };
65
87
  return {
66
88
  text,
67
89
  rawContent: result.rawContent,
68
90
  toolCalls: result.toolCalls,
69
91
  requestId: result.requestId,
92
+ inference,
70
93
  };
71
94
  },
72
95
  async cancel(requestId) {
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/qvac/provider.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA8CzC,8EAA8E;AAC9E,MAAM,wBAAwB,GAC5B,0EAA0E;IAC1E,sCAAsC,CAAC;AAEzC,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,OAAO;QACL,IAAI,EAAE,MAAM;QAEZ,KAAK,CAAC,OAAO,CAAC,KAAoB;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAEvD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM;gBAC1B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAChE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;YAEnB,uEAAuE;YACvE,sEAAsE;YACtE,uEAAuE;YACvE,+BAA+B;YAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;gBAC9B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;iBACzB,CAAC,CAAC;gBACL,CAAC,CAAC,SAAS,CAAC;YAEd,+DAA+D;YAC/D,wEAAwE;YACxE,2EAA2E;YAC3E,wEAAwE;YACxE,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,kBAAkB,CAAC;YAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;YAC5D,MAAM,gBAAgB,GACpB,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS;gBACzC,CAAC,CAAC;oBACE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9C;gBACH,CAAC,CAAC,SAAS,CAAC;YAEhB,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;gBAC7B,OAAO;gBACP,OAAO;gBACP,MAAM,EAAE,IAAI;gBACZ,wEAAwE;gBACxE,+BAA+B;gBAC/B,eAAe,EAAE,IAAI;gBACrB,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACc,CAAC,CAAC;YAE7C,MAAM,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,IAAI,OAAO,CAAC,iBAAiB,CAAC;YAC/E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE;gBACnC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU;gBAClD,iBAAiB;gBACjB,yEAAyE;gBACzE,0EAA0E;gBAC1E,wBAAwB,EAAE,GAAG,EAAE;oBAC7B,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACpE,CAAC;aACF,CAAC,CAAC;YAEH,2EAA2E;YAC3E,IAAI,MAAM,CAAC,KAAK;gBAAE,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAErE,2EAA2E;YAC3E,+DAA+D;YAC/D,MAAM,IAAI,GACR,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE1F,OAAO;gBACL,IAAI;gBACJ,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,SAAiB;YAC5B,2EAA2E;YAC3E,oEAAoE;YACpE,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/qvac/provider.ts"],"names":[],"mappings":"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"}
@@ -38,11 +38,17 @@ export interface StreamHandlers {
38
38
  * stops forwarding deltas after this.
39
39
  */
40
40
  onThinkingBudgetExceeded?: () => void;
41
+ /** Injectable monotonic-ish wall clock for deterministic timing tests. */
42
+ now?: () => number;
41
43
  }
42
44
  export interface ConsumedTurn extends ParsedTurn {
43
45
  requestId: string;
44
46
  /** True when the run was stopped because `<think>` hit `maxThinkingTokens`. */
45
47
  thinkingBudgetExceeded?: boolean;
48
+ timing: {
49
+ ttftMs?: number;
50
+ durationMs: number;
51
+ };
46
52
  }
47
53
  /**
48
54
  * Stream a run to completion. `contentDelta` → onToken (and the streamed
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/qvac/stream.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAe,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9E,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,4DAA4D;IAC5D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAOD;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,iBAAiB,EACtB,QAAQ,GAAE,cAAmB,GAC5B,OAAO,CAAC,YAAY,CAAC,CA4BvB"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/qvac/stream.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAe,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9E,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,4DAA4D;IAC5D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,0EAA0E;IAC1E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,MAAM,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAOD;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,iBAAiB,EACtB,QAAQ,GAAE,cAAmB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAsCvB"}
@@ -17,15 +17,22 @@ function approxTokens(chars) {
17
17
  * run's `requestId` (for cancellation bookkeeping by the caller).
18
18
  */
19
19
  export async function consumeRun(run, handlers = {}) {
20
+ const now = handlers.now ?? Date.now;
21
+ const startedAt = now();
22
+ let firstTokenAt;
20
23
  let streamed = '';
21
24
  let thinkingChars = 0;
22
25
  let budgetExceeded = false;
23
26
  for await (const event of run.events) {
24
27
  if (event.type === 'contentDelta' && typeof event.text === 'string') {
28
+ if (firstTokenAt === undefined && event.text.length > 0)
29
+ firstTokenAt = now();
25
30
  streamed += event.text;
26
31
  handlers.onToken?.(event.text);
27
32
  }
28
33
  else if (event.type === 'thinkingDelta' && typeof event.text === 'string') {
34
+ if (firstTokenAt === undefined && event.text.length > 0)
35
+ firstTokenAt = now();
29
36
  handlers.onThinking?.(event.text);
30
37
  if (handlers.maxThinkingTokens !== undefined && !budgetExceeded) {
31
38
  thinkingChars += event.text.length;
@@ -40,10 +47,15 @@ export async function consumeRun(run, handlers = {}) {
40
47
  }
41
48
  }
42
49
  const final = await run.final;
50
+ const finishedAt = now();
43
51
  return {
44
52
  ...finalToTurn(final, streamed),
45
53
  requestId: run.requestId,
46
54
  thinkingBudgetExceeded: budgetExceeded,
55
+ timing: {
56
+ ...(firstTokenAt === undefined ? {} : { ttftMs: Math.max(0, firstTokenAt - startedAt) }),
57
+ durationMs: Math.max(0, finishedAt - startedAt),
58
+ },
47
59
  };
48
60
  }
49
61
  //# sourceMappingURL=stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/qvac/stream.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,WAAW,EAAuC,MAAM,YAAY,CAAC;AA2C9E,sFAAsF;AACtF,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAsB,EACtB,WAA2B,EAAE;IAE7B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpE,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC;YACvB,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5E,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;gBAChE,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;gBACnC,IAAI,YAAY,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;oBAC9D,cAAc,GAAG,IAAI,CAAC;oBACtB,QAAQ,CAAC,wBAAwB,EAAE,EAAE,CAAC;oBACtC,iEAAiE;oBACjE,8DAA8D;oBAC9D,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC;IAC9B,OAAO;QACL,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC/B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,sBAAsB,EAAE,cAAc;KACvC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/qvac/stream.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,WAAW,EAAuC,MAAM,YAAY,CAAC;AAiD9E,sFAAsF;AACtF,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAsB,EACtB,WAA2B,EAAE;IAE7B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACrC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;IACxB,IAAI,YAAgC,CAAC;IACrC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpE,IAAI,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,YAAY,GAAG,GAAG,EAAE,CAAC;YAC9E,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC;YACvB,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5E,IAAI,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,YAAY,GAAG,GAAG,EAAE,CAAC;YAC9E,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;gBAChE,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;gBACnC,IAAI,YAAY,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;oBAC9D,cAAc,GAAG,IAAI,CAAC;oBACtB,QAAQ,CAAC,wBAAwB,EAAE,EAAE,CAAC;oBACtC,iEAAiE;oBACjE,8DAA8D;oBAC9D,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC;IAC9B,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC;IACzB,OAAO;QACL,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC/B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,sBAAsB,EAAE,cAAc;QACtC,MAAM,EAAE;YACN,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC,EAAE,CAAC;YACxF,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;SAChD;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Built-in "swap on Flashnet" recipe — Spark-native AMM, deterministic chain.
3
+ *
4
+ * A Flashnet swap on a small model was fragile when left to the agentic loop:
5
+ * the model had to discover the pool, get the asset addresses right, pick the
6
+ * correct simulate DIRECTION (asset_in = what the user spends), compute
7
+ * `min_amount_out` from slippage tolerance, and then thread all of that into
8
+ * execute. With Qwen3-1.7B that often produced an inverted simulate (token →
9
+ * BTC instead of BTC → token), and on the follow-up "yes" the skill context
10
+ * was lost and the model called `flashnet_simulate_swap({})` with no args.
11
+ *
12
+ * "swap 10000 sats with usdb"
13
+ * ↓ 1 model inference (slot extraction: from/to/amount/amount_side)
14
+ * flashnet_list_pools ← discover the right pool deterministically
15
+ * ↓
16
+ * flashnet_simulate_swap ← quote (read-only)
17
+ * ↓ [ONE confirmation gate — shows the real quote in plain English]
18
+ * flashnet_execute_swap ← settle (the spend)
19
+ *
20
+ * The whole chain runs with 1 LLM inference total (slot extraction), same
21
+ * pattern as `kaleidoswapAtomicRecipe`. The host's `flashnet_list_pools` is
22
+ * side-agnostic and labels symbols, so picking the right pool from the
23
+ * extracted asset pair is cheap and reliable.
24
+ *
25
+ * Slippage: default `max_slippage_bps = 50` (0.5%). The runner computes
26
+ * `min_amount_out = floor(amount_out × (1 − bps/10000))` from the simulate
27
+ * result before execute — never trusts the simulated value as-is.
28
+ *
29
+ * Asset taxonomy guard: matches ONLY when a Flashnet cue is present
30
+ * (flashnet/usdb/spark), so RGB swaps (USDT/XAUT) still go to the
31
+ * KaleidoSwap atomic recipe. The two recipes are disjoint.
32
+ */
33
+ import type { Recipe } from './types.js';
34
+ export declare const flashnetSwapRecipe: Recipe;
35
+ //# sourceMappingURL=flashnet-swap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashnet-swap.d.ts","sourceRoot":"","sources":["../../src/recipe/flashnet-swap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,YAAY,CAAC;AA2HxD,eAAO,MAAM,kBAAkB,EAAE,MA8FhC,CAAC"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Built-in "swap on Flashnet" recipe — Spark-native AMM, deterministic chain.
3
+ *
4
+ * A Flashnet swap on a small model was fragile when left to the agentic loop:
5
+ * the model had to discover the pool, get the asset addresses right, pick the
6
+ * correct simulate DIRECTION (asset_in = what the user spends), compute
7
+ * `min_amount_out` from slippage tolerance, and then thread all of that into
8
+ * execute. With Qwen3-1.7B that often produced an inverted simulate (token →
9
+ * BTC instead of BTC → token), and on the follow-up "yes" the skill context
10
+ * was lost and the model called `flashnet_simulate_swap({})` with no args.
11
+ *
12
+ * "swap 10000 sats with usdb"
13
+ * ↓ 1 model inference (slot extraction: from/to/amount/amount_side)
14
+ * flashnet_list_pools ← discover the right pool deterministically
15
+ * ↓
16
+ * flashnet_simulate_swap ← quote (read-only)
17
+ * ↓ [ONE confirmation gate — shows the real quote in plain English]
18
+ * flashnet_execute_swap ← settle (the spend)
19
+ *
20
+ * The whole chain runs with 1 LLM inference total (slot extraction), same
21
+ * pattern as `kaleidoswapAtomicRecipe`. The host's `flashnet_list_pools` is
22
+ * side-agnostic and labels symbols, so picking the right pool from the
23
+ * extracted asset pair is cheap and reliable.
24
+ *
25
+ * Slippage: default `max_slippage_bps = 50` (0.5%). The runner computes
26
+ * `min_amount_out = floor(amount_out × (1 − bps/10000))` from the simulate
27
+ * result before execute — never trusts the simulated value as-is.
28
+ *
29
+ * Asset taxonomy guard: matches ONLY when a Flashnet cue is present
30
+ * (flashnet/usdb/spark), so RGB swaps (USDT/XAUT) still go to the
31
+ * KaleidoSwap atomic recipe. The two recipes are disjoint.
32
+ */
33
+ import { extractSwap } from './swap.js';
34
+ // Flashnet cue — same set the kaleidoswap-atomic recipe defers ON, so the
35
+ // two are disjoint by construction.
36
+ const FLASHNET_CUE = /\b(flashnet|usdb|spark)\b/i;
37
+ // Spark-token tickers that imply a Flashnet swap even without "flashnet" in
38
+ // the text. Keep this list small and Spark-specific — never includes RGB
39
+ // assets (USDT, XAUT, gold).
40
+ const SPARK_TOKEN = /\b(usdb)\b/i;
41
+ // Generic swap-intent verbs that pair with an asset name. "buy/sell/get" join
42
+ // the swap intent only when an ASSET is named (so "buy a gift card" doesn't
43
+ // route here — that's bitrefill territory).
44
+ const SWAP_VERB = /\b(swap|exchange|convert|trade)\b/i;
45
+ const BUY_VERB = /\b(buy|sell|get|purchase|acquire)\b/i;
46
+ const ASSET = /\b(btc|bitcoin|sats?|usdb)\b/i;
47
+ const NON_SWAP = /\b(gift\s?card|top-?up|esim|voucher|invoice|address|channel|inbound|liquidity|lsps?\b)\b/i;
48
+ const FLASHNET_INTENT = (t) => {
49
+ // Educational questions go to the agentic skill (which can call list_pools
50
+ // for an honest read).
51
+ if (/\b(why|how|what|when|explain|tell\s+me|do\s+I\s+need|should\s+I|can\s+I)\b/i.test(t))
52
+ return false;
53
+ // Must have a Flashnet/Spark cue OR name a Spark-native token like USDB,
54
+ // so this never grabs an RGB swap (those go to kaleidoswap-atomic).
55
+ if (!FLASHNET_CUE.test(t) && !SPARK_TOKEN.test(t))
56
+ return false;
57
+ if (NON_SWAP.test(t))
58
+ return false;
59
+ if (SWAP_VERB.test(t))
60
+ return true;
61
+ if (BUY_VERB.test(t) && ASSET.test(t))
62
+ return true;
63
+ return false;
64
+ };
65
+ /**
66
+ * Resolve the asset address pair from a pool row + the user's requested
67
+ * (from_asset, to_asset) symbols. The pool stores ONE order (typically the
68
+ * non-BTC token on side A, BTC on side B), but the user can phrase the swap
69
+ * either direction.
70
+ *
71
+ * Strategy — deduce the unknown side from the known one:
72
+ * 1. Match each leg to a pool side by symbol or by the BTC-ticker family.
73
+ * 2. If one leg resolves to a side, the other leg MUST be the opposite side
74
+ * (a pool only has two assets). This is the case that prevented an
75
+ * earlier "asset_in == asset_out" bug on regtest, where the non-BTC
76
+ * side carries no symbol.
77
+ * 3. Only as a last resort fall back to the "BTC on side B, token on side
78
+ * A" default — true for almost every regtest pool we've seen.
79
+ */
80
+ function isBtcTicker(s) {
81
+ return s === 'BTC' || s === 'SATS' || s === 'BITCOIN';
82
+ }
83
+ function resolveLegAddresses(pool, from, to) {
84
+ const f = (from ?? '').toUpperCase();
85
+ const t = (to ?? '').toUpperCase();
86
+ const aSym = (pool.asset_a_symbol ?? '').toUpperCase();
87
+ const bSym = (pool.asset_b_symbol ?? '').toUpperCase();
88
+ // Which side (if any) does each leg map to?
89
+ const sideOf = (sym) => {
90
+ if (sym === aSym && aSym)
91
+ return 'a';
92
+ if (sym === bSym && bSym)
93
+ return 'b';
94
+ return undefined;
95
+ };
96
+ let fSide = sideOf(f);
97
+ let tSide = sideOf(t);
98
+ // 2. Deduce the unknown side from the known one.
99
+ if (!fSide && tSide)
100
+ fSide = tSide === 'a' ? 'b' : 'a';
101
+ if (!tSide && fSide)
102
+ tSide = fSide === 'a' ? 'b' : 'a';
103
+ // 3. Last-resort default — only when NEITHER side resolved. BTC on side B
104
+ // is the canonical layout for the Spark/Flashnet pools we've observed.
105
+ if (!fSide && !tSide) {
106
+ fSide = isBtcTicker(f) ? 'b' : 'a';
107
+ tSide = fSide === 'a' ? 'b' : 'a';
108
+ }
109
+ const addr = (side) => (side === 'a' ? pool.asset_a_address : pool.asset_b_address);
110
+ return { fromAddr: addr(fSide), toAddr: addr(tSide) };
111
+ }
112
+ /** Compute min_amount_out = floor(amount_out × (1 − bps/10000)). String-safe. */
113
+ function computeMinAmountOut(amountOut, slippageBps) {
114
+ if (!amountOut)
115
+ return '0';
116
+ try {
117
+ const out = BigInt(String(amountOut).replace(/[^\d]/g, ''));
118
+ const num = BigInt(10_000 - Math.max(0, Math.min(5_000, slippageBps)));
119
+ const min = (out * num) / 10000n;
120
+ return min.toString();
121
+ }
122
+ catch {
123
+ return '0';
124
+ }
125
+ }
126
+ const DEFAULT_SLIPPAGE_BPS = 50;
127
+ export const flashnetSwapRecipe = {
128
+ name: 'flashnet-swap',
129
+ description: "Swap on Flashnet (Spark-native AMM): list pool → simulate → confirm once → execute. The user's Spark wallet IS the swap account.",
130
+ match: (t) => FLASHNET_INTENT(t),
131
+ triggers: ['flashnet', 'usdb', 'swap', 'exchange', 'convert', 'trade'],
132
+ slots: [
133
+ { name: 'from_asset', type: 'string', description: 'Asset the user SPENDS (BTC / USDB). "swap 10000 sats with usdb" → from_asset=BTC. "sell 1 usdb" → from_asset=USDB.', required: true },
134
+ { name: 'to_asset', type: 'string', description: 'Asset the user GETS (BTC / USDB). "swap 10000 sats with usdb" → to_asset=USDB. "buy USDB with sats" → to_asset=USDB.', required: true },
135
+ { name: 'amount', type: 'number', description: 'The numeric amount the user named. e.g. "swap 10000 sats with usdb" → amount=10000. Always in the asset on `amount_side`.' },
136
+ { name: 'amount_side', type: 'string', description: "Which leg the amount is denominated in: 'from' (the spent asset) or 'to' (the received asset). Default 'from'. 'buy 10 usdb with sats' → 'to'." },
137
+ ],
138
+ // extractSwap is the same regex extractor the KaleidoSwap atomic recipe
139
+ // uses; it returns {from_asset, to_asset, amount, amount_side?}. With
140
+ // forceModelExtract=true the runner ignores the det result and always asks
141
+ // the model — but the det extraction still feeds the Funnel's pre-filter so
142
+ // bare "buy/sell" with a Spark asset routes here even before the model runs.
143
+ extract: extractSwap,
144
+ forceModelExtract: true,
145
+ confident: (s) => !!s.from_asset && !!s.to_asset && !!s.amount,
146
+ steps: [
147
+ // 1. Discover the pool. Side-agnostic on the host side; one row is enough.
148
+ {
149
+ tool: 'flashnet_list_pools',
150
+ as: 'pools',
151
+ args: (ctx) => ({
152
+ asset_a: String(ctx.slots.from_asset ?? '').toUpperCase(),
153
+ asset_b: String(ctx.slots.to_asset ?? '').toUpperCase(),
154
+ sort: 'TVL_DESC',
155
+ limit: 5,
156
+ }),
157
+ },
158
+ // 2. Quote the swap. Direction is LITERAL: asset_in = what the user
159
+ // spends (`from_asset`), asset_out = what they get (`to_asset`). The
160
+ // runner — not the model — assembles this, so the inverted-direction
161
+ // bug is impossible by construction.
162
+ {
163
+ tool: 'flashnet_simulate_swap',
164
+ as: 'sim',
165
+ args: (ctx) => {
166
+ const r = ctx.results.pools;
167
+ const pool = r?.pools?.[0];
168
+ if (!pool)
169
+ throw new Error(`No Flashnet pool found for ${ctx.slots.from_asset} ↔ ${ctx.slots.to_asset}.`);
170
+ const { fromAddr, toAddr } = resolveLegAddresses(pool, String(ctx.slots.from_asset ?? ''), String(ctx.slots.to_asset ?? ''));
171
+ return {
172
+ pool_id: pool.pool_id,
173
+ asset_in_address: fromAddr,
174
+ asset_out_address: toAddr,
175
+ amount_in: String(ctx.slots.amount ?? ''),
176
+ };
177
+ },
178
+ },
179
+ ],
180
+ // 3. Settle. Confirmation-gated at the recipe level (see runner.ts).
181
+ // min_amount_out is computed here — never the raw simulated value — so a
182
+ // moving pool can't fill at a worse price than `slippage_bps` allows.
183
+ final: {
184
+ tool: 'flashnet_execute_swap',
185
+ as: 'exec',
186
+ args: (ctx) => {
187
+ const r = ctx.results.pools;
188
+ const pool = r?.pools?.[0];
189
+ const sim = ctx.results.sim;
190
+ if (!pool || !sim)
191
+ throw new Error('Flashnet swap: missing pool or simulation result.');
192
+ const { fromAddr, toAddr } = resolveLegAddresses(pool, String(ctx.slots.from_asset ?? ''), String(ctx.slots.to_asset ?? ''));
193
+ return {
194
+ pool_id: pool.pool_id,
195
+ asset_in_address: fromAddr,
196
+ asset_out_address: toAddr,
197
+ amount_in: String(ctx.slots.amount ?? ''),
198
+ min_amount_out: computeMinAmountOut(sim.amount_out, DEFAULT_SLIPPAGE_BPS),
199
+ max_slippage_bps: DEFAULT_SLIPPAGE_BPS,
200
+ };
201
+ },
202
+ },
203
+ // ONE confirmation, fired after simulate / before execute, with real numbers.
204
+ confirm: (ctx) => {
205
+ const sim = ctx.results.sim;
206
+ const from = fmtAmount(ctx.slots.amount, String(ctx.slots.from_asset ?? ''));
207
+ const to = fmtAmount(sim?.amount_out, String(ctx.slots.to_asset ?? ''));
208
+ const impact = sim?.price_impact_pct ? ` · ${sim.price_impact_pct} price impact` : '';
209
+ const warn = sim?.warning ? ` · ${sim.warning}` : '';
210
+ return `Swap ${from} → ~${to} on Flashnet (slippage cap ${DEFAULT_SLIPPAGE_BPS / 100}%)${impact}${warn}. Proceed?`;
211
+ },
212
+ summary: (ctx) => {
213
+ const sim = ctx.results.sim;
214
+ const exec = ctx.results.exec;
215
+ const from = fmtAmount(ctx.slots.amount, String(ctx.slots.from_asset ?? ''));
216
+ const got = fmtAmount(exec?.amount_out ?? sim?.amount_out, String(ctx.slots.to_asset ?? ''));
217
+ if (exec?.accepted === false) {
218
+ return `Flashnet swap rejected: ${exec?.error ?? 'unknown error'}.`;
219
+ }
220
+ return `Flashnet swap submitted: ${from} → ${got}. request_id=${exec?.request_id ?? '?'}.`;
221
+ },
222
+ };
223
+ /**
224
+ * Format an amount + asset for user display. BTC is rendered as "X,XXX sats"
225
+ * (BTC is the asset, sats is the unit; the on-the-wire amount is already in
226
+ * sats so no conversion is needed). Anything else is rendered as
227
+ * "N TICKER" with thousand-separators.
228
+ */
229
+ function fmtAmount(amount, asset) {
230
+ const t = (asset ?? '').toUpperCase();
231
+ const n = Number(amount);
232
+ if (!Number.isFinite(n))
233
+ return `${amount ?? '?'} ${t}`;
234
+ const sep = n.toLocaleString('en-US');
235
+ if (t === 'BTC' || t === 'SATS' || t === 'BITCOIN')
236
+ return `${sep} sats`;
237
+ return `${sep} ${t}`;
238
+ }
239
+ //# sourceMappingURL=flashnet-swap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashnet-swap.js","sourceRoot":"","sources":["../../src/recipe/flashnet-swap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,0EAA0E;AAC1E,oCAAoC;AACpC,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAClD,4EAA4E;AAC5E,yEAAyE;AACzE,6BAA6B;AAC7B,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,8EAA8E;AAC9E,4EAA4E;AAC5E,4CAA4C;AAC5C,MAAM,SAAS,GAAG,oCAAoC,CAAC;AACvD,MAAM,QAAQ,GAAG,sCAAsC,CAAC;AACxD,MAAM,KAAK,GAAG,+BAA+B,CAAC;AAC9C,MAAM,QAAQ,GAAG,2FAA2F,CAAC;AAE7G,MAAM,eAAe,GAAG,CAAC,CAAS,EAAE,EAAE;IACpC,2EAA2E;IAC3E,uBAAuB;IACvB,IAAI,6EAA6E,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACxG,yEAAyE;IACzE,oEAAoE;IACpE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AA6BF;;;;;;;;;;;;;;GAcG;AACH,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS,CAAC;AACxD,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAa,EAAE,IAAY,EAAE,EAAU;IAClE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAEvD,4CAA4C;IAC5C,MAAM,MAAM,GAAG,CAAC,GAAW,EAAyB,EAAE;QACpD,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI;YAAE,OAAO,GAAG,CAAC;QACrC,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI;YAAE,OAAO,GAAG,CAAC;QACrC,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAEtB,iDAAiD;IACjD,IAAI,CAAC,KAAK,IAAI,KAAK;QAAE,KAAK,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACvD,IAAI,CAAC,KAAK,IAAI,KAAK;QAAE,KAAK,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAEvD,0EAA0E;IAC1E,0EAA0E;IAC1E,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACnC,KAAK,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACpC,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,IAAe,EAAU,EAAE,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACvG,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAM,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,iFAAiF;AACjF,SAAS,mBAAmB,CAAC,SAA6B,EAAE,WAAmB;IAC7E,IAAI,CAAC,SAAS;QAAE,OAAO,GAAG,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,MAAO,CAAC;QAClC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,MAAM,CAAC,MAAM,kBAAkB,GAAW;IACxC,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,kIAAkI;IACpI,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAChC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC;IACtE,KAAK,EAAE;QACL,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oHAAoH,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzL,EAAE,IAAI,EAAE,UAAU,EAAI,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sHAAsH,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC3L,EAAE,IAAI,EAAE,QAAQ,EAAM,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2HAA2H,EAAE;QAChL,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gJAAgJ,EAAE;KACvM;IACD,wEAAwE;IACxE,sEAAsE;IACtE,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,OAAO,EAAE,WAAW;IACpB,iBAAiB,EAAE,IAAI;IACvB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;IAC9D,KAAK,EAAE;QACL,2EAA2E;QAC3E;YACE,IAAI,EAAE,qBAAqB;YAC3B,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACd,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;gBACzD,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;gBACvD,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,CAAC;aACT,CAAC;SACH;QACD,oEAAoE;QACpE,wEAAwE;QACxE,wEAAwE;QACxE,wCAAwC;QACxC;YACE,IAAI,EAAE,wBAAwB;YAC9B,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBACZ,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAoC,CAAC;gBAC3D,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,CAAC,KAAK,CAAC,UAAU,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAC1G,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC7H,OAAO;oBACL,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,gBAAgB,EAAE,QAAQ;oBAC1B,iBAAiB,EAAE,MAAM;oBACzB,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;iBAC1C,CAAC;YACJ,CAAC;SACF;KACF;IACD,qEAAqE;IACrE,4EAA4E;IAC5E,yEAAyE;IACzE,KAAK,EAAE;QACL,IAAI,EAAE,uBAAuB;QAC7B,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;YACZ,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAoC,CAAC;YAC3D,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAiC,CAAC;YAC1D,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACxF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7H,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,gBAAgB,EAAE,QAAQ;gBAC1B,iBAAiB,EAAE,MAAM;gBACzB,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;gBACzC,cAAc,EAAE,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,oBAAoB,CAAC;gBACzE,gBAAgB,EAAE,oBAAoB;aACvC,CAAC;QACJ,CAAC;KACF;IACD,8EAA8E;IAC9E,OAAO,EAAE,CAAC,GAAkB,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAiC,CAAC;QAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,gBAAgB,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,MAAM,IAAI,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,QAAQ,IAAI,OAAO,EAAE,8BAA8B,oBAAoB,GAAG,GAAG,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC;IACrH,CAAC;IACD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAiC,CAAC;QAC1D,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAiC,CAAC;QAC3D,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,IAAI,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7F,IAAI,IAAI,EAAE,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO,2BAA4B,IAAY,EAAE,KAAK,IAAI,eAAe,GAAG,CAAC;QAC/E,CAAC;QACD,OAAO,4BAA4B,IAAI,MAAM,GAAG,gBAAgB,IAAI,EAAE,UAAU,IAAI,GAAG,GAAG,CAAC;IAC7F,CAAC;CACF,CAAC;AAEF;;;;;GAKG;AACH,SAAS,SAAS,CAAC,MAAe,EAAE,KAAa;IAC/C,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;IACxD,MAAM,GAAG,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,GAAG,GAAG,OAAO,CAAC;IACzE,OAAO,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;AACvB,CAAC"}