@saccolabs/tars 1.31.0 โ†’ 1.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/context/skills/create-extension/SKILL.md +2 -2
  2. package/context/skills/manage-extensions/SKILL.md +3 -3
  3. package/dist/channels/discord/discord-channel.js +2 -3
  4. package/dist/channels/discord/discord-channel.js.map +1 -1
  5. package/dist/channels/discord/message-formatter.d.ts +1 -1
  6. package/dist/channels/discord/message-formatter.js +1 -1
  7. package/dist/cli/commands/quota.js +13 -48
  8. package/dist/cli/commands/quota.js.map +1 -1
  9. package/dist/cli/commands/refresh.js +40 -3
  10. package/dist/cli/commands/refresh.js.map +1 -1
  11. package/dist/cli/commands/setup.js +192 -467
  12. package/dist/cli/commands/setup.js.map +1 -1
  13. package/dist/cli/index.js +1 -13
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/config/config.d.ts +5 -10
  16. package/dist/config/config.js +21 -27
  17. package/dist/config/config.js.map +1 -1
  18. package/dist/memory/knowledge-store.js +10 -1
  19. package/dist/memory/knowledge-store.js.map +1 -1
  20. package/dist/memory/memory-manager.d.ts +0 -3
  21. package/dist/memory/memory-manager.js +26 -34
  22. package/dist/memory/memory-manager.js.map +1 -1
  23. package/dist/scripts/debug-cli.js +2 -2
  24. package/dist/scripts/debug-cli.js.map +1 -1
  25. package/dist/supervisor/heartbeat-service.js +1 -1
  26. package/dist/supervisor/heartbeat-service.js.map +1 -1
  27. package/dist/supervisor/main.js +37 -79
  28. package/dist/supervisor/main.js.map +1 -1
  29. package/dist/supervisor/mcp-bridge.d.ts +25 -0
  30. package/dist/supervisor/mcp-bridge.js +157 -0
  31. package/dist/supervisor/mcp-bridge.js.map +1 -0
  32. package/dist/supervisor/session-manager.d.ts +1 -1
  33. package/dist/supervisor/session-manager.js +1 -1
  34. package/dist/supervisor/supervisor.d.ts +14 -7
  35. package/dist/supervisor/supervisor.js +87 -29
  36. package/dist/supervisor/supervisor.js.map +1 -1
  37. package/dist/supervisor/{gemini-engine.d.ts โ†’ tars-engine.d.ts} +38 -33
  38. package/dist/supervisor/tars-engine.js +698 -0
  39. package/dist/supervisor/tars-engine.js.map +1 -0
  40. package/dist/tools/get-quota.d.ts +38 -12
  41. package/dist/tools/get-quota.js +37 -94
  42. package/dist/tools/get-quota.js.map +1 -1
  43. package/dist/tools/send-notification.d.ts +32 -7
  44. package/dist/tools/send-notification.js +31 -37
  45. package/dist/tools/send-notification.js.map +1 -1
  46. package/dist/types/index.d.ts +2 -2
  47. package/dist/utils/brain-audit.js +4 -4
  48. package/dist/utils/brain-audit.js.map +1 -1
  49. package/dist/utils/migration-manager.d.ts +4 -0
  50. package/dist/utils/migration-manager.js +205 -0
  51. package/dist/utils/migration-manager.js.map +1 -0
  52. package/extensions/memory/dist/store.js +29 -20
  53. package/extensions/memory/dist/store.js.map +1 -1
  54. package/extensions/memory/src/store.ts +33 -23
  55. package/package.json +4 -3
  56. package/src/prompts/system.md +3 -14
  57. package/context/agents/scaffolder.md +0 -22
  58. package/dist/auth/credential-manager.d.ts +0 -14
  59. package/dist/auth/credential-manager.js +0 -60
  60. package/dist/auth/credential-manager.js.map +0 -1
  61. package/dist/auth/oauth-service.d.ts +0 -24
  62. package/dist/auth/oauth-service.js +0 -89
  63. package/dist/auth/oauth-service.js.map +0 -1
  64. package/dist/auth/workspace-auth-service.d.ts +0 -10
  65. package/dist/auth/workspace-auth-service.js +0 -78
  66. package/dist/auth/workspace-auth-service.js.map +0 -1
  67. package/dist/cli/commands/swarm.d.ts +0 -13
  68. package/dist/cli/commands/swarm.js +0 -250
  69. package/dist/cli/commands/swarm.js.map +0 -1
  70. package/dist/inference/LlamaCppGenerator.d.ts +0 -25
  71. package/dist/inference/LlamaCppGenerator.js +0 -461
  72. package/dist/inference/LlamaCppGenerator.js.map +0 -1
  73. package/dist/scripts/test-local-llamacpp.d.ts +0 -1
  74. package/dist/scripts/test-local-llamacpp.js +0 -77
  75. package/dist/scripts/test-local-llamacpp.js.map +0 -1
  76. package/dist/supervisor/gemini-engine.js +0 -1056
  77. package/dist/supervisor/gemini-engine.js.map +0 -1
  78. package/dist/swarm/agent-card.d.ts +0 -14
  79. package/dist/swarm/agent-card.js +0 -93
  80. package/dist/swarm/agent-card.js.map +0 -1
  81. package/dist/swarm/rpc-handler.d.ts +0 -27
  82. package/dist/swarm/rpc-handler.js +0 -235
  83. package/dist/swarm/rpc-handler.js.map +0 -1
  84. package/dist/swarm/swarm-service.d.ts +0 -47
  85. package/dist/swarm/swarm-service.js +0 -207
  86. package/dist/swarm/swarm-service.js.map +0 -1
  87. package/dist/swarm/types.d.ts +0 -109
  88. package/dist/swarm/types.js +0 -15
  89. package/dist/swarm/types.js.map +0 -1
  90. /package/extensions/memory/{gemini-extension.json โ†’ tars-extension.json} +0 -0
  91. /package/extensions/tasks/{gemini-extension.json โ†’ tars-extension.json} +0 -0
