@descryy/mcp 0.11.5 → 0.11.7

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 (445) hide show
  1. package/dist/action-handshake.d.ts +38 -0
  2. package/dist/action-handshake.d.ts.map +1 -0
  3. package/dist/action-handshake.js +127 -0
  4. package/dist/action-handshake.js.map +1 -0
  5. package/dist/bin/descry-mcp.d.ts +7 -0
  6. package/dist/bin/descry-mcp.d.ts.map +1 -0
  7. package/dist/bin/descry-mcp.js +73 -0
  8. package/dist/bin/descry-mcp.js.map +1 -0
  9. package/dist/browser/auth.d.ts +84 -0
  10. package/dist/browser/auth.d.ts.map +1 -0
  11. package/dist/browser/auth.js +233 -0
  12. package/dist/browser/auth.js.map +1 -0
  13. package/dist/browser/capability-probe.d.ts +109 -0
  14. package/dist/browser/capability-probe.d.ts.map +1 -0
  15. package/dist/browser/capability-probe.js +201 -0
  16. package/dist/browser/capability-probe.js.map +1 -0
  17. package/dist/browser/driver.d.ts +591 -0
  18. package/dist/browser/driver.d.ts.map +1 -0
  19. package/dist/browser/driver.js +116 -0
  20. package/dist/browser/driver.js.map +1 -0
  21. package/dist/browser/evidence.d.ts +28 -0
  22. package/dist/browser/evidence.d.ts.map +1 -0
  23. package/dist/browser/evidence.js +82 -0
  24. package/dist/browser/evidence.js.map +1 -0
  25. package/dist/browser/fake-driver.d.ts +116 -0
  26. package/dist/browser/fake-driver.d.ts.map +1 -0
  27. package/dist/browser/fake-driver.js +416 -0
  28. package/dist/browser/fake-driver.js.map +1 -0
  29. package/dist/browser/fault-attribution.d.ts +178 -0
  30. package/dist/browser/fault-attribution.d.ts.map +1 -0
  31. package/dist/browser/fault-attribution.js +266 -0
  32. package/dist/browser/fault-attribution.js.map +1 -0
  33. package/dist/browser/graph-write.d.ts +45 -0
  34. package/dist/browser/graph-write.d.ts.map +1 -0
  35. package/dist/browser/graph-write.js +103 -0
  36. package/dist/browser/graph-write.js.map +1 -0
  37. package/dist/browser/identity-graph-write.d.ts +55 -0
  38. package/dist/browser/identity-graph-write.d.ts.map +1 -0
  39. package/dist/browser/identity-graph-write.js +45 -0
  40. package/dist/browser/identity-graph-write.js.map +1 -0
  41. package/dist/browser/page-probe.d.ts +81 -0
  42. package/dist/browser/page-probe.d.ts.map +1 -0
  43. package/dist/browser/page-probe.js +202 -0
  44. package/dist/browser/page-probe.js.map +1 -0
  45. package/dist/browser/playwright-driver.d.ts +115 -0
  46. package/dist/browser/playwright-driver.d.ts.map +1 -0
  47. package/dist/browser/playwright-driver.js +1545 -0
  48. package/dist/browser/playwright-driver.js.map +1 -0
  49. package/dist/browser/provider.d.ts +26 -0
  50. package/dist/browser/provider.d.ts.map +1 -0
  51. package/dist/browser/provider.js +14 -0
  52. package/dist/browser/provider.js.map +1 -0
  53. package/dist/browser/reach-recording-session.d.ts +44 -0
  54. package/dist/browser/reach-recording-session.d.ts.map +1 -0
  55. package/dist/browser/reach-recording-session.js +151 -0
  56. package/dist/browser/reach-recording-session.js.map +1 -0
  57. package/dist/browser/reachability.d.ts +168 -0
  58. package/dist/browser/reachability.d.ts.map +1 -0
  59. package/dist/browser/reachability.js +294 -0
  60. package/dist/browser/reachability.js.map +1 -0
  61. package/dist/browser/registry.d.ts +126 -0
  62. package/dist/browser/registry.d.ts.map +1 -0
  63. package/dist/browser/registry.js +177 -0
  64. package/dist/browser/registry.js.map +1 -0
  65. package/dist/browser/scenario-provenance.d.ts +23 -0
  66. package/dist/browser/scenario-provenance.d.ts.map +1 -0
  67. package/dist/browser/scenario-provenance.js +73 -0
  68. package/dist/browser/scenario-provenance.js.map +1 -0
  69. package/dist/browser/scenario-resolve.d.ts +28 -0
  70. package/dist/browser/scenario-resolve.d.ts.map +1 -0
  71. package/dist/browser/scenario-resolve.js +96 -0
  72. package/dist/browser/scenario-resolve.js.map +1 -0
  73. package/dist/browser/scenario-runner.d.ts +72 -0
  74. package/dist/browser/scenario-runner.d.ts.map +1 -0
  75. package/dist/browser/scenario-runner.js +353 -0
  76. package/dist/browser/scenario-runner.js.map +1 -0
  77. package/dist/browser/stack-parser.d.ts +19 -0
  78. package/dist/browser/stack-parser.d.ts.map +1 -0
  79. package/dist/browser/stack-parser.js +85 -0
  80. package/dist/browser/stack-parser.js.map +1 -0
  81. package/dist/browser/tool-support.d.ts +71 -0
  82. package/dist/browser/tool-support.d.ts.map +1 -0
  83. package/dist/browser/tool-support.js +216 -0
  84. package/dist/browser/tool-support.js.map +1 -0
  85. package/dist/browser/url-scheme.d.ts +14 -0
  86. package/dist/browser/url-scheme.d.ts.map +1 -0
  87. package/dist/browser/url-scheme.js +38 -0
  88. package/dist/browser/url-scheme.js.map +1 -0
  89. package/dist/browser/wait-target.d.ts +37 -0
  90. package/dist/browser/wait-target.d.ts.map +1 -0
  91. package/dist/browser/wait-target.js +54 -0
  92. package/dist/browser/wait-target.js.map +1 -0
  93. package/dist/cancellation.d.ts +20 -0
  94. package/dist/cancellation.d.ts.map +1 -0
  95. package/dist/cancellation.js +41 -0
  96. package/dist/cancellation.js.map +1 -0
  97. package/dist/capped.d.ts +39 -0
  98. package/dist/capped.d.ts.map +1 -0
  99. package/dist/capped.js +43 -0
  100. package/dist/capped.js.map +1 -0
  101. package/dist/credential-store.d.ts +22 -0
  102. package/dist/credential-store.d.ts.map +1 -0
  103. package/dist/credential-store.js +33 -0
  104. package/dist/credential-store.js.map +1 -0
  105. package/dist/disclosure-ledger.d.ts +14 -0
  106. package/dist/disclosure-ledger.d.ts.map +1 -0
  107. package/dist/disclosure-ledger.js +18 -0
  108. package/dist/disclosure-ledger.js.map +1 -0
  109. package/dist/evidence/observed-route-evidence.d.ts +25 -0
  110. package/dist/evidence/observed-route-evidence.d.ts.map +1 -0
  111. package/dist/evidence/observed-route-evidence.js +76 -0
  112. package/dist/evidence/observed-route-evidence.js.map +1 -0
  113. package/dist/heap.d.ts +61 -0
  114. package/dist/heap.d.ts.map +1 -0
  115. package/dist/heap.js +82 -0
  116. package/dist/heap.js.map +1 -0
  117. package/dist/heartbeat.d.ts +46 -0
  118. package/dist/heartbeat.d.ts.map +1 -0
  119. package/dist/heartbeat.js +66 -0
  120. package/dist/heartbeat.js.map +1 -0
  121. package/dist/index.d.ts +32 -0
  122. package/dist/index.d.ts.map +1 -0
  123. package/dist/index.js +19 -0
  124. package/dist/index.js.map +1 -0
  125. package/dist/module-trust.d.ts +37 -0
  126. package/dist/module-trust.d.ts.map +1 -0
  127. package/dist/module-trust.js +77 -0
  128. package/dist/module-trust.js.map +1 -0
  129. package/dist/path-confinement.d.ts +31 -0
  130. package/dist/path-confinement.d.ts.map +1 -0
  131. package/dist/path-confinement.js +44 -0
  132. package/dist/path-confinement.js.map +1 -0
  133. package/dist/planner/predict-then-propose.d.ts +134 -0
  134. package/dist/planner/predict-then-propose.d.ts.map +1 -0
  135. package/dist/planner/predict-then-propose.js +138 -0
  136. package/dist/planner/predict-then-propose.js.map +1 -0
  137. package/dist/planner/propose-journey.d.ts +75 -0
  138. package/dist/planner/propose-journey.d.ts.map +1 -0
  139. package/dist/planner/propose-journey.js +96 -0
  140. package/dist/planner/propose-journey.js.map +1 -0
  141. package/dist/protocol.d.ts +57 -0
  142. package/dist/protocol.d.ts.map +1 -0
  143. package/dist/protocol.js +90 -0
  144. package/dist/protocol.js.map +1 -0
  145. package/dist/ready-checks.d.ts +12 -0
  146. package/dist/ready-checks.d.ts.map +1 -0
  147. package/dist/ready-checks.js +43 -0
  148. package/dist/ready-checks.js.map +1 -0
  149. package/dist/registry.d.ts +103 -0
  150. package/dist/registry.d.ts.map +1 -0
  151. package/dist/registry.js +327 -0
  152. package/dist/registry.js.map +1 -0
  153. package/dist/render.d.ts +623 -0
  154. package/dist/render.d.ts.map +1 -0
  155. package/dist/render.js +968 -0
  156. package/dist/render.js.map +1 -0
  157. package/dist/runtime-registry.d.ts +22 -0
  158. package/dist/runtime-registry.d.ts.map +1 -0
  159. package/dist/runtime-registry.js +142 -0
  160. package/dist/runtime-registry.js.map +1 -0
  161. package/dist/sandbox-defaults.d.ts +41 -0
  162. package/dist/sandbox-defaults.d.ts.map +1 -0
  163. package/dist/sandbox-defaults.js +14 -0
  164. package/dist/sandbox-defaults.js.map +1 -0
  165. package/dist/scenarios/browser-run-plan-projection.d.ts +161 -0
  166. package/dist/scenarios/browser-run-plan-projection.d.ts.map +1 -0
  167. package/dist/scenarios/browser-run-plan-projection.js +264 -0
  168. package/dist/scenarios/browser-run-plan-projection.js.map +1 -0
  169. package/dist/scenarios/credential-ref.d.ts +102 -0
  170. package/dist/scenarios/credential-ref.d.ts.map +1 -0
  171. package/dist/scenarios/credential-ref.js +148 -0
  172. package/dist/scenarios/credential-ref.js.map +1 -0
  173. package/dist/scenarios/index.d.ts +7 -0
  174. package/dist/scenarios/index.d.ts.map +1 -0
  175. package/dist/scenarios/index.js +7 -0
  176. package/dist/scenarios/index.js.map +1 -0
  177. package/dist/scenarios/parse.d.ts +18 -0
  178. package/dist/scenarios/parse.d.ts.map +1 -0
  179. package/dist/scenarios/parse.js +212 -0
  180. package/dist/scenarios/parse.js.map +1 -0
  181. package/dist/scenarios/scenario.d.ts +93 -0
  182. package/dist/scenarios/scenario.d.ts.map +1 -0
  183. package/dist/scenarios/scenario.js +27 -0
  184. package/dist/scenarios/scenario.js.map +1 -0
  185. package/dist/scenarios/secret-ref.d.ts +86 -0
  186. package/dist/scenarios/secret-ref.d.ts.map +1 -0
  187. package/dist/scenarios/secret-ref.js +125 -0
  188. package/dist/scenarios/secret-ref.js.map +1 -0
  189. package/dist/scenarios/storage.d.ts +21 -0
  190. package/dist/scenarios/storage.d.ts.map +1 -0
  191. package/dist/scenarios/storage.js +103 -0
  192. package/dist/scenarios/storage.js.map +1 -0
  193. package/dist/server.d.ts +61 -0
  194. package/dist/server.d.ts.map +1 -0
  195. package/dist/server.js +642 -0
  196. package/dist/server.js.map +1 -0
  197. package/dist/session.d.ts +356 -0
  198. package/dist/session.d.ts.map +1 -0
  199. package/dist/session.js +779 -0
  200. package/dist/session.js.map +1 -0
  201. package/dist/tools/alias-kit.d.ts +29 -0
  202. package/dist/tools/alias-kit.d.ts.map +1 -0
  203. package/dist/tools/alias-kit.js +21 -0
  204. package/dist/tools/alias-kit.js.map +1 -0
  205. package/dist/tools/aliases.d.ts +42 -0
  206. package/dist/tools/aliases.d.ts.map +1 -0
  207. package/dist/tools/aliases.js +52 -0
  208. package/dist/tools/aliases.js.map +1 -0
  209. package/dist/tools/analyze-workspace.d.ts +52 -0
  210. package/dist/tools/analyze-workspace.d.ts.map +1 -0
  211. package/dist/tools/analyze-workspace.js +207 -0
  212. package/dist/tools/analyze-workspace.js.map +1 -0
  213. package/dist/tools/analyze.d.ts +163 -0
  214. package/dist/tools/analyze.d.ts.map +1 -0
  215. package/dist/tools/analyze.js +724 -0
  216. package/dist/tools/analyze.js.map +1 -0
  217. package/dist/tools/browser-click.d.ts +18 -0
  218. package/dist/tools/browser-click.d.ts.map +1 -0
  219. package/dist/tools/browser-click.js +110 -0
  220. package/dist/tools/browser-click.js.map +1 -0
  221. package/dist/tools/browser-close-session.d.ts +39 -0
  222. package/dist/tools/browser-close-session.d.ts.map +1 -0
  223. package/dist/tools/browser-close-session.js +120 -0
  224. package/dist/tools/browser-close-session.js.map +1 -0
  225. package/dist/tools/browser-fill.d.ts +18 -0
  226. package/dist/tools/browser-fill.d.ts.map +1 -0
  227. package/dist/tools/browser-fill.js +117 -0
  228. package/dist/tools/browser-fill.js.map +1 -0
  229. package/dist/tools/browser-navigate.d.ts +15 -0
  230. package/dist/tools/browser-navigate.d.ts.map +1 -0
  231. package/dist/tools/browser-navigate.js +106 -0
  232. package/dist/tools/browser-navigate.js.map +1 -0
  233. package/dist/tools/browser-read.d.ts +33 -0
  234. package/dist/tools/browser-read.d.ts.map +1 -0
  235. package/dist/tools/browser-read.js +105 -0
  236. package/dist/tools/browser-read.js.map +1 -0
  237. package/dist/tools/browser-run-scenario.d.ts +28 -0
  238. package/dist/tools/browser-run-scenario.d.ts.map +1 -0
  239. package/dist/tools/browser-run-scenario.js +238 -0
  240. package/dist/tools/browser-run-scenario.js.map +1 -0
  241. package/dist/tools/browser-save-scenario.d.ts +19 -0
  242. package/dist/tools/browser-save-scenario.d.ts.map +1 -0
  243. package/dist/tools/browser-save-scenario.js +447 -0
  244. package/dist/tools/browser-save-scenario.js.map +1 -0
  245. package/dist/tools/browser-select.d.ts +20 -0
  246. package/dist/tools/browser-select.d.ts.map +1 -0
  247. package/dist/tools/browser-select.js +120 -0
  248. package/dist/tools/browser-select.js.map +1 -0
  249. package/dist/tools/browser-snapshot.d.ts +46 -0
  250. package/dist/tools/browser-snapshot.d.ts.map +1 -0
  251. package/dist/tools/browser-snapshot.js +127 -0
  252. package/dist/tools/browser-snapshot.js.map +1 -0
  253. package/dist/tools/browser-start-session.d.ts +24 -0
  254. package/dist/tools/browser-start-session.d.ts.map +1 -0
  255. package/dist/tools/browser-start-session.js +653 -0
  256. package/dist/tools/browser-start-session.js.map +1 -0
  257. package/dist/tools/browser-submit.d.ts +18 -0
  258. package/dist/tools/browser-submit.d.ts.map +1 -0
  259. package/dist/tools/browser-submit.js +106 -0
  260. package/dist/tools/browser-submit.js.map +1 -0
  261. package/dist/tools/browser-type.d.ts +18 -0
  262. package/dist/tools/browser-type.d.ts.map +1 -0
  263. package/dist/tools/browser-type.js +115 -0
  264. package/dist/tools/browser-type.js.map +1 -0
  265. package/dist/tools/browser-wait-for.d.ts +45 -0
  266. package/dist/tools/browser-wait-for.d.ts.map +1 -0
  267. package/dist/tools/browser-wait-for.js +164 -0
  268. package/dist/tools/browser-wait-for.js.map +1 -0
  269. package/dist/tools/browser.d.ts +69 -0
  270. package/dist/tools/browser.d.ts.map +1 -0
  271. package/dist/tools/browser.js +326 -0
  272. package/dist/tools/browser.js.map +1 -0
  273. package/dist/tools/chain.d.ts +41 -0
  274. package/dist/tools/chain.d.ts.map +1 -0
  275. package/dist/tools/chain.js +101 -0
  276. package/dist/tools/chain.js.map +1 -0
  277. package/dist/tools/change-scope.d.ts +25 -0
  278. package/dist/tools/change-scope.d.ts.map +1 -0
  279. package/dist/tools/change-scope.js +103 -0
  280. package/dist/tools/change-scope.js.map +1 -0
  281. package/dist/tools/code-context.d.ts +83 -0
  282. package/dist/tools/code-context.d.ts.map +1 -0
  283. package/dist/tools/code-context.js +432 -0
  284. package/dist/tools/code-context.js.map +1 -0
  285. package/dist/tools/contracts.d.ts +74 -0
  286. package/dist/tools/contracts.d.ts.map +1 -0
  287. package/dist/tools/contracts.js +214 -0
  288. package/dist/tools/contracts.js.map +1 -0
  289. package/dist/tools/cross-pr.d.ts +178 -0
  290. package/dist/tools/cross-pr.d.ts.map +1 -0
  291. package/dist/tools/cross-pr.js +362 -0
  292. package/dist/tools/cross-pr.js.map +1 -0
  293. package/dist/tools/disclosure.d.ts +75 -0
  294. package/dist/tools/disclosure.d.ts.map +1 -0
  295. package/dist/tools/disclosure.js +325 -0
  296. package/dist/tools/disclosure.js.map +1 -0
  297. package/dist/tools/draw-conclusion.d.ts +55 -0
  298. package/dist/tools/draw-conclusion.d.ts.map +1 -0
  299. package/dist/tools/draw-conclusion.js +243 -0
  300. package/dist/tools/draw-conclusion.js.map +1 -0
  301. package/dist/tools/git-context.d.ts +39 -0
  302. package/dist/tools/git-context.d.ts.map +1 -0
  303. package/dist/tools/git-context.js +374 -0
  304. package/dist/tools/git-context.js.map +1 -0
  305. package/dist/tools/git-diff.d.ts +45 -0
  306. package/dist/tools/git-diff.d.ts.map +1 -0
  307. package/dist/tools/git-diff.js +338 -0
  308. package/dist/tools/git-diff.js.map +1 -0
  309. package/dist/tools/git-history.d.ts +16 -0
  310. package/dist/tools/git-history.d.ts.map +1 -0
  311. package/dist/tools/git-history.js +106 -0
  312. package/dist/tools/git-history.js.map +1 -0
  313. package/dist/tools/history.d.ts +34 -0
  314. package/dist/tools/history.d.ts.map +1 -0
  315. package/dist/tools/history.js +121 -0
  316. package/dist/tools/history.js.map +1 -0
  317. package/dist/tools/impact.d.ts +46 -0
  318. package/dist/tools/impact.d.ts.map +1 -0
  319. package/dist/tools/impact.js +225 -0
  320. package/dist/tools/impact.js.map +1 -0
  321. package/dist/tools/index.d.ts +59 -0
  322. package/dist/tools/index.d.ts.map +1 -0
  323. package/dist/tools/index.js +70 -0
  324. package/dist/tools/index.js.map +1 -0
  325. package/dist/tools/kit.d.ts +165 -0
  326. package/dist/tools/kit.d.ts.map +1 -0
  327. package/dist/tools/kit.js +153 -0
  328. package/dist/tools/kit.js.map +1 -0
  329. package/dist/tools/link-workspace.d.ts +24 -0
  330. package/dist/tools/link-workspace.d.ts.map +1 -0
  331. package/dist/tools/link-workspace.js +131 -0
  332. package/dist/tools/link-workspace.js.map +1 -0
  333. package/dist/tools/lookup.d.ts +19 -0
  334. package/dist/tools/lookup.d.ts.map +1 -0
  335. package/dist/tools/lookup.js +63 -0
  336. package/dist/tools/lookup.js.map +1 -0
  337. package/dist/tools/mark-incident.d.ts +28 -0
  338. package/dist/tools/mark-incident.d.ts.map +1 -0
  339. package/dist/tools/mark-incident.js +171 -0
  340. package/dist/tools/mark-incident.js.map +1 -0
  341. package/dist/tools/merged-browser.d.ts +11 -0
  342. package/dist/tools/merged-browser.d.ts.map +1 -0
  343. package/dist/tools/merged-browser.js +20 -0
  344. package/dist/tools/merged-browser.js.map +1 -0
  345. package/dist/tools/merged-context.d.ts +11 -0
  346. package/dist/tools/merged-context.d.ts.map +1 -0
  347. package/dist/tools/merged-context.js +21 -0
  348. package/dist/tools/merged-context.js.map +1 -0
  349. package/dist/tools/merged-observe.d.ts +13 -0
  350. package/dist/tools/merged-observe.d.ts.map +1 -0
  351. package/dist/tools/merged-observe.js +21 -0
  352. package/dist/tools/merged-observe.js.map +1 -0
  353. package/dist/tools/merged-workspace.d.ts +14 -0
  354. package/dist/tools/merged-workspace.d.ts.map +1 -0
  355. package/dist/tools/merged-workspace.js +21 -0
  356. package/dist/tools/merged-workspace.js.map +1 -0
  357. package/dist/tools/observe-runtime.d.ts +262 -0
  358. package/dist/tools/observe-runtime.d.ts.map +1 -0
  359. package/dist/tools/observe-runtime.js +1966 -0
  360. package/dist/tools/observe-runtime.js.map +1 -0
  361. package/dist/tools/observe-tests.d.ts +57 -0
  362. package/dist/tools/observe-tests.d.ts.map +1 -0
  363. package/dist/tools/observe-tests.js +391 -0
  364. package/dist/tools/observe-tests.js.map +1 -0
  365. package/dist/tools/observe.d.ts +28 -0
  366. package/dist/tools/observe.d.ts.map +1 -0
  367. package/dist/tools/observe.js +291 -0
  368. package/dist/tools/observe.js.map +1 -0
  369. package/dist/tools/pr-analysis.d.ts +189 -0
  370. package/dist/tools/pr-analysis.d.ts.map +1 -0
  371. package/dist/tools/pr-analysis.js +365 -0
  372. package/dist/tools/pr-analysis.js.map +1 -0
  373. package/dist/tools/pre-push.d.ts +168 -0
  374. package/dist/tools/pre-push.d.ts.map +1 -0
  375. package/dist/tools/pre-push.js +416 -0
  376. package/dist/tools/pre-push.js.map +1 -0
  377. package/dist/tools/predict-reach.d.ts +57 -0
  378. package/dist/tools/predict-reach.d.ts.map +1 -0
  379. package/dist/tools/predict-reach.js +183 -0
  380. package/dist/tools/predict-reach.js.map +1 -0
  381. package/dist/tools/propagation.d.ts +37 -0
  382. package/dist/tools/propagation.d.ts.map +1 -0
  383. package/dist/tools/propagation.js +162 -0
  384. package/dist/tools/propagation.js.map +1 -0
  385. package/dist/tools/propose-journey.d.ts +16 -0
  386. package/dist/tools/propose-journey.d.ts.map +1 -0
  387. package/dist/tools/propose-journey.js +132 -0
  388. package/dist/tools/propose-journey.js.map +1 -0
  389. package/dist/tools/prove-reach.d.ts +74 -0
  390. package/dist/tools/prove-reach.d.ts.map +1 -0
  391. package/dist/tools/prove-reach.js +274 -0
  392. package/dist/tools/prove-reach.js.map +1 -0
  393. package/dist/tools/questions.d.ts +30 -0
  394. package/dist/tools/questions.d.ts.map +1 -0
  395. package/dist/tools/questions.js +230 -0
  396. package/dist/tools/questions.js.map +1 -0
  397. package/dist/tools/refusal-fetch.d.ts +35 -0
  398. package/dist/tools/refusal-fetch.d.ts.map +1 -0
  399. package/dist/tools/refusal-fetch.js +123 -0
  400. package/dist/tools/refusal-fetch.js.map +1 -0
  401. package/dist/tools/runtime-incident.d.ts +33 -0
  402. package/dist/tools/runtime-incident.d.ts.map +1 -0
  403. package/dist/tools/runtime-incident.js +67 -0
  404. package/dist/tools/runtime-incident.js.map +1 -0
  405. package/dist/tools/runtime-journey-drive.d.ts +102 -0
  406. package/dist/tools/runtime-journey-drive.d.ts.map +1 -0
  407. package/dist/tools/runtime-journey-drive.js +247 -0
  408. package/dist/tools/runtime-journey-drive.js.map +1 -0
  409. package/dist/tools/scope.d.ts +45 -0
  410. package/dist/tools/scope.d.ts.map +1 -0
  411. package/dist/tools/scope.js +217 -0
  412. package/dist/tools/scope.js.map +1 -0
  413. package/dist/tools/similar-incidents.d.ts +43 -0
  414. package/dist/tools/similar-incidents.d.ts.map +1 -0
  415. package/dist/tools/similar-incidents.js +190 -0
  416. package/dist/tools/similar-incidents.js.map +1 -0
  417. package/dist/tools/validate.d.ts +133 -0
  418. package/dist/tools/validate.d.ts.map +1 -0
  419. package/dist/tools/validate.js +488 -0
  420. package/dist/tools/validate.js.map +1 -0
  421. package/dist/tools/verb.d.ts +46 -0
  422. package/dist/tools/verb.d.ts.map +1 -0
  423. package/dist/tools/verb.js +78 -0
  424. package/dist/tools/verb.js.map +1 -0
  425. package/dist/tools/verification-status.d.ts +38 -0
  426. package/dist/tools/verification-status.d.ts.map +1 -0
  427. package/dist/tools/verification-status.js +203 -0
  428. package/dist/tools/verification-status.js.map +1 -0
  429. package/dist/tools/verify-claim.d.ts +29 -0
  430. package/dist/tools/verify-claim.d.ts.map +1 -0
  431. package/dist/tools/verify-claim.js +218 -0
  432. package/dist/tools/verify-claim.js.map +1 -0
  433. package/dist/tools/workspace.d.ts +28 -0
  434. package/dist/tools/workspace.d.ts.map +1 -0
  435. package/dist/tools/workspace.js +94 -0
  436. package/dist/tools/workspace.js.map +1 -0
  437. package/dist/transport.d.ts +32 -0
  438. package/dist/transport.d.ts.map +1 -0
  439. package/dist/transport.js +85 -0
  440. package/dist/transport.js.map +1 -0
  441. package/dist/workspace-index.d.ts +164 -0
  442. package/dist/workspace-index.d.ts.map +1 -0
  443. package/dist/workspace-index.js +381 -0
  444. package/dist/workspace-index.js.map +1 -0
  445. package/package.json +5 -5
