@cesarandreslopez/occ 0.8.11 → 0.9.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.
Files changed (182) hide show
  1. package/README.md +167 -77
  2. package/dist/src/cli-validation.js +3 -11
  3. package/dist/src/cli-validation.js.map +1 -1
  4. package/dist/src/cli.js +23 -11
  5. package/dist/src/cli.js.map +1 -1
  6. package/dist/src/code/build.js +28 -22
  7. package/dist/src/code/build.js.map +1 -1
  8. package/dist/src/code/cache.js +3 -1
  9. package/dist/src/code/cache.js.map +1 -1
  10. package/dist/src/code/chunk.js +4 -4
  11. package/dist/src/code/chunk.js.map +1 -1
  12. package/dist/src/code/command.js +147 -37
  13. package/dist/src/code/command.js.map +1 -1
  14. package/dist/src/code/diff.d.ts +264 -0
  15. package/dist/src/code/diff.js +504 -0
  16. package/dist/src/code/diff.js.map +1 -0
  17. package/dist/src/code/discover.js +5 -5
  18. package/dist/src/code/discover.js.map +1 -1
  19. package/dist/src/code/focus.js +5 -5
  20. package/dist/src/code/focus.js.map +1 -1
  21. package/dist/src/code/incremental.js +11 -9
  22. package/dist/src/code/incremental.js.map +1 -1
  23. package/dist/src/code/index-io.js.map +1 -1
  24. package/dist/src/code/isolated-runner.js.map +1 -1
  25. package/dist/src/code/isolated.js +2 -2
  26. package/dist/src/code/isolated.js.map +1 -1
  27. package/dist/src/code/languages.js +2 -2
  28. package/dist/src/code/languages.js.map +1 -1
  29. package/dist/src/code/map.d.ts +12 -0
  30. package/dist/src/code/map.js +22 -9
  31. package/dist/src/code/map.js.map +1 -1
  32. package/dist/src/code/output.d.ts +3 -0
  33. package/dist/src/code/output.js +39 -22
  34. package/dist/src/code/output.js.map +1 -1
  35. package/dist/src/code/parsers.js +87 -26
  36. package/dist/src/code/parsers.js.map +1 -1
  37. package/dist/src/code/query.js +44 -38
  38. package/dist/src/code/query.js.map +1 -1
  39. package/dist/src/code/rank.js +30 -17
  40. package/dist/src/code/rank.js.map +1 -1
  41. package/dist/src/code/session.js.map +1 -1
  42. package/dist/src/code/slim.js.map +1 -1
  43. package/dist/src/code/store.js +35 -23
  44. package/dist/src/code/store.js.map +1 -1
  45. package/dist/src/code/types.js +15 -3
  46. package/dist/src/code/types.js.map +1 -1
  47. package/dist/src/doc/batch.js +6 -2
  48. package/dist/src/doc/batch.js.map +1 -1
  49. package/dist/src/doc/chunk.js +9 -5
  50. package/dist/src/doc/chunk.js.map +1 -1
  51. package/dist/src/doc/command.js +18 -9
  52. package/dist/src/doc/command.js.map +1 -1
  53. package/dist/src/doc/discover.d.ts +1 -1
  54. package/dist/src/doc/discover.js.map +1 -1
  55. package/dist/src/doc/entities.js +90 -10
  56. package/dist/src/doc/entities.js.map +1 -1
  57. package/dist/src/doc/inspect-docx.js +5 -4
  58. package/dist/src/doc/inspect-docx.js.map +1 -1
  59. package/dist/src/doc/inspect-odt.js.map +1 -1
  60. package/dist/src/doc/inspect-pdf.js +1 -1
  61. package/dist/src/doc/inspect-pdf.js.map +1 -1
  62. package/dist/src/doc/inspect.js +4 -4
  63. package/dist/src/doc/inspect.js.map +1 -1
  64. package/dist/src/doc/output.js +11 -8
  65. package/dist/src/doc/output.js.map +1 -1
  66. package/dist/src/doc/references.js +4 -4
  67. package/dist/src/doc/references.js.map +1 -1
  68. package/dist/src/errors.js +2 -4
  69. package/dist/src/errors.js.map +1 -1
  70. package/dist/src/git/api.d.ts +34 -0
  71. package/dist/src/git/api.js +247 -0
  72. package/dist/src/git/api.js.map +1 -0
  73. package/dist/src/git/client.d.ts +48 -0
  74. package/dist/src/git/client.js +336 -0
  75. package/dist/src/git/client.js.map +1 -0
  76. package/dist/src/git/command.d.ts +2 -0
  77. package/dist/src/git/command.js +173 -0
  78. package/dist/src/git/command.js.map +1 -0
  79. package/dist/src/git/index.d.ts +5 -0
  80. package/dist/src/git/index.js +6 -0
  81. package/dist/src/git/index.js.map +1 -0
  82. package/dist/src/git/output.d.ts +8 -0
  83. package/dist/src/git/output.js +38 -0
  84. package/dist/src/git/output.js.map +1 -0
  85. package/dist/src/git/parse.d.ts +19 -0
  86. package/dist/src/git/parse.js +354 -0
  87. package/dist/src/git/parse.js.map +1 -0
  88. package/dist/src/git/types.d.ts +334 -0
  89. package/dist/src/git/types.js +135 -0
  90. package/dist/src/git/types.js.map +1 -0
  91. package/dist/src/index.d.ts +29 -7
  92. package/dist/src/index.js +20 -3
  93. package/dist/src/index.js.map +1 -1
  94. package/dist/src/inspect/shared.js.map +1 -1
  95. package/dist/src/markdown/convert.js +17 -11
  96. package/dist/src/markdown/convert.js.map +1 -1
  97. package/dist/src/output/tabular.js +25 -17
  98. package/dist/src/output/tabular.js.map +1 -1
  99. package/dist/src/output/tree.js +7 -7
  100. package/dist/src/output/tree.js.map +1 -1
  101. package/dist/src/parsers/docx.js +1 -1
  102. package/dist/src/parsers/docx.js.map +1 -1
  103. package/dist/src/parsers/index.js +9 -7
  104. package/dist/src/parsers/index.js.map +1 -1
  105. package/dist/src/parsers/pdf.js +1 -1
  106. package/dist/src/parsers/pdf.js.map +1 -1
  107. package/dist/src/parsers/pptx.js.map +1 -1
  108. package/dist/src/parsers/xlsx.js +5 -3
  109. package/dist/src/parsers/xlsx.js.map +1 -1
  110. package/dist/src/progress-event.d.ts +1 -1
  111. package/dist/src/progress-event.js +1 -0
  112. package/dist/src/progress-event.js.map +1 -1
  113. package/dist/src/scc.js +9 -5
  114. package/dist/src/scc.js.map +1 -1
  115. package/dist/src/sheet/command.js +11 -7
  116. package/dist/src/sheet/command.js.map +1 -1
  117. package/dist/src/sheet/inspect.js +14 -14
  118. package/dist/src/sheet/inspect.js.map +1 -1
  119. package/dist/src/sheet/output.js +10 -15
  120. package/dist/src/sheet/output.js.map +1 -1
  121. package/dist/src/skills/command.d.ts +2 -0
  122. package/dist/src/skills/command.js +188 -0
  123. package/dist/src/skills/command.js.map +1 -0
  124. package/dist/src/slide/command.js +8 -6
  125. package/dist/src/slide/command.js.map +1 -1
  126. package/dist/src/slide/inspect-odp.js.map +1 -1
  127. package/dist/src/slide/inspect-pptx.js +5 -2
  128. package/dist/src/slide/inspect-pptx.js.map +1 -1
  129. package/dist/src/slide/inspect.js +4 -2
  130. package/dist/src/slide/inspect.js.map +1 -1
  131. package/dist/src/slide/output.js +10 -15
  132. package/dist/src/slide/output.js.map +1 -1
  133. package/dist/src/slide/types.js.map +1 -1
  134. package/dist/src/stats.js +31 -3
  135. package/dist/src/stats.js.map +1 -1
  136. package/dist/src/table/command.js +8 -6
  137. package/dist/src/table/command.js.map +1 -1
  138. package/dist/src/table/inspect-docx.js +1 -1
  139. package/dist/src/table/inspect-docx.js.map +1 -1
  140. package/dist/src/table/inspect-odt.js.map +1 -1
  141. package/dist/src/table/inspect-pptx.js +5 -2
  142. package/dist/src/table/inspect-pptx.js.map +1 -1
  143. package/dist/src/table/inspect-xlsx.js +1 -1
  144. package/dist/src/table/inspect-xlsx.js.map +1 -1
  145. package/dist/src/table/inspect.js +3 -1
  146. package/dist/src/table/inspect.js.map +1 -1
  147. package/dist/src/table/output.js +7 -11
  148. package/dist/src/table/output.js.map +1 -1
  149. package/dist/src/table/types.js.map +1 -1
  150. package/dist/src/tokens.js +1 -1
  151. package/dist/src/tokens.js.map +1 -1
  152. package/dist/src/utils.js +6 -11
  153. package/dist/src/utils.js.map +1 -1
  154. package/dist/src/walker.js +2 -4
  155. package/dist/src/walker.js.map +1 -1
  156. package/dist/src/workspace/analyze.js +4 -4
  157. package/dist/src/workspace/analyze.js.map +1 -1
  158. package/dist/src/workspace/bundle.d.ts +27 -0
  159. package/dist/src/workspace/bundle.js +157 -54
  160. package/dist/src/workspace/bundle.js.map +1 -1
  161. package/dist/src/workspace/command.js +31 -16
  162. package/dist/src/workspace/command.js.map +1 -1
  163. package/dist/src/workspace/describe-output.js +10 -9
  164. package/dist/src/workspace/describe-output.js.map +1 -1
  165. package/dist/src/workspace/describe.js +54 -47
  166. package/dist/src/workspace/describe.js.map +1 -1
  167. package/dist/src/workspace/documents.js +28 -8
  168. package/dist/src/workspace/documents.js.map +1 -1
  169. package/dist/src/workspace/prepare-runner.js.map +1 -1
  170. package/dist/src/workspace/prepare-types.js.map +1 -1
  171. package/dist/src/workspace/prepare.js +38 -19
  172. package/dist/src/workspace/prepare.js.map +1 -1
  173. package/dist/src/workspace/types.js +4 -2
  174. package/dist/src/workspace/types.js.map +1 -1
  175. package/package.json +57 -4
  176. package/scripts/postinstall.js +13 -9
  177. package/skills/occ/SKILL.md +77 -0
  178. package/skills/occ/reference/code.md +69 -0
  179. package/skills/occ/reference/commands.md +66 -0
  180. package/skills/occ/reference/documents.md +65 -0
  181. package/skills/occ/reference/git.md +55 -0
  182. package/skills/occ/reference/workspace.md +65 -0
