@dobbyai/mcp-external 1.0.4 → 1.1.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/__tests__/agent-mail-tools.test.d.ts +8 -0
- package/dist/__tests__/agent-mail-tools.test.d.ts.map +1 -0
- package/dist/__tests__/agent-mail-tools.test.js +262 -0
- package/dist/__tests__/agent-mail-tools.test.js.map +1 -0
- package/dist/__tests__/annotations.test.d.ts +8 -0
- package/dist/__tests__/annotations.test.d.ts.map +1 -0
- package/dist/__tests__/annotations.test.js +108 -0
- package/dist/__tests__/annotations.test.js.map +1 -0
- package/dist/__tests__/auth.test.d.ts +7 -0
- package/dist/__tests__/auth.test.d.ts.map +1 -0
- package/dist/__tests__/auth.test.js +116 -0
- package/dist/__tests__/auth.test.js.map +1 -0
- package/dist/__tests__/integration/protocol.test.d.ts +8 -0
- package/dist/__tests__/integration/protocol.test.d.ts.map +1 -0
- package/dist/__tests__/integration/protocol.test.js +104 -0
- package/dist/__tests__/integration/protocol.test.js.map +1 -0
- package/dist/__tests__/mcp-integrations.test.d.ts +8 -0
- package/dist/__tests__/mcp-integrations.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-integrations.test.js +375 -0
- package/dist/__tests__/mcp-integrations.test.js.map +1 -0
- package/dist/__tests__/memory-graph-tools.test.d.ts +8 -0
- package/dist/__tests__/memory-graph-tools.test.d.ts.map +1 -0
- package/dist/__tests__/memory-graph-tools.test.js +265 -0
- package/dist/__tests__/memory-graph-tools.test.js.map +1 -0
- package/dist/__tests__/schedule-tools.test.d.ts +8 -0
- package/dist/__tests__/schedule-tools.test.d.ts.map +1 -0
- package/dist/__tests__/schedule-tools.test.js +290 -0
- package/dist/__tests__/schedule-tools.test.js.map +1 -0
- package/dist/__tests__/tiers.test.d.ts +7 -0
- package/dist/__tests__/tiers.test.d.ts.map +1 -0
- package/dist/__tests__/tiers.test.js +103 -0
- package/dist/__tests__/tiers.test.js.map +1 -0
- package/dist/__tests__/tools.test.d.ts +7 -0
- package/dist/__tests__/tools.test.d.ts.map +1 -0
- package/dist/__tests__/tools.test.js +143 -0
- package/dist/__tests__/tools.test.js.map +1 -0
- package/dist/__tests__/transport.test.d.ts +7 -0
- package/dist/__tests__/transport.test.d.ts.map +1 -0
- package/dist/__tests__/transport.test.js +55 -0
- package/dist/__tests__/transport.test.js.map +1 -0
- package/dist/__tests__/web-eval-tools.test.d.ts +8 -0
- package/dist/__tests__/web-eval-tools.test.d.ts.map +1 -0
- package/dist/__tests__/web-eval-tools.test.js +252 -0
- package/dist/__tests__/web-eval-tools.test.js.map +1 -0
- package/dist/__tests__/workflow-tools.test.d.ts +8 -0
- package/dist/__tests__/workflow-tools.test.d.ts.map +1 -0
- package/dist/__tests__/workflow-tools.test.js +268 -0
- package/dist/__tests__/workflow-tools.test.js.map +1 -0
- package/dist/auth/oauth-provider.d.ts +34 -0
- package/dist/auth/oauth-provider.d.ts.map +1 -0
- package/dist/auth/oauth-provider.js +75 -0
- package/dist/auth/oauth-provider.js.map +1 -0
- package/dist/auth/token-verifier.d.ts +40 -0
- package/dist/auth/token-verifier.d.ts.map +1 -0
- package/dist/auth/token-verifier.js +138 -0
- package/dist/auth/token-verifier.js.map +1 -0
- package/dist/http-server.d.ts +35 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +175 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.js +113 -52
- package/dist/index.js.map +1 -1
- package/dist/lib/dobby-client.d.ts +50 -20
- package/dist/lib/dobby-client.d.ts.map +1 -1
- package/dist/lib/dobby-client.js +50 -0
- package/dist/lib/dobby-client.js.map +1 -1
- package/dist/tools/agent-mail.d.ts +153 -0
- package/dist/tools/agent-mail.d.ts.map +1 -0
- package/dist/tools/agent-mail.js +340 -0
- package/dist/tools/agent-mail.js.map +1 -0
- package/dist/tools/approvals.d.ts +24 -0
- package/dist/tools/approvals.d.ts.map +1 -1
- package/dist/tools/approvals.js +24 -0
- package/dist/tools/approvals.js.map +1 -1
- package/dist/tools/crew-builder.d.ts +24 -0
- package/dist/tools/crew-builder.d.ts.map +1 -1
- package/dist/tools/crew-builder.js +24 -0
- package/dist/tools/crew-builder.js.map +1 -1
- package/dist/tools/crewai.d.ts +24 -0
- package/dist/tools/crewai.d.ts.map +1 -1
- package/dist/tools/crewai.js +24 -0
- package/dist/tools/crewai.js.map +1 -1
- package/dist/tools/exa.d.ts +161 -0
- package/dist/tools/exa.d.ts.map +1 -0
- package/dist/tools/exa.js +228 -0
- package/dist/tools/exa.js.map +1 -0
- package/dist/tools/github-mcp.d.ts +303 -0
- package/dist/tools/github-mcp.d.ts.map +1 -0
- package/dist/tools/github-mcp.js +397 -0
- package/dist/tools/github-mcp.js.map +1 -0
- package/dist/tools/governance.d.ts +129 -0
- package/dist/tools/governance.d.ts.map +1 -0
- package/dist/tools/governance.js +171 -0
- package/dist/tools/governance.js.map +1 -0
- package/dist/tools/index.d.ts +3589 -159
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +250 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/jira.d.ts +60 -0
- package/dist/tools/jira.d.ts.map +1 -1
- package/dist/tools/jira.js +60 -0
- package/dist/tools/jira.js.map +1 -1
- package/dist/tools/knowledge-base.d.ts +144 -0
- package/dist/tools/knowledge-base.d.ts.map +1 -0
- package/dist/tools/knowledge-base.js +179 -0
- package/dist/tools/knowledge-base.js.map +1 -0
- package/dist/tools/mcp-metrics.d.ts +62 -0
- package/dist/tools/mcp-metrics.d.ts.map +1 -0
- package/dist/tools/mcp-metrics.js +270 -0
- package/dist/tools/mcp-metrics.js.map +1 -0
- package/dist/tools/mcp-tools.d.ts +12 -0
- package/dist/tools/mcp-tools.d.ts.map +1 -1
- package/dist/tools/mcp-tools.js +12 -0
- package/dist/tools/mcp-tools.js.map +1 -1
- package/dist/tools/mem0.d.ts +168 -0
- package/dist/tools/mem0.d.ts.map +1 -0
- package/dist/tools/mem0.js +255 -0
- package/dist/tools/mem0.js.map +1 -0
- package/dist/tools/memory-graph.d.ts +197 -0
- package/dist/tools/memory-graph.d.ts.map +1 -0
- package/dist/tools/memory-graph.js +545 -0
- package/dist/tools/memory-graph.js.map +1 -0
- package/dist/tools/messages.d.ts +12 -0
- package/dist/tools/messages.d.ts.map +1 -1
- package/dist/tools/messages.js +12 -0
- package/dist/tools/messages.js.map +1 -1
- package/dist/tools/moltbook.d.ts +564 -0
- package/dist/tools/moltbook.d.ts.map +1 -0
- package/dist/tools/moltbook.js +792 -0
- package/dist/tools/moltbook.js.map +1 -0
- package/dist/tools/ops.d.ts +219 -0
- package/dist/tools/ops.d.ts.map +1 -0
- package/dist/tools/ops.js +360 -0
- package/dist/tools/ops.js.map +1 -0
- package/dist/tools/schedules.d.ts +196 -0
- package/dist/tools/schedules.d.ts.map +1 -0
- package/dist/tools/schedules.js +264 -0
- package/dist/tools/schedules.js.map +1 -0
- package/dist/tools/services.d.ts +6 -0
- package/dist/tools/services.d.ts.map +1 -1
- package/dist/tools/services.js +6 -0
- package/dist/tools/services.js.map +1 -1
- package/dist/tools/tasks.d.ts +45 -0
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +49 -4
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/tiers.d.ts +39 -0
- package/dist/tools/tiers.d.ts.map +1 -0
- package/dist/tools/tiers.js +138 -0
- package/dist/tools/tiers.js.map +1 -0
- package/dist/tools/unified-agents.d.ts +62 -0
- package/dist/tools/unified-agents.d.ts.map +1 -0
- package/dist/tools/unified-agents.js +147 -0
- package/dist/tools/unified-agents.js.map +1 -0
- package/dist/tools/web-eval.d.ts +172 -0
- package/dist/tools/web-eval.d.ts.map +1 -0
- package/dist/tools/web-eval.js +347 -0
- package/dist/tools/web-eval.js.map +1 -0
- package/dist/tools/workflow.d.ts +171 -0
- package/dist/tools/workflow.d.ts.map +1 -0
- package/dist/tools/workflow.js +518 -0
- package/dist/tools/workflow.js.map +1 -0
- package/package.json +8 -3
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentMail MCP Tools Tests — Phase 5 + Session 3 updates
|
|
3
|
+
*
|
|
4
|
+
* Tests for agent notification system, inbox retrieval,
|
|
5
|
+
* digital identity management, dynamic registry, and markdown responses.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=agent-mail-tools.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-mail-tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/agent-mail-tools.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentMail MCP Tools Tests — Phase 5 + Session 3 updates
|
|
3
|
+
*
|
|
4
|
+
* Tests for agent notification system, inbox retrieval,
|
|
5
|
+
* digital identity management, dynamic registry, and markdown responses.
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
8
|
+
// Mock global fetch
|
|
9
|
+
const mockFetch = vi.fn();
|
|
10
|
+
vi.stubGlobal('fetch', mockFetch);
|
|
11
|
+
// Mock DobbyClient with request method and tenantId
|
|
12
|
+
const mockClient = {
|
|
13
|
+
apiUrl: 'http://localhost:3000',
|
|
14
|
+
apiKey: 'test-api-key',
|
|
15
|
+
tenantId: 'tenant_test123',
|
|
16
|
+
request: vi.fn(),
|
|
17
|
+
};
|
|
18
|
+
// ============================================
|
|
19
|
+
// Send Notification
|
|
20
|
+
// ============================================
|
|
21
|
+
describe('AgentMail: Send Notification', () => {
|
|
22
|
+
beforeEach(() => {
|
|
23
|
+
vi.resetAllMocks();
|
|
24
|
+
// Default: API unavailable for request (dynamic registry fallback)
|
|
25
|
+
mockClient.request.mockRejectedValue(new Error('Connection refused'));
|
|
26
|
+
});
|
|
27
|
+
it('sends notification and returns markdown response', async () => {
|
|
28
|
+
const { handleAgentMailSendNotification } = await import('../tools/agent-mail.js');
|
|
29
|
+
// API unavailable — local-only storage
|
|
30
|
+
mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
|
|
31
|
+
const result = await handleAgentMailSendNotification(mockClient, {
|
|
32
|
+
to: 'dobby-backend-agent',
|
|
33
|
+
subject: 'Task completed',
|
|
34
|
+
body: 'The API endpoint has been implemented successfully.',
|
|
35
|
+
});
|
|
36
|
+
const text = result.content[0].text;
|
|
37
|
+
expect(text).toContain('## Notification Sent');
|
|
38
|
+
expect(text).toContain('**To:** dobby-backend-agent');
|
|
39
|
+
expect(text).toContain('**Type:** info');
|
|
40
|
+
expect(text).toContain('**Priority:** normal');
|
|
41
|
+
expect(text).toContain('**API Delivered:** No');
|
|
42
|
+
});
|
|
43
|
+
it('sends with custom type and priority', async () => {
|
|
44
|
+
const { handleAgentMailSendNotification } = await import('../tools/agent-mail.js');
|
|
45
|
+
mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
|
|
46
|
+
const result = await handleAgentMailSendNotification(mockClient, {
|
|
47
|
+
to: 'team',
|
|
48
|
+
subject: 'Urgent: Security Vulnerability',
|
|
49
|
+
body: 'Critical security issue found in auth module.',
|
|
50
|
+
notification_type: 'alert',
|
|
51
|
+
priority: 'urgent',
|
|
52
|
+
task_id: 'task_abc123',
|
|
53
|
+
});
|
|
54
|
+
const text = result.content[0].text;
|
|
55
|
+
expect(text).toContain('**Type:** alert');
|
|
56
|
+
expect(text).toContain('**Priority:** urgent');
|
|
57
|
+
expect(text).toContain('**Task:** task_abc123');
|
|
58
|
+
});
|
|
59
|
+
it('delivers via API when available', async () => {
|
|
60
|
+
const { handleAgentMailSendNotification } = await import('../tools/agent-mail.js');
|
|
61
|
+
mockFetch.mockResolvedValueOnce({
|
|
62
|
+
ok: true,
|
|
63
|
+
json: () => Promise.resolve({ id: 'api_notif_123', delivered: true }),
|
|
64
|
+
});
|
|
65
|
+
const result = await handleAgentMailSendNotification(mockClient, {
|
|
66
|
+
to: 'dobby-frontend-agent',
|
|
67
|
+
subject: 'PR Ready for Review',
|
|
68
|
+
body: 'Please review the frontend changes.',
|
|
69
|
+
notification_type: 'approval_request',
|
|
70
|
+
});
|
|
71
|
+
const text = result.content[0].text;
|
|
72
|
+
expect(text).toContain('**API Delivered:** Yes');
|
|
73
|
+
// Verify API was called with correct endpoint
|
|
74
|
+
expect(mockFetch).toHaveBeenCalledWith('http://localhost:3000/api/v1/notifications', expect.objectContaining({
|
|
75
|
+
method: 'POST',
|
|
76
|
+
headers: expect.objectContaining({
|
|
77
|
+
'X-API-Key': 'test-api-key',
|
|
78
|
+
}),
|
|
79
|
+
}));
|
|
80
|
+
});
|
|
81
|
+
it('includes email_requested flag', async () => {
|
|
82
|
+
const { handleAgentMailSendNotification } = await import('../tools/agent-mail.js');
|
|
83
|
+
mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
|
|
84
|
+
const result = await handleAgentMailSendNotification(mockClient, {
|
|
85
|
+
to: 'user@example.com',
|
|
86
|
+
subject: 'Status Report',
|
|
87
|
+
body: 'Weekly status update.',
|
|
88
|
+
deliver_email: true,
|
|
89
|
+
});
|
|
90
|
+
const text = result.content[0].text;
|
|
91
|
+
expect(text).toContain('**Email Requested:** Yes');
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
// ============================================
|
|
95
|
+
// Get Inbox
|
|
96
|
+
// ============================================
|
|
97
|
+
describe('AgentMail: Get Inbox', () => {
|
|
98
|
+
beforeEach(() => {
|
|
99
|
+
vi.resetAllMocks();
|
|
100
|
+
mockClient.request.mockRejectedValue(new Error('Connection refused'));
|
|
101
|
+
});
|
|
102
|
+
it('returns inbox from API when available', async () => {
|
|
103
|
+
const { handleAgentMailGetInbox } = await import('../tools/agent-mail.js');
|
|
104
|
+
mockFetch.mockResolvedValueOnce({
|
|
105
|
+
ok: true,
|
|
106
|
+
json: () => Promise.resolve({
|
|
107
|
+
notifications: [
|
|
108
|
+
{ id: 'notif_1', subject: 'Test', read: false },
|
|
109
|
+
],
|
|
110
|
+
total: 1,
|
|
111
|
+
}),
|
|
112
|
+
});
|
|
113
|
+
const result = await handleAgentMailGetInbox(mockClient, {});
|
|
114
|
+
const data = JSON.parse(result.content[0].text);
|
|
115
|
+
expect(data.notifications).toBeDefined();
|
|
116
|
+
});
|
|
117
|
+
it('falls back to local store with markdown format when API unavailable', async () => {
|
|
118
|
+
const { handleAgentMailGetInbox } = await import('../tools/agent-mail.js');
|
|
119
|
+
// Both fetch (inbox API) and request (registry) fail
|
|
120
|
+
mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
|
|
121
|
+
const result = await handleAgentMailGetInbox(mockClient, {
|
|
122
|
+
agent_id: 'dobby-backend-agent',
|
|
123
|
+
});
|
|
124
|
+
const text = result.content[0].text;
|
|
125
|
+
expect(text).toContain('## Inbox for');
|
|
126
|
+
expect(text).toContain('**Agent:** dobby-backend-agent');
|
|
127
|
+
expect(text).toContain('**Source:** local store');
|
|
128
|
+
});
|
|
129
|
+
it('respects limit parameter', async () => {
|
|
130
|
+
const { handleAgentMailGetInbox } = await import('../tools/agent-mail.js');
|
|
131
|
+
mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
|
|
132
|
+
const result = await handleAgentMailGetInbox(mockClient, {
|
|
133
|
+
limit: 5,
|
|
134
|
+
});
|
|
135
|
+
// Should not error
|
|
136
|
+
expect(result.content[0].text).toContain('## Inbox for');
|
|
137
|
+
});
|
|
138
|
+
it('includes team notifications in inbox', async () => {
|
|
139
|
+
const { handleAgentMailSendNotification, handleAgentMailGetInbox } = await import('../tools/agent-mail.js');
|
|
140
|
+
// Send a team notification first
|
|
141
|
+
mockFetch.mockRejectedValue(new Error('Connection refused'));
|
|
142
|
+
await handleAgentMailSendNotification(mockClient, {
|
|
143
|
+
to: 'team',
|
|
144
|
+
subject: 'Team Update',
|
|
145
|
+
body: 'Important team update.',
|
|
146
|
+
notification_type: 'status_report',
|
|
147
|
+
});
|
|
148
|
+
// Check inbox for team — should see team notifications
|
|
149
|
+
const result = await handleAgentMailGetInbox(mockClient, {
|
|
150
|
+
agent_id: 'team',
|
|
151
|
+
unread_only: false,
|
|
152
|
+
});
|
|
153
|
+
const text = result.content[0].text;
|
|
154
|
+
expect(text).toContain('Team Update');
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
// ============================================
|
|
158
|
+
// Get Identity — Dynamic Registry
|
|
159
|
+
// ============================================
|
|
160
|
+
describe('AgentMail: Get Identity (Dynamic Registry)', () => {
|
|
161
|
+
beforeEach(() => {
|
|
162
|
+
vi.resetAllMocks();
|
|
163
|
+
});
|
|
164
|
+
it('returns identity from API when available', async () => {
|
|
165
|
+
const { handleAgentMailGetIdentity } = await import('../tools/agent-mail.js');
|
|
166
|
+
mockClient.request.mockResolvedValueOnce({
|
|
167
|
+
data: {
|
|
168
|
+
agents: [
|
|
169
|
+
{
|
|
170
|
+
agent_id: 'dobby-backend-agent',
|
|
171
|
+
display_name: 'Backend Pro',
|
|
172
|
+
role: 'Senior Backend Dev',
|
|
173
|
+
group: 'dev',
|
|
174
|
+
capabilities: ['code', 'api'],
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
const result = await handleAgentMailGetIdentity(mockClient, {
|
|
180
|
+
agent_id: 'dobby-backend-agent',
|
|
181
|
+
});
|
|
182
|
+
const text = result.content[0].text;
|
|
183
|
+
expect(text).toContain('## Agent Identity: Backend Pro');
|
|
184
|
+
expect(text).toContain('**Agent ID:** dobby-backend-agent');
|
|
185
|
+
expect(text).toContain('**Role:** Senior Backend Dev');
|
|
186
|
+
expect(text).toContain('### Capabilities');
|
|
187
|
+
});
|
|
188
|
+
it('falls back to hardcoded defaults when API unavailable', async () => {
|
|
189
|
+
const { handleAgentMailGetIdentity } = await import('../tools/agent-mail.js');
|
|
190
|
+
// Force cache miss by using a fresh mock that always rejects
|
|
191
|
+
mockClient.request.mockRejectedValue(new Error('Connection refused'));
|
|
192
|
+
const result = await handleAgentMailGetIdentity(mockClient, {
|
|
193
|
+
agent_id: 'dobby-backend-agent',
|
|
194
|
+
});
|
|
195
|
+
expect(result.isError).toBeUndefined();
|
|
196
|
+
const text = result.content[0].text;
|
|
197
|
+
// May use cached API data or fallback — either way should have agent info
|
|
198
|
+
expect(text).toContain('**Agent ID:** dobby-backend-agent');
|
|
199
|
+
expect(text).toContain('### Capabilities');
|
|
200
|
+
});
|
|
201
|
+
it('returns error for unknown agent', async () => {
|
|
202
|
+
const { handleAgentMailGetIdentity } = await import('../tools/agent-mail.js');
|
|
203
|
+
mockClient.request.mockRejectedValueOnce(new Error('Connection refused'));
|
|
204
|
+
const result = await handleAgentMailGetIdentity(mockClient, {
|
|
205
|
+
agent_id: 'nonexistent-agent',
|
|
206
|
+
});
|
|
207
|
+
expect(result.isError).toBe(true);
|
|
208
|
+
const data = JSON.parse(result.content[0].text);
|
|
209
|
+
expect(data.error).toContain('Unknown agent');
|
|
210
|
+
expect(data.available_agents).toBeDefined();
|
|
211
|
+
expect(data.available_agents).toContain('dobby-backend-agent');
|
|
212
|
+
});
|
|
213
|
+
it('caches API results for 5 minutes', async () => {
|
|
214
|
+
const { handleAgentMailGetIdentity } = await import('../tools/agent-mail.js');
|
|
215
|
+
const apiResponse = {
|
|
216
|
+
data: {
|
|
217
|
+
agents: [
|
|
218
|
+
{ agent_id: 'dobby-chief-agent', display_name: 'Chief Cached', role: 'Cached Role', group: 'chief' },
|
|
219
|
+
],
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
mockClient.request.mockResolvedValue(apiResponse);
|
|
223
|
+
// First call — fetches from API
|
|
224
|
+
await handleAgentMailGetIdentity(mockClient, { agent_id: 'dobby-chief-agent' });
|
|
225
|
+
// Second call — should use cache (request not called again for registry)
|
|
226
|
+
const callCountAfterFirst = mockClient.request.mock.calls.length;
|
|
227
|
+
await handleAgentMailGetIdentity(mockClient, { agent_id: 'dobby-chief-agent' });
|
|
228
|
+
// Should NOT have made another request (cached)
|
|
229
|
+
expect(mockClient.request.mock.calls.length).toBe(callCountAfterFirst);
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
// ============================================
|
|
233
|
+
// Tool Registration
|
|
234
|
+
// ============================================
|
|
235
|
+
describe('AgentMail: Tool Registration', () => {
|
|
236
|
+
it('all agentmail tools are in allTools', async () => {
|
|
237
|
+
const { allTools } = await import('../tools/index.js');
|
|
238
|
+
expect(allTools.agentmail_send_notification).toBeDefined();
|
|
239
|
+
expect(allTools.agentmail_get_inbox).toBeDefined();
|
|
240
|
+
expect(allTools.agentmail_get_identity).toBeDefined();
|
|
241
|
+
});
|
|
242
|
+
it('agentmail tools have correct schemas', async () => {
|
|
243
|
+
const { agentMailTools } = await import('../tools/agent-mail.js');
|
|
244
|
+
for (const [name, tool] of Object.entries(agentMailTools)) {
|
|
245
|
+
expect(tool.name).toBe(name);
|
|
246
|
+
expect(tool.description).toBeTruthy();
|
|
247
|
+
expect(tool.inputSchema.type).toBe('object');
|
|
248
|
+
expect(tool.inputSchema.properties).toBeDefined();
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
it('agent_id field has pattern validation', async () => {
|
|
252
|
+
const { agentMailTools } = await import('../tools/agent-mail.js');
|
|
253
|
+
const identitySchema = agentMailTools.agentmail_get_identity.inputSchema;
|
|
254
|
+
expect(identitySchema.properties.agent_id.pattern).toBe('^[a-zA-Z0-9_-]+$');
|
|
255
|
+
});
|
|
256
|
+
it('total tool count includes phase 3-5 tools', async () => {
|
|
257
|
+
const { allTools } = await import('../tools/index.js');
|
|
258
|
+
const toolCount = Object.keys(allTools).length;
|
|
259
|
+
expect(toolCount).toBeGreaterThanOrEqual(65);
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
//# sourceMappingURL=agent-mail-tools.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-mail-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/agent-mail-tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotations.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/annotations.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Annotations Tests
|
|
3
|
+
*
|
|
4
|
+
* Verifies that all tools have proper MCP annotations
|
|
5
|
+
* (readOnlyHint, destructiveHint, openWorldHint).
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect } from 'vitest';
|
|
8
|
+
import { allTools } from '../tools/index.js';
|
|
9
|
+
describe('Tool Annotations', () => {
|
|
10
|
+
const tools = Object.values(allTools);
|
|
11
|
+
it('all tools have annotations object', () => {
|
|
12
|
+
for (const tool of tools) {
|
|
13
|
+
expect(tool.annotations, `Tool "${tool.name}" missing annotations`).toBeDefined();
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
it('all annotations have required fields', () => {
|
|
17
|
+
for (const tool of tools) {
|
|
18
|
+
const ann = tool.annotations;
|
|
19
|
+
expect(ann.title, `Tool "${tool.name}" missing title`).toBeDefined();
|
|
20
|
+
expect(typeof ann.readOnlyHint, `Tool "${tool.name}" readOnlyHint not boolean`).toBe('boolean');
|
|
21
|
+
expect(typeof ann.destructiveHint, `Tool "${tool.name}" destructiveHint not boolean`).toBe('boolean');
|
|
22
|
+
expect(typeof ann.openWorldHint, `Tool "${tool.name}" openWorldHint not boolean`).toBe('boolean');
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
it('no tool is both readOnly and destructive', () => {
|
|
26
|
+
for (const tool of tools) {
|
|
27
|
+
const ann = tool.annotations;
|
|
28
|
+
if (ann.readOnlyHint && ann.destructiveHint) {
|
|
29
|
+
throw new Error(`Tool "${tool.name}" cannot be both readOnly and destructive`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
it('read-only tools are correctly classified', () => {
|
|
34
|
+
const expectedReadOnly = [
|
|
35
|
+
'list_tasks', 'get_task', 'get_task_timeline',
|
|
36
|
+
'get_messages',
|
|
37
|
+
'get_pending_approvals',
|
|
38
|
+
'list_services',
|
|
39
|
+
'crewai_health', 'crewai_inputs', 'crewai_status',
|
|
40
|
+
'crew_validate', 'crew_status', 'crew_list',
|
|
41
|
+
'mcp_discover_tools',
|
|
42
|
+
'jira_search_issues', 'jira_get_issue', 'jira_get_comments',
|
|
43
|
+
'jira_get_transitions', 'jira_list_projects',
|
|
44
|
+
'get_ops_health_summary', 'get_service_status', 'get_active_issues', 'get_ops_audit_log',
|
|
45
|
+
'github_search_code', 'github_get_file', 'github_list_prs',
|
|
46
|
+
'github_list_issues', 'github_get_workflow_runs',
|
|
47
|
+
'mem0_search', 'mem0_list',
|
|
48
|
+
'mcp_health_check', 'mcp_connection_info',
|
|
49
|
+
'workflow_classify_task', 'workflow_agent_workload', 'workflow_assignment_rules',
|
|
50
|
+
'webeval_run_tests', 'webeval_check_health', 'webeval_test_api_endpoint', 'webeval_coverage_report',
|
|
51
|
+
'memory_graph_query', 'memory_graph_timeline', 'memory_graph_context',
|
|
52
|
+
'agentmail_get_inbox', 'agentmail_get_identity',
|
|
53
|
+
'list_schedules',
|
|
54
|
+
'moltbook_get_profile', 'moltbook_get_home_feed', 'moltbook_get_posts',
|
|
55
|
+
'moltbook_get_post', 'moltbook_get_comments', 'moltbook_search', 'moltbook_get_notifications',
|
|
56
|
+
'list_all_agents',
|
|
57
|
+
'export_policies', 'validate_policies',
|
|
58
|
+
];
|
|
59
|
+
for (const name of expectedReadOnly) {
|
|
60
|
+
const tool = allTools[name];
|
|
61
|
+
expect(tool, `Tool "${name}" not found`).toBeDefined();
|
|
62
|
+
expect(tool.annotations?.readOnlyHint, `Tool "${name}" should be readOnly`).toBe(true);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
it('destructive tools are correctly classified', () => {
|
|
66
|
+
const expectedDestructive = [
|
|
67
|
+
'create_task', 'update_task', 'cancel_task',
|
|
68
|
+
'send_message',
|
|
69
|
+
'approve_task', 'reject_task', 'request_changes',
|
|
70
|
+
'crewai_kickoff',
|
|
71
|
+
'crew_kickoff',
|
|
72
|
+
'jira_create_issue', 'jira_update_issue', 'jira_add_comment',
|
|
73
|
+
'jira_transition_issue', 'jira_assign_issue',
|
|
74
|
+
'acknowledge_ops_issue',
|
|
75
|
+
'github_create_pr', 'github_create_issue',
|
|
76
|
+
'mem0_store', 'mem0_delete',
|
|
77
|
+
'workflow_auto_assign',
|
|
78
|
+
'memory_graph_store',
|
|
79
|
+
'agentmail_send_notification',
|
|
80
|
+
'create_schedule', 'pause_schedule', 'delete_schedule',
|
|
81
|
+
'moltbook_update_profile', 'moltbook_create_post', 'moltbook_create_comment',
|
|
82
|
+
'moltbook_upvote_post', 'moltbook_downvote_post',
|
|
83
|
+
'import_policies', 'apply_guardrail',
|
|
84
|
+
];
|
|
85
|
+
for (const name of expectedDestructive) {
|
|
86
|
+
const tool = allTools[name];
|
|
87
|
+
expect(tool, `Tool "${name}" not found`).toBeDefined();
|
|
88
|
+
expect(tool.annotations?.destructiveHint, `Tool "${name}" should be destructive`).toBe(true);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
it('openWorldHint is true only for external API tools', () => {
|
|
92
|
+
const expectedOpenWorld = [
|
|
93
|
+
'exa_web_search', 'exa_find_similar', 'exa_get_contents',
|
|
94
|
+
'mcp_call_tool',
|
|
95
|
+
];
|
|
96
|
+
const openWorldSet = new Set(expectedOpenWorld);
|
|
97
|
+
for (const tool of tools) {
|
|
98
|
+
const ann = tool.annotations;
|
|
99
|
+
if (openWorldSet.has(tool.name)) {
|
|
100
|
+
expect(ann.openWorldHint, `Tool "${tool.name}" should have openWorldHint=true`).toBe(true);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
expect(ann.openWorldHint, `Tool "${tool.name}" should have openWorldHint=false`).toBe(false);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=annotations.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotations.test.js","sourceRoot":"","sources":["../../src/__tests__/annotations.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/auth.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Auth Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests for OAuth proxy provider and token verifier.
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
|
+
import { TokenVerifier } from '../auth/token-verifier.js';
|
|
8
|
+
import { createOAuthProvider } from '../auth/oauth-provider.js';
|
|
9
|
+
describe('TokenVerifier', () => {
|
|
10
|
+
let verifier;
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
verifier = new TokenVerifier('https://dobby-ai.com');
|
|
13
|
+
vi.restoreAllMocks();
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
verifier.clearCache();
|
|
17
|
+
});
|
|
18
|
+
const validTokenResponse = {
|
|
19
|
+
active: true,
|
|
20
|
+
user_id: 'pu_user123',
|
|
21
|
+
org_id: 'org_abc',
|
|
22
|
+
tenant_id: 'tenant_xyz',
|
|
23
|
+
scope: 'mcp:read mcp:execute',
|
|
24
|
+
client_id: 'mcp_client1',
|
|
25
|
+
exp: Math.floor(Date.now() / 1000) + 3600,
|
|
26
|
+
};
|
|
27
|
+
it('validates a valid token against remote endpoint', async () => {
|
|
28
|
+
global.fetch = vi.fn().mockResolvedValue({
|
|
29
|
+
ok: true,
|
|
30
|
+
json: () => Promise.resolve(validTokenResponse),
|
|
31
|
+
});
|
|
32
|
+
const authInfo = await verifier.verifyAccessToken('dobby_at_valid_token');
|
|
33
|
+
expect(authInfo.token).toBe('dobby_at_valid_token');
|
|
34
|
+
expect(authInfo.clientId).toBe('mcp_client1');
|
|
35
|
+
expect(authInfo.scopes).toEqual(['mcp:read', 'mcp:execute']);
|
|
36
|
+
expect(authInfo.extra?.org_id).toBe('org_abc');
|
|
37
|
+
expect(authInfo.extra?.tenant_id).toBe('tenant_xyz');
|
|
38
|
+
});
|
|
39
|
+
it('caches token verification results', async () => {
|
|
40
|
+
global.fetch = vi.fn().mockResolvedValue({
|
|
41
|
+
ok: true,
|
|
42
|
+
json: () => Promise.resolve(validTokenResponse),
|
|
43
|
+
});
|
|
44
|
+
// First call hits remote
|
|
45
|
+
await verifier.verifyAccessToken('dobby_at_cached_token');
|
|
46
|
+
expect(fetch).toHaveBeenCalledTimes(1);
|
|
47
|
+
// Second call uses cache
|
|
48
|
+
await verifier.verifyAccessToken('dobby_at_cached_token');
|
|
49
|
+
expect(fetch).toHaveBeenCalledTimes(1);
|
|
50
|
+
});
|
|
51
|
+
it('throws on invalid/expired token (401)', async () => {
|
|
52
|
+
global.fetch = vi.fn().mockResolvedValue({
|
|
53
|
+
ok: false,
|
|
54
|
+
status: 401,
|
|
55
|
+
});
|
|
56
|
+
await expect(verifier.verifyAccessToken('dobby_at_bad'))
|
|
57
|
+
.rejects.toThrow('Invalid or expired access token');
|
|
58
|
+
});
|
|
59
|
+
it('throws on inactive token', async () => {
|
|
60
|
+
global.fetch = vi.fn().mockResolvedValue({
|
|
61
|
+
ok: true,
|
|
62
|
+
json: () => Promise.resolve({ active: false }),
|
|
63
|
+
});
|
|
64
|
+
await expect(verifier.verifyAccessToken('dobby_at_inactive'))
|
|
65
|
+
.rejects.toThrow('Token is not active');
|
|
66
|
+
});
|
|
67
|
+
it('throws when token missing org_id or tenant_id', async () => {
|
|
68
|
+
global.fetch = vi.fn().mockResolvedValue({
|
|
69
|
+
ok: true,
|
|
70
|
+
json: () => Promise.resolve({ active: true, user_id: 'u1' }),
|
|
71
|
+
});
|
|
72
|
+
await expect(verifier.verifyAccessToken('dobby_at_no_context'))
|
|
73
|
+
.rejects.toThrow('Token missing org_id or tenant_id');
|
|
74
|
+
});
|
|
75
|
+
it('evicts oldest entry when cache exceeds max size', async () => {
|
|
76
|
+
global.fetch = vi.fn().mockResolvedValue({
|
|
77
|
+
ok: true,
|
|
78
|
+
json: () => Promise.resolve(validTokenResponse),
|
|
79
|
+
});
|
|
80
|
+
// Fill cache beyond max (1000) — simplified test with a few entries
|
|
81
|
+
for (let i = 0; i < 5; i++) {
|
|
82
|
+
await verifier.verifyAccessToken(`dobby_at_token_${i}`);
|
|
83
|
+
}
|
|
84
|
+
expect(verifier.cacheSize).toBe(5);
|
|
85
|
+
});
|
|
86
|
+
it('calls correct introspection URL', async () => {
|
|
87
|
+
global.fetch = vi.fn().mockResolvedValue({
|
|
88
|
+
ok: true,
|
|
89
|
+
json: () => Promise.resolve(validTokenResponse),
|
|
90
|
+
});
|
|
91
|
+
await verifier.verifyAccessToken('dobby_at_url_test');
|
|
92
|
+
expect(fetch).toHaveBeenCalledWith('https://dobby-ai.com/oauth/token/introspect', expect.objectContaining({
|
|
93
|
+
method: 'POST',
|
|
94
|
+
headers: expect.objectContaining({
|
|
95
|
+
'Authorization': 'Bearer dobby_at_url_test',
|
|
96
|
+
}),
|
|
97
|
+
}));
|
|
98
|
+
});
|
|
99
|
+
it('strips trailing slash from issuer URL', () => {
|
|
100
|
+
const v = new TokenVerifier('https://dobby-ai.com/');
|
|
101
|
+
// The verifier should store the URL without trailing slash
|
|
102
|
+
expect(v.issuerUrl).toBe('https://dobby-ai.com');
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe('createOAuthProvider', () => {
|
|
106
|
+
it('returns provider and tokenVerifier', () => {
|
|
107
|
+
const result = createOAuthProvider({
|
|
108
|
+
issuerUrl: 'https://dobby-ai.com',
|
|
109
|
+
mcpPublicUrl: 'https://mcp.dobby-ai.com',
|
|
110
|
+
});
|
|
111
|
+
expect(result.provider).toBeDefined();
|
|
112
|
+
expect(result.tokenVerifier).toBeDefined();
|
|
113
|
+
expect(result.tokenVerifier).toBeInstanceOf(TokenVerifier);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=auth.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../src/__tests__/auth.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/protocol.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|