@@ -0,0 +1,83 @@
1
+ /**
2
+ * `code_context` — merges `impact`, `history` and `propagation` behind one
3
+ * `verb` (mcp-surface-consolidation.md group 1: all three are read/evidence,
4
+ * so the merge crosses no class or tier boundary).
5
+ *
6
+ * Each verb's behaviour is unchanged from the tool it replaces — this file
7
+ * reuses the same query-layer calls and the same reply shapes, dispatched per
8
+ * verb rather than reimplemented. Because the merged schema is the union of
9
+ * all three verbs' properties, `additionalProperties: false` alone can no
10
+ * longer catch a property sent to the wrong verb (verb.ts's header explains
11
+ * why); `selectVerb` re-establishes that per verb before any verb's logic runs.
12
+ */
13
+ import type { EdgeType } from "@descryy/ir";
14
+ import { type BriefNode, type NodeCandidates, type ToolDefinition } from "./kit.ts";
15
+ export type CodeContextVerb = "impact" | "history" | "propagation";
16
+ /** A node in the blast radius, with how far out and how hard it is hit. */
17
+ export interface ImpactedNode extends BriefNode {
18
+ readonly depth: number;
19
+ readonly score: number;
20
+ /** 1-based position in this answer, highest score first. */
21
+ readonly rank: number;
22
+ /** `top`/`notable`/`rest` by rank, never an absolute score threshold. */
23
+ readonly prominence: "top" | "notable" | "rest";
24
+ }
25
+ /** An INCIDENT or FIX_PATTERN linked to the start node, and by which edge. */
26
+ export interface RelatedNode extends BriefNode {
27
+ readonly via: EdgeType;
28
+ }
29
+ /** Present only when `to` was given and resolved. */
30
+ export interface TracedPath {
31
+ readonly to: BriefNode;
32
+ readonly hops: number;
33
+ readonly nodes: readonly BriefNode[];
34
+ }
35
+ export interface ImpactReport {
36
+ readonly from: BriefNode;
37
+ readonly affected: readonly ImpactedNode[];
38
+ readonly affectedTotal: number;
39
+ readonly coveringTests: readonly BriefNode[];
40
+ readonly related: readonly RelatedNode[];
41
+ readonly path: TracedPath | null;
42
+ readonly analysed: boolean;
43
+ readonly edgeTypesWalked: readonly EdgeType[];
44
+ readonly edgeTypesPresent: readonly string[];
45
+ }
46
+ export type ImpactData = ImpactReport | NodeCandidates;
47
+ /** A file this one moves with, and how strongly. */
48
+ export interface CoChangedFile extends BriefNode {
49
+ readonly support: number;
50
+ readonly confidence: number;
51
+ }
52
+ export interface HistoryFileResolved extends BriefNode {
53
+ readonly resolved: true;
54
+ }
55
+ export interface HistoryFileUnresolved {
56
+ readonly resolved: false;
57
+ readonly path: string;
58
+ }
59
+ export type HistoryFile = HistoryFileResolved | HistoryFileUnresolved;
60
+ export interface HistoryReport {
61
+ readonly file: HistoryFile;
62
+ readonly coChanged: readonly CoChangedFile[];
63
+ readonly coChangedTotal: number;
64
+ }
65
+ export type HistoryData = HistoryReport;
66
+ /** A node the data can reach, with how far along the walk it sits. */
67
+ export interface ReachedNode extends BriefNode {
68
+ readonly depth: number;
69
+ readonly score: number;
70
+ }
71
+ export interface PropagationReport {
72
+ readonly from: BriefNode;
73
+ readonly reached: readonly ReachedNode[];
74
+ readonly reachedTotal: number;
75
+ readonly fieldLevel: boolean;
76
+ readonly analysed: boolean;
77
+ readonly edgeTypesWalked: readonly string[];
78
+ readonly edgeTypesPresent: readonly string[];
79
+ }
80
+ export type PropagationData = PropagationReport | NodeCandidates;
81
+ export type CodeContextData = ImpactData | HistoryData | PropagationData;
82
+ export declare const codeContextTool: ToolDefinition;
83
+ //# sourceMappingURL=code-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-context.d.ts","sourceRoot":"","sources":["../../src/tools/code-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,432 @@
1
+ /**
2
+ * `code_context` — merges `impact`, `history` and `propagation` behind one
3
+ * `verb` (mcp-surface-consolidation.md group 1: all three are read/evidence,
4
+ * so the merge crosses no class or tier boundary).
5
+ *
6
+ * Each verb's behaviour is unchanged from the tool it replaces — this file
7
+ * reuses the same query-layer calls and the same reply shapes, dispatched per
8
+ * verb rather than reimplemented. Because the merged schema is the union of
9
+ * all three verbs' properties, `additionalProperties: false` alone can no
10
+ * longer catch a property sent to the wrong verb (verb.ts's header explains
11
+ * why); `selectVerb` re-establishes that per verb before any verb's logic runs.
12
+ */
13
+ import { changesWith, dataFlowFrom, DATA_FLOW_EDGE_TYPES, findNodes, getNode, impactOf, rootCauseSearch, testsCovering, traceApi, withProminence, } from "@descryy/core";
14
+ import { answer, briefNode, optionalBoolean, optionalEnum, optionalInteger, optionalString, optionalStringArray, ToolInputError, } from "./kit.js";
15
+ import { capBySize, sizeCapNote } from "../capped.js";
16
+ import { resolveOneNode } from "./lookup.js";
17
+ import { selectVerb } from "./verb.js";
18
+ const STRUCTURAL_EDGE_TYPES = [
19
+ "CALLS",
20
+ "IMPORTS",
21
+ "IMPLEMENTS",
22
+ "INHERITS",
23
+ "USES_API",
24
+ "SERVES_API",
25
+ ];
26
+ // --- per-verb argument ownership, for selectVerb ----------------------------
27
+ const VERB_SPECS = [
28
+ {
29
+ verb: "impact",
30
+ accepts: ["nodeId", "symbol", "file", "to", "edgeTypes", "direction", "crossApiEndpoint", "maxDepth", "limit"],
31
+ },
32
+ { verb: "history", accepts: ["file", "limit"] },
33
+ { verb: "propagation", accepts: ["nodeId", "symbol", "file", "edgeTypes", "maxDepth", "limit"] },
34
+ ];
35
+ const SCHEMA = {
36
+ type: "object",
37
+ properties: {
38
+ verb: {
39
+ type: "string",
40
+ enum: ["impact", "history", "propagation"],
41
+ description: "impact: blast radius + tests + incidents. history: file co-change. propagation: data-flow reach.",
42
+ },
43
+ nodeId: { type: "string", description: "Start node." },
44
+ symbol: {
45
+ type: "string",
46
+ description: "Start symbol if no node id. Ambiguous matches are refused.",
47
+ },
48
+ file: {
49
+ type: "string",
50
+ description: "Path. Required for history; else disambiguates symbol.",
51
+ },
52
+ to: {
53
+ type: "string",
54
+ description: "impact only: second node id/symbol/path; traces a path to it.",
55
+ },
56
+ edgeTypes: {
57
+ type: "array",
58
+ items: { type: "string" },
59
+ description: "Restrict the walk. Default: structural (impact) or data-flow (propagation) edges.",
60
+ },
61
+ direction: {
62
+ type: "string",
63
+ enum: ["in", "out"],
64
+ description: "impact only. Default \"in\" (depends on this); \"out\" (this reaches).",
65
+ },
66
+ crossApiEndpoint: {
67
+ type: "boolean",
68
+ description: "impact only: also cross to the API's other side. Off by default.",
69
+ },
70
+ maxDepth: { type: "integer", minimum: 1, description: "Hop limit. Default unbounded." },
71
+ limit: {
72
+ type: "integer",
73
+ minimum: 1,
74
+ description: "Cap on items. Default 25 (impact/propagation) or 50 (history).",
75
+ },
76
+ },
77
+ required: ["verb"],
78
+ additionalProperties: false,
79
+ };
80
+ /** First criteria shape that resolves, or null — `resolveOneNode` is single-shot per criterion, so
81
+ * a parameter documented as accepting several shapes needs each tried before reporting no match. */
82
+ function firstResolved(session, attempts) {
83
+ for (const criteria of attempts) {
84
+ const found = resolveOneNode(session, criteria);
85
+ if (found.node !== null)
86
+ return found;
87
+ }
88
+ return null;
89
+ }
90
+ /**
91
+ * Shared shape for all three verbs' `fitToBudget`: a scaffold of scalars plus
92
+ * exactly one already-`limit`-capped list that scales with the graph, none of
93
+ * whose rows carry a droppable payload — so shrinking means only dropping
94
+ * trailing rows. `impact`'s blast radius, `history`'s co-change list and
95
+ * `propagation`'s reached-nodes list are each this shape once the verb's own
96
+ * work is done, which is why one function covers all three.
97
+ */
98
+ function fitOneList(rest, listKey, shownList, totalCount, noun, budgetBytes) {
99
+ const scaffoldBytes = Buffer.byteLength(JSON.stringify({ ...rest, [listKey]: [] }), "utf8");
100
+ const fit = capBySize(shownList, budgetBytes, scaffoldBytes);
101
+ const notes = fit.droppedForSize === 0 ? [] : [sizeCapNote(noun, fit.shown.length, shownList.length, fit.droppedForSize)];
102
+ return {
103
+ data: { ...rest, [listKey]: fit.shown },
104
+ notes,
105
+ ...(fit.droppedForSize === 0
106
+ ? {}
107
+ : { truncatedDetail: { shown: fit.shown.length, total: totalCount, more: null } }),
108
+ };
109
+ }
110
+ async function runImpact(args, ctx) {
111
+ const nodeId = optionalString(args, "nodeId");
112
+ const symbol = optionalString(args, "symbol");
113
+ const file = optionalString(args, "file");
114
+ const to = optionalString(args, "to");
115
+ const edgeTypes = optionalStringArray(args, "edgeTypes");
116
+ const direction = optionalEnum(args, "direction", ["in", "out"]);
117
+ const crossApiEndpoint = optionalBoolean(args, "crossApiEndpoint") ?? false;
118
+ const maxDepth = optionalInteger(args, "maxDepth", 1);
119
+ const limit = optionalInteger(args, "limit", 1) ?? 25;
120
+ if (nodeId === undefined && symbol === undefined && file === undefined) {
121
+ throw new ToolInputError('give one of "nodeId", "symbol" or "file"');
122
+ }
123
+ const provider = ctx.session.provider();
124
+ const found = resolveOneNode(ctx.session, { nodeId, symbol, file });
125
+ if (found.node === null) {
126
+ const base = provider.baseStamp();
127
+ return {
128
+ result: {
129
+ data: { candidates: found.candidates.map(briefNode) },
130
+ stamp: { commitSha: base.commitSha, graphBuiltAt: base.graphBuiltAt, irSchemaVersion: base.irSchemaVersion, commitSpread: base.commitSpread, repoCount: base.repoCount, resolutionFloor: 0 },
131
+ truncated: false,
132
+ notes: found.notes,
133
+ },
134
+ nameLevel: true,
135
+ state: "refused",
136
+ headline: found.headline,
137
+ };
138
+ }
139
+ const walked = edgeTypes ?? STRUCTURAL_EDGE_TYPES;
140
+ ctx.progress(direction === "out" ? `Finding what ${found.node.name} reaches` : `Finding what depends on ${found.node.name}`);
141
+ const impact = impactOf(provider, [found.node.id], {
142
+ types: walked,
143
+ ...(direction === undefined ? {} : { direction }),
144
+ ...(crossApiEndpoint ? { crossApiEndpoint } : {}),
145
+ ...(maxDepth === undefined ? {} : { maxDepth }),
146
+ });
147
+ const affected = impact.data.filter((entry) => entry.node.id !== found.node?.id);
148
+ const shownAffected = affected.slice(0, limit);
149
+ ctx.progress(`Finding tests covering ${found.node.name}`);
150
+ const tests = testsCovering(provider, found.node.id, maxDepth === undefined ? {} : { maxDepth });
151
+ ctx.progress(`Checking for related incidents and fix patterns`);
152
+ const related = rootCauseSearch(provider, found.node.id);
153
+ let path = null;
154
+ const pathNotes = [];
155
+ if (to !== undefined) {
156
+ const target = firstResolved(ctx.session, [{ nodeId: to }, { symbol: to }, { file: to }]) ??
157
+ resolveOneNode(ctx.session, { symbol: to, file: undefined });
158
+ if (target.node === null) {
159
+ pathNotes.push(`"to" (${JSON.stringify(to)}) did not resolve: ${target.headline}`);
160
+ }
161
+ else {
162
+ ctx.progress(`Tracing a path to ${target.node.name}`);
163
+ const traced = traceApi(provider, found.node.id, target.node.id, { direction: "both" });
164
+ path = { to: briefNode(target.node), hops: traced.data.hops, nodes: traced.data.path.map(briefNode) };
165
+ pathNotes.push(...traced.notes);
166
+ }
167
+ }
168
+ const present = new Set();
169
+ for (const edge of [...provider.outgoing(found.node.id), ...provider.incoming(found.node.id)]) {
170
+ if (walked.includes(edge.type))
171
+ present.add(edge.type);
172
+ }
173
+ const absent = walked.filter((type) => !present.has(type));
174
+ const analysed = present.size > 0;
175
+ const notes = [...found.notes, ...impact.notes, ...tests.notes, ...related.notes, ...pathNotes];
176
+ if (shownAffected.length < affected.length) {
177
+ notes.push(`${affected.length - shownAffected.length} further affected node(s) exist but are not listed — ` +
178
+ `the reply is capped at ${limit}.`);
179
+ }
180
+ if (absent.length > 0) {
181
+ notes.push(`No ${absent.join(", ")} edge touches this node, so ${absent.length === 1 ? "that type" : "those types"} ` +
182
+ "contributed nothing to the blast radius.");
183
+ }
184
+ if (!analysed) {
185
+ notes.push(`None of the requested edge types (${walked.join(", ")}) appear on any edge touching this node. ` +
186
+ "That is not a finding that nothing depends on it — a producer for these edges may not run in " +
187
+ "this graph. This probe is local to one node and does not choose between the causes.");
188
+ }
189
+ const contributing = [
190
+ impact.stamp.resolutionFloor,
191
+ ...(tests.data.length > 0 ? [tests.stamp.resolutionFloor] : []),
192
+ ...(related.data.length > 0 ? [related.stamp.resolutionFloor] : []),
193
+ ];
194
+ const resolutionFloor = Math.min(...contributing);
195
+ const shapedAffected = withProminence(shownAffected.map((entry) => ({
196
+ ...briefNode(entry.node),
197
+ depth: entry.depth,
198
+ score: Number(entry.score.toFixed(4)),
199
+ })));
200
+ const restOfImpactData = {
201
+ from: briefNode(found.node),
202
+ affectedTotal: affected.length,
203
+ coveringTests: tests.data.map(briefNode),
204
+ related: related.data.map((m) => ({ ...briefNode(m.incident), via: m.via })),
205
+ path,
206
+ analysed,
207
+ edgeTypesWalked: walked,
208
+ edgeTypesPresent: [...present].sort(),
209
+ };
210
+ return {
211
+ result: {
212
+ data: { ...restOfImpactData, affected: shapedAffected },
213
+ stamp: { ...impact.stamp, resolutionFloor },
214
+ truncated: impact.truncated || tests.truncated || related.truncated || shownAffected.length < affected.length,
215
+ notes,
216
+ },
217
+ nameLevel: false,
218
+ ...(analysed ? (affected.length === 0 ? { state: "empty" } : {}) : { state: "refused" }),
219
+ ...(shownAffected.length < affected.length
220
+ ? { truncatedDetail: { shown: shownAffected.length, total: affected.length, more: null } }
221
+ : {}),
222
+ fitToBudget: (budgetBytes) => fitOneList(restOfImpactData, "affected", shapedAffected, affected.length, "affected node", budgetBytes),
223
+ headline: !analysed
224
+ ? `${found.node.name}'s blast radius was not analysed: the graph holds no ${walked.join("/")} edge ` +
225
+ "touching it. This is not a finding that nothing depends on it."
226
+ : direction === "out"
227
+ ? `${found.node.name} reaches ${affected.length} node(s); ${tests.data.length} test(s) cover it` +
228
+ `${related.data.length > 0 ? `; ${related.data.length} related incident(s)/fix(es)` : ""}.`
229
+ : `${found.node.name} affects ${affected.length} node(s); ${tests.data.length} test(s) cover it` +
230
+ `${related.data.length > 0 ? `; ${related.data.length} related incident(s)/fix(es)` : ""}.`,
231
+ };
232
+ }
233
+ async function runHistory(args, ctx) {
234
+ const file = optionalString(args, "file");
235
+ if (file === undefined)
236
+ throw new ToolInputError('give "file"');
237
+ const limit = optionalInteger(args, "limit", 1) ?? 50;
238
+ const driver = ctx.session.store().driver;
239
+ const candidates = findNodes(driver, { file, type: "FILE", limit: 1 });
240
+ const provider = ctx.session.provider();
241
+ const base = provider.baseStamp();
242
+ if (candidates.length === 0) {
243
+ const byId = getNode(driver, file);
244
+ if (byId !== undefined && byId.type !== "FILE") {
245
+ return {
246
+ result: {
247
+ data: { file: { resolved: false, path: file }, coChanged: [], coChangedTotal: 0 },
248
+ stamp: { commitSha: base.commitSha, graphBuiltAt: base.graphBuiltAt, irSchemaVersion: base.irSchemaVersion, commitSpread: base.commitSpread, repoCount: base.repoCount, resolutionFloor: 0 },
249
+ truncated: false,
250
+ notes: [
251
+ `"${file}" is a node id, but it names a ${byId.type} node, not a FILE — this tool only ` +
252
+ "reports co-change history for files. Pass the file's repository-relative path instead.",
253
+ ],
254
+ },
255
+ nameLevel: true,
256
+ state: "refused",
257
+ headline: `"${file}" is a ${byId.type} node id, not a FILE.`,
258
+ };
259
+ }
260
+ if (byId !== undefined) {
261
+ candidates.push(byId);
262
+ }
263
+ }
264
+ if (candidates.length === 0) {
265
+ return {
266
+ result: {
267
+ data: { file: { resolved: false, path: file }, coChanged: [], coChangedTotal: 0 },
268
+ stamp: { commitSha: base.commitSha, graphBuiltAt: base.graphBuiltAt, irSchemaVersion: base.irSchemaVersion, commitSpread: base.commitSpread, repoCount: base.repoCount, resolutionFloor: 0 },
269
+ truncated: false,
270
+ notes: [
271
+ "No FILE node matches this exact repository-relative path or node id. Either the path is " +
272
+ "wrong, git history was skipped when the graph was built (analyze's \"history\" option), " +
273
+ "or this file has never appeared in a commit the git source read — a file with zero " +
274
+ "history is not distinguishable here from one this graph never analysed.",
275
+ ],
276
+ },
277
+ nameLevel: true,
278
+ state: "refused",
279
+ headline: `No FILE node at "${file}".`,
280
+ };
281
+ }
282
+ const node = candidates[0];
283
+ ctx.progress(`Reading co-change history for ${file}`);
284
+ const history = changesWith(provider, node.id);
285
+ const shown = history.data.slice(0, limit);
286
+ const notes = [...history.notes];
287
+ if (shown.length < history.data.length) {
288
+ notes.push(`${history.data.length - shown.length} further co-changed file(s) exist but are not listed — ` +
289
+ `the reply is capped at ${limit}.`);
290
+ }
291
+ const cappedByLimit = shown.length < history.data.length;
292
+ const shapedCoChanged = shown.map((c) => ({
293
+ ...briefNode(c.node),
294
+ support: c.support,
295
+ confidence: Number(c.confidence.toFixed(4)),
296
+ }));
297
+ const restOfHistoryData = { file: { ...briefNode(node), resolved: true }, coChangedTotal: history.data.length };
298
+ return {
299
+ result: {
300
+ data: { ...restOfHistoryData, coChanged: shapedCoChanged },
301
+ stamp: history.stamp,
302
+ truncated: history.truncated || cappedByLimit,
303
+ notes,
304
+ },
305
+ ...(shown.length === 0 ? { state: "empty" } : {}),
306
+ ...(cappedByLimit ? { truncatedDetail: { shown: shown.length, total: history.data.length, more: null } } : {}),
307
+ nameLevel: false,
308
+ fitToBudget: (budgetBytes) => fitOneList(restOfHistoryData, "coChanged", shapedCoChanged, history.data.length, "co-changed file", budgetBytes),
309
+ headline: shown.length === 0
310
+ ? `"${file}" has no recorded co-change history above the graph's own support/confidence floor.`
311
+ : `"${file}" tends to change alongside ${history.data.length} other file(s); most-coupled: ` +
312
+ `${shown[0].node.file ?? shown[0].node.name} (${shown[0].support} commit(s) together).`,
313
+ };
314
+ }
315
+ async function runPropagation(args, ctx) {
316
+ const nodeId = optionalString(args, "nodeId");
317
+ const symbol = optionalString(args, "symbol");
318
+ const file = optionalString(args, "file");
319
+ const edgeTypes = optionalStringArray(args, "edgeTypes");
320
+ const maxDepth = optionalInteger(args, "maxDepth", 1);
321
+ const limit = optionalInteger(args, "limit", 1) ?? 25;
322
+ if (nodeId === undefined && symbol === undefined && file === undefined) {
323
+ throw new ToolInputError('give one of "nodeId", "symbol" or "file"');
324
+ }
325
+ const found = resolveOneNode(ctx.session, { nodeId, symbol, file });
326
+ if (found.node === null) {
327
+ const base = ctx.session.provider().baseStamp();
328
+ return answer({
329
+ headline: found.headline,
330
+ state: "refused",
331
+ nameLevel: true,
332
+ resolutionFloor: 0,
333
+ commitSha: base.commitSha,
334
+ graphBuiltAt: base.graphBuiltAt,
335
+ irSchemaVersion: base.irSchemaVersion,
336
+ commitSpread: base.commitSpread,
337
+ repoCount: base.repoCount,
338
+ notes: found.notes,
339
+ data: { candidates: found.candidates.map(briefNode) },
340
+ });
341
+ }
342
+ ctx.progress(`Following data out of ${found.node.name}`);
343
+ const flow = dataFlowFrom(ctx.session.provider(), found.node.id, {
344
+ ...(maxDepth === undefined ? {} : { maxDepth }),
345
+ ...(edgeTypes === undefined ? {} : { types: edgeTypes }),
346
+ });
347
+ const reached = flow.data.filter((entry) => entry.node.id !== found.node?.id);
348
+ const shown = reached.slice(0, limit);
349
+ const notes = [...found.notes, ...flow.notes];
350
+ if (shown.length < reached.length) {
351
+ notes.push(`${reached.length - shown.length} further node(s) are on the path but not listed — the reply ` +
352
+ `is capped at ${limit}.`);
353
+ }
354
+ const walked = edgeTypes ?? DATA_FLOW_EDGE_TYPES;
355
+ const present = new Set();
356
+ for (const edge of [
357
+ ...ctx.session.provider().outgoing(found.node.id),
358
+ ...ctx.session.provider().incoming(found.node.id),
359
+ ]) {
360
+ if (walked.includes(edge.type))
361
+ present.add(edge.type);
362
+ }
363
+ const absent = walked.filter((type) => !present.has(type));
364
+ const analysed = present.size > 0;
365
+ if (absent.length > 0) {
366
+ notes.push(`No ${absent.join(", ")} edge touches this node, so ${absent.length === 1 ? "that type" : "those types"} ` +
367
+ "contributed nothing to this answer.");
368
+ }
369
+ if (!analysed) {
370
+ notes.push(`None of the requested edge types (${walked.join(", ")}) appear on any edge touching this node, ` +
371
+ "so the walk had nothing to follow. That is not a finding that no data leaves this symbol: " +
372
+ "no adapter configured here emitting these edge types at all (PROPAGATES_TO's only shipped " +
373
+ "producer today is narrow single-hop and may simply not have fired here), a " +
374
+ "graph built without the source that would carry them, and a symbol that genuinely " +
375
+ "propagates nothing are three different situations. This probe is local to one node and " +
376
+ "cannot tell them apart — it reports that the walk did not run rather than choosing between them.");
377
+ }
378
+ const fieldLevel = flow.stamp.resolutionFloor >= 3;
379
+ const shapedReached = shown.map((entry) => ({
380
+ ...briefNode(entry.node),
381
+ depth: entry.depth,
382
+ score: Number(entry.score.toFixed(4)),
383
+ }));
384
+ const restOfPropagationData = {
385
+ from: briefNode(found.node),
386
+ reachedTotal: reached.length,
387
+ fieldLevel,
388
+ analysed,
389
+ edgeTypesWalked: walked,
390
+ edgeTypesPresent: [...present].sort(),
391
+ };
392
+ return {
393
+ result: {
394
+ ...flow,
395
+ data: { ...restOfPropagationData, reached: shapedReached },
396
+ notes,
397
+ },
398
+ ...(analysed ? (reached.length === 0 ? { state: "empty" } : {}) : { state: "refused" }),
399
+ nameLevel: false,
400
+ fitToBudget: (budgetBytes) => fitOneList(restOfPropagationData, "reached", shapedReached, reached.length, "reached node", budgetBytes),
401
+ headline: !analysed
402
+ ? `Data flow out of ${found.node.name} was not analysed: the graph holds no ` +
403
+ `${walked.join("/")} edge touching it. This is not a finding that nothing propagates.`
404
+ : fieldLevel
405
+ ? `Data from ${found.node.name} reaches ${reached.length} node(s), at field level.`
406
+ : `${found.node.name} can reach ${reached.length} node(s). This is where data *can* flow, ` +
407
+ "not which field arrives where — that needs R3.",
408
+ };
409
+ }
410
+ async function run(args, ctx) {
411
+ const verb = selectVerb(args, "verb", VERB_SPECS);
412
+ switch (verb) {
413
+ case "impact":
414
+ return runImpact(args, ctx);
415
+ case "history":
416
+ return runHistory(args, ctx);
417
+ case "propagation":
418
+ return runPropagation(args, ctx);
419
+ }
420
+ }
421
+ export const codeContextTool = {
422
+ name: "code_context",
423
+ class: "read",
424
+ tier: "evidence",
425
+ version: "1.0.0",
426
+ title: "Blast radius, co-change history and data flow for a symbol or file",
427
+ description: "impact: blast radius, covering tests, linked incidents, optional traced path. history: " +
428
+ "files a file tends to change alongside. propagation: where a value can flow.",
429
+ inputSchema: SCHEMA,
430
+ run,
431
+ };
432
+ //# sourceMappingURL=code-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-context.js","sourceRoot":"","sources":["../../src/tools/code-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * `contracts` — path half (name-level, R2→A) runs today; shape half (§13)
3
+ * needs producer-attached shapes, reporting `refused` with named blockers
4
+ * rather than an empty list. `defect` is provable here alone; `lead` is not.
5
+ */
6
+ import type { ContractCheck, ContractClaim, ContractFindingKind, EndpointKey, NearMissKind, ShapeDifference, ShapeDirection } from "@descryy/core";
7
+ import type { ResolutionLevel } from "@descryy/ir";
8
+ import { type BriefNode, type ToolDefinition } from "./kit.ts";
9
+ /** A call that reaches no route, or a route nothing calls. */
10
+ export interface ContractPathFinding {
11
+ readonly kind: ContractFindingKind;
12
+ /** `defect` (provable from this graph alone) or `lead` (needs outside knowledge) — see module header. */
13
+ readonly claim: ContractClaim;
14
+ /** 1-based position in this answer. See {@link ContractPathFinding.prominence} for what orders it. */
15
+ readonly rank: number;
16
+ /** `top`/`notable`/`rest`, ordered by evidence strength (own `resolution`), not `claim` — a claim-based ranking would be judgement dressed as measurement. */
17
+ readonly prominence: "top" | "notable" | "rest";
18
+ readonly method: string;
19
+ /** The normalised path template, not the raw literal. */
20
+ readonly path: string;
21
+ readonly detail: string;
22
+ /** Lowest resolution among the edges this finding rests on. Caps its class. */
23
+ readonly resolution: ResolutionLevel;
24
+ /** Absent when nothing resembles this endpoint on the other side — that gap is disclosed as unanalysed, never reported broken (typo vs. an outside service). */
25
+ readonly nearMiss?: {
26
+ readonly kind: NearMissKind;
27
+ readonly against: EndpointKey;
28
+ };
29
+ /** Capped at five. Populated for a call that reaches no route. */
30
+ readonly callers: readonly BriefNode[];
31
+ /** Capped at five. Populated for a route nothing calls. */
32
+ readonly routes: readonly BriefNode[];
33
+ }
34
+ /** A field one side reads that the other does not send. Requires R3. */
35
+ export interface ContractShapeMismatchReport {
36
+ readonly endpoint: string;
37
+ readonly direction: ShapeDirection;
38
+ /** The side a missing field breaks. */
39
+ readonly reader: BriefNode;
40
+ /** The side that declares the shape. */
41
+ readonly writer: BriefNode;
42
+ readonly differences: readonly ShapeDifference[];
43
+ readonly resolution: ResolutionLevel;
44
+ /** Always `"defect"` — see the module header. Carried rather than assumed by a caller. */
45
+ readonly claim: ContractClaim;
46
+ }
47
+ /** Shape half's own status, carried in the payload not the envelope; the reply is `ok` when only the path half ran so a real finding isn't hidden behind a caveat. `ran`/`blockers` carry the status. */
48
+ export interface ContractShapeStatus {
49
+ readonly ran: boolean;
50
+ readonly comparable: number;
51
+ /** Endpoints with a shape on the consumer side only. */
52
+ readonly consumerOnly: number;
53
+ /** Endpoints with a shape on the provider side only. */
54
+ readonly providerOnly: number;
55
+ /** Routes naming a DTO with no request/response role, so direction is unknown. */
56
+ readonly unroledDtos: number;
57
+ /** Never empty when `ran` is false. */
58
+ readonly blockers: readonly string[];
59
+ }
60
+ /** One shape, always. `checked` counts describe the whole graph even when filtered — a shrinking denominator would make a narrow query look healthy; the two lists describe the filter. */
61
+ export interface ContractsData {
62
+ readonly findings: readonly ContractPathFinding[];
63
+ readonly shapeMismatches: readonly ContractShapeMismatchReport[];
64
+ readonly checked: ContractCheck["paths"]["checked"];
65
+ readonly shapes: ContractShapeStatus;
66
+ /** Unmatched callers with nothing resembling them on the provider side — not findings, the size of the region this analysis couldn't speak about. */
67
+ readonly unmatchedWithoutNearMiss: number;
68
+ /** `findings` plus `shapeMismatches` with `claim === "defect"`. What a git hook should branch on. */
69
+ readonly defects: number;
70
+ /** `findings` with `claim === "lead"` — worth a look, never counted as blocking. */
71
+ readonly leads: number;
72
+ }
73
+ export declare const contractsTool: ToolDefinition;
74
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,eAAe,EACf,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAU,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAIL,KAAK,SAAS,EAEd,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAIlB,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,yGAAyG;IACzG,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,sGAAsG;IACtG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8JAA8J;IAC9J,QAAQ,CAAC,UAAU,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,gKAAgK;IAChK,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;IACnF,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CACvC;AAED,wEAAwE;AACxE,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;CAC/B;AAED,yMAAyM;AACzM,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,kFAAkF;IAClF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,2LAA2L;AAC3L,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,QAAQ,CAAC,eAAe,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACjE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,qJAAqJ;IACrJ,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,qGAAqG;IACrG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AA6OD,eAAO,MAAM,aAAa,EAAE,cAY3B,CAAC"}