codesift-mcp 0.14.0 → 0.15.1

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 (458) hide show
  1. package/README.md +5 -1
  2. package/dist/cli/commands-admin.d.ts +18 -0
  3. package/dist/cli/commands-admin.d.ts.map +1 -0
  4. package/dist/cli/commands-admin.js +187 -0
  5. package/dist/cli/commands-admin.js.map +1 -0
  6. package/dist/cli/commands-daemon.d.ts +42 -0
  7. package/dist/cli/commands-daemon.d.ts.map +1 -0
  8. package/dist/cli/commands-daemon.js +163 -0
  9. package/dist/cli/commands-daemon.js.map +1 -0
  10. package/dist/cli/commands-index.d.ts +12 -0
  11. package/dist/cli/commands-index.d.ts.map +1 -0
  12. package/dist/cli/commands-index.js +133 -0
  13. package/dist/cli/commands-index.js.map +1 -0
  14. package/dist/cli/commands-maintenance.d.ts +12 -0
  15. package/dist/cli/commands-maintenance.d.ts.map +1 -0
  16. package/dist/cli/commands-maintenance.js +409 -0
  17. package/dist/cli/commands-maintenance.js.map +1 -0
  18. package/dist/cli/commands-query.d.ts +21 -0
  19. package/dist/cli/commands-query.d.ts.map +1 -0
  20. package/dist/cli/commands-query.js +270 -0
  21. package/dist/cli/commands-query.js.map +1 -0
  22. package/dist/cli/commands.d.ts +2 -36
  23. package/dist/cli/commands.d.ts.map +1 -1
  24. package/dist/cli/commands.js +8 -867
  25. package/dist/cli/commands.js.map +1 -1
  26. package/dist/cli/embed-child.js +13 -2
  27. package/dist/cli/embed-child.js.map +1 -1
  28. package/dist/instructions.d.ts +1 -1
  29. package/dist/instructions.d.ts.map +1 -1
  30. package/dist/instructions.js +5 -2
  31. package/dist/instructions.js.map +1 -1
  32. package/dist/parser/extractors/php-class-metadata.d.ts +10 -0
  33. package/dist/parser/extractors/php-class-metadata.d.ts.map +1 -0
  34. package/dist/parser/extractors/php-class-metadata.js +65 -0
  35. package/dist/parser/extractors/php-class-metadata.js.map +1 -0
  36. package/dist/parser/extractors/php-doc.d.ts +13 -0
  37. package/dist/parser/extractors/php-doc.d.ts.map +1 -0
  38. package/dist/parser/extractors/php-doc.js +39 -0
  39. package/dist/parser/extractors/php-doc.js.map +1 -0
  40. package/dist/parser/extractors/php-node-metadata.d.ts +26 -0
  41. package/dist/parser/extractors/php-node-metadata.d.ts.map +1 -0
  42. package/dist/parser/extractors/php-node-metadata.js +132 -0
  43. package/dist/parser/extractors/php-node-metadata.js.map +1 -0
  44. package/dist/parser/extractors/php-symbol-builders.d.ts +13 -0
  45. package/dist/parser/extractors/php-symbol-builders.d.ts.map +1 -0
  46. package/dist/parser/extractors/php-symbol-builders.js +58 -0
  47. package/dist/parser/extractors/php-symbol-builders.js.map +1 -0
  48. package/dist/parser/extractors/php-walker.d.ts +4 -0
  49. package/dist/parser/extractors/php-walker.d.ts.map +1 -0
  50. package/dist/parser/extractors/php-walker.js +238 -0
  51. package/dist/parser/extractors/php-walker.js.map +1 -0
  52. package/dist/parser/extractors/php.d.ts +2 -33
  53. package/dist/parser/extractors/php.d.ts.map +1 -1
  54. package/dist/parser/extractors/php.js +2 -747
  55. package/dist/parser/extractors/php.js.map +1 -1
  56. package/dist/register-tool-loaders.d.ts +11 -11
  57. package/dist/register-tool-loaders.d.ts.map +1 -1
  58. package/dist/register-tools/runtime.d.ts +11 -0
  59. package/dist/register-tools/runtime.d.ts.map +1 -1
  60. package/dist/register-tools/runtime.js +40 -0
  61. package/dist/register-tools/runtime.js.map +1 -1
  62. package/dist/register-tools.d.ts.map +1 -1
  63. package/dist/register-tools.js +5 -1
  64. package/dist/register-tools.js.map +1 -1
  65. package/dist/retrieval/semantic-handlers.d.ts.map +1 -1
  66. package/dist/retrieval/semantic-handlers.js +10 -3
  67. package/dist/retrieval/semantic-handlers.js.map +1 -1
  68. package/dist/search/semantic.d.ts +2 -0
  69. package/dist/search/semantic.d.ts.map +1 -1
  70. package/dist/search/semantic.js +41 -9
  71. package/dist/search/semantic.js.map +1 -1
  72. package/dist/storage/chunk-store.d.ts +14 -2
  73. package/dist/storage/chunk-store.d.ts.map +1 -1
  74. package/dist/storage/chunk-store.js +214 -34
  75. package/dist/storage/chunk-store.js.map +1 -1
  76. package/dist/storage/embedding-store.d.ts +0 -12
  77. package/dist/storage/embedding-store.d.ts.map +1 -1
  78. package/dist/storage/embedding-store.js +69 -9
  79. package/dist/storage/embedding-store.js.map +1 -1
  80. package/dist/storage/index-cache.d.ts +12 -0
  81. package/dist/storage/index-cache.d.ts.map +1 -0
  82. package/dist/storage/index-cache.js +89 -0
  83. package/dist/storage/index-cache.js.map +1 -0
  84. package/dist/storage/index-json-mutations.d.ts +11 -0
  85. package/dist/storage/index-json-mutations.d.ts.map +1 -0
  86. package/dist/storage/index-json-mutations.js +93 -0
  87. package/dist/storage/index-json-mutations.js.map +1 -0
  88. package/dist/storage/index-migration.d.ts +22 -0
  89. package/dist/storage/index-migration.d.ts.map +1 -0
  90. package/dist/storage/index-migration.js +80 -0
  91. package/dist/storage/index-migration.js.map +1 -0
  92. package/dist/storage/index-store.d.ts +5 -61
  93. package/dist/storage/index-store.d.ts.map +1 -1
  94. package/dist/storage/index-store.js +33 -414
  95. package/dist/storage/index-store.js.map +1 -1
  96. package/dist/storage/index-version.d.ts +39 -0
  97. package/dist/storage/index-version.d.ts.map +1 -0
  98. package/dist/storage/index-version.js +87 -0
  99. package/dist/storage/index-version.js.map +1 -0
  100. package/dist/storage/registry.d.ts +9 -1
  101. package/dist/storage/registry.d.ts.map +1 -1
  102. package/dist/storage/registry.js +169 -8
  103. package/dist/storage/registry.js.map +1 -1
  104. package/dist/storage/shared-embedding-cache.d.ts +23 -3
  105. package/dist/storage/shared-embedding-cache.d.ts.map +1 -1
  106. package/dist/storage/shared-embedding-cache.js +300 -45
  107. package/dist/storage/shared-embedding-cache.js.map +1 -1
  108. package/dist/storage/telemetry/config.d.ts.map +1 -1
  109. package/dist/storage/telemetry/config.js +3 -2
  110. package/dist/storage/telemetry/config.js.map +1 -1
  111. package/dist/storage/telemetry/retro-aggregator.d.ts +21 -0
  112. package/dist/storage/telemetry/retro-aggregator.d.ts.map +1 -1
  113. package/dist/storage/telemetry/retro-aggregator.js +58 -16
  114. package/dist/storage/telemetry/retro-aggregator.js.map +1 -1
  115. package/dist/storage/telemetry/sanitizer.d.ts +16 -0
  116. package/dist/storage/telemetry/sanitizer.d.ts.map +1 -1
  117. package/dist/storage/telemetry/sanitizer.js +2 -0
  118. package/dist/storage/telemetry/sanitizer.js.map +1 -1
  119. package/dist/storage/telemetry/uploader.d.ts +3 -1
  120. package/dist/storage/telemetry/uploader.d.ts.map +1 -1
  121. package/dist/storage/telemetry/uploader.js +158 -21
  122. package/dist/storage/telemetry/uploader.js.map +1 -1
  123. package/dist/storage/usage-tracker.d.ts +8 -12
  124. package/dist/storage/usage-tracker.d.ts.map +1 -1
  125. package/dist/storage/usage-tracker.js +74 -1
  126. package/dist/storage/usage-tracker.js.map +1 -1
  127. package/dist/tools/cross-repo-contract-adapters.d.ts +39 -0
  128. package/dist/tools/cross-repo-contract-adapters.d.ts.map +1 -0
  129. package/dist/tools/cross-repo-contract-adapters.js +70 -0
  130. package/dist/tools/cross-repo-contract-adapters.js.map +1 -0
  131. package/dist/tools/cross-repo-contract-group.d.ts +17 -0
  132. package/dist/tools/cross-repo-contract-group.d.ts.map +1 -0
  133. package/dist/tools/cross-repo-contract-group.js +89 -0
  134. package/dist/tools/cross-repo-contract-group.js.map +1 -0
  135. package/dist/tools/cross-repo-contract-matcher.d.ts +24 -0
  136. package/dist/tools/cross-repo-contract-matcher.d.ts.map +1 -0
  137. package/dist/tools/cross-repo-contract-matcher.js +134 -0
  138. package/dist/tools/cross-repo-contract-matcher.js.map +1 -0
  139. package/dist/tools/cross-repo-contract-resolver.d.ts +9 -0
  140. package/dist/tools/cross-repo-contract-resolver.d.ts.map +1 -0
  141. package/dist/tools/cross-repo-contract-resolver.js +86 -0
  142. package/dist/tools/cross-repo-contract-resolver.js.map +1 -0
  143. package/dist/tools/cross-repo-contract-tools.d.ts +12 -135
  144. package/dist/tools/cross-repo-contract-tools.d.ts.map +1 -1
  145. package/dist/tools/cross-repo-contract-tools.js +8 -589
  146. package/dist/tools/cross-repo-contract-tools.js.map +1 -1
  147. package/dist/tools/cross-repo-contract-types.d.ts +30 -0
  148. package/dist/tools/cross-repo-contract-types.d.ts.map +1 -0
  149. package/dist/tools/cross-repo-contract-types.js +3 -0
  150. package/dist/tools/cross-repo-contract-types.js.map +1 -0
  151. package/dist/tools/cross-repo-outbound-calls.d.ts +28 -0
  152. package/dist/tools/cross-repo-outbound-calls.d.ts.map +1 -0
  153. package/dist/tools/cross-repo-outbound-calls.js +347 -0
  154. package/dist/tools/cross-repo-outbound-calls.js.map +1 -0
  155. package/dist/tools/cross-repo-outbound-lexer/call-detectors.d.ts.map +1 -1
  156. package/dist/tools/cross-repo-outbound-lexer/call-detectors.js +2 -0
  157. package/dist/tools/cross-repo-outbound-lexer/call-detectors.js.map +1 -1
  158. package/dist/tools/cross-repo-outbound-lexer/types.d.ts +2 -0
  159. package/dist/tools/cross-repo-outbound-lexer/types.d.ts.map +1 -1
  160. package/dist/tools/index-tools/file-indexer.js +3 -3
  161. package/dist/tools/index-tools/file-indexer.js.map +1 -1
  162. package/dist/tools/index-tools/folder-indexer.d.ts.map +1 -1
  163. package/dist/tools/index-tools/folder-indexer.js +47 -2
  164. package/dist/tools/index-tools/folder-indexer.js.map +1 -1
  165. package/dist/tools/index-tools/parse.d.ts +12 -3
  166. package/dist/tools/index-tools/parse.d.ts.map +1 -1
  167. package/dist/tools/index-tools/parse.js +33 -8
  168. package/dist/tools/index-tools/parse.js.map +1 -1
  169. package/dist/tools/index-tools/registry.d.ts +19 -0
  170. package/dist/tools/index-tools/registry.d.ts.map +1 -1
  171. package/dist/tools/index-tools/registry.js +88 -2
  172. package/dist/tools/index-tools/registry.js.map +1 -1
  173. package/dist/tools/index-tools/state.d.ts +31 -0
  174. package/dist/tools/index-tools/state.d.ts.map +1 -1
  175. package/dist/tools/index-tools/state.js +53 -0
  176. package/dist/tools/index-tools/state.js.map +1 -1
  177. package/dist/tools/index-tools/types.d.ts +9 -0
  178. package/dist/tools/index-tools/types.d.ts.map +1 -1
  179. package/dist/tools/index-tools/watcher.js +3 -3
  180. package/dist/tools/index-tools/watcher.js.map +1 -1
  181. package/dist/tools/index-tools/worktree-seed.d.ts +44 -0
  182. package/dist/tools/index-tools/worktree-seed.d.ts.map +1 -0
  183. package/dist/tools/index-tools/worktree-seed.js +302 -0
  184. package/dist/tools/index-tools/worktree-seed.js.map +1 -0
  185. package/dist/tools/index-tools.d.ts.map +1 -1
  186. package/dist/tools/index-tools.js +3 -1
  187. package/dist/tools/index-tools.js.map +1 -1
  188. package/dist/tools/nest-ext-tools/graphql.d.ts +17 -0
  189. package/dist/tools/nest-ext-tools/graphql.d.ts.map +1 -0
  190. package/dist/tools/nest-ext-tools/graphql.js +54 -0
  191. package/dist/tools/nest-ext-tools/graphql.js.map +1 -0
  192. package/dist/tools/nest-ext-tools/microservice.d.ts +17 -0
  193. package/dist/tools/nest-ext-tools/microservice.d.ts.map +1 -0
  194. package/dist/tools/nest-ext-tools/microservice.js +51 -0
  195. package/dist/tools/nest-ext-tools/microservice.js.map +1 -0
  196. package/dist/tools/nest-ext-tools/openapi.d.ts +81 -0
  197. package/dist/tools/nest-ext-tools/openapi.d.ts.map +1 -0
  198. package/dist/tools/nest-ext-tools/openapi.js +254 -0
  199. package/dist/tools/nest-ext-tools/openapi.js.map +1 -0
  200. package/dist/tools/nest-ext-tools/queue.d.ts +27 -0
  201. package/dist/tools/nest-ext-tools/queue.d.ts.map +1 -0
  202. package/dist/tools/nest-ext-tools/queue.js +95 -0
  203. package/dist/tools/nest-ext-tools/queue.js.map +1 -0
  204. package/dist/tools/nest-ext-tools/schedule.d.ts +19 -0
  205. package/dist/tools/nest-ext-tools/schedule.d.ts.map +1 -0
  206. package/dist/tools/nest-ext-tools/schedule.js +89 -0
  207. package/dist/tools/nest-ext-tools/schedule.js.map +1 -0
  208. package/dist/tools/nest-ext-tools/scope.d.ts +19 -0
  209. package/dist/tools/nest-ext-tools/scope.d.ts.map +1 -0
  210. package/dist/tools/nest-ext-tools/scope.js +151 -0
  211. package/dist/tools/nest-ext-tools/scope.js.map +1 -0
  212. package/dist/tools/nest-ext-tools/shared.d.ts +33 -0
  213. package/dist/tools/nest-ext-tools/shared.d.ts.map +1 -0
  214. package/dist/tools/nest-ext-tools/shared.js +279 -0
  215. package/dist/tools/nest-ext-tools/shared.js.map +1 -0
  216. package/dist/tools/nest-ext-tools/typeorm.d.ts +22 -0
  217. package/dist/tools/nest-ext-tools/typeorm.d.ts.map +1 -0
  218. package/dist/tools/nest-ext-tools/typeorm.js +59 -0
  219. package/dist/tools/nest-ext-tools/typeorm.js.map +1 -0
  220. package/dist/tools/nest-ext-tools/websocket.d.ts +21 -0
  221. package/dist/tools/nest-ext-tools/websocket.d.ts.map +1 -0
  222. package/dist/tools/nest-ext-tools/websocket.js +70 -0
  223. package/dist/tools/nest-ext-tools/websocket.js.map +1 -0
  224. package/dist/tools/nest-ext-tools.d.ts +10 -204
  225. package/dist/tools/nest-ext-tools.d.ts.map +1 -1
  226. package/dist/tools/nest-ext-tools.js +10 -749
  227. package/dist/tools/nest-ext-tools.js.map +1 -1
  228. package/dist/tools/perf-tools.js +2 -2
  229. package/dist/tools/python-audit/checks/dead-code.d.ts +1 -1
  230. package/dist/tools/python-audit/checks/dead-code.d.ts.map +1 -1
  231. package/dist/tools/python-constants/constant-match.d.ts +5 -0
  232. package/dist/tools/python-constants/constant-match.d.ts.map +1 -0
  233. package/dist/tools/python-constants/constant-match.js +24 -0
  234. package/dist/tools/python-constants/constant-match.js.map +1 -0
  235. package/dist/tools/python-constants/file-context.d.ts +5 -0
  236. package/dist/tools/python-constants/file-context.d.ts.map +1 -0
  237. package/dist/tools/python-constants/file-context.js +91 -0
  238. package/dist/tools/python-constants/file-context.js.map +1 -0
  239. package/dist/tools/python-constants/function-defaults.d.ts +5 -0
  240. package/dist/tools/python-constants/function-defaults.d.ts.map +1 -0
  241. package/dist/tools/python-constants/function-defaults.js +98 -0
  242. package/dist/tools/python-constants/function-defaults.js.map +1 -0
  243. package/dist/tools/python-constants/model.d.ts +78 -0
  244. package/dist/tools/python-constants/model.d.ts.map +1 -0
  245. package/dist/tools/python-constants/model.js +2 -0
  246. package/dist/tools/python-constants/model.js.map +1 -0
  247. package/dist/tools/python-constants/syntax.d.ts +22 -0
  248. package/dist/tools/python-constants/syntax.d.ts.map +1 -0
  249. package/dist/tools/python-constants/syntax.js +93 -0
  250. package/dist/tools/python-constants/syntax.js.map +1 -0
  251. package/dist/tools/python-constants/value-resolver.d.ts +6 -0
  252. package/dist/tools/python-constants/value-resolver.d.ts.map +1 -0
  253. package/dist/tools/python-constants/value-resolver.js +320 -0
  254. package/dist/tools/python-constants/value-resolver.js.map +1 -0
  255. package/dist/tools/python-constants-tools.d.ts +3 -45
  256. package/dist/tools/python-constants-tools.d.ts.map +1 -1
  257. package/dist/tools/python-constants-tools.js +2 -505
  258. package/dist/tools/python-constants-tools.js.map +1 -1
  259. package/dist/tools/route-tools/django.d.ts +8 -0
  260. package/dist/tools/route-tools/django.d.ts.map +1 -0
  261. package/dist/tools/route-tools/django.js +52 -0
  262. package/dist/tools/route-tools/django.js.map +1 -0
  263. package/dist/tools/route-tools/express.d.ts +5 -0
  264. package/dist/tools/route-tools/express.d.ts.map +1 -0
  265. package/dist/tools/route-tools/express.js +33 -0
  266. package/dist/tools/route-tools/express.js.map +1 -0
  267. package/dist/tools/route-tools/file-sources.d.ts +7 -0
  268. package/dist/tools/route-tools/file-sources.d.ts.map +1 -0
  269. package/dist/tools/route-tools/file-sources.js +15 -0
  270. package/dist/tools/route-tools/file-sources.js.map +1 -0
  271. package/dist/tools/route-tools/handler-discovery.d.ts +4 -0
  272. package/dist/tools/route-tools/handler-discovery.d.ts.map +1 -0
  273. package/dist/tools/route-tools/handler-discovery.js +38 -0
  274. package/dist/tools/route-tools/handler-discovery.js.map +1 -0
  275. package/dist/tools/route-tools/hono.d.ts +5 -0
  276. package/dist/tools/route-tools/hono.d.ts.map +1 -0
  277. package/dist/tools/route-tools/hono.js +61 -0
  278. package/dist/tools/route-tools/hono.js.map +1 -0
  279. package/dist/tools/route-tools/ktor.d.ts +5 -0
  280. package/dist/tools/route-tools/ktor.d.ts.map +1 -0
  281. package/dist/tools/route-tools/ktor.js +76 -0
  282. package/dist/tools/route-tools/ktor.js.map +1 -0
  283. package/dist/tools/route-tools/laravel.d.ts +5 -0
  284. package/dist/tools/route-tools/laravel.d.ts.map +1 -0
  285. package/dist/tools/route-tools/laravel.js +45 -0
  286. package/dist/tools/route-tools/laravel.js.map +1 -0
  287. package/dist/tools/route-tools/mermaid-call-chain.d.ts +3 -0
  288. package/dist/tools/route-tools/mermaid-call-chain.d.ts.map +1 -0
  289. package/dist/tools/route-tools/mermaid-call-chain.js +50 -0
  290. package/dist/tools/route-tools/mermaid-call-chain.js.map +1 -0
  291. package/dist/tools/route-tools/nest.d.ts +5 -0
  292. package/dist/tools/route-tools/nest.d.ts.map +1 -0
  293. package/dist/tools/route-tools/nest.js +75 -0
  294. package/dist/tools/route-tools/nest.js.map +1 -0
  295. package/dist/tools/route-tools/next-trace.d.ts +4 -0
  296. package/dist/tools/route-tools/next-trace.d.ts.map +1 -0
  297. package/dist/tools/route-tools/next-trace.js +48 -0
  298. package/dist/tools/route-tools/next-trace.js.map +1 -0
  299. package/dist/tools/route-tools/next.d.ts +7 -0
  300. package/dist/tools/route-tools/next.d.ts.map +1 -0
  301. package/dist/tools/route-tools/next.js +77 -0
  302. package/dist/tools/route-tools/next.js.map +1 -0
  303. package/dist/tools/route-tools/python-decorators.d.ts +7 -0
  304. package/dist/tools/route-tools/python-decorators.d.ts.map +1 -0
  305. package/dist/tools/route-tools/python-decorators.js +53 -0
  306. package/dist/tools/route-tools/python-decorators.js.map +1 -0
  307. package/dist/tools/route-tools/route-mermaid.d.ts +4 -0
  308. package/dist/tools/route-tools/route-mermaid.d.ts.map +1 -0
  309. package/dist/tools/route-tools/route-mermaid.js +53 -0
  310. package/dist/tools/route-tools/route-mermaid.js.map +1 -0
  311. package/dist/tools/route-tools/spring-kotlin.d.ts +5 -0
  312. package/dist/tools/route-tools/spring-kotlin.d.ts.map +1 -0
  313. package/dist/tools/route-tools/spring-kotlin.js +52 -0
  314. package/dist/tools/route-tools/spring-kotlin.js.map +1 -0
  315. package/dist/tools/route-tools/trace-analysis.d.ts +4 -0
  316. package/dist/tools/route-tools/trace-analysis.d.ts.map +1 -0
  317. package/dist/tools/route-tools/trace-analysis.js +37 -0
  318. package/dist/tools/route-tools/trace-analysis.js.map +1 -0
  319. package/dist/tools/route-tools/trace-route.d.ts +6 -0
  320. package/dist/tools/route-tools/trace-route.d.ts.map +1 -0
  321. package/dist/tools/route-tools/trace-route.js +53 -0
  322. package/dist/tools/route-tools/trace-route.js.map +1 -0
  323. package/dist/tools/route-tools/types.d.ts +35 -0
  324. package/dist/tools/route-tools/types.d.ts.map +1 -0
  325. package/dist/tools/route-tools/types.js +2 -0
  326. package/dist/tools/route-tools/types.js.map +1 -0
  327. package/dist/tools/route-tools/yii2.d.ts +5 -0
  328. package/dist/tools/route-tools/yii2.d.ts.map +1 -0
  329. package/dist/tools/route-tools/yii2.js +73 -0
  330. package/dist/tools/route-tools/yii2.js.map +1 -0
  331. package/dist/tools/route-tools.d.ts +7 -49
  332. package/dist/tools/route-tools.d.ts.map +1 -1
  333. package/dist/tools/route-tools.js +5 -978
  334. package/dist/tools/route-tools.js.map +1 -1
  335. package/dist/tools/symbol-analysis-tools.d.ts +81 -0
  336. package/dist/tools/symbol-analysis-tools.d.ts.map +1 -0
  337. package/dist/tools/symbol-analysis-tools.js +327 -0
  338. package/dist/tools/symbol-analysis-tools.js.map +1 -0
  339. package/dist/tools/symbol-context-tools.d.ts +68 -0
  340. package/dist/tools/symbol-context-tools.d.ts.map +1 -0
  341. package/dist/tools/symbol-context-tools.js +232 -0
  342. package/dist/tools/symbol-context-tools.js.map +1 -0
  343. package/dist/tools/symbol-lookup-tools.d.ts +77 -0
  344. package/dist/tools/symbol-lookup-tools.d.ts.map +1 -0
  345. package/dist/tools/symbol-lookup-tools.js +305 -0
  346. package/dist/tools/symbol-lookup-tools.js.map +1 -0
  347. package/dist/tools/symbol-reference-tools.d.ts +38 -0
  348. package/dist/tools/symbol-reference-tools.d.ts.map +1 -0
  349. package/dist/tools/symbol-reference-tools.js +253 -0
  350. package/dist/tools/symbol-reference-tools.js.map +1 -0
  351. package/dist/tools/symbol-tool-internals.d.ts +9 -0
  352. package/dist/tools/symbol-tool-internals.d.ts.map +1 -0
  353. package/dist/tools/symbol-tool-internals.js +47 -0
  354. package/dist/tools/symbol-tool-internals.js.map +1 -0
  355. package/dist/tools/symbol-tools.d.ts +11 -270
  356. package/dist/tools/symbol-tools.d.ts.map +1 -1
  357. package/dist/tools/symbol-tools.js +7 -1131
  358. package/dist/tools/symbol-tools.js.map +1 -1
  359. package/dist/tools/taint/python-context.d.ts +10 -0
  360. package/dist/tools/taint/python-context.d.ts.map +1 -0
  361. package/dist/tools/taint/python-context.js +150 -0
  362. package/dist/tools/taint/python-context.js.map +1 -0
  363. package/dist/tools/taint/taint-analyzer.d.ts +2 -0
  364. package/dist/tools/taint/taint-analyzer.d.ts.map +1 -0
  365. package/dist/tools/taint/taint-analyzer.js +2 -0
  366. package/dist/tools/taint/taint-analyzer.js.map +1 -0
  367. package/dist/tools/taint/taint-expression.d.ts +18 -0
  368. package/dist/tools/taint/taint-expression.d.ts.map +1 -0
  369. package/dist/tools/taint/taint-expression.js +265 -0
  370. package/dist/tools/taint/taint-expression.js.map +1 -0
  371. package/dist/tools/taint/taint-flow.d.ts +10 -0
  372. package/dist/tools/taint/taint-flow.d.ts.map +1 -0
  373. package/dist/tools/taint/taint-flow.js +178 -0
  374. package/dist/tools/taint/taint-flow.js.map +1 -0
  375. package/dist/tools/taint/taint-model.d.ts +113 -0
  376. package/dist/tools/taint/taint-model.d.ts.map +1 -0
  377. package/dist/tools/taint/taint-model.js +277 -0
  378. package/dist/tools/taint/taint-model.js.map +1 -0
  379. package/dist/tools/taint-tools.d.ts +2 -34
  380. package/dist/tools/taint-tools.d.ts.map +1 -1
  381. package/dist/tools/taint-tools.js +2 -852
  382. package/dist/tools/taint-tools.js.map +1 -1
  383. package/dist/tools/typescript-constants/file-context.d.ts +7 -0
  384. package/dist/tools/typescript-constants/file-context.d.ts.map +1 -0
  385. package/dist/tools/typescript-constants/file-context.js +219 -0
  386. package/dist/tools/typescript-constants/file-context.js.map +1 -0
  387. package/dist/tools/typescript-constants/symbol-resolver.d.ts +7 -0
  388. package/dist/tools/typescript-constants/symbol-resolver.d.ts.map +1 -0
  389. package/dist/tools/typescript-constants/symbol-resolver.js +165 -0
  390. package/dist/tools/typescript-constants/symbol-resolver.js.map +1 -0
  391. package/dist/tools/typescript-constants/types.d.ts +44 -0
  392. package/dist/tools/typescript-constants/types.d.ts.map +1 -0
  393. package/dist/tools/typescript-constants/types.js +2 -0
  394. package/dist/tools/typescript-constants/types.js.map +1 -0
  395. package/dist/tools/typescript-constants/value-evaluator.d.ts +8 -0
  396. package/dist/tools/typescript-constants/value-evaluator.d.ts.map +1 -0
  397. package/dist/tools/typescript-constants/value-evaluator.js +404 -0
  398. package/dist/tools/typescript-constants/value-evaluator.js.map +1 -0
  399. package/dist/tools/typescript-constants-tools.d.ts.map +1 -1
  400. package/dist/tools/typescript-constants-tools.js +19 -709
  401. package/dist/tools/typescript-constants-tools.js.map +1 -1
  402. package/dist/utils/import-graph/collect.d.ts +5 -0
  403. package/dist/utils/import-graph/collect.d.ts.map +1 -0
  404. package/dist/utils/import-graph/collect.js +47 -0
  405. package/dist/utils/import-graph/collect.js.map +1 -0
  406. package/dist/utils/import-graph/edge-accumulator.d.ts +7 -0
  407. package/dist/utils/import-graph/edge-accumulator.d.ts.map +1 -0
  408. package/dist/utils/import-graph/edge-accumulator.js +47 -0
  409. package/dist/utils/import-graph/edge-accumulator.js.map +1 -0
  410. package/dist/utils/import-graph/language-imports.d.ts +6 -0
  411. package/dist/utils/import-graph/language-imports.d.ts.map +1 -0
  412. package/dist/utils/import-graph/language-imports.js +84 -0
  413. package/dist/utils/import-graph/language-imports.js.map +1 -0
  414. package/dist/utils/import-graph/metrics.d.ts +6 -0
  415. package/dist/utils/import-graph/metrics.d.ts.map +1 -0
  416. package/dist/utils/import-graph/metrics.js +51 -0
  417. package/dist/utils/import-graph/metrics.js.map +1 -0
  418. package/dist/utils/import-graph/path-map.d.ts +7 -0
  419. package/dist/utils/import-graph/path-map.d.ts.map +1 -0
  420. package/dist/utils/import-graph/path-map.js +56 -0
  421. package/dist/utils/import-graph/path-map.js.map +1 -0
  422. package/dist/utils/import-graph/python-php-edge-collectors.d.ts +5 -0
  423. package/dist/utils/import-graph/python-php-edge-collectors.d.ts.map +1 -0
  424. package/dist/utils/import-graph/python-php-edge-collectors.js +56 -0
  425. package/dist/utils/import-graph/python-php-edge-collectors.js.map +1 -0
  426. package/dist/utils/import-graph/source-edge-collector.d.ts +13 -0
  427. package/dist/utils/import-graph/source-edge-collector.d.ts.map +1 -0
  428. package/dist/utils/import-graph/source-edge-collector.js +42 -0
  429. package/dist/utils/import-graph/source-edge-collector.js.map +1 -0
  430. package/dist/utils/import-graph/source-imports.d.ts +5 -0
  431. package/dist/utils/import-graph/source-imports.d.ts.map +1 -0
  432. package/dist/utils/import-graph/source-imports.js +33 -0
  433. package/dist/utils/import-graph/source-imports.js.map +1 -0
  434. package/dist/utils/import-graph/types.d.ts +15 -0
  435. package/dist/utils/import-graph/types.d.ts.map +1 -0
  436. package/dist/utils/import-graph/types.js +2 -0
  437. package/dist/utils/import-graph/types.js.map +1 -0
  438. package/dist/utils/import-graph/typescript-edge-collector.d.ts +7 -0
  439. package/dist/utils/import-graph/typescript-edge-collector.d.ts.map +1 -0
  440. package/dist/utils/import-graph/typescript-edge-collector.js +58 -0
  441. package/dist/utils/import-graph/typescript-edge-collector.js.map +1 -0
  442. package/dist/utils/import-graph/workspace-alias.d.ts +7 -0
  443. package/dist/utils/import-graph/workspace-alias.d.ts.map +1 -0
  444. package/dist/utils/import-graph/workspace-alias.js +95 -0
  445. package/dist/utils/import-graph/workspace-alias.js.map +1 -0
  446. package/dist/utils/import-graph/workspace-entry.d.ts +3 -0
  447. package/dist/utils/import-graph/workspace-entry.d.ts.map +1 -0
  448. package/dist/utils/import-graph/workspace-entry.js +81 -0
  449. package/dist/utils/import-graph/workspace-entry.js.map +1 -0
  450. package/dist/utils/import-graph.d.ts +10 -94
  451. package/dist/utils/import-graph.d.ts.map +1 -1
  452. package/dist/utils/import-graph.js +6 -702
  453. package/dist/utils/import-graph.js.map +1 -1
  454. package/package.json +1 -1
  455. package/rules/codesift.md +11 -2
  456. package/rules/codesift.mdc +11 -2
  457. package/rules/codex.md +11 -2
  458. package/rules/gemini.md +11 -2
