codegraph-java 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (866) hide show
  1. package/README.md +131 -0
  2. package/dist/base-graph/index.d.ts +57 -0
  3. package/dist/base-graph/index.d.ts.map +1 -0
  4. package/dist/base-graph/index.js +175 -0
  5. package/dist/base-graph/index.js.map +1 -0
  6. package/dist/bin/codegraph.d.ts +28 -0
  7. package/dist/bin/codegraph.d.ts.map +1 -0
  8. package/dist/bin/codegraph.js +2615 -0
  9. package/dist/bin/codegraph.js.map +1 -0
  10. package/dist/bin/command-supervision.d.ts +49 -0
  11. package/dist/bin/command-supervision.d.ts.map +1 -0
  12. package/dist/bin/command-supervision.js +95 -0
  13. package/dist/bin/command-supervision.js.map +1 -0
  14. package/dist/bin/fatal-handler.d.ts +20 -0
  15. package/dist/bin/fatal-handler.d.ts.map +1 -0
  16. package/dist/bin/fatal-handler.js +118 -0
  17. package/dist/bin/fatal-handler.js.map +1 -0
  18. package/dist/bin/node-version-check.d.ts +45 -0
  19. package/dist/bin/node-version-check.d.ts.map +1 -0
  20. package/dist/bin/node-version-check.js +98 -0
  21. package/dist/bin/node-version-check.js.map +1 -0
  22. package/dist/bin/uninstall.d.ts +14 -0
  23. package/dist/bin/uninstall.d.ts.map +1 -0
  24. package/dist/bin/uninstall.js +36 -0
  25. package/dist/bin/uninstall.js.map +1 -0
  26. package/dist/context/formatter.d.ts +36 -0
  27. package/dist/context/formatter.d.ts.map +1 -0
  28. package/dist/context/formatter.js +269 -0
  29. package/dist/context/formatter.js.map +1 -0
  30. package/dist/context/index.d.ts +131 -0
  31. package/dist/context/index.d.ts.map +1 -0
  32. package/dist/context/index.js +1378 -0
  33. package/dist/context/index.js.map +1 -0
  34. package/dist/context/markers.d.ts +19 -0
  35. package/dist/context/markers.d.ts.map +1 -0
  36. package/dist/context/markers.js +22 -0
  37. package/dist/context/markers.js.map +1 -0
  38. package/dist/db/index.d.ts +380 -0
  39. package/dist/db/index.d.ts.map +1 -0
  40. package/dist/db/index.js +854 -0
  41. package/dist/db/index.js.map +1 -0
  42. package/dist/db/migrations.d.ts +44 -0
  43. package/dist/db/migrations.d.ts.map +1 -0
  44. package/dist/db/migrations.js +255 -0
  45. package/dist/db/migrations.js.map +1 -0
  46. package/dist/db/queries.d.ts +1060 -0
  47. package/dist/db/queries.d.ts.map +1 -0
  48. package/dist/db/queries.js +3191 -0
  49. package/dist/db/queries.js.map +1 -0
  50. package/dist/db/schema.sql +209 -0
  51. package/dist/db/sqlite-adapter.d.ts +55 -0
  52. package/dist/db/sqlite-adapter.d.ts.map +1 -0
  53. package/dist/db/sqlite-adapter.js +135 -0
  54. package/dist/db/sqlite-adapter.js.map +1 -0
  55. package/dist/db/wal-valve.d.ts +119 -0
  56. package/dist/db/wal-valve.d.ts.map +1 -0
  57. package/dist/db/wal-valve.js +290 -0
  58. package/dist/db/wal-valve.js.map +1 -0
  59. package/dist/directory.d.ts +213 -0
  60. package/dist/directory.d.ts.map +1 -0
  61. package/dist/directory.js +781 -0
  62. package/dist/directory.js.map +1 -0
  63. package/dist/errors.d.ts +150 -0
  64. package/dist/errors.d.ts.map +1 -0
  65. package/dist/errors.js +234 -0
  66. package/dist/errors.js.map +1 -0
  67. package/dist/extraction/extraction-version.d.ts +25 -0
  68. package/dist/extraction/extraction-version.d.ts.map +1 -0
  69. package/dist/extraction/extraction-version.js +28 -0
  70. package/dist/extraction/extraction-version.js.map +1 -0
  71. package/dist/extraction/function-ref.d.ts +118 -0
  72. package/dist/extraction/function-ref.d.ts.map +1 -0
  73. package/dist/extraction/function-ref.js +746 -0
  74. package/dist/extraction/function-ref.js.map +1 -0
  75. package/dist/extraction/generated-detection.d.ts +66 -0
  76. package/dist/extraction/generated-detection.d.ts.map +1 -0
  77. package/dist/extraction/generated-detection.js +248 -0
  78. package/dist/extraction/generated-detection.js.map +1 -0
  79. package/dist/extraction/grammars.d.ts +148 -0
  80. package/dist/extraction/grammars.d.ts.map +1 -0
  81. package/dist/extraction/grammars.js +558 -0
  82. package/dist/extraction/grammars.js.map +1 -0
  83. package/dist/extraction/index.d.ts +367 -0
  84. package/dist/extraction/index.d.ts.map +1 -0
  85. package/dist/extraction/index.js +2833 -0
  86. package/dist/extraction/index.js.map +1 -0
  87. package/dist/extraction/kernel/decode.d.ts +9 -0
  88. package/dist/extraction/kernel/decode.d.ts.map +1 -0
  89. package/dist/extraction/kernel/decode.js +162 -0
  90. package/dist/extraction/kernel/decode.js.map +1 -0
  91. package/dist/extraction/kernel/index.d.ts +64 -0
  92. package/dist/extraction/kernel/index.d.ts.map +1 -0
  93. package/dist/extraction/kernel/index.js +204 -0
  94. package/dist/extraction/kernel/index.js.map +1 -0
  95. package/dist/extraction/kernel/layout.d.ts +101 -0
  96. package/dist/extraction/kernel/layout.d.ts.map +1 -0
  97. package/dist/extraction/kernel/layout.js +104 -0
  98. package/dist/extraction/kernel/layout.js.map +1 -0
  99. package/dist/extraction/kernel/loader.d.ts +103 -0
  100. package/dist/extraction/kernel/loader.d.ts.map +1 -0
  101. package/dist/extraction/kernel/loader.js +146 -0
  102. package/dist/extraction/kernel/loader.js.map +1 -0
  103. package/dist/extraction/languages/c-cpp.d.ts +124 -0
  104. package/dist/extraction/languages/c-cpp.d.ts.map +1 -0
  105. package/dist/extraction/languages/c-cpp.js +1689 -0
  106. package/dist/extraction/languages/c-cpp.js.map +1 -0
  107. package/dist/extraction/languages/index.d.ts +11 -0
  108. package/dist/extraction/languages/index.d.ts.map +1 -0
  109. package/dist/extraction/languages/index.js +15 -0
  110. package/dist/extraction/languages/index.js.map +1 -0
  111. package/dist/extraction/languages/java.d.ts +3 -0
  112. package/dist/extraction/languages/java.d.ts.map +1 -0
  113. package/dist/extraction/languages/java.js +315 -0
  114. package/dist/extraction/languages/java.js.map +1 -0
  115. package/dist/extraction/languages/rust.d.ts +23 -0
  116. package/dist/extraction/languages/rust.d.ts.map +1 -0
  117. package/dist/extraction/languages/rust.js +169 -0
  118. package/dist/extraction/languages/rust.js.map +1 -0
  119. package/dist/extraction/parse-pool.d.ts +167 -0
  120. package/dist/extraction/parse-pool.d.ts.map +1 -0
  121. package/dist/extraction/parse-pool.js +421 -0
  122. package/dist/extraction/parse-pool.js.map +1 -0
  123. package/dist/extraction/parse-worker.d.ts +8 -0
  124. package/dist/extraction/parse-worker.d.ts.map +1 -0
  125. package/dist/extraction/parse-worker.js +138 -0
  126. package/dist/extraction/parse-worker.js.map +1 -0
  127. package/dist/extraction/store-worker.d.ts +24 -0
  128. package/dist/extraction/store-worker.d.ts.map +1 -0
  129. package/dist/extraction/store-worker.js +139 -0
  130. package/dist/extraction/store-worker.js.map +1 -0
  131. package/dist/extraction/store-writer.d.ts +63 -0
  132. package/dist/extraction/store-writer.d.ts.map +1 -0
  133. package/dist/extraction/store-writer.js +174 -0
  134. package/dist/extraction/store-writer.js.map +1 -0
  135. package/dist/extraction/syntax-tokens.d.ts +103 -0
  136. package/dist/extraction/syntax-tokens.d.ts.map +1 -0
  137. package/dist/extraction/syntax-tokens.js +381 -0
  138. package/dist/extraction/syntax-tokens.js.map +1 -0
  139. package/dist/extraction/tree-sitter-helpers.d.ts +28 -0
  140. package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -0
  141. package/dist/extraction/tree-sitter-helpers.js +153 -0
  142. package/dist/extraction/tree-sitter-helpers.js.map +1 -0
  143. package/dist/extraction/tree-sitter-types.d.ts +260 -0
  144. package/dist/extraction/tree-sitter-types.d.ts.map +1 -0
  145. package/dist/extraction/tree-sitter-types.js +10 -0
  146. package/dist/extraction/tree-sitter-types.js.map +1 -0
  147. package/dist/extraction/tree-sitter.d.ts +745 -0
  148. package/dist/extraction/tree-sitter.d.ts.map +1 -0
  149. package/dist/extraction/tree-sitter.js +6725 -0
  150. package/dist/extraction/tree-sitter.js.map +1 -0
  151. package/dist/extraction/wasm/tree-sitter-java.wasm +0 -0
  152. package/dist/extraction/wasm-runtime-flags.d.ts +53 -0
  153. package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -0
  154. package/dist/extraction/wasm-runtime-flags.js +130 -0
  155. package/dist/extraction/wasm-runtime-flags.js.map +1 -0
  156. package/dist/graph/branch-guards.d.ts +248 -0
  157. package/dist/graph/branch-guards.d.ts.map +1 -0
  158. package/dist/graph/branch-guards.js +2231 -0
  159. package/dist/graph/branch-guards.js.map +1 -0
  160. package/dist/graph/dead-code.d.ts +251 -0
  161. package/dist/graph/dead-code.d.ts.map +1 -0
  162. package/dist/graph/dead-code.js +756 -0
  163. package/dist/graph/dead-code.js.map +1 -0
  164. package/dist/graph/dynamic-boundary-report.d.ts +121 -0
  165. package/dist/graph/dynamic-boundary-report.d.ts.map +1 -0
  166. package/dist/graph/dynamic-boundary-report.js +283 -0
  167. package/dist/graph/dynamic-boundary-report.js.map +1 -0
  168. package/dist/graph/index.d.ts +12 -0
  169. package/dist/graph/index.d.ts.map +1 -0
  170. package/dist/graph/index.js +28 -0
  171. package/dist/graph/index.js.map +1 -0
  172. package/dist/graph/named-symbol-flow.d.ts +153 -0
  173. package/dist/graph/named-symbol-flow.d.ts.map +1 -0
  174. package/dist/graph/named-symbol-flow.js +609 -0
  175. package/dist/graph/named-symbol-flow.js.map +1 -0
  176. package/dist/graph/queries.d.ts +106 -0
  177. package/dist/graph/queries.d.ts.map +1 -0
  178. package/dist/graph/queries.js +341 -0
  179. package/dist/graph/queries.js.map +1 -0
  180. package/dist/graph/traversal.d.ts +127 -0
  181. package/dist/graph/traversal.d.ts.map +1 -0
  182. package/dist/graph/traversal.js +599 -0
  183. package/dist/graph/traversal.js.map +1 -0
  184. package/dist/graph/type-hierarchy.d.ts +155 -0
  185. package/dist/graph/type-hierarchy.d.ts.map +1 -0
  186. package/dist/graph/type-hierarchy.js +382 -0
  187. package/dist/graph/type-hierarchy.js.map +1 -0
  188. package/dist/index.d.ts +886 -0
  189. package/dist/index.d.ts.map +1 -0
  190. package/dist/index.js +2019 -0
  191. package/dist/index.js.map +1 -0
  192. package/dist/installer/beta-signup.d.ts +54 -0
  193. package/dist/installer/beta-signup.d.ts.map +1 -0
  194. package/dist/installer/beta-signup.js +178 -0
  195. package/dist/installer/beta-signup.js.map +1 -0
  196. package/dist/installer/config-writer.d.ts +28 -0
  197. package/dist/installer/config-writer.d.ts.map +1 -0
  198. package/dist/installer/config-writer.js +91 -0
  199. package/dist/installer/config-writer.js.map +1 -0
  200. package/dist/installer/index.d.ts +143 -0
  201. package/dist/installer/index.d.ts.map +1 -0
  202. package/dist/installer/index.js +632 -0
  203. package/dist/installer/index.js.map +1 -0
  204. package/dist/installer/instructions-template.d.ts +41 -0
  205. package/dist/installer/instructions-template.d.ts.map +1 -0
  206. package/dist/installer/instructions-template.js +53 -0
  207. package/dist/installer/instructions-template.js.map +1 -0
  208. package/dist/installer/targets/antigravity.d.ts +57 -0
  209. package/dist/installer/targets/antigravity.d.ts.map +1 -0
  210. package/dist/installer/targets/antigravity.js +308 -0
  211. package/dist/installer/targets/antigravity.js.map +1 -0
  212. package/dist/installer/targets/claude.d.ts +62 -0
  213. package/dist/installer/targets/claude.d.ts.map +1 -0
  214. package/dist/installer/targets/claude.js +486 -0
  215. package/dist/installer/targets/claude.js.map +1 -0
  216. package/dist/installer/targets/codex.d.ts +32 -0
  217. package/dist/installer/targets/codex.d.ts.map +1 -0
  218. package/dist/installer/targets/codex.js +202 -0
  219. package/dist/installer/targets/codex.js.map +1 -0
  220. package/dist/installer/targets/copilot-cli.d.ts +32 -0
  221. package/dist/installer/targets/copilot-cli.d.ts.map +1 -0
  222. package/dist/installer/targets/copilot-cli.js +209 -0
  223. package/dist/installer/targets/copilot-cli.js.map +1 -0
  224. package/dist/installer/targets/copilot-jetbrains.d.ts +42 -0
  225. package/dist/installer/targets/copilot-jetbrains.d.ts.map +1 -0
  226. package/dist/installer/targets/copilot-jetbrains.js +238 -0
  227. package/dist/installer/targets/copilot-jetbrains.js.map +1 -0
  228. package/dist/installer/targets/copilot-vscode.d.ts +47 -0
  229. package/dist/installer/targets/copilot-vscode.d.ts.map +1 -0
  230. package/dist/installer/targets/copilot-vscode.js +219 -0
  231. package/dist/installer/targets/copilot-vscode.js.map +1 -0
  232. package/dist/installer/targets/cursor.d.ts +35 -0
  233. package/dist/installer/targets/cursor.d.ts.map +1 -0
  234. package/dist/installer/targets/cursor.js +254 -0
  235. package/dist/installer/targets/cursor.js.map +1 -0
  236. package/dist/installer/targets/gemini.d.ts +26 -0
  237. package/dist/installer/targets/gemini.d.ts.map +1 -0
  238. package/dist/installer/targets/gemini.js +165 -0
  239. package/dist/installer/targets/gemini.js.map +1 -0
  240. package/dist/installer/targets/hermes.d.ts +18 -0
  241. package/dist/installer/targets/hermes.d.ts.map +1 -0
  242. package/dist/installer/targets/hermes.js +359 -0
  243. package/dist/installer/targets/hermes.js.map +1 -0
  244. package/dist/installer/targets/kiro.d.ts +27 -0
  245. package/dist/installer/targets/kiro.d.ts.map +1 -0
  246. package/dist/installer/targets/kiro.js +178 -0
  247. package/dist/installer/targets/kiro.js.map +1 -0
  248. package/dist/installer/targets/opencode.d.ts +38 -0
  249. package/dist/installer/targets/opencode.d.ts.map +1 -0
  250. package/dist/installer/targets/opencode.js +288 -0
  251. package/dist/installer/targets/opencode.js.map +1 -0
  252. package/dist/installer/targets/registry.d.ts +35 -0
  253. package/dist/installer/targets/registry.d.ts.map +1 -0
  254. package/dist/installer/targets/registry.js +101 -0
  255. package/dist/installer/targets/registry.js.map +1 -0
  256. package/dist/installer/targets/shared.d.ts +101 -0
  257. package/dist/installer/targets/shared.d.ts.map +1 -0
  258. package/dist/installer/targets/shared.js +264 -0
  259. package/dist/installer/targets/shared.js.map +1 -0
  260. package/dist/installer/targets/toml.d.ts +53 -0
  261. package/dist/installer/targets/toml.d.ts.map +1 -0
  262. package/dist/installer/targets/toml.js +226 -0
  263. package/dist/installer/targets/toml.js.map +1 -0
  264. package/dist/installer/targets/trae.d.ts +30 -0
  265. package/dist/installer/targets/trae.d.ts.map +1 -0
  266. package/dist/installer/targets/trae.js +164 -0
  267. package/dist/installer/targets/trae.js.map +1 -0
  268. package/dist/installer/targets/types.d.ts +108 -0
  269. package/dist/installer/targets/types.d.ts.map +1 -0
  270. package/dist/installer/targets/types.js +16 -0
  271. package/dist/installer/targets/types.js.map +1 -0
  272. package/dist/installer/targets/workbuddy.d.ts +29 -0
  273. package/dist/installer/targets/workbuddy.d.ts.map +1 -0
  274. package/dist/installer/targets/workbuddy.js +163 -0
  275. package/dist/installer/targets/workbuddy.js.map +1 -0
  276. package/dist/mcp/daemon-manager.d.ts +42 -0
  277. package/dist/mcp/daemon-manager.d.ts.map +1 -0
  278. package/dist/mcp/daemon-manager.js +129 -0
  279. package/dist/mcp/daemon-manager.js.map +1 -0
  280. package/dist/mcp/daemon-paths.d.ts +79 -0
  281. package/dist/mcp/daemon-paths.d.ts.map +1 -0
  282. package/dist/mcp/daemon-paths.js +219 -0
  283. package/dist/mcp/daemon-paths.js.map +1 -0
  284. package/dist/mcp/daemon-registry.d.ts +57 -0
  285. package/dist/mcp/daemon-registry.d.ts.map +1 -0
  286. package/dist/mcp/daemon-registry.js +281 -0
  287. package/dist/mcp/daemon-registry.js.map +1 -0
  288. package/dist/mcp/daemon.d.ts +293 -0
  289. package/dist/mcp/daemon.d.ts.map +1 -0
  290. package/dist/mcp/daemon.js +864 -0
  291. package/dist/mcp/daemon.js.map +1 -0
  292. package/dist/mcp/dynamic-boundaries.d.ts +41 -0
  293. package/dist/mcp/dynamic-boundaries.d.ts.map +1 -0
  294. package/dist/mcp/dynamic-boundaries.js +360 -0
  295. package/dist/mcp/dynamic-boundaries.js.map +1 -0
  296. package/dist/mcp/early-ppid.d.ts +26 -0
  297. package/dist/mcp/early-ppid.d.ts.map +1 -0
  298. package/dist/mcp/early-ppid.js +29 -0
  299. package/dist/mcp/early-ppid.js.map +1 -0
  300. package/dist/mcp/engine.d.ts +125 -0
  301. package/dist/mcp/engine.d.ts.map +1 -0
  302. package/dist/mcp/engine.js +392 -0
  303. package/dist/mcp/engine.js.map +1 -0
  304. package/dist/mcp/explore-dedup.d.ts +137 -0
  305. package/dist/mcp/explore-dedup.d.ts.map +1 -0
  306. package/dist/mcp/explore-dedup.js +236 -0
  307. package/dist/mcp/explore-dedup.js.map +1 -0
  308. package/dist/mcp/explore-diagnostics.d.ts +289 -0
  309. package/dist/mcp/explore-diagnostics.d.ts.map +1 -0
  310. package/dist/mcp/explore-diagnostics.js +558 -0
  311. package/dist/mcp/explore-diagnostics.js.map +1 -0
  312. package/dist/mcp/explore-session-state.d.ts +217 -0
  313. package/dist/mcp/explore-session-state.d.ts.map +1 -0
  314. package/dist/mcp/explore-session-state.js +322 -0
  315. package/dist/mcp/explore-session-state.js.map +1 -0
  316. package/dist/mcp/index.d.ts +137 -0
  317. package/dist/mcp/index.d.ts.map +1 -0
  318. package/dist/mcp/index.js +567 -0
  319. package/dist/mcp/index.js.map +1 -0
  320. package/dist/mcp/liveness-watchdog.d.ts +35 -0
  321. package/dist/mcp/liveness-watchdog.d.ts.map +1 -0
  322. package/dist/mcp/liveness-watchdog.js +269 -0
  323. package/dist/mcp/liveness-watchdog.js.map +1 -0
  324. package/dist/mcp/ppid-watchdog.d.ts +62 -0
  325. package/dist/mcp/ppid-watchdog.d.ts.map +1 -0
  326. package/dist/mcp/ppid-watchdog.js +64 -0
  327. package/dist/mcp/ppid-watchdog.js.map +1 -0
  328. package/dist/mcp/proxy.d.ts +87 -0
  329. package/dist/mcp/proxy.d.ts.map +1 -0
  330. package/dist/mcp/proxy.js +672 -0
  331. package/dist/mcp/proxy.js.map +1 -0
  332. package/dist/mcp/query-pool.d.ts +108 -0
  333. package/dist/mcp/query-pool.d.ts.map +1 -0
  334. package/dist/mcp/query-pool.js +315 -0
  335. package/dist/mcp/query-pool.js.map +1 -0
  336. package/dist/mcp/query-worker.d.ts +24 -0
  337. package/dist/mcp/query-worker.d.ts.map +1 -0
  338. package/dist/mcp/query-worker.js +87 -0
  339. package/dist/mcp/query-worker.js.map +1 -0
  340. package/dist/mcp/server-instructions.d.ts +34 -0
  341. package/dist/mcp/server-instructions.d.ts.map +1 -0
  342. package/dist/mcp/server-instructions.js +111 -0
  343. package/dist/mcp/server-instructions.js.map +1 -0
  344. package/dist/mcp/session.d.ts +109 -0
  345. package/dist/mcp/session.d.ts.map +1 -0
  346. package/dist/mcp/session.js +380 -0
  347. package/dist/mcp/session.js.map +1 -0
  348. package/dist/mcp/startup-handshake.d.ts +44 -0
  349. package/dist/mcp/startup-handshake.d.ts.map +1 -0
  350. package/dist/mcp/startup-handshake.js +73 -0
  351. package/dist/mcp/startup-handshake.js.map +1 -0
  352. package/dist/mcp/stdin-teardown.d.ts +27 -0
  353. package/dist/mcp/stdin-teardown.d.ts.map +1 -0
  354. package/dist/mcp/stdin-teardown.js +49 -0
  355. package/dist/mcp/stdin-teardown.js.map +1 -0
  356. package/dist/mcp/tools.d.ts +877 -0
  357. package/dist/mcp/tools.d.ts.map +1 -0
  358. package/dist/mcp/tools.js +6371 -0
  359. package/dist/mcp/tools.js.map +1 -0
  360. package/dist/mcp/transport.d.ts +188 -0
  361. package/dist/mcp/transport.d.ts.map +1 -0
  362. package/dist/mcp/transport.js +377 -0
  363. package/dist/mcp/transport.js.map +1 -0
  364. package/dist/mcp/version.d.ts +19 -0
  365. package/dist/mcp/version.d.ts.map +1 -0
  366. package/dist/mcp/version.js +71 -0
  367. package/dist/mcp/version.js.map +1 -0
  368. package/dist/project-config.d.ts +158 -0
  369. package/dist/project-config.d.ts.map +1 -0
  370. package/dist/project-config.js +489 -0
  371. package/dist/project-config.js.map +1 -0
  372. package/dist/resolution/c-fnptr-synthesizer.d.ts +6 -0
  373. package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -0
  374. package/dist/resolution/c-fnptr-synthesizer.js +1506 -0
  375. package/dist/resolution/c-fnptr-synthesizer.js.map +1 -0
  376. package/dist/resolution/callback-synthesizer.d.ts +59 -0
  377. package/dist/resolution/callback-synthesizer.d.ts.map +1 -0
  378. package/dist/resolution/callback-synthesizer.js +4066 -0
  379. package/dist/resolution/callback-synthesizer.js.map +1 -0
  380. package/dist/resolution/cooperative-yield.d.ts +40 -0
  381. package/dist/resolution/cooperative-yield.d.ts.map +1 -0
  382. package/dist/resolution/cooperative-yield.js +44 -0
  383. package/dist/resolution/cooperative-yield.js.map +1 -0
  384. package/dist/resolution/expo-router-synthesizer.d.ts +32 -0
  385. package/dist/resolution/expo-router-synthesizer.d.ts.map +1 -0
  386. package/dist/resolution/expo-router-synthesizer.js +189 -0
  387. package/dist/resolution/expo-router-synthesizer.js.map +1 -0
  388. package/dist/resolution/frameworks/astro.d.ts +9 -0
  389. package/dist/resolution/frameworks/astro.d.ts.map +1 -0
  390. package/dist/resolution/frameworks/astro.js +169 -0
  391. package/dist/resolution/frameworks/astro.js.map +1 -0
  392. package/dist/resolution/frameworks/cargo-workspace.d.ts +18 -0
  393. package/dist/resolution/frameworks/cargo-workspace.d.ts.map +1 -0
  394. package/dist/resolution/frameworks/cargo-workspace.js +225 -0
  395. package/dist/resolution/frameworks/cargo-workspace.js.map +1 -0
  396. package/dist/resolution/frameworks/cics.d.ts +20 -0
  397. package/dist/resolution/frameworks/cics.d.ts.map +1 -0
  398. package/dist/resolution/frameworks/cics.js +90 -0
  399. package/dist/resolution/frameworks/cics.js.map +1 -0
  400. package/dist/resolution/frameworks/csharp.d.ts +8 -0
  401. package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
  402. package/dist/resolution/frameworks/csharp.js +335 -0
  403. package/dist/resolution/frameworks/csharp.js.map +1 -0
  404. package/dist/resolution/frameworks/drupal.d.ts +51 -0
  405. package/dist/resolution/frameworks/drupal.d.ts.map +1 -0
  406. package/dist/resolution/frameworks/drupal.js +367 -0
  407. package/dist/resolution/frameworks/drupal.js.map +1 -0
  408. package/dist/resolution/frameworks/expo-modules.d.ts +3 -0
  409. package/dist/resolution/frameworks/expo-modules.d.ts.map +1 -0
  410. package/dist/resolution/frameworks/expo-modules.js +148 -0
  411. package/dist/resolution/frameworks/expo-modules.js.map +1 -0
  412. package/dist/resolution/frameworks/expo-router.d.ts +189 -0
  413. package/dist/resolution/frameworks/expo-router.d.ts.map +1 -0
  414. package/dist/resolution/frameworks/expo-router.js +785 -0
  415. package/dist/resolution/frameworks/expo-router.js.map +1 -0
  416. package/dist/resolution/frameworks/express.d.ts +8 -0
  417. package/dist/resolution/frameworks/express.d.ts.map +1 -0
  418. package/dist/resolution/frameworks/express.js +540 -0
  419. package/dist/resolution/frameworks/express.js.map +1 -0
  420. package/dist/resolution/frameworks/fabric.d.ts +3 -0
  421. package/dist/resolution/frameworks/fabric.d.ts.map +1 -0
  422. package/dist/resolution/frameworks/fabric.js +354 -0
  423. package/dist/resolution/frameworks/fabric.js.map +1 -0
  424. package/dist/resolution/frameworks/go.d.ts +8 -0
  425. package/dist/resolution/frameworks/go.d.ts.map +1 -0
  426. package/dist/resolution/frameworks/go.js +184 -0
  427. package/dist/resolution/frameworks/go.js.map +1 -0
  428. package/dist/resolution/frameworks/goframe.d.ts +41 -0
  429. package/dist/resolution/frameworks/goframe.d.ts.map +1 -0
  430. package/dist/resolution/frameworks/goframe.js +112 -0
  431. package/dist/resolution/frameworks/goframe.js.map +1 -0
  432. package/dist/resolution/frameworks/index.d.ts +30 -0
  433. package/dist/resolution/frameworks/index.d.ts.map +1 -0
  434. package/dist/resolution/frameworks/index.js +72 -0
  435. package/dist/resolution/frameworks/index.js.map +1 -0
  436. package/dist/resolution/frameworks/java.d.ts +8 -0
  437. package/dist/resolution/frameworks/java.d.ts.map +1 -0
  438. package/dist/resolution/frameworks/java.js +517 -0
  439. package/dist/resolution/frameworks/java.js.map +1 -0
  440. package/dist/resolution/frameworks/laravel.d.ts +13 -0
  441. package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
  442. package/dist/resolution/frameworks/laravel.js +257 -0
  443. package/dist/resolution/frameworks/laravel.js.map +1 -0
  444. package/dist/resolution/frameworks/nestjs.d.ts +26 -0
  445. package/dist/resolution/frameworks/nestjs.d.ts.map +1 -0
  446. package/dist/resolution/frameworks/nestjs.js +690 -0
  447. package/dist/resolution/frameworks/nestjs.js.map +1 -0
  448. package/dist/resolution/frameworks/nextjs.d.ts +76 -0
  449. package/dist/resolution/frameworks/nextjs.d.ts.map +1 -0
  450. package/dist/resolution/frameworks/nextjs.js +328 -0
  451. package/dist/resolution/frameworks/nextjs.js.map +1 -0
  452. package/dist/resolution/frameworks/object-literal.d.ts +32 -0
  453. package/dist/resolution/frameworks/object-literal.d.ts.map +1 -0
  454. package/dist/resolution/frameworks/object-literal.js +139 -0
  455. package/dist/resolution/frameworks/object-literal.js.map +1 -0
  456. package/dist/resolution/frameworks/package-deps.d.ts +14 -0
  457. package/dist/resolution/frameworks/package-deps.d.ts.map +1 -0
  458. package/dist/resolution/frameworks/package-deps.js +78 -0
  459. package/dist/resolution/frameworks/package-deps.js.map +1 -0
  460. package/dist/resolution/frameworks/play.d.ts +19 -0
  461. package/dist/resolution/frameworks/play.d.ts.map +1 -0
  462. package/dist/resolution/frameworks/play.js +111 -0
  463. package/dist/resolution/frameworks/play.js.map +1 -0
  464. package/dist/resolution/frameworks/python.d.ts +10 -0
  465. package/dist/resolution/frameworks/python.d.ts.map +1 -0
  466. package/dist/resolution/frameworks/python.js +566 -0
  467. package/dist/resolution/frameworks/python.js.map +1 -0
  468. package/dist/resolution/frameworks/react-native.d.ts +29 -0
  469. package/dist/resolution/frameworks/react-native.d.ts.map +1 -0
  470. package/dist/resolution/frameworks/react-native.js +549 -0
  471. package/dist/resolution/frameworks/react-native.js.map +1 -0
  472. package/dist/resolution/frameworks/react-router.d.ts +46 -0
  473. package/dist/resolution/frameworks/react-router.d.ts.map +1 -0
  474. package/dist/resolution/frameworks/react-router.js +187 -0
  475. package/dist/resolution/frameworks/react-router.js.map +1 -0
  476. package/dist/resolution/frameworks/react.d.ts +9 -0
  477. package/dist/resolution/frameworks/react.d.ts.map +1 -0
  478. package/dist/resolution/frameworks/react.js +257 -0
  479. package/dist/resolution/frameworks/react.js.map +1 -0
  480. package/dist/resolution/frameworks/ruby.d.ts +8 -0
  481. package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
  482. package/dist/resolution/frameworks/ruby.js +302 -0
  483. package/dist/resolution/frameworks/ruby.js.map +1 -0
  484. package/dist/resolution/frameworks/rust.d.ts +8 -0
  485. package/dist/resolution/frameworks/rust.d.ts.map +1 -0
  486. package/dist/resolution/frameworks/rust.js +304 -0
  487. package/dist/resolution/frameworks/rust.js.map +1 -0
  488. package/dist/resolution/frameworks/svelte.d.ts +9 -0
  489. package/dist/resolution/frameworks/svelte.d.ts.map +1 -0
  490. package/dist/resolution/frameworks/svelte.js +258 -0
  491. package/dist/resolution/frameworks/svelte.js.map +1 -0
  492. package/dist/resolution/frameworks/sveltekit-router.d.ts +36 -0
  493. package/dist/resolution/frameworks/sveltekit-router.d.ts.map +1 -0
  494. package/dist/resolution/frameworks/sveltekit-router.js +156 -0
  495. package/dist/resolution/frameworks/sveltekit-router.js.map +1 -0
  496. package/dist/resolution/frameworks/swift-objc.d.ts +37 -0
  497. package/dist/resolution/frameworks/swift-objc.d.ts.map +1 -0
  498. package/dist/resolution/frameworks/swift-objc.js +252 -0
  499. package/dist/resolution/frameworks/swift-objc.js.map +1 -0
  500. package/dist/resolution/frameworks/swift.d.ts +10 -0
  501. package/dist/resolution/frameworks/swift.d.ts.map +1 -0
  502. package/dist/resolution/frameworks/swift.js +410 -0
  503. package/dist/resolution/frameworks/swift.js.map +1 -0
  504. package/dist/resolution/frameworks/tanstack-router.d.ts +84 -0
  505. package/dist/resolution/frameworks/tanstack-router.d.ts.map +1 -0
  506. package/dist/resolution/frameworks/tanstack-router.js +437 -0
  507. package/dist/resolution/frameworks/tanstack-router.js.map +1 -0
  508. package/dist/resolution/frameworks/terraform.d.ts +38 -0
  509. package/dist/resolution/frameworks/terraform.d.ts.map +1 -0
  510. package/dist/resolution/frameworks/terraform.js +277 -0
  511. package/dist/resolution/frameworks/terraform.js.map +1 -0
  512. package/dist/resolution/frameworks/vue-router.d.ts +82 -0
  513. package/dist/resolution/frameworks/vue-router.d.ts.map +1 -0
  514. package/dist/resolution/frameworks/vue-router.js +377 -0
  515. package/dist/resolution/frameworks/vue-router.js.map +1 -0
  516. package/dist/resolution/frameworks/vue.d.ts +9 -0
  517. package/dist/resolution/frameworks/vue.d.ts.map +1 -0
  518. package/dist/resolution/frameworks/vue.js +303 -0
  519. package/dist/resolution/frameworks/vue.js.map +1 -0
  520. package/dist/resolution/go-module.d.ts +26 -0
  521. package/dist/resolution/go-module.d.ts.map +1 -0
  522. package/dist/resolution/go-module.js +78 -0
  523. package/dist/resolution/go-module.js.map +1 -0
  524. package/dist/resolution/goframe-synthesizer.d.ts +29 -0
  525. package/dist/resolution/goframe-synthesizer.d.ts.map +1 -0
  526. package/dist/resolution/goframe-synthesizer.js +163 -0
  527. package/dist/resolution/goframe-synthesizer.js.map +1 -0
  528. package/dist/resolution/import-resolver.d.ts +84 -0
  529. package/dist/resolution/import-resolver.d.ts.map +1 -0
  530. package/dist/resolution/import-resolver.js +2240 -0
  531. package/dist/resolution/import-resolver.js.map +1 -0
  532. package/dist/resolution/index.d.ts +343 -0
  533. package/dist/resolution/index.d.ts.map +1 -0
  534. package/dist/resolution/index.js +2352 -0
  535. package/dist/resolution/index.js.map +1 -0
  536. package/dist/resolution/lru-cache.d.ts +24 -0
  537. package/dist/resolution/lru-cache.d.ts.map +1 -0
  538. package/dist/resolution/lru-cache.js +62 -0
  539. package/dist/resolution/lru-cache.js.map +1 -0
  540. package/dist/resolution/memory-budget.d.ts +48 -0
  541. package/dist/resolution/memory-budget.d.ts.map +1 -0
  542. package/dist/resolution/memory-budget.js +162 -0
  543. package/dist/resolution/memory-budget.js.map +1 -0
  544. package/dist/resolution/name-matcher.d.ts +153 -0
  545. package/dist/resolution/name-matcher.d.ts.map +1 -0
  546. package/dist/resolution/name-matcher.js +2412 -0
  547. package/dist/resolution/name-matcher.js.map +1 -0
  548. package/dist/resolution/next-router-synthesizer.d.ts +27 -0
  549. package/dist/resolution/next-router-synthesizer.d.ts.map +1 -0
  550. package/dist/resolution/next-router-synthesizer.js +113 -0
  551. package/dist/resolution/next-router-synthesizer.js.map +1 -0
  552. package/dist/resolution/path-aliases.d.ts +70 -0
  553. package/dist/resolution/path-aliases.d.ts.map +1 -0
  554. package/dist/resolution/path-aliases.js +346 -0
  555. package/dist/resolution/path-aliases.js.map +1 -0
  556. package/dist/resolution/react-router-synthesizer.d.ts +33 -0
  557. package/dist/resolution/react-router-synthesizer.d.ts.map +1 -0
  558. package/dist/resolution/react-router-synthesizer.js +126 -0
  559. package/dist/resolution/react-router-synthesizer.js.map +1 -0
  560. package/dist/resolution/resolver-pool.d.ts +106 -0
  561. package/dist/resolution/resolver-pool.d.ts.map +1 -0
  562. package/dist/resolution/resolver-pool.js +344 -0
  563. package/dist/resolution/resolver-pool.js.map +1 -0
  564. package/dist/resolution/resolver-worker.d.ts +17 -0
  565. package/dist/resolution/resolver-worker.d.ts.map +1 -0
  566. package/dist/resolution/resolver-worker.js +141 -0
  567. package/dist/resolution/resolver-worker.js.map +1 -0
  568. package/dist/resolution/strip-comments.d.ts +27 -0
  569. package/dist/resolution/strip-comments.d.ts.map +1 -0
  570. package/dist/resolution/strip-comments.js +492 -0
  571. package/dist/resolution/strip-comments.js.map +1 -0
  572. package/dist/resolution/sveltekit-synthesizer.d.ts +58 -0
  573. package/dist/resolution/sveltekit-synthesizer.d.ts.map +1 -0
  574. package/dist/resolution/sveltekit-synthesizer.js +173 -0
  575. package/dist/resolution/sveltekit-synthesizer.js.map +1 -0
  576. package/dist/resolution/swift-objc-bridge.d.ts +134 -0
  577. package/dist/resolution/swift-objc-bridge.d.ts.map +1 -0
  578. package/dist/resolution/swift-objc-bridge.js +256 -0
  579. package/dist/resolution/swift-objc-bridge.js.map +1 -0
  580. package/dist/resolution/synth-utils.d.ts +26 -0
  581. package/dist/resolution/synth-utils.d.ts.map +1 -0
  582. package/dist/resolution/synth-utils.js +75 -0
  583. package/dist/resolution/synth-utils.js.map +1 -0
  584. package/dist/resolution/tanstack-router-synthesizer.d.ts +31 -0
  585. package/dist/resolution/tanstack-router-synthesizer.d.ts.map +1 -0
  586. package/dist/resolution/tanstack-router-synthesizer.js +114 -0
  587. package/dist/resolution/tanstack-router-synthesizer.js.map +1 -0
  588. package/dist/resolution/tier-synthesizer.d.ts +48 -0
  589. package/dist/resolution/tier-synthesizer.d.ts.map +1 -0
  590. package/dist/resolution/tier-synthesizer.js +907 -0
  591. package/dist/resolution/tier-synthesizer.js.map +1 -0
  592. package/dist/resolution/types.d.ts +290 -0
  593. package/dist/resolution/types.d.ts.map +1 -0
  594. package/dist/resolution/types.js +8 -0
  595. package/dist/resolution/types.js.map +1 -0
  596. package/dist/resolution/vue-router-synthesizer.d.ts +30 -0
  597. package/dist/resolution/vue-router-synthesizer.d.ts.map +1 -0
  598. package/dist/resolution/vue-router-synthesizer.js +115 -0
  599. package/dist/resolution/vue-router-synthesizer.js.map +1 -0
  600. package/dist/resolution/workspace-packages.d.ts +58 -0
  601. package/dist/resolution/workspace-packages.d.ts.map +1 -0
  602. package/dist/resolution/workspace-packages.js +346 -0
  603. package/dist/resolution/workspace-packages.js.map +1 -0
  604. package/dist/search/identifier-segments.d.ts +70 -0
  605. package/dist/search/identifier-segments.d.ts.map +1 -0
  606. package/dist/search/identifier-segments.js +205 -0
  607. package/dist/search/identifier-segments.js.map +1 -0
  608. package/dist/search/query-parser.d.ts +57 -0
  609. package/dist/search/query-parser.d.ts.map +1 -0
  610. package/dist/search/query-parser.js +177 -0
  611. package/dist/search/query-parser.js.map +1 -0
  612. package/dist/search/query-paths.d.ts +57 -0
  613. package/dist/search/query-paths.d.ts.map +1 -0
  614. package/dist/search/query-paths.js +298 -0
  615. package/dist/search/query-paths.js.map +1 -0
  616. package/dist/search/query-utils.d.ts +102 -0
  617. package/dist/search/query-utils.d.ts.map +1 -0
  618. package/dist/search/query-utils.js +487 -0
  619. package/dist/search/query-utils.js.map +1 -0
  620. package/dist/sync/git-hooks.d.ts +45 -0
  621. package/dist/sync/git-hooks.d.ts.map +1 -0
  622. package/dist/sync/git-hooks.js +227 -0
  623. package/dist/sync/git-hooks.js.map +1 -0
  624. package/dist/sync/index.d.ts +19 -0
  625. package/dist/sync/index.d.ts.map +1 -0
  626. package/dist/sync/index.js +35 -0
  627. package/dist/sync/index.js.map +1 -0
  628. package/dist/sync/watch-policy.d.ts +48 -0
  629. package/dist/sync/watch-policy.d.ts.map +1 -0
  630. package/dist/sync/watch-policy.js +124 -0
  631. package/dist/sync/watch-policy.js.map +1 -0
  632. package/dist/sync/watcher.d.ts +401 -0
  633. package/dist/sync/watcher.d.ts.map +1 -0
  634. package/dist/sync/watcher.js +967 -0
  635. package/dist/sync/watcher.js.map +1 -0
  636. package/dist/sync/worktree.d.ts +63 -0
  637. package/dist/sync/worktree.d.ts.map +1 -0
  638. package/dist/sync/worktree.js +182 -0
  639. package/dist/sync/worktree.js.map +1 -0
  640. package/dist/telemetry/index.d.ts +143 -0
  641. package/dist/telemetry/index.d.ts.map +1 -0
  642. package/dist/telemetry/index.js +541 -0
  643. package/dist/telemetry/index.js.map +1 -0
  644. package/dist/types.d.ts +486 -0
  645. package/dist/types.d.ts.map +1 -0
  646. package/dist/types.js +118 -0
  647. package/dist/types.js.map +1 -0
  648. package/dist/ui/color.d.ts +21 -0
  649. package/dist/ui/color.d.ts.map +1 -0
  650. package/dist/ui/color.js +42 -0
  651. package/dist/ui/color.js.map +1 -0
  652. package/dist/ui/glyphs.d.ts +67 -0
  653. package/dist/ui/glyphs.d.ts.map +1 -0
  654. package/dist/ui/glyphs.js +125 -0
  655. package/dist/ui/glyphs.js.map +1 -0
  656. package/dist/ui/shimmer-progress.d.ts +11 -0
  657. package/dist/ui/shimmer-progress.d.ts.map +1 -0
  658. package/dist/ui/shimmer-progress.js +164 -0
  659. package/dist/ui/shimmer-progress.js.map +1 -0
  660. package/dist/ui/shimmer-worker.d.ts +2 -0
  661. package/dist/ui/shimmer-worker.d.ts.map +1 -0
  662. package/dist/ui/shimmer-worker.js +126 -0
  663. package/dist/ui/shimmer-worker.js.map +1 -0
  664. package/dist/ui/types.d.ts +15 -0
  665. package/dist/ui/types.d.ts.map +1 -0
  666. package/dist/ui/types.js +3 -0
  667. package/dist/ui/types.js.map +1 -0
  668. package/dist/ui-server/api/deadcode.d.ts +84 -0
  669. package/dist/ui-server/api/deadcode.d.ts.map +1 -0
  670. package/dist/ui-server/api/deadcode.js +136 -0
  671. package/dist/ui-server/api/deadcode.js.map +1 -0
  672. package/dist/ui-server/api/effects.d.ts +87 -0
  673. package/dist/ui-server/api/effects.d.ts.map +1 -0
  674. package/dist/ui-server/api/effects.js +499 -0
  675. package/dist/ui-server/api/effects.js.map +1 -0
  676. package/dist/ui-server/api/entrypoints.d.ts +86 -0
  677. package/dist/ui-server/api/entrypoints.d.ts.map +1 -0
  678. package/dist/ui-server/api/entrypoints.js +279 -0
  679. package/dist/ui-server/api/entrypoints.js.map +1 -0
  680. package/dist/ui-server/api/events.d.ts +183 -0
  681. package/dist/ui-server/api/events.d.ts.map +1 -0
  682. package/dist/ui-server/api/events.js +430 -0
  683. package/dist/ui-server/api/events.js.map +1 -0
  684. package/dist/ui-server/api/file.d.ts +66 -0
  685. package/dist/ui-server/api/file.d.ts.map +1 -0
  686. package/dist/ui-server/api/file.js +222 -0
  687. package/dist/ui-server/api/file.js.map +1 -0
  688. package/dist/ui-server/api/filecode.d.ts +126 -0
  689. package/dist/ui-server/api/filecode.d.ts.map +1 -0
  690. package/dist/ui-server/api/filecode.js +205 -0
  691. package/dist/ui-server/api/filecode.js.map +1 -0
  692. package/dist/ui-server/api/flow.d.ts +226 -0
  693. package/dist/ui-server/api/flow.d.ts.map +1 -0
  694. package/dist/ui-server/api/flow.js +611 -0
  695. package/dist/ui-server/api/flow.js.map +1 -0
  696. package/dist/ui-server/api/hierarchy.d.ts +81 -0
  697. package/dist/ui-server/api/hierarchy.d.ts.map +1 -0
  698. package/dist/ui-server/api/hierarchy.js +92 -0
  699. package/dist/ui-server/api/hierarchy.js.map +1 -0
  700. package/dist/ui-server/api/index.d.ts +90 -0
  701. package/dist/ui-server/api/index.d.ts.map +1 -0
  702. package/dist/ui-server/api/index.js +332 -0
  703. package/dist/ui-server/api/index.js.map +1 -0
  704. package/dist/ui-server/api/map.d.ts +187 -0
  705. package/dist/ui-server/api/map.d.ts.map +1 -0
  706. package/dist/ui-server/api/map.js +498 -0
  707. package/dist/ui-server/api/map.js.map +1 -0
  708. package/dist/ui-server/api/node.d.ts +81 -0
  709. package/dist/ui-server/api/node.d.ts.map +1 -0
  710. package/dist/ui-server/api/node.js +388 -0
  711. package/dist/ui-server/api/node.js.map +1 -0
  712. package/dist/ui-server/api/nodes.d.ts +25 -0
  713. package/dist/ui-server/api/nodes.d.ts.map +1 -0
  714. package/dist/ui-server/api/nodes.js +45 -0
  715. package/dist/ui-server/api/nodes.js.map +1 -0
  716. package/dist/ui-server/api/program.d.ts +139 -0
  717. package/dist/ui-server/api/program.d.ts.map +1 -0
  718. package/dist/ui-server/api/program.js +315 -0
  719. package/dist/ui-server/api/program.js.map +1 -0
  720. package/dist/ui-server/api/respond.d.ts +76 -0
  721. package/dist/ui-server/api/respond.d.ts.map +1 -0
  722. package/dist/ui-server/api/respond.js +186 -0
  723. package/dist/ui-server/api/respond.js.map +1 -0
  724. package/dist/ui-server/api/route-roots.d.ts +39 -0
  725. package/dist/ui-server/api/route-roots.d.ts.map +1 -0
  726. package/dist/ui-server/api/route-roots.js +96 -0
  727. package/dist/ui-server/api/route-roots.js.map +1 -0
  728. package/dist/ui-server/api/routes.d.ts +59 -0
  729. package/dist/ui-server/api/routes.d.ts.map +1 -0
  730. package/dist/ui-server/api/routes.js +112 -0
  731. package/dist/ui-server/api/routes.js.map +1 -0
  732. package/dist/ui-server/api/screens.d.ts +117 -0
  733. package/dist/ui-server/api/screens.d.ts.map +1 -0
  734. package/dist/ui-server/api/screens.js +611 -0
  735. package/dist/ui-server/api/screens.js.map +1 -0
  736. package/dist/ui-server/api/search.d.ts +29 -0
  737. package/dist/ui-server/api/search.d.ts.map +1 -0
  738. package/dist/ui-server/api/search.js +232 -0
  739. package/dist/ui-server/api/search.js.map +1 -0
  740. package/dist/ui-server/api/session.d.ts +52 -0
  741. package/dist/ui-server/api/session.d.ts.map +1 -0
  742. package/dist/ui-server/api/session.js +196 -0
  743. package/dist/ui-server/api/session.js.map +1 -0
  744. package/dist/ui-server/api/source.d.ts +200 -0
  745. package/dist/ui-server/api/source.d.ts.map +1 -0
  746. package/dist/ui-server/api/source.js +419 -0
  747. package/dist/ui-server/api/source.js.map +1 -0
  748. package/dist/ui-server/api/stats.d.ts +27 -0
  749. package/dist/ui-server/api/stats.d.ts.map +1 -0
  750. package/dist/ui-server/api/stats.js +164 -0
  751. package/dist/ui-server/api/stats.js.map +1 -0
  752. package/dist/ui-server/api/steps.d.ts +274 -0
  753. package/dist/ui-server/api/steps.d.ts.map +1 -0
  754. package/dist/ui-server/api/steps.js +1446 -0
  755. package/dist/ui-server/api/steps.js.map +1 -0
  756. package/dist/ui-server/api/trail-store.d.ts +142 -0
  757. package/dist/ui-server/api/trail-store.d.ts.map +1 -0
  758. package/dist/ui-server/api/trail-store.js +323 -0
  759. package/dist/ui-server/api/trail-store.js.map +1 -0
  760. package/dist/ui-server/api/trails.d.ts +163 -0
  761. package/dist/ui-server/api/trails.d.ts.map +1 -0
  762. package/dist/ui-server/api/trails.js +369 -0
  763. package/dist/ui-server/api/trails.js.map +1 -0
  764. package/dist/ui-server/api/when.d.ts +125 -0
  765. package/dist/ui-server/api/when.d.ts.map +1 -0
  766. package/dist/ui-server/api/when.js +251 -0
  767. package/dist/ui-server/api/when.js.map +1 -0
  768. package/dist/ui-server/api/wire.d.ts +179 -0
  769. package/dist/ui-server/api/wire.d.ts.map +1 -0
  770. package/dist/ui-server/api/wire.js +231 -0
  771. package/dist/ui-server/api/wire.js.map +1 -0
  772. package/dist/ui-server/assets.d.ts +40 -0
  773. package/dist/ui-server/assets.d.ts.map +1 -0
  774. package/dist/ui-server/assets.js +110 -0
  775. package/dist/ui-server/assets.js.map +1 -0
  776. package/dist/ui-server/constants.d.ts +32 -0
  777. package/dist/ui-server/constants.d.ts.map +1 -0
  778. package/dist/ui-server/constants.js +35 -0
  779. package/dist/ui-server/constants.js.map +1 -0
  780. package/dist/ui-server/highlight/index.d.ts +113 -0
  781. package/dist/ui-server/highlight/index.d.ts.map +1 -0
  782. package/dist/ui-server/highlight/index.js +307 -0
  783. package/dist/ui-server/highlight/index.js.map +1 -0
  784. package/dist/ui-server/highlight/languages.d.ts +36 -0
  785. package/dist/ui-server/highlight/languages.d.ts.map +1 -0
  786. package/dist/ui-server/highlight/languages.js +50 -0
  787. package/dist/ui-server/highlight/languages.js.map +1 -0
  788. package/dist/ui-server/index.d.ts +92 -0
  789. package/dist/ui-server/index.d.ts.map +1 -0
  790. package/dist/ui-server/index.js +399 -0
  791. package/dist/ui-server/index.js.map +1 -0
  792. package/dist/ui-server/open-browser.d.ts +31 -0
  793. package/dist/ui-server/open-browser.d.ts.map +1 -0
  794. package/dist/ui-server/open-browser.js +79 -0
  795. package/dist/ui-server/open-browser.js.map +1 -0
  796. package/dist/ui-server/security.d.ts +127 -0
  797. package/dist/ui-server/security.d.ts.map +1 -0
  798. package/dist/ui-server/security.js +332 -0
  799. package/dist/ui-server/security.js.map +1 -0
  800. package/dist/ui-server/static.d.ts +45 -0
  801. package/dist/ui-server/static.d.ts.map +1 -0
  802. package/dist/ui-server/static.js +165 -0
  803. package/dist/ui-server/static.js.map +1 -0
  804. package/dist/upgrade/index.d.ts +177 -0
  805. package/dist/upgrade/index.d.ts.map +1 -0
  806. package/dist/upgrade/index.js +665 -0
  807. package/dist/upgrade/index.js.map +1 -0
  808. package/dist/upgrade/remove-binary.d.ts +87 -0
  809. package/dist/upgrade/remove-binary.d.ts.map +1 -0
  810. package/dist/upgrade/remove-binary.js +289 -0
  811. package/dist/upgrade/remove-binary.js.map +1 -0
  812. package/dist/upgrade/update-check.d.ts +92 -0
  813. package/dist/upgrade/update-check.d.ts.map +1 -0
  814. package/dist/upgrade/update-check.js +258 -0
  815. package/dist/upgrade/update-check.js.map +1 -0
  816. package/dist/utils.d.ts +224 -0
  817. package/dist/utils.d.ts.map +1 -0
  818. package/dist/utils.js +583 -0
  819. package/dist/utils.js.map +1 -0
  820. package/dist/viewer/assets/archivo-latin-ext-wght-normal-C4zznr8T.woff2 +0 -0
  821. package/dist/viewer/assets/archivo-latin-wght-normal-E0tuGl4L.woff2 +0 -0
  822. package/dist/viewer/assets/archivo-vietnamese-wght-normal-XAtsl5Q_.woff2 +0 -0
  823. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-italic-2syK4fUT.woff +0 -0
  824. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-italic-CBJ8pzag.woff2 +0 -0
  825. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
  826. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
  827. package/dist/viewer/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff +0 -0
  828. package/dist/viewer/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2 +0 -0
  829. package/dist/viewer/assets/ibm-plex-mono-cyrillic-600-normal-CTOM6hUh.woff2 +0 -0
  830. package/dist/viewer/assets/ibm-plex-mono-cyrillic-600-normal-fLZuRloM.woff +0 -0
  831. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-italic-B4oTjJdl.woff +0 -0
  832. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-italic-CBjNughH.woff2 +0 -0
  833. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
  834. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
  835. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff +0 -0
  836. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2 +0 -0
  837. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-600-normal-9HEixskS.woff +0 -0
  838. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-600-normal-V-xxqcpd.woff2 +0 -0
  839. package/dist/viewer/assets/ibm-plex-mono-latin-400-italic-66oory27.woff +0 -0
  840. package/dist/viewer/assets/ibm-plex-mono-latin-400-italic-BqAiT5Ww.woff2 +0 -0
  841. package/dist/viewer/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  842. package/dist/viewer/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  843. package/dist/viewer/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  844. package/dist/viewer/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  845. package/dist/viewer/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
  846. package/dist/viewer/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
  847. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-italic-B7_fu1kp.woff2 +0 -0
  848. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-italic-Bg0ZHwF4.woff +0 -0
  849. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
  850. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
  851. package/dist/viewer/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2 +0 -0
  852. package/dist/viewer/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff +0 -0
  853. package/dist/viewer/assets/ibm-plex-mono-latin-ext-600-normal-D38SheWl.woff2 +0 -0
  854. package/dist/viewer/assets/ibm-plex-mono-latin-ext-600-normal-DmB0ttJJ.woff +0 -0
  855. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-italic-D6eaYXMU.woff +0 -0
  856. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-italic-DRuN92E5.woff2 +0 -0
  857. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
  858. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
  859. package/dist/viewer/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff +0 -0
  860. package/dist/viewer/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2 +0 -0
  861. package/dist/viewer/assets/ibm-plex-mono-vietnamese-600-normal-D2EvbN8M.woff2 +0 -0
  862. package/dist/viewer/assets/ibm-plex-mono-vietnamese-600-normal-iLQfcSjf.woff +0 -0
  863. package/dist/viewer/assets/index-2IPslW5t.js +13 -0
  864. package/dist/viewer/assets/index-DSwi2Seu.css +1 -0
  865. package/dist/viewer/index.html +16 -0
  866. package/package.json +67 -0
