@qulib/core 0.3.1 → 0.4.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/analyze.d.ts +2 -0
- package/dist/analyze.d.ts.map +1 -1
- package/dist/analyze.js +29 -1
- package/dist/harness/decision-logger.d.ts +1 -0
- package/dist/harness/decision-logger.d.ts.map +1 -1
- package/dist/harness/decision-logger.js +15 -22
- package/dist/harness/run-options.d.ts +3 -0
- package/dist/harness/run-options.d.ts.map +1 -1
- package/dist/harness/state-manager.d.ts +3 -0
- package/dist/harness/state-manager.d.ts.map +1 -1
- package/dist/harness/state-manager.js +15 -18
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/llm/cost-intelligence.d.ts +13 -0
- package/dist/llm/cost-intelligence.d.ts.map +1 -1
- package/dist/llm/cost-intelligence.js +13 -0
- package/dist/llm/provider-registry.d.ts +9 -0
- package/dist/llm/provider-registry.d.ts.map +1 -0
- package/dist/llm/provider-registry.js +15 -0
- package/dist/llm/provider.d.ts +9 -11
- package/dist/llm/provider.d.ts.map +1 -1
- package/dist/llm/provider.interface.d.ts +16 -0
- package/dist/llm/provider.interface.d.ts.map +1 -0
- package/dist/llm/provider.interface.js +1 -0
- package/dist/llm/provider.js +8 -51
- package/dist/llm/providers/anthropic.d.ts +16 -0
- package/dist/llm/providers/anthropic.d.ts.map +1 -0
- package/dist/llm/providers/anthropic.js +104 -0
- package/dist/phases/act.d.ts.map +1 -1
- package/dist/phases/act.js +20 -6
- package/dist/phases/observe.d.ts.map +1 -1
- package/dist/phases/observe.js +20 -2
- package/dist/phases/think-finalize.d.ts.map +1 -1
- package/dist/phases/think-finalize.js +12 -3
- package/dist/phases/think.d.ts.map +1 -1
- package/dist/phases/think.js +14 -2
- package/dist/schemas/automation-maturity.schema.d.ts +78 -0
- package/dist/schemas/automation-maturity.schema.d.ts.map +1 -0
- package/dist/schemas/automation-maturity.schema.js +24 -0
- package/dist/schemas/config.schema.d.ts +37 -0
- package/dist/schemas/config.schema.d.ts.map +1 -1
- package/dist/schemas/config.schema.js +11 -0
- package/dist/schemas/gap-analysis.schema.d.ts +6 -6
- package/dist/schemas/index.d.ts +2 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +2 -1
- package/dist/schemas/public-surface.schema.d.ts +4 -4
- package/dist/schemas/repo-analysis.schema.d.ts +134 -0
- package/dist/schemas/repo-analysis.schema.d.ts.map +1 -1
- package/dist/schemas/repo-analysis.schema.js +29 -0
- package/dist/telemetry/emit.d.ts +3 -0
- package/dist/telemetry/emit.d.ts.map +1 -0
- package/dist/telemetry/emit.js +11 -0
- package/dist/telemetry/telemetry.interface.d.ts +13 -0
- package/dist/telemetry/telemetry.interface.d.ts.map +1 -0
- package/dist/telemetry/telemetry.interface.js +3 -0
- package/dist/tools/automation-maturity.d.ts +4 -0
- package/dist/tools/automation-maturity.d.ts.map +1 -0
- package/dist/tools/automation-maturity.js +163 -0
- package/dist/tools/framework-detector.d.ts +15 -0
- package/dist/tools/framework-detector.d.ts.map +1 -0
- package/dist/tools/framework-detector.js +153 -0
- package/dist/tools/gap-engine.d.ts +1 -1
- package/dist/tools/gap-engine.d.ts.map +1 -1
- package/dist/tools/gap-engine.js +13 -3
- package/dist/tools/repo-scanner.d.ts +16 -0
- package/dist/tools/repo-scanner.d.ts.map +1 -1
- package/dist/tools/repo-scanner.js +31 -2
- package/package.json +1 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { emitTelemetry } from '../../telemetry/emit.js';
|
|
2
|
+
const DEFAULT_MODEL = 'claude-sonnet-4-20250514';
|
|
3
|
+
function estimateTokensFromChars(chars) {
|
|
4
|
+
return Math.max(0, Math.ceil(chars / 4));
|
|
5
|
+
}
|
|
6
|
+
export class AnthropicProvider {
|
|
7
|
+
name = 'anthropic';
|
|
8
|
+
model;
|
|
9
|
+
telemetry;
|
|
10
|
+
sessionId;
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.model = options?.model ?? DEFAULT_MODEL;
|
|
13
|
+
this.telemetry = options?.telemetry;
|
|
14
|
+
this.sessionId = options?.sessionId ?? 'anonymous';
|
|
15
|
+
}
|
|
16
|
+
async call(prompt, maxOutputTokens) {
|
|
17
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
18
|
+
if (!apiKey)
|
|
19
|
+
throw new Error('ANTHROPIC_API_KEY is not set');
|
|
20
|
+
const started = Date.now();
|
|
21
|
+
emitTelemetry(this.telemetry, 'llm.call.started', this.sessionId, {
|
|
22
|
+
model: this.model,
|
|
23
|
+
promptLength: prompt.length,
|
|
24
|
+
provider: this.name,
|
|
25
|
+
});
|
|
26
|
+
try {
|
|
27
|
+
const response = await fetch('https://api.anthropic.com/v1/messages', {
|
|
28
|
+
method: 'POST',
|
|
29
|
+
headers: {
|
|
30
|
+
'x-api-key': apiKey,
|
|
31
|
+
'anthropic-version': '2023-06-01',
|
|
32
|
+
'content-type': 'application/json',
|
|
33
|
+
},
|
|
34
|
+
body: JSON.stringify({
|
|
35
|
+
model: this.model,
|
|
36
|
+
max_tokens: maxOutputTokens,
|
|
37
|
+
messages: [{ role: 'user', content: prompt }],
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
if (!response.ok) {
|
|
41
|
+
const errBody = await response.text();
|
|
42
|
+
emitTelemetry(this.telemetry, 'llm.call.failed', this.sessionId, {
|
|
43
|
+
model: this.model,
|
|
44
|
+
error: `${response.status} ${errBody.slice(0, 500)}`,
|
|
45
|
+
provider: this.name,
|
|
46
|
+
});
|
|
47
|
+
throw new Error(`LLM call failed: ${response.status} ${errBody}`);
|
|
48
|
+
}
|
|
49
|
+
const data = (await response.json());
|
|
50
|
+
const text = data.content.find((b) => b.type === 'text')?.text ?? '';
|
|
51
|
+
const inTok = data.usage?.input_tokens;
|
|
52
|
+
const outTok = data.usage?.output_tokens;
|
|
53
|
+
const durationMs = Date.now() - started;
|
|
54
|
+
let result;
|
|
55
|
+
if (typeof inTok === 'number' && typeof outTok === 'number') {
|
|
56
|
+
result = {
|
|
57
|
+
text,
|
|
58
|
+
usage: {
|
|
59
|
+
provider: this.name,
|
|
60
|
+
model: data.model ?? this.model,
|
|
61
|
+
inputTokens: inTok,
|
|
62
|
+
outputTokens: outTok,
|
|
63
|
+
dataQuality: 'actual',
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
const inputTokens = estimateTokensFromChars(prompt.length);
|
|
69
|
+
const outputTokens = estimateTokensFromChars(text.length);
|
|
70
|
+
result = {
|
|
71
|
+
text,
|
|
72
|
+
usage: {
|
|
73
|
+
provider: this.name,
|
|
74
|
+
model: data.model ?? this.model,
|
|
75
|
+
inputTokens,
|
|
76
|
+
outputTokens,
|
|
77
|
+
dataQuality: 'estimated',
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const u = result.usage;
|
|
82
|
+
emitTelemetry(this.telemetry, 'llm.call.completed', this.sessionId, {
|
|
83
|
+
model: this.model,
|
|
84
|
+
inputTokens: u.inputTokens,
|
|
85
|
+
outputTokens: u.outputTokens,
|
|
86
|
+
durationMs,
|
|
87
|
+
provider: this.name,
|
|
88
|
+
});
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
if (err instanceof Error && err.message.startsWith('LLM call failed:')) {
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
95
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
96
|
+
emitTelemetry(this.telemetry, 'llm.call.failed', this.sessionId, {
|
|
97
|
+
model: this.model,
|
|
98
|
+
error: msg.slice(0, 500),
|
|
99
|
+
provider: this.name,
|
|
100
|
+
});
|
|
101
|
+
throw err;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
package/dist/phases/act.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"act.d.ts","sourceRoot":"","sources":["../../src/phases/act.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAIrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"act.d.ts","sourceRoot":"","sources":["../../src/phases/act.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAIrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIrE,wBAAsB,GAAG,CACvB,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,aAAa,EACrB,SAAS,GAAE,mBAA8C,GACxD,OAAO,CAAC,IAAI,CAAC,CA6Df"}
|
package/dist/phases/act.js
CHANGED
|
@@ -2,20 +2,30 @@ import { join } from 'node:path';
|
|
|
2
2
|
import { writeJsonReport } from '../reporters/json-reporter.js';
|
|
3
3
|
import { writeMarkdownReport } from '../reporters/markdown-reporter.js';
|
|
4
4
|
import { logDecision } from '../harness/decision-logger.js';
|
|
5
|
+
import { emitTelemetry } from '../telemetry/emit.js';
|
|
6
|
+
import { resolveScanStateBaseDir } from '../harness/state-manager.js';
|
|
5
7
|
export async function act(analysis, config, artifacts = { writeArtifacts: true }) {
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
+
const sessionId = artifacts.telemetrySessionId ?? 'none';
|
|
9
|
+
const reportDir = join(process.cwd(), 'output');
|
|
10
|
+
const logOpts = {
|
|
11
|
+
persist: artifacts.writeArtifacts,
|
|
12
|
+
memory: artifacts.decisionMemory,
|
|
13
|
+
outputDir: config.outputDir,
|
|
14
|
+
};
|
|
8
15
|
const log = artifacts.writeArtifacts ? console.log : console.error;
|
|
16
|
+
emitTelemetry(artifacts.telemetry, 'phase.act.started', sessionId, {
|
|
17
|
+
writeArtifacts: artifacts.writeArtifacts,
|
|
18
|
+
});
|
|
9
19
|
if (artifacts.writeArtifacts) {
|
|
10
|
-
await writeJsonReport(analysis,
|
|
11
|
-
await writeMarkdownReport(analysis,
|
|
20
|
+
await writeJsonReport(analysis, reportDir);
|
|
21
|
+
await writeMarkdownReport(analysis, reportDir);
|
|
12
22
|
}
|
|
13
23
|
await logDecision({
|
|
14
24
|
timestamp: new Date().toISOString(),
|
|
15
25
|
phase: 'act',
|
|
16
26
|
decision: 'reports-written',
|
|
17
27
|
reason: artifacts.writeArtifacts
|
|
18
|
-
? `Wrote JSON and Markdown reports to ${
|
|
28
|
+
? `Wrote JSON and Markdown reports to ${reportDir}`
|
|
19
29
|
: 'Skipped writing reports (ephemeral run)',
|
|
20
30
|
metadata: {
|
|
21
31
|
gapCount: analysis.gaps.length,
|
|
@@ -24,6 +34,10 @@ export async function act(analysis, config, artifacts = { writeArtifacts: true }
|
|
|
24
34
|
requireHumanReview: config.requireHumanReview,
|
|
25
35
|
},
|
|
26
36
|
}, logOpts);
|
|
37
|
+
emitTelemetry(artifacts.telemetry, 'phase.act.completed', sessionId, {
|
|
38
|
+
gapCount: analysis.gaps.length,
|
|
39
|
+
wroteReports: artifacts.writeArtifacts,
|
|
40
|
+
});
|
|
27
41
|
log('\n[qulib] Analysis complete');
|
|
28
42
|
log(` Gaps found: ${analysis.gaps.length}`);
|
|
29
43
|
log(` Scenarios generated: ${analysis.scenarios.length}`);
|
|
@@ -35,7 +49,7 @@ export async function act(analysis, config, artifacts = { writeArtifacts: true }
|
|
|
35
49
|
log('\n[qulib] Human review required before applying any generated output.');
|
|
36
50
|
if (artifacts.writeArtifacts) {
|
|
37
51
|
log(' Reports: output/report.json and output/report.md');
|
|
38
|
-
log(
|
|
52
|
+
log(` Decisions: ${join(resolveScanStateBaseDir(config.outputDir), 'decision-log.json')}`);
|
|
39
53
|
}
|
|
40
54
|
else {
|
|
41
55
|
log(' Ephemeral run: inspect JSON printed to stdout (no files written).');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../src/phases/observe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACjG,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAK3F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../src/phases/observe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACjG,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAK3F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,aAAa,EACrB,SAAS,GAAE,mBAA8C,GACxD,OAAO,CAAC,aAAa,CAAC,CAuExB"}
|
package/dist/phases/observe.js
CHANGED
|
@@ -4,10 +4,20 @@ import { createExplorer } from '../tools/explorer-factory.js';
|
|
|
4
4
|
import { scanRepo } from '../tools/repo-scanner.js';
|
|
5
5
|
import { StateManager } from '../harness/state-manager.js';
|
|
6
6
|
import { logDecision } from '../harness/decision-logger.js';
|
|
7
|
+
import { emitTelemetry } from '../telemetry/emit.js';
|
|
7
8
|
export async function observe(baseUrl, repoPath, config, artifacts = { writeArtifacts: true }) {
|
|
9
|
+
const sessionId = artifacts.telemetrySessionId ?? 'none';
|
|
8
10
|
const explorer = createExplorer(config.explorer);
|
|
9
|
-
const stateManager = new StateManager();
|
|
10
|
-
const logOpts = {
|
|
11
|
+
const stateManager = new StateManager(config.outputDir);
|
|
12
|
+
const logOpts = {
|
|
13
|
+
persist: artifacts.writeArtifacts,
|
|
14
|
+
memory: artifacts.decisionMemory,
|
|
15
|
+
outputDir: config.outputDir,
|
|
16
|
+
};
|
|
17
|
+
emitTelemetry(artifacts.telemetry, 'phase.observe.started', sessionId, {
|
|
18
|
+
baseUrl,
|
|
19
|
+
hasRepoPath: Boolean(repoPath),
|
|
20
|
+
});
|
|
11
21
|
const rawRoutes = await explorer.explore(baseUrl, config, artifacts);
|
|
12
22
|
const routes = RouteInventorySchema.parse(rawRoutes);
|
|
13
23
|
if (artifacts.writeArtifacts) {
|
|
@@ -29,6 +39,10 @@ export async function observe(baseUrl, repoPath, config, artifacts = { writeArti
|
|
|
29
39
|
if (repoPath) {
|
|
30
40
|
const rawRepo = await scanRepo(repoPath);
|
|
31
41
|
repo = RepoAnalysisSchema.parse(rawRepo);
|
|
42
|
+
emitTelemetry(artifacts.telemetry, 'repo.scanned', sessionId, {
|
|
43
|
+
routeCount: repo.routes.length,
|
|
44
|
+
testFileCount: repo.testFiles.length,
|
|
45
|
+
});
|
|
32
46
|
if (artifacts.writeArtifacts) {
|
|
33
47
|
await stateManager.writeState('repo-inventory.json', repo, RepoAnalysisSchema);
|
|
34
48
|
}
|
|
@@ -44,5 +58,9 @@ export async function observe(baseUrl, repoPath, config, artifacts = { writeArti
|
|
|
44
58
|
},
|
|
45
59
|
}, logOpts);
|
|
46
60
|
}
|
|
61
|
+
emitTelemetry(artifacts.telemetry, 'phase.observe.completed', sessionId, {
|
|
62
|
+
routeCount: routes.routes.length,
|
|
63
|
+
repoScanned: Boolean(repo),
|
|
64
|
+
});
|
|
47
65
|
return { routes, repo };
|
|
48
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"think-finalize.d.ts","sourceRoot":"","sources":["../../src/phases/think-finalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACnG,OAAO,EAA4C,KAAK,WAAW,EAAwB,MAAM,mCAAmC,CAAC;AAQrI,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,CAAC;AAEtG,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,aAAa,EACrB,SAAS,GAAE,mBAA8C,EACzD,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,sBAAsB,GAAG,mBAAmB,GAAG,MAAM,CAAC,GAC9F,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"think-finalize.d.ts","sourceRoot":"","sources":["../../src/phases/think-finalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACnG,OAAO,EAA4C,KAAK,WAAW,EAAwB,MAAM,mCAAmC,CAAC;AAQrI,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,CAAC;AAEtG,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,aAAa,EACrB,SAAS,GAAE,mBAA8C,EACzD,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,sBAAsB,GAAG,mBAAmB,GAAG,MAAM,CAAC,GAC9F,OAAO,CAAC,WAAW,CAAC,CAiLtB"}
|
|
@@ -7,8 +7,12 @@ import { buildGapPrompt } from '../llm/context-builder.js';
|
|
|
7
7
|
import { assembleCostIntelligence } from '../llm/cost-intelligence.js';
|
|
8
8
|
import { hashForCostIntelligence } from '../llm/content-hash.js';
|
|
9
9
|
export async function finalizeGapAnalysisFromDraft(draft, config, artifacts = { writeArtifacts: true }, costContext) {
|
|
10
|
-
const stateManager = new StateManager();
|
|
11
|
-
const logOpts = {
|
|
10
|
+
const stateManager = new StateManager(config.outputDir);
|
|
11
|
+
const logOpts = {
|
|
12
|
+
persist: artifacts.writeArtifacts,
|
|
13
|
+
memory: artifacts.decisionMemory,
|
|
14
|
+
outputDir: config.outputDir,
|
|
15
|
+
};
|
|
12
16
|
const partialAnalysis = GapAnalysisSchema.parse({
|
|
13
17
|
...draft,
|
|
14
18
|
scenarios: [],
|
|
@@ -60,7 +64,12 @@ export async function finalizeGapAnalysisFromDraft(draft, config, artifacts = {
|
|
|
60
64
|
const prompt = buildGapPrompt(partialAnalysis.gaps, config.testGenerationLimit);
|
|
61
65
|
const promptHash = hashForCostIntelligence(prompt);
|
|
62
66
|
try {
|
|
63
|
-
const llmResult = await callLLM(prompt, maxOut
|
|
67
|
+
const llmResult = await callLLM(prompt, maxOut, {
|
|
68
|
+
llmProvider: config.llmProvider,
|
|
69
|
+
llmModel: config.llmModel,
|
|
70
|
+
telemetry: artifacts.telemetry,
|
|
71
|
+
telemetrySessionId: artifacts.telemetrySessionId,
|
|
72
|
+
});
|
|
64
73
|
const resultHash = hashForCostIntelligence(llmResult.text);
|
|
65
74
|
const usage = llmResult.usage;
|
|
66
75
|
llmRecords.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"think.d.ts","sourceRoot":"","sources":["../../src/phases/think.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"think.d.ts","sourceRoot":"","sources":["../../src/phases/think.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIrE,wBAAsB,KAAK,CACzB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,EACrB,SAAS,GAAE,mBAA8C,GACxD,OAAO,CAAC,WAAW,CAAC,CAmDtB;AAED,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACnE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/phases/think.js
CHANGED
|
@@ -2,9 +2,16 @@ import { GapAnalysisSchema } from '../schemas/gap-analysis.schema.js';
|
|
|
2
2
|
import { analyzeGaps } from '../tools/gap-engine.js';
|
|
3
3
|
import { logDecision } from '../harness/decision-logger.js';
|
|
4
4
|
import { finalizeGapAnalysisFromDraft } from './think-finalize.js';
|
|
5
|
+
import { emitTelemetry } from '../telemetry/emit.js';
|
|
5
6
|
export async function think(observed, config, artifacts = { writeArtifacts: true }) {
|
|
7
|
+
const sessionId = artifacts.telemetrySessionId ?? 'none';
|
|
6
8
|
const mode = observed.repo ? 'url-repo' : 'url-only';
|
|
7
|
-
const logOpts = {
|
|
9
|
+
const logOpts = {
|
|
10
|
+
persist: artifacts.writeArtifacts,
|
|
11
|
+
memory: artifacts.decisionMemory,
|
|
12
|
+
outputDir: config.outputDir,
|
|
13
|
+
};
|
|
14
|
+
emitTelemetry(artifacts.telemetry, 'phase.think.started', sessionId, { mode });
|
|
8
15
|
const gapBlock = analyzeGaps(observed.routes, observed.repo, mode, config);
|
|
9
16
|
const draft = {
|
|
10
17
|
analyzedAt: gapBlock.analyzedAt,
|
|
@@ -31,6 +38,11 @@ export async function think(observed, config, artifacts = { writeArtifacts: true
|
|
|
31
38
|
releaseConfidence: partialAnalysis.releaseConfidence,
|
|
32
39
|
},
|
|
33
40
|
}, logOpts);
|
|
34
|
-
|
|
41
|
+
const finalized = await finalizeGapAnalysisFromDraft(draft, config, artifacts);
|
|
42
|
+
emitTelemetry(artifacts.telemetry, 'phase.think.completed', sessionId, {
|
|
43
|
+
gapCount: finalized.gaps.length,
|
|
44
|
+
mode: finalized.mode,
|
|
45
|
+
});
|
|
46
|
+
return finalized;
|
|
35
47
|
}
|
|
36
48
|
export { finalizeGapAnalysisFromDraft } from './think-finalize.js';
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const AutomationMaturityDimensionSchema: z.ZodObject<{
|
|
3
|
+
dimension: z.ZodEnum<["test-coverage-breadth", "framework-adoption", "test-id-hygiene", "ci-integration", "auth-test-coverage", "component-test-ratio"]>;
|
|
4
|
+
score: z.ZodNumber;
|
|
5
|
+
weight: z.ZodNumber;
|
|
6
|
+
evidence: z.ZodArray<z.ZodString, "many">;
|
|
7
|
+
recommendations: z.ZodArray<z.ZodString, "many">;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
recommendations: string[];
|
|
10
|
+
dimension: "test-coverage-breadth" | "framework-adoption" | "test-id-hygiene" | "ci-integration" | "auth-test-coverage" | "component-test-ratio";
|
|
11
|
+
score: number;
|
|
12
|
+
weight: number;
|
|
13
|
+
evidence: string[];
|
|
14
|
+
}, {
|
|
15
|
+
recommendations: string[];
|
|
16
|
+
dimension: "test-coverage-breadth" | "framework-adoption" | "test-id-hygiene" | "ci-integration" | "auth-test-coverage" | "component-test-ratio";
|
|
17
|
+
score: number;
|
|
18
|
+
weight: number;
|
|
19
|
+
evidence: string[];
|
|
20
|
+
}>;
|
|
21
|
+
export declare const AutomationMaturitySchema: z.ZodObject<{
|
|
22
|
+
computedAt: z.ZodString;
|
|
23
|
+
repoPath: z.ZodString;
|
|
24
|
+
overallScore: z.ZodNumber;
|
|
25
|
+
level: z.ZodNumber;
|
|
26
|
+
label: z.ZodString;
|
|
27
|
+
dimensions: z.ZodArray<z.ZodObject<{
|
|
28
|
+
dimension: z.ZodEnum<["test-coverage-breadth", "framework-adoption", "test-id-hygiene", "ci-integration", "auth-test-coverage", "component-test-ratio"]>;
|
|
29
|
+
score: z.ZodNumber;
|
|
30
|
+
weight: z.ZodNumber;
|
|
31
|
+
evidence: z.ZodArray<z.ZodString, "many">;
|
|
32
|
+
recommendations: z.ZodArray<z.ZodString, "many">;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
recommendations: string[];
|
|
35
|
+
dimension: "test-coverage-breadth" | "framework-adoption" | "test-id-hygiene" | "ci-integration" | "auth-test-coverage" | "component-test-ratio";
|
|
36
|
+
score: number;
|
|
37
|
+
weight: number;
|
|
38
|
+
evidence: string[];
|
|
39
|
+
}, {
|
|
40
|
+
recommendations: string[];
|
|
41
|
+
dimension: "test-coverage-breadth" | "framework-adoption" | "test-id-hygiene" | "ci-integration" | "auth-test-coverage" | "component-test-ratio";
|
|
42
|
+
score: number;
|
|
43
|
+
weight: number;
|
|
44
|
+
evidence: string[];
|
|
45
|
+
}>, "many">;
|
|
46
|
+
topRecommendations: z.ZodArray<z.ZodString, "many">;
|
|
47
|
+
}, "strip", z.ZodTypeAny, {
|
|
48
|
+
label: string;
|
|
49
|
+
level: number;
|
|
50
|
+
computedAt: string;
|
|
51
|
+
repoPath: string;
|
|
52
|
+
overallScore: number;
|
|
53
|
+
dimensions: {
|
|
54
|
+
recommendations: string[];
|
|
55
|
+
dimension: "test-coverage-breadth" | "framework-adoption" | "test-id-hygiene" | "ci-integration" | "auth-test-coverage" | "component-test-ratio";
|
|
56
|
+
score: number;
|
|
57
|
+
weight: number;
|
|
58
|
+
evidence: string[];
|
|
59
|
+
}[];
|
|
60
|
+
topRecommendations: string[];
|
|
61
|
+
}, {
|
|
62
|
+
label: string;
|
|
63
|
+
level: number;
|
|
64
|
+
computedAt: string;
|
|
65
|
+
repoPath: string;
|
|
66
|
+
overallScore: number;
|
|
67
|
+
dimensions: {
|
|
68
|
+
recommendations: string[];
|
|
69
|
+
dimension: "test-coverage-breadth" | "framework-adoption" | "test-id-hygiene" | "ci-integration" | "auth-test-coverage" | "component-test-ratio";
|
|
70
|
+
score: number;
|
|
71
|
+
weight: number;
|
|
72
|
+
evidence: string[];
|
|
73
|
+
}[];
|
|
74
|
+
topRecommendations: string[];
|
|
75
|
+
}>;
|
|
76
|
+
export type AutomationMaturityDimension = z.infer<typeof AutomationMaturityDimensionSchema>;
|
|
77
|
+
export type AutomationMaturity = z.infer<typeof AutomationMaturitySchema>;
|
|
78
|
+
//# sourceMappingURL=automation-maturity.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automation-maturity.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/automation-maturity.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;EAa5C,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQnC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAC5F,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const AutomationMaturityDimensionSchema = z.object({
|
|
3
|
+
dimension: z.enum([
|
|
4
|
+
'test-coverage-breadth',
|
|
5
|
+
'framework-adoption',
|
|
6
|
+
'test-id-hygiene',
|
|
7
|
+
'ci-integration',
|
|
8
|
+
'auth-test-coverage',
|
|
9
|
+
'component-test-ratio',
|
|
10
|
+
]),
|
|
11
|
+
score: z.number().min(0).max(100),
|
|
12
|
+
weight: z.number().min(0).max(1),
|
|
13
|
+
evidence: z.array(z.string()),
|
|
14
|
+
recommendations: z.array(z.string()),
|
|
15
|
+
});
|
|
16
|
+
export const AutomationMaturitySchema = z.object({
|
|
17
|
+
computedAt: z.string().datetime(),
|
|
18
|
+
repoPath: z.string(),
|
|
19
|
+
overallScore: z.number().min(0).max(100),
|
|
20
|
+
level: z.number().int().min(1).max(5),
|
|
21
|
+
label: z.string(),
|
|
22
|
+
dimensions: z.array(AutomationMaturityDimensionSchema),
|
|
23
|
+
topRecommendations: z.array(z.string()),
|
|
24
|
+
});
|
|
@@ -177,6 +177,25 @@ export declare const HarnessConfigSchema: z.ZodObject<{
|
|
|
177
177
|
explorer: z.ZodDefault<z.ZodEnum<["playwright", "cypress"]>>;
|
|
178
178
|
defaultAdapter: z.ZodDefault<z.ZodEnum<["playwright", "cypress-e2e", "cypress-component", "api", "accessibility"]>>;
|
|
179
179
|
adapters: z.ZodDefault<z.ZodArray<z.ZodEnum<["playwright", "cypress-e2e", "cypress-component", "api", "accessibility"]>, "many">>;
|
|
180
|
+
llmProvider: z.ZodOptional<z.ZodEnum<["anthropic"]>>;
|
|
181
|
+
llmModel: z.ZodOptional<z.ZodString>;
|
|
182
|
+
outputDir: z.ZodOptional<z.ZodString>;
|
|
183
|
+
scoringWeights: z.ZodOptional<z.ZodObject<{
|
|
184
|
+
critical: z.ZodOptional<z.ZodNumber>;
|
|
185
|
+
high: z.ZodOptional<z.ZodNumber>;
|
|
186
|
+
medium: z.ZodOptional<z.ZodNumber>;
|
|
187
|
+
low: z.ZodOptional<z.ZodNumber>;
|
|
188
|
+
}, "strip", z.ZodTypeAny, {
|
|
189
|
+
critical?: number | undefined;
|
|
190
|
+
high?: number | undefined;
|
|
191
|
+
medium?: number | undefined;
|
|
192
|
+
low?: number | undefined;
|
|
193
|
+
}, {
|
|
194
|
+
critical?: number | undefined;
|
|
195
|
+
high?: number | undefined;
|
|
196
|
+
medium?: number | undefined;
|
|
197
|
+
low?: number | undefined;
|
|
198
|
+
}>>;
|
|
180
199
|
auth: z.ZodOptional<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
|
|
181
200
|
type: z.ZodLiteral<"form-login">;
|
|
182
201
|
loginUrl: z.ZodString;
|
|
@@ -271,6 +290,15 @@ export declare const HarnessConfigSchema: z.ZodObject<{
|
|
|
271
290
|
defaultAdapter: "playwright" | "cypress-e2e" | "cypress-component" | "api" | "accessibility";
|
|
272
291
|
adapters: ("playwright" | "cypress-e2e" | "cypress-component" | "api" | "accessibility")[];
|
|
273
292
|
llmMaxOutputTokensPerCall?: number | undefined;
|
|
293
|
+
llmProvider?: "anthropic" | undefined;
|
|
294
|
+
llmModel?: string | undefined;
|
|
295
|
+
outputDir?: string | undefined;
|
|
296
|
+
scoringWeights?: {
|
|
297
|
+
critical?: number | undefined;
|
|
298
|
+
high?: number | undefined;
|
|
299
|
+
medium?: number | undefined;
|
|
300
|
+
low?: number | undefined;
|
|
301
|
+
} | undefined;
|
|
274
302
|
auth?: {
|
|
275
303
|
type: "form-login";
|
|
276
304
|
loginUrl: string;
|
|
@@ -307,6 +335,15 @@ export declare const HarnessConfigSchema: z.ZodObject<{
|
|
|
307
335
|
explorer?: "playwright" | "cypress" | undefined;
|
|
308
336
|
defaultAdapter?: "playwright" | "cypress-e2e" | "cypress-component" | "api" | "accessibility" | undefined;
|
|
309
337
|
adapters?: ("playwright" | "cypress-e2e" | "cypress-component" | "api" | "accessibility")[] | undefined;
|
|
338
|
+
llmProvider?: "anthropic" | undefined;
|
|
339
|
+
llmModel?: string | undefined;
|
|
340
|
+
outputDir?: string | undefined;
|
|
341
|
+
scoringWeights?: {
|
|
342
|
+
critical?: number | undefined;
|
|
343
|
+
high?: number | undefined;
|
|
344
|
+
medium?: number | undefined;
|
|
345
|
+
low?: number | undefined;
|
|
346
|
+
} | undefined;
|
|
310
347
|
auth?: {
|
|
311
348
|
type: "form-login";
|
|
312
349
|
loginUrl: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC;AACpD,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,aAAa,GAAG,mBAAmB,GAAG,KAAK,GAAG,eAAe,CAAC;AAEvG,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBvB,CAAC;AAEH,QAAA,MAAM,sBAAsB;;;;;;;;;EAG1B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAA8E,CAAC;AAE5G,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC5E,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC;AACpD,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,aAAa,GAAG,mBAAmB,GAAG,KAAK,GAAG,eAAe,CAAC;AAEvG,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBvB,CAAC;AAEH,QAAA,MAAM,sBAAsB;;;;;;;;;EAG1B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAA8E,CAAC;AAE5G,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC5E,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0C9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE9E;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmB7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAcrC,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASzB,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAehC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -49,6 +49,17 @@ export const HarnessConfigSchema = z.object({
|
|
|
49
49
|
explorer: z.enum(['playwright', 'cypress']).default('playwright'),
|
|
50
50
|
defaultAdapter: z.enum(['playwright', 'cypress-e2e', 'cypress-component', 'api', 'accessibility']).default('playwright'),
|
|
51
51
|
adapters: z.array(z.enum(['playwright', 'cypress-e2e', 'cypress-component', 'api', 'accessibility'])).default(['playwright']),
|
|
52
|
+
llmProvider: z.enum(['anthropic']).optional(),
|
|
53
|
+
llmModel: z.string().optional(),
|
|
54
|
+
outputDir: z.string().optional(),
|
|
55
|
+
scoringWeights: z
|
|
56
|
+
.object({
|
|
57
|
+
critical: z.number().min(0).max(100).optional(),
|
|
58
|
+
high: z.number().min(0).max(100).optional(),
|
|
59
|
+
medium: z.number().min(0).max(100).optional(),
|
|
60
|
+
low: z.number().min(0).max(100).optional(),
|
|
61
|
+
})
|
|
62
|
+
.optional(),
|
|
52
63
|
auth: AuthConfigSchema.optional(),
|
|
53
64
|
});
|
|
54
65
|
export function resolveMaxOutputTokensPerLlmCall(config) {
|
|
@@ -10,7 +10,7 @@ export declare const GapSchema: z.ZodObject<{
|
|
|
10
10
|
}, "strip", z.ZodTypeAny, {
|
|
11
11
|
path: string;
|
|
12
12
|
id: string;
|
|
13
|
-
severity: "
|
|
13
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
14
14
|
reason: string;
|
|
15
15
|
category: "untested-route" | "a11y" | "console-error" | "broken-link" | "auth-surface" | "coverage";
|
|
16
16
|
recommendation?: string | undefined;
|
|
@@ -18,7 +18,7 @@ export declare const GapSchema: z.ZodObject<{
|
|
|
18
18
|
}, {
|
|
19
19
|
path: string;
|
|
20
20
|
id: string;
|
|
21
|
-
severity: "
|
|
21
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
22
22
|
reason: string;
|
|
23
23
|
category: "untested-route" | "a11y" | "console-error" | "broken-link" | "auth-surface" | "coverage";
|
|
24
24
|
recommendation?: string | undefined;
|
|
@@ -169,7 +169,7 @@ export declare const GapAnalysisSchema: z.ZodObject<{
|
|
|
169
169
|
}, "strip", z.ZodTypeAny, {
|
|
170
170
|
path: string;
|
|
171
171
|
id: string;
|
|
172
|
-
severity: "
|
|
172
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
173
173
|
reason: string;
|
|
174
174
|
category: "untested-route" | "a11y" | "console-error" | "broken-link" | "auth-surface" | "coverage";
|
|
175
175
|
recommendation?: string | undefined;
|
|
@@ -177,7 +177,7 @@ export declare const GapAnalysisSchema: z.ZodObject<{
|
|
|
177
177
|
}, {
|
|
178
178
|
path: string;
|
|
179
179
|
id: string;
|
|
180
|
-
severity: "
|
|
180
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
181
181
|
reason: string;
|
|
182
182
|
category: "untested-route" | "a11y" | "console-error" | "broken-link" | "auth-surface" | "coverage";
|
|
183
183
|
recommendation?: string | undefined;
|
|
@@ -443,7 +443,7 @@ export declare const GapAnalysisSchema: z.ZodObject<{
|
|
|
443
443
|
gaps: {
|
|
444
444
|
path: string;
|
|
445
445
|
id: string;
|
|
446
|
-
severity: "
|
|
446
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
447
447
|
reason: string;
|
|
448
448
|
category: "untested-route" | "a11y" | "console-error" | "broken-link" | "auth-surface" | "coverage";
|
|
449
449
|
recommendation?: string | undefined;
|
|
@@ -522,7 +522,7 @@ export declare const GapAnalysisSchema: z.ZodObject<{
|
|
|
522
522
|
gaps: {
|
|
523
523
|
path: string;
|
|
524
524
|
id: string;
|
|
525
|
-
severity: "
|
|
525
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
526
526
|
reason: string;
|
|
527
527
|
category: "untested-route" | "a11y" | "console-error" | "broken-link" | "auth-surface" | "coverage";
|
|
528
528
|
recommendation?: string | undefined;
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export { DecisionLogEntrySchema, type DecisionLogEntry, } from './decision-log.s
|
|
|
3
3
|
export { RouteInventorySchema, RouteSchema, A11yViolationSchema, BrokenLinkSchema, type RouteInventory, type Route, } from './route-inventory.schema.js';
|
|
4
4
|
export { GapAnalysisSchema, GapSchema, NeutralScenarioSchema, GeneratedTestSchema, TestStepSchema, FrameworkRecommendationSchema, type GapAnalysis, type Gap, type NeutralScenario, type GeneratedTest, type TestStep, type FrameworkRecommendation, } from './gap-analysis.schema.js';
|
|
5
5
|
export { CostIntelligenceSchema, LlmUsageRecordSchema, LlmDataQualitySchema, LlmOperationTypeSchema, RepeatedAiPatternSchema, DeterministicMaturitySchema, type CostIntelligence, type LlmUsageRecord, type LlmDataQuality, type LlmOperationType, type RepeatedAiPattern, type DeterministicMaturity, } from './cost-intelligence.schema.js';
|
|
6
|
-
export { RepoAnalysisSchema, type RepoAnalysis, } from './repo-analysis.schema.js';
|
|
6
|
+
export { RepoAnalysisSchema, FrameworkDetectionSchema, DetectedFrameworkPrimarySchema, FrameworkDetectionConfidenceSchema, TestFrameworkDetectedSchema, type RepoAnalysis, type FrameworkDetectionResult, type DetectedFrameworkPrimary, } from './repo-analysis.schema.js';
|
|
7
|
+
export { AutomationMaturitySchema, AutomationMaturityDimensionSchema, type AutomationMaturity, type AutomationMaturityDimension, } from './automation-maturity.schema.js';
|
|
7
8
|
export { PublicSurfaceSchema, PublicSurfaceViolationSchema, PublicSurfaceBrokenLinkSchema, type PublicSurface, type PublicSurfaceViolation, type PublicSurfaceBrokenLink, } from './public-surface.schema.js';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,gCAAgC,EAChC,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,EAC1B,cAAc,EACd,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,KAAK,gBAAgB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,KAAK,GACX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,6BAA6B,EAC7B,KAAK,WAAW,EAChB,KAAK,GAAG,EACR,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,uBAAuB,GAC7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,gCAAgC,EAChC,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,EAC1B,cAAc,EACd,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,KAAK,gBAAgB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,KAAK,GACX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,6BAA6B,EAC7B,KAAK,WAAW,EAChB,KAAK,GAAG,EACR,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,uBAAuB,GAC7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,8BAA8B,EAC9B,kCAAkC,EAClC,2BAA2B,EAC3B,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,GAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,wBAAwB,EACxB,iCAAiC,EACjC,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,GACjC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,6BAA6B,EAC7B,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,4BAA4B,CAAC"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -3,5 +3,6 @@ export { DecisionLogEntrySchema, } from './decision-log.schema.js';
|
|
|
3
3
|
export { RouteInventorySchema, RouteSchema, A11yViolationSchema, BrokenLinkSchema, } from './route-inventory.schema.js';
|
|
4
4
|
export { GapAnalysisSchema, GapSchema, NeutralScenarioSchema, GeneratedTestSchema, TestStepSchema, FrameworkRecommendationSchema, } from './gap-analysis.schema.js';
|
|
5
5
|
export { CostIntelligenceSchema, LlmUsageRecordSchema, LlmDataQualitySchema, LlmOperationTypeSchema, RepeatedAiPatternSchema, DeterministicMaturitySchema, } from './cost-intelligence.schema.js';
|
|
6
|
-
export { RepoAnalysisSchema, } from './repo-analysis.schema.js';
|
|
6
|
+
export { RepoAnalysisSchema, FrameworkDetectionSchema, DetectedFrameworkPrimarySchema, FrameworkDetectionConfidenceSchema, TestFrameworkDetectedSchema, } from './repo-analysis.schema.js';
|
|
7
|
+
export { AutomationMaturitySchema, AutomationMaturityDimensionSchema, } from './automation-maturity.schema.js';
|
|
7
8
|
export { PublicSurfaceSchema, PublicSurfaceViolationSchema, PublicSurfaceBrokenLinkSchema, } from './public-surface.schema.js';
|
|
@@ -124,7 +124,7 @@ export declare const PublicSurfaceSchema: z.ZodObject<{
|
|
|
124
124
|
}, "strip", z.ZodTypeAny, {
|
|
125
125
|
path: string;
|
|
126
126
|
id: string;
|
|
127
|
-
severity: "
|
|
127
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
128
128
|
reason: string;
|
|
129
129
|
category: "untested-route" | "a11y" | "console-error" | "broken-link" | "auth-surface" | "coverage";
|
|
130
130
|
recommendation?: string | undefined;
|
|
@@ -132,7 +132,7 @@ export declare const PublicSurfaceSchema: z.ZodObject<{
|
|
|
132
132
|
}, {
|
|
133
133
|
path: string;
|
|
134
134
|
id: string;
|
|
135
|
-
severity: "
|
|
135
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
136
136
|
reason: string;
|
|
137
137
|
category: "untested-route" | "a11y" | "console-error" | "broken-link" | "auth-surface" | "coverage";
|
|
138
138
|
recommendation?: string | undefined;
|
|
@@ -179,7 +179,7 @@ export declare const PublicSurfaceSchema: z.ZodObject<{
|
|
|
179
179
|
gaps: {
|
|
180
180
|
path: string;
|
|
181
181
|
id: string;
|
|
182
|
-
severity: "
|
|
182
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
183
183
|
reason: string;
|
|
184
184
|
category: "untested-route" | "a11y" | "console-error" | "broken-link" | "auth-surface" | "coverage";
|
|
185
185
|
recommendation?: string | undefined;
|
|
@@ -222,7 +222,7 @@ export declare const PublicSurfaceSchema: z.ZodObject<{
|
|
|
222
222
|
gaps: {
|
|
223
223
|
path: string;
|
|
224
224
|
id: string;
|
|
225
|
-
severity: "
|
|
225
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
226
226
|
reason: string;
|
|
227
227
|
category: "untested-route" | "a11y" | "console-error" | "broken-link" | "auth-surface" | "coverage";
|
|
228
228
|
recommendation?: string | undefined;
|