@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
package/README.md CHANGED
@@ -26,7 +26,8 @@ npm i @kaleidorg/mind @qvac/sdk
26
26
  ```
27
27
 
28
28
  You need `@qvac/sdk` only to run QVAC models. The engine accepts any
29
- `LLMProvider`, and `@kaleidorg/mind/testing` includes a scripted provider that
29
+ `LLMProvider`: `@kaleidorg/mind/openai` talks to any OpenAI-compatible server
30
+ (see below), and `@kaleidorg/mind/testing` includes a scripted provider that
30
31
  needs no model. To connect MCP servers, also install
31
32
  `@modelcontextprotocol/sdk`.
32
33
 
@@ -35,6 +36,27 @@ needs no model. To connect MCP servers, also install
35
36
  | 0.19 – 0.21 | Supported (tested with 0.21.0). There is no P2P delegated inference: QVAC removed `startQVACProvider` / `loadModel({ delegate })` in 0.19. |
36
37
  | 0.13.1 – 0.18 | Supported, including P2P delegation (`buildDelegateConfig`, `allowListFirewall`). |
37
38
 
39
+ The Qwen3.5 model constants used below (`QWEN3_5_*_MULTIMODAL_Q4_K_M`) exist in
40
+ every supported `@qvac/sdk` version (0.13.1+).
41
+
42
+ ## Models
43
+
44
+ We recommend Qwen3.5. Qwen3 (0.6B–4B) and Hermes 3 kept mangling the arguments of
45
+ multi-field wallet calls such as `rln_issue_asset`, so they are no longer in the
46
+ catalog; any GGUF still loads by path or Hugging Face URL.
47
+
48
+ | Model | `@qvac/sdk` constant | Download | RAM | Use |
49
+ |---|---|---|---|---|
50
+ | Qwen3.5 0.8B | `QWEN3_5_0_8B_MULTIMODAL_Q4_K_M` | 0.53 GB | ~1.5 GB | Smoke tests only; loops on wallet actions |
51
+ | Qwen3.5 2B | `QWEN3_5_2B_MULTIMODAL_Q4_K_M` | 1.3 GB | ~3 GB | **Default.** All 7 signet RGB wallet tasks passed, 45–150 s per question on an M4 |
52
+ | Qwen3.5 4B | `QWEN3_5_4B_MULTIMODAL_Q4_K_M` | 2.7 GB | ~5 GB | Same correctness, ~2× slower (105–330 s) |
53
+ | Qwen3.5 9B | `QWEN3_5_9B_MULTIMODAL_Q4_K_M` | 5.7 GB | ~9 GB | 16 GB machines; slow for chat (180–690 s) |
54
+ | Qwen3.6 35B-A3B (MoE) | `QWEN3_6_35B_A3B_MULTIMODAL_Q4_K_M` | 22 GB | ~26 GB | 32 GB+ machines |
55
+
56
+ The same list is exported as data from `@kaleidorg/mind/qvac` (`QWEN35_MODELS`,
57
+ `DEFAULT_MODEL_ID`, `DEFAULT_QVAC_MODEL`, `DEFAULT_SMALL_DEVICE_QVAC_MODEL`).
58
+ Only the text weights are loaded; the vision projector is not needed.
59
+
38
60
  ## Quickstart (5 minutes)
39
61
 
40
62
  This example loads a small GGUF model through QVAC, registers one tool and one
@@ -42,14 +64,13 @@ skill, and runs one turn.
42
64
 
43
65
  ```ts
44
66
  // quickstart.ts — run with: npx tsx quickstart.ts
45
- import { completion, cancel, loadModel, unloadModel, close, QWEN3_1_7B_INST_Q4 } from '@qvac/sdk';
67
+ import { completion, cancel, loadModel, unloadModel, close, QWEN3_5_2B_MULTIMODAL_Q4_K_M } from '@qvac/sdk';
46
68
  import { Engine, InProcessToolSource, SkillRegistry, ToolRegistry } from '@kaleidorg/mind';
47
69
  import { createQvacProvider } from '@kaleidorg/mind/qvac';
