skrypt-ai 0.8.0 → 0.8.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/dist/auth/index.js +6 -0
- package/dist/binding/binder.d.ts +5 -0
- package/dist/binding/binder.js +63 -0
- package/dist/binding/detector.d.ts +5 -0
- package/dist/binding/detector.js +51 -0
- package/dist/binding/doc-parser.d.ts +9 -0
- package/dist/binding/doc-parser.js +138 -0
- package/dist/binding/extractor.d.ts +14 -0
- package/dist/binding/extractor.js +39 -0
- package/dist/binding/index.d.ts +5 -0
- package/dist/binding/index.js +5 -0
- package/dist/binding/types.d.ts +74 -0
- package/dist/binding/types.js +1 -0
- package/dist/claims/extractor.d.ts +13 -0
- package/dist/claims/extractor.js +138 -0
- package/dist/claims/index.d.ts +4 -0
- package/dist/claims/index.js +4 -0
- package/dist/claims/reporter.d.ts +9 -0
- package/dist/claims/reporter.js +65 -0
- package/dist/claims/store.d.ts +13 -0
- package/dist/claims/store.js +51 -0
- package/dist/claims/types.d.ts +34 -0
- package/dist/claims/types.js +1 -0
- package/dist/cli.js +516 -56
- package/dist/commands/bind.d.ts +2 -0
- package/dist/commands/bind.js +139 -0
- package/dist/commands/claims.d.ts +2 -0
- package/dist/commands/claims.js +84 -0
- package/dist/commands/coverage.d.ts +2 -0
- package/dist/commands/coverage.js +61 -0
- package/dist/commands/generate/index.js +5 -0
- package/dist/commands/generate/scan.js +33 -14
- package/dist/commands/generate/write.d.ts +7 -0
- package/dist/commands/generate/write.js +65 -1
- package/dist/commands/import.js +12 -3
- package/dist/commands/init.js +68 -5
- package/dist/commands/monitor.d.ts +15 -0
- package/dist/commands/monitor.js +2 -2
- package/dist/commands/mutate.d.ts +2 -0
- package/dist/commands/mutate.js +177 -0
- package/dist/config/types.js +2 -2
- package/dist/coverage/calculator.d.ts +7 -0
- package/dist/coverage/calculator.js +86 -0
- package/dist/coverage/index.d.ts +3 -0
- package/dist/coverage/index.js +3 -0
- package/dist/coverage/reporter.d.ts +9 -0
- package/dist/coverage/reporter.js +65 -0
- package/dist/coverage/types.d.ts +36 -0
- package/dist/coverage/types.js +1 -0
- package/dist/generator/generator.d.ts +3 -1
- package/dist/generator/generator.js +137 -23
- package/dist/generator/mdx-serializer.js +3 -2
- package/dist/generator/organizer.d.ts +5 -1
- package/dist/generator/organizer.js +29 -14
- package/dist/generator/types.d.ts +6 -0
- package/dist/generator/writer.js +7 -2
- package/dist/github/org-discovery.js +5 -0
- package/dist/importers/mintlify.js +4 -3
- package/dist/llm/anthropic-client.js +1 -0
- package/dist/llm/index.d.ts +15 -0
- package/dist/llm/index.js +148 -29
- package/dist/llm/openai-client.js +2 -0
- package/dist/mutation/index.d.ts +4 -0
- package/dist/mutation/index.js +4 -0
- package/dist/mutation/mutator.d.ts +5 -0
- package/dist/mutation/mutator.js +101 -0
- package/dist/mutation/reporter.d.ts +14 -0
- package/dist/mutation/reporter.js +66 -0
- package/dist/mutation/runner.d.ts +9 -0
- package/dist/mutation/runner.js +70 -0
- package/dist/mutation/types.d.ts +51 -0
- package/dist/mutation/types.js +1 -0
- package/dist/qa/checks.d.ts +1 -0
- package/dist/qa/checks.js +47 -0
- package/dist/qa/index.js +2 -1
- package/dist/scanner/index.js +78 -11
- package/dist/scanner/typescript.js +42 -31
- package/dist/sentry.d.ts +3 -0
- package/dist/sentry.js +28 -0
- package/dist/template/docs.json +6 -3
- package/dist/template/next.config.mjs +15 -1
- package/dist/template/package.json +4 -3
- package/dist/template/public/docs-schema.json +257 -0
- package/dist/template/sentry.client.config.ts +12 -0
- package/dist/template/sentry.edge.config.ts +7 -0
- package/dist/template/sentry.server.config.ts +7 -0
- package/dist/template/src/app/docs/[...slug]/page.tsx +11 -5
- package/dist/template/src/app/docs/layout.tsx +2 -4
- package/dist/template/src/app/global-error.tsx +60 -0
- package/dist/template/src/app/layout.tsx +7 -16
- package/dist/template/src/app/page.tsx +2 -5
- package/dist/template/src/components/ai-chat-impl.tsx +1 -1
- package/dist/template/src/components/docs-layout.tsx +1 -15
- package/dist/template/src/components/footer.tsx +95 -19
- package/dist/template/src/components/header.tsx +1 -1
- package/dist/template/src/components/search-dialog.tsx +5 -0
- package/dist/template/src/instrumentation.ts +11 -0
- package/dist/template/src/lib/docs-config.ts +235 -0
- package/dist/template/src/lib/fonts.ts +3 -3
- package/dist/testing/runner.js +8 -1
- package/package.json +2 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const GREEN = '\x1b[32m';
|
|
2
|
+
const YELLOW = '\x1b[33m';
|
|
3
|
+
const DIM = '\x1b[2m';
|
|
4
|
+
const BOLD = '\x1b[1m';
|
|
5
|
+
const RESET = '\x1b[0m';
|
|
6
|
+
/**
|
|
7
|
+
* Print claims report to terminal
|
|
8
|
+
*/
|
|
9
|
+
export function printClaimsReport(claims) {
|
|
10
|
+
console.log(`\n${BOLD}Semantic Claims Report${RESET}\n`);
|
|
11
|
+
// Group by type
|
|
12
|
+
const byType = new Map();
|
|
13
|
+
for (const c of claims) {
|
|
14
|
+
if (!byType.has(c.type))
|
|
15
|
+
byType.set(c.type, []);
|
|
16
|
+
byType.get(c.type).push(c);
|
|
17
|
+
}
|
|
18
|
+
// Type breakdown
|
|
19
|
+
console.log(` ${BOLD}Claims by Type${RESET}`);
|
|
20
|
+
for (const [type, typeClaims] of byType) {
|
|
21
|
+
console.log(` ${type.padEnd(20)} ${typeClaims.length}`);
|
|
22
|
+
}
|
|
23
|
+
console.log('');
|
|
24
|
+
// Testability
|
|
25
|
+
const testable = claims.filter(c => c.testable);
|
|
26
|
+
const untestable = claims.filter(c => !c.testable);
|
|
27
|
+
console.log(` Testable: ${GREEN}${testable.length}${RESET} | Untestable: ${DIM}${untestable.length}${RESET}`);
|
|
28
|
+
console.log('');
|
|
29
|
+
// Group by source file
|
|
30
|
+
const byFile = new Map();
|
|
31
|
+
for (const c of claims) {
|
|
32
|
+
const key = c.source.file;
|
|
33
|
+
if (!byFile.has(key))
|
|
34
|
+
byFile.set(key, []);
|
|
35
|
+
byFile.get(key).push(c);
|
|
36
|
+
}
|
|
37
|
+
console.log(` ${BOLD}Claims by File${RESET}`);
|
|
38
|
+
for (const [file, fileClaims] of byFile) {
|
|
39
|
+
const shortPath = file.length > 50 ? '...' + file.slice(-47) : file;
|
|
40
|
+
console.log(` ${shortPath.padEnd(52)} ${fileClaims.length} claims`);
|
|
41
|
+
}
|
|
42
|
+
console.log('');
|
|
43
|
+
// Sample claims (first 5 testable)
|
|
44
|
+
const samples = testable.slice(0, 5);
|
|
45
|
+
if (samples.length > 0) {
|
|
46
|
+
console.log(` ${BOLD}Sample Claims${RESET}`);
|
|
47
|
+
for (const c of samples) {
|
|
48
|
+
console.log(` ${YELLOW}[${c.type}]${RESET} "${c.text.slice(0, 80)}${c.text.length > 80 ? '...' : ''}"`);
|
|
49
|
+
console.log(` ${DIM}confidence: ${(c.confidence * 100).toFixed(0)}% | ${c.source.section}${RESET}`);
|
|
50
|
+
if (c.suggestedTest) {
|
|
51
|
+
const testPreview = c.suggestedTest.split('\n')[0].slice(0, 60);
|
|
52
|
+
console.log(` ${DIM}test: ${testPreview}...${RESET}`);
|
|
53
|
+
}
|
|
54
|
+
console.log('');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Summary
|
|
58
|
+
console.log(`${BOLD} Total: ${claims.length} claims extracted (${testable.length} testable)${RESET}\n`);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Format claims as JSON
|
|
62
|
+
*/
|
|
63
|
+
export function formatClaimsJson(claims) {
|
|
64
|
+
return JSON.stringify({ claims, total: claims.length, testable: claims.filter(c => c.testable).length }, null, 2);
|
|
65
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Claim, ClaimsFile } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read claims from the store
|
|
4
|
+
*/
|
|
5
|
+
export declare function readClaims(projectDir: string): ClaimsFile | null;
|
|
6
|
+
/**
|
|
7
|
+
* Write claims to the store
|
|
8
|
+
*/
|
|
9
|
+
export declare function writeClaims(projectDir: string, claims: Claim[]): void;
|
|
10
|
+
/**
|
|
11
|
+
* Merge new claims with existing, deduplicating by ID
|
|
12
|
+
*/
|
|
13
|
+
export declare function mergeClaims(existing: Claim[], newClaims: Claim[]): Claim[];
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
const CLAIMS_PATH = '.skrypt/claims.json';
|
|
4
|
+
/**
|
|
5
|
+
* Read claims from the store
|
|
6
|
+
*/
|
|
7
|
+
export function readClaims(projectDir) {
|
|
8
|
+
const filePath = join(projectDir, CLAIMS_PATH);
|
|
9
|
+
if (!existsSync(filePath))
|
|
10
|
+
return null;
|
|
11
|
+
try {
|
|
12
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
13
|
+
return JSON.parse(content);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Write claims to the store
|
|
21
|
+
*/
|
|
22
|
+
export function writeClaims(projectDir, claims) {
|
|
23
|
+
const filePath = join(projectDir, CLAIMS_PATH);
|
|
24
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
25
|
+
const file = {
|
|
26
|
+
version: 1,
|
|
27
|
+
extractedAt: new Date().toISOString(),
|
|
28
|
+
claims: dedup(claims),
|
|
29
|
+
};
|
|
30
|
+
writeFileSync(filePath, JSON.stringify(file, null, 2));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Merge new claims with existing, deduplicating by ID
|
|
34
|
+
*/
|
|
35
|
+
export function mergeClaims(existing, newClaims) {
|
|
36
|
+
const byId = new Map();
|
|
37
|
+
for (const c of existing)
|
|
38
|
+
byId.set(c.id, c);
|
|
39
|
+
for (const c of newClaims)
|
|
40
|
+
byId.set(c.id, c); // new claims override
|
|
41
|
+
return [...byId.values()];
|
|
42
|
+
}
|
|
43
|
+
function dedup(claims) {
|
|
44
|
+
const seen = new Set();
|
|
45
|
+
return claims.filter(c => {
|
|
46
|
+
if (seen.has(c.id))
|
|
47
|
+
return false;
|
|
48
|
+
seen.add(c.id);
|
|
49
|
+
return true;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A testable claim extracted from documentation
|
|
3
|
+
*/
|
|
4
|
+
export interface Claim {
|
|
5
|
+
id: string;
|
|
6
|
+
type: 'behavioral' | 'constraint' | 'integration' | 'performance' | 'error_handling';
|
|
7
|
+
text: string;
|
|
8
|
+
source: {
|
|
9
|
+
file: string;
|
|
10
|
+
section: string;
|
|
11
|
+
line: number;
|
|
12
|
+
};
|
|
13
|
+
confidence: number;
|
|
14
|
+
testable: boolean;
|
|
15
|
+
suggestedTest?: string;
|
|
16
|
+
status: 'extracted' | 'verified' | 'failed' | 'untestable';
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Claims store file (.skrypt/claims.json)
|
|
20
|
+
*/
|
|
21
|
+
export interface ClaimsFile {
|
|
22
|
+
version: 1;
|
|
23
|
+
extractedAt: string;
|
|
24
|
+
claims: Claim[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Options for claim extraction
|
|
28
|
+
*/
|
|
29
|
+
export interface ClaimOptions {
|
|
30
|
+
file?: string;
|
|
31
|
+
type?: Claim['type'];
|
|
32
|
+
json?: boolean;
|
|
33
|
+
verify?: boolean;
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|