@superblocksteam/vite-plugin-file-sync 2.0.72-next.8 → 2.0.73-next.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 (151) hide show
  1. package/dist/ai-service/agent/middleware.d.ts.map +1 -1
  2. package/dist/ai-service/agent/middleware.js +4 -1
  3. package/dist/ai-service/agent/middleware.js.map +1 -1
  4. package/dist/ai-service/agent/subagents/testing/prompt-builder.d.ts.map +1 -1
  5. package/dist/ai-service/agent/subagents/testing/prompt-builder.js +99 -4
  6. package/dist/ai-service/agent/subagents/testing/prompt-builder.js.map +1 -1
  7. package/dist/ai-service/agent/subagents/testing/types.d.ts +20 -0
  8. package/dist/ai-service/agent/subagents/testing/types.d.ts.map +1 -1
  9. package/dist/ai-service/agent/tools/apis/api-source.d.ts +1 -1
  10. package/dist/ai-service/agent/tools/apis/api-source.d.ts.map +1 -1
  11. package/dist/ai-service/agent/tools/apis/api-source.js +37 -9
  12. package/dist/ai-service/agent/tools/apis/api-source.js.map +1 -1
  13. package/dist/ai-service/agent/tools/build-reload-file.d.ts +5 -2
  14. package/dist/ai-service/agent/tools/build-reload-file.d.ts.map +1 -1
  15. package/dist/ai-service/agent/tools/build-reload-file.js +4 -3
  16. package/dist/ai-service/agent/tools/build-reload-file.js.map +1 -1
  17. package/dist/ai-service/agent/tools/index.d.ts +1 -0
  18. package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
  19. package/dist/ai-service/agent/tools/index.js +1 -0
  20. package/dist/ai-service/agent/tools/index.js.map +1 -1
  21. package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +1 -1
  22. package/dist/ai-service/agent/tools/integrations/internal.d.ts.map +1 -1
  23. package/dist/ai-service/agent/tools/integrations/internal.js +8 -1
  24. package/dist/ai-service/agent/tools/integrations/internal.js.map +1 -1
  25. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  26. package/dist/ai-service/agent/tools.js +37 -4
  27. package/dist/ai-service/agent/tools.js.map +1 -1
  28. package/dist/ai-service/agent/tools2/tools/ask-multi-choice.d.ts +0 -1
  29. package/dist/ai-service/agent/tools2/tools/ask-multi-choice.d.ts.map +1 -1
  30. package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js +1 -6
  31. package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js.map +1 -1
  32. package/dist/ai-service/agent/tools2/tools/end-test-run.d.ts.map +1 -1
  33. package/dist/ai-service/agent/tools2/tools/end-test-run.js +2 -0
  34. package/dist/ai-service/agent/tools2/tools/end-test-run.js.map +1 -1
  35. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +2 -2
  36. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
  37. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +58 -195
  38. package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
  39. package/dist/ai-service/agent/tools2/tools/list-attachments.d.ts +15 -0
  40. package/dist/ai-service/agent/tools2/tools/list-attachments.d.ts.map +1 -0
  41. package/dist/ai-service/agent/tools2/tools/list-attachments.js +47 -0
  42. package/dist/ai-service/agent/tools2/tools/list-attachments.js.map +1 -0
  43. package/dist/ai-service/agent/tools2/tools/start-test-run.d.ts.map +1 -1
  44. package/dist/ai-service/agent/tools2/tools/start-test-run.js +92 -10
  45. package/dist/ai-service/agent/tools2/tools/start-test-run.js.map +1 -1
  46. package/dist/ai-service/agent/tools2/tools/update-test-case-status.d.ts +2 -2
  47. package/dist/ai-service/agent/tools2/tools/update-test-case-status.d.ts.map +1 -1
  48. package/dist/ai-service/agent/tools2/tools/update-test-case-status.js +21 -2
  49. package/dist/ai-service/agent/tools2/tools/update-test-case-status.js.map +1 -1
  50. package/dist/ai-service/agent/utils.d.ts.map +1 -1
  51. package/dist/ai-service/agent/utils.js +46 -2
  52. package/dist/ai-service/agent/utils.js.map +1 -1
  53. package/dist/ai-service/attachments/index.d.ts +2 -0
  54. package/dist/ai-service/attachments/index.d.ts.map +1 -0
  55. package/dist/ai-service/attachments/index.js +2 -0
  56. package/dist/ai-service/attachments/index.js.map +1 -0
  57. package/dist/ai-service/attachments/store.d.ts +65 -0
  58. package/dist/ai-service/attachments/store.d.ts.map +1 -0
  59. package/dist/ai-service/attachments/store.js +158 -0
  60. package/dist/ai-service/attachments/store.js.map +1 -0
  61. package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
  62. package/dist/ai-service/chat/chat-session-store.js +11 -0
  63. package/dist/ai-service/chat/chat-session-store.js.map +1 -1
  64. package/dist/ai-service/context-download.d.ts +24 -0
  65. package/dist/ai-service/context-download.d.ts.map +1 -0
  66. package/dist/ai-service/context-download.js +127 -0
  67. package/dist/ai-service/context-download.js.map +1 -0
  68. package/dist/ai-service/context-upload.d.ts +17 -0
  69. package/dist/ai-service/context-upload.d.ts.map +1 -0
  70. package/dist/ai-service/context-upload.js +100 -0
  71. package/dist/ai-service/context-upload.js.map +1 -0
  72. package/dist/ai-service/index.d.ts +27 -3
  73. package/dist/ai-service/index.d.ts.map +1 -1
  74. package/dist/ai-service/index.js +252 -12
  75. package/dist/ai-service/index.js.map +1 -1
  76. package/dist/ai-service/llm/context/context.d.ts +4 -0
  77. package/dist/ai-service/llm/context/context.d.ts.map +1 -1
  78. package/dist/ai-service/llm/context/context.js +10 -0
  79. package/dist/ai-service/llm/context/context.js.map +1 -1
  80. package/dist/ai-service/llm/context/manager.d.ts +5 -0
  81. package/dist/ai-service/llm/context/manager.d.ts.map +1 -1
  82. package/dist/ai-service/llm/context/manager.js +8 -0
  83. package/dist/ai-service/llm/context/manager.js.map +1 -1
  84. package/dist/ai-service/llm/context/serialization.d.ts +3 -0
  85. package/dist/ai-service/llm/context/serialization.d.ts.map +1 -1
  86. package/dist/ai-service/llm/interaction/adapters/vercel.d.ts.map +1 -1
  87. package/dist/ai-service/llm/interaction/adapters/vercel.js +5 -4
  88. package/dist/ai-service/llm/interaction/adapters/vercel.js.map +1 -1
  89. package/dist/ai-service/llm/stream/config.d.ts +2 -0
  90. package/dist/ai-service/llm/stream/config.d.ts.map +1 -1
  91. package/dist/ai-service/llm/stream/config.js +1 -0
  92. package/dist/ai-service/llm/stream/config.js.map +1 -1
  93. package/dist/ai-service/llm/stream/orchestrator.d.ts.map +1 -1
  94. package/dist/ai-service/llm/stream/orchestrator.js +1 -1
  95. package/dist/ai-service/llm/stream/orchestrator.js.map +1 -1
  96. package/dist/ai-service/llm/stream/retry-engine.d.ts +1 -0
  97. package/dist/ai-service/llm/stream/retry-engine.d.ts.map +1 -1
  98. package/dist/ai-service/llm/stream/retry-engine.js +20 -1
  99. package/dist/ai-service/llm/stream/retry-engine.js.map +1 -1
  100. package/dist/ai-service/llm/stream/session.d.ts +2 -0
  101. package/dist/ai-service/llm/stream/session.d.ts.map +1 -1
  102. package/dist/ai-service/llm/stream/session.js +6 -2
  103. package/dist/ai-service/llm/stream/session.js.map +1 -1
  104. package/dist/ai-service/llmobs/otel-exporter.d.ts +58 -0
  105. package/dist/ai-service/llmobs/otel-exporter.d.ts.map +1 -0
  106. package/dist/ai-service/llmobs/otel-exporter.js +182 -0
  107. package/dist/ai-service/llmobs/otel-exporter.js.map +1 -0
  108. package/dist/ai-service/llmobs/tracer.d.ts +9 -0
  109. package/dist/ai-service/llmobs/tracer.d.ts.map +1 -1
  110. package/dist/ai-service/llmobs/tracer.js +46 -2
  111. package/dist/ai-service/llmobs/tracer.js.map +1 -1
  112. package/dist/ai-service/mcp/embedded-playwright-mcp-server.d.ts +17 -0
  113. package/dist/ai-service/mcp/embedded-playwright-mcp-server.d.ts.map +1 -1
  114. package/dist/ai-service/mcp/embedded-playwright-mcp-server.js +329 -7
  115. package/dist/ai-service/mcp/embedded-playwright-mcp-server.js.map +1 -1
  116. package/dist/ai-service/mcp/playwright-server.d.ts +29 -0
  117. package/dist/ai-service/mcp/playwright-server.d.ts.map +1 -1
  118. package/dist/ai-service/mcp/playwright-server.js +53 -0
  119. package/dist/ai-service/mcp/playwright-server.js.map +1 -1
  120. package/dist/ai-service/state-machine/clark-fsm.d.ts +3 -1
  121. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  122. package/dist/ai-service/state-machine/clark-fsm.js +1 -0
  123. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  124. package/dist/ai-service/state-machine/fsm.d.ts.map +1 -1
  125. package/dist/ai-service/state-machine/fsm.js +1 -0
  126. package/dist/ai-service/state-machine/fsm.js.map +1 -1
  127. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  128. package/dist/ai-service/state-machine/handlers/agent-planning.js +42 -1
  129. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  130. package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -1
  131. package/dist/ai-service/state-machine/handlers/awaiting-user.js +9 -0
  132. package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -1
  133. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  134. package/dist/ai-service/state-machine/handlers/llm-generating.js +43 -16
  135. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  136. package/dist/ai-service/state-machine/helpers/peer.d.ts +1 -1
  137. package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
  138. package/dist/ai-service/state-machine/helpers/peer.js +21 -4
  139. package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
  140. package/dist/ai-service/util/scoped-token-utils.d.ts +15 -0
  141. package/dist/ai-service/util/scoped-token-utils.d.ts.map +1 -0
  142. package/dist/ai-service/util/scoped-token-utils.js +131 -0
  143. package/dist/ai-service/util/scoped-token-utils.js.map +1 -0
  144. package/dist/file-sync-vite-plugin.js +3 -3
  145. package/dist/file-sync-vite-plugin.js.map +1 -1
  146. package/dist/server-rpc/index.js +1 -1
  147. package/dist/server-rpc/index.js.map +1 -1
  148. package/dist/socket-manager.d.ts.map +1 -1
  149. package/dist/socket-manager.js +61 -4
  150. package/dist/socket-manager.js.map +1 -1
  151. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/ai-service/agent/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAC/C;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,GAAE,MAAiC,GAC1C,cAAc,CAyBhB"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/ai-service/agent/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAC/C;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,GAAE,MAAiC,GAC1C,cAAc,CA0BhB"}
