@kaleidorg/mind 0.8.0 → 0.9.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 (103) hide show
  1. package/README.md +7 -5
  2. package/dist/bitrefill/index.d.ts +4 -0
  3. package/dist/bitrefill/index.d.ts.map +1 -0
  4. package/dist/bitrefill/index.js +3 -0
  5. package/dist/bitrefill/index.js.map +1 -0
  6. package/dist/capabilities.d.ts +3 -3
  7. package/dist/capabilities.d.ts.map +1 -1
  8. package/dist/capabilities.js +4 -4
  9. package/dist/capabilities.js.map +1 -1
  10. package/dist/engine/answer.d.ts +37 -0
  11. package/dist/engine/answer.d.ts.map +1 -0
  12. package/dist/engine/answer.js +35 -0
  13. package/dist/engine/answer.js.map +1 -0
  14. package/dist/engine.d.ts +15 -3
  15. package/dist/engine.d.ts.map +1 -1
  16. package/dist/engine.js +171 -170
  17. package/dist/engine.js.map +1 -1
  18. package/dist/evidence.d.ts +1 -1
  19. package/dist/evidence.d.ts.map +1 -1
  20. package/dist/fastpath/fastpath.d.ts +6 -1
  21. package/dist/fastpath/fastpath.d.ts.map +1 -1
  22. package/dist/fastpath/fastpath.js +16 -2
  23. package/dist/fastpath/fastpath.js.map +1 -1
  24. package/dist/fastpath/render.d.ts +2 -0
  25. package/dist/fastpath/render.d.ts.map +1 -0
  26. package/dist/fastpath/render.js +58 -0
  27. package/dist/fastpath/render.js.map +1 -0
  28. package/dist/flashnet/index.d.ts +5 -0
  29. package/dist/flashnet/index.d.ts.map +1 -0
  30. package/dist/flashnet/index.js +4 -0
  31. package/dist/flashnet/index.js.map +1 -0
  32. package/dist/funnel.d.ts.map +1 -1
  33. package/dist/funnel.js +11 -14
  34. package/dist/funnel.js.map +1 -1
  35. package/dist/index.d.ts +6 -23
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +10 -27
  38. package/dist/index.js.map +1 -1
  39. package/dist/kaleidoswap/index.d.ts +8 -0
  40. package/dist/kaleidoswap/index.d.ts.map +1 -0
  41. package/dist/kaleidoswap/index.js +7 -0
  42. package/dist/kaleidoswap/index.js.map +1 -0
  43. package/dist/knowledge/index.d.ts +9 -0
  44. package/dist/knowledge/index.d.ts.map +1 -0
  45. package/dist/knowledge/index.js +6 -0
  46. package/dist/knowledge/index.js.map +1 -0
  47. package/dist/lsps1/index.d.ts +4 -0
  48. package/dist/lsps1/index.d.ts.map +1 -0
  49. package/dist/lsps1/index.js +3 -0
  50. package/dist/lsps1/index.js.map +1 -0
  51. package/dist/providers/types.d.ts +16 -3
  52. package/dist/providers/types.d.ts.map +1 -1
  53. package/dist/providers/types.js +3 -3
  54. package/dist/qvac/index.d.ts +0 -1
  55. package/dist/qvac/index.d.ts.map +1 -1
  56. package/dist/qvac/index.js +0 -1
  57. package/dist/qvac/index.js.map +1 -1
  58. package/dist/qvac/provider.d.ts +15 -6
  59. package/dist/qvac/provider.d.ts.map +1 -1
  60. package/dist/qvac/provider.js +14 -16
  61. package/dist/qvac/provider.js.map +1 -1
  62. package/dist/qvac/stream.d.ts +4 -3
  63. package/dist/qvac/stream.d.ts.map +1 -1
  64. package/dist/qvac/stream.js.map +1 -1
  65. package/dist/qvac/voice.d.ts +1 -1
  66. package/dist/submarine/index.d.ts +5 -0
  67. package/dist/submarine/index.d.ts.map +1 -0
  68. package/dist/submarine/index.js +4 -0
  69. package/dist/submarine/index.js.map +1 -0
  70. package/dist/tools/in-process.d.ts +2 -2
  71. package/dist/tools/in-process.js +2 -2
  72. package/package.json +32 -2
  73. package/src/bitrefill/index.ts +13 -0
  74. package/src/capabilities.ts +7 -7
  75. package/src/context/context.test.ts +2 -2
  76. package/src/engine/answer.ts +66 -0
  77. package/src/engine.test.ts +39 -0
  78. package/src/engine.ts +199 -188
  79. package/src/evidence.ts +1 -1
  80. package/src/fastpath/fastpath.ts +22 -2
  81. package/src/fastpath/render.test.ts +39 -0
  82. package/src/fastpath/render.ts +56 -0
  83. package/src/flashnet/index.ts +14 -0
  84. package/src/funnel.mind.test.ts +11 -15
  85. package/src/funnel.ts +11 -15
  86. package/src/index.ts +10 -107
  87. package/src/kaleidoswap/index.ts +19 -0
  88. package/src/knowledge/index.ts +14 -0
  89. package/src/lsps1/index.ts +13 -0
  90. package/src/providers/types.ts +16 -3
  91. package/src/qvac/index.ts +0 -8
  92. package/src/qvac/provider.test.ts +20 -17
  93. package/src/qvac/provider.ts +28 -26
  94. package/src/qvac/stream.ts +4 -3
  95. package/src/qvac/voice.ts +1 -1
  96. package/src/submarine/index.ts +17 -0
  97. package/src/tools/in-process.ts +2 -2
  98. package/dist/qvac/delegate.d.ts +0 -50
  99. package/dist/qvac/delegate.d.ts.map +0 -1
  100. package/dist/qvac/delegate.js +0 -53
  101. package/dist/qvac/delegate.js.map +0 -1
  102. package/src/qvac/delegate.test.ts +0 -68
  103. package/src/qvac/delegate.ts +0 -73
