@mishri/ai-term 1.0.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 (124) hide show
  1. package/README.md +77 -0
  2. package/dist/agent/context/compaction.d.ts +3 -0
  3. package/dist/agent/context/compaction.d.ts.map +1 -0
  4. package/dist/agent/context/compaction.js +39 -0
  5. package/dist/agent/context/compaction.js.map +1 -0
  6. package/dist/agent/context/index.d.ts +7 -0
  7. package/dist/agent/context/index.d.ts.map +1 -0
  8. package/dist/agent/context/index.js +24 -0
  9. package/dist/agent/context/index.js.map +1 -0
  10. package/dist/agent/context/modelLimits.d.ts +7 -0
  11. package/dist/agent/context/modelLimits.d.ts.map +1 -0
  12. package/dist/agent/context/modelLimits.js +31 -0
  13. package/dist/agent/context/modelLimits.js.map +1 -0
  14. package/dist/agent/context/tokenEstimator.d.ts +3 -0
  15. package/dist/agent/context/tokenEstimator.d.ts.map +1 -0
  16. package/dist/agent/context/tokenEstimator.js +28 -0
  17. package/dist/agent/context/tokenEstimator.js.map +1 -0
  18. package/dist/agent/evals/agent-multiturn.eval.d.ts +2 -0
  19. package/dist/agent/evals/agent-multiturn.eval.d.ts.map +1 -0
  20. package/dist/agent/evals/agent-multiturn.eval.js +32 -0
  21. package/dist/agent/evals/agent-multiturn.eval.js.map +1 -0
  22. package/dist/agent/evals/data/agent-multiturn.json +111 -0
  23. package/dist/agent/evals/data/tool-calls.json +28 -0
  24. package/dist/agent/evals/evaluators.d.ts +6 -0
  25. package/dist/agent/evals/evaluators.d.ts.map +1 -0
  26. package/dist/agent/evals/evaluators.js +59 -0
  27. package/dist/agent/evals/evaluators.js.map +1 -0
  28. package/dist/agent/evals/executors.d.ts +31 -0
  29. package/dist/agent/evals/executors.d.ts.map +1 -0
  30. package/dist/agent/evals/executors.js +107 -0
  31. package/dist/agent/evals/executors.js.map +1 -0
  32. package/dist/agent/evals/file-tools.eval.d.ts +2 -0
  33. package/dist/agent/evals/file-tools.eval.d.ts.map +1 -0
  34. package/dist/agent/evals/file-tools.eval.js +27 -0
  35. package/dist/agent/evals/file-tools.eval.js.map +1 -0
  36. package/dist/agent/evals/mocks/tools.d.ts +32 -0
  37. package/dist/agent/evals/mocks/tools.d.ts.map +1 -0
  38. package/dist/agent/evals/mocks/tools.js +58 -0
  39. package/dist/agent/evals/mocks/tools.js.map +1 -0
  40. package/dist/agent/evals/types.d.ts +55 -0
  41. package/dist/agent/evals/types.d.ts.map +1 -0
  42. package/dist/agent/evals/types.js +2 -0
  43. package/dist/agent/evals/types.js.map +1 -0
  44. package/dist/agent/evals/utils.d.ts +4 -0
  45. package/dist/agent/evals/utils.d.ts.map +1 -0
  46. package/dist/agent/evals/utils.js +20 -0
  47. package/dist/agent/evals/utils.js.map +1 -0
  48. package/dist/agent/executeTool.d.ts +42 -0
  49. package/dist/agent/executeTool.d.ts.map +1 -0
  50. package/dist/agent/executeTool.js +14 -0
  51. package/dist/agent/executeTool.js.map +1 -0
  52. package/dist/agent/run.d.ts +4 -0
  53. package/dist/agent/run.d.ts.map +1 -0
  54. package/dist/agent/run.js +134 -0
  55. package/dist/agent/run.js.map +1 -0
  56. package/dist/agent/system/filterMessages.d.ts +3 -0
  57. package/dist/agent/system/filterMessages.d.ts.map +1 -0
  58. package/dist/agent/system/filterMessages.js +25 -0
  59. package/dist/agent/system/filterMessages.js.map +1 -0
  60. package/dist/agent/system/system_prompt.d.ts +2 -0
  61. package/dist/agent/system/system_prompt.d.ts.map +1 -0
  62. package/dist/agent/system/system_prompt.js +8 -0
  63. package/dist/agent/system/system_prompt.js.map +1 -0
  64. package/dist/agent/system_prompt.d.ts +2 -0
  65. package/dist/agent/system_prompt.d.ts.map +1 -0
  66. package/dist/agent/system_prompt.js +8 -0
  67. package/dist/agent/system_prompt.js.map +1 -0
  68. package/dist/agent/tools/execCode.d.ts +5 -0
  69. package/dist/agent/tools/execCode.d.ts.map +1 -0
  70. package/dist/agent/tools/execCode.js +58 -0
  71. package/dist/agent/tools/execCode.js.map +1 -0
  72. package/dist/agent/tools/file.d.ts +29 -0
  73. package/dist/agent/tools/file.d.ts.map +1 -0
  74. package/dist/agent/tools/file.js +92 -0
  75. package/dist/agent/tools/file.js.map +1 -0
  76. package/dist/agent/tools/index.d.ts +44 -0
  77. package/dist/agent/tools/index.d.ts.map +1 -0
  78. package/dist/agent/tools/index.js +14 -0
  79. package/dist/agent/tools/index.js.map +1 -0
  80. package/dist/agent/tools/shell.d.ts +4 -0
  81. package/dist/agent/tools/shell.d.ts.map +1 -0
  82. package/dist/agent/tools/shell.js +30 -0
  83. package/dist/agent/tools/shell.js.map +1 -0
  84. package/dist/agent/tools/websearch.d.ts +22 -0
  85. package/dist/agent/tools/websearch.d.ts.map +1 -0
  86. package/dist/agent/tools/websearch.js +3 -0
  87. package/dist/agent/tools/websearch.js.map +1 -0
  88. package/dist/agent/type.d.ts +27 -0
  89. package/dist/agent/type.d.ts.map +1 -0
  90. package/dist/agent/type.js +2 -0
  91. package/dist/agent/type.js.map +1 -0
  92. package/dist/config.d.ts +4 -0
  93. package/dist/config.d.ts.map +1 -0
  94. package/dist/config.js +6 -0
  95. package/dist/config.js.map +1 -0
  96. package/dist/index.d.ts +3 -0
  97. package/dist/index.d.ts.map +1 -0
  98. package/dist/index.js +12 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/ui/App.d.ts +2 -0
  101. package/dist/ui/App.d.ts.map +1 -0
  102. package/dist/ui/App.js +89 -0
  103. package/dist/ui/App.js.map +1 -0
  104. package/dist/ui/components/Input.d.ts +7 -0
  105. package/dist/ui/components/Input.d.ts.map +1 -0
  106. package/dist/ui/components/Input.js +26 -0
  107. package/dist/ui/components/Input.js.map +1 -0
  108. package/dist/ui/components/MessageList.d.ts +10 -0
  109. package/dist/ui/components/MessageList.d.ts.map +1 -0
  110. package/dist/ui/components/MessageList.js +7 -0
  111. package/dist/ui/components/MessageList.js.map +1 -0
  112. package/dist/ui/components/TokenUsage.d.ts +8 -0
  113. package/dist/ui/components/TokenUsage.d.ts.map +1 -0
  114. package/dist/ui/components/TokenUsage.js +20 -0
  115. package/dist/ui/components/TokenUsage.js.map +1 -0
  116. package/dist/ui/components/ToolApproval.d.ts +6 -0
  117. package/dist/ui/components/ToolApproval.d.ts.map +1 -0
  118. package/dist/ui/components/ToolApproval.js +19 -0
  119. package/dist/ui/components/ToolApproval.js.map +1 -0
  120. package/dist/ui/components/ToolCall.d.ts +8 -0
  121. package/dist/ui/components/ToolCall.d.ts.map +1 -0
  122. package/dist/ui/components/ToolCall.js +13 -0
  123. package/dist/ui/components/ToolCall.js.map +1 -0
  124. package/package.json +58 -0
