@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,183 @@
1
+ /**
2
+ * `predict_reach` — RG-10's predict-then-propose, exposed. Given a node
3
+ * (typically a `DATABASE_COLUMN` a change touches, but any node
4
+ * `reachablePages` can walk from), asks the graph which `PAGE`/`COMPONENT`
5
+ * nodes the data can reach — `@descryy/core`'s `reachablePages`, a walk
6
+ * over `PROPAGATES_TO`/`READS`/`ASSIGNS`/`RETURNS`, crossing `USES_API`
7
+ * backward at an `API_ENDPOINT` — and, when it reaches at least one page,
8
+ * proposes a navigate-only journey via the same planner `propose_journey`
9
+ * uses (`../planner/propose-journey.ts`, unmodified, called through
10
+ * `../planner/predict-then-propose.ts`).
11
+ *
12
+ * **Never drives anything and never writes to a Finding.** The proposal
13
+ * this returns is a value in this reply, not an action: proving or
14
+ * disproving what it predicts is a human (or an agent acting on a human's
15
+ * behalf) driving the application for real — `browser_start_session`, the
16
+ * browser primitives, `browser_save_scenario` to commit what actually
17
+ * happened — and then recording the outcome against the finding that
18
+ * predicted it. That last step needs `packages/ir/src/finding.ts` and the
19
+ * finding funnel, both outside this lane's owned files, and is not
20
+ * performed here; see this tool's own `description` for the same
21
+ * disclosure surfaced to a caller.
22
+ *
23
+ * **`observedNodeIds` — RG-10's join, added by the pipeline-joins lane.**
24
+ * Optional, and still never a drive: when a caller supplies the graph node
25
+ * ids a REAL, already-accepted journey actually reached (read straight off
26
+ * `browser_run_scenario`'s own reply after that scenario was driven — the
27
+ * acceptance gate is `browser_run_scenario`'s own, unchanged and untouched
28
+ * here), this tool additionally reports which predicted pages that real
29
+ * drive proved and which it disproved
30
+ * (`../planner/predict-then-propose.ts#proveOrDisprove`). Omitted (the
31
+ * default), the reply is byte-for-byte what it was before this parameter
32
+ * existed.
33
+ */
34
+ import { predictThenPropose, proveOrDisprove } from "../planner/predict-then-propose.js";
35
+ import { answer, briefNode, requiredString, optionalString, optionalStringArray, ToolInputError, } from "./kit.js";
36
+ import { capBySize, sizeCapNote } from "../capped.js";
37
+ import { resolveOneNode } from "./lookup.js";
38
+ const SCHEMA = {
39
+ type: "object",
40
+ properties: {
41
+ nodeId: { type: "string", description: "Node to predict reach from — typically a data column." },
42
+ symbol: {
43
+ type: "string",
44
+ description: "Start symbol if no node id. Ambiguous matches are refused.",
45
+ },
46
+ file: { type: "string", description: "Path, to disambiguate \"symbol\"." },
47
+ targetUrl: {
48
+ type: "string",
49
+ description: "REQUIRED. Base URL. Never inferred.",
50
+ },
51
+ name: { type: "string", description: "Name for the proposed scenario. Default \"predicted-journey\"." },
52
+ observedNodeIds: {
53
+ type: "array",
54
+ items: { type: "string" },
55
+ description: "Optional: nodes a real journey reached. Reports which predicted pages it proved or disproved.",
56
+ },
57
+ },
58
+ required: ["targetUrl"],
59
+ additionalProperties: false,
60
+ };
61
+ function fitPredictReach(rest, reachedPages, proposal, budgetBytes) {
62
+ const scaffoldBytes = Buffer.byteLength(JSON.stringify({
63
+ ...rest,
64
+ reachedPages: [],
65
+ proposal: proposal === null ? null : { ...proposal, reachedNotProposed: [] },
66
+ }), "utf8");
67
+ let budget = Math.max(budgetBytes - scaffoldBytes, 0);
68
+ const pagesFit = capBySize(reachedPages, budget, 0);
69
+ budget = Math.max(budget - Buffer.byteLength(JSON.stringify(pagesFit.shown), "utf8"), 0);
70
+ const reachedNotProposed = proposal?.reachedNotProposed ?? [];
71
+ const notProposedFit = capBySize(reachedNotProposed, budget, 0);
72
+ const notes = [];
73
+ if (pagesFit.droppedForSize > 0) {
74
+ notes.push(sizeCapNote("reached page/component", pagesFit.shown.length, reachedPages.length, pagesFit.droppedForSize));
75
+ }
76
+ if (notProposedFit.droppedForSize > 0) {
77
+ notes.push(sizeCapNote("reached-not-proposed node", notProposedFit.shown.length, reachedNotProposed.length, notProposedFit.droppedForSize));
78
+ }
79
+ const droppedNow = pagesFit.droppedForSize + notProposedFit.droppedForSize;
80
+ const shownNow = pagesFit.shown.length + notProposedFit.shown.length;
81
+ const preFitTotal = reachedPages.length + reachedNotProposed.length;
82
+ return {
83
+ data: {
84
+ ...rest,
85
+ reachedPages: pagesFit.shown,
86
+ proposal: proposal === null ? null : { ...proposal, reachedNotProposed: notProposedFit.shown },
87
+ },
88
+ notes,
89
+ ...(droppedNow === 0 ? {} : { truncatedDetail: { shown: shownNow, total: preFitTotal, more: null } }),
90
+ };
91
+ }
92
+ async function run(args, ctx) {
93
+ const nodeIdArg = optionalString(args, "nodeId");
94
+ const symbol = optionalString(args, "symbol");
95
+ const file = optionalString(args, "file");
96
+ const targetUrl = requiredString(args, "targetUrl");
97
+ const name = optionalString(args, "name") ?? "predicted-journey";
98
+ const observedNodeIds = optionalStringArray(args, "observedNodeIds");
99
+ if (nodeIdArg === undefined && symbol === undefined && file === undefined) {
100
+ throw new ToolInputError('give one of "nodeId", "symbol" or "file"');
101
+ }
102
+ const provider = ctx.session.provider();
103
+ const found = resolveOneNode(ctx.session, { nodeId: nodeIdArg, symbol, file });
104
+ const base = provider.baseStamp();
105
+ if (found.node === null) {
106
+ return {
107
+ result: {
108
+ data: { candidates: found.candidates.map(briefNode) },
109
+ stamp: { ...base, resolutionFloor: 0 },
110
+ truncated: false,
111
+ notes: found.notes,
112
+ },
113
+ nameLevel: true,
114
+ state: "refused",
115
+ headline: found.headline,
116
+ };
117
+ }
118
+ const node = found.node;
119
+ ctx.progress(`Predicting which pages ${node.name} can reach`);
120
+ const predicted = predictThenPropose(provider, node.id, {
121
+ targetUrl,
122
+ name,
123
+ savedAtCommit: base.commitSha ?? "",
124
+ });
125
+ const empty = { from: briefNode(node), reachedPages: [], proposal: null, proof: null };
126
+ const notes = [...found.notes, ...predicted.notes];
127
+ const proposal = predicted.proposal;
128
+ if (proposal === null) {
129
+ return answer({
130
+ headline: `${node.name} reaches no PAGE or COMPONENT this graph can walk to. Not a claim it reaches none in the running application — see notes.`,
131
+ state: "empty",
132
+ nameLevel: true,
133
+ resolutionFloor: 0,
134
+ commitSha: base.commitSha,
135
+ graphBuiltAt: base.graphBuiltAt,
136
+ irSchemaVersion: base.irSchemaVersion,
137
+ commitSpread: base.commitSpread,
138
+ repoCount: base.repoCount,
139
+ notes,
140
+ data: empty,
141
+ });
142
+ }
143
+ const proof = observedNodeIds === undefined ? null : proveOrDisprove(predicted, { visitedNodeIds: observedNodeIds });
144
+ const reachedPages = predicted.reachedPages.map((n) => ({ id: n.id, type: n.type, name: n.name, resolution: 0 }));
145
+ const shapedProposal = { scenario: proposal.scenario, reachedNotProposed: proposal.reachedNotProposed };
146
+ return answer({
147
+ headline: `Predicted ${predicted.reachedPages.length} page/component reached from ${node.name}. Proposed ` +
148
+ `${proposal.scenario.steps.length} navigate step(s) — unaccepted, unsaved, undriven. Proving or ` +
149
+ "disproving this prediction is a human act: drive the app for real and save what happened." +
150
+ (proof === null
151
+ ? ""
152
+ : ` Against the observed evidence supplied: ${proof.proven.length} proven, ${proof.disproven.length} disproven.`),
153
+ // Name-level throughout: a route path is read off a node's qualified name (propose_journey's own cap),
154
+ // never off a type-checked shape.
155
+ resolutionFloor: 0,
156
+ nameLevel: true,
157
+ commitSha: base.commitSha,
158
+ graphBuiltAt: base.graphBuiltAt,
159
+ irSchemaVersion: base.irSchemaVersion,
160
+ commitSpread: base.commitSpread,
161
+ repoCount: base.repoCount,
162
+ notes,
163
+ data: {
164
+ from: briefNode(node),
165
+ reachedPages,
166
+ proposal: shapedProposal,
167
+ proof,
168
+ },
169
+ fitToBudget: (budgetBytes) => fitPredictReach({ from: briefNode(node), proof }, reachedPages, shapedProposal, budgetBytes),
170
+ });
171
+ }
172
+ export const predictReachTool = {
173
+ name: "predict_reach",
174
+ class: "read",
175
+ tier: "evidence",
176
+ version: "1.0.0",
177
+ title: "Predict which pages a data change reaches, and propose a journey to review it",
178
+ description: "Predicts which pages a data change reaches and proposes a navigate-only journey to review " +
179
+ "it. Never drives a browser. Pass observedNodeIds from a real drive to check the prediction.",
180
+ inputSchema: SCHEMA,
181
+ run,
182
+ };
183
+ //# sourceMappingURL=predict-reach.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predict-reach.js","sourceRoot":"","sources":["../../src/tools/predict-reach.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * `propagation` — §11.9 data-flow query. Field-level answers require R3 (§11A.6:
3
+ * shapes need a type checker); below R3, path-level only, labelled as such.
4
+ * `PROPAGATES_TO` now has one narrow producer (`adapter-typescript`'s
5
+ * `extractPropagatesTo`, `descry-adapters`) — single call-argument, no
6
+ * cross-function chasing, by its own doc comment. Multi-hop/interprocedural
7
+ * data-flow chasing does not exist in any adapter yet. An empty walk is still
8
+ * attributed (edge types actually present near the node), never reported as
9
+ * "reaches 0 nodes", since most graphs still have nothing on this edge type. */
10
+ import { type BriefNode, type NodeCandidates, type ToolDefinition } from "./kit.ts";
11
+ /** A node the data can reach, with how far along the walk it sits. */
12
+ export interface ReachedNode extends BriefNode {
13
+ readonly depth: number;
14
+ readonly score: number;
15
+ }
16
+ export interface PropagationReport {
17
+ readonly from: BriefNode;
18
+ /** Capped by `limit`; `reachedTotal` is the uncapped count. */
19
+ readonly reached: readonly ReachedNode[];
20
+ readonly reachedTotal: number;
21
+ /** True only at R3+. False means "where data can flow", not "which field arrives
22
+ * where" — the latter compares shapes, needing a type checker. */
23
+ readonly fieldLevel: boolean;
24
+ /** False when no edge of any walked type touches the start node. Empty `reached`
25
+ * with `analysed: false` means the walk didn't run, not that nothing propagates —
26
+ * the common case, since `PROPAGATES_TO` has only one narrow single-hop producer
27
+ * (`adapter-typescript`) and most graphs still carry none of it. */
28
+ readonly analysed: boolean;
29
+ readonly edgeTypesWalked: readonly string[];
30
+ /** The subset of `edgeTypesWalked` actually found on an edge touching this node. */
31
+ readonly edgeTypesPresent: readonly string[];
32
+ }
33
+ /** One call, two shapes — narrow on `"from" in data`. `NodeCandidates` arrives when
34
+ * the symbol didn't resolve to exactly one node, and nothing was walked. */
35
+ export type PropagationData = PropagationReport | NodeCandidates;
36
+ export declare const propagationTool: ToolDefinition;
37
+ //# sourceMappingURL=propagation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propagation.d.ts","sourceRoot":"","sources":["../../src/tools/propagation.ts"],"names":[],"mappings":"AAAA;;;;;;;;gFAQgF;AAIhF,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAGlB,sEAAsE;AACtE,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;uEACmE;IACnE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B;;;yEAGqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,oFAAoF;IACpF,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED;6EAC6E;AAC7E,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAgKjE,eAAO,MAAM,eAAe,EAAE,cAY7B,CAAC"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * `propagation` — §11.9 data-flow query. Field-level answers require R3 (§11A.6:
3
+ * shapes need a type checker); below R3, path-level only, labelled as such.
4
+ * `PROPAGATES_TO` now has one narrow producer (`adapter-typescript`'s
5
+ * `extractPropagatesTo`, `descry-adapters`) — single call-argument, no
6
+ * cross-function chasing, by its own doc comment. Multi-hop/interprocedural
7
+ * data-flow chasing does not exist in any adapter yet. An empty walk is still
8
+ * attributed (edge types actually present near the node), never reported as
9
+ * "reaches 0 nodes", since most graphs still have nothing on this edge type. */
10
+ import { dataFlowFrom, DATA_FLOW_EDGE_TYPES } from "@descryy/core";
11
+ import { answer, briefNode, optionalInteger, optionalString, optionalStringArray, ToolInputError, } from "./kit.js";
12
+ import { resolveOneNode } from "./lookup.js";
13
+ const SCHEMA = {
14
+ type: "object",
15
+ properties: {
16
+ nodeId: { type: "string", description: "Graph node id to start from." },
17
+ symbol: {
18
+ type: "string",
19
+ description: "Symbol name to start from, when you do not have a node id. Ambiguity is reported rather " +
20
+ "than guessed at — narrow it with \"file\".",
21
+ },
22
+ file: {
23
+ type: "string",
24
+ description: "Repository-relative path, to disambiguate \"symbol\" or to start from a file.",
25
+ },
26
+ edgeTypes: {
27
+ type: "array",
28
+ items: { type: "string" },
29
+ description: "Restrict the walk. Defaults to PROPAGATES_TO, READS, ASSIGNS and RETURNS — the four that " +
30
+ "carry data rather than control. Only one shipped adapter produces PROPAGATES_TO today, and " +
31
+ "only narrowly (single call-argument, no cross-function chasing); no adapter does " +
32
+ "multi-hop/interprocedural data-flow chasing yet, so in most repos this walk still runs " +
33
+ "over the other three; an empty result is disclosed as such rather than reported as " +
34
+ "\"reaches 0 nodes\".",
35
+ },
36
+ maxDepth: { type: "integer", minimum: 1, description: "Hop limit. Default unbounded." },
37
+ limit: {
38
+ type: "integer",
39
+ minimum: 1,
40
+ description: "Cap on nodes in the reply. Default 25 (MK-9 — the same walk-cost reduction impact.ts " +
41
+ "applies, for the same reason). A capped reply always discloses shown/total; raise this " +
42
+ "explicitly when the full set is needed.",
43
+ },
44
+ },
45
+ additionalProperties: false,
46
+ };
47
+ async function run(args, ctx) {
48
+ const nodeId = optionalString(args, "nodeId");
49
+ const symbol = optionalString(args, "symbol");
50
+ const file = optionalString(args, "file");
51
+ const edgeTypes = optionalStringArray(args, "edgeTypes");
52
+ const maxDepth = optionalInteger(args, "maxDepth", 1);
53
+ const limit = optionalInteger(args, "limit", 1) ?? 25;
54
+ if (nodeId === undefined && symbol === undefined && file === undefined) {
55
+ throw new ToolInputError('give one of "nodeId", "symbol" or "file"');
56
+ }
57
+ const found = resolveOneNode(ctx.session, { nodeId, symbol, file });
58
+ if (found.node === null) {
59
+ const base = ctx.session.provider().baseStamp();
60
+ return answer({
61
+ headline: found.headline,
62
+ state: "refused",
63
+ nameLevel: true,
64
+ resolutionFloor: 0,
65
+ commitSha: base.commitSha,
66
+ graphBuiltAt: base.graphBuiltAt,
67
+ irSchemaVersion: base.irSchemaVersion,
68
+ commitSpread: base.commitSpread,
69
+ repoCount: base.repoCount,
70
+ notes: found.notes,
71
+ data: { candidates: found.candidates.map(briefNode) },
72
+ });
73
+ }
74
+ ctx.progress(`Following data out of ${found.node.name}`);
75
+ const flow = dataFlowFrom(ctx.session.provider(), found.node.id, {
76
+ ...(maxDepth === undefined ? {} : { maxDepth }),
77
+ ...(edgeTypes === undefined ? {} : { types: edgeTypes }),
78
+ });
79
+ const reached = flow.data.filter((entry) => entry.node.id !== found.node?.id);
80
+ const shown = reached.slice(0, limit);
81
+ const notes = [...found.notes, ...flow.notes];
82
+ if (shown.length < reached.length) {
83
+ notes.push(`${reached.length - shown.length} further node(s) are on the path but not listed — the reply ` +
84
+ `is capped at ${limit}.`);
85
+ }
86
+ // Which walked edge types exist around the start node — the baseline precondition.
87
+ // None present means "reaches 0 nodes" is a statement about the graph, not the symbol.
88
+ const walked = edgeTypes ?? DATA_FLOW_EDGE_TYPES;
89
+ const present = new Set();
90
+ for (const edge of [
91
+ ...ctx.session.provider().outgoing(found.node.id),
92
+ ...ctx.session.provider().incoming(found.node.id),
93
+ ]) {
94
+ if (walked.includes(edge.type))
95
+ present.add(edge.type);
96
+ }
97
+ const absent = walked.filter((type) => !present.has(type));
98
+ const analysed = present.size > 0;
99
+ if (absent.length > 0) {
100
+ notes.push(`No ${absent.join(", ")} edge touches this node, so ${absent.length === 1 ? "that type" : "those types"} ` +
101
+ "contributed nothing to this answer.");
102
+ }
103
+ if (!analysed) {
104
+ notes.push(`None of the requested edge types (${walked.join(", ")}) appear on any edge touching this node, ` +
105
+ "so the walk had nothing to follow. That is not a finding that no data leaves this symbol: " +
106
+ "no adapter configured here emitting these edge types at all (PROPAGATES_TO's only shipped " +
107
+ "producer today is narrow single-hop and may simply not have fired here), a " +
108
+ "graph built without the source that would carry them, and a symbol that genuinely " +
109
+ "propagates nothing are three different situations. This probe is local to one node and " +
110
+ "cannot tell them apart — it reports that the walk did not run rather than choosing between them.");
111
+ }
112
+ const fieldLevel = flow.stamp.resolutionFloor >= 3;
113
+ return {
114
+ result: {
115
+ ...flow,
116
+ data: {
117
+ from: briefNode(found.node),
118
+ reached: shown.map((entry) => ({
119
+ ...briefNode(entry.node),
120
+ depth: entry.depth,
121
+ score: Number(entry.score.toFixed(4)),
122
+ })),
123
+ reachedTotal: reached.length,
124
+ fieldLevel,
125
+ /** False when no edge of any walked type touches the start node — empty
126
+ * `reached` with this false means the walk didn't run. Mirrors `HiddenDependencyReport`. */
127
+ analysed,
128
+ edgeTypesWalked: walked,
129
+ edgeTypesPresent: [...present].sort(),
130
+ },
131
+ notes,
132
+ },
133
+ ...(analysed ? (reached.length === 0 ? { state: "empty" } : {}) : { state: "refused" }),
134
+ // Never name-level — §11A.5's R2/class-A carve-out is for existence facts (a
135
+ // missing env var), not a data-flow shape claim. R2 stays capped at B here;
136
+ // only R3/R4 reach A, the conservative "when in doubt, understate" reading.
137
+ nameLevel: false,
138
+ // The headline is what a user acts on — not-analysable gets its own sentence
139
+ // rather than reusing "reaches 0 node(s)" with a note beneath it (a zero in the
140
+ // headline reads as a measurement regardless of the notes).
141
+ headline: !analysed
142
+ ? `Data flow out of ${found.node.name} was not analysed: the graph holds no ` +
143
+ `${walked.join("/")} edge touching it. This is not a finding that nothing propagates.`
144
+ : fieldLevel
145
+ ? `Data from ${found.node.name} reaches ${reached.length} node(s), at field level.`
146
+ : `${found.node.name} can reach ${reached.length} node(s). This is where data *can* flow, ` +
147
+ "not which field arrives where — that needs R3.",
148
+ };
149
+ }
150
+ export const propagationTool = {
151
+ name: "propagation",
152
+ class: "read",
153
+ tier: "evidence",
154
+ version: "1.0.0",
155
+ title: "Where does this data end up?",
156
+ description: "Follow a value from a symbol or field through the graph along the edges that carry data. " +
157
+ "Field-level answers require a type checker (R3); below that the answer is path-level and " +
158
+ "labelled as such rather than overstated.",
159
+ inputSchema: SCHEMA,
160
+ run,
161
+ };
162
+ //# sourceMappingURL=propagation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propagation.js","sourceRoot":"","sources":["../../src/tools/propagation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `propose_journey` — the planner, exposed. Lane A1, item 5: proposes a
3
+ * journey from the `PAGE`/`COMPONENT` nodes a diff scope touches; never
4
+ * writes, never drives a browser, never executes anything. See
5
+ * `../planner/propose-journey.ts` for what "propose, never invent" means
6
+ * structurally.
7
+ */
8
+ import { type JourneyCandidateNode } from "../planner/propose-journey.ts";
9
+ import { type Scenario } from "../scenarios/index.ts";
10
+ import { type ToolDefinition } from "./kit.ts";
11
+ export interface ProposeJourneyData {
12
+ readonly scenario: Scenario;
13
+ readonly reachedNotProposed: readonly JourneyCandidateNode[];
14
+ }
15
+ export declare const proposeJourneyTool: ToolDefinition;
16
+ //# sourceMappingURL=propose-journey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose-journey.d.ts","sourceRoot":"","sources":["../../src/tools/propose-journey.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1F,OAAO,EAA2B,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAKlB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAC9D;AA6HD,eAAO,MAAM,kBAAkB,EAAE,cAWhC,CAAC"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * `propose_journey` — the planner, exposed. Lane A1, item 5: proposes a
3
+ * journey from the `PAGE`/`COMPONENT` nodes a diff scope touches; never
4
+ * writes, never drives a browser, never executes anything. See
5
+ * `../planner/propose-journey.ts` for what "propose, never invent" means
6
+ * structurally.
7
+ */
8
+ import { nodesInFiles, scopeChange } from "@descryy/core";
9
+ import { proposeJourney } from "../planner/propose-journey.js";
10
+ import { SCENARIO_SCHEMA_VERSION } from "../scenarios/index.js";
11
+ import { optionalString, optionalStringArray, requiredString, ToolInputError, } from "./kit.js";
12
+ import { capBySize, sizeCapNote } from "../capped.js";
13
+ import { answer } from "./kit.js";
14
+ const SCHEMA = {
15
+ type: "object",
16
+ properties: {
17
+ files: {
18
+ type: "array",
19
+ items: { type: "string" },
20
+ description: "Paths that are changing. Same seeding as change_scope.",
21
+ },
22
+ nodeIds: {
23
+ type: "array",
24
+ items: { type: "string" },
25
+ description: "Node ids to seed with, instead of or with files.",
26
+ },
27
+ targetUrl: {
28
+ type: "string",
29
+ description: "REQUIRED. Base URL. Never inferred.",
30
+ },
31
+ name: {
32
+ type: "string",
33
+ description: "Name for the proposed scenario. Default \"proposed-journey\".",
34
+ },
35
+ },
36
+ required: ["targetUrl"],
37
+ additionalProperties: false,
38
+ };
39
+ function fitProposeJourney(scenario, reachedNotProposed, budgetBytes) {
40
+ const scaffoldBytes = Buffer.byteLength(JSON.stringify({ scenario, reachedNotProposed: [] }), "utf8");
41
+ const fit = capBySize(reachedNotProposed, budgetBytes, scaffoldBytes);
42
+ const notes = fit.droppedForSize === 0
43
+ ? []
44
+ : [sizeCapNote("reached-not-proposed node", fit.shown.length, reachedNotProposed.length, fit.droppedForSize)];
45
+ return {
46
+ data: { scenario, reachedNotProposed: fit.shown },
47
+ notes,
48
+ ...(fit.droppedForSize === 0
49
+ ? {}
50
+ : { truncatedDetail: { shown: fit.shown.length, total: reachedNotProposed.length, more: null } }),
51
+ };
52
+ }
53
+ async function run(args, ctx) {
54
+ const targetUrl = requiredString(args, "targetUrl");
55
+ const name = optionalString(args, "name") ?? "proposed-journey";
56
+ const files = optionalStringArray(args, "files") ?? [];
57
+ const seedIds = [...(optionalStringArray(args, "nodeIds") ?? [])];
58
+ if (files.length === 0 && seedIds.length === 0) {
59
+ throw new ToolInputError('give at least one of "files" or "nodeIds" — the planner proposes from a diff scope, and a diff scope needs a seed');
60
+ }
61
+ const session = ctx.session;
62
+ if (files.length > 0) {
63
+ const { nodes } = nodesInFiles(session.store().driver, files);
64
+ for (const node of nodes)
65
+ seedIds.push(node.id);
66
+ }
67
+ const base = session.provider().baseStamp();
68
+ const empty = {
69
+ scenario: {
70
+ schemaVersion: SCENARIO_SCHEMA_VERSION,
71
+ name,
72
+ description: null,
73
+ targetUrl,
74
+ savedAt: new Date().toISOString(),
75
+ savedAtCommit: "",
76
+ steps: [],
77
+ assertions: [],
78
+ },
79
+ reachedNotProposed: [],
80
+ };
81
+ if (seedIds.length === 0) {
82
+ return answer({
83
+ headline: "Nothing in the graph matches what you named, so no journey could be proposed.",
84
+ state: "refused",
85
+ nameLevel: true,
86
+ resolutionFloor: 0,
87
+ commitSha: base.commitSha,
88
+ graphBuiltAt: base.graphBuiltAt,
89
+ irSchemaVersion: base.irSchemaVersion,
90
+ commitSpread: base.commitSpread,
91
+ repoCount: base.repoCount,
92
+ notes: ["This is not a claim that the change touches no pages. No seed node was found, so the scope traversal never ran."],
93
+ data: empty,
94
+ });
95
+ }
96
+ const scoped = scopeChange(session.provider(), [...new Set(seedIds)], { trigger: "pr" });
97
+ const candidates = [...scoped.data.changed, ...scoped.data.affected].map((s) => ({
98
+ id: s.node.id,
99
+ type: s.node.type,
100
+ name: s.node.name,
101
+ }));
102
+ const proposal = proposeJourney(candidates, { targetUrl, name, savedAtCommit: base.commitSha ?? "" });
103
+ return answer({
104
+ headline: proposal.scenario.steps.length === 0
105
+ ? "No page-shaped route was found in scope — nothing proposed."
106
+ : `Proposed ${proposal.scenario.steps.length} navigate step(s), unaccepted and unsaved.`,
107
+ // Name-level: a route path is read straight off a node's qualified name, never off a
108
+ // type-checked shape — the same cap `scope.ts` applies to its own reply.
109
+ resolutionFloor: 0,
110
+ nameLevel: true,
111
+ commitSha: base.commitSha,
112
+ graphBuiltAt: base.graphBuiltAt,
113
+ irSchemaVersion: base.irSchemaVersion,
114
+ commitSpread: base.commitSpread,
115
+ repoCount: base.repoCount,
116
+ notes: [...scoped.notes, ...proposal.notes],
117
+ data: { scenario: proposal.scenario, reachedNotProposed: proposal.reachedNotProposed },
118
+ fitToBudget: (budgetBytes) => fitProposeJourney(proposal.scenario, proposal.reachedNotProposed, budgetBytes),
119
+ });
120
+ }
121
+ export const proposeJourneyTool = {
122
+ name: "propose_journey",
123
+ title: "Propose a journey from a diff's affected pages",
124
+ description: "Proposes a navigate-only scenario from the pages a change touches — a value in this reply, " +
125
+ "never driven or saved. A human drives it for real if accepted and saves the result.",
126
+ class: "read",
127
+ tier: "evidence",
128
+ version: "1.0.0",
129
+ inputSchema: SCHEMA,
130
+ run,
131
+ };
132
+ //# sourceMappingURL=propose-journey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose-journey.js","sourceRoot":"","sources":["../../src/tools/propose-journey.ts"],"names":[],"mappings":"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"}