@syrin/cli 1.3.2 → 1.4.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/README.md +184 -152
- package/dist/cli/commands/config.d.ts +47 -0
- package/dist/cli/commands/config.js +360 -0
- package/dist/cli/commands/dev.d.ts +6 -0
- package/dist/cli/commands/dev.js +67 -15
- package/dist/cli/commands/doctor.js +49 -13
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.js +89 -18
- package/dist/cli/commands/status.d.ts +10 -0
- package/dist/cli/commands/status.js +162 -0
- package/dist/cli/index.js +211 -12
- package/dist/cli/prompts/init-prompt.d.ts +18 -0
- package/dist/cli/prompts/init-prompt.js +159 -99
- package/dist/cli/utils/command-error-handler.js +2 -5
- package/dist/config/env-checker.d.ts +12 -2
- package/dist/config/env-checker.js +88 -38
- package/dist/config/env-templates.d.ts +15 -0
- package/dist/config/env-templates.js +49 -0
- package/dist/config/generator.js +17 -0
- package/dist/config/global-loader.d.ts +50 -0
- package/dist/config/global-loader.js +244 -0
- package/dist/config/loader.d.ts +28 -0
- package/dist/config/loader.js +95 -9
- package/dist/config/merger.d.ts +37 -0
- package/dist/config/merger.js +68 -0
- package/dist/config/schema.d.ts +26 -1
- package/dist/config/schema.js +73 -8
- package/dist/config/types.d.ts +19 -0
- package/dist/config/types.js +26 -1
- package/dist/constants/messages.d.ts +7 -0
- package/dist/constants/messages.js +8 -0
- package/dist/constants/paths.d.ts +6 -0
- package/dist/constants/paths.js +10 -0
- package/dist/events/emitter.js +7 -7
- package/dist/index.js +0 -0
- package/dist/presentation/config-ui.d.ts +34 -0
- package/dist/presentation/config-ui.js +139 -0
- package/dist/presentation/doctor-ui.d.ts +11 -0
- package/dist/presentation/doctor-ui.js +52 -1
- package/dist/presentation/init-ui.d.ts +9 -0
- package/dist/presentation/init-ui.js +33 -0
- package/dist/runtime/analysis/analyser.js +2 -2
- package/dist/runtime/analysis/rules/warnings/w104-generic-description.d.ts +1 -1
- package/dist/runtime/analysis/rules/warnings/w104-generic-description.js +1 -1
- package/dist/runtime/dev/event-mapper.js +19 -3
- package/dist/runtime/dev/session.d.ts +4 -0
- package/dist/runtime/dev/session.js +52 -3
- package/dist/runtime/llm/ollama.js +4 -4
- package/dist/runtime/mcp/client/manager.js +3 -3
- package/dist/runtime/sandbox/executor.js +5 -5
- package/dist/runtime/test/orchestrator.js +4 -4
- package/dist/utils/editor.d.ts +37 -0
- package/dist/utils/editor.js +137 -0
- package/dist/utils/logger.d.ts +24 -6
- package/dist/utils/logger.js +51 -8
- package/package.json +23 -23
- package/dist/runtime/analysis/rules/errors/e001-missing-output-schema.d.ts +0 -22
- package/dist/runtime/analysis/rules/errors/e001-missing-output-schema.js +0 -30
- package/dist/runtime/analysis/rules/errors/e002-underspecified-input.d.ts +0 -24
- package/dist/runtime/analysis/rules/errors/e002-underspecified-input.js +0 -52
- package/dist/runtime/analysis/rules/errors/e003-type-mismatch.d.ts +0 -23
- package/dist/runtime/analysis/rules/errors/e003-type-mismatch.js +0 -73
- package/dist/runtime/analysis/rules/errors/e004-free-text-propagation.d.ts +0 -23
- package/dist/runtime/analysis/rules/errors/e004-free-text-propagation.js +0 -47
- package/dist/runtime/analysis/rules/errors/e005-tool-ambiguity.d.ts +0 -25
- package/dist/runtime/analysis/rules/errors/e005-tool-ambiguity.js +0 -73
- package/dist/runtime/analysis/rules/errors/e006-param-not-in-description.d.ts +0 -22
- package/dist/runtime/analysis/rules/errors/e006-param-not-in-description.js +0 -57
- package/dist/runtime/analysis/rules/errors/e007-output-not-guaranteed.d.ts +0 -23
- package/dist/runtime/analysis/rules/errors/e007-output-not-guaranteed.js +0 -56
- package/dist/runtime/analysis/rules/errors/e008-circular-dependency.d.ts +0 -22
- package/dist/runtime/analysis/rules/errors/e008-circular-dependency.js +0 -84
- package/dist/runtime/analysis/rules/errors/e009-implicit-user-input.d.ts +0 -23
- package/dist/runtime/analysis/rules/errors/e009-implicit-user-input.js +0 -89
- package/dist/runtime/analysis/rules/errors/e010-non-serializable.d.ts +0 -25
- package/dist/runtime/analysis/rules/errors/e010-non-serializable.js +0 -46
- package/dist/runtime/analysis/rules/errors/e011-missing-tool-description.d.ts +0 -24
- package/dist/runtime/analysis/rules/errors/e011-missing-tool-description.js +0 -33
- package/dist/runtime/analysis/rules/errors/e012-side-effect-detected.d.ts +0 -39
- package/dist/runtime/analysis/rules/errors/e012-side-effect-detected.js +0 -40
- package/dist/runtime/analysis/rules/errors/e013-non-deterministic-output.d.ts +0 -37
- package/dist/runtime/analysis/rules/errors/e013-non-deterministic-output.js +0 -34
- package/dist/runtime/analysis/rules/errors/e013-output-explosion.d.ts +0 -39
- package/dist/runtime/analysis/rules/errors/e013-output-explosion.js +0 -36
- package/dist/runtime/analysis/rules/errors/e014-hidden-dependency.d.ts +0 -42
- package/dist/runtime/analysis/rules/errors/e014-hidden-dependency.js +0 -46
- package/dist/runtime/analysis/rules/errors/e014-output-explosion.d.ts +0 -39
- package/dist/runtime/analysis/rules/errors/e014-output-explosion.js +0 -36
- package/dist/runtime/analysis/rules/errors/e015-hidden-dependency.d.ts +0 -42
- package/dist/runtime/analysis/rules/errors/e015-hidden-dependency.js +0 -46
- package/dist/runtime/analysis/rules/errors/e015-unbounded-execution.d.ts +0 -44
- package/dist/runtime/analysis/rules/errors/e015-unbounded-execution.js +0 -66
- package/dist/runtime/analysis/rules/errors/e016-output-validation-failed.d.ts +0 -43
- package/dist/runtime/analysis/rules/errors/e016-output-validation-failed.js +0 -42
- package/dist/runtime/analysis/rules/errors/e016-unbounded-execution.d.ts +0 -44
- package/dist/runtime/analysis/rules/errors/e016-unbounded-execution.js +0 -66
- package/dist/runtime/analysis/rules/errors/e017-input-validation-failed.d.ts +0 -57
- package/dist/runtime/analysis/rules/errors/e017-input-validation-failed.js +0 -80
- package/dist/runtime/analysis/rules/errors/e017-output-validation-failed.d.ts +0 -43
- package/dist/runtime/analysis/rules/errors/e017-output-validation-failed.js +0 -42
- package/dist/runtime/analysis/rules/errors/e018-input-validation-failed.d.ts +0 -57
- package/dist/runtime/analysis/rules/errors/e018-input-validation-failed.js +0 -80
- package/dist/runtime/analysis/rules/errors/e018-tool-execution-failed.d.ts +0 -38
- package/dist/runtime/analysis/rules/errors/e018-tool-execution-failed.js +0 -37
- package/dist/runtime/analysis/rules/errors/e019-tool-execution-failed.d.ts +0 -38
- package/dist/runtime/analysis/rules/errors/e019-tool-execution-failed.js +0 -37
- package/dist/runtime/analysis/rules/errors/e019-unexpected-test-result.d.ts +0 -65
- package/dist/runtime/analysis/rules/errors/e019-unexpected-test-result.js +0 -109
- package/dist/runtime/analysis/rules/errors/e020-unexpected-test-result.d.ts +0 -65
- package/dist/runtime/analysis/rules/errors/e020-unexpected-test-result.js +0 -109
- package/dist/runtime/analysis/rules/warnings/w001-implicit-dependency.d.ts +0 -22
- package/dist/runtime/analysis/rules/warnings/w001-implicit-dependency.js +0 -39
- package/dist/runtime/analysis/rules/warnings/w002-free-text-without-normalization.d.ts +0 -24
- package/dist/runtime/analysis/rules/warnings/w002-free-text-without-normalization.js +0 -40
- package/dist/runtime/analysis/rules/warnings/w003-missing-examples.d.ts +0 -22
- package/dist/runtime/analysis/rules/warnings/w003-missing-examples.js +0 -84
- package/dist/runtime/analysis/rules/warnings/w004-overloaded-responsibility.d.ts +0 -23
- package/dist/runtime/analysis/rules/warnings/w004-overloaded-responsibility.js +0 -96
- package/dist/runtime/analysis/rules/warnings/w005-generic-description.d.ts +0 -53
- package/dist/runtime/analysis/rules/warnings/w005-generic-description.js +0 -108
- package/dist/runtime/analysis/rules/warnings/w006-optional-as-required.d.ts +0 -22
- package/dist/runtime/analysis/rules/warnings/w006-optional-as-required.js +0 -44
- package/dist/runtime/analysis/rules/warnings/w007-broad-output-schema.d.ts +0 -23
- package/dist/runtime/analysis/rules/warnings/w007-broad-output-schema.js +0 -37
- package/dist/runtime/analysis/rules/warnings/w008-multiple-entry-points.d.ts +0 -22
- package/dist/runtime/analysis/rules/warnings/w008-multiple-entry-points.js +0 -97
- package/dist/runtime/analysis/rules/warnings/w009-hidden-side-effects.d.ts +0 -23
- package/dist/runtime/analysis/rules/warnings/w009-hidden-side-effects.js +0 -88
- package/dist/runtime/analysis/rules/warnings/w010-output-not-reusable.d.ts +0 -22
- package/dist/runtime/analysis/rules/warnings/w010-output-not-reusable.js +0 -81
- package/dist/runtime/analysis/rules/warnings/w021-weak-schema.d.ts +0 -40
- package/dist/runtime/analysis/rules/warnings/w021-weak-schema.js +0 -32
- package/dist/runtime/analysis/rules/warnings/w022-high-entropy-output.d.ts +0 -39
- package/dist/runtime/analysis/rules/warnings/w022-high-entropy-output.js +0 -36
- package/dist/runtime/analysis/rules/warnings/w023-unstable-defaults.d.ts +0 -38
- package/dist/runtime/analysis/rules/warnings/w023-unstable-defaults.js +0 -36
- package/dist/runtime/test/dependency-tracker.d.ts +0 -66
- package/dist/runtime/test/dependency-tracker.js +0 -80
- package/dist/runtime/test/formatters.d.ts +0 -18
- package/dist/runtime/test/formatters.js +0 -172
- package/dist/runtime/test/input-generator.d.ts +0 -33
- package/dist/runtime/test/input-generator.js +0 -498
- package/dist/runtime/test/mcp-root-detector.d.ts +0 -31
- package/dist/runtime/test/mcp-root-detector.js +0 -105
- package/dist/runtime/test/retry-tester.d.ts +0 -44
- package/dist/runtime/test/retry-tester.js +0 -103
- package/dist/runtime/test/synthetic-input-generator.d.ts +0 -11
- package/dist/runtime/test/synthetic-input-generator.js +0 -154
- package/dist/runtime/test/test-runner.d.ts +0 -28
- package/dist/runtime/test/test-runner.js +0 -55
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hidden dependency tracker.
|
|
3
|
-
* Tracks tool calls during execution to detect hidden dependencies.
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Tool call record during execution.
|
|
7
|
-
*/
|
|
8
|
-
export interface ToolCallRecord {
|
|
9
|
-
/** Tool name that was called */
|
|
10
|
-
toolName: string;
|
|
11
|
-
/** Timestamp */
|
|
12
|
-
timestamp: number;
|
|
13
|
-
/** Arguments passed */
|
|
14
|
-
arguments?: Record<string, unknown>;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Dependency tracking result.
|
|
18
|
-
*/
|
|
19
|
-
export interface DependencyTrackingResult {
|
|
20
|
-
/** Whether hidden dependencies were detected */
|
|
21
|
-
detected: boolean;
|
|
22
|
-
/** List of tool calls that are not declared in contract */
|
|
23
|
-
hiddenDependencies: ToolCallRecord[];
|
|
24
|
-
/** List of declared dependencies that don't exist in the MCP server */
|
|
25
|
-
missingDependencies: string[];
|
|
26
|
-
/** Declared dependencies from contract */
|
|
27
|
-
declaredDependencies: string[];
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Dependency tracker for monitoring tool calls.
|
|
31
|
-
* Note: This requires integration with MCP client to intercept tool calls.
|
|
32
|
-
* For v1.3.0, we'll track via a wrapper or client extension.
|
|
33
|
-
*/
|
|
34
|
-
export declare class DependencyTracker {
|
|
35
|
-
private toolCalls;
|
|
36
|
-
private readonly declaredDependencies;
|
|
37
|
-
constructor(declaredDependencies?: string[]);
|
|
38
|
-
/**
|
|
39
|
-
* Record a tool call.
|
|
40
|
-
*/
|
|
41
|
-
recordToolCall(toolName: string, arguments_?: Record<string, unknown>): void;
|
|
42
|
-
/**
|
|
43
|
-
* Get all tool calls.
|
|
44
|
-
*/
|
|
45
|
-
getToolCalls(): readonly ToolCallRecord[];
|
|
46
|
-
/**
|
|
47
|
-
* Detect hidden dependencies (tool calls not declared in contract).
|
|
48
|
-
* Also validates that declared dependencies actually exist.
|
|
49
|
-
* @param availableTools - Set of available tool names from MCP server (optional, for validation)
|
|
50
|
-
*/
|
|
51
|
-
detectHiddenDependencies(availableTools?: Set<string> | string[]): DependencyTrackingResult;
|
|
52
|
-
/**
|
|
53
|
-
* Clear all recorded tool calls.
|
|
54
|
-
*/
|
|
55
|
-
clear(): void;
|
|
56
|
-
/**
|
|
57
|
-
* Get summary of dependencies.
|
|
58
|
-
*/
|
|
59
|
-
getSummary(availableTools?: Set<string> | string[]): {
|
|
60
|
-
totalCalls: number;
|
|
61
|
-
uniqueTools: number;
|
|
62
|
-
hiddenDependencies: number;
|
|
63
|
-
missingDependencies: number;
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=dependency-tracker.d.ts.map
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hidden dependency tracker.
|
|
3
|
-
* Tracks tool calls during execution to detect hidden dependencies.
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Dependency tracker for monitoring tool calls.
|
|
7
|
-
* Note: This requires integration with MCP client to intercept tool calls.
|
|
8
|
-
* For v1.3.0, we'll track via a wrapper or client extension.
|
|
9
|
-
*/
|
|
10
|
-
export class DependencyTracker {
|
|
11
|
-
toolCalls = [];
|
|
12
|
-
declaredDependencies;
|
|
13
|
-
constructor(declaredDependencies = []) {
|
|
14
|
-
this.declaredDependencies = declaredDependencies;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Record a tool call.
|
|
18
|
-
*/
|
|
19
|
-
recordToolCall(toolName, arguments_) {
|
|
20
|
-
this.toolCalls.push({
|
|
21
|
-
toolName,
|
|
22
|
-
timestamp: Date.now(),
|
|
23
|
-
arguments: arguments_,
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Get all tool calls.
|
|
28
|
-
*/
|
|
29
|
-
getToolCalls() {
|
|
30
|
-
return this.toolCalls;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Detect hidden dependencies (tool calls not declared in contract).
|
|
34
|
-
* Also validates that declared dependencies actually exist.
|
|
35
|
-
* @param availableTools - Set of available tool names from MCP server (optional, for validation)
|
|
36
|
-
*/
|
|
37
|
-
detectHiddenDependencies(availableTools) {
|
|
38
|
-
// Check for hidden dependencies (tools called but not declared)
|
|
39
|
-
const hiddenDependencies = this.toolCalls.filter(call => !this.declaredDependencies.includes(call.toolName));
|
|
40
|
-
// Check for missing dependencies (declared but don't exist in MCP server)
|
|
41
|
-
const missingDependencies = [];
|
|
42
|
-
if (availableTools) {
|
|
43
|
-
const availableSet = Array.isArray(availableTools)
|
|
44
|
-
? new Set(availableTools)
|
|
45
|
-
: availableTools;
|
|
46
|
-
for (const declaredDep of this.declaredDependencies) {
|
|
47
|
-
if (!availableSet.has(declaredDep)) {
|
|
48
|
-
missingDependencies.push(declaredDep);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const detected = hiddenDependencies.length > 0 || missingDependencies.length > 0;
|
|
53
|
-
return {
|
|
54
|
-
detected,
|
|
55
|
-
hiddenDependencies,
|
|
56
|
-
missingDependencies,
|
|
57
|
-
declaredDependencies: this.declaredDependencies,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Clear all recorded tool calls.
|
|
62
|
-
*/
|
|
63
|
-
clear() {
|
|
64
|
-
this.toolCalls = [];
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Get summary of dependencies.
|
|
68
|
-
*/
|
|
69
|
-
getSummary(availableTools) {
|
|
70
|
-
const uniqueTools = new Set(this.toolCalls.map(c => c.toolName));
|
|
71
|
-
const result = this.detectHiddenDependencies(availableTools);
|
|
72
|
-
return {
|
|
73
|
-
totalCalls: this.toolCalls.length,
|
|
74
|
-
uniqueTools: uniqueTools.size,
|
|
75
|
-
hiddenDependencies: result.hiddenDependencies.length,
|
|
76
|
-
missingDependencies: result.missingDependencies.length,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=dependency-tracker.js.map
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Test result formatters.
|
|
3
|
-
* Formats test results for CLI and JSON output.
|
|
4
|
-
*/
|
|
5
|
-
import type { TestOrchestratorResult } from './orchestrator.js';
|
|
6
|
-
/**
|
|
7
|
-
* Format test results for CI output (minimal).
|
|
8
|
-
*/
|
|
9
|
-
export declare function formatCIResults(result: TestOrchestratorResult): void;
|
|
10
|
-
/**
|
|
11
|
-
* Format test results for CLI output.
|
|
12
|
-
*/
|
|
13
|
-
export declare function formatCLIResults(result: TestOrchestratorResult): void;
|
|
14
|
-
/**
|
|
15
|
-
* Format test results as JSON.
|
|
16
|
-
*/
|
|
17
|
-
export declare function formatJSONResults(result: TestOrchestratorResult): string;
|
|
18
|
-
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Test result formatters.
|
|
3
|
-
* Formats test results for CLI and JSON output.
|
|
4
|
-
*/
|
|
5
|
-
import { log } from '../../utils/logger.js';
|
|
6
|
-
/**
|
|
7
|
-
* Format test results for CI output (minimal).
|
|
8
|
-
*/
|
|
9
|
-
export function formatCIResults(result) {
|
|
10
|
-
const errors = result.diagnostics.filter(d => d.severity === 'error');
|
|
11
|
-
const warnings = result.diagnostics.filter(d => d.severity === 'warning');
|
|
12
|
-
// CI mode: minimal output, exit codes handled by caller
|
|
13
|
-
if (result.verdict === 'fail') {
|
|
14
|
-
console.log(`✗ Test failed: ${result.toolsFailed} tool(s) failed, ${errors.length} error(s), ${warnings.length} warning(s)`);
|
|
15
|
-
// Print errors only (no warnings in CI)
|
|
16
|
-
for (const error of errors) {
|
|
17
|
-
console.log(`${error.code}: ${error.message}`);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
console.log(`✓ Test passed: ${result.toolsTested} tool(s) tested, ${result.toolsPassed} passed`);
|
|
22
|
-
if (warnings.length > 0) {
|
|
23
|
-
console.log(` ${warnings.length} warning(s) (non-blocking)`);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Format test results for CLI output.
|
|
29
|
-
*/
|
|
30
|
-
export function formatCLIResults(result) {
|
|
31
|
-
log.blank();
|
|
32
|
-
log.heading('Tool Validation Results');
|
|
33
|
-
log.blank();
|
|
34
|
-
// Overall verdict
|
|
35
|
-
if (result.verdict === 'pass') {
|
|
36
|
-
log.checkmark('All tools passed validation');
|
|
37
|
-
}
|
|
38
|
-
else if (result.verdict === 'pass-with-warnings') {
|
|
39
|
-
log.warn('Tools passed with warnings');
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
log.xmark('Tool validation failed');
|
|
43
|
-
}
|
|
44
|
-
log.blank();
|
|
45
|
-
// Summary
|
|
46
|
-
log.heading('Summary:');
|
|
47
|
-
log.labelValue(' Tools tested:', String(result.toolsTested));
|
|
48
|
-
log.labelValue(' Tools passed:', String(result.toolsPassed));
|
|
49
|
-
log.labelValue(' Tools failed:', String(result.toolsFailed));
|
|
50
|
-
const errors = result.diagnostics.filter(d => d.severity === 'error');
|
|
51
|
-
const warnings = result.diagnostics.filter(d => d.severity === 'warning');
|
|
52
|
-
if (errors.length > 0) {
|
|
53
|
-
log.labelValue(' Errors:', String(errors.length));
|
|
54
|
-
}
|
|
55
|
-
if (warnings.length > 0) {
|
|
56
|
-
log.labelValue(' Warnings:', String(warnings.length));
|
|
57
|
-
}
|
|
58
|
-
log.blank();
|
|
59
|
-
// Tool results
|
|
60
|
-
if (result.toolResults.length > 0) {
|
|
61
|
-
log.heading('Tool Results:');
|
|
62
|
-
for (const toolResult of result.toolResults) {
|
|
63
|
-
log.blank();
|
|
64
|
-
const status = toolResult.passed ? log.tick() : log.cross();
|
|
65
|
-
log.plain(` ${status} ${log.styleText(toolResult.toolName, 'bold')}`);
|
|
66
|
-
// Summary
|
|
67
|
-
log.labelValue(' Executions:', `${toolResult.summary.successfulExecutions}/${toolResult.summary.totalExecutions} successful`);
|
|
68
|
-
if (toolResult.summary.testsPassed !== undefined &&
|
|
69
|
-
toolResult.summary.testsFailed !== undefined) {
|
|
70
|
-
const totalTests = toolResult.summary.testsPassed + toolResult.summary.testsFailed;
|
|
71
|
-
log.labelValue(' Tests:', `${toolResult.summary.testsPassed}/${totalTests} passed (expectations matched)`);
|
|
72
|
-
}
|
|
73
|
-
if (toolResult.summary.failedExecutions > 0) {
|
|
74
|
-
log.labelValue(' Failed:', String(toolResult.summary.failedExecutions));
|
|
75
|
-
}
|
|
76
|
-
if (toolResult.summary.timedOutExecutions > 0) {
|
|
77
|
-
log.labelValue(' Timed out:', String(toolResult.summary.timedOutExecutions));
|
|
78
|
-
}
|
|
79
|
-
// Diagnostics
|
|
80
|
-
if (toolResult.diagnostics.length > 0) {
|
|
81
|
-
const toolErrors = toolResult.diagnostics.filter(d => d.severity === 'error');
|
|
82
|
-
const toolWarnings = toolResult.diagnostics.filter(d => d.severity === 'warning');
|
|
83
|
-
if (toolErrors.length > 0) {
|
|
84
|
-
log.plain(' Errors:');
|
|
85
|
-
for (const error of toolErrors) {
|
|
86
|
-
log.error(` ${error.code}: ${error.message}`);
|
|
87
|
-
// Show test context if available
|
|
88
|
-
const context = error.context;
|
|
89
|
-
if (context?.testName) {
|
|
90
|
-
log.plain(` Test: ${context.testName}`);
|
|
91
|
-
}
|
|
92
|
-
if (context?.testInput &&
|
|
93
|
-
Object.keys(context.testInput).length > 0) {
|
|
94
|
-
const inputStr = JSON.stringify(context.testInput, null, 2)
|
|
95
|
-
.split('\n')
|
|
96
|
-
.map((line, idx) => (idx === 0 ? line : ` ${line}`))
|
|
97
|
-
.join('\n');
|
|
98
|
-
log.plain(` Input: ${inputStr}`);
|
|
99
|
-
}
|
|
100
|
-
if (context?.expectedOutputSchema) {
|
|
101
|
-
log.plain(` Expected output schema: ${context.expectedOutputSchema}`);
|
|
102
|
-
}
|
|
103
|
-
// Show parsed error details if available
|
|
104
|
-
if (context?.parsedError) {
|
|
105
|
-
const parsed = context.parsedError;
|
|
106
|
-
if (parsed.field) {
|
|
107
|
-
if (parsed.errorType === 'missing_argument') {
|
|
108
|
-
log.plain(` Field "${parsed.field}" is required but was not provided`);
|
|
109
|
-
}
|
|
110
|
-
else if (parsed.inputType) {
|
|
111
|
-
log.plain(` Field "${parsed.field}" received ${parsed.inputType}${parsed.inputValue && parsed.inputValue !== '{}' ? ` (${parsed.inputValue})` : ''}`);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
if (error.suggestion) {
|
|
116
|
-
log.plain(` Suggestion: ${error.suggestion}`);
|
|
117
|
-
}
|
|
118
|
-
log.blank();
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
if (toolWarnings.length > 0) {
|
|
122
|
-
log.plain(' Warnings:');
|
|
123
|
-
for (const warning of toolWarnings) {
|
|
124
|
-
log.warn(` ${warning.code}: ${warning.message}`);
|
|
125
|
-
if (warning.suggestion) {
|
|
126
|
-
log.plain(` Suggestion: ${warning.suggestion}`);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
log.blank();
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Format test results as JSON.
|
|
137
|
-
*/
|
|
138
|
-
export function formatJSONResults(result) {
|
|
139
|
-
const json = {
|
|
140
|
-
verdict: result.verdict,
|
|
141
|
-
summary: {
|
|
142
|
-
toolsTested: result.toolsTested,
|
|
143
|
-
toolsPassed: result.toolsPassed,
|
|
144
|
-
toolsFailed: result.toolsFailed,
|
|
145
|
-
errors: result.diagnostics.filter(d => d.severity === 'error').length,
|
|
146
|
-
warnings: result.diagnostics.filter(d => d.severity === 'warning').length,
|
|
147
|
-
},
|
|
148
|
-
diagnostics: result.diagnostics.map(d => ({
|
|
149
|
-
code: d.code,
|
|
150
|
-
severity: d.severity,
|
|
151
|
-
message: d.message,
|
|
152
|
-
tool: d.tool,
|
|
153
|
-
field: d.field,
|
|
154
|
-
suggestion: d.suggestion,
|
|
155
|
-
context: d.context,
|
|
156
|
-
})),
|
|
157
|
-
tools: result.toolResults.map(tr => ({
|
|
158
|
-
toolName: tr.toolName,
|
|
159
|
-
passed: tr.passed,
|
|
160
|
-
summary: tr.summary,
|
|
161
|
-
diagnostics: tr.diagnostics.map(d => ({
|
|
162
|
-
code: d.code,
|
|
163
|
-
severity: d.severity,
|
|
164
|
-
message: d.message,
|
|
165
|
-
suggestion: d.suggestion,
|
|
166
|
-
context: d.context,
|
|
167
|
-
})),
|
|
168
|
-
})),
|
|
169
|
-
};
|
|
170
|
-
return JSON.stringify(json, null, 2);
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=formatters.js.map
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Synthetic input generator.
|
|
3
|
-
* Generates test inputs from JSON Schema definitions.
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* JSON Schema field interface.
|
|
7
|
-
*/
|
|
8
|
-
interface JSONSchemaField {
|
|
9
|
-
type?: string | string[];
|
|
10
|
-
description?: string;
|
|
11
|
-
required?: string[];
|
|
12
|
-
properties?: Record<string, JSONSchemaField>;
|
|
13
|
-
items?: JSONSchemaField | JSONSchemaField[];
|
|
14
|
-
$ref?: string;
|
|
15
|
-
enum?: unknown[];
|
|
16
|
-
pattern?: string;
|
|
17
|
-
example?: unknown;
|
|
18
|
-
examples?: unknown[];
|
|
19
|
-
nullable?: boolean;
|
|
20
|
-
default?: unknown;
|
|
21
|
-
minimum?: number;
|
|
22
|
-
maximum?: number;
|
|
23
|
-
}
|
|
24
|
-
type JSONSchema = JSONSchemaField | Record<string, unknown> | unknown;
|
|
25
|
-
/**
|
|
26
|
-
* Generate test inputs from a JSON Schema.
|
|
27
|
-
* Includes both predictable patterns and agent-like unpredictable variations.
|
|
28
|
-
* @param schema - JSON Schema definition
|
|
29
|
-
* @returns Array of generated input objects
|
|
30
|
-
*/
|
|
31
|
-
export declare function generateInputsFromSchema(schema: JSONSchema): Array<Record<string, unknown>>;
|
|
32
|
-
export {};
|
|
33
|
-
//# sourceMappingURL=input-generator.d.ts.map
|