@@ -0,0 +1,504 @@
1
+ import path from 'node:path';
2
+ import { z } from 'zod';
3
+ import { estimateTokenCount } from '../tokens.js';
4
+ import { getGitDiffFunctionContext, getGitDiffHunks, getGitDiffSummary } from '../git/api.js';
5
+ import { CodeCapabilitiesSchema, NormalizedSymbolKindSchema, toNormalizedSymbolKind } from './types.js';
6
+ import { rankNodesCached, RankOptionsSchema, RankResultSchema } from './rank.js';
7
+ import { GitDiffHunksSchema, GitRangeSchema } from '../git/types.js';
8
+ export const ChangedSymbolSchema = z.object({
9
+ nodeId: z.string().optional(),
10
+ kind: NormalizedSymbolKindSchema,
11
+ name: z.string(),
12
+ containerName: z.string().optional(),
13
+ file: z.string(),
14
+ relativePath: z.string(),
15
+ line: z.number().optional(),
16
+ endLine: z.number().optional(),
17
+ endLineApprox: z.boolean().optional(),
18
+ changeKind: z.enum(['added', 'modified', 'removed', 'signature']),
19
+ churn: z.object({ added: z.number(), deleted: z.number() }),
20
+ rank: z.number(),
21
+ isExported: z.boolean(),
22
+ isNewExport: z.boolean(),
23
+ signature: z.string().optional(),
24
+ provenance: z.enum(['index', 'function-context', 'hunk-scan', 'base-index']),
25
+ });
26
+ export const FileChangeSchema = z.object({
27
+ changeType: z.enum(['added', 'modified', 'deleted', 'renamed', 'copied']),
28
+ path: z.string(),
29
+ relativePath: z.string(),
30
+ oldPath: z.string().optional(),
31
+ churn: z.object({ added: z.number(), deleted: z.number(), binary: z.boolean() }),
32
+ topLevelChurn: z.object({ added: z.number(), deleted: z.number() }),
33
+ importsChanged: z.boolean(),
34
+ symbolCount: z.number(),
35
+ rank: z.number(),
36
+ });
37
+ export const CodeDiffResultSchema = z.object({
38
+ range: GitRangeSchema,
39
+ repoRoot: z.string(),
40
+ files: z.array(FileChangeSchema),
41
+ symbols: z.array(ChangedSymbolSchema),
42
+ summary: z.object({
43
+ filesChanged: z.number(),
44
+ symbolsChanged: z.number(),
45
+ added: z.number(),
46
+ removed: z.number(),
47
+ modified: z.number(),
48
+ signatureChanges: z.number(),
49
+ newExports: z.number(),
50
+ removedExports: z.number(),
51
+ totalChurn: z.object({ added: z.number(), deleted: z.number() }),
52
+ droppedSymbols: z.number(),
53
+ approxEndLines: z.number(),
54
+ }),
55
+ tokenizer: z.string().optional(),
56
+ tokenBudget: z.number().optional(),
57
+ tokensUsed: z.number(),
58
+ truncated: z.boolean(),
59
+ unmappedHunks: z.number(),
60
+ capabilities: z.record(z.string(), CodeCapabilitiesSchema),
61
+ });
62
+ export const CodeDiffOptionsSchema = z.object({
63
+ base: z.string().optional(),
64
+ head: z.string().optional(),
65
+ staged: z.boolean().optional(),
66
+ paths: z.array(z.string()).optional(),
67
+ excludePaths: z.array(z.string()).optional(),
68
+ mapTokens: z.number().int().positive().optional(),
69
+ tokenizer: z.string().optional(),
70
+ rank: RankOptionsSchema.optional(),
71
+ });
72
+ const JOINABLE_NODE_TYPES = new Set(['function', 'class', 'interface', 'type-alias', 'enum', 'variable']);
73
+ function normalizeRelative(filePath) {
74
+ return filePath.split(path.sep).join('/');
75
+ }
76
+ function absolutePathForGitPath(index, gitPath) {
77
+ return path.resolve(index.repoRoot, gitPath);
78
+ }
79
+ function nodeDepth(node, byId) {
80
+ let depth = 0;
81
+ let current = node;
82
+ const seen = new Set();
83
+ while (current.containerId && !seen.has(current.containerId)) {
84
+ seen.add(current.containerId);
85
+ const parent = byId.get(current.containerId);
86
+ if (!parent)
87
+ break;
88
+ depth++;
89
+ current = parent;
90
+ }
91
+ return depth;
92
+ }
93
+ function fileLineCounts(index) {
94
+ const counts = new Map();
95
+ for (const file of index.files) {
96
+ counts.set(file.path, file.lines?.length ?? 0);
97
+ }
98
+ return counts;
99
+ }
100
+ function buildIntervals(index) {
101
+ const byId = new Map(index.nodes.map(node => [node.id, node]));
102
+ const lineCounts = fileLineCounts(index);
103
+ const byPath = new Map();
104
+ for (const node of index.nodes) {
105
+ if (!JOINABLE_NODE_TYPES.has(node.type))
106
+ continue;
107
+ if (node.line == null)
108
+ continue;
109
+ const relativePath = node.relativePath ?? normalizeRelative(path.relative(index.repoRoot, node.path));
110
+ const interval = {
111
+ node,
112
+ start: node.line,
113
+ end: node.endLine ?? node.line,
114
+ endIsExact: node.endLine != null,
115
+ depth: nodeDepth(node, byId),
116
+ relativePath,
117
+ };
118
+ const existing = byPath.get(node.path) ?? [];
119
+ existing.push(interval);
120
+ byPath.set(node.path, existing);
121
+ }
122
+ for (const [filePath, intervals] of byPath) {
123
+ intervals.sort((a, b) => a.start - b.start || b.end - a.end);
124
+ const lineCount = lineCounts.get(filePath) ?? 0;
125
+ for (let i = 0; i < intervals.length; i++) {
126
+ const current = intervals[i];
127
+ if (current.endIsExact) {
128
+ current.end = lineCount > 0 ? Math.min(current.end, lineCount) : current.end;
129
+ continue;
130
+ }
131
+ const next = intervals
132
+ .slice(i + 1)
133
+ .find(candidate => candidate.start > current.start && candidate.depth <= current.depth);
134
+ const synthesized = next ? next.start - 1 : current.start;
135
+ current.end =
136
+ lineCount > 0
137
+ ? Math.min(Math.max(current.start, synthesized), lineCount)
138
+ : Math.max(current.start, synthesized);
139
+ }
140
+ }
141
+ return byPath;
142
+ }
143
+ function allAddedLinesCover(interval, addedLines) {
144
+ const added = new Set(addedLines);
145
+ for (let line = interval.start; line <= interval.end; line++) {
146
+ if (!added.has(line))
147
+ return false;
148
+ }
149
+ return true;
150
+ }
151
+ function hasDeletedLineInside(interval, deletedLines) {
152
+ return deletedLines.some(line => interval.start <= line && line <= interval.end);
153
+ }
154
+ function classifyChange(interval, hunk) {
155
+ if (hunk.newLines > 0 &&
156
+ hunk.addedLines.includes(interval.start) &&
157
+ interval.start >= hunk.newStart &&
158
+ interval.start <= hunk.newEnd &&
159
+ (allAddedLinesCover(interval, hunk.addedLines) || !hasDeletedLineInside(interval, hunk.deletedLines))) {
160
+ return 'added';
161
+ }
162
+ if (hunk.addedLines.includes(interval.start) || hunk.deletedLines.includes(interval.start)) {
163
+ return 'signature';
164
+ }
165
+ return 'modified';
166
+ }
167
+ function changePriority(kind) {
168
+ switch (kind) {
169
+ case 'added':
170
+ return 3;
171
+ case 'signature':
172
+ return 2;
173
+ case 'modified':
174
+ return 1;
175
+ case 'removed':
176
+ return 0;
177
+ }
178
+ }
179
+ function intervalsForHunk(intervals, hunk) {
180
+ if (hunk.newLines === 0) {
181
+ const point = hunk.newStart;
182
+ const containing = intervals
183
+ .filter(interval => interval.start <= point && point <= interval.end)
184
+ .sort((a, b) => b.start - a.start || a.end - b.end);
185
+ if (containing[0])
186
+ return [containing[0]];
187
+ const preceding = intervals
188
+ .filter(interval => interval.end < point)
189
+ .sort((a, b) => b.end - a.end || b.start - a.start);
190
+ return preceding[0] ? [preceding[0]] : [];
191
+ }
192
+ return intervals.filter(interval => interval.start <= hunk.newEnd && hunk.newStart <= interval.end);
193
+ }
194
+ function sortScore(symbol) {
195
+ return (symbol.rank +
196
+ (symbol.changeKind === 'signature' ? 15 : 0) +
197
+ (symbol.isExported ? 10 : 0) +
198
+ (symbol.changeKind === 'added' || symbol.changeKind === 'removed' ? 5 : 0));
199
+ }
200
+ function sortChangedSymbols(symbols) {
201
+ return symbols.sort((a, b) => sortScore(b) - sortScore(a) || a.relativePath.localeCompare(b.relativePath) || (a.line ?? 0) - (b.line ?? 0));
202
+ }
203
+ function symbolIdentity(symbol) {
204
+ return `${symbol.relativePath}\0${symbol.kind}\0${symbol.name}`;
205
+ }
206
+ function inferLanguage(relativePath) {
207
+ switch (path.extname(relativePath).toLowerCase()) {
208
+ case '.js':
209
+ case '.jsx':
210
+ case '.mjs':
211
+ case '.cjs':
212
+ return 'javascript';
213
+ case '.ts':
214
+ case '.tsx':
215
+ case '.mts':
216
+ case '.cts':
217
+ return 'typescript';
218
+ case '.py':
219
+ return 'python';
220
+ case '.go':
221
+ return 'go';
222
+ case '.rs':
223
+ return 'rust';
224
+ case '.vue':
225
+ return 'vue';
226
+ default:
227
+ return '';
228
+ }
229
+ }
230
+ const TS_DECLARATION_PATTERNS = [
231
+ { type: 'function', pattern: /^(?:export\s+)?(?:default\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\b/ },
232
+ { type: 'class', pattern: /^(?:export\s+)?(?:default\s+)?class\s+([A-Za-z_$][\w$]*)\b/ },
233
+ { type: 'interface', pattern: /^(?:export\s+)?(?:default\s+)?interface\s+([A-Za-z_$][\w$]*)\b/ },
234
+ { type: 'type-alias', pattern: /^(?:export\s+)?(?:default\s+)?type\s+([A-Za-z_$][\w$]*)\b/ },
235
+ { type: 'enum', pattern: /^(?:export\s+)?(?:default\s+)?enum\s+([A-Za-z_$][\w$]*)\b/ },
236
+ { type: 'variable', pattern: /^(?:export\s+)?(?:default\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\b/ },
237
+ ];
238
+ const PYTHON_DECLARATION_PATTERNS = [
239
+ { type: 'function', pattern: /^(?:async\s+)?def\s+([A-Za-z_][A-Za-z0-9_]*)\b/ },
240
+ { type: 'class', pattern: /^class\s+([A-Za-z_][A-Za-z0-9_]*)\b/ },
241
+ ];
242
+ const GO_DECLARATION_PATTERNS = [
243
+ { type: 'function', pattern: /^func\s+(?:\([^)]*\)\s*)?([A-Za-z_][A-Za-z0-9_]*)\b/ },
244
+ { type: 'class', pattern: /^type\s+([A-Za-z_][A-Za-z0-9_]*)\s+(?:struct|interface)\b/ },
245
+ { type: 'variable', pattern: /^(?:var|const)\s+([A-Za-z_][A-Za-z0-9_]*)\b/ },
246
+ ];
247
+ const RUST_DECLARATION_PATTERNS = [
248
+ { type: 'function', pattern: /^(?:pub(?:\([^)]*\))?\s+)?(?:async\s+)?fn\s+([A-Za-z_][A-Za-z0-9_]*)\b/ },
249
+ { type: 'class', pattern: /^(?:pub(?:\([^)]*\))?\s+)?(?:struct|trait)\s+([A-Za-z_][A-Za-z0-9_]*)\b/ },
250
+ { type: 'enum', pattern: /^(?:pub(?:\([^)]*\))?\s+)?enum\s+([A-Za-z_][A-Za-z0-9_]*)\b/ },
251
+ { type: 'variable', pattern: /^(?:pub(?:\([^)]*\))?\s+)?(?:let|const|static)\s+([A-Za-z_][A-Za-z0-9_]*)\b/ },
252
+ ];
253
+ function declarationPatternsForLanguage(language) {
254
+ switch (language) {
255
+ case 'javascript':
256
+ case 'typescript':
257
+ case 'vue':
258
+ return TS_DECLARATION_PATTERNS;
259
+ case 'python':
260
+ return PYTHON_DECLARATION_PATTERNS;
261
+ case 'go':
262
+ return GO_DECLARATION_PATTERNS;
263
+ case 'rust':
264
+ return RUST_DECLARATION_PATTERNS;
265
+ default:
266
+ return TS_DECLARATION_PATTERNS;
267
+ }
268
+ }
269
+ function isExportedDeclaration(text, language) {
270
+ if (language === 'rust')
271
+ return /^(?:pub|pub\([^)]*\))\b/.test(text);
272
+ return /^export\b/.test(text);
273
+ }
274
+ function scanRemovedDeclaration(text, language) {
275
+ const trimmed = text.trim();
276
+ if (!trimmed)
277
+ return undefined;
278
+ for (const { type, pattern } of declarationPatternsForLanguage(language)) {
279
+ const match = trimmed.match(pattern);
280
+ const name = match?.[1];
281
+ if (!name)
282
+ continue;
283
+ return {
284
+ type,
285
+ name,
286
+ isExported: isExportedDeclaration(trimmed, language),
287
+ signature: trimmed,
288
+ };
289
+ }
290
+ return undefined;
291
+ }
292
+ function recoverRemovedSymbols(index, functionContext, existingSymbols) {
293
+ const liveKeys = new Set();
294
+ const languageByPath = new Map(index.files.map(file => [file.path, file.language]));
295
+ for (const node of index.nodes) {
296
+ if (!JOINABLE_NODE_TYPES.has(node.type))
297
+ continue;
298
+ const relativePath = node.relativePath ?? normalizeRelative(path.relative(index.repoRoot, node.path));
299
+ liveKeys.add(symbolIdentity({
300
+ relativePath,
301
+ kind: toNormalizedSymbolKind(node.type, node.containerName),
302
+ name: node.name,
303
+ }));
304
+ }
305
+ const existingKeys = new Set(existingSymbols.map(symbol => symbolIdentity(symbol)));
306
+ const recovered = new Map();
307
+ for (const file of functionContext.files) {
308
+ const relativePath = file.oldPath ?? file.path;
309
+ const absolutePath = absolutePathForGitPath(index, relativePath);
310
+ const language = languageByPath.get(absolutePath) ?? inferLanguage(relativePath);
311
+ for (const hunk of file.hunks) {
312
+ for (const line of hunk.deletedLineTexts ?? []) {
313
+ const declaration = scanRemovedDeclaration(line.text, language);
314
+ if (!declaration)
315
+ continue;
316
+ const kind = toNormalizedSymbolKind(declaration.type);
317
+ const identity = symbolIdentity({ relativePath, kind, name: declaration.name });
318
+ if (liveKeys.has(identity) || existingKeys.has(identity))
319
+ continue;
320
+ const previous = recovered.get(identity);
321
+ if (previous) {
322
+ previous.churn.deleted += hunk.deletedLines.length;
323
+ continue;
324
+ }
325
+ recovered.set(identity, {
326
+ kind,
327
+ name: declaration.name,
328
+ file: absolutePath,
329
+ relativePath,
330
+ line: line.line,
331
+ endLine: line.line,
332
+ changeKind: 'removed',
333
+ churn: { added: 0, deleted: hunk.deletedLines.length },
334
+ rank: 0,
335
+ isExported: declaration.isExported,
336
+ isNewExport: false,
337
+ signature: declaration.signature,
338
+ provenance: 'hunk-scan',
339
+ });
340
+ }
341
+ }
342
+ }
343
+ return sortChangedSymbols([...recovered.values()]);
344
+ }
345
+ export function codeDiffSymbolLine(symbol) {
346
+ const marker = symbol.changeKind === 'added'
347
+ ? '+ added'
348
+ : symbol.changeKind === 'removed'
349
+ ? '- removed'
350
+ : symbol.changeKind === 'signature'
351
+ ? '~ signature'
352
+ : '~ modified';
353
+ const exported = symbol.isExported ? ', exported' : '';
354
+ const approx = symbol.endLineApprox ? ', approx-end' : '';
355
+ const location = symbol.line ? `${symbol.relativePath}:${symbol.line}` : symbol.relativePath;
356
+ return `${marker} ${symbol.kind} ${symbol.name} (${location}) [rank ${symbol.rank.toFixed(1)}${exported}${approx}] +${symbol.churn.added}/-${symbol.churn.deleted}`;
357
+ }
358
+ export function joinHunksToSymbols(_index, _hunks, _rank) {
359
+ GitDiffHunksSchema.parse(_hunks);
360
+ RankResultSchema.parse(_rank);
361
+ const intervalsByPath = buildIntervals(_index);
362
+ const indexedPaths = new Set(_index.files.map(file => file.path));
363
+ const rankByNodeId = new Map(_rank.nodes.map(node => [node.nodeId, node]));
364
+ const changed = new Map();
365
+ const hitsByFile = new Map();
366
+ for (const file of _hunks.files) {
367
+ const absolutePath = absolutePathForGitPath(_index, file.path);
368
+ const intervals = intervalsByPath.get(absolutePath) ?? [];
369
+ let fileHits = 0;
370
+ for (const hunk of file.hunks) {
371
+ const matches = intervalsForHunk(intervals, hunk);
372
+ fileHits += matches.length;
373
+ for (const interval of matches) {
374
+ const ranked = rankByNodeId.get(interval.node.id);
375
+ const nextKind = classifyChange(interval, hunk);
376
+ const existing = changed.get(interval.node.id);
377
+ if (existing) {
378
+ existing.churn.added += hunk.addedLines.length;
379
+ existing.churn.deleted += hunk.deletedLines.length;
380
+ if (changePriority(nextKind) > changePriority(existing.changeKind)) {
381
+ existing.changeKind = nextKind;
382
+ existing.isNewExport = nextKind === 'added' && existing.isExported;
383
+ }
384
+ continue;
385
+ }
386
+ const isExported = ranked?.isExported ?? false;
387
+ const symbol = {
388
+ nodeId: interval.node.id,
389
+ kind: toNormalizedSymbolKind(interval.node.type, interval.node.containerName),
390
+ name: interval.node.name,
391
+ file: interval.node.path,
392
+ relativePath: interval.node.relativePath ?? interval.relativePath,
393
+ line: interval.start,
394
+ endLine: interval.end,
395
+ endLineApprox: !interval.endIsExact,
396
+ changeKind: nextKind,
397
+ churn: { added: hunk.addedLines.length, deleted: hunk.deletedLines.length },
398
+ rank: ranked?.normalizedScore ?? 0,
399
+ isExported,
400
+ isNewExport: nextKind === 'added' && isExported,
401
+ provenance: 'index',
402
+ };
403
+ if (interval.node.containerName)
404
+ symbol.containerName = interval.node.containerName;
405
+ if (interval.node.signature)
406
+ symbol.signature = interval.node.signature;
407
+ changed.set(interval.node.id, symbol);
408
+ }
409
+ }
410
+ hitsByFile.set(absolutePath, fileHits);
411
+ if (file.hunks.length > 0 && indexedPaths.has(absolutePath) && intervals.length > 0 && fileHits === 0) {
412
+ console.warn(`occ code diff: changed file ${file.path} has hunks but yielded zero symbol hits`);
413
+ }
414
+ }
415
+ return sortChangedSymbols([...changed.values()]);
416
+ }
417
+ export async function computeCodeDiff(_index, _options) {
418
+ const gitOptions = {
419
+ repoRoot: _index.repoRoot,
420
+ base: _options.base,
421
+ head: _options.head,
422
+ staged: _options.staged,
423
+ paths: _options.paths,
424
+ excludePaths: _options.excludePaths,
425
+ signal: _options.signal,
426
+ };
427
+ const [summary, hunks, functionContext] = await Promise.all([
428
+ getGitDiffSummary(gitOptions),
429
+ getGitDiffHunks(gitOptions),
430
+ getGitDiffFunctionContext(gitOptions),
431
+ ]);
432
+ const rank = rankNodesCached(_index, _options.rank);
433
+ const joinedSymbols = joinHunksToSymbols(_index, hunks, rank);
434
+ const allSymbols = sortChangedSymbols([
435
+ ...joinedSymbols,
436
+ ...recoverRemovedSymbols(_index, functionContext, joinedSymbols),
437
+ ]);
438
+ const countTokens = _options.countTokens ?? ((text) => estimateTokenCount(text));
439
+ const tokenBudget = _options.mapTokens;
440
+ const admitted = [];
441
+ let tokensUsed = 0;
442
+ for (const symbol of allSymbols) {
443
+ const line = codeDiffSymbolLine(symbol);
444
+ const cost = countTokens(line);
445
+ if (tokenBudget != null && tokensUsed + cost > tokenBudget)
446
+ continue;
447
+ admitted.push(symbol);
448
+ tokensUsed += cost;
449
+ }
450
+ const fileScoreMap = new Map(rank.fileScores.map(file => [file.path, file]));
451
+ const numstatByPath = new Map(summary.numstat.map(entry => [entry.path, entry]));
452
+ const symbolCounts = new Map();
453
+ for (const symbol of allSymbols) {
454
+ symbolCounts.set(symbol.relativePath, (symbolCounts.get(symbol.relativePath) ?? 0) + 1);
455
+ }
456
+ const files = summary.files.map((file) => {
457
+ const absolutePath = path.resolve(_index.repoRoot, file.path);
458
+ const churn = numstatByPath.get(file.path);
459
+ return {
460
+ changeType: file.status === 'type-changed' || file.status === 'unmerged' || file.status === 'unknown'
461
+ ? 'modified'
462
+ : file.status,
463
+ path: absolutePath,
464
+ relativePath: file.path,
465
+ oldPath: file.oldPath,
466
+ churn: {
467
+ added: churn?.added ?? 0,
468
+ deleted: churn?.deleted ?? 0,
469
+ binary: churn?.binary ?? file.binary ?? false,
470
+ },
471
+ topLevelChurn: { added: 0, deleted: 0 },
472
+ importsChanged: false,
473
+ symbolCount: symbolCounts.get(file.path) ?? 0,
474
+ rank: fileScoreMap.get(absolutePath)?.normalizedScore ?? 0,
475
+ };
476
+ });
477
+ const droppedSymbols = allSymbols.length - admitted.length;
478
+ return {
479
+ range: summary.range,
480
+ repoRoot: _index.repoRoot,
481
+ files,
482
+ symbols: admitted,
483
+ summary: {
484
+ filesChanged: summary.filesChanged,
485
+ symbolsChanged: allSymbols.length,
486
+ added: allSymbols.filter(symbol => symbol.changeKind === 'added').length,
487
+ removed: allSymbols.filter(symbol => symbol.changeKind === 'removed').length,
488
+ modified: allSymbols.filter(symbol => symbol.changeKind === 'modified').length,
489
+ signatureChanges: allSymbols.filter(symbol => symbol.changeKind === 'signature').length,
490
+ newExports: allSymbols.filter(symbol => symbol.isNewExport).length,
491
+ removedExports: allSymbols.filter(symbol => symbol.changeKind === 'removed' && symbol.isExported).length,
492
+ totalChurn: { added: summary.totalAdded, deleted: summary.totalDeleted },
493
+ droppedSymbols,
494
+ approxEndLines: allSymbols.filter(symbol => symbol.endLineApprox).length,
495
+ },
496
+ tokenizer: _options.tokenizer,
497
+ tokenBudget,
498
+ tokensUsed,
499
+ truncated: droppedSymbols > 0,
500
+ unmappedHunks: Math.max(0, hunks.files.reduce((sum, file) => sum + file.hunks.length, 0) - allSymbols.length),
501
+ capabilities: _index.capabilities,
502
+ };
503
+ }
504
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/code/diff.ts"],"names":[],"mappings":"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"}
@@ -21,9 +21,7 @@ export async function discoverCodeFiles(repoRoot, options = {}) {
21
21
  ignorePatterns: options.ignorePatterns,
22
22
  overlayIgnorePatterns: options.overlayIgnorePatterns,
23
23
  });
