@kaleidorg/mind 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -8
- package/dist/context/compress.d.ts.map +1 -1
- package/dist/context/compress.js +1 -0
- package/dist/context/compress.js.map +1 -1
- package/dist/context/rgb-units.d.ts +18 -0
- package/dist/context/rgb-units.d.ts.map +1 -0
- package/dist/context/rgb-units.js +86 -0
- package/dist/context/rgb-units.js.map +1 -0
- package/dist/engine.d.ts +59 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +196 -17
- package/dist/engine.js.map +1 -1
- package/dist/fastpath/fastpath.d.ts +6 -1
- package/dist/fastpath/fastpath.d.ts.map +1 -1
- package/dist/fastpath/fastpath.js +16 -2
- package/dist/fastpath/fastpath.js.map +1 -1
- package/dist/fastpath/render.d.ts +2 -0
- package/dist/fastpath/render.d.ts.map +1 -0
- package/dist/fastpath/render.js +58 -0
- package/dist/fastpath/render.js.map +1 -0
- package/dist/funnel.d.ts.map +1 -1
- package/dist/funnel.js +34 -18
- package/dist/funnel.js.map +1 -1
- package/dist/guards.d.ts +63 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +284 -0
- package/dist/guards.js.map +1 -0
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/kaleidoswap/contract.d.ts +3 -4
- package/dist/kaleidoswap/contract.d.ts.map +1 -1
- package/dist/kaleidoswap/contract.js +3 -17
- package/dist/kaleidoswap/contract.js.map +1 -1
- package/dist/providers/openai.d.ts +64 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +233 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/types.d.ts +33 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/qvac/config.d.ts +1 -1
- package/dist/qvac/config.js +1 -1
- package/dist/qvac/index.d.ts +1 -0
- package/dist/qvac/index.d.ts.map +1 -1
- package/dist/qvac/index.js +1 -0
- package/dist/qvac/index.js.map +1 -1
- package/dist/qvac/models.d.ts +31 -0
- package/dist/qvac/models.d.ts.map +1 -0
- package/dist/qvac/models.js +80 -0
- package/dist/qvac/models.js.map +1 -0
- package/dist/qvac/parse.d.ts +11 -0
- package/dist/qvac/parse.d.ts.map +1 -1
- package/dist/qvac/parse.js +29 -7
- package/dist/qvac/parse.js.map +1 -1
- package/dist/qvac/provider.d.ts +14 -4
- package/dist/qvac/provider.d.ts.map +1 -1
- package/dist/qvac/provider.js +33 -8
- package/dist/qvac/provider.js.map +1 -1
- package/dist/qvac/stream.d.ts +3 -5
- package/dist/qvac/stream.d.ts.map +1 -1
- package/dist/qvac/stream.js.map +1 -1
- package/dist/qvac/tools.d.ts +5 -0
- package/dist/qvac/tools.d.ts.map +1 -1
- package/dist/qvac/tools.js +10 -0
- package/dist/qvac/tools.js.map +1 -1
- package/dist/recipe/issue-asset.d.ts.map +1 -1
- package/dist/recipe/issue-asset.js +42 -16
- package/dist/recipe/issue-asset.js.map +1 -1
- package/dist/recipe/runner.d.ts.map +1 -1
- package/dist/recipe/runner.js +1 -0
- package/dist/recipe/runner.js.map +1 -1
- package/dist/recipe/submarine-pay.d.ts +17 -0
- package/dist/recipe/submarine-pay.d.ts.map +1 -0
- package/dist/recipe/submarine-pay.js +79 -0
- package/dist/recipe/submarine-pay.js.map +1 -0
- package/dist/skills/registry.js +1 -1
- package/dist/skills/select.d.ts +20 -0
- package/dist/skills/select.d.ts.map +1 -0
- package/dist/skills/select.js +32 -0
- package/dist/skills/select.js.map +1 -0
- package/dist/submarine/contract.d.ts +42 -0
- package/dist/submarine/contract.d.ts.map +1 -0
- package/dist/submarine/contract.js +73 -0
- package/dist/submarine/contract.js.map +1 -0
- package/dist/testing/mock-wallet.d.ts +24 -0
- package/dist/testing/mock-wallet.d.ts.map +1 -1
- package/dist/testing/mock-wallet.js +75 -6
- package/dist/testing/mock-wallet.js.map +1 -1
- package/dist/wallet/confirm.d.ts.map +1 -1
- package/dist/wallet/confirm.js +27 -9
- package/dist/wallet/confirm.js.map +1 -1
- package/package.json +6 -1
- package/skills/README.md +1 -0
- package/skills/kaleido-trading/SKILL.md +22 -28
- package/skills/kaleido-trading/references/api.md +3 -3
- package/skills/rgb-lightning-node/SKILL.md +32 -12
- package/skills/spark-wallet/SKILL.md +1 -0
- package/skills/submarine-swaps/SKILL.md +48 -0
- package/src/context/compress.ts +1 -0
- package/src/context/rgb-units.test.ts +42 -0
- package/src/context/rgb-units.ts +89 -0
- package/src/engine.test.ts +133 -3
- package/src/engine.ts +254 -19
- package/src/fastpath/fastpath.ts +22 -2
- package/src/fastpath/render.test.ts +39 -0
- package/src/fastpath/render.ts +56 -0
- package/src/funnel.mind.test.ts +15 -17
- package/src/funnel.ts +34 -19
- package/src/guards.test.ts +399 -0
- package/src/guards.ts +299 -0
- package/src/index.ts +37 -1
- package/src/kaleidoswap/contract.test.ts +8 -16
- package/src/kaleidoswap/contract.ts +4 -32
- package/src/providers/openai.test.ts +127 -0
- package/src/providers/openai.ts +282 -0
- package/src/providers/types.ts +35 -0
- package/src/qvac/config.ts +1 -1
- package/src/qvac/index.ts +10 -0
- package/src/qvac/models.ts +98 -0
- package/src/qvac/parse.test.ts +7 -0
- package/src/qvac/parse.ts +33 -1
- package/src/qvac/provider.test.ts +54 -1
- package/src/qvac/provider.ts +49 -13
- package/src/qvac/stream.ts +3 -5
- package/src/qvac/tools.ts +10 -0
- package/src/recipe/issue-asset.test.ts +39 -0
- package/src/recipe/issue-asset.ts +41 -13
- package/src/recipe/runner.ts +1 -0
- package/src/recipe/submarine-pay.test.ts +87 -0
- package/src/recipe/submarine-pay.ts +78 -0
- package/src/skills/registry.ts +1 -1
- package/src/skills/select.ts +41 -0
- package/src/submarine/contract.ts +112 -0
- package/src/testing/mock-wallet.ts +73 -6
- package/src/wallet/confirm.ts +27 -9
package/dist/engine.js
CHANGED
|
@@ -14,24 +14,69 @@
|
|
|
14
14
|
* inference is delegated to a remote provider.
|
|
15
15
|
*/
|
|
16
16
|
import { compressToolResult } from './context/compress.js';
|
|
17
|
+
import { callKey, declinedToolResult, detectWalletAction, hasCapableTool, noToolReply, findUngroundedPaymentData, fixSatsBtcConversions, ungroundedReply, validateToolArgs, } from './guards.js';
|
|
18
|
+
import { confirmReadback } from './wallet/confirm.js';
|
|
19
|
+
import { annotateRgbBalances, fixRgbBalanceUnits } from './context/rgb-units.js';
|
|
20
|
+
import { selectAvailableSkill } from './skills/select.js';
|
|
21
|
+
const STOPPED_MESSAGE = 'I had to stop after several steps — please try a more specific request.';
|
|
22
|
+
const TOOL_CALL_FAILED_MESSAGE = "I couldn't put together a valid request for that. Please rephrase it with the exact values (asset, amount, recipient).";
|
|
23
|
+
function toolErrorMessage(errors, cutOff) {
|
|
24
|
+
if (cutOff) {
|
|
25
|
+
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.';
|
|
26
|
+
}
|
|
27
|
+
const detail = errors.map((e) => e.message).join('; ');
|
|
28
|
+
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.`;
|
|
29
|
+
}
|
|
17
30
|
export class Engine {
|
|
18
31
|
provider;
|
|
19
32
|
registry;
|
|
20
33
|
defaultSystem;
|
|
21
34
|
defaultMaxTurns;
|
|
22
35
|
compressOpts;
|
|
36
|
+
guardPaymentData;
|
|
37
|
+
fixAmounts;
|
|
38
|
+
thinkOnForcedCalls;
|
|
39
|
+
guardMissingTools;
|
|
40
|
+
endTurnOnDecline;
|
|
23
41
|
constructor(opts) {
|
|
24
42
|
this.provider = opts.provider;
|
|
25
43
|
this.registry = opts.tools;
|
|
26
44
|
this.defaultSystem = opts.defaultSystem;
|
|
27
45
|
this.defaultMaxTurns = opts.defaultMaxTurns ?? 5;
|
|
46
|
+
this.guardPaymentData = opts.guardUngroundedPaymentData ?? true;
|
|
47
|
+
this.fixAmounts = opts.fixAmountConversions ?? true;
|
|
48
|
+
this.thinkOnForcedCalls = opts.thinkOnForcedCalls ?? false;
|
|
49
|
+
this.guardMissingTools = opts.guardMissingTools ?? true;
|
|
50
|
+
this.endTurnOnDecline = opts.endTurnOnDecline ?? true;
|
|
28
51
|
this.compressOpts = opts.compressToolOutput
|
|
29
52
|
? opts.compressToolOutput === true
|
|
30
53
|
? {}
|
|
31
54
|
: opts.compressToolOutput
|
|
32
55
|
: undefined;
|
|
33
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Select the skill for `query` among those that can act with this engine's
|
|
59
|
+
* tools (skills whose `requires-tools` are missing are skipped), then
|
|
60
|
+
* compose its system prompt. Pass the result to runAgentic:
|
|
61
|
+
*
|
|
62
|
+
* const { system, allowedTools } = await engine.composeSkill(skills, question, base);
|
|
63
|
+
* await engine.runAgentic([{ role: 'system', content: system }, { role: 'user', content: question }], { allowedTools });
|
|
64
|
+
*/
|
|
65
|
+
async composeSkill(skills, query, base) {
|
|
66
|
+
const skill = selectAvailableSkill(skills, query, await this.registry.listTools());
|
|
67
|
+
return { skill, ...skills.compose(base, skill) };
|
|
68
|
+
}
|
|
34
69
|
async runAgentic(messages, opts = {}) {
|
|
70
|
+
const sessionKey = opts.sessionKey ?? `mind-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
71
|
+
try {
|
|
72
|
+
return await this.runAgenticSession(messages, { ...opts, sessionKey });
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
if (!opts.sessionKey)
|
|
76
|
+
await this.provider.endSession?.(sessionKey).catch(() => { });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async runAgenticSession(messages, opts) {
|
|
35
80
|
const maxTurns = opts.maxTurns ?? this.defaultMaxTurns;
|
|
36
81
|
const hasSystem = messages.some((m) => m.role === 'system');
|
|
37
82
|
const system = hasSystem ? undefined : this.defaultSystem;
|
|
@@ -45,16 +90,35 @@ export class Engine {
|
|
|
45
90
|
const executed = [];
|
|
46
91
|
let lastRequestId;
|
|
47
92
|
let finalText = '';
|
|
93
|
+
// Set when finalText is one of the engine's own fixed replies, which the
|
|
94
|
+
// answer guards below must not rewrite.
|
|
95
|
+
let engineReply = false;
|
|
48
96
|
let turns = 0;
|
|
49
97
|
const inference = [];
|
|
50
|
-
|
|
98
|
+
const seen = new Map();
|
|
99
|
+
let toolErrorRetries = 0;
|
|
100
|
+
const lastUser = [...messages].reverse().find((m) => m.role === 'user')?.content ?? '';
|
|
101
|
+
const action = this.guardMissingTools ? detectWalletAction(lastUser) : null;
|
|
102
|
+
if (action && !hasCapableTool(action, allTools.map((t) => t.name))) {
|
|
103
|
+
const text = noToolReply(action);
|
|
104
|
+
history.push({ role: 'assistant', content: text });
|
|
105
|
+
return { text, turns: 0, toolCalls: [], messages: history, latencyMs: Date.now() - startedAt, inference };
|
|
106
|
+
}
|
|
107
|
+
// A retry after an unreadable tool call does not count against maxTurns.
|
|
108
|
+
for (let turn = 1; turn <= maxTurns + toolErrorRetries; turn++) {
|
|
51
109
|
turns = turn;
|
|
52
110
|
if (opts.signal?.aborted)
|
|
53
111
|
break;
|
|
54
112
|
const out = await this.provider.runTurn({
|
|
113
|
+
sessionKey: opts.sessionKey,
|
|
55
114
|
messages: history,
|
|
56
115
|
tools: allTools,
|
|
57
116
|
system,
|
|
117
|
+
// A forced first call only picks the tool and its arguments; reasoning
|
|
118
|
+
// there costs most of the turn's time on small models.
|
|
119
|
+
...(turn === 1 && opts.firstTurnToolChoice && allTools.length
|
|
120
|
+
? { toolChoice: opts.firstTurnToolChoice, ...(this.thinkOnForcedCalls ? {} : { thinking: 'off' }) }
|
|
121
|
+
: {}),
|
|
58
122
|
onToken: opts.onToken ? (t) => opts.onToken(t, turn) : undefined,
|
|
59
123
|
signal: opts.signal,
|
|
60
124
|
});
|
|
@@ -63,38 +127,125 @@ export class Engine {
|
|
|
63
127
|
inference.push(out.inference);
|
|
64
128
|
if (out.requestId)
|
|
65
129
|
opts.onStart?.(out.requestId, turn);
|
|
66
|
-
finalText = (out.text || '').trim();
|
|
130
|
+
finalText = out.incomplete ? '' : (out.text || '').trim();
|
|
131
|
+
// The model tried to call a tool but the call didn't parse: tell it what
|
|
132
|
+
// went wrong and let it try again (once) instead of showing the broken
|
|
133
|
+
// frame as the answer.
|
|
134
|
+
if ((!out.toolCalls || out.toolCalls.length === 0) && out.toolErrors?.length) {
|
|
135
|
+
if (toolErrorRetries < 1) {
|
|
136
|
+
toolErrorRetries += 1;
|
|
137
|
+
const cutOff = out.inference?.status === 'truncated';
|
|
138
|
+
history.push({ role: 'assistant', content: out.rawContent || finalText });
|
|
139
|
+
history.push({ role: 'tool', content: JSON.stringify({ error: toolErrorMessage(out.toolErrors, cutOff) }) });
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
finalText = TOOL_CALL_FAILED_MESSAGE;
|
|
143
|
+
engineReply = true;
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
67
146
|
// No tool calls ⇒ the model produced its final answer.
|
|
68
|
-
if (!out.toolCalls || out.toolCalls.length === 0)
|
|
147
|
+
if (!out.toolCalls || out.toolCalls.length === 0) {
|
|
148
|
+
if (!finalText && executed.length)
|
|
149
|
+
finalText = await this.recoverAnswer(history, system, executed, inference, opts, turn);
|
|
150
|
+
else if (!finalText && out.incomplete)
|
|
151
|
+
finalText = (out.text || '').trim();
|
|
69
152
|
break;
|
|
153
|
+
}
|
|
70
154
|
// Anchor the next turn with the raw assistant frame.
|
|
71
155
|
history.push({ role: 'assistant', content: out.rawContent || finalText });
|
|
156
|
+
let repeatedAgain = false;
|
|
157
|
+
const declinedThisTurn = [];
|
|
72
158
|
for (const call of out.toolCalls) {
|
|
73
159
|
opts.onToolCall?.({ name: call.name, arguments: call.arguments }, turn);
|
|
74
160
|
const def = await this.registry.getDef(call.name);
|
|
161
|
+
const key = callKey(call.name, call.arguments);
|
|
162
|
+
const previous = seen.get(key);
|
|
163
|
+
let args = call.arguments;
|
|
75
164
|
let result;
|
|
76
|
-
if (
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
165
|
+
if (previous) {
|
|
166
|
+
previous.count += 1;
|
|
167
|
+
if (previous.count > 2)
|
|
168
|
+
repeatedAgain = true;
|
|
169
|
+
result = {
|
|
170
|
+
error: `You already called ${call.name} with these arguments; the result was: ` +
|
|
171
|
+
`${this.toHistoryContent(previous.result)}. Do not call it again — answer the user now.`,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
else if (!def) {
|
|
175
|
+
result = { error: `Unknown tool "${call.name}".` };
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
const check = validateToolArgs(def, call.arguments);
|
|
179
|
+
if (!check.ok) {
|
|
180
|
+
result = {
|
|
181
|
+
error: `Invalid arguments for ${call.name}: ${check.errors.join('; ')}. Fix them or ask the user for the missing values.`,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
else if (def.requiresConfirmation) {
|
|
185
|
+
args = check.args;
|
|
186
|
+
const summary = confirmReadback({ name: call.name, arguments: args }) ?? undefined;
|
|
187
|
+
const decision = opts.onConfirm
|
|
188
|
+
? await opts.onConfirm({ name: call.name, arguments: args, ...(summary ? { summary } : {}) })
|
|
189
|
+
: { approved: false, reason: 'no confirmation handler available' };
|
|
190
|
+
if (decision.approved) {
|
|
191
|
+
result = await this.safeExecute(call.name, args);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
result = declinedToolResult(call.name, decision.reason);
|
|
195
|
+
declinedThisTurn.push(summary ? summary.replace(/\.?\s*Confirm\?$/, '') : call.name.replace(/_/g, ' '));
|
|
196
|
+
}
|
|
82
197
|
}
|
|
83
198
|
else {
|
|
84
|
-
|
|
199
|
+
args = check.args;
|
|
200
|
+
result = await this.safeExecute(call.name, args);
|
|
85
201
|
}
|
|
86
202
|
}
|
|
87
|
-
|
|
88
|
-
|
|
203
|
+
if (!previous) {
|
|
204
|
+
// A mutating (confirm-gated) call can change what reads return.
|
|
205
|
+
if (def?.requiresConfirmation)
|
|
206
|
+
seen.clear();
|
|
207
|
+
seen.set(key, { result, count: 1 });
|
|
89
208
|
}
|
|
90
|
-
executed.push({ name: call.name, arguments:
|
|
91
|
-
opts.onToolResult?.({ name: call.name, arguments:
|
|
92
|
-
history.push({ role: 'tool', content: this.toHistoryContent(result) });
|
|
209
|
+
executed.push({ name: call.name, arguments: args, result });
|
|
210
|
+
opts.onToolResult?.({ name: call.name, arguments: args, result }, turn);
|
|
211
|
+
history.push({ role: 'tool', content: this.toHistoryContent(this.fixAmounts ? annotateRgbBalances(result) : result) });
|
|
212
|
+
}
|
|
213
|
+
if (this.endTurnOnDecline && declinedThisTurn.length && declinedThisTurn.length === out.toolCalls.length) {
|
|
214
|
+
finalText = `Cancelled — you declined: ${declinedThisTurn.join('; ')}. Nothing was sent or changed.`;
|
|
215
|
+
engineReply = true;
|
|
216
|
+
break;
|
|
93
217
|
}
|
|
94
|
-
if (
|
|
95
|
-
|
|
218
|
+
if (repeatedAgain) {
|
|
219
|
+
const forced = await this.provider.runTurn({
|
|
220
|
+
sessionKey: opts.sessionKey,
|
|
221
|
+
messages: history,
|
|
222
|
+
tools: [],
|
|
223
|
+
system,
|
|
224
|
+
onToken: opts.onToken ? (t) => opts.onToken(t, turn) : undefined,
|
|
225
|
+
signal: opts.signal,
|
|
226
|
+
});
|
|
227
|
+
if (forced.inference)
|
|
228
|
+
inference.push(forced.inference);
|
|
229
|
+
finalText = (forced.text || '').trim() || 'I could not get a different result from the wallet — please try a more specific request.';
|
|
230
|
+
break;
|
|
96
231
|
}
|
|
97
232
|
}
|
|
233
|
+
// Never return an empty answer (e.g. the last turn ran out of tokens).
|
|
234
|
+
if (!finalText && !opts.signal?.aborted) {
|
|
235
|
+
finalText = STOPPED_MESSAGE;
|
|
236
|
+
engineReply = true;
|
|
237
|
+
}
|
|
238
|
+
if (this.fixAmounts && finalText && !engineReply) {
|
|
239
|
+
finalText = fixRgbBalanceUnits(fixSatsBtcConversions(finalText), executed.map((e) => e.result));
|
|
240
|
+
}
|
|
241
|
+
if (this.guardPaymentData && finalText && !engineReply) {
|
|
242
|
+
const ungrounded = findUngroundedPaymentData(finalText, [
|
|
243
|
+
...messages.map((m) => m.content),
|
|
244
|
+
...executed.map((e) => e.result),
|
|
245
|
+
]);
|
|
246
|
+
if (ungrounded.length)
|
|
247
|
+
finalText = ungroundedReply(ungrounded);
|
|
248
|
+
}
|
|
98
249
|
// Append the final answer so the returned conversation is complete (the
|
|
99
250
|
// loop breaks before pushing the no-tool-call turn).
|
|
100
251
|
if (finalText)
|
|
@@ -109,6 +260,34 @@ export class Engine {
|
|
|
109
260
|
inference,
|
|
110
261
|
};
|
|
111
262
|
}
|
|
263
|
+
/**
|
|
264
|
+
* The model ran tools but produced no visible answer (e.g. reasoning used the
|
|
265
|
+
* whole output budget). Ask once more without tools; if that is empty too,
|
|
266
|
+
* show the last tool result instead of an empty reply.
|
|
267
|
+
*/
|
|
268
|
+
async recoverAnswer(history, system, executed, inference, opts, turn) {
|
|
269
|
+
if (opts.signal?.aborted)
|
|
270
|
+
return '';
|
|
271
|
+
const retry = await this.provider.runTurn({
|
|
272
|
+
sessionKey: opts.sessionKey,
|
|
273
|
+
messages: [
|
|
274
|
+
...history,
|
|
275
|
+
{ role: 'user', content: 'Answer my question now from the tool results above, in a few short sentences.' },
|
|
276
|
+
],
|
|
277
|
+
tools: [],
|
|
278
|
+
system,
|
|
279
|
+
onToken: opts.onToken ? (t) => opts.onToken(t, turn) : undefined,
|
|
280
|
+
signal: opts.signal,
|
|
281
|
+
});
|
|
282
|
+
if (retry.inference)
|
|
283
|
+
inference.push(retry.inference);
|
|
284
|
+
const text = retry.incomplete ? '' : (retry.text || '').trim();
|
|
285
|
+
if (text)
|
|
286
|
+
return text;
|
|
287
|
+
const last = executed[executed.length - 1];
|
|
288
|
+
const body = compressToolResult(last.result, this.compressOpts ?? {}).content;
|
|
289
|
+
return `I couldn't phrase an answer in time. Here is what ${last.name.replace(/_/g, ' ')} returned:\n\n${body.length > 2000 ? `${body.slice(0, 2000)}…` : body}`;
|
|
290
|
+
}
|
|
112
291
|
async cancel(requestId) {
|
|
113
292
|
await this.provider.cancel?.(requestId);
|
|
114
293
|
}
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,8 @@ export interface FastIntent {
|
|
|
15
15
|
name: string;
|
|
16
16
|
/** Contract tool to call when this intent matches. */
|
|
17
17
|
tool: string;
|
|
18
|
+
/** Equivalent tools to try, in order, when the host doesn't expose `tool`. */
|
|
19
|
+
fallbackTools?: string[];
|
|
18
20
|
/** True only when this intent UNAMBIGUOUSLY matches the text. */
|
|
19
21
|
match: (text: string) => boolean;
|
|
20
22
|
/** Optional args derived from the text (default: none). */
|
|
@@ -22,7 +24,10 @@ export interface FastIntent {
|
|
|
22
24
|
}
|
|
23
25
|
export interface FastHit {
|
|
24
26
|
intent: FastIntent;
|
|
27
|
+
/** The intent's primary tool. */
|
|
25
28
|
tool: string;
|
|
29
|
+
/** Primary tool first, then the fallbacks. */
|
|
30
|
+
tools: string[];
|
|
26
31
|
args: Record<string, unknown>;
|
|
27
32
|
}
|
|
28
33
|
export declare class FastPath {
|
|
@@ -33,6 +38,6 @@ export declare class FastPath {
|
|
|
33
38
|
/** The first unambiguously-matching intent, or null. */
|
|
34
39
|
select(text: string): FastHit | null;
|
|
35
40
|
}
|
|
36
|
-
/** Default wallet read intents (balance / receive address / price). */
|
|
41
|
+
/** Default wallet read intents (balance / RGB assets / receive address / price). */
|
|
37
42
|
export declare const WALLET_FAST_INTENTS: FastIntent[];
|
|
38
43
|
//# sourceMappingURL=fastpath.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastpath.d.ts","sourceRoot":"","sources":["../../src/fastpath/fastpath.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACjC,2DAA2D;IAC3D,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAe;IAC9B,YAAY,OAAO,GAAE,UAAU,EAAO,EAErC;IACD,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAE5B;IACD,IAAI,IAAI,UAAU,EAAE,CAEnB;IACD,wDAAwD;IACxD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"fastpath.d.ts","sourceRoot":"","sources":["../../src/fastpath/fastpath.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,iEAAiE;IACjE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACjC,2DAA2D;IAC3D,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAe;IAC9B,YAAY,OAAO,GAAE,UAAU,EAAO,EAErC;IACD,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAE5B;IACD,IAAI,IAAI,UAAU,EAAE,CAEnB;IACD,wDAAwD;IACxD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAKnC;CACF;AAQD,oFAAoF;AACpF,eAAO,MAAM,mBAAmB,EAAE,UAAU,EA2B3C,CAAC"}
|
|
@@ -25,22 +25,36 @@ export class FastPath {
|
|
|
25
25
|
/** The first unambiguously-matching intent, or null. */
|
|
26
26
|
select(text) {
|
|
27
27
|
const intent = this.intents.find((i) => i.match(text));
|
|
28
|
-
return intent
|
|
28
|
+
return intent
|
|
29
|
+
? { intent, tool: intent.tool, tools: [intent.tool, ...(intent.fallbackTools ?? [])], args: intent.args?.(text) ?? {} }
|
|
30
|
+
: null;
|
|
29
31
|
}
|
|
30
32
|
}
|
|
31
33
|
// A "spend or compound" guard — never fast-path anything that moves money or
|
|
32
34
|
// chains another action ("send", "pay", "and then", "swap").
|
|
33
35
|
const ACTIONY = /\b(send|pay|transfer|swap|buy|sell|then|after that)\b/i;
|
|
34
|
-
|
|
36
|
+
// Asks that create something are not reads, even when they mention assets.
|
|
37
|
+
const CREATEY = /\b(issue|mint|create|make|new|generate|invoice|receive|request)\b/i;
|
|
38
|
+
/** Default wallet read intents (balance / RGB assets / receive address / price). */
|
|
35
39
|
export const WALLET_FAST_INTENTS = [
|
|
36
40
|
{
|
|
37
41
|
name: 'balance',
|
|
38
42
|
tool: 'get_balances',
|
|
43
|
+
fallbackTools: ['rln_get_balances', 'wdk_get_balances'],
|
|
39
44
|
match: (t) => !ACTIONY.test(t) && /\b(balance|funds|how much (do i|have i|i have)|how much.* (do i have|in my wallet))\b/i.test(t),
|
|
40
45
|
},
|
|
46
|
+
{
|
|
47
|
+
name: 'assets',
|
|
48
|
+
tool: 'rln_list_assets',
|
|
49
|
+
fallbackTools: ['wdk_list_assets'],
|
|
50
|
+
match: (t) => !ACTIONY.test(t) &&
|
|
51
|
+
!CREATEY.test(t) &&
|
|
52
|
+
/\b(which|what|list|show|my)\b[^.?!]*\b(rgb assets?|assets?|tokens?)\b|\b(rgb assets?|tokens?) (do i|i) (have|hold|own)\b/i.test(t),
|
|
53
|
+
},
|
|
41
54
|
{
|
|
42
55
|
name: 'address',
|
|
43
56
|
tool: 'spark_get_address',
|
|
57
|
+
fallbackTools: ['rln_get_address', 'wdk_get_address'],
|
|
44
58
|
match: (t) => !ACTIONY.test(t) && /\b(receive address|deposit address|my address|an address|get .*address|where.* receive)\b/i.test(t),
|
|
45
59
|
},
|
|
46
60
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastpath.js","sourceRoot":"","sources":["../../src/fastpath/fastpath.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"fastpath.js","sourceRoot":"","sources":["../../src/fastpath/fastpath.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAuBH,MAAM,OAAO,QAAQ;IACX,OAAO,CAAe;IAC9B,YAAY,OAAO,GAAiB,EAAE;QACpC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,GAAG,CAAC,MAAkB;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,wDAAwD;IACxD,MAAM,CAAC,IAAY;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,OAAO,MAAM;YACX,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;YACvH,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;CACF;AAED,6EAA6E;AAC7E,6DAA6D;AAC7D,MAAM,OAAO,GAAG,wDAAwD,CAAC;AACzE,2EAA2E;AAC3E,MAAM,OAAO,GAAG,oEAAoE,CAAC;AAErF,oFAAoF;AACpF,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,cAAc;QACpB,aAAa,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,wFAAwF,CAAC,IAAI,CAAC,CAAC,CAAC;KACnI;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,iBAAiB;QACvB,aAAa,EAAE,CAAC,iBAAiB,CAAC;QAClC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CACX,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAChB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAChB,2HAA2H,CAAC,IAAI,CAAC,CAAC,CAAC;KACtI;IACD;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,mBAAmB;QACzB,aAAa,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;QACrD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,4FAA4F,CAAC,IAAI,CAAC,CAAC,CAAC;KACvI;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,2FAA2F,CAAC,IAAI,CAAC,CAAC,CAAC;KACtI;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/fastpath/render.ts"],"names":[],"mappings":"AA+CA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAQzE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text for a fast-path result. Tools that answer the same intent return
|
|
3
|
+
* different shapes (aggregate wallet, kaleido-mcp, MockWallet), so each shape
|
|
4
|
+
* is read here instead of asking a model to describe it.
|
|
5
|
+
*/
|
|
6
|
+
import { formatRgbAmount } from '../context/rgb-units.js';
|
|
7
|
+
const sats = (n) => `${Number(n ?? 0).toLocaleString('en-US')} sats`;
|
|
8
|
+
function parse(r) {
|
|
9
|
+
if (typeof r !== 'string')
|
|
10
|
+
return r;
|
|
11
|
+
try {
|
|
12
|
+
return JSON.parse(r);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return r;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function renderBalance(r) {
|
|
19
|
+
if (r.total_sats !== undefined) {
|
|
20
|
+
const n = r.layers?.length ?? 0;
|
|
21
|
+
return `You have ${sats(r.total_sats)}${n > 1 ? ` across ${n} layers` : ''}.`;
|
|
22
|
+
}
|
|
23
|
+
if (r.btc_onchain) {
|
|
24
|
+
const b = r.btc_onchain;
|
|
25
|
+
const lines = [`On-chain: ${sats(b.vanilla_spendable_sats)} spendable.`];
|
|
26
|
+
if (Number(b.colored_spendable_sats))
|
|
27
|
+
lines.push(`RGB UTXOs: ${sats(b.colored_spendable_sats)} (holding RGB assets, not for spending).`);
|
|
28
|
+
if (r.lightning_balance_sat !== undefined)
|
|
29
|
+
lines.push(`Lightning: ${sats(r.lightning_balance_sat)}.`);
|
|
30
|
+
return lines.join('\n');
|
|
31
|
+
}
|
|
32
|
+
if (r.btc_sats !== undefined)
|
|
33
|
+
return `You have ${sats(r.btc_sats)}.`;
|
|
34
|
+
return `Balances:\n${JSON.stringify(r, null, 2)}`;
|
|
35
|
+
}
|
|
36
|
+
function renderAssets(r) {
|
|
37
|
+
const list = Array.isArray(r) ? r : Array.isArray(r?.assets) ? r.assets : [];
|
|
38
|
+
if (!list.length)
|
|
39
|
+
return "You don't hold any RGB assets yet.";
|
|
40
|
+
const rows = list.map((a) => {
|
|
41
|
+
const raw = a.balance?.spendable ?? a.balance?.settled;
|
|
42
|
+
const amount = typeof raw === 'number' ? `${formatRgbAmount(raw, Number(a.precision) || 0)} ${a.ticker}` : 'balance unknown';
|
|
43
|
+
return `- ${a.ticker}${a.name && a.name !== a.ticker ? ` (${a.name})` : ''}: ${amount}`;
|
|
44
|
+
});
|
|
45
|
+
return `Your RGB assets:\n${rows.join('\n')}`;
|
|
46
|
+
}
|
|
47
|
+
export function defaultRenderFast(intent, result) {
|
|
48
|
+
const r = parse(result);
|
|
49
|
+
if (intent === 'balance')
|
|
50
|
+
return renderBalance(r ?? {});
|
|
51
|
+
if (intent === 'assets')
|
|
52
|
+
return renderAssets(r);
|
|
53
|
+
if (intent === 'address') {
|
|
54
|
+
return r?.address ? `Here's your receive address:\n\n\`${r.address}\`` : 'No address available right now.';
|
|
55
|
+
}
|
|
56
|
+
return `Bitcoin is $${Number(r?.price_usd ?? 0).toLocaleString('en-US')}.`;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/fastpath/render.ts"],"names":[],"mappings":"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"}
|
package/dist/funnel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funnel.d.ts","sourceRoot":"","sources":["../src/funnel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"funnel.d.ts","sourceRoot":"","sources":["../src/funnel.ts"],"names":[],"mappings":"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"}
|
package/dist/funnel.js
CHANGED
|
@@ -19,12 +19,15 @@
|
|
|
19
19
|
* the contract; with no `onConfirm` the gate fails closed.
|
|
20
20
|
*/
|
|
21
21
|
import { Engine } from './engine.js';
|
|
22
|
+
import { defaultRenderFast } from './fastpath/render.js';
|
|
22
23
|
import { FastPath, WALLET_FAST_INTENTS } from './fastpath/fastpath.js';
|
|
23
24
|
import { RecipeRegistry, runRecipe } from './recipe/runner.js';
|
|
24
25
|
import { paymentsRecipe } from './recipe/payments.js';
|
|
25
26
|
import { receiveRecipe } from './recipe/receive.js';
|
|
26
27
|
import { assetSendRecipe } from './recipe/asset-send.js';
|
|
27
28
|
import { SkillRegistry } from './skills/registry.js';
|
|
29
|
+
import { selectAvailableSkill } from './skills/select.js';
|
|
30
|
+
import { detectWalletAction, hasCapableTool, noToolReply, wantsToolCall } from './guards.js';
|
|
28
31
|
/** Base system prompt for the wallet assistant. Hosts may override. */
|
|
29
32
|
export const DEFAULT_WALLET_SYSTEM = [
|
|
30
33
|
'You are KaleidoSwap, a concise, privacy-first assistant running inside a',
|
|
@@ -65,17 +68,6 @@ export const DEFAULT_WALLET_SYSTEM = [
|
|
|
65
68
|
const AMBIENT_MEMORY = ['remember', 'recall'];
|
|
66
69
|
const AMBIENT_RAG = ['search_knowledge'];
|
|
67
70
|
const DEFAULT_HISTORY = 8;
|
|
68
|
-
function defaultRenderFast(intent, r) {
|
|
69
|
-
if (intent === 'balance') {
|
|
70
|
-
const sats = Number(r?.total_sats ?? 0);
|
|
71
|
-
const n = r?.layers?.length ?? 0;
|
|
72
|
-
return `You have ${sats.toLocaleString()} sats${n > 1 ? ` across ${n} layers` : ''}.`;
|
|
73
|
-
}
|
|
74
|
-
if (intent === 'address') {
|
|
75
|
-
return r?.address ? `Here's your receive address:\n\n\`${r.address}\`` : 'No address available right now.';
|
|
76
|
-
}
|
|
77
|
-
return `Bitcoin is $${Number(r?.price_usd ?? 0).toLocaleString()}.`;
|
|
78
|
-
}
|
|
79
71
|
export class Funnel {
|
|
80
72
|
provider;
|
|
81
73
|
registry;
|
|
@@ -134,9 +126,16 @@ export class Funnel {
|
|
|
134
126
|
// tool — a partial tool surface (e.g. desktop without the core aggregate
|
|
135
127
|
// helpers) falls through to the agentic tier instead of erroring.
|
|
136
128
|
const fast = this.fastPath.select(text);
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
129
|
+
let fastTool;
|
|
130
|
+
for (const name of fast?.tools ?? []) {
|
|
131
|
+
if (await this.registry.getDef(name)) {
|
|
132
|
+
fastTool = name;
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (fast && fastTool) {
|
|
137
|
+
this.log(`tier=fast-path → ${fastTool}`);
|
|
138
|
+
const r = await this.registry.execute(fastTool, fast.args);
|
|
140
139
|
return { text: this.renderFast(fast.intent.name, r), tier: 'fast', route: fast.intent.name, intent: fast.intent.name, data: r };
|
|
141
140
|
}
|
|
142
141
|
// ── T2: recipe multi-step — fires when:
|
|
@@ -204,7 +203,9 @@ export class Funnel {
|
|
|
204
203
|
}
|
|
205
204
|
// ── T1: skill-scoped agentic loop ──
|
|
206
205
|
const skills = this.skillsFor(settings.disabledSkills);
|
|
207
|
-
const
|
|
206
|
+
const liveTools = (await this.registry.listTools()).map((t) => t.name);
|
|
207
|
+
const present = new Set(liveTools);
|
|
208
|
+
const skill = selectAvailableSkill(skills, text, present);
|
|
208
209
|
let base = settings.persona ? `${this.system}\n\n## Your persona\n${settings.persona}` : this.system;
|
|
209
210
|
// Auto-inject relevant knowledge chunks (best-effort — corpus is grounding
|
|
210
211
|
// truth, history is conversational context; both reach the model but the
|
|
@@ -239,7 +240,6 @@ export class Funnel {
|
|
|
239
240
|
// leaves the model TOOL-LESS — it then narrates "the tool isn't available"
|
|
240
241
|
// instead of acting. If NONE of the scoped tools resolve against the live
|
|
241
242
|
// registry, widen to the full surface so the agent can still work.
|
|
242
|
-
const present = new Set((await this.registry.listTools()).map((t) => t.name));
|
|
243
243
|
if (!scoped.some((n) => present.has(n))) {
|
|
244
244
|
this.log(`tier=agentic: skill '${skill?.name ?? '?'}' tools resolved to 0 live tools — using full tool surface`);
|
|
245
245
|
scoped = undefined;
|
|
@@ -248,8 +248,23 @@ export class Funnel {
|
|
|
248
248
|
else if (disabledAmbient.length) {
|
|
249
249
|
// No skill matched but a toggle is off: expose everything except the
|
|
250
250
|
// disabled ambient tools (the sources stay mounted — no rebuild).
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
scoped = liveTools.filter((n) => !disabledAmbient.includes(n));
|
|
252
|
+
}
|
|
253
|
+
// A wallet action with no tool able to perform it: answer deterministically
|
|
254
|
+
// instead of letting the model improvise an invoice/address/payment.
|
|
255
|
+
const action = detectWalletAction(text);
|
|
256
|
+
if (action) {
|
|
257
|
+
const inScope = (scoped ?? liveTools).filter((n) => present.has(n));
|
|
258
|
+
if (!hasCapableTool(action, inScope)) {
|
|
259
|
+
if (scoped && hasCapableTool(action, liveTools)) {
|
|
260
|
+
this.log(`tier=agentic: skill '${skill?.name ?? '?'}' has no tool for ${action.id} — using full tool surface`);
|
|
261
|
+
scoped = liveTools.filter((n) => !disabledAmbient.includes(n));
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
this.log(`tier=agentic: no tool for ${action.id} — refusing`);
|
|
265
|
+
return { text: noToolReply(action), tier: 'agentic', route: 'no-tool', toolCalls: [], turns: 0, inference: [] };
|
|
266
|
+
}
|
|
267
|
+
}
|
|
253
268
|
}
|
|
254
269
|
// Trim history so the prompt (system + skill + tools + history) stays
|
|
255
270
|
// within the small on-device model's context window.
|
|
@@ -275,6 +290,7 @@ export class Funnel {
|
|
|
275
290
|
},
|
|
276
291
|
onToolResult: cbs.onToolResult,
|
|
277
292
|
onConfirm: cbs.onConfirm,
|
|
293
|
+
...(wantsToolCall(text) ? { firstTurnToolChoice: 'required' } : {}),
|
|
278
294
|
signal: cbs.signal,
|
|
279
295
|
});
|
|
280
296
|
return {
|