@colbymchenry/codegraph-darwin-x64 1.0.0 → 1.1.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 (175) hide show
  1. package/lib/dist/bin/codegraph.js +258 -17
  2. package/lib/dist/bin/codegraph.js.map +1 -1
  3. package/lib/dist/bin/fatal-handler.d.ts +20 -0
  4. package/lib/dist/bin/fatal-handler.d.ts.map +1 -0
  5. package/lib/dist/bin/fatal-handler.js +118 -0
  6. package/lib/dist/bin/fatal-handler.js.map +1 -0
  7. package/lib/dist/db/index.d.ts +22 -1
  8. package/lib/dist/db/index.d.ts.map +1 -1
  9. package/lib/dist/db/index.js +46 -1
  10. package/lib/dist/db/index.js.map +1 -1
  11. package/lib/dist/db/queries.d.ts +14 -0
  12. package/lib/dist/db/queries.d.ts.map +1 -1
  13. package/lib/dist/db/queries.js +25 -0
  14. package/lib/dist/db/queries.js.map +1 -1
  15. package/lib/dist/directory.d.ts +58 -0
  16. package/lib/dist/directory.d.ts.map +1 -1
  17. package/lib/dist/directory.js +165 -0
  18. package/lib/dist/directory.js.map +1 -1
  19. package/lib/dist/extraction/grammars.d.ts +11 -3
  20. package/lib/dist/extraction/grammars.d.ts.map +1 -1
  21. package/lib/dist/extraction/grammars.js +14 -5
  22. package/lib/dist/extraction/grammars.js.map +1 -1
  23. package/lib/dist/extraction/index.d.ts.map +1 -1
  24. package/lib/dist/extraction/index.js +202 -32
  25. package/lib/dist/extraction/index.js.map +1 -1
  26. package/lib/dist/extraction/languages/c-cpp.d.ts.map +1 -1
  27. package/lib/dist/extraction/languages/c-cpp.js +47 -2
  28. package/lib/dist/extraction/languages/c-cpp.js.map +1 -1
  29. package/lib/dist/extraction/languages/csharp.d.ts.map +1 -1
  30. package/lib/dist/extraction/languages/csharp.js +20 -0
  31. package/lib/dist/extraction/languages/csharp.js.map +1 -1
  32. package/lib/dist/extraction/languages/dart.d.ts.map +1 -1
  33. package/lib/dist/extraction/languages/dart.js +22 -0
  34. package/lib/dist/extraction/languages/dart.js.map +1 -1
  35. package/lib/dist/extraction/languages/java.d.ts.map +1 -1
  36. package/lib/dist/extraction/languages/java.js +213 -9
  37. package/lib/dist/extraction/languages/java.js.map +1 -1
  38. package/lib/dist/extraction/languages/kotlin.d.ts.map +1 -1
  39. package/lib/dist/extraction/languages/kotlin.js +51 -0
  40. package/lib/dist/extraction/languages/kotlin.js.map +1 -1
  41. package/lib/dist/extraction/languages/scala.d.ts.map +1 -1
  42. package/lib/dist/extraction/languages/scala.js +19 -9
  43. package/lib/dist/extraction/languages/scala.js.map +1 -1
  44. package/lib/dist/extraction/parse-worker.js +4 -1
  45. package/lib/dist/extraction/parse-worker.js.map +1 -1
  46. package/lib/dist/extraction/tree-sitter-types.d.ts +13 -0
  47. package/lib/dist/extraction/tree-sitter-types.d.ts.map +1 -1
  48. package/lib/dist/extraction/tree-sitter.d.ts +119 -0
  49. package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
  50. package/lib/dist/extraction/tree-sitter.js +890 -11
  51. package/lib/dist/extraction/tree-sitter.js.map +1 -1
  52. package/lib/dist/index.d.ts +33 -0
  53. package/lib/dist/index.d.ts.map +1 -1
  54. package/lib/dist/index.js +68 -7
  55. package/lib/dist/index.js.map +1 -1
  56. package/lib/dist/installer/index.d.ts.map +1 -1
  57. package/lib/dist/installer/index.js +33 -56
  58. package/lib/dist/installer/index.js.map +1 -1
  59. package/lib/dist/installer/instructions-template.d.ts +3 -3
  60. package/lib/dist/installer/instructions-template.d.ts.map +1 -1
  61. package/lib/dist/installer/instructions-template.js +4 -4
  62. package/lib/dist/installer/targets/claude.d.ts +18 -12
  63. package/lib/dist/installer/targets/claude.d.ts.map +1 -1
  64. package/lib/dist/installer/targets/claude.js +78 -6
  65. package/lib/dist/installer/targets/claude.js.map +1 -1
  66. package/lib/dist/installer/targets/shared.d.ts +12 -2
  67. package/lib/dist/installer/targets/shared.d.ts.map +1 -1
  68. package/lib/dist/installer/targets/shared.js +13 -12
  69. package/lib/dist/installer/targets/shared.js.map +1 -1
  70. package/lib/dist/installer/targets/types.d.ts +7 -0
  71. package/lib/dist/installer/targets/types.d.ts.map +1 -1
  72. package/lib/dist/mcp/daemon-manager.d.ts +42 -0
  73. package/lib/dist/mcp/daemon-manager.d.ts.map +1 -0
  74. package/lib/dist/mcp/daemon-manager.js +129 -0
  75. package/lib/dist/mcp/daemon-manager.js.map +1 -0
  76. package/lib/dist/mcp/daemon-registry.d.ts +47 -0
  77. package/lib/dist/mcp/daemon-registry.d.ts.map +1 -0
  78. package/lib/dist/mcp/daemon-registry.js +229 -0
  79. package/lib/dist/mcp/daemon-registry.js.map +1 -0
  80. package/lib/dist/mcp/daemon.d.ts.map +1 -1
  81. package/lib/dist/mcp/daemon.js +5 -0
  82. package/lib/dist/mcp/daemon.js.map +1 -1
  83. package/lib/dist/mcp/engine.d.ts.map +1 -1
  84. package/lib/dist/mcp/engine.js +8 -0
  85. package/lib/dist/mcp/engine.js.map +1 -1
  86. package/lib/dist/mcp/index.d.ts +1 -0
  87. package/lib/dist/mcp/index.d.ts.map +1 -1
  88. package/lib/dist/mcp/index.js +13 -0
  89. package/lib/dist/mcp/index.js.map +1 -1
  90. package/lib/dist/mcp/liveness-watchdog.d.ts +18 -0
  91. package/lib/dist/mcp/liveness-watchdog.d.ts.map +1 -0
  92. package/lib/dist/mcp/liveness-watchdog.js +207 -0
  93. package/lib/dist/mcp/liveness-watchdog.js.map +1 -0
  94. package/lib/dist/mcp/server-instructions.d.ts +18 -14
  95. package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
  96. package/lib/dist/mcp/server-instructions.js +57 -52
  97. package/lib/dist/mcp/server-instructions.js.map +1 -1
  98. package/lib/dist/mcp/session.d.ts.map +1 -1
  99. package/lib/dist/mcp/session.js +23 -18
  100. package/lib/dist/mcp/session.js.map +1 -1
  101. package/lib/dist/mcp/tools.d.ts +51 -1
  102. package/lib/dist/mcp/tools.d.ts.map +1 -1
  103. package/lib/dist/mcp/tools.js +585 -151
  104. package/lib/dist/mcp/tools.js.map +1 -1
  105. package/lib/dist/project-config.d.ts +19 -0
  106. package/lib/dist/project-config.d.ts.map +1 -0
  107. package/lib/dist/project-config.js +180 -0
  108. package/lib/dist/project-config.js.map +1 -0
  109. package/lib/dist/reasoning/config.d.ts +45 -0
  110. package/lib/dist/reasoning/config.d.ts.map +1 -0
  111. package/lib/dist/reasoning/config.js +171 -0
  112. package/lib/dist/reasoning/config.js.map +1 -0
  113. package/lib/dist/reasoning/credentials.d.ts +5 -0
  114. package/lib/dist/reasoning/credentials.d.ts.map +1 -0
  115. package/lib/dist/reasoning/credentials.js +83 -0
  116. package/lib/dist/reasoning/credentials.js.map +1 -0
  117. package/lib/dist/reasoning/login.d.ts +21 -0
  118. package/lib/dist/reasoning/login.d.ts.map +1 -0
  119. package/lib/dist/reasoning/login.js +85 -0
  120. package/lib/dist/reasoning/login.js.map +1 -0
  121. package/lib/dist/reasoning/reasoner.d.ts +43 -0
  122. package/lib/dist/reasoning/reasoner.d.ts.map +1 -0
  123. package/lib/dist/reasoning/reasoner.js +308 -0
  124. package/lib/dist/reasoning/reasoner.js.map +1 -0
  125. package/lib/dist/resolution/c-fnptr-synthesizer.d.ts +33 -0
  126. package/lib/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -0
  127. package/lib/dist/resolution/c-fnptr-synthesizer.js +352 -0
  128. package/lib/dist/resolution/c-fnptr-synthesizer.js.map +1 -0
  129. package/lib/dist/resolution/callback-synthesizer.d.ts +6 -1
  130. package/lib/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  131. package/lib/dist/resolution/callback-synthesizer.js +1109 -1
  132. package/lib/dist/resolution/callback-synthesizer.js.map +1 -1
  133. package/lib/dist/resolution/frameworks/goframe.d.ts +41 -0
  134. package/lib/dist/resolution/frameworks/goframe.d.ts.map +1 -0
  135. package/lib/dist/resolution/frameworks/goframe.js +112 -0
  136. package/lib/dist/resolution/frameworks/goframe.js.map +1 -0
  137. package/lib/dist/resolution/frameworks/index.d.ts +1 -0
  138. package/lib/dist/resolution/frameworks/index.d.ts.map +1 -1
  139. package/lib/dist/resolution/frameworks/index.js +5 -1
  140. package/lib/dist/resolution/frameworks/index.js.map +1 -1
  141. package/lib/dist/resolution/frameworks/react.d.ts.map +1 -1
  142. package/lib/dist/resolution/frameworks/react.js +17 -60
  143. package/lib/dist/resolution/frameworks/react.js.map +1 -1
  144. package/lib/dist/resolution/goframe-synthesizer.d.ts +28 -0
  145. package/lib/dist/resolution/goframe-synthesizer.d.ts.map +1 -0
  146. package/lib/dist/resolution/goframe-synthesizer.js +158 -0
  147. package/lib/dist/resolution/goframe-synthesizer.js.map +1 -0
  148. package/lib/dist/resolution/import-resolver.d.ts.map +1 -1
  149. package/lib/dist/resolution/import-resolver.js +56 -0
  150. package/lib/dist/resolution/import-resolver.js.map +1 -1
  151. package/lib/dist/resolution/name-matcher.d.ts.map +1 -1
  152. package/lib/dist/resolution/name-matcher.js +48 -8
  153. package/lib/dist/resolution/name-matcher.js.map +1 -1
  154. package/lib/dist/resolution/strip-comments.d.ts +1 -1
  155. package/lib/dist/resolution/strip-comments.d.ts.map +1 -1
  156. package/lib/dist/resolution/strip-comments.js +2 -0
  157. package/lib/dist/resolution/strip-comments.js.map +1 -1
  158. package/lib/dist/sync/watcher.d.ts +68 -1
  159. package/lib/dist/sync/watcher.d.ts.map +1 -1
  160. package/lib/dist/sync/watcher.js +212 -14
  161. package/lib/dist/sync/watcher.js.map +1 -1
  162. package/lib/dist/telemetry/index.d.ts +0 -3
  163. package/lib/dist/telemetry/index.d.ts.map +1 -1
  164. package/lib/dist/telemetry/index.js +4 -7
  165. package/lib/dist/telemetry/index.js.map +1 -1
  166. package/lib/dist/upgrade/index.d.ts.map +1 -1
  167. package/lib/dist/upgrade/index.js +40 -4
  168. package/lib/dist/upgrade/index.js.map +1 -1
  169. package/lib/dist/utils.d.ts +14 -1
  170. package/lib/dist/utils.d.ts.map +1 -1
  171. package/lib/dist/utils.js +20 -2
  172. package/lib/dist/utils.js.map +1 -1
  173. package/lib/node_modules/.package-lock.json +1 -1
  174. package/lib/package.json +2 -2
  175. package/package.json +1 -1