@@ -0,0 +1,399 @@
1
+ "use strict";
2
+ /**
3
+ * The `cg ui` server.
4
+ *
5
+ * A loopback-only `node:http` server that hands the browser the built viewer
6
+ * (`dist/viewer/`) and, through the JSON API mounted on the `api` seam below
7
+ * (`./api`), a view of one indexed project. No framework, no new dependency: it
8
+ * answers GET, serves files, and refuses everything else.
9
+ *
10
+ * It is a reader with one exception, added deliberately and scoped as narrowly
11
+ * as it could be: `POST`/`DELETE /api/trails` saves and removes the reader's own
12
+ * named trails, as JSON files under `.codegraph/ui/trails/`. Nothing else it
13
+ * serves has a side effect, no other path accepts a write, and `--read-only`
14
+ * turns even that one off. See `security.ts` for what a write has to carry.
15
+ *
16
+ * The interesting part is not the routing, it is the boundary in `security.ts`.
17
+ * Read that first.
18
+ */
19
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
26
+ }) : (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ o[k2] = m[k];
29
+ }));
30
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32
+ }) : function(o, v) {
33
+ o["default"] = v;
34
+ });
35
+ var __importStar = (this && this.__importStar) || (function () {
36
+ var ownKeys = function(o) {
37
+ ownKeys = Object.getOwnPropertyNames || function (o) {
38
+ var ar = [];
39
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40
+ return ar;
41
+ };
42
+ return ownKeys(o);
43
+ };
44
+ return function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ })();
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.ApiError = exports.GraphSession = exports.createGraphApi = exports.cacheControlFor = exports.contentTypeFor = exports.openBrowser = exports.browserOpenCommand = exports.resolveStaticAsset = exports.resolveProjectFile = exports.isWriteRequest = exports.isWriteMethod = exports.isSafeRequestPath = exports.isAllowedOrigin = exports.isAllowedHost = exports.PathRefusalError = exports.WRITE_METHODS = exports.WRITE_HEADER = exports.READ_METHODS = exports.ALLOWED_METHODS = exports.VIEWER_PATH_ENV = exports.LOOPBACK_ADDRESS = exports.DEFAULT_UI_PORT = exports.DEFAULT_PORT_ATTEMPTS = exports.BROWSER_ENV = exports.ViewerMissingError = void 0;
54
+ exports.startUiServer = startUiServer;
55
+ const fs = __importStar(require("fs"));
56
+ const http = __importStar(require("http"));
57
+ const path = __importStar(require("path"));
58
+ const assets_1 = require("./assets");
59
+ const security_1 = require("./security");
60
+ const static_1 = require("./static");
61
+ const constants_1 = require("./constants");
62
+ var assets_2 = require("./assets");
63
+ Object.defineProperty(exports, "ViewerMissingError", { enumerable: true, get: function () { return assets_2.ViewerMissingError; } });
64
+ var constants_2 = require("./constants");
65
+ Object.defineProperty(exports, "BROWSER_ENV", { enumerable: true, get: function () { return constants_2.BROWSER_ENV; } });
66
+ Object.defineProperty(exports, "DEFAULT_PORT_ATTEMPTS", { enumerable: true, get: function () { return constants_2.DEFAULT_PORT_ATTEMPTS; } });
67
+ Object.defineProperty(exports, "DEFAULT_UI_PORT", { enumerable: true, get: function () { return constants_2.DEFAULT_UI_PORT; } });
68
+ Object.defineProperty(exports, "LOOPBACK_ADDRESS", { enumerable: true, get: function () { return constants_2.LOOPBACK_ADDRESS; } });
69
+ Object.defineProperty(exports, "VIEWER_PATH_ENV", { enumerable: true, get: function () { return constants_2.VIEWER_PATH_ENV; } });
70
+ var security_2 = require("./security");
71
+ Object.defineProperty(exports, "ALLOWED_METHODS", { enumerable: true, get: function () { return security_2.ALLOWED_METHODS; } });
72
+ Object.defineProperty(exports, "READ_METHODS", { enumerable: true, get: function () { return security_2.READ_METHODS; } });
73
+ Object.defineProperty(exports, "WRITE_HEADER", { enumerable: true, get: function () { return security_2.WRITE_HEADER; } });
74
+ Object.defineProperty(exports, "WRITE_METHODS", { enumerable: true, get: function () { return security_2.WRITE_METHODS; } });
75
+ Object.defineProperty(exports, "PathRefusalError", { enumerable: true, get: function () { return security_2.PathRefusalError; } });
76
+ Object.defineProperty(exports, "isAllowedHost", { enumerable: true, get: function () { return security_2.isAllowedHost; } });
77
+ Object.defineProperty(exports, "isAllowedOrigin", { enumerable: true, get: function () { return security_2.isAllowedOrigin; } });
78
+ Object.defineProperty(exports, "isSafeRequestPath", { enumerable: true, get: function () { return security_2.isSafeRequestPath; } });
79
+ Object.defineProperty(exports, "isWriteMethod", { enumerable: true, get: function () { return security_2.isWriteMethod; } });
80
+ Object.defineProperty(exports, "isWriteRequest", { enumerable: true, get: function () { return security_2.isWriteRequest; } });
81
+ Object.defineProperty(exports, "resolveProjectFile", { enumerable: true, get: function () { return security_2.resolveProjectFile; } });
82
+ Object.defineProperty(exports, "resolveStaticAsset", { enumerable: true, get: function () { return security_2.resolveStaticAsset; } });
83
+ var open_browser_1 = require("./open-browser");
84
+ Object.defineProperty(exports, "browserOpenCommand", { enumerable: true, get: function () { return open_browser_1.browserOpenCommand; } });
85
+ Object.defineProperty(exports, "openBrowser", { enumerable: true, get: function () { return open_browser_1.openBrowser; } });
86
+ var static_2 = require("./static");
87
+ Object.defineProperty(exports, "contentTypeFor", { enumerable: true, get: function () { return static_2.contentTypeFor; } });
88
+ Object.defineProperty(exports, "cacheControlFor", { enumerable: true, get: function () { return static_2.cacheControlFor; } });
89
+ var api_1 = require("./api");
90
+ Object.defineProperty(exports, "createGraphApi", { enumerable: true, get: function () { return api_1.createGraphApi; } });
91
+ Object.defineProperty(exports, "GraphSession", { enumerable: true, get: function () { return api_1.GraphSession; } });
92
+ Object.defineProperty(exports, "ApiError", { enumerable: true, get: function () { return api_1.ApiError; } });
93
+ /**
94
+ * Response headers sent on EVERY response.
95
+ *
96
+ * `frame-ancestors`/`X-Frame-Options` stop another page from framing the viewer
97
+ * and reading it by overlay; `nosniff` stops an asset with a surprising
98
+ * extension from being executed as script; the CSP pins every resource to this
99
+ * origin, so a future viewer change cannot start phoning out with what it read.
100
+ * `style-src` keeps `'unsafe-inline'` because the syntax highlighter emits
101
+ * inline `style=` attributes on code spans.
102
+ *
103
+ * Note what is NOT here: any `Access-Control-*` header. Their absence is what
104
+ * makes a cross-origin read of a response body impossible even if a request
105
+ * somehow gets past the `Host` check.
106
+ */
107
+ const SECURITY_HEADERS = {
108
+ 'X-Content-Type-Options': 'nosniff',
109
+ 'X-Frame-Options': 'DENY',
110
+ 'Referrer-Policy': 'no-referrer',
111
+ 'Content-Security-Policy': [
112
+ "default-src 'none'",
113
+ "script-src 'self'",
114
+ "style-src 'self' 'unsafe-inline'",
115
+ "img-src 'self' data:",
116
+ "font-src 'self'",
117
+ "connect-src 'self'",
118
+ "base-uri 'none'",
119
+ "form-action 'none'",
120
+ "frame-ancestors 'none'",
121
+ ].join('; '),
122
+ };
123
+ /**
124
+ * Start the viewer server.
125
+ *
126
+ * Resolves once the socket is bound, so the caller can print a URL that is
127
+ * already answering.
128
+ */
129
+ async function startUiServer(options) {
130
+ // realpath, not just resolve: `resolveStaticAsset` hands back realpaths (the
131
+ // symlink check in `validatePathWithinRoot` resolves them), so a viewerDir
132
+ // that still holds a symlink — every macOS `/var/folders` temp dir, plenty of
133
+ // package managers — would make `path.relative` between the two nonsense, and
134
+ // the cache policy that keys off it silently wrong.
135
+ const viewerDir = options.viewerDir ? realpath(options.viewerDir) : (0, assets_1.resolveViewerDir)();
136
+ const projectRoot = path.resolve(options.projectRoot);
137
+ const indexHtml = path.join(viewerDir, 'index.html');
138
+ // The bound port is needed by the Host check, but is only known after listen.
139
+ // Captured by reference so the handler always sees the real value.
140
+ let boundPort = 0;
141
+ const server = http.createServer((req, res) => {
142
+ handleRequest(req, res, {
143
+ viewerDir,
144
+ indexHtml,
145
+ projectRoot,
146
+ api: options.api,
147
+ port: () => boundPort,
148
+ }).catch(() => {
149
+ // handleRequest already answers every error it can; reaching here means
150
+ // the socket itself is gone. Never let it become an unhandled rejection,
151
+ // which the CLI's fatal handlers would turn into a process exit.
152
+ if (!res.writableEnded)
153
+ res.destroy();
154
+ });
155
+ });
156
+ // A browser holds keep-alive sockets open; without this, `close()` would wait
157
+ // for them and Ctrl-C would appear to hang.
158
+ server.keepAliveTimeout = 5_000;
159
+ boundPort = await listenWithFallback(server, {
160
+ port: options.port ?? constants_1.DEFAULT_UI_PORT,
161
+ fallback: options.portFallback ?? true,
162
+ attempts: options.maxPortAttempts ?? constants_1.DEFAULT_PORT_ATTEMPTS,
163
+ });
164
+ let closed = false;
165
+ return {
166
+ port: boundPort,
167
+ url: `http://${constants_1.LOOPBACK_ADDRESS}:${boundPort}`,
168
+ viewerDir,
169
+ server,
170
+ close() {
171
+ if (closed)
172
+ return Promise.resolve();
173
+ closed = true;
174
+ return new Promise((resolve) => {
175
+ server.closeAllConnections();
176
+ server.close(() => resolve());
177
+ });
178
+ },
179
+ };
180
+ }
181
+ /**
182
+ * One request, start to finish. Order matters: the cheap refusals (method,
183
+ * `Host`, `Origin`) run before anything touches the filesystem.
184
+ */
185
+ async function handleRequest(req, res, deps) {
186
+ const method = req.method ?? 'GET';
187
+ for (const [name, value] of Object.entries(SECURITY_HEADERS)) {
188
+ res.setHeader(name, value);
189
+ }
190
+ if (!security_1.ALLOWED_METHODS.includes(method)) {
191
+ res.setHeader('Allow', security_1.ALLOWED_METHODS.join(', '));
192
+ (0, static_1.sendText)(res, 405, `cg ui does not answer ${method}.`, method);
193
+ return;
194
+ }
195
+ const port = deps.port();
196
+ if (!(0, security_1.isAllowedHost)(req.headers.host, port)) {
197
+ // The DNS-rebinding refusal. Say why, since a human hitting this through a
198
+ // proxy or a container hostname needs to know what to change.
199
+ (0, static_1.sendText)(res, 403, 'Refused: cg ui only answers requests addressed to this machine ' +
200
+ `(localhost, 127.0.0.1 or [::1] on port ${port}).\n` +
201
+ `This request said Host: ${forEcho(req.headers.host)}`, method);
202
+ return;
203
+ }
204
+ if (!(0, security_1.isAllowedOrigin)(readHeader(req, 'origin'), port)) {
205
+ (0, static_1.sendText)(res, 403, 'Refused: cross-origin requests are not served.', method);
206
+ return;
207
+ }
208
+ // Checked on the RAW url, before WHATWG parsing folds `..` segments away.
209
+ const rawPath = (req.url ?? '/').split(/[?#]/)[0] ?? '/';
210
+ // The `/api/` namespace answers JSON for EVERY outcome, refusals included:
211
+ // the viewer parses these responses, and a text/plain body here would surface
212
+ // as a parse error instead of the refusal it actually is.
213
+ const jsonNamespace = rawPath === '/api' || rawPath.startsWith('/api/');
214
+ // The one place this server stops being a pure reader. A write has to be
215
+ // under /api/ and carry the marker header — see `isWriteRequest` for what
216
+ // that closes that Host and Origin do not.
217
+ if ((0, security_1.isWriteMethod)(method)) {
218
+ const verdict = (0, security_1.isWriteRequest)(rawPath, {
219
+ marker: readHeader(req, security_1.WRITE_HEADER),
220
+ contentType: readHeader(req, 'content-type'),
221
+ });
222
+ if (!verdict.ok) {
223
+ if (!jsonNamespace)
224
+ res.setHeader('Allow', security_1.READ_METHODS.join(', '));
225
+ const body = `Refused: ${verdict.reason}`;
226
+ if (jsonNamespace)
227
+ (0, static_1.sendJson)(res, 403, { error: body, code: 'refused' }, method);
228
+ else
229
+ (0, static_1.sendText)(res, 405, body, method);
230
+ return;
231
+ }
232
+ }
233
+ if (!(0, security_1.isSafeRequestPath)(rawPath)) {
234
+ if (jsonNamespace) {
235
+ (0, static_1.sendJson)(res, 404, { error: 'Not found', code: 'not-found' }, method);
236
+ }
237
+ else {
238
+ (0, static_1.sendText)(res, 404, 'Not found', method);
239
+ }
240
+ return;
241
+ }
242
+ let url;
243
+ try {
244
+ url = new URL(req.url ?? '/', `http://${constants_1.LOOPBACK_ADDRESS}:${port}`);
245
+ }
246
+ catch {
247
+ (0, static_1.sendText)(res, 400, 'Bad request URL.', method);
248
+ return;
249
+ }
250
+ // `/api/` is reserved — it must 404 as JSON rather than fall through to the
251
+ // SPA, or a typo'd endpoint returns 200 + HTML and the viewer parses the app
252
+ // shell as a payload.
253
+ if (url.pathname === '/api' || url.pathname.startsWith('/api/')) {
254
+ const ctx = {
255
+ pathname: safeDecode(url.pathname),
256
+ query: url.searchParams,
257
+ projectRoot: deps.projectRoot,
258
+ method,
259
+ };
260
+ if (deps.api) {
261
+ try {
262
+ if (await deps.api(req, res, ctx))
263
+ return;
264
+ }
265
+ catch (err) {
266
+ if (!res.headersSent) {
267
+ (0, static_1.sendJson)(res, 500, { error: err instanceof Error ? err.message : String(err) }, method);
268
+ }
269
+ else {
270
+ res.destroy();
271
+ }
272
+ return;
273
+ }
274
+ }
275
+ if (!res.headersSent)
276
+ (0, static_1.sendJson)(res, 404, { error: `No such endpoint: ${url.pathname}` }, method);
277
+ return;
278
+ }
279
+ const requested = url.pathname === '/' ? '/index.html' : url.pathname;
280
+ const file = (0, security_1.resolveStaticAsset)(deps.viewerDir, requested);
281
+ if (file) {
282
+ (0, static_1.sendFile)(res, file, { rootDir: deps.viewerDir, method });
283
+ return;
284
+ }
285
+ if ((0, static_1.shouldFallBackToIndex)(url.pathname)) {
286
+ (0, static_1.sendFile)(res, deps.indexHtml, { rootDir: deps.viewerDir, method });
287
+ return;
288
+ }
289
+ (0, static_1.sendText)(res, 404, 'Not found', method);
290
+ }
291
+ /** `path.resolve` + symlink resolution, falling back when the path is missing. */
292
+ function realpath(dir) {
293
+ const resolved = path.resolve(dir);
294
+ try {
295
+ return fs.realpathSync(resolved);
296
+ }
297
+ catch {
298
+ return resolved;
299
+ }
300
+ }
301
+ /**
302
+ * Bound and de-fang an attacker-supplied header before echoing it back.
303
+ *
304
+ * The refused `Host` is worth showing — a human hitting this through a proxy or
305
+ * a container hostname needs to know what was actually sent. But it is
306
+ * attacker-chosen text, so it goes out truncated and stripped of control bytes.
307
+ * (The response is `text/plain` + `nosniff`, so there is nothing to inject
308
+ * into; this is belt and braces.)
309
+ */
310
+ function forEcho(value) {
311
+ if (!value)
312
+ return '(none)';
313
+ // eslint-disable-next-line no-control-regex -- stripping raw control bytes IS the point
314
+ const clean = value.replace(/[\x00-\x1f\x7f]/g, '?');
315
+ return clean.length > 100 ? `${clean.slice(0, 100)}…` : clean;
316
+ }
317
+ /** Read a header as a single string (node gives arrays for some headers). */
318
+ function readHeader(req, name) {
319
+ const value = req.headers[name];
320
+ if (value === undefined)
321
+ return undefined;
322
+ return Array.isArray(value) ? value[0] : value;
323
+ }
324
+ /** Percent-decode for display; the raw value is used for anything security-relevant. */
325
+ function safeDecode(value) {
326
+ try {
327
+ return decodeURIComponent(value);
328
+ }
329
+ catch {
330
+ return value;
331
+ }
332
+ }
333
+ /**
334
+ * Bind the first free port at or after `port`, on loopback only.
335
+ *
336
+ * Only `EADDRINUSE` advances to the next port — a permission failure or a bad
337
+ * address will not get better one port over, and retrying twenty times would
338
+ * only bury the real error.
339
+ */
340
+ async function listenWithFallback(server, opts) {
341
+ // Port 0 means "any free port", so there is nothing to fall back from.
342
+ const attempts = opts.port === 0 || !opts.fallback ? 1 : Math.max(1, opts.attempts);
343
+ for (let i = 0; i < attempts; i++) {
344
+ const candidate = opts.port === 0 ? 0 : opts.port + i;
345
+ try {
346
+ await listenOnce(server, candidate);
347
+ const address = server.address();
348
+ if (address === null || typeof address === 'string') {
349
+ throw new Error('The UI server bound to an unexpected address.');
350
+ }
351
+ return address.port;
352
+ }
353
+ catch (err) {
354
+ const code = err.code;
355
+ if (code !== 'EADDRINUSE' || i === attempts - 1) {
356
+ throw describeBindFailure(err, candidate, opts);
357
+ }
358
+ }
359
+ }
360
+ /* istanbul ignore next — the loop either returns or throws */
361
+ throw new Error('The UI server could not bind a port.');
362
+ }
363
+ /**
364
+ * One `listen()` attempt, with both outcomes as a promise.
365
+ *
366
+ * The same `http.Server` is reused across attempts: a `listen()` that failed
367
+ * with EADDRINUSE never took a handle, so it can be listened on again directly
368
+ * (verified on Node 20 and 22 — `server.listening` is still `false` afterwards,
369
+ * and `close()` on a never-listening server would itself throw).
370
+ */
371
+ function listenOnce(server, port) {
372
+ return new Promise((resolve, reject) => {
373
+ const onError = (err) => {
374
+ server.removeListener('listening', onListening);
375
+ reject(err);
376
+ };
377
+ const onListening = () => {
378
+ server.removeListener('error', onError);
379
+ resolve();
380
+ };
381
+ server.once('error', onError);
382
+ server.once('listening', onListening);
383
+ server.listen(port, constants_1.LOOPBACK_ADDRESS);
384
+ });
385
+ }
386
+ /** Turn a bind failure into something a user can act on. */
387
+ function describeBindFailure(err, port, opts) {
388
+ const code = err.code;
389
+ if (code === 'EADDRINUSE') {
390
+ return opts.fallback
391
+ ? new Error(`Ports ${opts.port}–${port} are all in use. Free one, or pick another with --port.`)
392
+ : new Error(`Port ${port} is already in use. Pick another with --port, or omit --port to let CodeGraph find a free one.`);
393
+ }
394
+ if (code === 'EACCES') {
395
+ return new Error(`Not allowed to listen on port ${port}. Ports below 1024 usually need elevated privileges — pick a higher one with --port.`);
396
+ }
397
+ return err instanceof Error ? err : new Error(String(err));
398
+ }
399
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui-server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Opening the user's browser at the viewer URL.
3
+ *
4
+ * No dependency: the three platform openers are one-liners, and pulling in a
5
+ * package to shell out to `open` would be the only runtime dependency the
6
+ * viewer adds to a CLI that currently has ten.
7
+ */
8
+ import { BROWSER_ENV } from './constants';
9
+ export { BROWSER_ENV };
10
+ export interface OpenCommand {
11
+ command: string;
12
+ args: string[];
13
+ }
14
+ /**
15
+ * The command that would open `url`, or `null` when opening is suppressed.
16
+ *
17
+ * Split out from {@link openBrowser} so the platform mapping is testable
18
+ * without launching anything.
19
+ */
20
+ export declare function browserOpenCommand(url: string, platform: NodeJS.Platform, override?: string): OpenCommand | null;
21
+ /**
22
+ * Open `url` in the user's default browser, best effort.
23
+ *
24
+ * Never throws and never keeps the CLI alive: the child is detached and
25
+ * unref'd, and a missing opener (a headless Linux box with no `xdg-open`) is
26
+ * swallowed — the URL is already printed, which is the part that matters.
27
+ *
28
+ * @returns `true` if a launch was attempted.
29
+ */
30
+ export declare function openBrowser(url: string, platform?: NodeJS.Platform): boolean;
31
+ //# sourceMappingURL=open-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../../src/ui-server/open-browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,CAAC;AAIvB,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,WAAW,GAAG,IAAI,CAsBpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,OAAO,CAkB9F"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * Opening the user's browser at the viewer URL.
4
+ *
5
+ * No dependency: the three platform openers are one-liners, and pulling in a
6
+ * package to shell out to `open` would be the only runtime dependency the
7
+ * viewer adds to a CLI that currently has ten.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.BROWSER_ENV = void 0;
11
+ exports.browserOpenCommand = browserOpenCommand;
12
+ exports.openBrowser = openBrowser;
13
+ const child_process_1 = require("child_process");
14
+ const constants_1 = require("./constants");
15
+ Object.defineProperty(exports, "BROWSER_ENV", { enumerable: true, get: function () { return constants_1.BROWSER_ENV; } });
16
+ const SUPPRESS_VALUES = new Set(['', 'none', '0', 'false', 'off']);
17
+ /**
18
+ * The command that would open `url`, or `null` when opening is suppressed.
19
+ *
20
+ * Split out from {@link openBrowser} so the platform mapping is testable
21
+ * without launching anything.
22
+ */
23
+ function browserOpenCommand(url, platform, override) {
24
+ if (override !== undefined) {
25
+ const trimmed = override.trim();
26
+ if (SUPPRESS_VALUES.has(trimmed.toLowerCase()))
27
+ return null;
28
+ // Windows: go through `cmd /c` rather than spawning the override directly.
29
+ // `spawn` there is CreateProcess, which only ever launches a real .exe — a
30
+ // `.cmd`/`.bat` browser shim (how most Windows wrappers are written) fails
31
+ // outright, and an extension-less name only resolves because CreateProcess
32
+ // appends `.exe`. Routing through cmd makes .exe, .cmd and .bat all work,
33
+ // and node quotes each argument, so a path with spaces survives. Caught on
34
+ // the Windows VM, where the direct spawn silently launched nothing.
35
+ if (platform === 'win32')
36
+ return { command: 'cmd', args: ['/c', trimmed, url] };
37
+ return { command: trimmed, args: [url] };
38
+ }
39
+ if (platform === 'darwin')
40
+ return { command: 'open', args: [url] };
41
+ if (platform === 'win32') {
42
+ // `start` is a cmd builtin, not an executable. The empty string is the
43
+ // window title — without it `start` treats a quoted URL as the title and
44
+ // opens a blank console instead.
45
+ return { command: 'cmd', args: ['/c', 'start', '', url] };
46
+ }
47
+ return { command: 'xdg-open', args: [url] };
48
+ }
49
+ /**
50
+ * Open `url` in the user's default browser, best effort.
51
+ *
52
+ * Never throws and never keeps the CLI alive: the child is detached and
53
+ * unref'd, and a missing opener (a headless Linux box with no `xdg-open`) is
54
+ * swallowed — the URL is already printed, which is the part that matters.
55
+ *
56
+ * @returns `true` if a launch was attempted.
57
+ */
58
+ function openBrowser(url, platform = process.platform) {
59
+ const open = browserOpenCommand(url, platform, process.env[constants_1.BROWSER_ENV]);
60
+ if (!open)
61
+ return false;
62
+ try {
63
+ const child = (0, child_process_1.spawn)(open.command, open.args, {
64
+ detached: true,
65
+ stdio: 'ignore',
66
+ // `start` is a shell builtin reached through `cmd /c`, so no shell here.
67
+ shell: false,
68
+ });
69
+ child.on('error', () => {
70
+ /* no opener installed — the printed URL is the fallback */
71
+ });
72
+ child.unref();
73
+ return true;
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ //# sourceMappingURL=open-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/ui-server/open-browser.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAoBH,gDA0BC;AAWD,kCAkBC;AAzED,iDAAsC;AACtC,2CAA0C;AAEjC,4FAFA,uBAAW,OAEA;AAEpB,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAOxF;;;;;GAKG;AACH,SAAgB,kBAAkB,CAChC,GAAW,EACX,QAAyB,EACzB,QAAiB;IAEjB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5D,2EAA2E;QAC3E,2EAA2E;QAC3E,2EAA2E;QAC3E,2EAA2E;QAC3E,0EAA0E;QAC1E,2EAA2E;QAC3E,oEAAoE;QACpE,IAAI,QAAQ,KAAK,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;QAChF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC3C,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACnE,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,uEAAuE;QACvE,yEAAyE;QACzE,iCAAiC;QACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,WAAW,CAAC,GAAW,EAAE,WAA4B,OAAO,CAAC,QAAQ;IACnF,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAW,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;YAC3C,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;YACf,yEAAyE;YACzE,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,2DAA2D;QAC7D,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * The `cg ui` server's security boundary.
3
+ *
4
+ * Threat model, stated plainly: this process serves a browser-readable view of
5
+ * the user's SOURCE CODE from a port on their machine. It binds loopback, so
6
+ * nothing on the network can reach it. That leaves one realistic attack —
7
+ * **DNS rebinding**: any page the user visits can point `evil.example` at
8
+ * `127.0.0.1` and then have the browser issue same-origin requests to us. The
9
+ * browser will happily connect; the only thing that distinguishes the attacker's
10
+ * request from the viewer's own is the `Host` header, which the browser fills in
11
+ * from the URL and script cannot forge.
12
+ *
13
+ * So the rules are:
14
+ *
15
+ * - **`Host` must be a loopback name** (`localhost`, `127.0.0.1`, `[::1]`) and,
16
+ * if it carries a port, that port must be ours. Anything else is 403.
17
+ * - **`Origin`, when present, must be loopback too.** Belt and braces: absent on
18
+ * the viewer's own same-origin GETs, and present-and-foreign only on a
19
+ * cross-site request we want nothing to do with.
20
+ * - **No CORS headers, ever.** Not adding `Access-Control-Allow-Origin` is what
21
+ * keeps a cross-origin reader from seeing a response body even if it does
22
+ * reach us. There is deliberately no way to turn this on.
23
+ * - **GET/HEAD everywhere; POST/DELETE only under `/api/`, and only for a
24
+ * request that could not have been forged by a form.** See
25
+ * {@link isWriteRequest} below — the viewer went from a pure reader to one
26
+ * that saves trails into `.codegraph/ui/`, and that is the entire change to
27
+ * this boundary.
28
+ * - **Every path resolves through {@link validatePathWithinRoot}** — the same
29
+ * chokepoint the MCP read sinks use, which catches `../` traversal AND
30
+ * in-tree symlinks pointing out of the root (#527).
31
+ */
32
+ import { PathRefusalError } from '../errors';
33
+ export { PathRefusalError };
34
+ /** Methods that answer anywhere: the viewer's assets and every read endpoint. */
35
+ export declare const READ_METHODS: readonly string[];
36
+ /**
37
+ * Methods that answer under `/api/` only, and only for a request carrying
38
+ * {@link WRITE_HEADER}. The viewer's one write is a saved trail.
39
+ */
40
+ export declare const WRITE_METHODS: readonly string[];
41
+ /** HTTP methods the viewer server answers at all. Everything else is 405. */
42
+ export declare const ALLOWED_METHODS: readonly string[];
43
+ /**
44
+ * The header a write has to carry.
45
+ *
46
+ * Belt and braces behind the `Host` and `Origin` checks, and worth the two
47
+ * lines because it fails *differently*: a custom request header cannot be sent
48
+ * cross-origin without a CORS preflight, and this server answers no preflight
49
+ * and sends no `Access-Control-*` header, so the browser never issues the real
50
+ * request. That closes the one shape those checks lean on a header for — a
51
+ * `<form method="post">` submitted from another page, which sends no `Origin`
52
+ * in some older browsers and cannot set a custom header in any of them.
53
+ */
54
+ export declare const WRITE_HEADER = "x-codegraph-ui";
55
+ export declare function isWriteMethod(method: string): boolean;
56
+ /**
57
+ * Whether a mutating request is one the viewer could have made.
58
+ *
59
+ * @param method the request method, already known to be a write method
60
+ * @param pathname the raw request path
61
+ * @param headers `x-codegraph-ui` and, for a body-carrying method, `content-type`
62
+ */
63
+ export declare function isWriteRequest(pathname: string, headers: {
64
+ marker: string | undefined;
65
+ contentType: string | undefined;
66
+ }): {
67
+ ok: true;
68
+ } | {
69
+ ok: false;
70
+ reason: string;
71
+ };
72
+ /**
73
+ * Whether a request's `Host` header names this loopback server.
74
+ *
75
+ * A missing `Host` is rejected: HTTP/1.1 requires it, and the one client that
76
+ * may legally omit it (HTTP/1.0) is not a browser we need to serve.
77
+ */
78
+ export declare function isAllowedHost(host: string | undefined, port: number): boolean;
79
+ /**
80
+ * Whether a request's `Origin` header is acceptable.
81
+ *
82
+ * An ABSENT `Origin` is allowed — browsers omit it on same-origin GETs, which
83
+ * is every request the viewer makes. A present one must be loopback-on-our-port;
84
+ * the literal `null` origin (sandboxed iframe, `file://` page) is refused.
85
+ */
86
+ export declare function isAllowedOrigin(origin: string | undefined, port: number): boolean;
87
+ /**
88
+ * Whether a raw request path is worth resolving at all.
89
+ *
90
+ * Rejects any `..` segment outright rather than letting containment sort it
91
+ * out later. Containment WOULD catch it — but the SPA fallback sits behind
92
+ * containment, so `GET /../../etc/passwd` would otherwise be answered with the
93
+ * app shell (a 200) instead of the 404 a traversal attempt deserves. Nothing
94
+ * outside the root leaks either way; this just stops the server from
95
+ * pretending a hostile path was an ordinary route.
96
+ *
97
+ * Takes the RAW path from `req.url`, before WHATWG URL parsing folds `..`
98
+ * segments away — that folding is what would hide the attempt.
99
+ */
100
+ export declare function isSafeRequestPath(rawPath: string): boolean;
101
+ /**
102
+ * Resolve a request path to a file inside the static asset root.
103
+ *
104
+ * Returns the absolute path, or `null` for anything that is not a readable file
105
+ * inside `rootDir` — a traversal attempt, a symlink escape, a directory, a
106
+ * missing file. Callers turn `null` into a 404 (never a 403): telling a prober
107
+ * which of those it hit is free information.
108
+ *
109
+ * Percent-decoding happens HERE, before containment is checked, so an encoded
110
+ * `..%2f` is caught by the same guard as a literal `../`.
111
+ */
112
+ export declare function resolveStaticAsset(rootDir: string, urlPath: string): string | null;
113
+ /**
114
+ * Resolve a project-relative source path to an absolute path that is safe to
115
+ * read and hand to the browser.
116
+ *
117
+ * This is the single read chokepoint for anything served OUT OF THE USER'S
118
+ * REPOSITORY (as opposed to the viewer's own bundled assets). The JSON API
119
+ * built on top of this server must route every file read through it — that is
120
+ * what keeps `/api/source?path=../../.ssh/id_rsa` from being a credential leak
121
+ * over a port the user opened to read their own code.
122
+ *
123
+ * @throws {PathRefusalError} when the root is a sensitive system directory, or
124
+ * the path escapes the root by traversal or symlink.
125
+ */
126
+ export declare function resolveProjectFile(projectRoot: string, relativePath: string): string;
127
+ //# sourceMappingURL=security.d.ts.map