vidpipe 1.0.0 → 1.2.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 (168) hide show
  1. package/README.md +35 -1
  2. package/dist/agents/BaseAgent.d.ts +17 -17
  3. package/dist/agents/BaseAgent.d.ts.map +1 -1
  4. package/dist/agents/BaseAgent.js +41 -47
  5. package/dist/agents/BaseAgent.js.map +1 -1
  6. package/dist/agents/SilenceRemovalAgent.d.ts.map +1 -1
  7. package/dist/agents/SilenceRemovalAgent.js +3 -2
  8. package/dist/agents/SilenceRemovalAgent.js.map +1 -1
  9. package/dist/commands/doctor.d.ts +4 -0
  10. package/dist/commands/doctor.d.ts.map +1 -0
  11. package/dist/commands/doctor.js +212 -0
  12. package/dist/commands/doctor.js.map +1 -0
  13. package/dist/config/environment.d.ts +3 -0
  14. package/dist/config/environment.d.ts.map +1 -1
  15. package/dist/config/environment.js +5 -2
  16. package/dist/config/environment.js.map +1 -1
  17. package/dist/config/ffmpegResolver.d.ts +3 -0
  18. package/dist/config/ffmpegResolver.d.ts.map +1 -0
  19. package/dist/config/ffmpegResolver.js +37 -0
  20. package/dist/config/ffmpegResolver.js.map +1 -0
  21. package/dist/config/pricing.d.ts +34 -0
  22. package/dist/config/pricing.d.ts.map +1 -0
  23. package/dist/config/pricing.js +71 -0
  24. package/dist/config/pricing.js.map +1 -0
  25. package/dist/index.js +12 -4
  26. package/dist/index.js.map +1 -1
  27. package/dist/pipeline.d.ts.map +1 -1
  28. package/dist/pipeline.js +37 -0
  29. package/dist/pipeline.js.map +1 -1
  30. package/dist/providers/ClaudeProvider.d.ts +14 -0
  31. package/dist/providers/ClaudeProvider.d.ts.map +1 -0
  32. package/dist/providers/ClaudeProvider.js +182 -0
  33. package/dist/providers/ClaudeProvider.js.map +1 -0
  34. package/dist/providers/CopilotProvider.d.ts +17 -0
  35. package/dist/providers/CopilotProvider.d.ts.map +1 -0
  36. package/dist/providers/CopilotProvider.js +149 -0
  37. package/dist/providers/CopilotProvider.js.map +1 -0
  38. package/dist/providers/OpenAIProvider.d.ts +14 -0
  39. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  40. package/dist/providers/OpenAIProvider.js +175 -0
  41. package/dist/providers/OpenAIProvider.js.map +1 -0
  42. package/dist/providers/index.d.ts +18 -0
  43. package/dist/providers/index.d.ts.map +1 -0
  44. package/dist/providers/index.js +61 -0
  45. package/dist/providers/index.js.map +1 -0
  46. package/dist/providers/types.d.ts +112 -0
  47. package/dist/providers/types.d.ts.map +1 -0
  48. package/dist/providers/types.js +8 -0
  49. package/dist/providers/types.js.map +1 -0
  50. package/dist/services/costTracker.d.ts +63 -0
  51. package/dist/services/costTracker.d.ts.map +1 -0
  52. package/dist/services/costTracker.js +137 -0
  53. package/dist/services/costTracker.js.map +1 -0
  54. package/dist/services/videoIngestion.d.ts.map +1 -1
  55. package/dist/services/videoIngestion.js +4 -3
  56. package/dist/services/videoIngestion.js.map +1 -1
  57. package/dist/tools/ffmpeg/aspectRatio.d.ts.map +1 -1
  58. package/dist/tools/ffmpeg/aspectRatio.js +2 -1
  59. package/dist/tools/ffmpeg/aspectRatio.js.map +1 -1
  60. package/dist/tools/ffmpeg/audioExtraction.d.ts.map +1 -1
  61. package/dist/tools/ffmpeg/audioExtraction.js +3 -2
  62. package/dist/tools/ffmpeg/audioExtraction.js.map +1 -1
  63. package/dist/tools/ffmpeg/captionBurning.d.ts.map +1 -1
  64. package/dist/tools/ffmpeg/captionBurning.js +2 -1
  65. package/dist/tools/ffmpeg/captionBurning.js.map +1 -1
  66. package/dist/tools/ffmpeg/clipExtraction.d.ts +16 -1
  67. package/dist/tools/ffmpeg/clipExtraction.d.ts.map +1 -1
  68. package/dist/tools/ffmpeg/clipExtraction.js +44 -7
  69. package/dist/tools/ffmpeg/clipExtraction.js.map +1 -1
  70. package/dist/tools/ffmpeg/faceDetection.d.ts.map +1 -1
  71. package/dist/tools/ffmpeg/faceDetection.js +3 -2
  72. package/dist/tools/ffmpeg/faceDetection.js.map +1 -1
  73. package/dist/tools/ffmpeg/frameCapture.d.ts.map +1 -1
  74. package/dist/tools/ffmpeg/frameCapture.js +3 -2
  75. package/dist/tools/ffmpeg/frameCapture.js.map +1 -1
  76. package/dist/tools/ffmpeg/silenceDetection.d.ts.map +1 -1
  77. package/dist/tools/ffmpeg/silenceDetection.js +2 -1
  78. package/dist/tools/ffmpeg/silenceDetection.js.map +1 -1
  79. package/dist/tools/ffmpeg/singlePassEdit.d.ts.map +1 -1
  80. package/dist/tools/ffmpeg/singlePassEdit.js +2 -1
  81. package/dist/tools/ffmpeg/singlePassEdit.js.map +1 -1
  82. package/dist/types/index.d.ts +1 -1
  83. package/dist/types/index.js +1 -1
  84. package/package.json +67 -63
  85. package/dist/__tests__/agents.test.d.ts +0 -2
  86. package/dist/__tests__/agents.test.d.ts.map +0 -1
  87. package/dist/__tests__/agents.test.js +0 -434
  88. package/dist/__tests__/agents.test.js.map +0 -1
  89. package/dist/__tests__/aspectRatio.test.d.ts +0 -2
  90. package/dist/__tests__/aspectRatio.test.d.ts.map +0 -1
  91. package/dist/__tests__/aspectRatio.test.js +0 -406
  92. package/dist/__tests__/aspectRatio.test.js.map +0 -1
  93. package/dist/__tests__/captionGenerator.test.d.ts +0 -2
  94. package/dist/__tests__/captionGenerator.test.d.ts.map +0 -1
  95. package/dist/__tests__/captionGenerator.test.js +0 -435
  96. package/dist/__tests__/captionGenerator.test.js.map +0 -1
  97. package/dist/__tests__/config.test.d.ts +0 -2
  98. package/dist/__tests__/config.test.d.ts.map +0 -1
  99. package/dist/__tests__/config.test.js +0 -81
  100. package/dist/__tests__/config.test.js.map +0 -1
  101. package/dist/__tests__/faceDetection.test.d.ts +0 -2
  102. package/dist/__tests__/faceDetection.test.d.ts.map +0 -1
  103. package/dist/__tests__/faceDetection.test.js +0 -372
  104. package/dist/__tests__/faceDetection.test.js.map +0 -1
  105. package/dist/__tests__/ffmpegTools.test.d.ts +0 -2
  106. package/dist/__tests__/ffmpegTools.test.d.ts.map +0 -1
  107. package/dist/__tests__/ffmpegTools.test.js +0 -464
  108. package/dist/__tests__/ffmpegTools.test.js.map +0 -1
  109. package/dist/__tests__/integration/captionBurn.test.d.ts +0 -2
  110. package/dist/__tests__/integration/captionBurn.test.d.ts.map +0 -1
  111. package/dist/__tests__/integration/captionBurn.test.js +0 -103
  112. package/dist/__tests__/integration/captionBurn.test.js.map +0 -1
  113. package/dist/__tests__/integration/clipComposite.test.d.ts +0 -2
  114. package/dist/__tests__/integration/clipComposite.test.d.ts.map +0 -1
  115. package/dist/__tests__/integration/clipComposite.test.js +0 -56
  116. package/dist/__tests__/integration/clipComposite.test.js.map +0 -1
  117. package/dist/__tests__/integration/faceDetection.test.d.ts +0 -2
  118. package/dist/__tests__/integration/faceDetection.test.d.ts.map +0 -1
  119. package/dist/__tests__/integration/faceDetection.test.js +0 -85
  120. package/dist/__tests__/integration/faceDetection.test.js.map +0 -1
  121. package/dist/__tests__/integration/ffmpegPipeline.test.d.ts +0 -2
  122. package/dist/__tests__/integration/ffmpegPipeline.test.d.ts.map +0 -1
  123. package/dist/__tests__/integration/ffmpegPipeline.test.js +0 -88
  124. package/dist/__tests__/integration/ffmpegPipeline.test.js.map +0 -1
  125. package/dist/__tests__/integration/fixture.d.ts +0 -19
  126. package/dist/__tests__/integration/fixture.d.ts.map +0 -1
  127. package/dist/__tests__/integration/fixture.js +0 -112
  128. package/dist/__tests__/integration/fixture.js.map +0 -1
  129. package/dist/__tests__/integration/fixture.test.d.ts +0 -2
  130. package/dist/__tests__/integration/fixture.test.d.ts.map +0 -1
  131. package/dist/__tests__/integration/fixture.test.js +0 -27
  132. package/dist/__tests__/integration/fixture.test.js.map +0 -1
  133. package/dist/__tests__/integration/realCaptions.test.d.ts +0 -2
  134. package/dist/__tests__/integration/realCaptions.test.d.ts.map +0 -1
  135. package/dist/__tests__/integration/realCaptions.test.js +0 -226
  136. package/dist/__tests__/integration/realCaptions.test.js.map +0 -1
  137. package/dist/__tests__/integration/realPipeline.test.d.ts +0 -2
  138. package/dist/__tests__/integration/realPipeline.test.d.ts.map +0 -1
  139. package/dist/__tests__/integration/realPipeline.test.js +0 -210
  140. package/dist/__tests__/integration/realPipeline.test.js.map +0 -1
  141. package/dist/__tests__/integration/silenceRemoval.test.d.ts +0 -2
  142. package/dist/__tests__/integration/silenceRemoval.test.d.ts.map +0 -1
  143. package/dist/__tests__/integration/silenceRemoval.test.js +0 -93
  144. package/dist/__tests__/integration/silenceRemoval.test.js.map +0 -1
  145. package/dist/__tests__/pipeline.test.d.ts +0 -2
  146. package/dist/__tests__/pipeline.test.d.ts.map +0 -1
  147. package/dist/__tests__/pipeline.test.js +0 -434
  148. package/dist/__tests__/pipeline.test.js.map +0 -1
  149. package/dist/__tests__/services.test.d.ts +0 -2
  150. package/dist/__tests__/services.test.d.ts.map +0 -1
  151. package/dist/__tests__/services.test.js +0 -655
  152. package/dist/__tests__/services.test.js.map +0 -1
  153. package/dist/__tests__/silenceRemoval.test.d.ts +0 -2
  154. package/dist/__tests__/silenceRemoval.test.d.ts.map +0 -1
  155. package/dist/__tests__/silenceRemoval.test.js +0 -266
  156. package/dist/__tests__/silenceRemoval.test.js.map +0 -1
  157. package/dist/__tests__/singlePassEdit.test.d.ts +0 -2
  158. package/dist/__tests__/singlePassEdit.test.d.ts.map +0 -1
  159. package/dist/__tests__/singlePassEdit.test.js +0 -321
  160. package/dist/__tests__/singlePassEdit.test.js.map +0 -1
  161. package/dist/__tests__/smoke.test.d.ts +0 -2
  162. package/dist/__tests__/smoke.test.d.ts.map +0 -1
  163. package/dist/__tests__/smoke.test.js +0 -8
  164. package/dist/__tests__/smoke.test.js.map +0 -1
  165. package/dist/__tests__/utilities.test.d.ts +0 -2
  166. package/dist/__tests__/utilities.test.d.ts.map +0 -1
  167. package/dist/__tests__/utilities.test.js +0 -268
  168. package/dist/__tests__/utilities.test.js.map +0 -1
