@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.
Files changed (163) hide show
  1. package/dist/__tests__/agent-mail-tools.test.d.ts +8 -0
  2. package/dist/__tests__/agent-mail-tools.test.d.ts.map +1 -0
  3. package/dist/__tests__/agent-mail-tools.test.js +262 -0
  4. package/dist/__tests__/agent-mail-tools.test.js.map +1 -0
  5. package/dist/__tests__/annotations.test.d.ts +8 -0
  6. package/dist/__tests__/annotations.test.d.ts.map +1 -0
  7. package/dist/__tests__/annotations.test.js +108 -0
  8. package/dist/__tests__/annotations.test.js.map +1 -0
  9. package/dist/__tests__/auth.test.d.ts +7 -0
  10. package/dist/__tests__/auth.test.d.ts.map +1 -0
  11. package/dist/__tests__/auth.test.js +116 -0
  12. package/dist/__tests__/auth.test.js.map +1 -0
  13. package/dist/__tests__/integration/protocol.test.d.ts +8 -0
  14. package/dist/__tests__/integration/protocol.test.d.ts.map +1 -0
  15. package/dist/__tests__/integration/protocol.test.js +104 -0
  16. package/dist/__tests__/integration/protocol.test.js.map +1 -0
  17. package/dist/__tests__/mcp-integrations.test.d.ts +8 -0
  18. package/dist/__tests__/mcp-integrations.test.d.ts.map +1 -0
  19. package/dist/__tests__/mcp-integrations.test.js +375 -0
  20. package/dist/__tests__/mcp-integrations.test.js.map +1 -0
  21. package/dist/__tests__/memory-graph-tools.test.d.ts +8 -0
  22. package/dist/__tests__/memory-graph-tools.test.d.ts.map +1 -0
  23. package/dist/__tests__/memory-graph-tools.test.js +265 -0
  24. package/dist/__tests__/memory-graph-tools.test.js.map +1 -0
  25. package/dist/__tests__/schedule-tools.test.d.ts +8 -0
  26. package/dist/__tests__/schedule-tools.test.d.ts.map +1 -0
  27. package/dist/__tests__/schedule-tools.test.js +290 -0
  28. package/dist/__tests__/schedule-tools.test.js.map +1 -0
  29. package/dist/__tests__/tiers.test.d.ts +7 -0
  30. package/dist/__tests__/tiers.test.d.ts.map +1 -0
  31. package/dist/__tests__/tiers.test.js +103 -0
  32. package/dist/__tests__/tiers.test.js.map +1 -0
  33. package/dist/__tests__/tools.test.d.ts +7 -0
  34. package/dist/__tests__/tools.test.d.ts.map +1 -0
  35. package/dist/__tests__/tools.test.js +143 -0
  36. package/dist/__tests__/tools.test.js.map +1 -0
  37. package/dist/__tests__/transport.test.d.ts +7 -0
  38. package/dist/__tests__/transport.test.d.ts.map +1 -0
  39. package/dist/__tests__/transport.test.js +55 -0
  40. package/dist/__tests__/transport.test.js.map +1 -0
  41. package/dist/__tests__/web-eval-tools.test.d.ts +8 -0
  42. package/dist/__tests__/web-eval-tools.test.d.ts.map +1 -0
  43. package/dist/__tests__/web-eval-tools.test.js +252 -0
  44. package/dist/__tests__/web-eval-tools.test.js.map +1 -0
  45. package/dist/__tests__/workflow-tools.test.d.ts +8 -0
  46. package/dist/__tests__/workflow-tools.test.d.ts.map +1 -0
  47. package/dist/__tests__/workflow-tools.test.js +268 -0
  48. package/dist/__tests__/workflow-tools.test.js.map +1 -0
  49. package/dist/auth/oauth-provider.d.ts +34 -0
  50. package/dist/auth/oauth-provider.d.ts.map +1 -0
  51. package/dist/auth/oauth-provider.js +75 -0
  52. package/dist/auth/oauth-provider.js.map +1 -0
  53. package/dist/auth/token-verifier.d.ts +40 -0
  54. package/dist/auth/token-verifier.d.ts.map +1 -0
  55. package/dist/auth/token-verifier.js +138 -0
  56. package/dist/auth/token-verifier.js.map +1 -0
  57. package/dist/http-server.d.ts +35 -0
  58. package/dist/http-server.d.ts.map +1 -0
  59. package/dist/http-server.js +175 -0
  60. package/dist/http-server.js.map +1 -0
  61. package/dist/index.js +113 -52
  62. package/dist/index.js.map +1 -1
  63. package/dist/lib/dobby-client.d.ts +50 -20
  64. package/dist/lib/dobby-client.d.ts.map +1 -1
  65. package/dist/lib/dobby-client.js +50 -0
  66. package/dist/lib/dobby-client.js.map +1 -1
  67. package/dist/tools/agent-mail.d.ts +153 -0
  68. package/dist/tools/agent-mail.d.ts.map +1 -0
  69. package/dist/tools/agent-mail.js +340 -0
  70. package/dist/tools/agent-mail.js.map +1 -0
  71. package/dist/tools/approvals.d.ts +24 -0
  72. package/dist/tools/approvals.d.ts.map +1 -1
  73. package/dist/tools/approvals.js +24 -0
  74. package/dist/tools/approvals.js.map +1 -1
  75. package/dist/tools/crew-builder.d.ts +24 -0
  76. package/dist/tools/crew-builder.d.ts.map +1 -1
  77. package/dist/tools/crew-builder.js +24 -0
  78. package/dist/tools/crew-builder.js.map +1 -1
  79. package/dist/tools/crewai.d.ts +24 -0
  80. package/dist/tools/crewai.d.ts.map +1 -1
  81. package/dist/tools/crewai.js +24 -0
  82. package/dist/tools/crewai.js.map +1 -1
  83. package/dist/tools/exa.d.ts +161 -0
  84. package/dist/tools/exa.d.ts.map +1 -0
  85. package/dist/tools/exa.js +228 -0
  86. package/dist/tools/exa.js.map +1 -0
  87. package/dist/tools/github-mcp.d.ts +303 -0
  88. package/dist/tools/github-mcp.d.ts.map +1 -0
  89. package/dist/tools/github-mcp.js +397 -0
  90. package/dist/tools/github-mcp.js.map +1 -0
  91. package/dist/tools/governance.d.ts +129 -0
  92. package/dist/tools/governance.d.ts.map +1 -0
  93. package/dist/tools/governance.js +171 -0
  94. package/dist/tools/governance.js.map +1 -0
  95. package/dist/tools/index.d.ts +3589 -159
  96. package/dist/tools/index.d.ts.map +1 -1
  97. package/dist/tools/index.js +250 -0
  98. package/dist/tools/index.js.map +1 -1
  99. package/dist/tools/jira.d.ts +60 -0
  100. package/dist/tools/jira.d.ts.map +1 -1
  101. package/dist/tools/jira.js +60 -0
  102. package/dist/tools/jira.js.map +1 -1
  103. package/dist/tools/knowledge-base.d.ts +144 -0
  104. package/dist/tools/knowledge-base.d.ts.map +1 -0
  105. package/dist/tools/knowledge-base.js +179 -0
  106. package/dist/tools/knowledge-base.js.map +1 -0
  107. package/dist/tools/mcp-metrics.d.ts +62 -0
  108. package/dist/tools/mcp-metrics.d.ts.map +1 -0
  109. package/dist/tools/mcp-metrics.js +270 -0
  110. package/dist/tools/mcp-metrics.js.map +1 -0
  111. package/dist/tools/mcp-tools.d.ts +12 -0
  112. package/dist/tools/mcp-tools.d.ts.map +1 -1
  113. package/dist/tools/mcp-tools.js +12 -0
  114. package/dist/tools/mcp-tools.js.map +1 -1
  115. package/dist/tools/mem0.d.ts +168 -0
  116. package/dist/tools/mem0.d.ts.map +1 -0
  117. package/dist/tools/mem0.js +255 -0
  118. package/dist/tools/mem0.js.map +1 -0
  119. package/dist/tools/memory-graph.d.ts +197 -0
  120. package/dist/tools/memory-graph.d.ts.map +1 -0
  121. package/dist/tools/memory-graph.js +545 -0
  122. package/dist/tools/memory-graph.js.map +1 -0
  123. package/dist/tools/messages.d.ts +12 -0
  124. package/dist/tools/messages.d.ts.map +1 -1
  125. package/dist/tools/messages.js +12 -0
  126. package/dist/tools/messages.js.map +1 -1
  127. package/dist/tools/moltbook.d.ts +564 -0
  128. package/dist/tools/moltbook.d.ts.map +1 -0
  129. package/dist/tools/moltbook.js +792 -0
  130. package/dist/tools/moltbook.js.map +1 -0
  131. package/dist/tools/ops.d.ts +219 -0
  132. package/dist/tools/ops.d.ts.map +1 -0
  133. package/dist/tools/ops.js +360 -0
  134. package/dist/tools/ops.js.map +1 -0
  135. package/dist/tools/schedules.d.ts +196 -0
  136. package/dist/tools/schedules.d.ts.map +1 -0
  137. package/dist/tools/schedules.js +264 -0
  138. package/dist/tools/schedules.js.map +1 -0
  139. package/dist/tools/services.d.ts +6 -0
  140. package/dist/tools/services.d.ts.map +1 -1
  141. package/dist/tools/services.js +6 -0
  142. package/dist/tools/services.js.map +1 -1
  143. package/dist/tools/tasks.d.ts +45 -0
  144. package/dist/tools/tasks.d.ts.map +1 -1
  145. package/dist/tools/tasks.js +49 -4
  146. package/dist/tools/tasks.js.map +1 -1
  147. package/dist/tools/tiers.d.ts +39 -0
  148. package/dist/tools/tiers.d.ts.map +1 -0
  149. package/dist/tools/tiers.js +138 -0
  150. package/dist/tools/tiers.js.map +1 -0
  151. package/dist/tools/unified-agents.d.ts +62 -0
  152. package/dist/tools/unified-agents.d.ts.map +1 -0
  153. package/dist/tools/unified-agents.js +147 -0
  154. package/dist/tools/unified-agents.js.map +1 -0
  155. package/dist/tools/web-eval.d.ts +172 -0
  156. package/dist/tools/web-eval.d.ts.map +1 -0
  157. package/dist/tools/web-eval.js +347 -0
  158. package/dist/tools/web-eval.js.map +1 -0
  159. package/dist/tools/workflow.d.ts +171 -0
  160. package/dist/tools/workflow.d.ts.map +1 -0
  161. package/dist/tools/workflow.js +518 -0
  162. package/dist/tools/workflow.js.map +1 -0
  163. package/package.json +8 -3
