osscodeiq 0.0.2__tar.gz → 0.1.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.
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/.github/workflows/publish.yml +28 -1
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/.gitignore +2 -2
- osscodeiq-0.1.0/CLAUDE.md +199 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/PKG-INFO +2 -1
- osscodeiq-0.1.0/docs/plans/2026-03-28-explorer-ui-plan.md +1616 -0
- osscodeiq-0.1.0/docs/specs/2026-03-28-analyzer-performance-design.md +155 -0
- osscodeiq-0.1.0/docs/specs/2026-03-28-explorer-ui-design.md +350 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pyproject.toml +2 -1
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/cli.py +1 -1
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/config.py +4 -4
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/graph/backends/__init__.py +2 -2
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/output/dot.py +1 -1
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/server/app.py +18 -7
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/server/routes.py +27 -2
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/server/service.py +106 -2
- osscodeiq-0.1.0/src/osscodeiq/server/ui/__init__.py +51 -0
- osscodeiq-0.1.0/src/osscodeiq/server/ui/components.py +116 -0
- osscodeiq-0.1.0/src/osscodeiq/server/ui/explorer.py +448 -0
- osscodeiq-0.1.0/src/osscodeiq/server/ui/flow_view.py +39 -0
- osscodeiq-0.1.0/src/osscodeiq/server/ui/mcp_console.py +212 -0
- osscodeiq-0.1.0/src/osscodeiq/server/ui/theme.py +123 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq.egg-info/PKG-INFO +2 -1
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq.egg-info/SOURCES.txt +14 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq.egg-info/requires.txt +1 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/conftest.py +1 -1
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/server/test_app.py +4 -4
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/server/test_routes.py +70 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/server/test_service.py +126 -0
- osscodeiq-0.1.0/tests/server/test_ui_components.py +269 -0
- osscodeiq-0.1.0/tests/server/test_ui_explorer.py +386 -0
- osscodeiq-0.1.0/tests/server/test_ui_init.py +20 -0
- osscodeiq-0.1.0/tests/server/test_ui_mcp_console.py +184 -0
- osscodeiq-0.1.0/tests/server/test_ui_theme.py +151 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/uv.lock +867 -0
- osscodeiq-0.0.2/CLAUDE.md +0 -135
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/.github/workflows/beta.yml +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/.github/workflows/ci.yml +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/.github/workflows/sbom.yml +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/.github/workflows/sonarcloud.yml +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/LICENSE +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/README.md +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_add_edge0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_add_edge_missing_target0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_add_node0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_add_node_duplicate0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_add_node_with_location0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_add_node_with_properties0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_all_edges0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_all_nodes0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_bulk_add_edges0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_bulk_add_nodes0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_bulk_add_nodes_deduplicat0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_callers0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_clear0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_close0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_consumers0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_cypher_4000/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_dependencies0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_dependents0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_determinism2/det_0.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_determinism2/det_1.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_edge_count0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_edge_properties0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_edges_by_kind0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_empty_backend0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_file0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_file_traversal0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_find_cycles0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_find_cycles1/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_find_cycles_no_cycles0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_flow_all0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_flow_overview0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_get_edges_between0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_get_ego0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_get_neighbors0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_get_node0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_get_node1/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_get_node_4040/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_get_node_not_found1/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_has_node0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_list_edges0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_list_edges_filter0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_list_nodes0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_list_nodes_filter_kind0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_list_nodes_pagination0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_neighbors_both0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_neighbors_in0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_neighbors_out0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_neighbors_with_edge_kinds0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_node_annotations0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_node_count0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_node_fqn0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_node_no_location0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_nodes_by_kind0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_persistence0/persist.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_producers0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_query_cypher0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_query_cypher_with_params0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_read_file0/hello.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_search0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_search_no_results0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_shortest_path0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_shortest_path2/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_shortest_path_4040/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_shortest_path_no_path0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_stats0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_subgraph0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_triage_component0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_triage_endpoints0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_triage_impact0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_update_node_properties0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_update_node_properties_no0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-1/test_welcome0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_add_edge0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_add_edge_missing_target0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_add_node0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_add_node_duplicate0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_add_node_with_location0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_add_node_with_properties0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_all_edges0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_all_nodes0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_bulk_add_edges0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_bulk_add_nodes0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_bulk_add_nodes_deduplicat0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_callers0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_clear0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_close0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_consumers0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_cypher_4000/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_dependencies0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_dependents0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_determinism2/det_0.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_determinism2/det_1.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_edge_count0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_edge_properties0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_edges_by_kind0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_empty_backend0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_file0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_file_traversal0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_find_cycles0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_find_cycles1/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_find_cycles_no_cycles0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_flow_all0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_flow_overview0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_get_edges_between0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_get_ego0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_get_neighbors0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_get_node0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_get_node1/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_get_node_4040/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_get_node_not_found1/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_has_node0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_list_edges0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_list_edges_filter0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_list_nodes0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_list_nodes_filter_kind0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_list_nodes_pagination0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_neighbors_both0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_neighbors_in0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_neighbors_out0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_neighbors_with_edge_kinds0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_node_annotations0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_node_count0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_node_fqn0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_node_no_location0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_nodes_by_kind0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_persistence0/persist.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_producers0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_query_cypher0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_query_cypher_with_params0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_read_file0/hello.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_search0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_search_no_results0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_shortest_path0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_shortest_path2/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_shortest_path_4040/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_shortest_path_no_path0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_stats0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_subgraph0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_triage_component0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_triage_endpoints0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_triage_impact0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_update_node_properties0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_update_node_properties_no0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-2/test_welcome0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_add_edge0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_add_edge_missing_target0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_add_node0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_add_node_duplicate0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_add_node_with_location0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_add_node_with_properties0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_all_edges0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_all_nodes0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_analysis_determinism0/hello.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_analysis_language_breakdo0/a.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_analysis_language_breakdo0/b.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_analysis_multiple_languag0/app.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_analysis_multiple_languag0/config.yaml +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_analysis_multiple_languag0/data.json +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_analysis_unreadable_file0/hello.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_analysis_with_progress0/hello.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_analyze_codebase0/hello.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_analyze_codebase0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_basic_analysis0/hello.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_bulk_add_edges0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_bulk_add_nodes0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_bulk_add_nodes_deduplicat0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_callers0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_clear0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_close0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_consumers0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_create_kuzu_backend0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_cypher_4000/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_dependencies0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_dependents0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_determinism2/det_0.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_determinism2/det_1.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_discover_excludes_ignored0/app.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_discover_excludes_ignored0/node_modules/lib.js +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_discover_extensionless_fi0/Dockerfile +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_discover_extensionless_fi0/Makefile +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_discover_non_git0/app.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_discover_non_git0/config.yaml +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_discover_non_git0/readme.txt +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_discover_respects_max_fil0/big.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_discover_respects_max_fil0/small.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_discover_subdirectories0/src/models/user.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_discovered_file_has_conte0/app.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_edge_count0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_edge_properties0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_edges_by_kind0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_empty_backend0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_file0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_file_traversal0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_callers0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_component_by_file0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_consumers0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_cycles0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_cycles1/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_cycles2/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_cycles_no_cycles0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_dependencies0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_dependents0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_producers0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_related_endpoints0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_shortest_path_exists0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_find_shortest_path_no_pat0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_flow_all0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_flow_overview0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_generate_flow0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_generate_flow_mermaid0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_get_edges_between0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_get_ego0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_get_ego_graph0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_get_neighbors0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_get_node0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_get_node1/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_get_node_4040/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_get_node_neighbors0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_get_node_neighbors_direct0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_get_node_not_found1/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_get_stats0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_has_node0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_ignores_comments0/.gitignore +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_incremental_analysis0/hello.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_list_edges0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_list_edges_filter0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_list_nodes0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_list_nodes_filter_kind0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_list_nodes_pagination0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_neighbors_both0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_neighbors_in0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_neighbors_out0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_neighbors_with_edge_kinds0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_node_annotations0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_node_count0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_node_fqn0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_node_no_location0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_nodes_by_kind0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_persistence0/persist.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_producers0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_query_cypher0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_query_cypher_with_params0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_query_edges_all0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_query_edges_filtered0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_query_nodes_all0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_query_nodes_filtered0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_read_file0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_read_file1/hello.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_read_file_not_found0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_run_cypher_error0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_search0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_search_graph0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_search_graph_no_match0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_search_no_results0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_shortest_path0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_shortest_path2/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_shortest_path_4040/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_shortest_path_no_path0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_stats0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_subgraph0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_trace_impact0/src/api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_triage_component0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_triage_endpoints0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_triage_impact0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_update_node_properties0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_update_node_properties_no0/test.kuzu +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_walk_files0/root.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_walk_files0/sub/test.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_welcome0/src/routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_with_codeignore0/.codeignore +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/pytest-of-dev/pytest-3/test_with_gitignore0/.gitignore +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/setup.cfg +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/sonar-project.properties +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/analyzer.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/cache/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/cache/hasher.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/cache/store.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/classifiers/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/classifiers/layer_classifier.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/auth/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/auth/certificate_auth.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/auth/ldap_auth.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/auth/session_header_auth.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/base.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/batch_structure.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/cloudformation.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/docker_compose.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/github_actions.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/gitlab_ci.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/helm_chart.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/ini_structure.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/json_structure.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/kubernetes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/kubernetes_rbac.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/openapi.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/package_json.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/properties_detector.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/pyproject_toml.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/sql_structure.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/toml_structure.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/tsconfig_json.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/config/yaml_structure.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/cpp/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/cpp/cpp_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/csharp/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/csharp/csharp_efcore.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/csharp/csharp_minimal_apis.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/csharp/csharp_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/docs/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/docs/markdown_structure.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/frontend/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/frontend/angular_components.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/frontend/frontend_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/frontend/react_components.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/frontend/svelte_components.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/frontend/vue_components.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/generic/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/generic/imports_detector.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/go/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/go/go_orm.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/go/go_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/go/go_web.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/iac/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/iac/bicep.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/iac/dockerfile.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/iac/terraform.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/azure_functions.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/azure_messaging.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/class_hierarchy.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/config_def.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/cosmos_db.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/graphql_resolver.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/grpc_service.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/ibm_mq.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/jaxrs.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/jdbc.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/jms.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/jpa_entity.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/kafka.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/kafka_protocol.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/micronaut.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/module_deps.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/public_api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/quarkus.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/rabbitmq.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/raw_sql.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/repository.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/rmi.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/spring_events.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/spring_rest.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/spring_security.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/tibco_ems.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/java/websocket.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/kotlin/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/kotlin/kotlin_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/kotlin/ktor_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/proto/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/proto/proto_structure.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/python/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/python/celery_tasks.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/python/django_auth.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/python/django_models.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/python/django_views.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/python/fastapi_auth.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/python/fastapi_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/python/flask_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/python/kafka_python.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/python/pydantic_models.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/python/python_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/python/sqlalchemy_models.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/registry.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/rust/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/rust/actix_web.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/rust/rust_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/scala/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/scala/scala_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/shell/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/shell/bash_detector.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/shell/powershell_detector.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/express_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/fastify_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/graphql_resolvers.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/kafka_js.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/mongoose_orm.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/nestjs_controllers.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/nestjs_guards.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/passport_jwt.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/prisma_orm.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/remix_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/sequelize_orm.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/typeorm_entities.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/typescript/typescript_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/detectors/utils.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/discovery/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/discovery/change_detector.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/discovery/file_discovery.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/flow/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/flow/engine.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/flow/models.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/flow/renderer.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/flow/templates/interactive.html +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/flow/vendor/cytoscape-dagre.min.js +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/flow/vendor/cytoscape.min.js +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/flow/vendor/dagre.min.js +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/flow/views.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/graph/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/graph/backend.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/graph/backends/kuzu.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/graph/backends/networkx.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/graph/backends/sqlite_backend.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/graph/builder.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/graph/query.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/graph/store.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/graph/views.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/models/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/models/graph.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/output/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/output/mermaid.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/output/safety.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/output/serializers.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/languages/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/languages/base.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/languages/java.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/languages/python.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/languages/typescript.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/parser_manager.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/structured/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/structured/gradle_parser.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/structured/json_parser.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/structured/properties_parser.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/structured/sql_parser.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/structured/xml_parser.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/parsing/structured/yaml_parser.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/server/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/server/mcp_server.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/server/middleware.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq/server/templates/welcome.html +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq.egg-info/dependency_links.txt +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq.egg-info/entry_points.txt +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/src/osscodeiq.egg-info/top_level.txt +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/classifiers/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/classifiers/test_layer_classifier.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/auth/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/auth/test_certificate_auth.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/auth/test_ldap_auth.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/auth/test_session_header_auth.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/config/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/config/test_cloudformation.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/config/test_docker_compose.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/config/test_github_actions.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/config/test_gitlab_ci.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/config/test_helm_chart.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/config/test_json_structure.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/config/test_kubernetes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/config/test_kubernetes_rbac.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/config/test_package_json.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/config/test_pyproject_toml.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/config/test_yaml_structure.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/cpp/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/cpp/test_cpp_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/csharp/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/csharp/test_csharp_efcore.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/csharp/test_csharp_minimal_apis.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/csharp/test_csharp_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/docs/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/docs/test_markdown_structure.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/frontend/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/frontend/test_angular_components.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/frontend/test_frontend_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/frontend/test_react_components.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/frontend/test_svelte_components.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/frontend/test_vue_components.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/generic/test_imports_detector.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/go/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/go/test_go_orm.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/go/test_go_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/go/test_go_web.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/iac/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/iac/test_dockerfile.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/iac/test_terraform.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_class_hierarchy.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_grpc_service.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_jpa_entity.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_kafka.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_micronaut.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_module_deps.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_more_java.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_public_api.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_quarkus.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_raw_sql.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_spring_events.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_spring_rest.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/java/test_spring_security.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/kotlin/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/kotlin/test_ktor_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/python/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/python/test_celery_tasks.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/python/test_django_auth.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/python/test_django_models.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/python/test_django_views.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/python/test_fastapi_auth.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/python/test_fastapi_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/python/test_flask_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/python/test_kafka_python.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/python/test_pydantic_models.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/python/test_python_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/python/test_sqlalchemy_models.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/rust/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/rust/test_actix_web.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/shell/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/shell/test_powershell_detector.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_express_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_fastify_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_graphql_resolvers.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_kafka_js.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_mongoose_orm.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_nestjs_controllers.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_nestjs_guards.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_passport_jwt.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_prisma_orm.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_remix_routes.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_sequelize_orm.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_typeorm_entities.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/detectors/typescript/test_typescript_structures.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/java/ApiKeys.java +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/java/ConnectorsResource.java +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/java/ConsumerConfig.java +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/java/FetchRequest.java +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/java/FetchResponse.java +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/java/Order.java +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/java/OrderController.java +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/java/OrderEventHandler.java +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/java/OrderRepository.java +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/java/Serializer.java +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/java/StringSerializer.java +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/java/pom.xml +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/python/app.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/python/models.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/typescript/user.controller.ts +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/fixtures/typescript/user.entity.ts +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/flow/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/flow/test_engine.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/flow/test_flow_edge_cases.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/flow/test_models.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/flow/test_renderer.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/flow/test_views.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/server/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/server/test_mcp_tools.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_analyzer_coverage.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_backends_init.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_cache_store.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_change_detector.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_detectors/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_detectors/test_cpp_detectors.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_detectors/test_csharp_detectors.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_detectors/test_generic_detectors.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_detectors/test_go_detectors.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_detectors/test_iac_detectors.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_detectors/test_java_detectors.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_detectors/test_python_detectors.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_detectors/test_shell_detectors.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_detectors/test_terraform_detectors.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_detectors/test_typescript_detectors.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_discovery/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_dot_output.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_edge_cases.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_file_discovery_coverage.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_graph/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_graph/test_builder.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_graph/test_models.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_graph/test_query.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_graph/test_store.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_graph/test_views.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_graph_edge_cases.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_graph_views.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_kuzu_backend.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_output/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_output/test_dot.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_output/test_mermaid.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_output/test_safety.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_output/test_serializers.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_parsers.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_parsing/__init__.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_registry_coverage.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_sqlite_backend.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_thread_safety.py +0 -0
- {osscodeiq-0.0.2 → osscodeiq-0.1.0}/tests/test_utils.py +0 -0
|
@@ -13,7 +13,7 @@ on:
|
|
|
13
13
|
default: false
|
|
14
14
|
|
|
15
15
|
permissions:
|
|
16
|
-
contents:
|
|
16
|
+
contents: write
|
|
17
17
|
id-token: write
|
|
18
18
|
|
|
19
19
|
jobs:
|
|
@@ -170,3 +170,30 @@ jobs:
|
|
|
170
170
|
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # release/v1
|
|
171
171
|
with:
|
|
172
172
|
attestations: true
|
|
173
|
+
|
|
174
|
+
github-release:
|
|
175
|
+
name: Create GitHub Release
|
|
176
|
+
needs: publish-pypi
|
|
177
|
+
runs-on: ubuntu-latest
|
|
178
|
+
permissions:
|
|
179
|
+
contents: write
|
|
180
|
+
steps:
|
|
181
|
+
- uses: actions/checkout@v4
|
|
182
|
+
with:
|
|
183
|
+
fetch-depth: 0
|
|
184
|
+
|
|
185
|
+
- name: Download artifacts
|
|
186
|
+
uses: actions/download-artifact@v4
|
|
187
|
+
with:
|
|
188
|
+
name: dist
|
|
189
|
+
path: dist/
|
|
190
|
+
|
|
191
|
+
- name: Create GitHub Release
|
|
192
|
+
env:
|
|
193
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
194
|
+
VERSION: ${{ inputs.version }}
|
|
195
|
+
run: |
|
|
196
|
+
gh release create "v${VERSION}" dist/* \
|
|
197
|
+
--title "v${VERSION}" \
|
|
198
|
+
--generate-notes \
|
|
199
|
+
--latest
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# OSSCodeIQ — Project Instructions
|
|
2
|
+
|
|
3
|
+
## What This Project Is
|
|
4
|
+
|
|
5
|
+
**OSSCodeIQ** (`osscodeiq` on PyPI) — a CLI tool + server that scans codebases to build a deterministic code knowledge graph. No AI, no external APIs — pure pattern matching. 97 detectors, 35 languages, 3 storage backends (NetworkX, SQLite, KuzuDB), REST API + MCP server, interactive flow diagrams.
|
|
6
|
+
|
|
7
|
+
- **PyPI package:** `osscodeiq`
|
|
8
|
+
- **CLI command:** `osscodeiq`
|
|
9
|
+
- **Python package:** `osscodeiq` (under `src/osscodeiq/`)
|
|
10
|
+
- **GitHub repo:** `RandomCodeSpace/code-iq` (repo name differs from package name)
|
|
11
|
+
- **Cache directory on disk:** `.osscodeiq`
|
|
12
|
+
|
|
13
|
+
## Architecture
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
FileDiscovery → Parsers → Detectors → GraphBuilder (buffered) → Linkers → LayerClassifier → GraphStore (backend)
|
|
17
|
+
↓
|
|
18
|
+
CodeIQService (shared facade)
|
|
19
|
+
↙ ↘
|
|
20
|
+
FastAPI REST (/api) FastMCP MCP (/mcp)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- **Detectors** follow the `Detector` Protocol in `detectors/base.py` — implement `name`, `supported_languages`, `detect(ctx) -> DetectorResult`
|
|
24
|
+
- **Backends** follow the `GraphBackend` Protocol in `graph/backend.py` — implement 16 methods. `CypherBackend` is optional for Cypher-capable backends.
|
|
25
|
+
- **GraphStore** is a facade delegating to a backend — never access backends directly
|
|
26
|
+
- **GraphBuilder** buffers all nodes and edges, flushes nodes first then edges (ensures cross-backend parity)
|
|
27
|
+
- **Linkers** run after all detectors, produce cross-file relationship edges
|
|
28
|
+
- **LayerClassifier** runs after linkers, sets `layer` property on every node
|
|
29
|
+
- **CodeIQService** wraps GraphStore + FlowEngine + GraphQuery + Analyzer — shared by REST and MCP
|
|
30
|
+
- **Server** is a single FastAPI app: `/api` (REST), `/mcp` (MCP via fastmcp streamable HTTP), `/` (welcome UI), `/docs` (OpenAPI)
|
|
31
|
+
|
|
32
|
+
## Critical Rules
|
|
33
|
+
|
|
34
|
+
### Determinism is Non-Negotiable
|
|
35
|
+
- Same input MUST produce same output, every time, on every backend
|
|
36
|
+
- No set iteration without `sorted()` first
|
|
37
|
+
- No dependency on thread completion order (builder uses indexed result slots)
|
|
38
|
+
- All detectors must be stateless pure functions — no class-level mutable state
|
|
39
|
+
|
|
40
|
+
### Cross-Backend Data Parity
|
|
41
|
+
- All 3 backends (NetworkX, SQLite, KuzuDB) must produce identical node and edge counts
|
|
42
|
+
- Edges are only added if both source and target nodes exist
|
|
43
|
+
- Test parity after any change to builder, store, or backends
|
|
44
|
+
|
|
45
|
+
### Windows Compatibility
|
|
46
|
+
- Always use `encoding="utf-8"` when reading/writing files (Windows defaults to cp1252)
|
|
47
|
+
- This applies to templates, vendor JS, HTML output, and any file I/O in the server
|
|
48
|
+
|
|
49
|
+
### pyproject.toml is the Single Source of Truth
|
|
50
|
+
- All dependencies, scripts, metadata, and package config live in `pyproject.toml`
|
|
51
|
+
- After ANY change to pyproject.toml, run `uv lock` and commit both files together
|
|
52
|
+
- Version in pyproject.toml is `0.0.0` (placeholder) — publish/beta workflows patch it at build time
|
|
53
|
+
- Server deps (fastapi, uvicorn, fastmcp) are core dependencies, not optional
|
|
54
|
+
- Only `dev` (pytest) and `kuzu` remain as optional deps
|
|
55
|
+
|
|
56
|
+
### GitHub References
|
|
57
|
+
- Repo URL is `RandomCodeSpace/code-iq` — do NOT change this even though package is `osscodeiq`
|
|
58
|
+
- SonarCloud project key: `RandomCodeSpace_code-iq`
|
|
59
|
+
- Badge URLs, workflow URLs, and clone URLs all use `code-iq`
|
|
60
|
+
|
|
61
|
+
## Code Conventions
|
|
62
|
+
|
|
63
|
+
- Python 3.11+, `from __future__ import annotations`
|
|
64
|
+
- Pydantic for data models, typer for CLI, rich for output
|
|
65
|
+
- FastAPI for REST API, fastmcp for MCP server (streamable HTTP, NOT SSE)
|
|
66
|
+
- Regex-based detection (no tree-sitter dependency for new detectors unless needed)
|
|
67
|
+
- `NodeKind` and `EdgeKind` enums in `models/graph.py` — add new values there
|
|
68
|
+
- ID format: `"{prefix}:{filepath}:{type}:{identifier}"` for cross-file uniqueness
|
|
69
|
+
- Properties dict for detector-specific metadata (`auth_type`, `framework`, `roles`, etc.)
|
|
70
|
+
- `layer` property on every node: `frontend | backend | infra | shared | unknown`
|
|
71
|
+
- Suppress websockets deprecation warnings in serve command (upstream uvicorn issue)
|
|
72
|
+
|
|
73
|
+
## CLI Commands
|
|
74
|
+
|
|
75
|
+
| Command | Purpose |
|
|
76
|
+
|---------|---------|
|
|
77
|
+
| `osscodeiq analyze [path]` | Scan codebase, build graph |
|
|
78
|
+
| `osscodeiq graph [path]` | Export graph (json, yaml, mermaid, dot) |
|
|
79
|
+
| `osscodeiq query [path]` | Semantic graph queries |
|
|
80
|
+
| `osscodeiq find [what] [path]` | Preset queries (endpoints, guards, entities, etc.) |
|
|
81
|
+
| `osscodeiq cypher [query]` | Raw Cypher (KuzuDB only) |
|
|
82
|
+
| `osscodeiq flow [path]` | Architecture flow diagrams (mermaid, json, html) |
|
|
83
|
+
| `osscodeiq serve [path]` | Start unified server (API + MCP) |
|
|
84
|
+
| `osscodeiq bundle [path]` | Create distributable package |
|
|
85
|
+
| `osscodeiq cache [action]` | Manage analysis cache |
|
|
86
|
+
| `osscodeiq plugins [action]` | List/inspect detectors |
|
|
87
|
+
| `osscodeiq version` | Show version info |
|
|
88
|
+
|
|
89
|
+
## Server Architecture
|
|
90
|
+
|
|
91
|
+
### Endpoints
|
|
92
|
+
- `GET /` — Welcome page (self-contained HTML, fetches `/api/stats`)
|
|
93
|
+
- `GET /api/stats` — Graph statistics
|
|
94
|
+
- `GET /api/nodes`, `GET /api/edges` — Paginated queries with `?kind=&limit=&offset=`
|
|
95
|
+
- `GET /api/nodes/{id}/neighbors` — Neighbor traversal
|
|
96
|
+
- `GET /api/ego/{id}` — Ego subgraph
|
|
97
|
+
- `GET /api/query/cycles`, `/shortest-path`, `/consumers/{id}`, `/producers/{id}`, `/callers/{id}`, `/dependencies/{id}`, `/dependents/{id}`
|
|
98
|
+
- `GET /api/flow/{view}` — Flow diagrams (overview, ci, deploy, runtime, auth)
|
|
99
|
+
- `POST /api/analyze` — Trigger analysis
|
|
100
|
+
- `POST /api/cypher` — Raw Cypher (400 if not KuzuDB)
|
|
101
|
+
- `GET /api/triage/component`, `/impact/{id}`, `/endpoints` — Agentic triage tools
|
|
102
|
+
- `GET /api/search?q=` — Free-text graph search
|
|
103
|
+
- `GET /api/file?path=` — Serve source files (path traversal protected)
|
|
104
|
+
- `POST /mcp` — MCP endpoint (20 tools via streamable HTTP)
|
|
105
|
+
|
|
106
|
+
### MCP Tools (20)
|
|
107
|
+
15 core tools (get_stats, query_nodes, query_edges, get_node_neighbors, get_ego_graph, find_cycles, find_shortest_path, find_consumers, find_producers, find_callers, find_dependencies, find_dependents, generate_flow, analyze_codebase, run_cypher) + 5 agentic triage tools (find_component_by_file, trace_impact, find_related_endpoints, search_graph, read_file).
|
|
108
|
+
|
|
109
|
+
### Key Server Files
|
|
110
|
+
| File | Purpose |
|
|
111
|
+
|------|---------|
|
|
112
|
+
| `server/app.py` | FastAPI app assembly, mounts /api, /mcp, / |
|
|
113
|
+
| `server/service.py` | CodeIQService — shared facade over GraphStore + FlowEngine + GraphQuery |
|
|
114
|
+
| `server/routes.py` | REST API endpoints (uses Annotated type hints) |
|
|
115
|
+
| `server/mcp_server.py` | FastMCP tool definitions |
|
|
116
|
+
| `server/middleware.py` | Auth middleware stub (no-op, ready for future auth) |
|
|
117
|
+
| `server/templates/welcome.html` | Self-contained welcome page |
|
|
118
|
+
|
|
119
|
+
## Testing
|
|
120
|
+
|
|
121
|
+
- `pytest tests/ -x -q` — must always pass (currently 2,074 tests, 86% coverage)
|
|
122
|
+
- Every detector needs: positive match test, negative match test, determinism test
|
|
123
|
+
- Server tests use FastAPI TestClient
|
|
124
|
+
- MCP tools tested by calling functions directly after `set_service()`
|
|
125
|
+
- All detectors use shared `detectors/utils.py` — decode_text, find_line_number, etc.
|
|
126
|
+
- KuzuDB tests require `kuzu` package (installed in CI via `pip install -e ".[dev,kuzu]"`)
|
|
127
|
+
|
|
128
|
+
## Key Files
|
|
129
|
+
|
|
130
|
+
| File | Purpose |
|
|
131
|
+
|------|---------|
|
|
132
|
+
| `detectors/base.py` | Detector protocol |
|
|
133
|
+
| `graph/backend.py` | GraphBackend + CypherBackend protocols |
|
|
134
|
+
| `graph/store.py` | GraphStore facade |
|
|
135
|
+
| `graph/builder.py` | GraphBuilder with buffered flush + linkers |
|
|
136
|
+
| `graph/backends/networkx.py` | Default in-memory backend |
|
|
137
|
+
| `graph/backends/kuzu.py` | KuzuDB embedded graph DB with Cypher |
|
|
138
|
+
| `graph/backends/sqlite_backend.py` | SQLite file-based backend |
|
|
139
|
+
| `classifiers/layer_classifier.py` | Deterministic layer classification |
|
|
140
|
+
| `models/graph.py` | NodeKind (31 types), EdgeKind (26 types), GraphNode, GraphEdge |
|
|
141
|
+
| `config.py` | Config with GraphConfig for backend selection |
|
|
142
|
+
| `analyzer.py` | Pipeline orchestrator |
|
|
143
|
+
| `cli.py` | CLI commands — constants `_GRAPH_DIR_NAME`, `_KUZU_DB_NAME`, `_SQLITE_DB_NAME` |
|
|
144
|
+
| `flow/engine.py` | FlowEngine — generate/render flow diagrams |
|
|
145
|
+
| `flow/renderer.py` | Mermaid, JSON, HTML renderers (vendor JS inlined for offline use) |
|
|
146
|
+
| `flow/views.py` | 5 view builders (overview, ci, deploy, runtime, auth) |
|
|
147
|
+
| `flow/vendor/` | Bundled Cytoscape.js + Dagre.js (no CDN — works behind firewalls) |
|
|
148
|
+
|
|
149
|
+
## Adding a New Detector
|
|
150
|
+
|
|
151
|
+
1. Create file in `detectors/<category>/my_detector.py`
|
|
152
|
+
2. Implement `Detector` protocol (name, supported_languages, detect method)
|
|
153
|
+
3. **No registry changes needed** — auto-discovered by `pkgutil.walk_packages()`
|
|
154
|
+
4. Create test in `tests/detectors/<category>/test_my_detector.py`
|
|
155
|
+
5. Include a determinism test (run twice, assert identical output)
|
|
156
|
+
6. Run `pytest tests/ -x -q` — all tests must pass
|
|
157
|
+
|
|
158
|
+
## CI/CD Workflows
|
|
159
|
+
|
|
160
|
+
| Workflow | File | Purpose |
|
|
161
|
+
|----------|------|---------|
|
|
162
|
+
| CI | `ci.yml` | Run tests on Python 3.11-3.12, installs `[dev,kuzu]` |
|
|
163
|
+
| Beta | `beta.yml` | Auto-publish beta on push to src/tests. Version: latest stable tag + incremental counter (PEP 440: `v0.1.0b0`) |
|
|
164
|
+
| Publish | `publish.yml` | Manual trigger. Patches version from input, builds, tests on 11 OS combos + 9 containers, publishes to PyPI, creates GitHub release |
|
|
165
|
+
| SonarCloud | `sonarcloud.yml` | Code quality + coverage analysis |
|
|
166
|
+
| SBOM | `sbom.yml` | Dependency audit |
|
|
167
|
+
|
|
168
|
+
### Beta Versioning
|
|
169
|
+
- Derives base version from latest stable git tag (e.g. `v0.1.0` → `0.1.0`)
|
|
170
|
+
- Increments beta number from existing beta tags (not commit count)
|
|
171
|
+
- Tags: PEP 440 format (`v0.1.0b0`, `v0.1.0b1`, ...)
|
|
172
|
+
- Falls back to pyproject.toml version if no stable tags exist
|
|
173
|
+
|
|
174
|
+
### PyPI Publishing
|
|
175
|
+
- Trusted publisher configured (environment: `pypi`)
|
|
176
|
+
- Version patched from workflow_dispatch input (pyproject.toml stays at `0.0.0`)
|
|
177
|
+
- Creates GitHub release with auto-generated changelog after successful publish
|
|
178
|
+
|
|
179
|
+
## SonarCloud
|
|
180
|
+
|
|
181
|
+
- Project key: `RandomCodeSpace_code-iq`
|
|
182
|
+
- Config: `sonar-project.properties` — sources at `src/osscodeiq`
|
|
183
|
+
- Coverage report: `coverage.xml` generated by pytest-cov
|
|
184
|
+
- Keep 0 bugs, 0 vulnerabilities. Cognitive complexity issues are tracked but not blocking.
|
|
185
|
+
|
|
186
|
+
## Gotchas & Lessons Learned
|
|
187
|
+
|
|
188
|
+
- **Package name ≠ repo name**: Package is `osscodeiq`, repo is `code-iq`. Never change GitHub URLs.
|
|
189
|
+
- **pyproject.toml section ordering matters**: `[project.urls]` must come AFTER `dependencies = [...]`, not before. TOML will silently parse dependencies as a URL key otherwise.
|
|
190
|
+
- **Windows encoding**: All file reads/writes must specify `encoding="utf-8"`. Minified JS vendor files contain bytes invalid in cp1252.
|
|
191
|
+
- **FastAPI path params with colons**: Node IDs contain colons (e.g. `gha:workflow:build`). Use `{node_id:path}` in route definitions. Route ordering matters — `/nodes/{id}/neighbors` must be registered BEFORE `/nodes/{id}`.
|
|
192
|
+
- **MCP transport**: Use streamable HTTP (`mcp.http_app(transport="streamable-http")`), NOT SSE.
|
|
193
|
+
- **Loop bounds from user input**: Cap `radius` and `depth` params (max 10) to prevent DoS. SonarCloud flags this as a vulnerability.
|
|
194
|
+
- **Vendor JS for offline use**: Cytoscape.js and Dagre.js are bundled in `flow/vendor/` and inlined into HTML at render time. No CDN dependencies.
|
|
195
|
+
- **uv.lock**: Always regenerate with `uv lock` after pyproject.toml changes.
|
|
196
|
+
|
|
197
|
+
## Updating This File
|
|
198
|
+
|
|
199
|
+
After significant changes (new detectors, new backends, architectural decisions, conventions learned), update this CLAUDE.md to reflect the current state. Keep it concise and actionable.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: osscodeiq
|
|
3
|
-
Version: 0.0
|
|
3
|
+
Version: 0.1.0
|
|
4
4
|
Summary: CLI tool for intelligent code graph discovery and analysis
|
|
5
5
|
License: MIT
|
|
6
6
|
Project-URL: Homepage, https://github.com/RandomCodeSpace/code-iq
|
|
@@ -36,6 +36,7 @@ Requires-Dist: pathspec>=0.11
|
|
|
36
36
|
Requires-Dist: fastapi>=0.115
|
|
37
37
|
Requires-Dist: uvicorn[standard]>=0.34
|
|
38
38
|
Requires-Dist: fastmcp>=2.0
|
|
39
|
+
Requires-Dist: nicegui>=3.9
|
|
39
40
|
Provides-Extra: dev
|
|
40
41
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
41
42
|
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|