seer-mcp 0.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 (371) hide show
  1. package/.vscode/settings.json +3 -0
  2. package/LICENSE +176 -0
  3. package/README.md +272 -0
  4. package/README_dev.md +199 -0
  5. package/dist/bundle/ci.d.ts +47 -0
  6. package/dist/bundle/ci.d.ts.map +1 -0
  7. package/dist/bundle/ci.js +113 -0
  8. package/dist/bundle/ci.js.map +1 -0
  9. package/dist/bundle/contract.d.ts +111 -0
  10. package/dist/bundle/contract.d.ts.map +1 -0
  11. package/dist/bundle/contract.js +352 -0
  12. package/dist/bundle/contract.js.map +1 -0
  13. package/dist/bundle/export.d.ts +36 -0
  14. package/dist/bundle/export.d.ts.map +1 -0
  15. package/dist/bundle/export.js +152 -0
  16. package/dist/bundle/export.js.map +1 -0
  17. package/dist/bundle/external.d.ts +66 -0
  18. package/dist/bundle/external.d.ts.map +1 -0
  19. package/dist/bundle/external.js +238 -0
  20. package/dist/bundle/external.js.map +1 -0
  21. package/dist/bundle/format.d.ts +94 -0
  22. package/dist/bundle/format.d.ts.map +1 -0
  23. package/dist/bundle/format.js +42 -0
  24. package/dist/bundle/format.js.map +1 -0
  25. package/dist/bundle/import.d.ts +49 -0
  26. package/dist/bundle/import.d.ts.map +1 -0
  27. package/dist/bundle/import.js +116 -0
  28. package/dist/bundle/import.js.map +1 -0
  29. package/dist/cli/index.d.ts +3 -0
  30. package/dist/cli/index.d.ts.map +1 -0
  31. package/dist/cli/index.js +1402 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/cli/init.d.ts +48 -0
  34. package/dist/cli/init.d.ts.map +1 -0
  35. package/dist/cli/init.js +284 -0
  36. package/dist/cli/init.js.map +1 -0
  37. package/dist/db/schema.d.ts +3 -0
  38. package/dist/db/schema.d.ts.map +1 -0
  39. package/dist/db/schema.js +616 -0
  40. package/dist/db/schema.js.map +1 -0
  41. package/dist/db/store.d.ts +1011 -0
  42. package/dist/db/store.d.ts.map +1 -0
  43. package/dist/db/store.js +3888 -0
  44. package/dist/db/store.js.map +1 -0
  45. package/dist/graph/pagerank.d.ts +9 -0
  46. package/dist/graph/pagerank.d.ts.map +1 -0
  47. package/dist/graph/pagerank.js +47 -0
  48. package/dist/graph/pagerank.js.map +1 -0
  49. package/dist/indexer/architecture.d.ts +72 -0
  50. package/dist/indexer/architecture.d.ts.map +1 -0
  51. package/dist/indexer/architecture.js +112 -0
  52. package/dist/indexer/architecture.js.map +1 -0
  53. package/dist/indexer/behavior.d.ts +75 -0
  54. package/dist/indexer/behavior.d.ts.map +1 -0
  55. package/dist/indexer/behavior.js +395 -0
  56. package/dist/indexer/behavior.js.map +1 -0
  57. package/dist/indexer/boundaries.d.ts +60 -0
  58. package/dist/indexer/boundaries.d.ts.map +1 -0
  59. package/dist/indexer/boundaries.js +366 -0
  60. package/dist/indexer/boundaries.js.map +1 -0
  61. package/dist/indexer/churn.d.ts +15 -0
  62. package/dist/indexer/churn.d.ts.map +1 -0
  63. package/dist/indexer/churn.js +49 -0
  64. package/dist/indexer/churn.js.map +1 -0
  65. package/dist/indexer/classify.d.ts +9 -0
  66. package/dist/indexer/classify.d.ts.map +1 -0
  67. package/dist/indexer/classify.js +90 -0
  68. package/dist/indexer/classify.js.map +1 -0
  69. package/dist/indexer/context.d.ts +176 -0
  70. package/dist/indexer/context.d.ts.map +1 -0
  71. package/dist/indexer/context.js +193 -0
  72. package/dist/indexer/context.js.map +1 -0
  73. package/dist/indexer/continuity.d.ts +67 -0
  74. package/dist/indexer/continuity.d.ts.map +1 -0
  75. package/dist/indexer/continuity.js +288 -0
  76. package/dist/indexer/continuity.js.map +1 -0
  77. package/dist/indexer/detectchanges.d.ts +32 -0
  78. package/dist/indexer/detectchanges.d.ts.map +1 -0
  79. package/dist/indexer/detectchanges.js +74 -0
  80. package/dist/indexer/detectchanges.js.map +1 -0
  81. package/dist/indexer/discovery.d.ts +37 -0
  82. package/dist/indexer/discovery.d.ts.map +1 -0
  83. package/dist/indexer/discovery.js +136 -0
  84. package/dist/indexer/discovery.js.map +1 -0
  85. package/dist/indexer/externaldeps.d.ts +18 -0
  86. package/dist/indexer/externaldeps.d.ts.map +1 -0
  87. package/dist/indexer/externaldeps.js +288 -0
  88. package/dist/indexer/externaldeps.js.map +1 -0
  89. package/dist/indexer/freshness.d.ts +48 -0
  90. package/dist/indexer/freshness.d.ts.map +1 -0
  91. package/dist/indexer/freshness.js +128 -0
  92. package/dist/indexer/freshness.js.map +1 -0
  93. package/dist/indexer/git.d.ts +144 -0
  94. package/dist/indexer/git.d.ts.map +1 -0
  95. package/dist/indexer/git.js +444 -0
  96. package/dist/indexer/git.js.map +1 -0
  97. package/dist/indexer/index.d.ts +145 -0
  98. package/dist/indexer/index.d.ts.map +1 -0
  99. package/dist/indexer/index.js +930 -0
  100. package/dist/indexer/index.js.map +1 -0
  101. package/dist/indexer/modules.d.ts +62 -0
  102. package/dist/indexer/modules.d.ts.map +1 -0
  103. package/dist/indexer/modules.js +293 -0
  104. package/dist/indexer/modules.js.map +1 -0
  105. package/dist/indexer/preflight.d.ts +154 -0
  106. package/dist/indexer/preflight.d.ts.map +1 -0
  107. package/dist/indexer/preflight.js +399 -0
  108. package/dist/indexer/preflight.js.map +1 -0
  109. package/dist/indexer/protoScanner.d.ts +34 -0
  110. package/dist/indexer/protoScanner.d.ts.map +1 -0
  111. package/dist/indexer/protoScanner.js +133 -0
  112. package/dist/indexer/protoScanner.js.map +1 -0
  113. package/dist/indexer/risk.d.ts +115 -0
  114. package/dist/indexer/risk.d.ts.map +1 -0
  115. package/dist/indexer/risk.js +194 -0
  116. package/dist/indexer/risk.js.map +1 -0
  117. package/dist/indexer/serviceHostScanner.d.ts +25 -0
  118. package/dist/indexer/serviceHostScanner.d.ts.map +1 -0
  119. package/dist/indexer/serviceHostScanner.js +95 -0
  120. package/dist/indexer/serviceHostScanner.js.map +1 -0
  121. package/dist/indexer/serviceLinks.d.ts +105 -0
  122. package/dist/indexer/serviceLinks.d.ts.map +1 -0
  123. package/dist/indexer/serviceLinks.js +509 -0
  124. package/dist/indexer/serviceLinks.js.map +1 -0
  125. package/dist/indexer/shapehash.d.ts +98 -0
  126. package/dist/indexer/shapehash.d.ts.map +1 -0
  127. package/dist/indexer/shapehash.js +354 -0
  128. package/dist/indexer/shapehash.js.map +1 -0
  129. package/dist/indexer/skeleton.d.ts +15 -0
  130. package/dist/indexer/skeleton.d.ts.map +1 -0
  131. package/dist/indexer/skeleton.js +136 -0
  132. package/dist/indexer/skeleton.js.map +1 -0
  133. package/dist/indexer/symbolhistory.d.ts +41 -0
  134. package/dist/indexer/symbolhistory.d.ts.map +1 -0
  135. package/dist/indexer/symbolhistory.js +124 -0
  136. package/dist/indexer/symbolhistory.js.map +1 -0
  137. package/dist/indexer/watcher.d.ts +68 -0
  138. package/dist/indexer/watcher.d.ts.map +1 -0
  139. package/dist/indexer/watcher.js +179 -0
  140. package/dist/indexer/watcher.js.map +1 -0
  141. package/dist/mcp/server.d.ts +80 -0
  142. package/dist/mcp/server.d.ts.map +1 -0
  143. package/dist/mcp/server.js +1610 -0
  144. package/dist/mcp/server.js.map +1 -0
  145. package/dist/parser/index.d.ts +8 -0
  146. package/dist/parser/index.d.ts.map +1 -0
  147. package/dist/parser/index.js +33 -0
  148. package/dist/parser/index.js.map +1 -0
  149. package/dist/parser/languages/cpp.d.ts +3 -0
  150. package/dist/parser/languages/cpp.d.ts.map +1 -0
  151. package/dist/parser/languages/cpp.js +350 -0
  152. package/dist/parser/languages/cpp.js.map +1 -0
  153. package/dist/parser/languages/csharp.d.ts +3 -0
  154. package/dist/parser/languages/csharp.d.ts.map +1 -0
  155. package/dist/parser/languages/csharp.js +239 -0
  156. package/dist/parser/languages/csharp.js.map +1 -0
  157. package/dist/parser/languages/go.d.ts +3 -0
  158. package/dist/parser/languages/go.d.ts.map +1 -0
  159. package/dist/parser/languages/go.js +259 -0
  160. package/dist/parser/languages/go.js.map +1 -0
  161. package/dist/parser/languages/java.d.ts +3 -0
  162. package/dist/parser/languages/java.d.ts.map +1 -0
  163. package/dist/parser/languages/java.js +391 -0
  164. package/dist/parser/languages/java.js.map +1 -0
  165. package/dist/parser/languages/python.d.ts +3 -0
  166. package/dist/parser/languages/python.d.ts.map +1 -0
  167. package/dist/parser/languages/python.js +396 -0
  168. package/dist/parser/languages/python.js.map +1 -0
  169. package/dist/parser/languages/rust.d.ts +3 -0
  170. package/dist/parser/languages/rust.d.ts.map +1 -0
  171. package/dist/parser/languages/rust.js +159 -0
  172. package/dist/parser/languages/rust.js.map +1 -0
  173. package/dist/parser/languages/typescript.d.ts +3 -0
  174. package/dist/parser/languages/typescript.d.ts.map +1 -0
  175. package/dist/parser/languages/typescript.js +1442 -0
  176. package/dist/parser/languages/typescript.js.map +1 -0
  177. package/dist/parser/parserContext.d.ts +77 -0
  178. package/dist/parser/parserContext.d.ts.map +1 -0
  179. package/dist/parser/parserContext.js +354 -0
  180. package/dist/parser/parserContext.js.map +1 -0
  181. package/dist/parser/walker.d.ts +81 -0
  182. package/dist/parser/walker.d.ts.map +1 -0
  183. package/dist/parser/walker.js +217 -0
  184. package/dist/parser/walker.js.map +1 -0
  185. package/dist/parser/worker.d.ts +66 -0
  186. package/dist/parser/worker.d.ts.map +1 -0
  187. package/dist/parser/worker.js +129 -0
  188. package/dist/parser/worker.js.map +1 -0
  189. package/dist/parser/workerpool.d.ts +107 -0
  190. package/dist/parser/workerpool.d.ts.map +1 -0
  191. package/dist/parser/workerpool.js +383 -0
  192. package/dist/parser/workerpool.js.map +1 -0
  193. package/dist/scip/format.d.ts +87 -0
  194. package/dist/scip/format.d.ts.map +1 -0
  195. package/dist/scip/format.js +31 -0
  196. package/dist/scip/format.js.map +1 -0
  197. package/dist/scip/import.d.ts +37 -0
  198. package/dist/scip/import.d.ts.map +1 -0
  199. package/dist/scip/import.js +180 -0
  200. package/dist/scip/import.js.map +1 -0
  201. package/dist/types.d.ts +392 -0
  202. package/dist/types.d.ts.map +1 -0
  203. package/dist/types.js +4 -0
  204. package/dist/types.js.map +1 -0
  205. package/docs/architecture.md +105 -0
  206. package/docs/benchmarks/methodology.md +134 -0
  207. package/docs/benchmarks/raw-results.md +71 -0
  208. package/docs/benchmarks.md +74 -0
  209. package/docs/cli.md +148 -0
  210. package/docs/examples/behavior-tests.md +70 -0
  211. package/docs/examples/change-history.md +85 -0
  212. package/docs/examples/pre-edit-context.md +81 -0
  213. package/docs/examples/service-links.md +88 -0
  214. package/docs/examples.md +80 -0
  215. package/docs/faq.md +70 -0
  216. package/docs/internals.md +104 -0
  217. package/docs/languages.md +70 -0
  218. package/docs/limits.md +52 -0
  219. package/docs/mcp.md +199 -0
  220. package/docs/quickstart.md +119 -0
  221. package/docs/testing.md +123 -0
  222. package/docs/tools.md +115 -0
  223. package/package.json +52 -0
  224. package/research-codebase.md +578 -0
  225. package/seer-cli-docs.md +326 -0
  226. package/seer-master-guide.md +246 -0
  227. package/src/bundle/ci.ts +141 -0
  228. package/src/bundle/contract.ts +387 -0
  229. package/src/bundle/export.ts +175 -0
  230. package/src/bundle/external.ts +285 -0
  231. package/src/bundle/format.ts +92 -0
  232. package/src/bundle/import.ts +157 -0
  233. package/src/cli/index.ts +1249 -0
  234. package/src/cli/init.ts +389 -0
  235. package/src/db/schema.ts +614 -0
  236. package/src/db/store.ts +4306 -0
  237. package/src/graph/pagerank.ts +53 -0
  238. package/src/indexer/architecture.ts +148 -0
  239. package/src/indexer/behavior.ts +466 -0
  240. package/src/indexer/boundaries.ts +374 -0
  241. package/src/indexer/churn.ts +58 -0
  242. package/src/indexer/classify.ts +96 -0
  243. package/src/indexer/context.ts +340 -0
  244. package/src/indexer/continuity.ts +322 -0
  245. package/src/indexer/detectchanges.ts +94 -0
  246. package/src/indexer/discovery.ts +176 -0
  247. package/src/indexer/externaldeps.ts +243 -0
  248. package/src/indexer/freshness.ts +166 -0
  249. package/src/indexer/git.ts +453 -0
  250. package/src/indexer/index.ts +1092 -0
  251. package/src/indexer/modules.ts +358 -0
  252. package/src/indexer/preflight.ts +548 -0
  253. package/src/indexer/protoScanner.ts +147 -0
  254. package/src/indexer/risk.ts +304 -0
  255. package/src/indexer/serviceHostScanner.ts +92 -0
  256. package/src/indexer/serviceLinks.ts +543 -0
  257. package/src/indexer/shapehash.ts +370 -0
  258. package/src/indexer/skeleton.ts +169 -0
  259. package/src/indexer/symbolhistory.ts +172 -0
  260. package/src/indexer/watcher.ts +206 -0
  261. package/src/mcp/server.ts +1659 -0
  262. package/src/parser/index.ts +37 -0
  263. package/src/parser/languages/cpp.ts +361 -0
  264. package/src/parser/languages/csharp.ts +235 -0
  265. package/src/parser/languages/go.ts +259 -0
  266. package/src/parser/languages/java.ts +382 -0
  267. package/src/parser/languages/python.ts +370 -0
  268. package/src/parser/languages/rust.ts +164 -0
  269. package/src/parser/languages/typescript.ts +1435 -0
  270. package/src/parser/parserContext.ts +392 -0
  271. package/src/parser/walker.ts +306 -0
  272. package/src/parser/worker.ts +181 -0
  273. package/src/parser/workerpool.ts +448 -0
  274. package/src/scip/format.ts +83 -0
  275. package/src/scip/import.ts +216 -0
  276. package/src/types.ts +457 -0
  277. package/tests/benchmark-service-links.ts +244 -0
  278. package/tests/bug-regressions.ts +626 -0
  279. package/tests/filters.ts +264 -0
  280. package/tests/fixtures/Counter.tsx +38 -0
  281. package/tests/fixtures/caller.ts +7 -0
  282. package/tests/fixtures/collisions.ts +23 -0
  283. package/tests/fixtures/local_helper.ts +5 -0
  284. package/tests/fixtures/overloads.java +17 -0
  285. package/tests/fixtures/remote_helper.ts +4 -0
  286. package/tests/fixtures/sample.c +15 -0
  287. package/tests/fixtures/sample.cpp +47 -0
  288. package/tests/fixtures/sample.cs +62 -0
  289. package/tests/fixtures/sample.go +68 -0
  290. package/tests/fixtures/sample.h +30 -0
  291. package/tests/fixtures/sample.java +85 -0
  292. package/tests/fixtures/sample.py +46 -0
  293. package/tests/fixtures/sample.rs +78 -0
  294. package/tests/fixtures/sample.ts +76 -0
  295. package/tests/fixtures-service/HttpClients.cs +30 -0
  296. package/tests/fixtures-service/HttpClients.java +24 -0
  297. package/tests/fixtures-service/billing.ts +15 -0
  298. package/tests/fixtures-service/docker-compose.yml +15 -0
  299. package/tests/fixtures-service/gateway.ts +10 -0
  300. package/tests/fixtures-service/get_user.ts +11 -0
  301. package/tests/fixtures-service/graphql_client.ts +63 -0
  302. package/tests/fixtures-service/graphql_server.ts +30 -0
  303. package/tests/fixtures-service/grpc_client.go +30 -0
  304. package/tests/fixtures-service/http_clients.go +23 -0
  305. package/tests/fixtures-service/http_clients.py +38 -0
  306. package/tests/fixtures-service/http_clients.ts +49 -0
  307. package/tests/fixtures-service/k8s/payment-service.yaml +22 -0
  308. package/tests/fixtures-service/k8s_calls.ts +20 -0
  309. package/tests/fixtures-service/messaging.ts +87 -0
  310. package/tests/fixtures-service/trpc_client.ts +39 -0
  311. package/tests/fixtures-service/trpc_server.ts +39 -0
  312. package/tests/fixtures-service/user_service.proto +33 -0
  313. package/tests/fixtures-trackcd/Cargo.toml +11 -0
  314. package/tests/fixtures-trackcd/SpringController.java +36 -0
  315. package/tests/fixtures-trackcd/auth_service.ts +19 -0
  316. package/tests/fixtures-trackcd/complex_module.py +50 -0
  317. package/tests/fixtures-trackcd/express_app.js +30 -0
  318. package/tests/fixtures-trackcd/fastapi_app.py +49 -0
  319. package/tests/fixtures-trackcd/fastify_object_routes.js +32 -0
  320. package/tests/fixtures-trackcd/go.mod +8 -0
  321. package/tests/fixtures-trackcd/package.json +15 -0
  322. package/tests/fixtures-trackcd/requirements.txt +4 -0
  323. package/tests/fixtures-trackcd/tests/auth_service.test.ts +13 -0
  324. package/tests/fixtures-tracke/auth/AuthService.ts +23 -0
  325. package/tests/fixtures-tracke/auth/crypto.ts +7 -0
  326. package/tests/fixtures-tracke/billing/Billing.ts +20 -0
  327. package/tests/fixtures-tracke/billing/Invoice.ts +10 -0
  328. package/tests/fixtures-tracke/billing/server.ts +17 -0
  329. package/tests/fixtures-tracke/package.json +7 -0
  330. package/tests/fixtures-tracke/tests/auth.test.ts +23 -0
  331. package/tests/fixtures-tracke/tests/billing.test.ts +14 -0
  332. package/tests/fixtures-trackf/package.json +5 -0
  333. package/tests/fixtures-trackf/src/auth.ts +26 -0
  334. package/tests/fixtures-trackf/src/handlers.ts +35 -0
  335. package/tests/fixtures-tracki/billing/routes.ts +12 -0
  336. package/tests/fixtures-tracki/gateway/client.ts +13 -0
  337. package/tests/git-features.ts +267 -0
  338. package/tests/init.ts +141 -0
  339. package/tests/mcp-jit.ts +130 -0
  340. package/tests/mcp-smoke.ts +191 -0
  341. package/tests/mcp-trackcd.ts +169 -0
  342. package/tests/mcp-tracke.ts +229 -0
  343. package/tests/mcp-trackf.ts +330 -0
  344. package/tests/mcp-trackg.ts +219 -0
  345. package/tests/mcp-tracki.ts +174 -0
  346. package/tests/mcp-watcher.ts +126 -0
  347. package/tests/optspec.ts +194 -0
  348. package/tests/parallel-index.ts +333 -0
  349. package/tests/parallel-read.ts +125 -0
  350. package/tests/parallel-recovery.ts +241 -0
  351. package/tests/perf-callers.ts +145 -0
  352. package/tests/query-parity.ts +184 -0
  353. package/tests/query-perf.ts +55 -0
  354. package/tests/scale-parallel-parity.ts +225 -0
  355. package/tests/scale-test.ts +523 -0
  356. package/tests/smoke.ts +396 -0
  357. package/tests/trackcd.ts +325 -0
  358. package/tests/tracke-collisions.ts +255 -0
  359. package/tests/tracke.ts +314 -0
  360. package/tests/trackf-bugs.ts +406 -0
  361. package/tests/trackf.ts +390 -0
  362. package/tests/trackg.ts +1372 -0
  363. package/tests/tracki-boundaries.ts +202 -0
  364. package/tests/tracki-continuity.ts +253 -0
  365. package/tests/tracki-contract-diff.ts +249 -0
  366. package/tests/tracki-external-bundles.ts +341 -0
  367. package/tests/tracki-preflight.ts +251 -0
  368. package/tests/verify-roles.ts +51 -0
  369. package/tests/worker-parity.ts +286 -0
  370. package/tests/worker-pool.ts +262 -0
  371. package/tsconfig.json +20 -0
