-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathfetch-tools.ts
More file actions
80 lines (68 loc) · 2.81 KB
/
fetch-tools.ts
File metadata and controls
80 lines (68 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/**
* Example: fetch the latest StackOne tool catalog with filtering options.
*
* Set `STACKONE_API_KEY` before running.
* By default the script exits early in test environments where a real key is
* not available.
*/
import process from 'node:process';
import { StackOneToolSet } from '@stackone/ai';
const apiKey = process.env.STACKONE_API_KEY;
if (!apiKey) {
console.error('STACKONE_API_KEY environment variable is required');
process.exit(1);
}
const toolset = new StackOneToolSet({});
// Example 1: Fetch all tools
console.log('\n=== Example 1: Fetch all tools ===');
const allTools = await toolset.fetchTools();
console.log(`Loaded ${allTools.length} tools`);
// Example 2: Filter by account IDs using setAccounts()
console.log('\n=== Example 2: Filter by account IDs (using setAccounts) ===');
toolset.setAccounts(['account-123', 'account-456']);
const toolsByAccounts = await toolset.fetchTools();
console.log(`Loaded ${toolsByAccounts.length} tools for specified accounts`);
// Example 3: Filter by account IDs using options
console.log('\n=== Example 3: Filter by account IDs (using options) ===');
const toolsByAccountsOption = await toolset.fetchTools({
accountIds: ['your-account-id'],
});
console.log(`Loaded ${toolsByAccountsOption.length} tools for your-account-id`);
// Example 4: Filter by providers
console.log('\n=== Example 4: Filter by providers ===');
const toolsByProviders = await toolset.fetchTools({
providers: ['hibob', 'bamboohr'],
});
console.log(`Loaded ${toolsByProviders.length} tools for HiBob and BambooHR`);
// Example 5: Filter by actions with exact match
console.log('\n=== Example 5: Filter by actions (exact match) ===');
const toolsByActions = await toolset.fetchTools({
actions: ['bamboohr_list_employees', 'bamboohr_create_employee'],
});
console.log(`Loaded ${toolsByActions.length} tools matching exact action names`);
// Example 6: Filter by actions with glob pattern
console.log('\n=== Example 6: Filter by actions (glob pattern) ===');
const toolsByGlobPattern = await toolset.fetchTools({
actions: ['*_list_employees'],
});
console.log(`Loaded ${toolsByGlobPattern.length} tools matching *_list_employees pattern`);
// Example 7: Combine multiple filters
console.log('\n=== Example 7: Combine multiple filters ===');
const toolsCombined = await toolset.fetchTools({
accountIds: ['account-123'],
providers: ['hibob'],
actions: ['*_list_*'],
});
console.log(
`Loaded ${toolsCombined.length} tools for account-123, provider hibob, matching *_list_* pattern`,
);
// Execute a tool
console.log('\n=== Executing a tool ===');
const tool = allTools.getTool('bamboohr_list_employees');
if (!tool) {
throw new Error('Tool bamboohr_list_employees not found in the catalog');
}
const result = await tool.execute({
query: { limit: 5 },
});
console.log('Sample execution result:', JSON.stringify(result, null, 2));