@kakarot-ci/core 0.2.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.
Files changed (47) hide show
  1. package/LICENSE +42 -0
  2. package/README.md +2 -0
  3. package/dist/github/client.d.ts +56 -0
  4. package/dist/github/client.d.ts.map +1 -0
  5. package/dist/index.cjs +1439 -0
  6. package/dist/index.cjs.map +7 -0
  7. package/dist/index.d.ts +17 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +1382 -0
  10. package/dist/index.js.map +7 -0
  11. package/dist/llm/factory.d.ts +10 -0
  12. package/dist/llm/factory.d.ts.map +1 -0
  13. package/dist/llm/parser.d.ts +16 -0
  14. package/dist/llm/parser.d.ts.map +1 -0
  15. package/dist/llm/prompts/test-fix.d.ts +7 -0
  16. package/dist/llm/prompts/test-fix.d.ts.map +1 -0
  17. package/dist/llm/prompts/test-generation.d.ts +7 -0
  18. package/dist/llm/prompts/test-generation.d.ts.map +1 -0
  19. package/dist/llm/providers/anthropic.d.ts +10 -0
  20. package/dist/llm/providers/anthropic.d.ts.map +1 -0
  21. package/dist/llm/providers/base.d.ts +15 -0
  22. package/dist/llm/providers/base.d.ts.map +1 -0
  23. package/dist/llm/providers/google.d.ts +10 -0
  24. package/dist/llm/providers/google.d.ts.map +1 -0
  25. package/dist/llm/providers/openai.d.ts +10 -0
  26. package/dist/llm/providers/openai.d.ts.map +1 -0
  27. package/dist/llm/test-generator.d.ts +19 -0
  28. package/dist/llm/test-generator.d.ts.map +1 -0
  29. package/dist/types/config.d.ts +62 -0
  30. package/dist/types/config.d.ts.map +1 -0
  31. package/dist/types/diff.d.ts +34 -0
  32. package/dist/types/diff.d.ts.map +1 -0
  33. package/dist/types/github.d.ts +70 -0
  34. package/dist/types/github.d.ts.map +1 -0
  35. package/dist/types/llm.d.ts +60 -0
  36. package/dist/types/llm.d.ts.map +1 -0
  37. package/dist/utils/ast-analyzer.d.ts +8 -0
  38. package/dist/utils/ast-analyzer.d.ts.map +1 -0
  39. package/dist/utils/config-loader.d.ts +6 -0
  40. package/dist/utils/config-loader.d.ts.map +1 -0
  41. package/dist/utils/diff-parser.d.ts +24 -0
  42. package/dist/utils/diff-parser.d.ts.map +1 -0
  43. package/dist/utils/logger.d.ts +9 -0
  44. package/dist/utils/logger.d.ts.map +1 -0
  45. package/dist/utils/test-target-extractor.d.ts +9 -0
  46. package/dist/utils/test-target-extractor.d.ts.map +1 -0
  47. package/package.json +70 -0
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Types for LLM integration
3
+ */
4
+ export interface LLMMessage {
5
+ role: 'system' | 'user' | 'assistant';
6
+ content: string;
7
+ }
8
+ export interface LLMResponse {
9
+ content: string;
10
+ usage?: {
11
+ promptTokens?: number;
12
+ completionTokens?: number;
13
+ totalTokens?: number;
14
+ };
15
+ }
16
+ export interface LLMProvider {
17
+ /**
18
+ * Generate a response from the LLM
19
+ */
20
+ generate(messages: LLMMessage[], options?: LLMGenerateOptions): Promise<LLMResponse>;
21
+ }
22
+ export interface LLMGenerateOptions {
23
+ temperature?: number;
24
+ maxTokens?: number;
25
+ stopSequences?: string[];
26
+ }
27
+ export interface TestGenerationContext {
28
+ target: {
29
+ filePath: string;
30
+ functionName: string;
31
+ functionType: 'function' | 'method' | 'arrow-function' | 'class-method';
32
+ code: string;
33
+ context: string;
34
+ };
35
+ framework: 'jest' | 'vitest';
36
+ existingTestFile?: string;
37
+ relatedFunctions?: Array<{
38
+ name: string;
39
+ code: string;
40
+ }>;
41
+ }
42
+ export interface TestGenerationResult {
43
+ testCode: string;
44
+ explanation?: string;
45
+ usage?: {
46
+ promptTokens?: number;
47
+ completionTokens?: number;
48
+ totalTokens?: number;
49
+ };
50
+ }
51
+ export interface TestFixContext {
52
+ testCode: string;
53
+ errorMessage: string;
54
+ testOutput?: string;
55
+ originalCode: string;
56
+ framework: 'jest' | 'vitest';
57
+ attempt: number;
58
+ maxAttempts: number;
59
+ }
60
+ //# sourceMappingURL=llm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/types/llm.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACtF;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,UAAU,GAAG,QAAQ,GAAG,gBAAgB,GAAG,cAAc,CAAC;QACxE,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,8 @@
1
+ import type { ChangedRange, TestTarget } from '../types/diff.js';
2
+ /**
3
+ * Analyze TypeScript file and extract test targets
4
+ */
5
+ export declare function analyzeFile(filePath: string, content: string, changedRanges: ChangedRange[], ref: string, githubClient: {
6
+ fileExists: (ref: string, path: string) => Promise<boolean>;
7
+ }, testDirectory: string): Promise<TestTarget[]>;
8
+ //# sourceMappingURL=ast-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-analyzer.d.ts","sourceRoot":"","sources":["../../src/utils/ast-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA6PjE;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,YAAY,EAAE,EAC7B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE;IAAE,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,EAC7E,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,EAAE,CAAC,CAuCvB"}
@@ -0,0 +1,6 @@
1
+ import { type KakarotConfig } from '../types/config.js';
2
+ /**
3
+ * Load and validate Kakarot configuration
4
+ */
5
+ export declare function loadConfig(): Promise<KakarotConfig>;
6
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,aAAa,EAA6B,MAAM,oBAAoB,CAAC;AA0HxG;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAoCzD"}
@@ -0,0 +1,24 @@
1
+ import type { PullRequestFile } from '../types/github.js';
2
+ import type { FileDiff } from '../types/diff.js';
3
+ /**
4
+ * Parse PR files into structured diff format
5
+ */
6
+ export declare function parsePullRequestFiles(files: PullRequestFile[]): FileDiff[];
7
+ /**
8
+ * Get changed line ranges for a file diff
9
+ *
10
+ * For added files: Requires fileContent to determine line count. Returns ranges
11
+ * covering the entire file (all lines are additions in new files).
12
+ *
13
+ * For removed files: Returns empty (nothing to test in deleted files).
14
+ *
15
+ * For modified files: Returns merged ranges representing fuzzy zones of change.
16
+ * Note: Deletion ranges use OLD file line numbers and should only be used for
17
+ * metadata/context, not for overlap detection in the new file.
18
+ */
19
+ export declare function getChangedRanges(diff: FileDiff, fileContent?: string): Array<{
20
+ start: number;
21
+ end: number;
22
+ type: 'addition' | 'deletion';
23
+ }>;
24
+ //# sourceMappingURL=diff-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-parser.d.ts","sourceRoot":"","sources":["../../src/utils/diff-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,kBAAkB,CAAC;AA8H3D;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,QAAQ,EAAE,CAmC1E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAA;CAAE,CAAC,CAgBtE"}
@@ -0,0 +1,9 @@
1
+ import type { KakarotConfig } from '../types/config.js';
2
+ export declare function initLogger(config: Pick<KakarotConfig, 'debug'>): void;
3
+ export declare function info(message: string, ...args: unknown[]): void;
4
+ export declare function debug(message: string, ...args: unknown[]): void;
5
+ export declare function warn(message: string, ...args: unknown[]): void;
6
+ export declare function error(message: string, ...args: unknown[]): void;
7
+ export declare function success(message: string, ...args: unknown[]): void;
8
+ export declare function progress(step: number, total: number, message: string, ...args: unknown[]): void;
9
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKxD,wBAAgB,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,IAAI,CAGrE;AAGD,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAM9D;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAQ/D;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAM9D;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAM/D;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAMjE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAM/F"}
@@ -0,0 +1,9 @@
1
+ import type { PullRequestFile } from '../types/github.js';
2
+ import type { KakarotConfig } from '../types/config.js';
3
+ import type { TestTarget } from '../types/diff.js';
4
+ import { GitHubClient } from '../github/client.js';
5
+ /**
6
+ * Extract test targets from pull request files
7
+ */
8
+ export declare function extractTestTargets(files: PullRequestFile[], githubClient: GitHubClient, prHeadRef: string, config: Pick<KakarotConfig, 'testDirectory' | 'testFilePattern' | 'includePatterns' | 'excludePatterns'>): Promise<TestTarget[]>;
9
+ //# sourceMappingURL=test-target-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-target-extractor.d.ts","sourceRoot":"","sources":["../../src/utils/test-target-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKnD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,eAAe,EAAE,EACxB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,eAAe,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB,CAAC,GACvG,OAAO,CAAC,UAAU,EAAE,CAAC,CA8EvB"}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@kakarot-ci/core",
3
+ "version": "0.2.0",
4
+ "description": "Core package for Kakarot CI - AI-powered unit test generation for pull requests",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.cjs",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "scripts": {
22
+ "build": "npm run build:clean && npm run build:esm && npm run build:cjs && npm run build:types",
23
+ "build:clean": "rm -rf dist",
24
+ "build:esm": "node build.js esm",
25
+ "build:cjs": "node build.js cjs",
26
+ "build:types": "tsc --emitDeclarationOnly --outDir dist",
27
+ "dev": "npm run build:esm -- --watch",
28
+ "lint": "eslint . --ext .ts",
29
+ "lint:fix": "eslint . --ext .ts --fix",
30
+ "typecheck": "tsc --noEmit",
31
+ "test": "echo \"Error: no test specified\" && exit 1",
32
+ "release": "semantic-release"
33
+ },
34
+ "keywords": [
35
+ "ci",
36
+ "testing",
37
+ "jest",
38
+ "typescript",
39
+ "ai",
40
+ "llm",
41
+ "pull-request",
42
+ "automation"
43
+ ],
44
+ "author": "David Jansen",
45
+ "license": "BUSL-1.1",
46
+ "dependencies": {
47
+ "@octokit/rest": "^22.0.1",
48
+ "typescript": "^5.3.2",
49
+ "zod": "^3.25.76"
50
+ },
51
+ "devDependencies": {
52
+ "@semantic-release/changelog": "^6.0.3",
53
+ "@semantic-release/git": "^10.0.0",
54
+ "@semantic-release/github": "^9.0.0",
55
+ "@types/node": "^20.10.0",
56
+ "@typescript-eslint/eslint-plugin": "^6.13.0",
57
+ "@typescript-eslint/parser": "^6.13.0",
58
+ "conventional-changelog-conventionalcommits": "^9.1.0",
59
+ "esbuild": "^0.19.8",
60
+ "eslint": "^8.54.0",
61
+ "semantic-release": "^22.0.0",
62
+ "typescript": "^5.3.2"
63
+ },
64
+ "engines": {
65
+ "node": ">=18.0.0"
66
+ },
67
+ "publishConfig": {
68
+ "access": "public"
69
+ }
70
+ }