@upbeat-works/fisgon 0.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 (155) hide show
  1. package/LICENSE.md +10 -0
  2. package/README.md +150 -0
  3. package/dist/adapters/drizzle.d.ts +17 -0
  4. package/dist/adapters/drizzle.d.ts.map +1 -0
  5. package/dist/adapters/drizzle.js +83 -0
  6. package/dist/adapters/drizzle.js.map +1 -0
  7. package/dist/adapters/prisma.d.ts +16 -0
  8. package/dist/adapters/prisma.d.ts.map +1 -0
  9. package/dist/adapters/prisma.js +69 -0
  10. package/dist/adapters/prisma.js.map +1 -0
  11. package/dist/agent/ai.d.ts +3 -0
  12. package/dist/agent/ai.d.ts.map +1 -0
  13. package/dist/agent/ai.js +19 -0
  14. package/dist/agent/ai.js.map +1 -0
  15. package/dist/agent/browser-bridge.d.ts +42 -0
  16. package/dist/agent/browser-bridge.d.ts.map +1 -0
  17. package/dist/agent/browser-bridge.js +2 -0
  18. package/dist/agent/browser-bridge.js.map +1 -0
  19. package/dist/agent/index.d.ts +66 -0
  20. package/dist/agent/index.d.ts.map +1 -0
  21. package/dist/agent/index.js +572 -0
  22. package/dist/agent/index.js.map +1 -0
  23. package/dist/agent/llm-driver.d.ts +30 -0
  24. package/dist/agent/llm-driver.d.ts.map +1 -0
  25. package/dist/agent/llm-driver.js +239 -0
  26. package/dist/agent/llm-driver.js.map +1 -0
  27. package/dist/agent/session-state.d.ts +28 -0
  28. package/dist/agent/session-state.d.ts.map +1 -0
  29. package/dist/agent/session-state.js +6 -0
  30. package/dist/agent/session-state.js.map +1 -0
  31. package/dist/agent/worker.d.ts +6 -0
  32. package/dist/agent/worker.d.ts.map +1 -0
  33. package/dist/agent/worker.js +12 -0
  34. package/dist/agent/worker.js.map +1 -0
  35. package/dist/cli/browser-handler.d.ts +30 -0
  36. package/dist/cli/browser-handler.d.ts.map +1 -0
  37. package/dist/cli/browser-handler.js +89 -0
  38. package/dist/cli/browser-handler.js.map +1 -0
  39. package/dist/cli/browser-setup.d.ts +11 -0
  40. package/dist/cli/browser-setup.d.ts.map +1 -0
  41. package/dist/cli/browser-setup.js +25 -0
  42. package/dist/cli/browser-setup.js.map +1 -0
  43. package/dist/cli/commands/actions.d.ts +3 -0
  44. package/dist/cli/commands/actions.d.ts.map +1 -0
  45. package/dist/cli/commands/actions.js +28 -0
  46. package/dist/cli/commands/actions.js.map +1 -0
  47. package/dist/cli/commands/do.d.ts +3 -0
  48. package/dist/cli/commands/do.d.ts.map +1 -0
  49. package/dist/cli/commands/do.js +138 -0
  50. package/dist/cli/commands/do.js.map +1 -0
  51. package/dist/cli/commands/events.d.ts +3 -0
  52. package/dist/cli/commands/events.d.ts.map +1 -0
  53. package/dist/cli/commands/events.js +36 -0
  54. package/dist/cli/commands/events.js.map +1 -0
  55. package/dist/cli/commands/interact.d.ts +3 -0
  56. package/dist/cli/commands/interact.d.ts.map +1 -0
  57. package/dist/cli/commands/interact.js +54 -0
  58. package/dist/cli/commands/interact.js.map +1 -0
  59. package/dist/cli/commands/navigate.d.ts +3 -0
  60. package/dist/cli/commands/navigate.d.ts.map +1 -0
  61. package/dist/cli/commands/navigate.js +34 -0
  62. package/dist/cli/commands/navigate.js.map +1 -0
  63. package/dist/cli/commands/open.d.ts +3 -0
  64. package/dist/cli/commands/open.d.ts.map +1 -0
  65. package/dist/cli/commands/open.js +29 -0
  66. package/dist/cli/commands/open.js.map +1 -0
  67. package/dist/cli/commands/run.d.ts +3 -0
  68. package/dist/cli/commands/run.d.ts.map +1 -0
  69. package/dist/cli/commands/run.js +209 -0
  70. package/dist/cli/commands/run.js.map +1 -0
  71. package/dist/cli/commands/start.d.ts +3 -0
  72. package/dist/cli/commands/start.d.ts.map +1 -0
  73. package/dist/cli/commands/start.js +169 -0
  74. package/dist/cli/commands/start.js.map +1 -0
  75. package/dist/cli/commands/stop.d.ts +3 -0
  76. package/dist/cli/commands/stop.d.ts.map +1 -0
  77. package/dist/cli/commands/stop.js +37 -0
  78. package/dist/cli/commands/stop.js.map +1 -0
  79. package/dist/cli/commands/tick.d.ts +3 -0
  80. package/dist/cli/commands/tick.d.ts.map +1 -0
  81. package/dist/cli/commands/tick.js +34 -0
  82. package/dist/cli/commands/tick.js.map +1 -0
  83. package/dist/cli/config.d.ts +3 -0
  84. package/dist/cli/config.d.ts.map +1 -0
  85. package/dist/cli/config.js +20 -0
  86. package/dist/cli/config.js.map +1 -0
  87. package/dist/cli/connection.d.ts +18 -0
  88. package/dist/cli/connection.d.ts.map +1 -0
  89. package/dist/cli/connection.js +79 -0
  90. package/dist/cli/connection.js.map +1 -0
  91. package/dist/cli/index.d.ts +3 -0
  92. package/dist/cli/index.d.ts.map +1 -0
  93. package/dist/cli/index.js +29 -0
  94. package/dist/cli/index.js.map +1 -0
  95. package/dist/cli/session-file.d.ts +9 -0
  96. package/dist/cli/session-file.d.ts.map +1 -0
  97. package/dist/cli/session-file.js +23 -0
  98. package/dist/cli/session-file.js.map +1 -0
  99. package/dist/cli/task-runner.d.ts +20 -0
  100. package/dist/cli/task-runner.d.ts.map +1 -0
  101. package/dist/cli/task-runner.js +318 -0
  102. package/dist/cli/task-runner.js.map +1 -0
  103. package/dist/core/task-file.d.ts +32 -0
  104. package/dist/core/task-file.d.ts.map +1 -0
  105. package/dist/core/task-file.js +51 -0
  106. package/dist/core/task-file.js.map +1 -0
  107. package/dist/core/tick-detector.d.ts +24 -0
  108. package/dist/core/tick-detector.d.ts.map +1 -0
  109. package/dist/core/tick-detector.js +71 -0
  110. package/dist/core/tick-detector.js.map +1 -0
  111. package/dist/core/types.d.ts +74 -0
  112. package/dist/core/types.d.ts.map +1 -0
  113. package/dist/core/types.js +4 -0
  114. package/dist/core/types.js.map +1 -0
  115. package/dist/index.d.ts +4 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +4 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/probes/action-scanner.d.ts +2 -0
  120. package/dist/probes/action-scanner.d.ts.map +1 -0
  121. package/dist/probes/action-scanner.js +9 -0
  122. package/dist/probes/action-scanner.js.map +1 -0
  123. package/dist/probes/fetch-probe.d.ts +2 -0
  124. package/dist/probes/fetch-probe.d.ts.map +1 -0
  125. package/dist/probes/fetch-probe.js +9 -0
  126. package/dist/probes/fetch-probe.js.map +1 -0
  127. package/dist/probes/inject.d.ts +3 -0
  128. package/dist/probes/inject.d.ts.map +1 -0
  129. package/dist/probes/inject.js +24 -0
  130. package/dist/probes/inject.js.map +1 -0
  131. package/dist/probes/navigation-probe.d.ts +2 -0
  132. package/dist/probes/navigation-probe.d.ts.map +1 -0
  133. package/dist/probes/navigation-probe.js +9 -0
  134. package/dist/probes/navigation-probe.js.map +1 -0
  135. package/dist/probes/scripts/action-scanner.js +62 -0
  136. package/dist/probes/scripts/fetch.js +61 -0
  137. package/dist/probes/scripts/navigation.js +55 -0
  138. package/dist/probes/scripts/scripts/action-scanner.js +62 -0
  139. package/dist/probes/scripts/scripts/fetch.js +61 -0
  140. package/dist/probes/scripts/scripts/navigation.js +55 -0
  141. package/dist/probes/scripts/scripts/ws-bootstrap.js +35 -0
  142. package/dist/probes/scripts/ws-bootstrap.js +35 -0
  143. package/dist/server/create-probe.d.ts +8 -0
  144. package/dist/server/create-probe.d.ts.map +1 -0
  145. package/dist/server/create-probe.js +73 -0
  146. package/dist/server/create-probe.js.map +1 -0
  147. package/dist/server/sql-parser.d.ts +6 -0
  148. package/dist/server/sql-parser.d.ts.map +1 -0
  149. package/dist/server/sql-parser.js +40 -0
  150. package/dist/server/sql-parser.js.map +1 -0
  151. package/dist/server.d.ts +3 -0
  152. package/dist/server.d.ts.map +1 -0
  153. package/dist/server.js +2 -0
  154. package/dist/server.js.map +1 -0
  155. package/package.json +64 -0
