@cesarandreslopez/occ 0.8.9 → 0.8.11
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 +9 -4
- package/dist/src/code/build.d.ts +49 -1
- package/dist/src/code/build.js +127 -33
- package/dist/src/code/build.js.map +1 -1
- package/dist/src/code/chunk.d.ts +10 -0
- package/dist/src/code/chunk.js +14 -1
- package/dist/src/code/chunk.js.map +1 -1
- package/dist/src/code/command.js +16 -0
- package/dist/src/code/command.js.map +1 -1
- package/dist/src/code/discover.d.ts +13 -0
- package/dist/src/code/discover.js +49 -2
- package/dist/src/code/discover.js.map +1 -1
- package/dist/src/code/focus.d.ts +31 -0
- package/dist/src/code/focus.js +192 -0
- package/dist/src/code/focus.js.map +1 -0
- package/dist/src/code/incremental.d.ts +75 -0
- package/dist/src/code/incremental.js +257 -0
- package/dist/src/code/incremental.js.map +1 -0
- package/dist/src/code/map.d.ts +36 -1
- package/dist/src/code/map.js +83 -4
- package/dist/src/code/map.js.map +1 -1
- package/dist/src/code/output.js +28 -4
- package/dist/src/code/output.js.map +1 -1
- package/dist/src/code/parsers.d.ts +1 -0
- package/dist/src/code/parsers.js +1 -1
- package/dist/src/code/parsers.js.map +1 -1
- package/dist/src/code/rank.d.ts +14 -0
- package/dist/src/code/rank.js +58 -0
- package/dist/src/code/rank.js.map +1 -1
- package/dist/src/code/store.d.ts +20 -0
- package/dist/src/code/store.js +262 -109
- package/dist/src/code/store.js.map +1 -1
- package/dist/src/doc/chunk.d.ts +17 -0
- package/dist/src/doc/chunk.js +47 -18
- package/dist/src/doc/chunk.js.map +1 -1
- package/dist/src/doc/inspect-docx.js +13 -3
- package/dist/src/doc/inspect-docx.js.map +1 -1
- package/dist/src/doc/inspect-pdf.js +12 -17
- package/dist/src/doc/inspect-pdf.js.map +1 -1
- package/dist/src/index.d.ts +13 -8
- package/dist/src/index.js +9 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/inspect/xlsx-cells.d.ts +8 -0
- package/dist/src/inspect/xlsx-cells.js +17 -2
- package/dist/src/inspect/xlsx-cells.js.map +1 -1
- package/dist/src/markdown/convert.js +45 -27
- package/dist/src/markdown/convert.js.map +1 -1
- package/dist/src/parsers/docx.js +10 -2
- package/dist/src/parsers/docx.js.map +1 -1
- package/dist/src/parsers/index.js +5 -0
- package/dist/src/parsers/index.js.map +1 -1
- package/dist/src/parsers/pdf.js +12 -32
- package/dist/src/parsers/pdf.js.map +1 -1
- package/dist/src/parsers/xlsx.js +11 -1
- package/dist/src/parsers/xlsx.js.map +1 -1
- package/dist/src/progress-event.d.ts +3 -1
- package/dist/src/progress-event.js +31 -1
- package/dist/src/progress-event.js.map +1 -1
- package/dist/src/sheet/inspect.js +20 -10
- package/dist/src/sheet/inspect.js.map +1 -1
- package/dist/src/table/inspect-docx.js +10 -1
- package/dist/src/table/inspect-docx.js.map +1 -1
- package/dist/src/table/inspect-xlsx.js +15 -5
- package/dist/src/table/inspect-xlsx.js.map +1 -1
- package/dist/src/utils.d.ts +24 -0
- package/dist/src/utils.js +91 -2
- package/dist/src/utils.js.map +1 -1
- package/dist/src/workspace/bundle.d.ts +24 -0
- package/dist/src/workspace/bundle.js +303 -97
- package/dist/src/workspace/bundle.js.map +1 -1
- package/dist/src/workspace/documents.d.ts +4 -0
- package/dist/src/workspace/documents.js +15 -2
- package/dist/src/workspace/documents.js.map +1 -1
- package/dist/src/workspace/prepare-types.d.ts +15 -0
- package/dist/src/workspace/prepare-types.js +18 -1
- package/dist/src/workspace/prepare-types.js.map +1 -1
- package/dist/src/workspace/prepare.js +10 -2
- package/dist/src/workspace/prepare.js.map +1 -1
- package/package.json +9 -2
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { realpath, stat } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { DEFAULT_EXCLUDE_DIRS, discoverCodeFiles, wouldDiscoverPath } from './discover.js';
|
|
4
|
+
import { getLanguageSpec, normalizePath, stripImportSuffix } from './languages.js';
|
|
5
|
+
import { resolveImportPath } from './parsers.js';
|
|
6
|
+
import { abortIfNeeded, createIgnoreMatcher, mapWithConcurrency } from '../utils.js';
|
|
7
|
+
function buildDiff(added, modified, deleted) {
|
|
8
|
+
return {
|
|
9
|
+
added,
|
|
10
|
+
modified,
|
|
11
|
+
deleted,
|
|
12
|
+
hasChanges: added.length > 0 || modified.length > 0 || deleted.length > 0,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Diff the manifest against a full discovery pass: files on disk that are
|
|
17
|
+
* missing from the manifest are added, size/mtime mismatches are modified,
|
|
18
|
+
* and manifest entries absent from discovery are deleted.
|
|
19
|
+
*/
|
|
20
|
+
export async function computeManifestDiff(manifest, repoRoot, discoverOptions = {}, signal) {
|
|
21
|
+
const resolvedRoot = path.resolve(repoRoot);
|
|
22
|
+
abortIfNeeded(signal);
|
|
23
|
+
const discovered = await discoverCodeFiles(resolvedRoot, { ...discoverOptions, signal });
|
|
24
|
+
const statted = await mapWithConcurrency(discovered, 32, async (filePath) => {
|
|
25
|
+
try {
|
|
26
|
+
const fileStat = await stat(filePath);
|
|
27
|
+
if (!fileStat.isFile())
|
|
28
|
+
return null;
|
|
29
|
+
return {
|
|
30
|
+
path: filePath,
|
|
31
|
+
relativePath: normalizePath(path.relative(resolvedRoot, filePath)),
|
|
32
|
+
size: fileStat.size,
|
|
33
|
+
mtimeMs: fileStat.mtimeMs,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Disappeared between discovery and stat — treated as absent.
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}, signal);
|
|
41
|
+
const manifestByRel = new Map();
|
|
42
|
+
for (const entry of manifest)
|
|
43
|
+
manifestByRel.set(entry.relativePath, entry);
|
|
44
|
+
const added = [];
|
|
45
|
+
const modified = [];
|
|
46
|
+
const seen = new Set();
|
|
47
|
+
for (const current of statted) {
|
|
48
|
+
if (!current)
|
|
49
|
+
continue;
|
|
50
|
+
seen.add(current.relativePath);
|
|
51
|
+
const previous = manifestByRel.get(current.relativePath);
|
|
52
|
+
if (!previous) {
|
|
53
|
+
added.push(current);
|
|
54
|
+
}
|
|
55
|
+
else if (previous.size !== current.size || previous.mtimeMs !== current.mtimeMs) {
|
|
56
|
+
modified.push(current);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const deleted = [];
|
|
60
|
+
for (const entry of manifest) {
|
|
61
|
+
if (!seen.has(entry.relativePath)) {
|
|
62
|
+
deleted.push({ path: path.resolve(resolvedRoot, entry.relativePath), relativePath: entry.relativePath });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return buildDiff(added, modified, deleted);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Watcher fast path: classify an explicit changed-file list without a
|
|
69
|
+
* discovery pass. Entries outside the repo, without a language spec,
|
|
70
|
+
* rejected by the same ignore matcher discovery uses, or that discovery
|
|
71
|
+
* would never yield (dot-segments, excluded directories, symlinks — see
|
|
72
|
+
* wouldDiscoverPath) are dropped — required so the result is equivalent to
|
|
73
|
+
* what a full rebuild would have seen. On case-insensitive filesystems a
|
|
74
|
+
* stat can succeed for a stale casing after a case-only rename; such entries
|
|
75
|
+
* are redirected to the on-disk casing (stale casing deleted if indexed,
|
|
76
|
+
* real casing classified normally).
|
|
77
|
+
*/
|
|
78
|
+
export async function classifyChangedFiles(changedFiles, manifest, repoRoot, discoverOptions = {}, signal) {
|
|
79
|
+
const resolvedRoot = path.resolve(repoRoot);
|
|
80
|
+
abortIfNeeded(signal);
|
|
81
|
+
const excludeDir = discoverOptions.excludeDir ?? DEFAULT_EXCLUDE_DIRS;
|
|
82
|
+
const ignoreMatcher = await createIgnoreMatcher(resolvedRoot, {
|
|
83
|
+
excludeDir,
|
|
84
|
+
noGitignore: discoverOptions.noGitignore,
|
|
85
|
+
ignorePatterns: discoverOptions.ignorePatterns,
|
|
86
|
+
overlayIgnorePatterns: discoverOptions.overlayIgnorePatterns,
|
|
87
|
+
});
|
|
88
|
+
const manifestByRel = new Map();
|
|
89
|
+
for (const entry of manifest)
|
|
90
|
+
manifestByRel.set(entry.relativePath, entry);
|
|
91
|
+
const added = [];
|
|
92
|
+
const modified = [];
|
|
93
|
+
const deleted = [];
|
|
94
|
+
const seen = new Set();
|
|
95
|
+
let realRoot;
|
|
96
|
+
// Case-rename redirects append the on-disk casing for another pass.
|
|
97
|
+
const queue = [...changedFiles];
|
|
98
|
+
for (let cursor = 0; cursor < queue.length; cursor++) {
|
|
99
|
+
abortIfNeeded(signal);
|
|
100
|
+
const changed = queue[cursor];
|
|
101
|
+
const absolutePath = path.isAbsolute(changed) ? path.resolve(changed) : path.resolve(resolvedRoot, changed);
|
|
102
|
+
const relativePath = normalizePath(path.relative(resolvedRoot, absolutePath));
|
|
103
|
+
if (relativePath.startsWith('..'))
|
|
104
|
+
continue;
|
|
105
|
+
if (!getLanguageSpec(absolutePath))
|
|
106
|
+
continue;
|
|
107
|
+
if (ignoreMatcher.ignores(relativePath))
|
|
108
|
+
continue;
|
|
109
|
+
if (seen.has(relativePath))
|
|
110
|
+
continue;
|
|
111
|
+
seen.add(relativePath);
|
|
112
|
+
if (!await wouldDiscoverPath(resolvedRoot, absolutePath, excludeDir))
|
|
113
|
+
continue;
|
|
114
|
+
try {
|
|
115
|
+
const fileStat = await stat(absolutePath);
|
|
116
|
+
if (!fileStat.isFile())
|
|
117
|
+
continue;
|
|
118
|
+
// Case-insensitive filesystems (macOS APFS default) stat a stale
|
|
119
|
+
// casing successfully after a case-only rename; indexing it would
|
|
120
|
+
// duplicate the file. Compare against the on-disk casing (realpath
|
|
121
|
+
// is symlink-safe here — wouldDiscoverPath already rejected symlinks)
|
|
122
|
+
// and redirect to the real path.
|
|
123
|
+
realRoot ??= await realpath(resolvedRoot);
|
|
124
|
+
const realRelativePath = normalizePath(path.relative(realRoot, await realpath(absolutePath)));
|
|
125
|
+
if (realRelativePath !== relativePath) {
|
|
126
|
+
if (manifestByRel.has(relativePath))
|
|
127
|
+
deleted.push({ path: absolutePath, relativePath });
|
|
128
|
+
queue.push(path.resolve(resolvedRoot, realRelativePath));
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const entry = { path: absolutePath, relativePath, size: fileStat.size, mtimeMs: fileStat.mtimeMs };
|
|
132
|
+
if (manifestByRel.has(relativePath))
|
|
133
|
+
modified.push(entry);
|
|
134
|
+
else
|
|
135
|
+
added.push(entry);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Absent on disk: a deletion if indexed before, otherwise nothing to do.
|
|
139
|
+
if (manifestByRel.has(relativePath))
|
|
140
|
+
deleted.push({ path: absolutePath, relativePath });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return buildDiff(added, modified, deleted);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Candidate stems for an import specifier: the last path segment, the same
|
|
147
|
+
* segment without its extension, and the last dotted segment (Python-style
|
|
148
|
+
* `pkg.mod` specifiers). Used only as a conservative prefilter — a match
|
|
149
|
+
* triggers re-resolution, never a direct edit of the cached parse.
|
|
150
|
+
*/
|
|
151
|
+
function specifierStems(specifier) {
|
|
152
|
+
const stripped = stripImportSuffix(specifier);
|
|
153
|
+
const lastSegment = stripped.split('/').pop() ?? stripped;
|
|
154
|
+
const stems = new Set([lastSegment]);
|
|
155
|
+
const withoutExtension = lastSegment.replace(/\.[^.]+$/, '');
|
|
156
|
+
if (withoutExtension)
|
|
157
|
+
stems.add(withoutExtension);
|
|
158
|
+
const lastDotted = stripped.split('.').filter(Boolean).pop();
|
|
159
|
+
if (lastDotted)
|
|
160
|
+
stems.add(lastDotted);
|
|
161
|
+
return [...stems];
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* `ParsedFile.imports[].resolvedPath` is parse-time state: adding or deleting
|
|
165
|
+
* files can change how an *unchanged* importer resolves. Returns the absolute
|
|
166
|
+
* paths of cached files whose imports would resolve differently today, so the
|
|
167
|
+
* caller can re-parse them (imports are never patched in place).
|
|
168
|
+
*
|
|
169
|
+
* Only imports that could plausibly be affected are re-checked: those whose
|
|
170
|
+
* specifier stem matches an added file's basename or parent directory (covers
|
|
171
|
+
* both `./x` → `x.ts` and `./x` → `x/index.ts`, plus extension-priority
|
|
172
|
+
* shadowing of an existing resolution), bare-directory specifiers (`.`/`..`)
|
|
173
|
+
* when an `index.*`/`__init__.py` was added, still-unresolved non-relative
|
|
174
|
+
* specifiers when anything was added (tsconfig `paths` exact aliases like
|
|
175
|
+
* `@api` never stem-match the mapped file's basename), and those whose
|
|
176
|
+
* resolved target was deleted. A flagged import is re-resolved via the same
|
|
177
|
+
* resolveImportPath the parsers use; any difference from the cached
|
|
178
|
+
* annotation flags the file.
|
|
179
|
+
*/
|
|
180
|
+
export function findResolutionImpactedFiles(cachedFiles, diff, repoRoot) {
|
|
181
|
+
if (diff.added.length === 0 && diff.deleted.length === 0)
|
|
182
|
+
return [];
|
|
183
|
+
const addedStems = new Set();
|
|
184
|
+
let addedIndexLike = false;
|
|
185
|
+
for (const added of diff.added) {
|
|
186
|
+
const baseName = path.basename(added.path, path.extname(added.path));
|
|
187
|
+
addedStems.add(baseName);
|
|
188
|
+
addedStems.add(path.basename(path.dirname(added.path)));
|
|
189
|
+
if (baseName === 'index' || baseName === '__init__')
|
|
190
|
+
addedIndexLike = true;
|
|
191
|
+
}
|
|
192
|
+
const deletedSet = new Set(diff.deleted.map((entry) => entry.path));
|
|
193
|
+
const hasAdded = diff.added.length > 0;
|
|
194
|
+
const impacted = new Set();
|
|
195
|
+
for (const file of cachedFiles) {
|
|
196
|
+
if (deletedSet.has(file.path))
|
|
197
|
+
continue; // Deleted files are removed, never re-parsed.
|
|
198
|
+
const language = getLanguageSpec(file.path)?.name ?? file.language;
|
|
199
|
+
for (const fileImport of file.imports) {
|
|
200
|
+
const stems = specifierStems(fileImport.specifier);
|
|
201
|
+
const stemMatch = stems.some((stem) => addedStems.has(stem));
|
|
202
|
+
// `.`/`./`/`..`-style specifiers carry no usable stem; a new index.*
|
|
203
|
+
// (or __init__.py) anywhere can change how they resolve.
|
|
204
|
+
const directoryMatch = addedIndexLike
|
|
205
|
+
&& stems.every((stem) => stem === '.' || stem === '..' || stem === '');
|
|
206
|
+
// Exact tsconfig `paths` aliases resolve to files whose basenames never
|
|
207
|
+
// intersect the alias stem, so every still-unresolved non-relative
|
|
208
|
+
// specifier is re-checked whenever files appear. Cheap: tsconfig
|
|
209
|
+
// parsing is memoized per repoRoot and misses stay undefined.
|
|
210
|
+
const unresolvedBare = hasAdded
|
|
211
|
+
&& fileImport.resolvedPath == null
|
|
212
|
+
&& !fileImport.specifier.startsWith('.');
|
|
213
|
+
const targetDeleted = fileImport.resolvedPath != null && deletedSet.has(fileImport.resolvedPath);
|
|
214
|
+
if (!stemMatch && !directoryMatch && !unresolvedBare && !targetDeleted)
|
|
215
|
+
continue;
|
|
216
|
+
const outcome = resolveImportPath(language, { repoRoot }, file.path, fileImport.specifier);
|
|
217
|
+
if (outcome !== fileImport.resolvedPath) {
|
|
218
|
+
impacted.add(file.path);
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return [...impacted].sort();
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Merge cached parse results with fresh ones: drop `removals` (deleted files
|
|
227
|
+
* plus everything re-parsed), insert the fresh entries, and sort both outputs
|
|
228
|
+
* by absolute path with the default string comparator — reproducing the
|
|
229
|
+
* `discovered.sort()` order a full build would produce, which is what makes
|
|
230
|
+
* incremental output deep-equal a fresh full build.
|
|
231
|
+
*/
|
|
232
|
+
export function spliceIndexInputs(cachedFiles, cachedSkipped, removals, fresh) {
|
|
233
|
+
const parsedByPath = new Map();
|
|
234
|
+
for (const file of cachedFiles)
|
|
235
|
+
parsedByPath.set(file.path, file);
|
|
236
|
+
const skippedByPath = new Map();
|
|
237
|
+
for (const skipped of cachedSkipped)
|
|
238
|
+
skippedByPath.set(skipped.path, skipped);
|
|
239
|
+
for (const removal of removals) {
|
|
240
|
+
parsedByPath.delete(removal);
|
|
241
|
+
skippedByPath.delete(removal);
|
|
242
|
+
}
|
|
243
|
+
for (const file of fresh.parsedFiles) {
|
|
244
|
+
parsedByPath.set(file.path, file);
|
|
245
|
+
skippedByPath.delete(file.path);
|
|
246
|
+
}
|
|
247
|
+
for (const skipped of fresh.skippedFiles) {
|
|
248
|
+
skippedByPath.set(skipped.path, skipped);
|
|
249
|
+
parsedByPath.delete(skipped.path);
|
|
250
|
+
}
|
|
251
|
+
const byPath = (left, right) => left.path < right.path ? -1 : left.path > right.path ? 1 : 0;
|
|
252
|
+
return {
|
|
253
|
+
parsedFiles: [...parsedByPath.values()].sort(byPath),
|
|
254
|
+
skippedFiles: [...skippedByPath.values()].sort(byPath),
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=incremental.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incremental.js","sourceRoot":"","sources":["../../../src/code/incremental.ts"],"names":[],"mappings":"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"}
|
package/dist/src/code/map.d.ts
CHANGED
|
@@ -26,6 +26,13 @@ export declare const RepoMapModeSchema: z.ZodEnum<{
|
|
|
26
26
|
pack: "pack";
|
|
27
27
|
}>;
|
|
28
28
|
export type RepoMapMode = z.infer<typeof RepoMapModeSchema>;
|
|
29
|
+
/** Opt-in query/path focus. Absent or empty → global structural rank only (no behavior change). */
|
|
30
|
+
export declare const RepoMapFocusSchema: z.ZodObject<{
|
|
31
|
+
query: z.ZodOptional<z.ZodString>;
|
|
32
|
+
paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
33
|
+
graphDepth: z.ZodOptional<z.ZodNumber>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
export type RepoMapFocus = z.infer<typeof RepoMapFocusSchema>;
|
|
29
36
|
export declare const RepoMapOptionsSchema: z.ZodObject<{
|
|
30
37
|
tokenBudget: z.ZodNumber;
|
|
31
38
|
mode: z.ZodOptional<z.ZodEnum<{
|
|
@@ -52,6 +59,11 @@ export declare const RepoMapOptionsSchema: z.ZodObject<{
|
|
|
52
59
|
biasExports: z.ZodOptional<z.ZodBoolean>;
|
|
53
60
|
includeExternal: z.ZodOptional<z.ZodBoolean>;
|
|
54
61
|
}, z.core.$strip>>;
|
|
62
|
+
focus: z.ZodOptional<z.ZodObject<{
|
|
63
|
+
query: z.ZodOptional<z.ZodString>;
|
|
64
|
+
paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
65
|
+
graphDepth: z.ZodOptional<z.ZodNumber>;
|
|
66
|
+
}, z.core.$strip>>;
|
|
55
67
|
}, z.core.$strip>;
|
|
56
68
|
type RepoMapSerializableOptions = z.infer<typeof RepoMapOptionsSchema>;
|
|
57
69
|
/** Runtime options. `countTokens` is a function, so it lives here, off the Zod schema. */
|
|
@@ -85,8 +97,17 @@ export declare const RepoMapEntrySchema: z.ZodObject<{
|
|
|
85
97
|
contentReason: z.ZodOptional<z.ZodString>;
|
|
86
98
|
tokens: z.ZodNumber;
|
|
87
99
|
droppedSymbols: z.ZodNumber;
|
|
100
|
+
focusScore: z.ZodOptional<z.ZodNumber>;
|
|
101
|
+
focusReasons: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
88
102
|
}, z.core.$strip>;
|
|
89
103
|
export type RepoMapEntry = z.infer<typeof RepoMapEntrySchema>;
|
|
104
|
+
/** Echoed focus selector plus how many files the focus touched. */
|
|
105
|
+
export declare const RepoMapFocusResultSchema: z.ZodObject<{
|
|
106
|
+
query: z.ZodOptional<z.ZodString>;
|
|
107
|
+
paths: z.ZodArray<z.ZodString>;
|
|
108
|
+
matchedFiles: z.ZodNumber;
|
|
109
|
+
}, z.core.$strip>;
|
|
110
|
+
export type RepoMapFocusResult = z.infer<typeof RepoMapFocusResultSchema>;
|
|
90
111
|
export declare const RepoMapResultSchema: z.ZodObject<{
|
|
91
112
|
mode: z.ZodEnum<{
|
|
92
113
|
map: "map";
|
|
@@ -120,12 +141,19 @@ export declare const RepoMapResultSchema: z.ZodObject<{
|
|
|
120
141
|
contentReason: z.ZodOptional<z.ZodString>;
|
|
121
142
|
tokens: z.ZodNumber;
|
|
122
143
|
droppedSymbols: z.ZodNumber;
|
|
144
|
+
focusScore: z.ZodOptional<z.ZodNumber>;
|
|
145
|
+
focusReasons: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
123
146
|
}, z.core.$strip>>;
|
|
124
147
|
droppedFiles: z.ZodNumber;
|
|
125
148
|
droppedSymbols: z.ZodNumber;
|
|
126
149
|
truncated: z.ZodBoolean;
|
|
127
150
|
rankIterations: z.ZodNumber;
|
|
128
151
|
rankConverged: z.ZodBoolean;
|
|
152
|
+
focus: z.ZodOptional<z.ZodObject<{
|
|
153
|
+
query: z.ZodOptional<z.ZodString>;
|
|
154
|
+
paths: z.ZodArray<z.ZodString>;
|
|
155
|
+
matchedFiles: z.ZodNumber;
|
|
156
|
+
}, z.core.$strip>>;
|
|
129
157
|
}, z.core.$strip>;
|
|
130
158
|
export type RepoMapResult = z.infer<typeof RepoMapResultSchema>;
|
|
131
159
|
/**
|
|
@@ -140,6 +168,13 @@ export declare function repoMapSignatureLine(symbol: RepoMapSymbol): string;
|
|
|
140
168
|
* matches the emitted document exactly.
|
|
141
169
|
*/
|
|
142
170
|
export declare function repoMapEntryToMarkdown(entry: RepoMapEntry, mode: RepoMapMode): string;
|
|
143
|
-
/**
|
|
171
|
+
/**
|
|
172
|
+
* Build a token-budgeted, importance-ranked repo map (or pack) from an index.
|
|
173
|
+
*
|
|
174
|
+
* The index should be treated as immutable after construction: the underlying
|
|
175
|
+
* ranking is memoized per index object (see `rankNodesCached`) with only a
|
|
176
|
+
* `files`/`nodes`/`edges` length fingerprint, so in-place mutations that keep
|
|
177
|
+
* those lengths constant are not detected and reuse the cached ranking.
|
|
178
|
+
*/
|
|
144
179
|
export declare function buildRepoMap(index: CodebaseIndex, options: RepoMapOptions): RepoMapResult;
|
|
145
180
|
export {};
|
package/dist/src/code/map.js
CHANGED
|
@@ -16,9 +16,16 @@ import { z } from 'zod';
|
|
|
16
16
|
import { estimateTokenCount } from '../tokens.js';
|
|
17
17
|
import { extractKeySection } from './query.js';
|
|
18
18
|
import { toNormalizedSymbolKind } from './types.js';
|
|
19
|
-
import {
|
|
19
|
+
import { rankNodesCached, RankOptionsSchema } from './rank.js';
|
|
20
|
+
import { computeFocusScores } from './focus.js';
|
|
20
21
|
export const RepoMapFormatSchema = z.enum(['markdown', 'xml', 'json', 'plain']);
|
|
21
22
|
export const RepoMapModeSchema = z.enum(['map', 'pack']);
|
|
23
|
+
/** Opt-in query/path focus. Absent or empty → global structural rank only (no behavior change). */
|
|
24
|
+
export const RepoMapFocusSchema = z.object({
|
|
25
|
+
query: z.string().optional(),
|
|
26
|
+
paths: z.array(z.string()).optional(),
|
|
27
|
+
graphDepth: z.number().int().nonnegative().optional(),
|
|
28
|
+
});
|
|
22
29
|
export const RepoMapOptionsSchema = z.object({
|
|
23
30
|
tokenBudget: z.number().int().positive(),
|
|
24
31
|
mode: RepoMapModeSchema.optional(),
|
|
@@ -26,6 +33,7 @@ export const RepoMapOptionsSchema = z.object({
|
|
|
26
33
|
compress: z.boolean().optional(),
|
|
27
34
|
maxSymbolsPerFile: z.number().int().positive().optional(),
|
|
28
35
|
rank: RankOptionsSchema.optional(),
|
|
36
|
+
focus: RepoMapFocusSchema.optional(),
|
|
29
37
|
});
|
|
30
38
|
export const RepoMapSymbolSchema = z.object({
|
|
31
39
|
name: z.string(),
|
|
@@ -46,6 +54,16 @@ export const RepoMapEntrySchema = z.object({
|
|
|
46
54
|
contentReason: z.string().optional(),
|
|
47
55
|
tokens: z.number(),
|
|
48
56
|
droppedSymbols: z.number(),
|
|
57
|
+
/** 0–100 focus relevance (present only when a focus is active). */
|
|
58
|
+
focusScore: z.number().optional(),
|
|
59
|
+
/** Human-readable reasons this file matched the focus. */
|
|
60
|
+
focusReasons: z.array(z.string()).optional(),
|
|
61
|
+
});
|
|
62
|
+
/** Echoed focus selector plus how many files the focus touched. */
|
|
63
|
+
export const RepoMapFocusResultSchema = z.object({
|
|
64
|
+
query: z.string().optional(),
|
|
65
|
+
paths: z.array(z.string()),
|
|
66
|
+
matchedFiles: z.number(),
|
|
49
67
|
});
|
|
50
68
|
export const RepoMapResultSchema = z.object({
|
|
51
69
|
mode: RepoMapModeSchema,
|
|
@@ -60,9 +78,27 @@ export const RepoMapResultSchema = z.object({
|
|
|
60
78
|
truncated: z.boolean(),
|
|
61
79
|
rankIterations: z.number(),
|
|
62
80
|
rankConverged: z.boolean(),
|
|
81
|
+
focus: RepoMapFocusResultSchema.optional(),
|
|
63
82
|
});
|
|
64
83
|
const APPROX_CHARS_PER_TOKEN = 4;
|
|
65
84
|
const DEFAULT_COMPRESS_CHARS = 4_000;
|
|
85
|
+
// Focus blend: `combined = global * 0.35 + focus * 0.65`. The focus score is
|
|
86
|
+
// normalized against a FIXED saturation (not a per-run max) so a strong query
|
|
87
|
+
// hit stays high even when another file has a huge path score.
|
|
88
|
+
const FOCUS_SATURATION = 10;
|
|
89
|
+
const FOCUS_GLOBAL_WEIGHT = 0.35;
|
|
90
|
+
const FOCUS_RELEVANCE_WEIGHT = 0.65;
|
|
91
|
+
function round1(value) {
|
|
92
|
+
return Math.round(value * 10) / 10;
|
|
93
|
+
}
|
|
94
|
+
/** A focus is active only if it carries a non-blank query term or path. */
|
|
95
|
+
function isFocusActive(focus) {
|
|
96
|
+
if (focus == null)
|
|
97
|
+
return false;
|
|
98
|
+
if ((focus.query ?? '').trim().length > 0)
|
|
99
|
+
return true;
|
|
100
|
+
return (focus.paths ?? []).some((value) => value.trim().length > 0);
|
|
101
|
+
}
|
|
66
102
|
function symbolKey(parts) {
|
|
67
103
|
return [parts.type, parts.name, parts.line ?? '', parts.containerName ?? ''].join('|');
|
|
68
104
|
}
|
|
@@ -142,14 +178,24 @@ function buildContentEntry(file, charBudget) {
|
|
|
142
178
|
return null;
|
|
143
179
|
}
|
|
144
180
|
}
|
|
145
|
-
/**
|
|
181
|
+
/**
|
|
182
|
+
* Build a token-budgeted, importance-ranked repo map (or pack) from an index.
|
|
183
|
+
*
|
|
184
|
+
* The index should be treated as immutable after construction: the underlying
|
|
185
|
+
* ranking is memoized per index object (see `rankNodesCached`) with only a
|
|
186
|
+
* `files`/`nodes`/`edges` length fingerprint, so in-place mutations that keep
|
|
187
|
+
* those lengths constant are not detected and reuse the cached ranking.
|
|
188
|
+
*/
|
|
146
189
|
export function buildRepoMap(index, options) {
|
|
147
190
|
const mode = options.mode ?? 'map';
|
|
148
191
|
const format = options.format ?? 'markdown';
|
|
149
192
|
const compress = options.compress ?? false;
|
|
150
193
|
const countTokens = options.countTokens ?? estimateTokenCount;
|
|
151
194
|
const budget = options.tokenBudget;
|
|
152
|
-
|
|
195
|
+
// Cached per index object: repeated map calls (e.g. focused maps) skip
|
|
196
|
+
// PageRank. The shared RankResult is read-only here — fileScores is copied
|
|
197
|
+
// before any sort and nodes are only iterated.
|
|
198
|
+
const ranking = rankNodesCached(index, options.rank);
|
|
153
199
|
const fileByPath = new Map();
|
|
154
200
|
for (const file of index.files)
|
|
155
201
|
fileByPath.set(file.path, file);
|
|
@@ -163,11 +209,35 @@ export function buildRepoMap(index, options) {
|
|
|
163
209
|
else
|
|
164
210
|
rankedSymbolsByPath.set(node.path, [node]);
|
|
165
211
|
}
|
|
212
|
+
// Focus (opt-in): blend per-file relevance with the global structural rank and
|
|
213
|
+
// re-sort the admission order. The greedy loop below only depends on iteration
|
|
214
|
+
// order, so this is the entire behavioral change — budgeting is untouched.
|
|
215
|
+
const focus = options.focus;
|
|
216
|
+
let orderedFileScores = ranking.fileScores;
|
|
217
|
+
let focusByPath;
|
|
218
|
+
let focusResult;
|
|
219
|
+
if (isFocusActive(focus)) {
|
|
220
|
+
focusByPath = computeFocusScores(index, focus);
|
|
221
|
+
const focusScores = focusByPath;
|
|
222
|
+
orderedFileScores = [...ranking.fileScores]
|
|
223
|
+
.map((fileScore) => {
|
|
224
|
+
const focusNormalized = Math.min(1, (focusScores.get(fileScore.path)?.score ?? 0) / FOCUS_SATURATION);
|
|
225
|
+
const globalNormalized = fileScore.normalizedScore / 100;
|
|
226
|
+
return { fileScore, combined: globalNormalized * FOCUS_GLOBAL_WEIGHT + focusNormalized * FOCUS_RELEVANCE_WEIGHT };
|
|
227
|
+
})
|
|
228
|
+
.sort((a, b) => b.combined - a.combined)
|
|
229
|
+
.map((item) => item.fileScore);
|
|
230
|
+
focusResult = {
|
|
231
|
+
query: (focus.query ?? '').trim() || undefined,
|
|
232
|
+
paths: (focus.paths ?? []).map((value) => value.trim()).filter(Boolean),
|
|
233
|
+
matchedFiles: [...focusByPath.values()].filter((entry) => entry.score > 0).length,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
166
236
|
const entries = [];
|
|
167
237
|
let tokensUsed = 0;
|
|
168
238
|
let droppedFiles = 0;
|
|
169
239
|
let droppedSymbols = 0;
|
|
170
|
-
for (const fileScore of
|
|
240
|
+
for (const fileScore of orderedFileScores) {
|
|
171
241
|
const file = fileByPath.get(fileScore.path);
|
|
172
242
|
if (!file)
|
|
173
243
|
continue;
|
|
@@ -211,6 +281,14 @@ export function buildRepoMap(index, options) {
|
|
|
211
281
|
tokens: 0,
|
|
212
282
|
droppedSymbols: 0,
|
|
213
283
|
};
|
|
284
|
+
// Focus metadata stays OUT of `repoMapEntryToMarkdown`, so token budgeting
|
|
285
|
+
// is identical whether or not a focus is active.
|
|
286
|
+
if (focusByPath) {
|
|
287
|
+
const fileFocus = focusByPath.get(file.path);
|
|
288
|
+
entry.focusScore = round1(Math.min(1, (fileFocus?.score ?? 0) / FOCUS_SATURATION) * 100);
|
|
289
|
+
if (fileFocus && fileFocus.reasons.length > 0)
|
|
290
|
+
entry.focusReasons = fileFocus.reasons;
|
|
291
|
+
}
|
|
214
292
|
entry.tokens = countTokens(repoMapEntryToMarkdown(entry, mode));
|
|
215
293
|
return entry;
|
|
216
294
|
};
|
|
@@ -270,6 +348,7 @@ export function buildRepoMap(index, options) {
|
|
|
270
348
|
truncated: droppedFiles > 0 || droppedSymbols > 0,
|
|
271
349
|
rankIterations: ranking.iterations,
|
|
272
350
|
rankConverged: ranking.converged,
|
|
351
|
+
focus: focusResult,
|
|
273
352
|
};
|
|
274
353
|
}
|
|
275
354
|
//# sourceMappingURL=map.js.map
|
package/dist/src/code/map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/code/map.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/code/map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAqD,MAAM,WAAW,CAAC;AAClH,OAAO,EAAE,kBAAkB,EAAkB,MAAM,YAAY,CAAC;AAEhE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAGhF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAGzD,mGAAmG;AACnG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxC,IAAI,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IACtC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACzD,IAAI,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAQH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,mEAAmE;IACnE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,0DAA0D;IAC1D,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AAGH,mEAAmE;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;CACzB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,iBAAiB;IACvB,MAAM,EAAE,mBAAmB;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE;IAC1B,KAAK,EAAE,wBAAwB,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAGH,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAErC,6EAA6E;AAC7E,8EAA8E;AAC9E,+DAA+D;AAC/D,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAEpC,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACrC,CAAC;AAED,2EAA2E;AAC3E,SAAS,aAAa,CAAC,KAA+B;IACpD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,SAAS,CAAC,KAA4E;IAC7F,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzF,CAAC;AAED,+EAA+E;AAC/E,SAAS,qBAAqB,CAAC,IAAgB,EAAE,YAA0B;IACzE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC9C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACjI,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAChH,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;YAC/D,SAAS,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI;YAClE,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;YAClC,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;IACL,CAAC;IAED,iFAAiF;IACjF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAqB;IACxD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;IAE7B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;QACpH,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IAC/D,IAAI,GAAG,IAAI,GAAG,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,GAAG,MAAM,GAAG,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,MAAM,GAAG,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAmB,EAAE,IAAiB;IAC3E,MAAM,KAAK,GAAa,CAAC,MAAM,KAAK,CAAC,YAAY,YAAY,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClG,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,aAAa;YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,aAAa,MAAM,CAAC,CAAC;QACvE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAgB,EAAE,UAAkB;IAC7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,KAAoB,EAAE,OAAuB;IACxE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,kBAAkB,CAAC;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAEnC,uEAAuE;IACvE,2EAA2E;IAC3E,+CAA+C;IAC/C,MAAM,OAAO,GAAe,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK;QAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEhE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC5D,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QAC7D,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACrB,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,+EAA+E;IAC/E,+EAA+E;IAC/E,2EAA2E;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,iBAAiB,GAAiB,OAAO,CAAC,UAAU,CAAC;IACzD,IAAI,WAA+C,CAAC;IACpD,IAAI,WAA2C,CAAC;IAChD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,WAAW,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,WAAW,CAAC;QAChC,iBAAiB,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;aACxC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YACjB,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;YACtG,MAAM,gBAAgB,GAAG,SAAS,CAAC,eAAe,GAAG,GAAG,CAAC;YACzD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,eAAe,GAAG,sBAAsB,EAAE,CAAC;QACpH,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;aACvC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,WAAW,GAAG;YACZ,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS;YAC9C,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACvE,YAAY,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM;SAClF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,MAAM,SAAS,IAAI,iBAAiB,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;QACtC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,YAAY,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,OAAO,GAAG,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACpF,IAAI,OAAO,CAAC,iBAAiB,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;YACpF,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAC7D,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,OAA2B,CAAC;QAChC,IAAI,aAAiC,CAAC;QACtC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,UAAU,GAAG,QAAQ;gBACzB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,SAAS,GAAG,sBAAsB,CAAC;gBACtE,CAAC,CAAC,SAAS,GAAG,sBAAsB,CAAC;YACvC,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAClD,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBACxB,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,IAAI,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACrD,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEzE,MAAM,SAAS,GAAG,CAAC,YAA6B,EAAE,YAAqB,EAAgB,EAAE;YACvF,MAAM,KAAK,GAAiB;gBAC1B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,eAAe,EAAE,SAAS,CAAC,eAAe;gBAC1C,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,YAAY;gBACrB,aAAa,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;gBAC/D,MAAM,EAAE,CAAC;gBACT,cAAc,EAAE,CAAC;aAClB,CAAC;YACF,2EAA2E;YAC3E,iDAAiD;YACjD,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7C,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,GAAG,CAAC,CAAC;gBACzF,IAAI,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;oBAAE,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;YACxF,CAAC;YACD,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,IAAI,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAExC,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;YACxC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QAED,wEAAwE;QACxE,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACvC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,sBAAsB,GAAG,GAAG,CAAC,CAAC,CAAC;YACrG,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACrD,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBACzB,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC9B,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oEAAoE;YACpE,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;YAC1B,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC;gBAChB,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBAChD,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;oBACxC,KAAK,GAAG,KAAK,CAAC;oBACd,MAAM;gBACR,CAAC;gBACD,IAAI,EAAE,CAAC;YACT,CAAC;YACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;gBACjC,SAAS;YACX,CAAC;YACD,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACxC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QAC/C,CAAC;QAED,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;YACxC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,YAAY,EAAE,CAAC;YACf,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI;QACJ,MAAM;QACN,WAAW,EAAE,MAAM;QACnB,UAAU;QACV,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM;QACrC,OAAO;QACP,YAAY;QACZ,cAAc;QACd,SAAS,EAAE,YAAY,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC;QACjD,cAAc,EAAE,OAAO,CAAC,UAAU;QAClC,aAAa,EAAE,OAAO,CAAC,SAAS;QAChC,KAAK,EAAE,WAAW;KACnB,CAAC;AACJ,CAAC"}
|
package/dist/src/code/output.js
CHANGED
|
@@ -306,9 +306,23 @@ export function formatModuleCoupling(result, ci = false) {
|
|
|
306
306
|
// ── Repo map / pack ───────────────────────────────────────────────────────
|
|
307
307
|
// Repo-map output is meant to be pasted into an LLM, so it is deliberately
|
|
308
308
|
// plain (no ANSI colors) regardless of the `ci` flag.
|
|
309
|
+
/** One-line description of an active focus, or '' when there is none. */
|
|
310
|
+
function focusDescriptor(result) {
|
|
311
|
+
const focus = result.focus;
|
|
312
|
+
if (!focus)
|
|
313
|
+
return '';
|
|
314
|
+
const parts = [];
|
|
315
|
+
if (focus.query)
|
|
316
|
+
parts.push(`query "${focus.query}"`);
|
|
317
|
+
if (focus.paths.length > 0)
|
|
318
|
+
parts.push(`${focus.paths.length} path(s)`);
|
|
319
|
+
const what = parts.length > 0 ? parts.join(' + ') : 'focus';
|
|
320
|
+
return `${what}, ${focus.matchedFiles} matched`;
|
|
321
|
+
}
|
|
309
322
|
function repoMapHeader(result) {
|
|
310
323
|
const tokenizer = result.tokenizer && result.tokenizer !== 'heuristic' ? `, ${result.tokenizer}` : '';
|
|
311
|
-
|
|
324
|
+
const focus = result.focus ? ` — focus: ${focusDescriptor(result)}` : '';
|
|
325
|
+
return `# Repo Map — ${result.entries.length}/${result.totalFiles} files, ${result.tokensUsed}/${result.tokenBudget} tokens${tokenizer}${focus}`;
|
|
312
326
|
}
|
|
313
327
|
function repoMapFooter(result) {
|
|
314
328
|
if (!result.truncated)
|
|
@@ -330,8 +344,9 @@ export function formatRepoMapMarkdown(result) {
|
|
|
330
344
|
return blocks.join('\n\n') + '\n';
|
|
331
345
|
}
|
|
332
346
|
export function formatRepoMapPlain(result) {
|
|
347
|
+
const focus = result.focus ? ` — focus: ${focusDescriptor(result)}` : '';
|
|
333
348
|
const lines = [
|
|
334
|
-
`Repo Map (${result.entries.length}/${result.totalFiles} files, ${result.tokensUsed}/${result.tokenBudget} tokens)`,
|
|
349
|
+
`Repo Map (${result.entries.length}/${result.totalFiles} files, ${result.tokensUsed}/${result.tokenBudget} tokens)${focus}`,
|
|
335
350
|
'',
|
|
336
351
|
];
|
|
337
352
|
for (const entry of result.entries) {
|
|
@@ -360,7 +375,8 @@ function escapeXml(value) {
|
|
|
360
375
|
.replace(/"/g, '"');
|
|
361
376
|
}
|
|
362
377
|
function repoMapEntryToXml(entry, mode) {
|
|
363
|
-
const
|
|
378
|
+
const focusAttr = entry.focusScore != null ? ` focusScore="${entry.focusScore.toFixed(1)}"` : '';
|
|
379
|
+
const lines = [` <file path="${escapeXml(entry.relativePath)}" score="${entry.normalizedScore.toFixed(1)}"${focusAttr} language="${escapeXml(entry.language)}">`];
|
|
364
380
|
for (const symbol of entry.symbols) {
|
|
365
381
|
lines.push(` <symbol kind="${escapeXml(symbol.kind)}" exported="${symbol.exported}"${symbol.line != null ? ` line="${symbol.line}"` : ''}>${escapeXml(symbol.signature)}</symbol>`);
|
|
366
382
|
}
|
|
@@ -370,9 +386,17 @@ function repoMapEntryToXml(entry, mode) {
|
|
|
370
386
|
lines.push(' </file>');
|
|
371
387
|
return lines.join('\n');
|
|
372
388
|
}
|
|
389
|
+
function repoMapFocusXmlAttrs(result) {
|
|
390
|
+
const focus = result.focus;
|
|
391
|
+
if (!focus)
|
|
392
|
+
return '';
|
|
393
|
+
const query = focus.query ? ` focusQuery="${escapeXml(focus.query)}"` : '';
|
|
394
|
+
const paths = focus.paths.length > 0 ? ` focusPaths="${escapeXml(focus.paths.join(';'))}"` : '';
|
|
395
|
+
return `${query}${paths} focusMatched="${focus.matchedFiles}"`;
|
|
396
|
+
}
|
|
373
397
|
export function formatRepoMapXml(result) {
|
|
374
398
|
const lines = [
|
|
375
|
-
`<repomap mode="${result.mode}" tokens="${result.tokensUsed}" budget="${result.tokenBudget}" files="${result.entries.length}" totalFiles="${result.totalFiles}"${result.truncated ? ' truncated="true"' : ''}>`,
|
|
399
|
+
`<repomap mode="${result.mode}" tokens="${result.tokensUsed}" budget="${result.tokenBudget}" files="${result.entries.length}" totalFiles="${result.totalFiles}"${result.truncated ? ' truncated="true"' : ''}${repoMapFocusXmlAttrs(result)}>`,
|
|
376
400
|
];
|
|
377
401
|
for (const entry of result.entries)
|
|
378
402
|
lines.push(repoMapEntryToXml(entry, result.mode));
|