aura-code 0.5.0 → 0.10.1

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 (294) hide show
  1. package/README.md +47 -164
  2. package/dist/agent/affect.d.ts +13 -0
  3. package/dist/agent/affect.js +34 -0
  4. package/dist/agent/affect.js.map +1 -0
  5. package/dist/agent/compactor.d.ts +27 -4
  6. package/dist/agent/compactor.js +185 -54
  7. package/dist/agent/compactor.js.map +1 -1
  8. package/dist/agent/confess.d.ts +35 -0
  9. package/dist/agent/confess.js +296 -0
  10. package/dist/agent/confess.js.map +1 -0
  11. package/dist/agent/domain-expertise.d.ts +22 -0
  12. package/dist/agent/domain-expertise.js +110 -0
  13. package/dist/agent/domain-expertise.js.map +1 -0
  14. package/dist/agent/executive-queue.d.ts +26 -0
  15. package/dist/agent/executive-queue.js +50 -0
  16. package/dist/agent/executive-queue.js.map +1 -0
  17. package/dist/agent/generational-flush.d.ts +28 -0
  18. package/dist/agent/generational-flush.js +48 -0
  19. package/dist/agent/generational-flush.js.map +1 -0
  20. package/dist/agent/loop-profile.d.ts +50 -0
  21. package/dist/agent/loop-profile.js +88 -0
  22. package/dist/agent/loop-profile.js.map +1 -0
  23. package/dist/agent/loop.d.ts +14 -5
  24. package/dist/agent/loop.js +167 -23
  25. package/dist/agent/loop.js.map +1 -1
  26. package/dist/agent/memory-consolidate.d.ts +14 -0
  27. package/dist/agent/memory-consolidate.js +141 -0
  28. package/dist/agent/memory-consolidate.js.map +1 -0
  29. package/dist/agent/mixture.d.ts +33 -0
  30. package/dist/agent/mixture.js +138 -0
  31. package/dist/agent/mixture.js.map +1 -0
  32. package/dist/agent/spawner.js +2 -2
  33. package/dist/agent/spawner.js.map +1 -1
  34. package/dist/agent/system-prompt.d.ts +1 -1
  35. package/dist/agent/system-prompt.js +49 -13
  36. package/dist/agent/system-prompt.js.map +1 -1
  37. package/dist/agent/unified-memory.d.ts +15 -0
  38. package/dist/agent/unified-memory.js +164 -0
  39. package/dist/agent/unified-memory.js.map +1 -0
  40. package/dist/checkpoints/engine.d.ts +44 -0
  41. package/dist/checkpoints/engine.js +324 -0
  42. package/dist/checkpoints/engine.js.map +1 -0
  43. package/dist/cli/command-palette.d.ts +26 -0
  44. package/dist/cli/command-palette.js +133 -0
  45. package/dist/cli/command-palette.js.map +1 -0
  46. package/dist/cli/context-health.d.ts +51 -0
  47. package/dist/cli/context-health.js +187 -0
  48. package/dist/cli/context-health.js.map +1 -0
  49. package/dist/cli/diamond.d.ts +67 -0
  50. package/dist/cli/diamond.js +222 -12
  51. package/dist/cli/diamond.js.map +1 -1
  52. package/dist/cli/dic.d.ts +2 -0
  53. package/dist/cli/dic.js +106 -0
  54. package/dist/cli/dic.js.map +1 -0
  55. package/dist/cli/diff-view.d.ts +18 -0
  56. package/dist/cli/diff-view.js +114 -0
  57. package/dist/cli/diff-view.js.map +1 -0
  58. package/dist/cli/display.d.ts +18 -4
  59. package/dist/cli/display.js +74 -146
  60. package/dist/cli/display.js.map +1 -1
  61. package/dist/cli/help-data.d.ts +7 -0
  62. package/dist/cli/help-data.js +80 -0
  63. package/dist/cli/help-data.js.map +1 -0
  64. package/dist/cli/index.js +1001 -788
  65. package/dist/cli/index.js.map +1 -1
  66. package/dist/cli/markdown.d.ts +5 -0
  67. package/dist/cli/markdown.js +128 -0
  68. package/dist/cli/markdown.js.map +1 -0
  69. package/dist/cli/model-select.d.ts +39 -0
  70. package/dist/cli/model-select.js +65 -0
  71. package/dist/cli/model-select.js.map +1 -0
  72. package/dist/cli/tui.d.ts +34 -0
  73. package/dist/cli/tui.js +1176 -0
  74. package/dist/cli/tui.js.map +1 -0
  75. package/dist/config/defaults.d.ts +6 -17
  76. package/dist/config/defaults.js +25 -39
  77. package/dist/config/defaults.js.map +1 -1
  78. package/dist/config/project-config.d.ts +2 -6
  79. package/dist/config/project-config.js +2 -2
  80. package/dist/config/project-config.js.map +1 -1
  81. package/dist/doctor/checks.d.ts +18 -0
  82. package/dist/doctor/checks.js +524 -0
  83. package/dist/doctor/checks.js.map +1 -0
  84. package/dist/doctor/index.d.ts +4 -0
  85. package/dist/doctor/index.js +229 -0
  86. package/dist/doctor/index.js.map +1 -0
  87. package/dist/doctor/repair.d.ts +19 -0
  88. package/dist/doctor/repair.js +126 -0
  89. package/dist/doctor/repair.js.map +1 -0
  90. package/dist/doctor/types.d.ts +38 -0
  91. package/dist/doctor/types.js +10 -0
  92. package/dist/doctor/types.js.map +1 -0
  93. package/dist/dream/dream.d.ts +79 -36
  94. package/dist/dream/dream.js +327 -117
  95. package/dist/dream/dream.js.map +1 -1
  96. package/dist/dream/episode.d.ts +17 -0
  97. package/dist/dream/episode.js +116 -0
  98. package/dist/dream/episode.js.map +1 -0
  99. package/dist/dream/okf.d.ts +10 -0
  100. package/dist/dream/okf.js +280 -0
  101. package/dist/dream/okf.js.map +1 -0
  102. package/dist/dream/parser.d.ts +60 -0
  103. package/dist/dream/parser.js +176 -0
  104. package/dist/dream/parser.js.map +1 -0
  105. package/dist/dream/reconcile.d.ts +69 -0
  106. package/dist/dream/reconcile.js +303 -0
  107. package/dist/dream/reconcile.js.map +1 -0
  108. package/dist/kanban/engine.d.ts +26 -0
  109. package/dist/kanban/engine.js +208 -0
  110. package/dist/kanban/engine.js.map +1 -0
  111. package/dist/kanban/types.d.ts +19 -0
  112. package/dist/kanban/types.js +9 -1
  113. package/dist/kanban/types.js.map +1 -1
  114. package/dist/machina/index.d.ts +16 -0
  115. package/dist/machina/index.js +61 -0
  116. package/dist/machina/index.js.map +1 -0
  117. package/dist/machina/render-html.d.ts +2 -0
  118. package/dist/machina/render-html.js +191 -0
  119. package/dist/machina/render-html.js.map +1 -0
  120. package/dist/machina/render-terminal.d.ts +2 -0
  121. package/dist/machina/render-terminal.js +99 -0
  122. package/dist/machina/render-terminal.js.map +1 -0
  123. package/dist/machina/repair.d.ts +23 -0
  124. package/dist/machina/repair.js +98 -0
  125. package/dist/machina/repair.js.map +1 -0
  126. package/dist/machina/spec.d.ts +61 -0
  127. package/dist/machina/spec.js +124 -0
  128. package/dist/machina/spec.js.map +1 -0
  129. package/dist/machina/verify.d.ts +39 -0
  130. package/dist/machina/verify.js +95 -0
  131. package/dist/machina/verify.js.map +1 -0
  132. package/dist/mining/extract.d.ts +34 -0
  133. package/dist/mining/extract.js +229 -0
  134. package/dist/mining/extract.js.map +1 -0
  135. package/dist/mining/refine.d.ts +28 -0
  136. package/dist/mining/refine.js +256 -0
  137. package/dist/mining/refine.js.map +1 -0
  138. package/dist/perception/extractor.js +5 -3
  139. package/dist/perception/extractor.js.map +1 -1
  140. package/dist/perception/graph-store.d.ts +0 -11
  141. package/dist/perception/graph-store.js +0 -33
  142. package/dist/perception/graph-store.js.map +1 -1
  143. package/dist/perception/index.d.ts +1 -1
  144. package/dist/perception/index.js +1 -2
  145. package/dist/perception/index.js.map +1 -1
  146. package/dist/plugins/commands.d.ts +38 -0
  147. package/dist/plugins/commands.js +134 -0
  148. package/dist/plugins/commands.js.map +1 -0
  149. package/dist/plugins/frontmatter.d.ts +14 -0
  150. package/dist/plugins/frontmatter.js +78 -0
  151. package/dist/plugins/frontmatter.js.map +1 -0
  152. package/dist/plugins/hooks.d.ts +12 -0
  153. package/dist/plugins/hooks.js +148 -0
  154. package/dist/plugins/hooks.js.map +1 -0
  155. package/dist/plugins/loader.d.ts +7 -0
  156. package/dist/plugins/loader.js +255 -0
  157. package/dist/plugins/loader.js.map +1 -0
  158. package/dist/plugins/market.d.ts +23 -0
  159. package/dist/plugins/market.js +281 -0
  160. package/dist/plugins/market.js.map +1 -0
  161. package/dist/plugins/types.d.ts +90 -0
  162. package/dist/plugins/types.js +20 -0
  163. package/dist/plugins/types.js.map +1 -0
  164. package/dist/providers/anthropic-oauth-draft.d.ts +119 -0
  165. package/dist/providers/anthropic-oauth-draft.js +414 -0
  166. package/dist/providers/anthropic-oauth-draft.js.map +1 -0
  167. package/dist/providers/anthropic.d.ts +4 -1
  168. package/dist/providers/anthropic.js +34 -6
  169. package/dist/providers/anthropic.js.map +1 -1
  170. package/dist/providers/factory.d.ts +71 -14
  171. package/dist/providers/factory.js +205 -124
  172. package/dist/providers/factory.js.map +1 -1
  173. package/dist/providers/google.js +8 -21
  174. package/dist/providers/google.js.map +1 -1
  175. package/dist/providers/live-models.d.ts +23 -0
  176. package/dist/providers/live-models.js +145 -0
  177. package/dist/providers/live-models.js.map +1 -0
  178. package/dist/providers/openai-compatible.d.ts +1 -12
  179. package/dist/providers/openai-compatible.js +71 -108
  180. package/dist/providers/openai-compatible.js.map +1 -1
  181. package/dist/providers/resilient-factory.js +1 -1
  182. package/dist/providers/resilient-factory.js.map +1 -1
  183. package/dist/rem/graph.d.ts +72 -0
  184. package/dist/rem/graph.js +139 -0
  185. package/dist/rem/graph.js.map +1 -0
  186. package/dist/rem/index.d.ts +16 -0
  187. package/dist/rem/index.js +60 -0
  188. package/dist/rem/index.js.map +1 -0
  189. package/dist/rem/render-html.d.ts +2 -0
  190. package/dist/rem/render-html.js +189 -0
  191. package/dist/rem/render-html.js.map +1 -0
  192. package/dist/rem/render-terminal.d.ts +4 -0
  193. package/dist/rem/render-terminal.js +94 -0
  194. package/dist/rem/render-terminal.js.map +1 -0
  195. package/dist/repl/queue.d.ts +22 -0
  196. package/dist/repl/queue.js +165 -0
  197. package/dist/repl/queue.js.map +1 -0
  198. package/dist/repl/side-channel.d.ts +23 -0
  199. package/dist/repl/side-channel.js +63 -0
  200. package/dist/repl/side-channel.js.map +1 -0
  201. package/dist/research/council.d.ts +5 -2
  202. package/dist/research/council.js +73 -10
  203. package/dist/research/council.js.map +1 -1
  204. package/dist/ruby/alternator.d.ts +11 -30
  205. package/dist/ruby/alternator.js +59 -38
  206. package/dist/ruby/alternator.js.map +1 -1
  207. package/dist/ruby/episode-capture.d.ts +0 -10
  208. package/dist/ruby/episode-capture.js +0 -33
  209. package/dist/ruby/episode-capture.js.map +1 -1
  210. package/dist/ruby/types.js +1 -1
  211. package/dist/ruby/types.js.map +1 -1
  212. package/dist/safety/path-jail.d.ts +17 -0
  213. package/dist/safety/path-jail.js +100 -0
  214. package/dist/safety/path-jail.js.map +1 -0
  215. package/dist/safety/permissions.d.ts +12 -21
  216. package/dist/safety/permissions.js +81 -216
  217. package/dist/safety/permissions.js.map +1 -1
  218. package/dist/safety/ssrf.d.ts +29 -0
  219. package/dist/safety/ssrf.js +185 -0
  220. package/dist/safety/ssrf.js.map +1 -0
  221. package/dist/server/index.js +64 -10
  222. package/dist/server/index.js.map +1 -1
  223. package/dist/setup/first-run.d.ts +0 -24
  224. package/dist/setup/first-run.js +10 -344
  225. package/dist/setup/first-run.js.map +1 -1
  226. package/dist/setup/key-store.d.ts +12 -0
  227. package/dist/setup/key-store.js +108 -0
  228. package/dist/setup/key-store.js.map +1 -0
  229. package/dist/setup/provider-registry.js +31 -18
  230. package/dist/setup/provider-registry.js.map +1 -1
  231. package/dist/setup/provider-test.d.ts +7 -0
  232. package/dist/setup/provider-test.js +73 -10
  233. package/dist/setup/provider-test.js.map +1 -1
  234. package/dist/setup/provider-wizard.d.ts +4 -1
  235. package/dist/setup/provider-wizard.js +92 -26
  236. package/dist/setup/provider-wizard.js.map +1 -1
  237. package/dist/setup/xiaomi.d.ts +1 -1
  238. package/dist/setup/xiaomi.js +3 -3
  239. package/dist/setup/xiaomi.js.map +1 -1
  240. package/dist/tools/browser.js +6 -4
  241. package/dist/tools/browser.js.map +1 -1
  242. package/dist/tools/clipboard.js +7 -1
  243. package/dist/tools/clipboard.js.map +1 -1
  244. package/dist/tools/dictate.d.ts +60 -0
  245. package/dist/tools/dictate.js +983 -0
  246. package/dist/tools/dictate.js.map +1 -0
  247. package/dist/tools/dictate_patched.js +1057 -0
  248. package/dist/tools/edit-file.js +10 -2
  249. package/dist/tools/edit-file.js.map +1 -1
  250. package/dist/tools/gmail-tool.d.ts +5 -1
  251. package/dist/tools/gmail-tool.js +151 -11
  252. package/dist/tools/gmail-tool.js.map +1 -1
  253. package/dist/tools/http-request.js +14 -4
  254. package/dist/tools/http-request.js.map +1 -1
  255. package/dist/tools/image-read.js +34 -2
  256. package/dist/tools/image-read.js.map +1 -1
  257. package/dist/tools/index.d.ts +16 -1
  258. package/dist/tools/index.js +59 -8
  259. package/dist/tools/index.js.map +1 -1
  260. package/dist/tools/mcp.js +12 -0
  261. package/dist/tools/mcp.js.map +1 -1
  262. package/dist/tools/read-file.js +10 -14
  263. package/dist/tools/read-file.js.map +1 -1
  264. package/dist/tools/telegram-audio-policy.d.ts +30 -0
  265. package/dist/tools/telegram-audio-policy.js +49 -0
  266. package/dist/tools/telegram-audio-policy.js.map +1 -0
  267. package/dist/tools/telegram-bot.js +1136 -539
  268. package/dist/tools/telegram-bot.js.map +1 -1
  269. package/dist/tools/telegram-voice.d.ts +18 -5
  270. package/dist/tools/telegram-voice.js +54 -12
  271. package/dist/tools/telegram-voice.js.map +1 -1
  272. package/dist/tools/telegram.d.ts +3 -3
  273. package/dist/tools/telegram.js +5 -84
  274. package/dist/tools/telegram.js.map +1 -1
  275. package/dist/tools/tools.d.ts +2 -14
  276. package/dist/tools/tools.js +79 -144
  277. package/dist/tools/tools.js.map +1 -1
  278. package/dist/tools/web-fetch.js +39 -7
  279. package/dist/tools/web-fetch.js.map +1 -1
  280. package/dist/tools/web-search.js +2 -3
  281. package/dist/tools/web-search.js.map +1 -1
  282. package/dist/util/errors.js +1 -15
  283. package/dist/util/errors.js.map +1 -1
  284. package/dist/util/json-repair.d.ts +11 -0
  285. package/dist/util/json-repair.js +31 -0
  286. package/dist/util/json-repair.js.map +1 -0
  287. package/dist/util/rate-limiter.js +2 -8
  288. package/dist/util/rate-limiter.js.map +1 -1
  289. package/dist/viz/index.js +793 -792
  290. package/dist/viz/index.js.map +1 -1
  291. package/dist/viz/reader.d.ts +33 -0
  292. package/dist/viz/reader.js +343 -0
  293. package/dist/viz/reader.js.map +1 -0
  294. package/package.json +13 -32
