@kaleidorg/mind 0.10.4 → 0.10.6

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.
@@ -31,5 +31,28 @@
31
31
  * runner's recipe-level confirm path handles this; see recipe/runner.ts.)
32
32
  */
33
33
  import type { Recipe } from './types.js';
34
+ interface QuoteResult {
35
+ rfq_id?: string;
36
+ from_asset?: {
37
+ asset_id?: string;
38
+ ticker?: string;
39
+ amount_raw?: number;
40
+ amount_display?: string;
41
+ };
42
+ to_asset?: {
43
+ asset_id?: string;
44
+ ticker?: string;
45
+ amount_raw?: number;
46
+ amount_display?: string;
47
+ };
48
+ from_amount_display?: string;
49
+ to_amount_display?: string;
50
+ fee_display?: string;
51
+ }
52
+ /** RLN adds this to the taker's BTC HTLC in a BTC→RGB swap (rgb_htlc_min_msat). */
53
+ export declare const RLN_HTLC_MIN_MSAT = 3000000;
54
+ /** Why the node can't send this swap's BTC leg, or null when it can (or can't tell). */
55
+ export declare function outboundShortfall(q: QuoteResult | undefined, channels: unknown): string | null;
34
56
  export declare const kaleidoswapAtomicRecipe: Recipe;
57
+ export {};
35
58
  //# sourceMappingURL=kaleidoswap-atomic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kaleidoswap-atomic.d.ts","sourceRoot":"","sources":["../../src/recipe/kaleidoswap-atomic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,YAAY,CAAC;AA6DxD,eAAO,MAAM,uBAAuB,EAAE,MA0GrC,CAAC"}
