@opentabs-dev/opentabs-plugin-meticulous 0.0.76

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 (121) hide show
  1. package/README.md +159 -0
  2. package/dist/adapter.iife.js +15945 -0
  3. package/dist/adapter.iife.js.map +7 -0
  4. package/dist/index.d.ts +14 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +80 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/meticulous-api.d.ts +34 -0
  9. package/dist/meticulous-api.d.ts.map +1 -0
  10. package/dist/meticulous-api.js +477 -0
  11. package/dist/meticulous-api.js.map +1 -0
  12. package/dist/tools/accept-all-diffs.d.ts +8 -0
  13. package/dist/tools/accept-all-diffs.d.ts.map +1 -0
  14. package/dist/tools/accept-all-diffs.js +23 -0
  15. package/dist/tools/accept-all-diffs.js.map +1 -0
  16. package/dist/tools/check-for-flakes.d.ts +8 -0
  17. package/dist/tools/check-for-flakes.d.ts.map +1 -0
  18. package/dist/tools/check-for-flakes.js +26 -0
  19. package/dist/tools/check-for-flakes.js.map +1 -0
  20. package/dist/tools/compare-replays.d.ts +68 -0
  21. package/dist/tools/compare-replays.d.ts.map +1 -0
  22. package/dist/tools/compare-replays.js +53 -0
  23. package/dist/tools/compare-replays.js.map +1 -0
  24. package/dist/tools/create-label-action.d.ts +16 -0
  25. package/dist/tools/create-label-action.d.ts.map +1 -0
  26. package/dist/tools/create-label-action.js +29 -0
  27. package/dist/tools/create-label-action.js.map +1 -0
  28. package/dist/tools/get-current-user.d.ts +12 -0
  29. package/dist/tools/get-current-user.d.ts.map +1 -0
  30. package/dist/tools/get-current-user.js +22 -0
  31. package/dist/tools/get-current-user.js.map +1 -0
  32. package/dist/tools/get-project-pull-request.d.ts +14 -0
  33. package/dist/tools/get-project-pull-request.d.ts.map +1 -0
  34. package/dist/tools/get-project-pull-request.js +23 -0
  35. package/dist/tools/get-project-pull-request.js.map +1 -0
  36. package/dist/tools/get-project.d.ts +20 -0
  37. package/dist/tools/get-project.d.ts.map +1 -0
  38. package/dist/tools/get-project.js +25 -0
  39. package/dist/tools/get-project.js.map +1 -0
  40. package/dist/tools/get-replay-screenshots.d.ts +16 -0
  41. package/dist/tools/get-replay-screenshots.d.ts.map +1 -0
  42. package/dist/tools/get-replay-screenshots.js +27 -0
  43. package/dist/tools/get-replay-screenshots.js.map +1 -0
  44. package/dist/tools/get-replay.d.ts +17 -0
  45. package/dist/tools/get-replay.d.ts.map +1 -0
  46. package/dist/tools/get-replay.js +21 -0
  47. package/dist/tools/get-replay.js.map +1 -0
  48. package/dist/tools/get-session-events.d.ts +14 -0
  49. package/dist/tools/get-session-events.d.ts.map +1 -0
  50. package/dist/tools/get-session-events.js +27 -0
  51. package/dist/tools/get-session-events.js.map +1 -0
  52. package/dist/tools/get-session.d.ts +19 -0
  53. package/dist/tools/get-session.d.ts.map +1 -0
  54. package/dist/tools/get-session.js +21 -0
  55. package/dist/tools/get-session.js.map +1 -0
  56. package/dist/tools/get-test-run-coverage.d.ts +83 -0
  57. package/dist/tools/get-test-run-coverage.d.ts.map +1 -0
  58. package/dist/tools/get-test-run-coverage.js +64 -0
  59. package/dist/tools/get-test-run-coverage.js.map +1 -0
  60. package/dist/tools/get-test-run-diffs.d.ts +56 -0
  61. package/dist/tools/get-test-run-diffs.d.ts.map +1 -0
  62. package/dist/tools/get-test-run-diffs.js +53 -0
  63. package/dist/tools/get-test-run-diffs.js.map +1 -0
  64. package/dist/tools/get-test-run-pr-description.d.ts +8 -0
  65. package/dist/tools/get-test-run-pr-description.d.ts.map +1 -0
  66. package/dist/tools/get-test-run-pr-description.js +26 -0
  67. package/dist/tools/get-test-run-pr-description.js.map +1 -0
  68. package/dist/tools/get-test-run-screenshots.d.ts +70 -0
  69. package/dist/tools/get-test-run-screenshots.d.ts.map +1 -0
  70. package/dist/tools/get-test-run-screenshots.js +61 -0
  71. package/dist/tools/get-test-run-screenshots.js.map +1 -0
  72. package/dist/tools/get-test-run-source-code.d.ts +9 -0
  73. package/dist/tools/get-test-run-source-code.d.ts.map +1 -0
  74. package/dist/tools/get-test-run-source-code.js +24 -0
  75. package/dist/tools/get-test-run-source-code.js.map +1 -0
  76. package/dist/tools/get-test-run-test-cases.d.ts +25 -0
  77. package/dist/tools/get-test-run-test-cases.d.ts.map +1 -0
  78. package/dist/tools/get-test-run-test-cases.js +60 -0
  79. package/dist/tools/get-test-run-test-cases.js.map +1 -0
  80. package/dist/tools/get-test-run.d.ts +29 -0
  81. package/dist/tools/get-test-run.d.ts.map +1 -0
  82. package/dist/tools/get-test-run.js +30 -0
  83. package/dist/tools/get-test-run.js.map +1 -0
  84. package/dist/tools/list-github-repositories.d.ts +11 -0
  85. package/dist/tools/list-github-repositories.d.ts.map +1 -0
  86. package/dist/tools/list-github-repositories.js +19 -0
  87. package/dist/tools/list-github-repositories.js.map +1 -0
  88. package/dist/tools/list-organization-members.d.ts +18 -0
  89. package/dist/tools/list-organization-members.d.ts.map +1 -0
  90. package/dist/tools/list-organization-members.js +21 -0
  91. package/dist/tools/list-organization-members.js.map +1 -0
  92. package/dist/tools/list-organizations.d.ts +9 -0
  93. package/dist/tools/list-organizations.d.ts.map +1 -0
  94. package/dist/tools/list-organizations.js +19 -0
  95. package/dist/tools/list-organizations.js.map +1 -0
  96. package/dist/tools/list-projects.d.ts +14 -0
  97. package/dist/tools/list-projects.d.ts.map +1 -0
  98. package/dist/tools/list-projects.js +19 -0
  99. package/dist/tools/list-projects.js.map +1 -0
  100. package/dist/tools/list-replays.d.ts +18 -0
  101. package/dist/tools/list-replays.d.ts.map +1 -0
  102. package/dist/tools/list-replays.js +25 -0
  103. package/dist/tools/list-replays.js.map +1 -0
  104. package/dist/tools/list-sessions.d.ts +20 -0
  105. package/dist/tools/list-sessions.d.ts.map +1 -0
  106. package/dist/tools/list-sessions.js +22 -0
  107. package/dist/tools/list-sessions.js.map +1 -0
  108. package/dist/tools/schemas.d.ts +560 -0
  109. package/dist/tools/schemas.d.ts.map +1 -0
  110. package/dist/tools/schemas.js +303 -0
  111. package/dist/tools/schemas.js.map +1 -0
  112. package/dist/tools/search-sessions.d.ts +24 -0
  113. package/dist/tools/search-sessions.d.ts.map +1 -0
  114. package/dist/tools/search-sessions.js +33 -0
  115. package/dist/tools/search-sessions.js.map +1 -0
  116. package/dist/tools/upsert-diff-approval.d.ts +12 -0
  117. package/dist/tools/upsert-diff-approval.d.ts.map +1 -0
  118. package/dist/tools/upsert-diff-approval.js +36 -0
  119. package/dist/tools/upsert-diff-approval.js.map +1 -0
  120. package/dist/tools.json +4020 -0
  121. package/package.json +58 -0
