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.
- package/README.md +47 -164
- package/dist/agent/affect.d.ts +13 -0
- package/dist/agent/affect.js +34 -0
- package/dist/agent/affect.js.map +1 -0
- package/dist/agent/compactor.d.ts +27 -4
- package/dist/agent/compactor.js +185 -54
- package/dist/agent/compactor.js.map +1 -1
- package/dist/agent/confess.d.ts +35 -0
- package/dist/agent/confess.js +296 -0
- package/dist/agent/confess.js.map +1 -0
- package/dist/agent/domain-expertise.d.ts +22 -0
- package/dist/agent/domain-expertise.js +110 -0
- package/dist/agent/domain-expertise.js.map +1 -0
- package/dist/agent/executive-queue.d.ts +26 -0
- package/dist/agent/executive-queue.js +50 -0
- package/dist/agent/executive-queue.js.map +1 -0
- package/dist/agent/generational-flush.d.ts +28 -0
- package/dist/agent/generational-flush.js +48 -0
- package/dist/agent/generational-flush.js.map +1 -0
- package/dist/agent/loop-profile.d.ts +50 -0
- package/dist/agent/loop-profile.js +88 -0
- package/dist/agent/loop-profile.js.map +1 -0
- package/dist/agent/loop.d.ts +14 -5
- package/dist/agent/loop.js +167 -23
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/memory-consolidate.d.ts +14 -0
- package/dist/agent/memory-consolidate.js +141 -0
- package/dist/agent/memory-consolidate.js.map +1 -0
- package/dist/agent/mixture.d.ts +33 -0
- package/dist/agent/mixture.js +138 -0
- package/dist/agent/mixture.js.map +1 -0
- package/dist/agent/spawner.js +2 -2
- package/dist/agent/spawner.js.map +1 -1
- package/dist/agent/system-prompt.d.ts +1 -1
- package/dist/agent/system-prompt.js +49 -13
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/agent/unified-memory.d.ts +15 -0
- package/dist/agent/unified-memory.js +164 -0
- package/dist/agent/unified-memory.js.map +1 -0
- package/dist/checkpoints/engine.d.ts +44 -0
- package/dist/checkpoints/engine.js +324 -0
- package/dist/checkpoints/engine.js.map +1 -0
- package/dist/cli/command-palette.d.ts +26 -0
- package/dist/cli/command-palette.js +133 -0
- package/dist/cli/command-palette.js.map +1 -0
- package/dist/cli/context-health.d.ts +51 -0
- package/dist/cli/context-health.js +187 -0
- package/dist/cli/context-health.js.map +1 -0
- package/dist/cli/diamond.d.ts +67 -0
- package/dist/cli/diamond.js +222 -12
- package/dist/cli/diamond.js.map +1 -1
- package/dist/cli/dic.d.ts +2 -0
- package/dist/cli/dic.js +106 -0
- package/dist/cli/dic.js.map +1 -0
- package/dist/cli/diff-view.d.ts +18 -0
- package/dist/cli/diff-view.js +114 -0
- package/dist/cli/diff-view.js.map +1 -0
- package/dist/cli/display.d.ts +18 -4
- package/dist/cli/display.js +74 -146
- package/dist/cli/display.js.map +1 -1
- package/dist/cli/help-data.d.ts +7 -0
- package/dist/cli/help-data.js +80 -0
- package/dist/cli/help-data.js.map +1 -0
- package/dist/cli/index.js +1001 -788
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/markdown.d.ts +5 -0
- package/dist/cli/markdown.js +128 -0
- package/dist/cli/markdown.js.map +1 -0
- package/dist/cli/model-select.d.ts +39 -0
- package/dist/cli/model-select.js +65 -0
- package/dist/cli/model-select.js.map +1 -0
- package/dist/cli/tui.d.ts +34 -0
- package/dist/cli/tui.js +1176 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/config/defaults.d.ts +6 -17
- package/dist/config/defaults.js +25 -39
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/project-config.d.ts +2 -6
- package/dist/config/project-config.js +2 -2
- package/dist/config/project-config.js.map +1 -1
- package/dist/doctor/checks.d.ts +18 -0
- package/dist/doctor/checks.js +524 -0
- package/dist/doctor/checks.js.map +1 -0
- package/dist/doctor/index.d.ts +4 -0
- package/dist/doctor/index.js +229 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/doctor/repair.d.ts +19 -0
- package/dist/doctor/repair.js +126 -0
- package/dist/doctor/repair.js.map +1 -0
- package/dist/doctor/types.d.ts +38 -0
- package/dist/doctor/types.js +10 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/dream/dream.d.ts +79 -36
- package/dist/dream/dream.js +327 -117
- package/dist/dream/dream.js.map +1 -1
- package/dist/dream/episode.d.ts +17 -0
- package/dist/dream/episode.js +116 -0
- package/dist/dream/episode.js.map +1 -0
- package/dist/dream/okf.d.ts +10 -0
- package/dist/dream/okf.js +280 -0
- package/dist/dream/okf.js.map +1 -0
- package/dist/dream/parser.d.ts +60 -0
- package/dist/dream/parser.js +176 -0
- package/dist/dream/parser.js.map +1 -0
- package/dist/dream/reconcile.d.ts +69 -0
- package/dist/dream/reconcile.js +303 -0
- package/dist/dream/reconcile.js.map +1 -0
- package/dist/kanban/engine.d.ts +26 -0
- package/dist/kanban/engine.js +208 -0
- package/dist/kanban/engine.js.map +1 -0
- package/dist/kanban/types.d.ts +19 -0
- package/dist/kanban/types.js +9 -1
- package/dist/kanban/types.js.map +1 -1
- package/dist/machina/index.d.ts +16 -0
- package/dist/machina/index.js +61 -0
- package/dist/machina/index.js.map +1 -0
- package/dist/machina/render-html.d.ts +2 -0
- package/dist/machina/render-html.js +191 -0
- package/dist/machina/render-html.js.map +1 -0
- package/dist/machina/render-terminal.d.ts +2 -0
- package/dist/machina/render-terminal.js +99 -0
- package/dist/machina/render-terminal.js.map +1 -0
- package/dist/machina/repair.d.ts +23 -0
- package/dist/machina/repair.js +98 -0
- package/dist/machina/repair.js.map +1 -0
- package/dist/machina/spec.d.ts +61 -0
- package/dist/machina/spec.js +124 -0
- package/dist/machina/spec.js.map +1 -0
- package/dist/machina/verify.d.ts +39 -0
- package/dist/machina/verify.js +95 -0
- package/dist/machina/verify.js.map +1 -0
- package/dist/mining/extract.d.ts +34 -0
- package/dist/mining/extract.js +229 -0
- package/dist/mining/extract.js.map +1 -0
- package/dist/mining/refine.d.ts +28 -0
- package/dist/mining/refine.js +256 -0
- package/dist/mining/refine.js.map +1 -0
- package/dist/perception/extractor.js +5 -3
- package/dist/perception/extractor.js.map +1 -1
- package/dist/perception/graph-store.d.ts +0 -11
- package/dist/perception/graph-store.js +0 -33
- package/dist/perception/graph-store.js.map +1 -1
- package/dist/perception/index.d.ts +1 -1
- package/dist/perception/index.js +1 -2
- package/dist/perception/index.js.map +1 -1
- package/dist/plugins/commands.d.ts +38 -0
- package/dist/plugins/commands.js +134 -0
- package/dist/plugins/commands.js.map +1 -0
- package/dist/plugins/frontmatter.d.ts +14 -0
- package/dist/plugins/frontmatter.js +78 -0
- package/dist/plugins/frontmatter.js.map +1 -0
- package/dist/plugins/hooks.d.ts +12 -0
- package/dist/plugins/hooks.js +148 -0
- package/dist/plugins/hooks.js.map +1 -0
- package/dist/plugins/loader.d.ts +7 -0
- package/dist/plugins/loader.js +255 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/market.d.ts +23 -0
- package/dist/plugins/market.js +281 -0
- package/dist/plugins/market.js.map +1 -0
- package/dist/plugins/types.d.ts +90 -0
- package/dist/plugins/types.js +20 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/providers/anthropic-oauth-draft.d.ts +119 -0
- package/dist/providers/anthropic-oauth-draft.js +414 -0
- package/dist/providers/anthropic-oauth-draft.js.map +1 -0
- package/dist/providers/anthropic.d.ts +4 -1
- package/dist/providers/anthropic.js +34 -6
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/factory.d.ts +71 -14
- package/dist/providers/factory.js +205 -124
- package/dist/providers/factory.js.map +1 -1
- package/dist/providers/google.js +8 -21
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/live-models.d.ts +23 -0
- package/dist/providers/live-models.js +145 -0
- package/dist/providers/live-models.js.map +1 -0
- package/dist/providers/openai-compatible.d.ts +1 -12
- package/dist/providers/openai-compatible.js +71 -108
- package/dist/providers/openai-compatible.js.map +1 -1
- package/dist/providers/resilient-factory.js +1 -1
- package/dist/providers/resilient-factory.js.map +1 -1
- package/dist/rem/graph.d.ts +72 -0
- package/dist/rem/graph.js +139 -0
- package/dist/rem/graph.js.map +1 -0
- package/dist/rem/index.d.ts +16 -0
- package/dist/rem/index.js +60 -0
- package/dist/rem/index.js.map +1 -0
- package/dist/rem/render-html.d.ts +2 -0
- package/dist/rem/render-html.js +189 -0
- package/dist/rem/render-html.js.map +1 -0
- package/dist/rem/render-terminal.d.ts +4 -0
- package/dist/rem/render-terminal.js +94 -0
- package/dist/rem/render-terminal.js.map +1 -0
- package/dist/repl/queue.d.ts +22 -0
- package/dist/repl/queue.js +165 -0
- package/dist/repl/queue.js.map +1 -0
- package/dist/repl/side-channel.d.ts +23 -0
- package/dist/repl/side-channel.js +63 -0
- package/dist/repl/side-channel.js.map +1 -0
- package/dist/research/council.d.ts +5 -2
- package/dist/research/council.js +73 -10
- package/dist/research/council.js.map +1 -1
- package/dist/ruby/alternator.d.ts +11 -30
- package/dist/ruby/alternator.js +59 -38
- package/dist/ruby/alternator.js.map +1 -1
- package/dist/ruby/episode-capture.d.ts +0 -10
- package/dist/ruby/episode-capture.js +0 -33
- package/dist/ruby/episode-capture.js.map +1 -1
- package/dist/ruby/types.js +1 -1
- package/dist/ruby/types.js.map +1 -1
- package/dist/safety/path-jail.d.ts +17 -0
- package/dist/safety/path-jail.js +100 -0
- package/dist/safety/path-jail.js.map +1 -0
- package/dist/safety/permissions.d.ts +12 -21
- package/dist/safety/permissions.js +81 -216
- package/dist/safety/permissions.js.map +1 -1
- package/dist/safety/ssrf.d.ts +29 -0
- package/dist/safety/ssrf.js +185 -0
- package/dist/safety/ssrf.js.map +1 -0
- package/dist/server/index.js +64 -10
- package/dist/server/index.js.map +1 -1
- package/dist/setup/first-run.d.ts +0 -24
- package/dist/setup/first-run.js +10 -344
- package/dist/setup/first-run.js.map +1 -1
- package/dist/setup/key-store.d.ts +12 -0
- package/dist/setup/key-store.js +108 -0
- package/dist/setup/key-store.js.map +1 -0
- package/dist/setup/provider-registry.js +31 -18
- package/dist/setup/provider-registry.js.map +1 -1
- package/dist/setup/provider-test.d.ts +7 -0
- package/dist/setup/provider-test.js +73 -10
- package/dist/setup/provider-test.js.map +1 -1
- package/dist/setup/provider-wizard.d.ts +4 -1
- package/dist/setup/provider-wizard.js +92 -26
- package/dist/setup/provider-wizard.js.map +1 -1
- package/dist/setup/xiaomi.d.ts +1 -1
- package/dist/setup/xiaomi.js +3 -3
- package/dist/setup/xiaomi.js.map +1 -1
- package/dist/tools/browser.js +6 -4
- package/dist/tools/browser.js.map +1 -1
- package/dist/tools/clipboard.js +7 -1
- package/dist/tools/clipboard.js.map +1 -1
- package/dist/tools/dictate.d.ts +60 -0
- package/dist/tools/dictate.js +983 -0
- package/dist/tools/dictate.js.map +1 -0
- package/dist/tools/dictate_patched.js +1057 -0
- package/dist/tools/edit-file.js +10 -2
- package/dist/tools/edit-file.js.map +1 -1
- package/dist/tools/gmail-tool.d.ts +5 -1
- package/dist/tools/gmail-tool.js +151 -11
- package/dist/tools/gmail-tool.js.map +1 -1
- package/dist/tools/http-request.js +14 -4
- package/dist/tools/http-request.js.map +1 -1
- package/dist/tools/image-read.js +34 -2
- package/dist/tools/image-read.js.map +1 -1
- package/dist/tools/index.d.ts +16 -1
- package/dist/tools/index.js +59 -8
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp.js +12 -0
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/read-file.js +10 -14
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/telegram-audio-policy.d.ts +30 -0
- package/dist/tools/telegram-audio-policy.js +49 -0
- package/dist/tools/telegram-audio-policy.js.map +1 -0
- package/dist/tools/telegram-bot.js +1136 -539
- package/dist/tools/telegram-bot.js.map +1 -1
- package/dist/tools/telegram-voice.d.ts +18 -5
- package/dist/tools/telegram-voice.js +54 -12
- package/dist/tools/telegram-voice.js.map +1 -1
- package/dist/tools/telegram.d.ts +3 -3
- package/dist/tools/telegram.js +5 -84
- package/dist/tools/telegram.js.map +1 -1
- package/dist/tools/tools.d.ts +2 -14
- package/dist/tools/tools.js +79 -144
- package/dist/tools/tools.js.map +1 -1
- package/dist/tools/web-fetch.js +39 -7
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-search.js +2 -3
- package/dist/tools/web-search.js.map +1 -1
- package/dist/util/errors.js +1 -15
- package/dist/util/errors.js.map +1 -1
- package/dist/util/json-repair.d.ts +11 -0
- package/dist/util/json-repair.js +31 -0
- package/dist/util/json-repair.js.map +1 -0
- package/dist/util/rate-limiter.js +2 -8
- package/dist/util/rate-limiter.js.map +1 -1
- package/dist/viz/index.js +793 -792
- package/dist/viz/index.js.map +1 -1
- package/dist/viz/reader.d.ts +33 -0
- package/dist/viz/reader.js +343 -0
- package/dist/viz/reader.js.map +1 -0
- package/package.json +13 -32
package/dist/tools/edit-file.js
CHANGED
|
@@ -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
|
|
38
|
+
const path_jail_js_1 = require("../safety/path-jail.js");
|
|
39
39
|
function editFile(input, cwd) {
|
|
40
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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>;
|
package/dist/tools/gmail-tool.js
CHANGED
|
@@ -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
|
|
44
|
-
'Actions: list
|
|
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.
|
|
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
|
-
|
|
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':
|
|
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
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"http-request.js","sourceRoot":"","sources":["../../src/tools/http-request.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/image-read.js
CHANGED
|
@@ -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 =
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"image-read.js","sourceRoot":"","sources":["../../src/tools/image-read.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -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>;
|
package/dist/tools/index.js
CHANGED
|
@@ -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
|
|
174
|
-
case 'run_tests': return
|
|
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
|
}
|