@@ -0,0 +1,352 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cFnPointerDispatchEdges = cFnPointerDispatchEdges;
4
+ const strip_comments_1 = require("./strip-comments");
5
+ const C_CPP_EXT = /\.(c|h|cc|cpp|cxx|hpp|hh|hxx|cppm|ipp|inl|tcc)$/i;
6
+ const FN_KINDS = new Set(['function', 'method']);
7
+ const FANOUT_CAP = 300; // a real command table (git ~150) is legitimate fan-out; this only stops pathological cases.
8
+ function sliceLines(content, startLine, endLine) {
9
+ if (!startLine)
10
+ return '';
11
+ return content.split('\n').slice(startLine - 1, endLine ?? startLine).join('\n');
12
+ }
13
+ /** Index of the `}` matching the `{` at `open` (which must point at a `{`). -1 if unbalanced. */
14
+ function matchBrace(src, open) {
15
+ let depth = 0;
16
+ for (let i = open; i < src.length; i++) {
17
+ const c = src[i];
18
+ if (c === '{')
19
+ depth++;
20
+ else if (c === '}') {
21
+ depth--;
22
+ if (depth === 0)
23
+ return i;
24
+ }
25
+ }
26
+ return -1;
27
+ }
28
+ /** Split `body` on `sep` at brace/paren/bracket depth 0 (commas inside `{…}` / `(…)` stay together). */
29
+ function splitTopLevel(body, sep) {
30
+ const out = [];
31
+ let depth = 0;
32
+ let start = 0;
33
+ for (let i = 0; i < body.length; i++) {
34
+ const c = body[i];
35
+ if (c === '{' || c === '(' || c === '[')
36
+ depth++;
37
+ else if (c === '}' || c === ')' || c === ']')
38
+ depth--;
39
+ else if (c === sep && depth === 0) {
40
+ out.push(body.slice(start, i));
41
+ start = i + 1;
42
+ }
43
+ }
44
+ out.push(body.slice(start));
45
+ return out;
46
+ }
47
+ /** A fn-pointer field looks like `… (*name)(…)` — capture `name`. */
48
+ const FNPTR_DECL_RE = /\(\s*\*\s*(\w+)\s*\)\s*\(/;
49
+ /** `typedef RET (*NAME)(…)` — a function-pointer typedef. */
50
+ const FNPTR_TYPEDEF_RE = /\btypedef\b[^;{}]*?\(\s*\*\s*(\w+)\s*\)\s*\(/g;
51
+ function cFnPointerDispatchEdges(queries, ctx) {
52
+ const files = ctx.getAllFiles().filter((f) => C_CPP_EXT.test(f));
53
+ if (files.length === 0)
54
+ return [];
55
+ // Cache stripped source per file (read once, reused across passes).
56
+ const srcCache = new Map();
57
+ const src = (file) => {
58
+ if (srcCache.has(file))
59
+ return srcCache.get(file);
60
+ const raw = ctx.readFile(file);
61
+ const s = raw == null ? '' : (0, strip_comments_1.stripCommentsForRegex)(raw, 'c');
62
+ srcCache.set(file, s);
63
+ return raw == null ? null : s;
64
+ };
65
+ // ---- Pass A: function-pointer typedefs (cross-file) ----
66
+ const fnPtrTypedefs = new Set();
67
+ for (const file of files) {
68
+ const s = src(file);
69
+ if (!s || !s.includes('typedef'))
70
+ continue;
71
+ FNPTR_TYPEDEF_RE.lastIndex = 0;
72
+ let m;
73
+ while ((m = FNPTR_TYPEDEF_RE.exec(s)))
74
+ fnPtrTypedefs.add(m[1]);
75
+ }
76
+ // ---- Pass B: struct field layouts ----
77
+ // structLayout: struct name → ordered fields (with fn-pointer flag).
78
+ // fieldToStructs: fn-pointer field name → set of struct names that declare it.
79
+ const structLayout = new Map();
80
+ const fieldToStructs = new Map();
81
+ for (const st of ctx.getNodesByKind('struct')) {
82
+ if (!C_CPP_EXT.test(st.filePath))
83
+ continue;
84
+ const s = srcCache.get(st.filePath) ?? src(st.filePath);
85
+ if (!s)
86
+ continue;
87
+ const body = sliceLines(s, st.startLine, st.endLine);
88
+ const open = body.indexOf('{');
89
+ const close = open >= 0 ? matchBrace(body, open) : -1;
90
+ if (open < 0 || close < 0)
91
+ continue;
92
+ const inner = body.slice(open + 1, close);
93
+ const fields = [];
94
+ let idx = 0;
95
+ for (const rawDecl of splitTopLevel(inner, ';')) {
96
+ const decl = rawDecl.trim();
97
+ if (!decl)
98
+ continue;
99
+ let name = null;
100
+ let isFnPtr = false;
101
+ const ptr = decl.match(FNPTR_DECL_RE);
102
+ if (ptr) {
103
+ name = ptr[1];
104
+ isFnPtr = true;
105
+ }
106
+ else {
107
+ // `TYPE [*]name` — fn-pointer when TYPE is a fn-pointer typedef.
108
+ const fm = decl.match(/(\w+)\s+\*?\s*(\w+)\s*$/);
109
+ if (fm) {
110
+ name = fm[2];
111
+ isFnPtr = fnPtrTypedefs.has(fm[1]);
112
+ }
113
+ }
114
+ if (!name)
115
+ continue;
116
+ fields.push({ name, index: idx, isFnPtr });
117
+ if (isFnPtr) {
118
+ if (!fieldToStructs.has(name))
119
+ fieldToStructs.set(name, new Set());
120
+ fieldToStructs.get(name).add(st.name);
121
+ }
122
+ idx++;
123
+ }
124
+ if (fields.some((f) => f.isFnPtr))
125
+ structLayout.set(st.name, fields);
126
+ }
127
+ if (structLayout.size === 0)
128
+ return [];
129
+ const fnPtrFieldOf = (struct, field) => !!structLayout.get(struct)?.some((f) => f.name === field && f.isFnPtr);
130
+ // C/C++ function + method nodes, materialized once (bounded by C/C++ files).
131
+ const cFns = [];
132
+ for (const fn of iterateFns(queries)) {
133
+ if (C_CPP_EXT.test(fn.filePath))
134
+ cFns.push(fn);
135
+ }
136
+ // ---- function-name → node resolution (prefer a function in the same file) ----
137
+ const resolveFn = (name, preferFile) => {
138
+ const cands = ctx.getNodesByName(name).filter((n) => FN_KINDS.has(n.kind));
139
+ if (cands.length === 0)
140
+ return null;
141
+ if (cands.length === 1)
142
+ return cands[0];
143
+ if (preferFile) {
144
+ const same = cands.find((n) => n.filePath === preferFile);
145
+ if (same)
146
+ return same;
147
+ }
148
+ return cands[0];
149
+ };
150
+ // ---- Pass C: registrations — Map<"struct.field", Set<funcNodeId>> ----
151
+ const reg = new Map();
152
+ const idToNode = new Map();
153
+ const addReg = (struct, field, fn) => {
154
+ const key = `${struct}.${field}`;
155
+ if (!reg.has(key))
156
+ reg.set(key, new Set());
157
+ reg.get(key).add(fn.id);
158
+ idToNode.set(fn.id, fn);
159
+ };
160
+ // A struct value `{ … }` (one element) — register its function entries to the
161
+ // struct's fields, by `.field = fn` designators or by positional slot.
162
+ const registerStructValue = (struct, valueBody, file) => {
163
+ const layout = structLayout.get(struct);
164
+ if (!layout)
165
+ return;
166
+ const items = splitTopLevel(valueBody, ',');
167
+ let pos = 0;
168
+ for (const rawItem of items) {
169
+ const item = rawItem.trim();
170
+ if (!item)
171
+ continue;
172
+ const des = item.match(/^\.\s*(\w+)\s*=\s*(?:&\s*)?(\w+)\s*$/);
173
+ if (des) {
174
+ const field = des[1];
175
+ if (fnPtrFieldOf(struct, field)) {
176
+ const fn = resolveFn(des[2], file);
177
+ if (fn)
178
+ addReg(struct, field, fn);
179
+ }
180
+ // a designated item does not advance positional counting
181
+ continue;
182
+ }
183
+ const field = layout.find((f) => f.index === pos);
184
+ if (field?.isFnPtr) {
185
+ const id = item.match(/^&?\s*(\w+)\s*$/);
186
+ if (id) {
187
+ const fn = resolveFn(id[1], file);
188
+ if (fn)
189
+ addReg(struct, field.name, fn);
190
+ }
191
+ }
192
+ pos++;
193
+ }
194
+ };
195
+ // `(?:struct )?TYPE name[opt] = {` initializers, where TYPE is a struct that
196
+ // has ≥1 fn-pointer field. Handles both single (`= {…}`) and array
197
+ // (`[] = { {…}, {…} }`) forms.
198
+ const INIT_RE = /(?:^|[;{}])\s*(?:(?:static|const|extern|register|volatile)\s+)*(?:struct\s+)?(\w+)\s+(\w+)\s*(\[[^\]]*\])?\s*=\s*\{/g;
199
+ for (const file of files) {
200
+ const s = srcCache.get(file);
201
+ if (!s || !s.includes('='))
202
+ continue;
203
+ INIT_RE.lastIndex = 0;
204
+ let m;
205
+ while ((m = INIT_RE.exec(s))) {
206
+ const struct = m[1];
207
+ if (!structLayout.has(struct))
208
+ continue;
209
+ const isArray = !!m[3];
210
+ const open = m.index + m[0].length - 1; // points at the `{`
211
+ const close = matchBrace(s, open);
212
+ if (close < 0)
213
+ continue;
214
+ const body = s.slice(open + 1, close);
215
+ if (isArray) {
216
+ // top-level `{ … }` element groups
217
+ for (const el of splitTopLevel(body, ',')) {
218
+ const t = el.trim();
219
+ if (t.startsWith('{')) {
220
+ const e = matchBrace(t, 0);
221
+ if (e > 0)
222
+ registerStructValue(struct, t.slice(1, e), file);
223
+ }
224
+ else if (t) {
225
+ // array of bare values (rare for structs) — treat as one positional slot
226
+ registerStructValue(struct, t, file);
227
+ }
228
+ }
229
+ }
230
+ else {
231
+ registerStructValue(struct, body, file);
232
+ }
233
+ INIT_RE.lastIndex = close;
234
+ }
235
+ }
236
+ // ---- receiver-type resolution within a function's source ----
237
+ // `(?:struct )?TYPE [*]recv` declared in the params or body → TYPE (if a known struct).
238
+ const recvTypeIn = (fnSrc, recv) => {
239
+ const re = new RegExp(`(?:struct\\s+)?(\\w+)\\s*\\*?\\s*\\b${recv}\\b\\s*(?:[,)=;]|\\[)`, 'g');
240
+ let m;
241
+ while ((m = re.exec(fnSrc))) {
242
+ if (structLayout.has(m[1]))
243
+ return m[1];
244
+ }
245
+ return null;
246
+ };
247
+ // ---- Pass D: field←field propagation (`a->f = b->g`) ----
248
+ // Collected as (targetStruct.field ← sourceStruct.field) pairs, then merged to
249
+ // a fixpoint so a hook slot inherits a registry field's handlers.
250
+ const FIELD_ASSIGN_RE = /(\w+)\s*(?:->|\.)\s*(\w+)\s*=\s*(\w+)\s*(?:->|\.)\s*(\w+)/g;
251
+ const propagations = [];
252
+ for (const fn of cFns) {
253
+ const s = srcCache.get(fn.filePath);
254
+ if (!s)
255
+ continue;
256
+ const body = sliceLines(s, fn.startLine, fn.endLine);
257
+ if (!body.includes('='))
258
+ continue;
259
+ FIELD_ASSIGN_RE.lastIndex = 0;
260
+ let m;
261
+ while ((m = FIELD_ASSIGN_RE.exec(body))) {
262
+ const [, lrecv, lfield, rrecv, rfield] = m;
263
+ const lt = recvTypeIn(body, lrecv);
264
+ const rt = recvTypeIn(body, rrecv);
265
+ if (lt && rt && fnPtrFieldOf(lt, lfield) && fnPtrFieldOf(rt, rfield)) {
266
+ propagations.push({ to: `${lt}.${lfield}`, from: `${rt}.${rfield}` });
267
+ }
268
+ }
269
+ }
270
+ for (let pass = 0; pass < 3 && propagations.length; pass++) {
271
+ let changed = false;
272
+ for (const { to, from } of propagations) {
273
+ const fromSet = reg.get(from);
274
+ if (!fromSet)
275
+ continue;
276
+ if (!reg.has(to))
277
+ reg.set(to, new Set());
278
+ const toSet = reg.get(to);
279
+ for (const id of fromSet) {
280
+ if (!toSet.has(id)) {
281
+ toSet.add(id);
282
+ changed = true;
283
+ }
284
+ }
285
+ }
286
+ if (!changed)
287
+ break;
288
+ }
289
+ if (reg.size === 0)
290
+ return [];
291
+ // ---- Pass E: dispatch sites → edges ----
292
+ // recv->field( or recv.field( where field is a known fn-pointer field.
293
+ const DISPATCH_RE = /(\w+)\s*(?:->|\.)\s*(\w+)\s*\(/g;
294
+ const edges = [];
295
+ const seen = new Set();
296
+ for (const fn of cFns) {
297
+ const s = srcCache.get(fn.filePath);
298
+ if (!s)
299
+ continue;
300
+ const body = sliceLines(s, fn.startLine, fn.endLine);
301
+ DISPATCH_RE.lastIndex = 0;
302
+ let m;
303
+ let added = 0;
304
+ while ((m = DISPATCH_RE.exec(body)) && added < FANOUT_CAP) {
305
+ const recv = m[1];
306
+ const field = m[2];
307
+ const owners = fieldToStructs.get(field);
308
+ if (!owners || owners.size === 0)
309
+ continue;
310
+ // Resolve the receiver's struct type; else fall back to a field name that
311
+ // belongs to exactly one struct.
312
+ let struct = recvTypeIn(body, recv);
313
+ if (!struct || !owners.has(struct))
314
+ struct = owners.size === 1 ? [...owners][0] : null;
315
+ if (!struct)
316
+ continue;
317
+ const targets = reg.get(`${struct}.${field}`);
318
+ if (!targets)
319
+ continue;
320
+ const line = fn.startLine + body.slice(0, m.index).split('\n').length - 1;
321
+ for (const tid of targets) {
322
+ if (tid === fn.id)
323
+ continue;
324
+ const key = `${fn.id}>${tid}`;
325
+ if (seen.has(key))
326
+ continue;
327
+ seen.add(key);
328
+ edges.push({
329
+ source: fn.id,
330
+ target: tid,
331
+ kind: 'calls',
332
+ line,
333
+ provenance: 'heuristic',
334
+ metadata: {
335
+ synthesizedBy: 'fn-pointer-dispatch',
336
+ via: `${struct}.${field}`,
337
+ registeredAt: `${fn.filePath}:${line}`,
338
+ },
339
+ });
340
+ if (++added >= FANOUT_CAP)
341
+ break;
342
+ }
343
+ }
344
+ }
345
+ return edges;
346
+ }
347
+ /** C/C++ function + method nodes, streamed (memory-safe on symbol-dense repos). */
348
+ function* iterateFns(queries) {
349
+ yield* queries.iterateNodesByKind('function');
350
+ yield* queries.iterateNodesByKind('method');
351
+ }
352
+ //# sourceMappingURL=c-fnptr-synthesizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c-fnptr-synthesizer.js","sourceRoot":"","sources":["../../src/resolution/c-fnptr-synthesizer.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,12 @@ import type { ResolutionContext } from './types';
3
3
  /**
4
4
  * Synthesize dispatcher→callback edges (field observers + EventEmitters +
5
5
  * React re-render + JSX children + Vue templates + SvelteKit load + RN event
6
- * channel + Fabric native-impl + MyBatis Java↔XML + Gin middleware chain).
6
+ * channel + Fabric native-impl + MyBatis Java↔XML + Gin middleware chain +
7
+ * Redux-thunk dispatch chain + object-literal registry dispatch + RTK Query
8
+ * generated-hook → endpoint + Pinia useStore().action() + Vuex string dispatch +
9
+ * Celery task .delay()/.apply_async() → task body + Spring publishEvent → @EventListener +
10
+ * MediatR Send/Publish → IRequestHandler/INotificationHandler +
11
+ * Sidekiq Worker.perform_async → #perform + Laravel event(new X) → listener handle).
7
12
  * Returns the count added. Never throws into indexing — callers wrap in try/catch.
8
13
  */
9
14
  export declare function synthesizeCallbackEdges(queries: QueryBuilder, ctx: ResolutionContext): number;
@@ -1 +1 @@
1
- {"version":3,"file":"callback-synthesizer.d.ts","sourceRoot":"","sources":["../../src/resolution/callback-synthesizer.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAulDjD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAkE7F"}
1
+ {"version":3,"file":"callback-synthesizer.d.ts","sourceRoot":"","sources":["../../src/resolution/callback-synthesizer.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAgkFjD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,GAAG,MAAM,CA0F7F"}