@vivantel/virage-code-chunk-chunker 0.1.2

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 ADDED
@@ -0,0 +1,86 @@
1
+ # @vivantel/virage-code-chunk-chunker
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@vivantel/virage-code-chunk-chunker.svg)](https://www.npmjs.com/package/@vivantel/virage-code-chunk-chunker)
4
+
5
+ AST-aware code chunking strategy for `@vivantel/virage-core`, powered by [code-chunk](https://www.npmjs.com/package/code-chunk).
6
+
7
+ Splits source files at semantic boundaries (functions, classes, methods) using tree-sitter, preserving scope chain and entity context in chunk metadata. This produces more coherent embeddings than character/token-based chunking, which can cut mid-function.
8
+
9
+ **Supported languages:** TypeScript, JavaScript, Python, Rust, Go, Java
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ npm install @vivantel/virage-code-chunk-chunker
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ```typescript
20
+ import { createChunker } from "@vivantel/virage-core";
21
+ import { codeChunkStrategy } from "@vivantel/virage-code-chunk-chunker";
22
+
23
+ const chunker = createChunker({
24
+ patterns: ["src/**/*.{ts,js,py,rs,go,java}"],
25
+ strategy: codeChunkStrategy(),
26
+ });
27
+ ```
28
+
29
+ With options:
30
+
31
+ ```typescript
32
+ const chunker = createChunker({
33
+ patterns: ["src/**/*.ts"],
34
+ strategy: codeChunkStrategy({
35
+ maxChunkSize: 2000,
36
+ contextMode: "minimal",
37
+ useContextualizedText: true, // prepend scope chain to content for richer embeddings
38
+ }),
39
+ });
40
+ ```
41
+
42
+ ### Plugin discovery
43
+
44
+ The package exports a `ragPlugin` that the virage plugin system can discover automatically:
45
+
46
+ ```typescript
47
+ import { discoverPlugins } from "@vivantel/virage-core";
48
+
49
+ const plugins = await discoverPlugins(["@vivantel/virage-code-chunk-chunker"]);
50
+ // [{ name: "code-chunk-ast", type: "chunker", factory: [Function] }]
51
+ ```
52
+
53
+ ## Options
54
+
55
+ | Option | Type | Default | Description |
56
+ |--------|------|---------|-------------|
57
+ | `maxChunkSize` | `number` | `1500` | Maximum chunk size in bytes |
58
+ | `contextMode` | `"none" \| "minimal" \| "full"` | `"full"` | How much semantic context to include |
59
+ | `siblingDetail` | `"none" \| "names" \| "signatures"` | `"signatures"` | Level of sibling entity detail in context |
60
+ | `filterImports` | `boolean` | `false` | Remove import statements from chunks |
61
+ | `overlapLines` | `number` | `0` | Lines to overlap from the previous chunk |
62
+ | `useContextualizedText` | `boolean` | `false` | Use pre-formatted contextualized text (scope + signatures prepended) as chunk content |
63
+
64
+ ## Chunk metadata
65
+
66
+ Each produced chunk includes:
67
+
68
+ ```ts
69
+ {
70
+ content: string, // raw code text (or contextualizedText if option enabled)
71
+ sourceFile: string, // file path
72
+ commitHash: string, // filled by the pipeline
73
+ metadata: {
74
+ strategy: "code-chunk-ast",
75
+ chunk_index: number, // 0-based index within this file
76
+ source_file: string,
77
+ total_chunks: number, // total chunks for this file
78
+ scope: EntityInfo[], // scope chain (e.g. MyClass > myMethod)
79
+ entities: ChunkEntityInfo[], // entities defined within this chunk
80
+ }
81
+ }
82
+ ```
83
+
84
+ ## License
85
+
86
+ MIT
@@ -0,0 +1,25 @@
1
+ import type { ChunkStrategy } from "@vivantel/virage-core";
2
+ export interface CodeChunkStrategyOptions {
3
+ /** Maximum size of each chunk in bytes (default: 1500) */
4
+ maxChunkSize?: number;
5
+ /** How much context to include (default: "full") */
6
+ contextMode?: "none" | "minimal" | "full";
7
+ /** Level of sibling detail in context (default: "signatures") */
8
+ siblingDetail?: "none" | "names" | "signatures";
9
+ /** Remove import statements from chunks (default: false) */
10
+ filterImports?: boolean;
11
+ /** Number of lines to overlap from the previous chunk (default: 0) */
12
+ overlapLines?: number;
13
+ /**
14
+ * Use `contextualizedText` (scope chain + entity signatures prepended)
15
+ * instead of raw `text` as chunk content. Produces richer embeddings. (default: false)
16
+ */
17
+ useContextualizedText?: boolean;
18
+ }
19
+ export declare function codeChunkStrategy(options?: CodeChunkStrategyOptions): ChunkStrategy;
20
+ export declare const ragPlugin: {
21
+ name: string;
22
+ type: "chunker";
23
+ factory: () => ChunkStrategy;
24
+ };
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,wBAAwB;IACvC,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IAC1C,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,CAAC;IAChD,4DAA4D;IAC5D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,wBAA6B,GACrC,aAAa,CAkDf;AAED,eAAO,MAAM,SAAS;;;;CAIrB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,53 @@
1
+ import { chunk as codeChunk, detectLanguage, UnsupportedLanguageError, } from "code-chunk";
2
+ import { computeChunkQualityMetrics } from "@vivantel/virage-core";
3
+ export function codeChunkStrategy(options = {}) {
4
+ const { useContextualizedText = false, ...chunkOptions } = options;
5
+ return {
6
+ name: "code-chunk-ast",
7
+ async chunk(text, filePath) {
8
+ if (!filePath) {
9
+ return [];
10
+ }
11
+ let results;
12
+ try {
13
+ results = await codeChunk(filePath, text, chunkOptions);
14
+ }
15
+ catch (err) {
16
+ if (err instanceof UnsupportedLanguageError) {
17
+ return [];
18
+ }
19
+ throw err;
20
+ }
21
+ return results.map((c, i) => ({
22
+ content: useContextualizedText ? c.contextualizedText : c.text,
23
+ metadata: {
24
+ strategy: "code-chunk-ast",
25
+ chunk_index: i,
26
+ source_file: filePath,
27
+ total_chunks: c.totalChunks,
28
+ scope: c.context.scope,
29
+ entities: c.context.entities,
30
+ },
31
+ sourceFile: filePath,
32
+ commitHash: "",
33
+ }));
34
+ },
35
+ extractMetadata(_text, filePath) {
36
+ const language = filePath ? detectLanguage(filePath) : null;
37
+ return {
38
+ strategy: "code-chunk-ast",
39
+ language: language ?? "unknown",
40
+ supported: language !== null,
41
+ };
42
+ },
43
+ getQualityMetrics(chunks) {
44
+ return computeChunkQualityMetrics(chunks);
45
+ },
46
+ };
47
+ }
48
+ export const ragPlugin = {
49
+ name: "code-chunk-ast",
50
+ type: "chunker",
51
+ factory: () => codeChunkStrategy(),
52
+ };
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,SAAS,EAClB,cAAc,EACd,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAOpB,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAoBnE,MAAM,UAAU,iBAAiB,CAC/B,UAAoC,EAAE;IAEtC,MAAM,EAAE,qBAAqB,GAAG,KAAK,EAAE,GAAG,YAAY,EAAE,GACtD,OAAkD,CAAC;IAErD,OAAO;QACL,IAAI,EAAE,gBAAgB;QAEtB,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,QAAiB;YACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,IAAI,OAAoB,CAAC;YACzB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,IAAI,GAAG,YAAY,wBAAwB,EAAE,CAAC;oBAC5C,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5B,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC9D,QAAQ,EAAE;oBACR,QAAQ,EAAE,gBAAgB;oBAC1B,WAAW,EAAE,CAAC;oBACd,WAAW,EAAE,QAAQ;oBACrB,YAAY,EAAE,CAAC,CAAC,WAAW;oBAC3B,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK;oBACtB,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ;iBAC7B;gBACD,UAAU,EAAE,QAAQ;gBACpB,UAAU,EAAE,EAAE;aACf,CAAC,CAAC,CAAC;QACN,CAAC;QAED,eAAe,CAAC,KAAa,EAAE,QAAiB;YAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5D,OAAO;gBACL,QAAQ,EAAE,gBAAgB;gBAC1B,QAAQ,EAAE,QAAQ,IAAI,SAAS;gBAC/B,SAAS,EAAE,QAAQ,KAAK,IAAI;aAC7B,CAAC;QACJ,CAAC;QAED,iBAAiB,CAAC,MAAe;YAC/B,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,SAAkB;IACxB,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE;CACnC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,202 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { codeChunkStrategy, ragPlugin } from "./index.js";
3
+ vi.mock("code-chunk", () => ({
4
+ chunk: vi.fn(),
5
+ detectLanguage: vi.fn(),
6
+ UnsupportedLanguageError: class UnsupportedLanguageError extends Error {
7
+ _tag = "UnsupportedLanguageError";
8
+ constructor(filepath) {
9
+ super(`Unsupported language for file: ${filepath}`);
10
+ this.name = "UnsupportedLanguageError";
11
+ }
12
+ },
13
+ }));
14
+ import { chunk as mockCodeChunk, detectLanguage as mockDetectLanguage, UnsupportedLanguageError, } from "code-chunk";
15
+ const makeMockChunk = (overrides = {}) => ({
16
+ text: overrides.text ?? "function foo() {}",
17
+ contextualizedText: overrides.contextualizedText ?? "// scope: module\nfunction foo() {}",
18
+ byteRange: { start: 0, end: 18 },
19
+ lineRange: { start: 0, end: 0 },
20
+ index: 0,
21
+ totalChunks: overrides.totalChunks ?? 1,
22
+ context: {
23
+ scope: overrides.scope ?? [{ name: "module", type: "export" }],
24
+ entities: overrides.entities ?? [
25
+ { name: "foo", type: "function" },
26
+ ],
27
+ siblings: [],
28
+ imports: [],
29
+ },
30
+ });
31
+ // ─── Smoke — exports ─────────────────────────────────────────
32
+ describe("package exports", () => {
33
+ it("exports codeChunkStrategy as a function", () => {
34
+ expect(typeof codeChunkStrategy).toBe("function");
35
+ });
36
+ it("exports ragPlugin with correct shape", () => {
37
+ expect(ragPlugin.name).toBe("code-chunk-ast");
38
+ expect(ragPlugin.type).toBe("chunker");
39
+ expect(typeof ragPlugin.factory).toBe("function");
40
+ });
41
+ });
42
+ // ─── Strategy shape ──────────────────────────────────────────
43
+ describe("codeChunkStrategy() factory", () => {
44
+ it("returns object with chunk, extractMetadata, getQualityMetrics", () => {
45
+ const s = codeChunkStrategy();
46
+ expect(typeof s.chunk).toBe("function");
47
+ expect(typeof s.extractMetadata).toBe("function");
48
+ expect(typeof s.getQualityMetrics).toBe("function");
49
+ });
50
+ it("strategy name is 'code-chunk-ast'", () => {
51
+ expect(codeChunkStrategy().name).toBe("code-chunk-ast");
52
+ });
53
+ });
54
+ // ─── chunk() — edge cases ────────────────────────────────────
55
+ describe("chunk() — edge cases", () => {
56
+ beforeEach(() => {
57
+ vi.clearAllMocks();
58
+ });
59
+ it("returns [] when filePath is undefined", async () => {
60
+ const result = await codeChunkStrategy().chunk("const x = 1;");
61
+ expect(result).toHaveLength(0);
62
+ expect(mockCodeChunk).not.toHaveBeenCalled();
63
+ });
64
+ it("returns [] when code-chunk throws UnsupportedLanguageError", async () => {
65
+ vi.mocked(mockCodeChunk).mockRejectedValueOnce(new UnsupportedLanguageError("file.rb"));
66
+ const result = await codeChunkStrategy().chunk("puts 'hello'", "file.rb");
67
+ expect(result).toHaveLength(0);
68
+ });
69
+ it("propagates non-UnsupportedLanguageError errors", async () => {
70
+ vi.mocked(mockCodeChunk).mockRejectedValueOnce(new Error("parse failure"));
71
+ await expect(codeChunkStrategy().chunk("bad code", "file.ts")).rejects.toThrow("parse failure");
72
+ });
73
+ });
74
+ // ─── chunk() — happy path ────────────────────────────────────
75
+ describe("chunk() — mapping", () => {
76
+ beforeEach(() => {
77
+ vi.clearAllMocks();
78
+ });
79
+ it("maps c.text to Chunk.content by default", async () => {
80
+ vi.mocked(mockCodeChunk).mockResolvedValueOnce([makeMockChunk()]);
81
+ const chunks = await codeChunkStrategy().chunk("code", "f.ts");
82
+ expect(chunks[0].content).toBe("function foo() {}");
83
+ });
84
+ it("maps c.contextualizedText when useContextualizedText is true", async () => {
85
+ vi.mocked(mockCodeChunk).mockResolvedValueOnce([makeMockChunk()]);
86
+ const chunks = await codeChunkStrategy({
87
+ useContextualizedText: true,
88
+ }).chunk("code", "f.ts");
89
+ expect(chunks[0].content).toBe("// scope: module\nfunction foo() {}");
90
+ });
91
+ it("sets sourceFile, commitHash, and strategy metadata", async () => {
92
+ vi.mocked(mockCodeChunk).mockResolvedValueOnce([makeMockChunk()]);
93
+ const chunks = await codeChunkStrategy().chunk("code", "src/main.ts");
94
+ expect(chunks[0].sourceFile).toBe("src/main.ts");
95
+ expect(chunks[0].commitHash).toBe("");
96
+ expect(chunks[0].metadata.strategy).toBe("code-chunk-ast");
97
+ expect(chunks[0].metadata.source_file).toBe("src/main.ts");
98
+ });
99
+ it("sets sequential chunk_index across multiple results", async () => {
100
+ vi.mocked(mockCodeChunk).mockResolvedValueOnce([
101
+ makeMockChunk({ text: "a", totalChunks: 2 }),
102
+ makeMockChunk({ text: "b", totalChunks: 2 }),
103
+ ]);
104
+ const chunks = await codeChunkStrategy().chunk("ab", "f.ts");
105
+ expect(chunks[0].metadata.chunk_index).toBe(0);
106
+ expect(chunks[1].metadata.chunk_index).toBe(1);
107
+ });
108
+ it("includes scope and entities from context in metadata", async () => {
109
+ const scope = [{ name: "MyClass", type: "class" }];
110
+ const entities = [{ name: "myMethod", type: "method" }];
111
+ vi.mocked(mockCodeChunk).mockResolvedValueOnce([
112
+ makeMockChunk({ scope, entities }),
113
+ ]);
114
+ const chunks = await codeChunkStrategy().chunk("code", "f.ts");
115
+ expect(chunks[0].metadata.scope).toEqual(scope);
116
+ expect(chunks[0].metadata.entities).toEqual(entities);
117
+ });
118
+ it("passes ChunkOptions to code-chunk (not useContextualizedText)", async () => {
119
+ vi.mocked(mockCodeChunk).mockResolvedValueOnce([]);
120
+ await codeChunkStrategy({
121
+ maxChunkSize: 500,
122
+ filterImports: true,
123
+ useContextualizedText: true,
124
+ }).chunk("code", "f.ts");
125
+ expect(mockCodeChunk).toHaveBeenCalledWith("f.ts", "code", expect.objectContaining({ maxChunkSize: 500, filterImports: true }));
126
+ expect(mockCodeChunk).toHaveBeenCalledWith("f.ts", "code", expect.not.objectContaining({ useContextualizedText: expect.anything() }));
127
+ });
128
+ it("sets total_chunks from code-chunk result", async () => {
129
+ vi.mocked(mockCodeChunk).mockResolvedValueOnce([
130
+ makeMockChunk({ totalChunks: 3 }),
131
+ ]);
132
+ const chunks = await codeChunkStrategy().chunk("code", "f.ts");
133
+ expect(chunks[0].metadata.total_chunks).toBe(3);
134
+ });
135
+ });
136
+ // ─── extractMetadata() ───────────────────────────────────────
137
+ describe("extractMetadata()", () => {
138
+ beforeEach(() => {
139
+ vi.clearAllMocks();
140
+ });
141
+ it("returns supported: true and language for known extensions", () => {
142
+ vi.mocked(mockDetectLanguage).mockReturnValueOnce("typescript");
143
+ const meta = codeChunkStrategy().extractMetadata("code", "src/main.ts");
144
+ expect(meta.supported).toBe(true);
145
+ expect(meta.language).toBe("typescript");
146
+ expect(meta.strategy).toBe("code-chunk-ast");
147
+ });
148
+ it("returns supported: false and language: 'unknown' for unsupported extensions", () => {
149
+ vi.mocked(mockDetectLanguage).mockReturnValueOnce(null);
150
+ const meta = codeChunkStrategy().extractMetadata("code", "file.xyz");
151
+ expect(meta.supported).toBe(false);
152
+ expect(meta.language).toBe("unknown");
153
+ });
154
+ it("returns supported: false when filePath is undefined", () => {
155
+ const meta = codeChunkStrategy().extractMetadata("code");
156
+ expect(meta.supported).toBe(false);
157
+ expect(mockDetectLanguage).not.toHaveBeenCalled();
158
+ });
159
+ });
160
+ // ─── getQualityMetrics() ─────────────────────────────────────
161
+ describe("getQualityMetrics()", () => {
162
+ it("returns zero metrics for empty chunk array", () => {
163
+ const metrics = codeChunkStrategy().getQualityMetrics([]);
164
+ expect(metrics.avgChunkSize).toBe(0);
165
+ expect(metrics.stdDevChunkSize).toBe(0);
166
+ expect(metrics.semanticCoherence).toBe(0);
167
+ expect(metrics.informationDensity).toBe(0);
168
+ });
169
+ it("computes non-zero metrics from real chunk content", () => {
170
+ const chunks = [
171
+ {
172
+ content: "function foo() { return 42; }",
173
+ metadata: {},
174
+ sourceFile: "f.ts",
175
+ commitHash: "",
176
+ },
177
+ {
178
+ content: "function bar(x: number) { return x * 2; }",
179
+ metadata: {},
180
+ sourceFile: "f.ts",
181
+ commitHash: "",
182
+ },
183
+ ];
184
+ const metrics = codeChunkStrategy().getQualityMetrics(chunks);
185
+ expect(metrics.avgChunkSize).toBeGreaterThan(0);
186
+ expect(metrics.informationDensity).toBeGreaterThan(0);
187
+ expect(metrics.stdDevChunkSize).toBeGreaterThanOrEqual(0);
188
+ expect(metrics.semanticCoherence).toBeGreaterThanOrEqual(0);
189
+ });
190
+ });
191
+ // ─── ragPlugin ───────────────────────────────────────────────
192
+ describe("ragPlugin", () => {
193
+ it("factory() returns a strategy with correct name and chunk function", () => {
194
+ const strategy = ragPlugin.factory();
195
+ expect(strategy.name).toBe("code-chunk-ast");
196
+ expect(typeof strategy.chunk).toBe("function");
197
+ });
198
+ it("factory() creates independent strategy instances", () => {
199
+ expect(ragPlugin.factory()).not.toBe(ragPlugin.factory());
200
+ });
201
+ });
202
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@vivantel/virage-code-chunk-chunker",
3
+ "version": "0.1.2",
4
+ "type": "module",
5
+ "description": "AST-aware code chunking strategy for @vivantel/virage-core, powered by code-chunk",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/vivantel/virage",
9
+ "directory": "packages/virage-code-chunk-chunker"
10
+ },
11
+ "main": "dist/index.js",
12
+ "types": "dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "import": "./dist/index.js",
16
+ "types": "./dist/index.d.ts"
17
+ }
18
+ },
19
+ "files": [
20
+ "dist",
21
+ "README.md"
22
+ ],
23
+ "sideEffects": false,
24
+ "publishConfig": {
25
+ "access": "public"
26
+ },
27
+ "scripts": {
28
+ "build": "tsc",
29
+ "type-check": "tsc --noEmit",
30
+ "test": "vitest run",
31
+ "prepublishOnly": "npm run build && npm test",
32
+ "lint": "eslint src/",
33
+ "lint:fix": "eslint src/ --fix",
34
+ "format": "prettier --write \"src/**/*.ts\"",
35
+ "format:check": "prettier --check \"src/**/*.ts\"",
36
+ "fix": "npm run lint:fix && npm run format"
37
+ },
38
+ "keywords": [
39
+ "rag",
40
+ "chunking",
41
+ "code",
42
+ "ast",
43
+ "tree-sitter",
44
+ "embeddings"
45
+ ],
46
+ "author": "Vivantel",
47
+ "license": "MIT",
48
+ "dependencies": {
49
+ "code-chunk": "^0.1.14"
50
+ },
51
+ "peerDependencies": {
52
+ "@vivantel/virage-core": "*"
53
+ },
54
+ "devDependencies": {
55
+ "@vivantel/virage-core": "0.2.18",
56
+ "@types/node": "^25.9.1",
57
+ "typescript": "^6.0.3",
58
+ "vitest": "^4.1.8"
59
+ },
60
+ "engines": {
61
+ "node": ">=18.0.0"
62
+ }
63
+ }