@ugm/desiagent 0.1.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.
Files changed (202) hide show
  1. package/README.md +251 -0
  2. package/dist/__tests__/test-utils.d.ts +24 -0
  3. package/dist/__tests__/test-utils.d.ts.map +1 -0
  4. package/dist/__tests__/test-utils.js +32 -0
  5. package/dist/__tests__/test-utils.js.map +1 -0
  6. package/dist/core/execution/agents.d.ts +60 -0
  7. package/dist/core/execution/agents.d.ts.map +1 -0
  8. package/dist/core/execution/agents.js +249 -0
  9. package/dist/core/execution/agents.js.map +1 -0
  10. package/dist/core/execution/artifacts.d.ts +27 -0
  11. package/dist/core/execution/artifacts.d.ts.map +1 -0
  12. package/dist/core/execution/artifacts.js +93 -0
  13. package/dist/core/execution/artifacts.js.map +1 -0
  14. package/dist/core/execution/costs.d.ts +160 -0
  15. package/dist/core/execution/costs.d.ts.map +1 -0
  16. package/dist/core/execution/costs.js +196 -0
  17. package/dist/core/execution/costs.js.map +1 -0
  18. package/dist/core/execution/dagExecutor.d.ts +112 -0
  19. package/dist/core/execution/dagExecutor.d.ts.map +1 -0
  20. package/dist/core/execution/dagExecutor.js +647 -0
  21. package/dist/core/execution/dagExecutor.js.map +1 -0
  22. package/dist/core/execution/dags.d.ts +167 -0
  23. package/dist/core/execution/dags.d.ts.map +1 -0
  24. package/dist/core/execution/dags.js +713 -0
  25. package/dist/core/execution/dags.js.map +1 -0
  26. package/dist/core/execution/executions.d.ts +158 -0
  27. package/dist/core/execution/executions.d.ts.map +1 -0
  28. package/dist/core/execution/executions.js +258 -0
  29. package/dist/core/execution/executions.js.map +1 -0
  30. package/dist/core/execution/goals.d.ts +62 -0
  31. package/dist/core/execution/goals.d.ts.map +1 -0
  32. package/dist/core/execution/goals.js +245 -0
  33. package/dist/core/execution/goals.js.map +1 -0
  34. package/dist/core/execution/runs.d.ts +65 -0
  35. package/dist/core/execution/runs.d.ts.map +1 -0
  36. package/dist/core/execution/runs.js +219 -0
  37. package/dist/core/execution/runs.js.map +1 -0
  38. package/dist/core/execution/tools.d.ts +24 -0
  39. package/dist/core/execution/tools.d.ts.map +1 -0
  40. package/dist/core/execution/tools.js +33 -0
  41. package/dist/core/execution/tools.js.map +1 -0
  42. package/dist/core/orchestration/index.d.ts +7 -0
  43. package/dist/core/orchestration/index.d.ts.map +1 -0
  44. package/dist/core/orchestration/index.js +7 -0
  45. package/dist/core/orchestration/index.js.map +1 -0
  46. package/dist/core/orchestration/orchestrator.d.ts +39 -0
  47. package/dist/core/orchestration/orchestrator.d.ts.map +1 -0
  48. package/dist/core/orchestration/orchestrator.js +141 -0
  49. package/dist/core/orchestration/orchestrator.js.map +1 -0
  50. package/dist/core/orchestration/planner.d.ts +63 -0
  51. package/dist/core/orchestration/planner.d.ts.map +1 -0
  52. package/dist/core/orchestration/planner.js +99 -0
  53. package/dist/core/orchestration/planner.js.map +1 -0
  54. package/dist/core/providers/factory.d.ts +25 -0
  55. package/dist/core/providers/factory.d.ts.map +1 -0
  56. package/dist/core/providers/factory.js +86 -0
  57. package/dist/core/providers/factory.js.map +1 -0
  58. package/dist/core/providers/index.d.ts +11 -0
  59. package/dist/core/providers/index.d.ts.map +1 -0
  60. package/dist/core/providers/index.js +10 -0
  61. package/dist/core/providers/index.js.map +1 -0
  62. package/dist/core/providers/ollama.d.ts +36 -0
  63. package/dist/core/providers/ollama.d.ts.map +1 -0
  64. package/dist/core/providers/ollama.js +123 -0
  65. package/dist/core/providers/ollama.js.map +1 -0
  66. package/dist/core/providers/openai.d.ts +33 -0
  67. package/dist/core/providers/openai.d.ts.map +1 -0
  68. package/dist/core/providers/openai.js +114 -0
  69. package/dist/core/providers/openai.js.map +1 -0
  70. package/dist/core/providers/openrouter.d.ts +38 -0
  71. package/dist/core/providers/openrouter.d.ts.map +1 -0
  72. package/dist/core/providers/openrouter.js +269 -0
  73. package/dist/core/providers/openrouter.js.map +1 -0
  74. package/dist/core/providers/types.d.ts +101 -0
  75. package/dist/core/providers/types.d.ts.map +1 -0
  76. package/dist/core/providers/types.js +7 -0
  77. package/dist/core/providers/types.js.map +1 -0
  78. package/dist/core/tools/base.d.ts +56 -0
  79. package/dist/core/tools/base.d.ts.map +1 -0
  80. package/dist/core/tools/base.js +60 -0
  81. package/dist/core/tools/base.js.map +1 -0
  82. package/dist/core/tools/bash.d.ts +50 -0
  83. package/dist/core/tools/bash.d.ts.map +1 -0
  84. package/dist/core/tools/bash.js +179 -0
  85. package/dist/core/tools/bash.js.map +1 -0
  86. package/dist/core/tools/edit.d.ts +39 -0
  87. package/dist/core/tools/edit.d.ts.map +1 -0
  88. package/dist/core/tools/edit.js +67 -0
  89. package/dist/core/tools/edit.js.map +1 -0
  90. package/dist/core/tools/executor.d.ts +33 -0
  91. package/dist/core/tools/executor.d.ts.map +1 -0
  92. package/dist/core/tools/executor.js +105 -0
  93. package/dist/core/tools/executor.js.map +1 -0
  94. package/dist/core/tools/fetchPage.d.ts +46 -0
  95. package/dist/core/tools/fetchPage.d.ts.map +1 -0
  96. package/dist/core/tools/fetchPage.js +87 -0
  97. package/dist/core/tools/fetchPage.js.map +1 -0
  98. package/dist/core/tools/fetchURLs.d.ts +39 -0
  99. package/dist/core/tools/fetchURLs.d.ts.map +1 -0
  100. package/dist/core/tools/fetchURLs.js +67 -0
  101. package/dist/core/tools/fetchURLs.js.map +1 -0
  102. package/dist/core/tools/glob.d.ts +36 -0
  103. package/dist/core/tools/glob.d.ts.map +1 -0
  104. package/dist/core/tools/glob.js +78 -0
  105. package/dist/core/tools/glob.js.map +1 -0
  106. package/dist/core/tools/grep.d.ts +51 -0
  107. package/dist/core/tools/grep.d.ts.map +1 -0
  108. package/dist/core/tools/grep.js +152 -0
  109. package/dist/core/tools/grep.js.map +1 -0
  110. package/dist/core/tools/index.d.ts +22 -0
  111. package/dist/core/tools/index.d.ts.map +1 -0
  112. package/dist/core/tools/index.js +22 -0
  113. package/dist/core/tools/index.js.map +1 -0
  114. package/dist/core/tools/llmExecute.d.ts +153 -0
  115. package/dist/core/tools/llmExecute.d.ts.map +1 -0
  116. package/dist/core/tools/llmExecute.js +105 -0
  117. package/dist/core/tools/llmExecute.js.map +1 -0
  118. package/dist/core/tools/readEmail.d.ts +68 -0
  119. package/dist/core/tools/readEmail.d.ts.map +1 -0
  120. package/dist/core/tools/readEmail.js +182 -0
  121. package/dist/core/tools/readEmail.js.map +1 -0
  122. package/dist/core/tools/readFile.d.ts +42 -0
  123. package/dist/core/tools/readFile.d.ts.map +1 -0
  124. package/dist/core/tools/readFile.js +79 -0
  125. package/dist/core/tools/readFile.js.map +1 -0
  126. package/dist/core/tools/registry.d.ts +53 -0
  127. package/dist/core/tools/registry.d.ts.map +1 -0
  128. package/dist/core/tools/registry.js +112 -0
  129. package/dist/core/tools/registry.js.map +1 -0
  130. package/dist/core/tools/sendEmail.d.ts +83 -0
  131. package/dist/core/tools/sendEmail.d.ts.map +1 -0
  132. package/dist/core/tools/sendEmail.js +132 -0
  133. package/dist/core/tools/sendEmail.js.map +1 -0
  134. package/dist/core/tools/sendWebhook.d.ts +48 -0
  135. package/dist/core/tools/sendWebhook.d.ts.map +1 -0
  136. package/dist/core/tools/sendWebhook.js +61 -0
  137. package/dist/core/tools/sendWebhook.js.map +1 -0
  138. package/dist/core/tools/webSearch.d.ts +34 -0
  139. package/dist/core/tools/webSearch.d.ts.map +1 -0
  140. package/dist/core/tools/webSearch.js +104 -0
  141. package/dist/core/tools/webSearch.js.map +1 -0
  142. package/dist/core/tools/writeFile.d.ts +49 -0
  143. package/dist/core/tools/writeFile.d.ts.map +1 -0
  144. package/dist/core/tools/writeFile.js +120 -0
  145. package/dist/core/tools/writeFile.js.map +1 -0
  146. package/dist/db/client.d.ts +22 -0
  147. package/dist/db/client.d.ts.map +1 -0
  148. package/dist/db/client.js +178 -0
  149. package/dist/db/client.js.map +1 -0
  150. package/dist/db/schema.d.ts +1846 -0
  151. package/dist/db/schema.d.ts.map +1 -0
  152. package/dist/db/schema.js +175 -0
  153. package/dist/db/schema.js.map +1 -0
  154. package/dist/errors/index.d.ts +80 -0
  155. package/dist/errors/index.d.ts.map +1 -0
  156. package/dist/errors/index.js +135 -0
  157. package/dist/errors/index.js.map +1 -0
  158. package/dist/index.d.ts +52 -0
  159. package/dist/index.d.ts.map +1 -0
  160. package/dist/index.js +172 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/services/initDB.d.ts +17 -0
  163. package/dist/services/initDB.d.ts.map +1 -0
  164. package/dist/services/initDB.js +212 -0
  165. package/dist/services/initDB.js.map +1 -0
  166. package/dist/types/agent.d.ts +354 -0
  167. package/dist/types/agent.d.ts.map +1 -0
  168. package/dist/types/agent.js +63 -0
  169. package/dist/types/agent.js.map +1 -0
  170. package/dist/types/client.d.ts +309 -0
  171. package/dist/types/client.d.ts.map +1 -0
  172. package/dist/types/client.js +2 -0
  173. package/dist/types/client.js.map +1 -0
  174. package/dist/types/config.d.ts +96 -0
  175. package/dist/types/config.d.ts.map +1 -0
  176. package/dist/types/config.js +33 -0
  177. package/dist/types/config.js.map +1 -0
  178. package/dist/types/dag.d.ts +253 -0
  179. package/dist/types/dag.d.ts.map +1 -0
  180. package/dist/types/dag.js +46 -0
  181. package/dist/types/dag.js.map +1 -0
  182. package/dist/types/execution.d.ts +171 -0
  183. package/dist/types/execution.d.ts.map +1 -0
  184. package/dist/types/execution.js +41 -0
  185. package/dist/types/execution.js.map +1 -0
  186. package/dist/types/index.d.ts +12 -0
  187. package/dist/types/index.d.ts.map +1 -0
  188. package/dist/types/index.js +11 -0
  189. package/dist/types/index.js.map +1 -0
  190. package/dist/util/cron-validator.d.ts +16 -0
  191. package/dist/util/cron-validator.d.ts.map +1 -0
  192. package/dist/util/cron-validator.js +31 -0
  193. package/dist/util/cron-validator.js.map +1 -0
  194. package/dist/util/dag-utils.d.ts +54 -0
  195. package/dist/util/dag-utils.d.ts.map +1 -0
  196. package/dist/util/dag-utils.js +167 -0
  197. package/dist/util/dag-utils.js.map +1 -0
  198. package/dist/util/logger.d.ts +21 -0
  199. package/dist/util/logger.d.ts.map +1 -0
  200. package/dist/util/logger.js +87 -0
  201. package/dist/util/logger.js.map +1 -0
  202. package/package.json +82 -0
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Read Email Tool
3
+ *
4
+ * Read emails from Gmail via IMAP with filtering capabilities.
5
+ * Uses the same credentials as sendEmail (app password).
6
+ */
7
+ import { z } from 'zod';
8
+ import { ImapFlow } from 'imapflow';
9
+ import { BaseTool } from './base.js';
10
+ import { simpleParser } from 'mailparser';
11
+ const readEmailInputSchema = z.object({
12
+ maxResults: z.number().default(10).describe('Maximum number of emails to return'),
13
+ unreadOnly: z.boolean().default(false).describe('Only fetch unread emails'),
14
+ sender: z.string().optional().describe('Filter by sender email address'),
15
+ search: z.string().optional().describe('Search string to match in subject or body'),
16
+ mailbox: z.string().default('Inbox').describe('Mailbox to read from (default: INBOX)'),
17
+ markAsRead: z.boolean().default(false).describe('Mark fetched emails as read'),
18
+ snippets: z.boolean().default(false).describe('If true, include snippet instead of body'),
19
+ remove_urls: z.boolean().default(true).describe('If true, strip URLs from body (only when snippets is false)'),
20
+ });
21
+ export class ReadEmailTool extends BaseTool {
22
+ name = 'readEmail';
23
+ description = 'Read emails from Gmail via IMAP. Supports filtering by sender, unread status, and search terms.';
24
+ inputSchema = readEmailInputSchema;
25
+ getImapConfig() {
26
+ const host = process.env.IMAP_HOST || 'imap.gmail.com';
27
+ const port = process.env.IMAP_PORT ? parseInt(process.env.IMAP_PORT, 10) : 993;
28
+ const user = process.env.IMAP_USER || process.env.SMTP_USER;
29
+ const pass = process.env.IMAP_PASS || process.env.SMTP_PASS;
30
+ if (!user || !pass) {
31
+ throw new Error('Email configuration missing. Required env vars: IMAP_USER/SMTP_USER and IMAP_PASS/SMTP_PASS');
32
+ }
33
+ return { host, port, user, pass };
34
+ }
35
+ buildSearchCriteria(input) {
36
+ const criteria = {};
37
+ if (input.unreadOnly) {
38
+ criteria.seen = false;
39
+ }
40
+ if (input.sender) {
41
+ criteria.from = input.sender;
42
+ }
43
+ if (input.search) {
44
+ criteria.or = [{ subject: input.search }, { body: input.search }];
45
+ }
46
+ if (Object.keys(criteria).length === 0) {
47
+ return { all: true };
48
+ }
49
+ return criteria;
50
+ }
51
+ truncateBody(text, maxLength = 200) {
52
+ if (!text)
53
+ return '';
54
+ const cleaned = text.replace(/\s+/g, ' ').trim();
55
+ if (cleaned.length <= maxLength)
56
+ return cleaned;
57
+ return cleaned.substring(0, maxLength) + '...';
58
+ }
59
+ stripUrls(text) {
60
+ if (!text)
61
+ return '';
62
+ return text.replace(/https?:\/\/[^\s<>"{}|\\^`[\]]+/gi, '');
63
+ }
64
+ async execute(rawInput, ctx) {
65
+ const input = readEmailInputSchema.parse(rawInput);
66
+ ctx.logger.info(`Reading emails from ${input.mailbox} (max: ${input.maxResults})`);
67
+ let client = null;
68
+ try {
69
+ const config = this.getImapConfig();
70
+ client = new ImapFlow({
71
+ host: config.host,
72
+ port: config.port,
73
+ secure: true,
74
+ auth: {
75
+ user: config.user,
76
+ pass: config.pass,
77
+ },
78
+ logger: false,
79
+ });
80
+ await this.withTimeout(client.connect(), 30000, 'IMAP connection timed out');
81
+ const lock = await client.getMailboxLock(input.mailbox);
82
+ const emails = [];
83
+ try {
84
+ const searchCriteria = this.buildSearchCriteria(input);
85
+ ctx.logger.debug({ searchCriteria }, 'Search criteria');
86
+ const searchResult = await client.search(searchCriteria, { uid: true });
87
+ const messages = Array.isArray(searchResult) ? searchResult : [];
88
+ if (messages.length === 0) {
89
+ ctx.logger.info('No emails found matching criteria');
90
+ return {
91
+ success: true,
92
+ emails: [],
93
+ count: 0,
94
+ mailbox: input.mailbox,
95
+ };
96
+ }
97
+ const recentMessages = messages.slice(-input.maxResults).reverse();
98
+ ctx.logger.info(`Found ${messages.length} emails, fetching ${recentMessages.length}`);
99
+ ctx.logger.info(`snippets : ${input.snippets}, remove_urls: ${input.remove_urls}`);
100
+ for (const uid of recentMessages) {
101
+ const message = await client.fetchOne(uid, {
102
+ uid: true,
103
+ flags: true,
104
+ envelope: true,
105
+ source: true,
106
+ }, { uid: true });
107
+ if (!message)
108
+ continue;
109
+ let parsed = null;
110
+ if (message.source) {
111
+ try {
112
+ parsed = await simpleParser(message.source);
113
+ }
114
+ catch {
115
+ ctx.logger.warn(`Failed to parse message ${uid}`);
116
+ }
117
+ }
118
+ const fromAddress = message.envelope?.from?.[0];
119
+ const toAddress = message.envelope?.to?.[0];
120
+ const baseEmail = {
121
+ uid: message.uid,
122
+ messageId: message.envelope?.messageId,
123
+ from: fromAddress
124
+ ? `${fromAddress.name || ''} <${fromAddress.address}>`.trim()
125
+ : undefined,
126
+ to: toAddress
127
+ ? `${toAddress.name || ''} <${toAddress.address}>`.trim()
128
+ : undefined,
129
+ subject: message.envelope?.subject,
130
+ date: message.envelope?.date?.toISOString(),
131
+ isRead: message.flags?.has('\\Seen') ?? false,
132
+ hasAttachments: (parsed?.attachments?.length ?? 0) > 0,
133
+ };
134
+ if (input.snippets) {
135
+ baseEmail.snippet = this.truncateBody(parsed?.text);
136
+ }
137
+ else {
138
+ const bodyText = parsed?.text;
139
+ baseEmail.body = input.remove_urls ? this.stripUrls(bodyText) : bodyText;
140
+ }
141
+ emails.push(baseEmail);
142
+ if (input.markAsRead && !message.flags?.has('\\Seen')) {
143
+ await client.messageFlagsAdd(uid, ['\\Seen'], { uid: true });
144
+ }
145
+ }
146
+ }
147
+ finally {
148
+ lock.release();
149
+ }
150
+ await client.logout();
151
+ ctx.logger.info(`Successfully fetched ${emails.length} emails`);
152
+ ctx.emitEvent?.completed?.(`📧 Read ${emails.length} email(s)`);
153
+ return {
154
+ success: true,
155
+ emails,
156
+ count: emails.length,
157
+ mailbox: input.mailbox,
158
+ };
159
+ }
160
+ catch (error) {
161
+ const errorMessage = error instanceof Error ? error.message : String(error);
162
+ ctx.logger.error({ err: error }, 'Failed to read emails');
163
+ ctx.emitEvent?.completed?.(`❌ Failed to read emails: ${errorMessage}`);
164
+ if (client) {
165
+ try {
166
+ await client.logout();
167
+ }
168
+ catch {
169
+ // Ignore logout errors
170
+ }
171
+ }
172
+ return {
173
+ success: false,
174
+ emails: [],
175
+ count: 0,
176
+ mailbox: input.mailbox,
177
+ error: errorMessage,
178
+ };
179
+ }
180
+ }
181
+ }
182
+ //# sourceMappingURL=readEmail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readEmail.js","sourceRoot":"","sources":["../../../src/core/tools/readEmail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * ReadFileTool
3
+ *
4
+ * Reads content from files with support for text files and PDFs.
5
+ * Uses bun's fs API.
6
+ */
7
+ import { z } from 'zod';
8
+ import { BaseTool, type ToolContext } from './base.js';
9
+ declare const readFileInputSchema: z.ZodObject<{
10
+ path: z.ZodString;
11
+ maxLength: z.ZodDefault<z.ZodNumber>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ path: string;
14
+ maxLength: number;
15
+ }, {
16
+ path: string;
17
+ maxLength?: number | undefined;
18
+ }>;
19
+ type ReadFileInput = z.infer<typeof readFileInputSchema>;
20
+ interface ReadFileOutput {
21
+ path: string;
22
+ content: string;
23
+ size: number;
24
+ truncated: boolean;
25
+ }
26
+ /**
27
+ * ReadFileTool for bun
28
+ * Uses bun's fs API which is compatible with Node.js fs/promises
29
+ */
30
+ export declare class ReadFileTool extends BaseTool<any, ReadFileOutput> {
31
+ name: string;
32
+ description: string;
33
+ inputSchema: any;
34
+ private logger;
35
+ private getArtifactsDir;
36
+ /**
37
+ * Execute file read operation
38
+ */
39
+ execute(input: ReadFileInput, ctx: ToolContext): Promise<ReadFileOutput>;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=readFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readFile.d.ts","sourceRoot":"","sources":["../../../src/core/tools/readFile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAKvD,QAAA,MAAM,mBAAmB;;;;;;;;;EAWvB,CAAC;AAEH,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEzD,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,YAAa,SAAQ,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7D,IAAI,SAAc;IAClB,WAAW,SACmE;IAC9E,WAAW,EAAE,GAAG,CAAuB;IAEvC,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACG,OAAO,CACX,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,cAAc,CAAC;CAmD3B"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * ReadFileTool
3
+ *
4
+ * Reads content from files with support for text files and PDFs.
5
+ * Uses bun's fs API.
6
+ */
7
+ import { z } from 'zod';
8
+ import { BaseTool } from './base.js';
9
+ import { readFile as fsReadFile } from 'fs/promises';
10
+ import { join, resolve } from 'path';
11
+ import { getLogger } from '../../util/logger.js';
12
+ const readFileInputSchema = z.object({
13
+ path: z
14
+ .string()
15
+ .describe('File path relative to artifacts directory'),
16
+ maxLength: z
17
+ .number()
18
+ .int()
19
+ .min(1)
20
+ .max(100000)
21
+ .default(50000)
22
+ .describe('Maximum bytes to read'),
23
+ });
24
+ /**
25
+ * ReadFileTool for bun
26
+ * Uses bun's fs API which is compatible with Node.js fs/promises
27
+ */
28
+ export class ReadFileTool extends BaseTool {
29
+ name = 'readFile';
30
+ description = 'Read content from a file in the artifacts directory. Supports text files.';
31
+ inputSchema = readFileInputSchema;
32
+ logger = getLogger();
33
+ getArtifactsDir(ctx) {
34
+ return resolve(ctx.artifactsDir || process.env.ARTIFACTS_DIR || './artifacts');
35
+ }
36
+ /**
37
+ * Execute file read operation
38
+ */
39
+ async execute(input, ctx) {
40
+ const ARTIFACTS_DIR = this.getArtifactsDir(ctx);
41
+ // Security: prevent path traversal
42
+ const safePath = input.path.replace(/\.\./g, '');
43
+ const fullPath = join(ARTIFACTS_DIR, safePath);
44
+ // Ensure path is within artifacts directory
45
+ if (!fullPath.startsWith(ARTIFACTS_DIR)) {
46
+ throw new Error('Invalid path: must be within artifacts directory');
47
+ }
48
+ this.logger.info(`Reading file: ${safePath}`);
49
+ try {
50
+ let content;
51
+ // Read file content
52
+ content = await fsReadFile(fullPath, 'utf-8');
53
+ const size = Buffer.byteLength(content, 'utf-8');
54
+ const truncated = size > input.maxLength;
55
+ const finalContent = truncated
56
+ ? content.slice(0, input.maxLength)
57
+ : content;
58
+ this.logger.info(`Read ${size} bytes from ${safePath}${truncated ? ' (truncated)' : ''}`);
59
+ if (ctx.onEvent) {
60
+ ctx.onEvent('tool:readFile:completed', {
61
+ path: safePath,
62
+ size,
63
+ truncated,
64
+ });
65
+ }
66
+ return {
67
+ path: safePath,
68
+ content: finalContent,
69
+ size,
70
+ truncated,
71
+ };
72
+ }
73
+ catch (error) {
74
+ this.logger.error(`File read failed: ${error instanceof Error ? error.message : String(error)}`);
75
+ throw error;
76
+ }
77
+ }
78
+ }
79
+ //# sourceMappingURL=readFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readFile.js","sourceRoot":"","sources":["../../../src/core/tools/readFile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Tool Registry
3
+ *
4
+ * Manages tool registration and execution.
5
+ */
6
+ import type { ToolDefinition } from '../../types/index.js';
7
+ import type { ToolContext } from './base.js';
8
+ import type { BaseTool } from './base.js';
9
+ /**
10
+ * Tool Registry - manages available tools
11
+ */
12
+ export declare class ToolRegistry {
13
+ private tools;
14
+ private logger;
15
+ constructor();
16
+ /**
17
+ * Register default tools
18
+ */
19
+ private registerDefaultTools;
20
+ /**
21
+ * Register a tool
22
+ */
23
+ register(tool: BaseTool): void;
24
+ /**
25
+ * Get a tool by name
26
+ */
27
+ get(name: string): BaseTool | undefined;
28
+ /**
29
+ * Get all tools
30
+ */
31
+ getAll(): BaseTool[];
32
+ /**
33
+ * Get all tool definitions
34
+ */
35
+ getAllDefinitions(): ToolDefinition[];
36
+ /**
37
+ * Check if tool exists
38
+ */
39
+ hasTool(name: string): boolean;
40
+ /**
41
+ * Filter tools by names
42
+ */
43
+ filterByNames(names?: string[]): BaseTool[];
44
+ /**
45
+ * Execute a tool
46
+ */
47
+ execute(toolName: string, input: any, ctx: ToolContext): Promise<any>;
48
+ }
49
+ /**
50
+ * Create a default tool registry
51
+ */
52
+ export declare function createToolRegistry(): ToolRegistry;
53
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAc3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,MAAM,CAAe;;IAM7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAK9B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIvC;;OAEG;IACH,MAAM,IAAI,QAAQ,EAAE;IAIpB;;OAEG;IACH,iBAAiB,IAAI,cAAc,EAAE;IAIrC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE;IAS3C;;OAEG;IACG,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,GAAG,EACV,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,GAAG,CAAC;CAoBhB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Tool Registry
3
+ *
4
+ * Manages tool registration and execution.
5
+ */
6
+ import { BashTool } from './bash.js';
7
+ import { ReadFileTool } from './readFile.js';
8
+ import { WriteFileTool } from './writeFile.js';
9
+ import { FetchPageTool } from './fetchPage.js';
10
+ import { WebSearchTool } from './webSearch.js';
11
+ import { FetchURLsTool } from './fetchURLs.js';
12
+ import { GlobTool } from './glob.js';
13
+ import { GrepTool } from './grep.js';
14
+ import { EditTool } from './edit.js';
15
+ import { SendEmailTool } from './sendEmail.js';
16
+ import { ReadEmailTool } from './readEmail.js';
17
+ import { SendWebhookTool } from './sendWebhook.js';
18
+ import { getLogger } from '../../util/logger.js';
19
+ /**
20
+ * Tool Registry - manages available tools
21
+ */
22
+ export class ToolRegistry {
23
+ tools = new Map();
24
+ logger = getLogger();
25
+ constructor() {
26
+ this.registerDefaultTools();
27
+ }
28
+ /**
29
+ * Register default tools
30
+ */
31
+ registerDefaultTools() {
32
+ this.register(new BashTool());
33
+ this.register(new ReadFileTool());
34
+ this.register(new WriteFileTool());
35
+ this.register(new FetchPageTool());
36
+ this.register(new WebSearchTool());
37
+ this.register(new FetchURLsTool());
38
+ this.register(new GlobTool());
39
+ this.register(new GrepTool());
40
+ this.register(new EditTool());
41
+ this.register(new SendEmailTool());
42
+ this.register(new ReadEmailTool());
43
+ this.register(new SendWebhookTool());
44
+ this.logger.info('Registered 12 default tools');
45
+ }
46
+ /**
47
+ * Register a tool
48
+ */
49
+ register(tool) {
50
+ this.tools.set(tool.name, tool);
51
+ this.logger.debug(`Registered tool: ${tool.name}`);
52
+ }
53
+ /**
54
+ * Get a tool by name
55
+ */
56
+ get(name) {
57
+ return this.tools.get(name);
58
+ }
59
+ /**
60
+ * Get all tools
61
+ */
62
+ getAll() {
63
+ return Array.from(this.tools.values());
64
+ }
65
+ /**
66
+ * Get all tool definitions
67
+ */
68
+ getAllDefinitions() {
69
+ return this.getAll().map((tool) => tool.toJSONSchema());
70
+ }
71
+ /**
72
+ * Check if tool exists
73
+ */
74
+ hasTool(name) {
75
+ return this.tools.has(name);
76
+ }
77
+ /**
78
+ * Filter tools by names
79
+ */
80
+ filterByNames(names) {
81
+ if (!names || names.length === 0) {
82
+ return this.getAll();
83
+ }
84
+ return names
85
+ .map((name) => this.get(name))
86
+ .filter((tool) => tool !== undefined);
87
+ }
88
+ /**
89
+ * Execute a tool
90
+ */
91
+ async execute(toolName, input, ctx) {
92
+ const tool = this.get(toolName);
93
+ if (!tool) {
94
+ throw new Error(`Tool not found: ${toolName}`);
95
+ }
96
+ this.logger.debug(`Executing tool: ${toolName}`);
97
+ try {
98
+ return await tool.execute(input, ctx);
99
+ }
100
+ catch (error) {
101
+ this.logger.error(`Tool execution failed: ${toolName} - ${error instanceof Error ? error.message : String(error)}`);
102
+ throw error;
103
+ }
104
+ }
105
+ }
106
+ /**
107
+ * Create a default tool registry
108
+ */
109
+ export function createToolRegistry() {
110
+ return new ToolRegistry();
111
+ }
112
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/tools/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Send Email Tool
3
+ *
4
+ * Send emails via SMTP with optional CC, BCC, and attachments
5
+ */
6
+ import { z } from 'zod';
7
+ import { BaseTool, type ToolContext } from './base.js';
8
+ declare const sendEmailInputSchema: z.ZodObject<{
9
+ to: z.ZodString;
10
+ subject: z.ZodString;
11
+ body: z.ZodString;
12
+ cc: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
13
+ bcc: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
14
+ html: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
15
+ attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
16
+ filename: z.ZodString;
17
+ path: z.ZodOptional<z.ZodString>;
18
+ content: z.ZodOptional<z.ZodString>;
19
+ contentType: z.ZodOptional<z.ZodString>;
20
+ encoding: z.ZodOptional<z.ZodEnum<["base64", "utf-8"]>>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ filename: string;
23
+ path?: string | undefined;
24
+ content?: string | undefined;
25
+ contentType?: string | undefined;
26
+ encoding?: "utf-8" | "base64" | undefined;
27
+ }, {
28
+ filename: string;
29
+ path?: string | undefined;
30
+ content?: string | undefined;
31
+ contentType?: string | undefined;
32
+ encoding?: "utf-8" | "base64" | undefined;
33
+ }>, "many">>;
34
+ }, "strip", z.ZodTypeAny, {
35
+ body: string;
36
+ to: string;
37
+ subject: string;
38
+ html: boolean;
39
+ cc?: string | string[] | undefined;
40
+ bcc?: string | string[] | undefined;
41
+ attachments?: {
42
+ filename: string;
43
+ path?: string | undefined;
44
+ content?: string | undefined;
45
+ contentType?: string | undefined;
46
+ encoding?: "utf-8" | "base64" | undefined;
47
+ }[] | undefined;
48
+ }, {
49
+ body: string;
50
+ to: string;
51
+ subject: string;
52
+ cc?: string | string[] | undefined;
53
+ bcc?: string | string[] | undefined;
54
+ html?: boolean | undefined;
55
+ attachments?: {
56
+ filename: string;
57
+ path?: string | undefined;
58
+ content?: string | undefined;
59
+ contentType?: string | undefined;
60
+ encoding?: "utf-8" | "base64" | undefined;
61
+ }[] | undefined;
62
+ }>;
63
+ type SendEmailInput = z.infer<typeof sendEmailInputSchema>;
64
+ interface SendEmailOutput {
65
+ success: boolean;
66
+ messageId?: string;
67
+ to: string;
68
+ subject: string;
69
+ attachmentCount?: number;
70
+ error?: string;
71
+ }
72
+ export declare class SendEmailTool extends BaseTool<any, SendEmailOutput> {
73
+ name: string;
74
+ description: string;
75
+ inputSchema: any;
76
+ private transporter;
77
+ private resolveAttachmentPath;
78
+ private getTransporter;
79
+ private normalizeEmailList;
80
+ execute(input: SendEmailInput, ctx: ToolContext): Promise<SendEmailOutput>;
81
+ }
82
+ export {};
83
+ //# sourceMappingURL=sendEmail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendEmail.d.ts","sourceRoot":"","sources":["../../../src/core/tools/sendEmail.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAWvD,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcxB,CAAC;AAEH,KAAK,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE3D,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,aAAc,SAAQ,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC/D,IAAI,SAAe;IACnB,WAAW,SAA0H;IACrI,WAAW,EAAE,GAAG,CAAwB;IAExC,OAAO,CAAC,WAAW,CAA4B;IAE/C,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,cAAc;IA8BtB,OAAO,CAAC,kBAAkB;IAQpB,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CA2EjF"}