@@ -28,7 +28,10 @@ export function outputLimiter(maxChars = DEFAULT_MAX_OUTPUT_CHARS) {
28
28
  const resultString = safeJsonStringify(result);
29
29
  if (resultString.length > maxChars) {
30
30
  const truncated = resultString.slice(0, maxChars);
31
- throw new Error(`Output too long (${resultString.length} chars). Max output size is ${maxChars} characters. Output (truncated): ${truncated}`);
31
+ return `Output too long (${resultString.length} chars). Max output size is ${maxChars} characters. Result:
32
+ <result>
33
+ ${truncated}
34
+ </result>`;
32
35
  }
33
36
  return result;
34
37
  },
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/ai-service/agent/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,yGAAyG;AACzG,uDAAuD;AACvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAC/C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAC3B,WAAmB,wBAAwB;IAE3C,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAElD,mEAAmE;gBACnE,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzD,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAED,0BAA0B;gBAC1B,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,YAAY,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;oBACnC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAClD,MAAM,IAAI,KAAK,CACb,oBAAoB,YAAY,CAAC,MAAM,+BAA+B,QAAQ,oCAAoC,SAAS,EAAE,CAC9H,CAAC;gBACJ,CAAC;gBAED,OAAO,MAAM,CAAC;YAChB,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/ai-service/agent/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,yGAAyG;AACzG,uDAAuD;AACvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAC/C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAC3B,WAAmB,wBAAwB;IAE3C,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAElD,mEAAmE;gBACnE,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzD,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAED,0BAA0B;gBAC1B,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,YAAY,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;oBACnC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAClD,OAAO,oBAAoB,YAAY,CAAC,MAAM,+BAA+B,QAAQ;;EAE7F,SAAS;UACD,CAAC;gBACH,CAAC;gBAED,OAAO,MAAM,CAAC;YAChB,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/subagents/testing/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA+D3E"}
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/subagents/testing/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AA8EpE;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAkG3E"}
@@ -1,3 +1,65 @@
1
+ /**
2
+ * Format interactive elements into a readable string for the LLM.
3
+ */
4
+ function formatInteractiveElements(elements) {
5
+ if (!elements || elements.length === 0) {
6
+ return "";
7
+ }
8
+ // Group elements by tag for better readability
9
+ const grouped = {};
10
+ for (const el of elements) {
11
+ const tag = el.tag;
12
+ if (!grouped[tag]) {
13
+ grouped[tag] = [];
14
+ }
15
+ grouped[tag].push(el);
16
+ }
17
+ const lines = [];
18
+ for (const [tag, els] of Object.entries(grouped)) {
19
+ for (const el of els) {
20
+ const parts = [`<${tag}>`];
21
+ // Add the most useful identifier info
22
+ if (el.text) {
23
+ parts.push(`"${el.text.slice(0, 50)}${el.text.length > 50 ? "..." : ""}"`);
24
+ }
25
+ if (el.testId) {
26
+ parts.push(`[data-testid="${el.testId}"]`);
27
+ }
28
+ if (el.id) {
29
+ parts.push(`#${el.id}`);
30
+ }
31
+ if (el.placeholder) {
32
+ parts.push(`[placeholder="${el.placeholder}"]`);
33
+ }
34
+ if (el.ariaLabel) {
35
+ parts.push(`[aria-label="${el.ariaLabel}"]`);
36
+ }
37
+ if (el.name) {
38
+ parts.push(`[name="${el.name}"]`);
39
+ }
40
+ if (el.href) {
41
+ parts.push(`[href="${el.href.slice(0, 50)}${el.href.length > 50 ? "..." : ""}"]`);
42
+ }
43
+ if (el.type) {
44
+ parts.push(`[type="${el.type}"]`);
45
+ }
46
+ if (el.role && el.role !== tag) {
47
+ parts.push(`[role="${el.role}"]`);
48
+ }
49
+ if (el.disabled) {
50
+ parts.push(`(DISABLED)`);
51
+ }
52
+ lines.push(`- ${parts.join(" ")}`);
53
+ }
54
+ }
55
+ // Limit to first 50 elements to avoid token bloat
56
+ const maxElements = 50;
57
+ if (lines.length > maxElements) {
58
+ return (lines.slice(0, maxElements).join("\n") +
59
+ `\n... and ${lines.length - maxElements} more elements`);
60
+ }
61
+ return lines.join("\n");
62
+ }
1
63
  /**
2
64
  * Build the system prompt for the test subagent.
3
65
  *
@@ -15,18 +77,38 @@ ${config.planContext.plan}
15
77
  const hasTestCases = config.testCases && config.testCases.length > 0;
16
78
  const testCasesSection = hasTestCases
17
79
  ? `
18
- ## Test Cases to Execute
80
+ ## Test Cases to Execute (ALL REQUIRED)
81
+
82
+ ⚠️ You MUST execute ALL ${config.testCases.length} test cases below. Do NOT skip any.
83
+
19
84
  ${config.testCases.map((tc) => `- **${tc.id}**: ${tc.name}${tc.description ? ` - ${tc.description}` : ""}`).join("\n")}
85
+ `
86
+ : "";
87
+ // Add DOM context section if interactive elements are provided
88
+ const domContextSection = config.interactiveElements && config.interactiveElements.length > 0
89
+ ? `
90
+ ## Page Elements (Current DOM State)
91
+
92
+ Use these elements for your selectors. Prefer \`data-testid\`, \`id\`, or unique text content.
93
+
94
+ ${formatInteractiveElements(config.interactiveElements)}
20
95
  `
21
96
  : "";
22
97
  const workflowSection = hasTestCases
23
98
  ? `## Workflow
24
99
 
25
- For EACH test case:
100
+ Execute ALL ${config.testCases.length} test cases in order. For EACH test case:
26
101
  1. Call \`updateTestCaseStatus(testCaseId, "running")\`
27
102
  2. Use \`browser_playwright_action\` with the \`testCaseId\` parameter to test
28
103
  3. Call \`updateTestCaseStatus(testCaseId, "passed")\` or \`updateTestCaseStatus(testCaseId, "failed")\`
29
- 4. **After ALL test cases**: Call \`endTestRun\` with status and summary`
104
+
105
+ After completing ALL ${config.testCases.length} test cases, call \`endTestRun\` with status and summary.
106
+
107
+ **Rules:**
108
+ - Each test case should generate at least one screenshot
109
+ - If a test case is taking too long because of flaky selectors, try to add \`data-testid\` attributes using \`edit\`
110
+ - If still not working, fail the test case and move on to the next one
111
+ - Do NOT call \`endTestRun\` until you have executed ALL test cases`
30
112
  : `## Workflow
31
113
 
32
114
  1. Use \`browser_playwright_action\` to interact with UI elements (clicks, form inputs, navigation)
@@ -51,6 +133,7 @@ For EACH test case:
51
133
  - Test Header: ${config.header}
52
134
  ${planSection}
53
135
  ${testCasesSection}
136
+ ${domContextSection}
54
137
  ${workflowSection}
55
138
 
56
139
  ${toolsSection}
@@ -59,7 +142,19 @@ ${toolsSection}
59
142
 
60
143
  - Write clear descriptions: "Verify **login form** displays with \`email\` field"
61
144
  - Each browser action automatically includes a screenshot
62
- - If selectors are flaky, use \`edit\` to add \`data-testid\` attributes to source files
145
+ - Prefer using the Page Elements section above for selectors - it shows what's available on the page
146
+ - Selector priority: \`data-testid\`, \`id\`, \`aria-label\`, text content, then class/tag
147
+ - Use \`edit\` to add \`data-testid\` attributes if selectors are unreliable
148
+
149
+ ## Using evaluate()
150
+ - You can use \`evaluate()\` for custom JavaScript checks if needed
151
+ - ⚠️ IMPORTANT: \`evaluate()\` runs in the browser with standard CSS selectors only
152
+ - ❌ Do NOT use Playwright selectors like \`:has-text()\`, \`text=\`, or \`:visible\` in evaluate()
153
+ - ✓ Use standard CSS: \`document.querySelector('button[type="submit"]')\`
154
+ - ✓ Use data-testid: \`document.querySelector('[data-testid="submit-btn"]')\`
155
+ - ✓ Find by text: \`Array.from(document.querySelectorAll('button')).find(b => b.textContent.includes('Submit'))\`
156
+
157
+ ## ⚠️ CRITICAL: You must not send any text messages - they will NOT be displayed to the user. All context and user information will be encapsulated in the tool calls.
63
158
 
64
159
  ## ⚠️ CRITICAL: You MUST call \`endTestRun\` to complete the test run
65
160
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/subagents/testing/prompt-builder.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAAC,MAAqB;IACjE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI;QAC1C,CAAC,CAAC;;EAEJ,MAAM,CAAC,WAAW,CAAC,IAAI;CACxB;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAErE,MAAM,gBAAgB,GAAG,YAAY;QACnC,CAAC,CAAC;;EAEJ,MAAM,CAAC,SAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACtH;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,eAAe,GAAG,YAAY;QAClC,CAAC,CAAC;;;;;;yEAMmE;QACrE,CAAC,CAAC;;;;kEAI4D,CAAC;IAEjE,MAAM,YAAY,GAAG,YAAY;QAC/B,CAAC,CAAC;;;;;wEAKkE;QACpE,CAAC,CAAC;;;;oEAI8D,CAAC;IAEnE,OAAO;;;iBAGQ,MAAM,CAAC,SAAS;iBAChB,MAAM,CAAC,MAAM;EAC5B,WAAW;EACX,gBAAgB;EAChB,eAAe;;EAEf,YAAY;;;;;;;;;CASb,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/subagents/testing/prompt-builder.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,24 @@ export interface TestCase {
6
6
  name: string;
7
7
  description?: string;
8
8
  }
9
+ /**
10
+ * Information about an interactive element on the page.
11
+ * Used for DOM context in testing prompts.
12
+ */
13
+ export interface InteractiveElement {
14
+ tag: string;
15
+ text?: string;
16
+ id?: string;
17
+ className?: string;
18
+ testId?: string;
19
+ placeholder?: string;
20
+ href?: string;
21
+ type?: string;
22
+ role?: string;
23
+ ariaLabel?: string;
24
+ name?: string;
25
+ disabled?: boolean;
26
+ }
9
27
  /**
10
28
  * Configuration for starting a test run with the test subagent.
11
29
  */