@@ -1,8 +1,5 @@
1
1
  import { consumeRun } from './stream.js';
2
2
  import { toQvacTools } from './tools.js';
3
- /** Shown when a turn is cut off because it blew its thinking-token budget. */
4
- const THINKING_BUDGET_FALLBACK = 'I spent my whole thinking budget on that one without landing an answer. ' +
5
- 'Try asking again, more specifically.';
6
3
  export function createQvacProvider(options) {
7
4
  return {
8
5
  name: 'qvac',
@@ -24,7 +21,7 @@ export function createQvacProvider(options) {
24
21
  const predict = input.maxTokens ?? options.defaultMaxTokens;
25
22
  // A thinking budget at or above the output cap never binds: the model can
26
23
  // spend the whole turn reasoning and return no answer. Keep half for it.
27
- const thinkingCap = input.maxThinkingTokens ?? options.maxThinkingTokens;
24
+ const thinkingCap = input.thinking === 'off' ? 0 : (input.maxThinkingTokens ?? options.maxThinkingTokens);
28
25
  const maxThinkingTokens = thinkingCap !== undefined && predict !== undefined && thinkingCap >= predict
29
26
  ? Math.floor(predict / 2)
30
27
  : thinkingCap;
@@ -45,6 +42,7 @@ export function createQvacProvider(options) {
45
42
  // Split `<think>` into separate thinkingDelta events so reasoning never
46
43
  // pollutes the visible answer.
47
44
  captureThinking: true,
45
+ ...(options.sessionCache && input.sessionKey ? { kvCache: input.sessionKey } : {}),
48
46
  ...(generationParams ? { generationParams } : {}),
49
47
  ...(tools ? { tools } : {}),
50
48
  });
@@ -64,21 +62,11 @@ export function createQvacProvider(options) {
64
62
  const result = await consumeRun(run, {
65
63
  onToken: input.onToken,
66
64
  onThinking: input.onThinking ?? options.onThinking,
67
- // Backstop only: the SDK enforces the budget itself, and our count is a
68
- // char-based estimate, so leave headroom before cancelling.
69
- maxThinkingTokens: maxThinkingTokens === undefined ? undefined : Math.ceil(maxThinkingTokens * 1.25) + 32,
70
- // Cancel the in-flight run the moment the thinking budget is blown — the
71
- // SDK keeps generating otherwise. Fire-and-forget; `final` then resolves.
72
- onThinkingBudgetExceeded: () => {
73
- void options.cancel({ requestId: run.requestId }).catch(() => { });
74
- },
75
65
  });
76
66
  // Surface the real per-turn inference stats (backend device + throughput).
77
67
  if (result.stats)
78
68
  (input.onStats ?? options.onStats)?.(result.stats);
79
- // A turn cut off mid-reasoning has no visible answer — return a short note
80
- // instead of an empty bubble so the agentic loop ends cleanly.
81
- const text = result.text || (result.thinkingBudgetExceeded ? THINKING_BUDGET_FALLBACK : result.text);
69
+ const text = result.text;
82
70
  const promptTokens = result.stats?.promptTokens;
83
71
  const generated = result.stats?.generatedTokens;
84
72
  const totalTokens = result.stats?.totalTokens ??
@@ -103,7 +91,7 @@ export function createQvacProvider(options) {
103
91
  : {}),
104
92
  ...(result.stopReason ? { stopReason: result.stopReason } : {}),
105
93
  };
106
- const incomplete = !result.text && result.toolCalls.length === 0 && (result.thinkingBudgetExceeded || !!result.truncated);
94
+ const incomplete = !result.text && result.toolCalls.length === 0 && !!result.truncated;
107
95
  return {
108
96
  text,
109
97
  rawContent: result.rawContent,
@@ -114,6 +102,16 @@ export function createQvacProvider(options) {
114
102
  ...(incomplete ? { incomplete: true } : {}),
115
103
  };
116
104
  },
105
+ async endSession(sessionKey) {
106
+ if (!options.sessionCache || !options.deleteCache)
107
+ return;
108
+ try {
109
+ await options.deleteCache({ kvCacheKey: sessionKey });
110
+ }
111
+ catch (err) {
112
+ console.warn('[qvac] deleteCache failed:', err);
113
+ }
114
+ },
117
115
  async cancel(requestId) {
118
116
  // The cancel only lands once the server has begun the request; a same-tick
119
117
  // cancel may race the begin and is logged as a no-match by the SDK.
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/qvac/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/qvac/provider.ts"],"names":[],"mappings":"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"}
@@ -25,9 +25,10 @@ export interface StreamHandlers {
25
25
  /** The model's `<think>` reasoning, streamed separately. */
26
26
  onThinking?: (token: string) => void;
27
27
  /**
28
- * Stop the run once `<think>` reasoning exceeds this many tokens (estimated
29
- * from characters). A backstop for the SDK's own `reasoning_budget`. Omit for
30
- * unlimited reasoning.
28
+ * Stop forwarding once `<think>` reasoning exceeds this many tokens
29
+ * (estimated from characters) and call `onThinkingBudgetExceeded`. The QVAC
30
+ * provider uses the SDK's `reasoning_budget` instead; this is for callers
31
+ * driving `completion()` themselves.
31
32
  */
32
33
  maxThinkingTokens?: number;
33
34
  /**
@@ -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;;;;OAIG;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;AA6BD;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,iBAAiB,EACtB,QAAQ,GAAE,cAAmB,GAC5B,OAAO,CAAC,YAAY,CAAC,CA6CvB"}
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;;;;;OAKG;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;AA6BD;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,iBAAiB,EACtB,QAAQ,GAAE,cAAmB,GAC5B,OAAO,CAAC,YAAY,CAAC,CA6CvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/qvac/stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/qvac/stream.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * injected (type-only `@qvac/sdk` import, erased at build) so this carries no
5
5
  * runtime SDK dependency and is unit-testable with fakes.
6
6
  *
7
- * The host still owns model lifecycle (download, load, local-vs-delegated) and
7
+ * The host still owns model lifecycle (download, load) and
8
8
  * audio I/O (mic capture, playback). It passes the loaded model-id resolvers;
9
9
  * this module does the SDK calls + the text gating that must be identical
10
10
  * everywhere (payment-string redaction, U+0060 refusal, file:// stripping).
@@ -0,0 +1,5 @@
1
+ /** KaleidoSwap /v2 submarine swaps (pay Lightning from Liquid): tool contract and recipe. */
2
+ export { SUBMARINE_TOOLS, SUBMARINE_SPEND_TOOLS, SUBMARINE_FROM_ASSETS, isSubmarineSpendTool, getSubmarineTool, formatSubmarineAmount, bindSubmarineTools, } from './contract.js';
3
+ export type { SubmarineToolDef, SubmarineFromAsset, SubmarineHandler, BindSubmarineOptions, } from './contract.js';
4
+ export { submarinePayRecipe, extractSubmarinePay } from '../recipe/submarine-pay.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/submarine/index.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** KaleidoSwap /v2 submarine swaps (pay Lightning from Liquid): tool contract and recipe. */
2
+ export { SUBMARINE_TOOLS, SUBMARINE_SPEND_TOOLS, SUBMARINE_FROM_ASSETS, isSubmarineSpendTool, getSubmarineTool, formatSubmarineAmount, bindSubmarineTools, } from './contract.js';
3
+ export { submarinePayRecipe, extractSubmarinePay } from '../recipe/submarine-pay.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/submarine/index.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAOvB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -2,8 +2,8 @@
2
2
  * InProcessToolSource — tools whose handlers run in the same process.
3
3
  *
4
4
  * Used by the mobile wallet: the handlers call the device's wallet adapters
5
- * (Spark / Arkade / RGB) directly, so signing happens on the phone even when
6
- * the model's inference is delegated to a desktop over P2P.
5
+ * (Spark / Arkade / RGB) directly, so signing happens on the device even when
6
+ * the model runs on a remote server.
7
7
  */
8
8
  import type { ToolDef } from '../types.js';
9
9
  import type { ToolSource } from './source.js';
@@ -2,8 +2,8 @@
2
2
  * InProcessToolSource — tools whose handlers run in the same process.
3
3
  *
4
4
  * Used by the mobile wallet: the handlers call the device's wallet adapters
5
- * (Spark / Arkade / RGB) directly, so signing happens on the phone even when
6
- * the model's inference is delegated to a desktop over P2P.
5
+ * (Spark / Arkade / RGB) directly, so signing happens on the device even when
6
+ * the model runs on a remote server.
7
7
  */
8
8
  export class InProcessToolSource {
9
9
  id;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaleidorg/mind",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Local-first reasoning + function-calling engine for KaleidoSwap. QVAC-powered.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -45,6 +45,36 @@
45
45
  "import": "./dist/providers/openai.js",
46
46
  "default": "./dist/providers/openai.js"
47
47
  },
48
+ "./kaleidoswap": {
49
+ "types": "./dist/kaleidoswap/index.d.ts",
50
+ "import": "./dist/kaleidoswap/index.js",
51
+ "default": "./dist/kaleidoswap/index.js"
52
+ },
53
+ "./lsps1": {
54
+ "types": "./dist/lsps1/index.d.ts",
55
+ "import": "./dist/lsps1/index.js",
56
+ "default": "./dist/lsps1/index.js"
57
+ },
58
+ "./submarine": {
59
+ "types": "./dist/submarine/index.d.ts",
60
+ "import": "./dist/submarine/index.js",
61
+ "default": "./dist/submarine/index.js"
62
+ },
63
+ "./bitrefill": {
64
+ "types": "./dist/bitrefill/index.d.ts",
65
+ "import": "./dist/bitrefill/index.js",
66
+ "default": "./dist/bitrefill/index.js"
67
+ },
68
+ "./flashnet": {
69
+ "types": "./dist/flashnet/index.d.ts",
70
+ "import": "./dist/flashnet/index.js",
71
+ "default": "./dist/flashnet/index.js"
72
+ },
73
+ "./knowledge": {
74
+ "types": "./dist/knowledge/index.d.ts",
75
+ "import": "./dist/knowledge/index.js",
76
+ "default": "./dist/knowledge/index.js"
77
+ },
48
78
  "./testing": {
49
79
  "types": "./dist/testing/index.d.ts",
50
80
  "import": "./dist/testing/index.js",
@@ -68,7 +98,7 @@
68
98
  "bundle-skills": "node scripts/bundle-skills.mjs"
69
99
  },
70
100
  "peerDependencies": {
71
- "@qvac/sdk": ">=0.13.1"
101
+ "@qvac/sdk": ">=0.20.0"
72
102
  },
73
103
  "peerDependenciesMeta": {
74
104
  "@qvac/sdk": {
@@ -0,0 +1,13 @@
1
+ /** Bitrefill (gift cards, top-ups, eSIMs): tool contract. */
2
+ export {
3
+ BITREFILL_TOOLS,
4
+ BITREFILL_SPEND_TOOLS,
5
+ isBitrefillSpendTool,
6
+ getBitrefillTool,
7
+ bindBitrefillTools,
8
+ } from './contract.js';
9
+ export type {
10
+ BitrefillToolDef,
11
+ BitrefillHandler,
12
+ BindBitrefillOptions,
13
+ } from './contract.js';
@@ -16,8 +16,8 @@ export interface CapabilityInput {
16
16
  modelCtxTokens: number;
17
17
  /** Whether an EmbeddingProvider is wired (QVAC embed, etc.). */
18
18
  hasEmbeddings?: boolean;
19
- /** Running inference on a remote provider (desktop/server) — relaxes limits. */
20
- delegated?: boolean;
19
+ /** Inference runs on a larger remote model (e.g. an OpenAI-compatible server) — relaxes limits. */
20
+ remote?: boolean;
21
21
  }
22
22
 
23
23
  export interface MindCapabilities {
@@ -27,7 +27,7 @@ export interface MindCapabilities {
27
27
  semanticMemory: boolean;
28
28
  /** Embedding-only dedup of near-duplicate memories (zero inference — mobile-safe). */
29
29
  dedupeMemory: boolean;
30
- /** LLM merge of near-duplicate memories (an extra inference — capable/delegated only). */
30
+ /** LLM merge of near-duplicate memories (an extra inference — capable/remote only). */
31
31
  mergeMemory: boolean;
32
32
  /** Retrieval-augmented generation (needs embeddings + enough RAM/context). */
33
33
  rag: boolean;
@@ -42,7 +42,7 @@ export interface MindCapabilities {
42
42
  const GiB = 1024 * 1024 * 1024;
43
43
 
44
44
  export function capabilityProfile(input: CapabilityInput): MindCapabilities {
45
- const ramGb = input.delegated ? Infinity : (input.ramBytes ?? 0) / GiB;
45
+ const ramGb = input.remote ? Infinity : (input.ramBytes ?? 0) / GiB;
46
46
  const ctx = input.modelCtxTokens;
47
47
  const hasEmb = !!input.hasEmbeddings;
48
48
 
@@ -54,13 +54,13 @@ export function capabilityProfile(input: CapabilityInput): MindCapabilities {
54
54
 
55
55
  // Consolidation: embedding-only dedup is cheap (no inference) — on wherever
56
56
  // semantic memory is. The LLM merge costs an extra inference, so reserve it
57
- // for delegated or roomy on-device setups; never run it on a tiny phone model.
57
+ // for remote or roomy on-device setups; never run it on a tiny phone model.
58
58
  const dedupeMemory = semanticMemory;
59
- const mergeMemory = dedupeMemory && (input.delegated || (ramGb >= 4 && ctx >= 4096));
59
+ const mergeMemory = dedupeMemory && (input.remote || (ramGb >= 4 && ctx >= 4096));
60
60
 
61
61
  // RAG is the expensive one: needs embeddings, a non-tiny context window, and
62
62
  // (on-device) enough RAM to hold an embedding model + index.
63
- const rag = hasEmb && ctx >= 4096 && (input.delegated || ramGb >= 3);
63
+ const rag = hasEmb && ctx >= 4096 && (input.remote || ramGb >= 3);
64
64
 
65
65
  // Scale how much we pull in with the available window.
66
66
  const topKMemory = budget >= 1500 ? 4 : budget >= 700 ? 3 : 2;
@@ -69,8 +69,8 @@ describe('capabilityProfile', () => {
69
69
  expect(c.mergeMemory).toBe(false); // never run merge inference on a tiny phone
70
70
  });
71
71
 
72
- it('desktop / delegated: RAG on, memory merge on', () => {
73
- const c = capabilityProfile({ modelCtxTokens: 8192, hasEmbeddings: true, delegated: true });
72
+ it('remote model: RAG on, memory merge on', () => {
73
+ const c = capabilityProfile({ modelCtxTokens: 8192, hasEmbeddings: true, remote: true });
74
74
  expect(c.rag).toBe(true);
75
75
  expect(c.topKRag).toBeGreaterThan(0);
76
76
  expect(c.semanticMemory).toBe(true);
@@ -0,0 +1,66 @@
1
+ /**
2
+ * How an agentic run ends: the Engine's fixed replies, and the checks every
3
+ * answer the model wrote goes through before the user sees it.
4
+ *
5
+ * An answer is tagged with where it came from. Fixed replies are final; only
6
+ * model text is rewritten (amount fixes) or replaced (payment data no tool
7
+ * returned). Keeping that rule in one place is what stops a fixed reply that
8
+ * quotes a readback from being mistaken for an invented invoice.
9
+ */
10
+ import type { ToolCallError } from '../providers/types.js';
11
+ import { findUngroundedPaymentData, fixSatsBtcConversions, ungroundedReply } from '../guards.js';
12
+ import { fixRgbBalanceUnits } from '../context/rgb-units.js';
13
+
14
+ export interface Answer {
15
+ text: string;
16
+ /** `engine`: one of the fixed replies below, never rewritten. */
17
+ source: 'model' | 'engine';
18
+ }
19
+
20
+ export const model = (text: string): Answer => ({ text, source: 'model' });
21
+ export const engine = (text: string): Answer => ({ text, source: 'engine' });
22
+
23
+ export const STOPPED_REPLY = 'I had to stop after several steps — please try a more specific request.';
24
+
25
+ export const TOOL_CALL_FAILED_REPLY =
26
+ "I couldn't put together a valid request for that. Please rephrase it with the exact values (asset, amount, recipient).";
27
+
28
+ export const REPEATED_CALL_REPLY = 'I could not get a different result from the wallet — please try a more specific request.';
29
+
30
+ export function cancelledReply(declined: string[]): string {
31
+ return `Cancelled — you declined: ${declined.join('; ')}. Nothing was sent or changed.`;
32
+ }
33
+
34
+ /** Fed back to the model after a tool call it emitted could not be parsed. */
35
+ export function toolErrorFeedback(errors: ToolCallError[], cutOff: boolean): string {
36
+ if (cutOff) {
37
+ return 'Your tool call was cut off because the output got too long. Make ONE tool call at a time with only the required arguments, or answer from the results you already have.';
38
+ }
39
+ const detail = errors.map((e) => e.message).join('; ');
40
+ return `Your tool call could not be read (${detail}). Call the tool again with valid JSON arguments that match its schema, or ask the user for the missing values.`;
41
+ }
42
+
43
+ export interface FinalizeOptions {
44
+ /** Recompute BTC figures and relabel RGB balances. */
45
+ fixAmounts: boolean;
46
+ /** Replace answers carrying payment data no tool returned and the user never typed. */
47
+ guardPaymentData: boolean;
48
+ /** What the answer may legitimately quote: the user's messages and the tool results. */
49
+ sources: unknown[];
50
+ /** Tool results, for relabelling RGB balances. */
51
+ toolResults: unknown[];
52
+ aborted: boolean;
53
+ }
54
+
55
+ /** The text the user sees. */
56
+ export function finalizeAnswer(answer: Answer, opts: FinalizeOptions): string {
57
+ if (!answer.text) return opts.aborted ? '' : STOPPED_REPLY;
58
+ if (answer.source === 'engine') return answer.text;
59
+ let text = answer.text;
60
+ if (opts.fixAmounts) text = fixRgbBalanceUnits(fixSatsBtcConversions(text), opts.toolResults);
61
+ if (opts.guardPaymentData) {
62
+ const ungrounded = findUngroundedPaymentData(text, opts.sources);
63
+ if (ungrounded.length) text = ungroundedReply(ungrounded);
64
+ }
65
+ return text;
66
+ }
@@ -224,6 +224,45 @@ describe('Engine agentic loop', () => {
224
224
  expect(seen).toEqual(['required', undefined]);
225
225
  });
226
226
 
227
+ it('passes one session key to every call of a run and ends the session', async () => {
228
+ const keys: Array<string | undefined> = [];
229
+ const ended: string[] = [];
230
+ const provider: LLMProvider = {
231
+ name: 'rec',
232
+ async runTurn(input) {
233
+ keys.push(input.sessionKey);
234
+ return keys.length === 1
235
+ ? { text: '', rawContent: '', toolCalls: [{ name: 'get_balance', arguments: {} }] }
236
+ : { text: 'done', rawContent: 'done', toolCalls: [] };
237
+ },
238
+ async endSession(key) {
239
+ ended.push(key);
240
+ },
241
+ };
242
+ const engine = new Engine({ provider, tools: freshTools() });
243
+ await engine.runAgentic([{ role: 'user', content: 'x' }]);
244
+ await engine.runAgentic([{ role: 'user', content: 'y' }]);
245
+ expect(keys[0]).toBeTruthy();
246
+ expect(keys[1]).toBe(keys[0]);
247
+ expect(keys[2]).not.toBe(keys[0]);
248
+ expect(ended).toEqual([keys[0], keys[2]]);
249
+ });
250
+
251
+ it('turns thinking off on the forced first call only', async () => {
252
+ const thinking: Array<string | undefined> = [];
253
+ const provider: LLMProvider = {
254
+ name: 'rec',
255
+ async runTurn(input) {
256
+ thinking.push(input.thinking);
257
+ return thinking.length === 1
258
+ ? { text: '', rawContent: '', toolCalls: [{ name: 'get_balance', arguments: {} }] }
259
+ : { text: 'done', rawContent: 'done', toolCalls: [] };
260
+ },
261
+ };
262
+ await new Engine({ provider, tools: freshTools() }).runAgentic([{ role: 'user', content: 'x' }], { firstTurnToolChoice: 'required' });
263
+ expect(thinking).toEqual(['off', undefined]);
264
+ });
265
+
227
266
  it('feeds an unparseable tool call back to the model once, then gives up cleanly', async () => {
228
267
  const histories: number[] = [];
229
268
  const provider: LLMProvider = {