diff --git a/pyproject.toml b/pyproject.toml index 462da4d3..03dd9cf7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,10 @@ classifiers = ["Programming Language :: Python"] [project.entry-points.'aiq.components'] vuln_analysis = "vuln_analysis.register" +[tool.setuptools.packages.find] +where = ["src"] +namespaces = false + [dependency-groups] # Dependency groups are only for developers to aid in managing dependencies local to a dev machine. dev = [ diff --git a/src/vuln_analysis/logging/__init__.py b/src/__init__.py similarity index 100% rename from src/vuln_analysis/logging/__init__.py rename to src/__init__.py diff --git a/src/exploit_iq_commons/__init__.py b/src/exploit_iq_commons/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/exploit_iq_commons/data_models/__init__.py b/src/exploit_iq_commons/data_models/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/vuln_analysis/data_models/common.py b/src/exploit_iq_commons/data_models/common.py similarity index 100% rename from src/vuln_analysis/data_models/common.py rename to src/exploit_iq_commons/data_models/common.py diff --git a/src/vuln_analysis/data_models/cve_intel.py b/src/exploit_iq_commons/data_models/cve_intel.py similarity index 100% rename from src/vuln_analysis/data_models/cve_intel.py rename to src/exploit_iq_commons/data_models/cve_intel.py diff --git a/src/vuln_analysis/data_models/dependencies.py b/src/exploit_iq_commons/data_models/dependencies.py similarity index 100% rename from src/vuln_analysis/data_models/dependencies.py rename to src/exploit_iq_commons/data_models/dependencies.py diff --git a/src/vuln_analysis/data_models/info.py b/src/exploit_iq_commons/data_models/info.py similarity index 94% rename from src/vuln_analysis/data_models/info.py rename to src/exploit_iq_commons/data_models/info.py index e9409435..a01f1dda 100644 --- a/src/vuln_analysis/data_models/info.py +++ b/src/exploit_iq_commons/data_models/info.py @@ -15,8 +15,8 @@ from pydantic import BaseModel -from .cve_intel import CveIntel -from .dependencies import VulnerableDependencies +from exploit_iq_commons.data_models.cve_intel import CveIntel +from exploit_iq_commons.data_models.dependencies import VulnerableDependencies class SBOMPackage(BaseModel): diff --git a/src/vuln_analysis/data_models/input.py b/src/exploit_iq_commons/data_models/input.py similarity index 93% rename from src/vuln_analysis/data_models/input.py rename to src/exploit_iq_commons/data_models/input.py index c079ca29..1e95c81c 100644 --- a/src/vuln_analysis/data_models/input.py +++ b/src/exploit_iq_commons/data_models/input.py @@ -26,12 +26,12 @@ from pydantic import Tag from pydantic import field_validator -from ..utils.string_utils import is_valid_cve_id -from ..utils.string_utils import is_valid_ghsa_id -from .common import HashableModel -from .common import TypedBaseModel -from .info import AgentMorpheusInfo -from .info import SBOMPackage +from exploit_iq_commons.utils.string_utils import is_valid_cve_id +from exploit_iq_commons.utils.string_utils import is_valid_ghsa_id +from exploit_iq_commons.data_models.common import HashableModel +from exploit_iq_commons.data_models.common import TypedBaseModel +from exploit_iq_commons.data_models.info import AgentMorpheusInfo +from exploit_iq_commons.data_models.info import SBOMPackage class SourceDocumentsInfo(HashableModel): diff --git a/src/exploit_iq_commons/embedding/__init__.py b/src/exploit_iq_commons/embedding/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/vuln_analysis/utils/document_embedding.py b/src/exploit_iq_commons/embedding/document_embedding.py similarity index 95% rename from src/vuln_analysis/utils/document_embedding.py rename to src/exploit_iq_commons/embedding/document_embedding.py index 8bbeaa27..c5bbfd27 100644 --- a/src/vuln_analysis/utils/document_embedding.py +++ b/src/exploit_iq_commons/embedding/document_embedding.py @@ -36,12 +36,13 @@ from langchain_community.vectorstores import FAISS from langchain_core.document_loaders.blob_loaders import Blob -from vuln_analysis.data_models.input import SourceDocumentsInfo -from vuln_analysis.utils.go_segmenters_with_methods import GoSegmenterWithMethods -from vuln_analysis.utils.js_extended_parser import ExtendedJavaScriptSegmenter -from vuln_analysis.utils.source_code_git_loader import SourceCodeGitLoader -from vuln_analysis.utils.transitive_code_searcher_tool import TransitiveCodeSearcher -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.data_models.input import SourceDocumentsInfo +from exploit_iq_commons.embedding.go_segmenters_with_methods import GoSegmenterWithMethods +from exploit_iq_commons.embedding.js_extended_parser import ExtendedJavaScriptSegmenter +from exploit_iq_commons.embedding.source_code_git_loader import SourceCodeGitLoader +from vuln_analysis.utils.git_utils import sanitize_git_url_for_path +from exploit_iq_commons.embedding.transitive_code_searcher_tool import TransitiveCodeSearcher +from exploit_iq_commons.logging.loggers_factory import LoggingFactory if typing.TYPE_CHECKING: from langchain_core.embeddings import Embeddings # pragma: no cover @@ -348,7 +349,11 @@ def get_repo_path(self, source_info: SourceDocumentsInfo): Path Returns the path to the git repository. """ - return self._git_directory / PurePath(source_info.git_repo) + # Sanitize the git repo URL to create a valid filesystem path + # Remove protocol separators and path separators that could cause issues + # Example: 'https://github.com/RHEcosystemAppEng/vulnerability-analysis' -> 'https.github.com.RHEcosystemAppEng.vulnerability-analysis' + sanitized_repo_path = sanitize_git_url_for_path(source_info.git_repo) + return self._git_directory / PurePath(sanitized_repo_path) def collect_documents(self, source_info: SourceDocumentsInfo) -> list[Document]: """ diff --git a/src/vuln_analysis/utils/go_segmenters_with_methods.py b/src/exploit_iq_commons/embedding/go_segmenters_with_methods.py similarity index 100% rename from src/vuln_analysis/utils/go_segmenters_with_methods.py rename to src/exploit_iq_commons/embedding/go_segmenters_with_methods.py diff --git a/src/vuln_analysis/utils/js_extended_parser.py b/src/exploit_iq_commons/embedding/js_extended_parser.py similarity index 98% rename from src/vuln_analysis/utils/js_extended_parser.py rename to src/exploit_iq_commons/embedding/js_extended_parser.py index cf771312..56a03d7b 100644 --- a/src/vuln_analysis/utils/js_extended_parser.py +++ b/src/exploit_iq_commons/embedding/js_extended_parser.py @@ -21,7 +21,7 @@ import esprima from langchain_community.document_loaders.parsers.language.javascript import JavaScriptSegmenter -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/source_code_git_loader.py b/src/exploit_iq_commons/embedding/source_code_git_loader.py similarity index 88% rename from src/vuln_analysis/utils/source_code_git_loader.py rename to src/exploit_iq_commons/embedding/source_code_git_loader.py index 766fda16..8f796022 100644 --- a/src/vuln_analysis/utils/source_code_git_loader.py +++ b/src/exploit_iq_commons/embedding/source_code_git_loader.py @@ -24,8 +24,8 @@ from langchain_core.document_loaders.blob_loaders import Blob from tqdm import tqdm -from vuln_analysis.utils.transitive_code_searcher_tool import TransitiveCodeSearcher -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.embedding.transitive_code_searcher_tool import TransitiveCodeSearcher +from exploit_iq_commons.logging.loggers_factory import LoggingFactory PathLike = typing.Union[str, os.PathLike] @@ -179,18 +179,18 @@ def yield_blobs(self) -> typing.Iterator[Blob]: logger.info("Processing %d files in the Git repository at path: '%s'", len(final_files), self.repo_path) for f in tqdm(final_files): - - file_path = Path(f) - - abs_file_path = base_path / file_path - - rel_file_path = str(file_path) - - metadata = { - "source": rel_file_path, - "file_path": rel_file_path, - "file_name": file_path.name, - "file_type": file_path.suffix, - } - - yield Blob.from_path(abs_file_path, metadata=metadata) + abs_file_path = base_path / f + if abs_file_path.is_file(): + try: + rel_file_path = str(f) + metadata = { + "source": rel_file_path, + "file_path": rel_file_path, + "file_name": abs_file_path.name, + "file_type": abs_file_path.suffix, + } + yield Blob.from_path(abs_file_path, metadata=metadata) + except Exception as e: + logger.warning("Failed to read blob for '%s'. Ignoring this file. Error: %s", abs_file_path, e) + else: + logger.debug("Skipping path as it is a directory, not a file: '%s'", abs_file_path) diff --git a/src/vuln_analysis/utils/transitive_code_searcher_tool.py b/src/exploit_iq_commons/embedding/transitive_code_searcher_tool.py similarity index 95% rename from src/vuln_analysis/utils/transitive_code_searcher_tool.py rename to src/exploit_iq_commons/embedding/transitive_code_searcher_tool.py index f5b35b41..d4f7401a 100644 --- a/src/vuln_analysis/utils/transitive_code_searcher_tool.py +++ b/src/exploit_iq_commons/embedding/transitive_code_searcher_tool.py @@ -18,8 +18,8 @@ from langchain.docstore.document import Document -from .chain_of_calls_retriever import ChainOfCallsRetriever -from .dep_tree import ( +from exploit_iq_commons.utils.chain_of_calls_retriever import ChainOfCallsRetriever +from exploit_iq_commons.utils.dep_tree import ( GOLANG_MANIFEST, JAVA_MANIFEST, JS_MANIFEST, @@ -29,7 +29,7 @@ get_dependency_tree_builder, ) -from vuln_analysis.logging.loggers_factory import LoggingFactory, MULTI_LINE_MESSAGE_TRUE +from exploit_iq_commons.logging.loggers_factory import LoggingFactory, MULTI_LINE_MESSAGE_TRUE logger = LoggingFactory.get_agent_logger(f"morpheus.{__name__}") diff --git a/src/exploit_iq_commons/logging/__init__.py b/src/exploit_iq_commons/logging/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/vuln_analysis/logging/loggers_factory.py b/src/exploit_iq_commons/logging/loggers_factory.py similarity index 100% rename from src/vuln_analysis/logging/loggers_factory.py rename to src/exploit_iq_commons/logging/loggers_factory.py diff --git a/src/exploit_iq_commons/pyproject.toml b/src/exploit_iq_commons/pyproject.toml new file mode 100644 index 00000000..57813628 --- /dev/null +++ b/src/exploit_iq_commons/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +build-backend = "setuptools.build_meta" +requires = ["setuptools >= 64", "setuptools-scm>=8"] + +[project] +name = "exploit-iq-commons" +version = "0.1.0" +description = "Common library for ExploitIQ." +requires-python = ">=3.11,<3.13" + +dependencies = [ + "esprima==4.0.1", + "GitPython==3.1.44", + "langchain-community>=0.3,<0.4", + "tqdm==4.67.1", + "tree-sitter-languages==1.10.2", + "tree-sitter==0.21.3", +] + +[tool.setuptools.packages.find] +where = [".."] +include = ["exploit_iq_commons*"] diff --git a/src/exploit_iq_commons/utils/__init__.py b/src/exploit_iq_commons/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/vuln_analysis/utils/chain_of_calls_retriever.py b/src/exploit_iq_commons/utils/chain_of_calls_retriever.py similarity index 98% rename from src/vuln_analysis/utils/chain_of_calls_retriever.py rename to src/exploit_iq_commons/utils/chain_of_calls_retriever.py index 44774f41..8c05a77f 100644 --- a/src/vuln_analysis/utils/chain_of_calls_retriever.py +++ b/src/exploit_iq_commons/utils/chain_of_calls_retriever.py @@ -7,8 +7,8 @@ import logging from .dep_tree import ROOT_LEVEL_SENTINEL, DependencyTree, Ecosystem -from .functions_parsers.lang_functions_parsers import LanguageFunctionsParser -from .functions_parsers.lang_functions_parsers_factory import ( +from exploit_iq_commons.utils.functions_parsers.lang_functions_parsers import LanguageFunctionsParser +from exploit_iq_commons.utils.functions_parsers.lang_functions_parsers_factory import ( get_language_function_parser, ) @@ -16,7 +16,7 @@ EXCLUSIONS_INDEX = 1 -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(f"morpheus.{__name__}") diff --git a/src/vuln_analysis/utils/dep_tree.py b/src/exploit_iq_commons/utils/dep_tree.py similarity index 98% rename from src/vuln_analysis/utils/dep_tree.py rename to src/exploit_iq_commons/utils/dep_tree.py index f8709819..a4e98438 100644 --- a/src/vuln_analysis/utils/dep_tree.py +++ b/src/exploit_iq_commons/utils/dep_tree.py @@ -4,7 +4,7 @@ from pathlib import Path import logging -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/functions_parsers/__init__.py b/src/exploit_iq_commons/utils/functions_parsers/__init__.py similarity index 100% rename from src/vuln_analysis/utils/functions_parsers/__init__.py rename to src/exploit_iq_commons/utils/functions_parsers/__init__.py diff --git a/src/vuln_analysis/utils/functions_parsers/golang_functions_parsers.py b/src/exploit_iq_commons/utils/functions_parsers/golang_functions_parsers.py similarity index 99% rename from src/vuln_analysis/utils/functions_parsers/golang_functions_parsers.py rename to src/exploit_iq_commons/utils/functions_parsers/golang_functions_parsers.py index 94258de3..34382834 100644 --- a/src/vuln_analysis/utils/functions_parsers/golang_functions_parsers.py +++ b/src/exploit_iq_commons/utils/functions_parsers/golang_functions_parsers.py @@ -3,7 +3,7 @@ from langchain_core.documents import Document -from .lang_functions_parsers import LanguageFunctionsParser +from exploit_iq_commons.utils.functions_parsers.lang_functions_parsers import LanguageFunctionsParser EMBEDDED_TYPE = "embedded_type" diff --git a/src/vuln_analysis/utils/functions_parsers/lang_functions_parsers.py b/src/exploit_iq_commons/utils/functions_parsers/lang_functions_parsers.py similarity index 100% rename from src/vuln_analysis/utils/functions_parsers/lang_functions_parsers.py rename to src/exploit_iq_commons/utils/functions_parsers/lang_functions_parsers.py diff --git a/src/vuln_analysis/utils/functions_parsers/lang_functions_parsers_factory.py b/src/exploit_iq_commons/utils/functions_parsers/lang_functions_parsers_factory.py similarity index 68% rename from src/vuln_analysis/utils/functions_parsers/lang_functions_parsers_factory.py rename to src/exploit_iq_commons/utils/functions_parsers/lang_functions_parsers_factory.py index 460dd866..c3e79c36 100644 --- a/src/vuln_analysis/utils/functions_parsers/lang_functions_parsers_factory.py +++ b/src/exploit_iq_commons/utils/functions_parsers/lang_functions_parsers_factory.py @@ -1,6 +1,6 @@ -from ..dep_tree import Ecosystem -from .golang_functions_parsers import GoLanguageFunctionsParser -from .lang_functions_parsers import LanguageFunctionsParser +from exploit_iq_commons.utils.dep_tree import Ecosystem +from exploit_iq_commons.utils.functions_parsers.golang_functions_parsers import GoLanguageFunctionsParser +from exploit_iq_commons.utils.functions_parsers.lang_functions_parsers import LanguageFunctionsParser def get_language_function_parser(ecosystem: Ecosystem) -> LanguageFunctionsParser: diff --git a/src/vuln_analysis/utils/string_utils.py b/src/exploit_iq_commons/utils/string_utils.py similarity index 100% rename from src/vuln_analysis/utils/string_utils.py rename to src/exploit_iq_commons/utils/string_utils.py diff --git a/src/vuln_analysis/data_models/output.py b/src/vuln_analysis/data_models/output.py index ab0a3b01..56406a0c 100644 --- a/src/vuln_analysis/data_models/output.py +++ b/src/vuln_analysis/data_models/output.py @@ -18,7 +18,7 @@ from pydantic import BaseModel from pydantic import model_validator -from .input import AgentMorpheusEngineInput +from exploit_iq_commons.data_models.input import AgentMorpheusEngineInput class AgentIntermediateStep(BaseModel): diff --git a/src/vuln_analysis/data_models/plugin.py b/src/vuln_analysis/data_models/plugin.py index ff09c075..108e6c98 100644 --- a/src/vuln_analysis/data_models/plugin.py +++ b/src/vuln_analysis/data_models/plugin.py @@ -20,8 +20,8 @@ import aiohttp -from .common import TypedBaseModel -from .cve_intel import IntelPluginData +from exploit_iq_commons.data_models.common import TypedBaseModel +from exploit_iq_commons.data_models.cve_intel import IntelPluginData _T = typing.TypeVar('_T', bound='PluginSchema') diff --git a/src/vuln_analysis/data_models/plugins/intel_plugin.py b/src/vuln_analysis/data_models/plugins/intel_plugin.py index b928c470..43665674 100644 --- a/src/vuln_analysis/data_models/plugins/intel_plugin.py +++ b/src/vuln_analysis/data_models/plugins/intel_plugin.py @@ -15,7 +15,7 @@ from ..cve_intel import IntelPluginData from ..plugin import IntelPluginSchema -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/data_models/state.py b/src/vuln_analysis/data_models/state.py index 59cbb399..7f420fac 100644 --- a/src/vuln_analysis/data_models/state.py +++ b/src/vuln_analysis/data_models/state.py @@ -17,8 +17,8 @@ from pydantic import BaseModel -from vuln_analysis.data_models.cve_intel import CveIntel -from vuln_analysis.data_models.input import AgentMorpheusEngineInput +from exploit_iq_commons.data_models.cve_intel import CveIntel +from exploit_iq_commons.data_models.input import AgentMorpheusEngineInput class AgentMorpheusEngineState(BaseModel): diff --git a/src/vuln_analysis/functions/cve_agent.py b/src/vuln_analysis/functions/cve_agent.py index d1971174..087a5322 100644 --- a/src/vuln_analysis/functions/cve_agent.py +++ b/src/vuln_analysis/functions/cve_agent.py @@ -32,7 +32,7 @@ from pydantic import Field from vuln_analysis.data_models.state import AgentMorpheusEngineState from vuln_analysis.utils.prompting import get_agent_prompt -from vuln_analysis.logging.loggers_factory import LoggingFactory, trace_id +from exploit_iq_commons.logging.loggers_factory import LoggingFactory, trace_id logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/functions/cve_calculate_intel_score.py b/src/vuln_analysis/functions/cve_calculate_intel_score.py index 458af643..ef1a2588 100644 --- a/src/vuln_analysis/functions/cve_calculate_intel_score.py +++ b/src/vuln_analysis/functions/cve_calculate_intel_score.py @@ -39,7 +39,7 @@ class CVECalculateIntelScoreConfig(FunctionBaseConfig, name="cve_calculate_intel @register_function(config_type=CVECalculateIntelScoreConfig, framework_wrappers=[LLMFrameworkEnum.LANGCHAIN]) async def cve_calculate_intel_score(config: CVECalculateIntelScoreConfig, builder: Builder): # pylint: disable=unused-argument - from vuln_analysis.data_models.input import AgentMorpheusEngineInput + from exploit_iq_commons.data_models.input import AgentMorpheusEngineInput from vuln_analysis.utils.intel_source_score import IntelScorer async def _arun(message: AgentMorpheusEngineInput) -> AgentMorpheusEngineInput: diff --git a/src/vuln_analysis/functions/cve_check_vuln_deps.py b/src/vuln_analysis/functions/cve_check_vuln_deps.py index 56964db8..7d05d54a 100644 --- a/src/vuln_analysis/functions/cve_check_vuln_deps.py +++ b/src/vuln_analysis/functions/cve_check_vuln_deps.py @@ -24,7 +24,7 @@ from aiq.data_models.function import FunctionBaseConfig from pydantic import Field -from vuln_analysis.logging.loggers_factory import LoggingFactory, trace_id +from exploit_iq_commons.logging.loggers_factory import LoggingFactory, trace_id logger = LoggingFactory.get_agent_logger(__name__) @@ -41,10 +41,10 @@ class CVEVulnerableDepsChecksConfig(FunctionBaseConfig, name="cve_check_vuln_dep @register_function(config_type=CVEVulnerableDepsChecksConfig, framework_wrappers=[LLMFrameworkEnum.LANGCHAIN]) async def cve_check_vuln_deps(config: CVEVulnerableDepsChecksConfig, builder: Builder): # pylint: disable=unused-argument - from vuln_analysis.data_models.cve_intel import CveIntel - from vuln_analysis.data_models.dependencies import VulnerableDependencies - from vuln_analysis.data_models.dependencies import VulnerableSBOMPackage - from vuln_analysis.data_models.input import AgentMorpheusEngineInput + from exploit_iq_commons.data_models.cve_intel import CveIntel + from exploit_iq_commons.data_models.dependencies import VulnerableDependencies + from exploit_iq_commons.data_models.dependencies import VulnerableSBOMPackage + from exploit_iq_commons.data_models.input import AgentMorpheusEngineInput from vuln_analysis.utils.vulnerable_dependency_checker import VulnerableDependencyChecker async def _arun(message: AgentMorpheusEngineInput) -> AgentMorpheusEngineInput: diff --git a/src/vuln_analysis/functions/cve_checklist.py b/src/vuln_analysis/functions/cve_checklist.py index 99dff2d6..e4259102 100644 --- a/src/vuln_analysis/functions/cve_checklist.py +++ b/src/vuln_analysis/functions/cve_checklist.py @@ -24,7 +24,7 @@ from aiq.data_models.function import FunctionBaseConfig from pydantic import Field from vuln_analysis.utils import data_utils -from vuln_analysis.logging.loggers_factory import LoggingFactory, trace_id +from exploit_iq_commons.logging.loggers_factory import LoggingFactory, trace_id logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/functions/cve_fetch_intel.py b/src/vuln_analysis/functions/cve_fetch_intel.py index bf42f657..1d1b247a 100644 --- a/src/vuln_analysis/functions/cve_fetch_intel.py +++ b/src/vuln_analysis/functions/cve_fetch_intel.py @@ -25,10 +25,9 @@ from aiq.data_models.function import FunctionBaseConfig from pydantic import Field +from exploit_iq_commons.logging.loggers_factory import LoggingFactory, trace_id from vuln_analysis.data_models.plugin import PluginConfig -from vuln_analysis.logging.loggers_factory import LoggingFactory, trace_id - logger = LoggingFactory.get_agent_logger(__name__) @@ -43,7 +42,7 @@ class CVEFetchIntelConfig(FunctionBaseConfig, name="cve_fetch_intel"): @register_function(config_type=CVEFetchIntelConfig, framework_wrappers=[LLMFrameworkEnum.LANGCHAIN]) async def cve_fetch_intel(config: CVEFetchIntelConfig, builder: Builder): # pylint: disable=unused-argument - from vuln_analysis.data_models.input import AgentMorpheusEngineInput + from exploit_iq_commons.data_models.input import AgentMorpheusEngineInput from vuln_analysis.utils.intel_retriever import IntelRetriever async def _arun(message: AgentMorpheusEngineInput) -> AgentMorpheusEngineInput: diff --git a/src/vuln_analysis/functions/cve_file_output.py b/src/vuln_analysis/functions/cve_file_output.py index c3ea6788..0d856282 100644 --- a/src/vuln_analysis/functions/cve_file_output.py +++ b/src/vuln_analysis/functions/cve_file_output.py @@ -21,7 +21,7 @@ from aiq.data_models.function import FunctionBaseConfig from pydantic import Field -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/functions/cve_generate_vdbs.py b/src/vuln_analysis/functions/cve_generate_vdbs.py index 06c24649..aac6930b 100644 --- a/src/vuln_analysis/functions/cve_generate_vdbs.py +++ b/src/vuln_analysis/functions/cve_generate_vdbs.py @@ -26,7 +26,7 @@ from aiq.data_models.function import FunctionBaseConfig from pydantic import Field -from vuln_analysis.logging.loggers_factory import LoggingFactory, trace_id +from exploit_iq_commons.logging.loggers_factory import LoggingFactory, trace_id logger = LoggingFactory.get_agent_logger(__name__) @@ -56,12 +56,12 @@ class CVEGenerateVDBsToolConfig(FunctionBaseConfig, name="cve_generate_vdbs"): @register_function(config_type=CVEGenerateVDBsToolConfig, framework_wrappers=[LLMFrameworkEnum.LANGCHAIN]) async def generate_vdb(config: CVEGenerateVDBsToolConfig, builder: Builder): - from vuln_analysis.data_models.info import AgentMorpheusInfo - from vuln_analysis.data_models.input import AgentMorpheusEngineInput - from vuln_analysis.data_models.input import AgentMorpheusInput - from vuln_analysis.data_models.input import SourceDocumentsInfo + from exploit_iq_commons.data_models.info import AgentMorpheusInfo + from exploit_iq_commons.data_models.input import AgentMorpheusEngineInput + from exploit_iq_commons.data_models.input import AgentMorpheusInput + from exploit_iq_commons.data_models.input import SourceDocumentsInfo from vuln_analysis.functions.cve_agent import CVEAgentExecutorToolConfig - from vuln_analysis.utils.document_embedding import DocumentEmbedding + from exploit_iq_commons.embedding.document_embedding import DocumentEmbedding from vuln_analysis.utils.full_text_search import FullTextSearch from vuln_analysis.utils.git_utils import get_repo_from_path @@ -202,10 +202,12 @@ async def _arun(message: AgentMorpheusInput) -> AgentMorpheusEngineInput: # Replace ref with specific commit hash for each source info for si in source_infos: try: - repo = get_repo_from_path(config.base_git_dir, si.git_repo) + # Get the sanitized path from the embedder instance + repo_path = embedder.get_repo_path(si) + repo = get_repo_from_path(str(repo_path.parent), repo_path.name) si.ref = repo.commit().hexsha except ValueError as e: - logger.warning("Failed to get commit hash for %s/%s: %s", config.base_git_dir, si.git_repo, e) + logger.warning("Failed to get commit hash for repo defined in %s: %s", si, e) continue except Exception as e: diff --git a/src/vuln_analysis/functions/cve_http_output.py b/src/vuln_analysis/functions/cve_http_output.py index c9764a9b..7a78c7c6 100644 --- a/src/vuln_analysis/functions/cve_http_output.py +++ b/src/vuln_analysis/functions/cve_http_output.py @@ -22,7 +22,7 @@ from aiq.data_models.function import FunctionBaseConfig from pydantic import Field -from vuln_analysis.logging.loggers_factory import LoggingFactory, trace_id +from exploit_iq_commons.logging.loggers_factory import LoggingFactory, trace_id logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/functions/cve_justify.py b/src/vuln_analysis/functions/cve_justify.py index e7f50828..fce509f0 100644 --- a/src/vuln_analysis/functions/cve_justify.py +++ b/src/vuln_analysis/functions/cve_justify.py @@ -23,7 +23,7 @@ from aiq.data_models.function import FunctionBaseConfig from pydantic import Field -from vuln_analysis.logging.loggers_factory import LoggingFactory, trace_id +from exploit_iq_commons.logging.loggers_factory import LoggingFactory, trace_id logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/functions/cve_process_sbom.py b/src/vuln_analysis/functions/cve_process_sbom.py index ee70572e..273081fb 100644 --- a/src/vuln_analysis/functions/cve_process_sbom.py +++ b/src/vuln_analysis/functions/cve_process_sbom.py @@ -23,7 +23,7 @@ from pydantic import Field from pydantic import NonNegativeInt -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) @@ -37,12 +37,12 @@ class CVEProcessSBOMConfig(FunctionBaseConfig, name="cve_process_sbom"): @register_function(config_type=CVEProcessSBOMConfig, framework_wrappers=[LLMFrameworkEnum.LANGCHAIN]) async def cve_process_sbom(config: CVEProcessSBOMConfig, builder: Builder): # pylint: disable=unused-argument - from vuln_analysis.data_models.info import AgentMorpheusInfo - from vuln_analysis.data_models.input import AgentMorpheusEngineInput - from vuln_analysis.data_models.input import FileSBOMInfoInput - from vuln_analysis.data_models.input import HTTPSBOMInfoInput - from vuln_analysis.data_models.input import ManualSBOMInfoInput - from vuln_analysis.data_models.input import SBOMPackage + from exploit_iq_commons.data_models.info import AgentMorpheusInfo + from exploit_iq_commons.data_models.input import AgentMorpheusEngineInput + from exploit_iq_commons.data_models.input import FileSBOMInfoInput + from exploit_iq_commons.data_models.input import HTTPSBOMInfoInput + from exploit_iq_commons.data_models.input import ManualSBOMInfoInput + from exploit_iq_commons.data_models.input import SBOMPackage from vuln_analysis.utils import http_utils from vuln_analysis.utils.http_utils import HTTPMethod diff --git a/src/vuln_analysis/functions/cve_summarize.py b/src/vuln_analysis/functions/cve_summarize.py index af5161a3..9d467e94 100644 --- a/src/vuln_analysis/functions/cve_summarize.py +++ b/src/vuln_analysis/functions/cve_summarize.py @@ -23,9 +23,8 @@ from aiq.data_models.function import FunctionBaseConfig from pydantic import Field -from vuln_analysis.utils.string_utils import get_checklist_item_string - -from vuln_analysis.logging.loggers_factory import LoggingFactory, trace_id +from exploit_iq_commons.logging.loggers_factory import LoggingFactory, trace_id +from exploit_iq_commons.utils.string_utils import get_checklist_item_string logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/register.py b/src/vuln_analysis/register.py index 08852b0c..bf8cfe30 100644 --- a/src/vuln_analysis/register.py +++ b/src/vuln_analysis/register.py @@ -24,8 +24,8 @@ from aiq.data_models.function import FunctionBaseConfig from pydantic import Field -from vuln_analysis.data_models.input import AgentMorpheusEngineInput -from vuln_analysis.data_models.input import AgentMorpheusInput +from exploit_iq_commons.data_models.input import AgentMorpheusEngineInput +from exploit_iq_commons.data_models.input import AgentMorpheusInput from vuln_analysis.data_models.output import AgentMorpheusOutput from vuln_analysis.data_models.state import AgentMorpheusEngineState # pylint: disable=unused-import @@ -48,7 +48,7 @@ # pylint: enable=unused-import from vuln_analysis.utils.llm_engine_utils import postprocess_engine_output, finalize_preprocess_engine_input from vuln_analysis.utils.llm_engine_utils import preprocess_engine_input -from vuln_analysis.logging.loggers_factory import LoggingFactory, trace_id +from exploit_iq_commons.logging.loggers_factory import LoggingFactory, trace_id logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/tools/lexical_full_search.py b/src/vuln_analysis/tools/lexical_full_search.py index f570bc00..d2dc37cd 100644 --- a/src/vuln_analysis/tools/lexical_full_search.py +++ b/src/vuln_analysis/tools/lexical_full_search.py @@ -22,7 +22,7 @@ from aiq.data_models.function import FunctionBaseConfig from pydantic import Field -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/tools/local_vdb.py b/src/vuln_analysis/tools/local_vdb.py index 76b889b0..17c50509 100644 --- a/src/vuln_analysis/tools/local_vdb.py +++ b/src/vuln_analysis/tools/local_vdb.py @@ -24,7 +24,8 @@ from vuln_analysis.data_models.vdb_type import VdbType -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory + logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/tools/serp.py b/src/vuln_analysis/tools/serp.py index cca482c1..052a487c 100644 --- a/src/vuln_analysis/tools/serp.py +++ b/src/vuln_analysis/tools/serp.py @@ -20,7 +20,7 @@ from aiq.cli.register_workflow import register_function from aiq.data_models.function import FunctionBaseConfig -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/tools/transitive_code_search.py b/src/vuln_analysis/tools/transitive_code_search.py index 43a9a5b3..2e3118a6 100644 --- a/src/vuln_analysis/tools/transitive_code_search.py +++ b/src/vuln_analysis/tools/transitive_code_search.py @@ -14,7 +14,6 @@ # limitations under the License. from vuln_analysis.functions.cve_agent import ctx_state -from vuln_analysis.utils.transitive_code_searcher_tool import TransitiveCodeSearcher from aiq.builder.builder import Builder from aiq.builder.framework_enum import LLMFrameworkEnum from aiq.builder.function_info import FunctionInfo @@ -23,13 +22,16 @@ from langchain.docstore.document import Document +from exploit_iq_commons.utils.dep_tree import Ecosystem from vuln_analysis.data_models.state import AgentMorpheusEngineState -from ..utils.chain_of_calls_retriever import ChainOfCallsRetriever -from vuln_analysis.utils.dep_tree import Ecosystem -from vuln_analysis.utils.document_embedding import DocumentEmbedding +from exploit_iq_commons.embedding.document_embedding import DocumentEmbedding +from exploit_iq_commons.embedding.transitive_code_searcher_tool import TransitiveCodeSearcher + +from exploit_iq_commons.utils.chain_of_calls_retriever import ChainOfCallsRetriever from ..utils.function_name_extractor import FunctionNameExtractor -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory + logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/async_http_utils.py b/src/vuln_analysis/utils/async_http_utils.py index 288819b9..030a2d80 100644 --- a/src/vuln_analysis/utils/async_http_utils.py +++ b/src/vuln_analysis/utils/async_http_utils.py @@ -21,7 +21,7 @@ import aiohttp -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/checklist_prompt_generator.py b/src/vuln_analysis/utils/checklist_prompt_generator.py index 0078b1e2..1f254561 100644 --- a/src/vuln_analysis/utils/checklist_prompt_generator.py +++ b/src/vuln_analysis/utils/checklist_prompt_generator.py @@ -22,9 +22,9 @@ from vuln_analysis.utils.prompting import MOD_FEW_SHOT from vuln_analysis.utils.prompting import additional_intel_prompting from vuln_analysis.utils.prompting import get_mod_examples -from vuln_analysis.utils.string_utils import attempt_fix_list_string +from exploit_iq_commons.utils.string_utils import attempt_fix_list_string -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) DEFAULT_CHECKLIST_PROMPT = MOD_FEW_SHOT.format(examples=get_mod_examples()) diff --git a/src/vuln_analysis/utils/clients/first_client.py b/src/vuln_analysis/utils/clients/first_client.py index 1d7f1c44..b2a0e638 100644 --- a/src/vuln_analysis/utils/clients/first_client.py +++ b/src/vuln_analysis/utils/clients/first_client.py @@ -18,11 +18,11 @@ import aiohttp -from vuln_analysis.data_models.cve_intel import CveIntelEpss +from exploit_iq_commons.data_models.cve_intel import CveIntelEpss +from exploit_iq_commons.logging.loggers_factory import LoggingFactory from vuln_analysis.utils.clients.intel_client import IntelClient from vuln_analysis.utils.url_utils import url_join -from vuln_analysis.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/clients/ghsa_client.py b/src/vuln_analysis/utils/clients/ghsa_client.py index a17cf7f9..bf326dfe 100644 --- a/src/vuln_analysis/utils/clients/ghsa_client.py +++ b/src/vuln_analysis/utils/clients/ghsa_client.py @@ -18,11 +18,11 @@ import aiohttp -from vuln_analysis.data_models.cve_intel import CveIntelGhsa +from exploit_iq_commons.data_models.cve_intel import CveIntelGhsa +from exploit_iq_commons.logging.loggers_factory import LoggingFactory from vuln_analysis.utils.clients.intel_client import IntelClient from vuln_analysis.utils.url_utils import url_join -from vuln_analysis.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/clients/nvd_client.py b/src/vuln_analysis/utils/clients/nvd_client.py index 96ee6ed5..c76bc5ca 100644 --- a/src/vuln_analysis/utils/clients/nvd_client.py +++ b/src/vuln_analysis/utils/clients/nvd_client.py @@ -20,7 +20,7 @@ import aiohttp from bs4 import BeautifulSoup -from vuln_analysis.data_models.cve_intel import CveIntelNvd +from exploit_iq_commons.data_models.cve_intel import CveIntelNvd from vuln_analysis.utils.async_http_utils import request_with_retry from vuln_analysis.utils.intel_utils import parse @@ -28,7 +28,7 @@ from vuln_analysis.utils.url_utils import url_join from vuln_analysis.utils.clients.intel_client import IntelClient -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/clients/rhsa_client.py b/src/vuln_analysis/utils/clients/rhsa_client.py index 956d92d0..cd50ed26 100644 --- a/src/vuln_analysis/utils/clients/rhsa_client.py +++ b/src/vuln_analysis/utils/clients/rhsa_client.py @@ -18,11 +18,11 @@ import aiohttp -from vuln_analysis.data_models.cve_intel import CveIntelRhsa +from exploit_iq_commons.data_models.cve_intel import CveIntelRhsa +from exploit_iq_commons.logging.loggers_factory import LoggingFactory from vuln_analysis.utils.clients.intel_client import IntelClient from vuln_analysis.utils.url_utils import url_join -from vuln_analysis.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/clients/ubuntu_client.py b/src/vuln_analysis/utils/clients/ubuntu_client.py index d0964a63..91979955 100644 --- a/src/vuln_analysis/utils/clients/ubuntu_client.py +++ b/src/vuln_analysis/utils/clients/ubuntu_client.py @@ -17,7 +17,7 @@ import aiohttp -from vuln_analysis.data_models.cve_intel import CveIntelUbuntu +from exploit_iq_commons.data_models.cve_intel import CveIntelUbuntu from vuln_analysis.utils.clients.intel_client import IntelClient from vuln_analysis.utils.clients.rhsa_client import logger from vuln_analysis.utils.url_utils import url_join diff --git a/src/vuln_analysis/utils/data_utils.py b/src/vuln_analysis/utils/data_utils.py index 1acab119..70aa7494 100644 --- a/src/vuln_analysis/utils/data_utils.py +++ b/src/vuln_analysis/utils/data_utils.py @@ -23,8 +23,8 @@ from pydantic import BaseModel as BaseModel from pydantic.v1 import BaseModel as BaseModelV1 -from vuln_analysis.data_models.cve_intel import CveIntel -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.data_models.cve_intel import CveIntel +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/error_handling_decorator.py b/src/vuln_analysis/utils/error_handling_decorator.py index f9262579..aa4eaf12 100644 --- a/src/vuln_analysis/utils/error_handling_decorator.py +++ b/src/vuln_analysis/utils/error_handling_decorator.py @@ -1,6 +1,6 @@ import functools -from vuln_analysis.logging.loggers_factory import LoggingFactory, MULTI_LINE_MESSAGE_TRUE +from exploit_iq_commons.logging.loggers_factory import LoggingFactory, MULTI_LINE_MESSAGE_TRUE logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/full_text_search.py b/src/vuln_analysis/utils/full_text_search.py index bb5c9658..eada7d0d 100644 --- a/src/vuln_analysis/utils/full_text_search.py +++ b/src/vuln_analysis/utils/full_text_search.py @@ -28,7 +28,7 @@ from tantivy import SchemaBuilder from tqdm import tqdm -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) variable_pattern = re.compile(r"([A-Z][a-z]+|[a-z]+|[A-Z]+(?=[A-Z]|$))") diff --git a/src/vuln_analysis/utils/function_name_extractor.py b/src/vuln_analysis/utils/function_name_extractor.py index ca7799a1..c79f16ed 100644 --- a/src/vuln_analysis/utils/function_name_extractor.py +++ b/src/vuln_analysis/utils/function_name_extractor.py @@ -1,7 +1,7 @@ import os import re -from vuln_analysis.utils.chain_of_calls_retriever import ChainOfCallsRetriever +from exploit_iq_commons.utils.chain_of_calls_retriever import ChainOfCallsRetriever def traverse_all_parameters(function_ending_index_end, function_prefix_index_end, function_string): diff --git a/src/vuln_analysis/utils/git_utils.py b/src/vuln_analysis/utils/git_utils.py index 87ede34a..36c4a7ca 100644 --- a/src/vuln_analysis/utils/git_utils.py +++ b/src/vuln_analysis/utils/git_utils.py @@ -21,6 +21,12 @@ from git import Repo +def sanitize_git_url_for_path(git_url: str) -> str: + """Sanitizes a git repo URL to create a valid filesystem path component.""" + # Example: 'https://github.com/some/repo' -> 'https.github.com.some.repo' + return git_url.replace('//', '.').replace('/', '.').replace(':', '') + + def get_repo_from_path(base_dir: str, git_repo: str = ".git") -> Repo: """ Utility function for getting GitPython `Repo` object representing a Git repository. diff --git a/src/vuln_analysis/utils/http_utils.py b/src/vuln_analysis/utils/http_utils.py index cae6ece3..3b298253 100644 --- a/src/vuln_analysis/utils/http_utils.py +++ b/src/vuln_analysis/utils/http_utils.py @@ -22,7 +22,7 @@ import requests import urllib3 -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/intel_retriever.py b/src/vuln_analysis/utils/intel_retriever.py index d782c3a0..c2c20d23 100644 --- a/src/vuln_analysis/utils/intel_retriever.py +++ b/src/vuln_analysis/utils/intel_retriever.py @@ -32,7 +32,7 @@ from .clients.ubuntu_client import UbuntuClient from ..data_models.plugin import PluginConfig, IntelPluginSchema -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/intel_utils.py b/src/vuln_analysis/utils/intel_utils.py index 81cdfb9d..ef7e7efb 100644 --- a/src/vuln_analysis/utils/intel_utils.py +++ b/src/vuln_analysis/utils/intel_utils.py @@ -18,7 +18,7 @@ from pydpkg import Dpkg from pydpkg.exceptions import DpkgVersionError -from vuln_analysis.data_models.cve_intel import CveIntelNvd +from exploit_iq_commons.data_models.cve_intel import CveIntelNvd def update_version(incoming_version, current_version, compare): diff --git a/src/vuln_analysis/utils/justification_parser.py b/src/vuln_analysis/utils/justification_parser.py index 0711ac9f..08b3c447 100644 --- a/src/vuln_analysis/utils/justification_parser.py +++ b/src/vuln_analysis/utils/justification_parser.py @@ -16,7 +16,7 @@ import logging from textwrap import dedent -from vuln_analysis.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/llm_engine_utils.py b/src/vuln_analysis/utils/llm_engine_utils.py index 87735f6b..96f957c9 100644 --- a/src/vuln_analysis/utils/llm_engine_utils.py +++ b/src/vuln_analysis/utils/llm_engine_utils.py @@ -17,9 +17,9 @@ from ordered_set import OrderedSet -from vuln_analysis.data_models.dependencies import VulnerableDependencies -from vuln_analysis.data_models.input import AgentMorpheusEngineInput -from vuln_analysis.data_models.input import AgentMorpheusInput +from exploit_iq_commons.data_models.dependencies import VulnerableDependencies +from exploit_iq_commons.data_models.input import AgentMorpheusEngineInput +from exploit_iq_commons.data_models.input import AgentMorpheusInput from vuln_analysis.data_models.output import AgentMorpheusEngineOutput from vuln_analysis.data_models.output import AgentMorpheusOutput from vuln_analysis.data_models.output import ChecklistItemOutput @@ -29,7 +29,7 @@ from vuln_analysis.functions.cve_calculate_intel_score import CVECalculateIntelScoreConfig -from vuln_analysis.logging.loggers_factory import LoggingFactory, trace_id +from exploit_iq_commons.logging.loggers_factory import LoggingFactory, trace_id logger = LoggingFactory.get_agent_logger(__name__) diff --git a/src/vuln_analysis/utils/vulnerable_dependency_checker.py b/src/vuln_analysis/utils/vulnerable_dependency_checker.py index ac477f8e..33d30ba7 100644 --- a/src/vuln_analysis/utils/vulnerable_dependency_checker.py +++ b/src/vuln_analysis/utils/vulnerable_dependency_checker.py @@ -26,13 +26,13 @@ from tqdm import tqdm from univers import versions -from vuln_analysis.data_models.cve_intel import CveIntelNvd -from vuln_analysis.data_models.dependencies import DependencyPackage +from exploit_iq_commons.data_models.cve_intel import CveIntelNvd +from exploit_iq_commons.data_models.dependencies import DependencyPackage +from exploit_iq_commons.logging.loggers_factory import LoggingFactory +from exploit_iq_commons.utils.string_utils import package_names_match from vuln_analysis.utils.clients.intel_client import IntelClient -from vuln_analysis.utils.string_utils import package_names_match from vuln_analysis.utils.url_utils import url_join -from vuln_analysis.logging.loggers_factory import LoggingFactory logger = LoggingFactory.get_agent_logger(__name__) REQUESTS_TIMEOUT = 2 diff --git a/tests/test_java_script_extended.py b/tests/test_java_script_extended.py index 7c7fd430..333461b2 100644 --- a/tests/test_java_script_extended.py +++ b/tests/test_java_script_extended.py @@ -15,7 +15,7 @@ import pytest -from vuln_analysis.utils.js_extended_parser import ExtendedJavaScriptSegmenter +from exploit_iq_commons.embedding.js_extended_parser import ExtendedJavaScriptSegmenter TEST_CASES = [ {