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.
- {cg_code_graph-0.18.0/cg_code_graph.egg-info → cg_code_graph-0.19.0}/PKG-INFO +4 -4
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/README.md +3 -3
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/__init__.py +1 -1
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/detect.py +4 -0
- cg_code_graph-0.19.0/cg_code_graph/core/env.py +78 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/doctor.py +2 -1
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/hooks.py +10 -4
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/indexer.py +8 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/link.py +11 -1
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/mcp_server.py +2 -2
- cg_code_graph-0.19.0/cg_code_graph/plugins/express/plugin.py +924 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/extractor/extract.php +4 -3
- cg_code_graph-0.19.0/cg_code_graph/plugins/php/http_client.py +1003 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/plugin.py +2 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/extractor/extract.mjs +9 -1
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/extractor/fw.mjs +27 -10
- cg_code_graph-0.19.0/cg_code_graph/plugins/ts/extractor/rr.mjs +748 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/plugin.py +6 -1
- cg_code_graph-0.19.0/cg_code_graph/plugins/ts/react_router.py +265 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/tsweb/common.py +13 -3
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/__init__.py +2 -1
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/express.yaml +1 -1
- cg_code_graph-0.19.0/cg_code_graph/presets/react-router.yaml +3 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/query.py +26 -2
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/routes.py +2 -2
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/tests_index.py +8 -1
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0/cg_code_graph.egg-info}/PKG-INFO +4 -4
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph.egg-info/SOURCES.txt +7 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_cache_clean.py +3 -3
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_cache_migration.py +1 -1
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_coverage.py +4 -4
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_docs_languages.py +12 -0
- cg_code_graph-0.19.0/tests/test_elysia.py +151 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_env.py +18 -16
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_hooks.py +36 -1
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_mcp_index.py +2 -1
- cg_code_graph-0.19.0/tests/test_php_http.py +270 -0
- cg_code_graph-0.19.0/tests/test_react_router.py +246 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_routes_search_explain.py +3 -3
- cg_code_graph-0.18.0/cg_code_graph/core/env.py +0 -84
- cg_code_graph-0.18.0/cg_code_graph/plugins/express/plugin.py +0 -435
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/LICENSE +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/MANIFEST.in +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/__main__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/affected.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/agent_rules.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/agents.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/aitools.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/android_ipc.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/apple_ipc.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/apps.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/blindspots.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/bridges.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/brokers.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/cli.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/concepts.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/config.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/cache.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/extractors.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/fsutil.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/generated.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/model.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/paths.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/store.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/core/syntax_errors.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/coverage.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/dart_isolates.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/explore.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/external.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/graphql.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/jobs.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/lint_async.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/local_ipc.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/local_sockets.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/mcp_install.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/parity.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/parity_structure.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/payload.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plans.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/platform_scan.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/platforms.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/astro/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/astro/content.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/astro/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/cfamily/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/cfamily/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/cfamily/syntax.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/bridges.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/extractor/bin/extract.dart +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/extractor/pubspec.lock +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/extractor/pubspec.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/http.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/models.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/dart/program.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/extras.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/models.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/schemas.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/shapes.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/django/urls.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/express/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/flutter/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/flutter/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/java/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/java/exact.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/java/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/jvm/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/jvm/interop.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/jvm/spring.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/kotlin/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/kotlin/exact.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/kotlin/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/kotlin/reparse.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/laravel/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/laravel/broadcast.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/laravel/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/laravel/tests.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/laravel/values.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/native/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/native/gates.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/native/runner.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/native/scipread.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/native/ts.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/nest/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/nest/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/nextjs/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/nextjs/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/nuxt/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/nuxt/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/external.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/extractor/composer.json +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/extractor/composer.lock +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/gating.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/php/strings.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/aitools.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/external.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/fields.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/refs.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/roots.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/socketio.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/subproc.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/tests.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/python/values.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/pyweb/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/pyweb/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/pyweb/values.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/rust/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/rust/cargo.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/rust/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/rust/syntax.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/scip/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/scip/importer.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/scip/scip.proto +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/scip/scip_pb2.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/stubs/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/stubs/plugins.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/swift/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/swift/baseurl.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/swift/exact.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/swift/indexstore.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/swift/packages.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/swift/plugin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/baseurl.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/extractor/package-lock.json +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/extractor/package.json +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/ts/nav.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/tsweb/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/plugins/tsweb/data.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/c_cpp.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/common.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/dart.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/django-ninja.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/django.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/djangorestframework.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/java.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/kotlin.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/laravel.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/nest.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/nextjs.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/nuxt.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/php.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/python.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/rust.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/spring.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/swift.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/presets/typescript.yaml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/process_runs.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/protocols/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/protocols/builtin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/protocols/matchers.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/protocols/view.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/realtime.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/realtime_events.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/realtime_native.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/realtime_ws.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/roundtrip.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/rpc.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/sdk_systems.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/sockets.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/starters.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/udp_apps.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/__init__.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/graph.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/server.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/app.css +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/app.js +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/index.html +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/layered.js +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/vendor/VERSIONS.txt +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/vendor/cose-base.js +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/vendor/cytoscape-fcose.js +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/vendor/cytoscape.min.js +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/static/vendor/layout-base.js +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/tools/package-lock.json +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/tools/package.json +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/viz/tools/shoot.mjs +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/watch.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/webhooks.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph/xcode.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph.egg-info/dependency_links.txt +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph.egg-info/entry_points.txt +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph.egg-info/requires.txt +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/cg_code_graph.egg-info/top_level.txt +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/pyproject.toml +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/setup.cfg +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_affected.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_agents_install.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_agents_md.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ai_tools.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_android_ipc.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_apple_ipc.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_astro.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_astro_content.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_astro_server.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_bridges.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_bridges_pigeon_monorepo.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_brokers.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_cache_invalidation.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_channels_tests.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_cli_output.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_completeness.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_config_extras.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_coverage_ts_hint.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_dart_isolates.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_dispatch_interfaces.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_django_flutter.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_docs_links.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_enum_constants.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_explore.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_external.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_gating.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_generated.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_graphql.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_impact_overrides.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_index_isolation.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_inherited_overrides.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_java.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_java_exact.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_jobs.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_js_refs.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_js_runtime.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin_binding.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin_exact.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin_fields.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin_mixed.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin_nav_consts.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_kotlin_props.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_laravel_determinism.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_laravel_resources.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_lint_async.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_local_ipc.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_local_sockets.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_mcp.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_mcp_install.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_native_cfamily.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_native_concurrency.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_native_rust.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_nuxt_import_dirs.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_nuxt_rootsrc.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_packaging.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_parity.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_parity_structure.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_php_props.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_plain_js.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_plans.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_platform_gaps.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_platform_type_variants.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_platforms.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_platforms_apple.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_presets_config.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_process_ipc.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_process_runs.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_protocols.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_app_tests_module.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_collection_chains.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_compat.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_entry_refs.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_fields.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_infer_cycles.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_roots.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_subprocess_tests.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_tests.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_web_hosts.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_web_routes.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_python_web_routes_more.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_realtime.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_realtime_native.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_roundtrip.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_route_tables.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_rpc.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_scip_health.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_sdk_external.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_snippet.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_sockets.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_spring.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_starters_budget.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_binding.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_exact.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_facts.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_fields.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_modules.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_more.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_nav_values.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_parse_errors.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_props.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_sdk.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_testing.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_swift_values.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_tests_scope.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ts_fields.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ts_fields_js_vue.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ts_file_specs.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ts_frameworks.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ts_nuxt.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_ts_src_tsconfig.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_values.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_viz.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_vue_nav.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_watch.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_webhooks.py +0 -0
- {cg_code_graph-0.18.0 → cg_code_graph-0.19.0}/tests/test_websockets.py +0 -0
- {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.
|
|
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
|
|  | Django (+ DRF, django-ninja), FastAPI / Starlette, Flask, Celery | exact (stdlib `ast`) | [Python](https://code-graph.cyberchronos00.workers.dev/docs/python) |
|
|
77
|
-
|   | 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
|
-
|  | Laravel (routes
|
|
77
|
+
|   | 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
|
+
|  | 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
|
|  | Flutter | exact (Dart analyzer; needs the Dart SDK) | [Platforms](https://code-graph.cyberchronos00.workers.dev/docs/platforms) |
|
|
80
80
|
|  | Android, Kotlin Multiplatform, Spring | heuristic; exact with scip-java (opt-in) | [Kotlin](https://code-graph.cyberchronos00.workers.dev/docs/kotlin) |
|
|
81
81
|
|  | 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
|
-
-
|
|
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
|
|  | Django (+ DRF, django-ninja), FastAPI / Starlette, Flask, Celery | exact (stdlib `ast`) | [Python](https://code-graph.cyberchronos00.workers.dev/docs/python) |
|
|
50
|
-
|   | 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
|
-
|  | Laravel (routes
|
|
50
|
+
|   | 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
|
+
|  | 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
|
|  | Flutter | exact (Dart analyzer; needs the Dart SDK) | [Platforms](https://code-graph.cyberchronos00.workers.dev/docs/platforms) |
|
|
53
53
|
|  | Android, Kotlin Multiplatform, Spring | heuristic; exact with scip-java (opt-in) | [Kotlin](https://code-graph.cyberchronos00.workers.dev/docs/kotlin) |
|
|
54
54
|
|  | 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
|
-
-
|
|
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.
|
|
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}
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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);
|
|
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.
|