@@ -21,6 +39,8 @@ export interface TestRunConfig {
21
39
  };
22
40
  /** Predefined test cases to execute */
23
41
  testCases?: TestCase[];
42
+ /** Interactive elements on the current page for DOM context */
43
+ interactiveElements?: InteractiveElement[];
24
44
  }
25
45
  /**
26
46
  * Result from a test step (browser action).
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/subagents/testing/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,WAAW,CAAC,EAAE;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,uCAAuC;IACvC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/subagents/testing/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,WAAW,CAAC,EAAE;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,uCAAuC;IACvC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -4,7 +4,7 @@ import type { FileArtifact } from "../../../types.js";
4
4
  * Read the TypeScript source of an API
5
5
  *
6
6
  * Priority order:
7
- * 1. Check scratch directory (primary location for TS source)
7
+ * 1. Check scratch directory if it is more recent than the YAML (primary location for TS source)
8
8
  * 2. Generate from YAML if only api.yaml exists (legacy apps or after UI edits)
9
9
  */
10
10
  export declare const readApiSource: (services: Pick<ClarkStateHandlerParams, "appShell" | "templateRenderer">, apiName: string, entityNames?: string[]) => Promise<FileArtifact | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"api-source.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools/apis/api-source.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GACxB,UAAU,IAAI,CAAC,uBAAuB,EAAE,UAAU,GAAG,kBAAkB,CAAC,EACxE,SAAS,MAAM,EACf,cAAc,MAAM,EAAE,sCAkDvB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,uBAAuB,GAChC,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
