@xalia/agent 0.6.3 → 0.6.5

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 (74) hide show
  1. package/dist/agent/src/agent/agent.js +12 -11
  2. package/dist/agent/src/agent/dummyLLM.js +24 -15
  3. package/dist/agent/src/agent/llm.js +0 -22
  4. package/dist/agent/src/agent/mcpServerManager.js +73 -15
  5. package/dist/agent/src/agent/openAI.js +32 -0
  6. package/dist/agent/src/agent/openAILLM.js +25 -1
  7. package/dist/agent/src/agent/openAILLMStreaming.js +8 -3
  8. package/dist/agent/src/agent/sudoMcpServerManager.js +22 -9
  9. package/dist/agent/src/chat/client/chatClient.js +2 -1
  10. package/dist/agent/src/chat/client/sessionClient.js +28 -3
  11. package/dist/agent/src/chat/data/dbSessionFileModels.js +10 -0
  12. package/dist/agent/src/chat/protocol/messages.js +1 -0
  13. package/dist/agent/src/chat/server/chatContextManager.js +4 -4
  14. package/dist/agent/src/chat/server/conversation.js +1 -1
  15. package/dist/agent/src/chat/server/imageGeneratorTools.js +7 -4
  16. package/dist/agent/src/chat/server/openSession.js +85 -12
  17. package/dist/agent/src/chat/server/sessionFileManager.js +17 -6
  18. package/dist/agent/src/chat/server/sessionRegistry.js +1 -1
  19. package/dist/agent/src/chat/server/tools.js +58 -10
  20. package/dist/agent/src/test/agent.test.js +26 -2
  21. package/dist/agent/src/test/chatContextManager.test.js +5 -5
  22. package/dist/agent/src/test/mcpServerManager.test.js +5 -1
  23. package/dist/agent/src/test/testTools.js +5 -2
  24. package/dist/agent/src/tool/chatMain.js +23 -3
  25. package/dist/agent/src/tool/files.js +0 -27
  26. package/package.json +3 -3
  27. package/scripts/test_chat +3 -1
  28. package/src/agent/agent.ts +53 -47
  29. package/src/agent/agentUtils.ts +7 -7
  30. package/src/agent/compressingContextManager.ts +4 -9
  31. package/src/agent/context.ts +28 -37
  32. package/src/agent/dummyLLM.ts +38 -28
  33. package/src/agent/iAgentEventHandler.ts +6 -9
  34. package/src/agent/imageGenLLM.ts +11 -5
  35. package/src/agent/llm.ts +41 -106
  36. package/src/agent/mcpServerManager.ts +145 -29
  37. package/src/agent/openAI.ts +123 -0
  38. package/src/agent/openAILLM.ts +52 -5
  39. package/src/agent/openAILLMStreaming.ts +36 -32
  40. package/src/agent/repeatLLM.ts +5 -6
  41. package/src/agent/sudoMcpServerManager.ts +48 -16
  42. package/src/agent/tools.ts +3 -5
  43. package/src/chat/client/chatClient.ts +3 -1
  44. package/src/chat/client/sessionClient.ts +47 -7
  45. package/src/chat/data/dataModels.ts +3 -3
  46. package/src/chat/data/dbSessionFileModels.ts +22 -0
  47. package/src/chat/protocol/messages.ts +39 -13
  48. package/src/chat/server/chatContextManager.ts +20 -24
  49. package/src/chat/server/conversation.ts +10 -10
  50. package/src/chat/server/imageGeneratorTools.ts +18 -9
  51. package/src/chat/server/openSession.ts +111 -22
  52. package/src/chat/server/sessionFileManager.ts +33 -10
  53. package/src/chat/server/sessionRegistry.ts +1 -1
  54. package/src/chat/server/tools.ts +77 -18
  55. package/src/chat/utils/approvalManager.ts +2 -2
  56. package/src/test/agent.test.ts +56 -31
  57. package/src/test/approvalManager.test.ts +2 -2
  58. package/src/test/chatContextManager.test.ts +11 -14
  59. package/src/test/compressingContextManager.test.ts +3 -3
  60. package/src/test/context.test.ts +3 -3
  61. package/src/test/conversation.test.ts +7 -7
  62. package/src/test/dbSessionMessages.test.ts +3 -3
  63. package/src/test/mcpServerManager.test.ts +10 -1
  64. package/src/test/testTools.ts +44 -33
  65. package/src/tool/agentChat.ts +10 -8
  66. package/src/tool/agentMain.ts +2 -2
  67. package/src/tool/chatMain.ts +38 -6
  68. package/src/tool/commandPrompt.ts +2 -4
  69. package/src/tool/files.ts +0 -34
  70. package/test_data/dummyllm_script_image_gen.json +27 -17
  71. package/test_data/dummyllm_script_invoke_image_gen_tool.json +9 -2
  72. package/test_data/dummyllm_script_render_tool.json +29 -0
  73. package/test_data/dummyllm_script_test_auto_approve.json +81 -0
  74. package/test_data/dummyllm_script_test_simplecalc_addition.json +29 -0
