@kaleidorg/mind 0.4.0 → 0.5.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.
- package/dist/funnel.d.ts +19 -0
- package/dist/funnel.d.ts.map +1 -1
- package/dist/funnel.js +48 -10
- package/dist/funnel.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/kaleidoswap/contract.d.ts +3 -3
- package/dist/kaleidoswap/contract.d.ts.map +1 -1
- package/dist/kaleidoswap/contract.js +16 -4
- package/dist/kaleidoswap/contract.js.map +1 -1
- package/dist/knowledge/bitcoin-copilot.d.ts.map +1 -1
- package/dist/knowledge/bitcoin-copilot.js +102 -0
- package/dist/knowledge/bitcoin-copilot.js.map +1 -1
- package/dist/knowledge/btc-map.d.ts +14 -17
- package/dist/knowledge/btc-map.d.ts.map +1 -1
- package/dist/knowledge/btc-map.js +66 -266
- package/dist/knowledge/btc-map.js.map +1 -1
- package/dist/lsps1/contract.d.ts.map +1 -1
- package/dist/lsps1/contract.js +28 -10
- package/dist/lsps1/contract.js.map +1 -1
- package/dist/recipe/buy-asset-channel.d.ts +26 -0
- package/dist/recipe/buy-asset-channel.d.ts.map +1 -0
- package/dist/recipe/buy-asset-channel.js +112 -0
- package/dist/recipe/buy-asset-channel.js.map +1 -0
- package/dist/recipe/kaleidoswap-atomic.d.ts +26 -18
- package/dist/recipe/kaleidoswap-atomic.d.ts.map +1 -1
- package/dist/recipe/kaleidoswap-atomic.js +101 -63
- package/dist/recipe/kaleidoswap-atomic.js.map +1 -1
- package/dist/recipe/kaleidoswap-channel-order.d.ts +35 -0
- package/dist/recipe/kaleidoswap-channel-order.d.ts.map +1 -0
- package/dist/recipe/kaleidoswap-channel-order.js +493 -0
- package/dist/recipe/kaleidoswap-channel-order.js.map +1 -0
- package/dist/recipe/kaleidoswap-price.d.ts +21 -0
- package/dist/recipe/kaleidoswap-price.d.ts.map +1 -0
- package/dist/recipe/kaleidoswap-price.js +57 -0
- package/dist/recipe/kaleidoswap-price.js.map +1 -0
- package/dist/recipe/runner.d.ts +7 -1
- package/dist/recipe/runner.d.ts.map +1 -1
- package/dist/recipe/runner.js +115 -29
- package/dist/recipe/runner.js.map +1 -1
- package/dist/recipe/swap.d.ts +26 -1
- package/dist/recipe/swap.d.ts.map +1 -1
- package/dist/recipe/swap.js +108 -13
- package/dist/recipe/swap.js.map +1 -1
- package/dist/recipe/types.d.ts +25 -1
- package/dist/recipe/types.d.ts.map +1 -1
- package/dist/skills/registry.d.ts +33 -1
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +45 -1
- package/dist/skills/registry.js.map +1 -1
- package/package.json +1 -1
- package/skills/README.md +3 -0
- package/skills/kaleido-lsps/SKILL.md +101 -43
- package/skills/kaleido-trading/SKILL.md +81 -31
- package/skills/merchant-finder/SKILL.md +96 -66
- package/skills/rgb-lightning-node/SKILL.md +108 -0
- package/skills/wallet-assistant/SKILL.md +32 -21
- package/src/funnel.ts +66 -11
- package/src/index.ts +14 -2
- package/src/kaleidoswap/contract.test.ts +7 -2
- package/src/kaleidoswap/contract.ts +27 -5
- package/src/knowledge/bitcoin-copilot.ts +111 -0
- package/src/knowledge/btc-map.test.ts +53 -96
- package/src/knowledge/btc-map.ts +72 -287
- package/src/lsps1/contract.ts +32 -14
- package/src/recipe/buy-asset-channel.test.ts +148 -0
- package/src/recipe/buy-asset-channel.ts +118 -0
- package/src/recipe/kaleidoswap-atomic.test.ts +134 -61
- package/src/recipe/kaleidoswap-atomic.ts +112 -66
- package/src/recipe/kaleidoswap-channel-order.test.ts +333 -0
- package/src/recipe/kaleidoswap-channel-order.ts +548 -0
- package/src/recipe/kaleidoswap-price.ts +68 -0
- package/src/recipe/recipe.test.ts +61 -5
- package/src/recipe/runner.ts +128 -31
- package/src/recipe/swap.ts +109 -13
- package/src/recipe/types.ts +25 -1
- package/src/skills/registry.ts +52 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"btc-map.d.ts","sourceRoot":"","sources":["../../src/knowledge/btc-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"btc-map.d.ts","sourceRoot":"","sources":["../../src/knowledge/btc-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,iDAAiD;AACjD,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACrC,wEAAwE;IACxE,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACnD;AAED,mDAAmD;AACnD,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE;IAC5B,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;AAEhC,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,kFAAkF;IAClF,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,uEAAuE;IACvE,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AA2BD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,iBAAsB,GAAG,UAAU,CAoH/E"}
|
|
@@ -1,134 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* BTC Map tool source — exposes `find_merchant_locations`
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* BTC Map tool source — exposes `find_merchant_locations` so the agent can
|
|
3
|
+
* answer "where can I spend Bitcoin near me?" using the SAME tool name on
|
|
4
|
+
* every surface.
|
|
5
5
|
*
|
|
6
6
|
* - mobile → injects device GPS + a live BTC Map fetch
|
|
7
7
|
* - desktop → injects a live fetch (or a server-side cache)
|
|
8
|
-
* - eval / playground → no injection, falls back to the bundled offline list
|
|
9
8
|
*
|
|
10
9
|
* Pure data + orchestration — NO network in core. The host injects the
|
|
11
|
-
* `location` resolver and the `fetch` adapter
|
|
12
|
-
*
|
|
10
|
+
* `location` resolver and the `fetch` adapter. Without them the tool returns
|
|
11
|
+
* a clear error: there is NO offline / sample fallback (intentional — fake
|
|
12
|
+
* data is worse than a clean failure that tells the user what's wrong).
|
|
13
13
|
*
|
|
14
14
|
* The result shape mirrors what rate's host returns today, so a mobile host
|
|
15
15
|
* can swap its bespoke merchant tools for this factory verbatim.
|
|
16
16
|
*/
|
|
17
17
|
const FIND = 'find_merchant_locations';
|
|
18
|
-
const INFO = 'get_merchant_info';
|
|
19
|
-
/** A tiny, hand-curated sample so the skill works offline out of the box. */
|
|
20
|
-
export const BTC_MAP_SAMPLE = [
|
|
21
|
-
{
|
|
22
|
-
id: 'lugano-bitcoinpeople-cafe',
|
|
23
|
-
name: 'Bitcoin People Café',
|
|
24
|
-
category: 'cafe',
|
|
25
|
-
address: 'Via Pessina 12',
|
|
26
|
-
city: 'Lugano',
|
|
27
|
-
lat: 46.0037,
|
|
28
|
-
lng: 8.9511,
|
|
29
|
-
acceptedAssets: ['lightning', 'onchain'],
|
|
30
|
-
description: 'Specialty espresso bar; Plan ₿ Lugano partner.',
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
id: 'lugano-bistro-libertine',
|
|
34
|
-
name: 'Bistro Libertine',
|
|
35
|
-
category: 'restaurant',
|
|
36
|
-
address: 'Piazza della Riforma 3',
|
|
37
|
-
city: 'Lugano',
|
|
38
|
-
lat: 46.004,
|
|
39
|
-
lng: 8.952,
|
|
40
|
-
acceptedAssets: ['lightning', 'usdt', 'onchain'],
|
|
41
|
-
description: 'Italian-Swiss bistro, lunch + dinner. Accepts Tether on Liquid.',
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
id: 'lugano-bookshop-volta',
|
|
45
|
-
name: 'Libreria Volta',
|
|
46
|
-
category: 'shop',
|
|
47
|
-
address: 'Via Cattedrale 8',
|
|
48
|
-
city: 'Lugano',
|
|
49
|
-
lat: 46.0055,
|
|
50
|
-
lng: 8.9499,
|
|
51
|
-
acceptedAssets: ['lightning'],
|
|
52
|
-
description: 'Independent bookshop; Italian, English and German titles.',
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
id: 'lisbon-meson-andaluz',
|
|
56
|
-
name: 'Mesón Andaluz',
|
|
57
|
-
category: 'restaurant',
|
|
58
|
-
address: 'Rua das Flores 42',
|
|
59
|
-
city: 'Lisbon',
|
|
60
|
-
lat: 38.71,
|
|
61
|
-
lng: -9.143,
|
|
62
|
-
acceptedAssets: ['lightning', 'onchain'],
|
|
63
|
-
description: 'Andalusian tapas in Chiado. Bitcoin accepted since 2022.',
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
id: 'lisbon-surf-bitcoin',
|
|
67
|
-
name: 'Surf & Sats',
|
|
68
|
-
category: 'shop',
|
|
69
|
-
address: 'Av. da Liberdade 180',
|
|
70
|
-
city: 'Lisbon',
|
|
71
|
-
lat: 38.7211,
|
|
72
|
-
lng: -9.1466,
|
|
73
|
-
acceptedAssets: ['lightning'],
|
|
74
|
-
description: 'Surfboard rental and lessons in Costa da Caparica.',
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
id: 'sansalvador-elzonte-hope',
|
|
78
|
-
name: 'Hope House El Zonte',
|
|
79
|
-
category: 'cafe',
|
|
80
|
-
address: 'Calle Principal',
|
|
81
|
-
city: 'El Zonte',
|
|
82
|
-
lat: 13.492,
|
|
83
|
-
lng: -89.4395,
|
|
84
|
-
acceptedAssets: ['lightning', 'onchain'],
|
|
85
|
-
description: 'Bitcoin Beach hub. Coffee, community, and a Lightning ATM.',
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
id: 'sansalvador-elzonte-garten',
|
|
89
|
-
name: 'Garten Restaurante',
|
|
90
|
-
category: 'restaurant',
|
|
91
|
-
address: 'Bitcoin Beach',
|
|
92
|
-
city: 'El Zonte',
|
|
93
|
-
lat: 13.4925,
|
|
94
|
-
lng: -89.438,
|
|
95
|
-
acceptedAssets: ['lightning'],
|
|
96
|
-
description: 'Beachfront restaurant, full Bitcoin payments since 2021.',
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
id: 'nyc-pubkey',
|
|
100
|
-
name: 'PubKey',
|
|
101
|
-
category: 'bar',
|
|
102
|
-
address: '85 Washington Pl',
|
|
103
|
-
city: 'New York',
|
|
104
|
-
lat: 40.732,
|
|
105
|
-
lng: -73.999,
|
|
106
|
-
acceptedAssets: ['lightning', 'onchain'],
|
|
107
|
-
description: 'Bitcoin bar in Greenwich Village — meetups, Lightning tap.',
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
id: 'prague-paralelni-polis',
|
|
111
|
-
name: 'Paralelní Polis',
|
|
112
|
-
category: 'cafe',
|
|
113
|
-
address: 'Dělnická 43',
|
|
114
|
-
city: 'Prague',
|
|
115
|
-
lat: 50.105,
|
|
116
|
-
lng: 14.448,
|
|
117
|
-
acceptedAssets: ['lightning', 'onchain', 'monero'],
|
|
118
|
-
description: 'Crypto-only café and hackerspace — no fiat accepted, ever.',
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
id: 'amsterdam-bitcoin-embassy',
|
|
122
|
-
name: 'Bitcoin Embassy Amsterdam',
|
|
123
|
-
category: 'cafe',
|
|
124
|
-
address: 'Nieuwezijds Voorburgwal 162',
|
|
125
|
-
city: 'Amsterdam',
|
|
126
|
-
lat: 52.374,
|
|
127
|
-
lng: 4.893,
|
|
128
|
-
acceptedAssets: ['lightning', 'onchain'],
|
|
129
|
-
description: 'Co-working café and meetup hub, Lightning tap on draft beer.',
|
|
130
|
-
},
|
|
131
|
-
];
|
|
132
18
|
/** Clamp a value to a numeric range, returning the default when input is bad. */
|
|
133
19
|
function clamp(n, lo, hi, dflt) {
|
|
134
20
|
const v = Number(n);
|
|
@@ -136,24 +22,6 @@ function clamp(n, lo, hi, dflt) {
|
|
|
136
22
|
return dflt;
|
|
137
23
|
return Math.min(hi, Math.max(lo, v));
|
|
138
24
|
}
|
|
139
|
-
/** Substring scoring used by the offline fallback (matches the old behavior). */
|
|
140
|
-
function fuzzyScore(query, text) {
|
|
141
|
-
const q = query.toLowerCase();
|
|
142
|
-
const t = text.toLowerCase();
|
|
143
|
-
if (!q)
|
|
144
|
-
return 1;
|
|
145
|
-
if (t.includes(q))
|
|
146
|
-
return 1;
|
|
147
|
-
let hits = 0;
|
|
148
|
-
let qi = 0;
|
|
149
|
-
for (let i = 0; i < t.length && qi < q.length; i++) {
|
|
150
|
-
if (t[i] === q[qi]) {
|
|
151
|
-
hits++;
|
|
152
|
-
qi++;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
return hits / q.length;
|
|
156
|
-
}
|
|
157
25
|
/** Map a Merchant → the response row the model sees (stable for rate parity). */
|
|
158
26
|
function row(m) {
|
|
159
27
|
return {
|
|
@@ -171,90 +39,42 @@ function row(m) {
|
|
|
171
39
|
accepts_lightning: m.acceptedAssets?.includes('lightning') ?? true,
|
|
172
40
|
};
|
|
173
41
|
}
|
|
174
|
-
/** Offline search: substring + optional category over the bundled list. */
|
|
175
|
-
function searchOffline(merchants, query, category, limit) {
|
|
176
|
-
let filtered = merchants;
|
|
177
|
-
if (category) {
|
|
178
|
-
const c = category.toLowerCase().trim();
|
|
179
|
-
filtered = filtered.filter((m) => (m.category ?? '').toLowerCase() === c);
|
|
180
|
-
}
|
|
181
|
-
const q = (query ?? '').trim();
|
|
182
|
-
if (q.length >= 2) {
|
|
183
|
-
filtered = filtered
|
|
184
|
-
.map((m) => {
|
|
185
|
-
const hay = `${m.name ?? ''} ${m.description ?? ''} ${m.address ?? ''} ${m.city ?? ''}`;
|
|
186
|
-
const score = fuzzyScore(q, m.name ?? '') * 3 +
|
|
187
|
-
fuzzyScore(q, m.address ?? '') * 2 +
|
|
188
|
-
fuzzyScore(q, hay) * 1;
|
|
189
|
-
return { m, score };
|
|
190
|
-
})
|
|
191
|
-
.filter((x) => x.score > 0.3)
|
|
192
|
-
.sort((a, b) => b.score - a.score)
|
|
193
|
-
.map((x) => x.m);
|
|
194
|
-
}
|
|
195
|
-
return filtered.slice(0, limit);
|
|
196
|
-
}
|
|
197
42
|
/**
|
|
198
|
-
* Build a ToolSource exposing `find_merchant_locations
|
|
43
|
+
* Build a ToolSource exposing `find_merchant_locations`.
|
|
199
44
|
*
|
|
200
|
-
* Resolution order
|
|
45
|
+
* Resolution order:
|
|
201
46
|
* 1. `near_address` provided → opts.location.geocode → opts.fetch (live)
|
|
202
47
|
* 2. opts.location.getCurrent → opts.fetch (live)
|
|
203
|
-
* 3. fall through to offline substring search over opts.offlineMerchants
|
|
204
48
|
*
|
|
205
|
-
* Any step that fails
|
|
206
|
-
*
|
|
49
|
+
* Any step that fails returns `{success:false, error}` with a message that
|
|
50
|
+
* tells the user (and the model) what's actually wrong — no fake-data
|
|
51
|
+
* fallback. Either we have a real merchant list or we say we don't.
|
|
207
52
|
*/
|
|
208
53
|
export function createBtcMapToolSource(opts = {}) {
|
|
209
|
-
const offline = opts.offlineMerchants ?? BTC_MAP_SAMPLE;
|
|
210
54
|
const defaultLimit = opts.k ?? 10;
|
|
211
55
|
const find = {
|
|
212
56
|
name: FIND,
|
|
213
57
|
description: "Find Bitcoin-accepting merchants near the user using live BTC Map data " +
|
|
214
58
|
"and the device's real location when available. Use when the user wants " +
|
|
215
59
|
'merchants, shops, restaurants, cafes, bars, ATMs, or places to spend ' +
|
|
216
|
-
'Bitcoin nearby.
|
|
217
|
-
'
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
near_address: { type: 'string', description: 'Address/city to search around instead of the current location' },
|
|
224
|
-
radius_km: { type: 'number', description: 'Search radius in km (0.25–50, default 5)' },
|
|
225
|
-
limit: { type: 'number', description: 'Max number of results (1–20, default 10)' },
|
|
226
|
-
},
|
|
227
|
-
},
|
|
228
|
-
};
|
|
229
|
-
const info = {
|
|
230
|
-
name: INFO,
|
|
231
|
-
description: 'Get detailed information about one specific merchant by id or name — ' +
|
|
232
|
-
'full address, accepted assets, contact details. Use after ' +
|
|
233
|
-
'find_merchant_locations when the user asks for more on a specific result.',
|
|
60
|
+
'Bitcoin nearby. Map the request to the smallest useful set of arguments. ' +
|
|
61
|
+
'For generic "where can I spend sats / bitcoin merchants in X" use only ' +
|
|
62
|
+
'near_address (or nothing). Never put "sats", "btc", "bitcoin" or spend verbs ' +
|
|
63
|
+
'into query or category — this source is already Bitcoin-only. When uncertain ' +
|
|
64
|
+
'or the request is generic, prefer fewer fields rather than guessing. ' +
|
|
65
|
+
'The returned merchants (or a clean error) are the only factual source — ' +
|
|
66
|
+
'never invent places.',
|
|
234
67
|
parameters: {
|
|
235
68
|
type: 'object',
|
|
236
69
|
properties: {
|
|
237
|
-
|
|
238
|
-
|
|
70
|
+
query: { type: 'string', description: 'OPTIONAL — a name, food type, or descriptive term implied by the user (e.g. "coffee", "pizza", "food", "atm", "shop"). Good for vague or natural phrasing. **OMIT** for generic "spend sats", "where can I spend", "merchants", or "places to spend btc". **NEVER** include "sats", "btc", "bitcoin", "spend", or currency terms — the source is already Bitcoin-only and this over-filters to zero results.' },
|
|
71
|
+
category: { type: 'string', description: 'OPTIONAL — set only when the request cleanly matches one specific allowed venue type: restaurant, cafe, bar, shop, grocery, lodging, atm. Leave empty for generic or mixed "spend sats / where to spend bitcoin" requests. Never guess a category (e.g. "shop") for a generic spend query. Never use generic nouns like merchant/place/store as the category value.' },
|
|
72
|
+
near_address: { type: 'string', description: 'City or address to search around when the user names a location instead of (or with) "near me". e.g. "Lugano", "Lisbon", "the center". The host will attempt to geocode it.' },
|
|
73
|
+
radius_km: { type: 'number', description: 'OPTIONAL — search radius in km (0.25–50). OMIT entirely unless the user explicitly named a distance ("within 2 km"). The default (5) is already applied server-side.' },
|
|
74
|
+
limit: { type: 'number', description: 'OPTIONAL — max results (1–20, default 10). Omit unless the user named a count.' },
|
|
239
75
|
},
|
|
240
76
|
},
|
|
241
77
|
};
|
|
242
|
-
async function tryLive(center, radiusMeters, query, category, limit) {
|
|
243
|
-
if (!opts.fetch)
|
|
244
|
-
return null;
|
|
245
|
-
try {
|
|
246
|
-
return await opts.fetch({
|
|
247
|
-
center: { lat: center.lat, lng: center.lng },
|
|
248
|
-
radiusMeters,
|
|
249
|
-
query,
|
|
250
|
-
category,
|
|
251
|
-
limit,
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
catch {
|
|
255
|
-
return null;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
78
|
async function resolveCenter(near_address) {
|
|
259
79
|
if (!opts.location)
|
|
260
80
|
return null;
|
|
@@ -265,7 +85,7 @@ export function createBtcMapToolSource(opts = {}) {
|
|
|
265
85
|
return { ...pt, label: near_address, precise: false };
|
|
266
86
|
}
|
|
267
87
|
catch {
|
|
268
|
-
/* fall through */
|
|
88
|
+
/* geocode failed — fall through to getCurrent */
|
|
269
89
|
}
|
|
270
90
|
}
|
|
271
91
|
try {
|
|
@@ -282,83 +102,63 @@ export function createBtcMapToolSource(opts = {}) {
|
|
|
282
102
|
const radius_km = clamp(args.radius_km, 0.25, 50, 5);
|
|
283
103
|
const limit = clamp(args.limit, 1, 20, defaultLimit);
|
|
284
104
|
const radiusMeters = radius_km * 1000;
|
|
285
|
-
//
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
precise_location: !!center.precise,
|
|
295
|
-
center: { lat: center.lat, lng: center.lng },
|
|
296
|
-
merchants: live.map(row),
|
|
297
|
-
total_found: live.length,
|
|
298
|
-
message: live.length > 0
|
|
299
|
-
? `Found ${live.length} Bitcoin merchant${live.length === 1 ? '' : 's'} near ${where}${query ? ` matching "${query}"` : ''}.`
|
|
300
|
-
: `No Bitcoin merchants found within ${radius_km} km of ${where}. Try widening the radius.`,
|
|
301
|
-
};
|
|
302
|
-
}
|
|
105
|
+
// Live path requires BOTH a location resolver and a fetch adapter — they
|
|
106
|
+
// are host-injected. Without either, the tool can't produce real merchant
|
|
107
|
+
// data, and we refuse to invent.
|
|
108
|
+
if (!opts.fetch) {
|
|
109
|
+
return {
|
|
110
|
+
success: false,
|
|
111
|
+
error: 'Merchant search is unavailable: the host has not injected a BTC Map fetch adapter. ' +
|
|
112
|
+
'No offline / sample data is used — connect a fetcher or try again later.',
|
|
113
|
+
};
|
|
303
114
|
}
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
message: found.length > 0
|
|
313
|
-
? `Showing ${found.length} merchant${found.length === 1 ? '' : 's'} from the offline list${query ? ` matching "${query}"` : ''}.`
|
|
314
|
-
: `No merchants in the offline list matched${query ? ` "${query}"` : ''}. The host hasn't injected a live BTC Map fetch.`,
|
|
315
|
-
};
|
|
316
|
-
}
|
|
317
|
-
async function getInfo(args) {
|
|
318
|
-
const idArg = args.merchant_id;
|
|
319
|
-
const nameArg = args.merchant_name ? String(args.merchant_name).trim() : '';
|
|
320
|
-
let m;
|
|
321
|
-
if (idArg !== undefined && idArg !== null && idArg !== '') {
|
|
322
|
-
const want = String(idArg);
|
|
323
|
-
m = offline.find((x) => String(x.id) === want);
|
|
115
|
+
const center = await resolveCenter(near_address);
|
|
116
|
+
if (!center) {
|
|
117
|
+
return {
|
|
118
|
+
success: false,
|
|
119
|
+
error: near_address
|
|
120
|
+
? `Could not locate "${near_address}". Check the spelling or try a nearby city.`
|
|
121
|
+
: 'Could not determine your location. Pass `near_address` (a city or address) to search a specific area.',
|
|
122
|
+
};
|
|
324
123
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
124
|
+
let merchants;
|
|
125
|
+
try {
|
|
126
|
+
merchants = await opts.fetch({
|
|
127
|
+
center: { lat: center.lat, lng: center.lng },
|
|
128
|
+
radiusMeters,
|
|
129
|
+
query,
|
|
130
|
+
category,
|
|
131
|
+
limit,
|
|
132
|
+
});
|
|
333
133
|
}
|
|
334
|
-
|
|
335
|
-
const suggestions = nameArg
|
|
336
|
-
? offline
|
|
337
|
-
.map((x) => ({ name: x.name ?? '', score: fuzzyScore(nameArg.toLowerCase(), (x.name ?? '').toLowerCase()) }))
|
|
338
|
-
.filter((r) => r.score > 0.3)
|
|
339
|
-
.sort((a, b) => b.score - a.score)
|
|
340
|
-
.slice(0, 3)
|
|
341
|
-
.map((r) => r.name)
|
|
342
|
-
: [];
|
|
134
|
+
catch (e) {
|
|
343
135
|
return {
|
|
344
136
|
success: false,
|
|
345
|
-
error: `
|
|
346
|
-
suggestions: suggestions.length ? suggestions : undefined,
|
|
137
|
+
error: `BTC Map fetch failed: ${e?.message ?? String(e)}.`,
|
|
347
138
|
};
|
|
348
139
|
}
|
|
349
|
-
|
|
140
|
+
const where = center.label || (center.precise ? 'your location' : 'the requested area');
|
|
141
|
+
return {
|
|
142
|
+
success: true,
|
|
143
|
+
source: 'btcmap',
|
|
144
|
+
precise_location: !!center.precise,
|
|
145
|
+
center: { lat: center.lat, lng: center.lng },
|
|
146
|
+
merchants: merchants.map(row),
|
|
147
|
+
total_found: merchants.length,
|
|
148
|
+
message: merchants.length > 0
|
|
149
|
+
? `Found ${merchants.length} Bitcoin merchant${merchants.length === 1 ? '' : 's'} near ${where}${query ? ` matching "${query}"` : ''}.`
|
|
150
|
+
: `No Bitcoin merchants found within ${radius_km} km of ${where}. Try widening the radius.`,
|
|
151
|
+
};
|
|
350
152
|
}
|
|
351
153
|
async function execute(name, args) {
|
|
352
154
|
if (name === FIND)
|
|
353
155
|
return findLocations(args);
|
|
354
|
-
if (name === INFO)
|
|
355
|
-
return getInfo(args);
|
|
356
156
|
throw new Error(`btc-map: unknown tool "${name}"`);
|
|
357
157
|
}
|
|
358
158
|
return {
|
|
359
159
|
id: 'btc-map',
|
|
360
|
-
listTools: () => [find
|
|
361
|
-
has: (name) => name === FIND
|
|
160
|
+
listTools: () => [find],
|
|
161
|
+
has: (name) => name === FIND,
|
|
362
162
|
execute,
|
|
363
163
|
};
|
|
364
164
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"btc-map.js","sourceRoot":"","sources":["../../src/knowledge/btc-map.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"btc-map.js","sourceRoot":"","sources":["../../src/knowledge/btc-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/lsps1/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C,wCAAwC;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAcD;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/lsps1/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C,wCAAwC;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAcD;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,YAAY,EAmDrC,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAEzC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEnE;AAED,yCAAyC;AACzC,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/E,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wDAAwD;IACxD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,IAAI,GAAE,gBAAqB,GAAG,mBAAmB,CAiBvH"}
|
package/dist/lsps1/contract.js
CHANGED
|
@@ -33,21 +33,39 @@ function t(name, description, properties = {}, required = [], spend = false) {
|
|
|
33
33
|
export const LSPS1_TOOLS = [
|
|
34
34
|
t('lsp_get_info', "Get the LSP's capabilities: minimum/maximum channel size, supported expiries, fee structure, accepted payment options. Use this before estimating or ordering a channel. No args."),
|
|
35
35
|
t('lsp_get_network_info', "Get the LSP's Lightning network info: pubkey, host, port, connect URI. Useful to display the counterparty or pre-connect a peer. No args."),
|
|
36
|
-
t('lsp_estimate_fees', "Estimate the
|
|
36
|
+
t('lsp_estimate_fees', "Estimate the channel-order fee BEFORE committing. Returns setup_fee, capacity_fee, duration_fee, total_fee (all in sats). Re-estimate rather than reusing a stale value.", {
|
|
37
37
|
lsp_balance_sat: { type: 'number', description: "Sats the LSP commits on their side (inbound capacity for the user)." },
|
|
38
|
-
client_balance_sat: { type: 'number', description: "Sats the user pre-funds into the channel (push amount).
|
|
39
|
-
channel_expiry_blocks: { type: 'number', description: '
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
client_balance_sat: { type: 'number', description: "Sats the user pre-funds into the channel (push amount). Default 0." },
|
|
39
|
+
channel_expiry_blocks: { type: 'number', description: 'Lease duration in blocks. Default 4320 (~30 days). Maker maximum is typically 20160 (~140 days).' },
|
|
40
|
+
// RGB asset channels (optional):
|
|
41
|
+
asset_id: { type: 'string', description: 'For RGB asset channels — the asset to provision liquidity for.' },
|
|
42
|
+
lsp_asset_amount: { type: 'number', description: 'Asset units the LSP commits (RGB channels only).' },
|
|
43
|
+
client_asset_amount: { type: 'number', description: 'Asset units the user pre-funds (RGB channels only). Requires rfq_id.' },
|
|
44
|
+
rfq_id: { type: 'string', description: 'Quote id from kaleidoswap_get_quote — required when client_asset_amount > 0.' },
|
|
45
|
+
token: { type: 'string', description: 'Optional discount/affiliate token.' },
|
|
46
|
+
}, ['lsp_balance_sat', 'client_balance_sat', 'channel_expiry_blocks']),
|
|
47
|
+
t('lsp_create_order', "Create a channel order. SPEND: confirmation-gated. Returns order_id + access_token + a payment.bolt11.invoice the user pays to lock the order. The channel opens only after payment.", {
|
|
48
|
+
client_pubkey: { type: 'string', description: "User's Lightning node pubkey — the LSP opens the channel TO this node. Get it from rln_get_node_info." },
|
|
42
49
|
lsp_balance_sat: { type: 'number', description: "Sats the LSP commits on their side (inbound capacity for the user)." },
|
|
43
|
-
client_balance_sat: { type: 'number', description:
|
|
44
|
-
|
|
50
|
+
client_balance_sat: { type: 'number', description: "Sats the user pre-funds. Default 0." },
|
|
51
|
+
required_channel_confirmations: { type: 'number', description: 'Number of confs the user wants before considering the channel usable. Default 1.' },
|
|
52
|
+
funding_confirms_within_blocks: { type: 'number', description: 'Max blocks within which funding must confirm. Default 6.' },
|
|
53
|
+
channel_expiry_blocks: { type: 'number', description: 'Lease duration in blocks. Default 4320 (~30 days).' },
|
|
54
|
+
announce_channel: { type: 'boolean', description: 'Public (true) or unannounced (false). Default true.' },
|
|
45
55
|
refund_onchain_address: { type: 'string', description: 'Optional on-chain refund address if the LSP cannot open the channel.' },
|
|
46
|
-
|
|
56
|
+
// RGB asset channels (optional):
|
|
57
|
+
asset_id: { type: 'string', description: 'For RGB asset channels.' },
|
|
58
|
+
lsp_asset_amount: { type: 'number', description: 'Asset units the LSP commits.' },
|
|
59
|
+
client_asset_amount: { type: 'number', description: 'Asset units the user pre-funds.' },
|
|
60
|
+
rfq_id: { type: 'string', description: 'Required when client_asset_amount > 0.' },
|
|
61
|
+
token: { type: 'string', description: 'Optional discount/affiliate token.' },
|
|
62
|
+
email: { type: 'string', description: 'Optional contact for order updates.' },
|
|
63
|
+
}, ['client_pubkey', 'lsp_balance_sat'],
|
|
47
64
|
/* spend */ true),
|
|
48
|
-
t('lsp_get_order', 'Check the status of an LSPS1 order
|
|
65
|
+
t('lsp_get_order', 'Check the status of an LSPS1 order. order_state progresses CREATED → CHANNEL_OPENING → COMPLETED (or FAILED). ALWAYS pass BOTH the order_id and the access_token from lsp_create_order (the access_token is required for order status).', {
|
|
49
66
|
order_id: { type: 'string', description: 'The order id from lsp_create_order.' },
|
|
50
|
-
|
|
67
|
+
access_token: { type: 'string', description: 'The per-order access token returned by lsp_create_order. Required for non-admin reads.' },
|
|
68
|
+
}, ['order_id', 'access_token']),
|
|
51
69
|
];
|
|
52
70
|
/** All LSPS1 tool names that move funds (confirmation-gated). */
|
|
53
71
|
export const LSPS1_SPEND_TOOLS = new Set(LSPS1_TOOLS.filter((t) => t.spend).map((t) => t.name));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/lsps1/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAU7D,SAAS,CAAC,CAAC,IAAY,EAAE,WAAmB,EAAE,aAAoB,EAAE,EAAE,WAAqB,EAAE,EAAE,KAAK,GAAG,KAAK;IAC1G,OAAO;QACL,IAAI;QACJ,WAAW;QACX,KAAK;QACL,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE;KACrD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,CAAC,CAAC,cAAc,EACd,mLAAmL,CAAC;IAEtL,CAAC,CAAC,sBAAsB,EACtB,2IAA2I,CAAC;IAE9I,CAAC,CAAC,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/lsps1/contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in "buy an asset channel" recipe — the onboarding buy.
|
|
3
|
+
*
|
|
4
|
+
* The user has on-chain BTC but no Lightning channel yet, and wants to HOLD an
|
|
5
|
+
* RGB asset (USDT, XAUT). They can't swap (no channel to swap inside), so they
|
|
6
|
+
* buy a NEW channel from the maker LSP pre-loaded with the asset. One quote,
|
|
7
|
+
* one spend:
|
|
8
|
+
*
|
|
9
|
+
* "buy 100 usdt" / "get me 50 xaut" / "i want 200 usdt"
|
|
10
|
+
* ↓ 1 model inference (slot extraction; 0 when the regex hits)
|
|
11
|
+
* kaleidoswap_lsp_quote_asset_channel ← maker prices the asset + channel
|
|
12
|
+
* kaleidoswap_lsp_create_asset_channel 🔒 ← (final) order it; pay to open
|
|
13
|
+
*
|
|
14
|
+
* Distinct from `swapRecipe`: a swap names a source asset ("swap 10 usdt FOR
|
|
15
|
+
* btc", "buy btc WITH usdt") and needs an existing channel. This is the
|
|
16
|
+
* no-source, no-channel onboarding path — "buy <amount> <asset>" with nothing
|
|
17
|
+
* to spend it from — so it must be SELECTED BEFORE swap for that phrasing.
|
|
18
|
+
*
|
|
19
|
+
* Opt-in: register via `Funnel.recipes` (like `kaleidoswapAtomicRecipe`). The
|
|
20
|
+
* host binds `kaleidoswap_lsp_*` to its transport (maker REST / MCP / WDK).
|
|
21
|
+
*/
|
|
22
|
+
import type { Recipe } from './types.js';
|
|
23
|
+
/** "buy 100 usdt" / "get me 50 xaut" / "i want 200 usdt" / "purchase 10 xaut". */
|
|
24
|
+
export declare function extractBuyAsset(text: string): Record<string, unknown> | null;
|
|
25
|
+
export declare const buyAssetChannelRecipe: Recipe;
|
|
26
|
+
//# sourceMappingURL=buy-asset-channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buy-asset-channel.d.ts","sourceRoot":"","sources":["../../src/recipe/buy-asset-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AA4BzC,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAW5E;AAED,eAAO,MAAM,qBAAqB,EAAE,MAqDnC,CAAC"}
|