@@ -1,461 +0,0 @@
1
- import logger from '../utils/logger.js';
2
- /**
3
- * LlamaCppGenerator - Implementation of ContentGenerator for local inference backends (llamacpp, etc.)
4
- * that provide an OpenAI-compatible API.
5
- */
6
- export class LlamaCppGenerator {
7
- baseUrl;
8
- constructor(baseUrl = 'http://localhost:8080') {
9
- this.baseUrl = baseUrl;
10
- }
11
- resolveEndpoint() {
12
- let endpoint = this.baseUrl.replace(/\/$/, '');
13
- if (!endpoint.endsWith('/chat/completions')) {
14
- if (!endpoint.endsWith('/v1')) {
15
- endpoint += '/v1';
16
- }
17
- endpoint += '/chat/completions';
18
- }
19
- return endpoint;
20
- }
21
- async generateContent(request, userPromptId) {
22
- logger.debug(`[LlamaCppGenerator] Generating content for model: ${request.model}`);
23
- const openAiRequest = this.mapToOpenAi(request);
24
- try {
25
- const response = await fetch(this.resolveEndpoint(), {
26
- method: 'POST',
27
- headers: {
28
- 'Content-Type': 'application/json'
29
- },
30
- body: JSON.stringify(openAiRequest),
31
- signal: request.config?.abortSignal
32
- });
33
- if (!response.ok) {
34
- const error = await response.text();
35
- throw new Error(`Local inference failed: ${response.status} ${error}`);
36
- }
37
- const data = (await response.json());
38
- return this.mapFromOpenAi(data);
39
- }
40
- catch (error) {
41
- logger.error(`[LlamaCppGenerator] API Error: ${error.message}`);
42
- throw error;
43
- }
44
- }
45
- async generateContentStream(request, userPromptId) {
46
- const openAiRequest = {
47
- ...this.mapToOpenAi(request),
48
- stream: true,
49
- stream_options: { include_usage: true }
50
- };
51
- const self = this;
52
- async function* streamGenerator() {
53
- const pendingToolCalls = new Map();
54
- const streamState = { isThinking: false };
55
- // OpenAI SSE protocol sends usage in a separate final chunk with choices=[]
56
- // and no finishReason. Gemini's turn.js only yields a Finished event when
57
- // finishReason is present, so we must defer usage and attach it to the
58
- // finishReason chunk. This variable accumulates the latest usage seen.
59
- let deferredUsage = null;
60
- try {
61
- const response = await fetch(self.resolveEndpoint(), {
62
- method: 'POST',
63
- headers: {
64
- 'Content-Type': 'application/json'
65
- },
66
- body: JSON.stringify(openAiRequest),
67
- signal: request.config?.abortSignal
68
- });
69
- if (!response.ok) {
70
- const error = await response.text();
71
- throw new Error(`Local inference failed: ${response.status} ${error}`);
72
- }
73
- if (!response.body) {
74
- throw new Error('Response body is empty');
75
- }
76
- const reader = response.body.getReader();
77
- const decoder = new TextDecoder();
78
- let buffer = '';
79
- while (true) {
80
- const { done, value } = await reader.read();
81
- if (done)
82
- break;
83
- buffer += decoder.decode(value, { stream: true });
84
- const lines = buffer.split('\n');
85
- buffer = lines.pop() || '';
86
- for (const line of lines) {
87
- const cleanLine = line.trim();
88
- if (!cleanLine || cleanLine === 'data: [DONE]')
89
- continue;
90
- if (cleanLine.startsWith('data: ')) {
91
- try {
92
- const data = JSON.parse(cleanLine.slice(6));
93
- const choice = data.choices && data.choices[0];
94
- // Capture usage from any chunk that carries it (including
95
- // the usage-only final chunk with choices=[]).
96
- if (data.usage || data.timings) {
97
- deferredUsage = {
98
- prompt_tokens: data.usage?.prompt_tokens ?? data.timings?.prompt_n,
99
- completion_tokens: data.usage?.completion_tokens ??
100
- data.timings?.predicted_n,
101
- total_tokens: data.usage?.total_tokens
102
- };
103
- }
104
- // 1. Aggregate partial tool calls from OpenAI stream format
105
- if (choice && choice.delta && choice.delta.tool_calls) {
106
- for (const tc of choice.delta.tool_calls) {
107
- let pending = pendingToolCalls.get(tc.index);
108
- if (!pending) {
109
- pending = {
110
- id: tc.id || '',
111
- name: tc.function?.name || '',
112
- arguments: ''
113
- };
114
- pendingToolCalls.set(tc.index, pending);
115
- }
116
- if (tc.id) {
117
- pending.id = tc.id;
118
- }
119
- if (tc.function?.arguments) {
120
- pending.arguments += tc.function.arguments;
121
- }
122
- }
123
- // Strip partial tool calls so we don't accidentally parse/yield them yet
124
- delete choice.delta.tool_calls;
125
- }
126
- // 2. When the turn finishes, inject fully assembled tool calls
127
- // AND attach any deferred usage so it reaches turn.js Finished event
128
- if (choice && choice.finish_reason) {
129
- if (pendingToolCalls.size > 0) {
130
- const assembled = Array.from(pendingToolCalls.entries()).map(([_, tc]) => ({
131
- id: tc.id,
132
- index: _,
133
- function: {
134
- name: tc.name,
135
- arguments: tc.arguments
136
- }
137
- }));
138
- choice.delta.tool_calls = assembled;
139
- pendingToolCalls.clear();
140
- }
141
- // Inject deferred usage into this finishReason chunk
142
- if (deferredUsage && !data.usage) {
143
- data.usage = deferredUsage;
144
- }
145
- }
146
- const mapped = self.mapFromOpenAiStream(data, streamState);
147
- if (mapped) {
148
- yield mapped;
149
- }
150
- }
151
- catch (e) {
152
- // Ignore unparseable SSE lines
153
- }
154
- }
155
- }
156
- }
157
- // Cleanup in case stream ended without finish_reason
158
- if (pendingToolCalls.size > 0) {
159
- const finalData = {
160
- choices: [
161
- {
162
- delta: {
163
- tool_calls: Array.from(pendingToolCalls.entries()).map(([_, tc]) => ({
164
- function: { name: tc.name, arguments: tc.arguments }
165
- }))
166
- },
167
- finish_reason: 'tool_calls'
168
- }
169
- ],
170
- usage: deferredUsage || undefined
171
- };
172
- const mapped = self.mapFromOpenAiStream(finalData, streamState);
173
- if (mapped)
174
- yield mapped;
175
- pendingToolCalls.clear();
176
- }
177
- }
178
- catch (error) {
179
- logger.error(`[LlamaCppGenerator] Stream Error: ${error.message}`);
180
- throw error;
181
- }
182
- }
183
- return streamGenerator();
184
- }
185
- async countTokens(request) {
186
- // Simple character-based estimation if local backend doesn't support token counting
187
- let text = '';
188
- if (typeof request.contents === 'string') {
189
- text = request.contents;
190
- }
191
- else if (Array.isArray(request.contents)) {
192
- text = request.contents
193
- .map((c) => c.parts?.map((p) => p.text || '').join(''))
194
- .join('');
195
- }
196
- return {
197
- totalTokens: Math.ceil(text.length / 4)
198
- };
199
- }
200
- async embedContent(request) {
201
- throw new Error('Embeddings not yet supported for LlamaCppGenerator');
202
- }
203
- /**
204
- * Maps Gemini parameters to OpenAI Chat Completion format.
205
- */
206
- mapToOpenAi(request) {
207
- const contents = Array.isArray(request.contents)
208
- ? request.contents
209
- : [{ role: 'user', parts: [{ text: request.contents }] }];
210
- const messages = contents.flatMap((content) => {
211
- const role = content.role === 'model' ? 'assistant' : content.role || 'user';
212
- // Map parts to content
213
- let messageContent;
214
- const hasImages = content.parts?.some((p) => p.inlineData);
215
- if (hasImages) {
216
- messageContent = content.parts
217
- ?.map((p) => {
218
- if (p.text) {
219
- return { type: 'text', text: p.text };
220
- }
221
- if (p.inlineData) {
222
- return {
223
- type: 'image_url',
224
- image_url: {
225
- url: `data:${p.inlineData.mimeType};base64,${p.inlineData.data}`
226
- }
227
- };
228
- }
229
- })
230
- .filter(Boolean);
231
- }
232
- else {
233
- const textParts = content.parts?.filter((p) => p.text).map((p) => p.text);
234
- if (textParts && textParts.length > 0) {
235
- messageContent = textParts.join('\n');
236
- }
237
- }
238
- // Handle tool calls/responses
239
- const toolCalls = content.parts
240
- ?.filter((p) => p.functionCall)
241
- .map((p) => ({
242
- id: p.functionCall?.id ||
243
- p.callId ||
244
- 'call_' + Math.random().toString(36).slice(2),
245
- type: 'function',
246
- function: {
247
- name: p.functionCall.name,
248
- arguments: JSON.stringify(p.functionCall.args)
249
- }
250
- }));
251
- const toolOutputs = content.parts
252
- ?.filter((p) => p.functionResponse)
253
- .map((p) => ({
254
- tool_call_id: p.functionResponse?.id || p.callId || p.id,
255
- role: 'tool',
256
- name: p.functionResponse.name,
257
- content: JSON.stringify(p.functionResponse.response)
258
- }));
259
- if (toolOutputs && toolOutputs.length > 0) {
260
- return toolOutputs;
261
- }
262
- return [
263
- {
264
- role,
265
- content: messageContent,
266
- ...(toolCalls && toolCalls.length > 0 ? { tool_calls: toolCalls } : {})
267
- }
268
- ];
269
- });
270
- // Add system instruction if present
271
- if (request.config?.systemInstruction) {
272
- const sysInstr = typeof request.config.systemInstruction === 'string'
273
- ? request.config.systemInstruction
274
- : request.config.systemInstruction.parts?.[0]?.text;
275
- if (sysInstr) {
276
- messages.unshift({ role: 'system', content: sysInstr });
277
- }
278
- }
279
- // Map tools
280
- const tools = request.config?.tools?.flatMap((t) => t.functionDeclarations?.map((fd) => ({
281
- type: 'function',
282
- function: {
283
- name: fd.name,
284
- description: fd.description,
285
- parameters: fd.parameters
286
- }
287
- })));
288
- return {
289
- model: request.model,
290
- messages,
291
- tools: tools && tools.length > 0 ? tools : undefined,
292
- temperature: request.config?.temperature ?? 0.7,
293
- max_tokens: request.config?.maxOutputTokens
294
- };
295
- }
296
- /**
297
- * Maps OpenAI response to Gemini GenerateContentResponse format.
298
- */
299
- mapFromOpenAi(data) {
300
- const choice = data.choices[0];
301
- const message = choice.message;
302
- const parts = [];
303
- if (message.content) {
304
- parts.push({ text: message.content });
305
- }
306
- if (message.tool_calls) {
307
- for (const tc of message.tool_calls) {
308
- parts.push({
309
- functionCall: {
310
- name: tc.function.name,
311
- args: JSON.parse(tc.function.arguments)
312
- }
313
- });
314
- }
315
- }
316
- const functionCalls = parts.filter((p) => p.functionCall).map((p) => p.functionCall);
317
- return {
318
- functionCalls: functionCalls.length > 0 ? functionCalls : undefined,
319
- candidates: [
320
- {
321
- content: {
322
- role: 'model',
323
- parts
324
- },
325
- finishReason: this.mapFinishReason(choice.finish_reason || choice.finishReason)
326
- }
327
- ],
328
- usageMetadata: {
329
- promptTokenCount: data.usage?.prompt_tokens,
330
- candidatesTokenCount: data.usage?.completion_tokens,
331
- totalTokenCount: data.usage?.total_tokens
332
- }
333
- };
334
- }
335
- mapFromOpenAiStream(data, state) {
336
- const choice = data.choices && data.choices.length > 0 ? data.choices[0] : null;
337
- // If no choice and no usage info, skip
338
- if (!choice && !data.usage && !data.timings)
339
- return null;
340
- const delta = choice?.delta || {};
341
- const parts = [];
342
- if (delta.reasoning_content || delta.thinking) {
343
- // Processing reasoning content without noisy per-token logging
344
- }
345
- if (delta.content) {
346
- let textSnippet = delta.content;
347
- if (state.isThinking) {
348
- const endTagIndex = textSnippet.indexOf('</think>');
349
- if (endTagIndex !== -1) {
350
- state.isThinking = false;
351
- textSnippet = textSnippet.substring(endTagIndex + 8);
352
- }
353
- else {
354
- textSnippet = '';
355
- }
356
- }
357
- else {
358
- const startTagIndex = textSnippet.indexOf('<think>');
359
- if (startTagIndex !== -1) {
360
- state.isThinking = true;
361
- // Check if it ends in the same snippet
362
- const endTagIndex = textSnippet.indexOf('</think>');
363
- if (endTagIndex !== -1) {
364
- state.isThinking = false;
365
- textSnippet =
366
- textSnippet.substring(0, startTagIndex) +
367
- textSnippet.substring(endTagIndex + 8);
368
- }
369
- else {
370
- textSnippet = textSnippet.substring(0, startTagIndex);
371
- }
372
- }
373
- }
374
- if (textSnippet) {
375
- parts.push({ text: textSnippet });
376
- }
377
- }
378
- if (delta.tool_calls) {
379
- for (const tc of delta.tool_calls) {
380
- if (tc.function) {
381
- try {
382
- const parsedArgs = tc.function.arguments
383
- ? JSON.parse(tc.function.arguments)
384
- : {};
385
- parts.push({
386
- functionCall: {
387
- name: tc.function.name,
388
- args: parsedArgs,
389
- id: tc.id
390
- }
391
- });
392
- }
393
- catch (err) {
394
- logger.warn(`Invalid tool call JSON arguments format: ${tc.function.arguments}`);
395
- parts.push({
396
- functionCall: {
397
- name: tc.function.name || 'unknown_tool',
398
- args: {
399
- _error: 'Invalid JSON format generated',
400
- raw: tc.function.arguments
401
- }
402
- }
403
- });
404
- }
405
- }
406
- }
407
- }
408
- if (parts.length === 0 &&
409
- (!choice || !choice.finish_reason) &&
410
- !data.usage &&
411
- !data.timings) {
412
- return null; // Don't yield empty chunks unless it carries the finish_reason or telemetry
413
- }
414
- const functionCalls = parts.filter((p) => p.functionCall).map((p) => p.functionCall);
415
- const promptTokens = data.usage?.prompt_tokens || data.timings?.prompt_n;
416
- const completionTokens = data.usage?.completion_tokens || data.timings?.predicted_n;
417
- const totalTokens = promptTokens !== undefined && completionTokens !== undefined
418
- ? promptTokens + completionTokens
419
- : data.usage?.total_tokens;
420
- return {
421
- functionCalls: functionCalls.length > 0 ? functionCalls : undefined,
422
- candidates: choice
423
- ? [
424
- {
425
- content: {
426
- role: 'model',
427
- parts
428
- },
429
- finishReason: this.mapFinishReason(choice.finish_reason || choice.finishReason)
430
- }
431
- ]
432
- : [],
433
- usageMetadata: promptTokens !== undefined || completionTokens !== undefined
434
- ? {
435
- promptTokenCount: promptTokens,
436
- candidatesTokenCount: completionTokens,
437
- totalTokenCount: totalTokens
438
- }
439
- : undefined
440
- };
441
- }
442
- mapFinishReason(reason) {
443
- if (!reason) {
444
- return undefined; // Must return undefined for incomplete stream chunks, not 'OTHER'!
445
- }
446
- switch (reason) {
447
- case 'stop':
448
- return 'STOP';
449
- case 'length':
450
- return 'MAX_TOKENS';
451
- case 'tool_calls':
452
- return 'STOP'; // Gemini uses STOP for tool calls often
453
- case 'content_filter':
454
- return 'SAFETY';
455
- default:
456
- return 'OTHER';
457
- }
458
- }
459
- }
460
- // cleanup verbose logs trigger
461
- //# sourceMappingURL=LlamaCppGenerator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LlamaCppGenerator.js","sourceRoot":"","sources":["../../src/inference/LlamaCppGenerator.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,77 +0,0 @@
1
- import { Config } from '../config/config.js';
2
- import { GeminiEngine } from '../supervisor/gemini-engine.js';
3
- /**
4
- * End-to-End Integration Harness for Local Llama.cpp + Gemini Core SDK
5
- *
6
- * Objectives:
7
- * 1. Test local initialization bypassing the Gemini Core ClassifierStrategy.
8
- * 2. Connect to the local backend dynamically at 'http://stark:8086'.
9
- * 3. Validate tool-call stream aggregation and successful `undefined` mappings.
10
- */
11
- async function runIntegrationTest() {
12
- console.log('๐Ÿงช Starting Local LlamaCpp Integration Test...\n');
13
- // 1. Manually build exactly the environment we want to test
14
- process.env.INFERENCE_BACKEND = 'llamacpp';
15
- process.env.LOCAL_INFERENCE_URL = 'http://stark:8086';
16
- process.env.DEBUG = '*';
17
- // CRITICAL DECOUPLING:
18
- // We override 'auto' with a concrete model alias to intentionally
19
- // force `@google/gemini-cli-core`'s OverrideStrategy to skip the ClassifierStrategy
20
- process.env.GEMINI_MODEL = 'gemini-3.1-pro-preview';
21
- process.env.GEMINI_API_KEY = 'dummy_llama_key_to_bypass_sdk_auth';
22
- const config = Config.getInstance();
23
- // Validate config correctly mapped our intentions
24
- console.log('๐Ÿ“Œ Config Verification:');
25
- console.log(` - Backend: ${config.inferenceBackend}`);
26
- console.log(` - Model: ${config.geminiModel} (Must NOT be 'auto' for bypass)`);
27
- console.log(` - URL: ${process.env.LOCAL_INFERENCE_URL}\n`);
28
- const engine = new GeminiEngine(config);
29
- // Mock the Discord Channel for Notification Tools
30
- engine.setChannelManager({
31
- config: config,
32
- notify: async (content) => {
33
- console.log(`\n\n๐Ÿ“ข [MOCK DISCORD NOTIFICATION TOOL FIRED] -> ${content}\n\n`);
34
- }
35
- });
36
- console.log('๐Ÿš€ Initializing Gemini Engine...');
37
- // We pass a mock session string to mimic the new preservation fix
38
- await engine.initialize('mock-integration-uuid-1234');
39
- // The test prompt intentionally asks the agent to use a specific tool
40
- const prompt = process.argv[2] ||
41
- `You must strictly use the send_notification tool to broadcast the exact message "Test Notification". Do not say anything else.`;
42
- console.log(`\n๐Ÿ—ฃ๏ธ Prompt: "${prompt}"\n`);
43
- console.log('--------------------------------------------------');
44
- let chunkCount = 0;
45
- try {
46
- await engine.run(prompt, (event) => {
47
- console.log(`\n\n=== EVENT ===\n`, JSON.stringify(event, null, 2));
48
- switch (event.type) {
49
- case 'text':
50
- process.stdout.write(event.content || '');
51
- chunkCount++;
52
- break;
53
- case 'tool_call':
54
- console.log(`\n\n๐Ÿ› ๏ธ -> TOOL REQUESTED: ${event.toolName}`);
55
- console.log(`๐Ÿ“ฅ -> ARGUMENTS: ${JSON.stringify(event.toolArgs)}`);
56
- break;
57
- case 'tool_response':
58
- console.log(`\nโœ… -> TOOL COMPLETED: ${event.toolName}`);
59
- break;
60
- case 'done':
61
- console.log(`\n\n๐Ÿ -> TURN FINISHED (Reason: ${'none'})`);
62
- console.log(`๐Ÿ“ˆ -> Chunks Streamed: ${chunkCount}`);
63
- break;
64
- default:
65
- console.log(`\n[Unhandled Event]: `, event);
66
- }
67
- }, 'mock-integration-uuid-1234');
68
- console.log('--------------------------------------------------');
69
- console.log('โœ… Integration Test Complete.');
70
- }
71
- catch (error) {
72
- console.error('\nโŒ Error during execution:');
73
- console.error(error);
74
- }
75
- }
76
- runIntegrationTest().catch(console.dir);
77
- //# sourceMappingURL=test-local-llamacpp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-local-llamacpp.js","sourceRoot":"","sources":["../../src/scripts/test-local-llamacpp.ts"],"names":[],"mappings":"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"}