@@ -0,0 +1,176 @@
1
+ import { Store } from '../db/store.js';
2
+ import { RiskResult } from './risk.js';
3
+ /**
4
+ * One compact, structured pre-edit packet for a symbol.
5
+ *
6
+ * The aim is workflow compression: an agent that's about to edit a symbol
7
+ * should be able to call ONE tool and get back the deterministic evidence
8
+ * it needs — definition, callers, callees, routes, config reads, behavioral
9
+ * tests, recent history, complexity, module, blast radius, and the
10
+ * decomposed risk score. The agent then decides which slices to expand
11
+ * (`seer_history` for full chain, `seer_callers` for everyone, etc.).
12
+ *
13
+ * This is intentionally NOT an explanation layer. Seer-Core stays
14
+ * deterministic facts only; any narrative about "why this matters" belongs
15
+ * outside Core.
16
+ */
17
+ export interface ContextPacket {
18
+ symbol: {
19
+ id: number;
20
+ name: string;
21
+ qualifiedName: string | null;
22
+ kind: string;
23
+ file: string;
24
+ lineStart: number;
25
+ lineEnd: number;
26
+ signature: string | null;
27
+ pagerank: number;
28
+ symbolRole: string | null;
29
+ };
30
+ module: {
31
+ id: number;
32
+ label: string;
33
+ } | null;
34
+ /** v10 — monorepo boundary the symbol's file belongs to (null when none). */
35
+ boundary: {
36
+ id: number;
37
+ label: string;
38
+ kind: string;
39
+ rootRelPath: string;
40
+ } | null;
41
+ complexity: {
42
+ loc: number | null;
43
+ cyclomatic: number | null;
44
+ cognitive: number | null;
45
+ maxNesting: number | null;
46
+ };
47
+ callers: {
48
+ total: number;
49
+ preview: Array<{
50
+ name: string;
51
+ qualifiedName: string | null;
52
+ kind: string;
53
+ file: string;
54
+ line: number;
55
+ }>;
56
+ };
57
+ callees: {
58
+ total: number;
59
+ preview: Array<{
60
+ name: string;
61
+ kind: string | null;
62
+ file: string | null;
63
+ line: number | null;
64
+ }>;
65
+ };
66
+ blastRadius: {
67
+ directCallers: number;
68
+ transitiveCallers: number;
69
+ /** Sample of the highest-PageRank reverse-reachable callers (capped). */
70
+ topAffected: Array<{
71
+ id: number;
72
+ name: string;
73
+ qualifiedName: string | null;
74
+ file: string;
75
+ pagerank: number;
76
+ }>;
77
+ maxDepth: number;
78
+ };
79
+ routes: Array<{
80
+ method: string;
81
+ path: string;
82
+ framework: string;
83
+ }>;
84
+ configKeys: Array<{
85
+ key: string;
86
+ source: string;
87
+ line: number;
88
+ }>;
89
+ /**
90
+ * v8 Track-G — outbound service calls this symbol makes (preview, capped).
91
+ * Empty array on Pre-Track-G DBs or symbols with no outgoing client calls.
92
+ */
93
+ serviceCalls: Array<{
94
+ method: string | null;
95
+ path: string | null;
96
+ framework: string;
97
+ rawTarget: string;
98
+ line: number;
99
+ envKey: string | null;
100
+ hostHint: string | null;
101
+ confidence: number;
102
+ }>;
103
+ /**
104
+ * v8 Track-G — service-link evidence pointing at this symbol as the handler
105
+ * (inbound) and as the caller (outbound). Capped previews.
106
+ */
107
+ serviceLinksInbound: Array<{
108
+ routePath: string | null;
109
+ method: string | null;
110
+ matchKind: string;
111
+ confidence: number;
112
+ callerName: string | null;
113
+ callerFile: string | null;
114
+ }>;
115
+ serviceLinksOutbound: Array<{
116
+ routePath: string | null;
117
+ method: string | null;
118
+ matchKind: string;
119
+ confidence: number;
120
+ handlerName: string | null;
121
+ handlerFile: string | null;
122
+ }>;
123
+ behavior: {
124
+ direct: number;
125
+ indirect: number;
126
+ namingMatches: number;
127
+ sameFileMatches: number;
128
+ preview: Array<{
129
+ name: string;
130
+ qualifiedName: string | null;
131
+ file: string;
132
+ lineStart: number;
133
+ relationship: string;
134
+ assertionCount: number;
135
+ specificity: number;
136
+ }>;
137
+ };
138
+ recentHistory: {
139
+ total: number;
140
+ preview: Array<{
141
+ sha: string;
142
+ author: string | null;
143
+ email: string | null;
144
+ committedAt: number;
145
+ message: string | null;
146
+ linesAdded: number;
147
+ linesRemoved: number;
148
+ prNumber: number | null;
149
+ prUrl: string | null;
150
+ confidence: number;
151
+ }>;
152
+ };
153
+ fileChurn: {
154
+ commitCount: number;
155
+ lastCommitAt: number | null;
156
+ topAuthor: string | null;
157
+ } | null;
158
+ risk: {
159
+ risk: 'low' | 'medium' | 'high';
160
+ score: number;
161
+ signals: RiskResult['signals'];
162
+ signalContributions: RiskResult['signalContributions'];
163
+ };
164
+ source: 'tree-sitter';
165
+ }
166
+ export interface ContextOptions {
167
+ filePath?: string;
168
+ callerLimit?: number;
169
+ calleeLimit?: number;
170
+ testLimit?: number;
171
+ historyLimit?: number;
172
+ callerDepth?: number;
173
+ affectedLimit?: number;
174
+ }
175
+ export declare function buildContext(store: Store, nameOrId: string | number, options?: ContextOptions): ContextPacket | null;
176
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/indexer/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildContext = buildContext;
4
+ const behavior_js_1 = require("./behavior.js");
5
+ const risk_js_1 = require("./risk.js");
6
+ function buildContext(store, nameOrId, options = {}) {
7
+ const callerLimit = options.callerLimit ?? 10;
8
+ const calleeLimit = options.calleeLimit ?? 10;
9
+ const testLimit = options.testLimit ?? 10;
10
+ const historyLimit = options.historyLimit ?? 5;
11
+ const callerDepth = options.callerDepth ?? 3;
12
+ const affectedLimit = options.affectedLimit ?? 10;
13
+ let target = null;
14
+ if (typeof nameOrId === 'number') {
15
+ target = store.getSymbolById(nameOrId);
16
+ }
17
+ else {
18
+ const defs = store.getDefinition(nameOrId, { filePath: options.filePath });
19
+ if (defs.length === 0)
20
+ return null;
21
+ target = defs[0];
22
+ }
23
+ if (!target)
24
+ return null;
25
+ // Callers + callees use the id-based path so short-name siblings
26
+ // (Alpha.run vs Beta.run) don't share evidence. The legacy name-based
27
+ // APIs (findCallers / countCallers / findCallees) intentionally stay
28
+ // broad for the agent-facing CLI tools — Track E packets always have a
29
+ // resolved id and should never collapse.
30
+ const totalCallers = store.countCallersById(target.id);
31
+ const directCallers = store.findCallersById(target.id, callerLimit);
32
+ const allCallees = store.findCalleesById(target.id);
33
+ const calleesPreview = allCallees.slice(0, calleeLimit);
34
+ // Blast radius.
35
+ const reverseHits = store.reverseReachableWithDepth(target.id, callerDepth);
36
+ const directRows = store.rawDb().prepare("SELECT DISTINCT from_id FROM edges WHERE to_id = ? AND kind = 'call'").all(target.id);
37
+ const directSet = new Set(directRows.map(r => Number(r.from_id)));
38
+ const transitive = reverseHits.filter(h => !directSet.has(h.id));
39
+ let topAffected = [];
40
+ if (reverseHits.length > 0) {
41
+ const ids = reverseHits.map(h => h.id);
42
+ const ph = ids.map(() => '?').join(',');
43
+ const rows = store.rawDb().prepare(`
44
+ SELECT s.id, s.name, s.qualified_name AS qualifiedName, f.path AS file, s.pagerank
45
+ FROM symbols s JOIN files f ON f.id = s.file_id
46
+ WHERE s.id IN (${ph}) AND s.is_rankable = 1
47
+ ORDER BY s.pagerank DESC
48
+ LIMIT ?
49
+ `).all(...ids, affectedLimit);
50
+ topAffected = rows.map(r => ({
51
+ id: Number(r.id),
52
+ name: String(r.name),
53
+ qualifiedName: r.qualifiedName == null ? null : String(r.qualifiedName),
54
+ file: String(r.file),
55
+ pagerank: Number(r.pagerank),
56
+ }));
57
+ }
58
+ // Routes / config / behavior / history.
59
+ const routes = store.routesForHandler(target.id);
60
+ const configKeys = store.configKeysForSymbol(target.id);
61
+ const behavior = (0, behavior_js_1.rankedBehavior)(store, target.id, { limit: testLimit });
62
+ // v8 Track-G — service-link evidence. Capped previews so the packet stays
63
+ // compact even when the symbol is a hub.
64
+ const SERVICE_CALL_PREVIEW_CAP = 12;
65
+ const SERVICE_LINK_PREVIEW_CAP = 12;
66
+ const serviceCallsRows = store.listServiceCalls({
67
+ callerSymbolId: target.id, limit: SERVICE_CALL_PREVIEW_CAP,
68
+ });
69
+ const serviceLinksInbound = store.serviceLinksForHandler(target.id, { limit: SERVICE_LINK_PREVIEW_CAP });
70
+ const serviceLinksOutbound = store.serviceLinksForCaller(target.id, { limit: SERVICE_LINK_PREVIEW_CAP });
71
+ const history = store.getSymbolHistory(target.id, { limit: historyLimit });
72
+ const totalHistory = store.countSymbolHistory(target.id);
73
+ const fileChurn = (() => {
74
+ try {
75
+ const c = store.getFileChurn(target.filePath);
76
+ if (!c)
77
+ return null;
78
+ return { commitCount: c.commitCount, lastCommitAt: c.lastCommitAt, topAuthor: c.topAuthor };
79
+ }
80
+ catch {
81
+ return null;
82
+ }
83
+ })();
84
+ // Risk (reuses behavior + history + signals computed above; cheaper to
85
+ // recompute than to share through a back-channel.)
86
+ const risk = (0, risk_js_1.computeRisk)(store, target.id, { callerDepth });
87
+ const moduleRow = store.moduleForFile(target.fileId);
88
+ const boundaryRow = store.boundaryForFile(target.fileId);
89
+ return {
90
+ symbol: {
91
+ id: target.id, name: target.name, qualifiedName: target.qualifiedName,
92
+ kind: target.kind, file: target.filePath,
93
+ lineStart: target.lineStart, lineEnd: target.lineEnd,
94
+ signature: target.signature, pagerank: target.pagerank,
95
+ symbolRole: target.symbolRole ?? null,
96
+ },
97
+ module: moduleRow,
98
+ boundary: boundaryRow,
99
+ complexity: {
100
+ loc: target.loc ?? null,
101
+ cyclomatic: target.cyclomatic ?? null,
102
+ cognitive: target.cognitive ?? null,
103
+ maxNesting: target.maxNesting ?? null,
104
+ },
105
+ callers: {
106
+ total: totalCallers,
107
+ preview: directCallers.map(c => ({
108
+ name: c.callerName, qualifiedName: c.callerQualifiedName, kind: c.callerKind,
109
+ file: c.callerFile, line: c.callerLine,
110
+ })),
111
+ },
112
+ callees: {
113
+ total: allCallees.length,
114
+ preview: calleesPreview.map(c => ({
115
+ name: c.calleeName, kind: c.calleeKind,
116
+ file: c.calleeFile, line: c.calleeLineStart,
117
+ })),
118
+ },
119
+ blastRadius: {
120
+ directCallers: directSet.size,
121
+ transitiveCallers: transitive.length,
122
+ topAffected,
123
+ maxDepth: callerDepth,
124
+ },
125
+ routes,
126
+ configKeys,
127
+ serviceCalls: serviceCallsRows.map(sc => ({
128
+ method: sc.method,
129
+ path: sc.normalizedPath,
130
+ framework: sc.framework,
131
+ rawTarget: sc.rawTarget,
132
+ line: sc.line,
133
+ envKey: sc.envKey,
134
+ hostHint: sc.hostHint,
135
+ confidence: sc.confidence,
136
+ })),
137
+ serviceLinksInbound: serviceLinksInbound.map(l => ({
138
+ routePath: l.routePath,
139
+ method: l.routeMethod ?? l.callMethod,
140
+ matchKind: l.matchKind,
141
+ confidence: l.confidence,
142
+ callerName: l.callerQualifiedName ?? l.callerName,
143
+ callerFile: l.callerFile,
144
+ })),
145
+ serviceLinksOutbound: serviceLinksOutbound.map(l => ({
146
+ routePath: l.routePath,
147
+ method: l.routeMethod ?? l.callMethod,
148
+ matchKind: l.matchKind,
149
+ confidence: l.confidence,
150
+ handlerName: l.handlerQualifiedName ?? l.handlerName,
151
+ handlerFile: l.handlerFile,
152
+ })),
153
+ behavior: {
154
+ direct: behavior?.direct ?? 0,
155
+ indirect: behavior?.indirect ?? 0,
156
+ namingMatches: behavior?.namingMatches ?? 0,
157
+ sameFileMatches: behavior?.sameFileMatches ?? 0,
158
+ preview: (behavior?.tests ?? []).map(t => ({
159
+ name: t.testSymbol.name,
160
+ qualifiedName: t.testSymbol.qualifiedName,
161
+ file: t.testSymbol.file,
162
+ lineStart: t.testSymbol.lineStart,
163
+ relationship: t.relationship,
164
+ assertionCount: t.assertionCount,
165
+ specificity: t.specificity,
166
+ })),
167
+ },
168
+ recentHistory: {
169
+ total: totalHistory,
170
+ preview: history.map(h => ({
171
+ sha: h.commitSha,
172
+ author: h.authorName,
173
+ email: h.authorEmail,
174
+ committedAt: h.committedAt,
175
+ message: h.message,
176
+ linesAdded: h.linesAdded,
177
+ linesRemoved: h.linesRemoved,
178
+ prNumber: h.prNumber,
179
+ prUrl: h.prUrl,
180
+ confidence: h.confidence,
181
+ })),
182
+ },
183
+ fileChurn,
184
+ risk: {
185
+ risk: risk.risk,
186
+ score: risk.score,
187
+ signals: risk.signals,
188
+ signalContributions: risk.signalContributions,
189
+ },
190
+ source: 'tree-sitter',
191
+ };
192
+ }
193
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/indexer/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * v10 — Symbol Rename/Move Continuity heuristics.
3
+ *
4
+ * Goal: when exact `symbol_key` history walking terminates (because the
5
+ * function was renamed or moved), surface honest, confidence-labelled
6
+ * continuity evidence so the agent can decide whether to trust the link.
7
+ *
8
+ * Heuristics (current pass — opt-in, low-confidence by default):
9
+ * - shape_hash exact match: previous-symbol candidate has the same
10
+ * structural SimHash → strong (confidence 0.85+)
11
+ * - shape_hash close match: small Hamming distance (≤ 4) + similar name
12
+ * → medium (confidence 0.65)
13
+ * - signature similarity: same arity + same containing class/module
14
+ * → weak (confidence 0.5)
15
+ * - same file rename history: file was renamed in git history, the
16
+ * historical file had a same-shape function with a different name → boost
17
+ * (confidence 0.75)
18
+ *
19
+ * Stored on `symbol_history_continuity`. Never pretends rename continuity
20
+ * is certain.
21
+ *
22
+ * This module does NOT replace existing exact-key history. It only proposes
23
+ * additional links when buildSymbolHistory's exact-key walk ran out of
24
+ * commits. The Preflight / seer_history layers can read continuity rows
25
+ * alongside symbol_history.
26
+ */
27
+ import { Store } from '../db/store.js';
28
+ export interface ContinuityCandidate {
29
+ symbolId: number;
30
+ symbolKey: string;
31
+ previousSymbolKey: string;
32
+ previousName: string;
33
+ previousFile: string;
34
+ confidence: number;
35
+ matchReasons: string[];
36
+ }
37
+ export interface ContinuityResult {
38
+ candidatesConsidered: number;
39
+ inserted: number;
40
+ skipped: number;
41
+ elapsedMs: number;
42
+ }
43
+ /**
44
+ * Run the continuity pass over every symbol whose recorded history has
45
+ * fewer than `historyThreshold` commits AND that has a shape_hash. For each
46
+ * such symbol we scan other symbols sharing a close shape_hash and propose
47
+ * the highest-confidence candidate (deduped per symbol_id).
48
+ */
49
+ export declare function buildContinuity(store: Store, options?: {
50
+ historyThreshold?: number;
51
+ maxHammingDistance?: number;
52
+ log?: (msg: string) => void;
53
+ /** When true, also create candidate links for symbols that have full history
54
+ * (useful for fixture tests and debugging). Default false. */
55
+ includeAllSymbols?: boolean;
56
+ }): ContinuityResult;
57
+ /**
58
+ * Fetch continuity rows for a given symbol id, ordered by confidence desc.
59
+ */
60
+ export declare function getContinuityForSymbol(store: Store, symbolId: number): Array<{
61
+ previousSymbolKey: string;
62
+ previousName: string;
63
+ previousFile: string;
64
+ confidence: number;
65
+ matchReasons: string[];
66
+ }>;
67
+ //# sourceMappingURL=continuity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuity.d.ts","sourceRoot":"","sources":["../../src/indexer/continuity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE;IACP,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B;mEAC+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACxB,GACL,gBAAgB,CAmIlB;AAsFD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAC7B,KAAK,CAAC;IACP,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC,CAuBD"}