ft-scout 9.0.1 → 9.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/.firebase/hosting.d2Vi.cache +7 -7
  2. package/README.md +93 -13
  3. package/bin/src/commands/agent.d.ts.map +1 -1
  4. package/bin/src/commands/agent.js +46 -3
  5. package/bin/src/commands/agent.js.map +1 -1
  6. package/bin/src/engine/actionVerifier.d.ts.map +1 -0
  7. package/bin/src/engine/actionVerifier.js +223 -0
  8. package/bin/src/engine/actionVerifier.js.map +1 -0
  9. package/bin/src/engine/agentEngine.d.ts.map +1 -1
  10. package/bin/src/engine/agentEngine.js +237 -1
  11. package/bin/src/engine/agentEngine.js.map +1 -1
  12. package/bin/src/engine/agentState.d.ts.map +1 -0
  13. package/bin/src/engine/agentState.js +445 -0
  14. package/bin/src/engine/agentState.js.map +1 -0
  15. package/bin/src/engine/appControl.d.ts.map +1 -1
  16. package/bin/src/engine/appControl.js +165 -59
  17. package/bin/src/engine/appControl.js.map +1 -1
  18. package/bin/src/engine/browser/browserController.d.ts.map +1 -0
  19. package/bin/src/engine/browser/browserController.js +689 -0
  20. package/bin/src/engine/browser/browserController.js.map +1 -0
  21. package/bin/src/engine/browser/index.d.ts.map +1 -0
  22. package/bin/src/engine/browser/index.js +2 -0
  23. package/bin/src/engine/browser/index.js.map +1 -0
  24. package/bin/src/engine/computer/computerController.d.ts.map +1 -0
  25. package/bin/src/engine/computer/computerController.js +295 -0
  26. package/bin/src/engine/computer/computerController.js.map +1 -0
  27. package/bin/src/engine/computer/index.d.ts.map +1 -0
  28. package/bin/src/engine/computer/index.js +2 -0
  29. package/bin/src/engine/computer/index.js.map +1 -0
  30. package/bin/src/engine/liveScreenEngine.js +2 -2
  31. package/bin/src/engine/liveScreenEngine.js.map +1 -1
  32. package/bin/src/engine/planner.d.ts.map +1 -0
  33. package/bin/src/engine/planner.js +242 -0
  34. package/bin/src/engine/planner.js.map +1 -0
  35. package/bin/src/engine/safety.d.ts.map +1 -0
  36. package/bin/src/engine/safety.js +281 -0
  37. package/bin/src/engine/safety.js.map +1 -0
  38. package/bin/src/engine/toolRegistry.d.ts.map +1 -0
  39. package/bin/src/engine/toolRegistry.js +218 -0
  40. package/bin/src/engine/toolRegistry.js.map +1 -0
  41. package/bin/src/index.js +6 -4
  42. package/bin/src/index.js.map +1 -1
  43. package/bin/src/server/server.d.ts.map +1 -1
  44. package/bin/src/server/server.js +116 -0
  45. package/bin/src/server/server.js.map +1 -1
  46. package/bin/src/utils/branding.js +1 -1
  47. package/downloads/INVOICE_2026_ACME.pdf +1 -0
  48. package/package.json +1 -1
  49. package/web/app.js +277 -46
  50. package/web/styles.css +79 -2