@@ -1,434 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- // ── Shared state via vi.hoisted (available to mock factories) ───────────────
3
- const mockState = vi.hoisted(() => {
4
- const state = {
5
- capturedTools: [],
6
- mockSession: {
7
- sendAndWait: async () => ({ data: { content: '' } }),
8
- on: () => { },
9
- destroy: async () => { },
10
- },
11
- };
12
- return state;
13
- });
14
- // ── Mocks — must be declared before imports ─────────────────────────────────
15
- vi.mock('@github/copilot-sdk', () => ({
16
- CopilotClient: function CopilotClientMock() {
17
- return {
18
- createSession: async (opts) => {
19
- mockState.capturedTools.length = 0;
20
- mockState.capturedTools.push(...(opts.tools || []));
21
- return mockState.mockSession;
22
- },
23
- stop: async () => { },
24
- };
25
- },
26
- CopilotSession: function CopilotSessionMock() { },
27
- }));
28
- vi.mock('../config/logger.js', () => ({
29
- default: {
30
- info: vi.fn(),
31
- warn: vi.fn(),
32
- error: vi.fn(),
33
- debug: vi.fn(),
34
- },
35
- }));
36
- vi.mock('../config/brand.js', () => ({
37
- getBrandConfig: () => ({
38
- name: 'TestBrand',
39
- handle: '@test',
40
- tagline: 'test tagline',
41
- voice: { tone: 'friendly', personality: 'helpful', style: 'concise' },
42
- advocacy: { interests: ['testing'], avoids: ['nothing'] },
43
- contentGuidelines: { blogFocus: 'testing focus' },
44
- }),
45
- }));
46
- vi.mock('../config/environment.js', () => ({
47
- getConfig: () => ({ OUTPUT_DIR: '/tmp/test-output' }),
48
- }));
49
- vi.mock('../tools/ffmpeg/clipExtraction.js', () => ({
50
- extractClip: vi.fn().mockResolvedValue(undefined),
51
- extractCompositeClip: vi.fn().mockResolvedValue(undefined),
52
- extractCompositeClipWithTransitions: vi.fn().mockResolvedValue(undefined),
53
- }));
54
- vi.mock('../tools/ffmpeg/captionBurning.js', () => ({
55
- burnCaptions: vi.fn().mockResolvedValue(undefined),
56
- }));
57
- vi.mock('../tools/ffmpeg/aspectRatio.js', () => ({
58
- generatePlatformVariants: vi.fn().mockResolvedValue([]),
59
- }));
60
- vi.mock('../tools/ffmpeg/silenceDetection.js', () => ({
61
- detectSilence: vi.fn().mockResolvedValue([]),
62
- }));
63
- vi.mock('../tools/ffmpeg/singlePassEdit.js', () => ({
64
- singlePassEdit: vi.fn().mockResolvedValue(undefined),
65
- }));
66
- vi.mock('../tools/ffmpeg/frameCapture.js', () => ({
67
- captureFrame: vi.fn().mockResolvedValue(undefined),
68
- }));
69
- vi.mock('../tools/captions/captionGenerator.js', () => ({
70
- generateStyledASSForSegment: vi.fn().mockReturnValue(''),
71
- generateStyledASSForComposite: vi.fn().mockReturnValue(''),
72
- }));
73
- vi.mock('../tools/search/exaClient.js', () => ({
74
- searchWeb: vi.fn().mockResolvedValue([]),
75
- }));
76
- vi.mock('fluent-ffmpeg', () => {
77
- const mock = function () { };
78
- mock.setFfmpegPath = () => { };
79
- mock.setFfprobePath = () => { };
80
- mock.ffprobe = (_p, cb) => cb(null, { format: { duration: 300 } });
81
- return { default: mock };
82
- });
83
- vi.mock('uuid', () => ({
84
- v4: () => 'test-uuid-1234',
85
- }));
86
- vi.mock('slugify', () => ({
87
- default: (s) => s.toLowerCase().replace(/\s+/g, '-'),
88
- }));
89
- vi.mock('fs', async (importOriginal) => {
90
- const actual = (await importOriginal());
91
- return {
92
- ...actual,
93
- default: {
94
- ...actual,
95
- mkdirSync: vi.fn(),
96
- writeFileSync: vi.fn(),
97
- existsSync: vi.fn().mockReturnValue(false),
98
- },
99
- promises: {
100
- mkdir: vi.fn().mockResolvedValue(undefined),
101
- writeFile: vi.fn().mockResolvedValue(undefined),
102
- },
103
- mkdirSync: vi.fn(),
104
- writeFileSync: vi.fn(),
105
- existsSync: vi.fn().mockReturnValue(false),
106
- };
107
- });
108
- // ── Import REAL agents (BaseAgent for construction tests) ───────────────────
109
- import { BaseAgent } from '../agents/BaseAgent.js';
110
- // ── Test helpers ────────────────────────────────────────────────────────────
111
- const mockInvocation = {
112
- sessionId: 's1',
113
- toolCallId: 'tc1',
114
- toolName: 'test',
115
- arguments: {},
116
- };
117
- function findCapturedTool(name) {
118
- const tool = mockState.capturedTools.find((t) => t.name === name);
119
- if (!tool)
120
- throw new Error(`Tool "${name}" not captured — was the agent's run() called?`);
121
- return tool;
122
- }
123
- // ── Mock fixtures ───────────────────────────────────────────────────────────
124
- const mockVideo = {
125
- filename: 'test.mp4',
126
- repoPath: '/tmp/test.mp4',
127
- slug: 'test-video',
128
- videoDir: '/tmp',
129
- duration: 300,
130
- createdAt: new Date(),
131
- };
132
- const mockTranscriptWithWords = {
133
- duration: 300,
134
- text: 'Hello world',
135
- segments: [
136
- {
137
- start: 0,
138
- end: 10,
139
- text: 'Hello world',
140
- words: [
141
- { start: 0, end: 0.5, word: 'Hello' },
142
- { start: 0.6, end: 1.0, word: 'world' },
143
- ],
144
- },
145
- ],
146
- };
147
- const mockTranscript = {
148
- duration: 300,
149
- text: 'Hello world',
150
- segments: [{ start: 0, end: 10, text: 'Hello world' }],
151
- };
152
- const mockSummary = {
153
- title: 'Test',
154
- overview: 'An overview',
155
- keyTopics: ['topic1'],
156
- snapshots: [],
157
- markdownPath: '/tmp/README.md',
158
- };
159
- // ── BaseAgent tests ─────────────────────────────────────────────────────────
160
- describe('BaseAgent construction', () => {
161
- class MinimalAgent extends BaseAgent {
162
- constructor() {
163
- super('Minimal', 'prompt');
164
- }
165
- async handleToolCall(_t, _a) {
166
- return {};
167
- }
168
- }
169
- it('stores agent name and system prompt', () => {
170
- const agent = new MinimalAgent();
171
- expect(agent.agentName).toBe('Minimal');
172
- expect(agent.systemPrompt).toBe('prompt');
173
- });
174
- it('initialises with null client and session', () => {
175
- const agent = new MinimalAgent();
176
- expect(agent.client).toBeNull();
177
- expect(agent.session).toBeNull();
178
- });
179
- it('destroy is safe to call on uninitialised agent', async () => {
180
- const agent = new MinimalAgent();
181
- await expect(agent.destroy()).resolves.toBeUndefined();
182
- });
183
- });
184
- // ── ShortsAgent (REAL) ──────────────────────────────────────────────────────
185
- describe('Real ShortsAgent', () => {
186
- beforeEach(() => {
187
- mockState.capturedTools.length = 0;
188
- });
189
- it('plan_shorts tool: schema, handler stores shorts and returns count', async () => {
190
- const { generateShorts } = await import('../agents/ShortsAgent.js');
191
- // generateShorts calls agent.run() → createSession captures tools
192
- const result = await generateShorts(mockVideo, mockTranscriptWithWords);
193
- // Mock session returns no tool calls, so no shorts planned
194
- expect(result).toEqual([]);
195
- // Verify captured tool
196
- const planTool = findCapturedTool('plan_shorts');
197
- expect(planTool.description).toContain('planned shorts');
198
- // Verify schema
199
- const schema = planTool.parameters;
200
- expect(schema.required).toContain('shorts');
201
- expect(schema.properties.shorts.type).toBe('array');
202
- expect(schema.properties.shorts.items.required).toEqual(expect.arrayContaining(['title', 'description', 'tags', 'segments']));
203
- const segmentSchema = schema.properties.shorts.items.properties.segments.items;
204
- expect(segmentSchema.required).toEqual(expect.arrayContaining(['start', 'end', 'description']));
205
- expect(segmentSchema.properties.start.type).toBe('number');
206
- // Call the REAL handler
207
- const handlerResult = await planTool.handler({
208
- shorts: [
209
- {
210
- title: 'Test Short',
211
- description: 'A test',
212
- tags: ['test'],
213
- segments: [{ start: 5, end: 20, description: 'segment 1' }],
214
- },
215
- {
216
- title: 'Another Short',
217
- description: 'Another test',
218
- tags: ['demo'],
219
- segments: [
220
- { start: 30, end: 45, description: 'part 1' },
221
- { start: 60, end: 75, description: 'part 2' },
222
- ],
223
- },
224
- ],
225
- }, mockInvocation);
226
- expect(handlerResult).toEqual({ success: true, count: 2 });
227
- });
228
- });
229
- // ── SilenceRemovalAgent (REAL) ──────────────────────────────────────────────
230
- describe('Real SilenceRemovalAgent', () => {
231
- beforeEach(() => {
232
- mockState.capturedTools.length = 0;
233
- });
234
- it('decide_removals tool: schema and handler', async () => {
235
- const { removeDeadSilence } = await import('../agents/SilenceRemovalAgent.js');
236
- const { detectSilence } = await import('../tools/ffmpeg/silenceDetection.js');
237
- // Return silence regions ≥ 2s so the agent gets instantiated
238
- detectSilence.mockResolvedValue([
239
- { start: 10, end: 15, duration: 5 },
240
- { start: 30, end: 37, duration: 7 },
241
- ]);
242
- const result = await removeDeadSilence(mockVideo, mockTranscript);
243
- // Mock session doesn't trigger tool calls → no removals → not edited
244
- expect(result.wasEdited).toBe(false);
245
- // Verify captured tool
246
- const removeTool = findCapturedTool('decide_removals');
247
- expect(removeTool.description).toContain('silence regions');
248
- const schema = removeTool.parameters;
249
- expect(schema.required).toContain('removals');
250
- expect(schema.properties.removals.items.required).toEqual(expect.arrayContaining(['start', 'end', 'reason']));
251
- // Call the REAL handler
252
- const handlerResult = await removeTool.handler({
253
- removals: [
254
- { start: 10, end: 15, reason: 'Dead air' },
255
- { start: 30, end: 37, reason: 'Long pause' },
256
- ],
257
- }, mockInvocation);
258
- expect(handlerResult).toEqual({ success: true, count: 2 });
259
- });
260
- });
261
- // ── ChapterAgent (REAL) ─────────────────────────────────────────────────────
262
- describe('Real ChapterAgent', () => {
263
- beforeEach(() => {
264
- mockState.capturedTools.length = 0;
265
- });
266
- it('generate_chapters tool: schema and handler writes files', async () => {
267
- const { generateChapters } = await import('../agents/ChapterAgent.js');
268
- const longVideo = { ...mockVideo, duration: 600 };
269
- const longTranscript = {
270
- ...mockTranscript,
271
- duration: 600,
272
- segments: [
273
- { start: 0, end: 60, text: 'Introduction' },
274
- { start: 60, end: 300, text: 'Main content' },
275
- { start: 300, end: 600, text: 'Conclusion' },
276
- ],
277
- };
278
- // Will throw because mock session doesn't call generate_chapters
279
- try {
280
- await generateChapters(longVideo, longTranscript);
281
- }
282
- catch {
283
- // Expected: "ChapterAgent did not call generate_chapters"
284
- }
285
- const chapterTool = findCapturedTool('generate_chapters');
286
- expect(chapterTool.description).toContain('chapters');
287
- const schema = chapterTool.parameters;
288
- expect(schema.required).toContain('chapters');
289
- expect(schema.properties.chapters.items.required).toEqual(expect.arrayContaining(['timestamp', 'title', 'description']));
290
- // Call the REAL handler
291
- const handlerResult = await chapterTool.handler({
292
- chapters: [
293
- { timestamp: 0, title: 'Introduction', description: 'The beginning' },
294
- { timestamp: 120, title: 'Main Topic', description: 'Core content' },
295
- { timestamp: 450, title: 'Wrap Up', description: 'Conclusion' },
296
- ],
297
- }, mockInvocation);
298
- expect(handlerResult).toContain('Chapters written');
299
- expect(handlerResult).toContain('3 chapters');
300
- });
301
- });
302
- // ── MediumVideoAgent (REAL) ─────────────────────────────────────────────────
303
- describe('Real MediumVideoAgent', () => {
304
- beforeEach(() => {
305
- mockState.capturedTools.length = 0;
306
- });
307
- it('plan_medium_clips tool: schema and handler stores clips', async () => {
308
- const { generateMediumClips } = await import('../agents/MediumVideoAgent.js');
309
- const result = await generateMediumClips(mockVideo, mockTranscriptWithWords);
310
- expect(result).toEqual([]);
311
- const clipTool = findCapturedTool('plan_medium_clips');
312
- const schema = clipTool.parameters;
313
- expect(schema.required).toContain('clips');
314
- expect(schema.properties.clips.items.required).toEqual(expect.arrayContaining(['title', 'description', 'tags', 'segments', 'totalDuration', 'hook', 'topic']));
315
- // Call the REAL handler
316
- const handlerResult = await clipTool.handler({
317
- clips: [
318
- {
319
- title: 'Deep Dive into Testing',
320
- description: 'A complete walkthrough',
321
- tags: ['testing', 'vitest'],
322
- segments: [{ start: 10, end: 90, description: 'Testing basics' }],
323
- totalDuration: 80,
324
- hook: 'Ever wondered how to test?',
325
- topic: 'Testing',
326
- },
327
- ],
328
- }, mockInvocation);
329
- expect(handlerResult).toEqual({ success: true, count: 1 });
330
- });
331
- });
332
- // ── SummaryAgent (REAL) ─────────────────────────────────────────────────────
333
- describe('Real SummaryAgent', () => {
334
- beforeEach(() => {
335
- mockState.capturedTools.length = 0;
336
- });
337
- it('exposes capture_frame and write_summary tools with correct schemas', async () => {
338
- const { generateSummary } = await import('../agents/SummaryAgent.js');
339
- try {
340
- await generateSummary(mockVideo, mockTranscript);
341
- }
342
- catch {
343
- // Expected: "SummaryAgent did not call write_summary"
344
- }
345
- const captureTool = findCapturedTool('capture_frame');
346
- const writeTool = findCapturedTool('write_summary');
347
- // Verify capture_frame schema
348
- const captureSchema = captureTool.parameters;
349
- expect(captureSchema.required).toEqual(expect.arrayContaining(['timestamp', 'description', 'index']));
350
- // Verify write_summary schema
351
- const writeSchema = writeTool.parameters;
352
- expect(writeSchema.required).toEqual(expect.arrayContaining(['markdown', 'title', 'overview', 'keyTopics']));
353
- // Call write_summary REAL handler
354
- const writeResult = await writeTool.handler({
355
- markdown: '# Test Summary\nContent here',
356
- title: 'Test Video',
357
- overview: 'An overview',
358
- keyTopics: ['topic1', 'topic2'],
359
- }, mockInvocation);
360
- expect(writeResult).toContain('Summary written');
361
- });
362
- });
363
- // ── BlogAgent (REAL) ────────────────────────────────────────────────────────
364
- describe('Real BlogAgent', () => {
365
- beforeEach(() => {
366
- mockState.capturedTools.length = 0;
367
- });
368
- it('exposes search_web and write_blog tools; handlers work', async () => {
369
- const { generateBlogPost } = await import('../agents/BlogAgent.js');
370
- try {
371
- await generateBlogPost(mockVideo, mockTranscript, mockSummary);
372
- }
373
- catch {
374
- // Expected: "BlogAgent did not produce any blog content"
375
- }
376
- const searchTool = findCapturedTool('search_web');
377
- const writeTool = findCapturedTool('write_blog');
378
- expect(searchTool).toBeDefined();
379
- expect(writeTool).toBeDefined();
380
- // Test search_web REAL handler
381
- const searchResult = await searchTool.handler({ queries: ['test query'] }, mockInvocation);
382
- expect(searchResult).toContain('results');
383
- // Test write_blog REAL handler
384
- const writeResult = await writeTool.handler({
385
- frontmatter: { title: 'Test Post', description: 'A description', tags: ['test'] },
386
- body: '# Hello\nBlog content',
387
- }, mockInvocation);
388
- expect(writeResult).toContain('success');
389
- });
390
- });
391
- // ── SocialMediaAgent (REAL) ─────────────────────────────────────────────────
392
- describe('Real SocialMediaAgent', () => {
393
- beforeEach(() => {
394
- mockState.capturedTools.length = 0;
395
- });
396
- it('exposes search_links and create_posts tools; handlers work', async () => {
397
- const { generateSocialPosts } = await import('../agents/SocialMediaAgent.js');
398
- const result = await generateSocialPosts(mockVideo, mockTranscript, mockSummary);
399
- expect(result).toEqual([]);
400
- const searchTool = findCapturedTool('search_links');
401
- const postsTool = findCapturedTool('create_posts');
402
- expect(searchTool).toBeDefined();
403
- expect(postsTool).toBeDefined();
404
- // Verify create_posts schema
405
- const postsSchema = postsTool.parameters;
406
- expect(postsSchema.required).toContain('posts');
407
- expect(postsSchema.properties.posts.items.required).toEqual(expect.arrayContaining(['platform', 'content', 'hashtags', 'links', 'characterCount']));
408
- // Test search_links REAL handler
409
- const searchResult = await searchTool.handler({ topics: ['coding', 'typescript'] }, mockInvocation);
410
- expect(searchResult).toContain('results');
411
- // Test create_posts REAL handler
412
- const postsResult = await postsTool.handler({
413
- posts: [
414
- {
415
- platform: 'tiktok',
416
- content: 'Check this out!',
417
- hashtags: ['coding'],
418
- links: [],
419
- characterCount: 15,
420
- },
421
- {
422
- platform: 'linkedin',
423
- content: 'Professional insight on testing.',
424
- hashtags: ['testing'],
425
- links: ['https://example.com'],
426
- characterCount: 31,
427
- },
428
- ],
429
- }, mockInvocation);
430
- const parsed = JSON.parse(postsResult);
431
- expect(parsed).toEqual({ success: true, count: 2 });
432
- });
433
- });
434
- //# sourceMappingURL=agents.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agents.test.js","sourceRoot":"","sources":["../../src/__tests__/agents.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAG9D,+EAA+E;AAE/E,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;IAChC,MAAM,KAAK,GAAG;QACZ,aAAa,EAAE,EAAW;QAC1B,WAAW,EAAE;YACX,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;YACpD,EAAE,EAAE,GAAG,EAAE,GAAE,CAAC;YACZ,OAAO,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;SACxB;KACF,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAE/E,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,aAAa,EAAE,SAAS,iBAAiB;QACvC,OAAO;YACL,aAAa,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;gBACjC,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;gBACnC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;gBACpD,OAAO,SAAS,CAAC,WAAW,CAAC;YAC/B,CAAC;YACD,IAAI,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;SACrB,CAAC;IACJ,CAAC;IACD,cAAc,EAAE,SAAS,kBAAkB,KAAI,CAAC;CACjD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,EAAE;QACP,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;KACf;CACF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;QACrB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;QACrE,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;QACzD,iBAAiB,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE;KAClD,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;CACtD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC,CAAC;IAClD,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;IACjD,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;IAC1D,mCAAmC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;CAC1E,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC,CAAC;IAClD,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;CACnD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/C,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;CACxD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;CAC7C,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC,CAAC;IAClD,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;CACrD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE,CAAC,CAAC;IAChD,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;CACnD,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,2BAA2B,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;IACxD,6BAA6B,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;CAC3D,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;CACzC,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;IAC5B,MAAM,IAAI,GAAQ,cAAa,CAAC,CAAC;IACjC,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAC9B,IAAI,CAAC,cAAc,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAC/B,IAAI,CAAC,OAAO,GAAG,CAAC,EAAU,EAAE,EAAY,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACrF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACrB,EAAE,EAAE,GAAG,EAAE,CAAC,gBAAgB;CAC3B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;CAC7D,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IACrC,MAAM,MAAM,GAAG,CAAC,MAAM,cAAc,EAAE,CAAQ,CAAC;IAC/C,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE;YACP,GAAG,MAAM;YACT,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;YAClB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;YACtB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;SAC3C;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;YAC3C,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;SAChD;QACD,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;QACtB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;KAC3C,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,+EAA+E;AAE/E,MAAM,cAAc,GAAG;IACrB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,KAAK;IACjB,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,EAAE;CACP,CAAC;AAET,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACvE,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,gDAAgD,CAAC,CAAC;IAC1F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAE/E,MAAM,SAAS,GAAG;IAChB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,eAAe;IACzB,IAAI,EAAE,YAAY;IAClB,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,GAAG;IACb,SAAS,EAAE,IAAI,IAAI,EAAE;CACf,CAAC;AAET,MAAM,uBAAuB,GAAG;IAC9B,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE;QACR;YACE,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,EAAE;YACP,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE;gBACL,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;gBACrC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;aACxC;SACF;KACF;CACK,CAAC;AAET,MAAM,cAAc,GAAG;IACrB,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;CAChD,CAAC;AAET,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,aAAa;IACvB,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,SAAS,EAAE,EAAE;IACb,YAAY,EAAE,gBAAgB;CACxB,CAAC;AAET,+EAA+E;AAE/E,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,MAAM,YAAa,SAAQ,SAAS;QAClC;YACE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7B,CAAC;QACS,KAAK,CAAC,cAAc,CAAC,EAAU,EAAE,EAA2B;YACpE,OAAO,EAAE,CAAC;QACZ,CAAC;KACF;IAED,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,CAAE,KAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,CAAE,KAAa,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,CAAE,KAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzC,MAAM,CAAE,KAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAE/E,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAEpE,kEAAkE;QAClE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QAExE,2DAA2D;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE3B,uBAAuB;QACvB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAEzD,gBAAgB;QAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAiB,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CACrD,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CACrE,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC/E,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CACpC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CACxD,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3D,wBAAwB;QACxB,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,OAAQ,CAC3C;YACE,MAAM,EAAE;gBACN;oBACE,KAAK,EAAE,YAAY;oBACnB,WAAW,EAAE,QAAQ;oBACrB,IAAI,EAAE,CAAC,MAAM,CAAC;oBACd,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;iBAC5D;gBACD;oBACE,KAAK,EAAE,eAAe;oBACtB,WAAW,EAAE,cAAc;oBAC3B,IAAI,EAAE,CAAC,MAAM,CAAC;oBACd,QAAQ,EAAE;wBACR,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE;wBAC7C,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE;qBAC9C;iBACF;aACF;SACF,EACD,cAAc,CACf,CAAC;QAEF,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAE/E,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC;QAC/E,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qCAAqC,CAAC,CAAC;QAE9E,6DAA6D;QAC5D,aAAqB,CAAC,iBAAiB,CAAC;YACvC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;YACnC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;SACpC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAElE,qEAAqE;QACrE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAErC,uBAAuB;QACvB,MAAM,UAAU,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QACvD,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,UAAU,CAAC,UAAiB,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CACvD,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CACnD,CAAC;QAEF,wBAAwB;QACxB,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,OAAQ,CAC7C;YACE,QAAQ,EAAE;gBACR,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;gBAC1C,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;aAC7C;SACF,EACD,cAAc,CACf,CAAC;QAEF,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAE/E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAEvE,MAAM,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAClD,MAAM,cAAc,GAAG;YACrB,GAAG,cAAc;YACjB,QAAQ,EAAE,GAAG;YACb,QAAQ,EAAE;gBACR,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;gBAC3C,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE;gBAC7C,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE;aAC7C;SACF,CAAC;QAEF,iEAAiE;QACjE,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;QAC5D,CAAC;QAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,WAAW,CAAC,UAAiB,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CACvD,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAC9D,CAAC;QAEF,wBAAwB;QACxB,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,OAAQ,CAC9C;YACE,QAAQ,EAAE;gBACR,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE;gBACrE,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE;gBACpE,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE;aAChE;SACF,EACD,cAAc,CACf,CAAC;QAEF,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACpD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAE/E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;QAE9E,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QAC7E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE3B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAiB,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CACpD,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CACvG,CAAC;QAEF,wBAAwB;QACxB,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,OAAQ,CAC3C;YACE,KAAK,EAAE;gBACL;oBACE,KAAK,EAAE,wBAAwB;oBAC/B,WAAW,EAAE,wBAAwB;oBACrC,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;oBAC3B,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;oBACjE,aAAa,EAAE,EAAE;oBACjB,IAAI,EAAE,4BAA4B;oBAClC,KAAK,EAAE,SAAS;iBACjB;aACF;SACF,EACD,cAAc,CACf,CAAC;QAEF,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAE/E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAEtE,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;QACxD,CAAC;QAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAEpD,8BAA8B;QAC9B,MAAM,aAAa,GAAG,WAAW,CAAC,UAAiB,CAAC;QACpD,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CACpC,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAC9D,CAAC;QAEF,8BAA8B;QAC9B,MAAM,WAAW,GAAG,SAAS,CAAC,UAAiB,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,OAAO,CAClC,MAAM,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CACvE,CAAC;QAEF,kCAAkC;QAClC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,OAAQ,CAC1C;YACE,QAAQ,EAAE,8BAA8B;YACxC,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;SAChC,EACD,cAAc,CACf,CAAC;QAEF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAE/E,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAEpE,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;QAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAEjD,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAEhC,+BAA+B;QAC/B,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,OAAQ,CAC5C,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,EAC3B,cAAc,CACf,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE1C,+BAA+B;QAC/B,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,OAAQ,CAC1C;YACE,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;YACjF,IAAI,EAAE,uBAAuB;SAC9B,EACD,cAAc,CACf,CAAC;QAEF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAE/E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;QAE9E,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QACjF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE3B,MAAM,UAAU,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAEnD,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAEhC,6BAA6B;QAC7B,MAAM,WAAW,GAAG,SAAS,CAAC,UAAiB,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CACzD,MAAM,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CACvF,CAAC;QAEF,iCAAiC;QACjC,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,OAAQ,CAC5C,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,EACpC,cAAc,CACf,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE1C,iCAAiC;QACjC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,OAAQ,CAC1C;YACE,KAAK,EAAE;gBACL;oBACE,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,iBAAiB;oBAC1B,QAAQ,EAAE,CAAC,QAAQ,CAAC;oBACpB,KAAK,EAAE,EAAE;oBACT,cAAc,EAAE,EAAE;iBACnB;gBACD;oBACE,QAAQ,EAAE,UAAU;oBACpB,OAAO,EAAE,kCAAkC;oBAC3C,QAAQ,EAAE,CAAC,SAAS,CAAC;oBACrB,KAAK,EAAE,CAAC,qBAAqB,CAAC;oBAC9B,cAAc,EAAE,EAAE;iBACnB;aACF;SACF,EACD,cAAc,CACf,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAqB,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=aspectRatio.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"aspectRatio.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/aspectRatio.test.ts"],"names":[],"mappings":""}