@@ -0,0 +1,265 @@
1
+ /**
2
+ * Memory Graph MCP Tools Tests — Phase 4
3
+ *
4
+ * Tests for graph-based memory storage, semantic query,
5
+ * timeline, and context aggregation.
6
+ */
7
+ import { describe, it, expect, vi, beforeEach, afterAll } from 'vitest';
8
+ // Mock global fetch
9
+ const mockFetch = vi.fn();
10
+ vi.stubGlobal('fetch', mockFetch);
11
+ // Clear env to force local-only mode
12
+ const originalEnv = { ...process.env };
13
+ // ============================================
14
+ // Store Memory
15
+ // ============================================
16
+ describe('MemoryGraph: Store', () => {
17
+ beforeEach(() => {
18
+ vi.resetAllMocks();
19
+ // Ensure no MEM0_API_KEY for local-only tests
20
+ delete process.env.MEM0_API_KEY;
21
+ });
22
+ afterAll(() => {
23
+ process.env = originalEnv;
24
+ });
25
+ it('stores memory locally when Mem0 is not configured', async () => {
26
+ // Re-import to get fresh module state
27
+ const { handleMemoryGraphStore } = await import('../tools/memory-graph.js');
28
+ const result = await handleMemoryGraphStore({}, {
29
+ content: 'Decided to use BigQuery append-only pattern for all tables',
30
+ category: 'project_decisions',
31
+ project: 'dobby',
32
+ tags: ['database', 'architecture'],
33
+ });
34
+ const data = JSON.parse(result.content[0].text);
35
+ expect(data.status).toBe('stored');
36
+ expect(data.memory_id).toMatch(/^mem_/);
37
+ expect(data.category).toBe('project_decisions');
38
+ expect(data.mem0_synced).toBe(false);
39
+ expect(data.graph_size).toBeGreaterThanOrEqual(1);
40
+ });
41
+ it('stores memory with relationships', async () => {
42
+ const { handleMemoryGraphStore } = await import('../tools/memory-graph.js');
43
+ const result = await handleMemoryGraphStore({}, {
44
+ content: 'Switched from PostgreSQL to BigQuery',
45
+ category: 'project_decisions',
46
+ related_to: ['mem_previous_123'],
47
+ relationship_type: 'supersedes',
48
+ });
49
+ const data = JSON.parse(result.content[0].text);
50
+ expect(data.status).toBe('stored');
51
+ expect(data.relationships).toHaveLength(1);
52
+ expect(data.relationships[0].type).toBe('supersedes');
53
+ expect(data.relationships[0].target_id).toBe('mem_previous_123');
54
+ });
55
+ it('defaults category to project_decisions', async () => {
56
+ const { handleMemoryGraphStore } = await import('../tools/memory-graph.js');
57
+ const result = await handleMemoryGraphStore({}, {
58
+ content: 'Some important decision',
59
+ });
60
+ const data = JSON.parse(result.content[0].text);
61
+ expect(data.category).toBe('project_decisions');
62
+ });
63
+ it('defaults relationship type to related', async () => {
64
+ const { handleMemoryGraphStore } = await import('../tools/memory-graph.js');
65
+ const result = await handleMemoryGraphStore({}, {
66
+ content: 'Related context',
67
+ related_to: ['other_mem'],
68
+ });
69
+ const data = JSON.parse(result.content[0].text);
70
+ expect(data.relationships[0].type).toBe('related');
71
+ });
72
+ });
73
+ // ============================================
74
+ // Query Memory
75
+ // ============================================
76
+ describe('MemoryGraph: Query', () => {
77
+ beforeEach(() => {
78
+ vi.resetAllMocks();
79
+ delete process.env.MEM0_API_KEY;
80
+ });
81
+ it('returns empty results when graph is empty', async () => {
82
+ // Need fresh import, but previous tests may have populated graph
83
+ const { handleMemoryGraphQuery } = await import('../tools/memory-graph.js');
84
+ const result = await handleMemoryGraphQuery({}, {
85
+ query: 'something that definitely does not exist xyz123',
86
+ });
87
+ const data = JSON.parse(result.content[0].text);
88
+ // Either empty results or non-matching
89
+ expect(data.query).toBe('something that definitely does not exist xyz123');
90
+ });
91
+ it('searches local graph cache by keyword', async () => {
92
+ const { handleMemoryGraphStore, handleMemoryGraphQuery } = await import('../tools/memory-graph.js');
93
+ // Store a memory first
94
+ await handleMemoryGraphStore({}, {
95
+ content: 'Authentication uses JWT tokens with 30-day expiry',
96
+ category: 'conventions',
97
+ project: 'dobby',
98
+ tags: ['auth', 'jwt'],
99
+ });
100
+ // Query for it
101
+ const result = await handleMemoryGraphQuery({}, {
102
+ query: 'authentication JWT',
103
+ project: 'dobby',
104
+ });
105
+ const data = JSON.parse(result.content[0].text);
106
+ expect(data.results.length).toBeGreaterThanOrEqual(1);
107
+ expect(data.results[0].memory).toContain('JWT');
108
+ expect(data.results[0].source).toBe('local_graph');
109
+ });
110
+ it('respects depth and limit parameters', async () => {
111
+ const { handleMemoryGraphQuery } = await import('../tools/memory-graph.js');
112
+ const result = await handleMemoryGraphQuery({}, {
113
+ query: 'authentication',
114
+ depth: 2,
115
+ limit: 3,
116
+ });
117
+ const data = JSON.parse(result.content[0].text);
118
+ expect(data.depth).toBe(2);
119
+ // Results should not exceed limit
120
+ expect(data.results?.length || 0).toBeLessThanOrEqual(3);
121
+ });
122
+ it('caps depth at 3', async () => {
123
+ const { handleMemoryGraphStore, handleMemoryGraphQuery } = await import('../tools/memory-graph.js');
124
+ // Store a memory with "depth" keyword so we get results (which include depth field)
125
+ await handleMemoryGraphStore({}, {
126
+ content: 'Testing depth cap behavior in graph traversal',
127
+ category: 'conventions',
128
+ });
129
+ const result = await handleMemoryGraphQuery({}, {
130
+ query: 'depth traversal',
131
+ depth: 10,
132
+ });
133
+ const data = JSON.parse(result.content[0].text);
134
+ expect(data.depth).toBe(3);
135
+ });
136
+ it('filters by category', async () => {
137
+ const { handleMemoryGraphStore, handleMemoryGraphQuery } = await import('../tools/memory-graph.js');
138
+ await handleMemoryGraphStore({}, {
139
+ content: 'Always use vitest for frontend testing',
140
+ category: 'conventions',
141
+ });
142
+ await handleMemoryGraphStore({}, {
143
+ content: 'Bug in vitest mock setup',
144
+ category: 'bug_history',
145
+ });
146
+ const result = await handleMemoryGraphQuery({}, {
147
+ query: 'vitest',
148
+ category: 'conventions',
149
+ });
150
+ const data = JSON.parse(result.content[0].text);
151
+ const localResults = (data.results || []).filter((r) => r.source === 'local_graph');
152
+ for (const r of localResults) {
153
+ expect(r.category).toBe('conventions');
154
+ }
155
+ });
156
+ });
157
+ // ============================================
158
+ // Timeline
159
+ // ============================================
160
+ describe('MemoryGraph: Timeline', () => {
161
+ beforeEach(() => {
162
+ vi.resetAllMocks();
163
+ delete process.env.MEM0_API_KEY;
164
+ });
165
+ it('returns timeline for a topic', async () => {
166
+ const { handleMemoryGraphStore, handleMemoryGraphTimeline } = await import('../tools/memory-graph.js');
167
+ // Store some timeline entries
168
+ await handleMemoryGraphStore({}, {
169
+ content: 'Initial database schema design for authentication',
170
+ category: 'architecture',
171
+ tags: ['database'],
172
+ });
173
+ const result = await handleMemoryGraphTimeline({}, {
174
+ topic: 'database',
175
+ });
176
+ const data = JSON.parse(result.content[0].text);
177
+ expect(data.topic).toBe('database');
178
+ expect(data.timeline).toBeDefined();
179
+ expect(Array.isArray(data.timeline)).toBe(true);
180
+ });
181
+ it('returns empty timeline with helpful note', async () => {
182
+ const { handleMemoryGraphTimeline } = await import('../tools/memory-graph.js');
183
+ const result = await handleMemoryGraphTimeline({}, {
184
+ topic: 'nonexistent_unique_topic_abc',
185
+ });
186
+ const data = JSON.parse(result.content[0].text);
187
+ expect(data.total_entries).toBe(0);
188
+ expect(data.note).toContain('No timeline entries');
189
+ });
190
+ it('respects limit parameter', async () => {
191
+ const { handleMemoryGraphTimeline } = await import('../tools/memory-graph.js');
192
+ const result = await handleMemoryGraphTimeline({}, {
193
+ topic: 'test',
194
+ limit: 5,
195
+ });
196
+ const data = JSON.parse(result.content[0].text);
197
+ expect(data.timeline.length).toBeLessThanOrEqual(5);
198
+ });
199
+ });
200
+ // ============================================
201
+ // Context Aggregation
202
+ // ============================================
203
+ describe('MemoryGraph: Context', () => {
204
+ beforeEach(() => {
205
+ vi.resetAllMocks();
206
+ delete process.env.MEM0_API_KEY;
207
+ });
208
+ it('returns context package with local memories', async () => {
209
+ const { handleMemoryGraphStore, handleMemoryGraphContext } = await import('../tools/memory-graph.js');
210
+ await handleMemoryGraphStore({}, {
211
+ content: 'API routes follow RESTful conventions with /api/v1/ prefix',
212
+ category: 'conventions',
213
+ tags: ['api'],
214
+ });
215
+ const result = await handleMemoryGraphContext({}, {
216
+ task_title: 'Add new API endpoint for user management',
217
+ });
218
+ const data = JSON.parse(result.content[0].text);
219
+ expect(data.task).toBe('Add new API endpoint for user management');
220
+ expect(data.gathered_at).toBeTruthy();
221
+ expect(data.summary).toBeDefined();
222
+ expect(data.summary.total_memories_found).toBeGreaterThanOrEqual(0);
223
+ expect(data.summary.categories_searched).toContain('project_decisions');
224
+ });
225
+ it('includes mem0 not configured note', async () => {
226
+ const { handleMemoryGraphContext } = await import('../tools/memory-graph.js');
227
+ const result = await handleMemoryGraphContext({}, {
228
+ task_title: 'Some task',
229
+ });
230
+ const data = JSON.parse(result.content[0].text);
231
+ expect(data.mem0_configured).toBe(false);
232
+ expect(data.note).toContain('MEM0_API_KEY');
233
+ });
234
+ it('includes project filter', async () => {
235
+ const { handleMemoryGraphContext } = await import('../tools/memory-graph.js');
236
+ const result = await handleMemoryGraphContext({}, {
237
+ task_title: 'Fix auth bug',
238
+ project: 'dobby',
239
+ });
240
+ const data = JSON.parse(result.content[0].text);
241
+ expect(data.project).toBe('dobby');
242
+ });
243
+ });
244
+ // ============================================
245
+ // Tool Registration
246
+ // ============================================
247
+ describe('MemoryGraph: Tool Registration', () => {
248
+ it('all memory graph tools are in allTools', async () => {
249
+ const { allTools } = await import('../tools/index.js');
250
+ expect(allTools.memory_graph_store).toBeDefined();
251
+ expect(allTools.memory_graph_query).toBeDefined();
252
+ expect(allTools.memory_graph_timeline).toBeDefined();
253
+ expect(allTools.memory_graph_context).toBeDefined();
254
+ });
255
+ it('memory graph tools have correct schemas', async () => {
256
+ const { memoryGraphTools } = await import('../tools/memory-graph.js');
257
+ for (const [name, tool] of Object.entries(memoryGraphTools)) {
258
+ expect(tool.name).toBe(name);
259
+ expect(tool.description).toBeTruthy();
260
+ expect(tool.inputSchema.type).toBe('object');
261
+ expect(tool.inputSchema.properties).toBeDefined();
262
+ }
263
+ });
264
+ });
265
+ //# sourceMappingURL=memory-graph-tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-graph-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/memory-graph-tools.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAExE,oBAAoB;AACpB,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC1B,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAElC,qCAAqC;AACrC,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAEvC,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,8CAA8C;QAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,sCAAsC;QACtC,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACrD,OAAO,EAAE,4DAA4D;YACrE,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC;SACnC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACrD,OAAO,EAAE,sCAAsC;YAC/C,QAAQ,EAAE,mBAAmB;YAC7B,UAAU,EAAE,CAAC,kBAAkB,CAAC;YAChC,iBAAiB,EAAE,YAAY;SAChC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACrD,OAAO,EAAE,yBAAyB;SACnC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACrD,OAAO,EAAE,iBAAiB;YAC1B,UAAU,EAAE,CAAC,WAAW,CAAC;SAC1B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,iEAAiE;QACjE,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACrD,KAAK,EAAE,iDAAiD;SACzD,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,uCAAuC;QACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAEpG,uBAAuB;QACvB,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACtC,OAAO,EAAE,mDAAmD;YAC5D,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;SACtB,CAAC,CAAC;QAEH,eAAe;QACf,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACrD,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACrD,KAAK,EAAE,gBAAgB;YACvB,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,kCAAkC;QAClC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAEpG,oFAAoF;QACpF,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACtC,OAAO,EAAE,+CAA+C;YACxD,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACrD,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAEpG,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACtC,OAAO,EAAE,wCAAwC;YACjD,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACtC,OAAO,EAAE,0BAA0B;YACnC,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACrD,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;QACzF,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+CAA+C;AAC/C,WAAW;AACX,+CAA+C;AAE/C,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAEvG,8BAA8B;QAC9B,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACtC,OAAO,EAAE,mDAAmD;YAC5D,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,CAAC,UAAU,CAAC;SACnB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,EAAS,EAAE;YACxD,KAAK,EAAE,UAAU;SAClB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAE/E,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,EAAS,EAAE;YACxD,KAAK,EAAE,8BAA8B;SACtC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAE/E,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,EAAS,EAAE;YACxD,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+CAA+C;AAC/C,sBAAsB;AACtB,+CAA+C;AAE/C,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAEtG,MAAM,sBAAsB,CAAC,EAAS,EAAE;YACtC,OAAO,EAAE,4DAA4D;YACrE,QAAQ,EAAE,aAAa;YACvB,IAAI,EAAE,CAAC,KAAK,CAAC;SACd,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,EAAS,EAAE;YACvD,UAAU,EAAE,0CAA0C;SACvD,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAE9E,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,EAAS,EAAE;YACvD,UAAU,EAAE,WAAW;SACxB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAE9E,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,EAAS,EAAE;YACvD,UAAU,EAAE,cAAc;YAC1B,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+CAA+C;AAC/C,oBAAoB;AACpB,+CAA+C;AAE/C,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAEvD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAEtE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Schedule MCP Tools Tests
3
+ *
4
+ * Tests for scheduled agent task execution:
5
+ * create_schedule, list_schedules, pause_schedule, delete_schedule
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=schedule-tools.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/schedule-tools.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,290 @@
1
+ /**
2
+ * Schedule MCP Tools Tests
3
+ *
4
+ * Tests for scheduled agent task execution:
5
+ * create_schedule, list_schedules, pause_schedule, delete_schedule
6
+ */
7
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
8
+ // Mock DobbyClient
9
+ const mockClient = {
10
+ apiUrl: 'http://localhost:3000',
11
+ apiKey: 'test-api-key',
12
+ createSchedule: vi.fn(),
13
+ listSchedules: vi.fn(),
14
+ pauseSchedule: vi.fn(),
15
+ deleteSchedule: vi.fn(),
16
+ };
17
+ // ============================================
18
+ // Create Schedule
19
+ // ============================================
20
+ describe('Schedule: Create Schedule', () => {
21
+ beforeEach(() => {
22
+ vi.resetAllMocks();
23
+ });
24
+ it('creates a daily recurring schedule', async () => {
25
+ const { handleCreateSchedule } = await import('../tools/schedules.js');
26
+ mockClient.createSchedule.mockResolvedValueOnce({
27
+ schedule: {
28
+ id: 'sched_abc123',
29
+ name: 'Daily code review',
30
+ scheduleType: 'recurring',
31
+ scheduleDescription: 'Daily at 09:00',
32
+ nextRunAt: '2026-03-06T09:00:00.000Z',
33
+ overlapPolicy: 'skip',
34
+ taskTitle: 'Review pending PRs',
35
+ },
36
+ });
37
+ const result = await handleCreateSchedule(mockClient, {
38
+ name: 'Daily code review',
39
+ task_title: 'Review pending PRs',
40
+ task_description: 'Review all open pull requests and provide feedback',
41
+ schedule_type: 'recurring',
42
+ frequency: 'daily',
43
+ time: '09:00',
44
+ timezone: 'Asia/Jerusalem',
45
+ });
46
+ expect(mockClient.createSchedule).toHaveBeenCalledOnce();
47
+ expect(result.content[0].text).toContain('Schedule created successfully');
48
+ expect(result.content[0].text).toContain('sched_abc123');
49
+ expect(result.content[0].text).toContain('Daily at 09:00');
50
+ });
51
+ it('creates a weekly recurring schedule', async () => {
52
+ const { handleCreateSchedule } = await import('../tools/schedules.js');
53
+ mockClient.createSchedule.mockResolvedValueOnce({
54
+ schedule: {
55
+ id: 'sched_def456',
56
+ name: 'Weekly security scan',
57
+ scheduleType: 'recurring',
58
+ scheduleDescription: 'Every Monday at 08:00',
59
+ nextRunAt: '2026-03-10T08:00:00.000Z',
60
+ overlapPolicy: 'skip',
61
+ taskTitle: 'Security vulnerability scan',
62
+ },
63
+ });
64
+ const result = await handleCreateSchedule(mockClient, {
65
+ name: 'Weekly security scan',
66
+ task_title: 'Security vulnerability scan',
67
+ task_description: 'Run security scan on the entire codebase',
68
+ schedule_type: 'recurring',
69
+ frequency: 'weekly',
70
+ time: '08:00',
71
+ timezone: 'Asia/Jerusalem',
72
+ day_of_week: 1,
73
+ });
74
+ expect(mockClient.createSchedule).toHaveBeenCalledOnce();
75
+ const callArgs = mockClient.createSchedule.mock.calls[0][0];
76
+ expect(callArgs.schedule_config.frequency).toBe('weekly');
77
+ expect(callArgs.schedule_config.dayOfWeek).toBe(1);
78
+ expect(result.content[0].text).toContain('sched_def456');
79
+ });
80
+ it('creates a one-time schedule', async () => {
81
+ const { handleCreateSchedule } = await import('../tools/schedules.js');
82
+ mockClient.createSchedule.mockResolvedValueOnce({
83
+ schedule: {
84
+ id: 'sched_onetime1',
85
+ name: 'Release day deploy check',
86
+ scheduleType: 'one_time',
87
+ scheduleDescription: null,
88
+ nextRunAt: '2026-03-15T14:00:00.000Z',
89
+ overlapPolicy: 'allow',
90
+ taskTitle: 'Pre-deployment checklist',
91
+ },
92
+ });
93
+ const result = await handleCreateSchedule(mockClient, {
94
+ name: 'Release day deploy check',
95
+ task_title: 'Pre-deployment checklist',
96
+ task_description: 'Verify all systems before v2.0 deployment',
97
+ schedule_type: 'one_time',
98
+ schedule_at: '2026-03-15T14:00:00.000Z',
99
+ overlap_policy: 'allow',
100
+ });
101
+ expect(mockClient.createSchedule).toHaveBeenCalledOnce();
102
+ const callArgs = mockClient.createSchedule.mock.calls[0][0];
103
+ expect(callArgs.schedule_type).toBe('one_time');
104
+ expect(callArgs.schedule_at).toBe('2026-03-15T14:00:00.000Z');
105
+ expect(callArgs.overlap_policy).toBe('allow');
106
+ expect(result.content[0].text).toContain('sched_onetime1');
107
+ });
108
+ it('uses default values when optional params omitted', async () => {
109
+ const { handleCreateSchedule } = await import('../tools/schedules.js');
110
+ mockClient.createSchedule.mockResolvedValueOnce({
111
+ schedule: {
112
+ id: 'sched_default1',
113
+ name: 'Test schedule',
114
+ scheduleType: 'recurring',
115
+ scheduleDescription: 'Daily at 09:00',
116
+ nextRunAt: '2026-03-06T09:00:00.000Z',
117
+ overlapPolicy: 'skip',
118
+ taskTitle: 'Test task',
119
+ },
120
+ });
121
+ const result = await handleCreateSchedule(mockClient, {
122
+ name: 'Test schedule',
123
+ task_title: 'Test task',
124
+ task_description: 'A test description',
125
+ schedule_type: 'recurring',
126
+ });
127
+ const callArgs = mockClient.createSchedule.mock.calls[0][0];
128
+ expect(callArgs.task_priority).toBe('medium');
129
+ expect(callArgs.overlap_policy).toBe('skip');
130
+ expect(callArgs.schedule_config.frequency).toBe('daily');
131
+ expect(callArgs.schedule_config.time).toBe('09:00');
132
+ expect(callArgs.schedule_config.timezone).toBe('Asia/Jerusalem');
133
+ });
134
+ });
135
+ // ============================================
136
+ // List Schedules
137
+ // ============================================
138
+ describe('Schedule: List Schedules', () => {
139
+ beforeEach(() => {
140
+ vi.resetAllMocks();
141
+ });
142
+ it('lists schedules with status and run info', async () => {
143
+ const { handleListSchedules } = await import('../tools/schedules.js');
144
+ mockClient.listSchedules.mockResolvedValueOnce({
145
+ schedules: [
146
+ {
147
+ id: 'sched_abc123',
148
+ name: 'Daily code review',
149
+ enabled: true,
150
+ paused: false,
151
+ scheduleDescription: 'Daily at 09:00',
152
+ nextRunAt: '2026-03-06T09:00:00.000Z',
153
+ lastRunAt: '2026-03-05T09:00:00.000Z',
154
+ lastRunStatus: 'success',
155
+ totalRuns: 42,
156
+ totalSuccesses: 41,
157
+ totalFailures: 1,
158
+ },
159
+ {
160
+ id: 'sched_def456',
161
+ name: 'Weekly security scan',
162
+ enabled: true,
163
+ paused: true,
164
+ scheduleDescription: 'Every Monday at 08:00',
165
+ nextRunAt: null,
166
+ lastRunAt: '2026-03-03T08:00:00.000Z',
167
+ lastRunStatus: 'failed',
168
+ totalRuns: 10,
169
+ totalSuccesses: 8,
170
+ totalFailures: 2,
171
+ },
172
+ ],
173
+ });
174
+ const result = await handleListSchedules(mockClient, {});
175
+ expect(mockClient.listSchedules).toHaveBeenCalledOnce();
176
+ expect(result.content[0].text).toContain('Agent Schedules (2)');
177
+ expect(result.content[0].text).toContain('Daily code review');
178
+ expect(result.content[0].text).toContain('Weekly security scan');
179
+ expect(result.content[0].text).toContain('Active');
180
+ expect(result.content[0].text).toContain('Paused');
181
+ });
182
+ it('shows empty state when no schedules', async () => {
183
+ const { handleListSchedules } = await import('../tools/schedules.js');
184
+ mockClient.listSchedules.mockResolvedValueOnce({
185
+ schedules: [],
186
+ });
187
+ const result = await handleListSchedules(mockClient, {});
188
+ expect(result.content[0].text).toContain('No agent schedules found');
189
+ });
190
+ it('passes filter options to client', async () => {
191
+ const { handleListSchedules } = await import('../tools/schedules.js');
192
+ mockClient.listSchedules.mockResolvedValueOnce({ schedules: [] });
193
+ await handleListSchedules(mockClient, {
194
+ enabled_only: true,
195
+ limit: 5,
196
+ });
197
+ expect(mockClient.listSchedules).toHaveBeenCalledWith({
198
+ enabled_only: true,
199
+ limit: 5,
200
+ });
201
+ });
202
+ });
203
+ // ============================================
204
+ // Pause Schedule
205
+ // ============================================
206
+ describe('Schedule: Pause/Resume', () => {
207
+ beforeEach(() => {
208
+ vi.resetAllMocks();
209
+ });
210
+ it('pauses a schedule with reason', async () => {
211
+ const { handlePauseSchedule } = await import('../tools/schedules.js');
212
+ mockClient.pauseSchedule.mockResolvedValueOnce({ success: true });
213
+ const result = await handlePauseSchedule(mockClient, {
214
+ schedule_id: 'sched_abc123',
215
+ action: 'pause',
216
+ reason: 'Holiday freeze',
217
+ });
218
+ expect(mockClient.pauseSchedule).toHaveBeenCalledWith({
219
+ schedule_id: 'sched_abc123',
220
+ action: 'pause',
221
+ reason: 'Holiday freeze',
222
+ });
223
+ expect(result.content[0].text).toContain('paused');
224
+ expect(result.content[0].text).toContain('Holiday freeze');
225
+ });
226
+ it('resumes a paused schedule', async () => {
227
+ const { handlePauseSchedule } = await import('../tools/schedules.js');
228
+ mockClient.pauseSchedule.mockResolvedValueOnce({ success: true });
229
+ const result = await handlePauseSchedule(mockClient, {
230
+ schedule_id: 'sched_abc123',
231
+ action: 'resume',
232
+ });
233
+ expect(mockClient.pauseSchedule).toHaveBeenCalledWith({
234
+ schedule_id: 'sched_abc123',
235
+ action: 'resume',
236
+ reason: undefined,
237
+ });
238
+ expect(result.content[0].text).toContain('resumed');
239
+ });
240
+ });
241
+ // ============================================
242
+ // Delete Schedule
243
+ // ============================================
244
+ describe('Schedule: Delete', () => {
245
+ beforeEach(() => {
246
+ vi.resetAllMocks();
247
+ });
248
+ it('deletes a schedule by ID', async () => {
249
+ const { handleDeleteSchedule } = await import('../tools/schedules.js');
250
+ mockClient.deleteSchedule.mockResolvedValueOnce({ success: true });
251
+ const result = await handleDeleteSchedule(mockClient, {
252
+ schedule_id: 'sched_abc123',
253
+ });
254
+ expect(mockClient.deleteSchedule).toHaveBeenCalledWith('sched_abc123');
255
+ expect(result.content[0].text).toContain('deleted');
256
+ expect(result.content[0].text).toContain('sched_abc123');
257
+ });
258
+ });
259
+ // ============================================
260
+ // Tool Definitions
261
+ // ============================================
262
+ describe('Schedule: Tool Definitions', () => {
263
+ it('exports all 4 schedule tools', async () => {
264
+ const { scheduleTools } = await import('../tools/schedules.js');
265
+ expect(scheduleTools.create_schedule).toBeDefined();
266
+ expect(scheduleTools.list_schedules).toBeDefined();
267
+ expect(scheduleTools.pause_schedule).toBeDefined();
268
+ expect(scheduleTools.delete_schedule).toBeDefined();
269
+ });
270
+ it('create_schedule has correct required fields', async () => {
271
+ const { scheduleTools } = await import('../tools/schedules.js');
272
+ const schema = scheduleTools.create_schedule.inputSchema;
273
+ expect(schema.required).toContain('name');
274
+ expect(schema.required).toContain('task_title');
275
+ expect(schema.required).toContain('task_description');
276
+ expect(schema.required).toContain('schedule_type');
277
+ });
278
+ it('pause_schedule requires schedule_id and action', async () => {
279
+ const { scheduleTools } = await import('../tools/schedules.js');
280
+ const schema = scheduleTools.pause_schedule.inputSchema;
281
+ expect(schema.required).toContain('schedule_id');
282
+ expect(schema.required).toContain('action');
283
+ });
284
+ it('delete_schedule requires schedule_id', async () => {
285
+ const { scheduleTools } = await import('../tools/schedules.js');
286
+ const schema = scheduleTools.delete_schedule.inputSchema;
287
+ expect(schema.required).toContain('schedule_id');
288
+ });
289
+ });
290
+ //# sourceMappingURL=schedule-tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/schedule-tools.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Tool Tier Filtering Tests
3
+ *
4
+ * Verifies tier definitions and filtering logic.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=tiers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiers.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tiers.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}