@@ -0,0 +1,318 @@
1
+ /**
2
+ * Substitute {{paramName}} placeholders in all string values of an object.
3
+ */
4
+ function substituteParams(obj, vars) {
5
+ const result = {};
6
+ for (const [key, value] of Object.entries(obj)) {
7
+ if (typeof value === 'string') {
8
+ let resolved = value;
9
+ for (const [varName, varValue] of Object.entries(vars)) {
10
+ resolved = resolved.replaceAll(`{{${varName}}}`, varValue);
11
+ }
12
+ result[key] = resolved;
13
+ }
14
+ else {
15
+ result[key] = value;
16
+ }
17
+ }
18
+ return result;
19
+ }
20
+ /**
21
+ * Unwrap common RPC response shapes to get at the raw data.
22
+ * e.g. { tick: { events: [...] } } → { events: [...] }
23
+ */
24
+ function unwrapResult(result) {
25
+ if (result == null || typeof result !== 'object')
26
+ return result;
27
+ const obj = result;
28
+ // { tick: { ... } } from waitForNextTick / navigate RPCs
29
+ if ('tick' in obj && typeof obj.tick === 'object')
30
+ return obj.tick;
31
+ return result;
32
+ }
33
+ /**
34
+ * Extract events array from various result shapes.
35
+ */
36
+ function extractEvents(result) {
37
+ if (result == null || typeof result !== 'object')
38
+ return [];
39
+ // Direct tick object with events array
40
+ if ('events' in result) {
41
+ return result.events ?? [];
42
+ }
43
+ // Array of events directly
44
+ if (Array.isArray(result))
45
+ return result;
46
+ return [];
47
+ }
48
+ /**
49
+ * Evaluate a simple extract expression against a tool result.
50
+ *
51
+ * Supported formats:
52
+ * - `events[source=X].data.field` — find event with matching source, traverse path
53
+ * - `events[source=X].data.text | match(/regex/)` — find event, extract regex match
54
+ * - `data.field.subfield` — simple dot-path traversal on the result
55
+ */
56
+ function evaluateExtract(expression, result) {
57
+ const parts = expression.split('|').map((p) => p.trim());
58
+ const path = parts[0];
59
+ const matchExpr = parts[1];
60
+ let value = result;
61
+ // Unwrap RPC response wrappers: { tick: { events: [...] } } or { events: [...] }
62
+ const unwrapped = unwrapResult(result);
63
+ // Handle events[source=X] prefix
64
+ const eventsMatch = path.match(/^events\[source=(\w+)\]\.(.+)$/);
65
+ if (eventsMatch) {
66
+ const source = eventsMatch[1];
67
+ const restPath = eventsMatch[2];
68
+ // Collect events from whatever shape we got
69
+ const events = extractEvents(unwrapped);
70
+ const event = events.find((e) => e.source === source);
71
+ if (!event)
72
+ return null;
73
+ value = traversePath(event, restPath);
74
+ }
75
+ else {
76
+ value = traversePath(unwrapped, path);
77
+ }
78
+ if (value == null)
79
+ return null;
80
+ // Apply match() regex if present
81
+ if (matchExpr) {
82
+ const regexMatch = matchExpr.match(/^match\(\/(.+)\/\)$/);
83
+ if (regexMatch) {
84
+ const regex = new RegExp(regexMatch[1]);
85
+ const str = String(value);
86
+ const m = str.match(regex);
87
+ return m ? (m[1] ?? m[0]) : null;
88
+ }
89
+ }
90
+ return String(value);
91
+ }
92
+ function traversePath(obj, path) {
93
+ const segments = path.split('.');
94
+ let current = obj;
95
+ for (const seg of segments) {
96
+ if (current == null || typeof current !== 'object')
97
+ return null;
98
+ current = current[seg];
99
+ }
100
+ return current;
101
+ }
102
+ /**
103
+ * Map a task step's tool name to the corresponding agent RPC call.
104
+ * For interact, wait for tick but don't fail if it times out (e.g. typing
105
+ * into an input won't generate probe events).
106
+ */
107
+ async function executeStep(conn, sessionId, tool, args, hasExtract, page) {
108
+ switch (tool) {
109
+ case 'navigate': {
110
+ if (page) {
111
+ await page.goto(args.url, { waitUntil: 'networkidle' });
112
+ // Wait for probe events from the navigation
113
+ try {
114
+ return await conn.call('waitForNextTick', [sessionId, 5000], { timeout: 15000 });
115
+ }
116
+ catch {
117
+ if (hasExtract)
118
+ throw new Error('Tick timed out (needed for extract)');
119
+ return null;
120
+ }
121
+ }
122
+ return conn.call('navigate', [sessionId, args.url], { timeout: 30000 });
123
+ }
124
+ case 'get_actions':
125
+ return conn.call('getActions', [sessionId], { timeout: 30000 });
126
+ case 'open_action':
127
+ return conn.call('openAction', [sessionId, args.actionId], { timeout: 30000 });
128
+ case 'interact': {
129
+ if (page) {
130
+ const action = args.action;
131
+ const selector = args.selector;
132
+ switch (action) {
133
+ case 'type':
134
+ await page.fill(selector, args.value);
135
+ break;
136
+ case 'click':
137
+ await page.click(selector);
138
+ break;
139
+ case 'select':
140
+ await page.selectOption(selector, args.value);
141
+ break;
142
+ }
143
+ }
144
+ else {
145
+ await conn.call('interact', [sessionId, {
146
+ action: args.action,
147
+ selector: args.selector,
148
+ ...(args.value != null ? { value: args.value } : {}),
149
+ }], { timeout: 30000 });
150
+ }
151
+ // Wait for tick but tolerate timeout — some interactions (typing)
152
+ // don't generate probe events. Only fail if we need extract data.
153
+ try {
154
+ return await conn.call('waitForNextTick', [sessionId, 5000], { timeout: 15000 });
155
+ }
156
+ catch {
157
+ if (hasExtract)
158
+ throw new Error('Tick timed out (needed for extract)');
159
+ return null;
160
+ }
161
+ }
162
+ case 'wait_for_tick':
163
+ return conn.call('waitForNextTick', [sessionId, args.timeout ?? 10000], { timeout: 30000 });
164
+ case 'get_events':
165
+ return conn.call('getEvents', [sessionId], { timeout: 30000 });
166
+ default:
167
+ throw new Error(`Unknown tool: ${tool}`);
168
+ }
169
+ }
170
+ /**
171
+ * Validate the task's success conditions against current browser state.
172
+ */
173
+ async function validateTask(conn, sessionId, validate) {
174
+ if (!validate)
175
+ return { passed: true };
176
+ const { events } = await conn.call('getEvents', [sessionId], { timeout: 10000 });
177
+ // Collect all nav URLs (some intermediate ones matter, not just the last)
178
+ const navUrls = events
179
+ .filter((e) => e.source === 'nav')
180
+ .map((e) => String(e.data.url ?? ''))
181
+ .filter((url) => url && url !== 'blank');
182
+ const currentUrl = navUrls[navUrls.length - 1] ?? '';
183
+ if (validate.url_contains) {
184
+ // Check if any recent nav URL contains the expected string
185
+ const found = navUrls.some((url) => url.includes(validate.url_contains));
186
+ if (!found) {
187
+ return { passed: false, reason: `No navigation URL contains "${validate.url_contains}" (last: "${currentUrl}")` };
188
+ }
189
+ }
190
+ if (validate.url_matches) {
191
+ const regex = new RegExp(validate.url_matches);
192
+ const found = navUrls.some((url) => regex.test(url));
193
+ if (!found) {
194
+ return { passed: false, reason: `No navigation URL matches /${validate.url_matches}/ (last: "${currentUrl}")` };
195
+ }
196
+ }
197
+ if (validate.event_exists) {
198
+ const found = events.some((e) => e.source === validate.event_exists.source && e.type === validate.event_exists.type);
199
+ if (!found) {
200
+ return { passed: false, reason: `No event with source="${validate.event_exists.source}" type="${validate.event_exists.type}"` };
201
+ }
202
+ }
203
+ return { passed: true };
204
+ }
205
+ /**
206
+ * Replay a persisted task by executing its steps directly via agent RPC.
207
+ * Falls back to LLM for individual steps if they fail and fallback is enabled.
208
+ */
209
+ export async function replayTask(conn, sessionId, task, params, options = {}) {
210
+ // Merge task defaults with provided params
211
+ const vars = { ...task.params, ...params };
212
+ for (let i = 0; i < task.steps.length; i++) {
213
+ const step = task.steps[i];
214
+ const resolvedArgs = step.args ? substituteParams(step.args, vars) : {};
215
+ if (options.verbose) {
216
+ const argStr = Object.entries(resolvedArgs)
217
+ .map(([k, v]) => `${k}=${typeof v === 'string' ? v : JSON.stringify(v)}`)
218
+ .join(' ');
219
+ console.log(` [step ${i + 1}/${task.steps.length}] ${step.tool}(${argStr})`);
220
+ }
221
+ let result;
222
+ try {
223
+ result = await executeStep(conn, sessionId, step.tool, resolvedArgs, !!step.extract, options.page);
224
+ }
225
+ catch (err) {
226
+ if (options.fallback) {
227
+ if (options.verbose) {
228
+ console.log(` [step ${i + 1}] failed, falling back to LLM...`);
229
+ }
230
+ // Describe the intent of this step for the LLM
231
+ const stepDescription = describeStep(step, resolvedArgs);
232
+ try {
233
+ await conn.call('performTask', [sessionId, stepDescription], { timeout: 300000 });
234
+ continue;
235
+ }
236
+ catch (fallbackErr) {
237
+ return {
238
+ success: false,
239
+ failedStep: i + 1,
240
+ error: `Step ${i + 1} failed (LLM fallback also failed): ${fallbackErr}`,
241
+ };
242
+ }
243
+ }
244
+ return {
245
+ success: false,
246
+ failedStep: i + 1,
247
+ error: `Step ${i + 1} (${step.tool}) failed: ${err}`,
248
+ };
249
+ }
250
+ // Process extract expressions
251
+ if (step.extract) {
252
+ for (const [varName, expression] of Object.entries(step.extract)) {
253
+ const extracted = evaluateExtract(expression, result);
254
+ if (extracted) {
255
+ vars[varName] = extracted;
256
+ if (options.verbose) {
257
+ console.log(` [extract] ${varName} = ${extracted.length > 80 ? extracted.slice(0, 77) + '...' : extracted}`);
258
+ }
259
+ }
260
+ else if (options.verbose) {
261
+ console.log(` [extract] ${varName} = (not found)`);
262
+ }
263
+ }
264
+ }
265
+ }
266
+ // Validate
267
+ const validation = await validateTask(conn, sessionId, task.validate);
268
+ if (!validation.passed) {
269
+ if (options.fallback) {
270
+ if (options.verbose) {
271
+ console.log(` [validate] failed: ${validation.reason}`);
272
+ console.log(` [validate] falling back to LLM for full task...`);
273
+ }
274
+ try {
275
+ await conn.call('performTask', [sessionId, task.description], { timeout: 300000 });
276
+ const revalidation = await validateTask(conn, sessionId, task.validate);
277
+ return {
278
+ success: revalidation.passed,
279
+ error: revalidation.passed ? undefined : `Validation failed after LLM fallback: ${revalidation.reason}`,
280
+ };
281
+ }
282
+ catch (err) {
283
+ return { success: false, error: `LLM fallback failed: ${err}` };
284
+ }
285
+ }
286
+ return { success: false, error: `Validation failed: ${validation.reason}` };
287
+ }
288
+ return { success: true };
289
+ }
290
+ /**
291
+ * Generate a natural-language description of a step for LLM fallback.
292
+ */
293
+ function describeStep(step, resolvedArgs) {
294
+ switch (step.tool) {
295
+ case 'navigate':
296
+ return `Navigate the browser to ${resolvedArgs.url}`;
297
+ case 'interact':
298
+ if (resolvedArgs.action === 'click') {
299
+ return `Click the element matching selector "${resolvedArgs.selector}" on the current page`;
300
+ }
301
+ if (resolvedArgs.action === 'type') {
302
+ return `Type "${resolvedArgs.value}" into the element matching selector "${resolvedArgs.selector}"`;
303
+ }
304
+ if (resolvedArgs.action === 'select') {
305
+ return `Select the value "${resolvedArgs.value}" in the dropdown matching selector "${resolvedArgs.selector}"`;
306
+ }
307
+ return `Interact with element "${resolvedArgs.selector}" (${resolvedArgs.action})`;
308
+ case 'wait_for_tick':
309
+ return 'Wait for the page to settle and observe any new events';
310
+ case 'get_actions':
311
+ return 'List available actions on the current page';
312
+ case 'get_events':
313
+ return 'Review all events captured so far';
314
+ default:
315
+ return `Execute ${step.tool} with args: ${JSON.stringify(resolvedArgs)}`;
316
+ }
317
+ }
318
+ //# sourceMappingURL=task-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-runner.js","sourceRoot":"","sources":["../../src/cli/task-runner.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,SAAS,gBAAgB,CACxB,GAA4B,EAC5B,IAA4B;IAE5B,MAAM,MAAM,GAA4B,EAAE,CAAA;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,QAAQ,GAAG,KAAK,CAAA;YACpB,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxD,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,OAAO,IAAI,EAAE,QAAQ,CAAC,CAAA;YAC3D,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAA;QACvB,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACpB,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,MAAe;IACpC,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAA;IAC/D,MAAM,GAAG,GAAG,MAAiC,CAAA;IAC7C,yDAAyD;IACzD,IAAI,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,IAAI,CAAA;IAClE,OAAO,MAAM,CAAA;AACd,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,MAAe;IACrC,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAA;IAC3D,uCAAuC;IACvC,IAAI,QAAQ,IAAK,MAAkC,EAAE,CAAC;QACrD,OAAQ,MAA+D,CAAC,MAAM,IAAI,EAAE,CAAA;IACrF,CAAC;IACD,2BAA2B;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IACxC,OAAO,EAAE,CAAA;AACV,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,UAAkB,EAAE,MAAe;IAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACxD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACrB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAE1B,IAAI,KAAK,GAAY,MAAM,CAAA;IAE3B,iFAAiF;IACjF,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IAEtC,iCAAiC;IACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;IAChE,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAE/B,4CAA4C;QAC5C,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;QACrD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QACvB,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACtC,CAAC;SAAM,CAAC;QACP,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAA;IAE9B,iCAAiC;IACjC,IAAI,SAAS,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACzD,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;YACvC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;YACzB,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAC1B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACjC,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,GAAY,EAAE,IAAY;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,OAAO,GAAY,GAAG,CAAA;IAC1B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAA;QAC/D,OAAO,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,OAAO,CAAA;AACf,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,WAAW,CACzB,IAAqB,EACrB,SAAiB,EACjB,IAAY,EACZ,IAA6B,EAC7B,UAAmB,EACnB,IAAqB;IAErB,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,IAAI,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAa,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAA;gBACjE,4CAA4C;gBAC5C,IAAI,CAAC;oBACJ,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;gBACjF,CAAC;gBAAC,MAAM,CAAC;oBACR,IAAI,UAAU;wBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;oBACtE,OAAO,IAAI,CAAA;gBACZ,CAAC;YACF,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,GAAa,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAClF,CAAC;QACD,KAAK,aAAa;YACjB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAChE,KAAK,aAAa;YACjB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,QAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QACzF,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,IAAI,IAAI,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgB,CAAA;gBACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAkB,CAAA;gBACxC,QAAQ,MAAM,EAAE,CAAC;oBAChB,KAAK,MAAM;wBACV,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAe,CAAC,CAAA;wBAC/C,MAAK;oBACN,KAAK,OAAO;wBACX,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;wBAC1B,MAAK;oBACN,KAAK,QAAQ;wBACZ,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAe,CAAC,CAAA;wBACvD,MAAK;gBACP,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE;wBACvC,MAAM,EAAE,IAAI,CAAC,MAAgB;wBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAkB;wBACjC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACpD,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;YACxB,CAAC;YACD,kEAAkE;YAClE,kEAAkE;YAClE,IAAI,CAAC;gBACJ,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;YACjF,CAAC;YAAC,MAAM,CAAC;gBACR,IAAI,UAAU;oBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;gBACtE,OAAO,IAAI,CAAA;YACZ,CAAC;QACF,CAAC;QACD,KAAK,eAAe;YACnB,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAG,IAAI,CAAC,OAAkB,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QACxG,KAAK,YAAY;YAChB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAC/D;YACC,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;AACF,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAC1B,IAAqB,EACrB,SAAiB,EACjB,QAA8B;IAE9B,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IAEtC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CACjC,WAAW,EAAE,CAAC,SAAS,CAAC,EACxB,EAAE,OAAO,EAAE,KAAK,EAAE,CAClB,CAAA;IAED,0EAA0E;IAC1E,MAAM,OAAO,GAAG,MAAM;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC;SACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAE,CAAC,CAAC,IAAgC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;SACjE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,OAAO,CAAC,CAAA;IAEzC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAEpD,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,2DAA2D;QAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAa,CAAC,CAAC,CAAA;QACzE,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,+BAA+B,QAAQ,CAAC,YAAY,aAAa,UAAU,IAAI,EAAE,CAAA;QAClH,CAAC;IACF,CAAC;IAED,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACpD,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,QAAQ,CAAC,WAAW,aAAa,UAAU,IAAI,EAAE,CAAA;QAChH,CAAC;IACF,CAAC;IAED,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,YAAa,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,YAAa,CAAC,IAAI,CAC3F,CAAA;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,QAAQ,CAAC,YAAY,CAAC,MAAM,WAAW,QAAQ,CAAC,YAAY,CAAC,IAAI,GAAG,EAAE,CAAA;QAChI,CAAC;IACF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,IAAqB,EACrB,SAAiB,EACjB,IAAc,EACd,MAA8B,EAC9B,UAAyB,EAAE;IAE3B,2CAA2C;IAC3C,MAAM,IAAI,GAA2B,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;IAElE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEvE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;iBACzC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxE,IAAI,CAAC,GAAG,CAAC,CAAA;YACX,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC,CAAA;QAC9E,CAAC;QAED,IAAI,MAAe,CAAA;QACnB,IAAI,CAAC;YACJ,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;QACnG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACtB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;gBAChE,CAAC;gBACD,+CAA+C;gBAC/C,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;gBACxD,IAAI,CAAC;oBACJ,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;oBACjF,SAAQ;gBACT,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACtB,OAAO;wBACN,OAAO,EAAE,KAAK;wBACd,UAAU,EAAE,CAAC,GAAG,CAAC;wBACjB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,uCAAuC,WAAW,EAAE;qBACxE,CAAA;gBACF,CAAC;YACF,CAAC;YACD,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,CAAC,GAAG,CAAC;gBACjB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,aAAa,GAAG,EAAE;aACpD,CAAA;QACF,CAAC;QAED,8BAA8B;QAC9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClE,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;gBACrD,IAAI,SAAS,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;oBACzB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACrB,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,MAAM,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;oBAC9G,CAAC;gBACF,CAAC;qBAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,gBAAgB,CAAC,CAAA;gBACpD,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,WAAW;IACX,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IACrE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,wBAAwB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;gBACxD,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAA;YACjE,CAAC;YACD,IAAI,CAAC;gBACJ,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;gBAClF,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACvE,OAAO;oBACN,OAAO,EAAE,YAAY,CAAC,MAAM;oBAC5B,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,yCAAyC,YAAY,CAAC,MAAM,EAAE;iBACvG,CAAA;YACF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,GAAG,EAAE,EAAE,CAAA;YAChE,CAAC;QACF,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,UAAU,CAAC,MAAM,EAAE,EAAE,CAAA;IAC5E,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,IAAsD,EAAE,YAAqC;IAClH,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,UAAU;YACd,OAAO,2BAA2B,YAAY,CAAC,GAAG,EAAE,CAAA;QACrD,KAAK,UAAU;YACd,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBACrC,OAAO,wCAAwC,YAAY,CAAC,QAAQ,uBAAuB,CAAA;YAC5F,CAAC;YACD,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACpC,OAAO,SAAS,YAAY,CAAC,KAAK,yCAAyC,YAAY,CAAC,QAAQ,GAAG,CAAA;YACpG,CAAC;YACD,IAAI,YAAY,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACtC,OAAO,qBAAqB,YAAY,CAAC,KAAK,wCAAwC,YAAY,CAAC,QAAQ,GAAG,CAAA;YAC/G,CAAC;YACD,OAAO,0BAA0B,YAAY,CAAC,QAAQ,MAAM,YAAY,CAAC,MAAM,GAAG,CAAA;QACnF,KAAK,eAAe;YACnB,OAAO,wDAAwD,CAAA;QAChE,KAAK,aAAa;YACjB,OAAO,4CAA4C,CAAA;QACpD,KAAK,YAAY;YAChB,OAAO,mCAAmC,CAAA;QAC3C;YACC,OAAO,WAAW,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAA;IAC1E,CAAC;AACF,CAAC"}
@@ -0,0 +1,32 @@
1
+ export type TaskStep = {
2
+ tool: string;
3
+ args?: Record<string, string>;
4
+ extract?: Record<string, string>;
5
+ };
6
+ export type TaskValidation = {
7
+ url_contains?: string;
8
+ url_matches?: string;
9
+ event_exists?: {
10
+ source: string;
11
+ type: string;
12
+ };
13
+ };
14
+ export type TaskFile = {
15
+ name: string;
16
+ description: string;
17
+ params?: Record<string, string>;
18
+ steps: TaskStep[];
19
+ validate?: TaskValidation;
20
+ };
21
+ export type CaseFile = {
22
+ name: string;
23
+ description: string;
24
+ tasks: string[];
25
+ };
26
+ export declare function readTaskFile(projectDir: string, name: string): TaskFile | null;
27
+ export declare function writeTaskFile(projectDir: string, task: TaskFile): void;
28
+ export declare function readCaseFile(projectDir: string, name: string): CaseFile | null;
29
+ export declare function writeCaseFile(projectDir: string, caseFile: CaseFile): void;
30
+ export declare function listTasks(projectDir: string): string[];
31
+ export declare function listCases(projectDir: string): string[];
32
+ //# sourceMappingURL=task-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-file.d.ts","sourceRoot":"","sources":["../../src/core/task-file.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,QAAQ,CAAC,EAAE,cAAc,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,EAAE,CAAA;CACf,CAAA;AAWD,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAI9E;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAKtE;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAI9E;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAK1E;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAMtD;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAMtD"}
@@ -0,0 +1,51 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, existsSync, readdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { parse, stringify } from 'yaml';
4
+ const TASKS_DIR = '.fisgon/tasks';
5
+ const CASES_DIR = '.fisgon/cases';
6
+ function ensureDir(dir) {
7
+ if (!existsSync(dir)) {
8
+ mkdirSync(dir, { recursive: true });
9
+ }
10
+ }
11
+ export function readTaskFile(projectDir, name) {
12
+ const filePath = join(projectDir, TASKS_DIR, `${name}.yaml`);
13
+ if (!existsSync(filePath))
14
+ return null;
15
+ return parse(readFileSync(filePath, 'utf-8'));
16
+ }
17
+ export function writeTaskFile(projectDir, task) {
18
+ const dir = join(projectDir, TASKS_DIR);
19
+ ensureDir(dir);
20
+ const filePath = join(dir, `${task.name}.yaml`);
21
+ writeFileSync(filePath, stringify(task, { lineWidth: 120 }));
22
+ }
23
+ export function readCaseFile(projectDir, name) {
24
+ const filePath = join(projectDir, CASES_DIR, `${name}.yaml`);
25
+ if (!existsSync(filePath))
26
+ return null;
27
+ return parse(readFileSync(filePath, 'utf-8'));
28
+ }
29
+ export function writeCaseFile(projectDir, caseFile) {
30
+ const dir = join(projectDir, CASES_DIR);
31
+ ensureDir(dir);
32
+ const filePath = join(dir, `${caseFile.name}.yaml`);
33
+ writeFileSync(filePath, stringify(caseFile, { lineWidth: 120 }));
34
+ }
35
+ export function listTasks(projectDir) {
36
+ const dir = join(projectDir, TASKS_DIR);
37
+ if (!existsSync(dir))
38
+ return [];
39
+ return readdirSync(dir)
40
+ .filter((f) => f.endsWith('.yaml'))
41
+ .map((f) => f.replace(/\.yaml$/, ''));
42
+ }
43
+ export function listCases(projectDir) {
44
+ const dir = join(projectDir, CASES_DIR);
45
+ if (!existsSync(dir))
46
+ return [];
47
+ return readdirSync(dir)
48
+ .filter((f) => f.endsWith('.yaml'))
49
+ .map((f) => f.replace(/\.yaml$/, ''));
50
+ }
51
+ //# sourceMappingURL=task-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-file.js","sourceRoot":"","sources":["../../src/core/task-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type ProbeEvent, type Tick } from './types.js';
2
+ export type TickDetectorOptions = {
3
+ silenceMs?: number;
4
+ maxMs?: number;
5
+ onTick: (tick: Tick) => void;
6
+ };
7
+ export declare class TickDetector {
8
+ private silenceMs;
9
+ private maxMs;
10
+ private onTick;
11
+ private currentEvents;
12
+ private silenceTimer;
13
+ private maxTimer;
14
+ private tickCount;
15
+ private sessionId;
16
+ constructor(options: TickDetectorOptions);
17
+ setSession(sessionId: string | null): void;
18
+ ingest(event: ProbeEvent): void;
19
+ private resetSilenceTimer;
20
+ private completeTick;
21
+ get pending(): boolean;
22
+ reset(): void;
23
+ }
24
+ //# sourceMappingURL=tick-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tick-detector.d.ts","sourceRoot":"","sources":["../../src/core/tick-detector.ts"],"names":[],"mappings":"AAAA,OAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAA;AAExD,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;CAC7B,CAAA;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,SAAS,CAAsB;gBAE3B,OAAO,EAAE,mBAAmB;IAMxC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKnC,MAAM,CAAC,KAAK,EAAE,UAAU;IAcxB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,YAAY;IAqBpB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,KAAK;CAQN"}
@@ -0,0 +1,71 @@
1
+ export class TickDetector {
2
+ silenceMs;
3
+ maxMs;
4
+ onTick;
5
+ currentEvents = [];
6
+ silenceTimer = null;
7
+ maxTimer = null;
8
+ tickCount = 0;
9
+ sessionId = null;
10
+ constructor(options) {
11
+ this.silenceMs = options.silenceMs ?? 500;
12
+ this.maxMs = options.maxMs ?? 30000;
13
+ this.onTick = options.onTick;
14
+ }
15
+ setSession(sessionId) {
16
+ this.sessionId = sessionId;
17
+ this.reset();
18
+ }
19
+ ingest(event) {
20
+ this.currentEvents.push(event);
21
+ // Start max timer on first event
22
+ if (this.currentEvents.length === 1) {
23
+ this.maxTimer = setTimeout(() => {
24
+ this.completeTick();
25
+ }, this.maxMs);
26
+ }
27
+ // Reset silence timer on every event
28
+ this.resetSilenceTimer();
29
+ }
30
+ resetSilenceTimer() {
31
+ if (this.silenceTimer)
32
+ clearTimeout(this.silenceTimer);
33
+ this.silenceTimer = setTimeout(() => {
34
+ this.completeTick();
35
+ }, this.silenceMs);
36
+ }
37
+ completeTick() {
38
+ if (this.silenceTimer)
39
+ clearTimeout(this.silenceTimer);
40
+ if (this.maxTimer)
41
+ clearTimeout(this.maxTimer);
42
+ this.silenceTimer = null;
43
+ this.maxTimer = null;
44
+ const events = this.currentEvents;
45
+ if (events.length === 0)
46
+ return;
47
+ const tick = {
48
+ id: this.tickCount++,
49
+ sessionId: this.sessionId ?? '',
50
+ startedAt: events[0].timestamp,
51
+ duration: events[events.length - 1].timestamp - events[0].timestamp,
52
+ events,
53
+ };
54
+ this.currentEvents = [];
55
+ this.onTick(tick);
56
+ }
57
+ get pending() {
58
+ return this.currentEvents.length > 0;
59
+ }
60
+ reset() {
61
+ if (this.silenceTimer)
62
+ clearTimeout(this.silenceTimer);
63
+ if (this.maxTimer)
64
+ clearTimeout(this.maxTimer);
65
+ this.silenceTimer = null;
66
+ this.maxTimer = null;
67
+ this.currentEvents = [];
68
+ this.tickCount = 0;
69
+ }
70
+ }
71
+ //# sourceMappingURL=tick-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tick-detector.js","sourceRoot":"","sources":["../../src/core/tick-detector.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,YAAY;IACf,SAAS,CAAQ;IACjB,KAAK,CAAQ;IACb,MAAM,CAAsB;IAE5B,aAAa,GAAiB,EAAE,CAAA;IAChC,YAAY,GAAyC,IAAI,CAAA;IACzD,QAAQ,GAAyC,IAAI,CAAA;IACrD,SAAS,GAAG,CAAC,CAAA;IACb,SAAS,GAAkB,IAAI,CAAA;IAEvC,YAAY,OAA4B;QACtC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAA;QACzC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAA;QACnC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC9B,CAAC;IAED,UAAU,CAAC,SAAwB;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,MAAM,CAAC,KAAiB;QACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAE9B,iCAAiC;QACjC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,YAAY,EAAE,CAAA;YACrB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAC1B,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,YAAY;YAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACtD,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACpB,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,YAAY;YAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACtD,IAAI,IAAI,CAAC,QAAQ;YAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAA;QACjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAE/B,MAAM,IAAI,GAAS;YACjB,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE;YACpB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;YAC/B,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YACnE,MAAM;SACP,CAAA;QAED,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAA;IACtC,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,YAAY;YAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACtD,IAAI,IAAI,CAAC,QAAQ;YAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;IACpB,CAAC;CACF"}
@@ -0,0 +1,74 @@
1
+ export type ProbeEvent = {
2
+ sessionId: string;
3
+ source: string;
4
+ type: string;
5
+ timestamp: number;
6
+ data: unknown;
7
+ };
8
+ export type Tick = {
9
+ id: number;
10
+ sessionId: string;
11
+ startedAt: number;
12
+ duration: number;
13
+ events: ProbeEvent[];
14
+ };
15
+ export type Action = {
16
+ id: string;
17
+ elementType: string;
18
+ textContent: string;
19
+ };
20
+ export type InteractCommand = {
21
+ action: 'type';
22
+ selector: string;
23
+ value: string;
24
+ } | {
25
+ action: 'click';
26
+ selector: string;
27
+ } | {
28
+ action: 'select';
29
+ selector: string;
30
+ value: string;
31
+ };
32
+ export type ScopedProbe = {
33
+ active: boolean;
34
+ sessionId: string | null;
35
+ emit(event: Omit<ProbeEvent, 'sessionId'>): void;
36
+ fromSQL(query: string, params?: unknown[]): void;
37
+ };
38
+ export type Probe = {
39
+ active: boolean;
40
+ fromRequest(request: Request | {
41
+ headers: {
42
+ cookie?: string;
43
+ get?(name: string): string | null;
44
+ };
45
+ }): ScopedProbe;
46
+ disconnect(): void;
47
+ };
48
+ export type FetchProbeConfig = {
49
+ match: string[];
50
+ };
51
+ export type ProbesConfig = {
52
+ fetch?: FetchProbeConfig;
53
+ navigation?: boolean;
54
+ };
55
+ export type IdentityConfig = Record<string, {
56
+ email: string;
57
+ password: string;
58
+ }>;
59
+ export type TickConfig = {
60
+ silenceMs?: number;
61
+ maxMs?: number;
62
+ };
63
+ export type BrowserMode = 'local' | 'remote';
64
+ export type FisgonConfig = {
65
+ url: string;
66
+ agent?: string;
67
+ identity?: IdentityConfig;
68
+ loginUrl?: string;
69
+ probes?: ProbesConfig;
70
+ tick?: TickConfig;
71
+ port?: number;
72
+ browserMode?: BrowserMode;
73
+ };
74
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAKD,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB,CAAA;AAID,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAID,MAAM,MAAM,eAAe,GACvB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAIzD,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,IAAI,CAAA;IAChD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CACjD,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;SAAE,CAAA;KAAE,GAAG,WAAW,CAAA;IAChH,UAAU,IAAI,IAAI,CAAA;CACnB,CAAA;AAID,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACxB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAEhF,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAA;AAE5C,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ── ProbeEvent ──────────────────────────────────────────────────
2
+ // The universal unit of information. Every producer emits these.
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,iEAAiE"}
@@ -0,0 +1,4 @@
1
+ import { type FisgonConfig } from './core/types.js';
2
+ export type { ProbeEvent, Tick, Action, InteractCommand, ScopedProbe, Probe, FisgonConfig, FetchProbeConfig, ProbesConfig, IdentityConfig, TickConfig, BrowserMode, } from './core/types.js';
3
+ export declare function defineConfig(config: FisgonConfig): FisgonConfig;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEnD,YAAY,EACX,UAAU,EACV,IAAI,EACJ,MAAM,EACN,eAAe,EACf,WAAW,EACX,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,UAAU,EACV,WAAW,GACX,MAAM,iBAAiB,CAAA;AAExB,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAE/D"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export function defineConfig(config) {
2
+ return config;
3
+ }
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,YAAY,CAAC,MAAoB;IAChD,OAAO,MAAM,CAAA;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function createActionScannerScript(): string;
2
+ //# sourceMappingURL=action-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-scanner.d.ts","sourceRoot":"","sources":["../../src/probes/action-scanner.ts"],"names":[],"mappings":"AAOA,wBAAgB,yBAAyB,IAAI,MAAM,CAElD"}