aura-code 0.3.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 (288) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +137 -0
  3. package/dist/agent/context.d.ts +13 -0
  4. package/dist/agent/context.js +183 -0
  5. package/dist/agent/context.js.map +1 -0
  6. package/dist/agent/loop.d.ts +60 -0
  7. package/dist/agent/loop.js +228 -0
  8. package/dist/agent/loop.js.map +1 -0
  9. package/dist/agent/session-store.d.ts +30 -0
  10. package/dist/agent/session-store.js +178 -0
  11. package/dist/agent/session-store.js.map +1 -0
  12. package/dist/agent/spawner.d.ts +57 -0
  13. package/dist/agent/spawner.js +112 -0
  14. package/dist/agent/spawner.js.map +1 -0
  15. package/dist/agent/system-prompt.d.ts +3 -0
  16. package/dist/agent/system-prompt.js +100 -0
  17. package/dist/agent/system-prompt.js.map +1 -0
  18. package/dist/architect/engine.d.ts +47 -0
  19. package/dist/architect/engine.js +217 -0
  20. package/dist/architect/engine.js.map +1 -0
  21. package/dist/architect/types.d.ts +61 -0
  22. package/dist/architect/types.js +6 -0
  23. package/dist/architect/types.js.map +1 -0
  24. package/dist/cli/diamond.d.ts +1 -0
  25. package/dist/cli/diamond.js +23 -0
  26. package/dist/cli/diamond.js.map +1 -0
  27. package/dist/cli/display.d.ts +44 -0
  28. package/dist/cli/display.js +234 -0
  29. package/dist/cli/display.js.map +1 -0
  30. package/dist/cli/index.d.ts +2 -0
  31. package/dist/cli/index.js +1734 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/config/defaults.d.ts +46 -0
  34. package/dist/config/defaults.js +106 -0
  35. package/dist/config/defaults.js.map +1 -0
  36. package/dist/config/project-config.d.ts +90 -0
  37. package/dist/config/project-config.js +141 -0
  38. package/dist/config/project-config.js.map +1 -0
  39. package/dist/harness/proposer.d.ts +26 -0
  40. package/dist/harness/proposer.js +204 -0
  41. package/dist/harness/proposer.js.map +1 -0
  42. package/dist/harness/weakness-miner.d.ts +28 -0
  43. package/dist/harness/weakness-miner.js +359 -0
  44. package/dist/harness/weakness-miner.js.map +1 -0
  45. package/dist/integrations/harnesses.d.ts +23 -0
  46. package/dist/integrations/harnesses.js +161 -0
  47. package/dist/integrations/harnesses.js.map +1 -0
  48. package/dist/orchestration/competence.d.ts +53 -0
  49. package/dist/orchestration/competence.js +181 -0
  50. package/dist/orchestration/competence.js.map +1 -0
  51. package/dist/orchestration/executor.d.ts +42 -0
  52. package/dist/orchestration/executor.js +206 -0
  53. package/dist/orchestration/executor.js.map +1 -0
  54. package/dist/orchestration/index.d.ts +20 -0
  55. package/dist/orchestration/index.js +39 -0
  56. package/dist/orchestration/index.js.map +1 -0
  57. package/dist/orchestration/orchestrator-prompts.d.ts +11 -0
  58. package/dist/orchestration/orchestrator-prompts.js +153 -0
  59. package/dist/orchestration/orchestrator-prompts.js.map +1 -0
  60. package/dist/orchestration/orchestrator.d.ts +27 -0
  61. package/dist/orchestration/orchestrator.js +169 -0
  62. package/dist/orchestration/orchestrator.js.map +1 -0
  63. package/dist/orchestration/plan-store.d.ts +53 -0
  64. package/dist/orchestration/plan-store.js +176 -0
  65. package/dist/orchestration/plan-store.js.map +1 -0
  66. package/dist/orchestration/router-prompts.d.ts +6 -0
  67. package/dist/orchestration/router-prompts.js +55 -0
  68. package/dist/orchestration/router-prompts.js.map +1 -0
  69. package/dist/orchestration/router.d.ts +23 -0
  70. package/dist/orchestration/router.js +70 -0
  71. package/dist/orchestration/router.js.map +1 -0
  72. package/dist/orchestration/ruby-detect.d.ts +6 -0
  73. package/dist/orchestration/ruby-detect.js +130 -0
  74. package/dist/orchestration/ruby-detect.js.map +1 -0
  75. package/dist/orchestration/ruby-types.d.ts +44 -0
  76. package/dist/orchestration/ruby-types.js +6 -0
  77. package/dist/orchestration/ruby-types.js.map +1 -0
  78. package/dist/orchestration/specialist-prompts.d.ts +19 -0
  79. package/dist/orchestration/specialist-prompts.js +143 -0
  80. package/dist/orchestration/specialist-prompts.js.map +1 -0
  81. package/dist/orchestration/specialists.d.ts +66 -0
  82. package/dist/orchestration/specialists.js +175 -0
  83. package/dist/orchestration/specialists.js.map +1 -0
  84. package/dist/orchestration/types.d.ts +82 -0
  85. package/dist/orchestration/types.js +6 -0
  86. package/dist/orchestration/types.js.map +1 -0
  87. package/dist/perception/extractor.d.ts +7 -0
  88. package/dist/perception/extractor.js +521 -0
  89. package/dist/perception/extractor.js.map +1 -0
  90. package/dist/perception/graph-store.d.ts +25 -0
  91. package/dist/perception/graph-store.js +117 -0
  92. package/dist/perception/graph-store.js.map +1 -0
  93. package/dist/perception/index.d.ts +4 -0
  94. package/dist/perception/index.js +18 -0
  95. package/dist/perception/index.js.map +1 -0
  96. package/dist/perception/queries.d.ts +29 -0
  97. package/dist/perception/queries.js +354 -0
  98. package/dist/perception/queries.js.map +1 -0
  99. package/dist/perception/types.d.ts +103 -0
  100. package/dist/perception/types.js +6 -0
  101. package/dist/perception/types.js.map +1 -0
  102. package/dist/providers/anthropic.d.ts +11 -0
  103. package/dist/providers/anthropic.js +172 -0
  104. package/dist/providers/anthropic.js.map +1 -0
  105. package/dist/providers/factory.d.ts +58 -0
  106. package/dist/providers/factory.js +354 -0
  107. package/dist/providers/factory.js.map +1 -0
  108. package/dist/providers/fallback.d.ts +24 -0
  109. package/dist/providers/fallback.js +72 -0
  110. package/dist/providers/fallback.js.map +1 -0
  111. package/dist/providers/google.d.ts +11 -0
  112. package/dist/providers/google.js +129 -0
  113. package/dist/providers/google.js.map +1 -0
  114. package/dist/providers/openai-compatible.d.ts +24 -0
  115. package/dist/providers/openai-compatible.js +216 -0
  116. package/dist/providers/openai-compatible.js.map +1 -0
  117. package/dist/providers/resilient-factory.d.ts +24 -0
  118. package/dist/providers/resilient-factory.js +57 -0
  119. package/dist/providers/resilient-factory.js.map +1 -0
  120. package/dist/providers/resilient.d.ts +63 -0
  121. package/dist/providers/resilient.js +145 -0
  122. package/dist/providers/resilient.js.map +1 -0
  123. package/dist/providers/types.d.ts +84 -0
  124. package/dist/providers/types.js +6 -0
  125. package/dist/providers/types.js.map +1 -0
  126. package/dist/ruby/alternator.d.ts +40 -0
  127. package/dist/ruby/alternator.js +233 -0
  128. package/dist/ruby/alternator.js.map +1 -0
  129. package/dist/ruby/competence.d.ts +34 -0
  130. package/dist/ruby/competence.js +264 -0
  131. package/dist/ruby/competence.js.map +1 -0
  132. package/dist/ruby/episode-capture.d.ts +56 -0
  133. package/dist/ruby/episode-capture.js +193 -0
  134. package/dist/ruby/episode-capture.js.map +1 -0
  135. package/dist/ruby/fine-tune.d.ts +16 -0
  136. package/dist/ruby/fine-tune.js +253 -0
  137. package/dist/ruby/fine-tune.js.map +1 -0
  138. package/dist/ruby/index.d.ts +10 -0
  139. package/dist/ruby/index.js +26 -0
  140. package/dist/ruby/index.js.map +1 -0
  141. package/dist/ruby/ruby-model.d.ts +36 -0
  142. package/dist/ruby/ruby-model.js +81 -0
  143. package/dist/ruby/ruby-model.js.map +1 -0
  144. package/dist/ruby/training-data.d.ts +11 -0
  145. package/dist/ruby/training-data.js +107 -0
  146. package/dist/ruby/training-data.js.map +1 -0
  147. package/dist/ruby/types.d.ts +136 -0
  148. package/dist/ruby/types.js +20 -0
  149. package/dist/ruby/types.js.map +1 -0
  150. package/dist/safety/permissions.d.ts +32 -0
  151. package/dist/safety/permissions.js +304 -0
  152. package/dist/safety/permissions.js.map +1 -0
  153. package/dist/server/index.d.ts +9 -0
  154. package/dist/server/index.js +342 -0
  155. package/dist/server/index.js.map +1 -0
  156. package/dist/server/session.d.ts +22 -0
  157. package/dist/server/session.js +16 -0
  158. package/dist/server/session.js.map +1 -0
  159. package/dist/setup/first-run.d.ts +41 -0
  160. package/dist/setup/first-run.js +386 -0
  161. package/dist/setup/first-run.js.map +1 -0
  162. package/dist/setup/global-config.d.ts +19 -0
  163. package/dist/setup/global-config.js +97 -0
  164. package/dist/setup/global-config.js.map +1 -0
  165. package/dist/tools/audio-transcribe.d.ts +8 -0
  166. package/dist/tools/audio-transcribe.js +156 -0
  167. package/dist/tools/audio-transcribe.js.map +1 -0
  168. package/dist/tools/browser.d.ts +15 -0
  169. package/dist/tools/browser.js +241 -0
  170. package/dist/tools/browser.js.map +1 -0
  171. package/dist/tools/calendar.d.ts +12 -0
  172. package/dist/tools/calendar.js +196 -0
  173. package/dist/tools/calendar.js.map +1 -0
  174. package/dist/tools/clipboard.d.ts +7 -0
  175. package/dist/tools/clipboard.js +90 -0
  176. package/dist/tools/clipboard.js.map +1 -0
  177. package/dist/tools/cron.d.ts +10 -0
  178. package/dist/tools/cron.js +167 -0
  179. package/dist/tools/cron.js.map +1 -0
  180. package/dist/tools/edit-file.d.ts +6 -0
  181. package/dist/tools/edit-file.js +98 -0
  182. package/dist/tools/edit-file.js.map +1 -0
  183. package/dist/tools/email.d.ts +11 -0
  184. package/dist/tools/email.js +153 -0
  185. package/dist/tools/email.js.map +1 -0
  186. package/dist/tools/git.d.ts +1 -0
  187. package/dist/tools/git.js +7 -0
  188. package/dist/tools/git.js.map +1 -0
  189. package/dist/tools/http-request.d.ts +12 -0
  190. package/dist/tools/http-request.js +91 -0
  191. package/dist/tools/http-request.js.map +1 -0
  192. package/dist/tools/image-read.d.ts +7 -0
  193. package/dist/tools/image-read.js +125 -0
  194. package/dist/tools/image-read.js.map +1 -0
  195. package/dist/tools/index.d.ts +3 -0
  196. package/dist/tools/index.js +201 -0
  197. package/dist/tools/index.js.map +1 -0
  198. package/dist/tools/list-dir.d.ts +1 -0
  199. package/dist/tools/list-dir.js +6 -0
  200. package/dist/tools/list-dir.js.map +1 -0
  201. package/dist/tools/mcp.d.ts +11 -0
  202. package/dist/tools/mcp.js +356 -0
  203. package/dist/tools/mcp.js.map +1 -0
  204. package/dist/tools/memory.d.ts +9 -0
  205. package/dist/tools/memory.js +124 -0
  206. package/dist/tools/memory.js.map +1 -0
  207. package/dist/tools/notify.d.ts +9 -0
  208. package/dist/tools/notify.js +40 -0
  209. package/dist/tools/notify.js.map +1 -0
  210. package/dist/tools/read-file.d.ts +6 -0
  211. package/dist/tools/read-file.js +76 -0
  212. package/dist/tools/read-file.js.map +1 -0
  213. package/dist/tools/run-shell.d.ts +1 -0
  214. package/dist/tools/run-shell.js +6 -0
  215. package/dist/tools/run-shell.js.map +1 -0
  216. package/dist/tools/run-tests.d.ts +1 -0
  217. package/dist/tools/run-tests.js +6 -0
  218. package/dist/tools/run-tests.js.map +1 -0
  219. package/dist/tools/search-code.d.ts +1 -0
  220. package/dist/tools/search-code.js +6 -0
  221. package/dist/tools/search-code.js.map +1 -0
  222. package/dist/tools/telegram-bot.d.ts +2 -0
  223. package/dist/tools/telegram-bot.js +693 -0
  224. package/dist/tools/telegram-bot.js.map +1 -0
  225. package/dist/tools/telegram-safety.d.ts +52 -0
  226. package/dist/tools/telegram-safety.js +189 -0
  227. package/dist/tools/telegram-safety.js.map +1 -0
  228. package/dist/tools/telegram.d.ts +16 -0
  229. package/dist/tools/telegram.js +227 -0
  230. package/dist/tools/telegram.js.map +1 -0
  231. package/dist/tools/tools.d.ts +48 -0
  232. package/dist/tools/tools.js +328 -0
  233. package/dist/tools/tools.js.map +1 -0
  234. package/dist/tools/web-fetch.d.ts +11 -0
  235. package/dist/tools/web-fetch.js +119 -0
  236. package/dist/tools/web-fetch.js.map +1 -0
  237. package/dist/tools/web-search.d.ts +8 -0
  238. package/dist/tools/web-search.js +81 -0
  239. package/dist/tools/web-search.js.map +1 -0
  240. package/dist/tools/whatsapp.d.ts +10 -0
  241. package/dist/tools/whatsapp.js +222 -0
  242. package/dist/tools/whatsapp.js.map +1 -0
  243. package/dist/tools/write-file.d.ts +1 -0
  244. package/dist/tools/write-file.js +6 -0
  245. package/dist/tools/write-file.js.map +1 -0
  246. package/dist/tools/youtube-transcript.d.ts +9 -0
  247. package/dist/tools/youtube-transcript.js +200 -0
  248. package/dist/tools/youtube-transcript.js.map +1 -0
  249. package/dist/util/circuit-breaker.d.ts +44 -0
  250. package/dist/util/circuit-breaker.js +78 -0
  251. package/dist/util/circuit-breaker.js.map +1 -0
  252. package/dist/util/env.d.ts +18 -0
  253. package/dist/util/env.js +39 -0
  254. package/dist/util/env.js.map +1 -0
  255. package/dist/util/errors.d.ts +42 -0
  256. package/dist/util/errors.js +121 -0
  257. package/dist/util/errors.js.map +1 -0
  258. package/dist/util/rate-limiter.d.ts +71 -0
  259. package/dist/util/rate-limiter.js +141 -0
  260. package/dist/util/rate-limiter.js.map +1 -0
  261. package/dist/util/retry.d.ts +30 -0
  262. package/dist/util/retry.js +57 -0
  263. package/dist/util/retry.js.map +1 -0
  264. package/dist/util/sanitize.d.ts +16 -0
  265. package/dist/util/sanitize.js +255 -0
  266. package/dist/util/sanitize.js.map +1 -0
  267. package/dist/verify/checks.d.ts +21 -0
  268. package/dist/verify/checks.js +311 -0
  269. package/dist/verify/checks.js.map +1 -0
  270. package/dist/verify/index.d.ts +33 -0
  271. package/dist/verify/index.js +127 -0
  272. package/dist/verify/index.js.map +1 -0
  273. package/dist/verify/types.d.ts +20 -0
  274. package/dist/verify/types.js +3 -0
  275. package/dist/verify/types.js.map +1 -0
  276. package/dist/versioncheck.d.ts +22 -0
  277. package/dist/versioncheck.js +203 -0
  278. package/dist/versioncheck.js.map +1 -0
  279. package/dist/viz/index.d.ts +2 -0
  280. package/dist/viz/index.js +733 -0
  281. package/dist/viz/index.js.map +1 -0
  282. package/dist/workflows/engine.d.ts +46 -0
  283. package/dist/workflows/engine.js +320 -0
  284. package/dist/workflows/engine.js.map +1 -0
  285. package/dist/workflows/types.d.ts +92 -0
  286. package/dist/workflows/types.js +6 -0
  287. package/dist/workflows/types.js.map +1 -0
  288. package/package.json +86 -0
