retestkit 1.12.0 → 1.13.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.
- package/dist/config.d.ts +66 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +184 -15
- package/dist/config.js.map +1 -1
- package/dist/errors/not-configured.d.ts +47 -0
- package/dist/errors/not-configured.d.ts.map +1 -0
- package/dist/errors/not-configured.js +87 -0
- package/dist/errors/not-configured.js.map +1 -0
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +22 -38
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/templates/mcp/init.md +15 -0
- package/dist/schemas/file-config.d.ts +64 -0
- package/dist/schemas/file-config.d.ts.map +1 -0
- package/dist/schemas/file-config.js +68 -0
- package/dist/schemas/file-config.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +5 -5
- package/dist/server.js.map +1 -1
- package/dist/setup/templates/core-prompt.js +1 -1
- package/dist/setup/templates/core-prompt.js.map +1 -1
- package/dist/tools/init.d.ts +91 -0
- package/dist/tools/init.d.ts.map +1 -0
- package/dist/tools/init.js +413 -0
- package/dist/tools/init.js.map +1 -0
- package/dist/tools/retest/cover.js +1 -1
- package/dist/tools/retest/crawl.js +1 -1
- package/dist/tools/retest/crawl.js.map +1 -1
- package/dist/tools/retest/index.d.ts +0 -1
- package/dist/tools/retest/index.d.ts.map +1 -1
- package/dist/tools/retest/index.js +0 -1
- package/dist/tools/retest/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/prompts/templates/mcp/retest-setup.md +0 -13
- package/dist/prompts/templates/mcp/retest-start.md +0 -8
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,68 @@
|
|
|
1
1
|
import { type Config } from "./schemas/config.js";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { type FileConfig } from "./schemas/file-config.js";
|
|
3
|
+
/**
|
|
4
|
+
* Result of config path discovery, including which sources were checked
|
|
5
|
+
* and which config file (if any) was found.
|
|
6
|
+
*/
|
|
7
|
+
export interface ConfigPathsResult {
|
|
8
|
+
/** Config file path from --config CLI flag */
|
|
9
|
+
cliPath?: string;
|
|
10
|
+
/** Config file path from RETESTKIT_CONFIG env var */
|
|
11
|
+
envPath?: string;
|
|
12
|
+
/** Workspace config path (.mcp/retestkit.json in cwd) */
|
|
13
|
+
workspacePath: string;
|
|
14
|
+
/** User-level config path (~/.config/retestkit/config.json or %APPDATA%) */
|
|
15
|
+
userPath: string;
|
|
16
|
+
/** The resolved config file path to use, if any exists */
|
|
17
|
+
resolvedPath?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Discovers config file paths based on precedence:
|
|
21
|
+
* 1. CLI flag --config <path>
|
|
22
|
+
* 2. RETESTKIT_CONFIG environment variable
|
|
23
|
+
* 3. Workspace: .mcp/retestkit.json in current directory
|
|
24
|
+
* 4. User-level: ~/.config/retestkit/config.json (or %APPDATA% on Windows)
|
|
25
|
+
*
|
|
26
|
+
* @param cliConfigPath Optional path from --config CLI flag
|
|
27
|
+
* @returns ConfigPathsResult with all checked paths and resolved path
|
|
28
|
+
*/
|
|
29
|
+
export declare function getConfigPaths(cliConfigPath?: string): ConfigPathsResult;
|
|
30
|
+
/**
|
|
31
|
+
* Result of loading a config file.
|
|
32
|
+
*/
|
|
33
|
+
export interface LoadConfigFileResult {
|
|
34
|
+
success: boolean;
|
|
35
|
+
config?: FileConfig;
|
|
36
|
+
error?: string;
|
|
37
|
+
/** Path that was loaded from */
|
|
38
|
+
path?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Loads and validates a config file from the given path.
|
|
42
|
+
*
|
|
43
|
+
* @param configPath Path to the config file
|
|
44
|
+
* @returns LoadConfigFileResult with parsed config or error
|
|
45
|
+
*/
|
|
46
|
+
export declare function loadConfigFile(configPath: string): LoadConfigFileResult;
|
|
47
|
+
/**
|
|
48
|
+
* Loads configuration with precedence-based resolution:
|
|
49
|
+
* 1. CLI flag --config <path>
|
|
50
|
+
* 2. RETESTKIT_CONFIG environment variable
|
|
51
|
+
* 3. Workspace: .mcp/retestkit.json
|
|
52
|
+
* 4. User-level: ~/.config/retestkit/config.json
|
|
53
|
+
* 5. Built-in defaults
|
|
54
|
+
*
|
|
55
|
+
* Environment variables override file config values.
|
|
56
|
+
*
|
|
57
|
+
* @param cliConfigPath Optional path from --config CLI flag
|
|
58
|
+
* @returns Validated Config object
|
|
59
|
+
* @throws Error if config is invalid
|
|
60
|
+
*/
|
|
61
|
+
export declare function loadConfig(cliConfigPath?: string): Config;
|
|
62
|
+
/**
|
|
63
|
+
* Gets the file config without merging with env vars.
|
|
64
|
+
* Useful for the init tool to inspect current file-based config.
|
|
65
|
+
*/
|
|
66
|
+
export declare function getFileConfig(cliConfigPath?: string): FileConfig | undefined;
|
|
67
|
+
export type { Config, FileConfig };
|
|
4
68
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,0BAA0B,CAAC;AAElC;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,iBAAiB,CA+BxE;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,CA8CvE;AAyDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CA2BzD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAO5E;AAED,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -1,20 +1,177 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import * as os from "node:os";
|
|
1
4
|
import { ConfigSchema } from "./schemas/config.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
5
|
+
import { FileConfigSchema, CURRENT_CONFIG_VERSION, } from "./schemas/file-config.js";
|
|
6
|
+
/**
|
|
7
|
+
* Discovers config file paths based on precedence:
|
|
8
|
+
* 1. CLI flag --config <path>
|
|
9
|
+
* 2. RETESTKIT_CONFIG environment variable
|
|
10
|
+
* 3. Workspace: .mcp/retestkit.json in current directory
|
|
11
|
+
* 4. User-level: ~/.config/retestkit/config.json (or %APPDATA% on Windows)
|
|
12
|
+
*
|
|
13
|
+
* @param cliConfigPath Optional path from --config CLI flag
|
|
14
|
+
* @returns ConfigPathsResult with all checked paths and resolved path
|
|
15
|
+
*/
|
|
16
|
+
export function getConfigPaths(cliConfigPath) {
|
|
17
|
+
const cwd = process.cwd();
|
|
18
|
+
const workspacePath = path.join(cwd, ".mcp", "retestkit.json");
|
|
19
|
+
// User-level config location varies by OS
|
|
20
|
+
const userPath = process.platform === "win32"
|
|
21
|
+
? path.join(process.env.APPDATA || "", "retestkit", "config.json")
|
|
22
|
+
: path.join(os.homedir(), ".config", "retestkit", "config.json");
|
|
23
|
+
const envPath = process.env.RETESTKIT_CONFIG;
|
|
24
|
+
const result = {
|
|
25
|
+
cliPath: cliConfigPath,
|
|
26
|
+
envPath,
|
|
27
|
+
workspacePath,
|
|
28
|
+
userPath,
|
|
17
29
|
};
|
|
30
|
+
// Resolve in precedence order
|
|
31
|
+
if (cliConfigPath && fs.existsSync(cliConfigPath)) {
|
|
32
|
+
result.resolvedPath = cliConfigPath;
|
|
33
|
+
}
|
|
34
|
+
else if (envPath && fs.existsSync(envPath)) {
|
|
35
|
+
result.resolvedPath = envPath;
|
|
36
|
+
}
|
|
37
|
+
else if (fs.existsSync(workspacePath)) {
|
|
38
|
+
result.resolvedPath = workspacePath;
|
|
39
|
+
}
|
|
40
|
+
else if (fs.existsSync(userPath)) {
|
|
41
|
+
result.resolvedPath = userPath;
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Loads and validates a config file from the given path.
|
|
47
|
+
*
|
|
48
|
+
* @param configPath Path to the config file
|
|
49
|
+
* @returns LoadConfigFileResult with parsed config or error
|
|
50
|
+
*/
|
|
51
|
+
export function loadConfigFile(configPath) {
|
|
52
|
+
try {
|
|
53
|
+
const content = fs.readFileSync(configPath, "utf-8");
|
|
54
|
+
const json = JSON.parse(content);
|
|
55
|
+
// Check for unsupported version
|
|
56
|
+
if (json.version && json.version > CURRENT_CONFIG_VERSION) {
|
|
57
|
+
console.warn(`Warning: Config file ${configPath} has unsupported version ${json.version}. ` +
|
|
58
|
+
`Current supported version is ${CURRENT_CONFIG_VERSION}. Attempting to parse known fields.`);
|
|
59
|
+
}
|
|
60
|
+
const result = FileConfigSchema.safeParse(json);
|
|
61
|
+
if (!result.success) {
|
|
62
|
+
const errors = result.error.issues
|
|
63
|
+
.map((issue) => `${issue.path.join(".")}: ${issue.message}`)
|
|
64
|
+
.join(", ");
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
error: `Invalid config file ${configPath}: ${errors}`,
|
|
68
|
+
path: configPath,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
success: true,
|
|
73
|
+
config: result.data,
|
|
74
|
+
path: configPath,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
if (err instanceof SyntaxError) {
|
|
79
|
+
return {
|
|
80
|
+
success: false,
|
|
81
|
+
error: `Invalid JSON in config file ${configPath}: ${err.message}`,
|
|
82
|
+
path: configPath,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
86
|
+
return {
|
|
87
|
+
success: false,
|
|
88
|
+
error: `Failed to read config file ${configPath}: ${message}`,
|
|
89
|
+
path: configPath,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Merges file-based config with environment variables.
|
|
95
|
+
* Environment variables take precedence over file config.
|
|
96
|
+
*/
|
|
97
|
+
function mergeConfigWithEnv(fileConfig) {
|
|
98
|
+
const rawConfig = {};
|
|
99
|
+
// Start with file config values (mapped to runtime config schema)
|
|
100
|
+
if (fileConfig) {
|
|
101
|
+
if (fileConfig.logging?.level) {
|
|
102
|
+
rawConfig.logLevel = fileConfig.logging.level;
|
|
103
|
+
}
|
|
104
|
+
if (fileConfig.limits?.maxSteps) {
|
|
105
|
+
rawConfig.defaultMaxSteps = fileConfig.limits.maxSteps;
|
|
106
|
+
}
|
|
107
|
+
if (fileConfig.limits?.maxMinutes) {
|
|
108
|
+
rawConfig.defaultMaxMinutes = fileConfig.limits.maxMinutes;
|
|
109
|
+
}
|
|
110
|
+
if (fileConfig.limits?.maxPages) {
|
|
111
|
+
rawConfig.defaultMaxPages = fileConfig.limits.maxPages;
|
|
112
|
+
}
|
|
113
|
+
if (fileConfig.playwright?.command) {
|
|
114
|
+
rawConfig.playwrightMcpCommand = fileConfig.playwright.command;
|
|
115
|
+
}
|
|
116
|
+
if (fileConfig.playwright?.args) {
|
|
117
|
+
rawConfig.playwrightMcpArgs = fileConfig.playwright.args.join(",");
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Environment variables override file config
|
|
121
|
+
if (process.env.TRANSPORT)
|
|
122
|
+
rawConfig.transport = process.env.TRANSPORT;
|
|
123
|
+
if (process.env.PORT)
|
|
124
|
+
rawConfig.port = process.env.PORT;
|
|
125
|
+
if (process.env.LOG_LEVEL)
|
|
126
|
+
rawConfig.logLevel = process.env.LOG_LEVEL;
|
|
127
|
+
if (process.env.RETEST_WORKSPACE_DIR)
|
|
128
|
+
rawConfig.workspaceDir = process.env.RETEST_WORKSPACE_DIR;
|
|
129
|
+
if (process.env.PLAYWRIGHT_MCP_COMMAND)
|
|
130
|
+
rawConfig.playwrightMcpCommand = process.env.PLAYWRIGHT_MCP_COMMAND;
|
|
131
|
+
if (process.env.PLAYWRIGHT_MCP_ARGS)
|
|
132
|
+
rawConfig.playwrightMcpArgs = process.env.PLAYWRIGHT_MCP_ARGS;
|
|
133
|
+
if (process.env.RETEST_CHECKPOINT_INTERVAL)
|
|
134
|
+
rawConfig.checkpointInterval = process.env.RETEST_CHECKPOINT_INTERVAL;
|
|
135
|
+
if (process.env.RETEST_SCREENSHOT_FORMAT)
|
|
136
|
+
rawConfig.screenshotFormat = process.env.RETEST_SCREENSHOT_FORMAT;
|
|
137
|
+
if (process.env.RETEST_SCREENSHOT_QUALITY)
|
|
138
|
+
rawConfig.screenshotQuality = process.env.RETEST_SCREENSHOT_QUALITY;
|
|
139
|
+
if (process.env.RETEST_DEFAULT_MAX_STEPS)
|
|
140
|
+
rawConfig.defaultMaxSteps = process.env.RETEST_DEFAULT_MAX_STEPS;
|
|
141
|
+
if (process.env.RETEST_DEFAULT_MAX_MINUTES)
|
|
142
|
+
rawConfig.defaultMaxMinutes = process.env.RETEST_DEFAULT_MAX_MINUTES;
|
|
143
|
+
if (process.env.RETEST_DEFAULT_MAX_PAGES)
|
|
144
|
+
rawConfig.defaultMaxPages = process.env.RETEST_DEFAULT_MAX_PAGES;
|
|
145
|
+
return rawConfig;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Loads configuration with precedence-based resolution:
|
|
149
|
+
* 1. CLI flag --config <path>
|
|
150
|
+
* 2. RETESTKIT_CONFIG environment variable
|
|
151
|
+
* 3. Workspace: .mcp/retestkit.json
|
|
152
|
+
* 4. User-level: ~/.config/retestkit/config.json
|
|
153
|
+
* 5. Built-in defaults
|
|
154
|
+
*
|
|
155
|
+
* Environment variables override file config values.
|
|
156
|
+
*
|
|
157
|
+
* @param cliConfigPath Optional path from --config CLI flag
|
|
158
|
+
* @returns Validated Config object
|
|
159
|
+
* @throws Error if config is invalid
|
|
160
|
+
*/
|
|
161
|
+
export function loadConfig(cliConfigPath) {
|
|
162
|
+
const paths = getConfigPaths(cliConfigPath);
|
|
163
|
+
let fileConfig;
|
|
164
|
+
// Load config file if found
|
|
165
|
+
if (paths.resolvedPath) {
|
|
166
|
+
const fileResult = loadConfigFile(paths.resolvedPath);
|
|
167
|
+
if (!fileResult.success) {
|
|
168
|
+
// Fail fast on invalid config file
|
|
169
|
+
throw new Error(fileResult.error);
|
|
170
|
+
}
|
|
171
|
+
fileConfig = fileResult.config;
|
|
172
|
+
}
|
|
173
|
+
// Merge file config with env vars
|
|
174
|
+
const rawConfig = mergeConfigWithEnv(fileConfig);
|
|
18
175
|
const result = ConfigSchema.safeParse(rawConfig);
|
|
19
176
|
if (!result.success) {
|
|
20
177
|
const errors = result.error.issues
|
|
@@ -24,4 +181,16 @@ export function loadConfig() {
|
|
|
24
181
|
}
|
|
25
182
|
return result.data;
|
|
26
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Gets the file config without merging with env vars.
|
|
186
|
+
* Useful for the init tool to inspect current file-based config.
|
|
187
|
+
*/
|
|
188
|
+
export function getFileConfig(cliConfigPath) {
|
|
189
|
+
const paths = getConfigPaths(cliConfigPath);
|
|
190
|
+
if (!paths.resolvedPath) {
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
const result = loadConfigFile(paths.resolvedPath);
|
|
194
|
+
return result.success ? result.config : undefined;
|
|
195
|
+
}
|
|
27
196
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GAEvB,MAAM,0BAA0B,CAAC;AAmBlC;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,aAAsB;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAE/D,0CAA0C;IAC1C,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC1B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC;QAClE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAErE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAE7C,MAAM,MAAM,GAAsB;QAChC,OAAO,EAAE,aAAa;QACtB,OAAO;QACP,aAAa;QACb,QAAQ;KACT,CAAC;IAEF,8BAA8B;IAC9B,IAAI,aAAa,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC;IACtC,CAAC;SAAM,IAAI,OAAO,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC;IAChC,CAAC;SAAM,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC;IACtC,CAAC;SAAM,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAaD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEjC,gCAAgC;QAChC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,sBAAsB,EAAE,CAAC;YAC1D,OAAO,CAAC,IAAI,CACV,wBAAwB,UAAU,4BAA4B,IAAI,CAAC,OAAO,IAAI;gBAC5E,gCAAgC,sBAAsB,qCAAqC,CAC9F,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;iBAC/B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;iBAC3D,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,uBAAuB,UAAU,KAAK,MAAM,EAAE;gBACrD,IAAI,EAAE,UAAU;aACjB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,IAAI,EAAE,UAAU;SACjB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,+BAA+B,UAAU,KAAK,GAAG,CAAC,OAAO,EAAE;gBAClE,IAAI,EAAE,UAAU;aACjB,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,8BAA8B,UAAU,KAAK,OAAO,EAAE;YAC7D,IAAI,EAAE,UAAU;SACjB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,UAAuB;IACjD,MAAM,SAAS,GAA4B,EAAE,CAAC;IAE9C,kEAAkE;IAClE,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC9B,SAAS,CAAC,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;QAChD,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;YAChC,SAAS,CAAC,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;QACzD,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;YAClC,SAAS,CAAC,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;QAC7D,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;YAChC,SAAS,CAAC,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;QACzD,CAAC;QACD,IAAI,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;YACnC,SAAS,CAAC,oBAAoB,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;QACjE,CAAC;QACD,IAAI,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;YAChC,SAAS,CAAC,iBAAiB,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS;QAAE,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACvE,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI;QAAE,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACxD,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS;QAAE,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACtE,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAClC,SAAS,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC5D,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB;QACpC,SAAS,CAAC,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACtE,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB;QACjC,SAAS,CAAC,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAChE,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACxC,SAAS,CAAC,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACxE,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACtC,SAAS,CAAC,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACpE,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB;QACvC,SAAS,CAAC,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACtE,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACtC,SAAS,CAAC,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACnE,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACxC,SAAS,CAAC,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACvE,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACtC,SAAS,CAAC,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAEnE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,aAAsB;IAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,UAAkC,CAAC;IAEvC,4BAA4B;IAC5B,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,mCAAmC;YACnC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAEjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;aAC/B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;aAC3D,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,aAAsB;IAClD,MAAM,KAAK,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ToolResult } from "../types/tool.js";
|
|
2
|
+
/**
|
|
3
|
+
* NOT_CONFIGURED error response structure.
|
|
4
|
+
*
|
|
5
|
+
* This standardized error response guides users to run the init tool
|
|
6
|
+
* when required configuration is missing.
|
|
7
|
+
*/
|
|
8
|
+
export interface NotConfiguredError {
|
|
9
|
+
code: "NOT_CONFIGURED";
|
|
10
|
+
missing: string[];
|
|
11
|
+
action: "RUN_INIT";
|
|
12
|
+
initTool: "init";
|
|
13
|
+
message: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Configuration fields that can be checked.
|
|
17
|
+
*/
|
|
18
|
+
export type ConfigField = "targetUrl" | "specsPath" | "allowedDomains";
|
|
19
|
+
/**
|
|
20
|
+
* Check if required config fields are present.
|
|
21
|
+
* Returns the list of missing fields.
|
|
22
|
+
*/
|
|
23
|
+
export declare function checkRequiredConfig(requiredFields: ConfigField[]): {
|
|
24
|
+
configured: boolean;
|
|
25
|
+
missing: string[];
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Create a NOT_CONFIGURED error result.
|
|
29
|
+
*
|
|
30
|
+
* Use this in tools that require configuration to return a structured
|
|
31
|
+
* error guiding users to run the init tool.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createNotConfiguredError(missingFields: string[], toolName?: string): ToolResult;
|
|
34
|
+
/**
|
|
35
|
+
* Guard that checks configuration and returns NOT_CONFIGURED error if missing.
|
|
36
|
+
*
|
|
37
|
+
* Usage:
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const configCheck = requireConfig(["targetUrl"], "cover");
|
|
40
|
+
* if (configCheck) {
|
|
41
|
+
* return configCheck; // NOT_CONFIGURED error
|
|
42
|
+
* }
|
|
43
|
+
* // Config is valid, continue with tool logic
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function requireConfig(requiredFields: ConfigField[], toolName?: string): ToolResult | null;
|
|
47
|
+
//# sourceMappingURL=not-configured.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"not-configured.d.ts","sourceRoot":"","sources":["../../src/errors/not-configured.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAEvE;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,WAAW,EAAE,GAC5B;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA8B5C;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,EAAE,EACvB,QAAQ,CAAC,EAAE,MAAM,GAChB,UAAU,CAkBZ;AAgBD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,cAAc,EAAE,WAAW,EAAE,EAC7B,QAAQ,CAAC,EAAE,MAAM,GAChB,UAAU,GAAG,IAAI,CAQnB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { getFileConfig } from "../config.js";
|
|
2
|
+
/**
|
|
3
|
+
* Check if required config fields are present.
|
|
4
|
+
* Returns the list of missing fields.
|
|
5
|
+
*/
|
|
6
|
+
export function checkRequiredConfig(requiredFields) {
|
|
7
|
+
const config = getFileConfig();
|
|
8
|
+
if (!config) {
|
|
9
|
+
return { configured: false, missing: requiredFields };
|
|
10
|
+
}
|
|
11
|
+
const missing = [];
|
|
12
|
+
for (const field of requiredFields) {
|
|
13
|
+
switch (field) {
|
|
14
|
+
case "targetUrl":
|
|
15
|
+
if (!config.targetUrl) {
|
|
16
|
+
missing.push("targetUrl");
|
|
17
|
+
}
|
|
18
|
+
break;
|
|
19
|
+
case "specsPath":
|
|
20
|
+
if (!config.specsPath) {
|
|
21
|
+
missing.push("specsPath");
|
|
22
|
+
}
|
|
23
|
+
break;
|
|
24
|
+
case "allowedDomains":
|
|
25
|
+
if (!config.allowedDomains || config.allowedDomains.length === 0) {
|
|
26
|
+
missing.push("allowedDomains");
|
|
27
|
+
}
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return { configured: missing.length === 0, missing };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a NOT_CONFIGURED error result.
|
|
35
|
+
*
|
|
36
|
+
* Use this in tools that require configuration to return a structured
|
|
37
|
+
* error guiding users to run the init tool.
|
|
38
|
+
*/
|
|
39
|
+
export function createNotConfiguredError(missingFields, toolName) {
|
|
40
|
+
const error = {
|
|
41
|
+
code: "NOT_CONFIGURED",
|
|
42
|
+
missing: missingFields,
|
|
43
|
+
action: "RUN_INIT",
|
|
44
|
+
initTool: "init",
|
|
45
|
+
message: buildErrorMessage(missingFields, toolName),
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
content: [
|
|
49
|
+
{
|
|
50
|
+
type: "text",
|
|
51
|
+
text: JSON.stringify(error, null, 2),
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
isError: true,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Build a human-readable error message.
|
|
59
|
+
*/
|
|
60
|
+
function buildErrorMessage(missingFields, toolName) {
|
|
61
|
+
const fieldList = missingFields.join(", ");
|
|
62
|
+
const toolContext = toolName ? ` for ${toolName}` : "";
|
|
63
|
+
if (missingFields.length === 1) {
|
|
64
|
+
return `Configuration required${toolContext}: ${fieldList} is not set. Run the init tool to configure RetestKit.`;
|
|
65
|
+
}
|
|
66
|
+
return `Configuration required${toolContext}: ${fieldList} are not set. Run the init tool to configure RetestKit.`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Guard that checks configuration and returns NOT_CONFIGURED error if missing.
|
|
70
|
+
*
|
|
71
|
+
* Usage:
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const configCheck = requireConfig(["targetUrl"], "cover");
|
|
74
|
+
* if (configCheck) {
|
|
75
|
+
* return configCheck; // NOT_CONFIGURED error
|
|
76
|
+
* }
|
|
77
|
+
* // Config is valid, continue with tool logic
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export function requireConfig(requiredFields, toolName) {
|
|
81
|
+
const { configured, missing } = checkRequiredConfig(requiredFields);
|
|
82
|
+
if (!configured) {
|
|
83
|
+
return createNotConfiguredError(missing, toolName);
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=not-configured.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"not-configured.js","sourceRoot":"","sources":["../../src/errors/not-configured.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAqB7C;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,cAA6B;IAE7B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,WAAW;gBACd,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBACtB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC5B,CAAC;gBACD,MAAM;YACR,KAAK,WAAW;gBACd,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBACtB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC5B,CAAC;gBACD,MAAM;YACR,KAAK,gBAAgB;gBACnB,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACjC,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAAuB,EACvB,QAAiB;IAEjB,MAAM,KAAK,GAAuB;QAChC,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,aAAa;QACtB,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,iBAAiB,CAAC,aAAa,EAAE,QAAQ,CAAC;KACpD,CAAC;IAEF,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aACrC;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,aAAuB,EAAE,QAAiB;IACnE,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,yBAAyB,WAAW,KAAK,SAAS,wDAAwD,CAAC;IACpH,CAAC;IAED,OAAO,yBAAyB,WAAW,KAAK,SAAS,yDAAyD,CAAC;AACrH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAC3B,cAA6B,EAC7B,QAAiB;IAEjB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAEpE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAgBzD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QACvD,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KACzC,CAAC,CAAC,CAAC;CACL;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,aAAa,GAC9B,SAAS,EAAE,CAwXb"}
|
package/dist/prompts/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { loadTemplate, interpolate } from "./loader.js";
|
|
2
2
|
// Load templates once at module initialization (alphabetically ordered)
|
|
3
|
+
const initTemplate = loadTemplate("mcp", "init");
|
|
3
4
|
const retestCoverTemplate = loadTemplate("mcp", "retest-cover");
|
|
4
5
|
const retestCrawlTemplate = loadTemplate("mcp", "retest-crawl");
|
|
5
6
|
const retestDescribeTemplate = loadTemplate("mcp", "retest-describe");
|
|
@@ -8,8 +9,6 @@ const retestDiscoverFlowsTemplate = loadTemplate("mcp", "retest-discover-flows")
|
|
|
8
9
|
const retestGenerateTestsTemplate = loadTemplate("mcp", "retest-generate-tests");
|
|
9
10
|
const retestPlanTemplate = loadTemplate("mcp", "retest-plan");
|
|
10
11
|
const retestRunTestTemplate = loadTemplate("mcp", "retest-run-test");
|
|
11
|
-
const retestSetupTemplate = loadTemplate("mcp", "retest-setup");
|
|
12
|
-
const retestStartTemplate = loadTemplate("mcp", "retest-start");
|
|
13
12
|
const retestSummarizeTemplate = loadTemplate("mcp", "retest-summarize");
|
|
14
13
|
const retestWorkflowTemplate = loadTemplate("mcp", "retest-workflow");
|
|
15
14
|
export function createRetestPrompts(getContext) {
|
|
@@ -176,64 +175,49 @@ export function createRetestPrompts(getContext) {
|
|
|
176
175
|
},
|
|
177
176
|
{
|
|
178
177
|
name: "init",
|
|
179
|
-
description: "Initialize
|
|
178
|
+
description: "Initialize RetestKit configuration and install agent shortcuts. Run this before any other RetestKit tools.",
|
|
180
179
|
arguments: [
|
|
181
180
|
{
|
|
182
|
-
name: "
|
|
183
|
-
description: "
|
|
181
|
+
name: "targetUrl",
|
|
182
|
+
description: "Target URL for testing (optional - will prompt if not provided)",
|
|
184
183
|
required: false,
|
|
185
184
|
},
|
|
186
185
|
{
|
|
187
|
-
name: "
|
|
188
|
-
description: "
|
|
186
|
+
name: "specsPath",
|
|
187
|
+
description: "Path to store test specs (default: ./specs)",
|
|
189
188
|
required: false,
|
|
190
189
|
},
|
|
191
190
|
{
|
|
192
191
|
name: "agent",
|
|
193
|
-
description: '
|
|
192
|
+
description: 'Agent selection ("auto", "all", or specific agent ID)',
|
|
194
193
|
required: false,
|
|
195
194
|
},
|
|
196
195
|
{
|
|
197
196
|
name: "scope",
|
|
198
|
-
description: '
|
|
197
|
+
description: 'Installation scope ("workspace" or "user")',
|
|
199
198
|
required: false,
|
|
200
199
|
},
|
|
201
200
|
{
|
|
202
201
|
name: "dryRun",
|
|
203
|
-
description: "
|
|
202
|
+
description: "Preview actions without writing files (true/false)",
|
|
204
203
|
required: false,
|
|
205
204
|
},
|
|
206
205
|
],
|
|
207
206
|
async getMessages(args) {
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
},
|
|
219
|
-
},
|
|
220
|
-
];
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
// Shortcut setup mode
|
|
224
|
-
const agent = args.agent || "auto";
|
|
225
|
-
const scope = args.scope || "workspace";
|
|
226
|
-
const dryRun = args.dryRun === "true" ? "true" : "false";
|
|
227
|
-
return [
|
|
228
|
-
{
|
|
229
|
-
role: "user",
|
|
230
|
-
content: {
|
|
231
|
-
type: "text",
|
|
232
|
-
text: interpolate(retestSetupTemplate, { agent, scope, dryRun }),
|
|
233
|
-
},
|
|
207
|
+
const targetUrl = args.targetUrl || "";
|
|
208
|
+
const specsPath = args.specsPath || "./specs";
|
|
209
|
+
const agent = args.agent || "auto";
|
|
210
|
+
const scope = args.scope || "workspace";
|
|
211
|
+
const dryRun = args.dryRun === "true" ? "true" : "false";
|
|
212
|
+
return [
|
|
213
|
+
{
|
|
214
|
+
role: "user",
|
|
215
|
+
content: {
|
|
216
|
+
type: "text",
|
|
217
|
+
text: interpolate(initTemplate, { targetUrl, specsPath, agent, scope, dryRun }),
|
|
234
218
|
},
|
|
235
|
-
|
|
236
|
-
|
|
219
|
+
},
|
|
220
|
+
];
|
|
237
221
|
},
|
|
238
222
|
},
|
|
239
223
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,wEAAwE;AACxE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Initialize RetestKit for this project.
|
|
2
|
+
|
|
3
|
+
This will:
|
|
4
|
+
1. Create configuration file (.mcp/retestkit.json) with target URL and settings
|
|
5
|
+
2. Install /retest shortcuts for your AI coding agent
|
|
6
|
+
3. Guide you to create your first test coverage
|
|
7
|
+
|
|
8
|
+
Call the init tool to start configuration:
|
|
9
|
+
- targetUrl: "${targetUrl}" (optional - will prompt if not provided)
|
|
10
|
+
- specsPath: "${specsPath}" (default: ./specs)
|
|
11
|
+
- agent: "${agent}" (auto, all, or specific agent ID)
|
|
12
|
+
- scope: "${scope}" (workspace or user)
|
|
13
|
+
- dryRun: ${dryRun} (preview without writing)
|
|
14
|
+
|
|
15
|
+
After init completes, use the cover tool to create test coverage for a user flow.
|