@ai2qa/local-agent 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 (83) hide show
  1. package/README.md +254 -0
  2. package/bin/ai2qa-agent +12 -0
  3. package/dist/browser/connection.d.ts +80 -0
  4. package/dist/browser/connection.d.ts.map +1 -0
  5. package/dist/browser/connection.js +165 -0
  6. package/dist/browser/connection.js.map +1 -0
  7. package/dist/config.d.ts +58 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +231 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/index.d.ts +10 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +189 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/server.d.ts +56 -0
  16. package/dist/server.d.ts.map +1 -0
  17. package/dist/server.js +387 -0
  18. package/dist/server.js.map +1 -0
  19. package/dist/tools/click.d.ts +12 -0
  20. package/dist/tools/click.d.ts.map +1 -0
  21. package/dist/tools/click.js +61 -0
  22. package/dist/tools/click.js.map +1 -0
  23. package/dist/tools/evaluate.d.ts +9 -0
  24. package/dist/tools/evaluate.d.ts.map +1 -0
  25. package/dist/tools/evaluate.js +77 -0
  26. package/dist/tools/evaluate.js.map +1 -0
  27. package/dist/tools/fill.d.ts +9 -0
  28. package/dist/tools/fill.d.ts.map +1 -0
  29. package/dist/tools/fill.js +48 -0
  30. package/dist/tools/fill.js.map +1 -0
  31. package/dist/tools/hover.d.ts +9 -0
  32. package/dist/tools/hover.d.ts.map +1 -0
  33. package/dist/tools/hover.js +44 -0
  34. package/dist/tools/hover.js.map +1 -0
  35. package/dist/tools/index.d.ts +18 -0
  36. package/dist/tools/index.d.ts.map +1 -0
  37. package/dist/tools/index.js +51 -0
  38. package/dist/tools/index.js.map +1 -0
  39. package/dist/tools/knowledge.d.ts +56 -0
  40. package/dist/tools/knowledge.d.ts.map +1 -0
  41. package/dist/tools/knowledge.js +98 -0
  42. package/dist/tools/knowledge.js.map +1 -0
  43. package/dist/tools/navigate.d.ts +9 -0
  44. package/dist/tools/navigate.d.ts.map +1 -0
  45. package/dist/tools/navigate.js +48 -0
  46. package/dist/tools/navigate.js.map +1 -0
  47. package/dist/tools/press-key.d.ts +9 -0
  48. package/dist/tools/press-key.d.ts.map +1 -0
  49. package/dist/tools/press-key.js +38 -0
  50. package/dist/tools/press-key.js.map +1 -0
  51. package/dist/tools/report.d.ts +29 -0
  52. package/dist/tools/report.d.ts.map +1 -0
  53. package/dist/tools/report.js +92 -0
  54. package/dist/tools/report.js.map +1 -0
  55. package/dist/tools/screenshot.d.ts +9 -0
  56. package/dist/tools/screenshot.d.ts.map +1 -0
  57. package/dist/tools/screenshot.js +54 -0
  58. package/dist/tools/screenshot.js.map +1 -0
  59. package/dist/tools/snapshot.d.ts +13 -0
  60. package/dist/tools/snapshot.d.ts.map +1 -0
  61. package/dist/tools/snapshot.js +134 -0
  62. package/dist/tools/snapshot.js.map +1 -0
  63. package/dist/tools/types.d.ts +329 -0
  64. package/dist/tools/types.d.ts.map +1 -0
  65. package/dist/tools/types.js +102 -0
  66. package/dist/tools/types.js.map +1 -0
  67. package/dist/tools/wait.d.ts +9 -0
  68. package/dist/tools/wait.d.ts.map +1 -0
  69. package/dist/tools/wait.js +64 -0
  70. package/dist/tools/wait.js.map +1 -0
  71. package/dist/transports/index.d.ts +8 -0
  72. package/dist/transports/index.d.ts.map +1 -0
  73. package/dist/transports/index.js +14 -0
  74. package/dist/transports/index.js.map +1 -0
  75. package/dist/transports/stdio.d.ts +8 -0
  76. package/dist/transports/stdio.d.ts.map +1 -0
  77. package/dist/transports/stdio.js +12 -0
  78. package/dist/transports/stdio.js.map +1 -0
  79. package/dist/transports/websocket.d.ts +87 -0
  80. package/dist/transports/websocket.d.ts.map +1 -0
  81. package/dist/transports/websocket.js +200 -0
  82. package/dist/transports/websocket.js.map +1 -0
  83. package/package.json +53 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../../src/tools/hover.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAqB,WAAW,EAAE,MAAM,YAAY,CAAC;AAG5D,wBAAsB,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAmC7E"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /**
