@honeybee-ai/waggle-cli 1.0.19 → 1.0.21
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/brood.d.ts +23 -9
- package/dist/brood.js +110 -1
- package/dist/brood.js.map +1 -1
- package/dist/cli.js +279 -936
- package/dist/cli.js.map +1 -7
- package/dist/commands/carapace.js +20 -5
- package/dist/commands/carapace.js.map +1 -1
- package/dist/commands/eval.d.ts +1 -0
- package/dist/commands/eval.js +221 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/mcp.d.ts +13 -0
- package/dist/commands/mcp.js +17 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/scan.js +8 -8
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/up.js +13 -30
- package/dist/commands/up.js.map +1 -1
- package/dist/lib/capture.d.ts +6 -0
- package/dist/lib/capture.js +29 -0
- package/dist/lib/capture.js.map +1 -0
- package/dist/mcp/docs.d.ts +16 -0
- package/dist/mcp/docs.js +192 -0
- package/dist/mcp/docs.js.map +1 -0
- package/dist/mcp/handler.d.ts +27 -0
- package/dist/mcp/handler.js +397 -0
- package/dist/mcp/handler.js.map +1 -0
- package/dist/mcp/server.d.ts +19 -0
- package/dist/mcp/server.js +105 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/templates.d.ts +9 -0
- package/dist/mcp/templates.js +46 -0
- package/dist/mcp/templates.js.map +1 -0
- package/dist/repl/addressing.d.ts +34 -0
- package/dist/repl/addressing.js +103 -0
- package/dist/repl/addressing.js.map +1 -0
- package/dist/repl/agent-loop.d.ts +8 -0
- package/dist/repl/agent-loop.js +57 -0
- package/dist/repl/agent-loop.js.map +1 -0
- package/dist/repl/bang.d.ts +13 -0
- package/dist/repl/bang.js +207 -0
- package/dist/repl/bang.js.map +1 -0
- package/dist/repl/file-tools.d.ts +4 -0
- package/dist/repl/file-tools.js +121 -0
- package/dist/repl/file-tools.js.map +1 -0
- package/dist/repl/index-readline.d.ts +7 -0
- package/dist/repl/index-readline.js +91 -0
- package/dist/repl/index-readline.js.map +1 -0
- package/dist/repl/index.d.ts +1 -0
- package/dist/repl/index.js +341 -0
- package/dist/repl/index.js.map +1 -0
- package/dist/repl/input.d.ts +36 -0
- package/dist/repl/input.js +312 -0
- package/dist/repl/input.js.map +1 -0
- package/dist/repl/providers.d.ts +21 -0
- package/dist/repl/providers.js +373 -0
- package/dist/repl/providers.js.map +1 -0
- package/dist/repl/renderer.d.ts +38 -0
- package/dist/repl/renderer.js +167 -0
- package/dist/repl/renderer.js.map +1 -0
- package/dist/repl/system-pane.d.ts +28 -0
- package/dist/repl/system-pane.js +194 -0
- package/dist/repl/system-pane.js.map +1 -0
- package/dist/repl/system-prompt.d.ts +3 -0
- package/dist/repl/system-prompt.js +74 -0
- package/dist/repl/system-prompt.js.map +1 -0
- package/dist/repl/tool-handlers.d.ts +5 -0
- package/dist/repl/tool-handlers.js +118 -0
- package/dist/repl/tool-handlers.js.map +1 -0
- package/dist/repl/tools.d.ts +2 -0
- package/dist/repl/tools.js +205 -0
- package/dist/repl/tools.js.map +1 -0
- package/dist/repl/tui.d.ts +41 -0
- package/dist/repl/tui.js +280 -0
- package/dist/repl/tui.js.map +1 -0
- package/dist/repl/types.d.ts +53 -0
- package/dist/repl/types.js +3 -0
- package/dist/repl/types.js.map +1 -0
- package/dist/repl/ws-client.d.ts +39 -0
- package/dist/repl/ws-client.js +144 -0
- package/dist/repl/ws-client.js.map +1 -0
- package/dist/wgl.js +1396 -0
- package/dist/wgl.js.map +7 -0
- package/package.json +6 -8
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
// Provider system for REPL — adapted from incubator/src/agent/providers.ts
|
|
2
|
+
// Supports: Ollama, OpenAI-compatible (Cerebras, Groq, OpenAI), Anthropic
|
|
3
|
+
// No native SDK imports — uses raw fetch for all providers (keeps bundle small)
|
|
4
|
+
export const PROVIDER_CATALOG = {
|
|
5
|
+
cerebras: { tier: 'fast', baseUrl: 'https://api.cerebras.ai', format: 'openai', defaultModel: 'llama-3.3-70b', envVar: 'CEREBRAS_API_KEY', cost: { prompt: 0.10, completion: 0.10 } },
|
|
6
|
+
groq: { tier: 'fast', baseUrl: 'https://api.groq.com/openai', format: 'openai', defaultModel: 'llama-3.3-70b-versatile', envVar: 'GROQ_API_KEY', cost: { prompt: 0.27, completion: 0.27 } },
|
|
7
|
+
openai: { tier: 'smart', baseUrl: 'https://api.openai.com', format: 'openai', defaultModel: 'gpt-4o-mini', envVar: 'OPENAI_API_KEY', cost: { prompt: 2.50, completion: 10.00 } },
|
|
8
|
+
anthropic: { tier: 'smart', baseUrl: 'https://api.anthropic.com', format: 'anthropic', defaultModel: 'claude-sonnet-4-5-20250929', envVar: 'ANTHROPIC_API_KEY', cost: { prompt: 3.00, completion: 15.00 } },
|
|
9
|
+
ollama: { tier: 'local', baseUrl: 'http://localhost:11434', format: 'ollama', defaultModel: 'llama3.3:70b', envVar: 'OLLAMA_HOST', cost: { prompt: 0, completion: 0 } },
|
|
10
|
+
};
|
|
11
|
+
const PROVIDER_ALIASES = {
|
|
12
|
+
fast: 'cerebras',
|
|
13
|
+
smart: 'openai',
|
|
14
|
+
local: 'ollama',
|
|
15
|
+
};
|
|
16
|
+
// ─── Provider resolution ────────────────────────────────────────────
|
|
17
|
+
export function resolveProvider(shorthand) {
|
|
18
|
+
let resolved = shorthand;
|
|
19
|
+
if (PROVIDER_ALIASES[resolved])
|
|
20
|
+
resolved = PROVIDER_ALIASES[resolved];
|
|
21
|
+
const slash = resolved.indexOf('/');
|
|
22
|
+
let rawName;
|
|
23
|
+
let model;
|
|
24
|
+
if (slash === -1) {
|
|
25
|
+
rawName = resolved;
|
|
26
|
+
const catalog = PROVIDER_CATALOG[rawName];
|
|
27
|
+
if (!catalog) {
|
|
28
|
+
throw new Error(`Unknown provider "${rawName}". Known: ${Object.keys(PROVIDER_CATALOG).join(', ')}`);
|
|
29
|
+
}
|
|
30
|
+
model = catalog.defaultModel;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
rawName = resolved.slice(0, slash);
|
|
34
|
+
if (PROVIDER_ALIASES[rawName])
|
|
35
|
+
rawName = PROVIDER_ALIASES[rawName];
|
|
36
|
+
model = resolved.slice(slash + 1);
|
|
37
|
+
if (!model) {
|
|
38
|
+
const catalog = PROVIDER_CATALOG[rawName];
|
|
39
|
+
model = catalog?.defaultModel || 'llama-3.3-70b';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const providerName = rawName;
|
|
43
|
+
const catalog = PROVIDER_CATALOG[providerName];
|
|
44
|
+
const type = providerName === 'ollama' ? 'ollama'
|
|
45
|
+
: providerName === 'anthropic' ? 'anthropic'
|
|
46
|
+
: 'openai';
|
|
47
|
+
let baseUrl = catalog?.baseUrl ?? PROVIDER_CATALOG.openai.baseUrl;
|
|
48
|
+
if (type === 'ollama' && process.env.OLLAMA_HOST) {
|
|
49
|
+
const host = process.env.OLLAMA_HOST;
|
|
50
|
+
baseUrl = host.startsWith('http') ? host : `http://${host}`;
|
|
51
|
+
}
|
|
52
|
+
const envVar = catalog?.envVar;
|
|
53
|
+
let apiKey;
|
|
54
|
+
if (envVar && process.env[envVar])
|
|
55
|
+
apiKey = process.env[envVar];
|
|
56
|
+
return { type, baseUrl, apiKey, model, providerName };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Auto-detect the best available provider from environment variables.
|
|
60
|
+
* Priority: CEREBRAS → GROQ → ANTHROPIC → OPENAI → ollama fallback
|
|
61
|
+
*/
|
|
62
|
+
export function autoDetectProvider() {
|
|
63
|
+
for (const name of ['cerebras', 'groq', 'anthropic', 'openai']) {
|
|
64
|
+
const entry = PROVIDER_CATALOG[name];
|
|
65
|
+
if (process.env[entry.envVar]) {
|
|
66
|
+
return resolveProvider(name);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Fallback to ollama
|
|
70
|
+
return resolveProvider('ollama');
|
|
71
|
+
}
|
|
72
|
+
// ─── Chat completion ────────────────────────────────────────────────
|
|
73
|
+
const MAX_RETRIES = 3;
|
|
74
|
+
const BASE_DELAY_MS = 2000;
|
|
75
|
+
export async function chatCompletion(provider, messages, tools, temperature) {
|
|
76
|
+
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
77
|
+
try {
|
|
78
|
+
if (provider.type === 'anthropic')
|
|
79
|
+
return await anthropicCompletion(provider, messages, tools, temperature);
|
|
80
|
+
if (provider.type === 'ollama')
|
|
81
|
+
return await ollamaCompletion(provider, messages, tools, temperature);
|
|
82
|
+
return await openaiCompletion(provider, messages, tools, temperature);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
86
|
+
const isRateLimit = msg.includes('(429)') || msg.toLowerCase().includes('rate limit');
|
|
87
|
+
if (!isRateLimit || attempt === MAX_RETRIES)
|
|
88
|
+
throw err;
|
|
89
|
+
const delay = BASE_DELAY_MS * Math.pow(2, attempt) + Math.random() * 1000;
|
|
90
|
+
await new Promise(r => setTimeout(r, delay));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
throw new Error('Unreachable');
|
|
94
|
+
}
|
|
95
|
+
// ─── Ollama ──────────────────────────────────────────────────────────
|
|
96
|
+
async function ollamaCompletion(provider, messages, tools, temperature) {
|
|
97
|
+
const body = {
|
|
98
|
+
model: provider.model,
|
|
99
|
+
messages: messages.map(m => {
|
|
100
|
+
const msg = { role: m.role, content: m.content ?? '' };
|
|
101
|
+
if (m.tool_calls)
|
|
102
|
+
msg.tool_calls = m.tool_calls;
|
|
103
|
+
if (m.tool_call_id)
|
|
104
|
+
msg.tool_call_id = m.tool_call_id;
|
|
105
|
+
return msg;
|
|
106
|
+
}),
|
|
107
|
+
stream: false,
|
|
108
|
+
options: {},
|
|
109
|
+
};
|
|
110
|
+
if (tools.length > 0)
|
|
111
|
+
body.tools = tools;
|
|
112
|
+
if (temperature !== undefined)
|
|
113
|
+
body.options.temperature = temperature;
|
|
114
|
+
const res = await fetch(`${provider.baseUrl}/api/chat`, {
|
|
115
|
+
method: 'POST',
|
|
116
|
+
headers: { 'Content-Type': 'application/json' },
|
|
117
|
+
body: JSON.stringify(body),
|
|
118
|
+
});
|
|
119
|
+
if (!res.ok) {
|
|
120
|
+
const text = await res.text();
|
|
121
|
+
throw new Error(`Ollama error (${res.status}): ${text}`);
|
|
122
|
+
}
|
|
123
|
+
const data = await res.json();
|
|
124
|
+
const msg = data.message;
|
|
125
|
+
if (!msg)
|
|
126
|
+
throw new Error('Ollama returned no message');
|
|
127
|
+
const message = { role: 'assistant', content: msg.content || null };
|
|
128
|
+
if (msg.tool_calls && msg.tool_calls.length > 0) {
|
|
129
|
+
message.tool_calls = msg.tool_calls.map((tc, i) => ({
|
|
130
|
+
id: `ollama_${Date.now()}_${i}`,
|
|
131
|
+
type: 'function',
|
|
132
|
+
function: { name: tc.function.name, arguments: tc.function.arguments },
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
else if (message.content && tools.length > 0) {
|
|
136
|
+
const extracted = extractToolCallsFromText(message.content, tools);
|
|
137
|
+
if (extracted.length > 0) {
|
|
138
|
+
message.tool_calls = extracted;
|
|
139
|
+
message.content = null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
message,
|
|
144
|
+
usage: {
|
|
145
|
+
promptTokens: data.prompt_eval_count ?? 0,
|
|
146
|
+
completionTokens: data.eval_count ?? 0,
|
|
147
|
+
totalTokens: (data.prompt_eval_count ?? 0) + (data.eval_count ?? 0),
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// ─── OpenAI-compatible ───────────────────────────────────────────────
|
|
152
|
+
async function openaiCompletion(provider, messages, tools, temperature) {
|
|
153
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
154
|
+
if (provider.apiKey)
|
|
155
|
+
headers['Authorization'] = `Bearer ${provider.apiKey}`;
|
|
156
|
+
const body = {
|
|
157
|
+
model: provider.model,
|
|
158
|
+
messages: messages.map(m => {
|
|
159
|
+
const msg = { role: m.role };
|
|
160
|
+
if (m.content !== undefined)
|
|
161
|
+
msg.content = m.content;
|
|
162
|
+
if (m.tool_calls)
|
|
163
|
+
msg.tool_calls = m.tool_calls.map(tc => ({
|
|
164
|
+
id: tc.id, type: 'function',
|
|
165
|
+
function: {
|
|
166
|
+
name: tc.function.name,
|
|
167
|
+
arguments: typeof tc.function.arguments === 'string' ? tc.function.arguments : JSON.stringify(tc.function.arguments),
|
|
168
|
+
},
|
|
169
|
+
}));
|
|
170
|
+
if (m.tool_call_id)
|
|
171
|
+
msg.tool_call_id = m.tool_call_id;
|
|
172
|
+
return msg;
|
|
173
|
+
}),
|
|
174
|
+
};
|
|
175
|
+
if (tools.length > 0) {
|
|
176
|
+
body.tools = tools;
|
|
177
|
+
body.parallel_tool_calls = true;
|
|
178
|
+
}
|
|
179
|
+
if (temperature !== undefined)
|
|
180
|
+
body.temperature = temperature;
|
|
181
|
+
const res = await fetch(`${provider.baseUrl}/v1/chat/completions`, {
|
|
182
|
+
method: 'POST',
|
|
183
|
+
headers,
|
|
184
|
+
body: JSON.stringify(body),
|
|
185
|
+
});
|
|
186
|
+
if (!res.ok) {
|
|
187
|
+
const text = await res.text();
|
|
188
|
+
throw new Error(`Provider error (${res.status}): ${text}`);
|
|
189
|
+
}
|
|
190
|
+
const data = await res.json();
|
|
191
|
+
const choice = data.choices?.[0]?.message;
|
|
192
|
+
if (!choice)
|
|
193
|
+
throw new Error('Provider returned no choices');
|
|
194
|
+
let content = choice.content ?? null;
|
|
195
|
+
if (content)
|
|
196
|
+
content = content.replace(/<think>[\s\S]*?<\/think>/g, '').trim() || null;
|
|
197
|
+
const message = { role: 'assistant', content };
|
|
198
|
+
if (choice.tool_calls && choice.tool_calls.length > 0) {
|
|
199
|
+
message.tool_calls = choice.tool_calls.map(tc => ({
|
|
200
|
+
id: tc.id, type: 'function',
|
|
201
|
+
function: { name: tc.function.name, arguments: parseArguments(tc.function.arguments) },
|
|
202
|
+
}));
|
|
203
|
+
}
|
|
204
|
+
else if (message.content && tools.length > 0) {
|
|
205
|
+
const extracted = extractToolCallsFromText(message.content, tools);
|
|
206
|
+
if (extracted.length > 0) {
|
|
207
|
+
message.tool_calls = extracted;
|
|
208
|
+
message.content = null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
message,
|
|
213
|
+
usage: {
|
|
214
|
+
promptTokens: data.usage?.prompt_tokens ?? 0,
|
|
215
|
+
completionTokens: data.usage?.completion_tokens ?? 0,
|
|
216
|
+
totalTokens: data.usage?.total_tokens ?? 0,
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
async function anthropicCompletion(provider, messages, tools, temperature) {
|
|
221
|
+
let system;
|
|
222
|
+
const anthropicMessages = [];
|
|
223
|
+
for (const msg of messages) {
|
|
224
|
+
if (msg.role === 'system') {
|
|
225
|
+
system = msg.content ?? undefined;
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
if (msg.role === 'assistant') {
|
|
229
|
+
const content = [];
|
|
230
|
+
if (msg.content)
|
|
231
|
+
content.push({ type: 'text', text: msg.content });
|
|
232
|
+
if (msg.tool_calls) {
|
|
233
|
+
for (const tc of msg.tool_calls) {
|
|
234
|
+
content.push({
|
|
235
|
+
type: 'tool_use', id: tc.id ?? `call_${Date.now()}`, name: tc.function.name,
|
|
236
|
+
input: typeof tc.function.arguments === 'string' ? parseArguments(tc.function.arguments) : tc.function.arguments,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
anthropicMessages.push({ role: 'assistant', content });
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
if (msg.role === 'tool') {
|
|
244
|
+
const toolResult = { type: 'tool_result', tool_use_id: msg.tool_call_id ?? '', content: msg.content ?? '' };
|
|
245
|
+
const last = anthropicMessages[anthropicMessages.length - 1];
|
|
246
|
+
if (last?.role === 'user' && Array.isArray(last.content)) {
|
|
247
|
+
last.content.push(toolResult);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
anthropicMessages.push({ role: 'user', content: [toolResult] });
|
|
251
|
+
}
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
anthropicMessages.push({ role: 'user', content: msg.content ?? '' });
|
|
255
|
+
}
|
|
256
|
+
const body = {
|
|
257
|
+
model: provider.model,
|
|
258
|
+
max_tokens: 4096,
|
|
259
|
+
messages: anthropicMessages,
|
|
260
|
+
};
|
|
261
|
+
if (system)
|
|
262
|
+
body.system = system;
|
|
263
|
+
if (tools.length > 0) {
|
|
264
|
+
body.tools = tools.map(t => ({
|
|
265
|
+
name: t.function.name,
|
|
266
|
+
description: t.function.description,
|
|
267
|
+
input_schema: t.function.parameters,
|
|
268
|
+
}));
|
|
269
|
+
}
|
|
270
|
+
if (temperature !== undefined)
|
|
271
|
+
body.temperature = temperature;
|
|
272
|
+
const res = await fetch(`${provider.baseUrl}/v1/messages`, {
|
|
273
|
+
method: 'POST',
|
|
274
|
+
headers: {
|
|
275
|
+
'Content-Type': 'application/json',
|
|
276
|
+
'x-api-key': provider.apiKey ?? '',
|
|
277
|
+
'anthropic-version': '2023-06-01',
|
|
278
|
+
},
|
|
279
|
+
body: JSON.stringify(body),
|
|
280
|
+
});
|
|
281
|
+
if (!res.ok) {
|
|
282
|
+
const text = await res.text();
|
|
283
|
+
throw new Error(`Anthropic error (${res.status}): ${text}`);
|
|
284
|
+
}
|
|
285
|
+
const data = await res.json();
|
|
286
|
+
const message = { role: 'assistant', content: null };
|
|
287
|
+
const textParts = [];
|
|
288
|
+
const toolCalls = [];
|
|
289
|
+
for (const block of data.content) {
|
|
290
|
+
if (block.type === 'text' && block.text)
|
|
291
|
+
textParts.push(block.text);
|
|
292
|
+
else if (block.type === 'tool_use' && block.name) {
|
|
293
|
+
toolCalls.push({
|
|
294
|
+
id: block.id, type: 'function',
|
|
295
|
+
function: { name: block.name, arguments: block.input ?? {} },
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (textParts.length > 0)
|
|
300
|
+
message.content = textParts.join('\n');
|
|
301
|
+
if (toolCalls.length > 0)
|
|
302
|
+
message.tool_calls = toolCalls;
|
|
303
|
+
const inputTokens = data.usage?.input_tokens ?? 0;
|
|
304
|
+
const outputTokens = data.usage?.output_tokens ?? 0;
|
|
305
|
+
return {
|
|
306
|
+
message,
|
|
307
|
+
usage: { promptTokens: inputTokens, completionTokens: outputTokens, totalTokens: inputTokens + outputTokens },
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
// ─── Utilities ──────────────────────────────────────────────────────
|
|
311
|
+
function parseArguments(args) {
|
|
312
|
+
try {
|
|
313
|
+
return JSON.parse(args);
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
return {};
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
export function getToolCallArgs(tc) {
|
|
320
|
+
if (typeof tc.function.arguments === 'string')
|
|
321
|
+
return parseArguments(tc.function.arguments);
|
|
322
|
+
return tc.function.arguments;
|
|
323
|
+
}
|
|
324
|
+
function extractToolCallsFromText(text, tools) {
|
|
325
|
+
const toolNames = new Set(tools.map(t => t.function.name));
|
|
326
|
+
const results = [];
|
|
327
|
+
const jsonCandidates = extractJsonBlocks(text);
|
|
328
|
+
for (const candidate of jsonCandidates) {
|
|
329
|
+
try {
|
|
330
|
+
const parsed = JSON.parse(candidate);
|
|
331
|
+
const items = Array.isArray(parsed) ? parsed : [parsed];
|
|
332
|
+
for (const item of items) {
|
|
333
|
+
if (!item || typeof item !== 'object')
|
|
334
|
+
continue;
|
|
335
|
+
if (typeof item.name === 'string' && toolNames.has(item.name)) {
|
|
336
|
+
results.push({
|
|
337
|
+
id: `text_${Date.now()}_${results.length}`,
|
|
338
|
+
type: 'function',
|
|
339
|
+
function: { name: item.name, arguments: item.arguments ?? item.parameters ?? {} },
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
catch { /* not valid JSON */ }
|
|
345
|
+
}
|
|
346
|
+
return results;
|
|
347
|
+
}
|
|
348
|
+
function extractJsonBlocks(text) {
|
|
349
|
+
const blocks = [];
|
|
350
|
+
const fenced = text.matchAll(/```(?:json)?\s*\n?([\s\S]*?)```/g);
|
|
351
|
+
for (const m of fenced)
|
|
352
|
+
blocks.push(m[1].trim());
|
|
353
|
+
for (let i = 0; i < text.length; i++) {
|
|
354
|
+
if (text[i] === '{' || text[i] === '[') {
|
|
355
|
+
const close = text[i] === '{' ? '}' : ']';
|
|
356
|
+
let depth = 1;
|
|
357
|
+
let j = i + 1;
|
|
358
|
+
while (j < text.length && depth > 0) {
|
|
359
|
+
if (text[j] === text[i])
|
|
360
|
+
depth++;
|
|
361
|
+
else if (text[j] === close)
|
|
362
|
+
depth--;
|
|
363
|
+
j++;
|
|
364
|
+
}
|
|
365
|
+
if (depth === 0) {
|
|
366
|
+
blocks.push(text.slice(i, j));
|
|
367
|
+
i = j - 1;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return blocks;
|
|
372
|
+
}
|
|
373
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/repl/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export declare const dim: (s: string) => string;
|
|
2
|
+
export declare const bold: (s: string) => string;
|
|
3
|
+
export declare const green: (s: string) => string;
|
|
4
|
+
export declare const red: (s: string) => string;
|
|
5
|
+
export declare const cyan: (s: string) => string;
|
|
6
|
+
export declare const yellow: (s: string) => string;
|
|
7
|
+
export declare const darkOrange: (s: string) => string;
|
|
8
|
+
export declare const brightAmber: (s: string) => string;
|
|
9
|
+
export declare const darkBlue: (s: string) => string;
|
|
10
|
+
export declare const brightBlue: (s: string) => string;
|
|
11
|
+
export declare const gray: (s: string) => string;
|
|
12
|
+
export declare function stripAnsi(s: string): string;
|
|
13
|
+
/** Visible width of a string, accounting for ANSI escapes and emoji (2 cells) */
|
|
14
|
+
export declare function visibleWidth(s: string): number;
|
|
15
|
+
/** Clip an ANSI string to maxWidth visible columns, preserving color codes */
|
|
16
|
+
export declare function clipLine(s: string, maxWidth: number): string;
|
|
17
|
+
export declare function wrapText(text: string, maxWidth: number): string[];
|
|
18
|
+
export interface BoxTheme {
|
|
19
|
+
border: (s: string) => string;
|
|
20
|
+
title: (s: string) => string;
|
|
21
|
+
}
|
|
22
|
+
export declare const THEME_HONEYBEE: BoxTheme;
|
|
23
|
+
export declare const THEME_USER: BoxTheme;
|
|
24
|
+
/** Render a message box as lines (returns string[], no stdout) */
|
|
25
|
+
export declare function renderBox(title: string, contentLines: string[], theme: BoxTheme, maxWidth: number): string[];
|
|
26
|
+
export declare class Spinner {
|
|
27
|
+
private frameIdx;
|
|
28
|
+
private textIdx;
|
|
29
|
+
private timer;
|
|
30
|
+
private textTimer;
|
|
31
|
+
private _onFrame;
|
|
32
|
+
set onFrame(fn: ((line: string) => void) | null);
|
|
33
|
+
start(): void;
|
|
34
|
+
stop(): void;
|
|
35
|
+
private emitFrame;
|
|
36
|
+
}
|
|
37
|
+
export declare function renderSplash(): string[];
|
|
38
|
+
export declare function renderToolCallLine(name: string, args: Record<string, unknown>): string;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
// Message rendering — boxes, word wrap, splash, spinner
|
|
2
|
+
// ANSI terminal control with zero deps
|
|
3
|
+
// ─── ANSI color helpers ──────────────────────────────────────────────
|
|
4
|
+
const RST = '\x1b[0m';
|
|
5
|
+
export const dim = (s) => `\x1b[2m${s}${RST}`;
|
|
6
|
+
export const bold = (s) => `\x1b[1m${s}${RST}`;
|
|
7
|
+
export const green = (s) => `\x1b[32m${s}${RST}`;
|
|
8
|
+
export const red = (s) => `\x1b[31m${s}${RST}`;
|
|
9
|
+
export const cyan = (s) => `\x1b[36m${s}${RST}`;
|
|
10
|
+
export const yellow = (s) => `\x1b[33m${s}${RST}`;
|
|
11
|
+
export const darkOrange = (s) => `\x1b[38;5;208m${s}${RST}`;
|
|
12
|
+
export const brightAmber = (s) => `\x1b[1m\x1b[38;5;220m${s}${RST}`;
|
|
13
|
+
export const darkBlue = (s) => `\x1b[38;5;27m${s}${RST}`;
|
|
14
|
+
export const brightBlue = (s) => `\x1b[1m\x1b[38;5;75m${s}${RST}`;
|
|
15
|
+
export const gray = (s) => `\x1b[38;5;242m${s}${RST}`;
|
|
16
|
+
// ─── Width calculation ───────────────────────────────────────────────
|
|
17
|
+
export function stripAnsi(s) {
|
|
18
|
+
return s.replace(/\x1b\[[0-9;]*m/g, '');
|
|
19
|
+
}
|
|
20
|
+
function isWideChar(code) {
|
|
21
|
+
return code > 0x1F600 || (code >= 0x2600 && code <= 0x27BF) || (code >= 0x1F300 && code <= 0x1FAFF);
|
|
22
|
+
}
|
|
23
|
+
/** Visible width of a string, accounting for ANSI escapes and emoji (2 cells) */
|
|
24
|
+
export function visibleWidth(s) {
|
|
25
|
+
const clean = stripAnsi(s);
|
|
26
|
+
let width = 0;
|
|
27
|
+
for (const ch of clean) {
|
|
28
|
+
width += isWideChar(ch.codePointAt(0) ?? 0) ? 2 : 1;
|
|
29
|
+
}
|
|
30
|
+
return width;
|
|
31
|
+
}
|
|
32
|
+
/** Clip an ANSI string to maxWidth visible columns, preserving color codes */
|
|
33
|
+
export function clipLine(s, maxWidth) {
|
|
34
|
+
if (maxWidth <= 0)
|
|
35
|
+
return '';
|
|
36
|
+
// Split into ANSI escape and text segments
|
|
37
|
+
const parts = [];
|
|
38
|
+
const re = /\x1b\[[0-9;]*m/g;
|
|
39
|
+
let lastIdx = 0;
|
|
40
|
+
let match;
|
|
41
|
+
while ((match = re.exec(s)) !== null) {
|
|
42
|
+
if (match.index > lastIdx) {
|
|
43
|
+
parts.push({ ansi: false, value: s.slice(lastIdx, match.index) });
|
|
44
|
+
}
|
|
45
|
+
parts.push({ ansi: true, value: match[0] });
|
|
46
|
+
lastIdx = re.lastIndex;
|
|
47
|
+
}
|
|
48
|
+
if (lastIdx < s.length) {
|
|
49
|
+
parts.push({ ansi: false, value: s.slice(lastIdx) });
|
|
50
|
+
}
|
|
51
|
+
let visWidth = 0;
|
|
52
|
+
let result = '';
|
|
53
|
+
for (const part of parts) {
|
|
54
|
+
if (part.ansi) {
|
|
55
|
+
result += part.value;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
for (const ch of part.value) {
|
|
59
|
+
const w = isWideChar(ch.codePointAt(0) ?? 0) ? 2 : 1;
|
|
60
|
+
if (visWidth + w > maxWidth)
|
|
61
|
+
return result + RST;
|
|
62
|
+
result += ch;
|
|
63
|
+
visWidth += w;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
// ─── Text wrapping ──────────────────────────────────────────────────
|
|
69
|
+
export function wrapText(text, maxWidth) {
|
|
70
|
+
const lines = [];
|
|
71
|
+
for (const paragraph of text.split('\n')) {
|
|
72
|
+
if (visibleWidth(paragraph) <= maxWidth) {
|
|
73
|
+
lines.push(paragraph);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const words = paragraph.split(' ');
|
|
77
|
+
let current = '';
|
|
78
|
+
for (const word of words) {
|
|
79
|
+
const test = current ? `${current} ${word}` : word;
|
|
80
|
+
if (visibleWidth(test) > maxWidth && current) {
|
|
81
|
+
lines.push(current);
|
|
82
|
+
current = word;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
current = test;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (current)
|
|
89
|
+
lines.push(current);
|
|
90
|
+
}
|
|
91
|
+
return lines.length > 0 ? lines : [''];
|
|
92
|
+
}
|
|
93
|
+
export const THEME_HONEYBEE = { border: darkOrange, title: brightAmber };
|
|
94
|
+
export const THEME_USER = { border: darkBlue, title: brightBlue };
|
|
95
|
+
/** Render a message box as lines (returns string[], no stdout) */
|
|
96
|
+
export function renderBox(title, contentLines, theme, maxWidth) {
|
|
97
|
+
const PAD = 2;
|
|
98
|
+
const contentWidths = contentLines.map(l => visibleWidth(l));
|
|
99
|
+
const titleWidth = visibleWidth(title);
|
|
100
|
+
const innerWidth = Math.min(Math.max(maxWidth - 2, 10), Math.max(titleWidth + 4, ...contentWidths.map(w => w + PAD * 2)));
|
|
101
|
+
const result = [];
|
|
102
|
+
// Top: ╭─ title ─...─╮
|
|
103
|
+
const dashesAfter = innerWidth - titleWidth - 3;
|
|
104
|
+
result.push(theme.border('╭─ ') + theme.title(title) + theme.border(` ${'─'.repeat(Math.max(0, dashesAfter))}╮`));
|
|
105
|
+
for (const line of contentLines) {
|
|
106
|
+
const pad = innerWidth - visibleWidth(line) - PAD;
|
|
107
|
+
result.push(theme.border('│') + `${' '.repeat(PAD)}${line}` + ' '.repeat(Math.max(0, pad)) + theme.border('│'));
|
|
108
|
+
}
|
|
109
|
+
result.push(theme.border(`╰${'─'.repeat(innerWidth)}╯`));
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
// ─── Spinner ────────────────────────────────────────────────────────
|
|
113
|
+
const SPINNER_FRAMES = ['\u280B', '\u2819', '\u2839', '\u2838', '\u283C', '\u2834', '\u2826', '\u2827', '\u2807', '\u280F'];
|
|
114
|
+
const SPINNER_TEXTS = ['thinking', 'thinking.', 'thinking..', 'thinking...'];
|
|
115
|
+
export class Spinner {
|
|
116
|
+
frameIdx = 0;
|
|
117
|
+
textIdx = 0;
|
|
118
|
+
timer = null;
|
|
119
|
+
textTimer = null;
|
|
120
|
+
_onFrame = null;
|
|
121
|
+
set onFrame(fn) { this._onFrame = fn; }
|
|
122
|
+
start() {
|
|
123
|
+
this.frameIdx = 0;
|
|
124
|
+
this.textIdx = 0;
|
|
125
|
+
this.emitFrame();
|
|
126
|
+
this.timer = setInterval(() => { this.frameIdx = (this.frameIdx + 1) % SPINNER_FRAMES.length; this.emitFrame(); }, 80);
|
|
127
|
+
this.textTimer = setInterval(() => { this.textIdx = (this.textIdx + 1) % SPINNER_TEXTS.length; this.emitFrame(); }, 400);
|
|
128
|
+
}
|
|
129
|
+
stop() {
|
|
130
|
+
if (this.timer) {
|
|
131
|
+
clearInterval(this.timer);
|
|
132
|
+
this.timer = null;
|
|
133
|
+
}
|
|
134
|
+
if (this.textTimer) {
|
|
135
|
+
clearInterval(this.textTimer);
|
|
136
|
+
this.textTimer = null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
emitFrame() {
|
|
140
|
+
const line = `${brightAmber(SPINNER_FRAMES[this.frameIdx])} ${dim(SPINNER_TEXTS[this.textIdx])}`;
|
|
141
|
+
if (this._onFrame)
|
|
142
|
+
this._onFrame(line);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// ─── Splash screen ──────────────────────────────────────────────────
|
|
146
|
+
export function renderSplash() {
|
|
147
|
+
return [
|
|
148
|
+
'',
|
|
149
|
+
darkOrange(' \\ /'),
|
|
150
|
+
darkOrange(" '. _ .'"),
|
|
151
|
+
darkOrange(' / / \\ \\'),
|
|
152
|
+
darkOrange(' | |') + brightAmber(' O ') + darkOrange('| |') + ' ' + brightAmber('honeybee'),
|
|
153
|
+
darkOrange(' \\ \\_/ /') + ' ' + gray('\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'),
|
|
154
|
+
darkOrange(" '.___.'\u0060") + ' ' + gray('How can I help you?'),
|
|
155
|
+
darkOrange(' |_|'),
|
|
156
|
+
'',
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
// ─── Tool call line ─────────────────────────────────────────────────
|
|
160
|
+
export function renderToolCallLine(name, args) {
|
|
161
|
+
const argStr = Object.entries(args).map(([k, v]) => {
|
|
162
|
+
const val = typeof v === 'string' && v.length > 40 ? v.slice(0, 37) + '...' : JSON.stringify(v);
|
|
163
|
+
return `${k}=${val}`;
|
|
164
|
+
}).join(', ');
|
|
165
|
+
return dim(`\u25B8 ${name}(${argStr})`);
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/repl/renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { WsEvent } from './ws-client.js';
|
|
2
|
+
/** Tool call header line for system pane */
|
|
3
|
+
export declare function formatToolHeader(name: string, args: Record<string, unknown>): string;
|
|
4
|
+
/** Thin separator line */
|
|
5
|
+
export declare function formatSeparator(width: number): string;
|
|
6
|
+
/** File read → path header + numbered lines */
|
|
7
|
+
export declare function formatFileRead(path: string, content: string, paneWidth: number): string[];
|
|
8
|
+
/** File write → confirmation with path */
|
|
9
|
+
export declare function formatFileWrite(path: string, content: string): string[];
|
|
10
|
+
/** Grep results → file:line:content with pattern highlighted */
|
|
11
|
+
export declare function formatGrepResult(pattern: string, resultText: string, paneWidth: number): string[];
|
|
12
|
+
/** Scan result → PASS/WARN/BLOCK with score */
|
|
13
|
+
export declare function formatScanResult(resultText: string): string[];
|
|
14
|
+
/** Generic tool result — truncated text */
|
|
15
|
+
export declare function formatGenericResult(resultText: string, maxLines?: number): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Format tool output for the system pane based on tool name.
|
|
18
|
+
* Dispatches to the appropriate formatter.
|
|
19
|
+
*/
|
|
20
|
+
export declare function formatForSystemPane(name: string, args: Record<string, unknown>, resultText: string, paneWidth: number): string[];
|
|
21
|
+
/** Format bang command result for system pane */
|
|
22
|
+
export declare function formatBangResult(title: string, resultLines: string[], paneWidth: number): string[];
|
|
23
|
+
/** Format a live WS event for system pane */
|
|
24
|
+
export declare function formatWsEvent(event: WsEvent): string[];
|
|
25
|
+
/** Format a waggle delivery confirmation for chat pane */
|
|
26
|
+
export declare function formatWaggleConfirmation(to: string, content: string): string;
|
|
27
|
+
/** Format a control action confirmation for chat pane */
|
|
28
|
+
export declare function formatControlConfirmation(verb: string, target: string, reason?: string): string;
|