cg-code-graph 0.18.0__tar.gz → 0.19.0__tar.gz

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 (354) hide show
  1. {cg_code_graph-0.18.0/cg_code_graph.egg-info → cg_code_graph-0.19.0}/PKG-INFO +4 -4
  2. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/README.md +3 -3
  3. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/__init__.py +1 -1
  4. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/detect.py +4 -0
  5. cg_code_graph-0.19.0/cg_code_graph/core/env.py +78 -0
  6. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/doctor.py +2 -1
  7. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/hooks.py +10 -4
  8. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/indexer.py +8 -0
  9. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/link.py +11 -1
  10. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/mcp_server.py +2 -2
  11. cg_code_graph-0.19.0/cg_code_graph/plugins/express/plugin.py +924 -0
  12. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/extractor/extract.php +4 -3
  13. cg_code_graph-0.19.0/cg_code_graph/plugins/php/http_client.py +1003 -0
  14. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/plugin.py +2 -0
  15. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/extractor/extract.mjs +9 -1
  16. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/extractor/fw.mjs +27 -10
  17. cg_code_graph-0.19.0/cg_code_graph/plugins/ts/extractor/rr.mjs +748 -0
  18. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/plugin.py +6 -1
  19. cg_code_graph-0.19.0/cg_code_graph/plugins/ts/react_router.py +265 -0
  20. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/tsweb/common.py +13 -3
  21. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/__init__.py +2 -1
  22. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/express.yaml +1 -1
  23. cg_code_graph-0.19.0/cg_code_graph/presets/react-router.yaml +3 -0
  24. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/query.py +26 -2
  25. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/routes.py +2 -2
  26. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/tests_index.py +8 -1
  27. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0/cg_code_graph.egg-info}/PKG-INFO +4 -4
  28. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph.egg-info/SOURCES.txt +7 -0
  29. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_cache_clean.py +3 -3
  30. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_cache_migration.py +1 -1
  31. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_coverage.py +4 -4
  32. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_docs_languages.py +12 -0
  33. cg_code_graph-0.19.0/tests/test_elysia.py +151 -0
  34. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_env.py +18 -16
  35. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_hooks.py +36 -1
  36. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_mcp_index.py +2 -1
  37. cg_code_graph-0.19.0/tests/test_php_http.py +270 -0
  38. cg_code_graph-0.19.0/tests/test_react_router.py +246 -0
  39. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_routes_search_explain.py +3 -3
  40. cg_code_graph-0.18.0/cg_code_graph/core/env.py +0 -84
  41. cg_code_graph-0.18.0/cg_code_graph/plugins/express/plugin.py +0 -435
  42. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/LICENSE +0 -0
  43. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/MANIFEST.in +0 -0
  44. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/__main__.py +0 -0
  45. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/affected.py +0 -0
  46. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/agent_rules.py +0 -0
  47. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/agents.py +0 -0
  48. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/aitools.py +0 -0
  49. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/android_ipc.py +0 -0
  50. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/apple_ipc.py +0 -0
  51. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/apps.py +0 -0
  52. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/blindspots.py +0 -0
  53. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/bridges.py +0 -0
  54. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/brokers.py +0 -0
  55. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/cli.py +0 -0
  56. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/concepts.py +0 -0
  57. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/config.py +0 -0
  58. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/__init__.py +0 -0
  59. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/cache.py +0 -0
  60. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/extractors.py +0 -0
  61. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/fsutil.py +0 -0
  62. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/generated.py +0 -0
  63. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/model.py +0 -0
  64. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/paths.py +0 -0
  65. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/plugin.py +0 -0
  66. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/store.py +0 -0
  67. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/syntax_errors.py +0 -0
  68. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/coverage.py +0 -0
  69. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/dart_isolates.py +0 -0
  70. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/explore.py +0 -0
  71. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/external.py +0 -0
  72. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/graphql.py +0 -0
  73. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/jobs.py +0 -0
  74. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/lint_async.py +0 -0
  75. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/local_ipc.py +0 -0
  76. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/local_sockets.py +0 -0
  77. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/mcp_install.py +0 -0
  78. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/parity.py +0 -0
  79. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/parity_structure.py +0 -0
  80. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/payload.py +0 -0
  81. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plans.py +0 -0
  82. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/platform_scan.py +0 -0
  83. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/platforms.py +0 -0
  84. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/__init__.py +0 -0
  85. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/astro/__init__.py +0 -0
  86. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/astro/content.py +0 -0
  87. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/astro/plugin.py +0 -0
  88. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/cfamily/__init__.py +0 -0
  89. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/cfamily/plugin.py +0 -0
  90. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/cfamily/syntax.py +0 -0
  91. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/__init__.py +0 -0
  92. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/bridges.py +0 -0
  93. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/extractor/bin/extract.dart +0 -0
  94. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/extractor/pubspec.lock +0 -0
  95. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/extractor/pubspec.yaml +0 -0
  96. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/http.py +0 -0
  97. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/models.py +0 -0
  98. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/plugin.py +0 -0
  99. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/program.py +0 -0
  100. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/__init__.py +0 -0
  101. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/extras.py +0 -0
  102. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/models.py +0 -0
  103. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/plugin.py +0 -0
  104. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/schemas.py +0 -0
  105. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/shapes.py +0 -0
  106. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/urls.py +0 -0
  107. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/express/__init__.py +0 -0
  108. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/flutter/__init__.py +0 -0
  109. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/flutter/plugin.py +0 -0
  110. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/java/__init__.py +0 -0
  111. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/java/exact.py +0 -0
  112. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/java/plugin.py +0 -0
  113. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/jvm/__init__.py +0 -0
  114. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/jvm/interop.py +0 -0
  115. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/jvm/spring.py +0 -0
  116. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/kotlin/__init__.py +0 -0
  117. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/kotlin/exact.py +0 -0
  118. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/kotlin/plugin.py +0 -0
  119. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/kotlin/reparse.py +0 -0
  120. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/laravel/__init__.py +0 -0
  121. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/laravel/broadcast.py +0 -0
  122. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/laravel/plugin.py +0 -0
  123. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/laravel/tests.py +0 -0
  124. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/laravel/values.py +0 -0
  125. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/native/__init__.py +0 -0
  126. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/native/gates.py +0 -0
  127. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/native/runner.py +0 -0
  128. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/native/scipread.py +0 -0
  129. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/native/ts.py +0 -0
  130. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/nest/__init__.py +0 -0
  131. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/nest/plugin.py +0 -0
  132. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/nextjs/__init__.py +0 -0
  133. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/nextjs/plugin.py +0 -0
  134. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/nuxt/__init__.py +0 -0
  135. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/nuxt/plugin.py +0 -0
  136. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/__init__.py +0 -0
  137. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/external.py +0 -0
  138. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/extractor/composer.json +0 -0
  139. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/extractor/composer.lock +0 -0
  140. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/gating.py +0 -0
  141. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/strings.py +0 -0
  142. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/__init__.py +0 -0
  143. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/aitools.py +0 -0
  144. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/external.py +0 -0
  145. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/fields.py +0 -0
  146. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/plugin.py +0 -0
  147. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/refs.py +0 -0
  148. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/roots.py +0 -0
  149. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/socketio.py +0 -0
  150. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/subproc.py +0 -0
  151. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/tests.py +0 -0
  152. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/values.py +0 -0
  153. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/pyweb/__init__.py +0 -0
  154. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/pyweb/plugin.py +0 -0
  155. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/pyweb/values.py +0 -0
  156. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/rust/__init__.py +0 -0
  157. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/rust/cargo.py +0 -0
  158. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/rust/plugin.py +0 -0
  159. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/rust/syntax.py +0 -0
  160. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/scip/__init__.py +0 -0
  161. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/scip/importer.py +0 -0
  162. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/scip/scip.proto +0 -0
  163. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/scip/scip_pb2.py +0 -0
  164. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/stubs/__init__.py +0 -0
  165. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/stubs/plugins.py +0 -0
  166. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/swift/__init__.py +0 -0
  167. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/swift/baseurl.py +0 -0
  168. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/swift/exact.py +0 -0
  169. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/swift/indexstore.py +0 -0
  170. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/swift/packages.py +0 -0
  171. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/swift/plugin.py +0 -0
  172. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/__init__.py +0 -0
  173. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/baseurl.py +0 -0
  174. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/extractor/package-lock.json +0 -0
  175. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/extractor/package.json +0 -0
  176. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/nav.py +0 -0
  177. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/tsweb/__init__.py +0 -0
  178. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/tsweb/data.py +0 -0
  179. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/c_cpp.yaml +0 -0
  180. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/common.yaml +0 -0
  181. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/dart.yaml +0 -0
  182. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/django-ninja.yaml +0 -0
  183. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/django.yaml +0 -0
  184. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/djangorestframework.yaml +0 -0
  185. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/java.yaml +0 -0
  186. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/kotlin.yaml +0 -0
  187. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/laravel.yaml +0 -0
  188. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/nest.yaml +0 -0
  189. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/nextjs.yaml +0 -0
  190. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/nuxt.yaml +0 -0
  191. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/php.yaml +0 -0
  192. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/python.yaml +0 -0
  193. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/rust.yaml +0 -0
  194. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/spring.yaml +0 -0
  195. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/swift.yaml +0 -0
  196. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/typescript.yaml +0 -0
  197. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/process_runs.py +0 -0
  198. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/protocols/__init__.py +0 -0
  199. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/protocols/builtin.py +0 -0
  200. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/protocols/matchers.py +0 -0
  201. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/protocols/view.py +0 -0
  202. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/realtime.py +0 -0
  203. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/realtime_events.py +0 -0
  204. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/realtime_native.py +0 -0
  205. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/realtime_ws.py +0 -0
  206. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/roundtrip.py +0 -0
  207. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/rpc.py +0 -0
  208. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/sdk_systems.py +0 -0
  209. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/sockets.py +0 -0
  210. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/starters.py +0 -0
  211. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/udp_apps.py +0 -0
  212. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/__init__.py +0 -0
  213. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/graph.py +0 -0
  214. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/server.py +0 -0
  215. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/app.css +0 -0
  216. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/app.js +0 -0
  217. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/index.html +0 -0
  218. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/layered.js +0 -0
  219. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/vendor/VERSIONS.txt +0 -0
  220. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/vendor/cose-base.js +0 -0
  221. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/vendor/cytoscape-fcose.js +0 -0
  222. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/vendor/cytoscape.min.js +0 -0
  223. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/vendor/layout-base.js +0 -0
  224. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/tools/package-lock.json +0 -0
  225. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/tools/package.json +0 -0
  226. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/tools/shoot.mjs +0 -0
  227. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/watch.py +0 -0
  228. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/webhooks.py +0 -0
  229. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/xcode.py +0 -0
  230. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph.egg-info/dependency_links.txt +0 -0
  231. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph.egg-info/entry_points.txt +0 -0
  232. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph.egg-info/requires.txt +0 -0
  233. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph.egg-info/top_level.txt +0 -0
  234. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/pyproject.toml +0 -0
  235. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/setup.cfg +0 -0
  236. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_affected.py +0 -0
  237. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_agents_install.py +0 -0
  238. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_agents_md.py +0 -0
  239. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ai_tools.py +0 -0
  240. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_android_ipc.py +0 -0
  241. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_apple_ipc.py +0 -0
  242. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_astro.py +0 -0
  243. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_astro_content.py +0 -0
  244. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_astro_server.py +0 -0
  245. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_bridges.py +0 -0
  246. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_bridges_pigeon_monorepo.py +0 -0
  247. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_brokers.py +0 -0
  248. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_cache_invalidation.py +0 -0
  249. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_channels_tests.py +0 -0
  250. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_cli_output.py +0 -0
  251. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_completeness.py +0 -0
  252. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_config_extras.py +0 -0
  253. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_coverage_ts_hint.py +0 -0
  254. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_dart_isolates.py +0 -0
  255. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_dispatch_interfaces.py +0 -0
  256. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_django_flutter.py +0 -0
  257. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_docs_links.py +0 -0
  258. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_enum_constants.py +0 -0
  259. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_explore.py +0 -0
  260. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_external.py +0 -0
  261. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_gating.py +0 -0
  262. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_generated.py +0 -0
  263. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_graphql.py +0 -0
  264. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_impact_overrides.py +0 -0
  265. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_index_isolation.py +0 -0
  266. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_inherited_overrides.py +0 -0
  267. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_java.py +0 -0
  268. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_java_exact.py +0 -0
  269. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_jobs.py +0 -0
  270. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_js_refs.py +0 -0
  271. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_js_runtime.py +0 -0
  272. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin.py +0 -0
  273. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin_binding.py +0 -0
  274. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin_exact.py +0 -0
  275. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin_fields.py +0 -0
  276. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin_mixed.py +0 -0
  277. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin_nav_consts.py +0 -0
  278. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin_props.py +0 -0
  279. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_laravel_determinism.py +0 -0
  280. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_laravel_resources.py +0 -0
  281. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_lint_async.py +0 -0
  282. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_local_ipc.py +0 -0
  283. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_local_sockets.py +0 -0
  284. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_mcp.py +0 -0
  285. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_mcp_install.py +0 -0
  286. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_native_cfamily.py +0 -0
  287. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_native_concurrency.py +0 -0
  288. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_native_rust.py +0 -0
  289. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_nuxt_import_dirs.py +0 -0
  290. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_nuxt_rootsrc.py +0 -0
  291. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_packaging.py +0 -0
  292. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_parity.py +0 -0
  293. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_parity_structure.py +0 -0
  294. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_php_props.py +0 -0
  295. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_plain_js.py +0 -0
  296. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_plans.py +0 -0
  297. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_platform_gaps.py +0 -0
  298. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_platform_type_variants.py +0 -0
  299. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_platforms.py +0 -0
  300. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_platforms_apple.py +0 -0
  301. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_presets_config.py +0 -0
  302. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_process_ipc.py +0 -0
  303. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_process_runs.py +0 -0
  304. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_protocols.py +0 -0
  305. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_app_tests_module.py +0 -0
  306. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_collection_chains.py +0 -0
  307. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_compat.py +0 -0
  308. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_entry_refs.py +0 -0
  309. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_fields.py +0 -0
  310. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_infer_cycles.py +0 -0
  311. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_roots.py +0 -0
  312. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_subprocess_tests.py +0 -0
  313. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_tests.py +0 -0
  314. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_web_hosts.py +0 -0
  315. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_web_routes.py +0 -0
  316. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_web_routes_more.py +0 -0
  317. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_realtime.py +0 -0
  318. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_realtime_native.py +0 -0
  319. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_roundtrip.py +0 -0
  320. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_route_tables.py +0 -0
  321. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_rpc.py +0 -0
  322. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_scip_health.py +0 -0
  323. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_sdk_external.py +0 -0
  324. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_snippet.py +0 -0
  325. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_sockets.py +0 -0
  326. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_spring.py +0 -0
  327. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_starters_budget.py +0 -0
  328. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift.py +0 -0
  329. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_binding.py +0 -0
  330. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_exact.py +0 -0
  331. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_facts.py +0 -0
  332. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_fields.py +0 -0
  333. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_modules.py +0 -0
  334. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_more.py +0 -0
  335. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_nav_values.py +0 -0
  336. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_parse_errors.py +0 -0
  337. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_props.py +0 -0
  338. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_sdk.py +0 -0
  339. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_testing.py +0 -0
  340. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_values.py +0 -0
  341. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_tests_scope.py +0 -0
  342. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ts_fields.py +0 -0
  343. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ts_fields_js_vue.py +0 -0
  344. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ts_file_specs.py +0 -0
  345. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ts_frameworks.py +0 -0
  346. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ts_nuxt.py +0 -0
  347. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ts_src_tsconfig.py +0 -0
  348. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_values.py +0 -0
  349. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_viz.py +0 -0
  350. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_vue_nav.py +0 -0
  351. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_watch.py +0 -0
  352. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_webhooks.py +0 -0
  353. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_websockets.py +0 -0
  354. {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_workspace_link.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cg-code-graph
3
- Version: 0.18.0
3
+ Version: 0.19.0
4
4
  Summary: cg: a code graph of routes, calls, data access and platform boundaries for agents and humans (CLI + MCP server)
5
5
  Author: cyberchronos00
6
6
  License-Expression: MIT
@@ -74,8 +74,8 @@ dependents: 18 nodes (code: 6, entry points: 9, other: 3)
74
74
  | Language | Frameworks and facts | Calls | Docs |
75
75
  |---|---|---|---|
76
76
  | ![Python](https://img.shields.io/badge/Python-3776AB?logo=python&logoColor=white) | Django (+ DRF, django-ninja), FastAPI / Starlette, Flask, Celery | exact (stdlib `ast`) | [Python](https://code-graph.cyberchronos00.workers.dev/docs/python) |
77
- | ![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white) ![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?logo=javascript&logoColor=black) | Nuxt / Vue, NestJS, Next.js, Astro, Express, Fastify, Koa, Hono | exact (TypeScript compiler API) | [TS frameworks](https://code-graph.cyberchronos00.workers.dev/docs/ts-frameworks) |
78
- | ![PHP](https://img.shields.io/badge/PHP-777BB4?logo=php&logoColor=white) | Laravel (routes and middleware, queues, broadcasting) | exact (nikic/php-parser; needs PHP 8.2+) | [PHP](https://code-graph.cyberchronos00.workers.dev/docs/php) |
77
+ | ![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white) ![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?logo=javascript&logoColor=black) | Nuxt / Vue, NestJS, Next.js, Astro, Express, Fastify, Koa, Hono, Elysia, React Router / Remix | exact (TypeScript compiler API) | [TS frameworks](https://code-graph.cyberchronos00.workers.dev/docs/ts-frameworks) |
78
+ | ![PHP](https://img.shields.io/badge/PHP-777BB4?logo=php&logoColor=white) | Laravel (routes, middleware, queues, broadcasting, outbound HTTP) | exact (nikic/php-parser; needs PHP 8.2+) | [PHP](https://code-graph.cyberchronos00.workers.dev/docs/php) |
79
79
  | ![Dart](https://img.shields.io/badge/Dart-0175C2?logo=dart&logoColor=white) | Flutter | exact (Dart analyzer; needs the Dart SDK) | [Platforms](https://code-graph.cyberchronos00.workers.dev/docs/platforms) |
80
80
  | ![Kotlin](https://img.shields.io/badge/Kotlin-7F52FF?logo=kotlin&logoColor=white) | Android, Kotlin Multiplatform, Spring | heuristic; exact with scip-java (opt-in) | [Kotlin](https://code-graph.cyberchronos00.workers.dev/docs/kotlin) |
81
81
  | ![Java](https://img.shields.io/badge/Java-ED8B00?logo=openjdk&logoColor=white) | Spring (routes, guards, beans, tables, clients) | heuristic; exact with scip-java (opt-in) | [Java](https://code-graph.cyberchronos00.workers.dev/docs/java) |
@@ -88,7 +88,7 @@ Go and others: import a SCIP index with `cg index --scip FILE`. Run `cg doctor`
88
88
 
89
89
  - `reaches`, `impact`, `path`: every caller, route, job and page that reaches a table, config key or method.
90
90
  - `cg affected --base main`: the tests and entry points a change reaches (`--quiet` feeds your test runner).
91
- - Frontend ↔ backend: `cg link` matches client HTTP calls to server routes across repos.
91
+ - Across repos: `cg link` matches client HTTP calls (frontends and Laravel / Guzzle backends) to server routes.
92
92
  - Route guards: `cg routes --writes --unguarded` lists routes that write with no auth guard.
93
93
  - MCP server (`cg-mcp`) so agents query the graph instead of grepping.
94
94
  - Visual view (`cg serve`) and plan checks (`cg plan check`) for planned changes.
@@ -47,8 +47,8 @@ dependents: 18 nodes (code: 6, entry points: 9, other: 3)
47
47
  | Language | Frameworks and facts | Calls | Docs |
48
48
  |---|---|---|---|
49
49
  | ![Python](https://img.shields.io/badge/Python-3776AB?logo=python&logoColor=white) | Django (+ DRF, django-ninja), FastAPI / Starlette, Flask, Celery | exact (stdlib `ast`) | [Python](https://code-graph.cyberchronos00.workers.dev/docs/python) |
50
- | ![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white) ![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?logo=javascript&logoColor=black) | Nuxt / Vue, NestJS, Next.js, Astro, Express, Fastify, Koa, Hono | exact (TypeScript compiler API) | [TS frameworks](https://code-graph.cyberchronos00.workers.dev/docs/ts-frameworks) |
51
- | ![PHP](https://img.shields.io/badge/PHP-777BB4?logo=php&logoColor=white) | Laravel (routes and middleware, queues, broadcasting) | exact (nikic/php-parser; needs PHP 8.2+) | [PHP](https://code-graph.cyberchronos00.workers.dev/docs/php) |
50
+ | ![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white) ![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?logo=javascript&logoColor=black) | Nuxt / Vue, NestJS, Next.js, Astro, Express, Fastify, Koa, Hono, Elysia, React Router / Remix | exact (TypeScript compiler API) | [TS frameworks](https://code-graph.cyberchronos00.workers.dev/docs/ts-frameworks) |
51
+ | ![PHP](https://img.shields.io/badge/PHP-777BB4?logo=php&logoColor=white) | Laravel (routes, middleware, queues, broadcasting, outbound HTTP) | exact (nikic/php-parser; needs PHP 8.2+) | [PHP](https://code-graph.cyberchronos00.workers.dev/docs/php) |
52
52
  | ![Dart](https://img.shields.io/badge/Dart-0175C2?logo=dart&logoColor=white) | Flutter | exact (Dart analyzer; needs the Dart SDK) | [Platforms](https://code-graph.cyberchronos00.workers.dev/docs/platforms) |
53
53
  | ![Kotlin](https://img.shields.io/badge/Kotlin-7F52FF?logo=kotlin&logoColor=white) | Android, Kotlin Multiplatform, Spring | heuristic; exact with scip-java (opt-in) | [Kotlin](https://code-graph.cyberchronos00.workers.dev/docs/kotlin) |
54
54
  | ![Java](https://img.shields.io/badge/Java-ED8B00?logo=openjdk&logoColor=white) | Spring (routes, guards, beans, tables, clients) | heuristic; exact with scip-java (opt-in) | [Java](https://code-graph.cyberchronos00.workers.dev/docs/java) |
@@ -61,7 +61,7 @@ Go and others: import a SCIP index with `cg index --scip FILE`. Run `cg doctor`
61
61
 
62
62
  - `reaches`, `impact`, `path`: every caller, route, job and page that reaches a table, config key or method.
63
63
  - `cg affected --base main`: the tests and entry points a change reaches (`--quiet` feeds your test runner).
64
- - Frontend ↔ backend: `cg link` matches client HTTP calls to server routes across repos.
64
+ - Across repos: `cg link` matches client HTTP calls (frontends and Laravel / Guzzle backends) to server routes.
65
65
  - Route guards: `cg routes --writes --unguarded` lists routes that write with no auth guard.
66
66
  - MCP server (`cg-mcp`) so agents query the graph instead of grepping.
67
67
  - Visual view (`cg serve`) and plan checks (`cg plan check`) for planned changes.
@@ -1,2 +1,2 @@
1
1
  """code-graph: deterministic code knowledge graph (beta)."""
2
- __version__ = "0.18.0"
2
+ __version__ = "0.19.0"
@@ -59,6 +59,10 @@ def detect(root: Path) -> dict:
59
59
  fw["astro"] = {"version": deps.get("astro")}
60
60
  if "vue" in deps:
61
61
  fw["vue"] = {"version": deps.get("vue")}
62
+ from ..plugins.ts.react_router import is_react_router
63
+ if is_react_router(root):
64
+ ver = deps.get("react-router") or deps.get("react-router-dom") or deps.get("@remix-run/react")
65
+ fw["react-router"] = {"version": ver} if ver else {}
62
66
  from ..plugins.tsweb.common import SERVER_DEPS # TS / JS servers (NestJS, Next.js, Express / Koa / Fastify / Hono ...)
63
67
  for name, pkgs in SERVER_DEPS.items():
64
68
  hit = [d for d in pkgs if d in deps]
@@ -0,0 +1,78 @@
1
+ """Process environment: ``CG_*`` names only.
2
+
3
+ ``get`` reads ``os.environ`` on every call. A leftover ``CODEGRAPH_*`` name from this project
4
+ does not affect the value. The first read prints one stderr notice naming each leftover and
5
+ its ``CG_*`` replacement. ``CODEGRAPH_MCP_TOOLS`` belongs to another project and is ignored
6
+ silently.
7
+ """
8
+ from __future__ import annotations
9
+
10
+ import os
11
+ import sys
12
+
13
+ # Suffixes this project reads. ``CODEGRAPH_CACHE_DIR`` renames to ``CG_CACHE``.
14
+ SUFFIXES = (
15
+ "CACHE", "CACHE_DIR", "CARGO", "CFAMILY", "COMPDB", "C_MASK_ANNOTATIONS", "C_MAX_MACRO_REFS",
16
+ "C_SCIP", "C_SCIP_FILE", "EXCLUDE_DIRS", "INCLUDE_DIRS", "INDEXER_TIMEOUT", "JOBS",
17
+ "JAVA_SCIP", "JAVA_SCIP_FILE", "KOTLIN_SCIP", "KOTLIN_SCIP_FILE", "LIBINDEXSTORE",
18
+ "MAX_FILE_BYTES", "NODE", "NO_CACHE",
19
+ "NO_CARGO", "NO_HOOKS", "NO_STALE_CHECK", "RUST_ANALYZER", "RUST_BUILD_SCRIPTS", "RUST_SCIP",
20
+ "RUST_SCIP_FILE", "RUST_TARGETS", "SCIP_CLANG", "SCIP_JAVA", "SWIFT", "SWIFT_INDEX",
21
+ "SWIFT_INDEX_STORE",
22
+ )
23
+ _NO_LEGACY = frozenset({"MCP_TOOLS", "CACHE_DIR"})
24
+ _noted = False
25
+
26
+
27
+ def replacements() -> dict[str, str]:
28
+ """Old name -> ``CG_*`` name, in suffix order. ``CACHE_DIR`` is ``CG_CACHE``."""
29
+ out: dict[str, str] = {}
30
+ for name in SUFFIXES:
31
+ if name in _NO_LEGACY:
32
+ continue
33
+ if name == "CACHE":
34
+ out["CODEGRAPH_CACHE"] = "CG_CACHE"
35
+ out["CODEGRAPH_CACHE_DIR"] = "CG_CACHE"
36
+ else:
37
+ out["CODEGRAPH_" + name] = "CG_" + name
38
+ return out
39
+
40
+
41
+ def note_removed() -> list[str]:
42
+ """Print one stderr line when any removed name is set. Returns those old names."""
43
+ global _noted
44
+ mapping = replacements()
45
+ found = [old for old in mapping if old in os.environ]
46
+ if _noted:
47
+ return found
48
+ _noted = True
49
+ if found:
50
+ pairs = ", ".join(f"{old} -> {mapping[old]}" for old in found)
51
+ print(f"cg: ignored removed environment variables: {pairs}", file=sys.stderr)
52
+ return found
53
+
54
+
55
+ def get(name: str, default=None) -> str | None:
56
+ """``CG_<name>`` when set, else ``default``. Removed ``CODEGRAPH_*`` names are ignored."""
57
+ note_removed()
58
+ new = "CG_" + name
59
+ if new in os.environ:
60
+ return os.environ[new]
61
+ return default
62
+
63
+
64
+ def is_set(name: str) -> bool:
65
+ """True when ``CG_<name>`` is present in the environment."""
66
+ note_removed()
67
+ return ("CG_" + name) in os.environ
68
+
69
+
70
+ def flag(name: str) -> bool:
71
+ """True when the value is set and not a false-like token (``0``, ``false``, ``no``, ``off``)."""
72
+ val = get(name)
73
+ return val is not None and val.strip().lower() not in ("", "0", "false", "no", "off")
74
+
75
+
76
+ def legacy_in_env() -> list[str]:
77
+ """Removed ``CODEGRAPH_*`` names from this project that are present (for ``cg doctor``)."""
78
+ return note_removed()
@@ -471,7 +471,8 @@ def _legacy_lines(r: dict) -> list[str]:
471
471
  names = r.get("legacy_env") or []
472
472
  if names:
473
473
  shown = ", ".join(names)
474
- lines.append(f"note: {shown} is set; use the CG_* name (removed in 0.19.0)")
474
+ lines.append(f"note: {shown} no longer affects cg; rename each CODEGRAPH_* name to CG_* "
475
+ "(CODEGRAPH_CACHE and CODEGRAPH_CACHE_DIR become CG_CACHE)")
475
476
  leg = r.get("legacy_cache") or None
476
477
  if leg:
477
478
  if leg.get("path"):
@@ -42,6 +42,12 @@ _BLOCK = re.compile(re.escape(BEGIN) + r".*?" + re.escape(END) + r"\n?", re.S)
42
42
  _SHELLS = {"sh", "bash", "dash", "ksh", "zsh", "ash"}
43
43
  _SHEBANG_ONLY = "#!/bin/sh"
44
44
  _OLD_CLI = "-m " + "codegraph" + ".cli"
45
+ _OLD_NO_HOOKS = "CODEGRAPH_NO_HOOKS"
46
+
47
+
48
+ def _block_outdated(block: str) -> bool:
49
+ """A 0.17/0.18 block that still checks CODEGRAPH_NO_HOOKS, or the pre-0.17 CLI."""
50
+ return _OLD_CLI in block or _OLD_NO_HOOKS in block
45
51
 
46
52
 
47
53
  def _sh_quote(text: str) -> str:
@@ -101,7 +107,7 @@ def _block_text(hook: str, root: str, db: str, py: str) -> str:
101
107
  f"# cg-root: {root}",
102
108
  f"# cg-db: {db}",
103
109
  f"# cg-hook: {hook}",
104
- 'if [ "${CG_NO_HOOKS:-${CODEGRAPH_NO_HOOKS:-}}" != 1 ]; then',
110
+ 'if [ "${CG_NO_HOOKS:-}" != 1 ]; then',
105
111
  ]
106
112
  if hook == "post-checkout":
107
113
  lines.append(' if [ "$1" != "$2" ]; then')
@@ -211,7 +217,7 @@ def _status_line(path: Path, hook: str) -> str:
211
217
  found = _BLOCK.search(text)
212
218
  if not found:
213
219
  return f"{hook}: not installed"
214
- if _OLD_CLI in found.group(0):
220
+ if _block_outdated(found.group(0)):
215
221
  return f"outdated hook {hook}: re-run cg hooks install"
216
222
  root, db = _meta(text)
217
223
  extra = ""
@@ -282,14 +288,14 @@ def run(action: str, root: str = ".", db: str | None = None, dry_run: bool = Fal
282
288
 
283
289
 
284
290
  def outdated_names(root: str | Path) -> list[str]:
285
- """Hook names whose cg block still runs the removed `codegraph.cli` module."""
291
+ """Hook names whose cg block still runs `codegraph.cli` or checks `CODEGRAPH_NO_HOOKS`."""
286
292
  hooks = _hooks_dir(Path(root))
287
293
  if hooks is None:
288
294
  return []
289
295
  out = []
290
296
  for hook in HOOKS:
291
297
  found = _BLOCK.search(_read(hooks / hook))
292
- if found and _OLD_CLI in found.group(0):
298
+ if found and _block_outdated(found.group(0)):
293
299
  out.append(hook)
294
300
  return out
295
301
 
@@ -102,6 +102,12 @@ def setup(project: Project) -> dict:
102
102
  names = {k: v for k, v in found.items() if k not in remove}
103
103
  for k in sorted(add):
104
104
  names.setdefault(k, ".cg.yaml")
105
+ # Elysia shares the Express plugin and preset. The coverage label is elysia, not express (via elysia).
106
+ det_fw = project.detected.get("frameworks") or {}
107
+ if "elysia" in det_fw and "elysia" not in remove:
108
+ if "express" in names and "express" not in det_fw:
109
+ names.pop("express")
110
+ names.setdefault("elysia", "detected")
105
111
  applied = presets.select([lp.name for lp in langs], list(names))
106
112
  project.options["presets"] = applied
107
113
  return {"language_plugins": langs, "framework_plugins": fws, "languages": [lp.name for lp in langs],
@@ -411,6 +417,8 @@ def index_project(root: str | Path, db_path: str | Path, name: str | None = None
411
417
  finally:
412
418
  gst.db.close()
413
419
  stats["starters_seconds"] = round(time.time() - t_st, 2)
420
+ from .plugins.ts.react_router import reconcile_detection
421
+ reconcile_detection(project, plan, stats)
414
422
  stats["coverage"]["setup"] = {"frameworks": sorted(plan["frameworks"]), "presets": plan["presets"],
415
423
  "config": cfg.get("file")}
416
424
  if pl: # per-target coverage: what each declared target builds, conditions left unevaluated
@@ -16,7 +16,8 @@ Matching is deterministic (no guessing):
16
16
  - segments match when literal == literal, client placeholder <-> route {param},
17
17
  client literal -> route {param} (resolved), or a client segment with an embedded
18
18
  placeholder fully matches a route literal (heuristic, e.g. export.{format} ~ export.csv);
19
- - method must match (HEAD ~ GET); the most specific route (most literal==literal segments)
19
+ - method must match (HEAD ~ GET); a client verb `ANY` matches only when one route fits the
20
+ path, and that match is `heuristic`. The most specific route (most literal==literal segments)
20
21
  wins; ties are kept and marked heuristic (ambiguous).
21
22
 
22
23
  Realtime: client channel subscriptions (channel_sub:<name>, from Echo / pusher-js / useEcho) get MATCHES_CHANNEL ->
@@ -94,6 +95,8 @@ def match_path(client: str, route: str) -> tuple[bool, dict]:
94
95
 
95
96
 
96
97
  def _method_ok(cm: str, rm: str) -> bool:
98
+ if (cm or "").upper() == "ANY":
99
+ return True
97
100
  rms = set(rm.upper().replace("|", ",").split(","))
98
101
  return cm in rms or "ANY" in rms or (cm == "HEAD" and "GET" in rms)
99
102
 
@@ -180,6 +183,13 @@ def match_endpoint(method: str, path: str, routes: list[dict], origin_kind: str
180
183
  key = lambda h: (-h[2]["ph_into_lit"], h[2]["lit"])
181
184
  top = max(key(h) for h in hits)
182
185
  best = [h for h in hits if key(h) == top]
186
+ if method.upper() == "ANY":
187
+ if len(best) != 1:
188
+ return {"matched": [], "path": path, "reason": "ANY verb matches only a unique path",
189
+ "near": [h[0]["id"] for h in best][:3]}
190
+ r, variant, info = best[0]
191
+ return {"matched": [{"route": r["id"], "uri_variant": variant, "confidence": "heuristic", "segments": info}],
192
+ "path": path}
183
193
  out = []
184
194
  for r, variant, info in best:
185
195
  conf = "exact"
@@ -44,7 +44,7 @@ server = MCPServer(
44
44
  "Code graph of a project: classes, functions, routes, commands, jobs, pages, DB tables/columns, connections, "
45
45
  "config/env keys, each edge with file:line evidence and a confidence (exact / resolved / heuristic). Stacks: "
46
46
  "For a broad question ('how does X work') start with `explore`: source, entry points, call paths and blast radius in one call. "
47
- "Laravel, Django (django-ninja, DRF), FastAPI/Starlette, Flask, NestJS, Next.js, Express/Fastify/Koa/Hono, Nuxt/Vue, Flutter/Dart, Rust, C, C++. "
47
+ "Laravel, Django (django-ninja, DRF), FastAPI/Starlette, Flask, NestJS, Next.js, Express/Fastify/Koa/Hono/Elysia, Nuxt/Vue, React Router / Remix, Flutter/Dart, Rust, C, C++. "
48
48
  "Check the blast radius before editing: `reaches` lists everything that depends on a symbol/column/connection "
49
49
  "(grouped runtime / library / operator / UI / dev / gated), `impact` gives callers up to entry points, `siblings` "
50
50
  "finds parallel code that usually needs the same change, `writers` shows who writes a table, `routes` lists routes "
@@ -911,7 +911,7 @@ def routes(writes: str | None = None, reaches: list[str] | None = None, missing:
911
911
  method, env key...). Optional filters: missing="<name>" keeps routes with no guard whose name contains it (e.g.
912
912
  "auth:api", "ApiKeyGuard"), unguarded=true keeps routes with no auth guard (the framework presets' auth guards and
913
913
  the auth name pattern; extend with auth_pattern, a regex, or .cg.yaml auth.extra_patterns). Each route: guards, what it reaches with one evidence chain, and the frontend callers on a
914
- combined graph. Guards come from Laravel middleware, Nest guards/interceptors, Express/Koa/Fastify/Hono
914
+ combined graph. Guards come from Laravel middleware, Nest guards/interceptors, Express/Koa/Fastify/Hono/Elysia
915
915
  middleware, Next.js middleware.ts / handler wrappers, django-ninja auth= and Django/DRF view access checks.
916
916
  min_confidence: keep the default (heuristic) for reviews: every edge still shows its own label, and a stricter
917
917
  level names the routes it hides.