@cesarandreslopez/occ 0.8.8 → 0.8.9
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 +10 -0
- package/dist/src/cli.d.ts +2 -1
- package/dist/src/cli.js +9 -6
- package/dist/src/cli.js.map +1 -1
- package/dist/src/code/command.js +49 -1
- package/dist/src/code/command.js.map +1 -1
- package/dist/src/code/map.d.ts +145 -0
- package/dist/src/code/map.js +275 -0
- package/dist/src/code/map.js.map +1 -0
- package/dist/src/code/output.d.ts +5 -0
- package/dist/src/code/output.js +90 -0
- package/dist/src/code/output.js.map +1 -1
- package/dist/src/code/rank.d.ts +86 -0
- package/dist/src/code/rank.js +208 -0
- package/dist/src/code/rank.js.map +1 -0
- package/dist/src/index.d.ts +7 -1
- package/dist/src/index.js +5 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/tokens.d.ts +31 -0
- package/dist/src/tokens.js +88 -0
- package/dist/src/tokens.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Importance ranking over the code graph.
|
|
3
|
+
*
|
|
4
|
+
* Runs a weighted PageRank on the `imports`/`calls`/`inherits`/`implements`
|
|
5
|
+
* edges so that symbols and files which many *important* others depend on
|
|
6
|
+
* float to the top. This is the signal `buildRepoMap` uses to decide what to
|
|
7
|
+
* keep within a token budget (cf. Aider's tree-sitter repo map).
|
|
8
|
+
*
|
|
9
|
+
* Pure and dependency-free (types + zod only) so it stays trivially testable
|
|
10
|
+
* and obeys the module DAG — it performs no I/O and does not count tokens.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
export const RankEdgeWeightsSchema = z.object({
|
|
14
|
+
imports: z.number().optional(),
|
|
15
|
+
calls: z.number().optional(),
|
|
16
|
+
inherits: z.number().optional(),
|
|
17
|
+
});
|
|
18
|
+
export const RankOptionsSchema = z.object({
|
|
19
|
+
damping: z.number().min(0).max(1).optional(),
|
|
20
|
+
maxIterations: z.number().int().positive().optional(),
|
|
21
|
+
epsilon: z.number().positive().optional(),
|
|
22
|
+
edgeWeights: RankEdgeWeightsSchema.optional(),
|
|
23
|
+
biasExports: z.boolean().optional(),
|
|
24
|
+
includeExternal: z.boolean().optional(),
|
|
25
|
+
});
|
|
26
|
+
export const RankedNodeSchema = z.object({
|
|
27
|
+
nodeId: z.string(),
|
|
28
|
+
score: z.number(),
|
|
29
|
+
normalizedScore: z.number(),
|
|
30
|
+
type: z.string(),
|
|
31
|
+
name: z.string(),
|
|
32
|
+
path: z.string(),
|
|
33
|
+
relativePath: z.string().optional(),
|
|
34
|
+
line: z.number().optional(),
|
|
35
|
+
containerName: z.string().optional(),
|
|
36
|
+
isExported: z.boolean(),
|
|
37
|
+
});
|
|
38
|
+
export const RankedFileSchema = z.object({
|
|
39
|
+
path: z.string(),
|
|
40
|
+
relativePath: z.string(),
|
|
41
|
+
score: z.number(),
|
|
42
|
+
normalizedScore: z.number(),
|
|
43
|
+
});
|
|
44
|
+
export const RankResultSchema = z.object({
|
|
45
|
+
nodes: z.array(RankedNodeSchema),
|
|
46
|
+
fileScores: z.array(RankedFileSchema),
|
|
47
|
+
iterations: z.number(),
|
|
48
|
+
converged: z.boolean(),
|
|
49
|
+
});
|
|
50
|
+
const DEFAULT_DAMPING = 0.85;
|
|
51
|
+
const DEFAULT_MAX_ITERATIONS = 30;
|
|
52
|
+
const DEFAULT_EPSILON = 1e-4;
|
|
53
|
+
const DEFAULT_WEIGHTS = { imports: 1, calls: 0.5, inherits: 2 };
|
|
54
|
+
const CALL_WEIGHT_CAP = 4;
|
|
55
|
+
const EXPORT_SEED_BOOST = 2;
|
|
56
|
+
const RANKING_EDGE_TYPES = new Set(['imports', 'calls', 'inherits', 'implements']);
|
|
57
|
+
function symbolIdentity(parts) {
|
|
58
|
+
return [parts.type, parts.path, parts.name, parts.line ?? '', parts.containerName ?? ''].join('|');
|
|
59
|
+
}
|
|
60
|
+
function collectExportedNodeKeys(index) {
|
|
61
|
+
const keys = new Set();
|
|
62
|
+
for (const file of index.files) {
|
|
63
|
+
for (const symbol of file.symbols) {
|
|
64
|
+
if (!symbol.exported)
|
|
65
|
+
continue;
|
|
66
|
+
keys.add(symbolIdentity({ type: symbol.type, path: file.path, name: symbol.name, line: symbol.line, containerName: symbol.containerName }));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return keys;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Weighted PageRank over the dependency/call graph.
|
|
73
|
+
*
|
|
74
|
+
* Edge direction matches storage (`from` depends on `to`), so rank flows from a
|
|
75
|
+
* dependent toward the thing it depends on — heavily-relied-upon nodes
|
|
76
|
+
* accumulate importance. `ambiguous`/`unresolved` edges (no concrete `to`) are
|
|
77
|
+
* skipped because their importance cannot be attributed.
|
|
78
|
+
*/
|
|
79
|
+
export function rankNodes(index, options = {}) {
|
|
80
|
+
const damping = options.damping ?? DEFAULT_DAMPING;
|
|
81
|
+
const maxIterations = options.maxIterations ?? DEFAULT_MAX_ITERATIONS;
|
|
82
|
+
const epsilon = options.epsilon ?? DEFAULT_EPSILON;
|
|
83
|
+
const weights = { ...DEFAULT_WEIGHTS, ...options.edgeWeights };
|
|
84
|
+
const biasExports = options.biasExports ?? true;
|
|
85
|
+
const includeExternal = options.includeExternal ?? false;
|
|
86
|
+
const nodes = index.nodes.filter((node) => includeExternal || !node.external);
|
|
87
|
+
const count = nodes.length;
|
|
88
|
+
if (count === 0) {
|
|
89
|
+
return { nodes: [], fileScores: [], iterations: 0, converged: true };
|
|
90
|
+
}
|
|
91
|
+
const indexOf = new Map();
|
|
92
|
+
nodes.forEach((node, i) => indexOf.set(node.id, i));
|
|
93
|
+
const exportedKeys = collectExportedNodeKeys(index);
|
|
94
|
+
const isExported = nodes.map((node) => exportedKeys.has(symbolIdentity({ type: node.type, path: node.path, name: node.name, line: node.line, containerName: node.containerName })));
|
|
95
|
+
// Accumulate edge weight per (from → to) pair. Calls are summed at 0.5 each
|
|
96
|
+
// but capped, so a function called 20× does not drown structural edges.
|
|
97
|
+
const pairWeight = new Map();
|
|
98
|
+
const pairCallWeight = new Map();
|
|
99
|
+
for (const edge of index.edges) {
|
|
100
|
+
if (!RANKING_EDGE_TYPES.has(edge.type))
|
|
101
|
+
continue;
|
|
102
|
+
if (edge.to == null)
|
|
103
|
+
continue;
|
|
104
|
+
const from = indexOf.get(edge.from);
|
|
105
|
+
const to = indexOf.get(edge.to);
|
|
106
|
+
if (from == null || to == null || from === to)
|
|
107
|
+
continue;
|
|
108
|
+
const key = `${from}>${to}`;
|
|
109
|
+
if (edge.type === 'calls') {
|
|
110
|
+
const current = pairCallWeight.get(key) ?? 0;
|
|
111
|
+
const next = Math.min(CALL_WEIGHT_CAP, current + weights.calls);
|
|
112
|
+
pairCallWeight.set(key, next);
|
|
113
|
+
pairWeight.set(key, (pairWeight.get(key) ?? 0) + (next - current));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const weight = edge.type === 'imports' ? weights.imports : weights.inherits;
|
|
117
|
+
pairWeight.set(key, (pairWeight.get(key) ?? 0) + weight);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const outgoing = Array.from({ length: count }, () => []);
|
|
121
|
+
const outWeight = new Array(count).fill(0);
|
|
122
|
+
for (const [key, weight] of pairWeight) {
|
|
123
|
+
const [fromStr, toStr] = key.split('>');
|
|
124
|
+
const from = Number(fromStr);
|
|
125
|
+
const to = Number(toStr);
|
|
126
|
+
outgoing[from].push({ to, weight });
|
|
127
|
+
outWeight[from] += weight;
|
|
128
|
+
}
|
|
129
|
+
// Personalization/teleport vector — bias toward exported (public API) nodes.
|
|
130
|
+
const seedRaw = nodes.map((_, i) => (biasExports && isExported[i] ? EXPORT_SEED_BOOST : 1));
|
|
131
|
+
const seedTotal = seedRaw.reduce((sum, value) => sum + value, 0);
|
|
132
|
+
const seed = seedRaw.map((value) => value / seedTotal);
|
|
133
|
+
let rank = seed.slice();
|
|
134
|
+
let iterations = 0;
|
|
135
|
+
let converged = false;
|
|
136
|
+
for (let iter = 0; iter < maxIterations; iter++) {
|
|
137
|
+
iterations = iter + 1;
|
|
138
|
+
const next = seed.map((value) => (1 - damping) * value);
|
|
139
|
+
let danglingMass = 0;
|
|
140
|
+
for (let i = 0; i < count; i++) {
|
|
141
|
+
if (outWeight[i] === 0)
|
|
142
|
+
danglingMass += rank[i];
|
|
143
|
+
}
|
|
144
|
+
for (let i = 0; i < count; i++) {
|
|
145
|
+
next[i] += damping * danglingMass * seed[i];
|
|
146
|
+
}
|
|
147
|
+
for (let i = 0; i < count; i++) {
|
|
148
|
+
if (outWeight[i] === 0)
|
|
149
|
+
continue;
|
|
150
|
+
const share = damping * rank[i];
|
|
151
|
+
for (const edge of outgoing[i]) {
|
|
152
|
+
next[edge.to] += share * (edge.weight / outWeight[i]);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
let delta = 0;
|
|
156
|
+
for (let i = 0; i < count; i++)
|
|
157
|
+
delta += Math.abs(next[i] - rank[i]);
|
|
158
|
+
rank = next;
|
|
159
|
+
if (delta < epsilon) {
|
|
160
|
+
converged = true;
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const total = rank.reduce((sum, value) => sum + value, 0) || 1;
|
|
165
|
+
const normalized = rank.map((value) => value / total);
|
|
166
|
+
const maxScore = normalized.reduce((max, value) => Math.max(max, value), 0) || 1;
|
|
167
|
+
const rankedNodes = nodes
|
|
168
|
+
.map((node, i) => ({
|
|
169
|
+
nodeId: node.id,
|
|
170
|
+
score: normalized[i],
|
|
171
|
+
normalizedScore: (normalized[i] / maxScore) * 100,
|
|
172
|
+
type: node.type,
|
|
173
|
+
name: node.name,
|
|
174
|
+
path: node.path,
|
|
175
|
+
relativePath: node.relativePath,
|
|
176
|
+
line: node.line,
|
|
177
|
+
containerName: node.containerName,
|
|
178
|
+
isExported: isExported[i],
|
|
179
|
+
}))
|
|
180
|
+
.sort((a, b) => b.score - a.score);
|
|
181
|
+
const fileAccumulator = new Map();
|
|
182
|
+
nodes.forEach((node, i) => {
|
|
183
|
+
const existing = fileAccumulator.get(node.path);
|
|
184
|
+
if (existing) {
|
|
185
|
+
existing.score += normalized[i];
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
fileAccumulator.set(node.path, { relativePath: node.relativePath ?? node.path, score: normalized[i] });
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
const maxFileScore = [...fileAccumulator.values()].reduce((max, entry) => Math.max(max, entry.score), 0) || 1;
|
|
192
|
+
const fileScores = [...fileAccumulator.entries()]
|
|
193
|
+
.map(([path, entry]) => ({
|
|
194
|
+
path,
|
|
195
|
+
relativePath: entry.relativePath,
|
|
196
|
+
score: entry.score,
|
|
197
|
+
normalizedScore: (entry.score / maxFileScore) * 100,
|
|
198
|
+
}))
|
|
199
|
+
.sort((a, b) => b.score - a.score);
|
|
200
|
+
return { nodes: rankedNodes, fileScores, iterations, converged };
|
|
201
|
+
}
|
|
202
|
+
export function topRankedFiles(result, limit) {
|
|
203
|
+
return result.fileScores.slice(0, limit);
|
|
204
|
+
}
|
|
205
|
+
export function topRankedSymbols(result, limit) {
|
|
206
|
+
return result.nodes.filter((node) => node.type !== 'file' && node.type !== 'module').slice(0, limit);
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=rank.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rank.js","sourceRoot":"","sources":["../../../src/code/rank.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ import { previewCodebaseSize } from './code/preview.js';
|
|
|
7
7
|
import { buildCodebaseIndexIsolated } from './code/isolated.js';
|
|
8
8
|
import { parseSlimIndex, slimifyIndex, tryParseSlimIndex, validateSlimIndex } from './code/slim.js';
|
|
9
9
|
import { summarizeModule, toMermaid } from './code/query.js';
|
|
10
|
+
import { buildRepoMap } from './code/map.js';
|
|
11
|
+
import { rankNodes } from './code/rank.js';
|
|
10
12
|
import { inspectDocument } from './doc/inspect.js';
|
|
11
13
|
import { discoverDocuments } from './doc/discover.js';
|
|
12
14
|
import { chunkDocument } from './doc/chunk.js';
|
|
@@ -28,6 +30,8 @@ export type { BuildCodebaseIndexIsolatedOptions } from './code/isolated.js';
|
|
|
28
30
|
export type { CodebaseIndexSlim, SlimParsedFile } from './code/slim.js';
|
|
29
31
|
export type { CodebaseSizePreview, PreviewCodebaseSizeOptions } from './code/preview.js';
|
|
30
32
|
export type { ModuleSummary, ModuleSummaryOptions, MermaidKind, MermaidOptions } from './code/query.js';
|
|
33
|
+
export type { RepoMapOptions, RepoMapResult, RepoMapEntry, RepoMapSymbol, RepoMapFormat, RepoMapMode } from './code/map.js';
|
|
34
|
+
export type { RankOptions, RankResult, RankedNode, RankedFile, RankEdgeWeights } from './code/rank.js';
|
|
31
35
|
export type { DocumentChunk, DocumentChunkOptions } from './doc/chunk.js';
|
|
32
36
|
export type { OnProgress, ProgressEvent, ProgressPhase } from './progress-event.js';
|
|
33
37
|
export type { WorkspacePrepareOptions, WorkspacePreparedContext, WorkspacePreparationProgressEvent, OnPrepareProgress } from './workspace/prepare-types.js';
|
|
@@ -37,7 +41,7 @@ export type { InspectWorkspaceDocumentSetOptions } from './workspace/documents.j
|
|
|
37
41
|
export type { WorkspaceBundle, WorkspaceBundleOptions, WorkspaceOutlineNode, WorkspaceCodeDocumentReference } from './workspace/bundle.js';
|
|
38
42
|
export type { WorkspaceDescription, WorkspaceRecommendedCall } from './workspace/types.js';
|
|
39
43
|
export type { OccHealth } from './health.js';
|
|
40
|
-
export { buildCodebaseIndex, buildCodebaseIndexIsolated, chunkCodebase, chunkFromIndex, createCodeQuerySession, createCodeQuerySessionFromIndex, discoverCodeFiles, openChunkCodeIndexStore, openChunkCodeIndexStore as openChunkStore, openCodeIndexStore, parseSlimIndex, previewCodebaseSize, slimifyIndex, summarizeModule, toMermaid, tryParseSlimIndex, validateSlimIndex, };
|
|
44
|
+
export { buildCodebaseIndex, buildCodebaseIndexIsolated, buildRepoMap, rankNodes, chunkCodebase, chunkFromIndex, createCodeQuerySession, createCodeQuerySessionFromIndex, discoverCodeFiles, openChunkCodeIndexStore, openChunkCodeIndexStore as openChunkStore, openCodeIndexStore, parseSlimIndex, previewCodebaseSize, slimifyIndex, summarizeModule, toMermaid, tryParseSlimIndex, validateSlimIndex, };
|
|
41
45
|
export { CodeIndexBudgetExceededError } from './code/build.js';
|
|
42
46
|
export { OccAbortError, OCC_ABORTED, isOccAbortError } from './errors.js';
|
|
43
47
|
export { health } from './health.js';
|
|
@@ -58,6 +62,8 @@ export interface OccCodeNamespace {
|
|
|
58
62
|
chunkFromIndex: typeof chunkFromIndex;
|
|
59
63
|
summarizeModule: typeof summarizeModule;
|
|
60
64
|
toMermaid: typeof toMermaid;
|
|
65
|
+
map: typeof buildRepoMap;
|
|
66
|
+
rank: typeof rankNodes;
|
|
61
67
|
slimifyIndex: typeof slimifyIndex;
|
|
62
68
|
parseSlimIndex: typeof parseSlimIndex;
|
|
63
69
|
tryParseSlimIndex: typeof tryParseSlimIndex;
|
package/dist/src/index.js
CHANGED
|
@@ -7,6 +7,8 @@ import { previewCodebaseSize } from './code/preview.js';
|
|
|
7
7
|
import { buildCodebaseIndexIsolated } from './code/isolated.js';
|
|
8
8
|
import { parseSlimIndex, slimifyIndex, tryParseSlimIndex, validateSlimIndex } from './code/slim.js';
|
|
9
9
|
import { summarizeModule, toMermaid } from './code/query.js';
|
|
10
|
+
import { buildRepoMap } from './code/map.js';
|
|
11
|
+
import { rankNodes } from './code/rank.js';
|
|
10
12
|
import { inspectDocument } from './doc/inspect.js';
|
|
11
13
|
import { discoverDocuments } from './doc/discover.js';
|
|
12
14
|
import { chunkDocument } from './doc/chunk.js';
|
|
@@ -19,7 +21,7 @@ import { inspectWorkspaceDocumentSet } from './workspace/documents.js';
|
|
|
19
21
|
import { prepareWorkspaceContext } from './workspace/prepare.js';
|
|
20
22
|
import { bundleWorkspace } from './workspace/bundle.js';
|
|
21
23
|
import { health } from './health.js';
|
|
22
|
-
export { buildCodebaseIndex, buildCodebaseIndexIsolated, chunkCodebase, chunkFromIndex, createCodeQuerySession, createCodeQuerySessionFromIndex, discoverCodeFiles, openChunkCodeIndexStore, openChunkCodeIndexStore as openChunkStore, openCodeIndexStore, parseSlimIndex, previewCodebaseSize, slimifyIndex, summarizeModule, toMermaid, tryParseSlimIndex, validateSlimIndex, };
|
|
24
|
+
export { buildCodebaseIndex, buildCodebaseIndexIsolated, buildRepoMap, rankNodes, chunkCodebase, chunkFromIndex, createCodeQuerySession, createCodeQuerySessionFromIndex, discoverCodeFiles, openChunkCodeIndexStore, openChunkCodeIndexStore as openChunkStore, openCodeIndexStore, parseSlimIndex, previewCodebaseSize, slimifyIndex, summarizeModule, toMermaid, tryParseSlimIndex, validateSlimIndex, };
|
|
23
25
|
export { CodeIndexBudgetExceededError } from './code/build.js';
|
|
24
26
|
export { OccAbortError, OCC_ABORTED, isOccAbortError } from './errors.js';
|
|
25
27
|
export { health } from './health.js';
|
|
@@ -42,6 +44,8 @@ export function createOcc() {
|
|
|
42
44
|
chunkFromIndex: chunkFromIndex,
|
|
43
45
|
summarizeModule,
|
|
44
46
|
toMermaid,
|
|
47
|
+
map: buildRepoMap,
|
|
48
|
+
rank: rankNodes,
|
|
45
49
|
slimifyIndex,
|
|
46
50
|
parseSlimIndex,
|
|
47
51
|
tryParseSlimIndex,
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACL,sBAAsB,EACtB,+BAA+B,GAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/tokens.d.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Language-aware token estimation — tokenx-inspired approach.
|
|
3
3
|
* Replaces the naive `chars / 4` heuristic with segment-level analysis.
|
|
4
|
+
*
|
|
5
|
+
* The heuristic estimator (`estimateTokenCount`/`sliceByTokens`) is the
|
|
6
|
+
* zero-dependency default. For exact, model-specific counts, use the
|
|
7
|
+
* pluggable {@link Tokenizer} abstraction (`createTokenizer`), which lazily
|
|
8
|
+
* loads OpenAI BPE encodings (`o200k_base`, `cl100k_base`) via `gpt-tokenizer`
|
|
9
|
+
* only when requested.
|
|
4
10
|
*/
|
|
11
|
+
import { z } from 'zod';
|
|
5
12
|
export interface LanguageConfig {
|
|
6
13
|
pattern: RegExp;
|
|
7
14
|
averageCharsPerToken: number;
|
|
@@ -14,3 +21,27 @@ export interface TokenEstimationOptions {
|
|
|
14
21
|
export declare function estimateTokenCount(text?: string | number, options?: TokenEstimationOptions): number;
|
|
15
22
|
/** Slice text by token positions (like Array.slice but for tokens) */
|
|
16
23
|
export declare function sliceByTokens(text: string, start?: number, end?: number, options?: TokenEstimationOptions): string;
|
|
24
|
+
export declare const TokenizerNameSchema: z.ZodEnum<{
|
|
25
|
+
heuristic: "heuristic";
|
|
26
|
+
o200k_base: "o200k_base";
|
|
27
|
+
cl100k_base: "cl100k_base";
|
|
28
|
+
}>;
|
|
29
|
+
export type TokenizerName = z.infer<typeof TokenizerNameSchema>;
|
|
30
|
+
export interface Tokenizer {
|
|
31
|
+
/** Identifier of the active encoding (`heuristic` for the language-aware estimate). */
|
|
32
|
+
readonly name: TokenizerName;
|
|
33
|
+
/** Token count for `text`. A number input is treated as a character count (heuristic only). */
|
|
34
|
+
count(text: string | number): number;
|
|
35
|
+
/** Slice `text` by token positions, like `Array.prototype.slice` but token-aware. */
|
|
36
|
+
slice(text: string, start?: number, end?: number): string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Build a tokenizer for the given encoding. `heuristic` resolves synchronously
|
|
40
|
+
* with no dependency; BPE encodings lazily load their tables once (cached).
|
|
41
|
+
*/
|
|
42
|
+
export declare function createTokenizer(name: TokenizerName): Promise<Tokenizer>;
|
|
43
|
+
/**
|
|
44
|
+
* Resolve a tokenizer name from an explicit option, then the `OCC_TOKENIZER`
|
|
45
|
+
* env var, defaulting to `heuristic`. Throws on an unrecognized value.
|
|
46
|
+
*/
|
|
47
|
+
export declare function resolveTokenizerName(explicit?: string, env?: string | undefined): TokenizerName;
|
package/dist/src/tokens.js
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Language-aware token estimation — tokenx-inspired approach.
|
|
3
3
|
* Replaces the naive `chars / 4` heuristic with segment-level analysis.
|
|
4
|
+
*
|
|
5
|
+
* The heuristic estimator (`estimateTokenCount`/`sliceByTokens`) is the
|
|
6
|
+
* zero-dependency default. For exact, model-specific counts, use the
|
|
7
|
+
* pluggable {@link Tokenizer} abstraction (`createTokenizer`), which lazily
|
|
8
|
+
* loads OpenAI BPE encodings (`o200k_base`, `cl100k_base`) via `gpt-tokenizer`
|
|
9
|
+
* only when requested.
|
|
4
10
|
*/
|
|
11
|
+
import { z } from 'zod';
|
|
5
12
|
const PATTERNS = {
|
|
6
13
|
whitespace: /^\s+$/,
|
|
7
14
|
cjk: /[\u4E00-\u9FFF\u3400-\u4DBF\u3000-\u303F\uFF00-\uFFEF\u30A0-\u30FF\u2E80-\u2EFF\u31C0-\u31EF\u3200-\u32FF\u3300-\u33FF\uAC00-\uD7AF\u1100-\u11FF\u3130-\u318F\uA960-\uA97F\uD7B0-\uD7FF]/,
|
|
@@ -104,4 +111,85 @@ export function sliceByTokens(text, start = 0, end, options = {}) {
|
|
|
104
111
|
}
|
|
105
112
|
return parts.join('');
|
|
106
113
|
}
|
|
114
|
+
// ── Pluggable tokenizers ──────────────────────────────────────────────────
|
|
115
|
+
//
|
|
116
|
+
// `Tokenizer` lets callers swap the heuristic estimator for an exact BPE
|
|
117
|
+
// tokenizer without changing call sites: every consumer takes a
|
|
118
|
+
// `(text) => number` counter (or a `Tokenizer`) and threads it down. There is
|
|
119
|
+
// deliberately NO mutable module-level "current tokenizer" — the codebase
|
|
120
|
+
// keeps zero global state, so the selected tokenizer is always passed
|
|
121
|
+
// explicitly (resolved once at an entry point via `resolveTokenizerName` +
|
|
122
|
+
// `createTokenizer`).
|
|
123
|
+
export const TokenizerNameSchema = z.enum(['heuristic', 'o200k_base', 'cl100k_base']);
|
|
124
|
+
class HeuristicTokenizer {
|
|
125
|
+
name = 'heuristic';
|
|
126
|
+
count(text) {
|
|
127
|
+
return estimateTokenCount(text);
|
|
128
|
+
}
|
|
129
|
+
slice(text, start = 0, end) {
|
|
130
|
+
return sliceByTokens(text, start, end);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const encodingCache = new Map();
|
|
134
|
+
async function loadEncoding(name) {
|
|
135
|
+
const cached = encodingCache.get(name);
|
|
136
|
+
if (cached)
|
|
137
|
+
return cached;
|
|
138
|
+
const mod = name === 'o200k_base'
|
|
139
|
+
? await import('gpt-tokenizer/encoding/o200k_base')
|
|
140
|
+
: await import('gpt-tokenizer/encoding/cl100k_base');
|
|
141
|
+
encodingCache.set(name, mod);
|
|
142
|
+
return mod;
|
|
143
|
+
}
|
|
144
|
+
class BpeTokenizer {
|
|
145
|
+
name;
|
|
146
|
+
encoding;
|
|
147
|
+
constructor(name, encoding) {
|
|
148
|
+
this.name = name;
|
|
149
|
+
this.encoding = encoding;
|
|
150
|
+
}
|
|
151
|
+
count(text) {
|
|
152
|
+
// A bare character count has no text to encode; fall back to the heuristic.
|
|
153
|
+
if (typeof text === 'number')
|
|
154
|
+
return estimateTokenCount(text);
|
|
155
|
+
if (!text)
|
|
156
|
+
return 0;
|
|
157
|
+
return this.encoding.encode(text).length;
|
|
158
|
+
}
|
|
159
|
+
slice(text, start = 0, end) {
|
|
160
|
+
if (!text)
|
|
161
|
+
return '';
|
|
162
|
+
const tokens = this.encoding.encode(text);
|
|
163
|
+
const total = tokens.length;
|
|
164
|
+
const from = start < 0 ? Math.max(0, total + start) : Math.min(start, total);
|
|
165
|
+
const to = end === undefined ? total : end < 0 ? Math.max(0, total + end) : Math.min(end, total);
|
|
166
|
+
if (from >= to)
|
|
167
|
+
return '';
|
|
168
|
+
return this.encoding.decode(tokens.slice(from, to));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Build a tokenizer for the given encoding. `heuristic` resolves synchronously
|
|
173
|
+
* with no dependency; BPE encodings lazily load their tables once (cached).
|
|
174
|
+
*/
|
|
175
|
+
export async function createTokenizer(name) {
|
|
176
|
+
if (name === 'heuristic')
|
|
177
|
+
return new HeuristicTokenizer();
|
|
178
|
+
const encoding = await loadEncoding(name);
|
|
179
|
+
return new BpeTokenizer(name, encoding);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Resolve a tokenizer name from an explicit option, then the `OCC_TOKENIZER`
|
|
183
|
+
* env var, defaulting to `heuristic`. Throws on an unrecognized value.
|
|
184
|
+
*/
|
|
185
|
+
export function resolveTokenizerName(explicit, env = process.env.OCC_TOKENIZER) {
|
|
186
|
+
const candidate = explicit ?? env;
|
|
187
|
+
if (candidate == null || candidate === '')
|
|
188
|
+
return 'heuristic';
|
|
189
|
+
const result = TokenizerNameSchema.safeParse(candidate);
|
|
190
|
+
if (!result.success) {
|
|
191
|
+
throw new Error(`Invalid tokenizer "${candidate}". Expected one of: ${TokenizerNameSchema.options.join(', ')}`);
|
|
192
|
+
}
|
|
193
|
+
return result.data;
|
|
194
|
+
}
|
|
107
195
|
//# sourceMappingURL=tokens.js.map
|
package/dist/src/tokens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/tokens.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/tokens.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cesarandreslopez/occ",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.9",
|
|
4
4
|
"description": "Office Cloc and Count — document metrics, structure extraction, content inspection, and code exploration for real repositories",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -348,6 +348,7 @@
|
|
|
348
348
|
"cli-table3": "^0.6.5",
|
|
349
349
|
"commander": "^12.1.0",
|
|
350
350
|
"fast-glob": "^3.3.2",
|
|
351
|
+
"gpt-tokenizer": "^3.4.0",
|
|
351
352
|
"ignore": "^7.0.5",
|
|
352
353
|
"jszip": "^3.10.1",
|
|
353
354
|
"mammoth": "^1.8.0",
|