1
+ {"version":3,"file":"kaleidoswap-atomic.d.ts","sourceRoot":"","sources":["../../src/recipe/kaleidoswap-atomic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,YAAY,CAAC;AAsCxD,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,UAAU,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClG,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAOD,mFAAmF;AACnF,eAAO,MAAM,iBAAiB,UAAY,CAAC;AAqC3C,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAS9F;AASD,eAAO,MAAM,uBAAuB,EAAE,MAsHrC,CAAC"}
@@ -72,6 +72,58 @@ const SWAP_INTENT = (t) => {
72
72
  // KaleidoSwap atomic is a BTC ↔ RGB venue: BTC settles on Lightning, RGB
73
73
  // assets on RGB-over-Lightning. The maker/MCP layer is derived from the asset.
74
74
  const layerFor = (asset) => /^btc$/i.test(String(asset)) ? 'BTC_LN' : 'RGB_LN';
75
+ /** RLN adds this to the taker's BTC HTLC in a BTC→RGB swap (rgb_htlc_min_msat). */
76
+ export const RLN_HTLC_MIN_MSAT = 3_000_000;
77
+ function paysBtcOverLightning(q) {
78
+ const leg = q?.from_asset;
79
+ return leg?.layer === 'BTC_LN' || (!leg?.layer && String(leg?.ticker ?? '').toUpperCase() === 'BTC');
80
+ }
81
+ /** The most one usable channel can send now, in msat; undefined when the shape is unknown. */
82
+ function maxOutboundMsat(channels) {
83
+ let list = channels;
84
+ if (typeof list === 'string') {
85
+ try {
86
+ list = JSON.parse(list);
87
+ }
88
+ catch {
89
+ return undefined;
90
+ }
91
+ }
92
+ const rows = Array.isArray(list) ? list : list?.channels;
93
+ if (!Array.isArray(rows))
94
+ return undefined;
95
+ // No channels at all: nothing can send. Channels without readable amounts:
96
+ // unknown, so don't block.
97
+ if (!rows.length)
98
+ return 0;
99
+ let best;
100
+ let readable = false;
101
+ for (const c of rows) {
102
+ const msat = Number(c.next_outbound_htlc_limit_msat ?? c.outbound_balance_msat);
103
+ if (!Number.isFinite(msat))
104
+ continue;
105
+ readable = true;
106
+ if (c.is_usable === false || c.ready === false)
107
+ continue;
108
+ best = Math.max(best ?? 0, msat);
109
+ }
110
+ // Readable channels, none usable: nothing can send.
111
+ return best ?? (readable ? 0 : undefined);
112
+ }
113
+ const fmtSats = (msat) => `${Math.floor(msat / 1000).toLocaleString('en-US')} sats`;
114
+ /** Why the node can't send this swap's BTC leg, or null when it can (or can't tell). */
115
+ export function outboundShortfall(q, channels) {
116
+ const amount = Number(q?.from_asset?.amount_raw);
117
+ const max = maxOutboundMsat(channels);
118
+ if (!Number.isFinite(amount) || max === undefined)
119
+ return null;
120
+ const need = amount + RLN_HTLC_MIN_MSAT;
121
+ if (max >= need)
122
+ return null;
123
+ return max === 0
124
+ ? `this swap needs a Lightning channel that can send ${fmtSats(need)} (the amount plus RLN's 3,000-sat HTLC minimum), and none can send right now. Buy a channel with at least that much outbound first.`
125
+ : `your channels can send at most ${fmtSats(max)}, and this swap needs ${fmtSats(need)} (the amount plus RLN's 3,000-sat HTLC minimum). Swap at most ${fmtSats(Math.max(0, max - RLN_HTLC_MIN_MSAT))}, or buy a bigger channel.`;
126
+ }
75
127
  // Render a quote leg as "<amount> <TICKER>" from the MCP quote echo, or undefined
76
128
  // if the leg is missing (callers fall back to the user's slot values).
77
129
  const quoteLeg = (leg) => leg?.amount_display != null ? `${leg.amount_display}${leg.ticker ? ` ${leg.ticker}` : ''}` : undefined;
@@ -115,6 +167,18 @@ export const kaleidoswapAtomicRecipe = {
115
167
  : { ...base, from_amount: ctx.slots.amount };
116
168
  },
117
169
  },
170
+ // 1b. NODE: the BTC leg goes out as one Lightning HTLC of the amount plus
171
+ // RLN's 3,000-sat HTLC minimum, so a channel must be able to send that
172
+ // much. Stop here, before the confirmation, instead of failing with
173
+ // NoRoute after the maker has locked the swap.
174
+ {
175
+ tool: 'rln_list_channels',
176
+ as: 'channels',
177
+ optional: true,
178
+ args: () => ({}),
179
+ skipIf: (ctx) => !paysBtcOverLightning(ctx.results.quote),
180
+ check: (ctx) => outboundShortfall(ctx.results.quote, ctx.results.channels),
181
+ },
118
182
  // 2. MAKER locks the swap. SwapRequest is flat (asset ids + maker-unit
119
183
  // amounts) — sourced straight from the quote result, no re-scaling.
120
184
  // First spend step → the recipe-level confirm gate fires just before it.
@@ -1 +1 @@
1
- {"version":3,"file":"kaleidoswap-atomic.js","sourceRoot":"","sources":["../../src/recipe/kaleidoswap-atomic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kaleidoswap-atomic.js","sourceRoot":"","sources":["../../src/recipe/kaleidoswap-atomic.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/recipe/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAC;AAItE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB;;;;;OAKG;IACH,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,wCAAwC;IACxC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAChF,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAuCD,iFAAiF;AACjF,wBAAsB,YAAY,CAChC,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAqGjE;AAED,oFAAoF;AACpF,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAmG3G;AAED,wFAAwF;AACxF,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAW;IAC1B,YAAY,OAAO,GAAE,MAAM,EAAO,EAEjC;IACD,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAExB;IACD,IAAI,IAAI,MAAM,EAAE,CAEf;IACD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEpC;IACD,mEAAmE;IACnE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlC;CACF"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/recipe/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAC;AAItE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB;;;;;OAKG;IACH,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,wCAAwC;IACxC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAChF,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAuCD,iFAAiF;AACjF,wBAAsB,YAAY,CAChC,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAqGjE;AAED,oFAAoF;AACpF,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CA+G3G;AAED,wFAAwF;AACxF,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAW;IAC1B,YAAY,OAAO,GAAE,MAAM,EAAO,EAEjC;IACD,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAExB;IACD,IAAI,IAAI,MAAM,EAAE,CAEf;IACD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEpC;IACD,mEAAmE;IACnE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlC;CACF"}
@@ -215,12 +215,28 @@ export async function runRecipe(recipe, text, opts) {
215
215
  const args = step.args(ctx);
216
216
  if (!(await passesGate(step.tool, args)))
217
217
  return cancelled();
218
- const result = await opts.tools.execute(step.tool, args);
218
+ let result;
219
+ if (step.optional) {
220
+ try {
221
+ result = await opts.tools.execute(step.tool, args);
222
+ if (toolFailure(result))
223
+ result = undefined;
224
+ }
225
+ catch {
226
+ result = undefined;
227
+ }
228
+ }
229
+ else {
230
+ result = await opts.tools.execute(step.tool, args);
231
+ }
219
232
  ctx.results[step.as ?? step.tool] = result;
220
233
  opts.onStep?.(step.tool, args, result);
221
- const failure = toolFailure(result);
234
+ const failure = step.optional ? null : toolFailure(result);
222
235
  if (failure)
223
236
  return failedResult(recipe, ctx, inferences, failure);
237
+ const problem = step.check?.(ctx);
238
+ if (problem)
239
+ return failedResult(recipe, ctx, inferences, problem);
224
240
  }
225
241
  // Final action.
226
242
  const finalArgs = recipe.final.args(ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/recipe/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/recipe/runner.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,13 @@ export interface RecipeStep {
32
32
  as?: string;
33
33
  /** Skip this step when true (e.g. recipient is already an address). */
34
34
  skipIf?: (ctx: RecipeContext) => boolean;
35
+ /** A missing or failing tool doesn't stop the recipe (the result is then undefined). */
36
+ optional?: boolean;
37
+ /**
38
+ * Runs after the step's result is stored. A returned message stops the
39
+ * recipe there, before any later confirmation or spend.
40
+ */
41
+ check?: (ctx: RecipeContext) => string | null;
35
42
  }
36
43
  export interface Recipe {
37
44
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/recipe/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,IAAI,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,gEAAgE;IAChE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;CAC1C;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,6DAA6D;IAC7D,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC3D;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;IACxD,sEAAsE;IACtE,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,8EAA8E;IAC9E,KAAK,EAAE,UAAU,CAAC;IAClB,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,KAAK,MAAM,CAAC;IAC/D;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/recipe/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,IAAI,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,gEAAgE;IAChE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;IACzC,wFAAwF;IACxF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,GAAG,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,6DAA6D;IAC7D,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC3D;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;IACxD,sEAAsE;IACtE,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,8EAA8E;IAC9E,KAAK,EAAE,UAAU,CAAC;IAClB,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,KAAK,MAAM,CAAC;IAC/D;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/wallet/confirm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2DH,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CA+CzG"}
1
+ {"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/wallet/confirm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2DH,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAwDzG"}
@@ -98,6 +98,15 @@ export function confirmReadback(call) {
98
98
  return ask(`Accept atomic swap ${shortRef(String(a.swapstring ?? ''))} on your node`);
99
99
  case 'execute_swap':
100
100
  return ask(`Swap ${asset(a.amount, a.from_asset)} for ${label(a.to_asset)}`);
101
+ // The order total is only known once the LSP creates the order; the
102
+ // payment that follows is confirmed separately with that amount.
103
+ case 'lsp_create_order':
104
+ case 'kaleidoswap_lsp_create_order': {
105
+ const pushed = num(a.client_balance_sat) ? `, ${sats(a.client_balance_sat)} pushed to you` : '';
106
+ return ask(`Order a Lightning channel from the LSP with ${sats(a.lsp_balance_sat)} inbound${pushed}. The order total is paid in a separate step`);
107
+ }
108
+ case 'kaleidoswap_lsp_create_asset_channel':
109
+ return ask(`Order a channel from the LSP with ${asset(a.asset_amount, a.asset)} inbound. The order total is paid in a separate step`);
101
110
  default:
102
111
  // Unknown but spend-flagged tool → a generic, still-honest readback.
103
112
  return getWalletTool(name)?.spend ? ask(`Confirm ${name.replace(/_/g, ' ')}`) : null;
@@ -1 +1 @@
1
- {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/wallet/confirm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/wallet/confirm.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaleidorg/mind",
3
- "version": "0.10.4",
3
+ "version": "0.10.6",
4
4
  "description": "Local-first reasoning + function-calling engine for KaleidoSwap. QVAC-powered.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -1,38 +1,45 @@
1
1
  ---
2
2
  name: channel-manager
3
3
  description: "Lightning channels and liquidity for the RGB Lightning Node: node health, channel audit, inbound/outbound balance, buying a channel or asset channel from the KaleidoSwap LSP, opening and closing channels. Runs the scheduled heartbeat."
4
- tools: rln_get_node_info, rln_list_channels, rln_get_balances, rln_refresh_transfers, rln_connect_peer, rln_open_channel, rln_close_channel, rln_get_channel_id, rln_pay_invoice, kaleidoswap_lsp_get_info, kaleidoswap_lsp_estimate_fees, kaleidoswap_lsp_create_order, kaleidoswap_lsp_get_order, kaleidoswap_lsp_quote_asset_channel, kaleidoswap_lsp_create_asset_channel
4
+ tools: rln_get_node_info, rln_list_channels, rln_get_balances, rln_refresh_transfers, rln_connect_peer, rln_open_channel, rln_close_channel, rln_get_channel_id, rln_pay_invoice, rln_send_btc, kaleidoswap_lsp_get_info, kaleidoswap_lsp_estimate_fees, kaleidoswap_lsp_create_order, kaleidoswap_lsp_get_order, kaleidoswap_lsp_quote_asset_channel, kaleidoswap_lsp_create_asset_channel
5
5
  requires-tools: rln_list_channels
6
- triggers: channel, channels, liquidity, inbound, outbound, lsp, lsps1, capacity, rebalance channel, can't receive, open channel, close channel, channel order, heartbeat, health, stuck
6
+ triggers: channel, channels, liquidity, inbound, outbound, lsp, lsps1, capacity, rebalance channel, can't receive, open channel, close channel, channel order, buy a channel, no channel, heartbeat, health, stuck
7
7
  metadata:
8
8
  author: kaleidoswap
9
- version: "0.2.0"
9
+ version: "0.3.0"
10
10
  ---
11
11
  # Channel manager
12
12
 
13
13
  Read state first: `rln_get_node_info`, `rln_list_channels`, `rln_get_balances`.
14
14
  Outbound = what the node can send; inbound = what it can receive. Report
15
- numbers from this turn's results only.
15
+ numbers from this turn's results only. All `*_sat` fields are sats.
16
16
 
17
17
  ## Do
18
18
  - Health: count usable channels, total outbound vs inbound, channels with
19
19
  `is_usable: false`; `rln_refresh_transfers {}` flushes pending RGB transfers.
20
- - Can't receive → buy inbound: `kaleidoswap_lsp_get_info` (limits and
21
- `lsp_connection_url`), `rln_connect_peer`, `kaleidoswap_lsp_estimate_fees`
22
- (show `total_fee`), then `kaleidoswap_lsp_create_order` with `client_pubkey`
23
- from `rln_get_node_info`, pay its invoice with `rln_pay_invoice`, poll
24
- `kaleidoswap_lsp_get_order` until `COMPLETED`.
25
- - Wants an asset (USDT/XAUT) but has no channel →
20
+ - Buy a channel from the LSP (also the step before a first swap):
21
+ 1. `kaleidoswap_lsp_get_info` → `lsp_connection_url`, limits, asset ids.
22
+ 2. `rln_connect_peer` with `lsp_connection_url`.
23
+ 3. `kaleidoswap_lsp_estimate_fees`, show `total_fee`.
24
+ 4. `kaleidoswap_lsp_create_order` with `client_pubkey` from `rln_get_node_info`.
25
+ `lsp_balance_sat` (min 50,000) is inbound; `client_balance_sat` is your
26
+ outbound, paid by you. BTC→asset swap: add `asset_id` (`rgb:` id),
27
+ `lsp_asset_amount` raw (10 USDT = 10000000), `client_balance_sat` ≥ swap + 6,000.
28
+ 5. Pay `amount_due_sat` (fee + `client_balance_sat`), never `fee_sat`.
29
+ With no channel, pay on-chain: `rln_send_btc` to `payment.onchain.address`.
30
+ 6. Poll `kaleidoswap_lsp_get_order` with `order_id` + `access_token`, then
31
+ `rln_list_channels` until `is_usable`. Fees: `references/lsp.md`.
32
+ - Wants to hold an asset (USDT/XAUT) bought with the channel →
26
33
  `kaleidoswap_lsp_quote_asset_channel` then
27
34
  `kaleidoswap_lsp_create_asset_channel` with the fresh `rfq_id`.
28
- - Can't send → open a channel with spare on-chain BTC (`rln_open_channel`).
35
+ - Can't send → `rln_open_channel` with spare on-chain BTC.
29
36
  - Every order, open, close and payment is confirm-gated; recommend first,
30
37
  execute only on an explicit request. With `dry_run` true, describe only.
31
38
  - Heartbeat runs: `action` is `ok`, `flush`, `buy_capacity` or `alert`.
32
39
 
33
40
  ## Examples
34
41
  - "How healthy is my node?" → `rln_list_channels {}`
35
- - "Fee for 500k sats inbound?" → `kaleidoswap_lsp_estimate_fees {"lsp_balance_sat":500000,"client_balance_sat":0,"channel_expiry_blocks":4320}`
36
42
  - "Buy 500k inbound" → `rln_get_node_info {}` then `kaleidoswap_lsp_create_order {"client_pubkey":"<pubkey>","lsp_balance_sat":500000,"client_balance_sat":0,"channel_expiry_blocks":4320}`
43
+ - "A channel to swap BTC for USDT" → `kaleidoswap_lsp_estimate_fees {"lsp_balance_sat":50000,"client_balance_sat":4000,"channel_expiry_blocks":4320,"asset_id":"<USDT rgb id>","lsp_asset_amount":10000000}`
44
+ - "Pay the order on-chain" → `rln_send_btc {"address":"<payment.onchain.address>","amount_sat":6972}`
37
45
  - "A channel holding 100 USDT" → `kaleidoswap_lsp_quote_asset_channel {"asset":"USDT","asset_amount":100}`
38
- - "Did order 7a1b open?" → `kaleidoswap_lsp_get_order {"order_id":"7a1b"}`
@@ -0,0 +1,56 @@
1
+ # Buying a channel from the KaleidoSwap LSP (LSPS1)
2
+
3
+ Verified on signet against a node with 10,000 sats on-chain and no channels.
4
+ Field names are kaleido-mcp 0.4.2.
5
+
6
+ ## Which channel to buy
7
+
8
+ - Receive only: `lsp_balance_sat` = inbound you want, `client_balance_sat` 0.
9
+ - Swap BTC → USDT/XAUT over Lightning: you send BTC and receive the asset, so
10
+ the channel needs BTC outbound (`client_balance_sat`) and asset inbound
11
+ (`asset_id` + `lsp_asset_amount`, raw units = display × 10^precision).
12
+ The BTC leg goes out as one payment of the swap amount plus 3,000 sats
13
+ (the RGB node's HTLC minimum), and outbound is about 1,000 sats less than
14
+ `client_balance_sat`. So set `client_balance_sat` to at least the largest
15
+ swap you plan + 6,000. With 4,000 (the example below) the channel works but
16
+ no BTC → asset swap fits.
17
+ - Swap USDT/XAUT → BTC: you need the asset on your side; buy it with
18
+ `kaleidoswap_lsp_quote_asset_channel` → `kaleidoswap_lsp_create_asset_channel`.
19
+
20
+ ## Steps
21
+
22
+ 1. `kaleidoswap_lsp_get_info {}`: `lsp_connection_url`, `min_channel_balance_sat`
23
+ (50,000 on signet), `max_channel_expiry_blocks`, and the asset ids.
24
+ 2. `rln_connect_peer {"peer_pubkey_and_addr":"<lsp_connection_url>"}`
25
+ 3. `kaleidoswap_lsp_estimate_fees {"lsp_balance_sat":50000,"client_balance_sat":4000,"channel_expiry_blocks":4320,"asset_id":"<rgb:… USDT id>","lsp_asset_amount":10000000}`
26
+ → `total_fee` 2,972. (A 4,000-sat `client_balance_sat` buys inbound only;
27
+ for a 20,000-sat swap use 26,000.)
28
+ 4. Confirm the ORDER with the user, showing the order total (the estimate's
29
+ `total_fee` + `client_balance_sat`). `kaleidoswap_lsp_create_order` is
30
+ confirmation-gated on MCP hosts.
31
+ `kaleidoswap_lsp_create_order {"client_pubkey":"<pubkey>","lsp_balance_sat":50000,"client_balance_sat":4000,"channel_expiry_blocks":4320,"asset_id":"<rgb:… USDT id>","lsp_asset_amount":10000000}`
32
+ → `order_id`, `access_token`, `amount_due_sat` 6,972 (fee + `client_balance_sat`),
33
+ `fee_sat` 2,972, and `payment.bolt11` / `payment.onchain`, each with
34
+ `amount_sat` = `amount_due_sat`. Keep `order_id` and `access_token`. The
35
+ order expires after 10 minutes.
36
+ 5. Confirm the PAYMENT with the user, then pay `amount_due_sat`, never `fee_sat`.
37
+ Without a channel only on-chain works:
38
+ `rln_send_btc {"address":"<payment.onchain.address>","amount_sat":6972,"fee_rate":2}`.
39
+ 6. Poll `kaleidoswap_lsp_get_order {"order_id":"<order_id>","access_token":"<access_token>"}`
40
+ until `COMPLETED`. The LSP opens the channel about 30 s after it sees the
41
+ payment (0-conf); `rln_list_channels {}` shows it as `Opening`, then
42
+ `is_usable: true` after the funding transaction confirms (about 4 minutes
43
+ on signet).
44
+
45
+ For an asset channel, `kaleidoswap_lsp_quote_asset_channel` returns
46
+ `btc_amount_sat` (asset price) + `channel_fee_sat` = `total_sat`, all in sats;
47
+ `kaleidoswap_lsp_create_asset_channel` returns the same order shape, so pay its
48
+ `amount_due_sat`.
49
+
50
+ ## Fees (signet, 2026-10)
51
+
52
+ setup 1,000 + capacity about 1% of the channel + duration about 0.1 sat per
53
+ block, plus 1,000 for asset inbound (`lsp_asset_amount`) or 5,000 + 1% of the
54
+ price for an asset you buy (`client_asset_amount`); an order costs at least 2,000.
55
+ Examples: 50,000 inbound for 4,320 blocks = 2,000; the USDT channel above =
56
+ 2,972. Add the on-chain fee of the payment (about 300 sats at 2 sat/vB).
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: kaleido-trading
3
3
  description: "Quote and run KaleidoSwap atomic swaps between BTC and RGB assets (USDT, XAUT): pairs, assets, quotes, swap execution and swap status."
4
- tools: kaleidoswap_get_pairs, kaleidoswap_get_assets, kaleidoswap_get_quote, kaleidoswap_atomic_init, rln_atomic_taker, rln_get_node_info, kaleidoswap_atomic_execute, kaleidoswap_atomic_status, rln_refresh_transfers
4
+ tools: kaleidoswap_get_pairs, kaleidoswap_get_assets, kaleidoswap_get_quote, kaleidoswap_atomic_init, rln_atomic_taker, rln_get_node_info, kaleidoswap_atomic_execute, kaleidoswap_atomic_status, rln_refresh_transfers, rln_list_channels
5
5
  requires-tools: kaleidoswap_get_quote
6
6
  triggers: quote, swap, trade, pair, pairs, usdt, xaut, kaleidoswap, rfq, atomic, swap status
7
7
  metadata:
8
8
  author: kaleidoswap
9
- version: "0.6.0"
9
+ version: "0.7.0"
10
10
  ---
11
11
  # KaleidoSwap trading
12
12
 
@@ -14,6 +14,14 @@ Amounts in `kaleidoswap_get_quote` are **display units**: `from_amount: 0.0005`
14
14
  means 0.0005 BTC (50,000 sats; 1 BTC = 100,000,000 sats). Asset ids accept a
15
15
  ticker (`BTC`, `USDT`, `XAUT`) or an `rgb:…` id.
16
16
 
17
+ A swap runs over Lightning: it needs a channel with enough outbound in the
18
+ asset you send and enough inbound in the asset you receive. If
19
+ `rln_list_channels` shows none, buy one first (see `channel-manager`).
20
+ Sending BTC, the node sends the amount plus 3,000 sats (the RGB node's HTLC
21
+ minimum) in one payment, so one usable channel needs outbound of at least
22
+ amount + 3,000 sats. Less than that: offer a smaller swap (outbound − 3,000)
23
+ or a bigger channel.
24
+
17
25
  ## Do
18
26
  - Quote with exactly one amount: `from_amount` to sell a fixed input,
19
27
  `to_amount` to buy a fixed output. No amount given → ask for one.
@@ -212,6 +212,7 @@ describe('desktop mind — buy assets via atomic swap', () => {
212
212
  // The full deterministic chain, in order.
213
213
  expect(calls.map((c) => c.name)).toEqual([
214
214
  'kaleidoswap_get_quote',
215
+ 'rln_list_channels',
215
216
  'kaleidoswap_atomic_init',
216
217
  'rln_get_node_info',
217
218
  'rln_atomic_taker',
@@ -256,6 +257,7 @@ describe('desktop mind — buy assets via atomic swap', () => {
256
257
  expect(res.route).toBe('kaleidoswap-atomic');
257
258
  expect(calls.map((c) => c.name)).toEqual([
258
259
  'kaleidoswap_get_quote',
260
+ 'rln_list_channels',
259
261
  'kaleidoswap_atomic_init',
260
262
  'rln_get_node_info',
261
263
  'rln_atomic_taker',
@@ -310,3 +310,64 @@ describe('kaleidoswapAtomicRecipe — single confirmation', () => {
310
310
  expect(captured.map((c) => c.name)).toEqual(['kaleidoswap_get_quote']);
311
311
  });
312
312
  });
313
+
314
+ describe('kaleidoswapAtomicRecipe — outbound preflight (BTC leg + RLN HTLC minimum)', () => {
315
+ const btcQuote = {
316
+ rfq_id: 'rfq-2',
317
+ from_asset: { asset_id: 'BTC', ticker: 'BTC', layer: 'BTC_LN', amount_raw: 50_000_000, amount_display: '50,000 sats' },
318
+ to_asset: { asset_id: 'rgb:usdt', ticker: 'USDT', layer: 'RGB_LN', amount_raw: 30_000_000, amount_display: '30' },
319
+ };
320
+
321
+ it('reports the shortfall in plain numbers', async () => {
322
+ const { outboundShortfall } = await import('./kaleidoswap-atomic.js');
323
+ expect(outboundShortfall(btcQuote as never, { channels: [{ ready: true, is_usable: true, outbound_balance_msat: 51_000_000 }] })).toBe(
324
+ 'your channels can send at most 51,000 sats, and this swap needs 53,000 sats (the amount plus RLN\'s 3,000-sat HTLC minimum). Swap at most 48,000 sats, or buy a bigger channel.',
325
+ );
326
+ expect(outboundShortfall(btcQuote as never, { channels: [{ ready: true, next_outbound_htlc_limit_msat: 60_000_000 }] })).toBeNull();
327
+ expect(outboundShortfall(btcQuote as never, { channels: [] })).toMatch(/none can send right now/);
328
+ expect(outboundShortfall(btcQuote as never, { something: 'else' })).toBeNull();
329
+ expect(outboundShortfall(btcQuote as never, { channels: [{ ready: false, outbound_balance_msat: 900_000_000 }] })).toMatch(/none can send right now/);
330
+ expect(outboundShortfall(btcQuote as never, { channels: [{ channel_id: 'x' }] })).toBeNull();
331
+ expect(outboundShortfall(btcQuote as never, undefined)).toBeNull();
332
+ });
333
+
334
+ it('stops before the confirmation and the init when no channel can carry the BTC leg', async () => {
335
+ const calls: string[] = [];
336
+ const confirms: unknown[] = [];
337
+ const t = (name: string, response: unknown, spend = false) => ({
338
+ name,
339
+ description: name,
340
+ parameters: { type: 'object', properties: {} },
341
+ requiresConfirmation: spend,
342
+ handler: async () => {
343
+ calls.push(name);
344
+ return response;
345
+ },
346
+ });
347
+ const tools = new ToolRegistry([
348
+ new InProcessToolSource('k', [
349
+ t('kaleidoswap_get_quote', btcQuote),
350
+ t('kaleidoswap_atomic_init', { swapstring: 's', payment_hash: 'p' }, true),
351
+ t('kaleidoswap_atomic_execute', { status: 200 }, true),
352
+ ]),
353
+ new InProcessToolSource('rln', [
354
+ t('rln_list_channels', { channels: [{ ready: true, is_usable: true, outbound_balance_msat: 3_000_000 }] }),
355
+ t('rln_get_node_info', { pubkey: '03' }),
356
+ t('rln_atomic_taker', { ok: true }, true),
357
+ ]),
358
+ ]);
359
+ const res = await runRecipe(kaleidoswapAtomicRecipe, 'swap 50000 sats to usdt', {
360
+ provider: { name: 'none', async runTurn() { throw new Error('unused'); } } as LLMProvider,
361
+ tools,
362
+ slots: { from_asset: 'BTC', to_asset: 'USDT', amount: 50000, amount_side: 'from' },
363
+ onConfirm: async (c) => {
364
+ confirms.push(c);
365
+ return { approved: true };
366
+ },
367
+ });
368
+ expect(res.status).toBe('error');
369
+ expect(res.text).toMatch(/can send at most 3,000 sats.*needs 53,000 sats/);
370
+ expect(calls).toEqual(['kaleidoswap_get_quote', 'rln_list_channels']);
371
+ expect(confirms).toEqual([]);
372
+ });
373
+ });
@@ -85,6 +85,56 @@ interface QuoteResult {
85
85
  const layerFor = (asset: unknown): string =>
86
86
  /^btc$/i.test(String(asset)) ? 'BTC_LN' : 'RGB_LN';
87
87
 
88
+ /** RLN adds this to the taker's BTC HTLC in a BTC→RGB swap (rgb_htlc_min_msat). */
89
+ export const RLN_HTLC_MIN_MSAT = 3_000_000;
90
+
91
+ function paysBtcOverLightning(q?: QuoteResult): boolean {
92
+ const leg = q?.from_asset as { layer?: string; ticker?: string } | undefined;
93
+ return leg?.layer === 'BTC_LN' || (!leg?.layer && String(leg?.ticker ?? '').toUpperCase() === 'BTC');
94
+ }
95
+
96
+ /** The most one usable channel can send now, in msat; undefined when the shape is unknown. */
97
+ function maxOutboundMsat(channels: unknown): number | undefined {
98
+ let list: unknown = channels;
99
+ if (typeof list === 'string') {
100
+ try {
101
+ list = JSON.parse(list);
102
+ } catch {
103
+ return undefined;
104
+ }
105
+ }
106
+ const rows = Array.isArray(list) ? list : (list as { channels?: unknown })?.channels;
107
+ if (!Array.isArray(rows)) return undefined;
108
+ // No channels at all: nothing can send. Channels without readable amounts:
109
+ // unknown, so don't block.
110
+ if (!rows.length) return 0;
111
+ let best: number | undefined;
112
+ let readable = false;
113
+ for (const c of rows as Array<Record<string, unknown>>) {
114
+ const msat = Number(c.next_outbound_htlc_limit_msat ?? c.outbound_balance_msat);
115
+ if (!Number.isFinite(msat)) continue;
116
+ readable = true;
117
+ if (c.is_usable === false || c.ready === false) continue;
118
+ best = Math.max(best ?? 0, msat);
119
+ }
120
+ // Readable channels, none usable: nothing can send.
121
+ return best ?? (readable ? 0 : undefined);
122
+ }
123
+
124
+ const fmtSats = (msat: number) => `${Math.floor(msat / 1000).toLocaleString('en-US')} sats`;
125
+
126
+ /** Why the node can't send this swap's BTC leg, or null when it can (or can't tell). */
127
+ export function outboundShortfall(q: QuoteResult | undefined, channels: unknown): string | null {
128
+ const amount = Number(q?.from_asset?.amount_raw);
129
+ const max = maxOutboundMsat(channels);
130
+ if (!Number.isFinite(amount) || max === undefined) return null;
131
+ const need = amount + RLN_HTLC_MIN_MSAT;
132
+ if (max >= need) return null;
133
+ return max === 0
134
+ ? `this swap needs a Lightning channel that can send ${fmtSats(need)} (the amount plus RLN's 3,000-sat HTLC minimum), and none can send right now. Buy a channel with at least that much outbound first.`
135
+ : `your channels can send at most ${fmtSats(max)}, and this swap needs ${fmtSats(need)} (the amount plus RLN's 3,000-sat HTLC minimum). Swap at most ${fmtSats(Math.max(0, max - RLN_HTLC_MIN_MSAT))}, or buy a bigger channel.`;
136
+ }
137
+
88
138
  // Render a quote leg as "<amount> <TICKER>" from the MCP quote echo, or undefined
89
139
  // if the leg is missing (callers fall back to the user's slot values).
90
140
  const quoteLeg = (leg?: { ticker?: string; amount_display?: string }): string | undefined =>
@@ -133,6 +183,18 @@ export const kaleidoswapAtomicRecipe: Recipe = {
133
183
  : { ...base, from_amount: ctx.slots.amount };
134
184
  },
135
185
  },
186
+ // 1b. NODE: the BTC leg goes out as one Lightning HTLC of the amount plus
187
+ // RLN's 3,000-sat HTLC minimum, so a channel must be able to send that
188
+ // much. Stop here, before the confirmation, instead of failing with
189
+ // NoRoute after the maker has locked the swap.
190
+ {
191
+ tool: 'rln_list_channels',
192
+ as: 'channels',
193
+ optional: true,
194
+ args: () => ({}),
195
+ skipIf: (ctx) => !paysBtcOverLightning(ctx.results.quote as QuoteResult | undefined),
196
+ check: (ctx) => outboundShortfall(ctx.results.quote as QuoteResult | undefined, ctx.results.channels),
197
+ },
136
198
  // 2. MAKER locks the swap. SwapRequest is flat (asset ids + maker-unit
137
199
  // amounts) — sourced straight from the quote result, no re-scaling.
138
200
  // First spend step → the recipe-level confirm gate fires just before it.
@@ -250,11 +250,23 @@ export async function runRecipe(recipe: Recipe, text: string, opts: RunRecipeOpt
250
250
  if (step.skipIf?.(ctx)) continue;
251
251
  const args = step.args(ctx);
252
252
  if (!(await passesGate(step.tool, args))) return cancelled();
253
- const result = await opts.tools.execute(step.tool, args);
253
+ let result: unknown;
254
+ if (step.optional) {
255
+ try {
256
+ result = await opts.tools.execute(step.tool, args);
257
+ if (toolFailure(result)) result = undefined;
258
+ } catch {
259
+ result = undefined;
260
+ }
261
+ } else {
262
+ result = await opts.tools.execute(step.tool, args);
263
+ }
254
264
  ctx.results[step.as ?? step.tool] = result;
255
265
  opts.onStep?.(step.tool, args, result);
256
- const failure = toolFailure(result);
266
+ const failure = step.optional ? null : toolFailure(result);
257
267
  if (failure) return failedResult(recipe, ctx, inferences, failure);
268
+ const problem = step.check?.(ctx);
269
+ if (problem) return failedResult(recipe, ctx, inferences, problem);
258
270
  }
259
271
 
260
272
  // Final action.
@@ -35,6 +35,13 @@ export interface RecipeStep {
35
35
  as?: string;
36
36
  /** Skip this step when true (e.g. recipient is already an address). */
37
37
  skipIf?: (ctx: RecipeContext) => boolean;
38
+ /** A missing or failing tool doesn't stop the recipe (the result is then undefined). */
39
+ optional?: boolean;
40
+ /**
41
+ * Runs after the step's result is stored. A returned message stops the
42
+ * recipe there, before any later confirmation or spend.
43
+ */
44
+ check?: (ctx: RecipeContext) => string | null;
38
45
  }
39
46
 
40
47
  export interface Recipe {
@@ -197,6 +197,7 @@ describe('skill selection by surface', () => {
197
197
  ['Create a Lightning invoice for 5000 sats.', 'rgb-lightning-node'],
198
198
  ["what's my balance?", 'rgb-lightning-node'],
199
199
  ['buy 500k sats of inbound liquidity', 'channel-manager'],
200
+ ['I want to swap BTC for USDT but I have no channel. Buy me a channel from the KaleidoSwap LSP.', 'channel-manager'],
200
201
  ['unlock my node', 'kaleido-node'],
201
202
  ['pay lntbs10u1pexample with L-USDT', 'submarine-swaps'],
202
203
  ])('kaleido-mcp: %s → %s', (query, expected) => {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "source": "kaleido-mcp",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "tools": {
5
5
  "get_market_data": {
6
6
  "required": [
@@ -393,7 +393,7 @@
393
393
  "number",
394
394
  "null"
395
395
  ],
396
- "description": "Internal: total cost in sats (from the quote). Do not set."
396
+ "description": "Internal: estimated total cost in sats (from the quote). Do not set."
397
397
  },
398
398
  "btc_amount_sat": {
399
399
  "type": [
@@ -428,15 +428,15 @@
428
428
  "properties": {
429
429
  "client_pubkey": {
430
430
  "type": "string",
431
- "description": ""
431
+ "description": "Your node pubkey (rln_get_node_info)"
432
432
  },
433
433
  "lsp_balance_sat": {
434
434
  "type": "integer",
435
- "description": ""
435
+ "description": "Inbound liquidity the LSP puts on its side, in sats"
436
436
  },
437
437
  "client_balance_sat": {
438
438
  "type": "integer",
439
- "description": ""
439
+ "description": "Outbound liquidity pushed to you, in sats; you pay for it on top of the fee"
440
440
  },
441
441
  "required_channel_confirmations": {
442
442
  "type": "integer",
@@ -448,27 +448,31 @@
448
448
  },
449
449
  "channel_expiry_blocks": {
450
450
  "type": "integer",
451
- "description": ""
451
+ "description": "Channel lease in blocks (max: kaleidoswap_lsp_get_info options.max_channel_expiry_blocks)"
452
452
  },
453
453
  "announce_channel": {
454
454
  "type": "boolean",
455
455
  "description": "default false (private)"
456
456
  },
457
+ "refund_onchain_address": {
458
+ "type": "string",
459
+ "description": "BTC address for refunds if the order fails after an on-chain payment"
460
+ },
457
461
  "asset_id": {
458
462
  "type": "string",
459
- "description": ""
463
+ "description": "RGB asset id for an asset channel"
460
464
  },
461
465
  "lsp_asset_amount": {
462
466
  "type": "number",
463
- "description": ""
467
+ "description": "Asset on the LSP side, raw units (display amount x 10^precision)"
464
468
  },
465
469
  "client_asset_amount": {
466
470
  "type": "number",
467
- "description": ""
471
+ "description": "Asset pushed to you, raw units; requires rfq_id"
468
472
  },
469
473
  "rfq_id": {
470
474
  "type": "string",
471
- "description": ""
475
+ "description": "Fresh rfq_id from kaleidoswap_get_quote when client_asset_amount > 0"
472
476
  }
473
477
  }
474
478
  },
@@ -485,11 +489,11 @@
485
489
  },
486
490
  "lsp_balance_sat": {
487
491
  "type": "integer",
488
- "description": ""
492
+ "description": "Inbound liquidity on the LSP side, in sats"
489
493
  },
490
494
  "client_balance_sat": {
491
495
  "type": "integer",
492
- "description": ""
496
+ "description": "Outbound liquidity pushed to you, in sats"
493
497
  },
494
498
  "channel_expiry_blocks": {
495
499
  "type": "integer",
@@ -505,15 +509,19 @@
505
509
  },
506
510
  "asset_id": {
507
511
  "type": "string",
508
- "description": ""
512
+ "description": "RGB asset id for an asset channel"
509
513
  },
510
514
  "lsp_asset_amount": {
511
515
  "type": "number",
512
- "description": ""
516
+ "description": "Asset on the LSP side, raw units"
517
+ },
518
+ "client_asset_amount": {
519
+ "type": "number",
520
+ "description": "Asset pushed to you, raw units; requires rfq_id"
513
521
  },
514
522
  "rfq_id": {
515
523
  "type": "string",
516
- "description": ""
524
+ "description": "Fresh rfq_id from kaleidoswap_get_quote when client_asset_amount > 0"
517
525
  }
518
526
  }
519
527
  },
@@ -523,12 +531,17 @@
523
531
  },
524
532
  "kaleidoswap_lsp_get_order": {
525
533
  "required": [
526
- "order_id"
534
+ "order_id",
535
+ "access_token"
527
536
  ],
528
537
  "properties": {
529
538
  "order_id": {
530
539
  "type": "string",
531
540
  "description": ""
541
+ },
542
+ "access_token": {
543
+ "type": "string",
544
+ "description": "Per-order token from kaleidoswap_lsp_create_order / kaleidoswap_lsp_create_asset_channel"
532
545
  }
533
546
  }
534
547
  },
@@ -79,3 +79,14 @@ describe('confirmReadback', () => {
79
79
  .toBe('Send 100 sats to mum over Arkade. Confirm?');
80
80
  });
81
81
  });
82
+
83
+ describe('confirmReadback: LSP orders', () => {
84
+ it('says what is ordered and that the total is paid separately', () => {
85
+ expect(
86
+ confirmReadback({ name: 'kaleidoswap_lsp_create_order', arguments: { client_pubkey: '02ab', lsp_balance_sat: 50000, client_balance_sat: 0, channel_expiry_blocks: 4320 } }),
87
+ ).toBe('Order a Lightning channel from the LSP with 50,000 sats inbound. The order total is paid in a separate step. Confirm?');
88
+ expect(
89
+ confirmReadback({ name: 'kaleidoswap_lsp_create_asset_channel', arguments: { asset: 'USDT', asset_amount: 10, rfq_id: 'r' } }),
90
+ ).toBe('Order a channel from the LSP with 10 USDT inbound. The order total is paid in a separate step. Confirm?');
91
+ });
92
+ });
@@ -106,6 +106,15 @@ export function confirmReadback(call: { name: string; arguments: Record<string,
106
106
  return ask(`Accept atomic swap ${shortRef(String(a.swapstring ?? ''))} on your node`);
107
107
  case 'execute_swap':
108
108
  return ask(`Swap ${asset(a.amount, a.from_asset)} for ${label(a.to_asset)}`);
109
+ // The order total is only known once the LSP creates the order; the
110
+ // payment that follows is confirmed separately with that amount.
111
+ case 'lsp_create_order':
112
+ case 'kaleidoswap_lsp_create_order': {
113
+ const pushed = num(a.client_balance_sat) ? `, ${sats(a.client_balance_sat)} pushed to you` : '';
114
+ return ask(`Order a Lightning channel from the LSP with ${sats(a.lsp_balance_sat)} inbound${pushed}. The order total is paid in a separate step`);
115
+ }
116
+ case 'kaleidoswap_lsp_create_asset_channel':
117
+ return ask(`Order a channel from the LSP with ${asset(a.asset_amount, a.asset)} inbound. The order total is paid in a separate step`);
109
118
  default:
110
119
  // Unknown but spend-flagged tool → a generic, still-honest readback.
111
120
  return getWalletTool(name)?.spend ? ask(`Confirm ${name.replace(/_/g, ' ')}`) : null;