1
+ {"version":3,"file":"api-source.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools/apis/api-source.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GACxB,UAAU,IAAI,CAAC,uBAAuB,EAAE,UAAU,GAAG,kBAAkB,CAAC,EACxE,SAAS,MAAM,EACf,cAAc,MAAM,EAAE,sCAiFvB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,uBAAuB,GAChC,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
@@ -1,4 +1,4 @@
1
- import { writeFile, mkdir, readFile } from "fs/promises";
1
+ import { writeFile, mkdir, readFile, stat } from "fs/promises";
2
2
  import path from "path";
3
3
  import { Paths } from "../../../const.js";
4
4
  import { YamlToApiBuilderTransformer } from "../../../transform/api-builder/to-sdk-transformer.js";
@@ -8,17 +8,49 @@ import { applyFileTransformations, renderPath, } from "../../../transform/shared
8
8
  * Read the TypeScript source of an API
9
9
  *
10
10
  * Priority order:
11
- * 1. Check scratch directory (primary location for TS source)
11
+ * 1. Check scratch directory if it is more recent than the YAML (primary location for TS source)
12
12
  * 2. Generate from YAML if only api.yaml exists (legacy apps or after UI edits)
13
13
  */
14
14
  export const readApiSource = async (services, apiName, entityNames) => {
15
15
  const apiTsPath = renderPath(Paths.GeneratedApis, {
16
16
  apiName,
17
17
  }) + ".ts";
18
- const tmpPath = renderPath(Paths.Scratch, { path: apiTsPath });
18
+ const scratchPath = renderPath(Paths.Scratch, { path: apiTsPath });
19
+ console.debug("[api-source] reading api source");
20
+ // Generate from YAML if it exists (legacy apps or after UI edits)
21
+ const yamlPath = renderPath(Paths.ApiYamls, {
22
+ apiName,
23
+ });
24
+ const fullYamlPath = path.join(services.appShell.appRootDirPath, yamlPath);
25
+ const fullScratchPath = path.join(services.appShell.appRootDirPath, scratchPath);
26
+ let scratchExists = false;
27
+ let scratchMtime;
28
+ let yamlExists = false;
29
+ let yamlMtime;
30
+ try {
31
+ const scratchStat = await stat(fullScratchPath);
32
+ scratchExists = true;
33
+ scratchMtime = scratchStat.mtime;
34
+ }
35
+ catch {
36
+ // Scratch doesn't exist
37
+ }
38
+ try {
39
+ const yamlStat = await stat(fullYamlPath);
40
+ yamlExists = true;
41
+ yamlMtime = yamlStat.mtime;
42
+ }
43
+ catch {
44
+ // YAML doesn't exist
45
+ }
46
+ // If scratch exists and is newer than YAML (or YAML doesn't exist), use scratch
47
+ const scratchIsFresh = scratchExists &&
48
+ scratchMtime &&
49
+ (!yamlExists || !yamlMtime || scratchMtime >= yamlMtime);
19
50
  // Check scratch directory first
20
- if (await services.appShell.pathExists(tmpPath)) {
21
- const content = await readFile(path.join(services.appShell.appRootDirPath, tmpPath));
51
+ if (scratchIsFresh) {
52
+ console.debug("[api-source] scratch is fresh");
53
+ const content = await readFile(fullScratchPath);
22
54
  const artifact = {
23
55
  type: "file",
24
56
  filePath: apiTsPath,
@@ -26,10 +58,6 @@ export const readApiSource = async (services, apiName, entityNames) => {
26
58
  };
27
59
  return artifact;
28
60
  }
29
- // Generate from YAML if it exists (legacy apps or after UI edits)
30
- const yamlPath = renderPath(Paths.ApiYamls, {
31
- apiName,
32
- });
33
61
  const pathExists = await services.appShell.pathExists(yamlPath);
34
62
  if (!pathExists) {
35
63
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"api-source.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools/apis/api-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-source.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools/apis/api-source.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
- import type { ClarkStateHandlerParams } from "../../state-machine/clark-fsm.js";
2
- export declare const buildReloadFileToolFactory: import("../tools2/types.js").ToolFactory<ClarkStateHandlerParams, import("../tools2/types.js").Tool<{
1
+ import type { Clark, ClarkStateHandlerParams } from "../../state-machine/clark-fsm.js";
2
+ export declare const buildReloadFileToolFactory: import("../tools2/types.js").ToolFactory<{
3
+ clark: Clark;
4
+ services: ClarkStateHandlerParams;
5
+ }, import("../tools2/types.js").Tool<{
3
6
  filePath?: string | undefined;
4
7
  }, {
5
8
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"build-reload-file.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-reload-file.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAEhF,eAAO,MAAM,0BAA0B;;;;;;;;GAgFtC,CAAC"}
1
+ {"version":3,"file":"build-reload-file.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-reload-file.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,KAAK,EACL,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAE1C,eAAO,MAAM,0BAA0B;WAM5B,KAAK;cACF,uBAAuB;;;;;;;;;GAgFpC,CAAC"}
@@ -2,7 +2,7 @@ import path from "node:path";
2
2
  import z from "zod";
3
3
  import { getPrefixedLogger } from "../../../util/logger.js";
4
4
  import { createToolFactory, PermissionLevel, ToolCategory, } from "../tools2/types.js";
5
- export const buildReloadFileToolFactory = createToolFactory("build_reloadFile", (services) => {
5
+ export const buildReloadFileToolFactory = createToolFactory("build_reloadFile", ({ clark, services, }) => {
6
6
  return {
7
7
  category: ToolCategory.GENERAL,
8
8
  defaultPermission: PermissionLevel.ALLOW,
@@ -34,8 +34,9 @@ This tool should NOT be used as a first resort for fixing app issues. Examine er
34
34
  }
35
35
  const logger = getPrefixedLogger(`[reloadFile]`);
36
36
  if (!filePath) {
37
- services.viteServer.ws.send({ type: "full-reload" });
38
- logger.info("Reload tool - full reload");
37
+ // Trigger full iframe reload through the socket connection
38
+ await clark.context.peer?.call.reloadIframe();
39
+ logger.info("Reload tool - full reload via socket");
39
40
  return {
40
41
  message: "Successfully triggered full reload",
41
42
  filePath: undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"build-reload-file.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-reload-file.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAC;AAG5B,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CACzD,kBAAkB,EAClB,CAAC,QAAiC,EAAE,EAAE;IACpC,OAAO;QACL,QAAQ,EAAE,YAAY,CAAC,OAAO;QAC9B,iBAAiB,EAAE,eAAe,CAAC,KAAK;QACxC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE;;;;;;;;;;;;;;CAclB;QACK,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,oEAAoE,CACrE;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAEjD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;gBACzC,OAAO;oBACL,OAAO,EAAE,oCAAoC;oBAC7C,QAAQ,EAAE,SAAS;iBACpB,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YAEvE,MAAM,CAAC,IAAI,CAAC,mBAAmB,QAAQ,gBAAgB,QAAQ,GAAG,CAAC,CAAC;YAEpE,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACvE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,4CAA4C,CACnF,CAAC;YACJ,CAAC;YAED,wBAAwB;YACxB,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAEzD,2BAA2B;YAC3B,MAAM,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAE/C,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,+BAA+B;gBACtC,IAAI,EAAE,EAAE;aACT,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;YAEvD,OAAO;gBACL,OAAO,EAAE,+BAA+B,QAAQ,EAAE;gBAClD,QAAQ;aACT,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"build-reload-file.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-reload-file.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAC;AAM5B,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CACzD,kBAAkB,EAClB,CAAC,EACC,KAAK,EACL,QAAQ,GAIT,EAAE,EAAE;IACH,OAAO;QACL,QAAQ,EAAE,YAAY,CAAC,OAAO;QAC9B,iBAAiB,EAAE,eAAe,CAAC,KAAK;QACxC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE;;;;;;;;;;;;;;CAclB;QACK,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,oEAAoE,CACrE;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAEjD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,2DAA2D;gBAC3D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC9C,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBACpD,OAAO;oBACL,OAAO,EAAE,oCAAoC;oBAC7C,QAAQ,EAAE,SAAS;iBACpB,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YAEvE,MAAM,CAAC,IAAI,CAAC,mBAAmB,QAAQ,gBAAgB,QAAQ,GAAG,CAAC,CAAC;YAEpE,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACvE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,4CAA4C,CACnF,CAAC;YACJ,CAAC;YAED,wBAAwB;YACxB,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAEzD,2BAA2B;YAC3B,MAAM,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAE/C,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,+BAA+B;gBACtC,IAAI,EAAE,EAAE;aACT,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;YAEvD,OAAO;gBACL,OAAO,EAAE,+BAA+B,QAAQ,EAAE;gBAClD,QAAQ;aACT,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -14,6 +14,7 @@ export { buildReloadFileToolFactory } from "./build-reload-file.js";
14
14
  export * from "./integrations/index.js";
15
15
  export { exitPlanModeToolFactory } from "../tools2/tools/exit-plan-mode.js";
16
16
  export { askMultiChoiceToolFactory } from "../tools2/tools/ask-multi-choice.js";
17
+ export { listAttachmentsToolFactory } from "../tools2/tools/list-attachments.js";
17
18
  export { buildGetRuntimeErrorsToolFactory } from "./get-runtime-errors.js";
18
19
  export { buildGetConsoleLogsToolFactory } from "./get-console-logs.js";
19
20
  export { grepMetadataToolFactory } from "../tools2/tools/grep-metadata.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC"}
@@ -14,6 +14,7 @@ export { buildReloadFileToolFactory } from "./build-reload-file.js";
14
14
  export * from "./integrations/index.js";
15
15
  export { exitPlanModeToolFactory } from "../tools2/tools/exit-plan-mode.js";
16
16
  export { askMultiChoiceToolFactory } from "../tools2/tools/ask-multi-choice.js";
17
+ export { listAttachmentsToolFactory } from "../tools2/tools/list-attachments.js";
17
18
  export { buildGetRuntimeErrorsToolFactory } from "./get-runtime-errors.js";
18
19
  export { buildGetConsoleLogsToolFactory } from "./get-console-logs.js";
19
20
  export { grepMetadataToolFactory } from "../tools2/tools/grep-metadata.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC"}
@@ -24,8 +24,8 @@ export declare const executeRequestToIntegrationToolFactory: import("../../tools
24
24
  type: "salesforce";
25
25
  query: string;
26
26
  } | {
27
- type: "other";
28
27
  body: string;
28
+ type: "other";
29
29
  };
30
30
  description: string;
31
31
  integrationId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools/integrations/internal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAIxE,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;GAqBjC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools/integrations/internal.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAIxE,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;GA6BjC"}
@@ -1,12 +1,19 @@
1
+ import { getLogger } from "../../../../util/logger.js";
1
2
  import { safeJsonStringify } from "../../../util/safe-stringify.js";
2
3
  const MAX_RESPONSE_TOKENS = 10_000;
3
4
  export async function executeRequest(context, integrationId, request) {
5
+ if (!context.peer) {
6
+ getLogger().warn(`[ai-service] Cannot execute integration: no peer. id=${integrationId}`);
7
+ }
4
8
  const response = await context.peer?.call.aiExecuteRequestToIntegration({
5
9
  integrationId,
6
10
  request,
7
11
  });
8
12
  if (!response || response.error) {
9
- throw new Error(`Error querying integration: ${response?.error || "Unknown error"}`);
13
+ const integrationError = response?.error ?? "Unknown error";
14
+ throw new Error(typeof integrationError === "string"
15
+ ? integrationError
16
+ : (safeJsonStringify(integrationError) ?? "Unknown error"));
10
17
  }
11
18
  // truncate results
12
19
  const truncatedResponse = truncateToTokens(response.response, MAX_RESPONSE_TOKENS);
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools/integrations/internal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools/integrations/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAqB,EACrB,aAAqB,EACrB,OAAgC;IAEhC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,SAAS,EAAE,CAAC,IAAI,CACd,wDAAwD,aAAa,EAAE,CACxE,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,6BAA6B,CAAC;QACtE,aAAa;QACb,OAAO;KACR,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,gBAAgB,GAAG,QAAQ,EAAE,KAAK,IAAI,eAAe,CAAC;QAC5D,MAAM,IAAI,KAAK,CACb,OAAO,gBAAgB,KAAK,QAAQ;YAClC,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,eAAe,CAAC,CAC7D,CAAC;IACJ,CAAC;IACD,mBAAmB;IACnB,MAAM,iBAAiB,GAAG,gBAAgB,CACxC,QAAQ,CAAC,QAAQ,EACjB,mBAAmB,CACpB,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,iBAAiB,CAAC,MAAM;QAC9B,SAAS,EAAE,iBAAiB,CAAC,SAAS;KACvC,CAAC;AACJ,CAAC;AAED,+BAA+B;AAC/B,SAAS,gBAAgB,CACvB,GAAQ,EACR,SAAiB;IAKjB,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;IAED,qDAAqD;IACrD,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAChD,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,cAAc,CAAC,GAAQ,EAAE,QAAgB;IAChD,8BAA8B;IAC9B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACjE,OAAO,GAAG,CAAC;IACb,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,SAAS,GAAU,EAAE,CAAC;QAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAE9C,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAC/B,qDAAqD;gBACrD,MAAM;YACR,CAAC;YAED,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iBAAiB;IACjB,MAAM,SAAS,GAAwB,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC/B,yDAAyD;YACzD,MAAM;QACR,CAAC;QAED,SAAS,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;IAClC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/ai-service/agent/tools.ts"],"names":[],"mappings":"AAkDA,OAAO,EAAiC,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AA6C7E,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,UAAU,uBAAuB,4CAiRlC,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/ai-service/agent/tools.ts"],"names":[],"mappings":"AAoDA,OAAO,EAIL,KAAK,IAAI,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AA6C7E,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,UAAU,uBAAuB,4CA6TlC,CAAC"}
@@ -1,4 +1,5 @@
1
- import { getErrorMeta } from "../../util/logger.js";
1
+ import { AiToolExecutionErrorCode } from "@superblocksteam/library-shared/types";
2
+ import { getErrorMeta, getLogger } from "../../util/logger.js";
2
3
  import { OperationQueue } from "../../util/operation-queue.js";
3
4
  import { MCPClient } from "../judge/integration/mcp-client.js";
4
5
  import { McpToolAdapter } from "../mcp/adapter/mcp-tool-adapter.js";
@@ -9,10 +10,10 @@ import { buildApiToolFactory } from "./tools/apis/build-api.js";
9
10
  import { getApiDocsToolFactory } from "./tools/apis/get-api-docs.js";
10
11
  import { checkTestApiPermissions, testApiToolFactory, } from "./tools/apis/test-api.js";
11
12
  import { writeApiToolFactory } from "./tools/apis/write-api.js";
12
- import { buildInstallPackagesToolFactory, buildWriteFileToolFactory, buildEditFileToolFactory, buildMultiEditFileToolFactory, buildReadFileToolFactory, buildListFilesToolFactory, buildValidateIconsToolFactory, buildDebugToolFactory, buildFinalizeToolFactory, buildManageChecklistToolFactory, buildDeleteFileToolFactory, checkDeleteFilePermissions, buildReloadFileToolFactory, executeRequestToIntegrationToolFactory, grepMetadataToolFactory, searchIntegrationsToolFactory, runCodeToolFactory, exitPlanModeToolFactory, askMultiChoiceToolFactory, buildCaptureScreenshotToolFactory, buildGetRuntimeErrorsToolFactory, buildGetConsoleLogsToolFactory, startTestRunToolFactory, endTestRunToolFactory, updateTestCaseStatusToolFactory, } from "./tools/index.js";
13
+ import { buildInstallPackagesToolFactory, buildWriteFileToolFactory, buildEditFileToolFactory, buildMultiEditFileToolFactory, buildReadFileToolFactory, buildListFilesToolFactory, buildValidateIconsToolFactory, buildDebugToolFactory, buildFinalizeToolFactory, buildManageChecklistToolFactory, buildDeleteFileToolFactory, checkDeleteFilePermissions, buildReloadFileToolFactory, executeRequestToIntegrationToolFactory, grepMetadataToolFactory, searchIntegrationsToolFactory, runCodeToolFactory, exitPlanModeToolFactory, askMultiChoiceToolFactory, listAttachmentsToolFactory, buildCaptureScreenshotToolFactory, buildGetRuntimeErrorsToolFactory, buildGetConsoleLogsToolFactory, startTestRunToolFactory, endTestRunToolFactory, updateTestCaseStatusToolFactory, } from "./tools/index.js";
13
14
  import { presets, blockTools, forTools } from "./tools2/access-control.js";
14
15
  import { globToolFactory, grepToolFactory, lsToolFactory, } from "./tools2/tools/index.js";
15
- import { PermissionLevel, ToolCategory } from "./tools2/types.js";
16
+ import { PermissionLevel, ToolCategory, ToolExecutionError, } from "./tools2/types.js";
16
17
  const fileToolConfig = {
17
18
  extractDisplayName: (parameters) => {
18
19
  const params = parameters;
@@ -86,6 +87,9 @@ export const buildTools = async (clark, services) => {
86
87
  },
87
88
  });
88
89
  try {
90
+ if (!clark.context.peer) {
91
+ getLogger().warn(`[ai-service] Cannot request tool permission: no peer. tool=${tool.name}`);
92
+ }
89
93
  await clark.context.peer?.call.aiRequestToolPermission({
90
94
  messageId,
91
95
  toolName: tool.name,
@@ -134,7 +138,7 @@ export const buildTools = async (clark, services) => {
134
138
  registry.register(buildFinalizeToolFactory, { clark, services });
135
139
  registry.register(buildManageChecklistToolFactory, { clark, services });
136
140
  registry.register(buildDeleteFileToolFactory, { clark, services });
137
- registry.register(buildReloadFileToolFactory, services);
141
+ registry.register(buildReloadFileToolFactory, { clark, services });
138
142
  registry.register(executeRequestToIntegrationToolFactory, {
139
143
  clark,
140
144
  services,
@@ -144,6 +148,7 @@ export const buildTools = async (clark, services) => {
144
148
  registry.register(searchIntegrationsToolFactory, services);
145
149
  registry.register(exitPlanModeToolFactory, { clark, services });
146
150
  registry.register(askMultiChoiceToolFactory, { clark, services });
151
+ registry.register(listAttachmentsToolFactory, { clark, services });
147
152
  registry.register(writeApiToolFactory, services);
148
153
  registry.register(getApiDocsToolFactory, services);
149
154
  registry.register(buildApiToolFactory, { clark, services, scopeUpdateQueue });
@@ -173,6 +178,8 @@ export const buildTools = async (clark, services) => {
173
178
  headless: true,
174
179
  initData,
175
180
  bootstrapData,
181
+ saveArtifact: services.appShell.saveGeneratedArtifact.bind(services.appShell),
182
+ runTimestamp: clark.context.runTimestamp,
176
183
  });
177
184
  const mcpClient = new MCPClient(serverUrl, logger);
178
185
  await mcpClient.connect();
@@ -221,6 +228,32 @@ export const buildTools = async (clark, services) => {
221
228
  registry.register(startTestRunToolFactory, { clark, services });
222
229
  registry.register(endTestRunToolFactory, { clark, services });
223
230
  registry.register(updateTestCaseStatusToolFactory, { clark, services });
231
+ // If a user skips a test case, prevent any further Playwright actions from being executed under that skipped testCaseId.
232
+ registry.addMiddleware((tool) => {
233
+ if (tool.name !== "browser_playwright_action") {
234
+ return tool;
235
+ }
236
+ return {
237
+ ...tool,
238
+ execute: async (input, options) => {
239
+ const testCaseId = input && typeof input === "object" && "testCaseId" in input
240
+ ? input.testCaseId
241
+ : undefined;
242
+ if (typeof testCaseId === "string" && testCaseId.length > 0) {
243
+ const status = clark.context.testCaseStatuses?.get(testCaseId);
244
+ if (status === "skipped") {
245
+ throw new ToolExecutionError(`Test case "${testCaseId}" was skipped by the user. Do NOT run browser actions for it; move to the next test case.`, {
246
+ toolName: tool.name,
247
+ input,
248
+ context: {},
249
+ code: AiToolExecutionErrorCode.NOT_ALLOWED,
250
+ });
251
+ }
252
+ }
253
+ return tool.execute(input, options);
254
+ },
255
+ };
256
+ });
224
257
  }
225
258
  }
226
259
  catch (error) {