48
70
 
49
- // 1. Model: Qwen3 1.7B Q4 (~1 GB, cached after the first download).
50
- // QWEN3_600M_INST_Q4 (~380 MB) also works but is weaker at tool calls.
71
+ // 1. Model: Qwen3.5 2B Q4 (~1.3 GB, cached after the first download).
51
72
  const modelId = await loadModel({
52
- modelSrc: QWEN3_1_7B_INST_Q4,
73
+ modelSrc: QWEN3_5_2B_MULTIMODAL_Q4_K_M,
53
74
  modelConfig: { ctx_size: 4096, tools: true }, // `tools: true` turns on tool calling
54
75
  });
55
76
  const provider = createQvacProvider({ completion, cancel, getModelId: () => modelId, defaultTemperature: 0.2 });
@@ -81,8 +102,9 @@ Call get_btc_price, then answer in one sentence with the number.`);
81
102
 
82
103
  // 4. A turn.
83
104
  const question = 'What is bitcoin worth in EUR?';
84
- const { system, allowedTools } = skills.compose('You are a concise assistant.', skills.select(question));
85
105
  const engine = new Engine({ provider, tools });
106
+ // composeSkill picks a skill that can act with these tools, then composes its prompt.
107
+ const { system, allowedTools } = await engine.composeSkill(skills, question, 'You are a concise assistant.');
86
108
  const result = await engine.runAgentic(
87
109
  [{ role: 'system', content: system }, { role: 'user', content: question }],
88
110
  { allowedTools },
@@ -96,12 +118,37 @@ await close();
96
118
  A runnable copy (with a `--mock` mode) is in
97
119
  [`examples/node-minimal`](https://github.com/kaleidoswap/kaleido-mind/tree/main/examples/node-minimal).
98
120
 
121
+ ## Models you already serve
122
+
123
+ `createOpenAICompatibleProvider` runs the same engine on any server that speaks
124
+ the OpenAI Chat Completions API with tool calling: Ollama, LM Studio, llama.cpp
125
+ `llama-server`, vLLM, `qvac serve` or a hosted API. It has no dependencies
126
+ (it uses `fetch`).
127
+
128
+ ```ts
129
+ import { createOpenAICompatibleProvider } from '@kaleidorg/mind/openai';
130
+
131
+ const provider = createOpenAICompatibleProvider({
132
+ baseUrl: 'http://localhost:11434/v1', // Ollama
133
+ model: 'qwen3.5:2b',
134
+ apiKey: process.env.OPENAI_API_KEY, // optional; sent as a bearer token
135
+ defaultTemperature: 0.1,
136
+ defaultMaxTokens: 1536,
137
+ });
138
+ ```
139
+
140
+ It streams tokens, forwards `toolChoice` as `tool_choice`, reports arguments
141
+ that are not valid JSON as `toolErrors` (so the engine retries once), and
142
+ aborts the request on `signal`. Reasoning deltas (`reasoning_content`) go to
143
+ `onThinking`. Server-specific fields go in `extraBody`.
144
+
99
145
  ## Subpath exports
100
146
 
101
147
  | Import | What it gives you | Runtime |
102
148
  |---|---|---|
103
149
  | `@kaleidorg/mind` | `Engine`, `Funnel` (fast-path → recipe → agent), `ToolRegistry`, `InProcessToolSource`, `SkillRegistry`, wallet / KaleidoSwap / LSPS1 / Bitrefill / Flashnet contracts and binders, `confirmReadback`, recipes, memory, RAG, context budgeting, L402 and CLI tool sources | Any (RN-safe) |
104
150
  | `@kaleidorg/mind/qvac` | `createQvacProvider`, `toQvacTools`, `consumeRun`, voice (`createQvacVoice`, `runVoiceAssistant`), model configs, delegation helpers | Any; you inject the SDK functions |
151
+ | `@kaleidorg/mind/openai` | `createOpenAICompatibleProvider` for Ollama, LM Studio, llama.cpp, vLLM, hosted APIs | Any with `fetch` |
105
152
  | `@kaleidorg/mind/mcp` | `McpToolSource`: tools from an MCP server over stdio or streamable HTTP | Node |
106
153
  | `@kaleidorg/mind/skills` | `loadSkillsDir`, `loadSkillFromDir`, `packagedSkillsDir()` (the 14 bundled skills) | Node (fs) |
107
154
  | `@kaleidorg/mind/testing` | `MockWallet` (stateful fake wallet bound to the real contract), `scriptedProvider` | Any |
@@ -161,10 +208,15 @@ Never guess an address.
161
208
  ```ts