@@ -0,0 +1,178 @@
1
+ import { appendHop, cloneEnv, dedupePaths, isAllowedPattern, lineForNode, mergeEnvs, } from "./taint-model.js";
2
+ import { hasPotentialSink, hasPotentialSource, loadCallableContext, } from "./python-context.js";
3
+ import { addTrace, evaluateExpression, isSessionTarget } from "./taint-expression.js";
4
+ async function analyzeAssignment(assignmentNode, symbol, env, state, context) {
5
+ const lhs = assignmentNode.childForFieldName("left") ?? assignmentNode.namedChild(0);
6
+ const rhs = assignmentNode.childForFieldName("right") ?? assignmentNode.namedChild(1);
7
+ const nextEnv = cloneEnv(env);
8
+ if (!lhs || !rhs)
9
+ return nextEnv;
10
+ const rhsPaths = await evaluateExpression(rhs, symbol, env, state, context, analyzeCallableSymbol);
11
+ if (rhsPaths.length === 0)
12
+ return nextEnv;
13
+ if (lhs.type === "identifier") {
14
+ nextEnv.set(lhs.text, appendHop(rhsPaths, {
15
+ kind: "assignment",
16
+ file: symbol.file,
17
+ line: lineForNode(symbol, assignmentNode),
18
+ symbol_name: symbol.name,
19
+ detail: `${lhs.text} = ${rhs.text}`,
20
+ }));
21
+ return nextEnv;
22
+ }
23
+ if (isSessionTarget(lhs) && isAllowedPattern(state.defaultSinks, "session-write", lhs.text)) {
24
+ addTrace(state, context.entrySymbol, symbol, "session-write", assignmentNode, rhsPaths);
25
+ }
26
+ return nextEnv;
27
+ }
28
+ async function analyzeConditionalLike(node, symbol, env, state, context) {
29
+ const conditionNodes = node.namedChildren.filter((child) => child.type !== "block" && child.type !== "else_clause" && child.type !== "elif_clause");
30
+ for (const condition of conditionNodes) {
31
+ await evaluateExpression(condition, symbol, env, state, context, analyzeCallableSymbol);
32
+ }
33
+ const branchResults = [];
34
+ let hasElseLike = false;
35
+ for (const child of node.namedChildren) {
36
+ if (child.type === "block") {
37
+ branchResults.push(await analyzeBlock(child, symbol, cloneEnv(env), state, context));
38
+ continue;
39
+ }
40
+ if (child.type === "elif_clause") {
41
+ hasElseLike = true;
42
+ branchResults.push(await analyzeConditionalLike(child, symbol, cloneEnv(env), state, context));
43
+ continue;
44
+ }
45
+ if (child.type === "else_clause") {
46
+ hasElseLike = true;
47
+ const elseBlock = child.namedChildren.find((grandchild) => grandchild.type === "block");
48
+ if (elseBlock)
49
+ branchResults.push(await analyzeBlock(elseBlock, symbol, cloneEnv(env), state, context));
50
+ }
51
+ }
52
+ const baseEnvs = hasElseLike ? [] : [env];
53
+ return {
54
+ env: mergeEnvs(...baseEnvs, ...branchResults.map((entry) => entry.env)),
55
+ return_paths: dedupePaths(branchResults.flatMap((entry) => entry.return_paths)),
56
+ };
57
+ }
58
+ async function analyzeLoopLike(node, symbol, env, state, context) {
59
+ for (const child of node.namedChildren) {
60
+ if (child.type === "block")
61
+ continue;
62
+ await evaluateExpression(child, symbol, env, state, context, analyzeCallableSymbol);
63
+ }
64
+ const blockResults = [];
65
+ for (const child of node.namedChildren) {
66
+ if (child.type !== "block")
67
+ continue;
68
+ blockResults.push(await analyzeBlock(child, symbol, cloneEnv(env), state, context));
69
+ }
70
+ return {
71
+ env: mergeEnvs(env, ...blockResults.map((entry) => entry.env)),
72
+ return_paths: dedupePaths(blockResults.flatMap((entry) => entry.return_paths)),
73
+ };
74
+ }
75
+ async function analyzeStatement(node, symbol, env, state, context) {
76
+ switch (node.type) {
77
+ case "expression_statement": {
78
+ const inner = node.namedChildren[0];
79
+ if (!inner)
80
+ return { env, return_paths: [] };
81
+ if (inner.type === "assignment") {
82
+ return {
83
+ env: await analyzeAssignment(inner, symbol, env, state, context),
84
+ return_paths: [],
85
+ };
86
+ }
87
+ await evaluateExpression(inner, symbol, env, state, context, analyzeCallableSymbol);
88
+ return { env, return_paths: [] };
89
+ }
90
+ case "return_statement": {
91
+ const valueNode = node.namedChildren[0];
92
+ if (!valueNode)
93
+ return { env, return_paths: [] };
94
+ const valuePaths = await evaluateExpression(valueNode, symbol, env, state, context, analyzeCallableSymbol);
95
+ if (valuePaths.length === 0)
96
+ return { env, return_paths: [] };
97
+ return {
98
+ env,
99
+ return_paths: appendHop(valuePaths, {
100
+ kind: "return",
101
+ file: symbol.file,
102
+ line: lineForNode(symbol, node),
103
+ symbol_name: symbol.name,
104
+ detail: `return ${valueNode.text}`,
105
+ }),
106
+ };
107
+ }
108
+ case "if_statement":
109
+ case "elif_clause":
110
+ return await analyzeConditionalLike(node, symbol, env, state, context);
111
+ case "for_statement":
112
+ case "while_statement":
113
+ case "with_statement":
114
+ case "try_statement":
115
+ return await analyzeLoopLike(node, symbol, env, state, context);
116
+ case "pass_statement":
117
+ case "break_statement":
118
+ case "continue_statement":
119
+ return { env, return_paths: [] };
120
+ case "function_definition":
121
+ case "async_function_definition":
122
+ case "class_definition":
123
+ case "decorated_definition":
124
+ return { env, return_paths: [] };
125
+ default: {
126
+ for (const child of node.namedChildren) {
127
+ if (child.type === "block") {
128
+ await analyzeBlock(child, symbol, cloneEnv(env), state, context);
129
+ }
130
+ else {
131
+ await evaluateExpression(child, symbol, env, state, context, analyzeCallableSymbol);
132
+ }
133
+ }
134
+ return { env, return_paths: [] };
135
+ }
136
+ }
137
+ }
138
+ async function analyzeBlock(blockNode, symbol, env, state, context) {
139
+ let currentEnv = cloneEnv(env);
140
+ let returnPaths = [];
141
+ for (const child of blockNode.namedChildren) {
142
+ if (state.truncated)
143
+ break;
144
+ const result = await analyzeStatement(child, symbol, currentEnv, state, context);
145
+ currentEnv = result.env;
146
+ if (result.return_paths.length > 0) {
147
+ returnPaths = dedupePaths([...returnPaths, ...result.return_paths]);
148
+ }
149
+ }
150
+ return {
151
+ env: currentEnv,
152
+ return_paths: returnPaths,
153
+ };
154
+ }
155
+ async function analyzeCallableSymbol(symbol, initialEnv, state, context) {
156
+ const callableContext = await loadCallableContext(symbol, state);
157
+ if (!callableContext) {
158
+ return { env: initialEnv, return_paths: [] };
159
+ }
160
+ const bodyNode = callableContext.node.childForFieldName("body");
161
+ if (!bodyNode) {
162
+ return { env: initialEnv, return_paths: [] };
163
+ }
164
+ return await analyzeBlock(bodyNode, symbol, initialEnv, state, context);
165
+ }
166
+ function shouldAnalyzeSymbol(symbol, filePattern) {
167
+ if (!symbol.file.endsWith(".py"))
168
+ return false;
169
+ if (filePattern && !symbol.file.includes(filePattern))
170
+ return false;
171
+ if (!symbol.source)
172
+ return false;
173
+ if (symbol.kind !== "function" && symbol.kind !== "method")
174
+ return false;
175
+ return hasPotentialSource(symbol) || hasPotentialSink(symbol);
176
+ }
177
+ export { analyzeCallableSymbol, shouldAnalyzeSymbol };
178
+ //# sourceMappingURL=taint-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taint-flow.js","sourceRoot":"","sources":["../../../src/tools/taint/taint-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import type { Parser, Node as TSNode } from "web-tree-sitter";
2
+ import type { CodeIndex, CodeSymbol } from "../../types.js";
3
+ export type TaintTraceFramework = "python-django";
4
+ export type TaintHopKind = "assignment" | "call" | "return" | "container" | "attribute";
5
+ export interface TaintEndpoint {
6
+ kind: string;
7
+ label: string;
8
+ file: string;
9
+ line: number;
10
+ symbol_name: string;
11
+ code: string;
12
+ }
13
+ export interface TaintHop {
14
+ kind: TaintHopKind;
15
+ file: string;
16
+ line: number;
17
+ symbol_name: string;
18
+ detail: string;
19
+ }
20
+ export interface TaintTraceMatch {
21
+ entry_symbol: string;
22
+ entry_file: string;
23
+ source: TaintEndpoint;
24
+ sink: TaintEndpoint;
25
+ hops: TaintHop[];
26
+ confidence: "high" | "medium" | "low";
27
+ heuristic: boolean;
28
+ }
29
+ export interface TaintTraceResult {
30
+ framework: TaintTraceFramework;
31
+ analyzed_symbols: number;
32
+ source_patterns: string[];
33
+ sink_patterns: string[];
34
+ traces: TaintTraceMatch[];
35
+ truncated: boolean;
36
+ }
37
+ interface TaintPath {
38
+ source: TaintEndpoint;
39
+ hops: TaintHop[];
40
+ heuristic: boolean;
41
+ }
42
+ interface CallArgumentInfo {
43
+ node: TSNode;
44
+ keyword?: string;
45
+ index: number;
46
+ }
47
+ interface FileImportBinding {
48
+ imported_name: string;
49
+ source_file: string;
50
+ line: number;
51
+ }
52
+ interface PythonFileContext {
53
+ imports: Map<string, FileImportBinding>;
54
+ }
55
+ interface CallableContext {
56
+ node: TSNode;
57
+ parameter_names: string[];
58
+ }
59
+ interface BlockResult {
60
+ env: TaintEnv;
61
+ return_paths: TaintPath[];
62
+ }
63
+ interface SinkDescriptor {
64
+ kind: string;
65
+ matches: (calleeText: string) => boolean;
66
+ pickArgs: (args: CallArgumentInfo[]) => CallArgumentInfo[];
67
+ }
68
+ interface AnalysisState {
69
+ index: CodeIndex;
70
+ pythonParser: Parser;
71
+ symbolsByName: Map<string, CodeSymbol[]>;
72
+ methodsByParent: Map<string, CodeSymbol[]>;
73
+ callableCache: Map<string, CallableContext | null>;
74
+ fileContextCache: Map<string, PythonFileContext | null>;
75
+ defaultSources: string[];
76
+ defaultSinks: string[];
77
+ maxDepth: number;
78
+ maxTraces: number;
79
+ sinkDescriptors: SinkDescriptor[];
80
+ traceKeys: Set<string>;
81
+ traces: TaintTraceMatch[];
82
+ truncated: boolean;
83
+ }
84
+ type TaintEnv = Map<string, TaintPath[]>;
85
+ declare const DEFAULT_MAX_DEPTH = 4;
86
+ declare const DEFAULT_MAX_TRACES = 50;
87
+ declare const DEFAULT_SOURCE_PATTERNS: readonly ["request.GET", "request.POST", "request.body", "request.data", "request.headers", "request.COOKIES", "request.META"];
88
+ declare const DEFAULT_SINK_PATTERNS: readonly ["redirect", "mark_safe", "cursor.execute", "subprocess", "requests", "httpx", "open", "session-write"];
89
+ declare const KNOWN_SANITIZERS: Set<string>;
90
+ declare function dedupePaths(paths: TaintPath[]): TaintPath[];
91
+ declare function cloneEnv(env: TaintEnv): TaintEnv;
92
+ declare function mergeEnvs(...envs: TaintEnv[]): TaintEnv;
93
+ declare function appendHop(paths: TaintPath[], hop: TaintHop, options?: {
94
+ heuristic?: boolean;
95
+ }): TaintPath[];
96
+ declare function computeConfidence(path: TaintPath): "high" | "medium" | "low";
97
+ declare function lineForNode(symbol: CodeSymbol, node: TSNode): number;
98
+ declare function codeForNode(node: TSNode): string;
99
+ declare function getAttributePath(node: TSNode | null | undefined): string | null;
100
+ declare function getCallArguments(argsNode: TSNode | null | undefined): CallArgumentInfo[];
101
+ declare function getParameterName(node: TSNode): string | null;
102
+ declare function findFunctionNode(node: TSNode): TSNode | null;
103
+ declare function createSourcePath(sourceKind: string, symbol: CodeSymbol, node: TSNode): TaintPath;
104
+ declare function identifierPaths(env: TaintEnv, name: string): TaintPath[];
105
+ declare function isAllowedPattern(allowed: string[], kind: string, label: string): boolean;
106
+ declare function buildSinkDescriptors(): SinkDescriptor[];
107
+ declare function getImportModule(node: TSNode): {
108
+ module: string;
109
+ level: number;
110
+ };
111
+ export { DEFAULT_MAX_DEPTH, DEFAULT_MAX_TRACES, DEFAULT_SINK_PATTERNS, DEFAULT_SOURCE_PATTERNS, KNOWN_SANITIZERS, appendHop, buildSinkDescriptors, cloneEnv, codeForNode, computeConfidence, createSourcePath, dedupePaths, findFunctionNode, getAttributePath, getCallArguments, getImportModule, getParameterName, identifierPaths, isAllowedPattern, lineForNode, mergeEnvs, };
112
+ export type { AnalysisState, BlockResult, CallArgumentInfo, CallableContext, FileImportBinding, PythonFileContext, SinkDescriptor, TaintEnv, TaintPath, };
113
+ //# sourceMappingURL=taint-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taint-model.d.ts","sourceRoot":"","sources":["../../../src/tools/taint/taint-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,277 @@
1
+ const DEFAULT_MAX_DEPTH = 4;
2
+ const DEFAULT_MAX_TRACES = 50;
3
+ const DEFAULT_SOURCE_PATTERNS = [
4
+ "request.GET",
5
+ "request.POST",
6
+ "request.body",
7
+ "request.data",
8
+ "request.headers",
9
+ "request.COOKIES",
10
+ "request.META",
11
+ ];
12
+ const DEFAULT_SINK_PATTERNS = [
13
+ "redirect",
14
+ "mark_safe",
15
+ "cursor.execute",
16
+ "subprocess",
17
+ "requests",
18
+ "httpx",
19
+ "open",
20
+ "session-write",
21
+ ];
22
+ const KNOWN_SANITIZERS = new Set([
23
+ "escape",
24
+ "conditional_escape",
25
+ "urlquote",
26
+ "quote",
27
+ "quote_plus",
28
+ ]);
29
+ function clonePath(path) {
30
+ return {
31
+ source: { ...path.source },
32
+ hops: path.hops.map((hop) => ({ ...hop })),
33
+ heuristic: path.heuristic,
34
+ };
35
+ }
36
+ function pathKey(path) {
37
+ return JSON.stringify({
38
+ source: path.source,
39
+ hops: path.hops,
40
+ heuristic: path.heuristic,
41
+ });
42
+ }
43
+ function dedupePaths(paths) {
44
+ const seen = new Set();
45
+ const result = [];
46
+ for (const path of paths) {
47
+ const key = pathKey(path);
48
+ if (seen.has(key))
49
+ continue;
50
+ seen.add(key);
51
+ result.push(path);
52
+ }
53
+ return result;
54
+ }
55
+ function cloneEnv(env) {
56
+ const next = new Map();
57
+ for (const [name, paths] of env.entries()) {
58
+ next.set(name, paths.map(clonePath));
59
+ }
60
+ return next;
61
+ }
62
+ function mergeEnvs(...envs) {
63
+ const merged = new Map();
64
+ for (const env of envs) {
65
+ for (const [name, paths] of env.entries()) {
66
+ const existing = merged.get(name) ?? [];
67
+ merged.set(name, dedupePaths([...existing, ...paths.map(clonePath)]));
68
+ }
69
+ }
70
+ return merged;
71
+ }
72
+ function appendHop(paths, hop, options) {
73
+ return dedupePaths(paths.map((path) => ({
74
+ source: { ...path.source },
75
+ hops: [...path.hops.map((entry) => ({ ...entry })), { ...hop }],
76
+ heuristic: path.heuristic || Boolean(options?.heuristic),
77
+ })));
78
+ }
79
+ function computeConfidence(path) {
80
+ if (path.heuristic)
81
+ return "medium";
82
+ if (path.hops.length >= 4)
83
+ return "medium";
84
+ return "high";
85
+ }
86
+ function lineForNode(symbol, node) {
87
+ return symbol.start_line + node.startPosition.row;
88
+ }
89
+ function codeForNode(node) {
90
+ return node.text.split("\n")[0]?.trim() ?? node.text.trim();
91
+ }
92
+ function getAttributePath(node) {
93
+ if (!node)
94
+ return null;
95
+ if (node.type === "identifier")
96
+ return node.text;
97
+ if (node.type === "attribute") {
98
+ const objectNode = node.childForFieldName("object") ?? node.namedChild(0);
99
+ const attributeNode = node.childForFieldName("attribute") ?? node.namedChild(1);
100
+ const objectPath = getAttributePath(objectNode);
101
+ const attributePath = getAttributePath(attributeNode);
102
+ if (!objectPath || !attributePath)
103
+ return null;
104
+ return `${objectPath}.${attributePath}`;
105
+ }
106
+ return null;
107
+ }
108
+ function getCallArguments(argsNode) {
109
+ if (!argsNode)
110
+ return [];
111
+ const args = [];
112
+ let index = 0;
113
+ for (const child of argsNode.namedChildren) {
114
+ if (child.type === "keyword_argument") {
115
+ const keywordNode = child.namedChildren[0];
116
+ const valueNode = child.namedChildren[1];
117
+ if (!valueNode)
118
+ continue;
119
+ const arg = {
120
+ node: valueNode,
121
+ index,
122
+ };
123
+ if (keywordNode?.text)
124
+ arg.keyword = keywordNode.text;
125
+ args.push(arg);
126
+ index += 1;
127
+ continue;
128
+ }
129
+ args.push({
130
+ node: child,
131
+ index,
132
+ });
133
+ index += 1;
134
+ }
135
+ return args;
136
+ }
137
+ function getParameterName(node) {
138
+ switch (node.type) {
139
+ case "identifier":
140
+ return node.text;
141
+ case "default_parameter":
142
+ case "typed_parameter":
143
+ case "typed_default_parameter":
144
+ case "list_splat_pattern":
145
+ case "dictionary_splat_pattern":
146
+ return node.namedChildren[0]?.text ?? null;
147
+ default:
148
+ return null;
149
+ }
150
+ }
151
+ function findFunctionNode(node) {
152
+ if (node.type === "function_definition" || node.type === "async_function_definition") {
153
+ return node;
154
+ }
155
+ for (const child of node.namedChildren) {
156
+ const found = findFunctionNode(child);
157
+ if (found)
158
+ return found;
159
+ }
160
+ return null;
161
+ }
162
+ function createSourcePath(sourceKind, symbol, node) {
163
+ return {
164
+ source: {
165
+ kind: sourceKind,
166
+ label: node.text,
167
+ file: symbol.file,
168
+ line: lineForNode(symbol, node),
169
+ symbol_name: symbol.name,
170
+ code: codeForNode(node),
171
+ },
172
+ hops: [],
173
+ heuristic: false,
174
+ };
175
+ }
176
+ function identifierPaths(env, name) {
177
+ return (env.get(name) ?? []).map(clonePath);
178
+ }
179
+ function isAllowedPattern(allowed, kind, label) {
180
+ if (allowed.length === 0)
181
+ return true;
182
+ return allowed.some((pattern) => pattern === kind
183
+ || label === pattern
184
+ || label.includes(pattern)
185
+ || kind.includes(pattern));
186
+ }
187
+ function buildSinkDescriptors() {
188
+ return [
189
+ {
190
+ kind: "redirect",
191
+ matches: (calleeText) => calleeText === "redirect"
192
+ || calleeText.endsWith(".redirect")
193
+ || calleeText === "HttpResponseRedirect"
194
+ || calleeText === "HttpResponsePermanentRedirect",
195
+ pickArgs: (args) => args[0] ? [args[0]] : [],
196
+ },
197
+ {
198
+ kind: "mark_safe",
199
+ matches: (calleeText) => calleeText === "mark_safe" || calleeText.endsWith(".mark_safe"),
200
+ pickArgs: (args) => args[0] ? [args[0]] : [],
201
+ },
202
+ {
203
+ kind: "cursor.execute",
204
+ matches: (calleeText) => calleeText === "cursor.execute" || calleeText.endsWith(".execute"),
205
+ pickArgs: (args) => args[0] ? [args[0]] : [],
206
+ },
207
+ {
208
+ kind: "subprocess",
209
+ matches: (calleeText) => calleeText.startsWith("subprocess.")
210
+ || calleeText.endsWith(".Popen")
211
+ || calleeText.endsWith(".run")
212
+ || calleeText.endsWith(".call")
213
+ || calleeText.endsWith(".check_call")
214
+ || calleeText.endsWith(".check_output"),
215
+ pickArgs: (args) => args[0] ? [args[0]] : [],
216
+ },
217
+ {
218
+ kind: "requests",
219
+ matches: (calleeText) => calleeText.startsWith("requests.")
220
+ || calleeText.includes(".requests.")
221
+ || calleeText.startsWith("httpx.")
222
+ || calleeText.includes(".httpx."),
223
+ pickArgs: (args) => {
224
+ if (args.length === 0)
225
+ return [];
226
+ const urlKeyword = args.find((arg) => arg.keyword === "url");
227
+ if (urlKeyword)
228
+ return [urlKeyword];
229
+ const urlArg = args[1] ?? args[0];
230
+ return urlArg ? [urlArg] : [];
231
+ },
232
+ },
233
+ {
234
+ kind: "httpx",
235
+ matches: (calleeText) => calleeText.startsWith("httpx.")
236
+ || calleeText.includes(".httpx."),
237
+ pickArgs: (args) => {
238
+ if (args.length === 0)
239
+ return [];
240
+ const urlKeyword = args.find((arg) => arg.keyword === "url");
241
+ if (urlKeyword)
242
+ return [urlKeyword];
243
+ const urlArg = args[1] ?? args[0];
244
+ return urlArg ? [urlArg] : [];
245
+ },
246
+ },
247
+ {
248
+ kind: "open",
249
+ matches: (calleeText) => calleeText === "open" || calleeText.endsWith(".open"),
250
+ pickArgs: (args) => args[0] ? [args[0]] : [],
251
+ },
252
+ ];
253
+ }
254
+ function getImportModule(node) {
255
+ const moduleNode = node.childForFieldName("module_name");
256
+ if (!moduleNode)
257
+ return { module: "", level: 0 };
258
+ if (moduleNode.type === "relative_import") {
259
+ let level = 0;
260
+ for (let i = 0; i < moduleNode.childCount; i++) {
261
+ const child = moduleNode.child(i);
262
+ if (!child)
263
+ continue;
264
+ if (child.type === "import_prefix") {
265
+ level += (child.text.match(/\./g) ?? []).length;
266
+ }
267
+ else if (child.type === ".") {
268
+ level += 1;
269
+ }
270
+ }
271
+ const dotted = moduleNode.namedChildren.find((child) => child.type === "dotted_name");
272
+ return { module: dotted?.text ?? "", level };
273
+ }
274
+ return { module: moduleNode.text, level: 0 };
275
+ }
276
+ export { DEFAULT_MAX_DEPTH, DEFAULT_MAX_TRACES, DEFAULT_SINK_PATTERNS, DEFAULT_SOURCE_PATTERNS, KNOWN_SANITIZERS, appendHop, buildSinkDescriptors, cloneEnv, codeForNode, computeConfidence, createSourcePath, dedupePaths, findFunctionNode, getAttributePath, getCallArguments, getImportModule, getParameterName, identifierPaths, isAllowedPattern, lineForNode, mergeEnvs, };
277
+ //# sourceMappingURL=taint-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taint-model.js","sourceRoot":"","sources":["../../../src/tools/taint/taint-model.ts"],"names":[],"mappings":"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"}
@@ -1,37 +1,5 @@
1
- export type TaintTraceFramework = "python-django";
2
- export type TaintHopKind = "assignment" | "call" | "return" | "container" | "attribute";
3
- export interface TaintEndpoint {
4
- kind: string;
5
- label: string;
6
- file: string;
7
- line: number;
8
- symbol_name: string;
9
- code: string;
10
- }
11
- export interface TaintHop {
12
- kind: TaintHopKind;
13
- file: string;
14
- line: number;
15
- symbol_name: string;
16
- detail: string;
17
- }
18
- export interface TaintTraceMatch {
19
- entry_symbol: string;
20
- entry_file: string;
21
- source: TaintEndpoint;
22
- sink: TaintEndpoint;
23
- hops: TaintHop[];
24
- confidence: "high" | "medium" | "low";
25
- heuristic: boolean;
26
- }
27
- export interface TaintTraceResult {
28
- framework: TaintTraceFramework;
29
- analyzed_symbols: number;
30
- source_patterns: string[];
31
- sink_patterns: string[];
32
- traces: TaintTraceMatch[];
33
- truncated: boolean;
34
- }
1
+ import type { TaintTraceFramework, TaintTraceResult } from "./taint/taint-model.js";
2
+ export type { TaintEndpoint, TaintHop, TaintHopKind, TaintTraceFramework, TaintTraceMatch, TaintTraceResult, } from "./taint/taint-model.js";
35
3
  export declare function taintTrace(repo: string, options?: {
36
4
  framework?: TaintTraceFramework;
37
5
  file_pattern?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"taint-tools.d.ts","sourceRoot":"","sources":["../../src/tools/taint-tools.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAClD,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC;AAExF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;CACpB;AAwhCD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,OAAO,CAAC,gBAAgB,CAAC,CA2C3B"}
1
+ {"version":3,"file":"taint-tools.d.ts","sourceRoot":"","sources":["../../src/tools/taint-tools.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAEV,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAMhC,YAAY,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AA4ChC,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,OAAO,CAAC,gBAAgB,CAAC,CA2C3B"}