@@ -0,0 +1,26 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { graphql, mutations } from '../meticulous-api.js';
4
+ export const checkForFlakes = defineTool({
5
+ name: 'check_for_flakes',
6
+ displayName: 'Check for Flakes',
7
+ description: 'Trigger a flake detection check for a test run. Re-runs failing tests multiple times to determine if failures are flaky (non-deterministic).',
8
+ summary: 'Check for flaky tests',
9
+ icon: 'refresh-cw',
10
+ group: 'Test Runs',
11
+ input: z.object({
12
+ test_run_id: z.string().describe('Test run ID'),
13
+ rerun_count: z.number().optional().default(3).describe('Number of times to re-run tests for flake detection'),
14
+ }),
15
+ output: z.object({
16
+ id: z.string().nullable().describe('ID of the flake check run'),
17
+ }),
18
+ handle: async ({ test_run_id, rerun_count }) => {
19
+ const data = await graphql(mutations.CHECK_FOR_FLAKES, {
20
+ testRunId: test_run_id,
21
+ rerunTestsNTimes: rerun_count,
22
+ });
23
+ return { id: data.checkForFlakes?.id ?? null };
24
+ },
25
+ });
26
+ //# sourceMappingURL=check-for-flakes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-for-flakes.js","sourceRoot":"","sources":["../../src/tools/check-for-flakes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EACT,8IAA8I;IAChJ,OAAO,EAAE,uBAAuB;IAChC,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qDAAqD,CAAC;KAC9G,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KAChE,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC7C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAqC,SAAS,CAAC,gBAAgB,EAAE;YACzF,SAAS,EAAE,WAAW;YACtB,gBAAgB,EAAE,WAAW;SAC9B,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;IACjD,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod';
2
+ export declare const compareReplays: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ test_run_id: z.ZodString;
4
+ base_replay_id: z.ZodString;
5
+ }, z.core.$strip>, z.ZodObject<{
6
+ diff_id: z.ZodNullable<z.ZodString>;
7
+ divergences: z.ZodNullable<z.ZodArray<z.ZodString>>;
8
+ head_replay: z.ZodNullable<z.ZodObject<{
9
+ id: z.ZodString;
10
+ status: z.ZodNullable<z.ZodString>;
11
+ is_accurate: z.ZodNullable<z.ZodBoolean>;
12
+ app_url: z.ZodNullable<z.ZodString>;
13
+ }, z.core.$strip>>;
14
+ base_replay: z.ZodNullable<z.ZodObject<{
15
+ id: z.ZodString;
16
+ status: z.ZodNullable<z.ZodString>;
17
+ is_accurate: z.ZodNullable<z.ZodBoolean>;
18
+ app_url: z.ZodNullable<z.ZodString>;
19
+ }, z.core.$strip>>;
20
+ head_screenshots: z.ZodArray<z.ZodObject<{
21
+ filename: z.ZodString;
22
+ public_url: z.ZodString;
23
+ replay_id: z.ZodOptional<z.ZodString>;
24
+ route_url: z.ZodOptional<z.ZodString>;
25
+ route_group: z.ZodOptional<z.ZodString>;
26
+ identifier_type: z.ZodOptional<z.ZodString>;
27
+ event_number: z.ZodOptional<z.ZodNumber>;
28
+ }, z.core.$strip>>;
29
+ base_screenshots: z.ZodArray<z.ZodObject<{
30
+ filename: z.ZodString;
31
+ public_url: z.ZodString;
32
+ replay_id: z.ZodOptional<z.ZodString>;
33
+ route_url: z.ZodOptional<z.ZodString>;
34
+ route_group: z.ZodOptional<z.ZodString>;
35
+ identifier_type: z.ZodOptional<z.ZodString>;
36
+ event_number: z.ZodOptional<z.ZodNumber>;
37
+ }, z.core.$strip>>;
38
+ screenshot_diffs: z.ZodArray<z.ZodObject<{
39
+ outcome: z.ZodString;
40
+ user_visible_outcome: z.ZodString;
41
+ group_id: z.ZodNullable<z.ZodString>;
42
+ width: z.ZodNullable<z.ZodNumber>;
43
+ mismatch_pixels: z.ZodNullable<z.ZodNumber>;
44
+ diff_hash: z.ZodNullable<z.ZodString>;
45
+ base_screenshot: z.ZodNullable<z.ZodObject<{
46
+ filename: z.ZodString;
47
+ public_url: z.ZodString;
48
+ replay_id: z.ZodOptional<z.ZodString>;
49
+ route_url: z.ZodOptional<z.ZodString>;
50
+ route_group: z.ZodOptional<z.ZodString>;
51
+ identifier_type: z.ZodOptional<z.ZodString>;
52
+ event_number: z.ZodOptional<z.ZodNumber>;
53
+ }, z.core.$strip>>;
54
+ head_screenshot: z.ZodNullable<z.ZodObject<{
55
+ filename: z.ZodString;
56
+ public_url: z.ZodString;
57
+ replay_id: z.ZodOptional<z.ZodString>;
58
+ route_url: z.ZodOptional<z.ZodString>;
59
+ route_group: z.ZodOptional<z.ZodString>;
60
+ identifier_type: z.ZodOptional<z.ZodString>;
61
+ event_number: z.ZodOptional<z.ZodNumber>;
62
+ }, z.core.$strip>>;
63
+ diff_url_thumb: z.ZodNullable<z.ZodString>;
64
+ diff_url_full: z.ZodNullable<z.ZodString>;
65
+ changed_class_names: z.ZodArray<z.ZodString>;
66
+ }, z.core.$strip>>;
67
+ }, z.core.$strip>>;
68
+ //# sourceMappingURL=compare-replays.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-replays.d.ts","sourceRoot":"","sources":["../../src/tools/compare-replays.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4DzB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { graphql, queries } from '../meticulous-api.js';
4
+ import { diffResultSchema, replayInfoSchema, screenshotSchema, mapDiffResult, mapReplayInfo, mapScreenshot, } from './schemas.js';
5
+ export const compareReplays = defineTool({
6
+ name: 'compare_replays',
7
+ displayName: 'Compare Replays',
8
+ description: 'Compare a head replay against its base replay within a test run. Returns screenshot diffs with base/head/diff image URLs, divergences, and replay metadata. Use the base_replay_id from get_test_run_diffs results.',
9
+ summary: 'Compare replays in a test run',
10
+ icon: 'columns',
11
+ group: 'Replays',
12
+ input: z.object({
13
+ test_run_id: z.string().describe('Test run ID'),
14
+ base_replay_id: z.string().describe('Base replay ID (from get_test_run_diffs base_replay.id)'),
15
+ }),
16
+ output: z.object({
17
+ diff_id: z.string().nullable().describe('Replay diff ID'),
18
+ divergences: z
19
+ .array(z.string())
20
+ .nullable()
21
+ .describe('Structural divergences between replays (list of divergence descriptions)'),
22
+ head_replay: replayInfoSchema.nullable().describe('Head replay info'),
23
+ base_replay: replayInfoSchema.nullable().describe('Base replay info'),
24
+ head_screenshots: z.array(screenshotSchema).describe('Head replay screenshots'),
25
+ base_screenshots: z.array(screenshotSchema).describe('Base replay screenshots'),
26
+ screenshot_diffs: z.array(diffResultSchema).describe('Visual differences between screenshots'),
27
+ }),
28
+ handle: async ({ test_run_id, base_replay_id }) => {
29
+ const data = await graphql(queries.GET_COMPARE_REPLAYS, { testRunId: test_run_id, baseReplayId: base_replay_id });
30
+ const diff = data.testRun.replayDiff;
31
+ if (!diff) {
32
+ return {
33
+ diff_id: null,
34
+ divergences: null,
35
+ head_replay: null,
36
+ base_replay: null,
37
+ head_screenshots: [],
38
+ base_screenshots: [],
39
+ screenshot_diffs: [],
40
+ };
41
+ }
42
+ return {
43
+ diff_id: diff.id,
44
+ divergences: Array.isArray(diff.divergences) ? diff.divergences : null,
45
+ head_replay: mapReplayInfo(diff.headReplay),
46
+ base_replay: mapReplayInfo(diff.baseReplay),
47
+ head_screenshots: (diff.headReplay.screenshotsData ?? []).map(mapScreenshot),
48
+ base_screenshots: (diff.baseReplay.screenshotsData ?? []).map(mapScreenshot),
49
+ screenshot_diffs: (diff.screenshotDiffResults ?? []).map(mapDiffResult),
50
+ };
51
+ },
52
+ });
53
+ //# sourceMappingURL=compare-replays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-replays.js","sourceRoot":"","sources":["../../src/tools/compare-replays.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EACT,qNAAqN;IACvN,OAAO,EAAE,+BAA+B;IACxC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;KAC/F,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACzD,WAAW,EAAE,CAAC;aACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CAAC,0EAA0E,CAAC;QACvF,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACrE,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACrE,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC/E,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC/E,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KAC/F,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,EAAE;QAChD,MAAM,IAAI,GAAG,MAAM,OAAO,CAUvB,OAAO,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;QAE1F,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,IAAI;gBACjB,WAAW,EAAE,IAAI;gBACjB,WAAW,EAAE,IAAI;gBACjB,gBAAgB,EAAE,EAAE;gBACpB,gBAAgB,EAAE,EAAE;gBACpB,gBAAgB,EAAE,EAAE;aACrB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,WAAwB,CAAC,CAAC,CAAC,IAAI;YACpF,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,UAAiD,CAAC;YAClF,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,UAAiD,CAAC;YAClF,gBAAgB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;YAC5E,gBAAgB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;YAC5E,gBAAgB,EAAE,CAAC,IAAI,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;SACxE,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ export declare const createLabelAction: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ test_run_id: z.ZodString;
4
+ replay_diff_id: z.ZodOptional<z.ZodString>;
5
+ screenshot_file_name: z.ZodOptional<z.ZodString>;
6
+ label: z.ZodString;
7
+ }, z.core.$strip>, z.ZodObject<{
8
+ label_action: z.ZodObject<{
9
+ id: z.ZodString;
10
+ replay_diff_id: z.ZodString;
11
+ screenshot_file_name: z.ZodString;
12
+ label: z.ZodString;
13
+ created_at: z.ZodString;
14
+ }, z.core.$strip>;
15
+ }, z.core.$strip>>;
16
+ //# sourceMappingURL=create-label-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-label-action.d.ts","sourceRoot":"","sources":["../../src/tools/create-label-action.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;kBAwB5B,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { graphql, mutations } from '../meticulous-api.js';
4
+ import { labelActionSchema, mapLabelAction } from './schemas.js';
5
+ export const createLabelAction = defineTool({
6
+ name: 'create_label_action',
7
+ displayName: 'Create Label Action',
8
+ description: 'Label a specific screenshot diff as approved or rejected. Use this to approve or reject individual visual differences within a test run.',
9
+ summary: 'Label a screenshot diff',
10
+ icon: 'tag',
11
+ group: 'Test Runs',
12
+ input: z.object({
13
+ test_run_id: z.string().describe('Test run ID'),
14
+ replay_diff_id: z.string().optional().describe('Replay diff ID'),
15
+ screenshot_file_name: z.string().optional().describe('Screenshot filename'),
16
+ label: z.string().describe('Label to apply (e.g., approved, rejected)'),
17
+ }),
18
+ output: z.object({ label_action: labelActionSchema }),
19
+ handle: async ({ test_run_id, replay_diff_id, screenshot_file_name, label }) => {
20
+ const data = await graphql(mutations.CREATE_LABEL_ACTION, {
21
+ testRunId: test_run_id,
22
+ replayDiffId: replay_diff_id,
23
+ screenshotFileName: screenshot_file_name,
24
+ label,
25
+ });
26
+ return { label_action: mapLabelAction(data.createLabelAction) };
27
+ },
28
+ });
29
+ //# sourceMappingURL=create-label-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-label-action.js","sourceRoot":"","sources":["../../src/tools/create-label-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,qBAAqB;IAClC,WAAW,EACT,0IAA0I;IAC5I,OAAO,EAAE,yBAAyB;IAClC,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAChE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC3E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KACxE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC;IACrD,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAiD,SAAS,CAAC,mBAAmB,EAAE;YACxG,SAAS,EAAE,WAAW;YACtB,YAAY,EAAE,cAAc;YAC5B,kBAAkB,EAAE,oBAAoB;YACxC,KAAK;SACN,CAAC,CAAC;QACH,OAAO,EAAE,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;IAClE,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+ export declare const getCurrentUser: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{}, z.core.$strip>, z.ZodObject<{
3
+ user: z.ZodObject<{
4
+ id: z.ZodString;
5
+ email: z.ZodString;
6
+ first_name: z.ZodString;
7
+ last_name: z.ZodString;
8
+ is_admin: z.ZodBoolean;
9
+ }, z.core.$strip>;
10
+ is_signed_in: z.ZodBoolean;
11
+ }, z.core.$strip>>;
12
+ //# sourceMappingURL=get-current-user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-current-user.d.ts","sourceRoot":"","sources":["../../src/tools/get-current-user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;;;;;;;kBAkBzB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { graphql, queries } from '../meticulous-api.js';
4
+ import { userSchema, mapUser } from './schemas.js';
5
+ export const getCurrentUser = defineTool({
6
+ name: 'get_current_user',
7
+ displayName: 'Get Current User',
8
+ description: 'Get the currently authenticated user profile including email, name, and admin status.',
9
+ summary: 'Get the current user profile',
10
+ icon: 'user',
11
+ group: 'User',
12
+ input: z.object({}),
13
+ output: z.object({ user: userSchema, is_signed_in: z.boolean() }),
14
+ handle: async () => {
15
+ const data = await graphql(queries.GET_USER_CONTEXT);
16
+ return {
17
+ user: mapUser(data.authInfo.user),
18
+ is_signed_in: data.authInfo.isSignedIn,
19
+ };
20
+ },
21
+ });
22
+ //# sourceMappingURL=get-current-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-current-user.js","sourceRoot":"","sources":["../../src/tools/get-current-user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EAAE,uFAAuF;IACpG,OAAO,EAAE,8BAA8B;IACvC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;IACjE,MAAM,EAAE,KAAK,IAAI,EAAE;QACjB,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,OAAO,CAAC,gBAAgB,CACzB,CAAC;QACF,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;SACvC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export declare const getProjectPullRequest: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ organization_name: z.ZodString;
4
+ project_name: z.ZodString;
5
+ pull_request_id: z.ZodString;
6
+ }, z.core.$strip>, z.ZodObject<{
7
+ pull_request: z.ZodNullable<z.ZodObject<{
8
+ id: z.ZodString;
9
+ approval_state: z.ZodNullable<z.ZodString>;
10
+ latest_test_run_id: z.ZodNullable<z.ZodString>;
11
+ created_at: z.ZodString;
12
+ }, z.core.$strip>>;
13
+ }, z.core.$strip>>;
14
+ //# sourceMappingURL=get-project-pull-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-project-pull-request.d.ts","sourceRoot":"","sources":["../../src/tools/get-project-pull-request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;kBAqBhC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { graphql, queries } from '../meticulous-api.js';
4
+ import { pullRequestSchema, mapPullRequest } from './schemas.js';
5
+ export const getProjectPullRequest = defineTool({
6
+ name: 'get_project_pull_request',
7
+ displayName: 'Get Project Pull Request',
8
+ description: 'Get the Meticulous test status for a specific pull request by its hosting provider ID (e.g., GitHub PR number).',
9
+ summary: 'Get PR test status',
10
+ icon: 'git-pull-request',
11
+ group: 'Projects',
12
+ input: z.object({
13
+ organization_name: z.string().describe('Organization name'),
14
+ project_name: z.string().describe('Project name'),
15
+ pull_request_id: z.string().describe('Hosting provider PR identifier (e.g., GitHub PR number as string)'),
16
+ }),
17
+ output: z.object({ pull_request: pullRequestSchema.nullable() }),
18
+ handle: async ({ organization_name, project_name, pull_request_id }) => {
19
+ const data = await graphql(queries.GET_PROJECT_PULL_REQUEST, { organizationName: organization_name, projectName: project_name, pullRequestId: pull_request_id });
20
+ return { pull_request: data.project.pullRequest ? mapPullRequest(data.project.pullRequest) : null };
21
+ },
22
+ });
23
+ //# sourceMappingURL=get-project-pull-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-project-pull-request.js","sourceRoot":"","sources":["../../src/tools/get-project-pull-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;IAC9C,IAAI,EAAE,0BAA0B;IAChC,WAAW,EAAE,0BAA0B;IACvC,WAAW,EACT,iHAAiH;IACnH,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC3D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACjD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;KAC1G,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC;IAChE,MAAM,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,EAAE;QACrE,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,OAAO,CAAC,wBAAwB,EAChC,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,CACnG,CAAC;QACF,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtG,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ export declare const getProject: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ organization_name: z.ZodString;
4
+ project_name: z.ZodString;
5
+ }, z.core.$strip>, z.ZodObject<{
6
+ project: z.ZodObject<{
7
+ id: z.ZodString;
8
+ name: z.ZodString;
9
+ organization_name: z.ZodString;
10
+ host_kind: z.ZodNullable<z.ZodString>;
11
+ status: z.ZodString;
12
+ recording_token: z.ZodNullable<z.ZodString>;
13
+ api_token: z.ZodNullable<z.ZodString>;
14
+ created_at: z.ZodString;
15
+ updated_at: z.ZodString;
16
+ enterprise_grade_security: z.ZodBoolean;
17
+ auto_session_selection: z.ZodBoolean;
18
+ }, z.core.$strip>;
19
+ }, z.core.$strip>>;
20
+ //# sourceMappingURL=get-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-project.d.ts","sourceRoot":"","sources":["../../src/tools/get-project.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;kBAmBrB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { graphql, queries } from '../meticulous-api.js';
4
+ import { projectSchema, mapProject } from './schemas.js';
5
+ export const getProject = defineTool({
6
+ name: 'get_project',
7
+ displayName: 'Get Project',
8
+ description: 'Get detailed information about a specific project including tokens, settings, and configuration.',
9
+ summary: 'Get project details',
10
+ icon: 'folder-open',
11
+ group: 'Projects',
12
+ input: z.object({
13
+ organization_name: z.string().describe('Organization name'),
14
+ project_name: z.string().describe('Project name'),
15
+ }),
16
+ output: z.object({ project: projectSchema }),
17
+ handle: async ({ organization_name, project_name }) => {
18
+ const data = await graphql(queries.GET_PROJECT, {
19
+ organizationName: organization_name,
20
+ projectName: project_name,
21
+ });
22
+ return { project: mapProject(data.project) };
23
+ },
24
+ });
25
+ //# sourceMappingURL=get-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-project.js","sourceRoot":"","sources":["../../src/tools/get-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,kGAAkG;IAC/G,OAAO,EAAE,qBAAqB;IAC9B,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC3D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KAClD,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAC5C,MAAM,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAuC,OAAO,CAAC,WAAW,EAAE;YACpF,gBAAgB,EAAE,iBAAiB;YACnC,WAAW,EAAE,YAAY;SAC1B,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ export declare const getReplayScreenshots: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ replay_id: z.ZodString;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ replay_id: z.ZodString;
6
+ screenshots: z.ZodArray<z.ZodObject<{
7
+ filename: z.ZodString;
8
+ public_url: z.ZodString;
9
+ replay_id: z.ZodOptional<z.ZodString>;
10
+ route_url: z.ZodOptional<z.ZodString>;
11
+ route_group: z.ZodOptional<z.ZodString>;
12
+ identifier_type: z.ZodOptional<z.ZodString>;
13
+ event_number: z.ZodOptional<z.ZodNumber>;
14
+ }, z.core.$strip>>;
15
+ }, z.core.$strip>>;
16
+ //# sourceMappingURL=get-replay-screenshots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-replay-screenshots.d.ts","sourceRoot":"","sources":["../../src/tools/get-replay-screenshots.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;kBAwB/B,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { graphql, queries } from '../meticulous-api.js';
4
+ import { screenshotSchema, mapScreenshot } from './schemas.js';
5
+ export const getReplayScreenshots = defineTool({
6
+ name: 'get_replay_screenshots',
7
+ displayName: 'Get Replay Screenshots',
8
+ description: 'Get all screenshots captured during a specific replay.',
9
+ summary: 'Get screenshots for a replay',
10
+ icon: 'image',
11
+ group: 'Replays',
12
+ input: z.object({
13
+ replay_id: z.string().describe('Replay ID'),
14
+ }),
15
+ output: z.object({
16
+ replay_id: z.string(),
17
+ screenshots: z.array(screenshotSchema),
18
+ }),
19
+ handle: async ({ replay_id }) => {
20
+ const data = await graphql(queries.GET_REPLAY_SCREENSHOTS, { replayId: replay_id });
21
+ return {
22
+ replay_id: data.replay.id,
23
+ screenshots: (data.replay.screenshotsData ?? []).map(mapScreenshot),
24
+ };
25
+ },
26
+ });
27
+ //# sourceMappingURL=get-replay-screenshots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-replay-screenshots.js","sourceRoot":"","sources":["../../src/tools/get-replay-screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,wBAAwB;IACrC,WAAW,EAAE,wDAAwD;IACrE,OAAO,EAAE,8BAA8B;IACvC,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC5C,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;KACvC,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,OAAO,CAAC,sBAAsB,EAC9B,EAAE,QAAQ,EAAE,SAAS,EAAE,CACxB,CAAC;QACF,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YACzB,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;SACpE,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+ export declare const getReplay: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ replay_id: z.ZodString;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ replay: z.ZodObject<{
6
+ id: z.ZodString;
7
+ status: z.ZodString;
8
+ commit_sha: z.ZodNullable<z.ZodString>;
9
+ is_accurate: z.ZodNullable<z.ZodBoolean>;
10
+ app_url: z.ZodNullable<z.ZodString>;
11
+ session_id: z.ZodNullable<z.ZodString>;
12
+ created_at: z.ZodString;
13
+ project_name: z.ZodNullable<z.ZodString>;
14
+ organization_name: z.ZodNullable<z.ZodString>;
15
+ }, z.core.$strip>;
16
+ }, z.core.$strip>>;
17
+ //# sourceMappingURL=get-replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-replay.d.ts","sourceRoot":"","sources":["../../src/tools/get-replay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;kBAgBpB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { graphql, queries } from '../meticulous-api.js';
4
+ import { replaySchema, mapReplay } from './schemas.js';
5
+ export const getReplay = defineTool({
6
+ name: 'get_replay',
7
+ displayName: 'Get Replay',
8
+ description: 'Get detailed information about a specific replay including its status, accuracy, and associated session.',
9
+ summary: 'Get replay details',
10
+ icon: 'video',
11
+ group: 'Replays',
12
+ input: z.object({
13
+ replay_id: z.string().describe('Replay ID'),
14
+ }),
15
+ output: z.object({ replay: replaySchema }),
16
+ handle: async ({ replay_id }) => {
17
+ const data = await graphql(queries.GET_REPLAY, { replayId: replay_id });
18
+ return { replay: mapReplay(data.replay) };
19
+ },
20
+ });
21
+ //# sourceMappingURL=get-replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-replay.js","sourceRoot":"","sources":["../../src/tools/get-replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;IAClC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,YAAY;IACzB,WAAW,EACT,0GAA0G;IAC5G,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC5C,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC1C,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAsC,OAAO,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7G,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5C,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export declare const getSessionEvents: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ session_id: z.ZodString;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ session_id: z.ZodString;
6
+ events: z.ZodArray<z.ZodObject<{
7
+ type: z.ZodString;
8
+ timestamp: z.ZodNullable<z.ZodNumber>;
9
+ selector: z.ZodNullable<z.ZodString>;
10
+ client_x: z.ZodNullable<z.ZodNumber>;
11
+ client_y: z.ZodNullable<z.ZodNumber>;
12
+ }, z.core.$strip>>;
13
+ }, z.core.$strip>>;
14
+ //# sourceMappingURL=get-session-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-session-events.d.ts","sourceRoot":"","sources":["../../src/tools/get-session-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;kBAwB3B,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { graphql, queries } from '../meticulous-api.js';
4
+ import { sessionEventSchema, mapSessionEvent } from './schemas.js';
5
+ export const getSessionEvents = defineTool({
6
+ name: 'get_session_events',
7
+ displayName: 'Get Session Events',
8
+ description: 'Get the user interaction events (clicks, inputs, navigations) recorded during a session.',
9
+ summary: 'Get user events in a session',
10
+ icon: 'activity',
11
+ group: 'Sessions',
12
+ input: z.object({
13
+ session_id: z.string().describe('Session ID'),
14
+ }),
15
+ output: z.object({
16
+ session_id: z.string(),
17
+ events: z.array(sessionEventSchema),
18
+ }),
19
+ handle: async ({ session_id }) => {
20
+ const data = await graphql(queries.GET_SESSION_EVENTS, { sessionId: session_id });
21
+ return {
22
+ session_id: data.session.id,
23
+ events: (data.session.data?.userEvents ?? []).map(mapSessionEvent),
24
+ };
25
+ },
26
+ });
27
+ //# sourceMappingURL=get-session-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-session-events.js","sourceRoot":"","sources":["../../src/tools/get-session-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,0FAA0F;IACvG,OAAO,EAAE,8BAA8B;IACvC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;KAC9C,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;KACpC,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,OAAO,CAAC,kBAAkB,EAC1B,EAAE,SAAS,EAAE,UAAU,EAAE,CAC1B,CAAC;QACF,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;YAC3B,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;SACnE,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ export declare const getSession: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ session_id: z.ZodString;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ session: z.ZodObject<{
6
+ id: z.ZodString;
7
+ project_id: z.ZodString;
8
+ project_name: z.ZodString;
9
+ hostname: z.ZodNullable<z.ZodString>;
10
+ datetime: z.ZodNullable<z.ZodString>;
11
+ num_user_events: z.ZodNullable<z.ZodNumber>;
12
+ num_bytes: z.ZodNullable<z.ZodNumber>;
13
+ source: z.ZodNullable<z.ZodString>;
14
+ start_url: z.ZodNullable<z.ZodString>;
15
+ abandoned: z.ZodNullable<z.ZodBoolean>;
16
+ description: z.ZodNullable<z.ZodString>;
17
+ }, z.core.$strip>;
18
+ }, z.core.$strip>>;
19
+ //# sourceMappingURL=get-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-session.d.ts","sourceRoot":"","sources":["../../src/tools/get-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;kBAerB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { graphql, queries } from '../meticulous-api.js';
4
+ import { sessionSchema, mapSession } from './schemas.js';
5
+ export const getSession = defineTool({
6
+ name: 'get_session',
7
+ displayName: 'Get Session',
8
+ description: 'Get detailed information about a specific recorded user session.',
9
+ summary: 'Get session details',
10
+ icon: 'monitor',
11
+ group: 'Sessions',
12
+ input: z.object({
13
+ session_id: z.string().describe('Session ID'),
14
+ }),
15
+ output: z.object({ session: sessionSchema }),
16
+ handle: async ({ session_id }) => {
17
+ const data = await graphql(queries.GET_SESSION, { sessionId: session_id });
18
+ return { session: mapSession(data.session) };
19
+ },
20
+ });
21
+ //# sourceMappingURL=get-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-session.js","sourceRoot":"","sources":["../../src/tools/get-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,kEAAkE;IAC/E,OAAO,EAAE,qBAAqB;IAC9B,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;KAC9C,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAC5C,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAuC,OAAO,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QACjH,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,CAAC;CACF,CAAC,CAAC"}