@@ -0,0 +1,242 @@
1
+ import {} from './agentState.js';
2
+ export class TaskPlanner {
3
+ createPlan(objective, contextFiles) {
4
+ const objLower = objective.toLowerCase();
5
+ const steps = [];
6
+ // 1. Check if objective is a complex multi-step research or download workflow
7
+ const isEmailInvoiceWorkflow = objLower.includes('gmail') || (objLower.includes('email') && objLower.includes('invoice'));
8
+ const isCompetitorResearch = objLower.includes('research') && (objLower.includes('competitor') || objLower.includes('startups') || objLower.includes('companies'));
9
+ const isFileMoveWorkflow = (objLower.includes('download') || objLower.includes('find')) && (objLower.includes('move') || objLower.includes('rename') || objLower.includes('documents'));
10
+ const isMultiAppSpreadsheet = objLower.includes('spreadsheet') || objLower.includes('excel') || objLower.includes('table') || objLower.includes('csv');
11
+ if (isEmailInvoiceWorkflow) {
12
+ steps.push({
13
+ id: 1,
14
+ description: 'Open browser and navigate to Gmail inbox',
15
+ category: 'browser',
16
+ status: 'pending',
17
+ canParallelize: false,
18
+ });
19
+ steps.push({
20
+ id: 2,
21
+ description: 'Inspect inbox and find latest invoice email',
22
+ category: 'browser',
23
+ status: 'pending',
24
+ dependencies: [1],
25
+ canParallelize: false,
26
+ });
27
+ steps.push({
28
+ id: 3,
29
+ description: 'Open target email and locate invoice attachment',
30
+ category: 'browser',
31
+ status: 'pending',
32
+ dependencies: [2],
33
+ canParallelize: false,
34
+ });
35
+ steps.push({
36
+ id: 4,
37
+ description: 'Download invoice file and verify download integrity on disk',
38
+ category: 'browser',
39
+ status: 'pending',
40
+ dependencies: [3],
41
+ canParallelize: false,
42
+ });
43
+ steps.push({
44
+ id: 5,
45
+ description: 'Organize/move downloaded invoice into designated destination folder',
46
+ category: 'file',
47
+ status: 'pending',
48
+ dependencies: [4],
49
+ canParallelize: false,
50
+ });
51
+ steps.push({
52
+ id: 6,
53
+ description: 'Verify final file destination and report task completion',
54
+ category: 'general',
55
+ status: 'pending',
56
+ dependencies: [5],
57
+ canParallelize: false,
58
+ });
59
+ }
60
+ else if (isCompetitorResearch && isMultiAppSpreadsheet) {
61
+ steps.push({
62
+ id: 1,
63
+ description: 'Navigate to target website and inspect market overview',
64
+ category: 'browser',
65
+ status: 'pending',
66
+ canParallelize: false,
67
+ });
68
+ steps.push({
69
+ id: 2,
70
+ description: 'Extract company details (valuation, employees, products)',
71
+ category: 'browser',
72
+ status: 'pending',
73
+ dependencies: [1],
74
+ canParallelize: false,
75
+ });
76
+ steps.push({
77
+ id: 3,
78
+ description: 'Format extracted research metrics into spreadsheet dataset',
79
+ category: 'file',
80
+ status: 'pending',
81
+ dependencies: [2],
82
+ canParallelize: false,
83
+ });
84
+ steps.push({
85
+ id: 4,
86
+ description: 'Write/update spreadsheet file and verify output integrity',
87
+ category: 'file',
88
+ status: 'pending',
89
+ dependencies: [3],
90
+ canParallelize: false,
91
+ });
92
+ steps.push({
93
+ id: 5,
94
+ description: 'Compile teardown summary report for user',
95
+ category: 'general',
96
+ status: 'pending',
97
+ dependencies: [4],
98
+ canParallelize: false,
99
+ });
100
+ }
101
+ else if (isCompetitorResearch) {
102
+ steps.push({
103
+ id: 1,
104
+ description: 'Query company website or search index',
105
+ category: 'browser',
106
+ status: 'pending',
107
+ canParallelize: true,
108
+ });
109
+ steps.push({
110
+ id: 2,
111
+ description: 'Extract core products, team, and recent updates',
112
+ category: 'browser',
113
+ status: 'pending',
114
+ dependencies: [1],
115
+ canParallelize: true,
116
+ });
117
+ steps.push({
118
+ id: 3,
119
+ description: 'Synthesize competitive analysis summary',
120
+ category: 'general',
121
+ status: 'pending',
122
+ dependencies: [2],
123
+ canParallelize: false,
124
+ });
125
+ }
126
+ else if (isFileMoveWorkflow) {
127
+ steps.push({
128
+ id: 1,
129
+ description: 'Locate target downloaded file in workspace or downloads',
130
+ category: 'file',
131
+ status: 'pending',
132
+ canParallelize: false,
133
+ });
134
+ steps.push({
135
+ id: 2,
136
+ description: 'Rename or move file to designated destination directory',
137
+ category: 'file',
138
+ status: 'pending',
139
+ dependencies: [1],
140
+ canParallelize: false,
141
+ });
142
+ steps.push({
143
+ id: 3,
144
+ description: 'Verify file exists at new path with correct size and attributes',
145
+ category: 'file',
146
+ status: 'pending',
147
+ dependencies: [2],
148
+ canParallelize: false,
149
+ });
150
+ }
151
+ else {
152
+ // General autonomous plan
153
+ steps.push({
154
+ id: 1,
155
+ description: 'Understand objective and explore relevant workspace context',
156
+ category: 'api',
157
+ status: 'pending',
158
+ canParallelize: false,
159
+ });
160
+ steps.push({
161
+ id: 2,
162
+ description: 'Execute required actions across tools, browser, or desktop',
163
+ category: 'general',
164
+ status: 'pending',
165
+ dependencies: [1],
166
+ canParallelize: false,
167
+ });
168
+ steps.push({
169
+ id: 3,
170
+ description: 'Verify execution state changes and compile final completion summary',
171
+ category: 'general',
172
+ status: 'pending',
173
+ dependencies: [2],
174
+ canParallelize: false,
175
+ });
176
+ }
177
+ const parallelGroups = this.computeParallelGroups(steps);
178
+ const planResult = Object.assign([...steps], {
179
+ objective,
180
+ steps,
181
+ estimatedTotalSteps: steps.length,
182
+ canRunConcurrently: parallelGroups.some((g) => g.length > 1),
183
+ parallelGroups,
184
+ });
185
+ return planResult;
186
+ }
187
+ computeParallelGroups(steps) {
188
+ const groups = [];
189
+ const completed = new Set();
190
+ const remaining = [...steps];
191
+ while (remaining.length > 0) {
192
+ const ready = remaining.filter((s) => {
193
+ if (!s.dependencies || s.dependencies.length === 0)
194
+ return true;
195
+ return s.dependencies.every((d) => completed.has(d));
196
+ });
197
+ if (ready.length === 0) {
198
+ // Fallback for circular dependency: take next available
199
+ const next = remaining.shift();
200
+ groups.push([next.id]);
201
+ completed.add(next.id);
202
+ continue;
203
+ }
204
+ const parallelable = ready.filter((s) => s.canParallelize);
205
+ if (parallelable.length > 1) {
206
+ groups.push(parallelable.map((s) => s.id));
207
+ parallelable.forEach((s) => {
208
+ completed.add(s.id);
209
+ const idx = remaining.findIndex((r) => r.id === s.id);
210
+ if (idx !== -1)
211
+ remaining.splice(idx, 1);
212
+ });
213
+ }
214
+ else {
215
+ const single = ready[0];
216
+ groups.push([single.id]);
217
+ completed.add(single.id);
218
+ const idx = remaining.findIndex((r) => r.id === single.id);
219
+ if (idx !== -1)
220
+ remaining.splice(idx, 1);
221
+ }
222
+ }
223
+ return groups;
224
+ }
225
+ getParallelExecutableGroups(stepsOrPlan) {
226
+ const steps = Array.isArray(stepsOrPlan) ? stepsOrPlan : (stepsOrPlan?.steps || []);
227
+ return this.computeParallelGroups(steps);
228
+ }
229
+ refinePlanOnRecovery(currentSteps, failingStepId, alternativeDescription) {
230
+ return currentSteps.map((s) => {
231
+ if (s.id === failingStepId) {
232
+ return {
233
+ ...s,
234
+ status: 'pending',
235
+ description: `${s.description} (Alternative approach: ${alternativeDescription})`,
236
+ };
237
+ }
238
+ return s;
239
+ });
240
+ }
241
+ }
242
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["safety.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,281 @@
1
+ import chalk from 'chalk';
2
+ import { confirm, isCancel } from '@clack/prompts';
3
+ export class RiskClassifier {
4
+ sensitiveKeywords = [
5
+ 'password', 'secret', 'token', 'apikey', 'credential',
6
+ 'credit_card', 'card_number', 'cvv', 'pay', 'purchase',
7
+ 'checkout', 'transfer', 'wire', 'invoice_pay', 'buy'
8
+ ];
9
+ destructiveCommands = [
10
+ /\brm\s+-rf\b/i,
11
+ /\bformat\b/i,
12
+ /\bdrop\s+table\b/i,
13
+ /\bdrop\s+database\b/i,
14
+ /\btruncate\b/i,
15
+ /\bdel\s+\/f\s+\/s\s+\/q\b/i,
16
+ /\bRemove-Item\s+.*-Recurse\s+-Force\b/i,
17
+ /\bgit\s+reset\s+--hard\b/i,
18
+ /\bgit\s+clean\s+-fdx\b/i,
19
+ ];
20
+ assessAction(tool, args = {}) {
21
+ const toolLower = (tool || '').toLowerCase().trim();
22
+ // 1. Critical / High Risk: External messaging, emails, financial transactions
23
+ if (toolLower === 'app_action') {
24
+ const act = String(args.action || '').toLowerCase();
25
+ if (['send_mail', 'send_dm', 'submit_form'].includes(act)) {
26
+ return {
27
+ level: 'high',
28
+ requiresApproval: true,
29
+ reason: `Action "${act}" sends external communication or submits form data to a third-party service.`,
30
+ };
31
+ }
32
+ if (act === 'takeover' || act === 'takeover_screen') {
33
+ return {
34
+ level: 'medium',
35
+ requiresApproval: false,
36
+ reason: `Taking over display/mouse cursor for local application interaction.`,
37
+ };
38
+ }
39
+ }
40
+ // 2. High Risk: Shell commands with destructive potential or external push
41
+ if (toolLower === 'run_command') {
42
+ const cmd = String(args.command || args.cmd || '');
43
+ for (const pattern of this.destructiveCommands) {
44
+ if (pattern.test(cmd)) {
45
+ return {
46
+ level: 'critical',
47
+ requiresApproval: true,
48
+ reason: `Command "${cmd}" contains potentially irreversible file deletion or destructive flags.`,
49
+ };
50
+ }
51
+ }
52
+ if (/\b(?:curl|wget|invoke-webrequest)\b.*\b(?:sh|bash|powershell|iex)\b/i.test(cmd)) {
53
+ return {
54
+ level: 'high',
55
+ requiresApproval: true,
56
+ reason: `Command downloads and directly executes remote shell scripts.`,
57
+ };
58
+ }
59
+ if (/\bgit\s+push\b/i.test(cmd) || /\bnpm\s+publish\b/i.test(cmd) || /\bdeploy\b/i.test(cmd)) {
60
+ return {
61
+ level: 'high',
62
+ requiresApproval: true,
63
+ reason: `Command executes repository push or deployment: "${cmd}".`,
64
+ };
65
+ }
66
+ return {
67
+ level: 'medium',
68
+ requiresApproval: false,
69
+ reason: `Running local shell command: "${cmd.slice(0, 60)}"`,
70
+ };
71
+ }
72
+ // 3. High Risk: Overwriting sensitive configuration or credentials
73
+ if (toolLower === 'write_file' || toolLower === 'edit_file') {
74
+ const filePath = String(args.path || '').toLowerCase();
75
+ if (filePath.includes('.env') || filePath.includes('id_rsa') || filePath.includes('credentials') || filePath.includes('auth.json')) {
76
+ return {
77
+ level: 'high',
78
+ requiresApproval: true,
79
+ reason: `Modifying sensitive credential or environment configuration file: "${filePath}".`,
80
+ };
81
+ }
82
+ return {
83
+ level: 'medium',
84
+ requiresApproval: false,
85
+ reason: `Modifying workspace source file: "${args.path}"`,
86
+ };
87
+ }
88
+ // 4. Computer-use clicks or inputs on sensitive targets
89
+ if (toolLower === 'computer_click' || toolLower === 'browser_click') {
90
+ const targetDesc = String(args.element || args.selectorOrText || args.target || args.ref || '').toLowerCase();
91
+ for (const kw of ['delete account', 'confirm purchase', 'pay now', 'buy now', 'send', 'transfer', 'revoke', 'checkout', 'payment']) {
92
+ if (targetDesc.includes(kw)) {
93
+ return {
94
+ level: 'high',
95
+ requiresApproval: true,
96
+ reason: `Clicking sensitive target with label "${targetDesc}".`,
97
+ };
98
+ }
99
+ }
100
+ return {
101
+ level: 'medium',
102
+ requiresApproval: false,
103
+ reason: `Clicking on UI element: "${targetDesc || `${args.x}, ${args.y}`}"`,
104
+ };
105
+ }
106
+ // 5. Form inputs & Typing
107
+ if (toolLower === 'browser_fill_input' || toolLower === 'browser_type' || toolLower === 'computer_type') {
108
+ return {
109
+ level: 'medium',
110
+ requiresApproval: false,
111
+ reason: `Filling form or typing text input.`,
112
+ };
113
+ }
114
+ // 6. Read-only exploration tools are always low-risk
115
+ if ([
116
+ 'read_file', 'list_dir', 'grep_search', 'glob_search', 'tree_view',
117
+ 'file_info', 'fetch_url', 'git_diff', 'browser_inspect', 'browser_content',
118
+ 'browser_get_dom', 'computer_get_window_list',
119
+ 'computer_screenshot', 'see_screen', 'analyze_screen'
120
+ ].includes(toolLower)) {
121
+ return {
122
+ level: 'low',
123
+ requiresApproval: false,
124
+ reason: `Read-only inspection action.`,
125
+ };
126
+ }
127
+ return {
128
+ level: 'low',
129
+ requiresApproval: false,
130
+ reason: `Standard autonomous operation.`,
131
+ };
132
+ }
133
+ classify(tool, args = {}) {
134
+ return this.assessAction(tool, args).level.toUpperCase();
135
+ }
136
+ }
137
+ export class ApprovalManager {
138
+ static _instance = null;
139
+ static getInstance() {
140
+ if (!ApprovalManager._instance) {
141
+ ApprovalManager._instance = new ApprovalManager();
142
+ }
143
+ return ApprovalManager._instance;
144
+ }
145
+ classifier;
146
+ autoApprove;
147
+ pendingRequests = new Map();
148
+ approvalResolvers = new Map();
149
+ constructor(autoApprove = false) {
150
+ this.classifier = new RiskClassifier();
151
+ this.autoApprove = autoApprove;
152
+ }
153
+ setAutoApprove(enabled) {
154
+ this.autoApprove = enabled;
155
+ }
156
+ isAutoApprove() {
157
+ return this.autoApprove;
158
+ }
159
+ checkAction(tool, args = {}) {
160
+ return this.classifier.assessAction(tool, args);
161
+ }
162
+ async requestApproval(requestOrTaskId, tool, args = {}, assessment) {
163
+ // Mode 1: Options object argument
164
+ if (typeof requestOrTaskId === 'object' && requestOrTaskId !== null) {
165
+ const reqObj = requestOrTaskId;
166
+ const action = reqObj.action || reqObj.tool || 'unknown';
167
+ const riskLevel = (reqObj.riskLevel || 'MEDIUM').toUpperCase();
168
+ const isHighOrCritical = riskLevel === 'HIGH' || riskLevel === 'CRITICAL';
169
+ if (!isHighOrCritical || this.autoApprove) {
170
+ return true;
171
+ }
172
+ const requestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 6)}`;
173
+ const request = {
174
+ id: requestId,
175
+ taskId: reqObj.taskId || 'task_default',
176
+ tool: action,
177
+ action,
178
+ target: reqObj.target,
179
+ args: reqObj.args || {},
180
+ risk: {
181
+ level: riskLevel.toLowerCase(),
182
+ requiresApproval: isHighOrCritical,
183
+ reason: reqObj.description || 'Action requires approval',
184
+ },
185
+ riskLevel,
186
+ description: reqObj.description,
187
+ timestamp: new Date().toISOString(),
188
+ status: 'pending',
189
+ };
190
+ this.pendingRequests.set(requestId, request);
191
+ return new Promise((resolve) => {
192
+ this.approvalResolvers.set(requestId, (approved) => {
193
+ this.pendingRequests.delete(requestId);
194
+ this.approvalResolvers.delete(requestId);
195
+ request.status = approved ? 'approved' : 'rejected';
196
+ request.resolvedAt = new Date().toISOString();
197
+ resolve(approved);
198
+ });
199
+ });
200
+ }
201
+ // Mode 2: (taskId, tool, args, assessment)
202
+ const taskId = String(requestOrTaskId);
203
+ const targetTool = tool || 'unknown';
204
+ const risk = assessment || this.classifier.assessAction(targetTool, args);
205
+ if (!risk.requiresApproval || this.autoApprove) {
206
+ return { approved: true, reason: 'Auto-approved by policy.' };
207
+ }
208
+ const requestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 6)}`;
209
+ const request = {
210
+ id: requestId,
211
+ taskId,
212
+ tool: targetTool,
213
+ action: targetTool,
214
+ args,
215
+ risk,
216
+ riskLevel: risk.level.toUpperCase(),
217
+ timestamp: new Date().toISOString(),
218
+ status: 'pending',
219
+ };
220
+ this.pendingRequests.set(requestId, request);
221
+ // In interactive TTY environments, present Clack confirmation prompt
222
+ if (process.stdout.isTTY && !process.env.CI) {
223
+ const riskColor = risk.level === 'critical' ? chalk.bgRed.white.bold : chalk.bgYellow.black.bold;
224
+ console.log(`\n${riskColor(` ⚠️ ACTION APPROVAL REQUIRED: ${risk.level.toUpperCase()} RISK `)}`);
225
+ console.log(chalk.yellow(`Scout wants to execute: ${chalk.bold.cyan(targetTool)}`));
226
+ console.log(chalk.dim(`Reason: ${risk.reason}`));
227
+ console.log(chalk.dim(`Arguments: ${JSON.stringify(args, null, 2)}`));
228
+ try {
229
+ const confirmed = await confirm({
230
+ message: `Authorize Scout to execute this action?`,
231
+ initialValue: false,
232
+ });
233
+ const isOk = !isCancel(confirmed) && Boolean(confirmed);
234
+ request.status = isOk ? 'approved' : 'rejected';
235
+ request.resolvedAt = new Date().toISOString();
236
+ this.pendingRequests.delete(requestId);
237
+ return {
238
+ approved: isOk,
239
+ reason: isOk ? 'Approved by user via CLI confirmation' : 'Rejected by user via CLI prompt',
240
+ };
241
+ }
242
+ catch {
243
+ return { approved: false, reason: 'Confirmation prompt interrupted' };
244
+ }
245
+ }
246
+ // In non-interactive or web server mode, wait for external resolution
247
+ return new Promise((resolve) => {
248
+ const timer = setTimeout(() => {
249
+ this.pendingRequests.delete(requestId);
250
+ this.approvalResolvers.delete(requestId);
251
+ resolve({ approved: false, reason: 'Approval request timed out after 30 seconds.' });
252
+ }, 30000);
253
+ this.approvalResolvers.set(requestId, (approved) => {
254
+ clearTimeout(timer);
255
+ this.pendingRequests.delete(requestId);
256
+ this.approvalResolvers.delete(requestId);
257
+ request.status = approved ? 'approved' : 'rejected';
258
+ request.resolvedAt = new Date().toISOString();
259
+ resolve({
260
+ approved,
261
+ reason: approved ? 'Approved by user via Dashboard' : 'Rejected by user via Dashboard',
262
+ });
263
+ });
264
+ });
265
+ }
266
+ submitDecision(requestId, approved) {
267
+ const resolver = this.approvalResolvers.get(requestId);
268
+ if (resolver) {
269
+ resolver(approved);
270
+ return true;
271
+ }
272
+ return false;
273
+ }
274
+ resolveRequest(requestId, approved, reason) {
275
+ return this.submitDecision(requestId, approved);
276
+ }
277
+ getPendingRequests() {
278
+ return Array.from(this.pendingRequests.values());
279
+ }
280
+ }
281
+ //# sourceMappingURL=safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.js","sourceRoot":"","sources":["safety.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["toolRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,WAAW,2BAA2B;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB,EAAE,cAAc,EAiF9C,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,cAAc,EAmEpD,CAAC;AAEF,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,QAAQ,CAA0C;IAE1D,cAaC;IAEM,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEvD;IAEM,WAAW,IAAI,cAAc,EAAE,CAErC;IAEM,eAAe,CAAC,IAAI,EAAE,KAAK,GAAG,gBAAgB,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,EAAE,CAK1G;IAED;;;;;OAKG;IACI,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,MAAM,CAmC7H;CACJ"}