162
209
  import { loadSkillsDir, packagedSkillsDir } from '@kaleidorg/mind/skills';
163
210
  const skills = new SkillRegistry([...loadSkillsDir(packagedSkillsDir()), ...loadSkillsDir('./skills')]);
164
- const skill = skills.select(userText); // keyword selector by default
165
- const { system, allowedTools } = skills.compose(baseSystem, skill);
211
+ // Skips skills whose tools the engine's registry lacks (e.g. spark-wallet with
212
+ // no Spark tools), so the model never runs inside a skill it can't act in.
213
+ const { skill, system, allowedTools } = await engine.composeSkill(skills, userText, baseSystem);
166
214
  ```
167
215
 
216
+ `skills.select()` alone only scores keywords; prefer `engine.composeSkill()`
217
+ (or `selectAvailableSkill(skills, text, liveToolNames)`). The `Funnel` does this
218
+ for you.
219
+
168
220
  ## The wallet tool contract
169
221
 
170
222
  `WALLET_TOOLS` is the single source of truth for wallet tool names, schemas and
@@ -184,6 +236,42 @@ spend flags. Use `walletTools({ layers })` to select tools,
184
236
  deterministic sentence for your confirm sheet, e.g. *"Send 5 USDT to utxob:…ij90
185
237
  over RLN. Confirm?"*.
186
238
 
239
+ ### Agent guards
240
+
241
+ The engine and funnel check the model's tool use before anything reaches the
242
+ user:
243
+
244
+ - **Schema validation.** Arguments are checked against the tool's JSON Schema
245
+ (or Zod schema) before `onConfirm`: required fields, types, enums, ranges,
246
+ finite numbers. Invalid calls go back to the model as a tool error and the
247
+ user is never asked. `onConfirm` receives the validated arguments plus a
248
+ `summary` readback.
249
+ - **Repeated calls.** A second identical call (same name and arguments) is not
250
+ re-run; the model gets the earlier result and is told to answer. A third
251
+ forces a final answer with no tools.
252
+ - **Declines end the turn.** When the user declines every call in a turn, the
253
+ run ends with a fixed reply ("Cancelled — you declined: Create 5 RGB UTXOs
254
+ on-chain over RLN. Nothing was sent or changed.") and no further inference.
255
+ The tool result in history is the same for every tool:
256
+ `{ status: 'cancelled_by_user', declined_by: 'user', tool, message }`.
257
+ Turn it off with `endTurnOnDecline: false`.
258
+ - **No empty answers.** If the model runs tools but its answer comes back empty
259
+ (reasoning used the output budget), the engine asks once more without tools,
260
+ then falls back to showing the last tool result.
261
+ - **No made-up payment data.** A final answer containing an invoice, offer,
262
+ address or RGB invoice that no tool returned and the user never typed is
263
+ replaced with a refusal (`guardUngroundedPaymentData`, default on).
264
+ - **Skills that can act.** `engine.composeSkill()` and the funnel skip skills
265
+ whose `requires-tools` are not live and prefer skills with at least one live
266
+ tool. If the request is a wallet action (create an invoice, get an address,
267
+ pay, send) and no exposed tool can do it, the engine answers "I can't do that
268
+ here" without calling the model (`guardMissingTools`, default on).
269
+
270
+ Qwen3.5 reasons before it answers: in our signet runs the 2B model used 80–390
271
+ thinking tokens per turn. Keep `maxThinkingTokens` around 512 and the output cap
272
+ (`defaultMaxTokens`) well above it (we use 1536); a tighter cap cuts the turn
273
+ off before it calls a tool or answers.
274
+
187
275
  ```ts
