@superblocksteam/vite-plugin-file-sync 2.0.72-next.1 → 2.0.72-next.3
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.
- package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts +2 -1
- package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js +18 -2
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
- package/dist/ai-service/agent/subagents/testing/index.d.ts +3 -0
- package/dist/ai-service/agent/subagents/testing/index.d.ts.map +1 -0
- package/dist/ai-service/agent/subagents/testing/index.js +2 -0
- package/dist/ai-service/agent/subagents/testing/index.js.map +1 -0
- package/dist/ai-service/agent/subagents/testing/prompt-builder.d.ts +10 -0
- package/dist/ai-service/agent/subagents/testing/prompt-builder.d.ts.map +1 -0
- package/dist/ai-service/agent/subagents/testing/prompt-builder.js +67 -0
- package/dist/ai-service/agent/subagents/testing/prompt-builder.js.map +1 -0
- package/dist/ai-service/agent/subagents/testing/types.d.ts +47 -0
- package/dist/ai-service/agent/subagents/testing/types.d.ts.map +1 -0
- package/dist/ai-service/agent/subagents/testing/types.js +2 -0
- package/dist/ai-service/agent/subagents/testing/types.js.map +1 -0
- package/dist/ai-service/agent/subagents/types.d.ts +9 -8
- package/dist/ai-service/agent/subagents/types.d.ts.map +1 -1
- package/dist/ai-service/agent/subagents/types.js +9 -9
- package/dist/ai-service/agent/subagents/types.js.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.d.ts +7 -2
- package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.js +21 -2
- package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.js +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
- package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts +1 -0
- package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-capture-screenshot.js +4 -2
- package/dist/ai-service/agent/tools/build-capture-screenshot.js.map +1 -1
- package/dist/ai-service/agent/tools/build-delete-file.d.ts +1 -1
- package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +1 -1
- package/dist/ai-service/agent/tools/{build-read-files.d.ts → build-read-file.d.ts} +10 -6
- package/dist/ai-service/agent/tools/build-read-file.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/build-read-file.js +139 -0
- package/dist/ai-service/agent/tools/build-read-file.js.map +1 -0
- package/dist/ai-service/agent/tools/build-reload-file.d.ts +4 -1
- package/dist/ai-service/agent/tools/build-reload-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-reload-file.js +18 -8
- package/dist/ai-service/agent/tools/build-reload-file.js.map +1 -1
- package/dist/ai-service/agent/tools/get-console-logs.js +1 -1
- package/dist/ai-service/agent/tools/get-console-logs.js.map +1 -1
- package/dist/ai-service/agent/tools/get-runtime-errors.js +1 -1
- package/dist/ai-service/agent/tools/get-runtime-errors.js.map +1 -1
- package/dist/ai-service/agent/tools/index.d.ts +4 -1
- package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/index.js +4 -1
- package/dist/ai-service/agent/tools/index.js.map +1 -1
- package/dist/ai-service/agent/tools.d.ts.map +1 -1
- package/dist/ai-service/agent/tools.js +89 -29
- package/dist/ai-service/agent/tools.js.map +1 -1
- package/dist/ai-service/agent/tools2/access-control.d.ts +23 -1
- package/dist/ai-service/agent/tools2/access-control.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/access-control.js +67 -1
- package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
- package/dist/ai-service/agent/tools2/entity-permissions.d.ts +26 -0
- package/dist/ai-service/agent/tools2/entity-permissions.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/entity-permissions.js +15 -0
- package/dist/ai-service/agent/tools2/entity-permissions.js.map +1 -1
- package/dist/ai-service/agent/tools2/example.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/example.js +2 -4
- package/dist/ai-service/agent/tools2/example.js.map +1 -1
- package/dist/ai-service/agent/tools2/index.d.ts +1 -1
- package/dist/ai-service/agent/tools2/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/index.js +1 -1
- package/dist/ai-service/agent/tools2/index.js.map +1 -1
- package/dist/ai-service/agent/tools2/registry.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/registry.js +37 -23
- package/dist/ai-service/agent/tools2/registry.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/end-test-run.d.ts +31 -0
- package/dist/ai-service/agent/tools2/tools/end-test-run.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/end-test-run.js +105 -0
- package/dist/ai-service/agent/tools2/tools/end-test-run.js.map +1 -0
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +1 -0
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +135 -11
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/start-test-run.d.ts +24 -0
- package/dist/ai-service/agent/tools2/tools/start-test-run.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/start-test-run.js +258 -0
- package/dist/ai-service/agent/tools2/tools/start-test-run.js.map +1 -0
- package/dist/ai-service/agent/tools2/tools/update-test-case-status.d.ts +29 -0
- package/dist/ai-service/agent/tools2/tools/update-test-case-status.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/update-test-case-status.js +87 -0
- package/dist/ai-service/agent/tools2/tools/update-test-case-status.js.map +1 -0
- package/dist/ai-service/agent/tools2/types.d.ts +6 -24
- package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/types.js +4 -15
- package/dist/ai-service/agent/tools2/types.js.map +1 -1
- package/dist/ai-service/agent/utils.d.ts +10 -0
- package/dist/ai-service/agent/utils.d.ts.map +1 -1
- package/dist/ai-service/agent/utils.js +115 -1
- package/dist/ai-service/agent/utils.js.map +1 -1
- package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
- package/dist/ai-service/chat/chat-session-store.js +122 -1
- package/dist/ai-service/chat/chat-session-store.js.map +1 -1
- package/dist/ai-service/features.d.ts +4 -0
- package/dist/ai-service/features.d.ts.map +1 -1
- package/dist/ai-service/features.js +4 -0
- package/dist/ai-service/features.js.map +1 -1
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +14 -8
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/judge/integration/mcp-client.d.ts +3 -6
- package/dist/ai-service/judge/integration/mcp-client.d.ts.map +1 -1
- package/dist/ai-service/judge/integration/mcp-client.js.map +1 -1
- package/dist/ai-service/judge/tools/playwright-action.d.ts +1 -1
- package/dist/ai-service/judge/tools/submit-feedback.d.ts +1 -1
- package/dist/ai-service/llm/client.d.ts +6 -0
- package/dist/ai-service/llm/client.d.ts.map +1 -1
- package/dist/ai-service/llm/client.js +9 -0
- package/dist/ai-service/llm/client.js.map +1 -1
- package/dist/ai-service/llm/context/constants.d.ts +8 -0
- package/dist/ai-service/llm/context/constants.d.ts.map +1 -1
- package/dist/ai-service/llm/context/constants.js +8 -0
- package/dist/ai-service/llm/context/constants.js.map +1 -1
- package/dist/ai-service/llm/context/context.d.ts.map +1 -1
- package/dist/ai-service/llm/context/context.js +12 -9
- package/dist/ai-service/llm/context/context.js.map +1 -1
- package/dist/ai-service/llm/context/manager.d.ts +1 -1
- package/dist/ai-service/llm/context/manager.js +1 -1
- package/dist/ai-service/llm/context/utils/message-utils.d.ts +10 -0
- package/dist/ai-service/llm/context/utils/message-utils.d.ts.map +1 -1
- package/dist/ai-service/llm/context/utils/message-utils.js +92 -0
- package/dist/ai-service/llm/context/utils/message-utils.js.map +1 -1
- package/dist/ai-service/llm/interaction/provider.d.ts +1 -0
- package/dist/ai-service/llm/interaction/provider.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/event-bus.d.ts +5 -0
- package/dist/ai-service/llm/stream/event-bus.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/event-bus.js.map +1 -1
- package/dist/ai-service/llm/stream/observers/llmobs.d.ts +4 -1
- package/dist/ai-service/llm/stream/observers/llmobs.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/observers/llmobs.js +194 -10
- package/dist/ai-service/llm/stream/observers/llmobs.js.map +1 -1
- package/dist/ai-service/llm/stream/observers/logging.d.ts +1 -0
- package/dist/ai-service/llm/stream/observers/logging.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/observers/logging.js +92 -20
- package/dist/ai-service/llm/stream/observers/logging.js.map +1 -1
- package/dist/ai-service/llm/stream/orchestrator.d.ts +7 -1
- package/dist/ai-service/llm/stream/orchestrator.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/orchestrator.js +24 -4
- package/dist/ai-service/llm/stream/orchestrator.js.map +1 -1
- package/dist/ai-service/llm/stream/session.d.ts +12 -2
- package/dist/ai-service/llm/stream/session.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/session.js +9 -26
- package/dist/ai-service/llm/stream/session.js.map +1 -1
- package/dist/ai-service/llmobs/tracer.d.ts +0 -5
- package/dist/ai-service/llmobs/tracer.d.ts.map +1 -1
- package/dist/ai-service/llmobs/tracer.js +1 -40
- package/dist/ai-service/llmobs/tracer.js.map +1 -1
- package/dist/ai-service/llmobs/types.d.ts +1 -0
- package/dist/ai-service/llmobs/types.d.ts.map +1 -1
- package/dist/ai-service/mcp/adapter/mcp-tool-adapter.d.ts +1 -1
- package/dist/ai-service/mcp/adapter/mcp-tool-adapter.d.ts.map +1 -1
- package/dist/ai-service/mcp/adapter/mcp-tool-adapter.js +5 -2
- package/dist/ai-service/mcp/adapter/mcp-tool-adapter.js.map +1 -1
- package/dist/ai-service/mcp/embedded-playwright-mcp-server.d.ts +16 -1
- package/dist/ai-service/mcp/embedded-playwright-mcp-server.d.ts.map +1 -1
- package/dist/ai-service/mcp/embedded-playwright-mcp-server.js +625 -89
- package/dist/ai-service/mcp/embedded-playwright-mcp-server.js.map +1 -1
- package/dist/ai-service/mcp/playwright-server.d.ts +10 -0
- package/dist/ai-service/mcp/playwright-server.d.ts.map +1 -1
- package/dist/ai-service/mcp/playwright-server.js +3 -0
- package/dist/ai-service/mcp/playwright-server.js.map +1 -1
- package/dist/ai-service/mcp/types.d.ts +4 -0
- package/dist/ai-service/mcp/types.d.ts.map +1 -1
- package/dist/ai-service/prompts/explain-code.d.ts +2 -2
- package/dist/ai-service/prompts/explain-code.d.ts.map +1 -1
- package/dist/ai-service/prompts/explain-code.js +2 -2
- package/dist/ai-service/prompts/explain-code.js.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts +18 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +15 -0
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +36 -6
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js +87 -34
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
- package/dist/ai-service/state-machine/mocks.js +2 -0
- package/dist/ai-service/state-machine/mocks.js.map +1 -1
- package/dist/ai-service/state-machine/traced-fsm.d.ts +2 -0
- package/dist/ai-service/state-machine/traced-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/traced-fsm.js +18 -0
- package/dist/ai-service/state-machine/traced-fsm.js.map +1 -1
- package/dist/ai-service/util/safe-parse.d.ts +2 -0
- package/dist/ai-service/util/safe-parse.d.ts.map +1 -0
- package/dist/ai-service/util/safe-parse.js +9 -0
- package/dist/ai-service/util/safe-parse.js.map +1 -0
- package/dist/ai-service/util/safe-stringify.d.ts.map +1 -1
- package/dist/ai-service/util/safe-stringify.js +7 -0
- package/dist/ai-service/util/safe-stringify.js.map +1 -1
- package/dist/ai-service/util/stop-condition.d.ts +1 -0
- package/dist/ai-service/util/stop-condition.d.ts.map +1 -1
- package/dist/ai-service/util/stop-condition.js +5 -0
- package/dist/ai-service/util/stop-condition.js.map +1 -1
- package/dist/ai-service/util/strip-content.d.ts +2 -0
- package/dist/ai-service/util/strip-content.d.ts.map +1 -0
- package/dist/ai-service/util/strip-content.js +31 -0
- package/dist/ai-service/util/strip-content.js.map +1 -0
- package/dist/ai-service/util/tool-signature.d.ts +13 -0
- package/dist/ai-service/util/tool-signature.d.ts.map +1 -0
- package/dist/ai-service/util/tool-signature.js +38 -0
- package/dist/ai-service/util/tool-signature.js.map +1 -0
- package/dist/file-sync-vite-plugin.d.ts.map +1 -1
- package/dist/file-sync-vite-plugin.js +3 -0
- package/dist/file-sync-vite-plugin.js.map +1 -1
- package/dist/injected-index.js +2 -2
- package/dist/injected-index.js.map +1 -1
- package/dist/parsing/jsx.d.ts.map +1 -1
- package/dist/parsing/jsx.js +0 -2
- package/dist/parsing/jsx.js.map +1 -1
- package/package.json +9 -9
- package/dist/ai-service/agent/tools/build-read-files.d.ts.map +0 -1
- package/dist/ai-service/agent/tools/build-read-files.js +0 -67
- package/dist/ai-service/agent/tools/build-read-files.js.map +0 -1
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { generateObject } from "ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { getLogger } from "../../../../util/logger.js";
|
|
4
|
+
import { sendUserMessageChannel } from "../../../state-machine/helpers/peer.js";
|
|
5
|
+
import { buildTestSubagentSystemPrompt } from "../../subagents/testing/prompt-builder.js";
|
|
6
|
+
import { SubagentType } from "../../subagents/types.js";
|
|
7
|
+
import { processTestStreamChunk } from "../../utils.js";
|
|
8
|
+
import { createToolFactory, ToolCategory, PermissionLevel } from "../types.js";
|
|
9
|
+
/**
|
|
10
|
+
* startTestRun - Invokes the Testing Agent subagent to perform end-to-end testing.
|
|
11
|
+
*
|
|
12
|
+
* This tool:
|
|
13
|
+
* 1. Creates a test run with a unique ID
|
|
14
|
+
* 2. Sends test_run_start message to UI
|
|
15
|
+
* 3. Invokes the TEST subagent with filtered tools
|
|
16
|
+
* 4. Suppresses text/reasoning output (all context in tool descriptions)
|
|
17
|
+
* 5. Streams tool results back to the user
|
|
18
|
+
*/
|
|
19
|
+
export const startTestRunToolFactory = createToolFactory("startTestRun", ({ clark, services, }) => {
|
|
20
|
+
const logger = getLogger();
|
|
21
|
+
return {
|
|
22
|
+
description: `
|
|
23
|
+
Invoke the Testing Agent to perform end-to-end testing of the application.
|
|
24
|
+
|
|
25
|
+
Use this tool to start a test run when:
|
|
26
|
+
- The plan has enableTesting set to true
|
|
27
|
+
- The user explicitly asks to test (e.g., "test this", "make sure it works", "verify the changes")
|
|
28
|
+
|
|
29
|
+
The Testing Agent will:
|
|
30
|
+
- Take screenshots to verify UI state
|
|
31
|
+
- Interact with form fields, buttons, etc.
|
|
32
|
+
- Validate that the plan was executed correctly
|
|
33
|
+
- Report test results
|
|
34
|
+
|
|
35
|
+
**IMPORTANT**: Call this tool when:
|
|
36
|
+
- enableTesting is set on the plan context (REQUIRED)
|
|
37
|
+
- User explicitly asks to test the app
|
|
38
|
+
- After completing a significant feature build
|
|
39
|
+
- When the user says things like "make sure it works", "verify", "test it out"
|
|
40
|
+
|
|
41
|
+
The Testing Agent has access to Playwright browser automation and can interact with the running application.
|
|
42
|
+
`,
|
|
43
|
+
category: ToolCategory.SUBAGENT,
|
|
44
|
+
defaultPermission: PermissionLevel.ALLOW,
|
|
45
|
+
readOnly: true,
|
|
46
|
+
inputSchema: z.object({
|
|
47
|
+
header: z
|
|
48
|
+
.string()
|
|
49
|
+
.describe("Short, concise header for display (e.g., 'Calculator Test', 'Login Flow', 'Form Validation')"),
|
|
50
|
+
testDescription: z
|
|
51
|
+
.string()
|
|
52
|
+
.describe("Detailed description of what to test for the prompt (e.g., 'Test basic arithmetic operations, special functions, and edge cases') based on the the user prompt and/or the plan to verify"),
|
|
53
|
+
}),
|
|
54
|
+
execute: async ({ header, testDescription }) => {
|
|
55
|
+
const testRunId = crypto.randomUUID();
|
|
56
|
+
const displayHeader = header || "End-to-end testing";
|
|
57
|
+
logger.info(`[TestSubagent] Test description: ${testDescription}`);
|
|
58
|
+
// Phase 1: Generate test cases via LLM call (before subagent execution)
|
|
59
|
+
const testCaseSchema = z.object({
|
|
60
|
+
testCases: z
|
|
61
|
+
.array(z.object({
|
|
62
|
+
id: z.string().describe("Unique ID for this test case"),
|
|
63
|
+
name: z.string().describe("Short name for the test case"),
|
|
64
|
+
description: z
|
|
65
|
+
.string()
|
|
66
|
+
.describe("Brief description of what this test verifies"),
|
|
67
|
+
}))
|
|
68
|
+
.min(1)
|
|
69
|
+
.max(7)
|
|
70
|
+
.describe("1-7 test cases covering the key functionality to verify"),
|
|
71
|
+
});
|
|
72
|
+
let generatedTestCases = [];
|
|
73
|
+
try {
|
|
74
|
+
const { object: testCasesResult } = await generateObject({
|
|
75
|
+
model: services.llmProvider.modelForTask("classifyPrompt"),
|
|
76
|
+
schema: testCaseSchema,
|
|
77
|
+
prompt: `You are a QA expert. Generate 3-7 test cases to verify the following functionality.
|
|
78
|
+
|
|
79
|
+
Test Description: ${testDescription}
|
|
80
|
+
|
|
81
|
+
${clark.context.planContext?.plan ? `Plan Context:\n${clark.context.planContext.plan}` : ""}
|
|
82
|
+
|
|
83
|
+
Guidelines:
|
|
84
|
+
- Each test case should verify ONE specific piece of functionality
|
|
85
|
+
- Test cases should be feature-level, not click-level (e.g., "Login form submission" not "Click login button")
|
|
86
|
+
- Use unique IDs like "test-1", "test-2", etc.
|
|
87
|
+
- Keep names concise (max 50 chars)
|
|
88
|
+
- Cover both happy path and edge cases where relevant
|
|
89
|
+
|
|
90
|
+
Generate test cases that would be useful for verifying this functionality works correctly.`,
|
|
91
|
+
});
|
|
92
|
+
generatedTestCases = testCasesResult.testCases;
|
|
93
|
+
logger.info(`[TestSubagent] Generated ${generatedTestCases.length} test cases`);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
// If test case generation fails, continue without predefined cases
|
|
97
|
+
logger.warn(`[TestSubagent] Failed to generate test cases: ${error instanceof Error ? error.message : String(error)}`);
|
|
98
|
+
}
|
|
99
|
+
// Prepare test cases with initial status
|
|
100
|
+
const testCases = generatedTestCases.map((tc) => ({
|
|
101
|
+
...tc,
|
|
102
|
+
status: "not_started",
|
|
103
|
+
}));
|
|
104
|
+
// Store test run ID and test cases in context
|
|
105
|
+
clark.updateContext({
|
|
106
|
+
currentTestRunId: testRunId,
|
|
107
|
+
currentTestCases: testCases,
|
|
108
|
+
testCaseStatuses: new Map(testCases.map((tc) => [tc.id, "not_started"])),
|
|
109
|
+
});
|
|
110
|
+
// Send test_run_start message to UI with test cases
|
|
111
|
+
const sendUserMessage = sendUserMessageChannel(clark, services.chatSessionStore);
|
|
112
|
+
await sendUserMessage({
|
|
113
|
+
type: "test_run_start",
|
|
114
|
+
testRunId,
|
|
115
|
+
header: displayHeader,
|
|
116
|
+
testCases: testCases.length > 0 ? testCases : undefined,
|
|
117
|
+
role: "assistant",
|
|
118
|
+
content: "",
|
|
119
|
+
});
|
|
120
|
+
// Build test-specific system prompt with test cases
|
|
121
|
+
const testSystemPrompt = buildTestSubagentSystemPrompt({
|
|
122
|
+
testRunId,
|
|
123
|
+
header: displayHeader,
|
|
124
|
+
planContext: clark.context.planContext,
|
|
125
|
+
testCases,
|
|
126
|
+
});
|
|
127
|
+
// Get tools filtered for TEST subagent
|
|
128
|
+
const accessControl = clark.getAccessControl();
|
|
129
|
+
const testTools = await services.toolRegistry.getToolsRecord({
|
|
130
|
+
...accessControl,
|
|
131
|
+
subagent: SubagentType.TEST,
|
|
132
|
+
});
|
|
133
|
+
// Invoke the test subagent
|
|
134
|
+
try {
|
|
135
|
+
// Maximum steps for test subagent (matches judge default)
|
|
136
|
+
const maxSteps = 30;
|
|
137
|
+
const result = await clark.streamText(services, {
|
|
138
|
+
system: testSystemPrompt,
|
|
139
|
+
user: {
|
|
140
|
+
role: "user",
|
|
141
|
+
content: `Test the application. Focus on: ${testDescription}`,
|
|
142
|
+
},
|
|
143
|
+
tools: testTools,
|
|
144
|
+
context: {
|
|
145
|
+
// don't send over the full chat history to improve performance
|
|
146
|
+
messages: [],
|
|
147
|
+
},
|
|
148
|
+
maxSteps,
|
|
149
|
+
// Stop when endTestRun is called (like judge stops on submitFeedback)
|
|
150
|
+
stopWhen: ({ steps }) => {
|
|
151
|
+
const lastStep = steps[steps.length - 1];
|
|
152
|
+
const hasEndTestRun = lastStep?.toolCalls?.some((tc) => tc.toolName === "endTestRun");
|
|
153
|
+
return hasEndTestRun ?? false;
|
|
154
|
+
},
|
|
155
|
+
// Warn about remaining steps and force endTestRun on final step
|
|
156
|
+
prepareStep: (step) => {
|
|
157
|
+
const remainingSteps = maxSteps - step.stepNumber - 1;
|
|
158
|
+
const halfwayPoint = Math.floor(maxSteps / 2);
|
|
159
|
+
// Final step: restrict to endTestRun only
|
|
160
|
+
if (step.stepNumber === maxSteps - 1) {
|
|
161
|
+
const warningMessage = {
|
|
162
|
+
role: "user",
|
|
163
|
+
content: [
|
|
164
|
+
{
|
|
165
|
+
type: "text",
|
|
166
|
+
text: "**CRITICAL: This is your FINAL step. You MUST call `endTestRun` now. No other tools are available.**",
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
};
|
|
170
|
+
return {
|
|
171
|
+
...step,
|
|
172
|
+
messages: [...step.messages, warningMessage],
|
|
173
|
+
activeTools: ["endTestRun"],
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// Warn from halfway point onwards
|
|
177
|
+
else if (step.stepNumber >= halfwayPoint && remainingSteps > 0) {
|
|
178
|
+
const warningMessage = {
|
|
179
|
+
role: "user",
|
|
180
|
+
content: [
|
|
181
|
+
{
|
|
182
|
+
type: "text",
|
|
183
|
+
text: `**IMPORTANT: You have ${remainingSteps} step${remainingSteps === 1 ? "" : "s"} remaining. Wrap up testing and call \`endTestRun\` soon.**`,
|
|
184
|
+
},
|
|
185
|
+
],
|
|
186
|
+
};
|
|
187
|
+
return {
|
|
188
|
+
...step,
|
|
189
|
+
messages: [...step.messages, warningMessage],
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
return step;
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
let testSummary = null;
|
|
196
|
+
// Process stream chunks with test-specific handling
|
|
197
|
+
// - Text/reasoning is suppressed (not sent to UI)
|
|
198
|
+
// - browser_playwright_action results become test steps
|
|
199
|
+
// - endTestRun handles sending test_run_end message with reconciliation
|
|
200
|
+
for await (const chunk of result.fullStream) {
|
|
201
|
+
// Extract summary from endTestRun result for the return value
|
|
202
|
+
if (chunk.type === "tool-result" &&
|
|
203
|
+
"toolName" in chunk &&
|
|
204
|
+
chunk.toolName === "endTestRun") {
|
|
205
|
+
const output = chunk.output;
|
|
206
|
+
if (output?.success) {
|
|
207
|
+
testSummary = {
|
|
208
|
+
testStatus: output.testStatus,
|
|
209
|
+
summary: output.summary,
|
|
210
|
+
};
|
|
211
|
+
logger.info(`[TestSubagent] Test summary extracted - ${output.summary}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
await processTestStreamChunk(chunk, clark, services);
|
|
215
|
+
}
|
|
216
|
+
logger.info(`[TestSubagent] Test run completed: ${testRunId}`);
|
|
217
|
+
// Build the final result from testSummary, using defaults for missing values
|
|
218
|
+
const status = testSummary?.testStatus ?? "completed";
|
|
219
|
+
const summary = testSummary?.summary ?? "Testing completed without summary.";
|
|
220
|
+
// Note: test_run_end message is sent by endTestRun tool with reconciliation
|
|
221
|
+
// We need to send it here only if endTestRun wasn't called (shouldn't happen normally)
|
|
222
|
+
if (!testSummary) {
|
|
223
|
+
void sendUserMessage({
|
|
224
|
+
type: "test_run_end",
|
|
225
|
+
testRunId,
|
|
226
|
+
testStatus: "completed",
|
|
227
|
+
summary: "Testing completed.",
|
|
228
|
+
role: "assistant",
|
|
229
|
+
content: "",
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
success: true,
|
|
234
|
+
testRunId,
|
|
235
|
+
status,
|
|
236
|
+
summary,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
logger.error(`[TestSubagent] Test run failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
241
|
+
// Send test_run_end with failed status
|
|
242
|
+
await sendUserMessage({
|
|
243
|
+
type: "test_run_end",
|
|
244
|
+
testRunId,
|
|
245
|
+
testStatus: "failed",
|
|
246
|
+
role: "assistant",
|
|
247
|
+
content: "",
|
|
248
|
+
});
|
|
249
|
+
// Clear test run context
|
|
250
|
+
clark.updateContext({
|
|
251
|
+
currentTestRunId: undefined,
|
|
252
|
+
});
|
|
253
|
+
throw error;
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
});
|
|
258
|
+
//# sourceMappingURL=start-test-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-test-run.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools2/tools/start-test-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAO/E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CACtD,cAAc,EACd,CAAC,EACC,KAAK,EACL,QAAQ,GAIT,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,OAAO;QACL,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;CAoBlB;QACK,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,iBAAiB,EAAE,eAAe,CAAC,KAAK;QACxC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CACP,8FAA8F,CAC/F;YACH,eAAe,EAAE,CAAC;iBACf,MAAM,EAAE;iBACR,QAAQ,CACP,0LAA0L,CAC3L;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE;YAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YACtC,MAAM,aAAa,GAAG,MAAM,IAAI,oBAAoB,CAAC;YAErD,MAAM,CAAC,IAAI,CAAC,oCAAoC,eAAe,EAAE,CAAC,CAAC;YAEnE,wEAAwE;YACxE,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;gBAC9B,SAAS,EAAE,CAAC;qBACT,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;oBACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;oBACvD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;oBACzD,WAAW,EAAE,CAAC;yBACX,MAAM,EAAE;yBACR,QAAQ,CAAC,8CAA8C,CAAC;iBAC5D,CAAC,CACH;qBACA,GAAG,CAAC,CAAC,CAAC;qBACN,GAAG,CAAC,CAAC,CAAC;qBACN,QAAQ,CACP,yDAAyD,CAC1D;aACJ,CAAC,CAAC;YAEH,IAAI,kBAAkB,GAIjB,EAAE,CAAC;YAER,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,cAAc,CAAC;oBACvD,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,gBAAgB,CAAC;oBAC1D,MAAM,EAAE,cAAc;oBACtB,MAAM,EAAE;;oBAEA,eAAe;;EAEjC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;2FASA;iBAChF,CAAC,CAAC;gBAEH,kBAAkB,GAAG,eAAe,CAAC,SAAS,CAAC;gBAC/C,MAAM,CAAC,IAAI,CACT,4BAA4B,kBAAkB,CAAC,MAAM,aAAa,CACnE,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,mEAAmE;gBACnE,MAAM,CAAC,IAAI,CACT,iDAAiD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1G,CAAC;YACJ,CAAC;YAED,yCAAyC;YACzC,MAAM,SAAS,GAAmB,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAChE,GAAG,EAAE;gBACL,MAAM,EAAE,aAAsB;aAC/B,CAAC,CAAC,CAAC;YAEJ,8CAA8C;YAC9C,KAAK,CAAC,aAAa,CAAC;gBAClB,gBAAgB,EAAE,SAAS;gBAC3B,gBAAgB,EAAE,SAAS;gBAC3B,gBAAgB,EAAE,IAAI,GAAG,CAGvB,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;aACjD,CAAC,CAAC;YAEH,oDAAoD;YACpD,MAAM,eAAe,GAAG,sBAAsB,CAC5C,KAAK,EACL,QAAQ,CAAC,gBAAgB,CAC1B,CAAC;YACF,MAAM,eAAe,CAAC;gBACpB,IAAI,EAAE,gBAAgB;gBACtB,SAAS;gBACT,MAAM,EAAE,aAAa;gBACrB,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gBACvD,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,EAAE;aACZ,CAAC,CAAC;YAEH,oDAAoD;YACpD,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;gBACrD,SAAS;gBACT,MAAM,EAAE,aAAa;gBACrB,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW;gBACtC,SAAS;aACV,CAAC,CAAC;YAEH,uCAAuC;YACvC,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAE/C,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC;gBAC3D,GAAG,aAAa;gBAChB,QAAQ,EAAE,YAAY,CAAC,IAAI;aAC5B,CAAC,CAAC;YAEH,2BAA2B;YAC3B,IAAI,CAAC;gBACH,0DAA0D;gBAC1D,MAAM,QAAQ,GAAG,EAAE,CAAC;gBAEpB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE;oBAC9C,MAAM,EAAE,gBAAgB;oBACxB,IAAI,EAAE;wBACJ,IAAI,EAAE,MAAe;wBACrB,OAAO,EAAE,mCAAmC,eAAe,EAAE;qBAC9D;oBACD,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE;wBACP,+DAA+D;wBAC/D,QAAQ,EAAE,EAAE;qBACb;oBACD,QAAQ;oBACR,sEAAsE;oBACtE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;wBACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACzC,MAAM,aAAa,GAAG,QAAQ,EAAE,SAAS,EAAE,IAAI,CAC7C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,YAAY,CACrC,CAAC;wBACF,OAAO,aAAa,IAAI,KAAK,CAAC;oBAChC,CAAC;oBACD,gEAAgE;oBAChE,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE;wBACpB,MAAM,cAAc,GAAG,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;wBACtD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;wBAE9C,0CAA0C;wBAC1C,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,GAAG,CAAC,EAAE,CAAC;4BACrC,MAAM,cAAc,GAAG;gCACrB,IAAI,EAAE,MAAe;gCACrB,OAAO,EAAE;oCACP;wCACE,IAAI,EAAE,MAAe;wCACrB,IAAI,EAAE,sGAAsG;qCAC7G;iCACF;6BACF,CAAC;4BACF,OAAO;gCACL,GAAG,IAAI;gCACP,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;gCAC5C,WAAW,EAAE,CAAC,YAAY,CAAC;6BAC5B,CAAC;wBACJ,CAAC;wBACD,kCAAkC;6BAC7B,IAAI,IAAI,CAAC,UAAU,IAAI,YAAY,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;4BAC/D,MAAM,cAAc,GAAG;gCACrB,IAAI,EAAE,MAAe;gCACrB,OAAO,EAAE;oCACP;wCACE,IAAI,EAAE,MAAe;wCACrB,IAAI,EAAE,yBAAyB,cAAc,QAAQ,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,6DAA6D;qCAClJ;iCACF;6BACF,CAAC;4BACF,OAAO;gCACL,GAAG,IAAI;gCACP,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;6BAC7C,CAAC;wBACJ,CAAC;wBAED,OAAO,IAAI,CAAC;oBACd,CAAC;iBACF,CAAC,CAAC;gBAEH,IAAI,WAAW,GAGJ,IAAI,CAAC;gBAEhB,oDAAoD;gBACpD,kDAAkD;gBAClD,wDAAwD;gBACxD,wEAAwE;gBACxE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBAC5C,8DAA8D;oBAC9D,IACE,KAAK,CAAC,IAAI,KAAK,aAAa;wBAC5B,UAAU,IAAI,KAAK;wBACnB,KAAK,CAAC,QAAQ,KAAK,YAAY,EAC/B,CAAC;wBACD,MAAM,MAAM,GAAI,KAAa,CAAC,MAAM,CAAC;wBACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;4BACpB,WAAW,GAAG;gCACZ,UAAU,EAAE,MAAM,CAAC,UAAU;gCAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;6BACxB,CAAC;4BACF,MAAM,CAAC,IAAI,CACT,2CAA2C,MAAM,CAAC,OAAO,EAAE,CAC5D,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAED,MAAM,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACvD,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,sCAAsC,SAAS,EAAE,CAAC,CAAC;gBAE/D,6EAA6E;gBAC7E,MAAM,MAAM,GAAG,WAAW,EAAE,UAAU,IAAI,WAAW,CAAC;gBACtD,MAAM,OAAO,GACX,WAAW,EAAE,OAAO,IAAI,oCAAoC,CAAC;gBAE/D,4EAA4E;gBAC5E,uFAAuF;gBACvF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,KAAK,eAAe,CAAC;wBACnB,IAAI,EAAE,cAAc;wBACpB,SAAS;wBACT,UAAU,EAAE,WAAW;wBACvB,OAAO,EAAE,oBAAoB;wBAC7B,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,EAAE;qBACZ,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,SAAS;oBACT,MAAM;oBACN,OAAO;iBACR,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CACV,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5F,CAAC;gBAEF,uCAAuC;gBACvC,MAAM,eAAe,CAAC;oBACpB,IAAI,EAAE,cAAc;oBACpB,SAAS;oBACT,UAAU,EAAE,QAAQ;oBACpB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;gBAEH,yBAAyB;gBACzB,KAAK,CAAC,aAAa,CAAC;oBAClB,gBAAgB,EAAE,SAAS;iBAC5B,CAAC,CAAC;gBAEH,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Clark, ClarkStateHandlerParams } from "../../../state-machine/clark-fsm.js";
|
|
2
|
+
/**
|
|
3
|
+
* updateTestCaseStatus - Updates the status of a specific test case during a test run.
|
|
4
|
+
*
|
|
5
|
+
* This tool:
|
|
6
|
+
* 1. Validates that the test case ID exists
|
|
7
|
+
* 2. Updates the status in clark context (server-side tracking)
|
|
8
|
+
* 3. Sends test_case_update message to UI
|
|
9
|
+
*
|
|
10
|
+
* Only accessible to the TEST subagent (ToolCategory.TEST).
|
|
11
|
+
*/
|
|
12
|
+
export declare const updateTestCaseStatusToolFactory: import("../types.js").ToolFactory<{
|
|
13
|
+
clark: Clark;
|
|
14
|
+
services: ClarkStateHandlerParams;
|
|
15
|
+
}, import("../types.js").Tool<{
|
|
16
|
+
status: "failed" | "running" | "passed";
|
|
17
|
+
testCaseId: string;
|
|
18
|
+
}, {
|
|
19
|
+
success: boolean;
|
|
20
|
+
error: string;
|
|
21
|
+
testCaseId?: undefined;
|
|
22
|
+
status?: undefined;
|
|
23
|
+
} | {
|
|
24
|
+
success: boolean;
|
|
25
|
+
testCaseId: string;
|
|
26
|
+
status: "failed" | "running" | "passed";
|
|
27
|
+
error?: undefined;
|
|
28
|
+
}>>;
|
|
29
|
+
//# sourceMappingURL=update-test-case-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-test-case-status.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools2/tools/update-test-case-status.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,KAAK,EACL,uBAAuB,EACxB,MAAM,qCAAqC,CAAC;AAE7C;;;;;;;;;GASG;AACH,eAAO,MAAM,+BAA+B;WAMjC,KAAK;cACF,uBAAuB;;;;;;;;;;;;;;GA4FpC,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getLogger } from "../../../../util/logger.js";
|
|
3
|
+
import { sendUserMessageChannel } from "../../../state-machine/helpers/peer.js";
|
|
4
|
+
import { createToolFactory, ToolCategory, PermissionLevel } from "../types.js";
|
|
5
|
+
/**
|
|
6
|
+
* updateTestCaseStatus - Updates the status of a specific test case during a test run.
|
|
7
|
+
*
|
|
8
|
+
* This tool:
|
|
9
|
+
* 1. Validates that the test case ID exists
|
|
10
|
+
* 2. Updates the status in clark context (server-side tracking)
|
|
11
|
+
* 3. Sends test_case_update message to UI
|
|
12
|
+
*
|
|
13
|
+
* Only accessible to the TEST subagent (ToolCategory.TEST).
|
|
14
|
+
*/
|
|
15
|
+
export const updateTestCaseStatusToolFactory = createToolFactory("updateTestCaseStatus", ({ clark, services, }) => {
|
|
16
|
+
const logger = getLogger();
|
|
17
|
+
return {
|
|
18
|
+
description: `
|
|
19
|
+
Update the status of a specific test case during the test run.
|
|
20
|
+
|
|
21
|
+
**IMPORTANT**: You MUST call this tool:
|
|
22
|
+
1. BEFORE starting each test case - set status to "running"
|
|
23
|
+
2. AFTER completing each test case - set status to "passed" or "failed"
|
|
24
|
+
|
|
25
|
+
Example workflow for test case "test-1":
|
|
26
|
+
1. updateTestCaseStatus({ testCaseId: "test-1", status: "running" })
|
|
27
|
+
2. ... perform browser actions for the test ...
|
|
28
|
+
3. updateTestCaseStatus({ testCaseId: "test-1", status: "passed" })
|
|
29
|
+
|
|
30
|
+
This ensures the UI shows real-time progress of which tests are running and their results.
|
|
31
|
+
`,
|
|
32
|
+
category: ToolCategory.TEST,
|
|
33
|
+
defaultPermission: PermissionLevel.ALLOW,
|
|
34
|
+
readOnly: true,
|
|
35
|
+
inputSchema: z.object({
|
|
36
|
+
testCaseId: z
|
|
37
|
+
.string()
|
|
38
|
+
.describe("ID of the test case to update (e.g., 'test-1')"),
|
|
39
|
+
status: z
|
|
40
|
+
.enum(["running", "passed", "failed"])
|
|
41
|
+
.describe("New status for the test case: 'running' when starting, 'passed' or 'failed' when complete"),
|
|
42
|
+
}),
|
|
43
|
+
execute: async ({ testCaseId, status }) => {
|
|
44
|
+
const testRunId = clark.context.currentTestRunId;
|
|
45
|
+
const testCases = clark.context.currentTestCases;
|
|
46
|
+
if (!testRunId) {
|
|
47
|
+
logger.warn(`[TestSubagent] No active test run for updateTestCaseStatus`);
|
|
48
|
+
return {
|
|
49
|
+
success: false,
|
|
50
|
+
error: "No active test run",
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// Validate that the test case exists
|
|
54
|
+
if (testCases && testCases.length > 0) {
|
|
55
|
+
const testCaseExists = testCases.some((tc) => tc.id === testCaseId);
|
|
56
|
+
if (!testCaseExists) {
|
|
57
|
+
logger.warn(`[TestSubagent] Test case ID '${testCaseId}' not found in current test cases`);
|
|
58
|
+
// Don't fail - allow the update anyway in case of LLM inconsistency
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Update status in context for server-side tracking
|
|
62
|
+
const testCaseStatuses = clark.context.testCaseStatuses ??
|
|
63
|
+
new Map();
|
|
64
|
+
testCaseStatuses.set(testCaseId, status);
|
|
65
|
+
clark.updateContext({
|
|
66
|
+
testCaseStatuses,
|
|
67
|
+
});
|
|
68
|
+
// Send test_case_update message to UI
|
|
69
|
+
const sendUserMessage = sendUserMessageChannel(clark, services.chatSessionStore);
|
|
70
|
+
await sendUserMessage({
|
|
71
|
+
type: "test_case_update",
|
|
72
|
+
testRunId,
|
|
73
|
+
testCaseId,
|
|
74
|
+
testCaseStatus: status,
|
|
75
|
+
role: "assistant",
|
|
76
|
+
content: "",
|
|
77
|
+
});
|
|
78
|
+
logger.info(`[TestSubagent] Test case '${testCaseId}' status updated to '${status}'`);
|
|
79
|
+
return {
|
|
80
|
+
success: true,
|
|
81
|
+
testCaseId,
|
|
82
|
+
status,
|
|
83
|
+
};
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=update-test-case-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-test-case-status.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools2/tools/update-test-case-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAM/E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,iBAAiB,CAC9D,sBAAsB,EACtB,CAAC,EACC,KAAK,EACL,QAAQ,GAIT,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,OAAO;QACL,WAAW,EAAE;;;;;;;;;;;;;CAalB;QACK,QAAQ,EAAE,YAAY,CAAC,IAAI;QAC3B,iBAAiB,EAAE,eAAe,CAAC,KAAK;QACxC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,CAAC,gDAAgD,CAAC;YAC7D,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;iBACrC,QAAQ,CACP,2FAA2F,CAC5F;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE;YACxC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;YACjD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAEjD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CACT,4DAA4D,CAC7D,CAAC;gBACF,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,oBAAoB;iBAC5B,CAAC;YACJ,CAAC;YAED,qCAAqC;YACrC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;gBACpE,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,MAAM,CAAC,IAAI,CACT,gCAAgC,UAAU,mCAAmC,CAC9E,CAAC;oBACF,oEAAoE;gBACtE,CAAC;YACH,CAAC;YAED,oDAAoD;YACpD,MAAM,gBAAgB,GACpB,KAAK,CAAC,OAAO,CAAC,gBAAgB;gBAC9B,IAAI,GAAG,EAA2D,CAAC;YACrE,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACzC,KAAK,CAAC,aAAa,CAAC;gBAClB,gBAAgB;aACjB,CAAC,CAAC;YAEH,sCAAsC;YACtC,MAAM,eAAe,GAAG,sBAAsB,CAC5C,KAAK,EACL,QAAQ,CAAC,gBAAgB,CAC1B,CAAC;YACF,MAAM,eAAe,CAAC;gBACpB,IAAI,EAAE,kBAAkB;gBACxB,SAAS;gBACT,UAAU;gBACV,cAAc,EAAE,MAAM;gBACtB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,EAAE;aACZ,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CACT,6BAA6B,UAAU,wBAAwB,MAAM,GAAG,CACzE,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,UAAU;gBACV,MAAM;aACP,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SubagentType } from "../subagents/types.js";
|
|
2
|
-
import type { AiMode, AiEntityType, PlanContext, PromptContextEntity, PromptContextIntegration, AiPermissionType, AiToolPermission } from "@superblocksteam/library-shared/types";
|
|
2
|
+
import type { AiMode, AiEntityType, PlanContext, PromptContextEntity, PromptContextIntegration, AiPermissionType, AiToolPermission, AiToolExecutionErrorCode } from "@superblocksteam/library-shared/types";
|
|
3
3
|
import type { ToolCallOptions } from "ai";
|
|
4
4
|
import type z from "zod";
|
|
5
5
|
/**
|
|
@@ -15,7 +15,8 @@ export declare enum ToolCategory {
|
|
|
15
15
|
METADATA = "metadata",
|
|
16
16
|
DATA = "data",
|
|
17
17
|
PLAN = "plan",
|
|
18
|
-
TEST = "test"
|
|
18
|
+
TEST = "test",
|
|
19
|
+
DEBUG = "debug"
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
22
|
* Entity reference extracted from tool input.
|
|
@@ -147,20 +148,6 @@ export declare enum PermissionLevel {
|
|
|
147
148
|
/** Block execution completely */
|
|
148
149
|
BLOCK = "block"
|
|
149
150
|
}
|
|
150
|
-
/**
|
|
151
|
-
* User response to a tool permission prompt.
|
|
152
|
-
*
|
|
153
|
-
* Controls both execution and whether the permission should be stored
|
|
154
|
-
* in the entity permission store for future use.
|
|
155
|
-
*/
|
|
156
|
-
export declare enum ToolPermissionResponse {
|
|
157
|
-
/** Execute the tool once, but don't store permission (user will be prompted again next time) */
|
|
158
|
-
ALLOW = "allow",
|
|
159
|
-
/** Execute the tool AND store permission in the entity store (never prompt again for this entity) */
|
|
160
|
-
ALWAYS_ALLOW = "always_allow",
|
|
161
|
-
/** Block execution completely */
|
|
162
|
-
DENY = "deny"
|
|
163
|
-
}
|
|
164
151
|
/**
|
|
165
152
|
* Factory for creating tool instances.
|
|
166
153
|
*
|
|
@@ -255,13 +242,6 @@ export interface AccessControlContext {
|
|
|
255
242
|
* Rules are evaluated in order, most restrictive wins.
|
|
256
243
|
*/
|
|
257
244
|
export type AccessControlRule = (tool: Tool, context: AccessControlContext, input?: any) => PermissionLevel | Promise<PermissionLevel>;
|
|
258
|
-
/**
|
|
259
|
-
* Result from a prompt handler, including the response and which permissions to always allow.
|
|
260
|
-
*/
|
|
261
|
-
export interface PromptHandlerResult {
|
|
262
|
-
response: ToolPermissionResponse;
|
|
263
|
-
alwaysAllowPermissions?: AiToolPermission[];
|
|
264
|
-
}
|
|
265
245
|
/**
|
|
266
246
|
* Handler for prompting user for confirmation.
|
|
267
247
|
*
|
|
@@ -279,7 +259,7 @@ export interface PromptHandlerResult {
|
|
|
279
259
|
* - ALWAYS_ALLOW: Execute and store permission for future use (with alwaysAllowPermissions indicating which specific permissions to store)
|
|
280
260
|
* - DENY: Block execution
|
|
281
261
|
*/
|
|
282
|
-
export type PromptHandler = (tool: Tool, input: any, permissions: AiToolPermission[], context: AccessControlContext, options?: ToolCallOptions) => Promise<
|
|
262
|
+
export type PromptHandler = (tool: Tool, input: any, permissions: AiToolPermission[], context: AccessControlContext, options?: ToolCallOptions) => Promise<void>;
|
|
283
263
|
/**
|
|
284
264
|
* Middleware function that can transform tools.
|
|
285
265
|
* Receives the tool name and tool instance, returns transformed tool.
|
|
@@ -302,6 +282,7 @@ export interface ToolExecutionErrorOptions {
|
|
|
302
282
|
input: any;
|
|
303
283
|
context: AccessControlContext;
|
|
304
284
|
cause?: unknown;
|
|
285
|
+
code?: AiToolExecutionErrorCode;
|
|
305
286
|
}
|
|
306
287
|
export declare class ToolExecutionError extends Error {
|
|
307
288
|
readonly name: string;
|
|
@@ -310,6 +291,7 @@ export declare class ToolExecutionError extends Error {
|
|
|
310
291
|
constructor(message: string, options?: ToolExecutionErrorOptions);
|
|
311
292
|
constructor(options?: ToolExecutionErrorOptions);
|
|
312
293
|
private getMessage;
|
|
294
|
+
get code(): AiToolExecutionErrorCode | undefined;
|
|
313
295
|
get toolName(): string | undefined;
|
|
314
296
|
get input(): any;
|
|
315
297
|
get message(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools2/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools2/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ export var ToolCategory;
|
|
|
14
14
|
ToolCategory["DATA"] = "data";
|
|
15
15
|
ToolCategory["PLAN"] = "plan";
|
|
16
16
|
ToolCategory["TEST"] = "test";
|
|
17
|
+
ToolCategory["DEBUG"] = "debug";
|
|
17
18
|
})(ToolCategory || (ToolCategory = {}));
|
|
18
19
|
/**
|
|
19
20
|
* Permission levels for tool execution.
|
|
@@ -27,21 +28,6 @@ export var PermissionLevel;
|
|
|
27
28
|
/** Block execution completely */
|
|
28
29
|
PermissionLevel["BLOCK"] = "block";
|
|
29
30
|
})(PermissionLevel || (PermissionLevel = {}));
|
|
30
|
-
/**
|
|
31
|
-
* User response to a tool permission prompt.
|
|
32
|
-
*
|
|
33
|
-
* Controls both execution and whether the permission should be stored
|
|
34
|
-
* in the entity permission store for future use.
|
|
35
|
-
*/
|
|
36
|
-
export var ToolPermissionResponse;
|
|
37
|
-
(function (ToolPermissionResponse) {
|
|
38
|
-
/** Execute the tool once, but don't store permission (user will be prompted again next time) */
|
|
39
|
-
ToolPermissionResponse["ALLOW"] = "allow";
|
|
40
|
-
/** Execute the tool AND store permission in the entity store (never prompt again for this entity) */
|
|
41
|
-
ToolPermissionResponse["ALWAYS_ALLOW"] = "always_allow";
|
|
42
|
-
/** Block execution completely */
|
|
43
|
-
ToolPermissionResponse["DENY"] = "deny";
|
|
44
|
-
})(ToolPermissionResponse || (ToolPermissionResponse = {}));
|
|
45
31
|
/**
|
|
46
32
|
* Helper function to create a tool factory without name duplication.
|
|
47
33
|
*
|
|
@@ -121,6 +107,9 @@ export class ToolExecutionError extends Error {
|
|
|
121
107
|
}
|
|
122
108
|
return message;
|
|
123
109
|
}
|
|
110
|
+
get code() {
|
|
111
|
+
return this.options?.code;
|
|
112
|
+
}
|
|
124
113
|
get toolName() {
|
|
125
114
|
return this.options?.toolName;
|
|
126
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools2/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools2/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,4 +3,14 @@ import type { TextStreamPart, ToolSet } from "ai";
|
|
|
3
3
|
export declare const getFilesChangedInDraftState: (services: ClarkStateHandlerParams) => Promise<string[]>;
|
|
4
4
|
export declare const normalizeToBlockStatement: (value: any) => string;
|
|
5
5
|
export declare const processStreamChunk: (chunk: TextStreamPart<ToolSet>, clark: Clark, services: ClarkStateHandlerParams, group?: string) => Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Process stream chunks specifically for the test subagent.
|
|
8
|
+
*
|
|
9
|
+
* Key differences from processStreamChunk:
|
|
10
|
+
* - Text/reasoning messages are suppressed (not sent to UI)
|
|
11
|
+
* - browser_playwright_action results are processed as test steps
|
|
12
|
+
* - endTestRun is processed normally
|
|
13
|
+
* - Other tool calls are logged but not displayed prominently
|
|
14
|
+
*/
|
|
15
|
+
export declare const processTestStreamChunk: (chunk: TextStreamPart<ToolSet>, clark: Clark, services: ClarkStateHandlerParams) => Promise<void>;
|
|
6
16
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/ai-service/agent/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/ai-service/agent/utils.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,KAAK,EACL,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AAKvC,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAElD,eAAO,MAAM,2BAA2B,GACtC,UAAU,uBAAuB,sBAIlC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,OAAO,GAAG,KAAG,MA0FtD,CAAC;AAiBF,eAAO,MAAM,kBAAkB,GAC7B,OAAO,cAAc,CAAC,OAAO,CAAC,EAC9B,OAAO,KAAK,EACZ,UAAU,uBAAuB,EACjC,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAiJd,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,cAAc,CAAC,OAAO,CAAC,EAC9B,OAAO,KAAK,EACZ,UAAU,uBAAuB,KAChC,OAAO,CAAC,IAAI,CAkId,CAAC"}
|