@@ -0,0 +1,7 @@
1
+ import type { ToolDefinition } from '../providers/types.js';
2
+ export interface ClipboardInput {
3
+ action: 'copy' | 'paste';
4
+ text?: string;
5
+ }
6
+ export declare const CLIPBOARD_DEFINITION: ToolDefinition;
7
+ export declare function clipboardTool(input: ClipboardInput): Promise<string>;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CLIPBOARD_DEFINITION = void 0;
4
+ exports.clipboardTool = clipboardTool;
5
+ const child_process_1 = require("child_process");
6
+ exports.CLIPBOARD_DEFINITION = {
7
+ name: 'clipboard',
8
+ description: 'Read from or write to the system clipboard. Copy text for the user to paste, ' +
9
+ 'or read what the user has copied.',
10
+ parameters: {
11
+ type: 'object',
12
+ properties: {
13
+ action: { type: 'string', description: 'Action: copy (write to clipboard) or paste (read from clipboard)' },
14
+ text: { type: 'string', description: 'Text to copy (required for copy action)' },
15
+ },
16
+ required: ['action'],
17
+ },
18
+ };
19
+ function detectClipboardCommand() {
20
+ // Try xclip (X11)
21
+ try {
22
+ (0, child_process_1.execSync)('which xclip', { stdio: 'pipe' });
23
+ return {
24
+ copy: ['xclip', '-selection', 'clipboard'],
25
+ paste: ['xclip', '-selection', 'clipboard', '-o'],
26
+ };
27
+ }
28
+ catch { /* not found */ }
29
+ // Try xsel (X11)
30
+ try {
31
+ (0, child_process_1.execSync)('which xsel', { stdio: 'pipe' });
32
+ return {
33
+ copy: ['xsel', '--clipboard', '--input'],
34
+ paste: ['xsel', '--clipboard', '--output'],
35
+ };
36
+ }
37
+ catch { /* not found */ }
38
+ // Try wl-copy/wl-paste (Wayland)
39
+ try {
40
+ (0, child_process_1.execSync)('which wl-copy', { stdio: 'pipe' });
41
+ return {
42
+ copy: ['wl-copy'],
43
+ paste: ['wl-paste'],
44
+ };
45
+ }
46
+ catch { /* not found */ }
47
+ // Try pbcopy/pbpaste (macOS)
48
+ try {
49
+ (0, child_process_1.execSync)('which pbcopy', { stdio: 'pipe' });
50
+ return {
51
+ copy: ['pbcopy'],
52
+ paste: ['pbpaste'],
53
+ };
54
+ }
55
+ catch { /* not found */ }
56
+ return null;
57
+ }
58
+ async function clipboardTool(input) {
59
+ const cmds = detectClipboardCommand();
60
+ if (!cmds) {
61
+ return 'Error: No clipboard utility found. Install xclip, xsel, or wl-clipboard.';
62
+ }
63
+ switch (input.action) {
64
+ case 'copy': {
65
+ if (input.text === undefined)
66
+ return 'Error: text is required for copy';
67
+ try {
68
+ const [bin, ...args] = cmds.copy;
69
+ (0, child_process_1.execSync)(`${bin} ${args.join(' ')}`, { input: input.text });
70
+ return `Copied ${input.text.length} characters to clipboard.`;
71
+ }
72
+ catch (e) {
73
+ return `Error copying to clipboard: ${e?.message}`;
74
+ }
75
+ }
76
+ case 'paste': {
77
+ try {
78
+ const [bin, ...args] = cmds.paste;
79
+ const result = (0, child_process_1.execSync)(`${bin} ${args.join(' ')}`, { encoding: 'utf8' });
80
+ return `Clipboard contents:\n${result}`;
81
+ }
82
+ catch (e) {
83
+ return `Error reading clipboard: ${e?.message}`;
84
+ }
85
+ }
86
+ default:
87
+ return `Error: Unknown clipboard action: ${input.action}`;
88
+ }
89
+ }
90
+ //# sourceMappingURL=clipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/tools/clipboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ToolDefinition } from '../providers/types.js';
2
+ export interface CronInput {
3
+ action: 'add' | 'list' | 'remove' | 'remove_all' | 'run';
4
+ schedule?: string;
5
+ command?: string;
6
+ label?: string;
7
+ id?: string;
8
+ }
9
+ export declare const CRON_DEFINITION: ToolDefinition;
10
+ export declare function cronTool(input: CronInput): Promise<string>;
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CRON_DEFINITION = void 0;
4
+ exports.cronTool = cronTool;
5
+ const child_process_1 = require("child_process");
6
+ exports.CRON_DEFINITION = {
7
+ name: 'cron',
8
+ description: 'Manage scheduled tasks (cron jobs). Add, list, remove scheduled commands. ' +
9
+ 'Schedule presets: every_minute, every_5_minutes, every_15_minutes, hourly, daily_8am, daily_9pm, weekly, midnight. ' +
10
+ 'Or use standard cron expressions (e.g., "*/10 * * * *" = every 10 min). ' +
11
+ 'Useful for: periodic checks, reminders, backups, monitoring, auto-sync.',
12
+ parameters: {
13
+ type: 'object',
14
+ properties: {
15
+ action: { type: 'string', description: 'Action: add, list, remove, remove_all, run' },
16
+ schedule: { type: 'string', description: 'Cron schedule (expression or preset name)' },
17
+ command: { type: 'string', description: 'Shell command to execute (for add)' },
18
+ label: { type: 'string', description: 'Label to identify the job (for add)' },
19
+ id: { type: 'string', description: 'Job label to remove (for remove)' },
20
+ },
21
+ required: ['action'],
22
+ },
23
+ };
24
+ // ─────────────────────────────────────────────────────────────────────────────
25
+ // Schedule presets
26
+ // ─────────────────────────────────────────────────────────────────────────────
27
+ const PRESETS = {
28
+ 'every_minute': '* * * * *',
29
+ 'every_5_minutes': '*/5 * * * *',
30
+ 'every_15_minutes': '*/15 * * * *',
31
+ 'every_30_minutes': '*/30 * * * *',
32
+ 'hourly': '0 * * * *',
33
+ 'every_hour': '0 * * * *',
34
+ 'daily': '0 9 * * *',
35
+ 'daily_8am': '0 8 * * *',
36
+ 'daily_9am': '0 9 * * *',
37
+ 'daily_9pm': '21 * * * *',
38
+ 'midnight': '0 0 * * *',
39
+ 'weekly': '0 9 * * 1',
40
+ 'weekly_monday': '0 9 * * 1',
41
+ 'monthly': '0 9 1 * *',
42
+ };
43
+ function resolveSchedule(input) {
44
+ const lower = input.toLowerCase().trim();
45
+ if (PRESETS[lower])
46
+ return PRESETS[lower];
47
+ // Validate cron expression (5 fields)
48
+ const parts = input.trim().split(/\s+/);
49
+ if (parts.length === 5)
50
+ return input;
51
+ throw new Error(`Invalid schedule: "${input}". Use a preset (${Object.keys(PRESETS).join(', ')}) or a 5-field cron expression.`);
52
+ }
53
+ const TAG = '# aura:';
54
+ function tagFor(label) {
55
+ return `${TAG} ${label}`;
56
+ }
57
+ // ─────────────────────────────────────────────────────────────────────────────
58
+ // Crontab operations
59
+ // ─────────────────────────────────────────────────────────────────────────────
60
+ function getCrontab() {
61
+ try {
62
+ return (0, child_process_1.execSync)('crontab -l 2>/dev/null', { encoding: 'utf8' });
63
+ }
64
+ catch {
65
+ return '';
66
+ }
67
+ }
68
+ function setCrontab(content) {
69
+ (0, child_process_1.execSync)(`echo ${JSON.stringify(content)} | crontab -`);
70
+ }
71
+ // ─────────────────────────────────────────────────────────────────────────────
72
+ // Actions
73
+ // ─────────────────────────────────────────────────────────────────────────────
74
+ function doAdd(input) {
75
+ if (!input.command)
76
+ return 'Error: command is required for add';
77
+ if (!input.schedule)
78
+ return 'Error: schedule is required for add';
79
+ const schedule = resolveSchedule(input.schedule);
80
+ const label = input.label ?? `job-${Date.now().toString(36)}`;
81
+ const existing = getCrontab();
82
+ const lines = existing.split('\n').filter(l => l.trim());
83
+ // Remove existing job with same label
84
+ const filtered = lines.filter(l => !l.includes(tagFor(label)));
85
+ // Add new job
86
+ filtered.push(`${schedule} ${input.command} ${tagFor(label)}`);
87
+ setCrontab(filtered.join('\n') + '\n');
88
+ return `Cron job added: "${label}"\nSchedule: ${schedule}\nCommand: ${input.command}`;
89
+ }
90
+ function doList() {
91
+ const content = getCrontab();
92
+ if (!content.trim())
93
+ return 'No cron jobs configured.';
94
+ const lines = content.split('\n').filter(l => l.trim());
95
+ const auraJobs = lines.filter(l => l.includes(TAG));
96
+ const otherJobs = lines.filter(l => !l.includes(TAG) && l.trim());
97
+ const parts = [];
98
+ if (auraJobs.length > 0) {
99
+ parts.push(`Aura jobs (${auraJobs.length}):`);
100
+ auraJobs.forEach((l, i) => {
101
+ const labelMatch = l.match(/# aura: (.+)/);
102
+ const label = labelMatch ? labelMatch[1] : 'unnamed';
103
+ const schedule = l.split(/\s+/).slice(0, 5).join(' ');
104
+ const cmd = l.replace(/\s*# aura:.*/, '').replace(/^(\S+\s+){5}/, '').trim();
105
+ parts.push(` ${i + 1}. [${label}] ${schedule} → ${cmd}`);
106
+ });
107
+ }
108
+ if (otherJobs.length > 0) {
109
+ parts.push(`\nSystem jobs (${otherJobs.length}):`);
110
+ otherJobs.forEach(l => parts.push(` ${l}`));
111
+ }
112
+ return parts.join('\n');
113
+ }
114
+ function doRemove(id) {
115
+ const existing = getCrontab();
116
+ const lines = existing.split('\n');
117
+ const filtered = lines.filter(l => !l.includes(tagFor(id)));
118
+ if (filtered.length === lines.length) {
119
+ return `Error: No cron job found with label "${id}"`;
120
+ }
121
+ setCrontab(filtered.join('\n') + '\n');
122
+ return `Cron job removed: "${id}"`;
123
+ }
124
+ function doRemoveAll() {
125
+ const existing = getCrontab();
126
+ const lines = existing.split('\n');
127
+ const filtered = lines.filter(l => !l.includes(TAG));
128
+ const removed = lines.length - filtered.length;
129
+ if (removed === 0)
130
+ return 'No Aura cron jobs to remove.';
131
+ setCrontab(filtered.join('\n') + '\n');
132
+ return `Removed ${removed} Aura cron job(s).`;
133
+ }
134
+ function doRun(input) {
135
+ if (!input.command)
136
+ return 'Error: command is required for run';
137
+ try {
138
+ const output = (0, child_process_1.execSync)(input.command, { encoding: 'utf8', timeout: 30_000 });
139
+ return `Command output:\n${output}`;
140
+ }
141
+ catch (e) {
142
+ return `Command error:\n${e?.stderr ?? e?.message ?? String(e)}`;
143
+ }
144
+ }
145
+ // ─────────────────────────────────────────────────────────────────────────────
146
+ // Main executor
147
+ // ─────────────────────────────────────────────────────────────────────────────
148
+ async function cronTool(input) {
149
+ try {
150
+ switch (input.action) {
151
+ case 'add': return doAdd(input);
152
+ case 'list': return doList();
153
+ case 'remove': {
154
+ if (!input.id)
155
+ return 'Error: id (label) is required for remove';
156
+ return doRemove(input.id);
157
+ }
158
+ case 'remove_all': return doRemoveAll();
159
+ case 'run': return doRun(input);
160
+ default: return `Error: Unknown cron action: ${input.action}`;
161
+ }
162
+ }
163
+ catch (e) {
164
+ return `Cron error: ${e?.message ?? String(e)}`;
165
+ }
166
+ }
167
+ //# sourceMappingURL=cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/tools/cron.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface EditFileInput {
2
+ path: string;
3
+ find: string;
4
+ replace: string;
5
+ }
6
+ export declare function editFile(input: EditFileInput, cwd: string): string;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.editFile = editFile;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ function editFile(input, cwd) {
40
+ const filePath = path.resolve(cwd, input.path);
41
+ if (!fs.existsSync(filePath)) {
42
+ return `Error: File not found: ${input.path}`;
43
+ }
44
+ let content;
45
+ try {
46
+ content = fs.readFileSync(filePath, 'utf8');
47
+ }
48
+ catch (e) {
49
+ return `Error reading file: ${String(e)}`;
50
+ }
51
+ // Normalise line endings
52
+ const normalContent = content.replace(/\r\n/g, '\n');
53
+ const normalFind = input.find.replace(/\r\n/g, '\n');
54
+ const normalReplace = input.replace.replace(/\r\n/g, '\n');
55
+ // ── Attempt 1: exact match ─────────────────────────────────────────────────
56
+ if (normalContent.includes(normalFind)) {
57
+ const newContent = normalContent.replace(normalFind, normalReplace);
58
+ fs.writeFileSync(filePath, newContent, 'utf8');
59
+ const lineCount = (normalFind.match(/\n/g) ?? []).length + 1;
60
+ return `✓ Edit applied to ${input.path} (replaced ${lineCount} line${lineCount > 1 ? 's' : ''})`;
61
+ }
62
+ // ── Attempt 2: trimmed leading/trailing whitespace on each line ────────────
63
+ const trimLines = (s) => s.split('\n').map(l => l.trimEnd()).join('\n');
64
+ const trimmedContent = trimLines(normalContent);
65
+ const trimmedFind = trimLines(normalFind);
66
+ if (trimmedContent.includes(trimmedFind)) {
67
+ const newContent = trimmedContent.replace(trimmedFind, trimLines(normalReplace));
68
+ fs.writeFileSync(filePath, newContent, 'utf8');
69
+ return `✓ Edit applied to ${input.path} (whitespace-normalised match)`;
70
+ }
71
+ // ── Attempt 3: fuzzy — ignore all internal whitespace differences ──────────
72
+ const collapse = (s) => s.replace(/[ \t]+/g, ' ').replace(/\n\s*/g, '\n').trim();
73
+ const escaped = collapse(normalFind).replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/ /g, '\\s+').replace(/\n/g, '\\s*\n\\s*');
74
+ const fuzzyRegex = new RegExp(escaped, 'm');
75
+ if (fuzzyRegex.test(normalContent)) {
76
+ const newContent = normalContent.replace(fuzzyRegex, normalReplace.trim());
77
+ fs.writeFileSync(filePath, newContent, 'utf8');
78
+ return `✓ Edit applied to ${input.path} (fuzzy whitespace match)`;
79
+ }
80
+ // ── Check for multiple matches (ambiguous edit) ────────────────────────────
81
+ const occurrences = normalContent.split(normalFind.split('\n')[0]).length - 1;
82
+ // Nothing found — return helpful context
83
+ const lines = normalContent.split('\n');
84
+ const preview = lines.slice(0, 60).map((l, i) => `${i + 1}: ${l}`).join('\n');
85
+ return [
86
+ `Error: Could not find the specified block in ${input.path}.`,
87
+ occurrences > 1 ? `Note: The first line of your find block appears ${occurrences} times — provide more context to disambiguate.` : '',
88
+ ``,
89
+ `The find block you provided:`,
90
+ `---`,
91
+ normalFind.split('\n').slice(0, 10).join('\n'),
92
+ `---`,
93
+ ``,
94
+ `File starts with (first 60 lines):`,
95
+ preview,
96
+ ].filter(Boolean).join('\n');
97
+ }
98
+ //# sourceMappingURL=edit-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-file.js","sourceRoot":"","sources":["../../src/tools/edit-file.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,4BAoEC;AA7ED,uCAAyB;AACzB,2CAA6B;AAQ7B,SAAgB,QAAQ,CAAC,KAAoB,EAAE,GAAW;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,0BAA0B,KAAK,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,uBAAuB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,CAAC;IAED,yBAAyB;IACzB,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,UAAU,GAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE3D,8EAA8E;IAC9E,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACpE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7D,OAAO,qBAAqB,KAAK,CAAC,IAAI,cAAc,SAAS,QAAQ,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IACnG,CAAC;IAED,8EAA8E;IAC9E,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,cAAc,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,WAAW,GAAM,SAAS,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;QACjF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,qBAAqB,KAAK,CAAC,IAAI,gCAAgC,CAAC;IACzE,CAAC;IAED,8EAA8E;IAC9E,MAAM,QAAQ,GAAI,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1F,MAAM,OAAO,GAAK,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACjI,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAE5C,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,qBAAqB,KAAK,CAAC,IAAI,2BAA2B,CAAC;IACpE,CAAC;IAED,8EAA8E;IAC9E,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9E,yCAAyC;IACzC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE9E,OAAO;QACL,gDAAgD,KAAK,CAAC,IAAI,GAAG;QAC7D,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,mDAAmD,WAAW,gDAAgD,CAAC,CAAC,CAAC,EAAE;QACrI,EAAE;QACF,8BAA8B;QAC9B,KAAK;QACL,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9C,KAAK;QACL,EAAE;QACF,oCAAoC;QACpC,OAAO;KACR,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ToolDefinition } from '../providers/types.js';
2
+ export interface EmailInput {
3
+ action: 'send' | 'read' | 'unread_count';
4
+ to?: string;
5
+ subject?: string;
6
+ body?: string;
7
+ cc?: string;
8
+ limit?: number;
9
+ }
10
+ export declare const EMAIL_DEFINITION: ToolDefinition;
11
+ export declare function emailTool(input: EmailInput): Promise<string>;
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.EMAIL_DEFINITION = void 0;
37
+ exports.emailTool = emailTool;
38
+ const child_process_1 = require("child_process");
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const os = __importStar(require("os"));
42
+ exports.EMAIL_DEFINITION = {
43
+ name: 'email',
44
+ description: 'Send and read emails. Uses system mail (sendmail/msmtp) or configured SMTP. ' +
45
+ 'For reading, uses local mailbox. Configure ~/.msmtprc or ~/.aura/email.json for SMTP.',
46
+ parameters: {
47
+ type: 'object',
48
+ properties: {
49
+ action: { type: 'string', description: 'Action: send, read, unread_count' },
50
+ to: { type: 'string', description: 'Recipient email (for send)' },
51
+ subject: { type: 'string', description: 'Email subject (for send)' },
52
+ body: { type: 'string', description: 'Email body (for send)' },
53
+ cc: { type: 'string', description: 'CC recipients (for send)' },
54
+ limit: { type: 'number', description: 'Max emails to read (default: 10)' },
55
+ },
56
+ required: ['action'],
57
+ },
58
+ };
59
+ function getConfig() {
60
+ const configPath = path.join(os.homedir(), '.aura', 'email.json');
61
+ if (!fs.existsSync(configPath))
62
+ return null;
63
+ try {
64
+ return JSON.parse(fs.readFileSync(configPath, 'utf8'));
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ function sendViaCommand(to, subject, body) {
71
+ // Try msmtp
72
+ try {
73
+ (0, child_process_1.execSync)('which msmtp', { stdio: 'pipe' });
74
+ const emailContent = `To: ${to}\nSubject: ${subject}\nContent-Type: text/plain; charset=UTF-8\n\n${body}`;
75
+ (0, child_process_1.execSync)(`echo ${JSON.stringify(emailContent)} | msmtp ${to}`, { stdio: 'pipe' });
76
+ return `Email sent to ${to} via msmtp: "${subject}"`;
77
+ }
78
+ catch { /* not found */ }
79
+ // Try sendmail
80
+ try {
81
+ (0, child_process_1.execSync)('which sendmail', { stdio: 'pipe' });
82
+ const emailContent = `To: ${to}\nSubject: ${subject}\nContent-Type: text/plain; charset=UTF-8\n\n${body}`;
83
+ (0, child_process_1.execSync)(`echo ${JSON.stringify(emailContent)} | sendmail -t`, { stdio: 'pipe' });
84
+ return `Email sent to ${to} via sendmail: "${subject}"`;
85
+ }
86
+ catch { /* not found */ }
87
+ // Try mail (mailutils)
88
+ try {
89
+ (0, child_process_1.execSync)('which mail', { stdio: 'pipe' });
90
+ (0, child_process_1.execSync)(`echo ${JSON.stringify(body)} | mail -s ${JSON.stringify(subject)} ${to}`, { stdio: 'pipe' });
91
+ return `Email sent to ${to} via mail: "${subject}"`;
92
+ }
93
+ catch { /* not found */ }
94
+ return 'Error: No mail command found. Install msmtp, sendmail, or mailutils. Or configure ~/.aura/email.json';
95
+ }
96
+ function readMail(limit) {
97
+ // Try reading from local mailbox
98
+ const mailPaths = [
99
+ path.join(os.homedir(), 'Mail', 'inbox'),
100
+ '/var/mail/' + os.userInfo().username,
101
+ path.join(os.homedir(), '.mail'),
102
+ ];
103
+ for (const p of mailPaths) {
104
+ if (fs.existsSync(p)) {
105
+ try {
106
+ const content = fs.readFileSync(p, 'utf8');
107
+ if (!content.trim())
108
+ return 'Inbox is empty.';
109
+ // Split by mail separators
110
+ const emails = content.split(/^(?=From )/m).filter(e => e.trim());
111
+ const recent = emails.slice(-limit);
112
+ return `Found ${emails.length} emails (showing last ${recent.length}):\n\n${recent.join('\n---\n')}`;
113
+ }
114
+ catch (e) {
115
+ return `Error reading mailbox: ${e?.message}`;
116
+ }
117
+ }
118
+ }
119
+ return 'No local mailbox found. Configure ~/.aura/email.json or use a mail client.';
120
+ }
121
+ function unreadCount() {
122
+ try {
123
+ // Try notmuch
124
+ (0, child_process_1.execSync)('which notmuch', { stdio: 'pipe' });
125
+ const count = (0, child_process_1.execSync)('notmuch count tag:unread', { encoding: 'utf8' }).trim();
126
+ return `Unread emails: ${count}`;
127
+ }
128
+ catch { /* not found */ }
129
+ // Fallback to reading
130
+ return 'Cannot count unread emails. Install notmuch or configure mail client.';
131
+ }
132
+ async function emailTool(input) {
133
+ switch (input.action) {
134
+ case 'send': {
135
+ if (!input.to)
136
+ return 'Error: to is required for send';
137
+ if (!input.subject)
138
+ return 'Error: subject is required for send';
139
+ if (!input.body)
140
+ return 'Error: body is required for send';
141
+ return sendViaCommand(input.to, input.subject, input.body);
142
+ }
143
+ case 'read': {
144
+ return readMail(input.limit ?? 10);
145
+ }
146
+ case 'unread_count': {
147
+ return unreadCount();
148
+ }
149
+ default:
150
+ return `Error: Unknown email action: ${input.action}`;
151
+ }
152
+ }
153
+ //# sourceMappingURL=email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/tools/email.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { gitStatus, gitDiff } from './tools.js';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gitDiff = exports.gitStatus = void 0;
4
+ var tools_js_1 = require("./tools.js");
5
+ Object.defineProperty(exports, "gitStatus", { enumerable: true, get: function () { return tools_js_1.gitStatus; } });
6
+ Object.defineProperty(exports, "gitDiff", { enumerable: true, get: function () { return tools_js_1.gitDiff; } });
7
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/tools/git.ts"],"names":[],"mappings":";;;AAAA,uCAAgD;AAAvC,qGAAA,SAAS,OAAA;AAAE,mGAAA,OAAO,OAAA"}
@@ -0,0 +1,12 @@
1
+ import type { ToolDefinition } from '../providers/types.js';
2
+ export interface HttpRequestInput {
3
+ url: string;
4
+ method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD';
5
+ headers?: Record<string, string>;
6
+ body?: string;
7
+ json?: unknown;
8
+ max_chars?: number;
9
+ timeout_ms?: number;
10
+ }
11
+ export declare const HTTP_REQUEST_DEFINITION: ToolDefinition;
12
+ export declare function httpRequest(input: HttpRequestInput): Promise<string>;