24
- const pattern = CODE_EXTENSIONS.length === 1
25
- ? `**/*.${CODE_EXTENSIONS[0]}`
26
- : `**/*.{${CODE_EXTENSIONS.join(',')}}`;
24
+ const pattern = CODE_EXTENSIONS.length === 1 ? `**/*.${CODE_EXTENSIONS[0]}` : `**/*.{${CODE_EXTENSIONS.join(',')}}`;
27
25
  const discovered = await fg(pattern, {
28
26
  cwd: resolvedRoot,
29
27
  absolute: true,
@@ -72,10 +70,12 @@ export async function wouldDiscoverPath(repoRoot, absolutePath, excludeDir = DEF
72
70
  if (!relativePath || relativePath.startsWith('..') || path.isAbsolute(relativePath))
73
71
  return false;
74
72
  const segments = relativePath.split('/');
75
- if (segments.some((segment) => segment.startsWith('.')))
73
+ if (segments.some(segment => segment.startsWith('.')))
76
74
  return false;
77
75
  for (const dir of excludeDir) {
78
- const entrySegments = normalizePath(dir).split('/').filter((segment) => segment.length > 0);
76
+ const entrySegments = normalizePath(dir)
77
+ .split('/')
78
+ .filter(segment => segment.length > 0);
79
79
  if (entrySegments.length === 0)
80
80
  continue;
81
81
  if (hasContiguousSegments(segments, entrySegments))
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/code/discover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/code/discover.ts"],"names":[],"mappings":"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"}
@@ -57,7 +57,7 @@ export function computeFocusScores(index, focus) {
57
57
  const terms = (focus.query ?? '')
58
58
  .toLowerCase()
59
59
  .split(/\s+/)
60
- .map((term) => term.trim())
60
+ .map(term => term.trim())
61
61
  .filter(Boolean);
62
62
  const contentAvailable = index.contentMode !== 'none';
63
63
  if (terms.length > 0) {
@@ -69,7 +69,7 @@ export function computeFocusScores(index, focus) {
69
69
  ? (file.excerpt?.content ?? file.content ?? '').slice(0, CONTENT_SCAN_CHARS).toLowerCase()
70
70
  : '';
71
71
  for (const term of terms) {
72
- if (segments.some((segment) => segment.includes(term))) {
72
+ if (segments.some(segment => segment.includes(term))) {
73
73
  fileScore += W_PATH_SEGMENT;
74
74
  reasons.push(`path mentions "${term}"`);
75
75
  }
@@ -112,11 +112,11 @@ export function computeFocusScores(index, focus) {
112
112
  }
113
113
  }
114
114
  // ── Path signal + graph neighbors ─────────────────────────────────────────
115
- const rawPaths = (focus.paths ?? []).map((value) => value.trim()).filter(Boolean);
115
+ const rawPaths = (focus.paths ?? []).map(value => value.trim()).filter(Boolean);
116
116
  if (rawPaths.length === 0)
117
117
  return result;
118
118
  // Normalize each focus path to a repo-relative, forward-slash form (no trailing slash).
119
- const focusRels = rawPaths.map((raw) => {
119
+ const focusRels = rawPaths.map(raw => {
120
120
  const rel = path.isAbsolute(raw) ? path.relative(repoRoot, raw) : path.normalize(raw);
121
121
  return posix(rel).replace(/\/+$/, '');
122
122
  });
@@ -144,7 +144,7 @@ export function computeFocusScores(index, focus) {
144
144
  if (graphDepth < 1 || seeds.size === 0)
145
145
  return result;
146
146
  // Undirected file adjacency over relationship edges, restricted to indexed files.
147
- const known = new Set(index.files.map((file) => file.path));
147
+ const known = new Set(index.files.map(file => file.path));
148
148
  const adjacency = new Map();
149
149
  const link = (a, b) => {
150
150
  if (a === b)