@@ -0,0 +1,2 @@
1
+ export declare const SYSTEM_PROMPT = "You are a helpful ai agent running in the terminal. Answer the user's queries in succinct way.\nYou have access to the following tools:\n- **readFile** : Read the contents({path}) of a specified file path.\n- **writeFile** : Write contents({path,content}) to a file at a specified file path.\n- **listFiles** : List all the files and directories in a specific directory.\n- **deleteFile** : Remove/delete({path}) a file, use this when the user asks you to remove a file.\n";
2
+ //# sourceMappingURL=system_prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system_prompt.d.ts","sourceRoot":"","sources":["../../src/agent/system_prompt.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,6dAMzB,CAAA"}
@@ -0,0 +1,8 @@
1
+ export const SYSTEM_PROMPT = `You are a helpful ai agent running in the terminal. Answer the user's queries in succinct way.
2
+ You have access to the following tools:
3
+ - **readFile** : Read the contents({path}) of a specified file path.
4
+ - **writeFile** : Write contents({path,content}) to a file at a specified file path.
5
+ - **listFiles** : List all the files and directories in a specific directory.
6
+ - **deleteFile** : Remove/delete({path}) a file, use this when the user asks you to remove a file.
7
+ `;
8
+ //# sourceMappingURL=system_prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system_prompt.js","sourceRoot":"","sources":["../../src/agent/system_prompt.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;CAM5B,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare const execCode: import("ai").Tool<{
2
+ code: string;
3
+ language: "javascript" | "python" | "typescript";
4
+ }, string>;
5
+ //# sourceMappingURL=execCode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execCode.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/execCode.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,QAAQ;;;UA2DnB,CAAA"}
@@ -0,0 +1,58 @@
1
+ import { tool } from "ai";
2
+ import z from "zod";
3
+ import path from "node:path";
4
+ import os from "node:os";
5
+ import fs from "fs/promises";
6
+ import shell from "shelljs";
7
+ export const execCode = tool({
8
+ description: `Execute code for anything you need compute for.
9
+ Supports Javascript(Node.js), Python, and Typescript.
10
+ Returns the output of the execution`,
11
+ inputSchema: z.object({
12
+ code: z.string().describe("The code to execute"),
13
+ language: z.enum(["javascript", "python", "typescript"]).describe("The programming language of the code").default("javascript")
14
+ }),
15
+ execute: async ({ code, language }) => {
16
+ const extensions = {
17
+ "javascript": ".js",
18
+ "python": ".py",
19
+ "typescript": ".ts"
20
+ };
21
+ const commands = {
22
+ "javascript": (file) => `node${file}`,
23
+ "python": (file) => `python3 ${file}`,
24
+ "typescript": (file) => `npx tsx ${file}`
25
+ };
26
+ const ext = extensions[language];
27
+ const cmd = commands[language];
28
+ const tmpFile = path.join(os.tmpdir(), `code-exec-${Date.now()}${ext}`);
29
+ try {
30
+ await fs.writeFile(tmpFile, code, "utf-8");
31
+ const result = shell.exec(cmd(tmpFile), { silent: true });
32
+ let output = "";
33
+ if (result.stdout) {
34
+ output += result.stdout;
35
+ }
36
+ if (result.stderr) {
37
+ output += result.stderr;
38
+ }
39
+ if (result.code !== 0) {
40
+ return `Execution failed (exit code ${result.code}):\n${output}`;
41
+ }
42
+ return output || "Code executed successfully (no output)";
43
+ }
44
+ catch (error) {
45
+ const err = error;
46
+ return `Error executing code: ${err.message}`;
47
+ }
48
+ finally {
49
+ try {
50
+ await fs.unlink(tmpFile);
51
+ }
52
+ catch {
53
+ // Ignore cleanup errors
54
+ }
55
+ }
56
+ }
57
+ });
58
+ //# sourceMappingURL=execCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execCode.js","sourceRoot":"","sources":["../../../src/agent/tools/execCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,MAAM,aAAa,CAAA;AAC5B,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE;;wCAEuB;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAChD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;KAClI,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAsE,EAAE,EAAE;QACtG,MAAM,UAAU,GAA2B;YACvC,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACtB,CAAA;QAGD,MAAM,QAAQ,GAA6C;YACvD,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE;YACrC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE;YACrC,YAAY,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE;SACpD,CAAA;QAGD,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;QAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAE,CAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;QAGvE,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;YAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YAEzD,IAAI,MAAM,GAAG,EAAE,CAAA;YAEf,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,IAAI,MAAM,CAAC,MAAM,CAAA;YAC3B,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,IAAI,MAAM,CAAC,MAAM,CAAA;YAC3B,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACpB,OAAO,+BAA+B,MAAM,CAAC,IAAI,OAAO,MAAM,EAAE,CAAC;YACrE,CAAC;YAED,OAAO,MAAM,IAAI,wCAAwC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,KAAc,CAAC;YAC3B,OAAO,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAA;QACjD,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC;gBACD,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACL,wBAAwB;YAC5B,CAAC;QACL,CAAC;IACL,CAAC;CAEJ,CAAC,CAAA"}
@@ -0,0 +1,29 @@
1
+ export declare const readFile: import("ai").Tool<{
2
+ path: string;
3
+ }, string>;
4
+ export declare const writeFile: import("ai").Tool<{
5
+ path: string;
6
+ content: string;
7
+ }, string>;
8
+ export declare const listFiles: import("ai").Tool<{
9
+ directory: string;
10
+ }, string>;
11
+ export declare const deleteFile: import("ai").Tool<{
12
+ path: string;
13
+ }, string>;
14
+ export declare const fileTools: {
15
+ readFile: import("ai").Tool<{
16
+ path: string;
17
+ }, string>;
18
+ writeFile: import("ai").Tool<{
19
+ path: string;
20
+ content: string;
21
+ }, string>;
22
+ listFiles: import("ai").Tool<{
23
+ directory: string;
24
+ }, string>;
25
+ deleteFile: import("ai").Tool<{
26
+ path: string;
27
+ }, string>;
28
+ };
29
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/file.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ;;UAiBnB,CAAA;AAEF,eAAO,MAAM,SAAS;;;UAiBpB,CAAA;AAEF,eAAO,MAAM,SAAS;;UAuBpB,CAAA;AAEF,eAAO,MAAM,UAAU;;UAiBrB,CAAA;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;CAKrB,CAAA"}
@@ -0,0 +1,92 @@
1
+ import { tool } from "ai";
2
+ import z from "zod";
3
+ import fs from "fs/promises";
4
+ import path from "path";
5
+ export const readFile = tool({
6
+ description: `Read the contents of the file with the path.`,
7
+ inputSchema: z.object({
8
+ path: z.string().describe("Path of the file you need to read.")
9
+ }),
10
+ execute: async ({ path: filePath }) => {
11
+ try {
12
+ const contents = await fs.readFile(filePath, "utf-8");
13
+ return contents;
14
+ }
15
+ catch (error) {
16
+ const err = error;
17
+ if (err.code === "ENOENT") {
18
+ return `Error: File not found : ${filePath}`;
19
+ }
20
+ return `Error occured while reading the file : ${err.message}`;
21
+ }
22
+ }
23
+ });
24
+ export const writeFile = tool({
25
+ description: `Write contents to a file at a specified path. Creates the file if it doesn't exist, overwrites if it does`,
26
+ inputSchema: z.object({
27
+ path: z.string().describe("Path of the file you need to write to."),
28
+ content: z.string().describe("The content you want to write")
29
+ }),
30
+ execute: async ({ path: filePath, content }) => {
31
+ try {
32
+ const dir = path.dirname(filePath);
33
+ await fs.mkdir(dir, { recursive: true });
34
+ await fs.writeFile(filePath, content, "utf-8");
35
+ return `Successfully wrote ${content.length} characters to ${filePath}`;
36
+ }
37
+ catch (error) {
38
+ const err = error;
39
+ return `Error writing file: ${err.message}`;
40
+ }
41
+ }
42
+ });
43
+ export const listFiles = tool({
44
+ description: `List all the files and directories in the specified directory path.`,
45
+ inputSchema: z.object({
46
+ directory: z.string().describe("The directory to list the contents of")
47
+ .default(".")
48
+ }),
49
+ execute: async ({ directory }) => {
50
+ try {
51
+ const entries = await fs.readdir(directory, { withFileTypes: true });
52
+ const items = entries.map((entry) => {
53
+ const type = entry.isDirectory() ? "[dir]" : "[file]";
54
+ return `${type} ${entry.name}`;
55
+ });
56
+ return items.length > 0 ? items.join("\n") : `Directory ${directory} is empty.`;
57
+ }
58
+ catch (error) {
59
+ const err = error;
60
+ if (err.code === "ENOENT") {
61
+ return `Error: Directory not found: ${directory}`;
62
+ }
63
+ return `Error listing directory: ${err.message}`;
64
+ }
65
+ }
66
+ });
67
+ export const deleteFile = tool({
68
+ description: "Remove a file with the specified path",
69
+ inputSchema: z.object({
70
+ path: z.string().describe("Path of the file to delete.")
71
+ }),
72
+ execute: async ({ path }) => {
73
+ try {
74
+ await fs.unlink(path);
75
+ return `Removed : ${path}`;
76
+ }
77
+ catch (error) {
78
+ const err = error;
79
+ if (err.code === "ENOENT") {
80
+ return `Error: File not found: ${path}`;
81
+ }
82
+ return `Error deleting file: ${err.message}`;
83
+ }
84
+ }
85
+ });
86
+ export const fileTools = {
87
+ readFile,
88
+ writeFile,
89
+ listFiles,
90
+ deleteFile
91
+ };
92
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/agent/tools/file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ export declare const tools: {
2
+ readFile: import("ai").Tool<{
3
+ path: string;
4
+ }, string>;
5
+ writeFile: import("ai").Tool<{
6
+ path: string;
7
+ content: string;
8
+ }, string>;
9
+ listFiles: import("ai").Tool<{
10
+ directory: string;
11
+ }, string>;
12
+ deleteFile: import("ai").Tool<{
13
+ path: string;
14
+ }, string>;
15
+ webSearch: import("ai").Tool<{}, {
16
+ action?: {
17
+ type: "search";
18
+ query?: string;
19
+ queries?: string[];
20
+ } | {
21
+ type: "openPage";
22
+ url?: string | null;
23
+ } | {
24
+ type: "findInPage";
25
+ url?: string | null;
26
+ pattern?: string | null;
27
+ };
28
+ sources?: Array<{
29
+ type: "url";
30
+ url: string;
31
+ } | {
32
+ type: "api";
33
+ name: string;
34
+ }>;
35
+ }>;
36
+ execCode: import("ai").Tool<{
37
+ code: string;
38
+ language: "javascript" | "python" | "typescript";
39
+ }, string>;
40
+ shellCommand: import("ai").Tool<{
41
+ command: string;
42
+ }, string>;
43
+ };
44
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;iBAQmh+B,CAAC;mBAA6B,CAAC;;;eAAuE,CAAC;;;eAA8E,CAAC;mBAAoC,CAAC;;;;;;;;;;;;;;;;;CAA/v+B,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { execCode } from "./execCode.js";
2
+ import { deleteFile, listFiles, readFile, writeFile } from "./file.js";
3
+ import { shellCommand } from "./shell.js";
4
+ import { webSearch } from "./websearch.js";
5
+ export const tools = {
6
+ readFile,
7
+ writeFile,
8
+ listFiles,
9
+ deleteFile,
10
+ webSearch,
11
+ execCode,
12
+ shellCommand
13
+ };
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,CAAC,MAAM,KAAK,GAAG;IACjB,QAAQ;IACR,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IACT,QAAQ;IACR,YAAY;CACf,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare const shellCommand: import("ai").Tool<{
2
+ command: string;
3
+ }, string>;
4
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/shell.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY;;UA2BvB,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { tool } from "ai";
2
+ import z from "zod";
3
+ import shell from "shelljs";
4
+ export const shellCommand = tool({
5
+ description: "Run the shell commands that are not supported by the existing tools",
6
+ inputSchema: z.object({
7
+ command: z.string().describe("The command to run")
8
+ }),
9
+ execute: async ({ command }) => {
10
+ try {
11
+ const result = shell.exec(command, { silent: true });
12
+ let output = "";
13
+ if (result.stdout) {
14
+ output += result.stdout;
15
+ }
16
+ if (result.stderr) {
17
+ output += result.stderr;
18
+ }
19
+ if (result.code !== 0) {
20
+ return `Command failed (exit code ${result.code}:\n${output})`;
21
+ }
22
+ return output || "Command completed successfully(no output)";
23
+ }
24
+ catch (error) {
25
+ const err = error;
26
+ return `Error executing shell command: ${err.message}`;
27
+ }
28
+ }
29
+ });
30
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/agent/tools/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,qEAAqE;IAClF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KACrD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YAEpD,IAAI,MAAM,GAAG,EAAE,CAAA;YACf,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,IAAI,MAAM,CAAC,MAAM,CAAA;YAC3B,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,IAAI,MAAM,CAAC,MAAM,CAAA;YAC3B,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACpB,OAAO,6BAA6B,MAAM,CAAC,IAAI,MAAM,MAAM,GAAG,CAAA;YAClE,CAAC;YAED,OAAO,MAAM,IAAI,2CAA2C,CAAA;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,KAAc,CAAC;YAC3B,OAAO,kCAAkC,GAAG,CAAC,OAAO,EAAE,CAAA;QAC1D,CAAC;IACL,CAAC;CACJ,CAAC,CAAA"}
@@ -0,0 +1,22 @@
1
+ export declare const webSearch: import("ai").Tool<{}, {
2
+ action?: {
3
+ type: "search";
4
+ query?: string;
5
+ queries?: string[];
6
+ } | {
7
+ type: "openPage";
8
+ url?: string | null;
9
+ } | {
10
+ type: "findInPage";
11
+ url?: string | null;
12
+ pattern?: string | null;
13
+ };
14
+ sources?: Array<{
15
+ type: "url";
16
+ url: string;
17
+ } | {
18
+ type: "api";
19
+ name: string;
20
+ }>;
21
+ }>;
22
+ //# sourceMappingURL=websearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websearch.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/websearch.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;;aAAgz+B,CAAC;eAA6B,CAAC;;;WAAuE,CAAC;;;WAA8E,CAAC;eAAoC,CAAC;;;;;;;;;EAA9++B,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { openai } from "@ai-sdk/openai";
2
+ export const webSearch = openai.tools.webSearch({});
3
+ //# sourceMappingURL=websearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websearch.js","sourceRoot":"","sources":["../../../src/agent/tools/websearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA"}
@@ -0,0 +1,27 @@
1
+ export interface AgentCallbacks {
2
+ onToken: (token: string) => void;
3
+ onToolCallStart: (name: string, id: string, input: Record<string, any>) => void;
4
+ onToolCallEnd: (name: string, result: string) => void;
5
+ onComplete: (fullResponse: string) => void;
6
+ onTokenUsage: ({ inputTokens, outputTokens, totalTokens, contextWindow, threshold, percentage }: TokenUsageInfo) => void;
7
+ onToolApproval: (toolName: string, args: {}) => Promise<boolean>;
8
+ }
9
+ export interface ModelLimits {
10
+ inputLimit: number;
11
+ outputLimit: number;
12
+ contextWindow: number;
13
+ }
14
+ export interface TokenUsageInfo {
15
+ inputTokens: number;
16
+ outputTokens: number;
17
+ totalTokens: number;
18
+ contextWindow: number;
19
+ threshold: number;
20
+ percentage: number;
21
+ }
22
+ export interface toolApprovalRequest {
23
+ toolName: string;
24
+ args: {};
25
+ resolve: (value: boolean | PromiseLike<boolean>) => void;
26
+ }
27
+ //# sourceMappingURL=type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/agent/type.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAA;IAC/E,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrD,UAAU,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,EAC3F,cAAc,KAAK,IAAI,CAAC;IAC5B,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACnE;AAED,MAAM,WAAW,WAAW;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,EAAE,CAAC;IACT,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;CAC3D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/agent/type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export declare const GEMINI_API_KEY: string;
2
+ export declare const OPENAI_API_KEY: string;
3
+ export declare const LMNR_PROJECT_API_KEY: string;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,QAAmC,CAAA;AAC9D,eAAO,MAAM,cAAc,QAAmC,CAAA;AAC9D,eAAO,MAAM,oBAAoB,QAAyC,CAAA"}
package/dist/config.js ADDED
@@ -0,0 +1,6 @@
1
+ import { config } from "dotenv";
2
+ config();
3
+ export const GEMINI_API_KEY = process.env.GEMINI_API_KEY || "";
4
+ export const OPENAI_API_KEY = process.env.OPENAI_API_KEY || "";
5
+ export const LMNR_PROJECT_API_KEY = process.env.LMNR_PROJECT_API_KEY || "";
6
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,MAAM,EAAE,CAAA;AAER,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAA;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAA;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ import { render } from "ink";
3
+ import { createElement } from "react";
4
+ import { App } from "./ui/App.js";
5
+ import { OPENAI_API_KEY } from "./config.js";
6
+ if (!OPENAI_API_KEY) {
7
+ console.error("Missing OPENAI_API_KEY. Set it in your environment or in a .env file.\n" +
8
+ "See .env.example for details.");
9
+ process.exit(1);
10
+ }
11
+ render(createElement(App));
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,IAAI,CAAC,cAAc,EAAE,CAAC;IACpB,OAAO,CAAC,KAAK,CACX,yEAAyE;QACvE,+BAA+B,CAClC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function App(): import("react").JSX.Element;
2
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"AAeA,wBAAgB,GAAG,gCAqIlB"}
package/dist/ui/App.js ADDED
@@ -0,0 +1,89 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useApp } from "ink";
3
+ import { MessageList } from "./components/MessageList.js";
4
+ import { useCallback, useRef, useState } from "react";
5
+ import { ToolCall } from "./components/ToolCall.js";
6
+ import { Input } from "./components/Input.js";
7
+ import { runAgent } from "../agent/run.js";
8
+ import { TokenUsage } from "./components/TokenUsage.js";
9
+ import { ToolApproval } from "./components/ToolApproval.js";
10
+ export function App() {
11
+ const { exit } = useApp();
12
+ const [messages, setMessages] = useState([]);
13
+ const [stremingText, setStreamingText] = useState("");
14
+ const [activeToolCalls, setActiveToolCalls] = useState([]);
15
+ const [loading, setLoading] = useState(false);
16
+ const [conversationHistory, setConversationHistory] = useState([]);
17
+ const [tokenUsage, setTokenUsage] = useState(null);
18
+ const [pendingApproval, setPendingApproval] = useState(null);
19
+ const handleSubmit = useCallback(async (userInput) => {
20
+ if (userInput.toLowerCase() === "exit" ||
21
+ userInput.toLowerCase() === "quit") {
22
+ exit();
23
+ return;
24
+ }
25
+ setMessages((prev) => [...prev, { role: "user", content: userInput }]);
26
+ setLoading(true);
27
+ try {
28
+ const newHistory = await runAgent(userInput, conversationHistory, {
29
+ onToken: (token) => {
30
+ setStreamingText((prev) => prev + token);
31
+ },
32
+ onToolCallStart: (name, id, input) => {
33
+ setActiveToolCalls((prev) => [
34
+ ...prev,
35
+ {
36
+ id,
37
+ name,
38
+ args: input,
39
+ status: "pending",
40
+ },
41
+ ]);
42
+ },
43
+ onToolCallEnd: (name, result) => {
44
+ setActiveToolCalls((prev) => prev.map((tc) => tc.name === name && tc.status === "pending"
45
+ ? { ...tc, status: "completed", result }
46
+ : tc));
47
+ },
48
+ onComplete: (fullResponse) => {
49
+ setStreamingText("");
50
+ setMessages((prev) => [
51
+ ...prev,
52
+ { role: "assistant", content: fullResponse },
53
+ ]);
54
+ setActiveToolCalls([]);
55
+ },
56
+ onTokenUsage: (usage) => {
57
+ setTokenUsage(usage);
58
+ },
59
+ onToolApproval: async (toolName, args) => {
60
+ return new Promise((resolve) => {
61
+ setPendingApproval({
62
+ toolName,
63
+ args,
64
+ resolve,
65
+ });
66
+ });
67
+ },
68
+ });
69
+ setConversationHistory(newHistory);
70
+ }
71
+ catch (error) {
72
+ setMessages((prev) => [
73
+ ...prev,
74
+ {
75
+ role: "assistant",
76
+ content: `Error: ${error instanceof Error ? error.message : "Unknown Error"}`,
77
+ },
78
+ ]);
79
+ }
80
+ finally {
81
+ setLoading(false);
82
+ }
83
+ }, [conversationHistory, exit]);
84
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, gap: 1, children: [_jsx(Text, { color: "cyan", bold: true, children: "AI Agent" }), _jsx(Text, { dimColor: true, children: "type \"exit\" to quit" })] }), _jsxs(Box, { flexDirection: "column", children: [_jsx(MessageList, { messages: messages }), activeToolCalls.length > 0 && (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: activeToolCalls.map((tc) => (_jsx(ToolCall, { name: tc.name, args: tc.args ?? {}, status: tc.status, result: tc.result }, tc.id))) })), stremingText && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: stremingText }) }))] }), pendingApproval && (_jsx(ToolApproval, { toolName: pendingApproval.toolName, args: pendingApproval.args, onResolve: (approval) => {
85
+ pendingApproval.resolve(approval);
86
+ setPendingApproval(null);
87
+ } })), _jsx(Input, { onSubmit: handleSubmit, disabled: loading }), _jsx(TokenUsage, { usage: tokenUsage })] }));
88
+ }
89
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface InputProps {
2
+ onSubmit: (value: string) => void;
3
+ disabled: boolean;
4
+ }
5
+ export declare function Input({ onSubmit, disabled }: InputProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=Input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Input.tsx"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;CACnB;AACD,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,UAAU,+BAqCvD"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import figureSet from "figures";
3
+ import { Box, Text, useInput } from "ink";
4
+ import { useState } from "react";
5
+ export function Input({ onSubmit, disabled }) {
6
+ const [value, setValue] = useState("");
7
+ useInput((input, key) => {
8
+ if (disabled)
9
+ return;
10
+ if (key.return) {
11
+ if (value.trim()) {
12
+ onSubmit(value);
13
+ setValue("");
14
+ }
15
+ return;
16
+ }
17
+ if (key.backspace || key.delete) {
18
+ setValue((prev) => prev.slice(0, -1));
19
+ }
20
+ if (input && !key.ctrl && !key.meta) {
21
+ setValue((prev) => prev + input);
22
+ }
23
+ });
24
+ return (_jsxs(Box, { children: [_jsx(Text, { color: disabled ? "gray" : "cyan", bold: true, children: `${figureSet.triangleRight} ` }), disabled ? (_jsx(Text, { dimColor: true, children: "thinking\u2026" })) : (_jsxs(Text, { children: [value, _jsx(Text, { color: "cyan", children: "\u258B" })] }))] }));
25
+ }
26
+ //# sourceMappingURL=Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../src/ui/components/Input.tsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAMjC,MAAM,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAc;IACtD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEvC,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,QAAQ;YAAE,OAAO;QACrB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjB,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAChB,QAAQ,CAAC,EAAE,CAAC,CAAC;YACf,CAAC;YAED,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAChC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACpC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,kBAC1C,GAAG,SAAS,CAAC,aAAa,GAAG,GACzB,EACN,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,IAAI,IAAC,QAAQ,qCAAiB,CAChC,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,eACF,KAAK,EACN,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uBAAS,IACtB,CACR,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface Message {
2
+ role: "user" | "assistant";
3
+ content: string;
4
+ }
5
+ interface MessageListProps {
6
+ messages: Message[];
7
+ }
8
+ export declare function MessageList({ messages }: MessageListProps): import("react").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=MessageList.d.ts.map