@desplega.ai/qa-use 2.0.1
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/LICENSE +21 -0
- package/README.md +1003 -0
- package/bin/qa-use.js +7 -0
- package/dist/lib/api/index.d.ts +296 -0
- package/dist/lib/api/index.d.ts.map +1 -0
- package/dist/lib/api/index.js +564 -0
- package/dist/lib/api/index.js.map +1 -0
- package/dist/lib/api/sse.d.ts +33 -0
- package/dist/lib/api/sse.d.ts.map +1 -0
- package/dist/lib/api/sse.js +97 -0
- package/dist/lib/api/sse.js.map +1 -0
- package/dist/lib/browser/index.d.ts +28 -0
- package/dist/lib/browser/index.d.ts.map +1 -0
- package/dist/lib/browser/index.js +145 -0
- package/dist/lib/browser/index.js.map +1 -0
- package/dist/lib/env/index.d.ts +41 -0
- package/dist/lib/env/index.d.ts.map +1 -0
- package/dist/lib/env/index.js +125 -0
- package/dist/lib/env/index.js.map +1 -0
- package/dist/lib/tunnel/index.d.ts +38 -0
- package/dist/lib/tunnel/index.d.ts.map +1 -0
- package/dist/lib/tunnel/index.js +154 -0
- package/dist/lib/tunnel/index.js.map +1 -0
- package/dist/package.json +100 -0
- package/dist/src/cli/commands/info.d.ts +6 -0
- package/dist/src/cli/commands/info.d.ts.map +1 -0
- package/dist/src/cli/commands/info.js +32 -0
- package/dist/src/cli/commands/info.js.map +1 -0
- package/dist/src/cli/commands/mcp.d.ts +6 -0
- package/dist/src/cli/commands/mcp.d.ts.map +1 -0
- package/dist/src/cli/commands/mcp.js +45 -0
- package/dist/src/cli/commands/mcp.js.map +1 -0
- package/dist/src/cli/commands/setup.d.ts +6 -0
- package/dist/src/cli/commands/setup.d.ts.map +1 -0
- package/dist/src/cli/commands/setup.js +59 -0
- package/dist/src/cli/commands/setup.js.map +1 -0
- package/dist/src/cli/commands/test/index.d.ts +6 -0
- package/dist/src/cli/commands/test/index.d.ts.map +1 -0
- package/dist/src/cli/commands/test/index.js +15 -0
- package/dist/src/cli/commands/test/index.js.map +1 -0
- package/dist/src/cli/commands/test/init.d.ts +6 -0
- package/dist/src/cli/commands/test/init.d.ts.map +1 -0
- package/dist/src/cli/commands/test/init.js +64 -0
- package/dist/src/cli/commands/test/init.js.map +1 -0
- package/dist/src/cli/commands/test/list.d.ts +6 -0
- package/dist/src/cli/commands/test/list.d.ts.map +1 -0
- package/dist/src/cli/commands/test/list.js +70 -0
- package/dist/src/cli/commands/test/list.js.map +1 -0
- package/dist/src/cli/commands/test/run.d.ts +6 -0
- package/dist/src/cli/commands/test/run.d.ts.map +1 -0
- package/dist/src/cli/commands/test/run.js +95 -0
- package/dist/src/cli/commands/test/run.js.map +1 -0
- package/dist/src/cli/commands/test/validate.d.ts +6 -0
- package/dist/src/cli/commands/test/validate.d.ts.map +1 -0
- package/dist/src/cli/commands/test/validate.js +70 -0
- package/dist/src/cli/commands/test/validate.js.map +1 -0
- package/dist/src/cli/index.d.ts +6 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +21 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/lib/config.d.ts +36 -0
- package/dist/src/cli/lib/config.d.ts.map +1 -0
- package/dist/src/cli/lib/config.js +89 -0
- package/dist/src/cli/lib/config.js.map +1 -0
- package/dist/src/cli/lib/loader.d.ts +49 -0
- package/dist/src/cli/lib/loader.d.ts.map +1 -0
- package/dist/src/cli/lib/loader.js +122 -0
- package/dist/src/cli/lib/loader.js.map +1 -0
- package/dist/src/cli/lib/output.d.ts +53 -0
- package/dist/src/cli/lib/output.d.ts.map +1 -0
- package/dist/src/cli/lib/output.js +133 -0
- package/dist/src/cli/lib/output.js.map +1 -0
- package/dist/src/cli/lib/runner.d.ts +23 -0
- package/dist/src/cli/lib/runner.d.ts.map +1 -0
- package/dist/src/cli/lib/runner.js +40 -0
- package/dist/src/cli/lib/runner.js.map +1 -0
- package/dist/src/http-server.d.ts +14 -0
- package/dist/src/http-server.d.ts.map +1 -0
- package/dist/src/http-server.js +145 -0
- package/dist/src/http-server.js.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +21 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/server.d.ts +58 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/server.js +2376 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/tunnel-mode.d.ts +13 -0
- package/dist/src/tunnel-mode.d.ts.map +1 -0
- package/dist/src/tunnel-mode.js +159 -0
- package/dist/src/tunnel-mode.js.map +1 -0
- package/dist/src/types/test-definition.d.ts +320 -0
- package/dist/src/types/test-definition.d.ts.map +1 -0
- package/dist/src/types/test-definition.js +11 -0
- package/dist/src/types/test-definition.js.map +1 -0
- package/dist/src/types.d.ts +209 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +34 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/package.d.ts +12 -0
- package/dist/src/utils/package.d.ts.map +1 -0
- package/dist/src/utils/package.js +36 -0
- package/dist/src/utils/package.js.map +1 -0
- package/dist/src/utils/summary.d.ts +45 -0
- package/dist/src/utils/summary.d.ts.map +1 -0
- package/dist/src/utils/summary.js +198 -0
- package/dist/src/utils/summary.js.map +1 -0
- package/lib/api/index.ts +977 -0
- package/lib/api/sse.ts +112 -0
- package/lib/browser/index.ts +181 -0
- package/lib/env/index.ts +156 -0
- package/lib/tunnel/index.test.ts +344 -0
- package/lib/tunnel/index.ts +197 -0
- package/lib/tunnel/integration.test.ts +98 -0
- package/package.json +100 -0
- package/server.json +16 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-generated TypeScript types for Test CLI definitions
|
|
3
|
+
*
|
|
4
|
+
* DO NOT EDIT MANUALLY - Generated from API schema
|
|
5
|
+
* Run 'bun generate:types' to regenerate
|
|
6
|
+
*
|
|
7
|
+
* Source: https://api.desplega.ai/vibe-qa/cli/schema
|
|
8
|
+
* Generated: 2026-01-21T14:07:51.069Z
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=test-definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-definition.js","sourceRoot":"","sources":["../../../src/types/test-definition.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
export declare enum DBStatus {
|
|
2
|
+
ACTIVE = "active",
|
|
3
|
+
DELETED = "deleted"
|
|
4
|
+
}
|
|
5
|
+
export interface AuditBase {
|
|
6
|
+
organization_id?: string;
|
|
7
|
+
created_at: string;
|
|
8
|
+
created_by: string;
|
|
9
|
+
updated_at?: string;
|
|
10
|
+
updated_by?: string;
|
|
11
|
+
deleted_at?: string;
|
|
12
|
+
deleted_by?: string;
|
|
13
|
+
status: DBStatus;
|
|
14
|
+
}
|
|
15
|
+
export interface Block {
|
|
16
|
+
id: number;
|
|
17
|
+
name: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
end_goal?: string;
|
|
20
|
+
group?: string;
|
|
21
|
+
is_group_check?: boolean;
|
|
22
|
+
should_skip?: boolean;
|
|
23
|
+
should_fail?: boolean;
|
|
24
|
+
set_variable_name?: string;
|
|
25
|
+
use_variable_name?: string;
|
|
26
|
+
is_async: boolean;
|
|
27
|
+
code: string;
|
|
28
|
+
locator: unknown;
|
|
29
|
+
action?: unknown;
|
|
30
|
+
fixed: boolean;
|
|
31
|
+
skipped: boolean;
|
|
32
|
+
is_flaky: boolean;
|
|
33
|
+
should_fix_with_ai: boolean;
|
|
34
|
+
should_try_deterministic: boolean;
|
|
35
|
+
logs?: string[];
|
|
36
|
+
last_error?: string;
|
|
37
|
+
reasoning?: string;
|
|
38
|
+
confidence?: ConfidenceLevel;
|
|
39
|
+
confidence_reasoning?: string;
|
|
40
|
+
original_task?: string;
|
|
41
|
+
aaa_phase?: 'arrange' | 'act' | 'assert';
|
|
42
|
+
compute_semantic_diff?: boolean;
|
|
43
|
+
pre_screenshot_path?: string;
|
|
44
|
+
post_screenshot_path?: string;
|
|
45
|
+
}
|
|
46
|
+
export type Prio = 'low' | 'medium' | 'high' | 'urgent';
|
|
47
|
+
export type ConfidenceLevel = 'low' | 'medium' | 'high';
|
|
48
|
+
export type Ref = string;
|
|
49
|
+
export type AnyDict = Record<string, any>;
|
|
50
|
+
export interface BaseIntent {
|
|
51
|
+
reasoning: string;
|
|
52
|
+
tasks_pending: boolean;
|
|
53
|
+
confidence: ConfidenceLevel;
|
|
54
|
+
}
|
|
55
|
+
export interface DoneIntent extends BaseIntent {
|
|
56
|
+
status: 'success' | 'failure';
|
|
57
|
+
message: string;
|
|
58
|
+
}
|
|
59
|
+
export type IssueType = 'bug' | 'usability' | 'performance' | 'security' | 'security_vulnerability' | 'observation' | 'other';
|
|
60
|
+
export type Severity = 'low' | 'medium' | 'high' | 'critical' | 'minor' | 'major' | 'blocker';
|
|
61
|
+
export interface IssueReport {
|
|
62
|
+
title: string;
|
|
63
|
+
description: string;
|
|
64
|
+
issue_type?: IssueType;
|
|
65
|
+
severity?: Severity;
|
|
66
|
+
url?: string | null;
|
|
67
|
+
help?: string | null;
|
|
68
|
+
recommendations?: string[] | null;
|
|
69
|
+
tags?: string[];
|
|
70
|
+
}
|
|
71
|
+
export interface TestCreatorDoneIntent extends DoneIntent {
|
|
72
|
+
explanation: string;
|
|
73
|
+
issues: IssueReport[];
|
|
74
|
+
success_criteria: string;
|
|
75
|
+
is_positive: boolean;
|
|
76
|
+
}
|
|
77
|
+
export interface NextTaskIntent extends BaseIntent {
|
|
78
|
+
next_task: string;
|
|
79
|
+
}
|
|
80
|
+
export interface UserInputIntent extends BaseIntent {
|
|
81
|
+
question: string;
|
|
82
|
+
priority: Prio;
|
|
83
|
+
}
|
|
84
|
+
export interface UserInputResponse {
|
|
85
|
+
response: string;
|
|
86
|
+
}
|
|
87
|
+
export interface ClarificationIntent extends BaseIntent {
|
|
88
|
+
refs: Ref[];
|
|
89
|
+
highlighted_refs: Ref[];
|
|
90
|
+
type: 'screenshot' | 'expand_text';
|
|
91
|
+
}
|
|
92
|
+
export interface ActionIntent extends BaseIntent {
|
|
93
|
+
refs: Ref[];
|
|
94
|
+
type: 'click' | 'click_download' | 'type' | 'fill' | 'wait' | 'press' | 'goto' | 'scroll' | 'hover' | 'select' | 'check' | 'uncheck';
|
|
95
|
+
args?: number | string | AnyDict | null;
|
|
96
|
+
}
|
|
97
|
+
export type GeneralStatus = 'pending' | 'in_progress' | 'completed' | 'failed';
|
|
98
|
+
export interface General {
|
|
99
|
+
started_at?: string;
|
|
100
|
+
start_url?: string;
|
|
101
|
+
ended_at?: string;
|
|
102
|
+
end_url?: string;
|
|
103
|
+
elapsed_ms?: number;
|
|
104
|
+
status: GeneralStatus;
|
|
105
|
+
error?: string;
|
|
106
|
+
}
|
|
107
|
+
export interface Intent<TDone extends DoneIntent = DoneIntent> extends General {
|
|
108
|
+
intent: ActionIntent | ClarificationIntent | NextTaskIntent | UserInputIntent | TDone;
|
|
109
|
+
}
|
|
110
|
+
export declare const isDoneIntent: <TDone extends DoneIntent = DoneIntent>(intent: Intent<TDone>["intent"]) => intent is TDone;
|
|
111
|
+
export declare const isTestCreatorDoneIntent: (intent: DoneIntent) => intent is TestCreatorDoneIntent;
|
|
112
|
+
export declare const isUserInputIntent: <TDone extends DoneIntent = DoneIntent>(intent: Intent<TDone>["intent"]) => intent is UserInputIntent;
|
|
113
|
+
export declare const isNextTaskIntent: <TDone extends DoneIntent = DoneIntent>(intent: Intent<TDone>["intent"]) => intent is NextTaskIntent;
|
|
114
|
+
export declare const isClarificationIntent: <TDone extends DoneIntent = DoneIntent>(intent: Intent<TDone>["intent"]) => intent is ClarificationIntent;
|
|
115
|
+
export declare const isActionIntent: <TDone extends DoneIntent = DoneIntent>(intent: Intent<TDone>["intent"]) => intent is ActionIntent;
|
|
116
|
+
export interface ExpandedRef {
|
|
117
|
+
ref: string;
|
|
118
|
+
description?: string;
|
|
119
|
+
text: string;
|
|
120
|
+
}
|
|
121
|
+
export interface HistoryItem<TDone extends DoneIntent = DoneIntent> extends General {
|
|
122
|
+
id: string;
|
|
123
|
+
task: string;
|
|
124
|
+
task_added_at?: string;
|
|
125
|
+
intents: Intent<TDone>[];
|
|
126
|
+
block_ids: number[];
|
|
127
|
+
expanded_refs: ExpandedRef[];
|
|
128
|
+
}
|
|
129
|
+
export interface CustomDoneIntent extends DoneIntent {
|
|
130
|
+
issues: string[];
|
|
131
|
+
human_question?: string;
|
|
132
|
+
explanation: string;
|
|
133
|
+
}
|
|
134
|
+
export type TestAgentV2IncomingEventType = 'next_task' | 'response' | 'close' | 'pause' | 'run' | 'set_model_name' | 'set_persona_id' | 'set_app_config_id' | 'set_test_dependency' | 'toggle_autopilot' | 'change_name' | 'save_test';
|
|
135
|
+
export interface TestAgentV2IncomingEvent {
|
|
136
|
+
type: TestAgentV2IncomingEventType;
|
|
137
|
+
message?: string;
|
|
138
|
+
id?: string;
|
|
139
|
+
}
|
|
140
|
+
export type TestAgentV2Status = 'pending' | 'idle' | 'running' | 'paused' | 'pending' | 'need_user_input' | 'closed';
|
|
141
|
+
export interface TestAgentV2HistoryEvent<TDone extends DoneIntent = DoneIntent> {
|
|
142
|
+
history: HistoryItem<TDone>;
|
|
143
|
+
}
|
|
144
|
+
export interface TestAgentV2BlockEvent {
|
|
145
|
+
block: Block;
|
|
146
|
+
}
|
|
147
|
+
export interface TestAgentV2StatusEvent {
|
|
148
|
+
status: TestAgentV2Status;
|
|
149
|
+
}
|
|
150
|
+
export interface TestAgentV2FullHistoryEvent<TDone extends DoneIntent = DoneIntent> {
|
|
151
|
+
history: HistoryItem<TDone>[];
|
|
152
|
+
}
|
|
153
|
+
export interface TestAgentV2ConfigEvent {
|
|
154
|
+
name: string;
|
|
155
|
+
agent_id: string;
|
|
156
|
+
model_name: string;
|
|
157
|
+
liveview_url: string;
|
|
158
|
+
page_url?: string | null;
|
|
159
|
+
autopilot: boolean;
|
|
160
|
+
app_config_id?: string | null;
|
|
161
|
+
persona_id?: string | null;
|
|
162
|
+
organization_id?: string | null;
|
|
163
|
+
group_key?: string | null;
|
|
164
|
+
test_dependency_ids: string[];
|
|
165
|
+
}
|
|
166
|
+
export interface TestAgentV2UserInputEvent {
|
|
167
|
+
question: string;
|
|
168
|
+
priority: Prio;
|
|
169
|
+
}
|
|
170
|
+
export interface TestAgentV2TestEvent {
|
|
171
|
+
test: unknown;
|
|
172
|
+
ctxs: unknown[];
|
|
173
|
+
}
|
|
174
|
+
export interface TestAgentV2NotifyEvent {
|
|
175
|
+
message: string;
|
|
176
|
+
level: 'info' | 'warning' | 'error';
|
|
177
|
+
}
|
|
178
|
+
export type TestAgentV2EventType = 'config' | 'history' | 'block' | 'status' | 'full_history' | 'user_input' | 'test' | 'notify';
|
|
179
|
+
export type TestAgentV2EventData<TDone extends DoneIntent = DoneIntent> = TestAgentV2ConfigEvent | TestAgentV2HistoryEvent<TDone> | TestAgentV2BlockEvent | TestAgentV2StatusEvent | TestAgentV2FullHistoryEvent<TDone> | TestAgentV2UserInputEvent | TestAgentV2TestEvent | TestAgentV2NotifyEvent;
|
|
180
|
+
export interface TestAgentV2Event<TDone extends DoneIntent = DoneIntent> {
|
|
181
|
+
ts: string;
|
|
182
|
+
type: TestAgentV2EventType;
|
|
183
|
+
data: TestAgentV2EventData<TDone>;
|
|
184
|
+
}
|
|
185
|
+
export interface TestAgentV2Data {
|
|
186
|
+
agent_id: string;
|
|
187
|
+
liveview_url: string;
|
|
188
|
+
recording_path?: string | null;
|
|
189
|
+
page_url?: string | null;
|
|
190
|
+
autopilot: boolean;
|
|
191
|
+
model_name: string;
|
|
192
|
+
organization_id?: string | null;
|
|
193
|
+
group_key?: string | null;
|
|
194
|
+
app_config_id?: string | null;
|
|
195
|
+
persona_id?: string | null;
|
|
196
|
+
test_id: string;
|
|
197
|
+
dependency_test_ids: string[];
|
|
198
|
+
blocks: Block[];
|
|
199
|
+
history: HistoryItem<DoneIntent>[];
|
|
200
|
+
last_done?: DoneIntent | null;
|
|
201
|
+
pending_user_input?: UserInputIntent | null;
|
|
202
|
+
status: TestAgentV2Status;
|
|
203
|
+
}
|
|
204
|
+
export interface TestAgentV2Session extends AuditBase {
|
|
205
|
+
id: string;
|
|
206
|
+
source?: string;
|
|
207
|
+
data: TestAgentV2Data;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export var DBStatus;
|
|
2
|
+
(function (DBStatus) {
|
|
3
|
+
DBStatus["ACTIVE"] = "active";
|
|
4
|
+
DBStatus["DELETED"] = "deleted";
|
|
5
|
+
})(DBStatus || (DBStatus = {}));
|
|
6
|
+
export const isDoneIntent = (intent) => {
|
|
7
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
8
|
+
return intent.hasOwnProperty('status');
|
|
9
|
+
};
|
|
10
|
+
export const isTestCreatorDoneIntent = (intent) => {
|
|
11
|
+
return ('issues' in intent &&
|
|
12
|
+
'success_criteria' in intent &&
|
|
13
|
+
'is_positive' in intent &&
|
|
14
|
+
'explanation' in intent);
|
|
15
|
+
};
|
|
16
|
+
export const isUserInputIntent = (intent) => {
|
|
17
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
18
|
+
return intent.hasOwnProperty('question');
|
|
19
|
+
};
|
|
20
|
+
export const isNextTaskIntent = (intent) => {
|
|
21
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
22
|
+
return intent.hasOwnProperty('next_task');
|
|
23
|
+
};
|
|
24
|
+
export const isClarificationIntent = (intent) => {
|
|
25
|
+
return (
|
|
26
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
27
|
+
intent.hasOwnProperty('type') && intent.type !== undefined);
|
|
28
|
+
};
|
|
29
|
+
export const isActionIntent = (intent) => {
|
|
30
|
+
return (
|
|
31
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
32
|
+
intent.hasOwnProperty('type') && intent.type !== undefined);
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,6BAAiB,CAAA;IACjB,+BAAmB,CAAA;AACrB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAoKD,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAA+B,EACd,EAAE;IACnB,iDAAiD;IACjD,OAAO,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAkB,EAAmC,EAAE;IAC7F,OAAO,CACL,QAAQ,IAAI,MAAM;QAClB,kBAAkB,IAAI,MAAM;QAC5B,aAAa,IAAI,MAAM;QACvB,aAAa,IAAI,MAAM,CACxB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,MAA+B,EACJ,EAAE;IAC7B,iDAAiD;IACjD,OAAO,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAA+B,EACL,EAAE;IAC5B,iDAAiD;IACjD,OAAO,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,MAA+B,EACA,EAAE;IACjC,OAAO;IACL,iDAAiD;IACjD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAK,MAAkB,CAAC,IAAI,KAAK,SAAS,CACxE,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,MAA+B,EACP,EAAE;IAC1B,OAAO;IACL,iDAAiD;IACjD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAK,MAAkB,CAAC,IAAI,KAAK,SAAS,CACxE,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface PackageJson {
|
|
2
|
+
name: string;
|
|
3
|
+
version: string;
|
|
4
|
+
description: string;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}
|
|
7
|
+
export declare function getPackageInfo(): PackageJson;
|
|
8
|
+
export declare function getVersion(): string;
|
|
9
|
+
export declare function getName(): string;
|
|
10
|
+
export declare function getDescription(): string;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=package.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../../src/utils/package.ts"],"names":[],"mappings":"AAWA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,wBAAgB,cAAc,IAAI,WAAW,CAe5C;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
// Get the directory of the current module
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
// Read package.json from the project root
|
|
8
|
+
const packageJsonPath = join(__dirname, '../../package.json');
|
|
9
|
+
let packageJson = null;
|
|
10
|
+
export function getPackageInfo() {
|
|
11
|
+
if (!packageJson) {
|
|
12
|
+
try {
|
|
13
|
+
const packageContent = readFileSync(packageJsonPath, 'utf-8');
|
|
14
|
+
packageJson = JSON.parse(packageContent);
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
// Fallback values if package.json can't be read
|
|
18
|
+
packageJson = {
|
|
19
|
+
name: 'qa-use-mcp',
|
|
20
|
+
version: '1.0.0',
|
|
21
|
+
description: 'MCP server for browser automation and QA testing',
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return packageJson;
|
|
26
|
+
}
|
|
27
|
+
export function getVersion() {
|
|
28
|
+
return getPackageInfo().version;
|
|
29
|
+
}
|
|
30
|
+
export function getName() {
|
|
31
|
+
return getPackageInfo().name;
|
|
32
|
+
}
|
|
33
|
+
export function getDescription() {
|
|
34
|
+
return getPackageInfo().description;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=package.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.js","sourceRoot":"","sources":["../../../src/utils/package.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,0CAA0C;AAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,0CAA0C;AAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAS9D,IAAI,WAAW,GAAuB,IAAI,CAAC;AAE3C,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC9D,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gDAAgD;YAChD,WAAW,GAAG;gBACZ,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,kDAAkD;aAChE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,WAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,cAAc,EAAE,CAAC,OAAO,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,cAAc,EAAE,CAAC,IAAI,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,cAAc,EAAE,CAAC,WAAW,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { TestAgentV2Data, IssueReport } from '../types.js';
|
|
2
|
+
export interface BlockSummary {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
action: string;
|
|
6
|
+
status: 'completed' | 'failed' | 'skipped';
|
|
7
|
+
confidence?: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface EnhancedTestSummary {
|
|
11
|
+
testId: string;
|
|
12
|
+
modelName: string;
|
|
13
|
+
totalSteps: number;
|
|
14
|
+
completedSteps: number;
|
|
15
|
+
failedSteps: number;
|
|
16
|
+
totalDuration: number;
|
|
17
|
+
testResult?: {
|
|
18
|
+
status: 'success' | 'failure';
|
|
19
|
+
message: string;
|
|
20
|
+
explanation: string;
|
|
21
|
+
isPositiveTest: boolean;
|
|
22
|
+
successCriteria: string;
|
|
23
|
+
};
|
|
24
|
+
discoveredIssues: IssueReport[];
|
|
25
|
+
stuckStates: string[];
|
|
26
|
+
finalUrl: string;
|
|
27
|
+
blocks: BlockSummary[];
|
|
28
|
+
}
|
|
29
|
+
export declare function generateEnhancedTestSummary(data: TestAgentV2Data): EnhancedTestSummary;
|
|
30
|
+
export declare function categorizeIssues(issues: IssueReport[]): {
|
|
31
|
+
critical: IssueReport[];
|
|
32
|
+
high: IssueReport[];
|
|
33
|
+
medium: IssueReport[];
|
|
34
|
+
low: IssueReport[];
|
|
35
|
+
};
|
|
36
|
+
export declare function formatEnhancedTestReport(summary: EnhancedTestSummary): string;
|
|
37
|
+
export declare function generateIssueStatistics(issues: IssueReport[]): {
|
|
38
|
+
totalIssues: number;
|
|
39
|
+
bySeverity: Record<string, number>;
|
|
40
|
+
byType: Record<string, number>;
|
|
41
|
+
criticalCount: number;
|
|
42
|
+
hasBlockers: boolean;
|
|
43
|
+
mostCommonType: string | null;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/utils/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAkC,MAAM,aAAa,CAAC;AAGhG,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,OAAO,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,gBAAgB,EAAE,WAAW,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,eAAe,GAAG,mBAAmB,CAiFtF;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG;IACvD,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,GAAG,EAAE,WAAW,EAAE,CAAC;CACpB,CAsBA;AAGD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CA2E7E;AAGD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAmCA"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { isTestCreatorDoneIntent } from '../types.js';
|
|
2
|
+
export function generateEnhancedTestSummary(data) {
|
|
3
|
+
const { test_id, model_name, history, blocks, last_done } = data;
|
|
4
|
+
// Calculate totals from history
|
|
5
|
+
const completedSteps = history.filter((h) => h.status === 'completed').length;
|
|
6
|
+
const failedSteps = history.filter((h) => h.status === 'failed').length;
|
|
7
|
+
// Calculate total duration
|
|
8
|
+
const totalDuration = history.reduce((acc, item) => {
|
|
9
|
+
return acc + (item.elapsed_ms || 0);
|
|
10
|
+
}, 0);
|
|
11
|
+
// Process test result if available
|
|
12
|
+
let testResult;
|
|
13
|
+
let discoveredIssues = [];
|
|
14
|
+
if (last_done && isTestCreatorDoneIntent(last_done)) {
|
|
15
|
+
testResult = {
|
|
16
|
+
status: last_done.status,
|
|
17
|
+
message: last_done.message,
|
|
18
|
+
explanation: last_done.explanation,
|
|
19
|
+
isPositiveTest: last_done.is_positive,
|
|
20
|
+
successCriteria: last_done.success_criteria,
|
|
21
|
+
};
|
|
22
|
+
discoveredIssues = last_done.issues || [];
|
|
23
|
+
}
|
|
24
|
+
// Extract stuck states
|
|
25
|
+
const stuckStates = [];
|
|
26
|
+
history.forEach((item) => {
|
|
27
|
+
// Check intents for stuck states
|
|
28
|
+
item.intents.forEach((intent) => {
|
|
29
|
+
if (intent.intent && 'reasoning' in intent.intent) {
|
|
30
|
+
const reasoning = intent.intent.reasoning.toLowerCase();
|
|
31
|
+
if (reasoning.includes('stuck') || reasoning.includes('switching organization')) {
|
|
32
|
+
stuckStates.push(intent.intent.reasoning);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
// Get final URL from last completed history item
|
|
38
|
+
const lastCompleted = [...history].reverse().find((h) => h.status === 'completed');
|
|
39
|
+
const finalUrl = lastCompleted?.end_url || '';
|
|
40
|
+
// Process blocks into summary
|
|
41
|
+
const blockSummaries = blocks.map((block) => {
|
|
42
|
+
const relatedHistory = history.filter((h) => h.block_ids.includes(block.id));
|
|
43
|
+
const hasFailure = relatedHistory.some((h) => h.status === 'failed');
|
|
44
|
+
const allCompleted = relatedHistory.every((h) => h.status === 'completed');
|
|
45
|
+
return {
|
|
46
|
+
id: block.id,
|
|
47
|
+
name: block.name,
|
|
48
|
+
action: block.action?.action || 'unknown',
|
|
49
|
+
status: block.skipped
|
|
50
|
+
? 'skipped'
|
|
51
|
+
: hasFailure
|
|
52
|
+
? 'failed'
|
|
53
|
+
: allCompleted
|
|
54
|
+
? 'completed'
|
|
55
|
+
: 'skipped',
|
|
56
|
+
confidence: block.confidence,
|
|
57
|
+
error: block.last_error || undefined,
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
testId: test_id,
|
|
62
|
+
modelName: model_name,
|
|
63
|
+
totalSteps: history.length,
|
|
64
|
+
completedSteps,
|
|
65
|
+
failedSteps,
|
|
66
|
+
totalDuration,
|
|
67
|
+
testResult,
|
|
68
|
+
discoveredIssues,
|
|
69
|
+
stuckStates: [...new Set(stuckStates)],
|
|
70
|
+
finalUrl,
|
|
71
|
+
blocks: blockSummaries,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// Helper function to format issues by severity
|
|
75
|
+
export function categorizeIssues(issues) {
|
|
76
|
+
const categorized = {
|
|
77
|
+
critical: [],
|
|
78
|
+
high: [],
|
|
79
|
+
medium: [],
|
|
80
|
+
low: [],
|
|
81
|
+
};
|
|
82
|
+
issues.forEach((issue) => {
|
|
83
|
+
const severity = issue.severity || 'low';
|
|
84
|
+
if (severity === 'critical' || severity === 'blocker') {
|
|
85
|
+
categorized.critical.push(issue);
|
|
86
|
+
}
|
|
87
|
+
else if (severity === 'high' || severity === 'major') {
|
|
88
|
+
categorized.high.push(issue);
|
|
89
|
+
}
|
|
90
|
+
else if (severity === 'medium' || severity === 'minor') {
|
|
91
|
+
categorized.medium.push(issue);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
categorized.low.push(issue);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return categorized;
|
|
98
|
+
}
|
|
99
|
+
// Enhanced report formatter
|
|
100
|
+
export function formatEnhancedTestReport(summary) {
|
|
101
|
+
const successRate = ((summary.completedSteps / summary.totalSteps) * 100).toFixed(1);
|
|
102
|
+
const durationSeconds = (summary.totalDuration / 1000).toFixed(2);
|
|
103
|
+
let report = `# Test Execution Report\n\n`;
|
|
104
|
+
report += `**Test ID:** ${summary.testId}\n`;
|
|
105
|
+
report += `**Model:** ${summary.modelName}\n`;
|
|
106
|
+
report += `**Success Rate:** ${successRate}% (${summary.completedSteps}/${summary.totalSteps} steps)\n`;
|
|
107
|
+
report += `**Total Duration:** ${durationSeconds} seconds\n`;
|
|
108
|
+
report += `**Final URL:** ${summary.finalUrl}\n\n`;
|
|
109
|
+
// Add test result section if available
|
|
110
|
+
if (summary.testResult) {
|
|
111
|
+
const statusIcon = summary.testResult.status === 'success' ? '✅' : '❌';
|
|
112
|
+
const testType = summary.testResult.isPositiveTest ? 'Positive' : 'Negative';
|
|
113
|
+
report += `## Test Result ${statusIcon}\n`;
|
|
114
|
+
report += `**Test Type:** ${testType} Test\n`;
|
|
115
|
+
report += `**Status:** ${summary.testResult.status.toUpperCase()}\n`;
|
|
116
|
+
report += `**Message:** ${summary.testResult.message}\n`;
|
|
117
|
+
report += `**Success Criteria:** ${summary.testResult.successCriteria}\n\n`;
|
|
118
|
+
report += `### Explanation\n${summary.testResult.explanation}\n\n`;
|
|
119
|
+
}
|
|
120
|
+
// Add discovered issues section
|
|
121
|
+
if (summary.discoveredIssues.length > 0) {
|
|
122
|
+
report += `## Discovered Issues (${summary.discoveredIssues.length})\n\n`;
|
|
123
|
+
const categorized = categorizeIssues(summary.discoveredIssues);
|
|
124
|
+
['critical', 'high', 'medium', 'low'].forEach((severity) => {
|
|
125
|
+
const issues = categorized[severity];
|
|
126
|
+
if (issues.length > 0) {
|
|
127
|
+
report += `### ${severity.toUpperCase()} Severity (${issues.length})\n`;
|
|
128
|
+
issues.forEach((issue) => {
|
|
129
|
+
report += `- **${issue.title}** [${issue.issue_type || 'observation'}]\n`;
|
|
130
|
+
report += ` ${issue.description}\n`;
|
|
131
|
+
if (issue.url) {
|
|
132
|
+
report += ` URL: ${issue.url}\n`;
|
|
133
|
+
}
|
|
134
|
+
if (issue.recommendations && issue.recommendations.length > 0) {
|
|
135
|
+
report += ` Recommendations:\n`;
|
|
136
|
+
issue.recommendations.forEach((rec) => {
|
|
137
|
+
report += ` - ${rec}\n`;
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
report += `\n`;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
if (summary.stuckStates.length > 0) {
|
|
146
|
+
report += `## Stuck States Detected\n`;
|
|
147
|
+
summary.stuckStates.forEach((state) => {
|
|
148
|
+
report += `- ${state.substring(0, 150)}...\n`;
|
|
149
|
+
});
|
|
150
|
+
report += `\n`;
|
|
151
|
+
}
|
|
152
|
+
report += `## Test Blocks\n`;
|
|
153
|
+
summary.blocks.forEach((block) => {
|
|
154
|
+
const statusIcon = block.status === 'completed' ? '✅' : block.status === 'failed' ? '❌' : '⏭️';
|
|
155
|
+
report += `${statusIcon} **${block.name}** (${block.action})`;
|
|
156
|
+
if (block.confidence) {
|
|
157
|
+
report += ` - Confidence: ${block.confidence}`;
|
|
158
|
+
}
|
|
159
|
+
if (block.error) {
|
|
160
|
+
report += `\n Error: ${block.error}`;
|
|
161
|
+
}
|
|
162
|
+
report += `\n`;
|
|
163
|
+
});
|
|
164
|
+
return report;
|
|
165
|
+
}
|
|
166
|
+
// Function to generate issue statistics
|
|
167
|
+
export function generateIssueStatistics(issues) {
|
|
168
|
+
const bySeverity = {};
|
|
169
|
+
const byType = {};
|
|
170
|
+
let criticalCount = 0;
|
|
171
|
+
let hasBlockers = false;
|
|
172
|
+
issues.forEach((issue) => {
|
|
173
|
+
// Count by severity
|
|
174
|
+
const severity = issue.severity || 'low';
|
|
175
|
+
bySeverity[severity] = (bySeverity[severity] || 0) + 1;
|
|
176
|
+
if (severity === 'critical' || severity === 'blocker') {
|
|
177
|
+
criticalCount++;
|
|
178
|
+
if (severity === 'blocker')
|
|
179
|
+
hasBlockers = true;
|
|
180
|
+
}
|
|
181
|
+
// Count by type
|
|
182
|
+
const type = issue.issue_type || 'observation';
|
|
183
|
+
byType[type] = (byType[type] || 0) + 1;
|
|
184
|
+
});
|
|
185
|
+
// Find most common type
|
|
186
|
+
const mostCommonType = Object.keys(byType).length > 0
|
|
187
|
+
? Object.entries(byType).sort((a, b) => b[1] - a[1])[0][0]
|
|
188
|
+
: null;
|
|
189
|
+
return {
|
|
190
|
+
totalIssues: issues.length,
|
|
191
|
+
bySeverity,
|
|
192
|
+
byType,
|
|
193
|
+
criticalCount,
|
|
194
|
+
hasBlockers,
|
|
195
|
+
mostCommonType,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/utils/summary.ts"],"names":[],"mappings":"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"}
|