@wa008/ui-audit-mcp 1.0.2

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 (130) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +75 -0
  3. package/dist/device/adapter.d.ts +45 -0
  4. package/dist/device/adapter.d.ts.map +1 -0
  5. package/dist/device/adapter.js +137 -0
  6. package/dist/device/adapter.js.map +1 -0
  7. package/dist/evaluation/checklist.d.ts +14 -0
  8. package/dist/evaluation/checklist.d.ts.map +1 -0
  9. package/dist/evaluation/checklist.js +57 -0
  10. package/dist/evaluation/checklist.js.map +1 -0
  11. package/dist/evaluation/scorer.d.ts +7 -0
  12. package/dist/evaluation/scorer.d.ts.map +1 -0
  13. package/dist/evaluation/scorer.js +35 -0
  14. package/dist/evaluation/scorer.js.map +1 -0
  15. package/dist/examples/agent-demo.d.ts +2 -0
  16. package/dist/examples/agent-demo.d.ts.map +1 -0
  17. package/dist/examples/agent-demo.js +79 -0
  18. package/dist/examples/agent-demo.js.map +1 -0
  19. package/dist/index.d.ts +23 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +75 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/logger/evaluation-logger.d.ts +20 -0
  24. package/dist/logger/evaluation-logger.d.ts.map +1 -0
  25. package/dist/logger/evaluation-logger.js +93 -0
  26. package/dist/logger/evaluation-logger.js.map +1 -0
  27. package/dist/maestro/adapter.d.ts +37 -0
  28. package/dist/maestro/adapter.d.ts.map +1 -0
  29. package/dist/maestro/adapter.js +139 -0
  30. package/dist/maestro/adapter.js.map +1 -0
  31. package/dist/src/device/adapter.d.ts +45 -0
  32. package/dist/src/device/adapter.d.ts.map +1 -0
  33. package/dist/src/device/adapter.js +137 -0
  34. package/dist/src/device/adapter.js.map +1 -0
  35. package/dist/src/evaluation/checklist.d.ts +14 -0
  36. package/dist/src/evaluation/checklist.d.ts.map +1 -0
  37. package/dist/src/evaluation/checklist.js +57 -0
  38. package/dist/src/evaluation/checklist.js.map +1 -0
  39. package/dist/src/evaluation/scorer.d.ts +7 -0
  40. package/dist/src/evaluation/scorer.d.ts.map +1 -0
  41. package/dist/src/evaluation/scorer.js +35 -0
  42. package/dist/src/evaluation/scorer.js.map +1 -0
  43. package/dist/src/index.d.ts +23 -0
  44. package/dist/src/index.d.ts.map +1 -0
  45. package/dist/src/index.js +78 -0
  46. package/dist/src/index.js.map +1 -0
  47. package/dist/src/logger/evaluation-logger.d.ts +20 -0
  48. package/dist/src/logger/evaluation-logger.d.ts.map +1 -0
  49. package/dist/src/logger/evaluation-logger.js +93 -0
  50. package/dist/src/logger/evaluation-logger.js.map +1 -0
  51. package/dist/src/tools/evaluate-style.d.ts +30 -0
  52. package/dist/src/tools/evaluate-style.d.ts.map +1 -0
  53. package/dist/src/tools/evaluate-style.js +57 -0
  54. package/dist/src/tools/evaluate-style.js.map +1 -0
  55. package/dist/src/tools/get-checklist.d.ts +27 -0
  56. package/dist/src/tools/get-checklist.d.ts.map +1 -0
  57. package/dist/src/tools/get-checklist.js +57 -0
  58. package/dist/src/tools/get-checklist.js.map +1 -0
  59. package/dist/src/tools/get-log.d.ts +25 -0
  60. package/dist/src/tools/get-log.d.ts.map +1 -0
  61. package/dist/src/tools/get-log.js +33 -0
  62. package/dist/src/tools/get-log.js.map +1 -0
  63. package/dist/src/tools/launch-app.d.ts +19 -0
  64. package/dist/src/tools/launch-app.d.ts.map +1 -0
  65. package/dist/src/tools/launch-app.js +24 -0
  66. package/dist/src/tools/launch-app.js.map +1 -0
  67. package/dist/src/tools/list-apps.d.ts +28 -0
  68. package/dist/src/tools/list-apps.d.ts.map +1 -0
  69. package/dist/src/tools/list-apps.js +75 -0
  70. package/dist/src/tools/list-apps.js.map +1 -0
  71. package/dist/src/tools/submit-evaluation.d.ts +57 -0
  72. package/dist/src/tools/submit-evaluation.d.ts.map +1 -0
  73. package/dist/src/tools/submit-evaluation.js +107 -0
  74. package/dist/src/tools/submit-evaluation.js.map +1 -0
  75. package/dist/src/tools/swipe.d.ts +28 -0
  76. package/dist/src/tools/swipe.d.ts.map +1 -0
  77. package/dist/src/tools/swipe.js +26 -0
  78. package/dist/src/tools/swipe.js.map +1 -0
  79. package/dist/src/tools/take-screenshot.d.ts +26 -0
  80. package/dist/src/tools/take-screenshot.d.ts.map +1 -0
  81. package/dist/src/tools/take-screenshot.js +32 -0
  82. package/dist/src/tools/take-screenshot.js.map +1 -0
  83. package/dist/src/tools/tap.d.ts +22 -0
  84. package/dist/src/tools/tap.d.ts.map +1 -0
  85. package/dist/src/tools/tap.js +24 -0
  86. package/dist/src/tools/tap.js.map +1 -0
  87. package/dist/src/types.d.ts +57 -0
  88. package/dist/src/types.d.ts.map +1 -0
  89. package/dist/src/types.js +5 -0
  90. package/dist/src/types.js.map +1 -0
  91. package/dist/test-agent.d.ts +2 -0
  92. package/dist/test-agent.d.ts.map +1 -0
  93. package/dist/test-agent.js.map +1 -0
  94. package/dist/tools/evaluate-style.d.ts +30 -0
  95. package/dist/tools/evaluate-style.d.ts.map +1 -0
  96. package/dist/tools/evaluate-style.js +57 -0
  97. package/dist/tools/evaluate-style.js.map +1 -0
  98. package/dist/tools/get-checklist.d.ts +27 -0
  99. package/dist/tools/get-checklist.d.ts.map +1 -0
  100. package/dist/tools/get-checklist.js +57 -0
  101. package/dist/tools/get-checklist.js.map +1 -0
  102. package/dist/tools/get-log.d.ts +25 -0
  103. package/dist/tools/get-log.d.ts.map +1 -0
  104. package/dist/tools/get-log.js +33 -0
  105. package/dist/tools/get-log.js.map +1 -0
  106. package/dist/tools/launch-app.d.ts +19 -0
  107. package/dist/tools/launch-app.d.ts.map +1 -0
  108. package/dist/tools/launch-app.js +24 -0
  109. package/dist/tools/launch-app.js.map +1 -0
  110. package/dist/tools/submit-evaluation.d.ts +57 -0
  111. package/dist/tools/submit-evaluation.d.ts.map +1 -0
  112. package/dist/tools/submit-evaluation.js +107 -0
  113. package/dist/tools/submit-evaluation.js.map +1 -0
  114. package/dist/tools/swipe.d.ts +28 -0
  115. package/dist/tools/swipe.d.ts.map +1 -0
  116. package/dist/tools/swipe.js +26 -0
  117. package/dist/tools/swipe.js.map +1 -0
  118. package/dist/tools/take-screenshot.d.ts +26 -0
  119. package/dist/tools/take-screenshot.d.ts.map +1 -0
  120. package/dist/tools/take-screenshot.js +32 -0
  121. package/dist/tools/take-screenshot.js.map +1 -0
  122. package/dist/tools/tap.d.ts +22 -0
  123. package/dist/tools/tap.d.ts.map +1 -0
  124. package/dist/tools/tap.js +24 -0
  125. package/dist/tools/tap.js.map +1 -0
  126. package/dist/types.d.ts +57 -0
  127. package/dist/types.d.ts.map +1 -0
  128. package/dist/types.js +5 -0
  129. package/dist/types.js.map +1 -0
  130. package/package.json +44 -0
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Tool: get_checklist
3
+ *
4
+ * Return the evaluation checklist for either single-screen UI quality
5
+ * or multi-screen style consistency. Creates a new evaluation session.
6
+ */
7
+ import { z } from "zod";
8
+ import { EvaluationSession } from "../types.js";
9
+ export declare const sessions: Map<string, EvaluationSession>;
10
+ export declare const getChecklistSchema: z.ZodObject<{
11
+ type: z.ZodEnum<["screen", "style"]>;
12
+ screenName: z.ZodOptional<z.ZodString>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ type: "screen" | "style";
15
+ screenName?: string | undefined;
16
+ }, {
17
+ type: "screen" | "style";
18
+ screenName?: string | undefined;
19
+ }>;
20
+ export type GetChecklistInput = z.infer<typeof getChecklistSchema>;
21
+ export declare function getChecklist(input: GetChecklistInput): Promise<{
22
+ content: {
23
+ type: "text";
24
+ text: string;
25
+ }[];
26
+ }>;
27
+ //# sourceMappingURL=get-checklist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-checklist.d.ts","sourceRoot":"","sources":["../../src/tools/get-checklist.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,eAAO,MAAM,QAAQ,gCAAuC,CAAC;AAE7D,eAAO,MAAM,kBAAkB;;;;;;;;;EAc7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB;;;;;GA2C1D"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Tool: get_checklist
3
+ *
4
+ * Return the evaluation checklist for either single-screen UI quality
5
+ * or multi-screen style consistency. Creates a new evaluation session.
6
+ */
7
+ import { z } from "zod";
8
+ import { v4 as uuidv4 } from "uuid";
9
+ import { SCREEN_CHECKLIST, STYLE_CHECKLIST, DEFAULT_PASSING_SCORE, } from "../evaluation/checklist.js";
10
+ // In-memory session store (keyed by sessionId)
11
+ export const sessions = new Map();
12
+ export const getChecklistSchema = z.object({
13
+ type: z
14
+ .enum(["screen", "style"])
15
+ .describe("'screen' for single-screen UI quality evaluation, " +
16
+ "'style' for multi-screen style consistency evaluation"),
17
+ screenName: z
18
+ .string()
19
+ .optional()
20
+ .describe("Name of the screen being evaluated (e.g. 'LoginScreen'). " +
21
+ "Required for screen evaluation; for style evaluation, use a descriptive name like 'AllScreens'."),
22
+ });
23
+ export async function getChecklist(input) {
24
+ const sessionId = uuidv4();
25
+ const screenName = input.screenName ?? "unnamed";
26
+ const checklist = input.type === "screen" ? SCREEN_CHECKLIST : STYLE_CHECKLIST;
27
+ const session = {
28
+ sessionId,
29
+ type: input.type,
30
+ screenName,
31
+ checklist,
32
+ passingScore: DEFAULT_PASSING_SCORE,
33
+ createdAt: new Date().toISOString(),
34
+ };
35
+ sessions.set(sessionId, session);
36
+ const instruction = input.type === "screen"
37
+ ? "Review the screenshot you captured via take_screenshot. Score each checklist item from 1 to 5. " +
38
+ "For any item scoring below 3, you MUST provide a specific reason and an actionable improvement suggestion."
39
+ : "Review ALL screenshots you have captured. Score each consistency dimension from 1 to 5. " +
40
+ "For any item scoring below 3, identify which screens are inconsistent and suggest how to unify them.";
41
+ return {
42
+ content: [
43
+ {
44
+ type: "text",
45
+ text: JSON.stringify({
46
+ sessionId,
47
+ type: input.type,
48
+ screenName,
49
+ checklist,
50
+ passingScore: DEFAULT_PASSING_SCORE,
51
+ instruction,
52
+ }, null, 2),
53
+ },
54
+ ],
55
+ };
56
+ }
57
+ //# sourceMappingURL=get-checklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-checklist.js","sourceRoot":"","sources":["../../src/tools/get-checklist.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EACH,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACxB,MAAM,4BAA4B,CAAC;AAGpC,+CAA+C;AAC/C,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC;SACF,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SACzB,QAAQ,CACL,oDAAoD;QACpD,uDAAuD,CAC1D;IACL,UAAU,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACL,2DAA2D;QAC3D,iGAAiG,CACpG;CACR,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAwB;IACvD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACjD,MAAM,SAAS,GACX,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC;IAEjE,MAAM,OAAO,GAAsB;QAC/B,SAAS;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU;QACV,SAAS;QACT,YAAY,EAAE,qBAAqB;QACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;IAEF,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEjC,MAAM,WAAW,GACb,KAAK,CAAC,IAAI,KAAK,QAAQ;QACnB,CAAC,CAAC,iGAAiG;YACnG,4GAA4G;QAC5G,CAAC,CAAC,0FAA0F;YAC5F,sGAAsG,CAAC;IAE/G,OAAO;QACH,OAAO,EAAE;YACL;gBACI,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAChB;oBACI,SAAS;oBACT,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,UAAU;oBACV,SAAS;oBACT,YAAY,EAAE,qBAAqB;oBACnC,WAAW;iBACd,EACD,IAAI,EACJ,CAAC,CACJ;aACJ;SACJ;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Tool: get_evaluation_log
3
+ *
4
+ * Query past evaluation results for review and summary.
5
+ * Useful for tracking improvement across multiple evaluation attempts.
6
+ */
7
+ import { z } from "zod";
8
+ export declare const getEvaluationLogSchema: z.ZodObject<{
9
+ sessionId: z.ZodOptional<z.ZodString>;
10
+ limit: z.ZodOptional<z.ZodNumber>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ sessionId?: string | undefined;
13
+ limit?: number | undefined;
14
+ }, {
15
+ sessionId?: string | undefined;
16
+ limit?: number | undefined;
17
+ }>;
18
+ export type GetEvaluationLogInput = z.infer<typeof getEvaluationLogSchema>;
19
+ export declare function getEvaluationLog(input: GetEvaluationLogInput): Promise<{
20
+ content: {
21
+ type: "text";
22
+ text: string;
23
+ }[];
24
+ }>;
25
+ //# sourceMappingURL=get-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-log.d.ts","sourceRoot":"","sources":["../../src/tools/get-log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,sBAAsB;;;;;;;;;EAYjC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE3E,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB;;;;;GAWlE"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Tool: get_evaluation_log
3
+ *
4
+ * Query past evaluation results for review and summary.
5
+ * Useful for tracking improvement across multiple evaluation attempts.
6
+ */
7
+ import { z } from "zod";
8
+ import { queryLogs } from "../logger/evaluation-logger.js";
9
+ export const getEvaluationLogSchema = z.object({
10
+ sessionId: z
11
+ .string()
12
+ .optional()
13
+ .describe("Optional session ID to look up a specific evaluation. If omitted, returns the most recent evaluations."),
14
+ limit: z
15
+ .number()
16
+ .int()
17
+ .min(1)
18
+ .max(100)
19
+ .optional()
20
+ .describe("Maximum number of log entries to return (default: 10)"),
21
+ });
22
+ export async function getEvaluationLog(input) {
23
+ const { logs, summary } = queryLogs(input.sessionId, input.limit ?? 10);
24
+ return {
25
+ content: [
26
+ {
27
+ type: "text",
28
+ text: JSON.stringify({ logs, summary }, null, 2),
29
+ },
30
+ ],
31
+ };
32
+ }
33
+ //# sourceMappingURL=get-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-log.js","sourceRoot":"","sources":["../../src/tools/get-log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,wGAAwG,CAAC;IACvH,KAAK,EAAE,CAAC;SACH,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;CACzE,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAA4B;IAC/D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAExE,OAAO;QACH,OAAO,EAAE;YACL;gBACI,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;aACnD;SACJ;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Tool: launch_app
3
+ * Launch an iOS app on the simulator by its bundle ID.
4
+ */
5
+ import { z } from "zod";
6
+ export declare const launchAppSchema: z.ZodObject<{
7
+ appId: z.ZodString;
8
+ }, "strip", z.ZodTypeAny, {
9
+ appId: string;
10
+ }, {
11
+ appId: string;
12
+ }>;
13
+ export declare function launchApp(input: z.infer<typeof launchAppSchema>): Promise<{
14
+ content: {
15
+ type: "text";
16
+ text: string;
17
+ }[];
18
+ }>;
19
+ //# sourceMappingURL=launch-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch-app.d.ts","sourceRoot":"","sources":["../../src/tools/launch-app.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,eAAe;;;;;;EAE1B,CAAC;AAEH,wBAAsB,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC;;;;;GAarE"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Tool: launch_app
3
+ * Launch an iOS app on the simulator by its bundle ID.
4
+ */
5
+ import { z } from "zod";
6
+ import * as device from "../device/adapter.js";
7
+ export const launchAppSchema = z.object({
8
+ appId: z.string().describe("The bundle ID of the iOS app, e.g. 'com.example.myapp'"),
9
+ });
10
+ export async function launchApp(input) {
11
+ const result = await device.launchApp(input.appId);
12
+ return {
13
+ content: [{
14
+ type: "text",
15
+ text: JSON.stringify({
16
+ success: result.success,
17
+ ...(result.success
18
+ ? { message: `App '${input.appId}' launched.` }
19
+ : { error: result.error, hint: "Ensure the app is installed and the simulator is booted." }),
20
+ }),
21
+ }],
22
+ };
23
+ }
24
+ //# sourceMappingURL=launch-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch-app.js","sourceRoot":"","sources":["../../src/tools/launch-app.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAE/C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;CACvF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAsC;IAClE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,OAAO;QACH,OAAO,EAAE,CAAC;gBACN,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,GAAG,CAAC,MAAM,CAAC,OAAO;wBACd,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,KAAK,CAAC,KAAK,aAAa,EAAE;wBAC/C,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,0DAA0D,EAAE,CAAC;iBACnG,CAAC;aACL,CAAC;KACL,CAAC;AACN,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Tool: submit_evaluation
3
+ *
4
+ * Accept the agent's scores for each checklist item, determine pass/fail,
5
+ * persist the result to the evaluation log, and return the outcome.
6
+ */
7
+ import { z } from "zod";
8
+ export declare const submitEvaluationSchema: z.ZodObject<{
9
+ sessionId: z.ZodString;
10
+ scores: z.ZodArray<z.ZodObject<{
11
+ id: z.ZodString;
12
+ score: z.ZodNumber;
13
+ reason: z.ZodOptional<z.ZodString>;
14
+ suggestion: z.ZodOptional<z.ZodString>;
15
+ }, "strip", z.ZodTypeAny, {
16
+ id: string;
17
+ score: number;
18
+ reason?: string | undefined;
19
+ suggestion?: string | undefined;
20
+ }, {
21
+ id: string;
22
+ score: number;
23
+ reason?: string | undefined;
24
+ suggestion?: string | undefined;
25
+ }>, "many">;
26
+ }, "strip", z.ZodTypeAny, {
27
+ sessionId: string;
28
+ scores: {
29
+ id: string;
30
+ score: number;
31
+ reason?: string | undefined;
32
+ suggestion?: string | undefined;
33
+ }[];
34
+ }, {
35
+ sessionId: string;
36
+ scores: {
37
+ id: string;
38
+ score: number;
39
+ reason?: string | undefined;
40
+ suggestion?: string | undefined;
41
+ }[];
42
+ }>;
43
+ export type SubmitEvaluationInput = z.infer<typeof submitEvaluationSchema>;
44
+ export declare function submitEvaluation(input: SubmitEvaluationInput): Promise<{
45
+ content: {
46
+ type: "text";
47
+ text: string;
48
+ }[];
49
+ isError: boolean;
50
+ } | {
51
+ content: {
52
+ type: "text";
53
+ text: string;
54
+ }[];
55
+ isError?: undefined;
56
+ }>;
57
+ //# sourceMappingURL=submit-evaluation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-evaluation.d.ts","sourceRoot":"","sources":["../../src/tools/submit-evaluation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0BxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOjC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE3E,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB;;;;;;;;;;;;GAsFlE"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Tool: submit_evaluation
3
+ *
4
+ * Accept the agent's scores for each checklist item, determine pass/fail,
5
+ * persist the result to the evaluation log, and return the outcome.
6
+ */
7
+ import { z } from "zod";
8
+ import { sessions } from "./get-checklist.js";
9
+ import { evaluateScores } from "../evaluation/scorer.js";
10
+ import { saveLog, countScreenAttempts } from "../logger/evaluation-logger.js";
11
+ const scoreEntrySchema = z.object({
12
+ id: z.string().describe("Checklist item ID (e.g. 'overlap', 'layout')"),
13
+ score: z
14
+ .number()
15
+ .int()
16
+ .min(1)
17
+ .max(5)
18
+ .describe("Score from 1 (worst) to 5 (best)"),
19
+ reason: z
20
+ .string()
21
+ .optional()
22
+ .describe("Why this score was given. Required if score < passing threshold."),
23
+ suggestion: z
24
+ .string()
25
+ .optional()
26
+ .describe("Actionable improvement suggestion. Required if score < passing threshold."),
27
+ });
28
+ export const submitEvaluationSchema = z.object({
29
+ sessionId: z
30
+ .string()
31
+ .describe("The session ID returned by get_checklist"),
32
+ scores: z
33
+ .array(scoreEntrySchema)
34
+ .describe("Array of score entries, one per checklist item"),
35
+ });
36
+ export async function submitEvaluation(input) {
37
+ const session = sessions.get(input.sessionId);
38
+ if (!session) {
39
+ return {
40
+ content: [
41
+ {
42
+ type: "text",
43
+ text: JSON.stringify({
44
+ error: `Session '${input.sessionId}' not found. Call get_checklist first to create a session.`,
45
+ }),
46
+ },
47
+ ],
48
+ isError: true,
49
+ };
50
+ }
51
+ // Validate that all checklist items have scores
52
+ const missingIds = session.checklist
53
+ .filter((item) => !input.scores.find((s) => s.id === item.id))
54
+ .map((item) => item.id);
55
+ if (missingIds.length > 0) {
56
+ return {
57
+ content: [
58
+ {
59
+ type: "text",
60
+ text: JSON.stringify({
61
+ error: `Missing scores for checklist items: ${missingIds.join(", ")}`,
62
+ expectedIds: session.checklist.map((c) => c.id),
63
+ }),
64
+ },
65
+ ],
66
+ isError: true,
67
+ };
68
+ }
69
+ // Determine attempt number for this screen
70
+ const attemptNumber = countScreenAttempts(session.screenName) + 1;
71
+ // Evaluate
72
+ const scores = input.scores;
73
+ const outcome = evaluateScores(session.sessionId, session.type, session.screenName, session.checklist, scores, session.passingScore, attemptNumber);
74
+ // Persist to log
75
+ const logPath = saveLog(outcome, session.checklist, scores);
76
+ // Clean up session
77
+ sessions.delete(input.sessionId);
78
+ // Build response
79
+ const response = {
80
+ sessionId: outcome.sessionId,
81
+ screenName: outcome.screenName,
82
+ overallPassed: outcome.overallPassed,
83
+ averageScore: outcome.averageScore,
84
+ attemptNumber: outcome.attemptNumber,
85
+ results: outcome.results,
86
+ logPath,
87
+ };
88
+ if (!outcome.overallPassed) {
89
+ response.failedItems = outcome.failedItems;
90
+ response.nextSteps =
91
+ "The evaluation did NOT pass. Review the failed items above — each includes a reason and suggestion. " +
92
+ "Please fix the identified issues in the code, rebuild, and re-evaluate the screen.";
93
+ }
94
+ else {
95
+ response.nextSteps =
96
+ "All checklist items passed! You may proceed to evaluate the next screen or run style consistency checks.";
97
+ }
98
+ return {
99
+ content: [
100
+ {
101
+ type: "text",
102
+ text: JSON.stringify(response, null, 2),
103
+ },
104
+ ],
105
+ };
106
+ }
107
+ //# sourceMappingURL=submit-evaluation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-evaluation.js","sourceRoot":"","sources":["../../src/tools/submit-evaluation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAG9E,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACvE,KAAK,EAAE,CAAC;SACH,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,kCAAkC,CAAC;IACjD,MAAM,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kEAAkE,CAAC;IACjF,UAAU,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACL,2EAA2E,CAC9E;CACR,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CAAC,0CAA0C,CAAC;IACzD,MAAM,EAAE,CAAC;SACJ,KAAK,CAAC,gBAAgB,CAAC;SACvB,QAAQ,CAAC,gDAAgD,CAAC;CAClE,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAA4B;IAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACjB,KAAK,EAAE,YAAY,KAAK,CAAC,SAAS,4DAA4D;qBACjG,CAAC;iBACL;aACJ;YACD,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;IAED,gDAAgD;IAChD,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS;SAC/B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;SAC7D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE5B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACjB,KAAK,EAAE,uCAAuC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBACrE,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClD,CAAC;iBACL;aACJ;YACD,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;IAED,2CAA2C;IAC3C,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAElE,WAAW;IACX,MAAM,MAAM,GAAiB,KAAK,CAAC,MAAM,CAAC;IAC1C,MAAM,OAAO,GAAG,cAAc,CAC1B,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,SAAS,EACjB,MAAM,EACN,OAAO,CAAC,YAAY,EACpB,aAAa,CAChB,CAAC;IAEF,iBAAiB;IACjB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE5D,mBAAmB;IACnB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEjC,iBAAiB;IACjB,MAAM,QAAQ,GAA4B;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO;KACV,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QACzB,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAC3C,QAAQ,CAAC,SAAS;YACd,sGAAsG;gBACtG,oFAAoF,CAAC;IAC7F,CAAC;SAAM,CAAC;QACJ,QAAQ,CAAC,SAAS;YACd,0GAA0G,CAAC;IACnH,CAAC;IAED,OAAO;QACH,OAAO,EAAE;YACL;gBACI,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;aAC1C;SACJ;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Tool: swipe
3
+ * Swipe from one point to another using ratio coordinates (0-1).
4
+ */
5
+ import { z } from "zod";
6
+ export declare const swipeSchema: z.ZodObject<{
7
+ startX: z.ZodNumber;
8
+ startY: z.ZodNumber;
9
+ endX: z.ZodNumber;
10
+ endY: z.ZodNumber;
11
+ }, "strip", z.ZodTypeAny, {
12
+ startX: number;
13
+ startY: number;
14
+ endX: number;
15
+ endY: number;
16
+ }, {
17
+ startX: number;
18
+ startY: number;
19
+ endX: number;
20
+ endY: number;
21
+ }>;
22
+ export declare function swipe(input: z.infer<typeof swipeSchema>): Promise<{
23
+ content: {
24
+ type: "text";
25
+ text: string;
26
+ }[];
27
+ }>;
28
+ //# sourceMappingURL=swipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swipe.d.ts","sourceRoot":"","sources":["../../src/tools/swipe.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;EAKtB,CAAC;AAEH,wBAAsB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC;;;;;GAY7D"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Tool: swipe
3
+ * Swipe from one point to another using ratio coordinates (0-1).
4
+ */
5
+ import { z } from "zod";
6
+ import * as device from "../device/adapter.js";
7
+ export const swipeSchema = z.object({
8
+ startX: z.number().min(0).max(1).describe("Start horizontal ratio (0-1)"),
9
+ startY: z.number().min(0).max(1).describe("Start vertical ratio (0-1)"),
10
+ endX: z.number().min(0).max(1).describe("End horizontal ratio (0-1)"),
11
+ endY: z.number().min(0).max(1).describe("End vertical ratio (0-1)"),
12
+ });
13
+ export async function swipe(input) {
14
+ const result = await device.swipe(input.startX, input.startY, input.endX, input.endY);
15
+ return {
16
+ content: [{
17
+ type: "text",
18
+ text: JSON.stringify({
19
+ success: result.success,
20
+ swipe: { from: { x: input.startX, y: input.startY }, to: { x: input.endX, y: input.endY } },
21
+ ...(result.error ? { error: result.error } : {}),
22
+ }),
23
+ }],
24
+ };
25
+ }
26
+ //# sourceMappingURL=swipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swipe.js","sourceRoot":"","sources":["../../src/tools/swipe.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACzE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACvE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACrE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,KAAkC;IAC1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtF,OAAO;QACH,OAAO,EAAE,CAAC;gBACN,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE;oBAC3F,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACnD,CAAC;aACL,CAAC;KACL,CAAC;AACN,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Tool: take_screenshot
3
+ * Capture the current simulator screen and return it as a base64 PNG image.
4
+ */
5
+ import { z } from "zod";
6
+ export declare const takeScreenshotSchema: z.ZodObject<{
7
+ screenName: z.ZodOptional<z.ZodString>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ screenName?: string | undefined;
10
+ }, {
11
+ screenName?: string | undefined;
12
+ }>;
13
+ export declare function takeScreenshot(input: z.infer<typeof takeScreenshotSchema>): Promise<{
14
+ content: ({
15
+ type: "image";
16
+ data: string;
17
+ mimeType: "image/png";
18
+ text?: undefined;
19
+ } | {
20
+ type: "text";
21
+ text: string;
22
+ data?: undefined;
23
+ mimeType?: undefined;
24
+ })[];
25
+ }>;
26
+ //# sourceMappingURL=take-screenshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"take-screenshot.d.ts","sourceRoot":"","sources":["../../src/tools/take-screenshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAC;AAEH,wBAAsB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC;;;;;;;;;;;;GAqB/E"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Tool: take_screenshot
3
+ * Capture the current simulator screen and return it as a base64 PNG image.
4
+ */
5
+ import { z } from "zod";
6
+ import * as device from "../device/adapter.js";
7
+ export const takeScreenshotSchema = z.object({
8
+ screenName: z.string().optional().describe("Label for this screen (e.g. 'LoginScreen'). Used for logging."),
9
+ });
10
+ export async function takeScreenshot(input) {
11
+ const screenshot = await device.takeScreenshot();
12
+ return {
13
+ content: [
14
+ {
15
+ type: "image",
16
+ data: screenshot.imageBase64,
17
+ mimeType: "image/png",
18
+ },
19
+ {
20
+ type: "text",
21
+ text: JSON.stringify({
22
+ screenName: input.screenName ?? "unnamed",
23
+ screenWidth: screenshot.width,
24
+ screenHeight: screenshot.height,
25
+ timestamp: new Date().toISOString(),
26
+ hint: "Use ratio coordinates (0-1) when calling tap or swipe.",
27
+ }),
28
+ },
29
+ ],
30
+ };
31
+ }
32
+ //# sourceMappingURL=take-screenshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"take-screenshot.js","sourceRoot":"","sources":["../../src/tools/take-screenshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;CAC9G,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAA2C;IAC5E,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;IACjD,OAAO;QACH,OAAO,EAAE;YACL;gBACI,IAAI,EAAE,OAAgB;gBACtB,IAAI,EAAE,UAAU,CAAC,WAAW;gBAC5B,QAAQ,EAAE,WAAoB;aACjC;YACD;gBACI,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS;oBACzC,WAAW,EAAE,UAAU,CAAC,KAAK;oBAC7B,YAAY,EAAE,UAAU,CAAC,MAAM;oBAC/B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,IAAI,EAAE,wDAAwD;iBACjE,CAAC;aACL;SACJ;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Tool: tap
3
+ * Tap at a position on the simulator screen using ratio coordinates (0-1).
4
+ */
5
+ import { z } from "zod";
6
+ export declare const tapSchema: z.ZodObject<{
7
+ x: z.ZodNumber;
8
+ y: z.ZodNumber;
9
+ }, "strip", z.ZodTypeAny, {
10
+ x: number;
11
+ y: number;
12
+ }, {
13
+ x: number;
14
+ y: number;
15
+ }>;
16
+ export declare function tap(input: z.infer<typeof tapSchema>): Promise<{
17
+ content: {
18
+ type: "text";
19
+ text: string;
20
+ }[];
21
+ }>;
22
+ //# sourceMappingURL=tap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../src/tools/tap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,SAAS;;;;;;;;;EAGpB,CAAC;AAEH,wBAAsB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC;;;;;GAYzD"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Tool: tap
3
+ * Tap at a position on the simulator screen using ratio coordinates (0-1).
4
+ */
5
+ import { z } from "zod";
6
+ import * as device from "../device/adapter.js";
7
+ export const tapSchema = z.object({
8
+ x: z.number().min(0).max(1).describe("Horizontal position ratio (0 = left, 1 = right)"),
9
+ y: z.number().min(0).max(1).describe("Vertical position ratio (0 = top, 1 = bottom)"),
10
+ });
11
+ export async function tap(input) {
12
+ const result = await device.tap(input.x, input.y);
13
+ return {
14
+ content: [{
15
+ type: "text",
16
+ text: JSON.stringify({
17
+ success: result.success,
18
+ tappedAt: { ratioX: input.x, ratioY: input.y, pointX: result.pointX, pointY: result.pointY },
19
+ ...(result.error ? { error: result.error } : {}),
20
+ }),
21
+ }],
22
+ };
23
+ }
24
+ //# sourceMappingURL=tap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tap.js","sourceRoot":"","sources":["../../src/tools/tap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAE/C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IACvF,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;CACxF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,KAAgC;IACtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO;QACH,OAAO,EAAE,CAAC;gBACN,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC5F,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACnD,CAAC;aACL,CAAC;KACL,CAAC;AACN,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Core type definitions for ui-critic-mcp
3
+ */
4
+ export interface ChecklistItem {
5
+ id: string;
6
+ name: string;
7
+ description: string;
8
+ scoringGuide: string;
9
+ }
10
+ export type EvaluationType = "screen" | "style";
11
+ export interface EvaluationSession {
12
+ sessionId: string;
13
+ type: EvaluationType;
14
+ screenName: string;
15
+ checklist: ChecklistItem[];
16
+ passingScore: number;
17
+ createdAt: string;
18
+ }
19
+ export interface ScoreEntry {
20
+ id: string;
21
+ score: number;
22
+ reason?: string;
23
+ suggestion?: string;
24
+ }
25
+ export interface EvaluationResult {
26
+ id: string;
27
+ score: number;
28
+ passed: boolean;
29
+ reason?: string;
30
+ suggestion?: string;
31
+ }
32
+ export interface EvaluationOutcome {
33
+ sessionId: string;
34
+ type: EvaluationType;
35
+ screenName: string;
36
+ overallPassed: boolean;
37
+ averageScore: number;
38
+ results: EvaluationResult[];
39
+ failedItems: string[];
40
+ timestamp: string;
41
+ attemptNumber: number;
42
+ }
43
+ export interface LogEntry extends EvaluationOutcome {
44
+ checklist: ChecklistItem[];
45
+ scores: ScoreEntry[];
46
+ }
47
+ export interface LogSummary {
48
+ totalEvaluations: number;
49
+ passedCount: number;
50
+ failedCount: number;
51
+ screens: Record<string, {
52
+ attempts: number;
53
+ finalPassed: boolean;
54
+ finalScore: number;
55
+ }>;
56
+ }
57
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAIhD,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACzB;AAID,MAAM,WAAW,QAAS,SAAQ,iBAAiB;IAC/C,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,MAAM,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CACX,MAAM,EACN;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CACjE,CAAC;CACL"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Core type definitions for ui-critic-mcp
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map