@@ -35,9 +35,17 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.editFile = editFile;
37
37
  const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
38
+ const path_jail_js_1 = require("../safety/path-jail.js");
39
39
  function editFile(input, cwd) {
40
- const filePath = path.resolve(cwd, input.path);
40
+ let filePath;
41
+ try {
42
+ filePath = (0, path_jail_js_1.resolveInRoot)(cwd, input.path);
43
+ }
44
+ catch (e) {
45
+ if (e instanceof path_jail_js_1.PathJailError)
46
+ return `Error: ${e.message}`;
47
+ throw e;
48
+ }
41
49
  if (!fs.existsSync(filePath)) {
42
50
  return `Error: File not found: ${input.path}`;
43
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"edit-file.js","sourceRoot":"","sources":["../../src/tools/edit-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edit-file.js","sourceRoot":"","sources":["../../src/tools/edit-file.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,15 @@
1
1
  import type { ToolDefinition } from '../providers/types.js';
2
2
  export interface GmailInput {
3
- action: 'list' | 'send' | 'read';
3
+ action: 'list' | 'send' | 'read' | 'setup' | 'setup_finish' | 'setup_status';
4
4
  to?: string;
5
5
  subject?: string;
6
6
  body?: string;
7
7
  max_results?: number;
8
8
  message_id?: string;
9
+ client_id?: string;
10
+ client_secret?: string;
11
+ code?: string;
12
+ email?: string;
9
13
  }
10
14
  export declare const GMAIL_DEFINITION: ToolDefinition;
11
15
  export declare function gmailTool(input: GmailInput): Promise<string>;
@@ -40,29 +40,85 @@ const path = __importStar(require("path"));
40
40
  const os = __importStar(require("os"));
41
41
  exports.GMAIL_DEFINITION = {
42
42
  name: 'gmail',
43
- description: 'Read and write emails via Gmail API. Uses existing Google OAuth from ~/.hermes/google_token.json. ' +
44
- 'Actions: list (recent emails), read (full message by id), send (compose new email).',
43
+ description: 'Read and write emails via Gmail API. Uses OAuth from ~/.hermes/google_token.json. ' +
44
+ 'Actions: list, read, send (require an existing token use setup_status to check). ' +
45
+ 'setup (step 1: takes client_id + client_secret, returns a URL for the user to open and ' +
46
+ 'approve, never echoes secrets back). setup_finish (step 2: takes the "code" from the ' +
47
+ 'redirect URL, exchanges it for tokens, and saves them — never returns the token itself). ' +
48
+ 'setup_status (checks whether a working token already exists, with no secret values shown).',
45
49
  parameters: {
46
50
  type: 'object',
47
51
  properties: {
48
- action: { type: 'string', description: 'Action: list, read, send' },
52
+ action: { type: 'string', description: 'Action: list, read, send, setup, setup_finish, setup_status' },
49
53
  to: { type: 'string', description: 'Recipient email (for send)' },
50
54
  subject: { type: 'string', description: 'Email subject (for send/read)' },
51
55
  body: { type: 'string', description: 'Email body text (for send)' },
52
56
  max_results: { type: 'number', description: 'Max results for list (default: 10)' },
53
57
  message_id: { type: 'string', description: 'Gmail message ID to read (for read)' },
58
+ client_id: { type: 'string', description: 'Google OAuth client ID (for setup)' },
59
+ client_secret: { type: 'string', description: 'Google OAuth client secret (for setup)' },
60
+ code: { type: 'string', description: 'Authorization code from the redirect URL (for setup_finish)' },
61
+ email: { type: 'string', description: 'The Gmail address being connected (for setup_finish)' },
54
62
  },
55
63
  required: ['action'],
56
64
  },
57
65
  };
58
66
  const TOKEN_PATH = path.join(os.homedir(), '.hermes', 'google_token.json');
67
+ const SETUP_STATE_PATH = path.join(os.homedir(), '.hermes', '.gmail_setup_state.json');
68
+ const REDIRECT_URI = 'http://localhost:8080/';
69
+ const SETUP_SCOPES = [
70
+ 'https://www.googleapis.com/auth/gmail.readonly',
71
+ 'https://www.googleapis.com/auth/gmail.send',
72
+ 'https://www.googleapis.com/auth/gmail.modify',
73
+ ].join(' ');
59
74
  function loadToken() {
60
75
  if (!fs.existsSync(TOKEN_PATH))
61
76
  throw new Error(`Google token not found at ${TOKEN_PATH}`);
62
77
  return JSON.parse(fs.readFileSync(TOKEN_PATH, 'utf8'));
63
78
  }
64
79
  function saveToken(token) {
65
- fs.writeFileSync(TOKEN_PATH, JSON.stringify(token, null, 2));
80
+ fs.mkdirSync(path.dirname(TOKEN_PATH), { recursive: true });
81
+ fs.writeFileSync(TOKEN_PATH, JSON.stringify(token, null, 2), { mode: 0o600 });
82
+ }
83
+ /**
84
+ * Setup is split into two steps because OAuth requires a human to approve
85
+ * access in a browser between them. The client_id/client_secret given in
86
+ * step 1 are held ONLY in memory between the two tool calls (never written to
87
+ * disk, never echoed back) — they're persisted to TOKEN_PATH only once the
88
+ * full token exchange in setup_finish succeeds. If the user never completes
89
+ * step 2, nothing is left on disk.
90
+ *
91
+ * Critically: at no point does this tool return token, refresh_token,
92
+ * client_secret, or any other credential value as part of its string result.
93
+ * Those values exist only inside this process and inside TOKEN_PATH on disk —
94
+ * never in the text that flows back into the conversation.
95
+ */
96
+ let pendingSetup = null;
97
+ function saveSetupState(s) {
98
+ // Held in-memory primarily; this on-disk copy only survives a process
99
+ // restart between step 1 and step 2 of the SAME setup attempt, and is
100
+ // deleted as soon as setup_finish succeeds or fails terminally.
101
+ fs.mkdirSync(path.dirname(SETUP_STATE_PATH), { recursive: true });
102
+ fs.writeFileSync(SETUP_STATE_PATH, JSON.stringify(s), { mode: 0o600 });
103
+ }
104
+ function loadSetupState() {
105
+ if (pendingSetup)
106
+ return pendingSetup;
107
+ if (!fs.existsSync(SETUP_STATE_PATH))
108
+ return null;
109
+ try {
110
+ return JSON.parse(fs.readFileSync(SETUP_STATE_PATH, 'utf8'));
111
+ }
112
+ catch {
113
+ return null;
114
+ }
115
+ }
116
+ function clearSetupState() {
117
+ pendingSetup = null;
118
+ try {
119
+ fs.unlinkSync(SETUP_STATE_PATH);
120
+ }
121
+ catch { /* already gone */ }
66
122
  }
67
123
  async function refreshAccess(token) {
68
124
  const tokenUri = token.token_uri || 'https://oauth2.googleapis.com/token';
@@ -92,12 +148,9 @@ async function refreshAccess(token) {
92
148
  async function getValidToken() {
93
149
  const token = loadToken();
94
150
  if (token.token) {
95
- // If expiry present and still valid, use it
96
151
  if (token.expiry && Date.now() < new Date(token.expiry).getTime() + 60000) {
97
152
  return token.token;
98
153
  }
99
- // Try the token anyway; if 401, we'll refresh on auth error below
100
- token.token;
101
154
  }
102
155
  if (!token.refresh_token)
103
156
  throw new Error('No refresh_token available to obtain a new access token');
@@ -116,7 +169,6 @@ async function gmailApi(path, init) {
116
169
  },
117
170
  });
118
171
  if (res.status === 401) {
119
- // Refresh and retry once
120
172
  const tokenData = loadToken();
121
173
  if (tokenData.refresh_token) {
122
174
  token = await refreshAccess(tokenData);
@@ -149,7 +201,6 @@ function extractPlainBody(msg) {
149
201
  const plain = msg.payload.parts.find((p) => p.mimeType === 'text/plain');
150
202
  if (plain?.body?.data)
151
203
  return decodeBase64Url(plain.body.data);
152
- // multipart container without direct data
153
204
  for (const p of msg.payload.parts) {
154
205
  if (p.parts) {
155
206
  const nested = p.parts.find((n) => n.mimeType === 'text/plain' && n.body?.data);
@@ -165,6 +216,97 @@ function extractPlainBody(msg) {
165
216
  async function gmailTool(input) {
166
217
  try {
167
218
  switch (input.action) {
219
+ case 'setup_status': {
220
+ if (!fs.existsSync(TOKEN_PATH))
221
+ return 'Not connected. No Gmail token found. Run setup to connect.';
222
+ try {
223
+ const t = loadToken();
224
+ const valid = !!t.refresh_token;
225
+ return valid
226
+ ? `Connected${t.email ? ` as ${t.email}` : ''}. Token file present with a refresh token.`
227
+ : 'Token file exists but has no refresh_token — re-run setup.';
228
+ }
229
+ catch {
230
+ return 'Token file exists but could not be parsed — re-run setup.';
231
+ }
232
+ }
233
+ case 'setup': {
234
+ if (!input.client_id || !input.client_secret) {
235
+ return 'Error: setup requires client_id and client_secret (from Google Cloud Console → APIs & Services → Credentials → OAuth client ID, type "Desktop app").';
236
+ }
237
+ // Held only in memory + a short-lived local state file; never echoed.
238
+ pendingSetup = { client_id: input.client_id, client_secret: input.client_secret };
239
+ saveSetupState(pendingSetup);
240
+ const params = new URLSearchParams({
241
+ client_id: input.client_id,
242
+ redirect_uri: REDIRECT_URI,
243
+ response_type: 'code',
244
+ scope: SETUP_SCOPES,
245
+ access_type: 'offline',
246
+ prompt: 'consent',
247
+ });
248
+ const url = `https://accounts.google.com/o/oauth2/v2/auth?${params.toString()}`;
249
+ return (`Step 1 of 2: open this URL, sign in, and approve access:\n\n${url}\n\n` +
250
+ `You'll be redirected to a localhost address that fails to load — that's expected, ` +
251
+ `nothing is listening there. Copy the "code=" value from that URL's address bar ` +
252
+ `(everything after "code=" and before the next "&", if any), then tell me to finish ` +
253
+ `setup with that code and your Gmail address. I will not display the code, the ` +
254
+ `client secret, or the resulting token back to you — only a success or failure message.`);
255
+ }
256
+ case 'setup_finish': {
257
+ const state = loadSetupState();
258
+ if (!state) {
259
+ return 'Error: no setup in progress. Run the setup action first (with client_id and client_secret) to get a fresh authorization URL.';
260
+ }
261
+ if (!input.code) {
262
+ return 'Error: setup_finish requires the "code" value copied from the redirect URL.';
263
+ }
264
+ const body = new URLSearchParams({
265
+ code: input.code,
266
+ client_id: state.client_id,
267
+ client_secret: state.client_secret,
268
+ redirect_uri: REDIRECT_URI,
269
+ grant_type: 'authorization_code',
270
+ });
271
+ let res;
272
+ try {
273
+ res = await fetch('https://oauth2.googleapis.com/token', {
274
+ method: 'POST',
275
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
276
+ body: body.toString(),
277
+ });
278
+ }
279
+ catch (e) {
280
+ return `Setup failed: could not reach Google's token endpoint (${e?.message ?? String(e)}). The authorization code is single-use — you'll need to run setup again to get a fresh one.`;
281
+ }
282
+ if (!res.ok) {
283
+ // Do not include res text verbatim if it might contain the code/secret echoed back;
284
+ // Google's error responses for this endpoint don't, but we keep this conservative.
285
+ clearSetupState();
286
+ return `Setup failed: Google rejected the authorization code (HTTP ${res.status}). The code is single-use and may have expired or been used already — run setup again for a fresh URL.`;
287
+ }
288
+ const data = (await res.json());
289
+ if (!data.refresh_token) {
290
+ clearSetupState();
291
+ return ('Setup partially failed: Google did not return a refresh_token, which means future ' +
292
+ 'tokens cannot be auto-renewed. This usually happens when access was already granted ' +
293
+ 'previously. Remove the app at https://myaccount.google.com/permissions and run setup ' +
294
+ 'again to force a fresh consent.');
295
+ }
296
+ const tokenFile = {
297
+ token: data.access_token,
298
+ refresh_token: data.refresh_token,
299
+ token_uri: 'https://oauth2.googleapis.com/token',
300
+ client_id: state.client_id,
301
+ client_secret: state.client_secret,
302
+ scopes: (data.scope ?? SETUP_SCOPES).split(' '),
303
+ expiry: data.expires_in ? new Date(Date.now() + data.expires_in * 1000).toISOString() : undefined,
304
+ email: input.email,
305
+ };
306
+ saveToken(tokenFile);
307
+ clearSetupState();
308
+ return `✓ Gmail connected${input.email ? ` for ${input.email}` : ''}. You can now use list, read, and send.`;
309
+ }
168
310
  case 'list': {
169
311
  const max = input.max_results ?? 10;
170
312
  const data = (await gmailApi(`/users/me/messages?maxResults=${max}${input.subject ? `&q=subject:${encodeURIComponent(input.subject)}` : ''}`));
@@ -196,10 +338,8 @@ async function gmailTool(input) {
196
338
  return 'Error: subject is required for send';
197
339
  if (!input.body)
198
340
  return 'Error: body is required for send';
199
- // Determine content type — HTML if body contains HTML tags, otherwise plain text
200
341
  const isHtml = /<html|<body|<div|<p|<br|<table|<h[1-6]/i.test(input.body);
201
342
  const contentType = isHtml ? 'text/html; charset=UTF-8' : 'text/plain; charset=UTF-8';
202
- // Get sender email from token or use default
203
343
  const tokenData = loadToken();
204
344
  const fromEmail = tokenData.email || 'milodule3@gmail.com';
205
345
  const raw = Buffer.from(`From: ${fromEmail}\r\nTo: ${input.to}\r\nSubject: ${input.subject}\r\nMIME-Version: 1.0\r\nContent-Type: ${contentType}\r\n\r\n${input.body}`).toString('base64url');
@@ -1 +1 @@
1
- {"version":3,"file":"gmail-tool.js","sourceRoot":"","sources":["../../src/tools/gmail-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gmail-tool.js","sourceRoot":"","sources":["../../src/tools/gmail-tool.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,12 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.HTTP_REQUEST_DEFINITION = void 0;
4
7
  exports.httpRequest = httpRequest;
8
+ const ssrf_js_1 = require("../safety/ssrf.js");
9
+ const package_json_1 = __importDefault(require("../../package.json"));
5
10
  exports.HTTP_REQUEST_DEFINITION = {
6
11
  name: 'http_request',
7
12
  description: 'Make an arbitrary HTTP request to any API. Supports JSON bodies, custom headers, all HTTP methods. ' +
@@ -24,15 +29,15 @@ async function httpRequest(input) {
24
29
  const method = (input.method ?? 'GET').toUpperCase();
25
30
  const maxChars = input.max_chars ?? 50_000;
26
31
  const timeoutMs = input.timeout_ms ?? 30_000;
27
- let parsed;
28
32
  try {
29
- parsed = new URL(input.url);
33
+ // eslint-disable-next-line no-new
34
+ new URL(input.url);
30
35
  }
31
36
  catch {
32
37
  return `Error: Invalid URL: ${input.url}`;
33
38
  }
34
39
  const headers = {
35
- 'User-Agent': 'Aura/0.2.4',
40
+ 'User-Agent': `Aura/${package_json_1.default.version}`,
36
41
  ...input.headers,
37
42
  };
38
43
  let body = input.body;
@@ -46,7 +51,9 @@ async function httpRequest(input) {
46
51
  headers['Content-Type'] = 'application/json';
47
52
  }
48
53
  try {
49
- const response = await fetch(input.url, {
54
+ // safeFetch enforces the SSRF guard (http/https only, no private/
55
+ // loopback/link-local targets) before the request and on each redirect.
56
+ const response = await (0, ssrf_js_1.safeFetch)(input.url, {
50
57
  method,
51
58
  headers,
52
59
  body,
@@ -82,6 +89,9 @@ async function httpRequest(input) {
82
89
  ].join('\n');
83
90
  }
84
91
  catch (e) {
92
+ if (e instanceof ssrf_js_1.SsrfError) {
93
+ return `Error: Blocked for security (SSRF guard): ${e.message}`;
94
+ }
85
95
  if (e?.name === 'TimeoutError' || e?.name === 'AbortError') {
86
96
  return `Error: Request timed out after ${timeoutMs}ms`;
87
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http-request.js","sourceRoot":"","sources":["../../src/tools/http-request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-request.js","sourceRoot":"","sources":["../../src/tools/http-request.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,25 @@ exports.IMAGE_READ_DEFINITION = void 0;
37
37
  exports.imageRead = imageRead;
38
38
  const fs = __importStar(require("fs"));
39
39
  const path = __importStar(require("path"));
40
+ const url_1 = require("url");
40
41
  const child_process_1 = require("child_process");
42
+ /**
43
+ * Normalize a user-supplied image location into an absolute filesystem path.
44
+ * Accepts plain paths and `file://` URLs (including percent-encoded ones and
45
+ * `file://localhost/...`), which is how editors/terminals hand off screenshots.
46
+ */
47
+ function normalizeImagePath(raw) {
48
+ let p = raw.trim().replace(/^["']|["']$/g, ''); // strip surrounding quotes
49
+ if (p.startsWith('file://')) {
50
+ try {
51
+ p = (0, url_1.fileURLToPath)(p); // handles %20 etc. + localhost host
52
+ }
53
+ catch {
54
+ p = decodeURIComponent(p.replace(/^file:\/\/(localhost)?/, ''));
55
+ }
56
+ }
57
+ return path.resolve(p);
58
+ }
41
59
  exports.IMAGE_READ_DEFINITION = {
42
60
  name: 'image_read',
43
61
  description: 'Read an image file. Actions: info (dimensions, size, format), ocr (extract text using tesseract), ' +
@@ -89,7 +107,21 @@ function doOcr(filePath) {
89
107
  return `OCR error: ${e?.message}`;
90
108
  }
91
109
  }
110
+ /** Max raw file size (bytes) allowed for base64 — larger images would flood context. */
111
+ const MAX_BASE64_BYTES = 500_000; // ~670 KB base64 output
92
112
  function doBase64(filePath) {
113
+ const stat = fs.statSync(filePath);
114
+ if (stat.size > MAX_BASE64_BYTES) {
115
+ const kb = (stat.size / 1024).toFixed(1);
116
+ const limit = (MAX_BASE64_BYTES / 1024).toFixed(0);
117
+ return [
118
+ `Error: image too large for base64 (${kb} KB > ${limit} KB limit).`,
119
+ `To use this image for vision:`,
120
+ ` 1. Resize: convert "${filePath}" -resize 50% /tmp/smaller.png`,
121
+ ` 2. Then: image_read path=/tmp/smaller.png action=base64`,
122
+ `Or use action=info to inspect it without encoding.`,
123
+ ].join('\n');
124
+ }
93
125
  const buffer = fs.readFileSync(filePath);
94
126
  const ext = path.extname(filePath).toLowerCase().slice(1);
95
127
  const mimeMap = {
@@ -102,9 +134,9 @@ function doBase64(filePath) {
102
134
  return `data:${mime};base64,${b64}`;
103
135
  }
104
136
  async function imageRead(input) {
105
- const filePath = path.resolve(input.path);
137
+ const filePath = normalizeImagePath(input.path);
106
138
  if (!fs.existsSync(filePath)) {
107
- return `Error: File not found: ${input.path}`;
139
+ return `Error: File not found: ${input.path} (resolved to ${filePath})`;
108
140
  }
109
141
  const ext = path.extname(filePath).toLowerCase();
110
142
  const action = input.action ?? 'info';
@@ -1 +1 @@
1
- {"version":3,"file":"image-read.js","sourceRoot":"","sources":["../../src/tools/image-read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"image-read.js","sourceRoot":"","sources":["../../src/tools/image-read.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,18 @@
1
- import type { ToolDefinition } from '../providers/types.js';
1
+ import type { ToolDefinition, HistoryMessage } from '../providers/types.js';
2
2
  export declare const TOOL_DEFINITIONS: ToolDefinition[];
3
+ /**
4
+ * Select the tool definitions to send this turn: all CORE tools plus any
5
+ * conditional tool whose trigger matches the task or conversation so far.
6
+ *
7
+ * `included` is a sticky per-session set: once a conditional tool is
8
+ * triggered it stays for the rest of the session, even if compaction later
9
+ * rewrites the keyword out of history. Additive-only also means the
10
+ * Anthropic prompt-cache prefix (tools block) is busted at most once per
11
+ * newly triggered tool instead of thrashing.
12
+ *
13
+ * Call once per turn — mid-session pivots ("actually send this via
14
+ * telegram") land in history as user messages, so the tool is present
15
+ * before the model responds to them.
16
+ */
17
+ export declare function selectTools(task: string, history: HistoryMessage[], included?: Set<string>): ToolDefinition[];
3
18
  export declare function executeTool(name: string, input: Record<string, unknown>, cwd: string): Promise<string>;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TOOL_DEFINITIONS = void 0;
4
+ exports.selectTools = selectTools;
4
5
  exports.executeTool = executeTool;
5
6
  const read_file_js_1 = require("./read-file.js");
6
7
  const list_dir_js_1 = require("./list-dir.js");
@@ -24,8 +25,6 @@ const calendar_js_1 = require("./calendar.js");
24
25
  const telegram_js_1 = require("./telegram.js");
25
26
  const whatsapp_js_1 = require("./whatsapp.js");
26
27
  const cron_js_1 = require("./cron.js");
27
- const audio_transcribe_js_1 = require("./audio-transcribe.js");
28
- const youtube_transcript_js_1 = require("./youtube-transcript.js");
29
28
  const mcp_js_1 = require("./mcp.js");
30
29
  // ─────────────────────────────────────────────────────────────────────────────
31
30
  // Tool schemas (what the model sees)
@@ -155,11 +154,65 @@ exports.TOOL_DEFINITIONS = [
155
154
  telegram_js_1.TELEGRAM_DEFINITION,
156
155
  whatsapp_js_1.WHATSAPP_DEFINITION,
157
156
  cron_js_1.CRON_DEFINITION,
158
- audio_transcribe_js_1.AUDIO_TRANSCRIBE_DEFINITION,
159
- youtube_transcript_js_1.YOUTUBE_TRANSCRIPT_DEFINITION,
160
157
  mcp_js_1.MCP_DEFINITION,
161
158
  ];
162
159
  // ─────────────────────────────────────────────────────────────────────────────
160
+ // Relevance gate — conditional tools are only sent to the model when the task
161
+ // or conversation mentions their domain. Same mechanic as the plugin-skill
162
+ // keyword gate in system-prompt.ts. Triggers are deliberately generous: a
163
+ // false positive costs a few hundred tokens, a false negative breaks the task.
164
+ // ─────────────────────────────────────────────────────────────────────────────
165
+ const CONDITIONAL_TOOL_TRIGGERS = {
166
+ telegram: /telegram|\btg\b|\bbot\b|send me|message me|text me|ping me|notify me/,
167
+ browser: /browser|chrome|website|webpage|web page|screenshot|click|navigate|scrape|open .{0,20}page|\burl\b/,
168
+ http_request: /\bhttp\b|\bapi\b|endpoint|curl|webhook|\brest\b|\brequest\b|post to/,
169
+ calendar: /calendar|\bevents?\b|meeting|appointment|schedule|remind/,
170
+ cron: /\bcron\b|schedule|recurring|daily|weekly|hourly|\bevery\b|periodically/,
171
+ whatsapp: /whatsapp|\bwa\b|send me|message me/,
172
+ email: /e-?mail|\bmail\b|inbox|gmail|smtp/,
173
+ notify: /notify|notification|alert|when done|ping|desktop/,
174
+ image_read: /image|screenshot|png|jpe?g|photo|picture|webcam/,
175
+ clipboard: /clipboard|copy to|paste/,
176
+ };
177
+ /** Text the gate scans: task + user/assistant messages (tool results excluded — huge and noisy). */
178
+ function gateText(task, history) {
179
+ const parts = [task];
180
+ for (const msg of history) {
181
+ if (msg.role === 'user')
182
+ parts.push(msg.content);
183
+ else if (msg.role === 'assistant' && msg.content)
184
+ parts.push(msg.content);
185
+ }
186
+ return parts.join('\n').toLowerCase();
187
+ }
188
+ /**
189
+ * Select the tool definitions to send this turn: all CORE tools plus any
190
+ * conditional tool whose trigger matches the task or conversation so far.
191
+ *
192
+ * `included` is a sticky per-session set: once a conditional tool is
193
+ * triggered it stays for the rest of the session, even if compaction later
194
+ * rewrites the keyword out of history. Additive-only also means the
195
+ * Anthropic prompt-cache prefix (tools block) is busted at most once per
196
+ * newly triggered tool instead of thrashing.
197
+ *
198
+ * Call once per turn — mid-session pivots ("actually send this via
199
+ * telegram") land in history as user messages, so the tool is present
200
+ * before the model responds to them.
201
+ */
202
+ function selectTools(task, history, included = new Set()) {
203
+ const text = gateText(task, history);
204
+ for (const [name, trigger] of Object.entries(CONDITIONAL_TOOL_TRIGGERS)) {
205
+ if (!included.has(name) && trigger.test(text))
206
+ included.add(name);
207
+ }
208
+ const selected = exports.TOOL_DEFINITIONS.filter(t => !(t.name in CONDITIONAL_TOOL_TRIGGERS) || included.has(t.name));
209
+ if (process.env.AURA_DEBUG_TOOLS) {
210
+ const chars = JSON.stringify(selected).length;
211
+ console.error(`[tools] sent=${selected.length}/${exports.TOOL_DEFINITIONS.length} chars=${chars}`);
212
+ }
213
+ return selected;
214
+ }
215
+ // ─────────────────────────────────────────────────────────────────────────────
163
216
  // Tool executor — dispatches to the right implementation
164
217
  // ─────────────────────────────────────────────────────────────────────────────
165
218
  async function executeTool(name, input, cwd) {
@@ -170,8 +223,8 @@ async function executeTool(name, input, cwd) {
170
223
  case 'edit_file': return (0, edit_file_js_1.editFile)({ path: input.path, find: input.find, replace: input.replace }, cwd);
171
224
  case 'write_file': return (0, write_file_js_1.writeFile)({ path: input.path, content: input.content }, cwd);
172
225
  case 'search_code': return (0, search_code_js_1.searchCode)({ pattern: input.pattern, path: input.path, file_glob: input.file_glob, literal: input.literal ?? false, case_sensitive: input.case_sensitive ?? false, max_results: input.max_results ?? 50 }, cwd);
173
- case 'run_shell': return await (0, run_shell_js_1.runShell)({ command: input.command, cwd: input.cwd, timeout: input.timeout }, cwd);
174
- case 'run_tests': return await (0, run_tests_js_1.runTests)({ file_or_pattern: input.file_or_pattern }, cwd);
226
+ case 'run_shell': return (0, run_shell_js_1.runShell)({ command: input.command, cwd: input.cwd, timeout: input.timeout }, cwd);
227
+ case 'run_tests': return (0, run_tests_js_1.runTests)({ file_or_pattern: input.file_or_pattern }, cwd);
175
228
  case 'git_status': return (0, git_js_1.gitStatus)(cwd);
176
229
  case 'git_diff': return (0, git_js_1.gitDiff)({ path: input.path, staged: input.staged ?? false }, cwd);
177
230
  case 'spawn_task': return (0, spawner_js_1.executeSpawnTask)(input);
@@ -188,8 +241,6 @@ async function executeTool(name, input, cwd) {
188
241
  case 'telegram': return (0, telegram_js_1.telegramTool)(input);
189
242
  case 'whatsapp': return (0, whatsapp_js_1.whatsAppTool)(input);
190
243
  case 'cron': return (0, cron_js_1.cronTool)(input);
191
- case 'audio_transcribe': return (0, audio_transcribe_js_1.audioTranscribe)(input);
192
- case 'youtube_transcript': return (0, youtube_transcript_js_1.youtubeTranscript)(input);
193
244
  case 'mcp': return (0, mcp_js_1.mcpTool)(input);
194
245
  default: return `Error: Unknown tool '${name}'`;
195
246
  }