@@ -25,7 +25,7 @@ import {
25
25
  } from "./files";
26
26
  import { DEFAULT_AGENT_LLM_MODEL, runChat } from "./agentChat";
27
27
  import { NODE_PLATFORM } from "./nodePlatform";
28
- import { ChatCompletionMessageParam } from "../agent/llm";
28
+ import { MessageParam } from "../agent/llm";
29
29
 
30
30
  dotenv.config();
31
31
 
@@ -128,7 +128,7 @@ export const agentMain = command({
128
128
 
129
129
  // Restore conversation from value or file.
130
130
 
131
- const startingConversation: ChatCompletionMessageParam[] | undefined =
131
+ const startingConversation: MessageParam[] | undefined =
132
132
  utils.loadContentOrFileOrUndefined(conversationFile);
133
133
  logger.debug(
134
134
  `startingConversation: ${JSON.stringify(startingConversation)}`
@@ -29,6 +29,7 @@ import * as options from "./options";
29
29
  import { CommandPrompt } from "./commandPrompt";
30
30
  import { NODE_PLATFORM } from "./nodePlatform";
31
31
  import { loadImageAsDataUrl, loadSessionFileAsDataUrl } from "./files";
32
+ import { isFileMetaData } from "../chat/data/dbSessionFileModels";
32
33
 
33
34
  const logger = getLogger();
34
35
 
@@ -223,6 +224,8 @@ const client = command({
223
224
  ${chalk.yellow("/get-file <name>")} Get file contents
224
225
  ${chalk.yellow("/share-session <file>")} Share and write access token
225
226
  ${chalk.yellow("/pause-agent <0|1>")} Pause (or unpause) the agent
227
+ ${chalk.yellow("/add-mcp-server-url <server-name> <url>")} Add MCP server
228
+ ${chalk.yellow("/get-resource <server-name> <uri>")} get MCP server resource
226
229
  `;
227
230
 
228
231
  const cmdPrompt = new CommandPrompt(repl, helpText);
@@ -299,6 +302,12 @@ const client = command({
299
302
  case "pause-agent":
300
303
  pauseAgent(sessionClient, cmds[1]);
301
304
  break;
305
+ case "add-mcp-server-url":
306
+ addMcpServerFromUrl(sessionClient, cmds[1], cmds[2]);
307
+ break;
308
+ case "get-resource":
309
+ await getResource(sessionClient, cmds[1], cmds[2]);
310
+ break;
302
311
  default:
303
312
  console.log(`error: Unknown command ${cmds[0]}`);
304
313
  }
@@ -383,6 +392,25 @@ function pauseAgent(sessionClient: SessionClient, pause: string) {
383
392
  sessionClient.setAgentPaused(!!parseInt(pause));
384
393
  }
385
394
 
395
+ function addMcpServerFromUrl(
396
+ sessionClient: SessionClient,
397
+ name: string,
398
+ url: string
399
+ ) {
400
+ sessionClient.addMcpServerFromUrl(name, url);
401
+ }
402
+
403
+ async function getResource(
404
+ sessionClient: SessionClient,
405
+ serverName: string,
406
+ resourceUrl: string
407
+ ) {
408
+ const contents = await sessionClient.getMcpResource(serverName, resourceUrl);
409
+ console.log(
410
+ `resource: (${serverName}) ${resourceUrl}: ${JSON.stringify(contents)}`
411
+ );
412
+ }
413
+
386
414
  function setWorkspaceFromPrompt(
387
415
  sessionClient: SessionClient,
388
416
  cmds: string[]
@@ -491,11 +519,11 @@ function getCLIEventHandler(
491
519
  break;
492
520
  case "tool_call_result":
493
521
  {
494
- const metadata = msg.result.metadata;
495
- if (metadata) {
496
- console.log(
497
- `tool call result metadata: ${JSON.stringify(metadata)}`
498
- );
522
+ console.log(`tool call result: ${JSON.stringify(msg.result)}`);
523
+
524
+ const metadata = msg.result._meta;
525
+ if (isFileMetaData(metadata)) {
526
+ console.log(`filemanager file: ${JSON.stringify(metadata)}`);
499
527
 
500
528
  // SessionFiles should already hold the file information.
501
529
 
@@ -521,7 +549,11 @@ function getCLIEventHandler(
521
549
  msg.display_name
522
550
  );
523
551
  break;
524
-
552
+ case "session_error":
553
+ stdout.write(
554
+ chalk.red(`session_error(${msg.session_id}): ${msg.message}`)
555
+ );
556
+ break;
525
557
  default:
526
558
  stdout.write(`(unrecognised) ${JSON.stringify(msg.type)}\n`);
527
559
  break;
@@ -1,6 +1,5 @@
1
1
  import * as fs from "fs";
2
2
  import chalk from "chalk";
3
- import OpenAI from "openai";
4
3
 
5
4
  import { InvalidConfiguration } from "@xalia/xmcp/sdk";
6
5
 
@@ -10,6 +9,7 @@ import { ISkillManager } from "../agent/sudoMcpServerManager";
10
9
  import { IMcpServerManager } from "../agent/mcpServerManager";
11
10
 
12
11
  import { IPrompt } from "./prompt";
12
+ import { MessageToolCall } from "../agent/llm";
13
13
 
14
14
  type OnUnknownCommand = (cmds: string[]) => Promise<void>;
15
15
 
@@ -215,9 +215,7 @@ Have you installed server ${serverName} using the SudoMCP CLI tool?`);
215
215
  console.log(`AgentProfile written to ${fileName}`);
216
216
  }
217
217
 
218
- async promptToolCall(
219
- toolCall: OpenAI.ChatCompletionMessageToolCall
220
- ): Promise<boolean> {
218
+ async promptToolCall(toolCall: MessageToolCall): Promise<boolean> {
221
219
  displayToolCall(toolCall);
222
220
  const response = await this.prompt.run("Approve tool call? (Y/n) ");
223
221
  return (
package/src/tool/files.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import * as fs from "fs";
2
2
  import * as path from "path";
3
- import { McpServerUrls } from "../agent/agent";
4
3
  import {
5
4
  EXTENSION_TO_SESSION_FILE_MIME_TYPE,
6
5
  createSessionFileDataUrl,
@@ -83,36 +82,3 @@ export function loadImageAsDataUrlOrUndefined(
83
82
  }
84
83
  return undefined;
85
84
  }
86
-
87
- export function loadServerUrls(path: string): McpServerUrls {
88
- try {
89
- const file = fs.readFileSync(path, "utf-8");
90
- const urls: unknown = JSON.parse(file);
91
-
92
- // Validate the structure
93
- if (typeof urls !== "object" || urls === null) {
94
- throw new Error("Invalid server URLs format: must be an object");
95
- }
96
-
97
- // Validate each URL is a string
98
- for (const [key, value] of Object.entries(
99
- urls as Record<string, unknown>
100
- )) {
101
- if (typeof value !== "string") {
102
- throw new Error(
103
- `Invalid URL format for server ${key}: must be a string`
104
- );
105
- }
106
- }
107
-
108
- return urls as McpServerUrls;
109
- } catch (error) {
110
- if (error instanceof SyntaxError) {
111
- throw new Error(`Invalid JSON in server URLs file: ${error.message}`);
112
- }
113
- if (error instanceof Error) {
114
- throw new Error(`Failed to load server URLs: ${error.message}`);
115
- }
116
- throw error;
117
- }
118
- }
@@ -1,19 +1,29 @@
1
1
  [
2
- {
3
- "notes": "Test for image generating Agents",
4
- "finish_reason":"stop",
5
- "index":0,
6
- "message":{
7
- "content":"",
8
- "role":"assistant",
9
- "images":[{
10
- "type":"image_url",
11
- "image_url":{
12
- "url":"data:image/png;base64,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"
13
- },
14
- "index":0
15
- }]
2
+ {
3
+ "notes": "Test for image generating Agents",
4
+ "index": 0,
5
+ "message": {
6
+ "role": "assistant",
7
+ "content": "I'll add a generated image to the session.",
8
+ "tool_calls": [
9
+ {
10
+ "id": "file_frog.png",
11
+ "type": "function",
12
+ "function": {
13
+ "name": "put_file_content",
14
+ "arguments": "{\"name\":\"frog.png\",\"summary\":\"Image of a frog\",\"data_url\":\"data:image/png;base64,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\"}"
15
+ }
16
+ }
17
+ ]
18
+ },
19
+ "finish_reason": "tool_calls"
16
20
  },
17
- "native_finish_reason":"STOP"
18
- }
19
- ]
21
+ {
22
+ "index": 0,
23
+ "message": {
24
+ "role": "assistant",
25
+ "content": "I've added the image to the session."
26
+ },
27
+ "finish_reason": "stop"
28
+ }
29
+ ]
@@ -13,6 +13,14 @@
13
13
  "name": "gen_image_file",
14
14
  "arguments": "{\"prompt\":\"A frog\",\"name\":\"frog.png\",\"summary\":\"A picture of a frog\"}"
15
15
  }
16
+ },
17
+ {
18
+ "id": "toolu_017umizET2MjAC2ir5t4iiVS",
19
+ "type": "function",
20
+ "function": {
21
+ "name": "test_tool",
22
+ "arguments": ""
23
+ }
16
24
  }
17
25
  ]
18
26
  },
@@ -22,8 +30,7 @@
22
30
  "index": 0,
23
31
  "message": {
24
32
  "role": "assistant",
25
- "content": "file+session:/./frog.png",
26
- "metadata": { "type": "image/png" }
33
+ "content": "file+session:/./frog.png"
27
34
  },
28
35
  "finish_reason": "stop"
29
36
  }
@@ -0,0 +1,29 @@
1
+ [
2
+ {
3
+ "notes": "Test script for render tool",
4
+ "index": 0,
5
+ "message": {
6
+ "role": "assistant",
7
+ "content": "I'll render a visualization.",
8
+ "tool_calls": [
9
+ {
10
+ "id": "toolu_render_001",
11
+ "type": "function",
12
+ "function": {
13
+ "name": "render",
14
+ "arguments": "{\"name\":\"diagram.html\",\"summary\":\"Simple rendered content\",\"html\":\"<div style=\\\"text-align:center\\\"><h2>Rendered Diagram</h2><p>This content was generated via the render tool.</p><div class=\\\"mermaid\\\">graph TD; A-->B; B-->C;</div></div>\"}"
15
+ }
16
+ }
17
+ ]
18
+ },
19
+ "finish_reason": "tool_calls"
20
+ },
21
+ {
22
+ "index": 0,
23
+ "message": {
24
+ "role": "assistant",
25
+ "content": "I've rendered the visualization."
26
+ },
27
+ "finish_reason": "stop"
28
+ }
29
+ ]
@@ -0,0 +1,81 @@
1
+ [
2
+ {
3
+ "index": 0,
4
+ "message": {
5
+ "role": "assistant",
6
+ "content": "I'll calculate 5 + 3 using the SimpleCalc addition tool.",
7
+ "tool_calls": [
8
+ {
9
+ "id": "toolu_auto_approve_add_001",
10
+ "type": "function",
11
+ "function": {
12
+ "name": "sudomcp_simplecalc__add",
13
+ "arguments": "{\"a\": 5, \"b\": 3}"
14
+ }
15
+ }
16
+ ]
17
+ },
18
+ "finish_reason": "tool_calls"
19
+ },
20
+ {
21
+ "index": 0,
22
+ "message": {
23
+ "role": "assistant",
24
+ "content": "The result of 5 + 3 is 8."
25
+ },
26
+ "finish_reason": "stop"
27
+ },
28
+ {
29
+ "index": 0,
30
+ "message": {
31
+ "role": "assistant",
32
+ "content": "I'll calculate 4 * 6 using the SimpleCalc multiply tool.",
33
+ "tool_calls": [
34
+ {
35
+ "id": "toolu_auto_approve_multiply_001",
36
+ "type": "function",
37
+ "function": {
38
+ "name": "sudomcp_simplecalc__multiply",
39
+ "arguments": "{\"a\": 4, \"b\": 6}"
40
+ }
41
+ }
42
+ ]
43
+ },
44
+ "finish_reason": "tool_calls"
45
+ },
46
+ {
47
+ "index": 0,
48
+ "message": {
49
+ "role": "assistant",
50
+ "content": "The result of 4 * 6 is 24."
51
+ },
52
+ "finish_reason": "stop"
53
+ },
54
+ {
55
+ "index": 0,
56
+ "message": {
57
+ "role": "assistant",
58
+ "content": "I'll calculate 7 * 8 using the SimpleCalc multiply tool.",
59
+ "tool_calls": [
60
+ {
61
+ "id": "toolu_auto_approve_multiply_002",
62
+ "type": "function",
63
+ "function": {
64
+ "name": "sudomcp_simplecalc__multiply",
65
+ "arguments": "{\"a\": 7, \"b\": 8}"
66
+ }
67
+ }
68
+ ]
69
+ },
70
+ "finish_reason": "tool_calls"
71
+ },
72
+ {
73
+ "index": 0,
74
+ "message": {
75
+ "role": "assistant",
76
+ "content": "The result of 7 * 8 is 56."
77
+ },
78
+ "finish_reason": "stop"
79
+ }
80
+ ]
81
+
@@ -0,0 +1,29 @@
1
+ [
2
+ {
3
+ "index": 0,
4
+ "message": {
5
+ "role": "assistant",
6
+ "content": "I'll test the SimpleCalc addition tool by adding two numbers together.",
7
+ "tool_calls": [
8
+ {
9
+ "id": "toolu_test_addition_001",
10
+ "type": "function",
11
+ "function": {
12
+ "name": "sudomcp_simplecalc__add",
13
+ "arguments": "{\"a\": 5, \"b\": 3}"
14
+ }
15
+ }
16
+ ]
17
+ },
18
+ "finish_reason": "tool_calls"
19
+ },
20
+ {
21
+ "index": 0,
22
+ "message": {
23
+ "role": "assistant",
24
+ "content": "The SimpleCalc addition tool is working correctly. I used it to add 5 + 3, which equals 8."
25
+ },
26
+ "finish_reason": "stop"
27
+ }
28
+ ]
29
+