3
+ * Hover Tool
4
+ *
5
+ * Hovers over elements to trigger hover states, tooltips, etc.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.hover = hover;
9
+ const types_js_1 = require("./types.js");
10
+ const click_js_1 = require("./click.js");
11
+ async function hover(page, params) {
12
+ const parseResult = types_js_1.HoverParamsSchema.safeParse(params);
13
+ if (!parseResult.success) {
14
+ return {
15
+ success: false,
16
+ error: `Invalid parameters: ${parseResult.error.message}`,
17
+ };
18
+ }
19
+ const { selector, ref, timeout } = parseResult.data;
20
+ // Resolve selector from ref if provided
21
+ const resolvedSelector = ref ? (0, click_js_1.getRef)(ref) : selector;
22
+ if (!resolvedSelector) {
23
+ return {
24
+ success: false,
25
+ error: ref ? `Unknown ref: ${ref}` : 'No selector provided',
26
+ };
27
+ }
28
+ try {
29
+ await page.hover(resolvedSelector, { timeout });
30
+ return {
31
+ success: true,
32
+ selector: resolvedSelector,
33
+ };
34
+ }
35
+ catch (err) {
36
+ const message = err instanceof Error ? err.message : String(err);
37
+ return {
38
+ success: false,
39
+ error: `Hover failed on "${resolvedSelector}": ${message}`,
40
+ selector: resolvedSelector,
41
+ };
42
+ }
43
+ }
44
+ //# sourceMappingURL=hover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hover.js","sourceRoot":"","sources":["../../src/tools/hover.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAMH,sBAmCC;AAtCD,yCAA4D;AAC5D,yCAAoC;AAE7B,KAAK,UAAU,KAAK,CAAC,IAAU,EAAE,MAAe;IACnD,MAAM,WAAW,GAAG,4BAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,uBAAuB,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE;SAC5D,CAAC;IACN,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC;IAEpD,wCAAwC;IACxC,MAAM,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC,IAAA,iBAAM,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC,sBAAsB;SAC9D,CAAC;IACN,CAAC;IAED,IAAI,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAEhD,OAAO;YACH,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,gBAAgB;SAC7B,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,oBAAoB,gBAAgB,MAAM,OAAO,EAAE;YAC1D,QAAQ,EAAE,gBAAgB;SAC7B,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Tools Index
3
+ *
4
+ * Exports all browser automation tools.
5
+ */
6
+ export * from './types.js';
7
+ export { navigate } from './navigate.js';
8
+ export { click, setRef, getRef, clearRefs } from './click.js';
9
+ export { fill } from './fill.js';
10
+ export { hover } from './hover.js';
11
+ export { pressKey } from './press-key.js';
12
+ export { screenshot } from './screenshot.js';
13
+ export { snapshot } from './snapshot.js';
14
+ export { wait } from './wait.js';
15
+ export { evaluate } from './evaluate.js';
16
+ export { reportResults, configureKnowledgeApi, getKnowledgeApiConfig } from './report.js';
17
+ export { getKnowledge } from './knowledge.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ /**
3
+ * Tools Index
4
+ *
5
+ * Exports all browser automation tools.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.getKnowledge = exports.getKnowledgeApiConfig = exports.configureKnowledgeApi = exports.reportResults = exports.evaluate = exports.wait = exports.snapshot = exports.screenshot = exports.pressKey = exports.hover = exports.fill = exports.clearRefs = exports.getRef = exports.setRef = exports.click = exports.navigate = void 0;
23
+ __exportStar(require("./types.js"), exports);
24
+ var navigate_js_1 = require("./navigate.js");
25
+ Object.defineProperty(exports, "navigate", { enumerable: true, get: function () { return navigate_js_1.navigate; } });
26
+ var click_js_1 = require("./click.js");
27
+ Object.defineProperty(exports, "click", { enumerable: true, get: function () { return click_js_1.click; } });
28
+ Object.defineProperty(exports, "setRef", { enumerable: true, get: function () { return click_js_1.setRef; } });
29
+ Object.defineProperty(exports, "getRef", { enumerable: true, get: function () { return click_js_1.getRef; } });
30
+ Object.defineProperty(exports, "clearRefs", { enumerable: true, get: function () { return click_js_1.clearRefs; } });
31
+ var fill_js_1 = require("./fill.js");
32
+ Object.defineProperty(exports, "fill", { enumerable: true, get: function () { return fill_js_1.fill; } });
33
+ var hover_js_1 = require("./hover.js");
34
+ Object.defineProperty(exports, "hover", { enumerable: true, get: function () { return hover_js_1.hover; } });
35
+ var press_key_js_1 = require("./press-key.js");
36
+ Object.defineProperty(exports, "pressKey", { enumerable: true, get: function () { return press_key_js_1.pressKey; } });
37
+ var screenshot_js_1 = require("./screenshot.js");
38
+ Object.defineProperty(exports, "screenshot", { enumerable: true, get: function () { return screenshot_js_1.screenshot; } });
39
+ var snapshot_js_1 = require("./snapshot.js");
40
+ Object.defineProperty(exports, "snapshot", { enumerable: true, get: function () { return snapshot_js_1.snapshot; } });
41
+ var wait_js_1 = require("./wait.js");
42
+ Object.defineProperty(exports, "wait", { enumerable: true, get: function () { return wait_js_1.wait; } });
43
+ var evaluate_js_1 = require("./evaluate.js");
44
+ Object.defineProperty(exports, "evaluate", { enumerable: true, get: function () { return evaluate_js_1.evaluate; } });
45
+ var report_js_1 = require("./report.js");
46
+ Object.defineProperty(exports, "reportResults", { enumerable: true, get: function () { return report_js_1.reportResults; } });
47
+ Object.defineProperty(exports, "configureKnowledgeApi", { enumerable: true, get: function () { return report_js_1.configureKnowledgeApi; } });
48
+ Object.defineProperty(exports, "getKnowledgeApiConfig", { enumerable: true, get: function () { return report_js_1.getKnowledgeApiConfig; } });
49
+ var knowledge_js_1 = require("./knowledge.js");
50
+ Object.defineProperty(exports, "getKnowledge", { enumerable: true, get: function () { return knowledge_js_1.getKnowledge; } });
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,6CAA2B;AAC3B,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AACjB,uCAA8D;AAArD,iGAAA,KAAK,OAAA;AAAE,kGAAA,MAAM,OAAA;AAAE,kGAAA,MAAM,OAAA;AAAE,qGAAA,SAAS,OAAA;AACzC,qCAAiC;AAAxB,+FAAA,IAAI,OAAA;AACb,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AACd,+CAA0C;AAAjC,wGAAA,QAAQ,OAAA;AACjB,iDAA6C;AAApC,2GAAA,UAAU,OAAA;AACnB,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AACjB,qCAAiC;AAAxB,+FAAA,IAAI,OAAA;AACb,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AACjB,yCAA0F;AAAjF,0GAAA,aAAa,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AACpE,+CAA8C;AAArC,4GAAA,YAAY,OAAA"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Get Knowledge Tool
3
+ *
4
+ * Fetches QA patterns for a domain from AI2QA before testing.
5
+ * This tool enables local AI agents to benefit from accumulated
6
+ * knowledge about website patterns, quirks, and best practices.
7
+ */
8
+ import { z } from 'zod';
9
+ import { ToolResult } from './types.js';
10
+ /** Parameters schema for get_qa_knowledge tool */
11
+ export declare const GetKnowledgeParamsSchema: z.ZodObject<{
12
+ domain: z.ZodString;
13
+ flowName: z.ZodOptional<z.ZodString>;
14
+ includeSelectors: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
15
+ includeQuirks: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ domain: string;
18
+ includeSelectors: boolean;
19
+ includeQuirks: boolean;
20
+ flowName?: string | undefined;
21
+ }, {
22
+ domain: string;
23
+ flowName?: string | undefined;
24
+ includeSelectors?: boolean | undefined;
25
+ includeQuirks?: boolean | undefined;
26
+ }>;
27
+ export type GetKnowledgeParams = z.infer<typeof GetKnowledgeParamsSchema>;
28
+ /** Pattern returned from knowledge API */
29
+ export interface PatternInfo {
30
+ key: string;
31
+ selector: string;
32
+ patternType: string;
33
+ successRate: number;
34
+ avgDurationMs?: number;
35
+ alternatives?: {
36
+ selector: string;
37
+ selectorType: string;
38
+ successRate: number;
39
+ }[];
40
+ }
41
+ /** Result from get_qa_knowledge tool */
42
+ export interface GetKnowledgeResult extends ToolResult {
43
+ domain?: string;
44
+ framework?: string;
45
+ patterns?: PatternInfo[];
46
+ quirks?: string[];
47
+ creditsCharged?: number;
48
+ }
49
+ /**
50
+ * Fetches QA knowledge for a domain from the AI2QA cloud.
51
+ *
52
+ * @param args - The query parameters
53
+ * @returns Knowledge bundle with patterns and quirks
54
+ */
55
+ export declare function getKnowledge(args: Record<string, unknown>): Promise<GetKnowledgeResult>;
56
+ //# sourceMappingURL=knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/tools/knowledge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,kDAAkD;AAClD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;EAKnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACvB,EAAE,CAAC;CACP;AAED,wCAAwC;AACxC,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CA0F7B"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ /**
3
+ * Get Knowledge Tool
4
+ *
5
+ * Fetches QA patterns for a domain from AI2QA before testing.
6
+ * This tool enables local AI agents to benefit from accumulated
7
+ * knowledge about website patterns, quirks, and best practices.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.GetKnowledgeParamsSchema = void 0;
11
+ exports.getKnowledge = getKnowledge;
12
+ const zod_1 = require("zod");
13
+ const report_js_1 = require("./report.js");
14
+ /** Parameters schema for get_qa_knowledge tool */
15
+ exports.GetKnowledgeParamsSchema = zod_1.z.object({
16
+ domain: zod_1.z.string().describe('Target domain (e.g., app.example.com)'),
17
+ flowName: zod_1.z.string().optional().describe('Optional: specific flow (login, checkout)'),
18
+ includeSelectors: zod_1.z.boolean().optional().default(true).describe('Include selector patterns'),
19
+ includeQuirks: zod_1.z.boolean().optional().default(true).describe('Include site quirks'),
20
+ });
21
+ /**
22
+ * Fetches QA knowledge for a domain from the AI2QA cloud.
23
+ *
24
+ * @param args - The query parameters
25
+ * @returns Knowledge bundle with patterns and quirks
26
+ */
27
+ async function getKnowledge(args) {
28
+ // Validate parameters
29
+ const parseResult = exports.GetKnowledgeParamsSchema.safeParse(args);
30
+ if (!parseResult.success) {
31
+ return {
32
+ success: false,
33
+ error: `Invalid parameters: ${parseResult.error.message}`,
34
+ };
35
+ }
36
+ const params = parseResult.data;
37
+ const apiConfig = (0, report_js_1.getKnowledgeApiConfig)();
38
+ // Check if API is configured
39
+ if (!apiConfig) {
40
+ console.error(`[GetKnowledge] No API configured, returning empty result for domain: ${params.domain}`);
41
+ return {
42
+ success: true,
43
+ domain: params.domain,
44
+ framework: undefined,
45
+ patterns: [],
46
+ quirks: [],
47
+ creditsCharged: 0,
48
+ };
49
+ }
50
+ try {
51
+ // Build query parameters
52
+ const queryParams = new URLSearchParams({
53
+ includeSelectors: String(params.includeSelectors ?? true),
54
+ includeQuirks: String(params.includeQuirks ?? true),
55
+ });
56
+ if (params.flowName) {
57
+ queryParams.set('flowName', params.flowName);
58
+ }
59
+ const response = await fetch(`${apiConfig.baseUrl}/api/v1/knowledge/domain/${encodeURIComponent(params.domain)}?${queryParams}`, {
60
+ method: 'GET',
61
+ headers: {
62
+ 'Content-Type': 'application/json',
63
+ ...(apiConfig.token ? { Authorization: `Bearer ${apiConfig.token}` } : {}),
64
+ },
65
+ });
66
+ if (!response.ok) {
67
+ const errorText = await response.text();
68
+ return {
69
+ success: false,
70
+ error: `API error ${response.status}: ${errorText}`,
71
+ };
72
+ }
73
+ const data = await response.json();
74
+ if (data.error) {
75
+ return {
76
+ success: false,
77
+ error: data.error,
78
+ };
79
+ }
80
+ console.error(`[GetKnowledge] Fetched ${data.patterns.length} patterns and ${data.quirks.length} quirks for ${params.domain}`);
81
+ return {
82
+ success: true,
83
+ domain: data.domain,
84
+ framework: data.framework,
85
+ patterns: data.patterns,
86
+ quirks: data.quirks,
87
+ creditsCharged: data.creditsCharged,
88
+ };
89
+ }
90
+ catch (error) {
91
+ const message = error instanceof Error ? error.message : 'Unknown error';
92
+ return {
93
+ success: false,
94
+ error: `Failed to fetch knowledge: ${message}`,
95
+ };
96
+ }
97
+ }
98
+ //# sourceMappingURL=knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/tools/knowledge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Navigate Tool
3
+ *
4
+ * Handles page navigation: goto URL, reload, back, forward.
5
+ */
6
+ import type { Page } from 'playwright';
7
+ import { NavigateResult } from './types.js';
8
+ export declare function navigate(page: Page, params: unknown): Promise<NavigateResult>;
9
+ //# sourceMappingURL=navigate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAwB,cAAc,EAAE,MAAM,YAAY,CAAC;AAElE,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAuCnF"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /**
3
+ * Navigate Tool
4
+ *
5
+ * Handles page navigation: goto URL, reload, back, forward.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.navigate = navigate;
9
+ const types_js_1 = require("./types.js");
10
+ async function navigate(page, params) {
11
+ const parseResult = types_js_1.NavigateParamsSchema.safeParse(params);
12
+ if (!parseResult.success) {
13
+ return {
14
+ success: false,
15
+ error: `Invalid parameters: ${parseResult.error.message}`,
16
+ };
17
+ }
18
+ const { url, type, timeout } = parseResult.data;
19
+ try {
20
+ switch (type) {
21
+ case 'goto':
22
+ await page.goto(url, { timeout, waitUntil: 'domcontentloaded' });
23
+ break;
24
+ case 'reload':
25
+ await page.reload({ timeout, waitUntil: 'domcontentloaded' });
26
+ break;
27
+ case 'back':
28
+ await page.goBack({ timeout, waitUntil: 'domcontentloaded' });
29
+ break;
30
+ case 'forward':
31
+ await page.goForward({ timeout, waitUntil: 'domcontentloaded' });
32
+ break;
33
+ }
34
+ return {
35
+ success: true,
36
+ url: page.url(),
37
+ title: await page.title(),
38
+ };
39
+ }
40
+ catch (err) {
41
+ const message = err instanceof Error ? err.message : String(err);
42
+ return {
43
+ success: false,
44
+ error: `Navigation failed: ${message}`,
45
+ };
46
+ }
47
+ }
48
+ //# sourceMappingURL=navigate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAKH,4BAuCC;AAzCD,yCAAkE;AAE3D,KAAK,UAAU,QAAQ,CAAC,IAAU,EAAE,MAAe;IACtD,MAAM,WAAW,GAAG,+BAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,uBAAuB,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE;SAC5D,CAAC;IACN,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC;IAEhD,IAAI,CAAC;QACD,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,MAAM;gBACP,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBACjE,MAAM;YACV,KAAK,QAAQ;gBACT,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC9D,MAAM;YACV,KAAK,MAAM;gBACP,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC9D,MAAM;YACV,KAAK,SAAS;gBACV,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBACjE,MAAM;QACd,CAAC;QAED,OAAO;YACH,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;YACf,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE;SAC5B,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,sBAAsB,OAAO,EAAE;SACzC,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Press Key Tool
3
+ *
4
+ * Simulates keyboard key presses.
5
+ */
6
+ import type { Page } from 'playwright';
7
+ import { PressKeyResult } from './types.js';
8
+ export declare function pressKey(page: Page, params: unknown): Promise<PressKeyResult>;
9
+ //# sourceMappingURL=press-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"press-key.d.ts","sourceRoot":"","sources":["../../src/tools/press-key.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAwB,cAAc,EAAE,MAAM,YAAY,CAAC;AAElE,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CA8BnF"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /**
3
+ * Press Key Tool
4
+ *
5
+ * Simulates keyboard key presses.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.pressKey = pressKey;
9
+ const types_js_1 = require("./types.js");
10
+ async function pressKey(page, params) {
11
+ const parseResult = types_js_1.PressKeyParamsSchema.safeParse(params);
12
+ if (!parseResult.success) {
13
+ return {
14
+ success: false,
15
+ error: `Invalid parameters: ${parseResult.error.message}`,
16
+ };
17
+ }
18
+ const { key, modifiers } = parseResult.data;
19
+ try {
20
+ // Build key combination string (e.g., "Control+Shift+A")
21
+ const keyCombo = modifiers && modifiers.length > 0
22
+ ? [...modifiers, key].join('+')
23
+ : key;
24
+ await page.keyboard.press(keyCombo);
25
+ return {
26
+ success: true,
27
+ key: keyCombo,
28
+ };
29
+ }
30
+ catch (err) {
31
+ const message = err instanceof Error ? err.message : String(err);
32
+ return {
33
+ success: false,
34
+ error: `Press key failed: ${message}`,
35
+ };
36
+ }
37
+ }
38
+ //# sourceMappingURL=press-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"press-key.js","sourceRoot":"","sources":["../../src/tools/press-key.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAKH,4BA8BC;AAhCD,yCAAkE;AAE3D,KAAK,UAAU,QAAQ,CAAC,IAAU,EAAE,MAAe;IACtD,MAAM,WAAW,GAAG,+BAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,uBAAuB,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE;SAC5D,CAAC;IACN,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC;IAE5C,IAAI,CAAC;QACD,yDAAyD;QACzD,MAAM,QAAQ,GAAG,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAC9C,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC/B,CAAC,CAAC,GAAG,CAAC;QAEV,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEpC,OAAO;YACH,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,QAAQ;SAChB,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,qBAAqB,OAAO,EAAE;SACxC,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Report Results Tool
3
+ *
4
+ * Reports test execution results back to AI2QA for knowledge learning.
5
+ * This tool is used to contribute patterns discovered during test runs
6
+ * to the global knowledge base.
7
+ */
8
+ import { ReportResultsResult } from './types.js';
9
+ /** Configuration for the knowledge API */
10
+ export interface KnowledgeApiConfig {
11
+ baseUrl: string;
12
+ token?: string;
13
+ }
14
+ /**
15
+ * Configure the knowledge API endpoint.
16
+ */
17
+ export declare function configureKnowledgeApi(config: KnowledgeApiConfig): void;
18
+ /**
19
+ * Get the current API configuration.
20
+ */
21
+ export declare function getKnowledgeApiConfig(): KnowledgeApiConfig | null;
22
+ /**
23
+ * Report test results to the knowledge API.
24
+ *
25
+ * @param args - The report parameters
26
+ * @returns Result indicating how many patterns were stored/updated
27
+ */
28
+ export declare function reportResults(args: Record<string, unknown>): Promise<ReportResultsResult>;
29
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/tools/report.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA6B,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE5E,0CAA0C;AAC1C,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAEtE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,GAAG,IAAI,CAEjE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CAoE9B"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /**
3
+ * Report Results Tool
4
+ *
5
+ * Reports test execution results back to AI2QA for knowledge learning.
6
+ * This tool is used to contribute patterns discovered during test runs
7
+ * to the global knowledge base.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.configureKnowledgeApi = configureKnowledgeApi;
11
+ exports.getKnowledgeApiConfig = getKnowledgeApiConfig;
12
+ exports.reportResults = reportResults;
13
+ const types_js_1 = require("./types.js");
14
+ let apiConfig = null;
15
+ /**
16
+ * Configure the knowledge API endpoint.
17
+ */
18
+ function configureKnowledgeApi(config) {
19
+ apiConfig = config;
20
+ }
21
+ /**
22
+ * Get the current API configuration.
23
+ */
24
+ function getKnowledgeApiConfig() {
25
+ return apiConfig;
26
+ }
27
+ /**
28
+ * Report test results to the knowledge API.
29
+ *
30
+ * @param args - The report parameters
31
+ * @returns Result indicating how many patterns were stored/updated
32
+ */
33
+ async function reportResults(args) {
34
+ // Validate parameters
35
+ const parseResult = types_js_1.ReportResultsParamsSchema.safeParse(args);
36
+ if (!parseResult.success) {
37
+ return {
38
+ success: false,
39
+ error: `Invalid parameters: ${parseResult.error.message}`,
40
+ };
41
+ }
42
+ const params = parseResult.data;
43
+ // Check if API is configured
44
+ if (!apiConfig) {
45
+ // If no API configured, just log locally and return success
46
+ console.error(`[ReportResults] No API configured, would report to domain: ${params.domain}`);
47
+ console.error(`[ReportResults] Results: ${JSON.stringify(params.results ?? [], null, 2)}`);
48
+ console.error(`[ReportResults] New patterns: ${JSON.stringify(params.newPatterns ?? [], null, 2)}`);
49
+ return {
50
+ success: true,
51
+ patternsStored: 0,
52
+ patternsUpdated: 0,
53
+ message: 'Results logged locally (no API configured)',
54
+ };
55
+ }
56
+ try {
57
+ const response = await fetch(`${apiConfig.baseUrl}/api/v1/knowledge/learn`, {
58
+ method: 'POST',
59
+ headers: {
60
+ 'Content-Type': 'application/json',
61
+ ...(apiConfig.token ? { Authorization: `Bearer ${apiConfig.token}` } : {}),
62
+ },
63
+ body: JSON.stringify({
64
+ domain: params.domain,
65
+ results: params.results,
66
+ newPatterns: params.newPatterns,
67
+ }),
68
+ });
69
+ if (!response.ok) {
70
+ const errorText = await response.text();
71
+ return {
72
+ success: false,
73
+ error: `API error ${response.status}: ${errorText}`,
74
+ };
75
+ }
76
+ const data = await response.json();
77
+ return {
78
+ success: true,
79
+ patternsStored: data.patternsStored,
80
+ patternsUpdated: data.patternsUpdated,
81
+ message: data.message,
82
+ };
83
+ }
84
+ catch (error) {
85
+ const message = error instanceof Error ? error.message : 'Unknown error';
86
+ return {
87
+ success: false,
88
+ error: `Failed to report results: ${message}`,
89
+ };
90
+ }
91
+ }
92
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/tools/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Screenshot Tool
3
+ *
4
+ * Captures screenshots of the page or specific elements.
5
+ */
6
+ import type { Page } from 'playwright';
7
+ import { ScreenshotResult } from './types.js';
8
+ export declare function screenshot(page: Page, params: unknown): Promise<ScreenshotResult>;
9
+ //# sourceMappingURL=screenshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAA0B,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEtE,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoDvF"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * Screenshot Tool
4
+ *
5
+ * Captures screenshots of the page or specific elements.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.screenshot = screenshot;
9
+ const types_js_1 = require("./types.js");
10
+ async function screenshot(page, params) {
11
+ const parseResult = types_js_1.ScreenshotParamsSchema.safeParse(params);
12
+ if (!parseResult.success) {
13
+ return {
14
+ success: false,
15
+ error: `Invalid parameters: ${parseResult.error.message}`,
16
+ };
17
+ }
18
+ const { fullPage, selector, format, quality } = parseResult.data;
19
+ try {
20
+ const options = {
21
+ fullPage: selector ? false : fullPage,
22
+ type: format,
23
+ };
24
+ if (format === 'jpeg' && quality !== undefined) {
25
+ options.quality = quality;
26
+ }
27
+ let buffer;
28
+ if (selector) {
29
+ // Screenshot specific element
30
+ const element = page.locator(selector);
31
+ buffer = await element.screenshot(options);
32
+ }
33
+ else {
34
+ // Screenshot entire page or viewport
35
+ buffer = await page.screenshot(options);
36
+ }
37
+ const base64 = buffer.toString('base64');
38
+ const mimeType = format === 'jpeg' ? 'image/jpeg' : 'image/png';
39
+ return {
40
+ success: true,
41
+ type: 'image',
42
+ data: base64,
43
+ mimeType,
44
+ };
45
+ }
46
+ catch (err) {
47
+ const message = err instanceof Error ? err.message : String(err);
48
+ return {
49
+ success: false,
50
+ error: `Screenshot failed: ${message}`,
51
+ };
52
+ }
53
+ }
54
+ //# sourceMappingURL=screenshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAKH,gCAoDC;AAtDD,yCAAsE;AAE/D,KAAK,UAAU,UAAU,CAAC,IAAU,EAAE,MAAe;IACxD,MAAM,WAAW,GAAG,iCAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,uBAAuB,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE;SAC5D,CAAC;IACN,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC;IAEjE,IAAI,CAAC;QACD,MAAM,OAAO,GAIT;YACA,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;YACrC,IAAI,EAAE,MAAM;SACf,CAAC;QAEF,IAAI,MAAM,KAAK,MAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAC9B,CAAC;QAED,IAAI,MAAc,CAAC;QAEnB,IAAI,QAAQ,EAAE,CAAC;YACX,8BAA8B;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACJ,qCAAqC;YACrC,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;QAEhE,OAAO;YACH,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,MAAM;YACZ,QAAQ;SACX,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACH,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,sBAAsB,OAAO,EAAE;SACzC,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Snapshot Tool
3
+ *
4
+ * Captures DOM/Accessibility snapshots for AI analysis.
5
+ * Supports three modes:
6
+ * - accessibility: Uses Playwright's accessibility tree (recommended for AI)
7
+ * - html: Raw HTML content
8
+ * - text: Visible text content only
9
+ */
10
+ import type { Page } from 'playwright';
11
+ import { SnapshotResult } from './types.js';
12
+ export declare function snapshot(page: Page, params: unknown): Promise<SnapshotResult>;
13
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/tools/snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAwB,cAAc,EAAE,MAAM,YAAY,CAAC;AAMlE,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CA4CnF"}