zilmate 1.3.5 → 1.4.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.
- package/dist/agents/automation-planner.agent.d.ts +108 -0
- package/dist/agents/automation-planner.agent.d.ts.map +1 -1
- package/dist/agents/automation-planner.agent.js +13 -4
- package/dist/agents/automation-planner.agent.js.map +1 -1
- package/dist/agents/manager.d.ts +117 -0
- package/dist/agents/manager.d.ts.map +1 -1
- package/dist/agents/manager.js +25 -1
- package/dist/agents/manager.js.map +1 -1
- package/dist/agents/security.agent.d.ts +340 -0
- package/dist/agents/security.agent.d.ts.map +1 -0
- package/dist/agents/security.agent.js +76 -0
- package/dist/agents/security.agent.js.map +1 -0
- package/dist/cli/confirm.d.ts.map +1 -1
- package/dist/cli/confirm.js +8 -14
- package/dist/cli/confirm.js.map +1 -1
- package/dist/cli/format.js +1 -1
- package/dist/cli/interactive.d.ts.map +1 -1
- package/dist/cli/interactive.js +2 -0
- package/dist/cli/interactive.js.map +1 -1
- package/dist/cli/triggers.d.ts.map +1 -1
- package/dist/cli/triggers.js +12 -4
- package/dist/cli/triggers.js.map +1 -1
- package/dist/cli/voice.d.ts.map +1 -1
- package/dist/cli/voice.js +2 -0
- package/dist/cli/voice.js.map +1 -1
- package/dist/config/env.d.ts +4 -0
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +4 -0
- package/dist/config/env.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/jobs/trigger-orchestrator.d.ts +26 -0
- package/dist/jobs/trigger-orchestrator.d.ts.map +1 -0
- package/dist/jobs/trigger-orchestrator.js +252 -0
- package/dist/jobs/trigger-orchestrator.js.map +1 -0
- package/dist/jobs/trigger-policies.d.ts +36 -0
- package/dist/jobs/trigger-policies.d.ts.map +1 -0
- package/dist/jobs/trigger-policies.js +68 -0
- package/dist/jobs/trigger-policies.js.map +1 -0
- package/dist/jobs/trigger-router.d.ts +14 -0
- package/dist/jobs/trigger-router.d.ts.map +1 -0
- package/dist/jobs/trigger-router.js +114 -0
- package/dist/jobs/trigger-router.js.map +1 -0
- package/dist/jobs/workflows.d.ts +4 -1
- package/dist/jobs/workflows.d.ts.map +1 -1
- package/dist/jobs/workflows.js +18 -42
- package/dist/jobs/workflows.js.map +1 -1
- package/dist/memory/personal-context.d.ts +45 -0
- package/dist/memory/personal-context.d.ts.map +1 -0
- package/dist/memory/personal-context.js +103 -0
- package/dist/memory/personal-context.js.map +1 -0
- package/dist/runtime/confirm.d.ts +3 -0
- package/dist/runtime/confirm.d.ts.map +1 -1
- package/dist/runtime/confirm.js +38 -12
- package/dist/runtime/confirm.js.map +1 -1
- package/dist/runtime/progress.d.ts.map +1 -1
- package/dist/runtime/progress.js +3 -0
- package/dist/runtime/progress.js.map +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/dist/skills/loader.d.ts +14 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +105 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/tools/cli-runner.d.ts +13 -0
- package/dist/tools/cli-runner.d.ts.map +1 -0
- package/dist/tools/cli-runner.js +75 -0
- package/dist/tools/cli-runner.js.map +1 -0
- package/dist/tools/computer-use.tool.d.ts +159 -0
- package/dist/tools/computer-use.tool.d.ts.map +1 -0
- package/dist/tools/computer-use.tool.js +356 -0
- package/dist/tools/computer-use.tool.js.map +1 -0
- package/dist/tools/orchestration.tool.d.ts +83 -0
- package/dist/tools/orchestration.tool.d.ts.map +1 -0
- package/dist/tools/orchestration.tool.js +154 -0
- package/dist/tools/orchestration.tool.js.map +1 -0
- package/dist/tools/osint-install.tool.d.ts +35 -0
- package/dist/tools/osint-install.tool.d.ts.map +1 -0
- package/dist/tools/osint-install.tool.js +334 -0
- package/dist/tools/osint-install.tool.js.map +1 -0
- package/dist/tools/osint.tool.d.ts +445 -0
- package/dist/tools/osint.tool.d.ts.map +1 -0
- package/dist/tools/osint.tool.js +630 -0
- package/dist/tools/osint.tool.js.map +1 -0
- package/dist/tools/pentest-install.tool.d.ts +32 -0
- package/dist/tools/pentest-install.tool.d.ts.map +1 -0
- package/dist/tools/pentest-install.tool.js +201 -0
- package/dist/tools/pentest-install.tool.js.map +1 -0
- package/dist/tools/pentest.tool.d.ts +595 -0
- package/dist/tools/pentest.tool.d.ts.map +1 -0
- package/dist/tools/pentest.tool.js +841 -0
- package/dist/tools/pentest.tool.js.map +1 -0
- package/dist/tools/personal-context.tool.d.ts +32 -0
- package/dist/tools/personal-context.tool.d.ts.map +1 -0
- package/dist/tools/personal-context.tool.js +76 -0
- package/dist/tools/personal-context.tool.js.map +1 -0
- package/dist/tools/skills.tool.d.ts +17 -0
- package/dist/tools/skills.tool.d.ts.map +1 -0
- package/dist/tools/skills.tool.js +44 -0
- package/dist/tools/skills.tool.js.map +1 -0
- package/dist/voice/cascade.d.ts.map +1 -1
- package/dist/voice/cascade.js +71 -24
- package/dist/voice/cascade.js.map +1 -1
- package/dist/voice/deepgram.d.ts.map +1 -1
- package/dist/voice/deepgram.js +8 -1
- package/dist/voice/deepgram.js.map +1 -1
- package/dist/voice/types.d.ts +4 -0
- package/dist/voice/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { execFile, spawn } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
import { writeFile, mkdir } from 'node:fs/promises';
|
|
4
|
+
import { existsSync } from 'node:fs';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { tool } from 'ai';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { requestConfirmation } from '../runtime/confirm.js';
|
|
9
|
+
import { emitProgress } from '../runtime/progress.js';
|
|
10
|
+
const execFileAsync = promisify(execFile);
|
|
11
|
+
const IS_WIN = process.platform === 'win32';
|
|
12
|
+
const IS_MAC = process.platform === 'darwin';
|
|
13
|
+
const outputDir = path.resolve('outputs', 'computer-use');
|
|
14
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
15
|
+
async function confirmAction(action, details, access = 'Write') {
|
|
16
|
+
return requestConfirmation({
|
|
17
|
+
toolkitSlug: 'ZILMATE',
|
|
18
|
+
toolSlug: 'COMPUTER_USE',
|
|
19
|
+
action,
|
|
20
|
+
access,
|
|
21
|
+
targetTools: ['ZILMATE_COMPUTER_USE'],
|
|
22
|
+
details,
|
|
23
|
+
summary: details.join('; '),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
async function ensureDir(sub) {
|
|
27
|
+
const dir = sub ? path.join(outputDir, sub) : outputDir;
|
|
28
|
+
await mkdir(dir, { recursive: true });
|
|
29
|
+
return dir;
|
|
30
|
+
}
|
|
31
|
+
function ts() { return new Date().toISOString().replace(/[:.]/g, '-'); }
|
|
32
|
+
async function commandExists(cmd) {
|
|
33
|
+
try {
|
|
34
|
+
await execFileAsync(IS_WIN ? 'where' : 'which', [cmd], { timeout: 5000, windowsHide: true });
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function run(command, args, timeoutMs = 30_000) {
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
const child = spawn(command, args, { stdio: ['ignore', 'pipe', 'pipe'], shell: IS_WIN, windowsHide: true });
|
|
44
|
+
let out = '';
|
|
45
|
+
child.stdout.setEncoding('utf8');
|
|
46
|
+
child.stderr.setEncoding('utf8');
|
|
47
|
+
child.stdout.on('data', (c) => { out += c; });
|
|
48
|
+
child.stderr.on('data', (c) => { out += c; });
|
|
49
|
+
child.on('error', reject);
|
|
50
|
+
const t = setTimeout(() => { child.kill(); reject(new Error(`Timed out after ${timeoutMs / 1000}s`)); }, timeoutMs);
|
|
51
|
+
child.on('close', () => { clearTimeout(t); resolve(out); });
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
// ─── PyAutoGUI bootstrap ──────────────────────────────────────────────────────
|
|
55
|
+
// All mouse/keyboard/window tools use PyAutoGUI + pygetwindow (cross-platform).
|
|
56
|
+
// On Linux also needs python3-tk and python3-xlib.
|
|
57
|
+
async function runPython(script, timeoutMs = 15_000) {
|
|
58
|
+
const py = IS_WIN ? 'python' : 'python3';
|
|
59
|
+
const dir = await ensureDir('scripts');
|
|
60
|
+
const file = path.join(dir, `cu-${ts()}.py`);
|
|
61
|
+
await writeFile(file, script, 'utf8');
|
|
62
|
+
return run(py, [file], timeoutMs);
|
|
63
|
+
}
|
|
64
|
+
// ─── 1. Mouse control ─────────────────────────────────────────────────────────
|
|
65
|
+
export const mouseTool = {
|
|
66
|
+
mouseAction: tool({
|
|
67
|
+
description: 'Move the mouse, click, double-click, right-click, or scroll at specific screen coordinates. Use after takeScreenshot + analyzeScreenshot to find coordinates of UI elements.',
|
|
68
|
+
inputSchema: z.object({
|
|
69
|
+
action: z.enum(['move', 'click', 'doubleClick', 'rightClick', 'scroll']),
|
|
70
|
+
x: z.number().int().describe('X coordinate in pixels from top-left of screen.'),
|
|
71
|
+
y: z.number().int().describe('Y coordinate in pixels from top-left of screen.'),
|
|
72
|
+
scrollDirection: z.enum(['up', 'down', 'left', 'right']).optional().describe('Required when action is scroll.'),
|
|
73
|
+
scrollAmount: z.number().int().min(1).max(20).optional().default(3).describe('Number of scroll clicks.'),
|
|
74
|
+
duration: z.number().min(0).max(3).optional().default(0.2).describe('Movement duration in seconds (0 = instant).'),
|
|
75
|
+
}),
|
|
76
|
+
execute: async ({ action, x, y, scrollDirection, scrollAmount, duration }) => {
|
|
77
|
+
const approved = await confirmAction('Mouse action', [
|
|
78
|
+
`Action: ${action} at (${x}, ${y})`,
|
|
79
|
+
action === 'scroll' ? `Scroll ${scrollDirection} × ${scrollAmount}` : '',
|
|
80
|
+
].filter(Boolean));
|
|
81
|
+
if (!approved)
|
|
82
|
+
throw new Error('Blocked mouse action.');
|
|
83
|
+
emitProgress({ type: 'tool:start', label: `Mouse ${action}`, detail: `(${x}, ${y})` });
|
|
84
|
+
const script = `
|
|
85
|
+
import pyautogui
|
|
86
|
+
import time
|
|
87
|
+
pyautogui.FAILSAFE = True
|
|
88
|
+
pyautogui.PAUSE = 0.05
|
|
89
|
+
|
|
90
|
+
${action === 'move' ? `pyautogui.moveTo(${x}, ${y}, duration=${duration})` : ''}
|
|
91
|
+
${action === 'click' ? `pyautogui.click(${x}, ${y}, duration=${duration})` : ''}
|
|
92
|
+
${action === 'doubleClick' ? `pyautogui.doubleClick(${x}, ${y}, duration=${duration})` : ''}
|
|
93
|
+
${action === 'rightClick' ? `pyautogui.rightClick(${x}, ${y}, duration=${duration})` : ''}
|
|
94
|
+
${action === 'scroll' ? `pyautogui.moveTo(${x}, ${y})\npyautogui.scroll(${scrollDirection === 'down' ? -(scrollAmount ?? 3) : (scrollAmount ?? 3)})` : ''}
|
|
95
|
+
print("done")
|
|
96
|
+
`.trim();
|
|
97
|
+
const out = await runPython(script);
|
|
98
|
+
emitProgress({ type: 'tool:end', label: `Mouse ${action} complete` });
|
|
99
|
+
return { action, x, y, result: out.trim() };
|
|
100
|
+
},
|
|
101
|
+
}),
|
|
102
|
+
};
|
|
103
|
+
// ─── 2. Keyboard control ─────────────────────────────────────────────────────
|
|
104
|
+
export const keyboardTool = {
|
|
105
|
+
keyboardAction: tool({
|
|
106
|
+
description: 'Type text, press individual keys, or fire hotkey combos. Use for form filling, triggering shortcuts, confirming dialogs, navigating UIs, and sending Enter/Escape/Tab.',
|
|
107
|
+
inputSchema: z.object({
|
|
108
|
+
action: z.enum(['type', 'press', 'hotkey']),
|
|
109
|
+
text: z.string().optional().describe('Text to type (for action=type).'),
|
|
110
|
+
key: z.string().optional().describe('Key name for press: enter, escape, tab, space, backspace, delete, up, down, left, right, f1-f12, etc.'),
|
|
111
|
+
hotkey: z.array(z.string()).optional().describe('Key combo for hotkey, e.g. ["ctrl","c"] or ["cmd","shift","4"].'),
|
|
112
|
+
interval: z.number().min(0).max(1).optional().default(0.02).describe('Seconds between keystrokes when typing (default 0.02).'),
|
|
113
|
+
}),
|
|
114
|
+
execute: async ({ action, text, key, hotkey, interval }) => {
|
|
115
|
+
if (action === 'type' && !text)
|
|
116
|
+
throw new Error('text is required for action=type');
|
|
117
|
+
if (action === 'press' && !key)
|
|
118
|
+
throw new Error('key is required for action=press');
|
|
119
|
+
if (action === 'hotkey' && !hotkey?.length)
|
|
120
|
+
throw new Error('hotkey array is required for action=hotkey');
|
|
121
|
+
const approved = await confirmAction('Keyboard action', [
|
|
122
|
+
action === 'type' ? `Type: "${text.slice(0, 80)}${text.length > 80 ? '…' : ''}"` : '',
|
|
123
|
+
action === 'press' ? `Press key: ${key}` : '',
|
|
124
|
+
action === 'hotkey' ? `Hotkey: ${hotkey.join('+')}` : '',
|
|
125
|
+
].filter(Boolean));
|
|
126
|
+
if (!approved)
|
|
127
|
+
throw new Error('Blocked keyboard action.');
|
|
128
|
+
emitProgress({ type: 'tool:start', label: `Keyboard ${action}` });
|
|
129
|
+
// Escape backslashes and quotes for safe embedding in Python string
|
|
130
|
+
const escapedText = (text ?? '').replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
131
|
+
const script = `
|
|
132
|
+
import pyautogui
|
|
133
|
+
pyautogui.FAILSAFE = True
|
|
134
|
+
pyautogui.PAUSE = 0.05
|
|
135
|
+
|
|
136
|
+
${action === 'type' ? `pyautogui.typewrite('${escapedText}', interval=${interval})` : ''}
|
|
137
|
+
${action === 'press' ? `pyautogui.press('${key}')` : ''}
|
|
138
|
+
${action === 'hotkey' ? `pyautogui.hotkey(${hotkey.map((k) => `'${k}'`).join(', ')})` : ''}
|
|
139
|
+
print("done")
|
|
140
|
+
`.trim();
|
|
141
|
+
const out = await runPython(script);
|
|
142
|
+
emitProgress({ type: 'tool:end', label: `Keyboard ${action} complete` });
|
|
143
|
+
return { action, result: out.trim() };
|
|
144
|
+
},
|
|
145
|
+
}),
|
|
146
|
+
};
|
|
147
|
+
// ─── 3. Screen reading (single shot, no polling) ──────────────────────────────
|
|
148
|
+
export const screenReadTool = {
|
|
149
|
+
readScreen: tool({
|
|
150
|
+
description: 'Capture the current screen and return its pixel dimensions and file path. Pair with analyzeScreenshot (in desktop tools) to understand what is on screen before acting. Single shot — does not poll or watch continuously.',
|
|
151
|
+
inputSchema: z.object({
|
|
152
|
+
region: z
|
|
153
|
+
.object({ x: z.number(), y: z.number(), width: z.number(), height: z.number() })
|
|
154
|
+
.optional()
|
|
155
|
+
.describe('Capture only this region instead of the full screen.'),
|
|
156
|
+
}),
|
|
157
|
+
execute: async ({ region }) => {
|
|
158
|
+
const approved = await confirmAction('Read screen', ['Capture current screen contents as image'], 'Read-only');
|
|
159
|
+
if (!approved)
|
|
160
|
+
throw new Error('Blocked screen read.');
|
|
161
|
+
emitProgress({ type: 'tool:start', label: 'Reading screen' });
|
|
162
|
+
const dir = await ensureDir('screenshots');
|
|
163
|
+
const outFile = path.join(dir, `screen-${ts()}.png`);
|
|
164
|
+
const regionArg = region
|
|
165
|
+
? `region=(${region.x}, ${region.y}, ${region.width}, ${region.height})`
|
|
166
|
+
: '';
|
|
167
|
+
const script = `
|
|
168
|
+
import pyautogui
|
|
169
|
+
img = pyautogui.screenshot(${regionArg})
|
|
170
|
+
img.save('${outFile.replace(/\\/g, '\\\\')}')
|
|
171
|
+
print(f"{img.width}x{img.height}")
|
|
172
|
+
`.trim();
|
|
173
|
+
const out = await runPython(script);
|
|
174
|
+
const [w, h] = out.trim().split('x').map(Number);
|
|
175
|
+
emitProgress({ type: 'tool:end', label: 'Screen captured', detail: outFile });
|
|
176
|
+
return { filePath: outFile, width: w, height: h };
|
|
177
|
+
},
|
|
178
|
+
}),
|
|
179
|
+
};
|
|
180
|
+
// ─── 4. Window management ────────────────────────────────────────────────────
|
|
181
|
+
export const windowTool = {
|
|
182
|
+
manageWindow: tool({
|
|
183
|
+
description: 'List open windows, focus a specific window by title, move/resize it, or close it. Use to bring an app to focus before sending mouse/keyboard actions.',
|
|
184
|
+
inputSchema: z.object({
|
|
185
|
+
action: z.enum(['list', 'focus', 'resize', 'close', 'minimize', 'maximize']),
|
|
186
|
+
title: z.string().optional().describe('Window title (partial match). Required for all actions except list.'),
|
|
187
|
+
x: z.number().int().optional().describe('New X position (for resize).'),
|
|
188
|
+
y: z.number().int().optional().describe('New Y position (for resize).'),
|
|
189
|
+
width: z.number().int().optional().describe('New width (for resize).'),
|
|
190
|
+
height: z.number().int().optional().describe('New height (for resize).'),
|
|
191
|
+
}),
|
|
192
|
+
execute: async ({ action, title, x, y, width, height }) => {
|
|
193
|
+
if (action !== 'list' && !title)
|
|
194
|
+
throw new Error('title is required for all actions except list.');
|
|
195
|
+
const approved = await confirmAction('Window management', [
|
|
196
|
+
`Action: ${action}`,
|
|
197
|
+
title ? `Window: "${title}"` : 'Listing all windows',
|
|
198
|
+
]);
|
|
199
|
+
if (!approved)
|
|
200
|
+
throw new Error('Blocked window action.');
|
|
201
|
+
emitProgress({ type: 'tool:start', label: `Window ${action}`, detail: title ?? '' });
|
|
202
|
+
const script = `
|
|
203
|
+
import pygetwindow as gw
|
|
204
|
+
import json
|
|
205
|
+
|
|
206
|
+
${action === 'list' ? `
|
|
207
|
+
wins = gw.getAllWindows()
|
|
208
|
+
print(json.dumps([{"title": w.title, "width": w.width, "height": w.height, "x": w.left, "y": w.top, "visible": w.visible} for w in wins if w.title.strip()]))
|
|
209
|
+
` : ''}
|
|
210
|
+
${action !== 'list' ? `
|
|
211
|
+
wins = gw.getWindowsWithTitle('${title}')
|
|
212
|
+
if not wins:
|
|
213
|
+
print(json.dumps({"error": "Window not found: ${title}"}))
|
|
214
|
+
else:
|
|
215
|
+
w = wins[0]
|
|
216
|
+
${action === 'focus' ? 'w.activate()' : ''}
|
|
217
|
+
${action === 'minimize' ? 'w.minimize()' : ''}
|
|
218
|
+
${action === 'maximize' ? 'w.maximize()' : ''}
|
|
219
|
+
${action === 'close' ? 'w.close()' : ''}
|
|
220
|
+
${action === 'resize' && width && height ? `w.resizeTo(${width}, ${height})` : ''}
|
|
221
|
+
${action === 'resize' && x !== undefined && y !== undefined ? `w.moveTo(${x}, ${y})` : ''}
|
|
222
|
+
print(json.dumps({"title": w.title, "action": "${action}", "done": True}))
|
|
223
|
+
` : ''}
|
|
224
|
+
`.trim();
|
|
225
|
+
const out = await runPython(script);
|
|
226
|
+
try {
|
|
227
|
+
const parsed = JSON.parse(out.trim());
|
|
228
|
+
emitProgress({ type: 'tool:end', label: `Window ${action} complete` });
|
|
229
|
+
return parsed;
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return { raw: out.trim() };
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
}),
|
|
236
|
+
};
|
|
237
|
+
// ─── 5. Find UI element by image (template matching) ─────────────────────────
|
|
238
|
+
export const findElementTool = {
|
|
239
|
+
findOnScreen: tool({
|
|
240
|
+
description: 'Locate a UI element on screen by matching a reference image (button, icon, input field). Returns the center coordinates to click. Use when you have a known image of the element but not its coordinates.',
|
|
241
|
+
inputSchema: z.object({
|
|
242
|
+
referenceImagePath: z.string().describe('Absolute path to a PNG of the UI element to find.'),
|
|
243
|
+
confidence: z.number().min(0.5).max(1).optional().default(0.85).describe('Match confidence threshold 0.5–1.0 (default 0.85).'),
|
|
244
|
+
region: z
|
|
245
|
+
.object({ x: z.number(), y: z.number(), width: z.number(), height: z.number() })
|
|
246
|
+
.optional()
|
|
247
|
+
.describe('Narrow the search to this screen region for speed.'),
|
|
248
|
+
}),
|
|
249
|
+
execute: async ({ referenceImagePath, confidence, region }) => {
|
|
250
|
+
if (!existsSync(referenceImagePath))
|
|
251
|
+
throw new Error(`Reference image not found: ${referenceImagePath}`);
|
|
252
|
+
const approved = await confirmAction('Find UI element on screen', [
|
|
253
|
+
`Reference image: ${referenceImagePath}`,
|
|
254
|
+
`Confidence: ${confidence}`,
|
|
255
|
+
], 'Read-only');
|
|
256
|
+
if (!approved)
|
|
257
|
+
throw new Error('Blocked findOnScreen.');
|
|
258
|
+
emitProgress({ type: 'tool:start', label: 'Locating element on screen' });
|
|
259
|
+
const regionArg = region ? `region=(${region.x}, ${region.y}, ${region.width}, ${region.height})` : '';
|
|
260
|
+
const script = `
|
|
261
|
+
import pyautogui
|
|
262
|
+
import json
|
|
263
|
+
|
|
264
|
+
try:
|
|
265
|
+
loc = pyautogui.locateOnScreen('${referenceImagePath.replace(/\\/g, '\\\\')}', confidence=${confidence}${regionArg ? ', ' + regionArg : ''})
|
|
266
|
+
if loc:
|
|
267
|
+
center = pyautogui.center(loc)
|
|
268
|
+
print(json.dumps({"found": True, "x": center.x, "y": center.y, "box": {"left": loc.left, "top": loc.top, "width": loc.width, "height": loc.height}}))
|
|
269
|
+
else:
|
|
270
|
+
print(json.dumps({"found": False}))
|
|
271
|
+
except Exception as e:
|
|
272
|
+
print(json.dumps({"found": False, "error": str(e)}))
|
|
273
|
+
`.trim();
|
|
274
|
+
const out = await runPython(script);
|
|
275
|
+
const result = JSON.parse(out.trim());
|
|
276
|
+
emitProgress({ type: 'tool:end', label: result.found ? `Element found at (${result.x}, ${result.y})` : 'Element not found' });
|
|
277
|
+
return result;
|
|
278
|
+
},
|
|
279
|
+
}),
|
|
280
|
+
};
|
|
281
|
+
// ─── 6. Drag and drop ────────────────────────────────────────────────────────
|
|
282
|
+
export const dragTool = {
|
|
283
|
+
dragAndDrop: tool({
|
|
284
|
+
description: 'Click and drag from one screen position to another. Use for moving files in GUI file managers, reordering items, resizing elements, or canvas interactions.',
|
|
285
|
+
inputSchema: z.object({
|
|
286
|
+
fromX: z.number().int(),
|
|
287
|
+
fromY: z.number().int(),
|
|
288
|
+
toX: z.number().int(),
|
|
289
|
+
toY: z.number().int(),
|
|
290
|
+
duration: z.number().min(0.1).max(5).optional().default(0.5).describe('Drag duration in seconds.'),
|
|
291
|
+
button: z.enum(['left', 'right', 'middle']).optional().default('left'),
|
|
292
|
+
}),
|
|
293
|
+
execute: async ({ fromX, fromY, toX, toY, duration, button }) => {
|
|
294
|
+
const approved = await confirmAction('Drag and drop', [`From (${fromX}, ${fromY}) → (${toX}, ${toY})`]);
|
|
295
|
+
if (!approved)
|
|
296
|
+
throw new Error('Blocked drag action.');
|
|
297
|
+
emitProgress({ type: 'tool:start', label: 'Dragging', detail: `(${fromX},${fromY}) → (${toX},${toY})` });
|
|
298
|
+
const script = `
|
|
299
|
+
import pyautogui
|
|
300
|
+
pyautogui.FAILSAFE = True
|
|
301
|
+
pyautogui.dragTo(${toX}, ${toY}, duration=${duration}, startX=${fromX}, startY=${fromY}, button='${button}')
|
|
302
|
+
print("done")
|
|
303
|
+
`.trim();
|
|
304
|
+
const out = await runPython(script);
|
|
305
|
+
emitProgress({ type: 'tool:end', label: 'Drag complete' });
|
|
306
|
+
return { fromX, fromY, toX, toY, result: out.trim() };
|
|
307
|
+
},
|
|
308
|
+
}),
|
|
309
|
+
};
|
|
310
|
+
// ─── 7. Install computer-use dependencies ────────────────────────────────────
|
|
311
|
+
export const computerUseInstallTool = {
|
|
312
|
+
installComputerUseDeps: tool({
|
|
313
|
+
description: 'Install PyAutoGUI, pygetwindow, and platform dependencies needed for all computer-use tools. Run once before using any other computer-use tool.',
|
|
314
|
+
inputSchema: z.object({}),
|
|
315
|
+
execute: async () => {
|
|
316
|
+
const approved = await confirmAction('Install computer-use dependencies', [
|
|
317
|
+
'pip install pyautogui pygetwindow pillow',
|
|
318
|
+
IS_WIN ? 'No extra system deps needed on Windows' : '',
|
|
319
|
+
IS_MAC ? 'May prompt for Accessibility permissions in System Preferences' : '',
|
|
320
|
+
!IS_WIN && !IS_MAC ? 'apt-get install python3-tk python3-xlib scrot (for Linux)' : '',
|
|
321
|
+
].filter(Boolean));
|
|
322
|
+
if (!approved)
|
|
323
|
+
throw new Error('Blocked dependency install.');
|
|
324
|
+
emitProgress({ type: 'tool:start', label: 'Installing computer-use dependencies' });
|
|
325
|
+
const pip = IS_WIN ? 'pip' : 'pip3';
|
|
326
|
+
const results = {};
|
|
327
|
+
try {
|
|
328
|
+
results['pyautogui+pygetwindow'] = await run(pip, ['install', '--upgrade', 'pyautogui', 'pygetwindow', 'pillow'], 120_000);
|
|
329
|
+
}
|
|
330
|
+
catch (e) {
|
|
331
|
+
results['pyautogui'] = String(e);
|
|
332
|
+
}
|
|
333
|
+
if (!IS_WIN && !IS_MAC) {
|
|
334
|
+
try {
|
|
335
|
+
results['system'] = await run('sudo', ['apt-get', 'install', '-y', 'python3-tk', 'python3-xlib', 'scrot'], 120_000);
|
|
336
|
+
}
|
|
337
|
+
catch (e) {
|
|
338
|
+
results['system'] = String(e);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
emitProgress({ type: 'tool:end', label: 'Dependencies installed' });
|
|
342
|
+
return { platform: process.platform, results };
|
|
343
|
+
},
|
|
344
|
+
}),
|
|
345
|
+
};
|
|
346
|
+
// ─── Barrel export ────────────────────────────────────────────────────────────
|
|
347
|
+
export const computerUseTools = {
|
|
348
|
+
...computerUseInstallTool,
|
|
349
|
+
...mouseTool,
|
|
350
|
+
...keyboardTool,
|
|
351
|
+
...screenReadTool,
|
|
352
|
+
...windowTool,
|
|
353
|
+
...findElementTool,
|
|
354
|
+
...dragTool,
|
|
355
|
+
};
|
|
356
|
+
//# sourceMappingURL=computer-use.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computer-use.tool.js","sourceRoot":"","sources":["../../src/tools/computer-use.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAY,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAE1D,iFAAiF;AAEjF,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,OAAiB,EAAE,SAAgC,OAAO;IACrG,OAAO,mBAAmB,CAAC;QACzB,WAAW,EAAE,SAAS;QACtB,QAAQ,EAAE,cAAc;QACxB,MAAM;QACN,MAAM;QACN,WAAW,EAAE,CAAC,sBAAsB,CAAC;QACrC,OAAO;QACP,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAY;IACnC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,EAAE,KAAK,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAExE,KAAK,UAAU,aAAa,CAAC,GAAW;IACtC,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7F,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC3B,CAAC;AAED,SAAS,GAAG,CAAC,OAAe,EAAE,IAAc,EAAE,SAAS,GAAG,MAAM;IAC9D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5G,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACpH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AACjF,gFAAgF;AAChF,mDAAmD;AAEnD,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,SAAS,GAAG,MAAM;IACzD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACzC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW,EAAE,IAAI,CAAC;QAChB,WAAW,EACT,8KAA8K;QAChL,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YACxE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;YAC/E,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;YAC/E,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YAC/G,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YACxG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;SACnH,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC3E,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE;gBACnD,WAAW,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG;gBACnC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,eAAe,MAAM,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;aACzE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAExD,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YAEvF,MAAM,MAAM,GAAG;;;;;;EAMnB,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,cAAc,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE;EAC7E,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,cAAc,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE;EAC7E,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,cAAc,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE;EACzF,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,CAAC,cAAc,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE;EACvF,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,uBAAuB,eAAe,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;;CAExJ,CAAC,IAAI,EAAE,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;YACpC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,MAAM,WAAW,EAAE,CAAC,CAAC;YACtE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9C,CAAC;KACF,CAAC;CACH,CAAC;AAEF,gFAAgF;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,cAAc,EAAE,IAAI,CAAC;QACnB,WAAW,EACT,wKAAwK;QAC1K,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACvE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uGAAuG,CAAC;YAC5I,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;YAClH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,wDAAwD,CAAC;SAC/H,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;YACzD,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACpF,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACpF,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAE1G,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,iBAAiB,EAAE;gBACtD,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,IAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE;gBACvF,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE;gBAC7C,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,MAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;aAC1D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAE3D,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,MAAM,EAAE,EAAE,CAAC,CAAC;YAElE,oEAAoE;YACpE,MAAM,WAAW,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAE7E,MAAM,MAAM,GAAG;;;;;EAKnB,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,wBAAwB,WAAW,eAAe,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE;EACtF,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE;EACrD,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,MAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;;CAE1F,CAAC,IAAI,EAAE,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;YACpC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,MAAM,WAAW,EAAE,CAAC,CAAC;YACzE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACxC,CAAC;KACF,CAAC;CACH,CAAC;AAEF,iFAAiF;AAEjF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU,EAAE,IAAI,CAAC;QACf,WAAW,EACT,4NAA4N;QAC9N,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC;iBACN,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;iBAC/E,QAAQ,EAAE;iBACV,QAAQ,CAAC,sDAAsD,CAAC;SACpE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5B,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,CAAC,0CAA0C,CAAC,EAAE,WAAW,CAAC,CAAC;YAC/G,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAEvD,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAE9D,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;YAErD,MAAM,SAAS,GAAG,MAAM;gBACtB,CAAC,CAAC,WAAW,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,GAAG;gBACxE,CAAC,CAAC,EAAE,CAAC;YAEP,MAAM,MAAM,GAAG;;6BAEQ,SAAS;YAC1B,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;;CAEzC,CAAC,IAAI,EAAE,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEjD,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9E,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpD,CAAC;KACF,CAAC;CACH,CAAC;AAEF,gFAAgF;AAEhF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,YAAY,EAAE,IAAI,CAAC;QACjB,WAAW,EACT,uJAAuJ;QACzJ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC5E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;YAC5G,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YACvE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YACvE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SACzE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YACxD,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAEnG,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,mBAAmB,EAAE;gBACxD,WAAW,MAAM,EAAE;gBACnB,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,GAAG,CAAC,CAAC,CAAC,qBAAqB;aACrD,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAEzD,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;YAErF,MAAM,MAAM,GAAG;;;;EAInB,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;;;CAGrB,CAAC,CAAC,CAAC,EAAE;EACJ,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;iCACW,KAAK;;oDAEc,KAAK;;;MAGnD,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;MACxC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;MAC3C,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;MAC3C,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;MACrC,MAAM,KAAK,QAAQ,IAAI,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,cAAc,KAAK,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;MAC/E,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;qDACxC,MAAM;CAC1D,CAAC,CAAC,CAAC,EAAE;CACL,CAAC,IAAI,EAAE,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,MAAM,WAAW,EAAE,CAAC,CAAC;gBACvE,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC;KACF,CAAC;CACH,CAAC;AAEF,gFAAgF;AAEhF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY,EAAE,IAAI,CAAC;QACjB,WAAW,EACT,2MAA2M;QAC7M,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YAC5F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YAC9H,MAAM,EAAE,CAAC;iBACN,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;iBAC/E,QAAQ,EAAE;iBACV,QAAQ,CAAC,oDAAoD,CAAC;SAClE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5D,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,kBAAkB,EAAE,CAAC,CAAC;YAEzG,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,2BAA2B,EAAE;gBAChE,oBAAoB,kBAAkB,EAAE;gBACxC,eAAe,UAAU,EAAE;aAC5B,EAAE,WAAW,CAAC,CAAC;YAChB,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAExD,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAE1E,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAEvG,MAAM,MAAM,GAAG;;;;;sCAKiB,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,iBAAiB,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE;;;;;;;;CAQ7I,CAAC,IAAI,EAAE,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACtC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC;YAC9H,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;CACH,CAAC;AAEF,gFAAgF;AAEhF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,WAAW,EAAE,IAAI,CAAC;QAChB,WAAW,EAAE,6JAA6J;QAC1K,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;YACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;YACvB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;YACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAClG,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACvE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;YAC9D,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,eAAe,EAAE,CAAC,SAAS,KAAK,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;YACxG,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAEvD,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,KAAK,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;YAEzG,MAAM,MAAM,GAAG;;;mBAGF,GAAG,KAAK,GAAG,cAAc,QAAQ,YAAY,KAAK,YAAY,KAAK,aAAa,MAAM;;CAExG,CAAC,IAAI,EAAE,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;YACpC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;YAC3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACxD,CAAC;KACF,CAAC;CACH,CAAC;AAEF,gFAAgF;AAEhF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,sBAAsB,EAAE,IAAI,CAAC;QAC3B,WAAW,EACT,iJAAiJ;QACnJ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,mCAAmC,EAAE;gBACxE,0CAA0C;gBAC1C,MAAM,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,EAAE;gBACtD,MAAM,CAAC,CAAC,CAAC,gEAAgE,CAAC,CAAC,CAAC,EAAE;gBAC9E,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,2DAA2D,CAAC,CAAC,CAAC,EAAE;aACtF,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAE9D,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC,CAAC;YACpF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YACpC,MAAM,OAAO,GAA2B,EAAE,CAAC;YAE3C,IAAI,CAAC;gBACH,OAAO,CAAC,uBAAuB,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7H,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAEjD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;gBACtH,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC;YAChD,CAAC;YAED,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;YACpE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QACjD,CAAC;KACF,CAAC;CACH,CAAC;AAEF,iFAAiF;AAEjF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,GAAG,sBAAsB;IACzB,GAAG,SAAS;IACZ,GAAG,YAAY;IACf,GAAG,cAAc;IACjB,GAAG,UAAU;IACb,GAAG,eAAe;IAClB,GAAG,QAAQ;CACZ,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { type TriggerRoutingPolicy } from '../jobs/trigger-policies.js';
|
|
2
|
+
export declare const orchestrationTools: {
|
|
3
|
+
listTriggerPolicies: import("ai").Tool<Record<string, never>, TriggerRoutingPolicy[]>;
|
|
4
|
+
getTriggerPolicy: import("ai").Tool<Record<string, never>, TriggerRoutingPolicy>;
|
|
5
|
+
saveTriggerPolicy: import("ai").Tool<{
|
|
6
|
+
policy: {
|
|
7
|
+
name: string;
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
vipSenders: string[];
|
|
10
|
+
urgentKeywords: string[];
|
|
11
|
+
lowPriorityKeywords: string[];
|
|
12
|
+
customInstructions: string;
|
|
13
|
+
id?: string | undefined;
|
|
14
|
+
};
|
|
15
|
+
}, {
|
|
16
|
+
updatedAt: string;
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
vipSenders: string[];
|
|
21
|
+
urgentKeywords: string[];
|
|
22
|
+
lowPriorityKeywords: string[];
|
|
23
|
+
customInstructions: string;
|
|
24
|
+
routes: Partial<Record<import("../jobs/trigger-orchestrator.js").TriggerRoute, import("../jobs/trigger-policies.js").RoutePolicy>>;
|
|
25
|
+
createdAt: string;
|
|
26
|
+
}>;
|
|
27
|
+
proposeTriggerOrchestration: import("ai").Tool<{
|
|
28
|
+
triggerSlug: string;
|
|
29
|
+
toolkitSlug: string;
|
|
30
|
+
payload?: Record<string, unknown> | undefined;
|
|
31
|
+
}, {
|
|
32
|
+
proposal: string;
|
|
33
|
+
plan: {
|
|
34
|
+
chainId: string;
|
|
35
|
+
priority: import("../jobs/trigger-orchestrator.js").TriggerPriority;
|
|
36
|
+
route: import("../jobs/trigger-orchestrator.js").TriggerRoute;
|
|
37
|
+
category: string;
|
|
38
|
+
followUpCount: number;
|
|
39
|
+
followUps: import("../jobs/trigger-orchestrator.js").TriggerFollowUp[];
|
|
40
|
+
};
|
|
41
|
+
}>;
|
|
42
|
+
applyTriggerOrchestration: import("ai").Tool<{
|
|
43
|
+
triggerSlug: string;
|
|
44
|
+
toolkitSlug: string;
|
|
45
|
+
payload?: Record<string, unknown> | undefined;
|
|
46
|
+
triggerId?: string | undefined;
|
|
47
|
+
userId?: string | undefined;
|
|
48
|
+
dryRun?: boolean | undefined;
|
|
49
|
+
}, {
|
|
50
|
+
dryRun: boolean;
|
|
51
|
+
proposal: string;
|
|
52
|
+
plan: import("../jobs/trigger-orchestrator.js").TriggerOrchestrationPlan;
|
|
53
|
+
applied?: never;
|
|
54
|
+
blocked?: never;
|
|
55
|
+
message?: never;
|
|
56
|
+
jobs?: never;
|
|
57
|
+
report?: never;
|
|
58
|
+
} | {
|
|
59
|
+
applied: boolean;
|
|
60
|
+
blocked: boolean;
|
|
61
|
+
proposal: string;
|
|
62
|
+
message: string;
|
|
63
|
+
dryRun?: never;
|
|
64
|
+
plan?: never;
|
|
65
|
+
jobs?: never;
|
|
66
|
+
report?: never;
|
|
67
|
+
} | {
|
|
68
|
+
applied: boolean;
|
|
69
|
+
proposal: string;
|
|
70
|
+
jobs: {
|
|
71
|
+
id: string;
|
|
72
|
+
status: import("../server.js").JobStatus;
|
|
73
|
+
schedule: string | undefined;
|
|
74
|
+
role: unknown;
|
|
75
|
+
}[];
|
|
76
|
+
report: string;
|
|
77
|
+
dryRun?: never;
|
|
78
|
+
plan?: never;
|
|
79
|
+
blocked?: never;
|
|
80
|
+
message?: never;
|
|
81
|
+
}>;
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=orchestration.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestration.tool.d.ts","sourceRoot":"","sources":["../../src/tools/orchestration.tool.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkE,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAKxI,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyJ9B,CAAC"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { buildOrchestrationPlanWithRouting, formatOrchestrationProposal } from '../jobs/trigger-router.js';
|
|
4
|
+
import { getActiveTriggerPolicy, listTriggerPolicies, saveTriggerPolicy } from '../jobs/trigger-policies.js';
|
|
5
|
+
import { orchestrateComposioTrigger } from '../jobs/trigger-orchestrator.js';
|
|
6
|
+
import { requestConfirmation } from '../runtime/confirm.js';
|
|
7
|
+
import { emitProgress } from '../runtime/progress.js';
|
|
8
|
+
export const orchestrationTools = {
|
|
9
|
+
listTriggerPolicies: tool({
|
|
10
|
+
description: 'List saved trigger routing policies (VIP senders, urgency keywords, auto-approve rules).',
|
|
11
|
+
inputSchema: z.object({}),
|
|
12
|
+
execute: async () => listTriggerPolicies(),
|
|
13
|
+
}),
|
|
14
|
+
getTriggerPolicy: tool({
|
|
15
|
+
description: 'Get the active trigger routing policy.',
|
|
16
|
+
inputSchema: z.object({}),
|
|
17
|
+
execute: async () => getActiveTriggerPolicy(),
|
|
18
|
+
}),
|
|
19
|
+
saveTriggerPolicy: tool({
|
|
20
|
+
description: 'Save or update a trigger routing policy. Requires user confirmation.',
|
|
21
|
+
inputSchema: z.object({
|
|
22
|
+
policy: z.object({
|
|
23
|
+
id: z.string().optional(),
|
|
24
|
+
name: z.string().min(1),
|
|
25
|
+
enabled: z.boolean().optional().default(true),
|
|
26
|
+
vipSenders: z.array(z.string()).optional().default([]),
|
|
27
|
+
urgentKeywords: z.array(z.string()).optional().default([]),
|
|
28
|
+
lowPriorityKeywords: z.array(z.string()).optional().default([]),
|
|
29
|
+
customInstructions: z.string().optional().default(''),
|
|
30
|
+
}),
|
|
31
|
+
}),
|
|
32
|
+
execute: async ({ policy }) => {
|
|
33
|
+
const approved = await requestConfirmation({
|
|
34
|
+
toolkitSlug: 'ZILMATE',
|
|
35
|
+
toolSlug: 'TRIGGER_POLICY',
|
|
36
|
+
action: `Save trigger policy "${policy.name}"`,
|
|
37
|
+
access: 'Write',
|
|
38
|
+
targetTools: ['TRIGGER_POLICY'],
|
|
39
|
+
details: [
|
|
40
|
+
`VIP senders: ${policy.vipSenders?.join(', ') || 'none'}`,
|
|
41
|
+
`Urgent keywords: ${policy.urgentKeywords?.join(', ') || 'none'}`,
|
|
42
|
+
policy.customInstructions ? `Instructions: ${policy.customInstructions.slice(0, 120)}` : '',
|
|
43
|
+
].filter(Boolean),
|
|
44
|
+
summary: policy.name,
|
|
45
|
+
});
|
|
46
|
+
if (!approved)
|
|
47
|
+
throw new Error('Policy save blocked by user.');
|
|
48
|
+
const existing = await getActiveTriggerPolicy();
|
|
49
|
+
const saved = await saveTriggerPolicy({
|
|
50
|
+
...existing,
|
|
51
|
+
...policy,
|
|
52
|
+
id: policy.id || existing.id,
|
|
53
|
+
routes: existing.routes,
|
|
54
|
+
createdAt: existing.createdAt,
|
|
55
|
+
updatedAt: new Date().toISOString(),
|
|
56
|
+
});
|
|
57
|
+
return saved;
|
|
58
|
+
},
|
|
59
|
+
}),
|
|
60
|
+
proposeTriggerOrchestration: tool({
|
|
61
|
+
description: 'Preview how a trigger would be classified and which jobs/chains would be created. Does not create jobs.',
|
|
62
|
+
inputSchema: z.object({
|
|
63
|
+
triggerSlug: z.string().min(1),
|
|
64
|
+
toolkitSlug: z.string().min(1),
|
|
65
|
+
payload: z.record(z.string(), z.unknown()).optional(),
|
|
66
|
+
}),
|
|
67
|
+
execute: async ({ triggerSlug, toolkitSlug, payload }) => {
|
|
68
|
+
const event = {
|
|
69
|
+
id: 'preview',
|
|
70
|
+
triggerSlug,
|
|
71
|
+
toolkitSlug,
|
|
72
|
+
payload: payload ?? {},
|
|
73
|
+
};
|
|
74
|
+
const plan = await buildOrchestrationPlanWithRouting(event);
|
|
75
|
+
return {
|
|
76
|
+
proposal: formatOrchestrationProposal(plan),
|
|
77
|
+
plan: {
|
|
78
|
+
chainId: plan.chainId,
|
|
79
|
+
priority: plan.priority,
|
|
80
|
+
route: plan.route,
|
|
81
|
+
category: plan.category,
|
|
82
|
+
followUpCount: plan.followUps.length,
|
|
83
|
+
followUps: plan.followUps,
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
}),
|
|
88
|
+
applyTriggerOrchestration: tool({
|
|
89
|
+
description: 'Create jobs from a real or simulated trigger event after showing the user what will happen. Ask for approval when follow-ups are included.',
|
|
90
|
+
inputSchema: z.object({
|
|
91
|
+
triggerSlug: z.string().min(1),
|
|
92
|
+
toolkitSlug: z.string().min(1),
|
|
93
|
+
payload: z.record(z.string(), z.unknown()).optional(),
|
|
94
|
+
triggerId: z.string().optional(),
|
|
95
|
+
userId: z.string().optional(),
|
|
96
|
+
dryRun: z.boolean().optional(),
|
|
97
|
+
}),
|
|
98
|
+
execute: async ({ triggerSlug, toolkitSlug, payload, triggerId, userId, dryRun }) => {
|
|
99
|
+
const event = {
|
|
100
|
+
id: triggerId || `manual-${Date.now()}`,
|
|
101
|
+
triggerSlug,
|
|
102
|
+
toolkitSlug,
|
|
103
|
+
userId,
|
|
104
|
+
payload: payload ?? {},
|
|
105
|
+
};
|
|
106
|
+
emitProgress({ type: 'thinking', label: 'Planning trigger orchestration' });
|
|
107
|
+
const plan = await buildOrchestrationPlanWithRouting(event);
|
|
108
|
+
const proposal = formatOrchestrationProposal(plan);
|
|
109
|
+
const policy = await getActiveTriggerPolicy();
|
|
110
|
+
const routePolicy = policy.routes[plan.route];
|
|
111
|
+
if (dryRun) {
|
|
112
|
+
return { dryRun: true, proposal, plan };
|
|
113
|
+
}
|
|
114
|
+
const needsPrimaryConfirm = routePolicy && !routePolicy.autoApprovePrimary;
|
|
115
|
+
const needsFollowUpConfirm = plan.followUps.length > 0 && routePolicy && !routePolicy.autoApproveFollowUps;
|
|
116
|
+
if (needsPrimaryConfirm || needsFollowUpConfirm) {
|
|
117
|
+
const approved = await requestConfirmation({
|
|
118
|
+
toolkitSlug: 'ZILMATE',
|
|
119
|
+
toolSlug: 'TRIGGER_ORCHESTRATION',
|
|
120
|
+
action: needsFollowUpConfirm ? 'Create trigger job chain' : 'Create trigger primary job',
|
|
121
|
+
access: 'Write',
|
|
122
|
+
targetTools: ['TRIGGER_ORCHESTRATION'],
|
|
123
|
+
details: proposal.split('\n').slice(0, 12),
|
|
124
|
+
summary: `${plan.priority} ${plan.route} chain with ${plan.followUps.length} follow-up(s)`,
|
|
125
|
+
});
|
|
126
|
+
if (!approved) {
|
|
127
|
+
return {
|
|
128
|
+
applied: false,
|
|
129
|
+
blocked: true,
|
|
130
|
+
proposal,
|
|
131
|
+
message: 'User declined orchestration. Nothing was queued.',
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const jobs = await orchestrateComposioTrigger(event, { plan, includeFollowUps: true });
|
|
136
|
+
return {
|
|
137
|
+
applied: true,
|
|
138
|
+
proposal,
|
|
139
|
+
jobs: jobs.map((job) => ({
|
|
140
|
+
id: job.id,
|
|
141
|
+
status: job.status,
|
|
142
|
+
schedule: job.schedule,
|
|
143
|
+
role: job.metadata.orchestrationRole,
|
|
144
|
+
})),
|
|
145
|
+
report: [
|
|
146
|
+
`Queued ${jobs.length} job(s) for ${triggerSlug}.`,
|
|
147
|
+
`Route: ${plan.route}, priority: ${plan.priority}.`,
|
|
148
|
+
jobs.length > 1 ? `Follow-ups: ${jobs.length - 1} scheduled.` : 'No follow-ups.',
|
|
149
|
+
].join(' '),
|
|
150
|
+
};
|
|
151
|
+
},
|
|
152
|
+
}),
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=orchestration.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestration.tool.js","sourceRoot":"","sources":["../../src/tools/orchestration.tool.ts"],"names":[],"mappings":"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"}
|