188
276
  const wallet = bindWalletTools(
189
277
  { rln_list_assets: async () => rln.listAssets(), rln_send_asset: async (a) => rln.sendAsset(a) /* … */ },
@@ -1 +1 @@
1
- {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../../src/context/compress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAiClD,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wFAAwF;IACxF,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;CAClB;AA4BD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,gBAAqB,GAAG,WAAW,CA+B3F"}
1
+ {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../../src/context/compress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAkClD,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wFAAwF;IACxF,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;CAClB;AA4BD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,gBAAqB,GAAG,WAAW,CA+B3F"}
@@ -46,6 +46,7 @@ export const DEFAULT_PRESERVE_KEYS = [
46
46
  'total',
47
47
  'total_sats',
48
48
  'balance',
49
+ 'balance_display',
49
50
  'balance_sat',
50
51
  'address',
51
52
  'invoice',
@@ -1 +1 @@
1
- {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../src/context/compress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../src/context/compress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * RGB asset balances are raw integers in the asset's own unit, scaled by its
3
+ * `precision`. Nothing in the tool result says so, and small models fill the
4
+ * gap with "satoshis" ("USDT — Balance: 1,000 satoshis").
5
+ *
6
+ * `annotateRgbBalances` adds a `balance_display` next to each asset's
7
+ * `balance` before the result reaches the model ("1,000 USDT").
8
+ * `fixRgbBalanceUnits` corrects a final answer that still labels an asset
9
+ * balance as sats: the number must equal one of that asset's balances and the
10
+ * nearest ticker before it must be that asset's.
11
+ */
12
+ /** A raw RGB amount in display units, e.g. 1500000 at precision 6 → "1.5". */
13
+ export declare function formatRgbAmount(raw: number, precision: number): string;
14
+ /** Return a copy of `result` where every RGB asset carries `balance_display`. */
15
+ export declare function annotateRgbBalances(result: unknown): unknown;
16
+ /** Relabel asset balances that the answer calls sats, using the tool results it was built from. */
17
+ export declare function fixRgbBalanceUnits(text: string, toolResults: unknown[]): string;
18
+ //# sourceMappingURL=rgb-units.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rgb-units.d.ts","sourceRoot":"","sources":["../../src/context/rgb-units.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsBH,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAe5D;AAeD,mGAAmG;AACnG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,CAkB/E"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * RGB asset balances are raw integers in the asset's own unit, scaled by its
3
+ * `precision`. Nothing in the tool result says so, and small models fill the
4
+ * gap with "satoshis" ("USDT — Balance: 1,000 satoshis").
5
+ *
6
+ * `annotateRgbBalances` adds a `balance_display` next to each asset's
7
+ * `balance` before the result reaches the model ("1,000 USDT").
8
+ * `fixRgbBalanceUnits` corrects a final answer that still labels an asset
9
+ * balance as sats: the number must equal one of that asset's balances and the
10
+ * nearest ticker before it must be that asset's.
11
+ */
12
+ const BALANCE_FIELDS = ['settled', 'spendable', 'future'];
13
+ const isObj = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
14
+ function asAsset(v) {
15
+ if (typeof v.ticker !== 'string' || !v.ticker || !isObj(v.balance))
16
+ return null;
17
+ const amounts = BALANCE_FIELDS.map((k) => v.balance[k]).filter((n) => typeof n === 'number');
18
+ if (!amounts.length)
19
+ return null;
20
+ const precision = typeof v.precision === 'number' && v.precision > 0 ? v.precision : 0;
21
+ return { ticker: v.ticker, precision, amounts };
22
+ }
23
+ /** A raw RGB amount in display units, e.g. 1500000 at precision 6 → "1.5". */
24
+ export function formatRgbAmount(raw, precision) {
25
+ const value = raw / 10 ** precision;
26
+ return value.toLocaleString('en-US', { maximumFractionDigits: precision });
27
+ }
28
+ /** Return a copy of `result` where every RGB asset carries `balance_display`. */
29
+ export function annotateRgbBalances(result) {
30
+ if (Array.isArray(result))
31
+ return result.map(annotateRgbBalances);
32
+ if (!isObj(result))
33
+ return result;
34
+ const out = {};
35
+ for (const [k, v] of Object.entries(result))
36
+ out[k] = annotateRgbBalances(v);
37
+ const asset = asAsset(result);
38
+ if (asset) {
39
+ const balance = result.balance;
40
+ const display = {};
41
+ for (const k of BALANCE_FIELDS) {
42
+ if (typeof balance[k] === 'number')
43
+ display[k] = `${formatRgbAmount(balance[k], asset.precision)} ${asset.ticker}`;
44
+ }
45
+ out.balance_display = display;
46
+ }
47
+ return out;
48
+ }
49
+ function collectAssets(value, into) {
50
+ if (Array.isArray(value)) {
51
+ for (const v of value)
52
+ collectAssets(v, into);
53
+ }
54
+ else if (isObj(value)) {
55
+ const asset = asAsset(value);
56
+ if (asset)
57
+ into.push(asset);
58
+ for (const v of Object.values(value))
59
+ collectAssets(v, into);
60
+ }
61
+ }
62
+ const AMOUNT_IN_SATS = /(\d[\d,]*(?:\.\d+)?)\s*(?:satoshis|sats?)\b/gi;
63
+ const escapeRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
64
+ /** Relabel asset balances that the answer calls sats, using the tool results it was built from. */
65
+ export function fixRgbBalanceUnits(text, toolResults) {
66
+ const assets = [];
67
+ for (const r of toolResults)
68
+ collectAssets(r, assets);
69
+ if (!assets.length)
70
+ return text;
71
+ const tickerRe = new RegExp(`\\b(${[...new Set(assets.map((a) => escapeRe(a.ticker)))].join('|')})\\b`, 'g');
72
+ return text.replace(AMOUNT_IN_SATS, (match, num, offset) => {
73
+ let nearest;
74
+ for (const m of text.slice(Math.max(0, offset - 300), offset).matchAll(tickerRe))
75
+ nearest = m[1];
76
+ if (!nearest)
77
+ return match;
78
+ const value = Number(num.replace(/,/g, ''));
79
+ const asset = assets.find((a) => a.ticker === nearest && a.amounts.some((raw) => raw === value || raw / 10 ** a.precision === value));
80
+ if (!asset)
81
+ return match;
82
+ const raw = asset.amounts.find((r) => r === value) ?? value * 10 ** asset.precision;
83
+ return `${formatRgbAmount(raw, asset.precision)} ${asset.ticker}`;
84
+ });
85
+ }
86
+ //# sourceMappingURL=rgb-units.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rgb-units.js","sourceRoot":"","sources":["../../src/context/rgb-units.ts"],"names":[],"mappings":"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"}
package/dist/engine.d.ts CHANGED
@@ -15,9 +15,11 @@
15
15
  */
16
16
  import type { ConfirmDecision, Message, ToolResult } from './types.js';
17
17
  import type { LLMProvider } from './providers/types.js';
18
- import type { InferenceMetrics } from './providers/types.js';
18
+ import type { InferenceMetrics, ToolChoice } from './providers/types.js';
19
19
  import type { ToolRegistry } from './tools/registry.js';
20
20
  import { type ToolCrushOptions } from './context/compress.js';
21
+ import type { SkillRegistry } from './skills/registry.js';
22
+ import type { Skill } from './skills/types.js';
21
23
  export interface EngineOptions {
22
24
  provider: LLMProvider;
23
25
  tools: ToolRegistry;
@@ -34,6 +36,30 @@ export interface EngineOptions {
34
36
  * The `onToolResult` callback and `toolCalls` still carry the raw result.
35
37
  */
36
38
  compressToolOutput?: boolean | ToolCrushOptions;
39
+ /**
40
+ * Replace a final answer that contains an invoice/address/payment request no
41
+ * tool returned and the user never typed. Default true.
42
+ */
43
+ guardUngroundedPaymentData?: boolean;
44
+ /**
45
+ * Keep amounts honest: recompute BTC figures paired with a sats amount, add
46
+ * `balance_display` to RGB asset balances the model sees, and relabel an
47
+ * asset balance the answer calls sats. Default true.
48
+ */
49
+ fixAmountConversions?: boolean;
50
+ /**
51
+ * Answer a wallet action (create an invoice, get an address, pay, send) with
52
+ * a fixed "no tool" reply, without inference, when no exposed tool can do it.
53
+ * Default true.
54
+ */
55
+ guardMissingTools?: boolean;
56
+ /** End the run with a fixed "Cancelled" reply when the user declines every call in a turn. Default true. */
57
+ endTurnOnDecline?: boolean;
58
+ }
59
+ export interface ComposedSkill {
60
+ skill: Skill | null;
61
+ system: string;
62
+ allowedTools?: string[];
37
63
  }
38
64
  export interface AgenticOptions {
39
65
  maxTurns?: number;
@@ -59,12 +85,19 @@ export interface AgenticOptions {
59
85
  onConfirm?: (call: {
60
86
  name: string;
61
87
  arguments: Record<string, unknown>;
88
+ summary?: string;
62
89
  }) => Promise<ConfirmDecision>;
63
90
  /**
64
91
  * Restrict the tools exposed to the model this run (progressive disclosure).
65
92
  * Typically the active skill's tool list — see SkillRegistry.compose().
66
93
  */
67
94
  allowedTools?: string[];
95
+ /**
96
+ * Tool choice for the FIRST model call only — e.g. `'required'` when the
97
+ * request is a wallet action, so the model can't answer in prose with
98
+ * made-up data. Later rounds are left to the model.
99
+ */
100
+ firstTurnToolChoice?: ToolChoice;
68
101
  signal?: AbortSignal;
69
102
  }
70
103
  export interface AgenticResult {
@@ -85,8 +118,27 @@ export declare class Engine {
85
118
  private readonly defaultSystem?;
86
119
  private readonly defaultMaxTurns;
87
120
  private readonly compressOpts?;
121
+ private readonly guardPaymentData;
122
+ private readonly fixAmounts;
123
+ private readonly guardMissingTools;
124
+ private readonly endTurnOnDecline;
88
125
  constructor(opts: EngineOptions);
126
+ /**
127
+ * Select the skill for `query` among those that can act with this engine's
128
+ * tools (skills whose `requires-tools` are missing are skipped), then
129
+ * compose its system prompt. Pass the result to runAgentic:
130
+ *
131
+ * const { system, allowedTools } = await engine.composeSkill(skills, question, base);
132
+ * await engine.runAgentic([{ role: 'system', content: system }, { role: 'user', content: question }], { allowedTools });
133
+ */
134
+ composeSkill(skills: SkillRegistry, query: string, base: string): Promise<ComposedSkill>;
89
135
  runAgentic(messages: Message[], opts?: AgenticOptions): Promise<AgenticResult>;
136
+ /**
137
+ * The model ran tools but produced no visible answer (e.g. reasoning used the
138
+ * whole output budget). Ask once more without tools; if that is empty too,
139
+ * show the last tool result instead of an empty reply.
140
+ */
141
+ private recoverAnswer;
90
142
  cancel(requestId: string): Promise<void>;
91
143
  /**
92
144
  * Serialize a tool result for history, optionally crushing verbose JSON so
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAElF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChG;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpH,qEAAqE;IACrE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACrG;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAmB;IAEjD,YAAY,IAAI,EAAE,aAAa,EAU9B;IAEK,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAkFvF;IAEK,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7C;IAED;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;YAOV,WAAW;CAO1B"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAiB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAclF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG/C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAChD;;;OAGG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4GAA4G;IAC5G,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChG;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpH,qEAAqE;IACrE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACvH;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAeD,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAmB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAE3C,YAAY,IAAI,EAAE,aAAa,EAc9B;IAED;;;;;;;OAOG;IACG,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAG7F;IAEK,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAwLvF;IAED;;;;OAIG;YACW,aAAa;IA2BrB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7C;IAED;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;YAOV,WAAW;CAO1B"}