@cesarandreslopez/occ 0.9.1 → 0.9.3
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 +45 -45
- package/dist/src/code/chunk.d.ts +9 -0
- package/dist/src/code/chunk.js +92 -2
- package/dist/src/code/chunk.js.map +1 -1
- package/dist/src/code/isolated-chunk-runner.d.ts +5 -0
- package/dist/src/code/isolated-chunk-runner.js +96 -0
- package/dist/src/code/isolated-chunk-runner.js.map +1 -0
- package/dist/src/code/isolated.d.ts +30 -2
- package/dist/src/code/isolated.js +110 -2
- package/dist/src/code/isolated.js.map +1 -1
- package/dist/src/code/session.d.ts +2 -0
- package/dist/src/code/session.js +5 -1
- package/dist/src/code/session.js.map +1 -1
- package/dist/src/code/store.d.ts +10 -0
- package/dist/src/code/store.js +11 -0
- package/dist/src/code/store.js.map +1 -1
- package/dist/src/index.d.ts +8 -6
- package/dist/src/index.js +5 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/progress-event.d.ts +8 -0
- package/dist/src/workspace/bundle-io.d.ts +10 -1
- package/dist/src/workspace/bundle-io.js +65 -18
- package/dist/src/workspace/bundle-io.js.map +1 -1
- package/dist/src/workspace/bundle.d.ts +6 -0
- package/dist/src/workspace/bundle.js +81 -14
- package/dist/src/workspace/bundle.js.map +1 -1
- package/package.json +1 -1
- package/skills/occ/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -445,7 +445,7 @@ console.log(bundle.documentChunks?.length); // heading-aware token-budgeted docu
|
|
|
445
445
|
console.log(bundle.corpusChunks?.length); // merged code + document chunks (WorkspaceCorpusChunk[]) for RAG
|
|
446
446
|
```
|
|
447
447
|
|
|
448
|
-
`bundleWorkspace` also supports `offThread: true`, which runs the whole bundle in a forked child process. Use it with `cacheDir` (or no store); a caller-provided `store` instance cannot cross the process boundary. When `includeCodeChunks` or `includeCorpusChunks` is enabled, OCC
|
|
448
|
+
`bundleWorkspace` also supports `offThread: true`, which runs the whole bundle in a forked child process. Use it with `cacheDir` (or no store); a caller-provided `store` instance cannot cross the process boundary. When `includeCodeChunks` or `includeCorpusChunks` is enabled, chunks contain source text, so OCC reads full code content to produce them. By default it retains that content for every indexed file at once; set `streamCodeChunks: true` to read each file on demand instead, keeping the retained `codeIndex` slim (`contentMode: 'none'`) so peak memory stays proportional to a single file rather than the whole corpus. Either way you can also lower `maxCodeFiles`/`maxCodeBytes` or scope `codeChunk.files` to bound transient memory.
|
|
449
449
|
|
|
450
450
|
For heading-aware token-budgeted document chunking (RAG-friendly):
|
|
451
451
|
|
|
@@ -473,50 +473,50 @@ const callGraph = session.toMermaid('call-graph', 'bootstrap');
|
|
|
473
473
|
|
|
474
474
|
Available subpath exports:
|
|
475
475
|
|
|
476
|
-
| Import path | Description
|
|
477
|
-
| ----------------------------------------------- |
|
|
478
|
-
| `@cesarandreslopez/occ/code/build` | `buildCodebaseIndex` — graph construction (with optional `maxFiles`/`maxBytes`/`onBudgetExceeded` budget controls and `CodeIndexBudgetExceededError`); also `parseCodeFiles` (bounded-concurrency parse pool) + `assembleCodebaseIndex` for staged indexing
|
|
479
|
-
| `@cesarandreslopez/occ/code/types` | TypeScript types (`CodebaseIndex`, `CodeNode`, `CodeEdge`, `IndexTruncation`, etc.)
|
|
480
|
-
| `@cesarandreslopez/occ/code/query` | Query functions (`findByName`, `analyzeCalls`, `analyzeDeps`, etc.)
|
|
481
|
-
| `@cesarandreslopez/occ/code/discover` | `discoverCodeFiles` — file discovery
|
|
482
|
-
| `@cesarandreslopez/occ/code/preview` | `previewCodebaseSize` — cheap size + per-language estimate without parsing, with budget pressure reporting
|
|
483
|
-
| `@cesarandreslopez/occ/code/isolated` | `buildCodebaseIndexIsolated` — runs `buildCodebaseIndex` in a forked subprocess, optionally returning a slim index
|
|
484
|
-
| `@cesarandreslopez/occ/code/incremental` | `computeManifestDiff`, `classifyChangedFiles`, `findResolutionImpactedFiles`, `spliceIndexInputs` — primitives behind incremental `update()`/`ensureFresh()` (manifest diff + resolution-impact + graph splice)
|
|
485
|
-
| `@cesarandreslopez/occ/code/slim` | `slimifyIndex`, `parseSlimIndex`, `validateSlimIndex` — content-free `CodebaseIndexSlim` for graph-only consumers
|
|
486
|
-
| `@cesarandreslopez/occ/code/chunk` | `chunkCodebase`, `chunkFromIndex` — semantic code chunking (word- or token-based via `maxTokens`/`countTokens`)
|
|
487
|
-
| `@cesarandreslopez/occ/code/session` | `createCodeQuerySession` — stateful code query session
|
|
488
|
-
| `@cesarandreslopez/occ/code/store` | `openCodeIndexStore`, `openChunkCodeIndexStore` — persistent index store with cache strategies (the chunk variant pins `contentMode: 'full'`; `update(changedFiles?)` does a true incremental refresh — manifest diff + targeted re-parse + graph splice)
|
|
489
|
-
| `@cesarandreslopez/occ/code/cache` | Index caching utilities (legacy — prefer `./code/store`)
|
|
490
|
-
| `@cesarandreslopez/occ/code/diff` | `computeCodeDiff`, `joinHunksToSymbols` — map a git diff range to changed code symbols (added/removed/modified, new/removed exports, removed-symbol recovery)
|
|
491
|
-
| `@cesarandreslopez/occ/git` | Git context API — `getGitChangedFiles`, `getGitDiffSummary`, `getGitDiffPatch`, `getGitDiffHunks`, `getGitDiffFunctionContext`, `getGitCommitHistory`, `getGitFileHistory`, `getGitChurnSummary`, `resolveGitRange` (also `./git/types`, `./git/api`, `./git/client`, `./git/parse`)
|
|
492
|
-
| `@cesarandreslopez/occ/doc/inspect` | `inspectDocument` — document metadata and content extraction
|
|
493
|
-
| `@cesarandreslopez/occ/doc/types` | Document inspection types
|
|
494
|
-
| `@cesarandreslopez/occ/doc/discover` | Document file discovery (now includes prose formats by default; opt into data files via `includeDataFiles`; new `discoverDocumentSet` returns `{ documents, skipped }`)
|
|
495
|
-
| `@cesarandreslopez/occ/doc/batch` | Batch document inspection
|
|
496
|
-
| `@cesarandreslopez/occ/doc/chunk` | `chunkDocument` / `chunkDocumentFromMarkdown` — heading-aware, token-budgeted document chunker for DOCX/PDF/PPTX/XLSX/ODT/ODS/ODP/MD/MDX/TXT/RST/AsciiDoc (the `FromMarkdown` variant chunks pre-converted markdown without re-parsing)
|
|
497
|
-
| `@cesarandreslopez/occ/doc/entities` | Entity and keyword extraction
|
|
498
|
-
| `@cesarandreslopez/occ/doc/references` | Cross-reference detection
|
|
499
|
-
| `@cesarandreslopez/occ/workspace/analyze` | `analyzeWorkspace` — workspace-level analysis
|
|
500
|
-
| `@cesarandreslopez/occ/workspace/describe` | `describeWorkspace` — fast directory classification
|
|
501
|
-
| `@cesarandreslopez/occ/workspace/documents` | `inspectWorkspaceDocumentSet` — document summaries and cross-references
|
|
502
|
-
| `@cesarandreslopez/occ/workspace/types` | Workspace analysis types
|
|
503
|
-
| `@cesarandreslopez/occ/workspace/prepare` | `prepareWorkspaceContext` — combined code indexing + document inspection
|
|
504
|
-
| `@cesarandreslopez/occ/workspace/prepare-types` | Workspace preparation types (`WorkspacePrepareOptions`, `WorkspacePreparedContext`, etc.)
|
|
505
|
-
| `@cesarandreslopez/occ/workspace/bundle` | `bundleWorkspace` — single-call versioned `WorkspaceBundle` (description + analysis + documents + slim code index + outline + cross-refs + optional document / code / unified corpus chunks via `WorkspaceCorpusChunk`)
|
|
506
|
-
| `@cesarandreslopez/occ/markdown/convert` | `documentToMarkdown` — document-to-markdown conversion (now reads MD/MDX/TXT/RST/AsciiDoc/YAML/JSON/TOML directly)
|
|
507
|
-
| `@cesarandreslopez/occ/structure/extract` | `extractFromMarkdown` — heading tree extraction
|
|
508
|
-
| `@cesarandreslopez/occ/structure/types` | Structure types and helpers
|
|
509
|
-
| `@cesarandreslopez/occ/sheet/inspect` | `inspectWorkbook` — XLSX workbook inspection
|
|
510
|
-
| `@cesarandreslopez/occ/sheet/types` | Sheet inspection types
|
|
511
|
-
| `@cesarandreslopez/occ/slide/inspect` | `inspectPresentation` — presentation inspection
|
|
512
|
-
| `@cesarandreslopez/occ/table/inspect` | Table extraction from documents
|
|
513
|
-
| `@cesarandreslopez/occ/table/types` | Table extraction types
|
|
514
|
-
| `@cesarandreslopez/occ/health` | `health()` — liveness probe with version + capability flags
|
|
515
|
-
| `@cesarandreslopez/occ/errors` | `OccAbortError`, `OCC_ABORTED`, `isOccAbortError` — typed abort error that survives `instanceof` across forked subprocesses
|
|
516
|
-
| `@cesarandreslopez/occ/types` | Shared types (`ConfidenceLevel`, `ParseResult`, `ParserOutput`, etc.)
|
|
517
|
-
| `@cesarandreslopez/occ/tokens` | Token estimation utilities
|
|
518
|
-
| `@cesarandreslopez/occ/progress-event` | Progress event types (`ProgressPhase`, `ProgressEvent` with optional `scope`/`currentPath`/`bytesProcessed`/`totalBytes`/`startedAt`/`elapsedMs`)
|
|
519
|
-
| `@cesarandreslopez/occ/stats` | Stats types (`StatsRow`, `AggregateResult`) and `aggregate()`
|
|
476
|
+
| Import path | Description |
|
|
477
|
+
| ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
478
|
+
| `@cesarandreslopez/occ/code/build` | `buildCodebaseIndex` — graph construction (with optional `maxFiles`/`maxBytes`/`onBudgetExceeded` budget controls and `CodeIndexBudgetExceededError`); also `parseCodeFiles` (bounded-concurrency parse pool) + `assembleCodebaseIndex` for staged indexing |
|
|
479
|
+
| `@cesarandreslopez/occ/code/types` | TypeScript types (`CodebaseIndex`, `CodeNode`, `CodeEdge`, `IndexTruncation`, etc.) |
|
|
480
|
+
| `@cesarandreslopez/occ/code/query` | Query functions (`findByName`, `analyzeCalls`, `analyzeDeps`, etc.) |
|
|
481
|
+
| `@cesarandreslopez/occ/code/discover` | `discoverCodeFiles` — file discovery |
|
|
482
|
+
| `@cesarandreslopez/occ/code/preview` | `previewCodebaseSize` — cheap size + per-language estimate without parsing, with budget pressure reporting |
|
|
483
|
+
| `@cesarandreslopez/occ/code/isolated` | `buildCodebaseIndexIsolated` — runs `buildCodebaseIndex` in a forked subprocess, optionally returning a slim index; also `chunkFromStoreIsolated` — runs store-backed code chunking in a forked subprocess (options `ChunkFromStoreIsolatedOptions`, `SerializableCodeChunkOptions`) |
|
|
484
|
+
| `@cesarandreslopez/occ/code/incremental` | `computeManifestDiff`, `classifyChangedFiles`, `findResolutionImpactedFiles`, `spliceIndexInputs` — primitives behind incremental `update()`/`ensureFresh()` (manifest diff + resolution-impact + graph splice) |
|
|
485
|
+
| `@cesarandreslopez/occ/code/slim` | `slimifyIndex`, `parseSlimIndex`, `validateSlimIndex` — content-free `CodebaseIndexSlim` for graph-only consumers |
|
|
486
|
+
| `@cesarandreslopez/occ/code/chunk` | `chunkCodebase`, `chunkFromIndex`, `chunkFromIndexCooperative`, `chunkFromIndexStreaming` — semantic code chunking (word- or token-based via `maxTokens`/`countTokens`; the cooperative variant yields the event loop, the streaming variant reads each file on demand from a slim/`contentMode: 'none'` index) |
|
|
487
|
+
| `@cesarandreslopez/occ/code/session` | `createCodeQuerySession` — stateful code query session (sync `chunk()` plus async `chunkCooperative()` that yields the event loop while chunking) |
|
|
488
|
+
| `@cesarandreslopez/occ/code/store` | `openCodeIndexStore`, `openChunkCodeIndexStore` — persistent index store with cache strategies (the chunk variant pins `contentMode: 'full'`; `update(changedFiles?)` does a true incremental refresh — manifest diff + targeted re-parse + graph splice; `chunkIsolated(options?)` chunks the cached index in a forked subprocess) |
|
|
489
|
+
| `@cesarandreslopez/occ/code/cache` | Index caching utilities (legacy — prefer `./code/store`) |
|
|
490
|
+
| `@cesarandreslopez/occ/code/diff` | `computeCodeDiff`, `joinHunksToSymbols` — map a git diff range to changed code symbols (added/removed/modified, new/removed exports, removed-symbol recovery) |
|
|
491
|
+
| `@cesarandreslopez/occ/git` | Git context API — `getGitChangedFiles`, `getGitDiffSummary`, `getGitDiffPatch`, `getGitDiffHunks`, `getGitDiffFunctionContext`, `getGitCommitHistory`, `getGitFileHistory`, `getGitChurnSummary`, `resolveGitRange` (also `./git/types`, `./git/api`, `./git/client`, `./git/parse`) |
|
|
492
|
+
| `@cesarandreslopez/occ/doc/inspect` | `inspectDocument` — document metadata and content extraction |
|
|
493
|
+
| `@cesarandreslopez/occ/doc/types` | Document inspection types |
|
|
494
|
+
| `@cesarandreslopez/occ/doc/discover` | Document file discovery (now includes prose formats by default; opt into data files via `includeDataFiles`; new `discoverDocumentSet` returns `{ documents, skipped }`) |
|
|
495
|
+
| `@cesarandreslopez/occ/doc/batch` | Batch document inspection |
|
|
496
|
+
| `@cesarandreslopez/occ/doc/chunk` | `chunkDocument` / `chunkDocumentFromMarkdown` — heading-aware, token-budgeted document chunker for DOCX/PDF/PPTX/XLSX/ODT/ODS/ODP/MD/MDX/TXT/RST/AsciiDoc (the `FromMarkdown` variant chunks pre-converted markdown without re-parsing) |
|
|
497
|
+
| `@cesarandreslopez/occ/doc/entities` | Entity and keyword extraction |
|
|
498
|
+
| `@cesarandreslopez/occ/doc/references` | Cross-reference detection |
|
|
499
|
+
| `@cesarandreslopez/occ/workspace/analyze` | `analyzeWorkspace` — workspace-level analysis |
|
|
500
|
+
| `@cesarandreslopez/occ/workspace/describe` | `describeWorkspace` — fast directory classification |
|
|
501
|
+
| `@cesarandreslopez/occ/workspace/documents` | `inspectWorkspaceDocumentSet` — document summaries and cross-references |
|
|
502
|
+
| `@cesarandreslopez/occ/workspace/types` | Workspace analysis types |
|
|
503
|
+
| `@cesarandreslopez/occ/workspace/prepare` | `prepareWorkspaceContext` — combined code indexing + document inspection |
|
|
504
|
+
| `@cesarandreslopez/occ/workspace/prepare-types` | Workspace preparation types (`WorkspacePrepareOptions`, `WorkspacePreparedContext`, etc.) |
|
|
505
|
+
| `@cesarandreslopez/occ/workspace/bundle` | `bundleWorkspace` — single-call versioned `WorkspaceBundle` (description + analysis + documents + slim code index + outline + cross-refs + optional document / code / unified corpus chunks via `WorkspaceCorpusChunk`) |
|
|
506
|
+
| `@cesarandreslopez/occ/markdown/convert` | `documentToMarkdown` — document-to-markdown conversion (now reads MD/MDX/TXT/RST/AsciiDoc/YAML/JSON/TOML directly) |
|
|
507
|
+
| `@cesarandreslopez/occ/structure/extract` | `extractFromMarkdown` — heading tree extraction |
|
|
508
|
+
| `@cesarandreslopez/occ/structure/types` | Structure types and helpers |
|
|
509
|
+
| `@cesarandreslopez/occ/sheet/inspect` | `inspectWorkbook` — XLSX workbook inspection |
|
|
510
|
+
| `@cesarandreslopez/occ/sheet/types` | Sheet inspection types |
|
|
511
|
+
| `@cesarandreslopez/occ/slide/inspect` | `inspectPresentation` — presentation inspection |
|
|
512
|
+
| `@cesarandreslopez/occ/table/inspect` | Table extraction from documents |
|
|
513
|
+
| `@cesarandreslopez/occ/table/types` | Table extraction types |
|
|
514
|
+
| `@cesarandreslopez/occ/health` | `health()` — liveness probe with version + capability flags |
|
|
515
|
+
| `@cesarandreslopez/occ/errors` | `OccAbortError`, `OCC_ABORTED`, `isOccAbortError` — typed abort error that survives `instanceof` across forked subprocesses |
|
|
516
|
+
| `@cesarandreslopez/occ/types` | Shared types (`ConfidenceLevel`, `ParseResult`, `ParserOutput`, etc.) |
|
|
517
|
+
| `@cesarandreslopez/occ/tokens` | Token estimation utilities |
|
|
518
|
+
| `@cesarandreslopez/occ/progress-event` | Progress event types (`ProgressPhase`, `ProgressEvent` with optional `scope`/`currentPath`/`bytesProcessed`/`totalBytes`/`startedAt`/`elapsedMs`, plus off-thread bundle-read timing fields `section`/`parentReadStartedAt`/`parentReadFinishedAt`/`parentReadDurationMs`/`sectionStartedAt`/`sectionFinishedAt`/`sectionDurationMs`/`cleanupDurationMs`) |
|
|
519
|
+
| `@cesarandreslopez/occ/stats` | Stats types (`StatsRow`, `AggregateResult`) and `aggregate()` |
|
|
520
520
|
|
|
521
521
|
TypeScript ships with OCC as a direct dependency, so the code exploration module works after a normal install. You only need a separate TypeScript setup if your own project uses `tsc`.
|
|
522
522
|
|
package/dist/src/code/chunk.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CodebaseIndex } from './types.js';
|
|
2
2
|
import { type BuildCodebaseOptions } from './build.js';
|
|
3
|
+
import type { CodebaseIndexSlim } from './slim.js';
|
|
3
4
|
import { type Yielder } from '../utils.js';
|
|
4
5
|
import type { OnProgress } from '../progress-event.js';
|
|
5
6
|
export interface CodeChunk {
|
|
@@ -32,8 +33,16 @@ export interface CodeChunkOptions {
|
|
|
32
33
|
*/
|
|
33
34
|
files?: string[];
|
|
34
35
|
}
|
|
36
|
+
export interface CodeChunkStreamingOptions {
|
|
37
|
+
signal?: AbortSignal;
|
|
38
|
+
yielder?: Yielder;
|
|
39
|
+
readFile?: (filePath: string) => Promise<string>;
|
|
40
|
+
}
|
|
41
|
+
type ChunkableIndex = CodebaseIndex | CodebaseIndexSlim;
|
|
35
42
|
/** Chunk files from an already-built CodebaseIndex (avoids double-parsing) */
|
|
36
43
|
export declare function chunkFromIndex(index: CodebaseIndex, options?: CodeChunkOptions): CodeChunk[];
|
|
37
44
|
export declare function chunkFromIndexCooperative(index: CodebaseIndex, options: CodeChunkOptions | undefined, yielder: Yielder): Promise<CodeChunk[]>;
|
|
45
|
+
export declare function chunkFromIndexStreaming(index: ChunkableIndex, options?: CodeChunkOptions, streaming?: CodeChunkStreamingOptions): Promise<CodeChunk[]>;
|
|
38
46
|
/** Discover, parse, and chunk an entire codebase */
|
|
39
47
|
export declare function chunkCodebase(options: BuildCodebaseOptions & CodeChunkOptions, onProgress?: OnProgress): Promise<CodeChunk[]>;
|
|
48
|
+
export {};
|
package/dist/src/code/chunk.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
+
import { readFile as readTextFile } from 'node:fs/promises';
|
|
2
3
|
import { buildCodebaseIndex } from './build.js';
|
|
3
|
-
import { countWords } from '../utils.js';
|
|
4
|
+
import { abortIfNeeded, countWords } from '../utils.js';
|
|
4
5
|
const DEFAULT_MAX_CHUNK_WORDS = 500;
|
|
5
6
|
const DEFAULT_OVERLAP_WORDS = 50;
|
|
6
7
|
const DEFAULT_MAX_CHUNK_TOKENS = 1_200;
|
|
@@ -89,6 +90,69 @@ function chunkByUnits(file, lines, sizer) {
|
|
|
89
90
|
}
|
|
90
91
|
return chunks;
|
|
91
92
|
}
|
|
93
|
+
async function chunkFileCooperative(file, sizer, yielder) {
|
|
94
|
+
const chunks = [];
|
|
95
|
+
const lines = file.lines;
|
|
96
|
+
if (!lines) {
|
|
97
|
+
throw new Error(`chunkFromIndex requires full file lines for ${file.relativePath}.`);
|
|
98
|
+
}
|
|
99
|
+
const sortedSymbols = [...file.symbols].sort((a, b) => a.line - b.line);
|
|
100
|
+
if (sortedSymbols.length === 0) {
|
|
101
|
+
return chunkByUnitsCooperative(file, lines, sizer, yielder);
|
|
102
|
+
}
|
|
103
|
+
const boundaries = [];
|
|
104
|
+
for (let i = 0; i < sortedSymbols.length; i++) {
|
|
105
|
+
const sym = sortedSymbols[i];
|
|
106
|
+
const startLine = sym.line - 1;
|
|
107
|
+
const endLine = i + 1 < sortedSymbols.length ? sortedSymbols[i + 1].line - 2 : lines.length - 1;
|
|
108
|
+
boundaries.push({ startLine, endLine, symbols: [sym] });
|
|
109
|
+
await yielder.tick();
|
|
110
|
+
}
|
|
111
|
+
if (boundaries.length > 0 && boundaries[0].startLine > 0) {
|
|
112
|
+
boundaries.unshift({ startLine: 0, endLine: boundaries[0].startLine - 1, symbols: [] });
|
|
113
|
+
}
|
|
114
|
+
let currentStart = boundaries[0]?.startLine ?? 0;
|
|
115
|
+
let currentEnd = boundaries[0]?.endLine ?? 0;
|
|
116
|
+
let currentSymbols = [...(boundaries[0]?.symbols ?? [])];
|
|
117
|
+
let currentUnits = sizer.count(lines.slice(currentStart, currentEnd + 1).join('\n'));
|
|
118
|
+
for (let i = 1; i < boundaries.length; i++) {
|
|
119
|
+
const section = boundaries[i];
|
|
120
|
+
const sectionText = lines.slice(section.startLine, section.endLine + 1).join('\n');
|
|
121
|
+
const sectionUnits = sizer.count(sectionText);
|
|
122
|
+
if (currentUnits + sectionUnits <= sizer.maxUnits) {
|
|
123
|
+
currentEnd = section.endLine;
|
|
124
|
+
currentSymbols.push(...section.symbols);
|
|
125
|
+
currentUnits += sectionUnits;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
emitChunk(chunks, file, lines, currentStart, currentEnd, currentSymbols);
|
|
129
|
+
const overlapStart = findOverlapStart(lines, currentEnd, sizer);
|
|
130
|
+
currentStart = Math.min(overlapStart, section.startLine);
|
|
131
|
+
currentEnd = section.endLine;
|
|
132
|
+
currentSymbols = [...section.symbols];
|
|
133
|
+
currentUnits = sizer.count(lines.slice(currentStart, currentEnd + 1).join('\n'));
|
|
134
|
+
}
|
|
135
|
+
await yielder.tick();
|
|
136
|
+
}
|
|
137
|
+
emitChunk(chunks, file, lines, currentStart, currentEnd, currentSymbols);
|
|
138
|
+
return chunks;
|
|
139
|
+
}
|
|
140
|
+
async function chunkByUnitsCooperative(file, lines, sizer, yielder) {
|
|
141
|
+
const chunks = [];
|
|
142
|
+
let currentStart = 0;
|
|
143
|
+
let currentUnits = 0;
|
|
144
|
+
for (let i = 0; i < lines.length; i++) {
|
|
145
|
+
currentUnits += sizer.count(lines[i]);
|
|
146
|
+
if (currentUnits >= sizer.maxUnits || i === lines.length - 1) {
|
|
147
|
+
emitChunk(chunks, file, lines, currentStart, i, []);
|
|
148
|
+
const overlapStart = findOverlapStart(lines, i, sizer);
|
|
149
|
+
currentStart = overlapStart;
|
|
150
|
+
currentUnits = sizer.count(lines.slice(currentStart, i + 1).join('\n'));
|
|
151
|
+
}
|
|
152
|
+
await yielder.tick();
|
|
153
|
+
}
|
|
154
|
+
return chunks;
|
|
155
|
+
}
|
|
92
156
|
function findOverlapStart(lines, endLine, sizer) {
|
|
93
157
|
if (sizer.overlapUnits <= 0)
|
|
94
158
|
return endLine + 1;
|
|
@@ -136,6 +200,18 @@ function scopeFiles(index, files) {
|
|
|
136
200
|
const wanted = new Set(files.map(entry => normalizeScopedPath(index.repoRoot, entry)));
|
|
137
201
|
return index.files.filter(file => wanted.has(file.relativePath));
|
|
138
202
|
}
|
|
203
|
+
async function hydrateChunkFile(file, options) {
|
|
204
|
+
if (file.lines)
|
|
205
|
+
return file;
|
|
206
|
+
abortIfNeeded(options.signal);
|
|
207
|
+
const content = await (options.readFile ?? ((filePath) => readTextFile(filePath, 'utf8')))(file.path);
|
|
208
|
+
abortIfNeeded(options.signal);
|
|
209
|
+
return {
|
|
210
|
+
...file,
|
|
211
|
+
content,
|
|
212
|
+
lines: content.split(/\r?\n/),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
139
215
|
/** Chunk files from an already-built CodebaseIndex (avoids double-parsing) */
|
|
140
216
|
export function chunkFromIndex(index, options) {
|
|
141
217
|
if (index.contentMode !== 'full') {
|
|
@@ -155,11 +231,25 @@ export async function chunkFromIndexCooperative(index, options, yielder) {
|
|
|
155
231
|
const sizer = resolveSizer(options);
|
|
156
232
|
const chunks = [];
|
|
157
233
|
for (const file of scopeFiles(index, options?.files)) {
|
|
158
|
-
chunks.push(...
|
|
234
|
+
chunks.push(...(await chunkFileCooperative(file, sizer, yielder)));
|
|
159
235
|
await yielder.tick();
|
|
160
236
|
}
|
|
161
237
|
return chunks;
|
|
162
238
|
}
|
|
239
|
+
export async function chunkFromIndexStreaming(index, options, streaming = {}) {
|
|
240
|
+
const sizer = resolveSizer(options);
|
|
241
|
+
const chunks = [];
|
|
242
|
+
for (const file of scopeFiles(index, options?.files)) {
|
|
243
|
+
abortIfNeeded(streaming.signal);
|
|
244
|
+
const hydrated = await hydrateChunkFile(file, streaming);
|
|
245
|
+
const fileChunks = streaming.yielder
|
|
246
|
+
? await chunkFileCooperative(hydrated, sizer, streaming.yielder)
|
|
247
|
+
: chunkFile(hydrated, sizer);
|
|
248
|
+
chunks.push(...fileChunks);
|
|
249
|
+
await streaming.yielder?.tick();
|
|
250
|
+
}
|
|
251
|
+
return chunks;
|
|
252
|
+
}
|
|
163
253
|
/** Discover, parse, and chunk an entire codebase */
|
|
164
254
|
export async function chunkCodebase(options, onProgress) {
|
|
165
255
|
const index = await buildCodebaseIndex({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk.js","sourceRoot":"","sources":["../../../src/code/chunk.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAA6B,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAC;AAmCvD,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAQnC,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,YAAY,CAAC,OAA0B;IAC9C,IAAI,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;QAC/B,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,SAAS;YAC3B,YAAY,EAAE,OAAO,CAAC,aAAa,IAAI,sBAAsB;YAC7D,KAAK,EAAE,OAAO,CAAC,WAAW,IAAI,cAAc;SAC7C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,OAAO,EAAE,aAAa,IAAI,uBAAuB;QAC3D,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,qBAAqB;QAC5D,KAAK,EAAE,UAAU;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAgB,EAAE,KAAiB;IACpD,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAExE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,oEAAoE;IACpE,MAAM,UAAU,GAAiF,EAAE,CAAC;IACpG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY;QAC5C,MAAM,OAAO,GACX,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM;YAC1B,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,gCAAgC;YAChE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,mDAAmD;IACnD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QACzD,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,8EAA8E;IAC9E,IAAI,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,CAAC;IACjD,IAAI,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;IAC7C,IAAI,cAAc,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IACzD,IAAI,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAErF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnF,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE9C,IAAI,YAAY,GAAG,YAAY,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAClD,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;YAC7B,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YACxC,YAAY,IAAI,YAAY,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;YACzE,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAChE,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACzD,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;YAC7B,cAAc,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YACtC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IAEzE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,IAAgB,EAAE,KAAe,EAAE,KAAiB;IACxE,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,YAAY,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7D,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACvD,YAAY,GAAG,YAAY,CAAC;YAC5B,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAe,EAAE,OAAe,EAAE,KAAiB;IAC3E,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC;QAAE,OAAO,OAAO,GAAG,CAAC,CAAC;IAChD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,KAAK,IAAI,KAAK,CAAC,YAAY;YAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,SAAS,CAChB,MAAmB,EACnB,IAAgB,EAChB,KAAe,EACf,SAAiB,EACjB,OAAe,EACf,OAA0F;IAE1F,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO;IAE5B,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,aAAa;QACzB,CAAC,CAAC,aAAa,CAAC,aAAa;YAC3B,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,aAAa,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE;YAC7E,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,aAAa,CAAC,IAAI,EAAE;QAChD,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,SAAS,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;IAE3D,MAAM,CAAC,IAAI,CAAC;QACV,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,KAAK;QACL,OAAO;QACP,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,SAAS,EAAE,SAAS,GAAG,CAAC;QACxB,OAAO,EAAE,OAAO,GAAG,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC;AAED,0EAA0E;AAC1E,SAAS,mBAAmB,CAAC,QAAgB,EAAE,KAAa;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACjF,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,+EAA+E;AAC/E,SAAS,UAAU,CAAC,KAAoB,EAAE,KAAgB;IACxD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACvF,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAAC,KAAoB,EAAE,OAA0B;IAC7E,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,uEAAuE,KAAK,CAAC,WAAW,0FAA0F,CACnL,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,KAAoB,EACpB,OAAqC,EACrC,OAAgB;IAEhB,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,uEAAuE,KAAK,CAAC,WAAW,0FAA0F,CACnL,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACvC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAgD,EAChD,UAAuB;IAEvB,MAAM,KAAK,GAAG,MAAM,kBAAkB,CACpC;QACE,GAAG,OAAO;QACV,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,MAAM;KAC3C,EACD,UAAU,CACX,CAAC;IACF,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAC9G,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"chunk.js","sourceRoot":"","sources":["../../../src/code/chunk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal subprocess entry point for store-backed code chunking.
|
|
3
|
+
* Spawned via chunkFromStoreIsolated — not a public API.
|
|
4
|
+
*/
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { tmpdir } from 'node:os';
|
|
7
|
+
import { chunkFromIndex, chunkFromIndexCooperative, chunkFromIndexStreaming } from './chunk.js';
|
|
8
|
+
import { writeNdjsonFile } from './index-io.js';
|
|
9
|
+
import { openCodeIndexStore } from './store.js';
|
|
10
|
+
import { createTokenizer } from '../tokens.js';
|
|
11
|
+
import { abortIfNeeded, createYielder, isCooperative } from '../utils.js';
|
|
12
|
+
function send(msg) {
|
|
13
|
+
process.send?.(msg);
|
|
14
|
+
}
|
|
15
|
+
async function resolveChunkOptions(options) {
|
|
16
|
+
if (!options)
|
|
17
|
+
return undefined;
|
|
18
|
+
const { tokenizer, ...chunkOptions } = options;
|
|
19
|
+
if (!tokenizer)
|
|
20
|
+
return chunkOptions;
|
|
21
|
+
const resolved = await createTokenizer(tokenizer);
|
|
22
|
+
return {
|
|
23
|
+
...chunkOptions,
|
|
24
|
+
countTokens: text => resolved.count(text),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
let abortController;
|
|
28
|
+
process.on('message', async (msg) => {
|
|
29
|
+
if (msg.type === 'abort') {
|
|
30
|
+
abortController?.abort();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (msg.type !== 'start')
|
|
34
|
+
return;
|
|
35
|
+
const store = openCodeIndexStore(msg.options.store);
|
|
36
|
+
try {
|
|
37
|
+
abortController = new AbortController();
|
|
38
|
+
const signal = abortController.signal;
|
|
39
|
+
const cooperative = msg.options.cooperative;
|
|
40
|
+
const yielder = isCooperative(cooperative) ? createYielder(cooperative, signal) : undefined;
|
|
41
|
+
const chunkOptions = await resolveChunkOptions(msg.options.chunk);
|
|
42
|
+
const session = await store.getSession({
|
|
43
|
+
strategy: msg.options.strategy ?? 'ensure-fresh',
|
|
44
|
+
signal,
|
|
45
|
+
cooperative,
|
|
46
|
+
onProgress: (event) => {
|
|
47
|
+
send({ type: 'progress', event });
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
abortIfNeeded(signal);
|
|
51
|
+
const index = session.getIndex();
|
|
52
|
+
send({
|
|
53
|
+
type: 'progress',
|
|
54
|
+
event: {
|
|
55
|
+
phase: 'chunk',
|
|
56
|
+
total: index.files.length,
|
|
57
|
+
completed: 0,
|
|
58
|
+
detail: 'Chunking code files',
|
|
59
|
+
scope: 'code',
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
const chunks = index.contentMode === 'full'
|
|
63
|
+
? yielder
|
|
64
|
+
? await chunkFromIndexCooperative(index, chunkOptions, yielder)
|
|
65
|
+
: chunkFromIndex(index, chunkOptions)
|
|
66
|
+
: await chunkFromIndexStreaming(index, chunkOptions, { signal, yielder });
|
|
67
|
+
abortIfNeeded(signal);
|
|
68
|
+
send({
|
|
69
|
+
type: 'progress',
|
|
70
|
+
event: {
|
|
71
|
+
phase: 'chunk',
|
|
72
|
+
total: chunks.length,
|
|
73
|
+
completed: chunks.length,
|
|
74
|
+
detail: 'Code chunking complete',
|
|
75
|
+
scope: 'code',
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
const resultPath = join(tmpdir(), `occ-code-chunks-${process.pid}-${Date.now()}.ndjson`);
|
|
79
|
+
await writeNdjsonFile(resultPath, chunks, signal);
|
|
80
|
+
send({ type: 'complete', resultPath });
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
84
|
+
if (error.name === 'AbortError') {
|
|
85
|
+
send({ type: 'aborted' });
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
send({ type: 'error', message: error.message, name: error.name });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
store.dispose();
|
|
93
|
+
}
|
|
94
|
+
process.disconnect?.();
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=isolated-chunk-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolated-chunk-runner.js","sourceRoot":"","sources":["../../../src/code/isolated-chunk-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,37 @@
|
|
|
1
|
-
import type { BuildCodebaseOptions } from './build.js';
|
|
2
|
-
import type {
|
|
1
|
+
import type { BudgetExceededBehavior, BuildCodebaseOptions } from './build.js';
|
|
2
|
+
import type { CodeChunk, CodeChunkOptions } from './chunk.js';
|
|
3
|
+
import type { CodebaseIndex, ContentMode } from './types.js';
|
|
3
4
|
import type { CodebaseIndexSlim } from './slim.js';
|
|
4
5
|
import type { OnProgress } from '../progress-event.js';
|
|
6
|
+
import type { TokenizerName } from '../tokens.js';
|
|
7
|
+
import { type CooperativeOption } from '../utils.js';
|
|
5
8
|
export interface BuildCodebaseIndexIsolatedOptions extends BuildCodebaseOptions {
|
|
6
9
|
slim?: boolean;
|
|
7
10
|
signal?: AbortSignal;
|
|
8
11
|
}
|
|
12
|
+
export interface SerializableCodeChunkOptions extends Omit<CodeChunkOptions, 'countTokens'> {
|
|
13
|
+
tokenizer?: TokenizerName;
|
|
14
|
+
}
|
|
15
|
+
export type ChunkFromStoreIsolatedStrategy = 'prefer-cache' | 'ensure-fresh' | 'rebuild';
|
|
16
|
+
export interface ChunkFromStoreIsolatedOptions {
|
|
17
|
+
repoRoot: string;
|
|
18
|
+
cacheDir: string;
|
|
19
|
+
excludeDir?: string[];
|
|
20
|
+
noGitignore?: boolean;
|
|
21
|
+
ignorePatterns?: string[];
|
|
22
|
+
overlayIgnorePatterns?: string[];
|
|
23
|
+
contentMode?: ContentMode;
|
|
24
|
+
maxFileSizeBytes?: number;
|
|
25
|
+
maxLines?: number;
|
|
26
|
+
skipMinified?: boolean;
|
|
27
|
+
maxFiles?: number;
|
|
28
|
+
maxBytes?: number;
|
|
29
|
+
onBudgetExceeded?: BudgetExceededBehavior;
|
|
30
|
+
parseConcurrency?: number;
|
|
31
|
+
strategy?: ChunkFromStoreIsolatedStrategy;
|
|
32
|
+
chunk?: SerializableCodeChunkOptions;
|
|
33
|
+
cooperative?: CooperativeOption;
|
|
34
|
+
signal?: AbortSignal;
|
|
35
|
+
}
|
|
9
36
|
export declare function buildCodebaseIndexIsolated(options: BuildCodebaseIndexIsolatedOptions, onProgress?: OnProgress): Promise<CodebaseIndex | CodebaseIndexSlim>;
|
|
37
|
+
export declare function chunkFromStoreIsolated(options: ChunkFromStoreIsolatedOptions, onProgress?: OnProgress): Promise<CodeChunk[]>;
|