@cesarandreslopez/occ 0.11.0 → 0.13.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.
- package/README.md +27 -6
- package/dist/src/code/command.js +162 -3
- package/dist/src/code/command.js.map +1 -1
- package/dist/src/code/diff.d.ts +2 -2
- package/dist/src/code/hash.d.ts +19 -0
- package/dist/src/code/hash.js +85 -0
- package/dist/src/code/hash.js.map +1 -0
- package/dist/src/code/output.d.ts +6 -1
- package/dist/src/code/output.js +78 -0
- package/dist/src/code/output.js.map +1 -1
- package/dist/src/code/query.d.ts +6 -0
- package/dist/src/code/query.js +0 -0
- package/dist/src/code/query.js.map +1 -1
- package/dist/src/code/seams.d.ts +39 -0
- package/dist/src/code/seams.js +154 -0
- package/dist/src/code/seams.js.map +1 -0
- package/dist/src/code/session.d.ts +7 -1
- package/dist/src/code/session.js +15 -0
- package/dist/src/code/session.js.map +1 -1
- package/dist/src/code/source.d.ts +10 -11
- package/dist/src/code/source.js +8 -2
- package/dist/src/code/source.js.map +1 -1
- package/dist/src/code/tree.d.ts +7 -0
- package/dist/src/code/tree.js +364 -0
- package/dist/src/code/tree.js.map +1 -0
- package/dist/src/code/types.d.ts +439 -0
- package/dist/src/code/types.js +146 -0
- package/dist/src/code/types.js.map +1 -1
- package/dist/src/git/api.d.ts +13 -1
- package/dist/src/git/api.js +22 -1
- package/dist/src/git/api.js.map +1 -1
- package/dist/src/git/client.d.ts +6 -0
- package/dist/src/git/client.js +12 -0
- package/dist/src/git/client.js.map +1 -1
- package/dist/src/git/command.js +22 -2
- package/dist/src/git/command.js.map +1 -1
- package/dist/src/git/output.d.ts +2 -1
- package/dist/src/git/output.js +5 -0
- package/dist/src/git/output.js.map +1 -1
- package/dist/src/git/parse.d.ts +2 -1
- package/dist/src/git/parse.js +97 -6
- package/dist/src/git/parse.js.map +1 -1
- package/dist/src/git/types.d.ts +44 -0
- package/dist/src/git/types.js +21 -0
- package/dist/src/git/types.js.map +1 -1
- package/dist/src/health.js +5 -0
- package/dist/src/health.js.map +1 -1
- package/dist/src/index.d.ts +16 -6
- package/dist/src/index.js +11 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/output/tabular.js +33 -16
- package/dist/src/output/tabular.js.map +1 -1
- package/dist/src/scc.d.ts +3 -0
- package/dist/src/scc.js +2 -0
- package/dist/src/scc.js.map +1 -1
- package/dist/src/workspace/types.d.ts +4 -0
- package/package.json +2 -1
- package/skills/occ/SKILL.md +31 -25
- package/skills/occ/reference/code.md +74 -1
- package/skills/occ/reference/commands.md +4 -0
- package/skills/occ/reference/git.md +17 -1
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { moduleForRelativePath } from './query.js';
|
|
2
|
+
import { rankNodesCached } from './rank.js';
|
|
3
|
+
/**
|
|
4
|
+
* Order-independent seam key: stable while both directories exist. Directory
|
|
5
|
+
* renames change the key by design — consumers treat an unresolvable key as
|
|
6
|
+
* drift, never as clean.
|
|
7
|
+
*/
|
|
8
|
+
export function seamKeyFor(moduleA, moduleB) {
|
|
9
|
+
return `seam:${[moduleA, moduleB].sort().join('::')}`;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Enumerate seams — cross-module relationships derived at query time from
|
|
13
|
+
* `imports`/`calls` edges between directory-modules (grouped via
|
|
14
|
+
* `moduleForRelativePath`, shared with `analyzeModuleCoupling`).
|
|
15
|
+
*
|
|
16
|
+
* Pure with respect to git: when the caller supplies a `GitCochangeSummary`
|
|
17
|
+
* (from `getGitCochange`), its file pairs are aggregated to module pairs
|
|
18
|
+
* (count summed, lift max, latest `lastCochangedAt`) and attached to the
|
|
19
|
+
* matching seams. Ranking: lift desc, then summed `rankNodes` file scores of
|
|
20
|
+
* both modules desc, then `seamKey` asc for determinism. `minLift`/`limit`
|
|
21
|
+
* apply after scoring, so `rank` reflects the full enumeration.
|
|
22
|
+
*/
|
|
23
|
+
export function listCodeSeams(index, options = {}) {
|
|
24
|
+
const relativePathByPath = new Map();
|
|
25
|
+
for (const file of index.files) {
|
|
26
|
+
relativePathByPath.set(file.path, file.relativePath);
|
|
27
|
+
}
|
|
28
|
+
const accumulators = new Map();
|
|
29
|
+
for (const edge of index.edges) {
|
|
30
|
+
if (edge.type !== 'imports' && edge.type !== 'calls')
|
|
31
|
+
continue;
|
|
32
|
+
if (edge.type === 'imports' && edge.importKind === 'external')
|
|
33
|
+
continue;
|
|
34
|
+
const fromRelative = relativePathByPath.get(edge.fromPath);
|
|
35
|
+
const toRelative = edge.toPath ? relativePathByPath.get(edge.toPath) : undefined;
|
|
36
|
+
if (fromRelative == null || toRelative == null)
|
|
37
|
+
continue;
|
|
38
|
+
const fromModule = moduleForRelativePath(fromRelative);
|
|
39
|
+
const toModule = moduleForRelativePath(toRelative);
|
|
40
|
+
if (fromModule === toModule)
|
|
41
|
+
continue;
|
|
42
|
+
const seamKey = seamKeyFor(fromModule, toModule);
|
|
43
|
+
let seam = accumulators.get(seamKey);
|
|
44
|
+
if (!seam) {
|
|
45
|
+
const [moduleA, moduleB] = [fromModule, toModule].sort();
|
|
46
|
+
seam = { moduleA, moduleB, importEdgeCount: 0, callEdgeCount: 0 };
|
|
47
|
+
accumulators.set(seamKey, seam);
|
|
48
|
+
}
|
|
49
|
+
if (edge.type === 'imports')
|
|
50
|
+
seam.importEdgeCount++;
|
|
51
|
+
else
|
|
52
|
+
seam.callEdgeCount++;
|
|
53
|
+
}
|
|
54
|
+
if (options.cochange) {
|
|
55
|
+
for (const [seamKey, cochange] of aggregateCochangeToModules(options.cochange.pairs)) {
|
|
56
|
+
const seam = accumulators.get(seamKey);
|
|
57
|
+
if (seam)
|
|
58
|
+
seam.cochange = cochange;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const moduleScores = collectModuleScores(index);
|
|
62
|
+
const scored = [...accumulators.entries()].map(([seamKey, seam]) => ({
|
|
63
|
+
seamKey,
|
|
64
|
+
seam,
|
|
65
|
+
lift: seam.cochange?.lift ?? 0,
|
|
66
|
+
score: (moduleScores.get(seam.moduleA) ?? 0) + (moduleScores.get(seam.moduleB) ?? 0),
|
|
67
|
+
}));
|
|
68
|
+
scored.sort((a, b) => b.lift - a.lift || b.score - a.score || a.seamKey.localeCompare(b.seamKey));
|
|
69
|
+
let seams = scored.map((entry, position) => ({
|
|
70
|
+
seamKey: entry.seamKey,
|
|
71
|
+
moduleA: entry.seam.moduleA,
|
|
72
|
+
moduleB: entry.seam.moduleB,
|
|
73
|
+
importEdgeCount: entry.seam.importEdgeCount,
|
|
74
|
+
callEdgeCount: entry.seam.callEdgeCount,
|
|
75
|
+
cochange: entry.seam.cochange,
|
|
76
|
+
rank: position + 1,
|
|
77
|
+
}));
|
|
78
|
+
if (options.minLift != null) {
|
|
79
|
+
const minLift = options.minLift;
|
|
80
|
+
seams = seams.filter(seam => (seam.cochange?.lift ?? 0) >= minLift);
|
|
81
|
+
}
|
|
82
|
+
if (options.limit != null) {
|
|
83
|
+
seams = seams.slice(0, options.limit);
|
|
84
|
+
}
|
|
85
|
+
return seams;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Re-derive the current seams and answer per key: `resolved` (with current
|
|
89
|
+
* seam data) or `missing` when either module no longer exists or no
|
|
90
|
+
* cross-module edge remains between them. `minLift`/`limit` are ignored —
|
|
91
|
+
* resolution answers existence, not prominence.
|
|
92
|
+
*/
|
|
93
|
+
export function resolveCodeSeams(index, seamKeys, options = {}) {
|
|
94
|
+
const seams = listCodeSeams(index, { cochange: options.cochange });
|
|
95
|
+
const byKey = new Map(seams.map(seam => [seam.seamKey, seam]));
|
|
96
|
+
return seamKeys.map(seamKey => {
|
|
97
|
+
const seam = byKey.get(seamKey);
|
|
98
|
+
return seam ? { seamKey, status: 'resolved', seam } : { seamKey, status: 'missing' };
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Rebase co-change pairs from git-toplevel-relative paths onto an index root
|
|
103
|
+
* below the toplevel. `getGitCochange` reports paths relative to the
|
|
104
|
+
* repository toplevel, while seam modules derive from index `relativePath`
|
|
105
|
+
* values — without rebasing, an index rooted in a subdirectory would join
|
|
106
|
+
* zero pairs. `indexRootPrefix` is the index root's toplevel-relative path
|
|
107
|
+
* with forward slashes (empty when the index root is the toplevel, which
|
|
108
|
+
* returns the summary unchanged). Pairs outside the index subtree are
|
|
109
|
+
* dropped — they cannot match any module.
|
|
110
|
+
*/
|
|
111
|
+
export function rebaseCochangeToIndexRoot(cochange, indexRootPrefix) {
|
|
112
|
+
if (!indexRootPrefix)
|
|
113
|
+
return cochange;
|
|
114
|
+
const prefix = indexRootPrefix.endsWith('/') ? indexRootPrefix : `${indexRootPrefix}/`;
|
|
115
|
+
const pairs = [];
|
|
116
|
+
for (const pair of cochange.pairs) {
|
|
117
|
+
if (!pair.fileA.startsWith(prefix) || !pair.fileB.startsWith(prefix))
|
|
118
|
+
continue;
|
|
119
|
+
pairs.push({ ...pair, fileA: pair.fileA.slice(prefix.length), fileB: pair.fileB.slice(prefix.length) });
|
|
120
|
+
}
|
|
121
|
+
return { ...cochange, pairs };
|
|
122
|
+
}
|
|
123
|
+
function aggregateCochangeToModules(pairs) {
|
|
124
|
+
const byPair = new Map();
|
|
125
|
+
for (const pair of pairs) {
|
|
126
|
+
// Co-change paths are index-root-relative (the `relativePath` convention);
|
|
127
|
+
// callers rebase toplevel-relative git paths via rebaseCochangeToIndexRoot.
|
|
128
|
+
const moduleA = moduleForRelativePath(pair.fileA);
|
|
129
|
+
const moduleB = moduleForRelativePath(pair.fileB);
|
|
130
|
+
if (moduleA === moduleB)
|
|
131
|
+
continue;
|
|
132
|
+
const seamKey = seamKeyFor(moduleA, moduleB);
|
|
133
|
+
const existing = byPair.get(seamKey);
|
|
134
|
+
if (!existing) {
|
|
135
|
+
byPair.set(seamKey, { count: pair.count, lift: pair.lift, lastCochangedAt: pair.lastCochangedAt });
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
existing.count += pair.count;
|
|
139
|
+
existing.lift = Math.max(existing.lift, pair.lift);
|
|
140
|
+
if (pair.lastCochangedAt > existing.lastCochangedAt) {
|
|
141
|
+
existing.lastCochangedAt = pair.lastCochangedAt;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return byPair;
|
|
145
|
+
}
|
|
146
|
+
function collectModuleScores(index) {
|
|
147
|
+
const moduleScores = new Map();
|
|
148
|
+
for (const file of rankNodesCached(index).fileScores) {
|
|
149
|
+
const moduleName = moduleForRelativePath(file.relativePath);
|
|
150
|
+
moduleScores.set(moduleName, (moduleScores.get(moduleName) ?? 0) + file.score);
|
|
151
|
+
}
|
|
152
|
+
return moduleScores;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=seams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seams.js","sourceRoot":"","sources":["../../../src/code/seams.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,11 @@ import { fusedSearch, type FusedSearchOptions, type MermaidKind, type MermaidOpt
|
|
|
2
2
|
import { type BuildCodebaseOptions } from './build.js';
|
|
3
3
|
import { type CodeContext } from './context.js';
|
|
4
4
|
import { type CodeChunk, type CodeChunkOptions } from './chunk.js';
|
|
5
|
+
import { type BuildDirectoryTreeOptions } from './tree.js';
|
|
5
6
|
import { type SearchSymbolsOptions, type SymbolSearchResult } from './search.js';
|
|
6
7
|
import { type ReadCodeSourceOptions, type ReadCodeSourceQuery, type ReadCodeSourceResult } from './source.js';
|
|
7
|
-
import
|
|
8
|
+
import { type HashCodeSymbolsOptions } from './hash.js';
|
|
9
|
+
import type { CallChain, ClassTreeAnalysis, CodeNodeType, CodeSearchResult, CodebaseIndex, ContentMatch, DependencyAnalysis, CodeSeam, DirectoryTreeResult, HashCodeSymbolsResult, ListCodeSeamsOptions, RelationMatch, ResolveCodeSeamsResult, SymbolKeyQuery } from './types.js';
|
|
8
10
|
import type { OnProgress } from '../progress-event.js';
|
|
9
11
|
import { type CooperativeOption } from '../utils.js';
|
|
10
12
|
export interface CodeSessionChunkOptions extends CodeChunkOptions {
|
|
@@ -19,6 +21,9 @@ export interface CodeQuerySession {
|
|
|
19
21
|
findByType(type: CodeNodeType, limit?: number): CodeSearchResult[];
|
|
20
22
|
findContent(text: string, limit?: number): ContentMatch[];
|
|
21
23
|
readSource(query: ReadCodeSourceQuery, options?: ReadCodeSourceOptions): Promise<ReadCodeSourceResult>;
|
|
24
|
+
hashSymbols(queries: SymbolKeyQuery[], options?: HashCodeSymbolsOptions): Promise<HashCodeSymbolsResult[]>;
|
|
25
|
+
seams(options?: ListCodeSeamsOptions): CodeSeam[];
|
|
26
|
+
resolveSeams(seamKeys: string[], options?: ListCodeSeamsOptions): ResolveCodeSeamsResult[];
|
|
22
27
|
fusedSearch(query: string, options?: FusedSearchOptions): ReturnType<typeof fusedSearch>;
|
|
23
28
|
analyzeCalls(functionName: string, file?: string): RelationMatch[];
|
|
24
29
|
analyzeCallers(functionName: string, file?: string): RelationMatch[];
|
|
@@ -28,6 +33,7 @@ export interface CodeQuerySession {
|
|
|
28
33
|
analyzeModuleCoupling(modulePath: string): ModuleCoupling;
|
|
29
34
|
summarizeModule(modulePath: string, options?: ModuleSummaryOptions): ModuleSummary;
|
|
30
35
|
toMermaid(kind: MermaidKind, target: string, options?: MermaidOptions): string;
|
|
36
|
+
getDirectoryTree(options?: BuildDirectoryTreeOptions): DirectoryTreeResult;
|
|
31
37
|
chunk(options?: CodeSessionChunkOptions): CodeChunk[];
|
|
32
38
|
chunkCooperative(options?: CodeSessionChunkOptions, cooperative?: CooperativeOption): Promise<CodeChunk[]>;
|
|
33
39
|
}
|
package/dist/src/code/session.js
CHANGED
|
@@ -2,8 +2,11 @@ import { analyzeCallChain, analyzeCallers, analyzeCalls, analyzeDeps, analyzeMod
|
|
|
2
2
|
import { buildCodebaseIndex } from './build.js';
|
|
3
3
|
import { buildCodeContext } from './context.js';
|
|
4
4
|
import { chunkFromIndex, chunkFromIndexCooperative } from './chunk.js';
|
|
5
|
+
import { buildDirectoryTree } from './tree.js';
|
|
5
6
|
import { searchSymbols } from './search.js';
|
|
6
7
|
import { readCodeSource, } from './source.js';
|
|
8
|
+
import { hashCodeSymbols } from './hash.js';
|
|
9
|
+
import { listCodeSeams, resolveCodeSeams } from './seams.js';
|
|
7
10
|
import { createYielder } from '../utils.js';
|
|
8
11
|
class InMemoryCodeQuerySession {
|
|
9
12
|
buildOptions;
|
|
@@ -40,6 +43,15 @@ class InMemoryCodeQuerySession {
|
|
|
40
43
|
readSource(query, options) {
|
|
41
44
|
return readCodeSource(this.index, query, options);
|
|
42
45
|
}
|
|
46
|
+
hashSymbols(queries, options) {
|
|
47
|
+
return hashCodeSymbols(this.index, queries, options);
|
|
48
|
+
}
|
|
49
|
+
seams(options) {
|
|
50
|
+
return listCodeSeams(this.index, options);
|
|
51
|
+
}
|
|
52
|
+
resolveSeams(seamKeys, options) {
|
|
53
|
+
return resolveCodeSeams(this.index, seamKeys, options);
|
|
54
|
+
}
|
|
43
55
|
fusedSearch(query, options) {
|
|
44
56
|
return fusedSearch(this.index, query, options);
|
|
45
57
|
}
|
|
@@ -67,6 +79,9 @@ class InMemoryCodeQuerySession {
|
|
|
67
79
|
toMermaid(kind, target, options) {
|
|
68
80
|
return toMermaid(this.index, kind, target, options);
|
|
69
81
|
}
|
|
82
|
+
getDirectoryTree(options) {
|
|
83
|
+
return buildDirectoryTree(this.index, options);
|
|
84
|
+
}
|
|
70
85
|
chunk(options) {
|
|
71
86
|
return chunkFromIndex(this.index, options);
|
|
72
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/code/session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,SAAS,GAOV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAA6B,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAoB,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAyC,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,aAAa,EAAsD,MAAM,aAAa,CAAC;AAChG,OAAO,EACL,cAAc,GAIf,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/code/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { CodebaseIndex, CodeNodeType } from './types.js';
|
|
1
|
+
import type { CodebaseIndex, CodeNode, CodeNodeType, CodeSourceCandidate } from './types.js';
|
|
2
|
+
export type { CodeSourceCandidate } from './types.js';
|
|
2
3
|
export type ReadCodeSourceQuery = {
|
|
3
4
|
nodeId: string;
|
|
4
5
|
} | {
|
|
@@ -8,16 +9,6 @@ export type ReadCodeSourceQuery = {
|
|
|
8
9
|
};
|
|
9
10
|
export interface ReadCodeSourceOptions {
|
|
10
11
|
}
|
|
11
|
-
export interface CodeSourceCandidate {
|
|
12
|
-
nodeId: string;
|
|
13
|
-
name: string;
|
|
14
|
-
type: CodeNodeType;
|
|
15
|
-
path: string;
|
|
16
|
-
relativePath?: string;
|
|
17
|
-
line?: number;
|
|
18
|
-
endLine?: number;
|
|
19
|
-
containerName?: string;
|
|
20
|
-
}
|
|
21
12
|
export type ReadCodeSourceResult = {
|
|
22
13
|
status: 'resolved';
|
|
23
14
|
nodeId: string;
|
|
@@ -41,4 +32,12 @@ export type ReadCodeSourceResult = {
|
|
|
41
32
|
status: 'error';
|
|
42
33
|
message: string;
|
|
43
34
|
};
|
|
35
|
+
export declare function candidateFromNode(node: CodeNode): CodeSourceCandidate;
|
|
36
|
+
/**
|
|
37
|
+
* Candidate matching shared with `hashCodeSymbols` (src/code/hash.ts): returns
|
|
38
|
+
* the matching source nodes, or an error message when the query's file path
|
|
39
|
+
* escapes the repo root. Exported so key-based resolution cannot diverge from
|
|
40
|
+
* `readCodeSource`'s.
|
|
41
|
+
*/
|
|
42
|
+
export declare function selectByQuery(index: CodebaseIndex, query: ReadCodeSourceQuery): CodeNode[] | string;
|
|
44
43
|
export declare function readCodeSource(index: CodebaseIndex, query: ReadCodeSourceQuery, _options?: ReadCodeSourceOptions): Promise<ReadCodeSourceResult>;
|
package/dist/src/code/source.js
CHANGED
|
@@ -3,7 +3,7 @@ import { readFile } from 'node:fs/promises';
|
|
|
3
3
|
function isSourceNode(node) {
|
|
4
4
|
return node.type !== 'file' && node.type !== 'module' && node.external !== true;
|
|
5
5
|
}
|
|
6
|
-
function candidateFromNode(node) {
|
|
6
|
+
export function candidateFromNode(node) {
|
|
7
7
|
return {
|
|
8
8
|
nodeId: node.id,
|
|
9
9
|
name: node.name,
|
|
@@ -38,7 +38,13 @@ async function readFileLines(file, filePath) {
|
|
|
38
38
|
return file.content.split(/\r?\n/);
|
|
39
39
|
return (await readFile(filePath, 'utf8')).split(/\r?\n/);
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Candidate matching shared with `hashCodeSymbols` (src/code/hash.ts): returns
|
|
43
|
+
* the matching source nodes, or an error message when the query's file path
|
|
44
|
+
* escapes the repo root. Exported so key-based resolution cannot diverge from
|
|
45
|
+
* `readCodeSource`'s.
|
|
46
|
+
*/
|
|
47
|
+
export function selectByQuery(index, query) {
|
|
42
48
|
if ('nodeId' in query) {
|
|
43
49
|
return index.nodes.filter(node => node.id === query.nodeId && isSourceNode(node));
|
|
44
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/code/source.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/code/source.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA6C5C,SAAS,YAAY,CAAC,IAAc;IAClC,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,aAAa,EAAE,IAAI,CAAC,aAAa;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,UAAkB;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACzG,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnD,IAAI,YAAY,KAAK,EAAE,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1F,OAAO,kBAAkB,UAAU,2BAA2B,IAAI,IAAI,CAAC;IACzE,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAoB,EAAE,IAAc;IAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,gBAAgB,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAA4B,EAAE,QAAgB;IACzE,IAAI,IAAI,EAAE,KAAK;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IACnC,IAAI,IAAI,EAAE,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9D,OAAO,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAoB,EAAE,KAA0B;IAC5E,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,YAAgC,CAAC;IACrC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAClD,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAC3C,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACzD,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAoB,EACpB,KAA0B,EAC1B,WAAkC,EAAE;IAEpC,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7C,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC;IAChG,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC3C,OAAO,EAAE,SAAS,QAAQ,CAAC,MAAM,yBAAyB;SAC3D,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC,EAAE,gCAAgC,EAAE,CAAC;IACxF,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC;IAC1C,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE9D,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY;QACxD,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO;QACP,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CodebaseIndex, DirectoryTreeOptions, DirectoryTreeResult } from './types.js';
|
|
2
|
+
export interface BuildDirectoryTreeOptions extends DirectoryTreeOptions {
|
|
3
|
+
countTokens?: (text: string) => number;
|
|
4
|
+
}
|
|
5
|
+
export declare function directoryTreeHeader(result: Pick<DirectoryTreeResult, 'root' | 'mode' | 'totalFiles'>): string;
|
|
6
|
+
export declare function directoryTreeFooter(result: Pick<DirectoryTreeResult, 'truncated' | 'truncatedPaths'>): string | null;
|
|
7
|
+
export declare function buildDirectoryTree(index: CodebaseIndex, options?: BuildDirectoryTreeOptions): DirectoryTreeResult;
|